formmorf-builder 1.0.0

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 (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +229 -0
  3. package/dist/FormBuilder/ComponentPanel.d.ts +4 -0
  4. package/dist/FormBuilder/ComponentPanel.d.ts.map +1 -0
  5. package/dist/FormBuilder/ConditionalSettingsModal.d.ts +10 -0
  6. package/dist/FormBuilder/ConditionalSettingsModal.d.ts.map +1 -0
  7. package/dist/FormBuilder/DevicePreviewSwitcher.d.ts +4 -0
  8. package/dist/FormBuilder/DevicePreviewSwitcher.d.ts.map +1 -0
  9. package/dist/FormBuilder/DndWrapper.d.ts +14 -0
  10. package/dist/FormBuilder/DndWrapper.d.ts.map +1 -0
  11. package/dist/FormBuilder/DraggableField.d.ts +11 -0
  12. package/dist/FormBuilder/DraggableField.d.ts.map +1 -0
  13. package/dist/FormBuilder/DropIndicator.d.ts +10 -0
  14. package/dist/FormBuilder/DropIndicator.d.ts.map +1 -0
  15. package/dist/FormBuilder/FieldRenderer.d.ts +5 -0
  16. package/dist/FormBuilder/FieldRenderer.d.ts.map +1 -0
  17. package/dist/FormBuilder/FormBuilder.d.ts +12 -0
  18. package/dist/FormBuilder/FormBuilder.d.ts.map +1 -0
  19. package/dist/FormBuilder/FormCanvas.d.ts +4 -0
  20. package/dist/FormBuilder/FormCanvas.d.ts.map +1 -0
  21. package/dist/FormBuilder/FormPreview.d.ts +9 -0
  22. package/dist/FormBuilder/FormPreview.d.ts.map +1 -0
  23. package/dist/FormBuilder/FormPropertiesTab.d.ts +4 -0
  24. package/dist/FormBuilder/FormPropertiesTab.d.ts.map +1 -0
  25. package/dist/FormBuilder/IconRenderer.d.ts +11 -0
  26. package/dist/FormBuilder/IconRenderer.d.ts.map +1 -0
  27. package/dist/FormBuilder/PreviewModal.d.ts +9 -0
  28. package/dist/FormBuilder/PreviewModal.d.ts.map +1 -0
  29. package/dist/FormBuilder/PropertiesPanel.d.ts +4 -0
  30. package/dist/FormBuilder/PropertiesPanel.d.ts.map +1 -0
  31. package/dist/FormBuilder/SortableField.d.ts +10 -0
  32. package/dist/FormBuilder/SortableField.d.ts.map +1 -0
  33. package/dist/FormBuilder/Toolbar.d.ts +9 -0
  34. package/dist/FormBuilder/Toolbar.d.ts.map +1 -0
  35. package/dist/FormBuilder/index.d.ts +14 -0
  36. package/dist/FormBuilder/index.d.ts.map +1 -0
  37. package/dist/FormViewer/FieldRenderer.d.ts +15 -0
  38. package/dist/FormViewer/FieldRenderer.d.ts.map +1 -0
  39. package/dist/FormViewer/Fields/AlertField.d.ts +11 -0
  40. package/dist/FormViewer/Fields/AlertField.d.ts.map +1 -0
  41. package/dist/FormViewer/Fields/CheckboxField.d.ts +9 -0
  42. package/dist/FormViewer/Fields/CheckboxField.d.ts.map +1 -0
  43. package/dist/FormViewer/Fields/ColorField.d.ts +5 -0
  44. package/dist/FormViewer/Fields/ColorField.d.ts.map +1 -0
  45. package/dist/FormViewer/Fields/DateRangeField.d.ts +12 -0
  46. package/dist/FormViewer/Fields/DateRangeField.d.ts.map +1 -0
  47. package/dist/FormViewer/Fields/DateTimeField.d.ts +11 -0
  48. package/dist/FormViewer/Fields/DateTimeField.d.ts.map +1 -0
  49. package/dist/FormViewer/Fields/FileField.d.ts +15 -0
  50. package/dist/FormViewer/Fields/FileField.d.ts.map +1 -0
  51. package/dist/FormViewer/Fields/NumberField.d.ts +12 -0
  52. package/dist/FormViewer/Fields/NumberField.d.ts.map +1 -0
  53. package/dist/FormViewer/Fields/RadioField.d.ts +9 -0
  54. package/dist/FormViewer/Fields/RadioField.d.ts.map +1 -0
  55. package/dist/FormViewer/Fields/RangeField.d.ts +13 -0
  56. package/dist/FormViewer/Fields/RangeField.d.ts.map +1 -0
  57. package/dist/FormViewer/Fields/RatingField.d.ts +12 -0
  58. package/dist/FormViewer/Fields/RatingField.d.ts.map +1 -0
  59. package/dist/FormViewer/Fields/RichTextField.d.ts +10 -0
  60. package/dist/FormViewer/Fields/RichTextField.d.ts.map +1 -0
  61. package/dist/FormViewer/Fields/SectionField.d.ts +12 -0
  62. package/dist/FormViewer/Fields/SectionField.d.ts.map +1 -0
  63. package/dist/FormViewer/Fields/SelectField.d.ts +10 -0
  64. package/dist/FormViewer/Fields/SelectField.d.ts.map +1 -0
  65. package/dist/FormViewer/Fields/SwitchField.d.ts +5 -0
  66. package/dist/FormViewer/Fields/SwitchField.d.ts.map +1 -0
  67. package/dist/FormViewer/Fields/TextAreaField.d.ts +12 -0
  68. package/dist/FormViewer/Fields/TextAreaField.d.ts.map +1 -0
  69. package/dist/FormViewer/Fields/TextField.d.ts +9 -0
  70. package/dist/FormViewer/Fields/TextField.d.ts.map +1 -0
  71. package/dist/FormViewer/Fields/TimeField.d.ts +10 -0
  72. package/dist/FormViewer/Fields/TimeField.d.ts.map +1 -0
  73. package/dist/FormViewer/Fields/index.d.ts +19 -0
  74. package/dist/FormViewer/Fields/index.d.ts.map +1 -0
  75. package/dist/FormViewer/Fields/types.d.ts +21 -0
  76. package/dist/FormViewer/Fields/types.d.ts.map +1 -0
  77. package/dist/FormViewer/FormViewer.d.ts +16 -0
  78. package/dist/FormViewer/FormViewer.d.ts.map +1 -0
  79. package/dist/FormViewer/index.d.ts +5 -0
  80. package/dist/FormViewer/index.d.ts.map +1 -0
  81. package/dist/config/fieldConfig.d.ts +5 -0
  82. package/dist/config/fieldConfig.d.ts.map +1 -0
  83. package/dist/core/conditions/evaluator.d.ts +19 -0
  84. package/dist/core/conditions/evaluator.d.ts.map +1 -0
  85. package/dist/core/conditions/index.d.ts +2 -0
  86. package/dist/core/conditions/index.d.ts.map +1 -0
  87. package/dist/examples/FormViewerExample.d.ts +4 -0
  88. package/dist/examples/FormViewerExample.d.ts.map +1 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +220 -0
  92. package/dist/index.mjs +20738 -0
  93. package/dist/store/formStore.d.ts +44 -0
  94. package/dist/store/formStore.d.ts.map +1 -0
  95. package/dist/style.css +1 -0
  96. package/dist/types/index.d.ts +197 -0
  97. package/dist/types/index.d.ts.map +1 -0
  98. package/dist/utils/validation.d.ts +19 -0
  99. package/dist/utils/validation.d.ts.map +1 -0
  100. package/package.json +67 -0
@@ -0,0 +1,44 @@
1
+ import { StoreApi, UseBoundStore } from 'zustand';
2
+ import { FieldDefinition, FormSchema, DeviceType } from '../types';
3
+
4
+ interface HistoryState {
5
+ schema: FormSchema;
6
+ selectedFieldId: string | null;
7
+ }
8
+ interface FormState {
9
+ schema: FormSchema;
10
+ selectedFieldId: string | null;
11
+ isDragging: boolean;
12
+ formValues: Record<string, any>;
13
+ formErrors: Record<string, string>;
14
+ history: HistoryState[];
15
+ historyIndex: number;
16
+ maxHistorySize: number;
17
+ previewDevice: DeviceType;
18
+ setSchema: (schema: FormSchema) => void;
19
+ addField: (field: FieldDefinition, index?: number) => void;
20
+ updateField: (fieldId: string, updates: Partial<FieldDefinition>) => void;
21
+ removeField: (fieldId: string) => void;
22
+ moveField: (fromIndex: number, toIndex: number) => void;
23
+ duplicateField: (fieldId: string) => void;
24
+ selectField: (fieldId: string | null) => void;
25
+ setIsDragging: (isDragging: boolean) => void;
26
+ clearForm: () => void;
27
+ updateFormSettings: (settings: Partial<FormSchema['settings']>) => void;
28
+ updateFormMetadata: (metadata: {
29
+ title?: string;
30
+ description?: string;
31
+ }) => void;
32
+ setFieldValue: (fieldId: string, value: any) => void;
33
+ setFieldError: (fieldId: string, error: string | null) => void;
34
+ validateField: (fieldId: string) => string | null;
35
+ validateForm: () => boolean;
36
+ undo: () => void;
37
+ redo: () => void;
38
+ canUndo: () => boolean;
39
+ canRedo: () => boolean;
40
+ setPreviewDevice: (device: DeviceType) => void;
41
+ }
42
+ export declare const useFormStore: UseBoundStore<StoreApi<FormState>>;
43
+ export {};
44
+ //# sourceMappingURL=formStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formStore.d.ts","sourceRoot":"","sources":["../../src/store/formStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAGpE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGxE,UAAU,YAAY;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,UAAU,SAAS;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IAGvB,aAAa,EAAE,UAAU,CAAC;IAG1B,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IAC1E,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC;IACxE,kBAAkB,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAClD,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAChD;AAgBD,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CA2Q3D,CAAC"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--fm-primary-50: #eff6ff;--fm-primary-100: #dbeafe;--fm-primary-200: #bfdbfe;--fm-primary-300: #93c5fd;--fm-primary-400: #60a5fa;--fm-primary-500: #3b82f6;--fm-primary-600: #2563eb;--fm-primary-700: #1d4ed8;--fm-primary-800: #1e40af;--fm-primary-900: #1e3a8a;--fm-secondary-50: #f5f3ff;--fm-secondary-100: #ede9fe;--fm-secondary-200: #ddd6fe;--fm-secondary-300: #c4b5fd;--fm-secondary-400: #a78bfa;--fm-secondary-500: #8b5cf6;--fm-secondary-600: #7c3aed;--fm-secondary-700: #6d28d9;--fm-secondary-800: #5b21b6;--fm-secondary-900: #4c1d95;--fm-success-50: #f0fdf4;--fm-success-100: #dcfce7;--fm-success-200: #bbf7d0;--fm-success-300: #86efac;--fm-success-400: #4ade80;--fm-success-500: #22c55e;--fm-success-600: #16a34a;--fm-success-700: #15803d;--fm-success-800: #166534;--fm-success-900: #14532d;--fm-warning-50: #fffbeb;--fm-warning-100: #fef3c7;--fm-warning-200: #fde68a;--fm-warning-300: #fcd34d;--fm-warning-400: #fbbf24;--fm-warning-500: #f59e0b;--fm-warning-600: #d97706;--fm-warning-700: #b45309;--fm-warning-800: #92400e;--fm-warning-900: #78350f;--fm-error-50: #fef2f2;--fm-error-100: #fee2e2;--fm-error-200: #fecaca;--fm-error-300: #fca5a5;--fm-error-400: #f87171;--fm-error-500: #ef4444;--fm-error-600: #dc2626;--fm-error-700: #b91c1c;--fm-error-800: #991b1b;--fm-error-900: #7f1d1d;--fm-gray-50: #f8fafc;--fm-gray-100: #f1f5f9;--fm-gray-200: #e2e8f0;--fm-gray-300: #cbd5e1;--fm-gray-400: #94a3b8;--fm-gray-500: #64748b;--fm-gray-600: #475569;--fm-gray-700: #334155;--fm-gray-800: #1e293b;--fm-gray-900: #0f172a;--fm-white: #ffffff;--fm-black: #000000;--fm-bg-primary: var(--fm-white);--fm-bg-secondary: var(--fm-gray-50);--fm-bg-tertiary: var(--fm-gray-100);--fm-bg-hover: var(--fm-gray-50);--fm-bg-active: var(--fm-primary-50);--fm-bg-disabled: var(--fm-gray-100);--fm-text-primary: var(--fm-gray-900);--fm-text-secondary: var(--fm-gray-700);--fm-text-tertiary: var(--fm-gray-500);--fm-text-placeholder: var(--fm-gray-400);--fm-text-disabled: var(--fm-gray-400);--fm-text-inverse: var(--fm-white);--fm-border-default: var(--fm-gray-200);--fm-border-hover: var(--fm-gray-300);--fm-border-focus: var(--fm-primary-500);--fm-border-error: var(--fm-error-500);--fm-border-success: var(--fm-success-500);--fm-font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--fm-font-mono: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;--fm-text-xs: .75rem;--fm-text-sm: .8125rem;--fm-text-base: .875rem;--fm-text-lg: 1rem;--fm-text-xl: 1.25rem;--fm-text-2xl: 1.5rem;--fm-text-3xl: 1.875rem;--fm-font-normal: 400;--fm-font-medium: 500;--fm-font-semibold: 600;--fm-font-bold: 700;--fm-leading-none: 1;--fm-leading-tight: 1.25;--fm-leading-snug: 1.375;--fm-leading-normal: 1.5;--fm-leading-relaxed: 1.625;--fm-leading-loose: 2;--fm-spacing-0: 0;--fm-spacing-1: .25rem;--fm-spacing-2: .5rem;--fm-spacing-3: .75rem;--fm-spacing-4: 1rem;--fm-spacing-5: 1.25rem;--fm-spacing-6: 1.5rem;--fm-spacing-8: 2rem;--fm-spacing-10: 2.5rem;--fm-spacing-12: 3rem;--fm-spacing-16: 4rem;--fm-radius-none: 0;--fm-radius-sm: .125rem;--fm-radius-base: .25rem;--fm-radius-md: .375rem;--fm-radius-lg: .5rem;--fm-radius-xl: .75rem;--fm-radius-2xl: 1rem;--fm-radius-full: 9999px;--fm-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--fm-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);--fm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--fm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--fm-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--fm-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--fm-shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .06);--fm-shadow-focus: 0 0 0 3px rgba(59, 130, 246, .1);--fm-z-0: 0;--fm-z-10: 10;--fm-z-20: 20;--fm-z-30: 30;--fm-z-40: 40;--fm-z-50: 50;--fm-z-dropdown: 100;--fm-z-sticky: 200;--fm-z-fixed: 300;--fm-z-modal: 400;--fm-z-popover: 500;--fm-z-tooltip: 600;--fm-z-notification: 700;--fm-transition-fast: .15s;--fm-transition-base: .2s;--fm-transition-slow: .3s;--fm-transition-slower: .5s;--fm-ease-in: cubic-bezier(.4, 0, 1, 1);--fm-ease-out: cubic-bezier(0, 0, .2, 1);--fm-ease-in-out: cubic-bezier(.4, 0, .2, 1);--fm-toolbar-height: 48px;--fm-toolbar-bg: var(--fm-bg-primary);--fm-toolbar-border: var(--fm-border-default);--fm-panel-width: 280px;--fm-panel-bg: var(--fm-bg-secondary);--fm-panel-header-bg: var(--fm-bg-primary);--fm-canvas-bg: var(--fm-bg-tertiary);--fm-canvas-field-bg: var(--fm-bg-primary);--fm-canvas-field-border: var(--fm-border-default);--fm-canvas-field-hover-border: var(--fm-border-hover);--fm-canvas-field-selected-border: var(--fm-border-focus);--fm-btn-primary-bg: var(--fm-primary-500);--fm-btn-primary-hover-bg: var(--fm-primary-600);--fm-btn-primary-text: var(--fm-white);--fm-btn-secondary-bg: var(--fm-gray-100);--fm-btn-secondary-hover-bg: var(--fm-gray-200);--fm-btn-secondary-text: var(--fm-gray-700);--fm-btn-danger-bg: var(--fm-error-500);--fm-btn-danger-hover-bg: var(--fm-error-600);--fm-btn-danger-text: var(--fm-white);--fm-field-bg: var(--fm-bg-primary);--fm-field-border: var(--fm-border-default);--fm-field-focus-border: var(--fm-border-focus);--fm-field-error-border: var(--fm-border-error);--fm-field-disabled-bg: var(--fm-bg-disabled);--fm-field-disabled-text: var(--fm-text-disabled)}.dark-theme{--fm-bg-primary: var(--fm-gray-900);--fm-bg-secondary: var(--fm-gray-800);--fm-bg-tertiary: var(--fm-gray-700);--fm-bg-hover: var(--fm-gray-700);--fm-bg-active: var(--fm-primary-900);--fm-text-primary: var(--fm-gray-100);--fm-text-secondary: var(--fm-gray-300);--fm-text-tertiary: var(--fm-gray-400);--fm-text-placeholder: var(--fm-gray-500);--fm-border-default: var(--fm-gray-700);--fm-border-hover: var(--fm-gray-600);--fm-canvas-bg: var(--fm-gray-800);--fm-canvas-field-bg: var(--fm-gray-900);--fm-panel-bg: var(--fm-gray-800);--fm-panel-header-bg: var(--fm-gray-900)}*{box-sizing:border-box;margin:0;padding:0}.form-builder-container{display:flex;height:100%;min-height:0;background:#fff;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,sans-serif;font-size:14px;color:#1e293b;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;position:relative}.component-panel{width:300px;background:#f8fafc;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;height:100%;overflow:hidden}.panel-header{padding:16px;border-bottom:1px solid #e2e8f0;background:#fff;flex-shrink:0}.panel-header h3{margin:0 0 12px;font-size:14px;font-weight:600;color:#0f172a;text-transform:uppercase;letter-spacing:.025em}.search-input{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:2px;font-size:13px;background:#fff;transition:all .15s}.search-input::placeholder{color:#94a3b8}.search-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f60d}.field-categories{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 8px 20px;min-height:0}.field-category{margin-bottom:2px}.category-header{width:100%;padding:8px 12px;background:transparent;border:none;text-align:left;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:12px;font-weight:500;color:#64748b;border-radius:0;transition:all .15s;text-transform:uppercase;letter-spacing:.025em}.category-header:hover{background:#3b82f60d;color:#3b82f6}.category-icon{font-size:14px;opacity:.6}.category-name{flex:1}.category-toggle{font-size:10px;color:#94a3b8;transition:transform .15s}.category-header[aria-expanded=true] .category-toggle{transform:rotate(90deg)}.category-fields{padding:4px;display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.draggable-field{padding:9px 10px;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:move;display:flex;align-items:center;gap:8px;transition:all .15s;font-size:12px;color:#475569;-webkit-user-select:none;user-select:none;position:relative;min-height:36px;line-height:1}.draggable-field:hover{background:#f0f9ff;color:#3b82f6;border-color:#3b82f6;box-shadow:0 2px 8px #3b82f626;transform:translateY(-1px);z-index:10}.draggable-field:hover .field-icon svg{color:#3b82f6!important}.draggable-field:active{transform:scale(.98)}.field-icon{font-size:16px;opacity:.7;flex-shrink:0;display:flex;align-items:center;justify-content:center;width:16px;height:16px;line-height:1}.field-icon svg{width:16px;height:16px;display:block}.draggable-field .field-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:16px;height:16px;flex:1;display:flex;align-items:center;margin-bottom:0}.form-canvas-wrapper{flex:1;display:flex;flex-direction:column;background:#f1f5f9;overflow:hidden}.toolbar{padding:12px 20px;background:#fff;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:8px;height:52px}.toolbar-button{padding:6px 12px;background:#fff;border:1px solid #e2e8f0;border-radius:2px;cursor:pointer;font-size:12px;font-weight:500;display:flex;align-items:center;gap:6px;transition:all .15s;color:#64748b;height:32px}.toolbar-button:hover:not(:disabled){background:#f8fafc;border-color:#3b82f6;color:#3b82f6}.toolbar-button:hover:not(:disabled) svg{color:#3b82f6}.toolbar-button:active{background:#e2e8f0}.toolbar-button:disabled{opacity:.4;cursor:not-allowed}.toolbar-separator{width:1px;height:20px;background:#e2e8f0;margin:0 4px}.device-preview-switcher{display:flex;gap:2px;background:#e2e8f0;padding:3px;border-radius:8px}.device-button{display:flex;align-items:center;gap:8px;padding:8px 12px;background:transparent;border:none;border-radius:6px;cursor:pointer;font-size:12px;color:#64748b;transition:all .2s ease;white-space:nowrap;flex-shrink:0}.device-button:hover{background:#ffffff80;color:#475569}.device-button.active{background:#fff;color:#1e293b;box-shadow:0 1px 3px #0000001a}.device-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0}.device-button svg{transition:all .2s ease}.device-button.active svg{color:#3b82f6}.device-info{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0;flex:1}.device-label{font-weight:600;font-size:12px;line-height:1}.device-width{font-size:10px;color:#94a3b8;font-weight:500;line-height:1}.device-button.active .device-width{color:#64748b}.form-canvas{flex:1;margin:20px;background:#fff;border-radius:4px;border:1px solid #e2e8f0;overflow:auto;display:flex;flex-direction:column}.canvas-header{padding:20px 24px;border-bottom:1px solid #e2e8f0;background:#fff}.canvas-header h2{margin:0;font-size:18px;font-weight:600;color:#0f172a;-webkit-user-select:none;user-select:none;pointer-events:none}.canvas-header p{margin:4px 0 0;font-size:13px;color:#64748b}.canvas-drop-zone{flex:1;padding:20px;min-height:300px;background:#fff;border:2px solid transparent;transition:all .2s ease;position:relative}.canvas-drop-zone.empty{display:flex;align-items:center;justify-content:center}.empty-state{text-align:center;color:#94a3b8;font-size:13px;padding:40px;border:2px dashed #e2e8f0;border-radius:4px;background:#f8fafc;max-width:400px;width:100%}.sortable-field{margin-bottom:12px;border:2px solid #e2e8f0;border-radius:2px;background:#fff;transition:all .2s ease;position:relative;min-height:50px;cursor:pointer}.sortable-field:hover{border-color:#cbd5e1;background:#f8fafc;box-shadow:0 2px 8px #0000000f}.sortable-field.selected{border-color:#3b82f6;background:#eff6ff;box-shadow:0 0 0 3px #3b82f61a}.sortable-field.selected:hover{background:#dbeafe;box-shadow:0 0 0 3px #3b82f626}.sortable-field.dragging{opacity:.3;border-style:dashed}.sortable-field.drag-over-top:before,.sortable-field.drag-over-bottom:after{content:"";position:absolute;left:0;right:0;height:3px;background:#3b82f6;z-index:10}.sortable-field.drag-over-top:before{top:-6px}.sortable-field.drag-over-bottom:after{bottom:-6px}.sortable-field.drop-indicator:before{content:"";position:absolute;top:-3px;left:0;right:0;height:3px;background:#3b82f6;border-radius:2px;z-index:10;animation:pulse 1s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.field-controls{position:absolute;right:8px;top:8px;display:flex;gap:4px;opacity:0;transition:opacity .2s ease;z-index:10}.sortable-field:hover .field-controls,.sortable-field.selected .field-controls{opacity:1}.drag-handle{width:28px;height:28px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:2px;cursor:move;display:flex;align-items:center;justify-content:center;font-size:12px;color:#94a3b8;transition:all .2s ease}.drag-handle:hover{background:#f0f9ff;border-color:#3b82f6;color:#3b82f6}.drag-handle:hover svg{color:#3b82f6}.field-action{width:28px;height:28px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:2px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s ease;color:#94a3b8}.field-action:hover{background:#f0fdf4;border-color:#10b981;color:#10b981}.field-action:hover svg{color:#10b981}.field-action.delete:hover{background:#fef2f2;border-color:#ef4444;color:#ef4444}.field-action.delete:hover svg{color:#ef4444}.field-content{padding:16px 120px 16px 16px}.field-wrapper{width:100%}.field-label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:#334155}.required-mark{color:#ef4444;margin-left:2px}.field-input,.field-textarea,.field-select,.field-file{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:2px;font-size:13px;font-family:inherit;transition:all .2s ease;background:#fff}.field-input:hover:not(:focus):not(:disabled),.field-textarea:hover:not(:focus):not(:disabled),.field-select:hover:not(:focus):not(:disabled){border-color:#3b82f6;background:#f0f9ff}.field-input:focus,.field-textarea:focus,.field-select:focus{outline:none;border-color:#3b82f6;background:#fff;box-shadow:0 0 0 3px #3b82f60d}.field-input:disabled,.field-textarea:disabled,.field-select:disabled{background:#f1f5f9;cursor:not-allowed;opacity:.6}.field-textarea{resize:vertical;min-height:80px;line-height:1.5}.field-checkbox-group,.field-radio-group{display:flex;flex-direction:column;gap:8px}.checkbox-label,.radio-label{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;color:#475569;transition:color .2s ease}.checkbox-label:hover,.radio-label:hover{color:#1e293b}.field-checkbox,.field-radio{width:16px;height:16px;cursor:pointer;accent-color:#3b82f6}.field-help{display:block;margin-top:4px;font-size:12px;color:#94a3b8}.field-error{display:block;margin-top:4px;font-size:12px;color:#ef4444}.field-header{margin:0 0 12px;color:#0f172a;font-weight:600}.field-paragraph{margin:0 0 12px;color:#64748b;line-height:1.6;font-size:13px}.field-divider{margin:16px 0;border:none;border-top:1px solid #e2e8f0}.properties-panel{width:320px;background:#f8fafc;border-left:1px solid #e2e8f0;display:flex;flex-direction:column;height:100%;overflow:hidden}.properties-panel .panel-header{background:#fff;flex-shrink:0}.panel-tabs{display:flex;background:#fff;border-bottom:1px solid #e2e8f0;padding:0 8px;flex-shrink:0}.tab{flex:1;padding:10px 12px;background:transparent;border:none;cursor:pointer;font-size:13px;font-weight:500;color:#94a3b8;transition:all .15s;position:relative}.tab:hover:not(:disabled){color:#64748b;background:#64748b0d}.tab.active{color:#3b82f6;background:transparent}.tab.active:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:#3b82f6}.tab:disabled{opacity:.4;cursor:not-allowed}.panel-content{flex:1;padding:16px 16px 24px;overflow-y:auto;overflow-x:hidden;background:#f8fafc;min-height:0}.form-properties{width:100%;height:100%;position:relative}.property-section{margin-bottom:20px;background:#fff;border:1px solid #e2e8f0;border-radius:2px;padding:8px 12px;position:relative}.property-section h4{margin:0 0 12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.025em;color:#94a3b8;-webkit-user-select:none;user-select:none}.property-group{margin-bottom:12px;position:relative}.property-group:last-child{margin-bottom:0}.property-group label{display:block;margin-bottom:4px;font-size:12px;font-weight:500;color:#475569}.property-group input[type=text],.property-group input[type=number],.property-group select,.property-group textarea{width:100%;padding:6px 10px;border:1px solid #e2e8f0;border-radius:2px;font-size:13px;font-family:inherit;background:#fff;transition:all .15s;position:relative;z-index:10}.property-group input:focus,.property-group select:focus,.property-group textarea:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f60d}.property-group input[type=checkbox]{margin-right:6px;width:14px;height:14px;accent-color:#3b82f6}.property-label{display:block;margin-bottom:4px;font-size:12px;font-weight:500;color:#475569;-webkit-user-select:none;user-select:none;cursor:pointer}.property-input,.property-textarea{width:100%;padding:6px 10px;border:1px solid #e2e8f0;border-radius:2px;font-size:13px;font-family:inherit;background:#fff;transition:all .15s;outline:none;color:#1e293b;cursor:text;position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.property-input:hover:not(:focus),.property-textarea:hover:not(:focus){border-color:#cbd5e1;background:#fafafa}.property-input:focus,.property-textarea:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f60d;background:#fff;color:#1e293b;caret-color:#3b82f6}.property-input::placeholder,.property-textarea::placeholder{color:#94a3b8;opacity:1}.property-input:focus::placeholder,.property-textarea:focus::placeholder{color:#cbd5e1}.property-textarea{resize:vertical;min-height:50px;line-height:1.5}.options-list{margin-bottom:8px}.option-item{display:flex;gap:6px;margin-bottom:6px}.option-item input{flex:1;padding:6px 10px;border:1px solid #e2e8f0;border-radius:2px;font-size:12px;background:#fff;transition:all .15s}.option-item button{width:28px;height:28px;background:#fff;border:1px solid #e2e8f0;border-radius:2px;cursor:pointer;font-size:14px;color:#94a3b8;transition:all .15s;display:flex;align-items:center;justify-content:center}.option-item button:hover{background:#fee2e2;border-color:#fca5a5;color:#ef4444}.btn-add-option{width:100%;padding:8px;background:#3b82f6;border:none;border-radius:2px;cursor:pointer;font-size:12px;font-weight:500;color:#fff;transition:all .15s}.btn-add-option:hover{background:#2563eb}.btn-add-option:active{background:#1d4ed8}.no-selection{text-align:center;padding:32px 16px;color:#94a3b8;font-size:13px}.form-actions{padding:16px 20px;background:#f8fafc;border-top:1px solid #e2e8f0;display:flex;justify-content:flex-end;gap:8px}.btn{padding:8px 16px;border-radius:2px;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;border:1px solid}.btn-primary:active{background:#1d4ed8;border-color:#1d4ed8}.btn-secondary{background:#fff;color:#64748b;border-color:#e2e8f0}.btn-secondary:hover{background:#f8fafc;border-color:#cbd5e1;color:#475569}.btn-secondary:active{background:#e2e8f0}.drag-overlay{padding:16px;background:#fff;border:1px solid #3b82f6;border-radius:6px;box-shadow:0 4px 6px #0000001a;opacity:.9;max-width:300px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}.text-xs{font-size:12px}.text-sm{font-size:13px}.text-base{font-size:14px}.text-lg{font-size:16px}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}@media (max-width: 1200px){.component-panel,.properties-panel{width:280px}}@media (max-width: 992px){.form-builder-container{flex-direction:column}.component-panel,.properties-panel{width:100%;height:auto;max-height:200px}.form-canvas-wrapper{min-height:400px}}*:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.field-range-wrapper{display:flex;align-items:center;gap:12px}.field-range{flex:1;-webkit-appearance:none;height:4px;background:#e2e8f0;border-radius:2px;outline:none}.field-range::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;background:#3b82f6;border-radius:50%;cursor:pointer}.field-range::-moz-range-thumb{width:16px;height:16px;background:#3b82f6;border-radius:50%;cursor:pointer;border:none}.range-value{min-width:40px;text-align:center;font-weight:500;color:#475569}.field-color{width:100%;height:40px;padding:4px;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer}.field-switch{display:inline-flex;align-items:center;cursor:pointer;gap:8px}.switch-input{display:none}.switch-slider{width:44px;height:24px;background:#cbd5e1;border-radius:12px;position:relative;transition:background .2s}.switch-slider:after{content:"";position:absolute;width:18px;height:18px;background:#fff;border-radius:50%;top:3px;left:3px;transition:transform .2s}.switch-input:checked+.switch-slider{background:#3b82f6}.switch-input:checked+.switch-slider:after{transform:translate(20px)}.switch-label{font-size:13px;color:#475569}.field-rating{display:flex;gap:4px}.rating-star{background:none;border:none;font-size:24px;color:#e2e8f0;cursor:pointer;transition:color .15s;padding:0;line-height:1}.rating-star.filled{color:#fbbf24}.rating-star:hover:not(:disabled){color:#f59e0b}.rating-star:disabled{cursor:not-allowed;opacity:.5}.field-daterange{display:flex;gap:12px}.daterange-input{flex:1}.daterange-input label{display:block;font-size:12px;color:#64748b;margin-bottom:4px}.field-richtext{border:1px solid #e2e8f0;border-radius:6px;overflow:hidden}.richtext-toolbar{display:flex;gap:2px;padding:8px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.toolbar-btn{padding:6px 10px;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:12px;font-weight:500;color:#475569;cursor:pointer;transition:all .15s}.toolbar-btn:hover{background:#3b82f6;border-color:#3b82f6;color:#fff}.richtext-editor{min-height:120px;padding:8px 12px;font-size:14px;line-height:1.6;outline:none}.richtext-editor:focus{background:#f8fafc}.field-signature{display:flex;flex-direction:column;gap:8px}.signature-canvas{background:#fff;cursor:crosshair}.signature-clear{align-self:flex-start;padding:6px 12px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:4px;font-size:12px;color:#475569;cursor:pointer;transition:all .15s}.signature-clear:hover{background:#e2e8f0;color:#1e293b}.field-section{border:1px solid #e2e8f0;border-radius:6px;overflow:hidden;margin:12px 0}.section-header{padding:8px 12px;background:#f8fafc;font-weight:600;color:#1e293b;cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between}.section-header:after{content:"▼";font-size:10px;color:#64748b;transition:transform .2s}.field-section[open] .section-header:after{transform:rotate(180deg)}.section-content{padding:8px 12px;background:#fff}.field-alert{padding:8px 12px;border-radius:6px;font-size:13px;margin:8px 0}.alert-info{background:#dbeafe;color:#1e40af;border-left:3px solid #3b82f6}.alert-success{background:#d1fae5;color:#065f46;border-left:3px solid #10b981}.alert-warning{background:#fed7aa;color:#92400e;border-left:3px solid #f97316}.alert-error{background:#fee2e2;color:#991b1b;border-left:3px solid #ef4444}.field-unsupported{padding:8px 12px;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;color:#64748b;font-size:13px;text-align:center}.toolbar-button svg,.field-action svg,.drag-handle svg,.category-icon svg,.field-icon svg{width:18px;height:18px;display:flex}.category-toggle svg{width:16px;height:16px;transition:transform .2s}.rating-star svg{width:20px;height:20px}.field-action svg,.drag-handle svg{pointer-events:none}.toolbar-button span{line-height:1}.field-action,.drag-handle{display:flex;align-items:center;justify-content:center;padding:4px}.draggable-field{display:flex;align-items:center;gap:8px}.field-icon{display:flex;align-items:center;color:#64748b}.form-preview-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease}.form-preview-container{background:#fff;border-radius:12px;width:90%;max-width:800px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0000004d;animation:slideIn .3s ease}.preview-header{padding:20px 24px;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.preview-header h2{margin:0;font-size:18px;font-weight:600;color:#0f172a}.close-button{width:32px;height:32px;border:none;background:#f8fafc;border-radius:6px;font-size:20px;color:#64748b;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}.close-button:hover{background:#e2e8f0;color:#475569}.preview-content{flex:1;overflow-y:auto;padding:24px}.preview-empty{text-align:center;padding:60px 20px;color:#94a3b8}.preview-empty p{margin:8px 0;font-size:14px}.preview-form{max-width:600px;margin:0 auto}.form-header{margin-bottom:32px}.form-header h3{margin:0 0 8px;font-size:24px;font-weight:600;color:#0f172a}.form-description{margin:0;font-size:14px;color:#64748b;line-height:1.5}.form-fields{margin-bottom:32px}.preview-field{margin-bottom:24px}.form-actions{display:flex;gap:12px;justify-content:flex-end;padding-top:20px;border-top:1px solid #e2e8f0}.btn-primary,.btn-secondary{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .15s;border:1px solid transparent}.btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.btn-primary:hover{background:#2563eb;border-color:#2563eb}.btn-secondary{background:#fff;color:#475569;border-color:#e2e8f0}.btn-secondary:hover{background:#f8fafc;border-color:#cbd5e1}.drag-overlay{background:#fff;border:2px solid #3b82f6;border-radius:8px;padding:16px;box-shadow:0 10px 30px #0003;opacity:.9;max-width:300px}.new-field-overlay{padding:12px 20px;background:#3b82f6;color:#fff;font-size:14px;font-weight:500;border:none}.canvas-drop-zone.drag-over{background:#fafbfc;border:2px solid transparent}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172ab3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease-out}.modal-content{background:#fff;border-radius:8px;box-shadow:0 20px 60px #0000004d;max-width:600px;width:90%;max-height:80vh;display:flex;flex-direction:column;animation:slideIn .2s ease-out}@keyframes slideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{padding:20px 24px;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.modal-header h3{font-size:18px;font-weight:600;color:#0f172a;margin:0}.modal-close{background:none;border:none;cursor:pointer;padding:4px;color:#64748b;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.modal-close:hover{background:#f1f5f9;color:#0f172a}.modal-body{padding:24px;overflow-y:auto;flex:1}.modal-footer{padding:16px 24px;border-top:1px solid #e2e8f0;display:flex;gap:12px;justify-content:flex-end;flex-shrink:0}.condition-modal-content{max-width:720px}.condition-field-info{margin-bottom:24px;padding:16px;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border-radius:8px;border:1px solid #e2e8f0}.condition-field-label{font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px;display:block}.condition-field-value{font-size:15px;font-weight:600;color:#0f172a;display:flex;align-items:center;gap:8px}.condition-field-type{display:inline-flex;align-items:center;padding:2px 8px;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:11px;font-weight:500;color:#64748b;text-transform:uppercase}.condition-section{margin-bottom:24px}.condition-section-label{display:block;font-size:13px;font-weight:600;color:#475569;margin-bottom:12px}.toggle-group{display:flex;gap:12px;flex-wrap:wrap}.toggle-option{flex:1;min-width:240px;position:relative}.toggle-option input[type=radio]{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.toggle-option label{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:14px 16px;background:#fff;border:2px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s ease;font-size:14px;font-weight:500;color:#64748b;width:100%;box-sizing:border-box;white-space:nowrap}.toggle-option label:hover{border-color:#cbd5e1;background:#f8fafc}.toggle-option input[type=radio]:checked+label{background:#eff6ff;border-color:#3b82f6;color:#1e40af;box-shadow:0 0 0 3px #3b82f61a}.toggle-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;line-height:1}.toggle-icon svg{width:20px;height:20px;display:block}.logic-toggle-group{display:inline-flex;gap:8px;padding:4px;background:#f1f5f9;border-radius:6px}.logic-toggle-option input[type=radio]{position:absolute;opacity:0;pointer-events:none}.logic-toggle-option label{display:inline-flex;align-items:center;padding:6px 16px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s ease;font-size:13px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.025em}.logic-toggle-option label:hover{color:#475569}.logic-toggle-option input[type=radio]:checked+label{background:#fff;color:#3b82f6;box-shadow:0 1px 3px #0000001a}.condition-rules-list{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.condition-card{display:flex;align-items:flex-start;gap:12px;padding:16px;background:#fff;border:2px solid #e2e8f0;border-radius:8px;transition:all .2s ease;animation:slideInRule .3s ease-out}@keyframes slideInRule{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.condition-card:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000d}.condition-card-content{flex:1;display:flex;flex-direction:column;gap:10px;min-width:0}.condition-card-actions{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:4px;padding-top:2px}.condition-input,.condition-select{width:100%;padding:10px 12px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;font-family:inherit;background:#f8fafc;color:#0f172a;transition:all .2s ease}.condition-input:hover,.condition-select:hover{background:#f1f5f9;border-color:#94a3b8}.condition-input:focus,.condition-select:focus{outline:none;background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.condition-input::placeholder{color:#94a3b8}.condition-select{cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='%2364748b' d='M8 11L3 6h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 16px;padding-right:40px}.condition-btn{padding:10px 18px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:8px;border:1px solid transparent;font-family:inherit}.condition-btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.condition-btn-primary:hover{background:#2563eb;border-color:#2563eb;box-shadow:0 2px 8px #3b82f64d}.condition-btn-primary:active{background:#1d4ed8;transform:translateY(1px)}.condition-btn-secondary{background:#fff;color:#475569;border-color:#cbd5e1}.condition-btn-secondary:hover{background:#f8fafc;border-color:#94a3b8}.condition-btn-secondary:active{background:#f1f5f9}.condition-btn-danger{background:#fff;color:#ef4444;border-color:#fecaca}.condition-btn-danger:hover{background:#fef2f2;border-color:#ef4444}.condition-btn-add{background:#fff;color:#3b82f6;border-color:#bfdbfe;justify-content:center}.condition-btn-add:hover{background:#eff6ff;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 8px #3b82f633}.condition-btn-add:active{transform:translateY(0)}.condition-btn-icon{width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:6px}.condition-btn-icon.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.field-condition-badge{position:absolute;top:8px;right:128px;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;font-size:10px;font-weight:600;padding:3px 8px;border-radius:10px;display:flex;align-items:center;gap:4px;box-shadow:0 2px 4px #6366f14d;animation:badgePulse 2s ease-in-out infinite}@keyframes badgePulse{0%,to{box-shadow:0 2px 4px #6366f14d}50%{box-shadow:0 2px 8px #6366f180}}.field-condition-badge-icon{font-size:12px;display:flex;align-items:center;justify-content:center;width:12px;height:12px}.field-condition-badge-icon svg{width:12px;height:12px}.field-action.settings:hover{background:#f5f3ff;border-color:#8b5cf6;color:#8b5cf6}.field-action.settings:hover svg{color:#8b5cf6}.field-action.settings.has-conditions{background:#f5f3ff;border-color:#a78bfa;color:#7c3aed}.field-action.settings.has-conditions svg{color:#7c3aed}.condition-empty-state{text-align:center;padding:48px 24px}.condition-empty-icon{font-size:48px;margin-bottom:16px;opacity:.3;display:flex;align-items:center;justify-content:center;color:#f59e0b}.condition-empty-icon svg{width:48px;height:48px}.condition-empty-title{font-size:16px;font-weight:600;color:#475569;margin-bottom:8px}.condition-empty-text{font-size:14px;color:#94a3b8;line-height:1.6;max-width:400px;margin:0 auto}@media (max-width: 768px){.condition-modal-content{max-width:95%}.toggle-option{min-width:100%}.condition-card{flex-direction:column}.condition-card-actions{flex-direction:row;justify-content:flex-end}}.canvas-end-drop-zone{min-height:50px;margin-top:8px;border:2px dashed transparent;border-radius:8px;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.canvas-end-drop-zone.drag-over-end{border-color:#3b82f6;background:#eff6ff}.drop-indicator-end{color:#3b82f6;font-size:14px;font-weight:500;padding:8px 12px}.field-drop-indicator{min-height:50px;margin:8px 0;border:2px dashed #3b82f6;border-radius:8px;background:#eff6ff;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease}.drop-indicator-text{color:#3b82f6;font-size:14px;font-weight:500;padding:8px 12px}@keyframes fadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.drop-indicator{min-height:50px;margin:8px 0;border:2px dashed #3b82f6;border-radius:8px;background:#eff6ff;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease}.form-viewer{width:100%;max-width:100%}.form-viewer-header{margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid #e5e7eb}.form-viewer-title{margin:0 0 8px;font-size:28px;font-weight:600;color:#0f172a}.form-viewer-description{margin:0;font-size:15px;color:#64748b;line-height:1.6}.form-viewer-fields{display:flex;flex-direction:column;gap:24px}.form-viewer-footer{margin-top:32px;padding-top:24px;border-top:1px solid #e5e7eb;display:flex;gap:12px}.form-viewer-button{padding:10px 20px;font-size:14px;font-weight:500;border:none;border-radius:2px;cursor:pointer;transition:all .2s}.form-viewer-button-primary{background:#3b82f6;color:#fff}.form-viewer-button-primary:hover:not(:disabled){background:#2563eb}.form-viewer-button-secondary{background:#f1f5f9;color:#475569}.form-viewer-button-secondary:hover:not(:disabled){background:#e2e8f0}.form-viewer-button:disabled{opacity:.5;cursor:not-allowed}.form-field{display:flex;flex-direction:column;gap:8px}.form-field-label{font-size:14px;font-weight:500;color:#334155;display:block}.required-mark{color:#ef4444;margin-left:4px}.form-field-input,.form-field-textarea-input,.form-field-select-input{width:100%;padding:8px 12px;font-size:14px;color:#1e293b;border:1px solid #cbd5e1;border-radius:2px;background:#fff;transition:all .2s;cursor:text}.form-field-input::placeholder,.form-field-textarea-input::placeholder,.form-field-select-input::placeholder{color:#94a3b8;opacity:1}.form-field-input:focus,.form-field-textarea-input:focus,.form-field-select-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.form-field-input.has-error,.form-field-textarea-input.has-error,.form-field-select-input.has-error{border-color:#ef4444}.form-field-input.has-error:focus,.form-field-textarea-input.has-error:focus,.form-field-select-input.has-error:focus{box-shadow:0 0 0 3px #ef44441a}.form-field-input:disabled,.form-field-textarea-input:disabled,.form-field-select-input:disabled,.form-field-input[readonly],.form-field-textarea-input[readonly],.form-field-select-input[readonly]{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.form-field-textarea-input{min-height:80px;resize:vertical}.form-field-help{font-size:13px;color:#64748b;line-height:1.4}.form-field-error{font-size:13px;color:#dc2626;line-height:1.4;display:flex;align-items:center;gap:4px}.form-field-error:before{content:"!";display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#fee2e2;color:#dc2626;font-size:11px;font-weight:600;flex-shrink:0}.form-field-checkbox,.form-field-checkbox-group{display:flex;flex-direction:column;gap:8px}.form-field-checkbox-wrapper{display:flex;align-items:center;gap:8px}.form-field-checkbox-options{display:flex;flex-direction:column;gap:12px}.form-field-checkbox-input{width:18px;height:18px;border:1px solid #cbd5e1;border-radius:2px;cursor:pointer;flex-shrink:0}.form-field-checkbox-input:checked{accent-color:#3b82f6}.form-field-checkbox-input:disabled{cursor:not-allowed;opacity:.5}.form-field-checkbox-label{font-size:14px;color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none}.form-field-checkbox-input:disabled+.form-field-checkbox-label{cursor:not-allowed;opacity:.5}.form-field-radio{display:flex;flex-direction:column;gap:8px}.form-field-radio-options{display:flex;flex-direction:column;gap:12px}.form-field-radio-wrapper{display:flex;align-items:center;gap:8px}.form-field-radio-input{width:18px;height:18px;border:1px solid #cbd5e1;cursor:pointer;flex-shrink:0}.form-field-radio-input:checked{accent-color:#3b82f6}.form-field-radio-input:disabled{cursor:not-allowed;opacity:.5}.form-field-radio-label{font-size:14px;color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none}.form-field-radio-input:disabled+.form-field-radio-label{cursor:not-allowed;opacity:.5}.form-viewer-status{margin-top:20px;padding:12px 16px;border-radius:2px;animation:slideIn .3s ease}.form-viewer-status-content{display:flex;align-items:center;gap:10px}.form-viewer-status-icon{font-size:18px;font-weight:600;flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.form-viewer-status-message{font-size:14px;line-height:1.4}.form-viewer-status-success{background:#f0fdf4;border:1px solid #86efac;color:#166534}.form-viewer-status-success .form-viewer-status-icon{background:#22c55e;color:#fff}.form-viewer-status-error{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}.form-viewer-status-error .form-viewer-status-icon{background:#ef4444;color:#fff}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.field-header{margin:16px 0 8px}.field-header h3{margin:0;font-size:18px;font-weight:600;color:#1e293b}.field-paragraph{margin:8px 0}.field-paragraph p{margin:0;font-size:14px;color:#64748b;line-height:1.6}.field-divider{margin:24px 0;border:none;border-top:1px solid #e5e7eb}.field-unsupported{padding:16px;background:#fef2f2;border:1px solid #fecaca;border-radius:2px}.field-unsupported p{margin:0;font-size:14px;color:#991b1b}.form-field-switch-wrapper{display:flex;align-items:center;gap:12px}.form-field-switch-container{position:relative;display:inline-block;width:44px;height:24px;cursor:pointer}.form-field-switch-input{opacity:0;width:0;height:0}.form-field-switch-slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#cbd5e1;transition:.3s;border-radius:24px}.form-field-switch-slider:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.3s;border-radius:50%;box-shadow:0 2px 4px #0003}.form-field-switch-input:checked+.form-field-switch-slider{background-color:#3b82f6}.form-field-switch-input:checked+.form-field-switch-slider:before{transform:translate(20px)}.form-field-switch-input:disabled+.form-field-switch-slider{opacity:.5;cursor:not-allowed}.form-field-switch-label{font-size:14px;color:#475569;-webkit-user-select:none;user-select:none}.form-field-range-wrapper{display:flex;align-items:center;gap:12px}.form-field-range-container{flex:1;position:relative}.form-field-range-input{width:100%;height:6px;border-radius:3px;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.form-field-range-input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:#3b82f6;cursor:pointer;box-shadow:0 2px 4px #0003}.form-field-range-input::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:#3b82f6;cursor:pointer;box-shadow:0 2px 4px #0003}.form-field-range-input:disabled{opacity:.5;cursor:not-allowed}.form-field-range-value{position:absolute;top:-25px;left:50%;transform:translate(-50%);background:#1e293b;color:#fff;padding:2px 8px;border-radius:2px;font-size:12px;font-weight:500}.form-field-range-label-min,.form-field-range-label-max{font-size:12px;color:#64748b;min-width:30px}.form-field-rating-wrapper{display:flex;align-items:center;gap:16px}.form-field-rating-stars{display:flex;gap:4px}.form-field-rating-star{font-size:24px;color:#e5e7eb;cursor:pointer;transition:color .2s;background:none;border:none;padding:0}.form-field-rating-star:hover:not(:disabled){color:#fbbf24}.form-field-rating-star-filled{color:#f59e0b}.form-field-rating-star:disabled{cursor:not-allowed;opacity:.5}.form-field-rating-label{font-size:14px;color:#64748b;font-style:italic}.form-field-file-wrapper{display:flex;align-items:center;gap:12px}.form-field-file-input{display:none}.form-field-file-button{padding:8px 16px;background:#f1f5f9;border:1px solid #cbd5e1;border-radius:2px;color:#475569;font-size:14px;cursor:pointer;transition:all .2s}.form-field-file-button:hover:not(:disabled){background:#e2e8f0;border-color:#94a3b8}.form-field-file-button:disabled{opacity:.5;cursor:not-allowed}.form-field-color-wrapper{display:flex;align-items:center;gap:12px}.form-field-color-input{width:50px;height:40px;border:1px solid #cbd5e1;border-radius:2px;cursor:pointer;padding:2px}.form-field-color-input:disabled{opacity:.5;cursor:not-allowed}.form-field-color-value{font-size:14px;color:#475569;font-family:monospace;text-transform:uppercase}.form-field-section{margin:24px 0;border:1px solid #e5e7eb;border-radius:2px;overflow:hidden}.form-field-section-header{padding:16px;background:#f8fafc;border-bottom:1px solid #e5e7eb}.form-field-section-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;justify-content:space-between;align-items:center}.form-field-section-header.collapsible:hover{background:#f1f5f9}.form-field-section-title{margin:0;font-size:16px;font-weight:600;color:#1e293b}.form-field-section-description{margin:4px 0 0;font-size:14px;color:#64748b}.form-field-section-toggle{font-size:14px;color:#64748b;transition:transform .2s}.form-field-section-content{padding:20px}.form-field-section.collapsed .form-field-section-header{border-bottom:none}.form-field-alert{padding:12px 16px;border-radius:2px;margin:16px 0;display:flex;justify-content:space-between;align-items:flex-start}.form-field-alert-content{display:flex;gap:12px;flex:1}.form-field-alert-icon{font-size:18px;font-weight:600;flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.form-field-alert-text{flex:1}.form-field-alert-title{font-size:14px;font-weight:600;margin-bottom:4px}.form-field-alert-message{font-size:14px;line-height:1.5}.form-field-alert-dismiss{background:none;border:none;font-size:18px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;opacity:.6;transition:opacity .2s}.form-field-alert-dismiss:hover{opacity:1}.form-field-alert-info{background:#eff6ff;border:1px solid #93c5fd;color:#1e40af}.form-field-alert-info .form-field-alert-icon{background:#3b82f6;color:#fff}.form-field-alert-success{background:#f0fdf4;border:1px solid #86efac;color:#166534}.form-field-alert-success .form-field-alert-icon{background:#22c55e;color:#fff}.form-field-alert-warning{background:#fffbeb;border:1px solid #fde68a;color:#92400e}.form-field-alert-warning .form-field-alert-icon{background:#f59e0b;color:#fff}.form-field-alert-error{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}.form-field-alert-error .form-field-alert-icon{background:#ef4444;color:#fff}*,*:before,*:after{box-sizing:border-box}.fm-root{font-family:var(--fm-font-sans);font-size:var(--fm-text-base);line-height:var(--fm-leading-normal);color:var(--fm-text-primary);background-color:var(--fm-bg-primary)}.fm-text-xs{font-size:var(--fm-text-xs)}.fm-text-sm{font-size:var(--fm-text-sm)}.fm-text-base{font-size:var(--fm-text-base)}.fm-text-lg{font-size:var(--fm-text-lg)}.fm-text-xl{font-size:var(--fm-text-xl)}.fm-font-normal{font-weight:var(--fm-font-normal)}.fm-font-medium{font-weight:var(--fm-font-medium)}.fm-font-semibold{font-weight:var(--fm-font-semibold)}.fm-font-bold{font-weight:var(--fm-font-bold)}.fm-m-0{margin:var(--fm-spacing-0)}.fm-m-1{margin:var(--fm-spacing-1)}.fm-m-2{margin:var(--fm-spacing-2)}.fm-m-3{margin:var(--fm-spacing-3)}.fm-m-4{margin:var(--fm-spacing-4)}.fm-p-0{padding:var(--fm-spacing-0)}.fm-p-1{padding:var(--fm-spacing-1)}.fm-p-2{padding:var(--fm-spacing-2)}.fm-p-3{padding:var(--fm-spacing-3)}.fm-p-4{padding:var(--fm-spacing-4)}.fm-shadow-sm{box-shadow:var(--fm-shadow-sm)}.fm-shadow-md{box-shadow:var(--fm-shadow-md)}.fm-shadow-lg{box-shadow:var(--fm-shadow-lg)}.fm-rounded-none{border-radius:var(--fm-radius-none)}.fm-rounded-sm{border-radius:var(--fm-radius-sm)}.fm-rounded{border-radius:var(--fm-radius-base)}.fm-rounded-md{border-radius:var(--fm-radius-md)}.fm-rounded-lg{border-radius:var(--fm-radius-lg)}.fm-transition-fast{transition-duration:var(--fm-transition-fast);transition-timing-function:var(--fm-ease-in-out)}.fm-transition{transition-duration:var(--fm-transition-base);transition-timing-function:var(--fm-ease-in-out)}.fm-transition-slow{transition-duration:var(--fm-transition-slow);transition-timing-function:var(--fm-ease-in-out)}.preview-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.preview-modal{background:#f8fafc;border-radius:12px;width:95vw;height:95vh;max-width:1800px;display:flex;flex-direction:column;box-shadow:0 25px 50px -12px #00000040;animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.preview-modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #e2e8f0;background:#fff;border-radius:12px 12px 0 0}.preview-modal-title{display:flex;align-items:center;gap:12px}.preview-modal-title .icon-renderer{color:#3b82f6}.preview-modal-title .material-icons-outlined{color:#3b82f6;font-size:24px}.preview-modal-title h3{margin:0;font-size:18px;font-weight:600;color:#0f172a}.preview-modal-controls{display:flex;align-items:center;gap:16px}.preview-close-button{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;flex-shrink:0}.preview-close-button .icon-renderer,.preview-close-button .material-icons-outlined{color:#64748b}.preview-close-button:hover{background:#fee2e2;border-color:#ef4444}.preview-close-button:hover .icon-renderer,.preview-close-button:hover .material-icons-outlined{color:#ef4444}.preview-modal-content{flex:1;overflow:auto;padding:32px;background:#f8fafc;display:flex;align-items:flex-start;justify-content:center}.preview-device-frame{background:#fff;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;padding:32px;width:100%;transition:all .3s ease}.preview-device-frame.device-desktop{max-width:100%}.preview-device-frame.device-tablet{max-width:768px;margin:0 auto}.preview-device-frame.device-mobile{max-width:375px;margin:0 auto}.preview-form{width:100%}.toolbar-button-primary{background:#3b82f6!important;color:#fff!important;border-color:#3b82f6!important}.toolbar-button-primary:hover:not(:disabled){background:#2563eb!important;border-color:#2563eb!important;transform:translateY(-1px);box-shadow:0 4px 6px -1px #3b82f64d}.toolbar-button-primary svg,.toolbar-button-primary .material-icons-outlined{color:#fff!important}
@@ -0,0 +1,197 @@
1
+ export type DeviceType = 'desktop' | 'tablet' | 'mobile';
2
+ export interface DeviceBreakpoint {
3
+ type: DeviceType;
4
+ label: string;
5
+ width: number;
6
+ height?: number;
7
+ icon: string;
8
+ }
9
+ export declare const DEVICE_BREAKPOINTS: Record<DeviceType, DeviceBreakpoint>;
10
+ export type FieldType = 'text' | 'number' | 'email' | 'password' | 'textarea' | 'phone' | 'url' | 'search' | 'select' | 'checkbox' | 'radio' | 'switch' | 'rating' | 'range' | 'date' | 'time' | 'datetime' | 'daterange' | 'richtext' | 'color' | 'file' | 'image' | 'signature' | 'header' | 'paragraph' | 'divider' | 'section' | 'alert';
11
+ export interface FieldValidation {
12
+ required?: boolean;
13
+ minLength?: number;
14
+ maxLength?: number;
15
+ min?: number;
16
+ max?: number;
17
+ pattern?: string;
18
+ customMessage?: string;
19
+ }
20
+ export type ConditionOperator = 'is_checked' | 'is_not_checked' | 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'greater_than' | 'less_than' | 'greater_than_or_equal' | 'less_than_or_equal' | 'includes' | 'not_includes';
21
+ export interface ConditionRule {
22
+ fieldId: string;
23
+ operator: ConditionOperator;
24
+ value?: any;
25
+ }
26
+ export interface FieldConditions {
27
+ show?: ConditionRule[];
28
+ hide?: ConditionRule[];
29
+ logic?: 'and' | 'or';
30
+ }
31
+ export interface FieldStyle {
32
+ width?: '25%' | '50%' | '75%' | '100%';
33
+ className?: string;
34
+ textAlign?: 'left' | 'center' | 'right';
35
+ }
36
+ export interface BaseFieldDefinition {
37
+ id: string;
38
+ type: FieldType;
39
+ name?: string;
40
+ label?: string;
41
+ placeholder?: string;
42
+ helpText?: string;
43
+ defaultValue?: any;
44
+ validation?: FieldValidation;
45
+ style?: FieldStyle;
46
+ required?: boolean;
47
+ disabled?: boolean;
48
+ hidden?: boolean;
49
+ conditions?: FieldConditions;
50
+ }
51
+ export interface SelectOption {
52
+ label: string;
53
+ value: string | number;
54
+ }
55
+ export interface SelectFieldDefinition extends BaseFieldDefinition {
56
+ type: 'select' | 'radio';
57
+ options: SelectOption[];
58
+ multiple?: boolean;
59
+ }
60
+ export interface TextFieldDefinition extends BaseFieldDefinition {
61
+ type: 'text' | 'email' | 'password' | 'textarea' | 'phone' | 'url' | 'search';
62
+ maxLength?: number;
63
+ pattern?: string;
64
+ }
65
+ export interface NumberFieldDefinition extends BaseFieldDefinition {
66
+ type: 'number';
67
+ min?: number;
68
+ max?: number;
69
+ step?: number;
70
+ }
71
+ export interface CheckboxFieldDefinition extends BaseFieldDefinition {
72
+ type: 'checkbox';
73
+ options?: SelectOption[];
74
+ }
75
+ export interface FileFieldDefinition extends BaseFieldDefinition {
76
+ type: 'file' | 'image' | 'signature';
77
+ accept?: string;
78
+ multiple?: boolean;
79
+ maxSize?: number;
80
+ maxFiles?: number;
81
+ showPreview?: boolean;
82
+ buttonText?: string;
83
+ dragDropText?: string;
84
+ uploadUrl?: string;
85
+ uploadMethod?: string;
86
+ uploadFieldName?: string;
87
+ uploadHeaders?: string;
88
+ withCredentials?: boolean;
89
+ responseSuccessKey?: string;
90
+ responseUrlKey?: string;
91
+ }
92
+ export interface StaticFieldDefinition extends BaseFieldDefinition {
93
+ type: 'header' | 'paragraph' | 'divider' | 'alert';
94
+ content?: string;
95
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
96
+ alertType?: 'info' | 'success' | 'warning' | 'error';
97
+ }
98
+ export interface RangeFieldDefinition extends BaseFieldDefinition {
99
+ type: 'range';
100
+ min?: number;
101
+ max?: number;
102
+ step?: number;
103
+ showValue?: boolean;
104
+ }
105
+ export interface RatingFieldDefinition extends BaseFieldDefinition {
106
+ type: 'rating';
107
+ maxRating?: number;
108
+ allowHalf?: boolean;
109
+ icon?: string;
110
+ }
111
+ export interface SwitchFieldDefinition extends BaseFieldDefinition {
112
+ type: 'switch';
113
+ onLabel?: string;
114
+ offLabel?: string;
115
+ }
116
+ export interface RichTextFieldDefinition extends BaseFieldDefinition {
117
+ type: 'richtext';
118
+ toolbar?: string[];
119
+ maxLength?: number;
120
+ }
121
+ export interface DateRangeFieldDefinition extends BaseFieldDefinition {
122
+ type: 'daterange';
123
+ minDate?: string;
124
+ maxDate?: string;
125
+ startLabel?: string;
126
+ endLabel?: string;
127
+ }
128
+ export interface ColorFieldDefinition extends BaseFieldDefinition {
129
+ type: 'color';
130
+ format?: 'hex' | 'rgb' | 'hsl';
131
+ showInput?: boolean;
132
+ }
133
+ export interface TimeFieldDefinition extends BaseFieldDefinition {
134
+ type: 'time';
135
+ format?: '12' | '24';
136
+ minTime?: string;
137
+ maxTime?: string;
138
+ }
139
+ export interface DateTimeFieldDefinition extends BaseFieldDefinition {
140
+ type: 'datetime';
141
+ format?: '12' | '24';
142
+ minDate?: string;
143
+ maxDate?: string;
144
+ }
145
+ export interface DateFieldDefinition extends BaseFieldDefinition {
146
+ type: 'date';
147
+ minDate?: string;
148
+ maxDate?: string;
149
+ }
150
+ export interface SectionFieldDefinition extends BaseFieldDefinition {
151
+ type: 'section';
152
+ title?: string;
153
+ collapsible?: boolean;
154
+ collapsed?: boolean;
155
+ fields?: FieldDefinition[];
156
+ }
157
+ export type FieldDefinition = TextFieldDefinition | NumberFieldDefinition | SelectFieldDefinition | CheckboxFieldDefinition | FileFieldDefinition | StaticFieldDefinition | RangeFieldDefinition | RatingFieldDefinition | SwitchFieldDefinition | RichTextFieldDefinition | DateRangeFieldDefinition | ColorFieldDefinition | TimeFieldDefinition | DateTimeFieldDefinition | DateFieldDefinition | SectionFieldDefinition | BaseFieldDefinition;
158
+ export interface FormSchema {
159
+ id: string;
160
+ title: string;
161
+ description?: string;
162
+ fields: FieldDefinition[];
163
+ settings?: {
164
+ submitButtonText?: string;
165
+ cancelButtonText?: string;
166
+ showLabels?: boolean;
167
+ labelPosition?: 'top' | 'left' | 'right';
168
+ theme?: 'light' | 'dark';
169
+ clearOnSubmit?: boolean;
170
+ };
171
+ version?: string;
172
+ createdAt?: Date;
173
+ updatedAt?: Date;
174
+ }
175
+ export interface FieldComponentProps {
176
+ field: FieldDefinition;
177
+ value?: any;
178
+ onChange?: (value: any) => void;
179
+ error?: string;
180
+ readonly?: boolean;
181
+ }
182
+ export interface DragItem {
183
+ type: 'new-field' | 'existing-field';
184
+ fieldType?: FieldType;
185
+ fieldId?: string;
186
+ index?: number;
187
+ }
188
+ export interface FieldCategory {
189
+ name: string;
190
+ icon?: string;
191
+ fields: {
192
+ type: FieldType;
193
+ label: string;
194
+ icon?: string;
195
+ }[];
196
+ }
197
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAqBnE,CAAC;AAEF,MAAM,MAAM,SAAS,GAEjB,MAAM,GACN,QAAQ,GACR,OAAO,GACP,UAAU,GACV,UAAU,GACV,OAAO,GACP,KAAK,GACL,QAAQ,GAER,QAAQ,GACR,UAAU,GACV,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GAEP,MAAM,GACN,MAAM,GACN,UAAU,GACV,WAAW,GAEX,UAAU,GACV,OAAO,GACP,MAAM,GACN,OAAO,GACP,WAAW,GAEX,QAAQ,GACR,WAAW,GACX,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,MAAM,iBAAiB,GAEzB,YAAY,GACZ,gBAAgB,GAEhB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,cAAc,GACd,aAAa,GACb,WAAW,GACX,UAAU,GACV,cAAc,GAEd,cAAc,GACd,WAAW,GACX,uBAAuB,GACvB,oBAAoB,GAEpB,UAAU,GACV,cAAc,CAAC;AAEnB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;CACtD;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,mBAAmB,GACnB,qBAAqB,GACrB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,wBAAwB,GACxB,oBAAoB,GACpB,mBAAmB,GACnB,uBAAuB,GACvB,mBAAmB,GACnB,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE;QACT,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QACzC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,SAAS,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL"}
@@ -0,0 +1,19 @@
1
+ import { FieldDefinition } from '../types';
2
+
3
+ export interface ValidationError {
4
+ fieldId: string;
5
+ message: string;
6
+ }
7
+ export type ValidatorFunction = (value: any, field: FieldDefinition, formValues?: Record<string, any>) => string | null;
8
+ export declare const validators: Record<string, ValidatorFunction>;
9
+ export declare const validateField: (field: FieldDefinition, value: any, formValues?: Record<string, any>) => string | null;
10
+ export declare const validateForm: (fields: FieldDefinition[], formValues: Record<string, any>) => ValidationError[];
11
+ export declare const createCustomValidator: (validationFn: (value: any, formValues?: Record<string, any>) => boolean, errorMessage: string) => ValidatorFunction;
12
+ export declare const commonValidators: {
13
+ confirmPassword: ValidatorFunction;
14
+ minAge: (minAge: number) => ValidatorFunction;
15
+ fileSize: (maxSizeInMB: number) => ValidatorFunction;
16
+ futureDate: ValidatorFunction;
17
+ pastDate: ValidatorFunction;
18
+ };
19
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;AAExH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAuExD,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,eAAe,EACtB,OAAO,GAAG,EACV,aAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC/B,MAAM,GAAG,IAuBX,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,QAAQ,eAAe,EAAE,EACzB,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC9B,eAAe,EAgBjB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,EACvE,cAAc,MAAM,KACnB,iBAKF,CAAC;AAGF,eAAO,MAAM,gBAAgB;;qBAQV,MAAM;4BAWC,MAAM;;;CA8B/B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "formmorf-builder",
3
+ "version": "1.0.0",
4
+ "description": "Enterprise React form builder library with drag-and-drop functionality, responsive previews, and comprehensive validation",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "README.md",
11
+ "LICENSE"
12
+ ],
13
+ "scripts": {
14
+ "dev": "vite build --watch",
15
+ "build": "vite build",
16
+ "test": "vitest"
17
+ },
18
+ "peerDependencies": {
19
+ "react": "^17.0.0 || ^18.0.0",
20
+ "react-dom": "^17.0.0 || ^18.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "@types/react": "^18.2.0",
24
+ "@types/react-dom": "^18.2.0",
25
+ "@vitejs/plugin-react": "^4.0.0",
26
+ "react": "^18.2.0",
27
+ "react-dom": "^18.2.0",
28
+ "typescript": "^5.0.0",
29
+ "vite": "^5.0.0",
30
+ "vite-plugin-dts": "^3.6.0",
31
+ "vitest": "^1.0.0"
32
+ },
33
+ "keywords": [
34
+ "react",
35
+ "form",
36
+ "builder",
37
+ "drag-drop",
38
+ "form-builder",
39
+ "material-ui",
40
+ "typescript",
41
+ "validation",
42
+ "responsive"
43
+ ],
44
+ "author": "FormMorf Contributors",
45
+ "license": "MIT",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/Mkaifkazi/formmorf.git",
49
+ "directory": "packages/builder"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/yourusername/formmorf/issues"
53
+ },
54
+ "homepage": "https://github.com/yourusername/formmorf#readme",
55
+ "dependencies": {
56
+ "@dnd-kit/core": "^6.3.1",
57
+ "@dnd-kit/sortable": "^10.0.0",
58
+ "@dnd-kit/utilities": "^3.2.2",
59
+ "@emotion/react": "^11.14.0",
60
+ "@emotion/styled": "^11.14.1",
61
+ "@mui/icons-material": "^7.3.2",
62
+ "@mui/material": "^7.3.2",
63
+ "immer": "^10.1.3",
64
+ "nanoid": "^5.1.6",
65
+ "zustand": "^5.0.8"
66
+ }
67
+ }