@pilotiq/pilotiq 0.1.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.
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +11 -0
- package/CLAUDE.md +207 -0
- package/LICENSE +21 -0
- package/dist/Cluster.d.ts +56 -0
- package/dist/Cluster.d.ts.map +1 -0
- package/dist/Cluster.js +62 -0
- package/dist/Cluster.js.map +1 -0
- package/dist/Column.d.ts +378 -0
- package/dist/Column.d.ts.map +1 -0
- package/dist/Column.js +434 -0
- package/dist/Column.js.map +1 -0
- package/dist/Global.d.ts +123 -0
- package/dist/Global.d.ts.map +1 -0
- package/dist/Global.js +124 -0
- package/dist/Global.js.map +1 -0
- package/dist/Page.d.ts +90 -0
- package/dist/Page.d.ts.map +1 -0
- package/dist/Page.js +107 -0
- package/dist/Page.js.map +1 -0
- package/dist/Pilotiq.d.ts +505 -0
- package/dist/Pilotiq.d.ts.map +1 -0
- package/dist/Pilotiq.js +463 -0
- package/dist/Pilotiq.js.map +1 -0
- package/dist/PilotiqRegistry.d.ts +10 -0
- package/dist/PilotiqRegistry.d.ts.map +1 -0
- package/dist/PilotiqRegistry.js +32 -0
- package/dist/PilotiqRegistry.js.map +1 -0
- package/dist/PilotiqServiceProvider.d.ts +16 -0
- package/dist/PilotiqServiceProvider.d.ts.map +1 -0
- package/dist/PilotiqServiceProvider.js +57 -0
- package/dist/PilotiqServiceProvider.js.map +1 -0
- package/dist/RelationManager.d.ts +372 -0
- package/dist/RelationManager.d.ts.map +1 -0
- package/dist/RelationManager.js +342 -0
- package/dist/RelationManager.js.map +1 -0
- package/dist/RenderHook.d.ts +86 -0
- package/dist/RenderHook.d.ts.map +1 -0
- package/dist/RenderHook.js +116 -0
- package/dist/RenderHook.js.map +1 -0
- package/dist/Resource.d.ts +290 -0
- package/dist/Resource.d.ts.map +1 -0
- package/dist/Resource.js +362 -0
- package/dist/Resource.js.map +1 -0
- package/dist/RightPanel.d.ts +92 -0
- package/dist/RightPanel.d.ts.map +1 -0
- package/dist/RightPanel.js +61 -0
- package/dist/RightPanel.js.map +1 -0
- package/dist/Tab.d.ts +92 -0
- package/dist/Tab.d.ts.map +1 -0
- package/dist/Tab.js +93 -0
- package/dist/Tab.js.map +1 -0
- package/dist/UserMenuItem.d.ts +76 -0
- package/dist/UserMenuItem.d.ts.map +1 -0
- package/dist/UserMenuItem.js +87 -0
- package/dist/UserMenuItem.js.map +1 -0
- package/dist/actions/Action.d.ts +888 -0
- package/dist/actions/Action.d.ts.map +1 -0
- package/dist/actions/Action.js +1652 -0
- package/dist/actions/Action.js.map +1 -0
- package/dist/actions/ActionGroup.d.ts +85 -0
- package/dist/actions/ActionGroup.d.ts.map +1 -0
- package/dist/actions/ActionGroup.js +132 -0
- package/dist/actions/ActionGroup.js.map +1 -0
- package/dist/actions/attachFactory.d.ts +67 -0
- package/dist/actions/attachFactory.d.ts.map +1 -0
- package/dist/actions/attachFactory.js +115 -0
- package/dist/actions/attachFactory.js.map +1 -0
- package/dist/actions/exportFactory.d.ts +88 -0
- package/dist/actions/exportFactory.d.ts.map +1 -0
- package/dist/actions/exportFactory.js +144 -0
- package/dist/actions/exportFactory.js.map +1 -0
- package/dist/actions/importFactory.d.ts +97 -0
- package/dist/actions/importFactory.d.ts.map +1 -0
- package/dist/actions/importFactory.js +143 -0
- package/dist/actions/importFactory.js.map +1 -0
- package/dist/actions/index.d.ts +3 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +3 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/applyPageHooks.d.ts +54 -0
- package/dist/applyPageHooks.d.ts.map +1 -0
- package/dist/applyPageHooks.js +149 -0
- package/dist/applyPageHooks.js.map +1 -0
- package/dist/cells/coerce.d.ts +25 -0
- package/dist/cells/coerce.d.ts.map +1 -0
- package/dist/cells/coerce.js +87 -0
- package/dist/cells/coerce.js.map +1 -0
- package/dist/clusterPaths.d.ts +9 -0
- package/dist/clusterPaths.d.ts.map +1 -0
- package/dist/clusterPaths.js +19 -0
- package/dist/clusterPaths.js.map +1 -0
- package/dist/columns/BadgeColumn.d.ts +16 -0
- package/dist/columns/BadgeColumn.d.ts.map +1 -0
- package/dist/columns/BadgeColumn.js +25 -0
- package/dist/columns/BadgeColumn.js.map +1 -0
- package/dist/columns/BooleanColumn.d.ts +10 -0
- package/dist/columns/BooleanColumn.d.ts.map +1 -0
- package/dist/columns/BooleanColumn.js +18 -0
- package/dist/columns/BooleanColumn.js.map +1 -0
- package/dist/columns/ColorColumn.d.ts +27 -0
- package/dist/columns/ColorColumn.d.ts.map +1 -0
- package/dist/columns/ColorColumn.js +35 -0
- package/dist/columns/ColorColumn.js.map +1 -0
- package/dist/columns/IconColumn.d.ts +22 -0
- package/dist/columns/IconColumn.d.ts.map +1 -0
- package/dist/columns/IconColumn.js +28 -0
- package/dist/columns/IconColumn.js.map +1 -0
- package/dist/columns/ImageColumn.d.ts +17 -0
- package/dist/columns/ImageColumn.d.ts.map +1 -0
- package/dist/columns/ImageColumn.js +24 -0
- package/dist/columns/ImageColumn.js.map +1 -0
- package/dist/columns/SelectColumn.d.ts +36 -0
- package/dist/columns/SelectColumn.d.ts.map +1 -0
- package/dist/columns/SelectColumn.js +52 -0
- package/dist/columns/SelectColumn.js.map +1 -0
- package/dist/columns/TextColumn.d.ts +18 -0
- package/dist/columns/TextColumn.d.ts.map +1 -0
- package/dist/columns/TextColumn.js +20 -0
- package/dist/columns/TextColumn.js.map +1 -0
- package/dist/columns/TextInputColumn.d.ts +47 -0
- package/dist/columns/TextInputColumn.d.ts.map +1 -0
- package/dist/columns/TextInputColumn.js +60 -0
- package/dist/columns/TextInputColumn.js.map +1 -0
- package/dist/columns/ToggleColumn.d.ts +32 -0
- package/dist/columns/ToggleColumn.d.ts.map +1 -0
- package/dist/columns/ToggleColumn.js +45 -0
- package/dist/columns/ToggleColumn.js.map +1 -0
- package/dist/columns/index.d.ts +10 -0
- package/dist/columns/index.d.ts.map +1 -0
- package/dist/columns/index.js +10 -0
- package/dist/columns/index.js.map +1 -0
- package/dist/defaultGlobalPages.d.ts +11 -0
- package/dist/defaultGlobalPages.d.ts.map +1 -0
- package/dist/defaultGlobalPages.js +87 -0
- package/dist/defaultGlobalPages.js.map +1 -0
- package/dist/defaultPages.d.ts +247 -0
- package/dist/defaultPages.d.ts.map +1 -0
- package/dist/defaultPages.js +558 -0
- package/dist/defaultPages.js.map +1 -0
- package/dist/elements/Form.d.ts +219 -0
- package/dist/elements/Form.d.ts.map +1 -0
- package/dist/elements/Form.js +259 -0
- package/dist/elements/Form.js.map +1 -0
- package/dist/elements/ListTabs.d.ts +17 -0
- package/dist/elements/ListTabs.d.ts.map +1 -0
- package/dist/elements/ListTabs.js +23 -0
- package/dist/elements/ListTabs.js.map +1 -0
- package/dist/elements/Table.d.ts +535 -0
- package/dist/elements/Table.d.ts.map +1 -0
- package/dist/elements/Table.js +481 -0
- package/dist/elements/Table.js.map +1 -0
- package/dist/elements/TableGroup.d.ts +121 -0
- package/dist/elements/TableGroup.d.ts.map +1 -0
- package/dist/elements/TableGroup.js +162 -0
- package/dist/elements/TableGroup.js.map +1 -0
- package/dist/elements/dispatchAction.d.ts +127 -0
- package/dist/elements/dispatchAction.d.ts.map +1 -0
- package/dist/elements/dispatchAction.js +254 -0
- package/dist/elements/dispatchAction.js.map +1 -0
- package/dist/elements/dispatchForm.d.ts +220 -0
- package/dist/elements/dispatchForm.d.ts.map +1 -0
- package/dist/elements/dispatchForm.js +1645 -0
- package/dist/elements/dispatchForm.js.map +1 -0
- package/dist/elements/dispatchTable.d.ts +69 -0
- package/dist/elements/dispatchTable.d.ts.map +1 -0
- package/dist/elements/dispatchTable.js +606 -0
- package/dist/elements/dispatchTable.js.map +1 -0
- package/dist/elements/index.d.ts +3 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +3 -0
- package/dist/elements/index.js.map +1 -0
- package/dist/entries/BadgeEntry.d.ts +21 -0
- package/dist/entries/BadgeEntry.d.ts.map +1 -0
- package/dist/entries/BadgeEntry.js +32 -0
- package/dist/entries/BadgeEntry.js.map +1 -0
- package/dist/entries/CodeEntry.d.ts +38 -0
- package/dist/entries/CodeEntry.d.ts.map +1 -0
- package/dist/entries/CodeEntry.js +44 -0
- package/dist/entries/CodeEntry.js.map +1 -0
- package/dist/entries/ColorEntry.d.ts +32 -0
- package/dist/entries/ColorEntry.d.ts.map +1 -0
- package/dist/entries/ColorEntry.js +48 -0
- package/dist/entries/ColorEntry.js.map +1 -0
- package/dist/entries/ComponentEntry.d.ts +66 -0
- package/dist/entries/ComponentEntry.d.ts.map +1 -0
- package/dist/entries/ComponentEntry.js +86 -0
- package/dist/entries/ComponentEntry.js.map +1 -0
- package/dist/entries/Entry.d.ts +175 -0
- package/dist/entries/Entry.d.ts.map +1 -0
- package/dist/entries/Entry.js +233 -0
- package/dist/entries/Entry.js.map +1 -0
- package/dist/entries/IconEntry.d.ts +30 -0
- package/dist/entries/IconEntry.d.ts.map +1 -0
- package/dist/entries/IconEntry.js +34 -0
- package/dist/entries/IconEntry.js.map +1 -0
- package/dist/entries/ImageEntry.d.ts +33 -0
- package/dist/entries/ImageEntry.d.ts.map +1 -0
- package/dist/entries/ImageEntry.js +47 -0
- package/dist/entries/ImageEntry.js.map +1 -0
- package/dist/entries/KeyValueEntry.d.ts +30 -0
- package/dist/entries/KeyValueEntry.d.ts.map +1 -0
- package/dist/entries/KeyValueEntry.js +38 -0
- package/dist/entries/KeyValueEntry.js.map +1 -0
- package/dist/entries/RepeatableEntry.d.ts +122 -0
- package/dist/entries/RepeatableEntry.d.ts.map +1 -0
- package/dist/entries/RepeatableEntry.js +121 -0
- package/dist/entries/RepeatableEntry.js.map +1 -0
- package/dist/entries/TextEntry.d.ts +38 -0
- package/dist/entries/TextEntry.d.ts.map +1 -0
- package/dist/entries/TextEntry.js +49 -0
- package/dist/entries/TextEntry.js.map +1 -0
- package/dist/entries/index.d.ts +2 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +8 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/registry.d.ts +41 -0
- package/dist/entries/registry.d.ts.map +1 -0
- package/dist/entries/registry.js +17 -0
- package/dist/entries/registry.js.map +1 -0
- package/dist/fields/BuilderField.d.ts +420 -0
- package/dist/fields/BuilderField.d.ts.map +1 -0
- package/dist/fields/BuilderField.js +359 -0
- package/dist/fields/BuilderField.js.map +1 -0
- package/dist/fields/CheckboxField.d.ts +18 -0
- package/dist/fields/CheckboxField.d.ts.map +1 -0
- package/dist/fields/CheckboxField.js +23 -0
- package/dist/fields/CheckboxField.js.map +1 -0
- package/dist/fields/CheckboxListField.d.ts +25 -0
- package/dist/fields/CheckboxListField.d.ts.map +1 -0
- package/dist/fields/CheckboxListField.js +46 -0
- package/dist/fields/CheckboxListField.js.map +1 -0
- package/dist/fields/ColorPickerField.d.ts +16 -0
- package/dist/fields/ColorPickerField.d.ts.map +1 -0
- package/dist/fields/ColorPickerField.js +21 -0
- package/dist/fields/ColorPickerField.js.map +1 -0
- package/dist/fields/DateField.d.ts +29 -0
- package/dist/fields/DateField.d.ts.map +1 -0
- package/dist/fields/DateField.js +45 -0
- package/dist/fields/DateField.js.map +1 -0
- package/dist/fields/EmailField.d.ts +8 -0
- package/dist/fields/EmailField.d.ts.map +1 -0
- package/dist/fields/EmailField.js +13 -0
- package/dist/fields/EmailField.js.map +1 -0
- package/dist/fields/Field.d.ts +485 -0
- package/dist/fields/Field.d.ts.map +1 -0
- package/dist/fields/Field.js +539 -0
- package/dist/fields/Field.js.map +1 -0
- package/dist/fields/FileUploadField.d.ts +43 -0
- package/dist/fields/FileUploadField.d.ts.map +1 -0
- package/dist/fields/FileUploadField.js +60 -0
- package/dist/fields/FileUploadField.js.map +1 -0
- package/dist/fields/HiddenField.d.ts +19 -0
- package/dist/fields/HiddenField.d.ts.map +1 -0
- package/dist/fields/HiddenField.js +24 -0
- package/dist/fields/HiddenField.js.map +1 -0
- package/dist/fields/KeyValueField.d.ts +36 -0
- package/dist/fields/KeyValueField.d.ts.map +1 -0
- package/dist/fields/KeyValueField.js +47 -0
- package/dist/fields/KeyValueField.js.map +1 -0
- package/dist/fields/MarkdownField.d.ts +79 -0
- package/dist/fields/MarkdownField.d.ts.map +1 -0
- package/dist/fields/MarkdownField.js +117 -0
- package/dist/fields/MarkdownField.js.map +1 -0
- package/dist/fields/NumberField.d.ts +17 -0
- package/dist/fields/NumberField.d.ts.map +1 -0
- package/dist/fields/NumberField.js +27 -0
- package/dist/fields/NumberField.js.map +1 -0
- package/dist/fields/RadioField.d.ts +26 -0
- package/dist/fields/RadioField.d.ts.map +1 -0
- package/dist/fields/RadioField.js +47 -0
- package/dist/fields/RadioField.js.map +1 -0
- package/dist/fields/RepeaterField.d.ts +594 -0
- package/dist/fields/RepeaterField.d.ts.map +1 -0
- package/dist/fields/RepeaterField.js +504 -0
- package/dist/fields/RepeaterField.js.map +1 -0
- package/dist/fields/RowButton.d.ts +86 -0
- package/dist/fields/RowButton.d.ts.map +1 -0
- package/dist/fields/RowButton.js +85 -0
- package/dist/fields/RowButton.js.map +1 -0
- package/dist/fields/SelectField.d.ts +127 -0
- package/dist/fields/SelectField.d.ts.map +1 -0
- package/dist/fields/SelectField.js +160 -0
- package/dist/fields/SelectField.js.map +1 -0
- package/dist/fields/SliderField.d.ts +31 -0
- package/dist/fields/SliderField.d.ts.map +1 -0
- package/dist/fields/SliderField.js +45 -0
- package/dist/fields/SliderField.js.map +1 -0
- package/dist/fields/SlugField.d.ts +11 -0
- package/dist/fields/SlugField.d.ts.map +1 -0
- package/dist/fields/SlugField.js +19 -0
- package/dist/fields/SlugField.js.map +1 -0
- package/dist/fields/TagsInputField.d.ts +65 -0
- package/dist/fields/TagsInputField.d.ts.map +1 -0
- package/dist/fields/TagsInputField.js +104 -0
- package/dist/fields/TagsInputField.js.map +1 -0
- package/dist/fields/TextField.d.ts +11 -0
- package/dist/fields/TextField.d.ts.map +1 -0
- package/dist/fields/TextField.js +19 -0
- package/dist/fields/TextField.js.map +1 -0
- package/dist/fields/TextareaField.d.ts +40 -0
- package/dist/fields/TextareaField.d.ts.map +1 -0
- package/dist/fields/TextareaField.js +51 -0
- package/dist/fields/TextareaField.js.map +1 -0
- package/dist/fields/ToggleButtonsField.d.ts +24 -0
- package/dist/fields/ToggleButtonsField.d.ts.map +1 -0
- package/dist/fields/ToggleButtonsField.js +41 -0
- package/dist/fields/ToggleButtonsField.js.map +1 -0
- package/dist/fields/ToggleField.d.ts +8 -0
- package/dist/fields/ToggleField.d.ts.map +1 -0
- package/dist/fields/ToggleField.js +13 -0
- package/dist/fields/ToggleField.js.map +1 -0
- package/dist/fields/optionsResolver.d.ts +54 -0
- package/dist/fields/optionsResolver.d.ts.map +1 -0
- package/dist/fields/optionsResolver.js +62 -0
- package/dist/fields/optionsResolver.js.map +1 -0
- package/dist/fields/resolveField.d.ts +21 -0
- package/dist/fields/resolveField.d.ts.map +1 -0
- package/dist/fields/resolveField.js +26 -0
- package/dist/fields/resolveField.js.map +1 -0
- package/dist/filters/BooleanFilter.d.ts +20 -0
- package/dist/filters/BooleanFilter.d.ts.map +1 -0
- package/dist/filters/BooleanFilter.js +31 -0
- package/dist/filters/BooleanFilter.js.map +1 -0
- package/dist/filters/DateRangeFilter.d.ts +68 -0
- package/dist/filters/DateRangeFilter.d.ts.map +1 -0
- package/dist/filters/DateRangeFilter.js +137 -0
- package/dist/filters/DateRangeFilter.js.map +1 -0
- package/dist/filters/Filter.d.ts +140 -0
- package/dist/filters/Filter.d.ts.map +1 -0
- package/dist/filters/Filter.js +99 -0
- package/dist/filters/Filter.js.map +1 -0
- package/dist/filters/FormFilter.d.ts +103 -0
- package/dist/filters/FormFilter.d.ts.map +1 -0
- package/dist/filters/FormFilter.js +180 -0
- package/dist/filters/FormFilter.js.map +1 -0
- package/dist/filters/MultiSelectFilter.d.ts +41 -0
- package/dist/filters/MultiSelectFilter.d.ts.map +1 -0
- package/dist/filters/MultiSelectFilter.js +67 -0
- package/dist/filters/MultiSelectFilter.js.map +1 -0
- package/dist/filters/QueryBuilderFilter.d.ts +145 -0
- package/dist/filters/QueryBuilderFilter.d.ts.map +1 -0
- package/dist/filters/QueryBuilderFilter.js +323 -0
- package/dist/filters/QueryBuilderFilter.js.map +1 -0
- package/dist/filters/SelectFilter.d.ts +26 -0
- package/dist/filters/SelectFilter.d.ts.map +1 -0
- package/dist/filters/SelectFilter.js +35 -0
- package/dist/filters/SelectFilter.js.map +1 -0
- package/dist/filters/TernaryFilter.d.ts +35 -0
- package/dist/filters/TernaryFilter.d.ts.map +1 -0
- package/dist/filters/TernaryFilter.js +71 -0
- package/dist/filters/TernaryFilter.js.map +1 -0
- package/dist/filters/TrashedFilter.d.ts +28 -0
- package/dist/filters/TrashedFilter.d.ts.map +1 -0
- package/dist/filters/TrashedFilter.js +52 -0
- package/dist/filters/TrashedFilter.js.map +1 -0
- package/dist/filters/queryBuilder/BooleanConstraint.d.ts +13 -0
- package/dist/filters/queryBuilder/BooleanConstraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/BooleanConstraint.js +27 -0
- package/dist/filters/queryBuilder/BooleanConstraint.js.map +1 -0
- package/dist/filters/queryBuilder/Constraint.d.ts +74 -0
- package/dist/filters/queryBuilder/Constraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/Constraint.js +45 -0
- package/dist/filters/queryBuilder/Constraint.js.map +1 -0
- package/dist/filters/queryBuilder/DateConstraint.d.ts +18 -0
- package/dist/filters/queryBuilder/DateConstraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/DateConstraint.js +63 -0
- package/dist/filters/queryBuilder/DateConstraint.js.map +1 -0
- package/dist/filters/queryBuilder/NumberConstraint.d.ts +12 -0
- package/dist/filters/queryBuilder/NumberConstraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/NumberConstraint.js +61 -0
- package/dist/filters/queryBuilder/NumberConstraint.js.map +1 -0
- package/dist/filters/queryBuilder/SelectConstraint.d.ts +22 -0
- package/dist/filters/queryBuilder/SelectConstraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/SelectConstraint.js +66 -0
- package/dist/filters/queryBuilder/SelectConstraint.js.map +1 -0
- package/dist/filters/queryBuilder/TextConstraint.d.ts +18 -0
- package/dist/filters/queryBuilder/TextConstraint.d.ts.map +1 -0
- package/dist/filters/queryBuilder/TextConstraint.js +58 -0
- package/dist/filters/queryBuilder/TextConstraint.js.map +1 -0
- package/dist/filters/queryBuilder/index.d.ts +7 -0
- package/dist/filters/queryBuilder/index.d.ts.map +1 -0
- package/dist/filters/queryBuilder/index.js +7 -0
- package/dist/filters/queryBuilder/index.js.map +1 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +3 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/lucide.d.ts +16 -0
- package/dist/icons/lucide.d.ts.map +1 -0
- package/dist/icons/lucide.js +173 -0
- package/dist/icons/lucide.js.map +1 -0
- package/dist/icons/registry.d.ts +27 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +35 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/icons/types.d.ts +38 -0
- package/dist/icons/types.d.ts.map +1 -0
- package/dist/icons/types.js +23 -0
- package/dist/icons/types.js.map +1 -0
- package/dist/index.d.ts +118 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/io/csv.d.ts +51 -0
- package/dist/io/csv.d.ts.map +1 -0
- package/dist/io/csv.js +168 -0
- package/dist/io/csv.js.map +1 -0
- package/dist/notifications/Notification.d.ts +181 -0
- package/dist/notifications/Notification.d.ts.map +1 -0
- package/dist/notifications/Notification.js +290 -0
- package/dist/notifications/Notification.js.map +1 -0
- package/dist/notifications/broadcast.d.ts +58 -0
- package/dist/notifications/broadcast.d.ts.map +1 -0
- package/dist/notifications/broadcast.js +72 -0
- package/dist/notifications/broadcast.js.map +1 -0
- package/dist/notifications/database.d.ts +164 -0
- package/dist/notifications/database.d.ts.map +1 -0
- package/dist/notifications/database.js +321 -0
- package/dist/notifications/database.js.map +1 -0
- package/dist/notifications/dispatchNotificationAction.d.ts +48 -0
- package/dist/notifications/dispatchNotificationAction.d.ts.map +1 -0
- package/dist/notifications/dispatchNotificationAction.js +100 -0
- package/dist/notifications/dispatchNotificationAction.js.map +1 -0
- package/dist/notifications/flash.d.ts +34 -0
- package/dist/notifications/flash.d.ts.map +1 -0
- package/dist/notifications/flash.js +51 -0
- package/dist/notifications/flash.js.map +1 -0
- package/dist/notifications/index.d.ts +8 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +6 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/registerBroadcastAuth.d.ts +45 -0
- package/dist/notifications/registerBroadcastAuth.d.ts.map +1 -0
- package/dist/notifications/registerBroadcastAuth.js +86 -0
- package/dist/notifications/registerBroadcastAuth.js.map +1 -0
- package/dist/notifications/resolveSavedNotification.d.ts +21 -0
- package/dist/notifications/resolveSavedNotification.d.ts.map +1 -0
- package/dist/notifications/resolveSavedNotification.js +43 -0
- package/dist/notifications/resolveSavedNotification.js.map +1 -0
- package/dist/notifications/types.d.ts +87 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +2 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/orm/m2mAccessor.d.ts +49 -0
- package/dist/orm/m2mAccessor.d.ts.map +1 -0
- package/dist/orm/m2mAccessor.js +45 -0
- package/dist/orm/m2mAccessor.js.map +1 -0
- package/dist/orm/modelDefaults.d.ts +347 -0
- package/dist/orm/modelDefaults.d.ts.map +1 -0
- package/dist/orm/modelDefaults.js +375 -0
- package/dist/orm/modelDefaults.js.map +1 -0
- package/dist/pageData.d.ts +778 -0
- package/dist/pageData.d.ts.map +1 -0
- package/dist/pageData.js +3725 -0
- package/dist/pageData.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +2 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/themeEditor.d.ts +17 -0
- package/dist/plugins/themeEditor.d.ts.map +1 -0
- package/dist/plugins/themeEditor.js +23 -0
- package/dist/plugins/themeEditor.js.map +1 -0
- package/dist/react/AppShell.d.ts +58 -0
- package/dist/react/AppShell.d.ts.map +1 -0
- package/dist/react/AppShell.js +58 -0
- package/dist/react/AppShell.js.map +1 -0
- package/dist/react/CommandPalette.d.ts +21 -0
- package/dist/react/CommandPalette.d.ts.map +1 -0
- package/dist/react/CommandPalette.js +236 -0
- package/dist/react/CommandPalette.js.map +1 -0
- package/dist/react/FormStateContext.d.ts +83 -0
- package/dist/react/FormStateContext.d.ts.map +1 -0
- package/dist/react/FormStateContext.js +284 -0
- package/dist/react/FormStateContext.js.map +1 -0
- package/dist/react/HeadHooks.d.ts +26 -0
- package/dist/react/HeadHooks.d.ts.map +1 -0
- package/dist/react/HeadHooks.js +141 -0
- package/dist/react/HeadHooks.js.map +1 -0
- package/dist/react/NotificationActionStrip.d.ts +39 -0
- package/dist/react/NotificationActionStrip.d.ts.map +1 -0
- package/dist/react/NotificationActionStrip.js +129 -0
- package/dist/react/NotificationActionStrip.js.map +1 -0
- package/dist/react/NotificationBell.d.ts +20 -0
- package/dist/react/NotificationBell.d.ts.map +1 -0
- package/dist/react/NotificationBell.js +273 -0
- package/dist/react/NotificationBell.js.map +1 -0
- package/dist/react/RenderHookSlot.d.ts +20 -0
- package/dist/react/RenderHookSlot.d.ts.map +1 -0
- package/dist/react/RenderHookSlot.js +24 -0
- package/dist/react/RenderHookSlot.js.map +1 -0
- package/dist/react/RightSidebar.d.ts +33 -0
- package/dist/react/RightSidebar.d.ts.map +1 -0
- package/dist/react/RightSidebar.js +82 -0
- package/dist/react/RightSidebar.js.map +1 -0
- package/dist/react/RightSidebarContext.d.ts +62 -0
- package/dist/react/RightSidebarContext.d.ts.map +1 -0
- package/dist/react/RightSidebarContext.js +178 -0
- package/dist/react/RightSidebarContext.js.map +1 -0
- package/dist/react/RightSidebarTrigger.d.ts +16 -0
- package/dist/react/RightSidebarTrigger.d.ts.map +1 -0
- package/dist/react/RightSidebarTrigger.js +24 -0
- package/dist/react/RightSidebarTrigger.js.map +1 -0
- package/dist/react/SchemaRenderer.d.ts +63 -0
- package/dist/react/SchemaRenderer.d.ts.map +1 -0
- package/dist/react/SchemaRenderer.js +3458 -0
- package/dist/react/SchemaRenderer.js.map +1 -0
- package/dist/react/SearchTrigger.d.ts +13 -0
- package/dist/react/SearchTrigger.d.ts.map +1 -0
- package/dist/react/SearchTrigger.js +30 -0
- package/dist/react/SearchTrigger.js.map +1 -0
- package/dist/react/ThemeProvider.d.ts +18 -0
- package/dist/react/ThemeProvider.d.ts.map +1 -0
- package/dist/react/ThemeProvider.js +66 -0
- package/dist/react/ThemeProvider.js.map +1 -0
- package/dist/react/ThemeSettingsPage.d.ts +10 -0
- package/dist/react/ThemeSettingsPage.d.ts.map +1 -0
- package/dist/react/ThemeSettingsPage.js +293 -0
- package/dist/react/ThemeSettingsPage.js.map +1 -0
- package/dist/react/ThemeToggle.d.ts +2 -0
- package/dist/react/ThemeToggle.d.ts.map +1 -0
- package/dist/react/ThemeToggle.js +8 -0
- package/dist/react/ThemeToggle.js.map +1 -0
- package/dist/react/Toaster.d.ts +25 -0
- package/dist/react/Toaster.d.ts.map +1 -0
- package/dist/react/Toaster.js +89 -0
- package/dist/react/Toaster.js.map +1 -0
- package/dist/react/UserMenu.d.ts +23 -0
- package/dist/react/UserMenu.d.ts.map +1 -0
- package/dist/react/UserMenu.js +78 -0
- package/dist/react/UserMenu.js.map +1 -0
- package/dist/react/WidgetDataContext.d.ts +64 -0
- package/dist/react/WidgetDataContext.d.ts.map +1 -0
- package/dist/react/WidgetDataContext.js +89 -0
- package/dist/react/WidgetDataContext.js.map +1 -0
- package/dist/react/cells/EditableCell.d.ts +20 -0
- package/dist/react/cells/EditableCell.d.ts.map +1 -0
- package/dist/react/cells/EditableCell.js +251 -0
- package/dist/react/cells/EditableCell.js.map +1 -0
- package/dist/react/fieldJsHandler.d.ts +33 -0
- package/dist/react/fieldJsHandler.d.ts.map +1 -0
- package/dist/react/fieldJsHandler.js +61 -0
- package/dist/react/fieldJsHandler.js.map +1 -0
- package/dist/react/fields/BuilderInput.d.ts +21 -0
- package/dist/react/fields/BuilderInput.d.ts.map +1 -0
- package/dist/react/fields/BuilderInput.js +553 -0
- package/dist/react/fields/BuilderInput.js.map +1 -0
- package/dist/react/fields/CheckboxInput.d.ts +9 -0
- package/dist/react/fields/CheckboxInput.d.ts.map +1 -0
- package/dist/react/fields/CheckboxInput.js +23 -0
- package/dist/react/fields/CheckboxInput.js.map +1 -0
- package/dist/react/fields/CheckboxListInput.d.ts +19 -0
- package/dist/react/fields/CheckboxListInput.d.ts.map +1 -0
- package/dist/react/fields/CheckboxListInput.js +53 -0
- package/dist/react/fields/CheckboxListInput.js.map +1 -0
- package/dist/react/fields/ColorInput.d.ts +12 -0
- package/dist/react/fields/ColorInput.d.ts.map +1 -0
- package/dist/react/fields/ColorInput.js +29 -0
- package/dist/react/fields/ColorInput.js.map +1 -0
- package/dist/react/fields/DateFieldInput.d.ts +8 -0
- package/dist/react/fields/DateFieldInput.d.ts.map +1 -0
- package/dist/react/fields/DateFieldInput.js +39 -0
- package/dist/react/fields/DateFieldInput.js.map +1 -0
- package/dist/react/fields/DateTimeInput.d.ts +13 -0
- package/dist/react/fields/DateTimeInput.d.ts.map +1 -0
- package/dist/react/fields/DateTimeInput.js +29 -0
- package/dist/react/fields/DateTimeInput.js.map +1 -0
- package/dist/react/fields/FieldShell.d.ts +23 -0
- package/dist/react/fields/FieldShell.d.ts.map +1 -0
- package/dist/react/fields/FieldShell.js +46 -0
- package/dist/react/fields/FieldShell.js.map +1 -0
- package/dist/react/fields/FileUploadInput.d.ts +21 -0
- package/dist/react/fields/FileUploadInput.d.ts.map +1 -0
- package/dist/react/fields/FileUploadInput.js +120 -0
- package/dist/react/fields/FileUploadInput.js.map +1 -0
- package/dist/react/fields/HiddenInput.d.ts +11 -0
- package/dist/react/fields/HiddenInput.d.ts.map +1 -0
- package/dist/react/fields/HiddenInput.js +14 -0
- package/dist/react/fields/HiddenInput.js.map +1 -0
- package/dist/react/fields/KeyValueInput.d.ts +18 -0
- package/dist/react/fields/KeyValueInput.d.ts.map +1 -0
- package/dist/react/fields/KeyValueInput.js +122 -0
- package/dist/react/fields/KeyValueInput.js.map +1 -0
- package/dist/react/fields/MarkdownInput.d.ts +29 -0
- package/dist/react/fields/MarkdownInput.d.ts.map +1 -0
- package/dist/react/fields/MarkdownInput.js +250 -0
- package/dist/react/fields/MarkdownInput.js.map +1 -0
- package/dist/react/fields/RadioInput.d.ts +18 -0
- package/dist/react/fields/RadioInput.d.ts.map +1 -0
- package/dist/react/fields/RadioInput.js +34 -0
- package/dist/react/fields/RadioInput.js.map +1 -0
- package/dist/react/fields/RepeaterInput.d.ts +92 -0
- package/dist/react/fields/RepeaterInput.d.ts.map +1 -0
- package/dist/react/fields/RepeaterInput.js +705 -0
- package/dist/react/fields/RepeaterInput.js.map +1 -0
- package/dist/react/fields/SelectFieldInput.d.ts +23 -0
- package/dist/react/fields/SelectFieldInput.d.ts.map +1 -0
- package/dist/react/fields/SelectFieldInput.js +146 -0
- package/dist/react/fields/SelectFieldInput.js.map +1 -0
- package/dist/react/fields/SliderInput.d.ts +16 -0
- package/dist/react/fields/SliderInput.d.ts.map +1 -0
- package/dist/react/fields/SliderInput.js +37 -0
- package/dist/react/fields/SliderInput.js.map +1 -0
- package/dist/react/fields/TagsInput.d.ts +27 -0
- package/dist/react/fields/TagsInput.d.ts.map +1 -0
- package/dist/react/fields/TagsInput.js +189 -0
- package/dist/react/fields/TagsInput.js.map +1 -0
- package/dist/react/fields/TextLikeInput.d.ts +18 -0
- package/dist/react/fields/TextLikeInput.d.ts.map +1 -0
- package/dist/react/fields/TextLikeInput.js +46 -0
- package/dist/react/fields/TextLikeInput.js.map +1 -0
- package/dist/react/fields/ToggleButtonsInput.d.ts +20 -0
- package/dist/react/fields/ToggleButtonsInput.d.ts.map +1 -0
- package/dist/react/fields/ToggleButtonsInput.js +42 -0
- package/dist/react/fields/ToggleButtonsInput.js.map +1 -0
- package/dist/react/fields/ToggleFieldInput.d.ts +7 -0
- package/dist/react/fields/ToggleFieldInput.d.ts.map +1 -0
- package/dist/react/fields/ToggleFieldInput.js +30 -0
- package/dist/react/fields/ToggleFieldInput.js.map +1 -0
- package/dist/react/fields/rowChromeButton.d.ts +84 -0
- package/dist/react/fields/rowChromeButton.d.ts.map +1 -0
- package/dist/react/fields/rowChromeButton.js +111 -0
- package/dist/react/fields/rowChromeButton.js.map +1 -0
- package/dist/react/fields/syncRowGates.d.ts +11 -0
- package/dist/react/fields/syncRowGates.d.ts.map +1 -0
- package/dist/react/fields/syncRowGates.js +55 -0
- package/dist/react/fields/syncRowGates.js.map +1 -0
- package/dist/react/formStateHelpers.d.ts +44 -0
- package/dist/react/formStateHelpers.d.ts.map +1 -0
- package/dist/react/formStateHelpers.js +230 -0
- package/dist/react/formStateHelpers.js.map +1 -0
- package/dist/react/hooks/use-mobile.d.ts +2 -0
- package/dist/react/hooks/use-mobile.d.ts.map +1 -0
- package/dist/react/hooks/use-mobile.js +16 -0
- package/dist/react/hooks/use-mobile.js.map +1 -0
- package/dist/react/icon-context.d.ts +35 -0
- package/dist/react/icon-context.d.ts.map +1 -0
- package/dist/react/icon-context.js +45 -0
- package/dist/react/icon-context.js.map +1 -0
- package/dist/react/index.d.ts +26 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +28 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/layouts/SidebarLayout.d.ts +3 -0
- package/dist/react/layouts/SidebarLayout.d.ts.map +1 -0
- package/dist/react/layouts/SidebarLayout.js +85 -0
- package/dist/react/layouts/SidebarLayout.js.map +1 -0
- package/dist/react/layouts/TopbarLayout.d.ts +3 -0
- package/dist/react/layouts/TopbarLayout.d.ts.map +1 -0
- package/dist/react/layouts/TopbarLayout.js +103 -0
- package/dist/react/layouts/TopbarLayout.js.map +1 -0
- package/dist/react/navigate.d.ts +22 -0
- package/dist/react/navigate.d.ts.map +1 -0
- package/dist/react/navigate.js +30 -0
- package/dist/react/navigate.js.map +1 -0
- package/dist/react/registry.d.ts +35 -0
- package/dist/react/registry.d.ts.map +1 -0
- package/dist/react/registry.js +22 -0
- package/dist/react/registry.js.map +1 -0
- package/dist/react/right-panel-registry.d.ts +32 -0
- package/dist/react/right-panel-registry.d.ts.map +1 -0
- package/dist/react/right-panel-registry.js +20 -0
- package/dist/react/right-panel-registry.js.map +1 -0
- package/dist/react/theme-preview/apply.d.ts +11 -0
- package/dist/react/theme-preview/apply.d.ts.map +1 -0
- package/dist/react/theme-preview/apply.js +93 -0
- package/dist/react/theme-preview/apply.js.map +1 -0
- package/dist/react/theme-preview/build-html.d.ts +3 -0
- package/dist/react/theme-preview/build-html.d.ts.map +1 -0
- package/dist/react/theme-preview/build-html.js +437 -0
- package/dist/react/theme-preview/build-html.js.map +1 -0
- package/dist/react/ui/button.d.ts +9 -0
- package/dist/react/ui/button.d.ts.map +1 -0
- package/dist/react/ui/button.js +35 -0
- package/dist/react/ui/button.js.map +1 -0
- package/dist/react/ui/calendar.d.ts +5 -0
- package/dist/react/ui/calendar.d.ts.map +1 -0
- package/dist/react/ui/calendar.js +34 -0
- package/dist/react/ui/calendar.js.map +1 -0
- package/dist/react/ui/checkbox.d.ts +4 -0
- package/dist/react/ui/checkbox.d.ts.map +1 -0
- package/dist/react/ui/checkbox.js +9 -0
- package/dist/react/ui/checkbox.js.map +1 -0
- package/dist/react/ui/dialog.d.ts +12 -0
- package/dist/react/ui/dialog.d.ts.map +1 -0
- package/dist/react/ui/dialog.js +34 -0
- package/dist/react/ui/dialog.js.map +1 -0
- package/dist/react/ui/dropdown-menu.d.ts +12 -0
- package/dist/react/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/react/ui/dropdown-menu.js +23 -0
- package/dist/react/ui/dropdown-menu.js.map +1 -0
- package/dist/react/ui/input.d.ts +4 -0
- package/dist/react/ui/input.d.ts.map +1 -0
- package/dist/react/ui/input.js +8 -0
- package/dist/react/ui/input.js.map +1 -0
- package/dist/react/ui/label.d.ts +4 -0
- package/dist/react/ui/label.d.ts.map +1 -0
- package/dist/react/ui/label.js +7 -0
- package/dist/react/ui/label.js.map +1 -0
- package/dist/react/ui/popover.d.ts +6 -0
- package/dist/react/ui/popover.d.ts.map +1 -0
- package/dist/react/ui/popover.js +14 -0
- package/dist/react/ui/popover.js.map +1 -0
- package/dist/react/ui/select.d.ts +17 -0
- package/dist/react/ui/select.d.ts.map +1 -0
- package/dist/react/ui/select.js +39 -0
- package/dist/react/ui/select.js.map +1 -0
- package/dist/react/ui/separator.d.ts +4 -0
- package/dist/react/ui/separator.d.ts.map +1 -0
- package/dist/react/ui/separator.js +9 -0
- package/dist/react/ui/separator.js.map +1 -0
- package/dist/react/ui/sheet.d.ts +15 -0
- package/dist/react/ui/sheet.d.ts.map +1 -0
- package/dist/react/ui/sheet.js +37 -0
- package/dist/react/ui/sheet.js.map +1 -0
- package/dist/react/ui/sidebar.d.ts +64 -0
- package/dist/react/ui/sidebar.d.ts.map +1 -0
- package/dist/react/ui/sidebar.js +257 -0
- package/dist/react/ui/sidebar.js.map +1 -0
- package/dist/react/ui/skeleton.d.ts +3 -0
- package/dist/react/ui/skeleton.d.ts.map +1 -0
- package/dist/react/ui/skeleton.js +7 -0
- package/dist/react/ui/skeleton.js.map +1 -0
- package/dist/react/ui/slider.d.ts +4 -0
- package/dist/react/ui/slider.d.ts.map +1 -0
- package/dist/react/ui/slider.js +8 -0
- package/dist/react/ui/slider.js.map +1 -0
- package/dist/react/ui/switch.d.ts +4 -0
- package/dist/react/ui/switch.d.ts.map +1 -0
- package/dist/react/ui/switch.js +8 -0
- package/dist/react/ui/switch.js.map +1 -0
- package/dist/react/ui/table.d.ts +11 -0
- package/dist/react/ui/table.d.ts.map +1 -0
- package/dist/react/ui/table.js +28 -0
- package/dist/react/ui/table.js.map +1 -0
- package/dist/react/ui/tabs.d.ts +7 -0
- package/dist/react/ui/tabs.d.ts.map +1 -0
- package/dist/react/ui/tabs.js +17 -0
- package/dist/react/ui/tabs.js.map +1 -0
- package/dist/react/ui/textarea.d.ts +4 -0
- package/dist/react/ui/textarea.d.ts.map +1 -0
- package/dist/react/ui/textarea.js +7 -0
- package/dist/react/ui/textarea.js.map +1 -0
- package/dist/react/ui/tooltip.d.ts +7 -0
- package/dist/react/ui/tooltip.d.ts.map +1 -0
- package/dist/react/ui/tooltip.js +17 -0
- package/dist/react/ui/tooltip.js.map +1 -0
- package/dist/react/useResizableWidth.d.ts +47 -0
- package/dist/react/useResizableWidth.d.ts.map +1 -0
- package/dist/react/useResizableWidth.js +99 -0
- package/dist/react/useResizableWidth.js.map +1 -0
- package/dist/react/utils.d.ts +3 -0
- package/dist/react/utils.d.ts.map +1 -0
- package/dist/react/utils.js +6 -0
- package/dist/react/utils.js.map +1 -0
- package/dist/react/widgetRegistry.d.ts +33 -0
- package/dist/react/widgetRegistry.d.ts.map +1 -0
- package/dist/react/widgetRegistry.js +15 -0
- package/dist/react/widgetRegistry.js.map +1 -0
- package/dist/react/widgets/StatsOverviewRenderer.d.ts +6 -0
- package/dist/react/widgets/StatsOverviewRenderer.d.ts.map +1 -0
- package/dist/react/widgets/StatsOverviewRenderer.js +124 -0
- package/dist/react/widgets/StatsOverviewRenderer.js.map +1 -0
- package/dist/react/widgets/TableWidgetRenderer.d.ts +6 -0
- package/dist/react/widgets/TableWidgetRenderer.d.ts.map +1 -0
- package/dist/react/widgets/TableWidgetRenderer.js +123 -0
- package/dist/react/widgets/TableWidgetRenderer.js.map +1 -0
- package/dist/react/widgets/ViewRenderer.d.ts +16 -0
- package/dist/react/widgets/ViewRenderer.d.ts.map +1 -0
- package/dist/react/widgets/ViewRenderer.js +26 -0
- package/dist/react/widgets/ViewRenderer.js.map +1 -0
- package/dist/richtext/index.d.ts +2 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +2 -0
- package/dist/richtext/index.js.map +1 -0
- package/dist/richtext/registry.d.ts +55 -0
- package/dist/richtext/registry.d.ts.map +1 -0
- package/dist/richtext/registry.js +66 -0
- package/dist/richtext/registry.js.map +1 -0
- package/dist/routes.d.ts +9 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +3116 -0
- package/dist/routes.js.map +1 -0
- package/dist/schema/Alert.d.ts +33 -0
- package/dist/schema/Alert.d.ts.map +1 -0
- package/dist/schema/Alert.js +41 -0
- package/dist/schema/Alert.js.map +1 -0
- package/dist/schema/Block.d.ts +112 -0
- package/dist/schema/Block.d.ts.map +1 -0
- package/dist/schema/Block.js +136 -0
- package/dist/schema/Block.js.map +1 -0
- package/dist/schema/Breadcrumbs.d.ts +31 -0
- package/dist/schema/Breadcrumbs.d.ts.map +1 -0
- package/dist/schema/Breadcrumbs.js +30 -0
- package/dist/schema/Breadcrumbs.js.map +1 -0
- package/dist/schema/Card.d.ts +17 -0
- package/dist/schema/Card.d.ts.map +1 -0
- package/dist/schema/Card.js +31 -0
- package/dist/schema/Card.js.map +1 -0
- package/dist/schema/Divider.d.ts +12 -0
- package/dist/schema/Divider.d.ts.map +1 -0
- package/dist/schema/Divider.js +19 -0
- package/dist/schema/Divider.js.map +1 -0
- package/dist/schema/Element.d.ts +150 -0
- package/dist/schema/Element.d.ts.map +1 -0
- package/dist/schema/Element.js +124 -0
- package/dist/schema/Element.js.map +1 -0
- package/dist/schema/EmptyState.d.ts +48 -0
- package/dist/schema/EmptyState.d.ts.map +1 -0
- package/dist/schema/EmptyState.js +57 -0
- package/dist/schema/EmptyState.js.map +1 -0
- package/dist/schema/Fieldset.d.ts +25 -0
- package/dist/schema/Fieldset.d.ts.map +1 -0
- package/dist/schema/Fieldset.js +39 -0
- package/dist/schema/Fieldset.js.map +1 -0
- package/dist/schema/Grid.d.ts +23 -0
- package/dist/schema/Grid.d.ts.map +1 -0
- package/dist/schema/Grid.js +36 -0
- package/dist/schema/Grid.js.map +1 -0
- package/dist/schema/Group.d.ts +19 -0
- package/dist/schema/Group.d.ts.map +1 -0
- package/dist/schema/Group.js +26 -0
- package/dist/schema/Group.js.map +1 -0
- package/dist/schema/Heading.d.ts +25 -0
- package/dist/schema/Heading.d.ts.map +1 -0
- package/dist/schema/Heading.js +34 -0
- package/dist/schema/Heading.js.map +1 -0
- package/dist/schema/Html.d.ts +48 -0
- package/dist/schema/Html.d.ts.map +1 -0
- package/dist/schema/Html.js +60 -0
- package/dist/schema/Html.js.map +1 -0
- package/dist/schema/Icon.d.ts +34 -0
- package/dist/schema/Icon.d.ts.map +1 -0
- package/dist/schema/Icon.js +40 -0
- package/dist/schema/Icon.js.map +1 -0
- package/dist/schema/Image.d.ts +38 -0
- package/dist/schema/Image.d.ts.map +1 -0
- package/dist/schema/Image.js +48 -0
- package/dist/schema/Image.js.map +1 -0
- package/dist/schema/LinkTag.d.ts +48 -0
- package/dist/schema/LinkTag.d.ts.map +1 -0
- package/dist/schema/LinkTag.js +16 -0
- package/dist/schema/LinkTag.js.map +1 -0
- package/dist/schema/Markdown.d.ts +57 -0
- package/dist/schema/Markdown.d.ts.map +1 -0
- package/dist/schema/Markdown.js +75 -0
- package/dist/schema/Markdown.js.map +1 -0
- package/dist/schema/MetaTag.d.ts +41 -0
- package/dist/schema/MetaTag.d.ts.map +1 -0
- package/dist/schema/MetaTag.js +16 -0
- package/dist/schema/MetaTag.js.map +1 -0
- package/dist/schema/RelationTabs.d.ts +50 -0
- package/dist/schema/RelationTabs.d.ts.map +1 -0
- package/dist/schema/RelationTabs.js +48 -0
- package/dist/schema/RelationTabs.js.map +1 -0
- package/dist/schema/ScriptTag.d.ts +63 -0
- package/dist/schema/ScriptTag.d.ts.map +1 -0
- package/dist/schema/ScriptTag.js +16 -0
- package/dist/schema/ScriptTag.js.map +1 -0
- package/dist/schema/Section.d.ts +93 -0
- package/dist/schema/Section.d.ts.map +1 -0
- package/dist/schema/Section.js +127 -0
- package/dist/schema/Section.js.map +1 -0
- package/dist/schema/ServerDataElement.d.ts +101 -0
- package/dist/schema/ServerDataElement.d.ts.map +1 -0
- package/dist/schema/ServerDataElement.js +135 -0
- package/dist/schema/ServerDataElement.js.map +1 -0
- package/dist/schema/Split.d.ts +31 -0
- package/dist/schema/Split.d.ts.map +1 -0
- package/dist/schema/Split.js +41 -0
- package/dist/schema/Split.js.map +1 -0
- package/dist/schema/Stat.d.ts +92 -0
- package/dist/schema/Stat.d.ts.map +1 -0
- package/dist/schema/Stat.js +116 -0
- package/dist/schema/Stat.js.map +1 -0
- package/dist/schema/StatsOverview.d.ts +76 -0
- package/dist/schema/StatsOverview.d.ts.map +1 -0
- package/dist/schema/StatsOverview.js +71 -0
- package/dist/schema/StatsOverview.js.map +1 -0
- package/dist/schema/StyleTag.d.ts +32 -0
- package/dist/schema/StyleTag.d.ts.map +1 -0
- package/dist/schema/StyleTag.js +38 -0
- package/dist/schema/StyleTag.js.map +1 -0
- package/dist/schema/TableWidget.d.ts +148 -0
- package/dist/schema/TableWidget.d.ts.map +1 -0
- package/dist/schema/TableWidget.js +190 -0
- package/dist/schema/TableWidget.js.map +1 -0
- package/dist/schema/Tabs.d.ts +40 -0
- package/dist/schema/Tabs.d.ts.map +1 -0
- package/dist/schema/Tabs.js +66 -0
- package/dist/schema/Tabs.js.map +1 -0
- package/dist/schema/Text.d.ts +33 -0
- package/dist/schema/Text.d.ts.map +1 -0
- package/dist/schema/Text.js +40 -0
- package/dist/schema/Text.js.map +1 -0
- package/dist/schema/UnorderedList.d.ts +36 -0
- package/dist/schema/UnorderedList.d.ts.map +1 -0
- package/dist/schema/UnorderedList.js +42 -0
- package/dist/schema/UnorderedList.js.map +1 -0
- package/dist/schema/View.d.ts +81 -0
- package/dist/schema/View.d.ts.map +1 -0
- package/dist/schema/View.js +81 -0
- package/dist/schema/View.js.map +1 -0
- package/dist/schema/Wizard.d.ts +67 -0
- package/dist/schema/Wizard.d.ts.map +1 -0
- package/dist/schema/Wizard.js +94 -0
- package/dist/schema/Wizard.js.map +1 -0
- package/dist/schema/index.d.ts +26 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +26 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/resolveSchema.d.ts +122 -0
- package/dist/schema/resolveSchema.d.ts.map +1 -0
- package/dist/schema/resolveSchema.js +648 -0
- package/dist/schema/resolveSchema.js.map +1 -0
- package/dist/schema/sanitize.d.ts +21 -0
- package/dist/schema/sanitize.d.ts.map +1 -0
- package/dist/schema/sanitize.js +46 -0
- package/dist/schema/sanitize.js.map +1 -0
- package/dist/search.d.ts +53 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +114 -0
- package/dist/search.js.map +1 -0
- package/dist/sessionFilters.d.ts +8 -0
- package/dist/sessionFilters.d.ts.map +1 -0
- package/dist/sessionFilters.js +115 -0
- package/dist/sessionFilters.js.map +1 -0
- package/dist/summarizers/Summarizer.d.ts +65 -0
- package/dist/summarizers/Summarizer.d.ts.map +1 -0
- package/dist/summarizers/Summarizer.js +98 -0
- package/dist/summarizers/Summarizer.js.map +1 -0
- package/dist/summarizers/index.d.ts +2 -0
- package/dist/summarizers/index.d.ts.map +1 -0
- package/dist/summarizers/index.js +2 -0
- package/dist/summarizers/index.js.map +1 -0
- package/dist/theme/base-colors.d.ts +3 -0
- package/dist/theme/base-colors.d.ts.map +1 -0
- package/dist/theme/base-colors.js +64 -0
- package/dist/theme/base-colors.js.map +1 -0
- package/dist/theme/chart-colors.d.ts +3 -0
- package/dist/theme/chart-colors.d.ts.map +1 -0
- package/dist/theme/chart-colors.js +46 -0
- package/dist/theme/chart-colors.js.map +1 -0
- package/dist/theme/colors.d.ts +56 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +410 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/theme/generate-css.d.ts +9 -0
- package/dist/theme/generate-css.d.ts.map +1 -0
- package/dist/theme/generate-css.js +36 -0
- package/dist/theme/generate-css.js.map +1 -0
- package/dist/theme/generate-scale.d.ts +3 -0
- package/dist/theme/generate-scale.d.ts.map +1 -0
- package/dist/theme/generate-scale.js +89 -0
- package/dist/theme/generate-scale.js.map +1 -0
- package/dist/theme/icon-map.d.ts +9 -0
- package/dist/theme/icon-map.d.ts.map +1 -0
- package/dist/theme/icon-map.js +40 -0
- package/dist/theme/icon-map.js.map +1 -0
- package/dist/theme/index.d.ts +15 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +13 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/migrate.d.ts +14 -0
- package/dist/theme/migrate.d.ts.map +1 -0
- package/dist/theme/migrate.js +79 -0
- package/dist/theme/migrate.js.map +1 -0
- package/dist/theme/presets.d.ts +30 -0
- package/dist/theme/presets.d.ts.map +1 -0
- package/dist/theme/presets.js +128 -0
- package/dist/theme/presets.js.map +1 -0
- package/dist/theme/radius.d.ts +11 -0
- package/dist/theme/radius.d.ts.map +1 -0
- package/dist/theme/radius.js +17 -0
- package/dist/theme/radius.js.map +1 -0
- package/dist/theme/resolve.d.ts +13 -0
- package/dist/theme/resolve.d.ts.map +1 -0
- package/dist/theme/resolve.js +91 -0
- package/dist/theme/resolve.js.map +1 -0
- package/dist/theme/spacing.d.ts +14 -0
- package/dist/theme/spacing.d.ts.map +1 -0
- package/dist/theme/spacing.js +17 -0
- package/dist/theme/spacing.js.map +1 -0
- package/dist/theme/theme-colors.d.ts +9 -0
- package/dist/theme/theme-colors.d.ts.map +1 -0
- package/dist/theme/theme-colors.js +84 -0
- package/dist/theme/theme-colors.js.map +1 -0
- package/dist/theme/types.d.ts +94 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +2 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/uploads/UploadAdapter.d.ts +34 -0
- package/dist/uploads/UploadAdapter.d.ts.map +1 -0
- package/dist/uploads/UploadAdapter.js +2 -0
- package/dist/uploads/UploadAdapter.js.map +1 -0
- package/dist/uploads/index.d.ts +3 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +2 -0
- package/dist/uploads/index.js.map +1 -0
- package/dist/uploads/localUpload.d.ts +25 -0
- package/dist/uploads/localUpload.d.ts.map +1 -0
- package/dist/uploads/localUpload.js +65 -0
- package/dist/uploads/localUpload.js.map +1 -0
- package/dist/validation/Validator.d.ts +40 -0
- package/dist/validation/Validator.d.ts.map +1 -0
- package/dist/validation/Validator.js +25 -0
- package/dist/validation/Validator.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +5 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/rules.d.ts +9 -0
- package/dist/validation/rules.d.ts.map +1 -0
- package/dist/validation/rules.js +61 -0
- package/dist/validation/rules.js.map +1 -0
- package/dist/validation/runValidators.d.ts +30 -0
- package/dist/validation/runValidators.d.ts.map +1 -0
- package/dist/validation/runValidators.js +438 -0
- package/dist/validation/runValidators.js.map +1 -0
- package/dist/validation/uniqueValidator.d.ts +61 -0
- package/dist/validation/uniqueValidator.d.ts.map +1 -0
- package/dist/validation/uniqueValidator.js +80 -0
- package/dist/validation/uniqueValidator.js.map +1 -0
- package/dist/vite.d.ts +19 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +696 -0
- package/dist/vite.js.map +1 -0
- package/dist/widgets/index.d.ts +2 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +7 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/registry.d.ts +32 -0
- package/dist/widgets/registry.d.ts.map +1 -0
- package/dist/widgets/registry.js +17 -0
- package/dist/widgets/registry.js.map +1 -0
- package/package.json +101 -0
- package/src/Cluster.test.ts +283 -0
- package/src/Cluster.ts +83 -0
- package/src/Column.test.ts +140 -0
- package/src/Column.ts +612 -0
- package/src/Global.test.ts +367 -0
- package/src/Global.ts +169 -0
- package/src/Page.test.ts +50 -0
- package/src/Page.ts +139 -0
- package/src/Pilotiq.test.ts +47 -0
- package/src/Pilotiq.ts +705 -0
- package/src/PilotiqRegistry.ts +36 -0
- package/src/PilotiqServiceProvider.ts +69 -0
- package/src/RelationManager.test.ts +400 -0
- package/src/RelationManager.ts +527 -0
- package/src/RenderHook.test.ts +252 -0
- package/src/RenderHook.ts +226 -0
- package/src/Resource.test.ts +240 -0
- package/src/Resource.ts +439 -0
- package/src/RightPanel.test.ts +202 -0
- package/src/RightPanel.ts +132 -0
- package/src/Tab.test.ts +91 -0
- package/src/Tab.ts +156 -0
- package/src/UserMenuItem.ts +145 -0
- package/src/actions/Action.test.ts +2479 -0
- package/src/actions/Action.ts +2124 -0
- package/src/actions/ActionGroup.test.ts +112 -0
- package/src/actions/ActionGroup.ts +173 -0
- package/src/actions/attachFactory.ts +172 -0
- package/src/actions/exportFactory.ts +215 -0
- package/src/actions/importFactory.ts +222 -0
- package/src/actions/index.ts +17 -0
- package/src/applyPageHooks.test.ts +298 -0
- package/src/applyPageHooks.ts +242 -0
- package/src/authorization.test.ts +483 -0
- package/src/breadcrumbs.test.ts +238 -0
- package/src/cells/coerce.test.ts +85 -0
- package/src/cells/coerce.ts +84 -0
- package/src/clusterPaths.ts +35 -0
- package/src/columns/BadgeColumn.test.ts +54 -0
- package/src/columns/BadgeColumn.ts +32 -0
- package/src/columns/BooleanColumn.test.ts +41 -0
- package/src/columns/BooleanColumn.ts +18 -0
- package/src/columns/ColorColumn.test.ts +37 -0
- package/src/columns/ColorColumn.ts +38 -0
- package/src/columns/IconColumn.test.ts +54 -0
- package/src/columns/IconColumn.ts +37 -0
- package/src/columns/ImageColumn.test.ts +41 -0
- package/src/columns/ImageColumn.ts +28 -0
- package/src/columns/SelectColumn.ts +60 -0
- package/src/columns/TextColumn.test.ts +190 -0
- package/src/columns/TextColumn.ts +20 -0
- package/src/columns/TextInputColumn.ts +68 -0
- package/src/columns/ToggleColumn.ts +46 -0
- package/src/columns/editableColumns.test.ts +193 -0
- package/src/columns/index.ts +9 -0
- package/src/defaultGlobalPages.ts +95 -0
- package/src/defaultPages.test.ts +634 -0
- package/src/defaultPages.ts +614 -0
- package/src/defaultViewPage.test.ts +147 -0
- package/src/elements/Form.test.ts +223 -0
- package/src/elements/Form.ts +397 -0
- package/src/elements/ListTabs.ts +28 -0
- package/src/elements/Table.test.ts +422 -0
- package/src/elements/Table.ts +816 -0
- package/src/elements/TableGroup.test.ts +149 -0
- package/src/elements/TableGroup.ts +199 -0
- package/src/elements/dispatchAction.test.ts +463 -0
- package/src/elements/dispatchAction.ts +355 -0
- package/src/elements/dispatchForm.test.ts +455 -0
- package/src/elements/dispatchForm.ts +1855 -0
- package/src/elements/dispatchTable.test.ts +1247 -0
- package/src/elements/dispatchTable.ts +666 -0
- package/src/elements/index.ts +21 -0
- package/src/entries/BadgeEntry.ts +39 -0
- package/src/entries/CodeEntry.test.ts +40 -0
- package/src/entries/CodeEntry.ts +52 -0
- package/src/entries/ColorEntry.ts +63 -0
- package/src/entries/ComponentEntry.test.ts +173 -0
- package/src/entries/ComponentEntry.ts +95 -0
- package/src/entries/Entry.ts +304 -0
- package/src/entries/IconEntry.ts +49 -0
- package/src/entries/ImageEntry.ts +61 -0
- package/src/entries/KeyValueEntry.ts +47 -0
- package/src/entries/RepeatableEntry.test.ts +239 -0
- package/src/entries/RepeatableEntry.ts +173 -0
- package/src/entries/TextEntry.test.ts +394 -0
- package/src/entries/TextEntry.ts +60 -0
- package/src/entries/index.ts +12 -0
- package/src/entries/leaves.test.ts +306 -0
- package/src/entries/registry.ts +54 -0
- package/src/fields/BuilderField.test.ts +1188 -0
- package/src/fields/BuilderField.ts +568 -0
- package/src/fields/BuilderRelationship.test.ts +811 -0
- package/src/fields/CheckboxField.test.ts +44 -0
- package/src/fields/CheckboxField.ts +27 -0
- package/src/fields/CheckboxListField.test.ts +99 -0
- package/src/fields/CheckboxListField.ts +66 -0
- package/src/fields/ColorPickerField.test.ts +33 -0
- package/src/fields/ColorPickerField.ts +25 -0
- package/src/fields/DateField.ts +54 -0
- package/src/fields/DateTimeField.test.ts +55 -0
- package/src/fields/EmailField.ts +16 -0
- package/src/fields/Field.test.ts +639 -0
- package/src/fields/Field.ts +773 -0
- package/src/fields/FileUploadField.test.ts +97 -0
- package/src/fields/FileUploadField.ts +71 -0
- package/src/fields/HiddenField.test.ts +27 -0
- package/src/fields/HiddenField.ts +28 -0
- package/src/fields/KeyValueField.test.ts +105 -0
- package/src/fields/KeyValueField.ts +55 -0
- package/src/fields/MarkdownField.test.ts +167 -0
- package/src/fields/MarkdownField.ts +151 -0
- package/src/fields/NumberField.ts +33 -0
- package/src/fields/RadioField.test.ts +94 -0
- package/src/fields/RadioField.ts +67 -0
- package/src/fields/RepeaterField.test.ts +1806 -0
- package/src/fields/RepeaterField.ts +791 -0
- package/src/fields/RepeaterRelationship.test.ts +1630 -0
- package/src/fields/RepeaterSimple.test.ts +248 -0
- package/src/fields/RowButton.test.ts +149 -0
- package/src/fields/RowButton.ts +125 -0
- package/src/fields/SelectField.test.ts +192 -0
- package/src/fields/SelectField.ts +235 -0
- package/src/fields/SliderField.test.ts +50 -0
- package/src/fields/SliderField.ts +53 -0
- package/src/fields/SlugField.ts +24 -0
- package/src/fields/TagsInputField.test.ts +154 -0
- package/src/fields/TagsInputField.ts +133 -0
- package/src/fields/TextField.ts +24 -0
- package/src/fields/TextareaField.test.ts +58 -0
- package/src/fields/TextareaField.ts +59 -0
- package/src/fields/ToggleButtonsField.test.ts +106 -0
- package/src/fields/ToggleButtonsField.ts +59 -0
- package/src/fields/ToggleField.ts +16 -0
- package/src/fields/disableOptionsWhenSelectedInSiblingRepeaterItems.test.ts +319 -0
- package/src/fields/optionsResolver.ts +95 -0
- package/src/fields/resolveField.ts +28 -0
- package/src/filters/BooleanFilter.ts +35 -0
- package/src/filters/DateRangeFilter.test.ts +194 -0
- package/src/filters/DateRangeFilter.ts +148 -0
- package/src/filters/Filter.test.ts +268 -0
- package/src/filters/Filter.ts +184 -0
- package/src/filters/FormFilter.test.ts +238 -0
- package/src/filters/FormFilter.ts +215 -0
- package/src/filters/MultiSelectFilter.test.ts +119 -0
- package/src/filters/MultiSelectFilter.ts +78 -0
- package/src/filters/QueryBuilderFilter.test.ts +644 -0
- package/src/filters/QueryBuilderFilter.ts +398 -0
- package/src/filters/SelectFilter.ts +46 -0
- package/src/filters/TernaryFilter.test.ts +160 -0
- package/src/filters/TernaryFilter.ts +72 -0
- package/src/filters/TrashedFilter.test.ts +149 -0
- package/src/filters/TrashedFilter.ts +55 -0
- package/src/filters/queryBuilder/BooleanConstraint.ts +31 -0
- package/src/filters/queryBuilder/Constraint.ts +115 -0
- package/src/filters/queryBuilder/DateConstraint.ts +69 -0
- package/src/filters/queryBuilder/NumberConstraint.ts +66 -0
- package/src/filters/queryBuilder/SelectConstraint.ts +72 -0
- package/src/filters/queryBuilder/TextConstraint.ts +65 -0
- package/src/filters/queryBuilder/index.ts +12 -0
- package/src/icons/index.ts +2 -0
- package/src/icons/lucide.ts +204 -0
- package/src/icons/registry.test.ts +56 -0
- package/src/icons/registry.ts +41 -0
- package/src/icons/types.ts +47 -0
- package/src/index.ts +521 -0
- package/src/io/csv.test.ts +142 -0
- package/src/io/csv.ts +170 -0
- package/src/nestedRelationManagerData.test.ts +526 -0
- package/src/notifications/Notification.test.ts +210 -0
- package/src/notifications/Notification.ts +354 -0
- package/src/notifications/broadcast.test.ts +110 -0
- package/src/notifications/broadcast.ts +95 -0
- package/src/notifications/database.test.ts +383 -0
- package/src/notifications/database.ts +398 -0
- package/src/notifications/databaseNotifications.test.ts +187 -0
- package/src/notifications/dispatchNotificationAction.test.ts +341 -0
- package/src/notifications/dispatchNotificationAction.ts +142 -0
- package/src/notifications/flash.test.ts +89 -0
- package/src/notifications/flash.ts +71 -0
- package/src/notifications/index.ts +45 -0
- package/src/notifications/registerBroadcastAuth.test.ts +134 -0
- package/src/notifications/registerBroadcastAuth.ts +100 -0
- package/src/notifications/resolveSavedNotification.test.ts +82 -0
- package/src/notifications/resolveSavedNotification.ts +59 -0
- package/src/notifications/types.ts +93 -0
- package/src/orm/m2mAccessor.ts +66 -0
- package/src/orm/modelDefaults.test.ts +633 -0
- package/src/orm/modelDefaults.ts +632 -0
- package/src/pageData.test.ts +1121 -0
- package/src/pageData.ts +4662 -0
- package/src/plugins/index.ts +1 -0
- package/src/plugins/themeEditor.ts +24 -0
- package/src/react/AppShell.tsx +148 -0
- package/src/react/CommandPalette.tsx +375 -0
- package/src/react/FormStateContext.tsx +398 -0
- package/src/react/HeadHooks.tsx +126 -0
- package/src/react/NotificationActionStrip.tsx +263 -0
- package/src/react/NotificationBell.tsx +426 -0
- package/src/react/RenderHookSlot.tsx +32 -0
- package/src/react/RightSidebar.tsx +257 -0
- package/src/react/RightSidebarContext.tsx +211 -0
- package/src/react/RightSidebarTrigger.tsx +53 -0
- package/src/react/SchemaRenderer.tsx +6128 -0
- package/src/react/SearchTrigger.tsx +46 -0
- package/src/react/ThemeProvider.tsx +93 -0
- package/src/react/ThemeSettingsPage.tsx +579 -0
- package/src/react/ThemeToggle.tsx +20 -0
- package/src/react/Toaster.tsx +158 -0
- package/src/react/UserMenu.tsx +196 -0
- package/src/react/WidgetDataContext.tsx +157 -0
- package/src/react/cells/EditableCell.tsx +376 -0
- package/src/react/fieldJsHandler.test.ts +166 -0
- package/src/react/fieldJsHandler.ts +79 -0
- package/src/react/fields/BuilderInput.tsx +995 -0
- package/src/react/fields/CheckboxInput.tsx +39 -0
- package/src/react/fields/CheckboxListInput.tsx +81 -0
- package/src/react/fields/ColorInput.tsx +51 -0
- package/src/react/fields/DateFieldInput.tsx +70 -0
- package/src/react/fields/DateTimeInput.tsx +42 -0
- package/src/react/fields/FieldShell.tsx +107 -0
- package/src/react/fields/FileUploadInput.tsx +189 -0
- package/src/react/fields/HiddenInput.tsx +17 -0
- package/src/react/fields/KeyValueInput.tsx +200 -0
- package/src/react/fields/MarkdownInput.tsx +333 -0
- package/src/react/fields/RadioInput.tsx +60 -0
- package/src/react/fields/RepeaterInput.test.ts +116 -0
- package/src/react/fields/RepeaterInput.tsx +1313 -0
- package/src/react/fields/SelectFieldInput.tsx +257 -0
- package/src/react/fields/SliderInput.tsx +63 -0
- package/src/react/fields/TagsInput.tsx +265 -0
- package/src/react/fields/TextLikeInput.tsx +54 -0
- package/src/react/fields/ToggleButtonsInput.tsx +60 -0
- package/src/react/fields/ToggleFieldInput.tsx +35 -0
- package/src/react/fields/rowChromeButton.tsx +225 -0
- package/src/react/fields/syncRowGates.test.ts +202 -0
- package/src/react/fields/syncRowGates.ts +66 -0
- package/src/react/formStateHelpers.test.ts +295 -0
- package/src/react/formStateHelpers.ts +218 -0
- package/src/react/hooks/use-mobile.ts +19 -0
- package/src/react/icon-context.tsx +60 -0
- package/src/react/index.ts +85 -0
- package/src/react/layouts/SidebarLayout.tsx +239 -0
- package/src/react/layouts/TopbarLayout.tsx +245 -0
- package/src/react/navigate.tsx +37 -0
- package/src/react/registry.ts +48 -0
- package/src/react/right-panel-registry.tsx +47 -0
- package/src/react/theme-preview/apply.ts +99 -0
- package/src/react/theme-preview/build-html.ts +436 -0
- package/src/react/ui/button.tsx +51 -0
- package/src/react/ui/calendar.tsx +67 -0
- package/src/react/ui/checkbox.tsx +29 -0
- package/src/react/ui/dialog.tsx +108 -0
- package/src/react/ui/dropdown-menu.tsx +97 -0
- package/src/react/ui/input.tsx +20 -0
- package/src/react/ui/label.tsx +21 -0
- package/src/react/ui/popover.tsx +50 -0
- package/src/react/ui/select.tsx +169 -0
- package/src/react/ui/separator.tsx +25 -0
- package/src/react/ui/sheet.tsx +136 -0
- package/src/react/ui/sidebar.tsx +723 -0
- package/src/react/ui/skeleton.tsx +13 -0
- package/src/react/ui/slider.tsx +34 -0
- package/src/react/ui/switch.tsx +28 -0
- package/src/react/ui/table.tsx +105 -0
- package/src/react/ui/tabs.tsx +63 -0
- package/src/react/ui/textarea.tsx +18 -0
- package/src/react/ui/tooltip.tsx +64 -0
- package/src/react/useResizableWidth.ts +139 -0
- package/src/react/utils.ts +6 -0
- package/src/react/widgetRegistry.test.ts +43 -0
- package/src/react/widgetRegistry.ts +50 -0
- package/src/react/widgets/StatsOverviewRenderer.tsx +232 -0
- package/src/react/widgets/TableWidgetRenderer.tsx +231 -0
- package/src/react/widgets/ViewRenderer.tsx +71 -0
- package/src/relationManagerData.test.ts +1146 -0
- package/src/richtext/index.ts +8 -0
- package/src/richtext/registry.ts +89 -0
- package/src/routes-nested-relations.test.ts +676 -0
- package/src/routes-relations.test.ts +972 -0
- package/src/routes.test.ts +1886 -0
- package/src/routes.ts +3262 -0
- package/src/schema/Alert.test.ts +63 -0
- package/src/schema/Alert.ts +49 -0
- package/src/schema/Block.ts +169 -0
- package/src/schema/Breadcrumbs.ts +40 -0
- package/src/schema/Card.ts +35 -0
- package/src/schema/Divider.ts +20 -0
- package/src/schema/Element.ts +219 -0
- package/src/schema/EmptyState.test.ts +37 -0
- package/src/schema/EmptyState.ts +63 -0
- package/src/schema/Fieldset.ts +43 -0
- package/src/schema/Grid.ts +43 -0
- package/src/schema/Group.ts +30 -0
- package/src/schema/Heading.ts +39 -0
- package/src/schema/Html.ts +67 -0
- package/src/schema/Icon.ts +54 -0
- package/src/schema/Image.ts +57 -0
- package/src/schema/LinkTag.ts +41 -0
- package/src/schema/Markdown.ts +85 -0
- package/src/schema/MetaTag.ts +41 -0
- package/src/schema/RelationTabs.ts +71 -0
- package/src/schema/ScriptTag.ts +55 -0
- package/src/schema/Section.ts +143 -0
- package/src/schema/ServerDataElement.test.ts +140 -0
- package/src/schema/ServerDataElement.ts +156 -0
- package/src/schema/Split.ts +50 -0
- package/src/schema/Stat.test.ts +118 -0
- package/src/schema/Stat.ts +154 -0
- package/src/schema/StatsOverview.test.ts +141 -0
- package/src/schema/StatsOverview.ts +119 -0
- package/src/schema/StyleTag.ts +35 -0
- package/src/schema/TableWidget.test.ts +297 -0
- package/src/schema/TableWidget.ts +289 -0
- package/src/schema/Tabs.ts +79 -0
- package/src/schema/Text.ts +58 -0
- package/src/schema/UnorderedList.ts +49 -0
- package/src/schema/View.test.ts +111 -0
- package/src/schema/View.ts +127 -0
- package/src/schema/Wizard.ts +108 -0
- package/src/schema/containers.test.ts +446 -0
- package/src/schema/headTags.test.ts +134 -0
- package/src/schema/index.ts +39 -0
- package/src/schema/primes.test.ts +269 -0
- package/src/schema/resolveSchema.test.ts +329 -0
- package/src/schema/resolveSchema.ts +807 -0
- package/src/schema/sanitize.ts +49 -0
- package/src/search.test.ts +446 -0
- package/src/search.ts +178 -0
- package/src/sessionFilters.test.ts +352 -0
- package/src/sessionFilters.ts +133 -0
- package/src/summarizers/Summarizer.test.ts +84 -0
- package/src/summarizers/Summarizer.ts +123 -0
- package/src/summarizers/index.ts +11 -0
- package/src/theme/base-colors.ts +68 -0
- package/src/theme/chart-colors.ts +50 -0
- package/src/theme/colors.ts +447 -0
- package/src/theme/generate-css.test.ts +139 -0
- package/src/theme/generate-css.ts +44 -0
- package/src/theme/generate-scale.test.ts +106 -0
- package/src/theme/generate-scale.ts +97 -0
- package/src/theme/icon-map.ts +42 -0
- package/src/theme/index.ts +28 -0
- package/src/theme/migrate.ts +81 -0
- package/src/theme/presets.ts +135 -0
- package/src/theme/radius.ts +18 -0
- package/src/theme/resolve.test.ts +238 -0
- package/src/theme/resolve.ts +96 -0
- package/src/theme/spacing.ts +18 -0
- package/src/theme/theme-colors.ts +88 -0
- package/src/theme/types.ts +125 -0
- package/src/uploads/UploadAdapter.ts +35 -0
- package/src/uploads/index.ts +2 -0
- package/src/uploads/localUpload.test.ts +70 -0
- package/src/uploads/localUpload.ts +84 -0
- package/src/validation/Validator.ts +49 -0
- package/src/validation/index.ts +28 -0
- package/src/validation/rules.ts +78 -0
- package/src/validation/runValidators.ts +435 -0
- package/src/validation/uniqueValidator.test.ts +196 -0
- package/src/validation/uniqueValidator.ts +133 -0
- package/src/validation/validators.test.ts +268 -0
- package/src/vite.ts +758 -0
- package/src/widgets/index.ts +10 -0
- package/src/widgets/registry.ts +45 -0
- package/src/widgets.test.ts +592 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +4 -0
- package/tsconfig.test.json +10 -0
- package/views/react/Dashboard.tsx +27 -0
- package/views/react/Resources/Form.tsx +102 -0
- package/views/react/Resources/Index.tsx +49 -0
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useContext, useEffect, useId, useMemo, useState } from 'react';
|
|
3
|
+
import { PlusIcon } from 'lucide-react';
|
|
4
|
+
import { Button } from '../ui/button.js';
|
|
5
|
+
import { SchemaRenderer, dispatchHandlerAction } from '../SchemaRenderer.js';
|
|
6
|
+
import { FormIdContext, useFormState } from '../FormStateContext.js';
|
|
7
|
+
import { findFieldMeta } from '../formStateHelpers.js';
|
|
8
|
+
import { useNavigate } from '../navigate.js';
|
|
9
|
+
import { useToast } from '../Toaster.js';
|
|
10
|
+
import { RowChromeIconButton, ReorderGrip, CollapseChevron, resolveRowChrome, DEFAULT_MOVE_UP, DEFAULT_MOVE_DOWN, DEFAULT_CLONE, DEFAULT_DELETE, } from './rowChromeButton.js';
|
|
11
|
+
import { syncRowGates } from './syncRowGates.js';
|
|
12
|
+
/**
|
|
13
|
+
* Pure reorder helper — used by both the HTML5 DnD path and the
|
|
14
|
+
* Up/Down button path. `insertBeforeIdx` is the boundary the dragged
|
|
15
|
+
* row should land at (range `0..rows.length`); after removing the
|
|
16
|
+
* source we adjust by -1 when the source sat below the target so the
|
|
17
|
+
* caller never has to think about post-removal index shifts.
|
|
18
|
+
*
|
|
19
|
+
* No-ops when the move would leave the array unchanged.
|
|
20
|
+
*/
|
|
21
|
+
export function reorderRows(rows, fromIdx, insertBeforeIdx) {
|
|
22
|
+
if (fromIdx < 0 || fromIdx >= rows.length)
|
|
23
|
+
return rows;
|
|
24
|
+
if (insertBeforeIdx < 0 || insertBeforeIdx > rows.length)
|
|
25
|
+
return rows;
|
|
26
|
+
if (fromIdx === insertBeforeIdx || fromIdx + 1 === insertBeforeIdx)
|
|
27
|
+
return rows;
|
|
28
|
+
const next = rows.slice();
|
|
29
|
+
const moved = next.splice(fromIdx, 1)[0];
|
|
30
|
+
const target = insertBeforeIdx > fromIdx ? insertBeforeIdx - 1 : insertBeforeIdx;
|
|
31
|
+
next.splice(target, 0, moved);
|
|
32
|
+
return next;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Tailwind v4 default breakpoint widths. Reused as container-query
|
|
36
|
+
* thresholds so authors can think in the same `sm/md/lg/xl/2xl` ladder
|
|
37
|
+
* regardless of viewport vs. container framing — at viewport width these
|
|
38
|
+
* fire identically to the corresponding `@media` queries.
|
|
39
|
+
*/
|
|
40
|
+
const RESPONSIVE_GRID_BREAKPOINTS = [
|
|
41
|
+
{ key: 'sm', min: '40rem' },
|
|
42
|
+
{ key: 'md', min: '48rem' },
|
|
43
|
+
{ key: 'lg', min: '64rem' },
|
|
44
|
+
{ key: 'xl', min: '80rem' },
|
|
45
|
+
{ key: '2xl', min: '96rem' },
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Compute the grid container's className / style / scoped-CSS block from
|
|
49
|
+
* a `meta.grid` value. Shared between Repeater and Builder so both render
|
|
50
|
+
* responsive grids identically.
|
|
51
|
+
*
|
|
52
|
+
* - `meta.grid` undefined → `{ hasGrid: false }` and the caller falls back
|
|
53
|
+
* to a vertical flex stack.
|
|
54
|
+
* - Number form (`grid(2)`) → inline `gridTemplateColumns: repeat(N, …)`.
|
|
55
|
+
* - Object form (`grid({ default: 1, md: 2 })`) → a fresh `<style>` block
|
|
56
|
+
* keyed off `scopeId` + a matching className on the container; default
|
|
57
|
+
* columns drive the base rule, each declared breakpoint adds a
|
|
58
|
+
* `@container` query override.
|
|
59
|
+
*
|
|
60
|
+
* Responsive mode requires a CQ context — the caller paints
|
|
61
|
+
* `wrapperStyle` (`container-type: inline-size`) on the outer wrapper so
|
|
62
|
+
* the grid's `@container` rules resolve against the Repeater's
|
|
63
|
+
* parent-allocated width, not the viewport. A 2-column Repeater dropped
|
|
64
|
+
* into a `Split` aside therefore folds back to 1 column once the aside
|
|
65
|
+
* is narrower than `md`, even on a wide screen.
|
|
66
|
+
*
|
|
67
|
+
* `scopeId` should be a stable per-field identifier (we use `useId()` from
|
|
68
|
+
* React — already isolated to this render's component instance).
|
|
69
|
+
*/
|
|
70
|
+
export function buildGridContainer(grid, scopeId) {
|
|
71
|
+
if (grid === undefined) {
|
|
72
|
+
return { hasGrid: false, className: 'flex flex-col gap-3', style: undefined, styleBlock: null, wrapperStyle: undefined };
|
|
73
|
+
}
|
|
74
|
+
if (typeof grid === 'number') {
|
|
75
|
+
return {
|
|
76
|
+
hasGrid: true,
|
|
77
|
+
className: 'grid gap-3',
|
|
78
|
+
style: { gridTemplateColumns: `repeat(${grid}, minmax(0, 1fr))` },
|
|
79
|
+
styleBlock: null,
|
|
80
|
+
wrapperStyle: undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const cls = `pq-grid-${scopeId.replace(/:/g, '')}`;
|
|
84
|
+
const baseCols = typeof grid['default'] === 'number' ? grid['default'] : 1;
|
|
85
|
+
const rules = [
|
|
86
|
+
`.${cls} { display: grid; gap: 0.75rem; grid-template-columns: repeat(${baseCols}, minmax(0, 1fr)); }`,
|
|
87
|
+
];
|
|
88
|
+
for (const bp of RESPONSIVE_GRID_BREAKPOINTS) {
|
|
89
|
+
const cols = grid[bp.key];
|
|
90
|
+
if (typeof cols !== 'number')
|
|
91
|
+
continue;
|
|
92
|
+
rules.push(`@container (min-width: ${bp.min}) { .${cls} { grid-template-columns: repeat(${cols}, minmax(0, 1fr)); } }`);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
hasGrid: true,
|
|
96
|
+
className: cls,
|
|
97
|
+
style: undefined,
|
|
98
|
+
styleBlock: _jsx("style", { children: rules.join('\n') }),
|
|
99
|
+
wrapperStyle: { containerType: 'inline-size' },
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Repeater renderer (Plan #14).
|
|
104
|
+
*
|
|
105
|
+
* Rows are managed as local React state with stable `id` keys so
|
|
106
|
+
* uncontrolled inner inputs preserve their typed values across
|
|
107
|
+
* add/remove/reorder operations. Each row's resolved children meta is
|
|
108
|
+
* deep-cloned with a row-scoped prefix on every Field's `name` so
|
|
109
|
+
* submitted form bodies are flat-keyed (`items.0.product`, etc.) — the
|
|
110
|
+
* server's `coerceFormValues` re-groups them into an array.
|
|
111
|
+
*
|
|
112
|
+
* Reorder: native HTML5 drag-and-drop on each row, with a 2px drop
|
|
113
|
+
* indicator showing where the row will land. Up/Down buttons are kept
|
|
114
|
+
* as a keyboard fallback. Both paths route through `reorderRows()` so
|
|
115
|
+
* behavior is identical. Collapsed state persists per-row to
|
|
116
|
+
* `localStorage` under `pilotiq.repeater.<formId>.<fieldName>.<rowId>`
|
|
117
|
+
* when collapsible.
|
|
118
|
+
*
|
|
119
|
+
* Inner-field reactivity: this component does NOT integrate with
|
|
120
|
+
* `FormStateProvider` for nested-path live updates; that surgery is
|
|
121
|
+
* tracked separately. Repeaters with `live()` inner fields render
|
|
122
|
+
* today but the `live` trigger doesn't roundtrip.
|
|
123
|
+
*/
|
|
124
|
+
export function RepeaterInput({ el, name, disabled, }) {
|
|
125
|
+
// The parent <form>'s id, scoped via context. Falls back to the field
|
|
126
|
+
// name when no Form is in scope (defensive — Repeaters always render
|
|
127
|
+
// inside a Form on real pages, but Storybook / unit tests can mount
|
|
128
|
+
// them bare).
|
|
129
|
+
const formIdFromCtx = useContext(FormIdContext);
|
|
130
|
+
const formId = formIdFromCtx || `repeater-${name}`;
|
|
131
|
+
const meta = el;
|
|
132
|
+
const minItems = typeof meta.minItems === 'number' ? meta.minItems : undefined;
|
|
133
|
+
const maxItems = typeof meta.maxItems === 'number' ? meta.maxItems : undefined;
|
|
134
|
+
const collapsible = Boolean(meta.collapsible);
|
|
135
|
+
const defaultCollapsed = Boolean(meta.defaultCollapsed);
|
|
136
|
+
const accordion = Boolean(meta.accordion);
|
|
137
|
+
const reorderable = Boolean(meta.reorderable);
|
|
138
|
+
const cloneable = Boolean(meta.cloneable);
|
|
139
|
+
const simple = Boolean(meta.simple);
|
|
140
|
+
const buttons = meta.buttons;
|
|
141
|
+
// Customizer wins over the legacy `addActionLabel`. Default 'Add' is the
|
|
142
|
+
// final fallback; documented in `RepeaterField.addActionLabel`.
|
|
143
|
+
const addLabel = buttons?.add?.label
|
|
144
|
+
?? (typeof meta.addActionLabel === 'string' ? meta.addActionLabel : 'Add');
|
|
145
|
+
const columns = typeof meta.columns === 'number' && meta.columns > 1 ? meta.columns : 1;
|
|
146
|
+
// Row-grid mode: scalar `grid: N` or responsive object `grid: { default, md, … }`
|
|
147
|
+
// lays rows in an n-column grid. Distinct from `columns` which grids the inner
|
|
148
|
+
// schema *inside* a row. We suppress the drop indicator in grid mode (a horizontal
|
|
149
|
+
// accent line reads wrong across grid cells); button reorder still works.
|
|
150
|
+
const gridScopeId = useId();
|
|
151
|
+
const gridContainer = useMemo(() => buildGridContainer(meta.grid, gridScopeId), [meta.grid, gridScopeId]);
|
|
152
|
+
// Table mode renders rows as `<tr>` and inner fields as `<td>`. Mutually
|
|
153
|
+
// exclusive with `simple` and `grid` (the field setters arbitrate).
|
|
154
|
+
// Collapsible / accordion are meaningless on `<tr>` rows so we ignore
|
|
155
|
+
// those flags in this path.
|
|
156
|
+
const tableColumns = meta.table?.columns;
|
|
157
|
+
const tableMode = Array.isArray(tableColumns) && tableColumns.length > 0;
|
|
158
|
+
const initialRows = useMemo(() => (meta.rows ?? []).map(r => ({
|
|
159
|
+
id: r.id,
|
|
160
|
+
children: r.children,
|
|
161
|
+
...(r.itemLabel !== undefined ? { itemLabel: r.itemLabel } : {}),
|
|
162
|
+
...(r.hidden ? { hidden: true } : {}),
|
|
163
|
+
...(r.extraActions && r.extraActions.length > 0 ? { extraActions: r.extraActions } : {}),
|
|
164
|
+
...(r.canDelete === false ? { canDelete: false } : {}),
|
|
165
|
+
...(r.canClone === false ? { canClone: false } : {}),
|
|
166
|
+
...(r.canReorder === false ? { canReorder: false } : {}),
|
|
167
|
+
})),
|
|
168
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
169
|
+
[]);
|
|
170
|
+
const [rows, setRows] = useState(initialRows);
|
|
171
|
+
const metaRows = meta.rows;
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
if (!metaRows)
|
|
174
|
+
return;
|
|
175
|
+
setRows(prev => syncRowGates(prev, metaRows));
|
|
176
|
+
}, [metaRows]);
|
|
177
|
+
const [collapsed, setCollapsed] = useState(() => accordion ? {} : initSeedCollapsed(initialRows, formId, name, defaultCollapsed, collapsible));
|
|
178
|
+
// Accordion mode replaces the per-row collapsed map with a single open
|
|
179
|
+
// row id (or `null` for "all collapsed"). Persisted under a single
|
|
180
|
+
// `…accordion` storage key so reload + form swap restore the open row.
|
|
181
|
+
// Initial value: respect `defaultCollapsed` (start with everything
|
|
182
|
+
// collapsed when the author opted in), otherwise open the first
|
|
183
|
+
// visible row — Filament's posture, and matches the implicit user
|
|
184
|
+
// mental model that an accordion always shows *something*.
|
|
185
|
+
const [accordionOpenId, setAccordionOpenId] = useState(() => {
|
|
186
|
+
if (!accordion)
|
|
187
|
+
return null;
|
|
188
|
+
const stored = readAccordionFromStorage(formId, name);
|
|
189
|
+
if (stored !== undefined) {
|
|
190
|
+
// Storage may hold a stale id from before a row was deleted; if so,
|
|
191
|
+
// fall through to the default.
|
|
192
|
+
if (stored === '' || initialRows.some(r => r.id === stored))
|
|
193
|
+
return stored === '' ? null : stored;
|
|
194
|
+
}
|
|
195
|
+
if (defaultCollapsed)
|
|
196
|
+
return null;
|
|
197
|
+
const firstVisible = initialRows.find(r => !r.hidden);
|
|
198
|
+
return firstVisible?.id ?? null;
|
|
199
|
+
});
|
|
200
|
+
const atMin = minItems !== undefined && rows.length <= minItems;
|
|
201
|
+
const atMax = maxItems !== undefined && rows.length >= maxItems;
|
|
202
|
+
const addRow = () => {
|
|
203
|
+
if (atMax)
|
|
204
|
+
return;
|
|
205
|
+
const newRow = {
|
|
206
|
+
id: generateRowId(),
|
|
207
|
+
children: meta.template ?? [],
|
|
208
|
+
};
|
|
209
|
+
setRows(prev => [...prev, newRow]);
|
|
210
|
+
if (accordion) {
|
|
211
|
+
// New row should be the only one open — the user just asked for it.
|
|
212
|
+
setAccordionOpenId(newRow.id);
|
|
213
|
+
writeAccordionToStorage(formId, name, newRow.id);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (collapsible && defaultCollapsed) {
|
|
217
|
+
setCollapsed(prev => ({ ...prev, [newRow.id]: true }));
|
|
218
|
+
writeCollapsedToStorage(formId, name, newRow.id, true);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const removeRow = (id) => {
|
|
222
|
+
if (atMin)
|
|
223
|
+
return;
|
|
224
|
+
setRows(prev => prev.filter(r => r.id !== id));
|
|
225
|
+
if (accordion) {
|
|
226
|
+
if (accordionOpenId === id) {
|
|
227
|
+
setAccordionOpenId(null);
|
|
228
|
+
writeAccordionToStorage(formId, name, null);
|
|
229
|
+
}
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
setCollapsed(prev => {
|
|
233
|
+
const { [id]: _drop, ...rest } = prev;
|
|
234
|
+
return rest;
|
|
235
|
+
});
|
|
236
|
+
deleteCollapsedFromStorage(formId, name, id);
|
|
237
|
+
};
|
|
238
|
+
const cloneRow = (id) => {
|
|
239
|
+
if (atMax)
|
|
240
|
+
return;
|
|
241
|
+
setRows(prev => {
|
|
242
|
+
const idx = prev.findIndex(r => r.id === id);
|
|
243
|
+
if (idx < 0)
|
|
244
|
+
return prev;
|
|
245
|
+
const source = prev[idx];
|
|
246
|
+
const clone = {
|
|
247
|
+
id: generateRowId(),
|
|
248
|
+
children: source.children,
|
|
249
|
+
...(source.itemLabel !== undefined ? { itemLabel: source.itemLabel } : {}),
|
|
250
|
+
};
|
|
251
|
+
const next = prev.slice();
|
|
252
|
+
next.splice(idx + 1, 0, clone);
|
|
253
|
+
return next;
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
const moveRow = (id, dir) => {
|
|
257
|
+
setRows(prev => {
|
|
258
|
+
const idx = prev.findIndex(r => r.id === id);
|
|
259
|
+
if (idx < 0)
|
|
260
|
+
return prev;
|
|
261
|
+
// Skip past hidden neighbours so reorder operates between visible
|
|
262
|
+
// rows. Hidden rows hold their absolute slot — the visible row hops
|
|
263
|
+
// over them.
|
|
264
|
+
if (dir === -1) {
|
|
265
|
+
let target = idx - 1;
|
|
266
|
+
while (target >= 0 && prev[target]?.hidden)
|
|
267
|
+
target--;
|
|
268
|
+
if (target < 0)
|
|
269
|
+
return prev;
|
|
270
|
+
return reorderRows(prev, idx, target);
|
|
271
|
+
}
|
|
272
|
+
let target = idx + 1;
|
|
273
|
+
while (target < prev.length && prev[target]?.hidden)
|
|
274
|
+
target++;
|
|
275
|
+
if (target >= prev.length)
|
|
276
|
+
return prev;
|
|
277
|
+
return reorderRows(prev, idx, target + 1);
|
|
278
|
+
});
|
|
279
|
+
};
|
|
280
|
+
// ── DnD state ───────────────────────────────────────────
|
|
281
|
+
// dragId — the row being dragged, or null when no drag is active.
|
|
282
|
+
// dropAt — the boundary slot the cursor is currently over
|
|
283
|
+
// (range 0..rows.length); null when not over a valid drop target.
|
|
284
|
+
const [dragId, setDragId] = useState(null);
|
|
285
|
+
const [dropAt, setDropAt] = useState(null);
|
|
286
|
+
// Generic on `HTMLElement` so the same handlers wire onto a `<div>`
|
|
287
|
+
// row (card / grid layouts) AND a `<tr>` row (table layout). Concrete
|
|
288
|
+
// refinement happens at the consumer's prop boundary.
|
|
289
|
+
const onRowDragStart = (id) => (e) => {
|
|
290
|
+
if (!reorderable || disabled)
|
|
291
|
+
return;
|
|
292
|
+
setDragId(id);
|
|
293
|
+
// dataTransfer needs *something* to register the drag in Firefox.
|
|
294
|
+
e.dataTransfer.effectAllowed = 'move';
|
|
295
|
+
try {
|
|
296
|
+
e.dataTransfer.setData('text/plain', id);
|
|
297
|
+
}
|
|
298
|
+
catch { /* IE quirk; ignore */ }
|
|
299
|
+
};
|
|
300
|
+
const onRowDragOver = (idx) => (e) => {
|
|
301
|
+
if (!reorderable || disabled || dragId === null)
|
|
302
|
+
return;
|
|
303
|
+
e.preventDefault();
|
|
304
|
+
e.dataTransfer.dropEffect = 'move';
|
|
305
|
+
// Drop above this row when cursor is in its top half, below when in its bottom half.
|
|
306
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
307
|
+
const aboveHalf = e.clientY < rect.top + rect.height / 2;
|
|
308
|
+
setDropAt(aboveHalf ? idx : idx + 1);
|
|
309
|
+
};
|
|
310
|
+
const onRowDrop = (e) => {
|
|
311
|
+
if (!reorderable || disabled || dragId === null || dropAt === null) {
|
|
312
|
+
setDragId(null);
|
|
313
|
+
setDropAt(null);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
e.preventDefault();
|
|
317
|
+
setRows(prev => {
|
|
318
|
+
const fromIdx = prev.findIndex(r => r.id === dragId);
|
|
319
|
+
if (fromIdx < 0)
|
|
320
|
+
return prev;
|
|
321
|
+
return reorderRows(prev, fromIdx, dropAt);
|
|
322
|
+
});
|
|
323
|
+
setDragId(null);
|
|
324
|
+
setDropAt(null);
|
|
325
|
+
};
|
|
326
|
+
const onRowDragEnd = () => {
|
|
327
|
+
setDragId(null);
|
|
328
|
+
setDropAt(null);
|
|
329
|
+
};
|
|
330
|
+
// ── Inner-field live re-resolve (Plan #14 v1.1) ─────────────
|
|
331
|
+
// Inner Repeater inputs are uncontrolled (so reorder/clone preserves
|
|
332
|
+
// typed values). To make `Field.live()` work on them, we delegate
|
|
333
|
+
// change/blur events at the container level: the dotted-path field
|
|
334
|
+
// name on `target.name` is enough to find the field meta and decide
|
|
335
|
+
// whether to fire. `triggerLive` then snapshots the form's full
|
|
336
|
+
// FormData and POSTs to the partial-resolve endpoint — see
|
|
337
|
+
// FormStateContext.
|
|
338
|
+
//
|
|
339
|
+
// React-controlled primitives that update via callbacks (Switch /
|
|
340
|
+
// Slider / Base UI Select / etc.) don't bubble native input events
|
|
341
|
+
// here. Each of those renderers calls `fs.triggerLive(value)`
|
|
342
|
+
// explicitly to compensate (Plan #14 v1.2). Native inputs
|
|
343
|
+
// (text/number/email/textarea/range/date/checkbox/radio) keep
|
|
344
|
+
// bubbling through this delegate as before.
|
|
345
|
+
const formState = useFormState();
|
|
346
|
+
const fireLive = (name, value, eventKind) => {
|
|
347
|
+
if (!formState)
|
|
348
|
+
return;
|
|
349
|
+
if (!name.includes('.'))
|
|
350
|
+
return; // top-level fields handle their own live trigger
|
|
351
|
+
const fieldMeta = findFieldMeta(formState.formMeta, name);
|
|
352
|
+
const liveCfg = fieldMeta?.['live'];
|
|
353
|
+
const hasJs = fieldMeta?.afterStateUpdatedJs !== undefined;
|
|
354
|
+
if (!liveCfg && !hasJs)
|
|
355
|
+
return;
|
|
356
|
+
if (liveCfg) {
|
|
357
|
+
const onBlurMode = typeof liveCfg === 'object' && liveCfg !== null
|
|
358
|
+
&& liveCfg.onBlur === true;
|
|
359
|
+
if (eventKind === 'change' && onBlurMode)
|
|
360
|
+
return;
|
|
361
|
+
if (eventKind === 'blur' && !onBlurMode)
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
// JS-only handlers always fire immediately on change.
|
|
366
|
+
if (eventKind === 'blur')
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
formState.triggerLive(name, value);
|
|
370
|
+
};
|
|
371
|
+
const onContainerChange = (e) => {
|
|
372
|
+
const t = e.target;
|
|
373
|
+
if (!t.name)
|
|
374
|
+
return;
|
|
375
|
+
fireLive(t.name, t.value, 'change');
|
|
376
|
+
};
|
|
377
|
+
const onContainerBlur = (e) => {
|
|
378
|
+
const t = e.target;
|
|
379
|
+
if (!t.name)
|
|
380
|
+
return;
|
|
381
|
+
fireLive(t.name, t.value, 'blur');
|
|
382
|
+
};
|
|
383
|
+
const toggleCollapsed = (id) => {
|
|
384
|
+
if (accordion) {
|
|
385
|
+
// Click the open row to collapse all; click any other row to swap.
|
|
386
|
+
// No "two rows open" state is reachable.
|
|
387
|
+
const next = accordionOpenId === id ? null : id;
|
|
388
|
+
setAccordionOpenId(next);
|
|
389
|
+
writeAccordionToStorage(formId, name, next);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
setCollapsed(prev => {
|
|
393
|
+
const nextValue = !prev[id];
|
|
394
|
+
writeCollapsedToStorage(formId, name, id, nextValue);
|
|
395
|
+
return { ...prev, [id]: nextValue };
|
|
396
|
+
});
|
|
397
|
+
};
|
|
398
|
+
// Visibility computed each render — hidden rows still occupy slots in
|
|
399
|
+
// `rows` (so values round-trip + reorder-around math stays simple), but
|
|
400
|
+
// they don't count for the user-facing empty state, drop indicator, or
|
|
401
|
+
// first/last-visible disable on Up/Down buttons.
|
|
402
|
+
const hasVisibleRow = rows.some(r => !r.hidden);
|
|
403
|
+
const firstVisibleIdx = rows.findIndex(r => !r.hidden);
|
|
404
|
+
const lastVisibleIdx = (() => {
|
|
405
|
+
for (let i = rows.length - 1; i >= 0; i--)
|
|
406
|
+
if (!rows[i]?.hidden)
|
|
407
|
+
return i;
|
|
408
|
+
return -1;
|
|
409
|
+
})();
|
|
410
|
+
if (tableMode && tableColumns) {
|
|
411
|
+
// Table mode renders rows as `<tr>` with the inner schema's fields
|
|
412
|
+
// as `<td>` cells. The reorder grip + extraActions + clone + delete
|
|
413
|
+
// strip lives in a final actions column (only mounted when any of
|
|
414
|
+
// those are configured). Hidden rows render with `display:none` on
|
|
415
|
+
// `<tr>` so values still round-trip on submit. Drop indicator is
|
|
416
|
+
// suppressed — a horizontal accent across `<td>` cells looks broken;
|
|
417
|
+
// button reorder + drag itself still move rows.
|
|
418
|
+
// Actions cell is always present in v1 — delete is implicit on every
|
|
419
|
+
// Repeater row, and reorder/clone/extraActions land here too. When
|
|
420
|
+
// every action happens to be disabled (e.g. atMin && no reorderable
|
|
421
|
+
// && no clone), the cell still renders for column-count consistency.
|
|
422
|
+
return (_jsx(RepeaterTableLayout, { rows: rows, name: name, formId: formId, disabled: disabled, columns: tableColumns, addLabel: addLabel, buttons: buttons, atMin: atMin, atMax: atMax, reorderable: reorderable, cloneable: cloneable, firstVisibleIdx: firstVisibleIdx, lastVisibleIdx: lastVisibleIdx, hasVisibleRow: hasVisibleRow, dragId: dragId, onAdd: addRow, onMoveUp: (id) => moveRow(id, -1), onMoveDown: (id) => moveRow(id, 1), onClone: cloneRow, onRemove: removeRow, onContainerChange: onContainerChange, onContainerBlur: onContainerBlur, onRowDragStart: onRowDragStart, onRowDragOver: onRowDragOver, onRowDrop: onRowDrop, onRowDragEnd: onRowDragEnd }));
|
|
423
|
+
}
|
|
424
|
+
// In grid mode the rows themselves are grid items — wrap them in a
|
|
425
|
+
// CSS grid; otherwise stack vertically. The empty state and Add
|
|
426
|
+
// button are rendered as siblings so they don't get pulled into the
|
|
427
|
+
// grid (Add stays at the natural bottom; empty state spans full).
|
|
428
|
+
return (_jsxs("div", { className: "flex flex-col gap-3", style: gridContainer.wrapperStyle, onChange: onContainerChange, onBlur: onContainerBlur, children: [!hasVisibleRow && (_jsxs("div", { className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground", children: ["No items yet. Click ", addLabel, " to start."] })), gridContainer.styleBlock, _jsxs("div", { className: gridContainer.className, style: gridContainer.style, children: [rows.map((row, i) => (_jsxs(React.Fragment, { children: [!row.hidden && dropAt === i && !gridContainer.hasGrid && _jsx(DropIndicator, {}), _jsx(RepeaterRow, { row: row, index: i, isFirstVisible: i === firstVisibleIdx, isLastVisible: i === lastVisibleIdx, name: name, disabled: disabled, collapsible: collapsible, isCollapsed: collapsible && (accordion
|
|
429
|
+
? accordionOpenId !== row.id
|
|
430
|
+
: (collapsed[row.id] ?? false)), reorderable: reorderable, cloneable: cloneable, simple: simple, atMin: atMin, atMax: atMax, columns: columns, buttons: buttons, isDragging: dragId === row.id, rowPath: `${name}.${i}`, onMoveUp: () => moveRow(row.id, -1), onMoveDown: () => moveRow(row.id, 1), onClone: () => cloneRow(row.id), onRemove: () => removeRow(row.id), onToggleCollapse: () => toggleCollapsed(row.id), onDragStart: onRowDragStart(row.id), onDragOver: onRowDragOver(i), onDrop: onRowDrop, onDragEnd: onRowDragEnd })] }, row.id))), dropAt === rows.length && !gridContainer.hasGrid && _jsx(DropIndicator, {})] }), _jsx(AddRowButton, { label: addLabel, buttons: buttons, disabled: disabled || atMax, onClick: addRow })] }));
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Bottom Add button — outline shadcn `<Button>`. Reads the customizer
|
|
434
|
+
* (`addAction(RowButton.make()…)`) for icon + tooltip overrides; label
|
|
435
|
+
* is already pre-resolved upstream so the legacy `addActionLabel()` setter
|
|
436
|
+
* keeps working. Color override is intentionally ignored on the Add
|
|
437
|
+
* button to preserve the outline-button visual identity (icon-color
|
|
438
|
+
* tweaks would clash with the shadcn variant); use `Action.color()` on
|
|
439
|
+
* a custom header action if you need a different chrome there.
|
|
440
|
+
*/
|
|
441
|
+
function AddRowButton({ label, buttons, disabled, onClick, }) {
|
|
442
|
+
const { Icon, tooltip } = resolveRowChrome({ Icon: PlusIcon, label, tooltip: '', colorClass: '' }, buttons?.add);
|
|
443
|
+
return (_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: onClick, disabled: disabled, title: tooltip || undefined, className: "self-start", children: [_jsx(Icon, { className: "size-4" }), label] }));
|
|
444
|
+
}
|
|
445
|
+
function RepeaterRow({ row, index, isFirstVisible, isLastVisible, name, disabled, collapsible, isCollapsed, reorderable, cloneable, simple, atMin, atMax, columns, buttons, isDragging, rowPath, onMoveUp, onMoveDown, onClone, onRemove, onToggleCollapse, onDragStart, onDragOver, onDrop, onDragEnd, }) {
|
|
446
|
+
const prefix = `${name}.${index}`;
|
|
447
|
+
const namespaced = useMemo(() => row.children.map(c => prefixFieldNames(c, prefix)), [row.children, prefix]);
|
|
448
|
+
const headerLabel = row.itemLabel ?? `Item ${index + 1}`;
|
|
449
|
+
// Hidden rows: render only the inputs (and __id) inside a display:none
|
|
450
|
+
// wrapper so their values round-trip through FormData on submit. No
|
|
451
|
+
// chrome, no drag wiring, no labels — `itemHidden` is purely UX.
|
|
452
|
+
if (row.hidden) {
|
|
453
|
+
return (_jsxs("div", { style: { display: 'none' }, "data-pilotiq-repeater-row": "hidden", children: [_jsx("input", { type: "hidden", name: `${prefix}.__id`, value: row.id, readOnly: true }), _jsx(SchemaRenderer, { elements: namespaced })] }));
|
|
454
|
+
}
|
|
455
|
+
// Per-row capability gates — `itemCan*(rule)` server-resolved.
|
|
456
|
+
// `canDelete / canClone / canReorder === false` removes the matching
|
|
457
|
+
// button on this row; absent flags fall through to the global defaults.
|
|
458
|
+
const canDelete = row.canDelete !== false;
|
|
459
|
+
const canClone = row.canClone !== false;
|
|
460
|
+
const canReorder = row.canReorder !== false;
|
|
461
|
+
// Native HTML5 DnD only fires `dragstart` from elements with `draggable=true`.
|
|
462
|
+
// We attach it at the row container so the grip handle (and the empty
|
|
463
|
+
// header gutter, for forgiving aim) both initiate a drag. The handle's
|
|
464
|
+
// visual cursor + aria-label tell users where the affordance lives.
|
|
465
|
+
// Pinned rows (`canReorder === false`) lose drag-start; other rows can
|
|
466
|
+
// still drop next to them — see itemCanReorder docstring.
|
|
467
|
+
const dragProps = reorderable && !disabled && canReorder
|
|
468
|
+
? {
|
|
469
|
+
draggable: true,
|
|
470
|
+
onDragStart,
|
|
471
|
+
onDragOver,
|
|
472
|
+
onDrop,
|
|
473
|
+
onDragEnd,
|
|
474
|
+
}
|
|
475
|
+
: {};
|
|
476
|
+
// Simple-mode: flatten the row to one input + inline action strip — no
|
|
477
|
+
// header, no border, no collapse (a single field has nothing to collapse).
|
|
478
|
+
// Reorder + delete still work; clone + extraActions are intentionally
|
|
479
|
+
// dropped since there's no "row identity" worth duplicating in the flat
|
|
480
|
+
// shape, and per-row buttons read cluttered next to a one-input row.
|
|
481
|
+
// FieldShell renders a label by default — for simple rows we want flush
|
|
482
|
+
// inputs (Filament's posture too), so we suppress the inner label by
|
|
483
|
+
// wrapping in a class that hides the FieldShell's label slot.
|
|
484
|
+
if (simple) {
|
|
485
|
+
return (_jsxs("div", { className: `flex items-center gap-2 transition-opacity ${isDragging ? 'opacity-50' : ''}`, "data-pilotiq-repeater-row": "simple", ...dragProps, children: [_jsx("input", { type: "hidden", name: `${prefix}.__id`, value: row.id, readOnly: true }), reorderable && canReorder && _jsx(ReorderGrip, { disabled: disabled, buttons: buttons }), _jsx("div", { className: "flex-1 [&_label]:sr-only", children: _jsx(SchemaRenderer, { elements: namespaced }) }), reorderable && canReorder && (_jsxs(_Fragment, { children: [_jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_UP, override: buttons?.moveUp, disabled: disabled || isFirstVisible, onClick: onMoveUp }), _jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_DOWN, override: buttons?.moveDown, disabled: disabled || isLastVisible, onClick: onMoveDown })] })), canDelete && (_jsx(RowChromeIconButton, { defaults: DEFAULT_DELETE, override: buttons?.delete, disabled: disabled || atMin, onClick: onRemove }))] }));
|
|
486
|
+
}
|
|
487
|
+
return (_jsxs("div", { className: `rounded-md border bg-card transition-opacity ${isDragging ? 'opacity-50' : ''}`, "data-pilotiq-repeater-row": "", ...dragProps, children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-3 py-2", children: [reorderable && canReorder && _jsx(ReorderGrip, { disabled: disabled, buttons: buttons }), collapsible && (_jsx(CollapseChevron, { isCollapsed: isCollapsed, disabled: disabled, buttons: buttons, onToggle: onToggleCollapse })), _jsx("span", { className: "flex-1 truncate text-sm font-medium", children: headerLabel }), _jsx("input", { type: "hidden", name: `${prefix}.__id`, value: row.id, readOnly: true }), reorderable && canReorder && (_jsxs(_Fragment, { children: [_jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_UP, override: buttons?.moveUp, disabled: disabled || isFirstVisible, onClick: onMoveUp }), _jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_DOWN, override: buttons?.moveDown, disabled: disabled || isLastVisible, onClick: onMoveDown })] })), row.extraActions && row.extraActions.length > 0 && (_jsx(ExtraActionStrip, { actions: row.extraActions, rowPath: rowPath, disabled: disabled })), cloneable && canClone && (_jsx(RowChromeIconButton, { defaults: DEFAULT_CLONE, override: buttons?.clone, disabled: disabled || atMax, onClick: onClone })), canDelete && (_jsx(RowChromeIconButton, { defaults: DEFAULT_DELETE, override: buttons?.delete, disabled: disabled || atMin, onClick: onRemove }))] }), _jsx("div", { className: "p-3", style: isCollapsed ? { display: 'none' } : undefined, children: columns > 1
|
|
488
|
+
? (_jsx("div", { className: "grid gap-3", style: { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }, children: _jsx(SchemaRenderer, { elements: namespaced }) }))
|
|
489
|
+
: _jsx(SchemaRenderer, { elements: namespaced }) })] }));
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Per-row extraItemActions strip. Each button dispatches its handler
|
|
493
|
+
* action by snapshotting the parent `<form>` (so the server's
|
|
494
|
+
* `coerceFormValues` sees the row's submitted fields), then POSTs to the
|
|
495
|
+
* action's `dispatchUrl` with `_rowPath="<fieldName>.<index>"` in the
|
|
496
|
+
* body — the server uses that path to navigate into the field's row
|
|
497
|
+
* array and stamp `ctx.row = { index, id, values, fieldName }` on the
|
|
498
|
+
* handler context.
|
|
499
|
+
*
|
|
500
|
+
* v1 — handler-style only. `href` / `method` / modal-form actions inside
|
|
501
|
+
* `extraItemActions` are accepted by the type system but render here as
|
|
502
|
+
* no-op buttons (they have neither a `dispatchUrl` nor a row-aware fetch
|
|
503
|
+
* branch). Filament parity for those modes can land in a follow-up.
|
|
504
|
+
*
|
|
505
|
+
* Disabled actions render greyed out + skip dispatch (matches the
|
|
506
|
+
* `meta.disabled` stamp from `resolveExtraItemActions`).
|
|
507
|
+
*/
|
|
508
|
+
export function ExtraActionStrip({ actions, rowPath, disabled, }) {
|
|
509
|
+
const navigate = useNavigate();
|
|
510
|
+
const { notify } = useToast();
|
|
511
|
+
const onClick = (action) => async (e) => {
|
|
512
|
+
if (disabled || action['disabled'])
|
|
513
|
+
return;
|
|
514
|
+
const dispatchUrl = action['dispatchUrl'];
|
|
515
|
+
if (!dispatchUrl)
|
|
516
|
+
return;
|
|
517
|
+
const form = e.currentTarget.closest('form');
|
|
518
|
+
const snapshot = form ? new FormData(form) : new FormData();
|
|
519
|
+
await dispatchHandlerAction(dispatchUrl, [], navigate, notify, { _rowPath: rowPath }, snapshot);
|
|
520
|
+
};
|
|
521
|
+
return (_jsx(_Fragment, { children: actions.map((a, i) => {
|
|
522
|
+
const label = String(a['label'] ?? a['name'] ?? '');
|
|
523
|
+
const tooltip = a['tooltip'] ?? label;
|
|
524
|
+
const isDisabled = disabled || Boolean(a['disabled']);
|
|
525
|
+
const destructive = Boolean(a['destructive']);
|
|
526
|
+
return (_jsx("button", { type: "button", onClick: onClick(a), disabled: isDisabled, "aria-label": label, title: tooltip, "data-action-name": a['name'], className: `text-muted-foreground hover:text-foreground disabled:opacity-30 ${destructive ? 'hover:text-destructive' : ''}`.trim(), children: _jsx("span", { className: "text-xs font-medium", children: label }) }, i));
|
|
527
|
+
}) }));
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* 2px-tall horizontal accent line rendered between rows when the user
|
|
531
|
+
* drags a row over a valid drop boundary. Uses `pointer-events: none`
|
|
532
|
+
* so the underlying row's `dragover` keeps firing — without this, the
|
|
533
|
+
* indicator would steal events and the drop slot would flicker.
|
|
534
|
+
*/
|
|
535
|
+
function DropIndicator() {
|
|
536
|
+
return (_jsx("div", { "aria-hidden": "true", className: "pointer-events-none h-0.5 rounded-full bg-primary" }));
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Table-mode layout. Renders rows as `<tr>` and inner schema fields as
|
|
540
|
+
* `<td>` cells, with the supplied column headers in `<thead>`.
|
|
541
|
+
*
|
|
542
|
+
* Cells call `prefixFieldNames` to emit row-scoped flat dotted names
|
|
543
|
+
* (`items.0.name`, etc.) — same wire shape as the card layout, so
|
|
544
|
+
* `coerceFormValues` re-groups identically. The first inner FieldShell
|
|
545
|
+
* label is suppressed via a parent `[&_label]:sr-only` since the
|
|
546
|
+
* column header carries the labelling.
|
|
547
|
+
*
|
|
548
|
+
* The actions column hosts grip / Up / Down / clone / extraActions /
|
|
549
|
+
* delete affordances. We render it unconditionally so column count
|
|
550
|
+
* stays stable across rows even when individual buttons disable.
|
|
551
|
+
*/
|
|
552
|
+
function RepeaterTableLayout({ rows, name, formId: _formId, disabled, columns, addLabel, buttons, atMin, atMax, reorderable, cloneable, firstVisibleIdx, lastVisibleIdx, hasVisibleRow, dragId, onAdd, onMoveUp, onMoveDown, onClone, onRemove, onContainerChange, onContainerBlur, onRowDragStart, onRowDragOver, onRowDrop, onRowDragEnd, }) {
|
|
553
|
+
// The container div carries the change/blur delegates so live() events
|
|
554
|
+
// bubble identically to the card path. `[&_label]:sr-only` hides the
|
|
555
|
+
// FieldShell label across every cell (column header carries it).
|
|
556
|
+
return (_jsxs("div", { className: "flex flex-col gap-3", onChange: onContainerChange, onBlur: onContainerBlur, children: [!hasVisibleRow && (_jsxs("div", { className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground", children: ["No items yet. Click ", addLabel, " to start."] })), hasVisibleRow && (_jsx("div", { className: "overflow-x-auto rounded-md border [&_label]:sr-only", children: _jsxs("table", { className: "w-full border-collapse text-sm", children: [_jsxs("colgroup", { children: [columns.map((c, i) => (_jsx("col", { style: c.width ? { width: c.width } : undefined }, i))), _jsx("col", {})] }), _jsx("thead", { className: "bg-muted/40", children: _jsxs("tr", { children: [columns.map((c, i) => (_jsxs("th", { scope: "col", className: `px-3 py-2 text-xs font-medium text-muted-foreground ${alignClass(c.alignment)}`, children: [c.label, c.required && _jsx("span", { className: "ml-0.5 text-destructive", children: "*" })] }, i))), _jsx("th", { scope: "col", className: "w-px", "aria-label": "Actions" })] }) }), _jsx("tbody", { children: rows.map((row, i) => (_jsx(RepeaterTableRow, { row: row, index: i, name: name, disabled: disabled, columns: columns, reorderable: reorderable, cloneable: cloneable, buttons: buttons, isFirstVisible: i === firstVisibleIdx, isLastVisible: i === lastVisibleIdx, atMin: atMin, atMax: atMax, isDragging: dragId === row.id, rowPath: `${name}.${i}`, onMoveUp: () => onMoveUp(row.id), onMoveDown: () => onMoveDown(row.id), onClone: () => onClone(row.id), onRemove: () => onRemove(row.id), onDragStart: onRowDragStart(row.id), onDragOver: onRowDragOver(i), onDrop: onRowDrop, onDragEnd: onRowDragEnd }, row.id))) })] }) })), _jsx(AddRowButton, { label: addLabel, buttons: buttons, disabled: disabled || atMax, onClick: onAdd })] }));
|
|
557
|
+
}
|
|
558
|
+
function alignClass(a) {
|
|
559
|
+
if (a === 'right')
|
|
560
|
+
return 'text-right';
|
|
561
|
+
if (a === 'center')
|
|
562
|
+
return 'text-center';
|
|
563
|
+
return 'text-left';
|
|
564
|
+
}
|
|
565
|
+
function RepeaterTableRow({ row, index, name, disabled, columns, reorderable, cloneable, buttons, isFirstVisible, isLastVisible, atMin, atMax, isDragging, rowPath, onMoveUp, onMoveDown, onClone, onRemove, onDragStart, onDragOver, onDrop, onDragEnd, }) {
|
|
566
|
+
const prefix = `${name}.${index}`;
|
|
567
|
+
const namespaced = useMemo(() => row.children.map(c => prefixFieldNames(c, prefix)), [row.children, prefix]);
|
|
568
|
+
if (row.hidden) {
|
|
569
|
+
// Render the hidden envelope as a single full-span cell so column
|
|
570
|
+
// count stays valid; `display:none` ensures the row is invisible but
|
|
571
|
+
// still in the form's submit. Using `<tr style="display:none">`
|
|
572
|
+
// would warn under React strict-mode in Firefox; the wrapping cell
|
|
573
|
+
// keeps the markup HTML-valid.
|
|
574
|
+
return (_jsx("tr", { style: { display: 'none' }, "data-pilotiq-repeater-row": "hidden", children: _jsxs("td", { colSpan: columns.length + 1, children: [_jsx("input", { type: "hidden", name: `${prefix}.__id`, value: row.id, readOnly: true }), _jsx(SchemaRenderer, { elements: namespaced })] }) }));
|
|
575
|
+
}
|
|
576
|
+
// Pair each column header (in order) with the corresponding inner
|
|
577
|
+
// field meta. Extra fields beyond the column count fall through the
|
|
578
|
+
// last cell as stacked items — a misconfiguration but better than
|
|
579
|
+
// dropping them silently.
|
|
580
|
+
const fieldsPerCell = columns.map((_c, i) => i === columns.length - 1 ? namespaced.slice(i) : namespaced.slice(i, i + 1));
|
|
581
|
+
// Per-row capability gates — see RepeaterRow for the contract.
|
|
582
|
+
const canDelete = row.canDelete !== false;
|
|
583
|
+
const canClone = row.canClone !== false;
|
|
584
|
+
const canReorder = row.canReorder !== false;
|
|
585
|
+
const dragProps = reorderable && !disabled && canReorder
|
|
586
|
+
? {
|
|
587
|
+
draggable: true,
|
|
588
|
+
onDragStart,
|
|
589
|
+
onDragOver,
|
|
590
|
+
onDrop,
|
|
591
|
+
onDragEnd,
|
|
592
|
+
}
|
|
593
|
+
: {};
|
|
594
|
+
return (_jsxs("tr", { className: `border-t align-top ${isDragging ? 'opacity-50' : ''}`, "data-pilotiq-repeater-row": "", ...dragProps, children: [_jsx("input", { type: "hidden", name: `${prefix}.__id`, value: row.id, readOnly: true }), columns.map((c, i) => (_jsx("td", { className: `px-3 py-2 ${alignClass(c.alignment)}`, children: _jsx(SchemaRenderer, { elements: fieldsPerCell[i] ?? [] }) }, i))), _jsx("td", { className: "whitespace-nowrap px-3 py-2 text-right", children: _jsxs("div", { className: "inline-flex items-center gap-1", children: [reorderable && canReorder && (_jsxs(_Fragment, { children: [_jsx(ReorderGrip, { disabled: disabled, buttons: buttons }), _jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_UP, override: buttons?.moveUp, disabled: disabled || isFirstVisible, onClick: onMoveUp }), _jsx(RowChromeIconButton, { defaults: DEFAULT_MOVE_DOWN, override: buttons?.moveDown, disabled: disabled || isLastVisible, onClick: onMoveDown })] })), row.extraActions && row.extraActions.length > 0 && (_jsx(ExtraActionStrip, { actions: row.extraActions, rowPath: rowPath, disabled: disabled })), cloneable && canClone && (_jsx(RowChromeIconButton, { defaults: DEFAULT_CLONE, override: buttons?.clone, disabled: disabled || atMax, onClick: onClone })), canDelete && (_jsx(RowChromeIconButton, { defaults: DEFAULT_DELETE, override: buttons?.delete, disabled: disabled || atMin, onClick: onRemove }))] }) })] }));
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Recursively prefix every Field meta's `name` with a row-scoped path.
|
|
598
|
+
* Inner Repeaters get their own per-row prefixing so nested Repeater
|
|
599
|
+
* row inputs land at `items.0.modifiers.1.name`.
|
|
600
|
+
*/
|
|
601
|
+
function prefixFieldNames(el, prefix) {
|
|
602
|
+
if (el.type === 'field' && typeof el['name'] === 'string') {
|
|
603
|
+
const innerName = el['name'];
|
|
604
|
+
const newName = `${prefix}.${innerName}`;
|
|
605
|
+
if (el['fieldType'] === 'repeater') {
|
|
606
|
+
const m = el;
|
|
607
|
+
const rows = m.rows ?? [];
|
|
608
|
+
const tpl = m.template ?? [];
|
|
609
|
+
return {
|
|
610
|
+
...el,
|
|
611
|
+
name: newName,
|
|
612
|
+
rows: rows.map(r => ({
|
|
613
|
+
...r,
|
|
614
|
+
children: r.children.map(c => prefixFieldNames(c, `${newName}.${rows.indexOf(r)}`)),
|
|
615
|
+
})),
|
|
616
|
+
template: tpl.map(c => prefixFieldNames(c, `${newName}.0`)),
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
return { ...el, name: newName };
|
|
620
|
+
}
|
|
621
|
+
if (Array.isArray(el.children)) {
|
|
622
|
+
return {
|
|
623
|
+
...el,
|
|
624
|
+
children: el.children.map(c => prefixFieldNames(c, prefix)),
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
return el;
|
|
628
|
+
}
|
|
629
|
+
let _rowSeqFallback = 0;
|
|
630
|
+
function generateRowId() {
|
|
631
|
+
const c = globalThis.crypto;
|
|
632
|
+
if (c?.randomUUID)
|
|
633
|
+
return c.randomUUID();
|
|
634
|
+
return `row-${Date.now()}-${++_rowSeqFallback}`;
|
|
635
|
+
}
|
|
636
|
+
function collapsedStorageKey(formId, name, rowId) {
|
|
637
|
+
return `pilotiq.repeater.${formId}.${name}.${rowId}`;
|
|
638
|
+
}
|
|
639
|
+
function initSeedCollapsed(rows, formId, name, defaultValue, collapsible) {
|
|
640
|
+
if (!collapsible)
|
|
641
|
+
return {};
|
|
642
|
+
const out = {};
|
|
643
|
+
for (const row of rows) {
|
|
644
|
+
out[row.id] = readCollapsedFromStorage(formId, name, row.id, defaultValue);
|
|
645
|
+
}
|
|
646
|
+
return out;
|
|
647
|
+
}
|
|
648
|
+
function readCollapsedFromStorage(formId, name, rowId, defaultValue) {
|
|
649
|
+
if (typeof window === 'undefined')
|
|
650
|
+
return defaultValue;
|
|
651
|
+
try {
|
|
652
|
+
const raw = window.localStorage.getItem(collapsedStorageKey(formId, name, rowId));
|
|
653
|
+
if (raw === null)
|
|
654
|
+
return defaultValue;
|
|
655
|
+
return raw === 'true';
|
|
656
|
+
}
|
|
657
|
+
catch {
|
|
658
|
+
return defaultValue;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
function writeCollapsedToStorage(formId, name, rowId, value) {
|
|
662
|
+
if (typeof window === 'undefined')
|
|
663
|
+
return;
|
|
664
|
+
try {
|
|
665
|
+
window.localStorage.setItem(collapsedStorageKey(formId, name, rowId), String(value));
|
|
666
|
+
}
|
|
667
|
+
catch { /* quota exceeded — fall back to in-memory only */ }
|
|
668
|
+
}
|
|
669
|
+
function deleteCollapsedFromStorage(formId, name, rowId) {
|
|
670
|
+
if (typeof window === 'undefined')
|
|
671
|
+
return;
|
|
672
|
+
try {
|
|
673
|
+
window.localStorage.removeItem(collapsedStorageKey(formId, name, rowId));
|
|
674
|
+
}
|
|
675
|
+
catch { /* ignore */ }
|
|
676
|
+
}
|
|
677
|
+
function accordionStorageKey(formId, name) {
|
|
678
|
+
return `pilotiq.repeater.${formId}.${name}.accordion`;
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* Read the persisted accordion-open row id. Returns `undefined` when no
|
|
682
|
+
* value is stored (so the caller can fall back to the default-open
|
|
683
|
+
* heuristic). Returns `''` when the user explicitly closed every row —
|
|
684
|
+
* the caller maps that to `null` openId.
|
|
685
|
+
*/
|
|
686
|
+
function readAccordionFromStorage(formId, name) {
|
|
687
|
+
if (typeof window === 'undefined')
|
|
688
|
+
return undefined;
|
|
689
|
+
try {
|
|
690
|
+
const raw = window.localStorage.getItem(accordionStorageKey(formId, name));
|
|
691
|
+
return raw === null ? undefined : raw;
|
|
692
|
+
}
|
|
693
|
+
catch {
|
|
694
|
+
return undefined;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
function writeAccordionToStorage(formId, name, openId) {
|
|
698
|
+
if (typeof window === 'undefined')
|
|
699
|
+
return;
|
|
700
|
+
try {
|
|
701
|
+
window.localStorage.setItem(accordionStorageKey(formId, name), openId ?? '');
|
|
702
|
+
}
|
|
703
|
+
catch { /* quota exceeded — fall back to in-memory only */ }
|
|
704
|
+
}
|
|
705
|
+
//# sourceMappingURL=RepeaterInput.js.map
|