@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/schema/Group.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Chrome-less container. Renders its children in a plain `<div>` with no
|
|
5
|
-
* border, heading, padding, or background. Useful when you need a logical
|
|
6
|
-
* grouping for visibility (`Group.make().visible(({ $get }) => …)`) or for
|
|
7
|
-
* `_layout.columnSpan` on a parent grid without imposing visual chrome.
|
|
8
|
-
*
|
|
9
|
-
* Inherits `visible / hidden / columnSpan / columnStart / columnOrder`
|
|
10
|
-
* from `Element` (Plan #8). No own state apart from children.
|
|
11
|
-
*/
|
|
12
|
-
export class Group extends Element {
|
|
13
|
-
private constructor() { super() }
|
|
14
|
-
|
|
15
|
-
static make(): Group {
|
|
16
|
-
return new Group()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** Set the children. Any Element type is accepted. */
|
|
20
|
-
schema(elements: Element[]): this {
|
|
21
|
-
this._children = elements
|
|
22
|
-
return this
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
getType(): string { return 'group' }
|
|
26
|
-
|
|
27
|
-
toMeta(): Record<string, unknown> {
|
|
28
|
-
return { type: 'group' as const }
|
|
29
|
-
}
|
|
30
|
-
}
|
package/src/schema/Heading.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
import type { Action } from '../actions/Action.js'
|
|
3
|
-
|
|
4
|
-
export class Heading extends Element {
|
|
5
|
-
private _level: 1 | 2 | 3 = 1
|
|
6
|
-
private _description?: string
|
|
7
|
-
|
|
8
|
-
private constructor(private content: string) {
|
|
9
|
-
super()
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
static make(content: string): Heading {
|
|
13
|
-
return new Heading(content)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
level(l: 1 | 2 | 3): this { this._level = l; return this }
|
|
17
|
-
description(d: string): this { this._description = d; return this }
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Attach action buttons that render aligned to the right of the
|
|
21
|
-
* heading text — admin-style page header. The renderer lays the
|
|
22
|
-
* heading + actions out as a flex row.
|
|
23
|
-
*/
|
|
24
|
-
actions(actions: Action[]): this {
|
|
25
|
-
this._children = actions
|
|
26
|
-
return this
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
getType(): string { return 'heading' }
|
|
30
|
-
|
|
31
|
-
toMeta() {
|
|
32
|
-
return {
|
|
33
|
-
type: 'heading' as const,
|
|
34
|
-
content: this.content,
|
|
35
|
-
level: this._level,
|
|
36
|
-
...(this._description ? { description: this._description } : {}),
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
package/src/schema/Html.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
import type { MarkdownProseSize } from './Markdown.js'
|
|
3
|
-
import { sanitizeHtml, type SanitizeConfig } from './sanitize.js'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Display prime — renders a raw HTML string inline in a schema. Use when
|
|
7
|
-
* the source is already HTML (e.g. legacy CMS column, server-rendered
|
|
8
|
-
* template fragment). For Markdown source reach for `Markdown` instead.
|
|
9
|
-
*
|
|
10
|
-
* **Sanitized by default** against a prose-friendly allowlist (matches
|
|
11
|
-
* Filament v5's default-secure posture) — `<script>` / `<iframe>` /
|
|
12
|
-
* `javascript:` URLs / inline event handlers are stripped before the wire
|
|
13
|
-
* shape ships. Opt out with `.allowRaw()` (only when the source is fully
|
|
14
|
-
* admin-trusted AND already sanitized upstream) or widen the allowlist
|
|
15
|
-
* with `.sanitize({ allowedTags: [...] })`.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* Html.make('<p>Welcome to <strong>pilotiq</strong>.</p>').prose()
|
|
19
|
-
*/
|
|
20
|
-
export class Html extends Element {
|
|
21
|
-
private _prose = true
|
|
22
|
-
private _size?: MarkdownProseSize
|
|
23
|
-
private _sanitize: boolean | SanitizeConfig = true
|
|
24
|
-
|
|
25
|
-
private constructor(private html: string) {
|
|
26
|
-
super()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
static make(html: string): Html {
|
|
30
|
-
return new Html(html)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** Wrap output in a `prose` Tailwind Typography container. Default `true`. */
|
|
34
|
-
prose(v = true): this { this._prose = v; return this }
|
|
35
|
-
|
|
36
|
-
/** Tailwind Typography size — `prose-sm` / `prose-base` / `prose-lg`. */
|
|
37
|
-
size(s: MarkdownProseSize): this { this._size = s; return this }
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Sanitization control. Default `true` — runs the source through the
|
|
41
|
-
* `DEFAULT_SANITIZE_CONFIG` allowlist before the wire shape ships. Pass
|
|
42
|
-
* `false` to disable (use `.allowRaw()` for the same effect with a
|
|
43
|
-
* clearer intent at the call site). Pass a `sanitize-html` config
|
|
44
|
-
* object to widen the allowlist.
|
|
45
|
-
*/
|
|
46
|
-
sanitize(v: boolean | SanitizeConfig = true): this {
|
|
47
|
-
this._sanitize = v
|
|
48
|
-
return this
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Sugar — opt out of the default-secure sanitizer entirely. */
|
|
52
|
-
allowRaw(): this { this._sanitize = false; return this }
|
|
53
|
-
|
|
54
|
-
getType(): string { return 'html' }
|
|
55
|
-
|
|
56
|
-
async toMeta() {
|
|
57
|
-
const html = this._sanitize === false
|
|
58
|
-
? this.html
|
|
59
|
-
: await sanitizeHtml(this.html, this._sanitize === true ? undefined : this._sanitize)
|
|
60
|
-
return {
|
|
61
|
-
type: 'html' as const,
|
|
62
|
-
html,
|
|
63
|
-
prose: this._prose,
|
|
64
|
-
...(this._size ? { size: this._size } : {}),
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
package/src/schema/Icon.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
export type IconColor =
|
|
4
|
-
| 'default'
|
|
5
|
-
| 'muted'
|
|
6
|
-
| 'primary'
|
|
7
|
-
| 'destructive'
|
|
8
|
-
| 'success'
|
|
9
|
-
| 'warning'
|
|
10
|
-
| 'info'
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Display prime — renders an icon inline in a schema. Resolves through
|
|
14
|
-
* the user-extensible icon registry (`registerIcons({ name: Component })`),
|
|
15
|
-
* so the value is a kebab-case string. For component-typed icons used
|
|
16
|
-
* by Resource/Page/Global statics, see `IconValue` in `@pilotiq/pilotiq/icons`.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* Icon.make('check-circle').size(20).color('success')
|
|
20
|
-
*/
|
|
21
|
-
export class Icon extends Element {
|
|
22
|
-
private _size: number = 16
|
|
23
|
-
private _color: IconColor = 'default'
|
|
24
|
-
private _label?: string
|
|
25
|
-
|
|
26
|
-
private constructor(private name: string) {
|
|
27
|
-
super()
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static make(name: string): Icon {
|
|
31
|
-
return new Icon(name)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Pixel size — drives both width and height. Default 16. */
|
|
35
|
-
size(px: number): this { this._size = px; return this }
|
|
36
|
-
|
|
37
|
-
color(c: IconColor): this { this._color = c; return this }
|
|
38
|
-
|
|
39
|
-
/** Accessible label. When set, the rendered icon gets `aria-label`;
|
|
40
|
-
* otherwise it's `aria-hidden`. */
|
|
41
|
-
label(text: string): this { this._label = text; return this }
|
|
42
|
-
|
|
43
|
-
getType(): string { return 'icon' }
|
|
44
|
-
|
|
45
|
-
toMeta() {
|
|
46
|
-
return {
|
|
47
|
-
type: 'icon' as const,
|
|
48
|
-
name: this.name,
|
|
49
|
-
size: this._size,
|
|
50
|
-
color: this._color,
|
|
51
|
-
...(this._label ? { label: this._label } : {}),
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
package/src/schema/Image.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
export type ImageShape = 'square' | 'rounded' | 'circle'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Display prime — renders an `<img>` inline in a schema. Use for inline
|
|
7
|
-
* thumbnails, avatars, brand marks, or detail-page hero shots; for
|
|
8
|
-
* table-cell images reach for `ImageColumn` instead.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* Image.make('https://cdn.example.com/avatar.png').alt('Avatar').size(64).circle()
|
|
12
|
-
*/
|
|
13
|
-
export class Image extends Element {
|
|
14
|
-
private _alt = ''
|
|
15
|
-
private _width?: number
|
|
16
|
-
private _height?: number
|
|
17
|
-
private _shape: ImageShape = 'square'
|
|
18
|
-
|
|
19
|
-
private constructor(private url: string) {
|
|
20
|
-
super()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static make(url: string): Image {
|
|
24
|
-
return new Image(url)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
alt(text: string): this { this._alt = text; return this }
|
|
28
|
-
|
|
29
|
-
/** Width in pixels. */
|
|
30
|
-
width(px: number): this { this._width = px; return this }
|
|
31
|
-
|
|
32
|
-
/** Height in pixels. */
|
|
33
|
-
height(px: number): this { this._height = px; return this }
|
|
34
|
-
|
|
35
|
-
/** Sugar for square width + height. */
|
|
36
|
-
size(px: number): this {
|
|
37
|
-
this._width = px
|
|
38
|
-
this._height = px
|
|
39
|
-
return this
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
rounded(): this { this._shape = 'rounded'; return this }
|
|
43
|
-
circle(): this { this._shape = 'circle'; return this }
|
|
44
|
-
|
|
45
|
-
getType(): string { return 'image' }
|
|
46
|
-
|
|
47
|
-
toMeta() {
|
|
48
|
-
return {
|
|
49
|
-
type: 'image' as const,
|
|
50
|
-
url: this.url,
|
|
51
|
-
alt: this._alt,
|
|
52
|
-
shape: this._shape,
|
|
53
|
-
...(this._width !== undefined ? { width: this._width } : {}),
|
|
54
|
-
...(this._height !== undefined ? { height: this._height } : {}),
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
package/src/schema/LinkTag.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Head-safe element — emits a `<link>` tag inside the panel's `<head>`.
|
|
5
|
-
* Use for canonical URLs, favicons, manifest hints, preload directives,
|
|
6
|
-
* and stylesheet imports (prefer `StyleTag` for inline CSS).
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* Pilotiq.renderHook('panels::head.start', () => [
|
|
10
|
-
* LinkTag.make({ rel: 'icon', href: '/favicon.svg', type: 'image/svg+xml' }),
|
|
11
|
-
* LinkTag.make({ rel: 'canonical', href: 'https://app.example.com' }),
|
|
12
|
-
* ])
|
|
13
|
-
*/
|
|
14
|
-
export interface LinkTagAttrs {
|
|
15
|
-
rel: string
|
|
16
|
-
href?: string
|
|
17
|
-
/** Maps to the HTML `type` attribute (e.g. `image/svg+xml`, `text/css`).
|
|
18
|
-
* Renamed from `type` because `type` is the wire-shape discriminator. */
|
|
19
|
-
mimeType?: string
|
|
20
|
-
media?: string
|
|
21
|
-
sizes?: string
|
|
22
|
-
as?: string
|
|
23
|
-
integrity?: string
|
|
24
|
-
crossOrigin?: 'anonymous' | 'use-credentials' | ''
|
|
25
|
-
referrerPolicy?: string
|
|
26
|
-
hrefLang?: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class LinkTag extends Element {
|
|
30
|
-
private constructor(private attrs: LinkTagAttrs) { super() }
|
|
31
|
-
|
|
32
|
-
static make(attrs: LinkTagAttrs): LinkTag {
|
|
33
|
-
return new LinkTag(attrs)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
getType(): string { return 'link' }
|
|
37
|
-
|
|
38
|
-
toMeta() {
|
|
39
|
-
return { ...this.attrs, type: 'link' as const }
|
|
40
|
-
}
|
|
41
|
-
}
|
package/src/schema/Markdown.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { marked } from 'marked'
|
|
2
|
-
import { Element } from './Element.js'
|
|
3
|
-
import { sanitizeHtml, type SanitizeConfig } from './sanitize.js'
|
|
4
|
-
|
|
5
|
-
export type MarkdownProseSize = 'sm' | 'base' | 'lg'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Display prime — renders read-only Markdown source. Server-side conversion
|
|
9
|
-
* via `marked` (already a dep), client receives finished HTML — no FOUC,
|
|
10
|
-
* no extra parser shipped to display-only pages.
|
|
11
|
-
*
|
|
12
|
-
* Read-only counterpart of `MarkdownField`. For raw HTML strings reach for
|
|
13
|
-
* `Html` instead.
|
|
14
|
-
*
|
|
15
|
-
* **Sanitized by default** against a prose-friendly allowlist (matches
|
|
16
|
-
* Filament v5's default-secure posture) — `<script>` / `<iframe>` /
|
|
17
|
-
* `javascript:` URLs / inline event handlers are stripped before the wire
|
|
18
|
-
* shape ships. Opt out with `.allowRaw()` (admin-trusted source AND
|
|
19
|
-
* reader) or widen the allowlist with `.sanitize({ allowedTags: [...] })`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* Markdown.make('# Welcome\n\nThanks for **trying** pilotiq.').prose()
|
|
23
|
-
*/
|
|
24
|
-
export class Markdown extends Element {
|
|
25
|
-
private _gfm = true
|
|
26
|
-
private _breaks = false
|
|
27
|
-
private _prose = true
|
|
28
|
-
private _size?: MarkdownProseSize
|
|
29
|
-
private _sanitize: boolean | SanitizeConfig = true
|
|
30
|
-
|
|
31
|
-
private constructor(private source: string) {
|
|
32
|
-
super()
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
static make(source: string): Markdown {
|
|
36
|
-
return new Markdown(source)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** GitHub-flavored markdown. Default `true`. */
|
|
40
|
-
gfm(v = true): this { this._gfm = v; return this }
|
|
41
|
-
|
|
42
|
-
/** Convert single `\n` line breaks to `<br>`. Default `false`. */
|
|
43
|
-
breaks(v = true): this { this._breaks = v; return this }
|
|
44
|
-
|
|
45
|
-
/** Wrap output in a `prose` Tailwind Typography container. Default `true`.
|
|
46
|
-
* Pass `false` to render bare HTML without typographic styling. */
|
|
47
|
-
prose(v = true): this { this._prose = v; return this }
|
|
48
|
-
|
|
49
|
-
/** Tailwind Typography size — `prose-sm` / `prose-base` / `prose-lg`. */
|
|
50
|
-
size(s: MarkdownProseSize): this { this._size = s; return this }
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Sanitization control. Default `true` — runs the converted HTML through
|
|
54
|
-
* the `DEFAULT_SANITIZE_CONFIG` allowlist before the wire shape ships.
|
|
55
|
-
* Pass `false` to disable (use `.allowRaw()` for the same effect with a
|
|
56
|
-
* clearer intent at the call site). Pass a `sanitize-html` config object
|
|
57
|
-
* to widen the allowlist.
|
|
58
|
-
*/
|
|
59
|
-
sanitize(v: boolean | SanitizeConfig = true): this {
|
|
60
|
-
this._sanitize = v
|
|
61
|
-
return this
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Sugar — opt out of the default-secure sanitizer entirely. */
|
|
65
|
-
allowRaw(): this { this._sanitize = false; return this }
|
|
66
|
-
|
|
67
|
-
getType(): string { return 'markdown' }
|
|
68
|
-
|
|
69
|
-
async toMeta() {
|
|
70
|
-
const html = marked.parse(this.source, {
|
|
71
|
-
gfm: this._gfm,
|
|
72
|
-
breaks: this._breaks,
|
|
73
|
-
async: false,
|
|
74
|
-
}) as string
|
|
75
|
-
const finalHtml = this._sanitize === false
|
|
76
|
-
? html
|
|
77
|
-
: await sanitizeHtml(html, this._sanitize === true ? undefined : this._sanitize)
|
|
78
|
-
return {
|
|
79
|
-
type: 'markdown' as const,
|
|
80
|
-
html: finalHtml,
|
|
81
|
-
prose: this._prose,
|
|
82
|
-
...(this._size ? { size: this._size } : {}),
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
package/src/schema/MetaTag.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Head-safe element — emits a `<meta>` tag inside the panel's `<head>`.
|
|
5
|
-
*
|
|
6
|
-
* Returned from `Pilotiq.renderHook('panels::head.start' | 'panels::head.end', …)`
|
|
7
|
-
* callbacks alongside `LinkTag` / `ScriptTag` / `StyleTag`. Schema-side
|
|
8
|
-
* `visible(ctx => …)` / `hidden(ctx => …)` predicates still apply, so a
|
|
9
|
-
* meta can be hidden behind feature flags or per-route logic just like
|
|
10
|
-
* any other Element.
|
|
11
|
-
*
|
|
12
|
-
* Either `name`, `property`, `httpEquiv`, or `charset` must be set —
|
|
13
|
-
* silently skipped at render-time if all four are absent.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* Pilotiq.renderHook('panels::head.end', () => [
|
|
17
|
-
* MetaTag.make({ property: 'og:image', content: 'https://…/og.png' }),
|
|
18
|
-
* MetaTag.make({ name: 'csrf-token', content: req.csrfToken }),
|
|
19
|
-
* ])
|
|
20
|
-
*/
|
|
21
|
-
export interface MetaTagAttrs {
|
|
22
|
-
name?: string
|
|
23
|
-
property?: string
|
|
24
|
-
httpEquiv?: string
|
|
25
|
-
charset?: string
|
|
26
|
-
content?: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class MetaTag extends Element {
|
|
30
|
-
private constructor(private attrs: MetaTagAttrs) { super() }
|
|
31
|
-
|
|
32
|
-
static make(attrs: MetaTagAttrs): MetaTag {
|
|
33
|
-
return new MetaTag(attrs)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
getType(): string { return 'meta' }
|
|
37
|
-
|
|
38
|
-
toMeta() {
|
|
39
|
-
return { type: 'meta' as const, ...this.attrs }
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
import { serializeIcon, type SerializedIcon, type IconValue } from '../icons/types.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* A single tab inside a `RelationTabs` strip — a labeled link to a
|
|
6
|
-
* sibling URL (the parent's Edit page, or one of the relation manager
|
|
7
|
-
* URLs). The renderer styles `active === true` differently and renders
|
|
8
|
-
* `url` as a plain `<a href>` so cmd-click + new-tab still work.
|
|
9
|
-
*/
|
|
10
|
-
export interface RelationTabMeta {
|
|
11
|
-
key: string
|
|
12
|
-
label: string
|
|
13
|
-
url: string
|
|
14
|
-
active: boolean
|
|
15
|
-
icon?: SerializedIcon
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Plan #11 — navigation strip that ties a parent record's Edit/View
|
|
20
|
-
* page to its relation manager pages. Shown:
|
|
21
|
-
* - on a Resource Edit/View page when `R.relations().length > 0`
|
|
22
|
-
* - on every relation-list / -create / -edit page (so users can
|
|
23
|
-
* jump back to the parent record or sideways to a sibling
|
|
24
|
-
* manager without leaving the parent context)
|
|
25
|
-
*
|
|
26
|
-
* Not user-authored. The page-data builders construct it via
|
|
27
|
-
* `RelationTabs.make(tabs)` after computing each tab's URL and
|
|
28
|
-
* active-tab state.
|
|
29
|
-
*/
|
|
30
|
-
export class RelationTabs extends Element {
|
|
31
|
-
private constructor(private readonly _tabs: RelationTabMeta[]) {
|
|
32
|
-
super()
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
static make(tabs: RelationTabMeta[]): RelationTabs {
|
|
36
|
-
return new RelationTabs(tabs)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getType(): string { return 'relation-tabs' }
|
|
40
|
-
|
|
41
|
-
toMeta() {
|
|
42
|
-
return {
|
|
43
|
-
type: 'relation-tabs' as const,
|
|
44
|
-
tabs: this._tabs,
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Convenience: build a tab descriptor with the icon serialized in
|
|
50
|
-
* the same shape as Resource / Manager nav items. Owner-class name
|
|
51
|
-
* threads through so component-typed icons resolve via the Vite
|
|
52
|
-
* plugin's `_components.ts` manifest. */
|
|
53
|
-
export function relationTab(opts: {
|
|
54
|
-
key: string
|
|
55
|
-
label: string
|
|
56
|
-
url: string
|
|
57
|
-
active: boolean
|
|
58
|
-
icon?: IconValue
|
|
59
|
-
iconOwner?: string
|
|
60
|
-
}): RelationTabMeta {
|
|
61
|
-
const tab: RelationTabMeta = {
|
|
62
|
-
key: opts.key,
|
|
63
|
-
label: opts.label,
|
|
64
|
-
url: opts.url,
|
|
65
|
-
active: opts.active,
|
|
66
|
-
}
|
|
67
|
-
if (opts.icon !== undefined) {
|
|
68
|
-
tab.icon = serializeIcon(opts.icon, opts.iconOwner ?? opts.key)
|
|
69
|
-
}
|
|
70
|
-
return tab
|
|
71
|
-
}
|
package/src/schema/ScriptTag.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Element } from './Element.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Head-safe element — emits a `<script>` tag inside the panel's `<head>`.
|
|
5
|
-
* Use for analytics snippets (Plausible / Posthog / GA), feature-flag
|
|
6
|
-
* boot scripts, or per-request injected globals.
|
|
7
|
-
*
|
|
8
|
-
* Two mutually-exclusive modes:
|
|
9
|
-
* - **External:** set `src` (and optionally `integrity` / `crossOrigin` /
|
|
10
|
-
* `async` / `defer`).
|
|
11
|
-
* - **Inline:** set `body` to a JavaScript source string. Rendered via
|
|
12
|
-
* `dangerouslySetInnerHTML`; the body is the caller's responsibility.
|
|
13
|
-
*
|
|
14
|
-
* `dataAttributes` ride through verbatim onto the rendered element, so
|
|
15
|
-
* vendor SDK hints (`data-domain`, `data-api`) work without a typed slot.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* Pilotiq.renderHook('panels::scripts', () => [
|
|
19
|
-
* ScriptTag.make({
|
|
20
|
-
* src: 'https://plausible.io/js/script.js',
|
|
21
|
-
* defer: true,
|
|
22
|
-
* dataAttributes: { domain: 'example.com' },
|
|
23
|
-
* }),
|
|
24
|
-
* ScriptTag.make({ body: 'window.__APP_TENANT__ = "acme"' }),
|
|
25
|
-
* ])
|
|
26
|
-
*/
|
|
27
|
-
export interface ScriptTagAttrs {
|
|
28
|
-
src?: string
|
|
29
|
-
body?: string
|
|
30
|
-
/** Maps to the HTML `type` attribute (`module`, `application/json`, …).
|
|
31
|
-
* Renamed from `type` because `type` is the wire-shape discriminator. */
|
|
32
|
-
mimeType?: string
|
|
33
|
-
async?: boolean
|
|
34
|
-
defer?: boolean
|
|
35
|
-
noModule?: boolean
|
|
36
|
-
integrity?: string
|
|
37
|
-
crossOrigin?: 'anonymous' | 'use-credentials' | ''
|
|
38
|
-
referrerPolicy?: string
|
|
39
|
-
nonce?: string
|
|
40
|
-
dataAttributes?: Record<string, string>
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class ScriptTag extends Element {
|
|
44
|
-
private constructor(private attrs: ScriptTagAttrs) { super() }
|
|
45
|
-
|
|
46
|
-
static make(attrs: ScriptTagAttrs): ScriptTag {
|
|
47
|
-
return new ScriptTag(attrs)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getType(): string { return 'script' }
|
|
51
|
-
|
|
52
|
-
toMeta() {
|
|
53
|
-
return { ...this.attrs, type: 'script' as const }
|
|
54
|
-
}
|
|
55
|
-
}
|