@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
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# Page Overrides
|
|
2
|
+
|
|
3
|
+
Resources auto-generate four pages — list / create / edit / view. The defaults render `Resource.table()` / `Resource.form()` / `Resource.detail()` with sensible chrome. Subclass the corresponding base only when you need to override a hook.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
class ArticleResource extends Resource {
|
|
7
|
+
static override pages() {
|
|
8
|
+
return {
|
|
9
|
+
list: ListArticles,
|
|
10
|
+
create: CreateArticle,
|
|
11
|
+
edit: EditArticle,
|
|
12
|
+
view: ViewArticle,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
You can return any subset — omit a key to keep the framework default. Dropping a key (`{ list: ListArticles }` only) also suppresses the corresponding sub-nav tab on record pages.
|
|
19
|
+
|
|
20
|
+
## CreatePage hooks
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { CreatePage, Action, Notification } from '@pilotiq/pilotiq'
|
|
24
|
+
|
|
25
|
+
class CreateArticle extends CreatePage {
|
|
26
|
+
static override getResource() { return ArticleResource }
|
|
27
|
+
|
|
28
|
+
// Stamp values onto the data BEFORE validation
|
|
29
|
+
static override mutateFormDataBeforeCreate(data, ctx) {
|
|
30
|
+
data.authorId = ctx.user.id
|
|
31
|
+
return data
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Or mutate AFTER validation, just before the model call
|
|
35
|
+
static override beforeCreate(data, ctx) {
|
|
36
|
+
data.slug = data.slug ?? slugify(data.title)
|
|
37
|
+
return data
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Run side-effects AFTER create
|
|
41
|
+
static override async afterCreate(record, ctx) {
|
|
42
|
+
await sendNewArticleNotification(record)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Override the success notification title
|
|
46
|
+
static override getCreatedNotificationTitle(record, ctx) {
|
|
47
|
+
return `${record.title} drafted — ready for review`
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Customize the redirect target
|
|
51
|
+
static override getRedirectUrl(record, ctx) {
|
|
52
|
+
return `${ctx.basePath}/articles/${record.id}/edit`
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Add a secondary submit ("Save as draft") alongside the default
|
|
56
|
+
static override getFormActions(R) {
|
|
57
|
+
return [
|
|
58
|
+
Action.make('submit').label('Publish').color('primary').submit(),
|
|
59
|
+
Action.make('draft').label('Save as draft').outlined().submit().formField('_continueCreate', '1'),
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
By default, `CreatePage.getFormActions(R)` ships TWO submits — the primary `submit` ("Create Article") plus an outlined secondary `createAnother` ("Create & create another"). Override to drop the second, or to add more.
|
|
66
|
+
|
|
67
|
+
## CreatePage wizard mode
|
|
68
|
+
|
|
69
|
+
For multi-step create flows:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { Step, TextField, DateField, ToggleField, MarkdownField } from '@pilotiq/pilotiq'
|
|
73
|
+
|
|
74
|
+
class CreateArticle extends CreatePage {
|
|
75
|
+
static override getResource() { return ArticleResource }
|
|
76
|
+
|
|
77
|
+
static override getSteps(R) {
|
|
78
|
+
return [
|
|
79
|
+
Step.make('Content')
|
|
80
|
+
.icon('file-text')
|
|
81
|
+
.schema([
|
|
82
|
+
TextField.make('title').required(),
|
|
83
|
+
MarkdownField.make('body'),
|
|
84
|
+
]),
|
|
85
|
+
Step.make('Publish')
|
|
86
|
+
.icon('send')
|
|
87
|
+
.schema([
|
|
88
|
+
DateField.make('publishAt'),
|
|
89
|
+
ToggleField.make('isPublic'),
|
|
90
|
+
]),
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
static override getWizard(wizard, R) {
|
|
95
|
+
return wizard.skippable().startOnStep(0).persistStepInQueryString('step')
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
When `getSteps()` returns a non-empty array, the framework wraps `R.form()` in a Wizard. Per-step validation reuses the same partial-resolve endpoint as reactive fields. Author the fields directly inside `Step.make(label).schema([…])` — they REPLACE the `Resource.form()` children.
|
|
101
|
+
|
|
102
|
+
## EditPage hooks
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
class EditArticle extends EditPage {
|
|
106
|
+
static override getResource() { return ArticleResource }
|
|
107
|
+
|
|
108
|
+
static override mutateFormDataBeforeFill(data, ctx) {
|
|
109
|
+
// Modify data BEFORE it populates the form (e.g. expanding JSON columns)
|
|
110
|
+
return { ...data, metadata: JSON.parse(data.metadata ?? '{}') }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static override mutateFormDataBeforeSave(data, ctx) {
|
|
114
|
+
// Modify data BEFORE the save (e.g. re-stringifying JSON columns)
|
|
115
|
+
return { ...data, metadata: JSON.stringify(data.metadata) }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static override beforeUpdate(data, ctx) { /* … */ return data }
|
|
119
|
+
static override async afterUpdate(record, ctx) { /* … */ }
|
|
120
|
+
|
|
121
|
+
static override getSavedNotificationTitle(record, ctx) {
|
|
122
|
+
return `${record.title} saved`
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Add a "Preview" action next to Save in the form header
|
|
126
|
+
static override getFormActions(actions, R, ctx) {
|
|
127
|
+
return [
|
|
128
|
+
...actions,
|
|
129
|
+
Action.make('preview')
|
|
130
|
+
.label('Preview')
|
|
131
|
+
.icon('eye')
|
|
132
|
+
.color('ghost')
|
|
133
|
+
.href(`/preview/${ctx.record.id}`),
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Form lifecycle order (every hook is async-aware):
|
|
140
|
+
|
|
141
|
+
1. `mutateFormDataBeforeFill` (edit only) — modify record before it populates form
|
|
142
|
+
2. `loadRecord` (auto-wired from `static model`) — read the record
|
|
143
|
+
3. *(user fills form, submits)*
|
|
144
|
+
4. validate
|
|
145
|
+
5. `mutateFormDataBeforeSave` / `mutateFormDataBeforeCreate` / `mutateFormDataBeforeUpdate`
|
|
146
|
+
6. `beforeCreate` / `beforeUpdate`
|
|
147
|
+
7. `save` (auto-wired from `static model`) — actual model call
|
|
148
|
+
8. `afterCreate` / `afterUpdate`
|
|
149
|
+
|
|
150
|
+
All form-mutation hooks accept `(data, ctx)` and return the (possibly modified) data. Side-effect hooks (`after*`) return void.
|
|
151
|
+
|
|
152
|
+
## ListPage hooks
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
class ListArticles extends ListPage {
|
|
156
|
+
static override getResource() { return ArticleResource }
|
|
157
|
+
|
|
158
|
+
// Header actions appear in the top-right of the list page header
|
|
159
|
+
static override getHeaderActions(R, base) {
|
|
160
|
+
return [
|
|
161
|
+
Action.create(R, base), // built-in factory
|
|
162
|
+
Action.make('import').label('Import CSV').icon('upload').schema([
|
|
163
|
+
FileUpload.make('file').required(),
|
|
164
|
+
]).handler(handleImport),
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Per-row actions (right-most cell)
|
|
169
|
+
static override getRowActions(R, base) {
|
|
170
|
+
return [
|
|
171
|
+
Action.edit(R, base),
|
|
172
|
+
Action.replicate(R, base),
|
|
173
|
+
Action.delete(),
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Bulk actions (shown when 1+ rows selected)
|
|
178
|
+
static override getBulkActions(R, base) {
|
|
179
|
+
return [
|
|
180
|
+
Action.bulkDelete(),
|
|
181
|
+
Action.make('archive').label('Archive selected').handler(handleBulkArchive),
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// List tabs (above the table)
|
|
186
|
+
static override getTabs() {
|
|
187
|
+
return [
|
|
188
|
+
ListTab.make('all').label('All').default(),
|
|
189
|
+
ListTab.make('drafts').label('Drafts').badge(async () => Article.where('status', 'draft').count())
|
|
190
|
+
.modifyQuery(q => q.where('status', 'draft')),
|
|
191
|
+
ListTab.make('published').label('Published')
|
|
192
|
+
.modifyQuery(q => q.where('status', 'published')),
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Action factories: `Action.create(R, base)`, `Action.edit(R, base, recordId)`, `Action.view(R, base, recordId)`, `Action.delete()`, `Action.replicate(R, base, recordId, opts?)`, `Action.restore(...)`, `Action.forceDelete(...)`, `Action.export(R)`, `Action.import(R)`, `Action.bulkDelete()`, `Action.bulkRestore()`, `Action.bulkForceDelete()`, `Action.bulkReplicate(R, base, opts?)`, `Action.bulkExport(R)`.
|
|
199
|
+
|
|
200
|
+
By default the action slots are empty — Filament-style explicit opt-in. The factories also auto-attach `.visible(...)` rules consulting the matching `canX` policy.
|
|
201
|
+
|
|
202
|
+
## ViewPage hooks
|
|
203
|
+
|
|
204
|
+
```ts
|
|
205
|
+
class ViewArticle extends ViewPage {
|
|
206
|
+
static override getResource() { return ArticleResource }
|
|
207
|
+
|
|
208
|
+
static override async getRecord(id, ctx) {
|
|
209
|
+
// Override the default Article.find — useful for eager-loading relations
|
|
210
|
+
return Article.with('author', 'tags').find(id)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
static override getInfolistActions(R, base, ctx) {
|
|
214
|
+
return [Action.edit(R, base, ctx.record.id)]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Custom (non-resource) pages
|
|
220
|
+
|
|
221
|
+
Plain `Page` subclasses register via `panel.pages([…])`:
|
|
222
|
+
|
|
223
|
+
```ts
|
|
224
|
+
import { Page, Heading, Card, Text } from '@pilotiq/pilotiq'
|
|
225
|
+
|
|
226
|
+
class AnalyticsPage extends Page {
|
|
227
|
+
static override slug = 'analytics' // optional — derived from class name
|
|
228
|
+
static override label = 'Analytics'
|
|
229
|
+
static override icon = 'bar-chart-3'
|
|
230
|
+
static override navigationGroup = 'Reports'
|
|
231
|
+
|
|
232
|
+
static override schema(ctx) {
|
|
233
|
+
return [
|
|
234
|
+
Heading.make('Site analytics').level(1),
|
|
235
|
+
Card.make().schema([
|
|
236
|
+
Text.make(`Welcome, ${ctx.user.name}. Stats coming soon.`),
|
|
237
|
+
]),
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
static override async canAccess(user) {
|
|
242
|
+
return user.role === 'admin'
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
Pilotiq.make('Admin').path('/admin').pages([AnalyticsPage])
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
URL is `${base}/${slug}`. The `schema(ctx)` receives a `SchemaContext` with `mode`, `recordId`, `basePath`, `user`, and `record` (for record-mode sub-pages).
|
|
252
|
+
|
|
253
|
+
## Record sub-pages
|
|
254
|
+
|
|
255
|
+
For per-record secondary pages (e.g. an "audit log" tab on each Article record), declare under `Resource.pages().record`:
|
|
256
|
+
|
|
257
|
+
```ts
|
|
258
|
+
class ArticleResource extends Resource {
|
|
259
|
+
static override pages() {
|
|
260
|
+
return {
|
|
261
|
+
edit: EditArticle,
|
|
262
|
+
record: {
|
|
263
|
+
audit: AuditLogPage,
|
|
264
|
+
activity: ActivityPage,
|
|
265
|
+
},
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
class AuditLogPage extends Page {
|
|
271
|
+
static override slug = 'audit'
|
|
272
|
+
static override label = 'Audit Log'
|
|
273
|
+
static override icon = 'clipboard-list'
|
|
274
|
+
|
|
275
|
+
static override schema(ctx) {
|
|
276
|
+
return [
|
|
277
|
+
// ctx.record is the loaded Article
|
|
278
|
+
Heading.make(`Audit log for ${ctx.record.title}`),
|
|
279
|
+
Table.make().records(async () => AuditEntry.where('articleId', ctx.record.id).get()),
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
static override async canAccess(user, record) {
|
|
284
|
+
return user.id === record.authorId || user.role === 'admin'
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
URLs become `${base}/articles/:id/audit`. The sub-page slug shows as a tab in the record's sub-nav strip between `__edit` and the relation managers, in declaration order.
|
|
290
|
+
|
|
291
|
+
## Common pitfalls
|
|
292
|
+
|
|
293
|
+
- **Don't put lifecycle hooks on the Resource itself.** `Resource.beforeCreate` won't run — only `CreatePage.beforeCreate` does. The framework calls hooks on the page, not the resource.
|
|
294
|
+
- **`getRowActions` defaults to `[]` (Filament-style explicit).** A bare `ListPage` gets no Edit/Delete buttons until you opt in via override or `Resource.table().recordActions([...])`.
|
|
295
|
+
- **`getFormActions(actions, R, ctx)` vs `getFormActions(R)`.** EditPage takes the existing actions array as the first arg (so you can spread + extend); CreatePage takes only `(R)` (since it builds the action list itself).
|
|
296
|
+
- **Mode-specific behavior** — `Field.disabledOn(['edit'])` / `visibleOn(['create'])` / `hiddenOn(['view'])` are easier than splitting form() per page.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pilotiq/pilotiq",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.2",
|
|
4
4
|
"description": "View-based admin panel for RudderJS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
"directory": "packages/pilotiq"
|
|
10
10
|
},
|
|
11
11
|
"type": "module",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"boost",
|
|
15
|
+
"CHANGELOG.md"
|
|
16
|
+
],
|
|
12
17
|
"exports": {
|
|
13
18
|
".": {
|
|
14
19
|
"import": "./dist/index.js",
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @pilotiq/pilotiq@0.24.1 build /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
3
|
-
> tsc -p tsconfig.build.json && pnpm run copy-assets
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
> @pilotiq/pilotiq@0.24.1 copy-assets /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
7
|
-
> mkdir -p dist/styles && cp -R src/styles/*.css dist/styles/
|
|
8
|
-
|