@pilotiq/pilotiq 0.24.1 → 0.24.2
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/CHANGELOG.md +33 -0
- package/boost/guidelines.md +566 -0
- package/boost/skills/pilotiq-fields/SKILL.md +47 -0
- package/boost/skills/pilotiq-fields/rules/field-catalog.md +288 -0
- package/boost/skills/pilotiq-fields/rules/reactive-fields.md +199 -0
- package/boost/skills/pilotiq-fields/rules/validation.md +198 -0
- package/boost/skills/pilotiq-relations/SKILL.md +47 -0
- package/boost/skills/pilotiq-relations/rules/relation-managers.md +256 -0
- package/boost/skills/pilotiq-relations/rules/repeater-relationship.md +177 -0
- package/boost/skills/pilotiq-resource/SKILL.md +61 -0
- package/boost/skills/pilotiq-resource/rules/authorization.md +242 -0
- package/boost/skills/pilotiq-resource/rules/defining-resources.md +228 -0
- package/boost/skills/pilotiq-resource/rules/page-overrides.md +296 -0
- package/package.json +6 -1
- package/.turbo/turbo-build.log +0 -8
- package/CLAUDE.md +0 -265
- package/src/Cluster.test.ts +0 -283
- package/src/Cluster.ts +0 -83
- package/src/Column.test.ts +0 -199
- package/src/Column.ts +0 -710
- package/src/Global.test.ts +0 -367
- package/src/Global.ts +0 -169
- package/src/Page.test.ts +0 -114
- package/src/Page.ts +0 -208
- package/src/Pilotiq.perf.test.ts +0 -252
- package/src/Pilotiq.test.ts +0 -129
- package/src/Pilotiq.ts +0 -1158
- package/src/PilotiqRegistry.ts +0 -36
- package/src/PilotiqServiceProvider.ts +0 -121
- package/src/RelationManager.test.ts +0 -400
- package/src/RelationManager.ts +0 -527
- package/src/RenderHook.test.ts +0 -252
- package/src/RenderHook.ts +0 -242
- package/src/Resource.test.ts +0 -284
- package/src/Resource.ts +0 -526
- package/src/RightPanel.test.ts +0 -202
- package/src/RightPanel.ts +0 -132
- package/src/Tab.test.ts +0 -91
- package/src/Tab.ts +0 -156
- package/src/UserMenuItem.ts +0 -145
- package/src/actions/Action.test.ts +0 -2526
- package/src/actions/Action.ts +0 -1515
- package/src/actions/ActionGroup.test.ts +0 -112
- package/src/actions/ActionGroup.ts +0 -173
- package/src/actions/attachFactory.ts +0 -172
- package/src/actions/bulkFactories.ts +0 -168
- package/src/actions/crudFactories.ts +0 -220
- package/src/actions/exportFactory.ts +0 -225
- package/src/actions/factoryHelpers.ts +0 -177
- package/src/actions/importFactory.ts +0 -243
- package/src/actions/index.ts +0 -17
- package/src/actions/m2mFactories.ts +0 -193
- package/src/actions/relationFactories.ts +0 -372
- package/src/applyPageHooks.test.ts +0 -463
- package/src/applyPageHooks.ts +0 -330
- package/src/authorization.test.ts +0 -483
- package/src/breadcrumbs.test.ts +0 -238
- package/src/cells/coerce.test.ts +0 -85
- package/src/cells/coerce.ts +0 -84
- package/src/clusterPaths.ts +0 -35
- package/src/columns/BadgeColumn.test.ts +0 -54
- package/src/columns/BadgeColumn.ts +0 -32
- package/src/columns/BooleanColumn.test.ts +0 -41
- package/src/columns/BooleanColumn.ts +0 -18
- package/src/columns/ColorColumn.test.ts +0 -37
- package/src/columns/ColorColumn.ts +0 -38
- package/src/columns/IconColumn.test.ts +0 -54
- package/src/columns/IconColumn.ts +0 -37
- package/src/columns/ImageColumn.test.ts +0 -41
- package/src/columns/ImageColumn.ts +0 -28
- package/src/columns/SelectColumn.ts +0 -98
- package/src/columns/TextColumn.test.ts +0 -190
- package/src/columns/TextColumn.ts +0 -20
- package/src/columns/TextInputColumn.ts +0 -68
- package/src/columns/ToggleColumn.ts +0 -46
- package/src/columns/editableColumns.test.ts +0 -238
- package/src/columns/index.ts +0 -9
- package/src/defaultGlobalPages.ts +0 -95
- package/src/defaultPages.test.ts +0 -634
- package/src/defaultPages.ts +0 -617
- package/src/defaultViewPage.test.ts +0 -147
- package/src/elements/Form.test.ts +0 -223
- package/src/elements/Form.ts +0 -416
- package/src/elements/ListTabs.ts +0 -28
- package/src/elements/Table.test.ts +0 -422
- package/src/elements/Table.ts +0 -850
- package/src/elements/TableGroup.test.ts +0 -260
- package/src/elements/TableGroup.ts +0 -334
- package/src/elements/dispatchAction.test.ts +0 -463
- package/src/elements/dispatchAction.ts +0 -355
- package/src/elements/dispatchForm.test.ts +0 -477
- package/src/elements/dispatchForm.ts +0 -1993
- package/src/elements/dispatchTable.test.ts +0 -1514
- package/src/elements/dispatchTable.ts +0 -745
- package/src/elements/index.ts +0 -21
- package/src/entries/BadgeEntry.ts +0 -39
- package/src/entries/CodeEntry.test.ts +0 -40
- package/src/entries/CodeEntry.ts +0 -52
- package/src/entries/ColorEntry.ts +0 -63
- package/src/entries/ComponentEntry.test.ts +0 -173
- package/src/entries/ComponentEntry.ts +0 -95
- package/src/entries/Entry.ts +0 -304
- package/src/entries/IconEntry.ts +0 -49
- package/src/entries/ImageEntry.ts +0 -61
- package/src/entries/KeyValueEntry.ts +0 -47
- package/src/entries/RepeatableEntry.test.ts +0 -239
- package/src/entries/RepeatableEntry.ts +0 -173
- package/src/entries/TextEntry.test.ts +0 -394
- package/src/entries/TextEntry.ts +0 -60
- package/src/entries/index.ts +0 -12
- package/src/entries/leaves.test.ts +0 -306
- package/src/entries/registry.ts +0 -54
- package/src/fields/BuilderField.test.ts +0 -1188
- package/src/fields/BuilderField.ts +0 -605
- package/src/fields/BuilderRelationship.test.ts +0 -811
- package/src/fields/CheckboxField.test.ts +0 -44
- package/src/fields/CheckboxField.ts +0 -27
- package/src/fields/CheckboxListField.test.ts +0 -99
- package/src/fields/CheckboxListField.ts +0 -66
- package/src/fields/ColorPickerField.test.ts +0 -33
- package/src/fields/ColorPickerField.ts +0 -25
- package/src/fields/DateField.ts +0 -54
- package/src/fields/DateTimeField.test.ts +0 -55
- package/src/fields/EmailField.ts +0 -16
- package/src/fields/Field.test.ts +0 -654
- package/src/fields/Field.ts +0 -817
- package/src/fields/FileUploadField.test.ts +0 -143
- package/src/fields/FileUploadField.ts +0 -159
- package/src/fields/HiddenField.test.ts +0 -27
- package/src/fields/HiddenField.ts +0 -28
- package/src/fields/KeyValueField.test.ts +0 -105
- package/src/fields/KeyValueField.ts +0 -55
- package/src/fields/MarkdownField.test.ts +0 -167
- package/src/fields/MarkdownField.ts +0 -162
- package/src/fields/NumberField.ts +0 -33
- package/src/fields/RadioField.test.ts +0 -94
- package/src/fields/RadioField.ts +0 -67
- package/src/fields/RepeaterField.test.ts +0 -1806
- package/src/fields/RepeaterField.ts +0 -939
- package/src/fields/RepeaterRelationship.test.ts +0 -1923
- package/src/fields/RepeaterSimple.test.ts +0 -248
- package/src/fields/RowButton.test.ts +0 -219
- package/src/fields/RowButton.ts +0 -135
- package/src/fields/SelectField.test.ts +0 -192
- package/src/fields/SelectField.ts +0 -235
- package/src/fields/SliderField.test.ts +0 -50
- package/src/fields/SliderField.ts +0 -53
- package/src/fields/SlugField.ts +0 -24
- package/src/fields/TagsInputField.test.ts +0 -154
- package/src/fields/TagsInputField.ts +0 -133
- package/src/fields/TextField.test.ts +0 -213
- package/src/fields/TextField.ts +0 -177
- package/src/fields/TextareaField.test.ts +0 -58
- package/src/fields/TextareaField.ts +0 -59
- package/src/fields/ToggleButtonsField.test.ts +0 -106
- package/src/fields/ToggleButtonsField.ts +0 -59
- package/src/fields/ToggleField.ts +0 -16
- package/src/fields/disableOptionsWhenSelectedInSiblingRepeaterItems.test.ts +0 -319
- package/src/fields/optionsResolver.ts +0 -95
- package/src/fields/resolveField.ts +0 -28
- package/src/filters/BooleanFilter.ts +0 -35
- package/src/filters/DateRangeFilter.test.ts +0 -194
- package/src/filters/DateRangeFilter.ts +0 -148
- package/src/filters/Filter.test.ts +0 -268
- package/src/filters/Filter.ts +0 -184
- package/src/filters/FormFilter.test.ts +0 -238
- package/src/filters/FormFilter.ts +0 -215
- package/src/filters/MultiSelectFilter.test.ts +0 -119
- package/src/filters/MultiSelectFilter.ts +0 -78
- package/src/filters/QueryBuilderFilter.test.ts +0 -662
- package/src/filters/QueryBuilderFilter.ts +0 -398
- package/src/filters/SelectFilter.ts +0 -46
- package/src/filters/TernaryFilter.test.ts +0 -160
- package/src/filters/TernaryFilter.ts +0 -72
- package/src/filters/TrashedFilter.test.ts +0 -149
- package/src/filters/TrashedFilter.ts +0 -55
- package/src/filters/queryBuilder/BooleanConstraint.ts +0 -31
- package/src/filters/queryBuilder/Constraint.ts +0 -115
- package/src/filters/queryBuilder/DateConstraint.ts +0 -69
- package/src/filters/queryBuilder/NumberConstraint.ts +0 -66
- package/src/filters/queryBuilder/SelectConstraint.ts +0 -72
- package/src/filters/queryBuilder/TextConstraint.ts +0 -64
- package/src/filters/queryBuilder/index.ts +0 -12
- package/src/icons/index.ts +0 -2
- package/src/icons/lucide.ts +0 -204
- package/src/icons/registry.test.ts +0 -56
- package/src/icons/registry.ts +0 -41
- package/src/icons/types.ts +0 -47
- package/src/index.ts +0 -525
- package/src/io/csv.test.ts +0 -142
- package/src/io/csv.ts +0 -170
- package/src/nestedRelationManagerData.test.ts +0 -547
- package/src/notifications/Notification.test.ts +0 -210
- package/src/notifications/Notification.ts +0 -354
- package/src/notifications/broadcast.test.ts +0 -110
- package/src/notifications/broadcast.ts +0 -95
- package/src/notifications/database.test.ts +0 -383
- package/src/notifications/database.ts +0 -398
- package/src/notifications/databaseNotifications.test.ts +0 -187
- package/src/notifications/dispatchNotificationAction.test.ts +0 -341
- package/src/notifications/dispatchNotificationAction.ts +0 -142
- package/src/notifications/flash.test.ts +0 -89
- package/src/notifications/flash.ts +0 -71
- package/src/notifications/index.ts +0 -45
- package/src/notifications/registerBroadcastAuth.test.ts +0 -134
- package/src/notifications/registerBroadcastAuth.ts +0 -100
- package/src/notifications/resolveSavedNotification.test.ts +0 -82
- package/src/notifications/resolveSavedNotification.ts +0 -59
- package/src/notifications/types.ts +0 -93
- package/src/orm/m2mAccessor.ts +0 -66
- package/src/orm/modelDefaults.test.ts +0 -633
- package/src/orm/modelDefaults.ts +0 -666
- package/src/pageData/breadcrumbs.ts +0 -288
- package/src/pageData/forms.ts +0 -578
- package/src/pageData/helpers.ts +0 -857
- package/src/pageData/misc.ts +0 -347
- package/src/pageData/navigation.ts +0 -842
- package/src/pageData/relationPages.ts +0 -1248
- package/src/pageData/relationTabs.ts +0 -286
- package/src/pageData/resourcePages.ts +0 -609
- package/src/pageData.test.ts +0 -1545
- package/src/pageData.ts +0 -341
- package/src/plugins/index.ts +0 -8
- package/src/plugins/themeEditor.test.ts +0 -36
- package/src/plugins/themeEditor.ts +0 -45
- package/src/react/AppShell.tsx +0 -251
- package/src/react/CollabExtensionFactoryRegistry.ts +0 -55
- package/src/react/CollabRoomContext.ts +0 -98
- package/src/react/CollabTextRendererRegistry.ts +0 -102
- package/src/react/CommandPalette.tsx +0 -375
- package/src/react/CurrentUserContext.tsx +0 -50
- package/src/react/CustomPageWrapperGate.tsx +0 -69
- package/src/react/CustomPageWrapperRegistry.ts +0 -45
- package/src/react/FieldFocusReporterRegistry.ts +0 -37
- package/src/react/FieldLabelSlotRegistry.ts +0 -30
- package/src/react/FieldPresenceRegistry.ts +0 -46
- package/src/react/FormCollabBindingRegistry.ts +0 -242
- package/src/react/FormStateContext.tsx +0 -591
- package/src/react/HeadHooks.tsx +0 -126
- package/src/react/MarkdownEditorRegistry.test.ts +0 -38
- package/src/react/MarkdownEditorRegistry.ts +0 -107
- package/src/react/NotificationActionStrip.tsx +0 -263
- package/src/react/NotificationBell.tsx +0 -426
- package/src/react/PendingSuggestionApplierRegistry.test.ts +0 -97
- package/src/react/PendingSuggestionApplierRegistry.ts +0 -98
- package/src/react/PendingSuggestionOverlayRegistry.ts +0 -54
- package/src/react/PendingSuggestionsContext.tsx +0 -172
- package/src/react/RecordWrapperGate.tsx +0 -58
- package/src/react/RecordWrapperRegistry.ts +0 -39
- package/src/react/RenderHookSlot.tsx +0 -32
- package/src/react/RightSidebar.tsx +0 -257
- package/src/react/RightSidebarContext.tsx +0 -234
- package/src/react/RightSidebarTrigger.tsx +0 -53
- package/src/react/RowCoordsContext.tsx +0 -23
- package/src/react/SchemaRenderer.tsx +0 -549
- package/src/react/SearchTrigger.tsx +0 -46
- package/src/react/ThemeProvider.tsx +0 -93
- package/src/react/ThemeSettingsPage.tsx +0 -579
- package/src/react/ThemeToggle.tsx +0 -20
- package/src/react/Toaster.tsx +0 -158
- package/src/react/UserMenu.tsx +0 -196
- package/src/react/WidgetDataContext.tsx +0 -157
- package/src/react/cells/EditableCell.tsx +0 -389
- package/src/react/component-slots.test.ts +0 -103
- package/src/react/component-slots.ts +0 -116
- package/src/react/fieldJsHandler.test.ts +0 -166
- package/src/react/fieldJsHandler.ts +0 -79
- package/src/react/fields/BuilderInput.tsx +0 -1078
- package/src/react/fields/CheckboxInput.tsx +0 -39
- package/src/react/fields/CheckboxListInput.tsx +0 -102
- package/src/react/fields/ColorInput.tsx +0 -71
- package/src/react/fields/DateFieldInput.tsx +0 -70
- package/src/react/fields/DateTimeInput.tsx +0 -62
- package/src/react/fields/FieldShell.tsx +0 -348
- package/src/react/fields/FileUploadInput.tsx +0 -639
- package/src/react/fields/HiddenInput.tsx +0 -17
- package/src/react/fields/KeyValueInput.tsx +0 -230
- package/src/react/fields/MarkdownInput.tsx +0 -560
- package/src/react/fields/RadioInput.tsx +0 -81
- package/src/react/fields/RepeaterInput.test.ts +0 -116
- package/src/react/fields/RepeaterInput.tsx +0 -1420
- package/src/react/fields/SelectFieldInput.tsx +0 -280
- package/src/react/fields/SliderInput.tsx +0 -81
- package/src/react/fields/TagsInput.tsx +0 -283
- package/src/react/fields/TextLikeInput.tsx +0 -256
- package/src/react/fields/ToggleButtonsInput.tsx +0 -60
- package/src/react/fields/ToggleFieldInput.tsx +0 -56
- package/src/react/fields/relationshipRenameDispatch.test.ts +0 -106
- package/src/react/fields/relationshipRenameDispatch.ts +0 -97
- package/src/react/fields/repeaterReconcile.test.ts +0 -114
- package/src/react/fields/repeaterReconcile.ts +0 -104
- package/src/react/fields/rowChromeButton.tsx +0 -336
- package/src/react/fields/rowState.ts +0 -106
- package/src/react/fields/syncRowGates.test.ts +0 -202
- package/src/react/fields/syncRowGates.ts +0 -66
- package/src/react/fields/textInputControls.tsx +0 -238
- package/src/react/fields/useRowReorderDnd.ts +0 -78
- package/src/react/formStateHelpers.test.ts +0 -508
- package/src/react/formStateHelpers.ts +0 -381
- package/src/react/hooks/use-mobile.ts +0 -19
- package/src/react/icon-context.tsx +0 -60
- package/src/react/index.ts +0 -194
- package/src/react/layouts/SidebarLayout.tsx +0 -250
- package/src/react/layouts/TopbarLayout.tsx +0 -258
- package/src/react/navigate.tsx +0 -37
- package/src/react/onProviderSynced.test.ts +0 -90
- package/src/react/parseRecordEditUrl.test.ts +0 -122
- package/src/react/parseRecordEditUrl.ts +0 -94
- package/src/react/persistedState.ts +0 -40
- package/src/react/registry.ts +0 -48
- package/src/react/right-panel-registry.tsx +0 -47
- package/src/react/schemaRenderer/AlertRenderer.tsx +0 -112
- package/src/react/schemaRenderer/EntryRenderer.tsx +0 -501
- package/src/react/schemaRenderer/SectionRenderer.tsx +0 -120
- package/src/react/schemaRenderer/SimpleElements.tsx +0 -306
- package/src/react/schemaRenderer/TabsRenderer.tsx +0 -62
- package/src/react/schemaRenderer/WizardRenderer.tsx +0 -338
- package/src/react/schemaRenderer/action/ActionGroupTrigger.tsx +0 -177
- package/src/react/schemaRenderer/action/ActionModalDialog.tsx +0 -273
- package/src/react/schemaRenderer/action/ConfirmActionDialog.tsx +0 -61
- package/src/react/schemaRenderer/action/HandlerActionButton.tsx +0 -43
- package/src/react/schemaRenderer/action/MethodActionButton.tsx +0 -64
- package/src/react/schemaRenderer/action/buttons.tsx +0 -99
- package/src/react/schemaRenderer/action/helpers.ts +0 -140
- package/src/react/schemaRenderer/action/renderAction.tsx +0 -245
- package/src/react/schemaRenderer/columnFormat.ts +0 -65
- package/src/react/schemaRenderer/constants.ts +0 -50
- package/src/react/schemaRenderer/form/FormRenderer.tsx +0 -274
- package/src/react/schemaRenderer/form/renderField.tsx +0 -511
- package/src/react/schemaRenderer/helpers.tsx +0 -81
- package/src/react/schemaRenderer/table/CardsLayoutBody.tsx +0 -308
- package/src/react/schemaRenderer/table/TableRenderer.tsx +0 -123
- package/src/react/schemaRenderer/table/TableRendererBody.tsx +0 -974
- package/src/react/schemaRenderer/table/filters.tsx +0 -1233
- package/src/react/schemaRenderer/table/formatCell.tsx +0 -264
- package/src/react/schemaRenderer/table/links.tsx +0 -112
- package/src/react/schemaRenderer/table/renderRowActions.tsx +0 -52
- package/src/react/schemaRenderer/table/url.tsx +0 -143
- package/src/react/theme-preview/apply.ts +0 -99
- package/src/react/theme-preview/build-html.ts +0 -436
- package/src/react/ui/button.tsx +0 -51
- package/src/react/ui/calendar.tsx +0 -67
- package/src/react/ui/checkbox.tsx +0 -29
- package/src/react/ui/dialog.tsx +0 -108
- package/src/react/ui/dropdown-menu.tsx +0 -97
- package/src/react/ui/input.tsx +0 -20
- package/src/react/ui/label.tsx +0 -21
- package/src/react/ui/popover.tsx +0 -50
- package/src/react/ui/select.tsx +0 -169
- package/src/react/ui/separator.tsx +0 -25
- package/src/react/ui/sheet.tsx +0 -136
- package/src/react/ui/sidebar.tsx +0 -723
- package/src/react/ui/skeleton.tsx +0 -13
- package/src/react/ui/slider.tsx +0 -34
- package/src/react/ui/switch.tsx +0 -28
- package/src/react/ui/table.tsx +0 -105
- package/src/react/ui/tabs.tsx +0 -63
- package/src/react/ui/textarea.tsx +0 -18
- package/src/react/ui/tooltip.tsx +0 -64
- package/src/react/useResizableWidth.ts +0 -139
- package/src/react/utils.ts +0 -6
- package/src/react/widgetRegistry.test.ts +0 -43
- package/src/react/widgetRegistry.ts +0 -50
- package/src/react/widgets/StatsOverviewRenderer.tsx +0 -232
- package/src/react/widgets/TableWidgetRenderer.tsx +0 -231
- package/src/react/widgets/ViewRenderer.tsx +0 -71
- package/src/relationManagerData.test.ts +0 -1595
- package/src/richtext/index.ts +0 -8
- package/src/richtext/registry.ts +0 -89
- package/src/routes/globals.ts +0 -148
- package/src/routes/guard.test.ts +0 -325
- package/src/routes/helpers.ts +0 -704
- package/src/routes/pages.ts +0 -175
- package/src/routes/panel.ts +0 -204
- package/src/routes/relations.ts +0 -1243
- package/src/routes/resources.ts +0 -781
- package/src/routes/theme.ts +0 -91
- package/src/routes-nested-relations.test.ts +0 -676
- package/src/routes-relations.test.ts +0 -972
- package/src/routes.test.ts +0 -2027
- package/src/routes.ts +0 -303
- package/src/schema/Alert.test.ts +0 -109
- package/src/schema/Alert.ts +0 -131
- package/src/schema/Block.ts +0 -169
- package/src/schema/Breadcrumbs.ts +0 -40
- package/src/schema/Card.ts +0 -35
- package/src/schema/Divider.ts +0 -20
- package/src/schema/Element.ts +0 -219
- package/src/schema/EmptyState.test.ts +0 -37
- package/src/schema/EmptyState.ts +0 -63
- package/src/schema/Fieldset.ts +0 -43
- package/src/schema/Grid.ts +0 -43
- package/src/schema/Group.ts +0 -30
- package/src/schema/Heading.ts +0 -39
- package/src/schema/Html.ts +0 -67
- package/src/schema/Icon.ts +0 -54
- package/src/schema/Image.ts +0 -57
- package/src/schema/LinkTag.ts +0 -41
- package/src/schema/Markdown.ts +0 -85
- package/src/schema/MetaTag.ts +0 -41
- package/src/schema/RelationTabs.ts +0 -71
- package/src/schema/ScriptTag.ts +0 -55
- package/src/schema/Section.ts +0 -160
- package/src/schema/ServerDataElement.test.ts +0 -140
- package/src/schema/ServerDataElement.ts +0 -156
- package/src/schema/SlotComponent.test.ts +0 -77
- package/src/schema/SlotComponent.ts +0 -71
- package/src/schema/Split.ts +0 -50
- package/src/schema/Stat.test.ts +0 -118
- package/src/schema/Stat.ts +0 -154
- package/src/schema/StatsOverview.test.ts +0 -141
- package/src/schema/StatsOverview.ts +0 -119
- package/src/schema/StyleTag.ts +0 -35
- package/src/schema/TableWidget.test.ts +0 -297
- package/src/schema/TableWidget.ts +0 -289
- package/src/schema/Tabs.ts +0 -79
- package/src/schema/Text.ts +0 -58
- package/src/schema/UnorderedList.ts +0 -49
- package/src/schema/View.test.ts +0 -111
- package/src/schema/View.ts +0 -127
- package/src/schema/Wizard.ts +0 -220
- package/src/schema/containers.test.ts +0 -564
- package/src/schema/headTags.test.ts +0 -134
- package/src/schema/index.ts +0 -40
- package/src/schema/primes.test.ts +0 -269
- package/src/schema/resolveSchema.test.ts +0 -379
- package/src/schema/resolveSchema.ts +0 -917
- package/src/schema/sanitize.ts +0 -58
- package/src/search.test.ts +0 -446
- package/src/search.ts +0 -178
- package/src/sessionFilters.test.ts +0 -375
- package/src/sessionFilters.ts +0 -143
- package/src/slot-components/index.ts +0 -10
- package/src/slot-components/registry.ts +0 -56
- package/src/styles/file-upload.css +0 -13
- package/src/summarizers/Summarizer.test.ts +0 -84
- package/src/summarizers/Summarizer.ts +0 -123
- package/src/summarizers/index.ts +0 -11
- package/src/theme/base-colors.ts +0 -68
- package/src/theme/chart-colors.ts +0 -50
- package/src/theme/colors.ts +0 -447
- package/src/theme/generate-css.test.ts +0 -139
- package/src/theme/generate-css.ts +0 -44
- package/src/theme/generate-scale.test.ts +0 -106
- package/src/theme/generate-scale.ts +0 -97
- package/src/theme/icon-map.ts +0 -42
- package/src/theme/index.ts +0 -34
- package/src/theme/migrate.test.ts +0 -178
- package/src/theme/migrate.ts +0 -81
- package/src/theme/presets.ts +0 -135
- package/src/theme/radius.ts +0 -18
- package/src/theme/resolve.test.ts +0 -238
- package/src/theme/resolve.ts +0 -96
- package/src/theme/spacing.ts +0 -18
- package/src/theme/storage.test.ts +0 -126
- package/src/theme/storage.ts +0 -106
- package/src/theme/theme-colors.ts +0 -88
- package/src/theme/types.ts +0 -125
- package/src/uploads/UploadAdapter.ts +0 -35
- package/src/uploads/index.ts +0 -2
- package/src/uploads/localUpload.test.ts +0 -70
- package/src/uploads/localUpload.ts +0 -84
- package/src/validation/Validator.ts +0 -49
- package/src/validation/index.ts +0 -28
- package/src/validation/rules.ts +0 -78
- package/src/validation/runValidators.ts +0 -435
- package/src/validation/uniqueValidator.test.ts +0 -196
- package/src/validation/uniqueValidator.ts +0 -133
- package/src/validation/validators.test.ts +0 -268
- package/src/vite.test.ts +0 -184
- package/src/vite.ts +0 -787
- package/src/widgets/index.ts +0 -10
- package/src/widgets/registry.ts +0 -45
- package/src/widgets.test.ts +0 -592
- package/tsconfig.build.json +0 -11
- package/tsconfig.json +0 -4
- package/tsconfig.test.json +0 -10
- package/views/react/Dashboard.tsx +0 -27
- package/views/react/Resources/Form.tsx +0 -102
- package/views/react/Resources/Index.tsx +0 -49
package/src/elements/Form.ts
DELETED
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
import { Element, type ElementMeta } from '../schema/Element.js'
|
|
2
|
-
import type { Validator, ValidationErrors } from '../validation/index.js'
|
|
3
|
-
import type { Notification, NotificationMeta } from '../notifications/index.js'
|
|
4
|
-
|
|
5
|
-
export type FormMethod = 'get' | 'post' | 'put' | 'patch' | 'delete'
|
|
6
|
-
|
|
7
|
-
export interface FormContext<R = unknown> {
|
|
8
|
-
values: Record<string, unknown>
|
|
9
|
-
record?: R
|
|
10
|
-
request?: unknown
|
|
11
|
-
/**
|
|
12
|
-
* The panel's mount path (e.g. `/admin`, `/new-admin`). Populated by
|
|
13
|
-
* the framework's POST handlers so user-supplied callbacks
|
|
14
|
-
* (`redirectAfterSave` / page `getRedirectUrl`) can build absolute
|
|
15
|
-
* URLs without hardcoding the base.
|
|
16
|
-
*/
|
|
17
|
-
basePath?: string
|
|
18
|
-
[key: string]: unknown
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type SaveHandler<R = unknown> = (
|
|
22
|
-
data: Record<string, unknown>,
|
|
23
|
-
ctx: FormContext<R>,
|
|
24
|
-
) => Promise<R> | R
|
|
25
|
-
|
|
26
|
-
export type MutateDataHandler = (
|
|
27
|
-
data: Record<string, unknown>,
|
|
28
|
-
ctx: FormContext,
|
|
29
|
-
) => Record<string, unknown> | Promise<Record<string, unknown>>
|
|
30
|
-
|
|
31
|
-
export type LifecycleHandler<R = unknown> = (
|
|
32
|
-
data: Record<string, unknown>,
|
|
33
|
-
ctx: FormContext<R>,
|
|
34
|
-
) => void | Promise<void>
|
|
35
|
-
|
|
36
|
-
export type AfterSaveHandler<R = unknown> = (
|
|
37
|
-
record: R,
|
|
38
|
-
ctx: FormContext<R>,
|
|
39
|
-
) => void | Promise<void>
|
|
40
|
-
|
|
41
|
-
export type RedirectHandler<R = unknown> = (
|
|
42
|
-
record: R,
|
|
43
|
-
ctx: FormContext<R>,
|
|
44
|
-
) => string
|
|
45
|
-
|
|
46
|
-
export type LoadRecordHandler<R = unknown> = (
|
|
47
|
-
id: string,
|
|
48
|
-
ctx: FormContext<R>,
|
|
49
|
-
) => Promise<R | null> | R | null
|
|
50
|
-
|
|
51
|
-
export type FillFromRecordHandler<R = unknown> = (
|
|
52
|
-
record: R,
|
|
53
|
-
) => Record<string, unknown>
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Transform values during the edit-mode load path. `mutateFormDataBeforeFill`
|
|
57
|
-
* runs before `fillFromRecord` (input is whatever was passed into the form);
|
|
58
|
-
* `mutateFormDataAfterFill` runs after, on the values produced by
|
|
59
|
-
* `fillFromRecord`. Both receive the loaded record on `ctx.record`.
|
|
60
|
-
*/
|
|
61
|
-
export type FillMutator<R = unknown> = (
|
|
62
|
-
values: Record<string, unknown>,
|
|
63
|
-
ctx: FormContext<R>,
|
|
64
|
-
) => Record<string, unknown> | Promise<Record<string, unknown>>
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Resolve a saved-notification spec into a `Notification`/meta. `null`
|
|
68
|
-
* means "skip" (notifications disabled for this mode). Strings shorthand
|
|
69
|
-
* to a success notification with that title.
|
|
70
|
-
*/
|
|
71
|
-
export type SavedNotificationHandler<R = unknown> =
|
|
72
|
-
| string
|
|
73
|
-
| Notification
|
|
74
|
-
| NotificationMeta
|
|
75
|
-
| null
|
|
76
|
-
| ((record: R, ctx: FormContext<R>) => string | Notification | NotificationMeta | null)
|
|
77
|
-
|
|
78
|
-
export interface FormMeta extends ElementMeta {
|
|
79
|
-
type: 'form'
|
|
80
|
-
formId: string
|
|
81
|
-
/** Plan #8 — wizard step-validate endpoint, when the form has a Wizard descendant. */
|
|
82
|
-
wizardUrl?: string
|
|
83
|
-
method: FormMethod
|
|
84
|
-
action?: string
|
|
85
|
-
values?: Record<string, unknown>
|
|
86
|
-
errors?: ValidationErrors
|
|
87
|
-
/**
|
|
88
|
-
* Plan #5 partial-resolve endpoint URL. Emitted only when at least
|
|
89
|
-
* one descendant field has `live()` set; the client uses its presence
|
|
90
|
-
* to decide whether to switch into controlled-state mode and POST on
|
|
91
|
-
* `live` field changes.
|
|
92
|
-
*/
|
|
93
|
-
stateUrl?: string
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
let _formIdSeq = 0
|
|
97
|
-
function nextFormId(): string {
|
|
98
|
-
_formIdSeq += 1
|
|
99
|
-
return `form-${_formIdSeq}`
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Form container. Holds children (Fields, Sections, Tabs, Actions, …) plus
|
|
104
|
-
* a server-side lifecycle: validate → mutateData → beforeSave → save →
|
|
105
|
-
* afterSave → redirectAfterSave. Handlers stay on the server; `toMeta()`
|
|
106
|
-
* emits only what the client needs to render the form (id, method, action
|
|
107
|
-
* URL, current values, validation errors).
|
|
108
|
-
*
|
|
109
|
-
* Phase 2.1 ships the shape and serialization. Lifecycle dispatch on POST
|
|
110
|
-
* is wired in 2.4.
|
|
111
|
-
*/
|
|
112
|
-
export class Form<R = unknown> extends Element {
|
|
113
|
-
private _formId = nextFormId()
|
|
114
|
-
private _method: FormMethod = 'post'
|
|
115
|
-
private _action?: string
|
|
116
|
-
|
|
117
|
-
private _formValidators: Validator[] = []
|
|
118
|
-
private _mutateData?: MutateDataHandler
|
|
119
|
-
private _mutateDataBeforeCreate?: MutateDataHandler
|
|
120
|
-
private _mutateDataBeforeUpdate?: MutateDataHandler
|
|
121
|
-
private _beforeSave?: LifecycleHandler<R>
|
|
122
|
-
private _beforeCreate?: LifecycleHandler<R>
|
|
123
|
-
private _beforeUpdate?: LifecycleHandler<R>
|
|
124
|
-
private _save?: SaveHandler<R>
|
|
125
|
-
private _handleCreate?: SaveHandler<R>
|
|
126
|
-
private _handleUpdate?: SaveHandler<R>
|
|
127
|
-
private _afterSave?: AfterSaveHandler<R>
|
|
128
|
-
private _afterCreate?: AfterSaveHandler<R>
|
|
129
|
-
private _afterUpdate?: AfterSaveHandler<R>
|
|
130
|
-
private _redirectAfterSave?: RedirectHandler<R>
|
|
131
|
-
private _fillFromRecord?: FillFromRecordHandler<R>
|
|
132
|
-
private _mutateFormDataBeforeFill?: FillMutator<R>
|
|
133
|
-
private _mutateFormDataAfterFill?: FillMutator<R>
|
|
134
|
-
private _loadRecord?: LoadRecordHandler<R>
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Saved-notification spec for the generic both-modes path. Mode-specific
|
|
138
|
-
* specs (`_createdNotification`) take precedence in their respective mode.
|
|
139
|
-
* `null` means "explicitly disabled" (different from undefined which means
|
|
140
|
-
* "use the framework default"). `false` (via `disableSavedNotification`)
|
|
141
|
-
* disables for both modes regardless of mode-specific spec.
|
|
142
|
-
*/
|
|
143
|
-
private _savedNotification?: SavedNotificationHandler<R> | null
|
|
144
|
-
private _createdNotification?: SavedNotificationHandler<R> | null
|
|
145
|
-
private _savedNotificationDisabled = false
|
|
146
|
-
|
|
147
|
-
private _values?: Record<string, unknown>
|
|
148
|
-
private _errors?: ValidationErrors
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Cascading `inlineLabel` default for every descendant `Field`. Read
|
|
152
|
-
* by the resolver in `deriveChildContext` and pushed down via
|
|
153
|
-
* `RenderContext.inlineLabelDefault`. Per-field `Field.inlineLabel(...)`
|
|
154
|
-
* overrides; nested `Section.inlineLabel(...)` overrides for its
|
|
155
|
-
* subtree.
|
|
156
|
-
*/
|
|
157
|
-
private _inlineLabel?: boolean
|
|
158
|
-
|
|
159
|
-
// Plan #5 — partial-resolve endpoint. Stamped by the route handler at
|
|
160
|
-
// render time when any descendant field is `live()`; emits as
|
|
161
|
-
// (Plan #8) `wizardUrl` for step validation endpoint. Stamped only when
|
|
162
|
-
// the Form has a Wizard descendant.
|
|
163
|
-
private _wizardUrl?: string
|
|
164
|
-
|
|
165
|
-
// `stateUrl` on FormMeta. Undefined when no live fields → client
|
|
166
|
-
// skips the controlled-state path entirely.
|
|
167
|
-
private _stateUrl?: string
|
|
168
|
-
|
|
169
|
-
private constructor() { super() }
|
|
170
|
-
|
|
171
|
-
static make<R = unknown>(): Form<R> {
|
|
172
|
-
return new Form<R>()
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// ─── Children ─────────────────────────────────────────
|
|
176
|
-
|
|
177
|
-
schema(elements: Element[]): this {
|
|
178
|
-
this._children = elements
|
|
179
|
-
return this
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// ─── Static config ────────────────────────────────────
|
|
183
|
-
|
|
184
|
-
formId(id: string): this { this._formId = id; return this }
|
|
185
|
-
method(m: FormMethod): this { this._method = m; return this }
|
|
186
|
-
action(url: string): this { this._action = url; return this }
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Cascade `inlineLabel` to every descendant `Field` whose own
|
|
190
|
-
* `.inlineLabel(...)` hasn't been called. Pass `false` explicitly to
|
|
191
|
-
* cascade label-above when a parent (rare) had set it. Read by the
|
|
192
|
-
* resolver and pushed down via `RenderContext.inlineLabelDefault`.
|
|
193
|
-
*/
|
|
194
|
-
inlineLabel(v = true): this { this._inlineLabel = v; return this }
|
|
195
|
-
/** Internal — read by `resolveSchema.deriveChildContext`. */
|
|
196
|
-
getInlineLabel(): boolean | undefined { return this._inlineLabel }
|
|
197
|
-
|
|
198
|
-
// ─── Lifecycle setters ────────────────────────────────
|
|
199
|
-
|
|
200
|
-
/** Form-level validators run after field-level ones. Useful for cross-field rules. */
|
|
201
|
-
validate(...validators: Validator[]): this {
|
|
202
|
-
this._formValidators.push(...validators)
|
|
203
|
-
return this
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Transform the validated payload before `save()`. Runs after validation
|
|
208
|
-
* passes, on **both** create and update. Pair with
|
|
209
|
-
* `mutateDataBeforeCreate` / `mutateDataBeforeUpdate` for mode-specific
|
|
210
|
-
* tweaks that layer on top.
|
|
211
|
-
*/
|
|
212
|
-
mutateData(fn: MutateDataHandler): this {
|
|
213
|
-
this._mutateData = fn
|
|
214
|
-
return this
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/** Create-only payload mutator. Runs after `mutateData` when `ctx.record` is undefined. */
|
|
218
|
-
mutateDataBeforeCreate(fn: MutateDataHandler): this {
|
|
219
|
-
this._mutateDataBeforeCreate = fn
|
|
220
|
-
return this
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/** Update-only payload mutator. Runs after `mutateData` when `ctx.record` is set. */
|
|
224
|
-
mutateDataBeforeUpdate(fn: MutateDataHandler): this {
|
|
225
|
-
this._mutateDataBeforeUpdate = fn
|
|
226
|
-
return this
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
beforeSave(fn: LifecycleHandler<R>): this { this._beforeSave = fn; return this }
|
|
230
|
-
|
|
231
|
-
/** Create-only pre-save hook. Runs after `beforeSave` when `ctx.record` is undefined. */
|
|
232
|
-
beforeCreate(fn: LifecycleHandler<R>): this { this._beforeCreate = fn; return this }
|
|
233
|
-
|
|
234
|
-
/** Update-only pre-save hook. Runs after `beforeSave` when `ctx.record` is set. */
|
|
235
|
-
beforeUpdate(fn: LifecycleHandler<R>): this { this._beforeUpdate = fn; return this }
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Persistence handler. Required for any form that accepts submits. No
|
|
239
|
-
* default implementation — Phase 3 ships an ORM adapter via
|
|
240
|
-
* `Resource.model`.
|
|
241
|
-
*/
|
|
242
|
-
save(fn: SaveHandler<R>): this { this._save = fn; return this }
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Create-only persistence override. Replaces `save()` for create mode.
|
|
246
|
-
* Use when create and update need distinct persistence paths (e.g.
|
|
247
|
-
* `Article.create(...)` vs `Article.update(id, ...)`).
|
|
248
|
-
*/
|
|
249
|
-
handleCreate(fn: SaveHandler<R>): this { this._handleCreate = fn; return this }
|
|
250
|
-
|
|
251
|
-
/** Update-only persistence override. Replaces `save()` for update mode. */
|
|
252
|
-
handleUpdate(fn: SaveHandler<R>): this { this._handleUpdate = fn; return this }
|
|
253
|
-
|
|
254
|
-
afterSave(fn: AfterSaveHandler<R>): this { this._afterSave = fn; return this }
|
|
255
|
-
|
|
256
|
-
/** Create-only post-save hook. Runs after `afterSave` when `ctx.record` was undefined. */
|
|
257
|
-
afterCreate(fn: AfterSaveHandler<R>): this { this._afterCreate = fn; return this }
|
|
258
|
-
|
|
259
|
-
/** Update-only post-save hook. Runs after `afterSave` when `ctx.record` was set. */
|
|
260
|
-
afterUpdate(fn: AfterSaveHandler<R>): this { this._afterUpdate = fn; return this }
|
|
261
|
-
|
|
262
|
-
/** Where to redirect after a successful save. Receives the saved record. */
|
|
263
|
-
redirectAfterSave(fn: RedirectHandler<R>): this {
|
|
264
|
-
this._redirectAfterSave = fn
|
|
265
|
-
return this
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/** Map a loaded record into form values for edit mode. Defaults to `{ ...record }`. */
|
|
269
|
-
fillFromRecord(fn: FillFromRecordHandler<R>): this {
|
|
270
|
-
this._fillFromRecord = fn
|
|
271
|
-
return this
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/** Transform values BEFORE `fillFromRecord` runs. Edit mode only. */
|
|
275
|
-
mutateFormDataBeforeFill(fn: FillMutator<R>): this {
|
|
276
|
-
this._mutateFormDataBeforeFill = fn
|
|
277
|
-
return this
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/** Transform values AFTER `fillFromRecord` runs. Edit mode only. */
|
|
281
|
-
mutateFormDataAfterFill(fn: FillMutator<R>): this {
|
|
282
|
-
this._mutateFormDataAfterFill = fn
|
|
283
|
-
return this
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/** Load a record by id for edit mode. */
|
|
287
|
-
loadRecord(fn: LoadRecordHandler<R>): this {
|
|
288
|
-
this._loadRecord = fn
|
|
289
|
-
return this
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Notification fired after a successful save (both modes). Pass a string
|
|
294
|
-
* for a default success toast with that title, a fully-built
|
|
295
|
-
* `Notification`/meta, or a function that builds one from the saved
|
|
296
|
-
* record. Pass `null` to suppress the framework's default toast for
|
|
297
|
-
* this mode.
|
|
298
|
-
*/
|
|
299
|
-
savedNotification(spec: SavedNotificationHandler<R>): this {
|
|
300
|
-
this._savedNotification = spec
|
|
301
|
-
return this
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/** Create-only notification override. Falls back to `savedNotification` if unset. */
|
|
305
|
-
createdNotification(spec: SavedNotificationHandler<R>): this {
|
|
306
|
-
this._createdNotification = spec
|
|
307
|
-
return this
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/** Disable the success toast entirely (both modes). */
|
|
311
|
-
disableSavedNotification(): this {
|
|
312
|
-
this._savedNotificationDisabled = true
|
|
313
|
-
return this
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
// ─── Render-time state ────────────────────────────────
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* Set the current form values for rendering. Called by route handlers in
|
|
320
|
-
* edit mode (after `loadRecord` + `fillFromRecord`) and on validation
|
|
321
|
-
* errors (so the user's input is preserved).
|
|
322
|
-
*/
|
|
323
|
-
withValues(values: Record<string, unknown>): this {
|
|
324
|
-
this._values = values
|
|
325
|
-
return this
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/** Attach validation errors for re-render after a failed submit. */
|
|
329
|
-
withErrors(errors: ValidationErrors): this {
|
|
330
|
-
this._errors = errors
|
|
331
|
-
return this
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/**
|
|
335
|
-
* Plan #5 — set the partial-resolve endpoint URL. Stamped at
|
|
336
|
-
* render-time by the route handler; the client POSTs `live` field
|
|
337
|
-
* changes here and receives a fresh re-resolved FormMeta back. Pass
|
|
338
|
-
* `undefined` to clear (e.g. forms with no live fields).
|
|
339
|
-
*/
|
|
340
|
-
withStateUrl(url: string | undefined): this {
|
|
341
|
-
if (url === undefined) {
|
|
342
|
-
delete this._stateUrl
|
|
343
|
-
} else {
|
|
344
|
-
this._stateUrl = url
|
|
345
|
-
}
|
|
346
|
-
return this
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
getStateUrl(): string | undefined { return this._stateUrl }
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* Plan #8 — set the wizard step-validate endpoint URL. Stamped at
|
|
353
|
-
* render-time when the form has a Wizard descendant; the client
|
|
354
|
-
* POSTs `{ step, values }` here on each Next-button click and
|
|
355
|
-
* receives `{ ok }` (200) or `{ ok:false, errors }` (422).
|
|
356
|
-
*/
|
|
357
|
-
withWizardUrl(url: string | undefined): this {
|
|
358
|
-
if (url === undefined) {
|
|
359
|
-
delete this._wizardUrl
|
|
360
|
-
} else {
|
|
361
|
-
this._wizardUrl = url
|
|
362
|
-
}
|
|
363
|
-
return this
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
getWizardUrl(): string | undefined { return this._wizardUrl }
|
|
367
|
-
|
|
368
|
-
// ─── Getters (used by route handlers) ────────────────
|
|
369
|
-
|
|
370
|
-
getFormId(): string { return this._formId }
|
|
371
|
-
getMethod(): FormMethod { return this._method }
|
|
372
|
-
getAction(): string | undefined { return this._action }
|
|
373
|
-
getFormValidators(): Validator[] { return this._formValidators }
|
|
374
|
-
getMutateData(): MutateDataHandler | undefined { return this._mutateData }
|
|
375
|
-
getMutateDataBeforeCreate(): MutateDataHandler | undefined { return this._mutateDataBeforeCreate }
|
|
376
|
-
getMutateDataBeforeUpdate(): MutateDataHandler | undefined { return this._mutateDataBeforeUpdate }
|
|
377
|
-
getBeforeSave(): LifecycleHandler<R> | undefined { return this._beforeSave }
|
|
378
|
-
getBeforeCreate(): LifecycleHandler<R> | undefined { return this._beforeCreate }
|
|
379
|
-
getBeforeUpdate(): LifecycleHandler<R> | undefined { return this._beforeUpdate }
|
|
380
|
-
getSave(): SaveHandler<R> | undefined { return this._save }
|
|
381
|
-
getHandleCreate(): SaveHandler<R> | undefined { return this._handleCreate }
|
|
382
|
-
getHandleUpdate(): SaveHandler<R> | undefined { return this._handleUpdate }
|
|
383
|
-
getAfterSave(): AfterSaveHandler<R> | undefined { return this._afterSave }
|
|
384
|
-
getAfterCreate(): AfterSaveHandler<R> | undefined { return this._afterCreate }
|
|
385
|
-
getAfterUpdate(): AfterSaveHandler<R> | undefined { return this._afterUpdate }
|
|
386
|
-
getRedirectAfterSave(): RedirectHandler<R> | undefined { return this._redirectAfterSave }
|
|
387
|
-
getFillFromRecord(): FillFromRecordHandler<R> | undefined { return this._fillFromRecord }
|
|
388
|
-
getMutateFormDataBeforeFill(): FillMutator<R> | undefined { return this._mutateFormDataBeforeFill }
|
|
389
|
-
getMutateFormDataAfterFill(): FillMutator<R> | undefined { return this._mutateFormDataAfterFill }
|
|
390
|
-
getLoadRecord(): LoadRecordHandler<R> | undefined { return this._loadRecord }
|
|
391
|
-
getSavedNotification(): SavedNotificationHandler<R> | null | undefined { return this._savedNotification }
|
|
392
|
-
getCreatedNotification(): SavedNotificationHandler<R> | null | undefined { return this._createdNotification }
|
|
393
|
-
isSavedNotificationDisabled(): boolean { return this._savedNotificationDisabled }
|
|
394
|
-
|
|
395
|
-
// ─── Serialization ────────────────────────────────────
|
|
396
|
-
|
|
397
|
-
getType(): string { return 'form' }
|
|
398
|
-
|
|
399
|
-
override toMeta(): FormMeta {
|
|
400
|
-
return {
|
|
401
|
-
type: 'form',
|
|
402
|
-
formId: this._formId,
|
|
403
|
-
method: this._method,
|
|
404
|
-
...(this._action !== undefined ? { action: this._action } : {}),
|
|
405
|
-
...(this._values !== undefined ? { values: this._values } : {}),
|
|
406
|
-
...(this._errors !== undefined ? { errors: this._errors } : {}),
|
|
407
|
-
...(this._stateUrl !== undefined ? { stateUrl: this._stateUrl } : {}),
|
|
408
|
-
...(this._wizardUrl !== undefined ? { wizardUrl: this._wizardUrl } : {}),
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
/** @internal — reset the formId counter; tests use this to keep ids stable. */
|
|
414
|
-
export function _resetFormIdSeq(): void {
|
|
415
|
-
_formIdSeq = 0
|
|
416
|
-
}
|
package/src/elements/ListTabs.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Element, type ElementMeta } from '../schema/Element.js'
|
|
2
|
-
import type { ListTab } from '../Tab.js'
|
|
3
|
-
|
|
4
|
-
/** Container element holding a strip of `ListTab` triggers above a Table.
|
|
5
|
-
* Built by `ListPage.schema()` from `ListPage.getTabs()` — users typically
|
|
6
|
-
* don't construct this directly. The renderer treats it like a flat row of
|
|
7
|
-
* tab triggers (no body / no per-tab content), since each tab modifies the
|
|
8
|
-
* shared Table query rather than swapping in different content. */
|
|
9
|
-
export class ListTabs extends Element {
|
|
10
|
-
private constructor() { super() }
|
|
11
|
-
|
|
12
|
-
static make(): ListTabs {
|
|
13
|
-
return new ListTabs()
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** Set the tab list. Each entry is a `ListTab` instance with its own
|
|
17
|
-
* label/icon/badge/query modifier. */
|
|
18
|
-
tabs(tabs: ListTab[]): this {
|
|
19
|
-
this._children = tabs
|
|
20
|
-
return this
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
override getType(): string { return 'listTabs' }
|
|
24
|
-
|
|
25
|
-
override toMeta(): ElementMeta {
|
|
26
|
-
return { type: 'listTabs' }
|
|
27
|
-
}
|
|
28
|
-
}
|