fix: prevent asset conflicts between React and Grid.js versions

Add coexistence checks to all enqueue methods to prevent loading
both React and Grid.js assets simultaneously.

Changes:
- ReactAdmin.php: Only enqueue React assets when ?react=1
- Init.php: Skip Grid.js when React active on admin pages
- Form.php, Coupon.php, Access.php: Restore classic assets when ?react=0
- Customer.php, Product.php, License.php: Add coexistence checks

Now the toggle between Classic and React versions works correctly.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
dwindown
2026-04-18 17:02:14 +07:00
parent bd9cdac02e
commit e8fbfb14c1
74973 changed files with 6658406 additions and 71 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -3,11 +3,6 @@
.formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;right:50%;position:absolute;top:50%;transform:translate(50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;right:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:left}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center}
.formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px}
.formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:right}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0}
.formipay-data-table-empty,.formipay-data-table-loading{padding:40px;text-align:center}.formipay-data-table{margin-top:20px}.formipay-data-table thead th{font-weight:600;padding:12px 10px}.formipay-data-table tbody td{padding:10px}.formipay-data-table tbody tr.is-clickable{cursor:pointer}.formipay-data-table tbody tr.is-clickable:hover{background-color:#f0f0f1}
.formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px}
.formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:right}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-right:4px}
.formipay-field-item{background:#fff;border:1px solid #dcdcde;border-radius:4px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-field-item:hover{border-color:#a7aaad;box-shadow:0 2px 4px rgba(0,0,0,.05)}.formipay-field-item.is-selected{border-color:#2271b1;box-shadow:0 0 0 2px rgba(34,113,177,.2)}.formipay-field-header{align-items:center;background:#f6f7f7;border-bottom:1px solid #e0e0e0;border-radius:4px 4px 0 0;display:flex;justify-content:space-between;padding:10px 14px}.formipay-field-info{align-items:center;display:flex;gap:10px}.field-type-badge{background:#e0e0e0;border-radius:2px;color:#1e1e1e;display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;text-transform:uppercase}.field-id{color:#646970;font-family:monospace;font-size:11px}.formipay-field-actions{display:flex;gap:4px}.formipay-field-actions .button-icon{align-items:center;background:transparent;border:none;border-radius:2px;cursor:pointer;display:flex;height:28px;justify-content:center;padding:0;transition:background .2s;width:28px}.formipay-field-actions .button-icon:hover:not(:disabled){background:#e0e0e0}.formipay-field-actions .button-icon:disabled{cursor:not-allowed;opacity:.4}.formipay-field-actions .button-icon svg{fill:#1e1e1e}.formipay-field-actions .button-danger:hover svg{fill:#d63638}.formipay-field-content{padding:14px}.field-label-row{align-items:center;display:flex;gap:10px;margin-bottom:8px}.field-label-row strong{color:#1e1e1e;font-size:14px}.field-label-row em{color:#a7aaad;font-style:italic}.required-badge{background:#f6f7f7;border-radius:2px;color:#d63638;display:inline-block;font-size:10px;font-weight:600;padding:2px 6px}.field-description{color:#646970;font-size:12px;line-height:1.4;margin:0 0 8px}.field-options-preview{background:#f6f7f7;border-radius:2px;margin-bottom:8px;padding:8px}.field-options-preview small{color:#646970;font-size:11px}.field-meta{display:flex;flex-wrap:wrap;gap:12px}.field-meta .meta-item{color:#646970;font-size:11px}
.formipay-form-canvas{background:#f6f7f7;display:flex;flex:1;flex-direction:column;min-width:0}.formipay-canvas-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:16px 20px}.formipay-canvas-header h3{color:#1e1e1e;font-size:14px;font-weight:600;margin:0}.field-count{color:#646970;font-size:12px}.formipay-canvas-area{flex:1;overflow-y:auto;padding:20px}.formipay-canvas-area.is-empty{align-items:center;display:flex;justify-content:center}.formipay-empty-state{color:#646970;text-align:center}.formipay-empty-state svg{display:block;fill:#c3c4c7;margin:0 auto 16px}.formipay-empty-state p{font-size:14px;margin:0}.formipay-fields-list{display:flex;flex-direction:column;gap:12px}
.formipay-field-palette{background:#fff;border-left:1px solid #e0e0e0;max-height:calc(100vh - 100px);overflow-y:auto;padding:16px}.formipay-field-palette h3{color:#1e1e1e;font-size:14px;font-weight:600;margin:0 0 16px}.formipay-palette-category{margin-bottom:20px}.formipay-palette-category h4{color:#646970;font-size:12px;font-weight:600;margin:0 0 8px;text-transform:uppercase}.formipay-palette-items{display:grid;gap:8px;grid-template-columns:repeat(2,1fr)}.formipay-palette-item{align-items:center;background:#f0f0f1;border:1px solid #dcdcde;border-radius:4px;cursor:grab;display:flex;gap:8px;padding:10px 12px;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-palette-item:hover{background:#fff;border-color:#2271b1;box-shadow:0 2px 4px rgba(0,0,0,.1)}.formipay-palette-item:active{cursor:grabbing}.formipay-palette-item svg{fill:#1e1e1e;height:18px;width:18px}.formipay-palette-item span{color:#1e1e1e;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.formipay-field-settings-panel{background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;max-height:calc(100vh - 100px);width:320px}.formipay-settings-header{align-items:center;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:16px}.formipay-settings-header h3{align-items:center;display:flex;font-size:14px;font-weight:600;gap:8px;margin:0}.formipay-settings-header .field-type-badge{background:#e0e0e0;border-radius:2px;font-size:10px;font-weight:600;padding:2px 6px;text-transform:uppercase}.formipay-settings-content{flex:1;overflow-y:auto;padding:16px}.formipay-settings-content .components-base-control{margin-bottom:16px}.formipay-settings-content .components-base-control:last-child{margin-bottom:0}
.formipay-preview-form{display:flex;flex-direction:column;gap:16px}.formipay-field-preview{display:flex;flex-direction:column;gap:6px}.formipay-field-label{color:#1e1e1e;display:block;font-size:13px;font-weight:500}.formipay-field-label .required{color:#d63638;margin-right:2px}.formipay-input,.formipay-select,.formipay-textarea{background:#fff;border:1px solid #8c8f94;border-radius:2px;color:#1e1e1e;font-size:13px;padding:8px 12px;width:100%}.formipay-input:focus,.formipay-select:focus,.formipay-textarea:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.formipay-textarea{min-height:80px;resize:vertical}.formipay-checkbox-group,.formipay-radio-group{display:flex;flex-direction:column;gap:8px}.formipay-checkbox-label,.formipay-radio-label{align-items:center;color:#1e1e1e;cursor:not-allowed;display:flex;font-size:13px;gap:8px}.formipay-field-description{color:#646970;font-size:12px;margin:0}.formipay-divider{border:none;border-top:1px solid #c3c4c7;margin:8px 0}.formipay-page-break{background:#f6f7f7;border:1px dashed #c3c4c7;border-radius:2px;color:#646970;font-size:12px;padding:12px;text-align:center}
.formipay-form-preview{background:#fff;border-left:1px solid #e0e0e0;display:flex;flex-direction:column;width:320px}.formipay-preview-header{background:#f6f7f7;border-bottom:1px solid #e0e0e0;padding:12px 16px}.formipay-preview-header h4{color:#1e1e1e;font-size:13px;font-weight:600;margin:0}.formipay-preview-content{flex:1;overflow-y:auto;padding:16px}.formipay-preview-content.is-empty{align-items:center;display:flex;height:200px;justify-content:center}.formipay-preview-content.is-empty p{color:#646970;font-size:13px;margin:0}
.formipay-form-builder{display:flex;flex-direction:column;height:calc(100vh - 32px)}.formipay-builder-toolbar{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:12px 20px}.formipay-builder-toolbar h2{font-size:18px;font-weight:600;margin:0}.formipay-builder-actions{display:flex;gap:8px}.formipay-builder-content{display:flex;flex:1;overflow:hidden}

View File

@@ -1 +1 @@
<?php return array('dependencies' => array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/chevron-down', 'wp-icons/build/chevron-up', 'wp-icons/build/eye-closed', 'wp-icons/build/eye-opened', 'wp-icons/build/list', 'wp-icons/build/message', 'wp-icons/build/minus', 'wp-icons/build/plus', 'wp-icons/build/trash', 'wp-icons/build/visible'), 'version' => '44e6bb755959bfd53a19');
<?php return array('dependencies' => array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/eye-closed', 'wp-icons/build/eye-opened', 'wp-icons/build/list', 'wp-icons/build/message', 'wp-icons/build/minus', 'wp-icons/build/plus', 'wp-icons/build/trash', 'wp-icons/build/visible'), 'version' => 'a62306d2a4d673c06ceb');

View File

@@ -3,11 +3,6 @@
.formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;left:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:right}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center}
.formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px}
.formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:left}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0}
.formipay-data-table-empty,.formipay-data-table-loading{padding:40px;text-align:center}.formipay-data-table{margin-top:20px}.formipay-data-table thead th{font-weight:600;padding:12px 10px}.formipay-data-table tbody td{padding:10px}.formipay-data-table tbody tr.is-clickable{cursor:pointer}.formipay-data-table tbody tr.is-clickable:hover{background-color:#f0f0f1}
.formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px}
.formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:left}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-left:4px}
.formipay-field-item{background:#fff;border:1px solid #dcdcde;border-radius:4px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-field-item:hover{border-color:#a7aaad;box-shadow:0 2px 4px rgba(0,0,0,.05)}.formipay-field-item.is-selected{border-color:#2271b1;box-shadow:0 0 0 2px rgba(34,113,177,.2)}.formipay-field-header{align-items:center;background:#f6f7f7;border-bottom:1px solid #e0e0e0;border-radius:4px 4px 0 0;display:flex;justify-content:space-between;padding:10px 14px}.formipay-field-info{align-items:center;display:flex;gap:10px}.field-type-badge{background:#e0e0e0;border-radius:2px;color:#1e1e1e;display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;text-transform:uppercase}.field-id{color:#646970;font-family:monospace;font-size:11px}.formipay-field-actions{display:flex;gap:4px}.formipay-field-actions .button-icon{align-items:center;background:transparent;border:none;border-radius:2px;cursor:pointer;display:flex;height:28px;justify-content:center;padding:0;transition:background .2s;width:28px}.formipay-field-actions .button-icon:hover:not(:disabled){background:#e0e0e0}.formipay-field-actions .button-icon:disabled{cursor:not-allowed;opacity:.4}.formipay-field-actions .button-icon svg{fill:#1e1e1e}.formipay-field-actions .button-danger:hover svg{fill:#d63638}.formipay-field-content{padding:14px}.field-label-row{align-items:center;display:flex;gap:10px;margin-bottom:8px}.field-label-row strong{color:#1e1e1e;font-size:14px}.field-label-row em{color:#a7aaad;font-style:italic}.required-badge{background:#f6f7f7;border-radius:2px;color:#d63638;display:inline-block;font-size:10px;font-weight:600;padding:2px 6px}.field-description{color:#646970;font-size:12px;line-height:1.4;margin:0 0 8px}.field-options-preview{background:#f6f7f7;border-radius:2px;margin-bottom:8px;padding:8px}.field-options-preview small{color:#646970;font-size:11px}.field-meta{display:flex;flex-wrap:wrap;gap:12px}.field-meta .meta-item{color:#646970;font-size:11px}
.formipay-form-canvas{background:#f6f7f7;display:flex;flex:1;flex-direction:column;min-width:0}.formipay-canvas-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:16px 20px}.formipay-canvas-header h3{color:#1e1e1e;font-size:14px;font-weight:600;margin:0}.field-count{color:#646970;font-size:12px}.formipay-canvas-area{flex:1;overflow-y:auto;padding:20px}.formipay-canvas-area.is-empty{align-items:center;display:flex;justify-content:center}.formipay-empty-state{color:#646970;text-align:center}.formipay-empty-state svg{display:block;fill:#c3c4c7;margin:0 auto 16px}.formipay-empty-state p{font-size:14px;margin:0}.formipay-fields-list{display:flex;flex-direction:column;gap:12px}
.formipay-field-palette{background:#fff;border-right:1px solid #e0e0e0;max-height:calc(100vh - 100px);overflow-y:auto;padding:16px}.formipay-field-palette h3{color:#1e1e1e;font-size:14px;font-weight:600;margin:0 0 16px}.formipay-palette-category{margin-bottom:20px}.formipay-palette-category h4{color:#646970;font-size:12px;font-weight:600;margin:0 0 8px;text-transform:uppercase}.formipay-palette-items{display:grid;gap:8px;grid-template-columns:repeat(2,1fr)}.formipay-palette-item{align-items:center;background:#f0f0f1;border:1px solid #dcdcde;border-radius:4px;cursor:grab;display:flex;gap:8px;padding:10px 12px;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-palette-item:hover{background:#fff;border-color:#2271b1;box-shadow:0 2px 4px rgba(0,0,0,.1)}.formipay-palette-item:active{cursor:grabbing}.formipay-palette-item svg{fill:#1e1e1e;height:18px;width:18px}.formipay-palette-item span{color:#1e1e1e;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.formipay-field-settings-panel{background:#fff;border-left:1px solid #e0e0e0;display:flex;flex-direction:column;max-height:calc(100vh - 100px);width:320px}.formipay-settings-header{align-items:center;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:16px}.formipay-settings-header h3{align-items:center;display:flex;font-size:14px;font-weight:600;gap:8px;margin:0}.formipay-settings-header .field-type-badge{background:#e0e0e0;border-radius:2px;font-size:10px;font-weight:600;padding:2px 6px;text-transform:uppercase}.formipay-settings-content{flex:1;overflow-y:auto;padding:16px}.formipay-settings-content .components-base-control{margin-bottom:16px}.formipay-settings-content .components-base-control:last-child{margin-bottom:0}
.formipay-preview-form{display:flex;flex-direction:column;gap:16px}.formipay-field-preview{display:flex;flex-direction:column;gap:6px}.formipay-field-label{color:#1e1e1e;display:block;font-size:13px;font-weight:500}.formipay-field-label .required{color:#d63638;margin-left:2px}.formipay-input,.formipay-select,.formipay-textarea{background:#fff;border:1px solid #8c8f94;border-radius:2px;color:#1e1e1e;font-size:13px;padding:8px 12px;width:100%}.formipay-input:focus,.formipay-select:focus,.formipay-textarea:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.formipay-textarea{min-height:80px;resize:vertical}.formipay-checkbox-group,.formipay-radio-group{display:flex;flex-direction:column;gap:8px}.formipay-checkbox-label,.formipay-radio-label{align-items:center;color:#1e1e1e;cursor:not-allowed;display:flex;font-size:13px;gap:8px}.formipay-field-description{color:#646970;font-size:12px;margin:0}.formipay-divider{border:none;border-top:1px solid #c3c4c7;margin:8px 0}.formipay-page-break{background:#f6f7f7;border:1px dashed #c3c4c7;border-radius:2px;color:#646970;font-size:12px;padding:12px;text-align:center}
.formipay-form-preview{background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;width:320px}.formipay-preview-header{background:#f6f7f7;border-bottom:1px solid #e0e0e0;padding:12px 16px}.formipay-preview-header h4{color:#1e1e1e;font-size:13px;font-weight:600;margin:0}.formipay-preview-content{flex:1;overflow-y:auto;padding:16px}.formipay-preview-content.is-empty{align-items:center;display:flex;height:200px;justify-content:center}.formipay-preview-content.is-empty p{color:#646970;font-size:13px;margin:0}
.formipay-form-builder{display:flex;flex-direction:column;height:calc(100vh - 32px)}.formipay-builder-toolbar{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;padding:12px 20px}.formipay-builder-toolbar h2{font-size:18px;font-weight:600;margin:0}.formipay-builder-actions{display:flex;gap:8px}.formipay-builder-content{display:flex;flex:1;overflow:hidden}

File diff suppressed because one or more lines are too long

View File

@@ -97,11 +97,16 @@ class Access {
}
public function enqueue_admin() {
// Assets now handled by ReactAdmin class
return;
global $current_screen;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
$screen = get_current_screen();
$screen = get_current_screen();
// Check that we are on the 'Checker' post editor screen

View File

@@ -26,6 +26,12 @@ class ReactAdmin {
return;
}
// Check coexistence mode - only load React when ?react=1 or option is set
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ( ! $use_react ) {
return; // Classic mode - don't load React assets
}
// Enqueue React build assets
$build_dir = FORMIPAY_PATH . 'build';
$build_url = FORMIPAY_URL . 'build';

View File

@@ -107,10 +107,13 @@ class Coupon {
}
public function enqueue_admin() {
// Assets now handled by ReactAdmin class
return;
global $current_screen;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
if($current_screen->id == 'formipay_page_formipay-coupons') {

View File

@@ -185,6 +185,12 @@ class Customer {
global $current_screen;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
if($current_screen->id == 'formipay_page_formipay-customers') {
$customer_id = intval(filter_input(INPUT_GET, 'customer_id', FILTER_SANITIZE_STRING));

View File

@@ -1257,10 +1257,14 @@ class Form {
}
public function enqueue_admin() {
// Assets now handled by ReactAdmin class
return;
global $current_screen, $post;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
// Check that we are on the 'Checker' post editor screen
if ( $current_screen->post_type === 'formipay-form' && $current_screen->base === 'post' ) {

View File

@@ -80,6 +80,18 @@ class Init {
public function enqueue() {
global $current_screen;
// Check coexistence mode - if React is active, don't load classic shared assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
$is_formipay_screen = strpos($current_screen->id, 'formipay') !== false;
// Don't load classic Grid.js/shared assets when React is active on admin pages
if ($use_react && $is_formipay_screen && $current_screen->base !== 'post') {
// Still load SweetAlert2 for React mode (needed for modals)
wp_enqueue_style( 'sweetalert2', FORMIPAY_URL . 'vendor/SweetAlert2/sweetalert2.min.css', [], '11.14.4', 'all');
wp_enqueue_script( 'sweetalert2', FORMIPAY_URL . 'vendor/SweetAlert2/sweetalert2.min.js', ['jquery'], '11.14.4', true);
return;
}
$formipayCPTs = [
'formipay-form' => __( 'Edit Form', 'formipay' ),
'formipay-product' => __( 'Edit Product', 'formipay' ),

View File

@@ -85,6 +85,13 @@ class License {
/** Enqueue admin assets for Licenses page */
public function enqueue() {
global $current_screen; if (!$current_screen) return;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
if ($current_screen->id === 'formipay_page_formipay-licenses') {
wp_enqueue_style('page-licenses', FORMIPAY_URL . 'admin/assets/css/admin-licenses.css', [], FORMIPAY_VERSION, 'all');
wp_enqueue_script('page-licenses', FORMIPAY_URL . 'admin/assets/js/admin-licenses.js', ['jquery', 'gridjs'], FORMIPAY_VERSION, true);

View File

@@ -665,8 +665,17 @@ class Order {
}
public function enqueue() {
// Assets now handled by ReactAdmin class
return;
global $current_screen;
if (!$current_screen) return;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
// Classic Grid.js assets would be loaded here
// (Original enqueue code was commented out, may need restoration)
}
public function formipay_get_all_forms() {

View File

@@ -106,10 +106,13 @@ class Product {
}
public function enqueue_admin() {
// Assets now handled by ReactAdmin class
return;
global $current_screen;
// Check coexistence mode - if React is active, don't load classic assets
$use_react = isset($_GET['react']) || get_option('formipay_use_react_admin', false);
if ($use_react) {
return;
}
if($current_screen->id == 'formipay_page_formipay-products') {

1
node_modules/.bin/acorn generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../acorn/bin/acorn

1
node_modules/.bin/ansi-html generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../ansi-html/bin/ansi-html

1
node_modules/.bin/autoprefixer generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../autoprefixer/bin/autoprefixer

1
node_modules/.bin/baseline-browser-mapping generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../baseline-browser-mapping/dist/cli.cjs

1
node_modules/.bin/browsers generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../@puppeteer/browsers/lib/cjs/main-cli.js

1
node_modules/.bin/browserslist generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../browserslist/cli.js

1
node_modules/.bin/check-node-version generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../check-node-version/bin.js

1
node_modules/.bin/chrome-debug generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../lighthouse/core/scripts/manual-chrome-launcher.js

1
node_modules/.bin/create-jest generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../create-jest/bin/create-jest.js

1
node_modules/.bin/cssesc generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../cssesc/bin/cssesc

1
node_modules/.bin/envinfo generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../envinfo/dist/cli.js

1
node_modules/.bin/escodegen generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../escodegen/bin/escodegen.js

1
node_modules/.bin/esgenerate generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../escodegen/bin/esgenerate.js

1
node_modules/.bin/eslint generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../eslint/bin/eslint.js

1
node_modules/.bin/eslint-config-prettier generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../eslint-config-prettier/bin/cli.js

1
node_modules/.bin/esparse generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../esprima/bin/esparse.js

1
node_modules/.bin/esvalidate generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../esprima/bin/esvalidate.js

1
node_modules/.bin/extract-zip generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../extract-zip/cli.js

1
node_modules/.bin/find-process generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../find-process/bin/find-process.js

1
node_modules/.bin/flat generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../flat/cli.js

1
node_modules/.bin/import-local-fixture generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../import-local/fixtures/cli.js

1
node_modules/.bin/is-docker generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../is-docker/cli.js

1
node_modules/.bin/jest generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../jest/bin/jest.js

1
node_modules/.bin/js-yaml generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../js-yaml/bin/js-yaml.js

1
node_modules/.bin/jsesc generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../jsesc/bin/jsesc

1
node_modules/.bin/json5 generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../json5/lib/cli.js

1
node_modules/.bin/lighthouse generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../lighthouse/cli/index.js

1
node_modules/.bin/loose-envify generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../loose-envify/cli.js

1
node_modules/.bin/markdown-it generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../markdown-it/bin/markdown-it.js

1
node_modules/.bin/markdownlint generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../markdownlint-cli/markdownlint.js

1
node_modules/.bin/mime generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../mime/cli.js

1
node_modules/.bin/multicast-dns generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../multicast-dns/cli.js

1
node_modules/.bin/nanoid generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../nanoid/bin/nanoid.cjs

1
node_modules/.bin/npm-packlist generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../npm-packlist/bin/index.js

1
node_modules/.bin/npmPkgJsonLint generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../npm-package-json-lint/dist/cli.js

1
node_modules/.bin/opener generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../opener/bin/opener-bin.js

1
node_modules/.bin/parser generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../@babel/parser/bin/babel-parser.js

1
node_modules/.bin/playwright generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../@playwright/test/cli.js

1
node_modules/.bin/playwright-core generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../playwright-core/cli.js

1
node_modules/.bin/pot-to-php generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../@wordpress/i18n/tools/pot-to-php.js

1
node_modules/.bin/prettier generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../prettier/bin/prettier.cjs

1
node_modules/.bin/print-chrome-path generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../chrome-launcher/bin/print-chrome-path.js

1
node_modules/.bin/regjsparser generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../regjsparser/bin/parser

1
node_modules/.bin/resolve generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../resolve/bin/resolve

1
node_modules/.bin/rimraf generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../rimraf/bin.js

1
node_modules/.bin/rtlcss generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../rtlcss/bin/rtlcss.js

1
node_modules/.bin/run-con generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../run-con/cli.js

1
node_modules/.bin/sass generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../sass/sass.js

1
node_modules/.bin/semver generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../semver/bin/semver.js

1
node_modules/.bin/smokehouse generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../lighthouse/cli/test/smokehouse/frontends/smokehouse-bin.js

1
node_modules/.bin/stylelint generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../stylelint/bin/stylelint.js

1
node_modules/.bin/svgo generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../svgo/bin/svgo

1
node_modules/.bin/terser generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../terser/bin/terser

1
node_modules/.bin/tree-kill generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../tree-kill/cli.js

1
node_modules/.bin/tsc generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../typescript/bin/tsc

1
node_modules/.bin/tsserver generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../typescript/bin/tsserver

1
node_modules/.bin/update-browserslist-db generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../update-browserslist-db/cli.js

1
node_modules/.bin/uuid generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../uuid/dist/bin/uuid

1
node_modules/.bin/wait-on generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../wait-on/bin/wait-on

1
node_modules/.bin/webpack generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../webpack/bin/webpack.js

1
node_modules/.bin/webpack-bundle-analyzer generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../webpack-bundle-analyzer/lib/bin/analyzer.js

1
node_modules/.bin/webpack-cli generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../webpack-cli/bin/cli.js

1
node_modules/.bin/webpack-dev-server generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../webpack-dev-server/bin/webpack-dev-server.js

1
node_modules/.bin/which generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../which/bin/which

1
node_modules/.bin/wp-scripts generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../@wordpress/scripts/bin/wp-scripts.js

Some files were not shown because too many files have changed in this diff Show More