@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/Resource.test.ts
DELETED
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import { describe, it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import { Resource } from './Resource.js'
|
|
5
|
-
import { Form } from './elements/Form.js'
|
|
6
|
-
import { Table } from './elements/Table.js'
|
|
7
|
-
import { Column } from './Column.js'
|
|
8
|
-
import { TextField } from './fields/TextField.js'
|
|
9
|
-
|
|
10
|
-
describe('Resource (static API)', () => {
|
|
11
|
-
it('default form/table/detail are no-ops', () => {
|
|
12
|
-
class EmptyResource extends Resource {}
|
|
13
|
-
const f = EmptyResource.form(Form.make())
|
|
14
|
-
const t = EmptyResource.table(Table.make())
|
|
15
|
-
assert.equal(f.getChildren(), undefined)
|
|
16
|
-
assert.equal(t.getChildren(), undefined)
|
|
17
|
-
assert.deepEqual(EmptyResource.detail({}), [])
|
|
18
|
-
assert.deepEqual(EmptyResource.pages(), {})
|
|
19
|
-
assert.deepEqual(EmptyResource.relations(), [])
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
it('subclass overrides receive the builder and configure it', () => {
|
|
23
|
-
class ArticleResource extends Resource {
|
|
24
|
-
static override label = 'Articles'
|
|
25
|
-
|
|
26
|
-
static override form(form: Form): Form {
|
|
27
|
-
return form.schema([TextField.make('title').required()])
|
|
28
|
-
}
|
|
29
|
-
static override table(table: Table): Table {
|
|
30
|
-
return table.columns([Column.make('title').sortable()])
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const form = ArticleResource.form(Form.make())
|
|
35
|
-
assert.equal((form.getChildren() ?? []).length, 1)
|
|
36
|
-
|
|
37
|
-
const table = ArticleResource.table(Table.make())
|
|
38
|
-
assert.equal(table.getColumns().length, 1)
|
|
39
|
-
assert.equal(table.getColumns()[0]!.name, 'title')
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('getSlug derives from label when slug is unset', () => {
|
|
43
|
-
class ArticleResource extends Resource {
|
|
44
|
-
static override label = 'Article Drafts'
|
|
45
|
-
}
|
|
46
|
-
assert.equal(ArticleResource.getSlug(), 'article-drafts')
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('getSlug honors explicit slug', () => {
|
|
50
|
-
class ArticleResource extends Resource {
|
|
51
|
-
static override slug = 'articles'
|
|
52
|
-
static override label = 'Articles'
|
|
53
|
-
}
|
|
54
|
-
assert.equal(ArticleResource.getSlug(), 'articles')
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
// ─── Plan #9: navigation metadata ──────────────────────────
|
|
58
|
-
|
|
59
|
-
it('navigation fields default sanely', () => {
|
|
60
|
-
class R extends Resource { static override label = 'Things' }
|
|
61
|
-
assert.equal(R.navigationGroup, undefined)
|
|
62
|
-
assert.equal(R.navigationSort, undefined)
|
|
63
|
-
assert.equal(R.navigationLabel, undefined)
|
|
64
|
-
assert.equal(R.navigationIcon, undefined)
|
|
65
|
-
assert.equal(R.navigationBadge, undefined)
|
|
66
|
-
assert.equal(R.navigationBadgeColor, 'default')
|
|
67
|
-
assert.equal(R.navigationParentItem, undefined)
|
|
68
|
-
assert.equal(R.recordTitleAttribute, undefined)
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
it('getNavigationLabel falls through to label when override is unset', () => {
|
|
72
|
-
class R extends Resource { static override label = 'Articles' }
|
|
73
|
-
assert.equal(R.getNavigationLabel(), 'Articles')
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
it('getNavigationLabel returns the override when set', () => {
|
|
77
|
-
class R extends Resource {
|
|
78
|
-
static override label = 'Articles'
|
|
79
|
-
static override navigationLabel = 'Posts'
|
|
80
|
-
}
|
|
81
|
-
assert.equal(R.getNavigationLabel(), 'Posts')
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('getNavigationIcon falls through to icon when override is unset', () => {
|
|
85
|
-
class R extends Resource {
|
|
86
|
-
static override label = 'Articles'
|
|
87
|
-
static override icon = 'newspaper'
|
|
88
|
-
}
|
|
89
|
-
assert.equal(R.getNavigationIcon(), 'newspaper')
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
it('getNavigationIcon returns the override when set', () => {
|
|
93
|
-
class R extends Resource {
|
|
94
|
-
static override label = 'Articles'
|
|
95
|
-
static override icon = 'newspaper'
|
|
96
|
-
static override navigationIcon = 'pencil'
|
|
97
|
-
}
|
|
98
|
-
assert.equal(R.getNavigationIcon(), 'pencil')
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
// ─── Plan #12: global search ───────────────────────────────
|
|
102
|
-
|
|
103
|
-
it('globalSearch defaults to false (opt-in)', () => {
|
|
104
|
-
class R extends Resource { static override label = 'Articles' }
|
|
105
|
-
assert.equal(R.globalSearch, false)
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
it('globallySearchableAttributes() defaults to recordTitleAttribute + searchable columns', () => {
|
|
109
|
-
class R extends Resource {
|
|
110
|
-
static override label = 'Articles'
|
|
111
|
-
static override recordTitleAttribute = 'title'
|
|
112
|
-
static override table(table: Table): Table {
|
|
113
|
-
return table.columns([
|
|
114
|
-
Column.make('title').searchable(),
|
|
115
|
-
Column.make('excerpt').searchable(),
|
|
116
|
-
Column.make('createdAt'),
|
|
117
|
-
])
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
const attrs = R.globallySearchableAttributes()
|
|
121
|
-
assert.deepEqual([...attrs].sort(), ['excerpt', 'title'])
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
it('globallySearchableAttributes() returns [] when no recordTitle and no searchable columns', () => {
|
|
125
|
-
class R extends Resource { static override label = 'Things' }
|
|
126
|
-
assert.deepEqual(R.globallySearchableAttributes(), [])
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
it('globallySearchableAttributes() honors override', () => {
|
|
130
|
-
class R extends Resource {
|
|
131
|
-
static override label = 'Things'
|
|
132
|
-
static override globallySearchableAttributes(): string[] {
|
|
133
|
-
return ['custom_search_index']
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
assert.deepEqual(R.globallySearchableAttributes(), ['custom_search_index'])
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
it('getGlobalSearchResultTitle resolves through recordTitleAttribute → name → title → id', () => {
|
|
140
|
-
class R1 extends Resource {
|
|
141
|
-
static override label = 'Articles'
|
|
142
|
-
static override recordTitleAttribute = 'headline'
|
|
143
|
-
}
|
|
144
|
-
assert.equal(R1.getGlobalSearchResultTitle({ headline: 'Hello', name: 'fallback' }), 'Hello')
|
|
145
|
-
|
|
146
|
-
class R2 extends Resource { static override label = 'Things' }
|
|
147
|
-
assert.equal(R2.getGlobalSearchResultTitle({ name: 'Bob' }), 'Bob')
|
|
148
|
-
assert.equal(R2.getGlobalSearchResultTitle({ title: 'Doc' }), 'Doc')
|
|
149
|
-
assert.equal(R2.getGlobalSearchResultTitle({ id: 42 }), '42')
|
|
150
|
-
assert.equal(R2.getGlobalSearchResultTitle({}), '')
|
|
151
|
-
assert.equal(R2.getGlobalSearchResultTitle(null), '')
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
it('getGlobalSearchResultSubtitle defaults to undefined', () => {
|
|
155
|
-
class R extends Resource { static override label = 'Things' }
|
|
156
|
-
assert.equal(R.getGlobalSearchResultSubtitle({ status: 'draft' }), undefined)
|
|
157
|
-
})
|
|
158
|
-
|
|
159
|
-
it('getGlobalSearchResultUrl defaults to ${base}/${slug}/${id}', () => {
|
|
160
|
-
class R extends Resource {
|
|
161
|
-
static override label = 'Articles'
|
|
162
|
-
static override slug = 'articles'
|
|
163
|
-
}
|
|
164
|
-
assert.equal(R.getGlobalSearchResultUrl({ id: '42' }, '/admin'), '/admin/articles/42')
|
|
165
|
-
assert.equal(R.getGlobalSearchResultUrl({ id: 42 }, '/admin'), '/admin/articles/42')
|
|
166
|
-
assert.equal(R.getGlobalSearchResultUrl({}, '/admin'), '/admin/articles')
|
|
167
|
-
assert.equal(R.getGlobalSearchResultUrl(null, '/admin'), '/admin/articles')
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
it('getGlobalSearchQuery defaults to undefined (use built-in LIKE chain)', () => {
|
|
171
|
-
class R extends Resource { static override label = 'Things' }
|
|
172
|
-
assert.equal(R.getGlobalSearchQuery('alice'), undefined)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
describe('soft-delete opt-in (Plan #13)', () => {
|
|
176
|
-
it('softDeletes defaults to false', () => {
|
|
177
|
-
class R extends Resource { static override label = 'Things' }
|
|
178
|
-
assert.equal(R.softDeletes, false)
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
it('deletedAtColumn defaults to "deletedAt"', () => {
|
|
182
|
-
class R extends Resource { static override label = 'Things' }
|
|
183
|
-
assert.equal(R.deletedAtColumn, 'deletedAt')
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
it('subclass can opt in by setting softDeletes = true', () => {
|
|
187
|
-
class R extends Resource {
|
|
188
|
-
static override label = 'Posts'
|
|
189
|
-
static override softDeletes = true
|
|
190
|
-
}
|
|
191
|
-
assert.equal(R.softDeletes, true)
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
it('subclass can override the column name', () => {
|
|
195
|
-
class R extends Resource {
|
|
196
|
-
static override label = 'Posts'
|
|
197
|
-
static override softDeletes = true
|
|
198
|
-
static override deletedAtColumn = 'archivedAt'
|
|
199
|
-
}
|
|
200
|
-
assert.equal(R.deletedAtColumn, 'archivedAt')
|
|
201
|
-
})
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
describe('canRestore / canForceDelete predicates (Plan #13)', () => {
|
|
205
|
-
it('canRestore defaults to true', async () => {
|
|
206
|
-
class R extends Resource { static override label = 'Posts' }
|
|
207
|
-
assert.equal(await R.canRestore(null, { id: 1 }), true)
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
it('canForceDelete inherits from canDelete by default', async () => {
|
|
211
|
-
class R extends Resource {
|
|
212
|
-
static override label = 'Posts'
|
|
213
|
-
static override async canDelete(_user: unknown, _record: unknown): Promise<boolean> { return false }
|
|
214
|
-
}
|
|
215
|
-
assert.equal(await R.canForceDelete(null, { id: 1 }), false,
|
|
216
|
-
'force-delete should fall through to canDelete when not overridden')
|
|
217
|
-
})
|
|
218
|
-
|
|
219
|
-
it('canForceDelete override wins independently of canDelete', async () => {
|
|
220
|
-
class R extends Resource {
|
|
221
|
-
static override label = 'Posts'
|
|
222
|
-
static override async canDelete(_user: unknown, _record: unknown): Promise<boolean> { return true }
|
|
223
|
-
static override async canForceDelete(_user: unknown, _record: unknown): Promise<boolean> { return false }
|
|
224
|
-
}
|
|
225
|
-
assert.equal(await R.canForceDelete(null, { id: 1 }), false)
|
|
226
|
-
assert.equal(await R.canDelete(null, { id: 1 }), true)
|
|
227
|
-
})
|
|
228
|
-
|
|
229
|
-
it('canRestore override wins', async () => {
|
|
230
|
-
class R extends Resource {
|
|
231
|
-
static override label = 'Posts'
|
|
232
|
-
static override async canRestore(_user: unknown, record: unknown): Promise<boolean> {
|
|
233
|
-
return (record as { ownedBy?: string }).ownedBy === 'me'
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
assert.equal(await R.canRestore(null, { ownedBy: 'me' }), true)
|
|
237
|
-
assert.equal(await R.canRestore(null, { ownedBy: 'other' }), false)
|
|
238
|
-
})
|
|
239
|
-
})
|
|
240
|
-
|
|
241
|
-
describe('collab opt-in', () => {
|
|
242
|
-
it('omitted static collab → getResolvedCollabConfig returns null', () => {
|
|
243
|
-
class R extends Resource {}
|
|
244
|
-
assert.equal(R.getResolvedCollabConfig(), null)
|
|
245
|
-
})
|
|
246
|
-
|
|
247
|
-
it('static collab = false → null (explicit opt-out)', () => {
|
|
248
|
-
class R extends Resource {
|
|
249
|
-
static override collab = false as const
|
|
250
|
-
}
|
|
251
|
-
assert.equal(R.getResolvedCollabConfig(), null)
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
it('static collab = true → defaults to { pages: [edit], presence: true }', () => {
|
|
255
|
-
class R extends Resource {
|
|
256
|
-
static override collab = true as const
|
|
257
|
-
}
|
|
258
|
-
assert.deepEqual(R.getResolvedCollabConfig(), {
|
|
259
|
-
pages: ['edit'],
|
|
260
|
-
presence: true,
|
|
261
|
-
})
|
|
262
|
-
})
|
|
263
|
-
|
|
264
|
-
it('object form merges with defaults', () => {
|
|
265
|
-
class R extends Resource {
|
|
266
|
-
static override collab = { pages: ['edit', 'view'] as const }
|
|
267
|
-
}
|
|
268
|
-
assert.deepEqual(R.getResolvedCollabConfig(), {
|
|
269
|
-
pages: ['edit', 'view'],
|
|
270
|
-
presence: true, // default preserved
|
|
271
|
-
})
|
|
272
|
-
})
|
|
273
|
-
|
|
274
|
-
it('object form can suppress presence', () => {
|
|
275
|
-
class R extends Resource {
|
|
276
|
-
static override collab = { presence: false }
|
|
277
|
-
}
|
|
278
|
-
assert.deepEqual(R.getResolvedCollabConfig(), {
|
|
279
|
-
pages: ['edit'], // default preserved
|
|
280
|
-
presence: false,
|
|
281
|
-
})
|
|
282
|
-
})
|
|
283
|
-
})
|
|
284
|
-
})
|