@nextlyhq/plugin-form-builder 0.0.2-alpha.4 → 0.0.2-alpha.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +4 -5
  2. package/dist/admin/index.d.ts +123 -331
  3. package/dist/admin/index.js +3809 -3419
  4. package/dist/admin/index.js.map +1 -1
  5. package/dist/chunk-WVI7N3QO.js +559 -0
  6. package/dist/chunk-WVI7N3QO.js.map +1 -0
  7. package/dist/index.d.ts +12 -11
  8. package/dist/index.js +555 -661
  9. package/dist/index.js.map +1 -1
  10. package/dist/{index-C0kBvYjm.d.ts → types-r8uBeB0u.d.ts} +126 -125
  11. package/package.json +28 -30
  12. package/dist/CheckboxFieldEditor-K4T6QX52.js +0 -121
  13. package/dist/CheckboxFieldEditor-K4T6QX52.js.map +0 -1
  14. package/dist/DateFieldEditor-JFJFAVOH.js +0 -187
  15. package/dist/DateFieldEditor-JFJFAVOH.js.map +0 -1
  16. package/dist/EmailFieldEditor-MMOXXL7P.js +0 -138
  17. package/dist/EmailFieldEditor-MMOXXL7P.js.map +0 -1
  18. package/dist/NumberFieldEditor-UISAYR6Z.js +0 -175
  19. package/dist/NumberFieldEditor-UISAYR6Z.js.map +0 -1
  20. package/dist/RadioFieldEditor-6UQFH4WT.js +0 -165
  21. package/dist/RadioFieldEditor-6UQFH4WT.js.map +0 -1
  22. package/dist/SelectFieldEditor-PSO4KHV4.js +0 -213
  23. package/dist/SelectFieldEditor-PSO4KHV4.js.map +0 -1
  24. package/dist/TextFieldEditor-5EU64EA5.js +0 -187
  25. package/dist/TextFieldEditor-5EU64EA5.js.map +0 -1
  26. package/dist/TextareaFieldEditor-773G3LNM.js +0 -190
  27. package/dist/TextareaFieldEditor-773G3LNM.js.map +0 -1
  28. package/dist/admin/index.css +0 -934
  29. package/dist/admin/index.css.map +0 -1
  30. package/dist/chunk-ABNZFTQK.js +0 -586
  31. package/dist/chunk-ABNZFTQK.js.map +0 -1
  32. package/dist/chunk-XTCEPJ7B.js +0 -256
  33. package/dist/chunk-XTCEPJ7B.js.map +0 -1
  34. package/dist/components/index.d.ts +0 -3
  35. package/dist/components/index.js +0 -9
  36. package/dist/components/index.js.map +0 -1
  37. package/dist/styles/form-builder.css +0 -1150
  38. package/dist/styles/submissions-filter.css +0 -75
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/styles/form-builder.css"],"sourcesContent":["/**\n * Form Builder Styles\n *\n * Styles for the visual drag-and-drop form builder UI.\n * Layout is now driven by Tailwind utility classes in:\n * - FormBuilderView.tsx (page layout, header, sidebar shell, main tabs)\n * - FieldLibrary.tsx (accordion palette)\n * - FormCanvas.tsx (field rows, empty state)\n *\n * This file retains only:\n * 1. CSS custom properties + dark mode overrides\n * 2. FieldEditor component styles (.field-editor-*)\n * 3. FormSettingsTab component styles (.form-settings-*)\n * 4. FormNotificationsTab component styles (.form-notifications-*, .form-notification-*)\n * 5. Integration modal / card styles (.form-integration-*)\n *\n * @module styles/form-builder\n * @since 0.1.0\n */\n\n/* ============================================================================\n CSS Custom Properties\n ============================================================================ */\n\n.form-builder-view {\n --fb-primary: hsl(var(--primary));\n --fb-primary-hover: hsl(var(--primary) / 0.9);\n --fb-primary-light: hsl(var(--primary) / 0.1);\n --fb-danger: #ef4444;\n --fb-danger-hover: #dc2626;\n --fb-success: #22c55e;\n --fb-warning: #f59e0b;\n\n --fb-bg: #ffffff;\n --fb-bg-muted: #f8fafc;\n --fb-bg-hover: #f1f5f9;\n --fb-border: #e2e8f0;\n --fb-border-focus: hsl(var(--primary));\n\n --fb-text: #1e293b;\n --fb-text-muted: #64748b;\n --fb-text-light: #94a3b8;\n\n --fb-radius-sm: 0.375rem; /* 6px */\n --fb-radius-md: 0.375rem; /* 6px */\n --fb-radius-lg: 0.375rem; /* 6px */\n\n --fb-shadow: none;\n --fb-shadow-md: none;\n --fb-shadow-lg: none;\n}\n\n/* ============================================================================\n Dark Mode Overrides\n ============================================================================ */\n\n.dark .form-builder-view,\n[data-theme=\"dark\"] .form-builder-view {\n --fb-bg: hsl(222.2, 47.4%, 11.2%);\n --fb-bg-muted: hsl(217.2, 32.6%, 17.5%);\n --fb-bg-hover: hsl(215.4, 16.3%, 25.9%);\n --fb-border: hsl(217.2, 32.6%, 17.5%);\n\n --fb-text: hsl(210, 40%, 98%);\n --fb-text-muted: hsl(215, 20.2%, 65.1%);\n --fb-text-light: hsl(215.3, 25%, 36.7%);\n}\n\n/* ============================================================================\n Field Editor (Right Panel)\n ============================================================================ */\n\n.field-editor {\n padding: 16px;\n}\n\n.field-editor-header {\n margin-bottom: 20px;\n}\n\n.field-editor-title {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0 0 4px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.field-editor-type-badge {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--fb-primary);\n background: var(--fb-primary-light);\n padding: 2px 8px;\n border-radius: 9999px;\n}\n\n.field-editor-actions {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.field-editor-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n font-size: 0.75rem;\n font-weight: 500;\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n background: var(--fb-bg);\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--fb-text-muted);\n}\n\n.field-editor-action-btn:hover {\n border-color: var(--fb-text-light);\n color: var(--fb-text);\n}\n\n.field-editor-action-btn--danger:hover {\n border-color: var(--fb-danger);\n color: var(--fb-danger);\n background: #fef2f2;\n}\n\n.field-editor-section {\n margin-bottom: 20px;\n}\n\n.field-editor-section-title {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--fb-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n margin: 0 0 12px 0;\n}\n\n.field-editor-row {\n margin-bottom: 14px;\n}\n\n.field-editor-row:last-child {\n margin-bottom: 0;\n}\n\n.field-editor-row--checkbox {\n display: flex;\n align-items: center;\n}\n\n.field-editor-field {\n margin-bottom: 16px;\n}\n\n.field-editor-field:last-child {\n margin-bottom: 0;\n}\n\n.field-editor-label {\n display: block;\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--fb-text);\n margin-bottom: 6px;\n}\n\n.field-editor-input {\n width: 100%;\n padding: 8px 12px;\n font-size: 0.875rem;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n transition: all 0.15s ease;\n}\n\n.field-editor-input:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n}\n\n.field-editor-input::placeholder {\n color: var(--fb-text-light);\n}\n\n.field-editor-input--small {\n width: 120px;\n}\n\n.field-editor-textarea {\n min-height: 80px;\n resize: vertical;\n}\n\n.field-editor-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 0.875rem;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n transition: all 0.15s ease;\n cursor: pointer;\n}\n\n.field-editor-select:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n}\n\n.field-editor-checkbox-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.field-editor-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--fb-primary);\n}\n\n.field-editor-checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 0.8125rem;\n color: var(--fb-text);\n}\n\n.field-editor-help {\n display: block;\n font-size: 0.6875rem;\n color: var(--fb-text-muted);\n margin-top: 4px;\n}\n\n.field-editor-warning {\n display: block;\n font-size: 0.6875rem;\n color: var(--fb-warning);\n margin-top: 4px;\n}\n\n.field-editor-info {\n padding: 10px 14px;\n background: var(--fb-bg-muted);\n border-radius: var(--fb-radius-sm);\n font-size: 0.8125rem;\n color: var(--fb-text-muted);\n}\n\n.field-editor-options {\n margin-bottom: 14px;\n}\n\n.field-editor-options-empty {\n padding: 12px;\n background: var(--fb-bg-muted);\n border-radius: var(--fb-radius-sm);\n font-size: 0.8125rem;\n color: var(--fb-text-muted);\n text-align: center;\n margin-bottom: 8px;\n}\n\n.field-editor-options-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 8px;\n}\n\n.field-editor-option-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.field-editor-option-remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background: none;\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n cursor: pointer;\n font-size: 1rem;\n color: var(--fb-text-muted);\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.field-editor-option-remove:hover {\n color: var(--fb-danger);\n border-color: var(--fb-danger);\n background: #fef2f2;\n}\n\n.field-editor-add-option-btn {\n padding: 6px 12px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--fb-primary);\n background: var(--fb-primary-light);\n border: 1px dashed var(--fb-primary);\n border-radius: var(--fb-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n width: 100%;\n}\n\n.field-editor-add-option-btn:hover {\n background: #dbeafe;\n}\n\n.field-editor-tabs {\n display: flex;\n gap: 0;\n background: var(--fb-bg-muted);\n border-radius: var(--fb-radius-sm);\n padding: 3px;\n margin-bottom: 16px;\n}\n\n.field-editor-tab {\n flex: 1;\n padding: 5px 10px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--fb-text-muted);\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.field-editor-tab--active {\n color: var(--fb-text);\n background: var(--fb-bg);\n}\n\n.field-editor-footer {\n display: flex;\n gap: 8px;\n margin-top: 20px;\n padding-top: 16px;\n border-top: 1px solid var(--fb-border);\n}\n\n.field-editor-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 7px 14px;\n font-size: 0.8125rem;\n font-weight: 500;\n border-radius: var(--fb-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid var(--fb-border);\n background: var(--fb-bg);\n color: var(--fb-text-muted);\n}\n\n.field-editor-btn:hover {\n color: var(--fb-text);\n border-color: var(--fb-text-light);\n}\n\n.field-editor-btn--secondary {\n color: var(--fb-text-muted);\n}\n\n.field-editor-btn--danger {\n color: var(--fb-danger);\n border-color: #fecaca;\n background: #fef2f2;\n}\n\n.field-editor-btn--danger:hover {\n background: #fee2e2;\n border-color: var(--fb-danger);\n}\n\n/* ============================================================================\n Form Settings Tab\n ============================================================================ */\n\n.form-settings-tab {\n max-width: 640px;\n}\n\n.form-settings-section {\n margin-bottom: 32px;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--fb-border);\n}\n\n.form-settings-section:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n\n.form-settings-section-title {\n font-size: 1rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0 0 16px 0;\n}\n\n.form-settings-field {\n margin-bottom: 16px;\n}\n\n.form-settings-field:last-child {\n margin-bottom: 0;\n}\n\n.form-settings-field--checkbox {\n margin-bottom: 12px;\n}\n\n.form-settings-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--fb-text);\n margin-bottom: 6px;\n}\n\n.form-settings-input,\n.form-settings-textarea {\n width: 100%;\n padding: 10px 14px;\n font-size: 0.875rem;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-md);\n transition: all 0.15s ease;\n}\n\n.form-settings-input:focus,\n.form-settings-textarea:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n}\n\n.form-settings-input::placeholder,\n.form-settings-textarea::placeholder {\n color: var(--fb-text-light);\n}\n\n.form-settings-textarea {\n min-height: 80px;\n resize: vertical;\n}\n\n.form-settings-checkbox-label {\n display: flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n font-size: 0.875rem;\n color: var(--fb-text);\n}\n\n.form-settings-checkbox {\n width: 18px;\n height: 18px;\n accent-color: var(--fb-primary);\n cursor: pointer;\n}\n\n.form-settings-hint {\n font-size: 0.75rem;\n color: var(--fb-text-muted);\n margin: 6px 0 0 0;\n}\n\n.form-settings-field--checkbox .form-settings-hint {\n margin-left: 28px;\n}\n\n/* ============================================================================\n Form Notifications Tab\n ============================================================================ */\n\n.form-notifications-tab {\n max-width: 800px;\n}\n\n.form-notifications-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.form-notifications-header-content {\n flex: 1;\n}\n\n.form-notifications-title {\n font-size: 1.125rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0 0 4px 0;\n}\n\n.form-notifications-description {\n font-size: 0.875rem;\n color: var(--fb-text-muted);\n margin: 0;\n}\n\n.form-notifications-actions {\n display: flex;\n gap: 8px;\n}\n\n.form-notifications-add-btn {\n padding: 8px 14px;\n font-size: 0.8125rem;\n font-weight: 500;\n color: #ffffff;\n background: var(--fb-primary);\n border: none;\n border-radius: var(--fb-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.form-notifications-add-btn:hover {\n background: var(--fb-primary-hover);\n}\n\n.form-notifications-add-btn--secondary {\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n}\n\n.form-notifications-add-btn--secondary:hover {\n background: var(--fb-bg-hover);\n border-color: var(--fb-text-light);\n}\n\n/* Empty State */\n.form-notifications-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n background: var(--fb-bg-muted);\n border: 2px dashed var(--fb-border);\n border-radius: var(--fb-radius-lg);\n text-align: center;\n}\n\n.form-notifications-empty-icon {\n font-size: 3rem;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.form-notifications-empty-title {\n font-size: 1rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0 0 8px 0;\n}\n\n.form-notifications-empty-hint {\n font-size: 0.875rem;\n color: var(--fb-text-muted);\n margin: 0 0 20px 0;\n max-width: 400px;\n}\n\n.form-notifications-empty-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Notifications List */\n.form-notifications-list {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* Notification Card */\n.form-notification-card {\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-lg);\n overflow: hidden;\n}\n\n.form-notification-card--disabled {\n opacity: 0.6;\n}\n\n.form-notification-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n background: var(--fb-bg-muted);\n border-bottom: 1px solid var(--fb-border);\n}\n\n.form-notification-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n/* Toggle Switch */\n.form-notification-toggle {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 22px;\n flex-shrink: 0;\n}\n\n.form-notification-toggle input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.form-notification-toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--fb-border);\n transition: 0.2s;\n border-radius: 22px;\n}\n\n.form-notification-toggle-slider:before {\n position: absolute;\n content: \"\";\n height: 16px;\n width: 16px;\n left: 3px;\n bottom: 3px;\n background-color: white;\n transition: 0.2s;\n border-radius: 50%;\n}\n\n.form-notification-toggle input:checked + .form-notification-toggle-slider {\n background-color: var(--fb-success);\n}\n\n.form-notification-toggle\n input:checked\n + .form-notification-toggle-slider:before {\n transform: translateX(18px);\n}\n\n.form-notification-name {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid transparent;\n border-radius: var(--fb-radius-sm);\n transition: all 0.15s ease;\n}\n\n.form-notification-name:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n}\n\n.form-notification-badge {\n padding: 3px 8px;\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-radius: 9999px;\n flex-shrink: 0;\n}\n\n.form-notification-badge--admin {\n color: #7c3aed;\n background: #ede9fe;\n}\n\n.form-notification-badge--autoReply {\n color: #059669;\n background: #d1fae5;\n}\n\n.form-notification-delete {\n padding: 6px 12px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--fb-text-muted);\n background: transparent;\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.form-notification-delete:hover {\n color: var(--fb-danger);\n border-color: var(--fb-danger);\n background: #fef2f2;\n}\n\n.form-notification-body {\n padding: 16px;\n}\n\n.form-notification-row {\n margin-bottom: 16px;\n}\n\n.form-notification-row:last-child {\n margin-bottom: 0;\n}\n\n.form-notification-row--two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n}\n\n.form-notification-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-notification-label {\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--fb-text);\n}\n\n.form-notification-input,\n.form-notification-textarea {\n padding: 10px 14px;\n font-size: 0.875rem;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-md);\n transition: all 0.15s ease;\n}\n\n.form-notification-input:focus,\n.form-notification-textarea:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n}\n\n.form-notification-input::placeholder,\n.form-notification-textarea::placeholder {\n color: var(--fb-text-light);\n}\n\n.form-notification-textarea {\n min-height: 120px;\n resize: vertical;\n font-family: inherit;\n}\n\n.form-notification-hint {\n font-size: 0.75rem;\n color: var(--fb-text-muted);\n}\n\n.form-notification-hint p {\n margin: 0 0 4px 0;\n}\n\n.form-notification-placeholders {\n margin: 0;\n padding-left: 16px;\n list-style: none;\n}\n\n.form-notification-placeholders li {\n margin-bottom: 2px;\n}\n\n.form-notification-placeholders code {\n font-size: 0.6875rem;\n color: var(--fb-primary);\n background: var(--fb-primary-light);\n padding: 1px 4px;\n border-radius: 3px;\n}\n\n/* Help Section */\n.form-notifications-help {\n margin-top: 32px;\n padding: 16px 20px;\n background: var(--fb-bg-muted);\n border-radius: var(--fb-radius-md);\n}\n\n.form-notifications-help h4 {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0 0 12px 0;\n}\n\n.form-notifications-help ul {\n margin: 0;\n padding-left: 20px;\n font-size: 0.8125rem;\n color: var(--fb-text-muted);\n line-height: 1.6;\n}\n\n.form-notifications-help li {\n margin-bottom: 6px;\n}\n\n.form-notifications-help li:last-child {\n margin-bottom: 0;\n}\n\n.form-notifications-help strong {\n color: var(--fb-text);\n}\n\n/* ============================================================================\n Email Integration Cards\n ============================================================================ */\n\n.form-integration-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 14px 16px;\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-lg);\n transition: border-color 0.15s ease;\n}\n\n.form-integration-card:hover {\n border-color: var(--fb-text-light);\n}\n\n.form-integration-card--disabled {\n opacity: 0.55;\n}\n\n.form-integration-card-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.form-integration-card-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.form-integration-card-name {\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--fb-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.form-integration-provider-badge {\n font-size: 0.75rem;\n color: var(--fb-text-muted);\n}\n\n.form-integration-card-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.form-integration-btn {\n padding: 6px 12px;\n font-size: 0.75rem;\n font-weight: 500;\n border-radius: var(--fb-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid var(--fb-border);\n background: transparent;\n}\n\n.form-integration-btn--edit {\n color: var(--fb-text-muted);\n}\n\n.form-integration-btn--edit:hover {\n color: var(--fb-primary);\n border-color: var(--fb-primary);\n background: var(--fb-primary-light);\n}\n\n.form-integration-btn--delete {\n color: var(--fb-text-muted);\n}\n\n.form-integration-btn--delete:hover {\n color: var(--fb-danger);\n border-color: var(--fb-danger);\n background: #fef2f2;\n}\n\n/* ============================================================================\n Email Integration Modal\n ============================================================================ */\n\n.form-integration-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.45);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n padding: 24px;\n}\n\n.form-integration-modal {\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-lg);\n width: 100%;\n max-width: 560px;\n max-height: calc(100vh - 48px);\n display: flex;\n flex-direction: column;\n box-shadow:\n 0 20px 60px rgba(0, 0, 0, 0.15),\n 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n\n.form-integration-modal-header {\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--fb-border);\n flex-shrink: 0;\n}\n\n.form-integration-modal-title {\n font-size: 1.0625rem;\n font-weight: 600;\n color: var(--fb-text);\n margin: 0;\n}\n\n.form-integration-modal-body {\n padding: 20px 24px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n}\n\n.form-integration-modal-footer {\n padding: 16px 24px;\n border-top: 1px solid var(--fb-border);\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Modal select */\n.form-integration-select {\n padding: 10px 14px;\n font-size: 0.875rem;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-md);\n transition: all 0.15s ease;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n padding-right: 36px;\n cursor: pointer;\n}\n\n.form-integration-select:focus {\n outline: none;\n border-color: var(--fb-border-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n/* Recipient list */\n.form-integration-recipient-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 8px;\n}\n\n.form-integration-recipient-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 10px;\n background: var(--fb-bg-muted);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-sm);\n font-size: 0.8125rem;\n color: var(--fb-text);\n}\n\n.form-integration-recipient-remove {\n background: transparent;\n border: none;\n color: var(--fb-text-light);\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n padding: 0 2px;\n transition: color 0.15s ease;\n}\n\n.form-integration-recipient-remove:hover {\n color: var(--fb-danger);\n}\n\n.form-integration-recipient-add {\n display: flex;\n gap: 8px;\n}\n\n.form-integration-recipient-add .form-notification-input {\n flex: 1;\n}\n\n.form-integration-add-recipient-btn {\n padding: 10px 14px;\n font-size: 0.8125rem;\n font-weight: 500;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-md);\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.form-integration-add-recipient-btn:hover {\n background: var(--fb-bg-hover);\n border-color: var(--fb-text-light);\n}\n\n/* Active row */\n.form-integration-active-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0 4px;\n border-top: 1px solid var(--fb-border);\n}\n\n.form-integration-active-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--fb-text);\n}\n\n/* Modal footer buttons */\n.form-integration-cancel-btn {\n padding: 9px 18px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--fb-text);\n background: var(--fb-bg);\n border: 1px solid var(--fb-border);\n border-radius: var(--fb-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.form-integration-cancel-btn:hover {\n background: var(--fb-bg-hover);\n border-color: var(--fb-text-light);\n}\n\n.form-integration-save-btn {\n padding: 9px 18px;\n font-size: 0.875rem;\n font-weight: 500;\n color: #ffffff;\n background: var(--fb-primary);\n border: none;\n border-radius: var(--fb-radius-md);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.form-integration-save-btn:hover {\n background: var(--fb-primary-hover);\n}\n"],"mappings":"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","names":[]}
@@ -1,586 +0,0 @@
1
- // src/components/submissions/SubmissionList.tsx
2
- import { useState, useCallback, useMemo } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
- function formatValue(value) {
5
- if (value === null || value === void 0) return "-";
6
- if (Array.isArray(value)) return value.join(", ");
7
- if (typeof value === "boolean") return value ? "Yes" : "No";
8
- if (value instanceof Date) return value.toLocaleDateString();
9
- let str;
10
- if (typeof value === "object") {
11
- str = JSON.stringify(value);
12
- } else {
13
- str = String(value);
14
- }
15
- return str.length > 50 ? str.slice(0, 50) + "..." : str;
16
- }
17
- function formatDate(date) {
18
- const d = typeof date === "string" ? new Date(date) : date;
19
- return d.toLocaleString();
20
- }
21
- function getStatusBadgeClass(status) {
22
- switch (status) {
23
- case "new":
24
- return "submission-status-badge submission-status-badge--new";
25
- case "read":
26
- return "submission-status-badge submission-status-badge--read";
27
- case "archived":
28
- return "submission-status-badge submission-status-badge--archived";
29
- default:
30
- return "submission-status-badge";
31
- }
32
- }
33
- function SubmissionList({
34
- form,
35
- submissions,
36
- isLoading = false,
37
- onStatusChange,
38
- onDelete,
39
- onBulkDelete,
40
- onBulkStatusChange,
41
- onExport,
42
- onViewDetail
43
- }) {
44
- const [selectedIds, setSelectedIds] = useState(/* @__PURE__ */ new Set());
45
- const [filter, setFilter] = useState("all");
46
- const [processingIds, setProcessingIds] = useState(/* @__PURE__ */ new Set());
47
- const displayFields = useMemo(() => {
48
- return form.fields.filter((f) => f.type !== "hidden").slice(0, 3);
49
- }, [form.fields]);
50
- const filteredSubmissions = useMemo(() => {
51
- if (filter === "all") return submissions;
52
- return submissions.filter((sub) => sub.status === filter);
53
- }, [submissions, filter]);
54
- const allSelected = filteredSubmissions.length > 0 && selectedIds.size === filteredSubmissions.length && filteredSubmissions.every((s) => selectedIds.has(s.id));
55
- const someSelected = selectedIds.size > 0;
56
- const toggleSelect = useCallback((id) => {
57
- setSelectedIds((prev) => {
58
- const next = new Set(prev);
59
- if (next.has(id)) {
60
- next.delete(id);
61
- } else {
62
- next.add(id);
63
- }
64
- return next;
65
- });
66
- }, []);
67
- const toggleSelectAll = useCallback(() => {
68
- if (allSelected) {
69
- setSelectedIds(/* @__PURE__ */ new Set());
70
- } else {
71
- setSelectedIds(new Set(filteredSubmissions.map((s) => s.id)));
72
- }
73
- }, [allSelected, filteredSubmissions]);
74
- const handleStatusChange = useCallback(
75
- async (id, status) => {
76
- if (!onStatusChange) return;
77
- setProcessingIds((prev) => new Set(prev).add(id));
78
- try {
79
- await onStatusChange(id, status);
80
- } finally {
81
- setProcessingIds((prev) => {
82
- const next = new Set(prev);
83
- next.delete(id);
84
- return next;
85
- });
86
- }
87
- },
88
- [onStatusChange]
89
- );
90
- const handleDelete = useCallback(
91
- async (id) => {
92
- if (!onDelete) return;
93
- if (!window.confirm("Are you sure you want to delete this submission?")) {
94
- return;
95
- }
96
- setProcessingIds((prev) => new Set(prev).add(id));
97
- try {
98
- await onDelete(id);
99
- setSelectedIds((prev) => {
100
- const next = new Set(prev);
101
- next.delete(id);
102
- return next;
103
- });
104
- } finally {
105
- setProcessingIds((prev) => {
106
- const next = new Set(prev);
107
- next.delete(id);
108
- return next;
109
- });
110
- }
111
- },
112
- [onDelete]
113
- );
114
- const handleBulkDelete = useCallback(async () => {
115
- if (!onBulkDelete || selectedIds.size === 0) return;
116
- if (!window.confirm(
117
- `Are you sure you want to delete ${selectedIds.size} submission(s)?`
118
- )) {
119
- return;
120
- }
121
- const ids = Array.from(selectedIds);
122
- ids.forEach((id) => setProcessingIds((prev) => new Set(prev).add(id)));
123
- try {
124
- await onBulkDelete(ids);
125
- setSelectedIds(/* @__PURE__ */ new Set());
126
- } finally {
127
- setProcessingIds(/* @__PURE__ */ new Set());
128
- }
129
- }, [onBulkDelete, selectedIds]);
130
- const handleBulkStatusChange = useCallback(
131
- async (status) => {
132
- if (!onBulkStatusChange || selectedIds.size === 0) return;
133
- const ids = Array.from(selectedIds);
134
- ids.forEach((id) => setProcessingIds((prev) => new Set(prev).add(id)));
135
- try {
136
- await onBulkStatusChange(ids, status);
137
- setSelectedIds(/* @__PURE__ */ new Set());
138
- } finally {
139
- setProcessingIds(/* @__PURE__ */ new Set());
140
- }
141
- },
142
- [onBulkStatusChange, selectedIds]
143
- );
144
- const handleRowClick = useCallback(
145
- (submission) => {
146
- onViewDetail?.(submission);
147
- },
148
- [onViewDetail]
149
- );
150
- return /* @__PURE__ */ jsxs("div", { className: "submission-list", children: [
151
- /* @__PURE__ */ jsxs("div", { className: "submission-list__toolbar", children: [
152
- /* @__PURE__ */ jsx("div", { className: "submission-list__filters", children: /* @__PURE__ */ jsxs(
153
- "select",
154
- {
155
- value: filter,
156
- onChange: (e) => setFilter(e.target.value),
157
- className: "submission-list__filter-select",
158
- "aria-label": "Filter by status",
159
- children: [
160
- /* @__PURE__ */ jsxs("option", { value: "all", children: [
161
- "All Submissions (",
162
- submissions.length,
163
- ")"
164
- ] }),
165
- /* @__PURE__ */ jsxs("option", { value: "new", children: [
166
- "New (",
167
- submissions.filter((s) => s.status === "new").length,
168
- ")"
169
- ] }),
170
- /* @__PURE__ */ jsxs("option", { value: "read", children: [
171
- "Read (",
172
- submissions.filter((s) => s.status === "read").length,
173
- ")"
174
- ] }),
175
- /* @__PURE__ */ jsxs("option", { value: "archived", children: [
176
- "Archived (",
177
- submissions.filter((s) => s.status === "archived").length,
178
- ")"
179
- ] })
180
- ]
181
- }
182
- ) }),
183
- /* @__PURE__ */ jsxs("div", { className: "submission-list__actions", children: [
184
- someSelected && /* @__PURE__ */ jsxs("div", { className: "submission-list__bulk-actions", children: [
185
- /* @__PURE__ */ jsxs("span", { className: "submission-list__selected-count", children: [
186
- selectedIds.size,
187
- " selected"
188
- ] }),
189
- onBulkStatusChange && /* @__PURE__ */ jsxs(Fragment, { children: [
190
- /* @__PURE__ */ jsx(
191
- "button",
192
- {
193
- type: "button",
194
- onClick: () => void handleBulkStatusChange("read"),
195
- className: "submission-list__action-btn",
196
- children: "Mark Read"
197
- }
198
- ),
199
- /* @__PURE__ */ jsx(
200
- "button",
201
- {
202
- type: "button",
203
- onClick: () => void handleBulkStatusChange("archived"),
204
- className: "submission-list__action-btn",
205
- children: "Archive"
206
- }
207
- )
208
- ] }),
209
- onBulkDelete && /* @__PURE__ */ jsx(
210
- "button",
211
- {
212
- type: "button",
213
- onClick: () => void handleBulkDelete(),
214
- className: "submission-list__action-btn submission-list__action-btn--danger",
215
- children: "Delete"
216
- }
217
- )
218
- ] }),
219
- onExport && /* @__PURE__ */ jsxs("div", { className: "submission-list__export-actions", children: [
220
- /* @__PURE__ */ jsx(
221
- "button",
222
- {
223
- type: "button",
224
- onClick: () => onExport("csv"),
225
- className: "submission-list__export-btn",
226
- children: "Export CSV"
227
- }
228
- ),
229
- /* @__PURE__ */ jsx(
230
- "button",
231
- {
232
- type: "button",
233
- onClick: () => onExport("json"),
234
- className: "submission-list__export-btn",
235
- children: "Export JSON"
236
- }
237
- )
238
- ] })
239
- ] })
240
- ] }),
241
- /* @__PURE__ */ jsx("div", { className: "submission-list__table-container", children: /* @__PURE__ */ jsxs("table", { className: "submission-list__table", children: [
242
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
243
- /* @__PURE__ */ jsx("th", { className: "submission-list__th submission-list__th--checkbox", children: /* @__PURE__ */ jsx(
244
- "input",
245
- {
246
- type: "checkbox",
247
- checked: allSelected,
248
- onChange: toggleSelectAll,
249
- "aria-label": "Select all submissions"
250
- }
251
- ) }),
252
- /* @__PURE__ */ jsx("th", { className: "submission-list__th", children: "ID" }),
253
- /* @__PURE__ */ jsx("th", { className: "submission-list__th", children: "Status" }),
254
- /* @__PURE__ */ jsx("th", { className: "submission-list__th", children: "Submitted" }),
255
- displayFields.map((field) => /* @__PURE__ */ jsx("th", { className: "submission-list__th", children: field.label }, field.name)),
256
- /* @__PURE__ */ jsx("th", { className: "submission-list__th submission-list__th--actions", children: "Actions" })
257
- ] }) }),
258
- /* @__PURE__ */ jsx("tbody", { children: isLoading ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
259
- "td",
260
- {
261
- colSpan: 5 + displayFields.length,
262
- className: "submission-list__loading",
263
- children: "Loading submissions..."
264
- }
265
- ) }) : filteredSubmissions.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
266
- "td",
267
- {
268
- colSpan: 5 + displayFields.length,
269
- className: "submission-list__empty",
270
- children: "No submissions found"
271
- }
272
- ) }) : filteredSubmissions.map((submission) => {
273
- const isSelected = selectedIds.has(submission.id);
274
- const isProcessing = processingIds.has(submission.id);
275
- return /* @__PURE__ */ jsxs(
276
- "tr",
277
- {
278
- className: `submission-list__row ${isSelected ? "submission-list__row--selected" : ""} ${isProcessing ? "submission-list__row--processing" : ""}`,
279
- onClick: () => handleRowClick(submission),
280
- style: { cursor: onViewDetail ? "pointer" : "default" },
281
- children: [
282
- /* @__PURE__ */ jsx(
283
- "td",
284
- {
285
- className: "submission-list__td submission-list__td--checkbox",
286
- onClick: (e) => e.stopPropagation(),
287
- children: /* @__PURE__ */ jsx(
288
- "input",
289
- {
290
- type: "checkbox",
291
- checked: isSelected,
292
- onChange: () => toggleSelect(submission.id),
293
- disabled: isProcessing,
294
- "aria-label": `Select submission ${submission.id}`
295
- }
296
- )
297
- }
298
- ),
299
- /* @__PURE__ */ jsx("td", { className: "submission-list__td submission-list__td--id", children: /* @__PURE__ */ jsxs("code", { children: [
300
- submission.id.slice(0, 8),
301
- "..."
302
- ] }) }),
303
- /* @__PURE__ */ jsx("td", { className: "submission-list__td", children: /* @__PURE__ */ jsx("span", { className: getStatusBadgeClass(submission.status), children: submission.status }) }),
304
- /* @__PURE__ */ jsx("td", { className: "submission-list__td", children: formatDate(submission.submittedAt) }),
305
- displayFields.map((field) => /* @__PURE__ */ jsx("td", { className: "submission-list__td", children: formatValue(submission.data[field.name]) }, field.name)),
306
- /* @__PURE__ */ jsxs(
307
- "td",
308
- {
309
- className: "submission-list__td submission-list__td--actions",
310
- onClick: (e) => e.stopPropagation(),
311
- children: [
312
- onStatusChange && submission.status !== "read" && /* @__PURE__ */ jsx(
313
- "button",
314
- {
315
- type: "button",
316
- onClick: () => void handleStatusChange(submission.id, "read"),
317
- disabled: isProcessing,
318
- className: "submission-list__row-action",
319
- title: "Mark as read",
320
- children: "Mark Read"
321
- }
322
- ),
323
- onStatusChange && submission.status !== "archived" && /* @__PURE__ */ jsx(
324
- "button",
325
- {
326
- type: "button",
327
- onClick: () => void handleStatusChange(submission.id, "archived"),
328
- disabled: isProcessing,
329
- className: "submission-list__row-action",
330
- title: "Archive",
331
- children: "Archive"
332
- }
333
- ),
334
- onDelete && /* @__PURE__ */ jsx(
335
- "button",
336
- {
337
- type: "button",
338
- onClick: () => void handleDelete(submission.id),
339
- disabled: isProcessing,
340
- className: "submission-list__row-action submission-list__row-action--danger",
341
- title: "Delete",
342
- children: "Delete"
343
- }
344
- )
345
- ]
346
- }
347
- )
348
- ]
349
- },
350
- submission.id
351
- );
352
- }) })
353
- ] }) }),
354
- /* @__PURE__ */ jsxs("div", { className: "submission-list__summary", children: [
355
- "Showing ",
356
- filteredSubmissions.length,
357
- " of ",
358
- submissions.length,
359
- " submissions"
360
- ] })
361
- ] });
362
- }
363
-
364
- // src/components/submissions/SubmissionDetail.tsx
365
- import { useState as useState2, useCallback as useCallback2 } from "react";
366
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
367
- function safeString(value) {
368
- if (typeof value === "object" && value !== null) {
369
- return JSON.stringify(value);
370
- }
371
- return String(value);
372
- }
373
- function formatFieldValue(value, field) {
374
- if (value === null || value === void 0) return "-";
375
- switch (field.type) {
376
- case "checkbox":
377
- return value ? "Yes" : "No";
378
- case "select":
379
- if (Array.isArray(value)) {
380
- return value.join(", ");
381
- }
382
- return safeString(value);
383
- case "file":
384
- if (Array.isArray(value)) {
385
- return value.map((v) => safeString(v)).join(", ");
386
- }
387
- return safeString(value);
388
- case "date":
389
- if (value instanceof Date) {
390
- return value.toLocaleDateString();
391
- }
392
- if (typeof value === "string") {
393
- return new Date(value).toLocaleDateString();
394
- }
395
- return safeString(value);
396
- case "time":
397
- return safeString(value);
398
- default:
399
- return safeString(value);
400
- }
401
- }
402
- function formatDate2(date) {
403
- const d = typeof date === "string" ? new Date(date) : date;
404
- return d.toLocaleString();
405
- }
406
- var STATUS_OPTIONS = [
407
- { value: "new", label: "New" },
408
- { value: "read", label: "Read" },
409
- { value: "archived", label: "Archived" }
410
- ];
411
- function SubmissionDetail({
412
- form,
413
- submission,
414
- onStatusChange,
415
- onNotesUpdate,
416
- onBack,
417
- onDelete
418
- }) {
419
- const [isProcessing, setIsProcessing] = useState2(false);
420
- const [notes, setNotes] = useState2(
421
- submission.notes || ""
422
- );
423
- const [notesModified, setNotesModified] = useState2(false);
424
- const handleStatusChange = useCallback2(
425
- async (event) => {
426
- if (!onStatusChange) return;
427
- const newStatus = event.target.value;
428
- setIsProcessing(true);
429
- try {
430
- await onStatusChange(newStatus);
431
- } finally {
432
- setIsProcessing(false);
433
- }
434
- },
435
- [onStatusChange]
436
- );
437
- const handleNotesChange = useCallback2(
438
- (event) => {
439
- setNotes(event.target.value);
440
- setNotesModified(true);
441
- },
442
- []
443
- );
444
- const handleNotesSave = useCallback2(async () => {
445
- if (!onNotesUpdate || !notesModified) return;
446
- setIsProcessing(true);
447
- try {
448
- await onNotesUpdate(notes);
449
- setNotesModified(false);
450
- } finally {
451
- setIsProcessing(false);
452
- }
453
- }, [onNotesUpdate, notes, notesModified]);
454
- const handleDelete = useCallback2(async () => {
455
- if (!onDelete) return;
456
- if (!window.confirm("Are you sure you want to delete this submission?")) {
457
- return;
458
- }
459
- setIsProcessing(true);
460
- try {
461
- await onDelete();
462
- } finally {
463
- setIsProcessing(false);
464
- }
465
- }, [onDelete]);
466
- const displayFields = form.fields;
467
- const data = submission.data;
468
- return /* @__PURE__ */ jsxs2("div", { className: "submission-detail", children: [
469
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__header", children: [
470
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__header-left", children: [
471
- onBack && /* @__PURE__ */ jsx2(
472
- "button",
473
- {
474
- type: "button",
475
- onClick: onBack,
476
- className: "submission-detail__back-btn",
477
- disabled: isProcessing,
478
- children: "\u2190 Back to List"
479
- }
480
- ),
481
- /* @__PURE__ */ jsx2("h2", { className: "submission-detail__title", children: "Submission Details" })
482
- ] }),
483
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__header-right", children: [
484
- onStatusChange && /* @__PURE__ */ jsxs2("div", { className: "submission-detail__status-control", children: [
485
- /* @__PURE__ */ jsx2("label", { htmlFor: "submission-status", children: "Status:" }),
486
- /* @__PURE__ */ jsx2(
487
- "select",
488
- {
489
- id: "submission-status",
490
- value: submission.status,
491
- onChange: (e) => void handleStatusChange(e),
492
- disabled: isProcessing,
493
- className: "submission-detail__status-select",
494
- children: STATUS_OPTIONS.map((option) => /* @__PURE__ */ jsx2("option", { value: option.value, children: option.label }, option.value))
495
- }
496
- )
497
- ] }),
498
- onDelete && /* @__PURE__ */ jsx2(
499
- "button",
500
- {
501
- type: "button",
502
- onClick: () => void handleDelete(),
503
- disabled: isProcessing,
504
- className: "submission-detail__delete-btn",
505
- children: "Delete"
506
- }
507
- )
508
- ] })
509
- ] }),
510
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__id", children: [
511
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__id-label", children: "Submission ID:" }),
512
- /* @__PURE__ */ jsx2("code", { className: "submission-detail__id-value", children: submission.id })
513
- ] }),
514
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__section", children: [
515
- /* @__PURE__ */ jsx2("h3", { className: "submission-detail__section-title", children: "Submitted Data" }),
516
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__fields", children: [
517
- displayFields.map((field) => /* @__PURE__ */ jsxs2("div", { className: "submission-detail__field", children: [
518
- /* @__PURE__ */ jsx2("div", { className: "submission-detail__field-label", children: field.label }),
519
- /* @__PURE__ */ jsx2("div", { className: "submission-detail__field-value", children: formatFieldValue(data[field.name], field) })
520
- ] }, field.name)),
521
- displayFields.length === 0 && /* @__PURE__ */ jsx2("div", { className: "submission-detail__empty", children: "No fields to display" })
522
- ] })
523
- ] }),
524
- onNotesUpdate && /* @__PURE__ */ jsxs2("div", { className: "submission-detail__section", children: [
525
- /* @__PURE__ */ jsx2("h3", { className: "submission-detail__section-title", children: "Internal Notes" }),
526
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__notes", children: [
527
- /* @__PURE__ */ jsx2(
528
- "textarea",
529
- {
530
- value: notes,
531
- onChange: handleNotesChange,
532
- placeholder: "Add internal notes about this submission...",
533
- disabled: isProcessing,
534
- className: "submission-detail__notes-textarea",
535
- rows: 4
536
- }
537
- ),
538
- notesModified && /* @__PURE__ */ jsx2(
539
- "button",
540
- {
541
- type: "button",
542
- onClick: () => void handleNotesSave(),
543
- disabled: isProcessing,
544
- className: "submission-detail__notes-save-btn",
545
- children: "Save Notes"
546
- }
547
- )
548
- ] })
549
- ] }),
550
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__section", children: [
551
- /* @__PURE__ */ jsx2("h3", { className: "submission-detail__section-title", children: "Metadata" }),
552
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata", children: [
553
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata-item", children: [
554
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-label", children: "Submitted At:" }),
555
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-value", children: formatDate2(submission.submittedAt) })
556
- ] }),
557
- submission.ipAddress && /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata-item", children: [
558
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-label", children: "IP Address:" }),
559
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-value", children: /* @__PURE__ */ jsx2("code", { children: submission.ipAddress }) })
560
- ] }),
561
- submission.userAgent && /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata-item", children: [
562
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-label", children: "User Agent:" }),
563
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-value submission-detail__metadata-value--truncate", children: submission.userAgent })
564
- ] }),
565
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata-item", children: [
566
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-label", children: "Created At:" }),
567
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-value", children: formatDate2(submission.createdAt) })
568
- ] }),
569
- /* @__PURE__ */ jsxs2("div", { className: "submission-detail__metadata-item", children: [
570
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-label", children: "Updated At:" }),
571
- /* @__PURE__ */ jsx2("span", { className: "submission-detail__metadata-value", children: formatDate2(submission.updatedAt) })
572
- ] })
573
- ] })
574
- ] }),
575
- /* @__PURE__ */ jsxs2("details", { className: "submission-detail__raw-data", children: [
576
- /* @__PURE__ */ jsx2("summary", { className: "submission-detail__raw-data-summary", children: "View Raw JSON Data" }),
577
- /* @__PURE__ */ jsx2("pre", { className: "submission-detail__raw-data-content", children: JSON.stringify(submission.data, null, 2) })
578
- ] })
579
- ] });
580
- }
581
-
582
- export {
583
- SubmissionList,
584
- SubmissionDetail
585
- };
586
- //# sourceMappingURL=chunk-ABNZFTQK.js.map