@pilotiq/pilotiq 0.23.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 +91 -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/dist/actions/exportFactory.d.ts +10 -0
- package/dist/actions/exportFactory.d.ts.map +1 -1
- package/dist/actions/exportFactory.js +10 -0
- package/dist/actions/exportFactory.js.map +1 -1
- package/dist/react/CollabRoomContext.d.ts +5 -5
- package/dist/react/index.d.ts +0 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +0 -1
- package/dist/react/index.js.map +1 -1
- package/dist/routes/helpers.d.ts.map +1 -1
- package/dist/routes/helpers.js +6 -2
- package/dist/routes/helpers.js.map +1 -1
- package/dist/routes/relations.d.ts.map +1 -1
- package/dist/routes/relations.js +12 -0
- package/dist/routes/relations.js.map +1 -1
- package/package.json +6 -1
- package/.turbo/turbo-build.log +0 -8
- package/CLAUDE.md +0 -265
- package/dist/react/useCollabSeed.d.ts +0 -23
- package/dist/react/useCollabSeed.d.ts.map +0 -1
- package/dist/react/useCollabSeed.js +0 -82
- package/dist/react/useCollabSeed.js.map +0 -1
- 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 -215
- 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 -195
- 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/useCollabSeed.ts +0 -86
- 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 -700
- package/src/routes/pages.ts +0 -175
- package/src/routes/panel.ts +0 -204
- package/src/routes/relations.ts +0 -1227
- 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
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { cn } from '../utils.js'
|
|
2
|
-
|
|
3
|
-
function Skeleton({ className, ...props }: React.ComponentProps<'div'>) {
|
|
4
|
-
return (
|
|
5
|
-
<div
|
|
6
|
-
data-slot="skeleton"
|
|
7
|
-
className={cn('animate-pulse rounded-md bg-muted', className)}
|
|
8
|
-
{...props}
|
|
9
|
-
/>
|
|
10
|
-
)
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { Skeleton }
|
package/src/react/ui/slider.tsx
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Slider as SliderPrimitive } from '@base-ui/react/slider'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function Slider({
|
|
6
|
-
className,
|
|
7
|
-
...props
|
|
8
|
-
}: SliderPrimitive.Root.Props) {
|
|
9
|
-
return (
|
|
10
|
-
<SliderPrimitive.Root
|
|
11
|
-
data-slot="slider"
|
|
12
|
-
className={cn('relative flex w-full touch-none select-none items-center', className)}
|
|
13
|
-
{...props}
|
|
14
|
-
>
|
|
15
|
-
<SliderPrimitive.Control className="flex w-full items-center py-2">
|
|
16
|
-
<SliderPrimitive.Track
|
|
17
|
-
data-slot="slider-track"
|
|
18
|
-
className="relative h-1.5 w-full grow rounded-full bg-secondary"
|
|
19
|
-
>
|
|
20
|
-
<SliderPrimitive.Indicator
|
|
21
|
-
data-slot="slider-indicator"
|
|
22
|
-
className="absolute h-full rounded-full bg-primary"
|
|
23
|
-
/>
|
|
24
|
-
</SliderPrimitive.Track>
|
|
25
|
-
<SliderPrimitive.Thumb
|
|
26
|
-
data-slot="slider-thumb"
|
|
27
|
-
className="block size-4 rounded-full border border-primary/50 bg-background shadow-sm ring-ring transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50"
|
|
28
|
-
/>
|
|
29
|
-
</SliderPrimitive.Control>
|
|
30
|
-
</SliderPrimitive.Root>
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export { Slider }
|
package/src/react/ui/switch.tsx
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Switch as SwitchPrimitive } from '@base-ui/react/switch'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function Switch({
|
|
6
|
-
className,
|
|
7
|
-
...props
|
|
8
|
-
}: SwitchPrimitive.Root.Props) {
|
|
9
|
-
return (
|
|
10
|
-
<SwitchPrimitive.Root
|
|
11
|
-
data-slot="switch"
|
|
12
|
-
className={cn(
|
|
13
|
-
'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[checked]:bg-primary data-[unchecked]:bg-input dark:data-[unchecked]:bg-input/80',
|
|
14
|
-
className,
|
|
15
|
-
)}
|
|
16
|
-
{...props}
|
|
17
|
-
>
|
|
18
|
-
<SwitchPrimitive.Thumb
|
|
19
|
-
data-slot="switch-thumb"
|
|
20
|
-
className={cn(
|
|
21
|
-
'pointer-events-none block size-4 rounded-full bg-background ring-0 shadow-lg transition-transform data-[checked]:translate-x-4 data-[unchecked]:translate-x-0 dark:data-[checked]:bg-primary-foreground dark:data-[unchecked]:bg-foreground',
|
|
22
|
-
)}
|
|
23
|
-
/>
|
|
24
|
-
</SwitchPrimitive.Root>
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export { Switch }
|
package/src/react/ui/table.tsx
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function Table({ className, ...props }: React.ComponentProps<'table'>) {
|
|
6
|
-
return (
|
|
7
|
-
<div data-slot="table-container" className="relative w-full overflow-x-auto">
|
|
8
|
-
<table
|
|
9
|
-
data-slot="table"
|
|
10
|
-
className={cn('w-full caption-bottom text-sm', className)}
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
</div>
|
|
14
|
-
)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {
|
|
18
|
-
return (
|
|
19
|
-
<thead
|
|
20
|
-
data-slot="table-header"
|
|
21
|
-
className={cn('[&_tr]:border-b', className)}
|
|
22
|
-
{...props}
|
|
23
|
-
/>
|
|
24
|
-
)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {
|
|
28
|
-
return (
|
|
29
|
-
<tbody
|
|
30
|
-
data-slot="table-body"
|
|
31
|
-
className={cn('[&_tr:last-child]:border-0', className)}
|
|
32
|
-
{...props}
|
|
33
|
-
/>
|
|
34
|
-
)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {
|
|
38
|
-
return (
|
|
39
|
-
<tfoot
|
|
40
|
-
data-slot="table-footer"
|
|
41
|
-
className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)}
|
|
42
|
-
{...props}
|
|
43
|
-
/>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function TableRow({ className, ...props }: React.ComponentProps<'tr'>) {
|
|
48
|
-
return (
|
|
49
|
-
<tr
|
|
50
|
-
data-slot="table-row"
|
|
51
|
-
className={cn(
|
|
52
|
-
'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',
|
|
53
|
-
className,
|
|
54
|
-
)}
|
|
55
|
-
{...props}
|
|
56
|
-
/>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function TableHead({ className, ...props }: React.ComponentProps<'th'>) {
|
|
61
|
-
return (
|
|
62
|
-
<th
|
|
63
|
-
data-slot="table-head"
|
|
64
|
-
className={cn(
|
|
65
|
-
'text-muted-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
|
|
66
|
-
className,
|
|
67
|
-
)}
|
|
68
|
-
{...props}
|
|
69
|
-
/>
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function TableCell({ className, ...props }: React.ComponentProps<'td'>) {
|
|
74
|
-
return (
|
|
75
|
-
<td
|
|
76
|
-
data-slot="table-cell"
|
|
77
|
-
className={cn(
|
|
78
|
-
'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
|
|
79
|
-
className,
|
|
80
|
-
)}
|
|
81
|
-
{...props}
|
|
82
|
-
/>
|
|
83
|
-
)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {
|
|
87
|
-
return (
|
|
88
|
-
<caption
|
|
89
|
-
data-slot="table-caption"
|
|
90
|
-
className={cn('text-muted-foreground mt-4 text-sm', className)}
|
|
91
|
-
{...props}
|
|
92
|
-
/>
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export {
|
|
97
|
-
Table,
|
|
98
|
-
TableHeader,
|
|
99
|
-
TableBody,
|
|
100
|
-
TableFooter,
|
|
101
|
-
TableRow,
|
|
102
|
-
TableHead,
|
|
103
|
-
TableCell,
|
|
104
|
-
TableCaption,
|
|
105
|
-
}
|
package/src/react/ui/tabs.tsx
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Tabs as TabsPrimitive } from '@base-ui/react/tabs'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function Tabs({
|
|
6
|
-
className,
|
|
7
|
-
...props
|
|
8
|
-
}: TabsPrimitive.Root.Props) {
|
|
9
|
-
return (
|
|
10
|
-
<TabsPrimitive.Root
|
|
11
|
-
data-slot="tabs"
|
|
12
|
-
className={cn('flex flex-col gap-2', className)}
|
|
13
|
-
{...props}
|
|
14
|
-
/>
|
|
15
|
-
)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function TabsList({
|
|
19
|
-
className,
|
|
20
|
-
...props
|
|
21
|
-
}: TabsPrimitive.List.Props) {
|
|
22
|
-
return (
|
|
23
|
-
<TabsPrimitive.List
|
|
24
|
-
data-slot="tabs-list"
|
|
25
|
-
className={cn(
|
|
26
|
-
'relative inline-flex h-9 w-fit items-center justify-center rounded-lg bg-muted p-[3px] text-muted-foreground',
|
|
27
|
-
className,
|
|
28
|
-
)}
|
|
29
|
-
{...props}
|
|
30
|
-
/>
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function TabsTrigger({
|
|
35
|
-
className,
|
|
36
|
-
...props
|
|
37
|
-
}: TabsPrimitive.Tab.Props) {
|
|
38
|
-
return (
|
|
39
|
-
<TabsPrimitive.Tab
|
|
40
|
-
data-slot="tabs-trigger"
|
|
41
|
-
className={cn(
|
|
42
|
-
'relative z-10 inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-3 py-1 text-sm font-medium whitespace-nowrap text-muted-foreground transition-[color,background,box-shadow] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring data-[active]:bg-background data-[active]:text-foreground data-[active]:shadow-sm disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-4',
|
|
43
|
-
className,
|
|
44
|
-
)}
|
|
45
|
-
{...props}
|
|
46
|
-
/>
|
|
47
|
-
)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function TabsContent({
|
|
51
|
-
className,
|
|
52
|
-
...props
|
|
53
|
-
}: TabsPrimitive.Panel.Props) {
|
|
54
|
-
return (
|
|
55
|
-
<TabsPrimitive.Panel
|
|
56
|
-
data-slot="tabs-content"
|
|
57
|
-
className={cn('flex-1 outline-none', className)}
|
|
58
|
-
{...props}
|
|
59
|
-
/>
|
|
60
|
-
)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export { Tabs, TabsList, TabsTrigger, TabsContent }
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {
|
|
6
|
-
return (
|
|
7
|
-
<textarea
|
|
8
|
-
data-slot="textarea"
|
|
9
|
-
className={cn(
|
|
10
|
-
'flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 md:text-sm dark:bg-input/30',
|
|
11
|
-
className,
|
|
12
|
-
)}
|
|
13
|
-
{...props}
|
|
14
|
-
/>
|
|
15
|
-
)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export { Textarea }
|
package/src/react/ui/tooltip.tsx
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../utils.js'
|
|
4
|
-
|
|
5
|
-
function TooltipProvider({
|
|
6
|
-
delay = 0,
|
|
7
|
-
...props
|
|
8
|
-
}: TooltipPrimitive.Provider.Props) {
|
|
9
|
-
return (
|
|
10
|
-
<TooltipPrimitive.Provider
|
|
11
|
-
data-slot="tooltip-provider"
|
|
12
|
-
delay={delay}
|
|
13
|
-
{...props}
|
|
14
|
-
/>
|
|
15
|
-
)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function Tooltip({ ...props }: TooltipPrimitive.Root.Props) {
|
|
19
|
-
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {
|
|
23
|
-
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function TooltipContent({
|
|
27
|
-
className,
|
|
28
|
-
side = 'top',
|
|
29
|
-
sideOffset = 4,
|
|
30
|
-
align = 'center',
|
|
31
|
-
alignOffset = 0,
|
|
32
|
-
children,
|
|
33
|
-
...props
|
|
34
|
-
}: TooltipPrimitive.Popup.Props &
|
|
35
|
-
Pick<
|
|
36
|
-
TooltipPrimitive.Positioner.Props,
|
|
37
|
-
'align' | 'alignOffset' | 'side' | 'sideOffset'
|
|
38
|
-
>) {
|
|
39
|
-
return (
|
|
40
|
-
<TooltipPrimitive.Portal>
|
|
41
|
-
<TooltipPrimitive.Positioner
|
|
42
|
-
align={align}
|
|
43
|
-
alignOffset={alignOffset}
|
|
44
|
-
side={side}
|
|
45
|
-
sideOffset={sideOffset}
|
|
46
|
-
className="isolate z-50"
|
|
47
|
-
>
|
|
48
|
-
<TooltipPrimitive.Popup
|
|
49
|
-
data-slot="tooltip-content"
|
|
50
|
-
className={cn(
|
|
51
|
-
'z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
|
|
52
|
-
className
|
|
53
|
-
)}
|
|
54
|
-
{...props}
|
|
55
|
-
>
|
|
56
|
-
{children}
|
|
57
|
-
<TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-start-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-end-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" />
|
|
58
|
-
</TooltipPrimitive.Popup>
|
|
59
|
-
</TooltipPrimitive.Positioner>
|
|
60
|
-
</TooltipPrimitive.Portal>
|
|
61
|
-
)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react'
|
|
2
|
-
import type { CollabRoom } from './CollabRoomContext.js'
|
|
3
|
-
|
|
4
|
-
const SEED_ORIGIN = 'pilotiq-collab-seed'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Run `seedFn` exactly once after the collab room's first sync.
|
|
8
|
-
*
|
|
9
|
-
* Mirrors `@rudderjs/sync/react`'s `useCollabSeed` shape — same purpose,
|
|
10
|
-
* reimplemented here so pilotiq core stays free of any hard runtime dep
|
|
11
|
-
* on Yjs. The `room` parameter is pilotiq's opaque `CollabRoom`, so the
|
|
12
|
-
* seed callback receives `doc: unknown` and is responsible for its own
|
|
13
|
-
* share-type lookup (`doc.getXmlFragment(key)` for Tiptap consumers,
|
|
14
|
-
* `doc.getText(key)` for CodeMirror, etc.) and its own emptiness check.
|
|
15
|
-
*
|
|
16
|
-
* Returns `true` once the seed callback has run (or was skipped because
|
|
17
|
-
* the room has no `.synced` Promise — i.e. a legacy non-framework
|
|
18
|
-
* provider), so consumers can gate editor mount / placeholder swap.
|
|
19
|
-
*
|
|
20
|
-
* The hook wraps `seedFn` in `doc.transact(..., 'pilotiq-collab-seed')`
|
|
21
|
-
* so downstream observers can filter the synthetic write. Two peers
|
|
22
|
-
* mounting against a brand-new record may both see "empty" and both
|
|
23
|
-
* seed — same race window as the legacy `onProviderSynced` path; the
|
|
24
|
-
* fix is server-side seed handoff, deferred.
|
|
25
|
-
*/
|
|
26
|
-
export function useCollabSeed(
|
|
27
|
-
room: CollabRoom | null,
|
|
28
|
-
key: string,
|
|
29
|
-
seedFn: (doc: unknown) => void,
|
|
30
|
-
): boolean {
|
|
31
|
-
const [seeded, setSeeded] = useState(false)
|
|
32
|
-
const seedFnRef = useRef(seedFn)
|
|
33
|
-
seedFnRef.current = seedFn
|
|
34
|
-
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
if (!room) {
|
|
37
|
-
setSeeded(false)
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
// Legacy rooms without `.synced` — the room owner did its own first-
|
|
41
|
-
// sync gating (typically `onProviderSynced` inside `<RecordCollabRoom>`).
|
|
42
|
-
// Adapters that migrated to `useCollabSeed` still need the seedFn to
|
|
43
|
-
// run, otherwise an empty Y.XmlFragment never picks up the SSR-rendered
|
|
44
|
-
// `defaultValue` — and the editor's mount-time `onChange('')` clobbers
|
|
45
|
-
// the hidden FormData input. Run the seedFn immediately (treat as
|
|
46
|
-
// already-synced); the room owner's prior gating is assumed to have
|
|
47
|
-
// resolved by the time the React mount effect fires.
|
|
48
|
-
const syncedPromise = room.synced
|
|
49
|
-
if (!syncedPromise) {
|
|
50
|
-
try {
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
-
const ydoc = room.ydoc as any
|
|
53
|
-
if (ydoc && typeof ydoc.transact === 'function') {
|
|
54
|
-
ydoc.transact(() => seedFnRef.current(ydoc), SEED_ORIGIN)
|
|
55
|
-
} else {
|
|
56
|
-
seedFnRef.current(ydoc)
|
|
57
|
-
}
|
|
58
|
-
} catch { /* ignore — seed is best-effort */ }
|
|
59
|
-
setSeeded(true)
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let cancelled = false
|
|
64
|
-
syncedPromise.then(() => {
|
|
65
|
-
if (cancelled) return
|
|
66
|
-
try {
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
68
|
-
const ydoc = room.ydoc as any
|
|
69
|
-
if (ydoc && typeof ydoc.transact === 'function') {
|
|
70
|
-
ydoc.transact(() => seedFnRef.current(ydoc), SEED_ORIGIN)
|
|
71
|
-
} else {
|
|
72
|
-
seedFnRef.current(ydoc)
|
|
73
|
-
}
|
|
74
|
-
} catch { /* ignore — seed is best-effort */ }
|
|
75
|
-
setSeeded(true)
|
|
76
|
-
}).catch(() => {
|
|
77
|
-
// synced rejects when the room is torn down before first sync.
|
|
78
|
-
// Don't surface as a seed failure — the room is gone.
|
|
79
|
-
if (!cancelled) setSeeded(false)
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
return () => { cancelled = true }
|
|
83
|
-
}, [room, key])
|
|
84
|
-
|
|
85
|
-
return seeded
|
|
86
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Drag-resize a panel's width and persist the result to localStorage.
|
|
5
|
-
*
|
|
6
|
-
* Used by `RightSidebar` (Phase C) and the Tiptap custom-block side
|
|
7
|
-
* panel — both want a left-edge resize handle that grows the panel as
|
|
8
|
-
* the user drags toward the screen edge it docks against.
|
|
9
|
-
*
|
|
10
|
-
* @param storageKey Key under which the width persists. `null` opts out
|
|
11
|
-
* of persistence (still drag-resizable, just not
|
|
12
|
-
* remembered across mounts / reloads).
|
|
13
|
-
* @param min Minimum width in px. Defaults to 240.
|
|
14
|
-
* @param max Maximum width in px. Defaults to 800.
|
|
15
|
-
* @param defaultWidth Initial width when no value is stored. Defaults to 360.
|
|
16
|
-
* @param edge Which edge carries the handle. `'left'` (default) is
|
|
17
|
-
* for right-docked panels: dragging the left edge
|
|
18
|
-
* *outward* (leftward) grows the panel. `'right'` is
|
|
19
|
-
* for left-docked panels.
|
|
20
|
-
*
|
|
21
|
-
* Width writes happen on `pointerup` only (no Storage churn during drag).
|
|
22
|
-
*/
|
|
23
|
-
export interface UseResizableWidthOptions {
|
|
24
|
-
storageKey: string | null
|
|
25
|
-
min?: number
|
|
26
|
-
max?: number
|
|
27
|
-
defaultWidth?: number
|
|
28
|
-
edge?: 'left' | 'right'
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface UseResizableWidthApi {
|
|
32
|
-
width: number
|
|
33
|
-
setWidth: (px: number) => void
|
|
34
|
-
/** Attach to the resize-handle element's `onPointerDown`. */
|
|
35
|
-
onResizeStart: (e: React.PointerEvent<HTMLElement>) => void
|
|
36
|
-
resizing: boolean
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const DEFAULT_MIN = 240
|
|
40
|
-
const DEFAULT_MAX = 800
|
|
41
|
-
const DEFAULT_DEFAULT = 360
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Clamp a candidate width into `[min, max]`, falling back to `defaultWidth`
|
|
45
|
-
* when the value can't be coerced to a finite number. Exported so the
|
|
46
|
-
* resize hook and any test (or one-off seed-from-meta path) share the
|
|
47
|
-
* same sanitization logic.
|
|
48
|
-
*/
|
|
49
|
-
export function clampPanelWidth(
|
|
50
|
-
value: unknown,
|
|
51
|
-
opts: { min?: number; max?: number; defaultWidth?: number } = {},
|
|
52
|
-
): number {
|
|
53
|
-
const min = opts.min ?? DEFAULT_MIN
|
|
54
|
-
const max = opts.max ?? DEFAULT_MAX
|
|
55
|
-
const defaultWidth = opts.defaultWidth ?? DEFAULT_DEFAULT
|
|
56
|
-
// Explicit "no value" — null / undefined / empty-string land here from
|
|
57
|
-
// the localStorage round-trip and should fall back to the default
|
|
58
|
-
// rather than clamp upward via `Number(null) === 0` → MIN.
|
|
59
|
-
if (value === null || value === undefined || value === '') {
|
|
60
|
-
return Math.min(Math.max(defaultWidth, min), max)
|
|
61
|
-
}
|
|
62
|
-
const n = typeof value === 'number' ? value : Number(value)
|
|
63
|
-
if (!Number.isFinite(n)) return Math.min(Math.max(defaultWidth, min), max)
|
|
64
|
-
if (n < min) return min
|
|
65
|
-
if (n > max) return max
|
|
66
|
-
return n
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function readStoredWidth(
|
|
70
|
-
key: string | null,
|
|
71
|
-
opts: { min?: number; max?: number; defaultWidth?: number },
|
|
72
|
-
): number {
|
|
73
|
-
const fallback = clampPanelWidth(opts.defaultWidth, opts)
|
|
74
|
-
if (key === null) return fallback
|
|
75
|
-
if (typeof window === 'undefined') return fallback
|
|
76
|
-
try {
|
|
77
|
-
const raw = window.localStorage?.getItem(key)
|
|
78
|
-
if (raw === null || raw === undefined) return fallback
|
|
79
|
-
return clampPanelWidth(raw, opts)
|
|
80
|
-
} catch {
|
|
81
|
-
return fallback
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function useResizableWidth(opts: UseResizableWidthOptions): UseResizableWidthApi {
|
|
86
|
-
const min = opts.min ?? DEFAULT_MIN
|
|
87
|
-
const max = opts.max ?? DEFAULT_MAX
|
|
88
|
-
const defaultWidth = opts.defaultWidth ?? DEFAULT_DEFAULT
|
|
89
|
-
const edge = opts.edge ?? 'left'
|
|
90
|
-
|
|
91
|
-
const [width, setWidthState] = useState<number>(() =>
|
|
92
|
-
readStoredWidth(opts.storageKey, { min, max, defaultWidth }))
|
|
93
|
-
const [resizing, setResizing] = useState(false)
|
|
94
|
-
|
|
95
|
-
// Re-seed when the storage key changes (e.g. basePath flip on a
|
|
96
|
-
// multi-panel host). New key, fresh width.
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
setWidthState(readStoredWidth(opts.storageKey, { min, max, defaultWidth }))
|
|
99
|
-
// Intentionally exclude width — we only want this on storageKey flip.
|
|
100
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
-
}, [opts.storageKey])
|
|
102
|
-
|
|
103
|
-
const setWidth = useCallback((px: number): void => {
|
|
104
|
-
setWidthState(clampPanelWidth(px, { min, max, defaultWidth }))
|
|
105
|
-
}, [min, max, defaultWidth])
|
|
106
|
-
|
|
107
|
-
const onResizeStart = useCallback((e: React.PointerEvent<HTMLElement>): void => {
|
|
108
|
-
e.preventDefault()
|
|
109
|
-
const startX = e.clientX
|
|
110
|
-
const startWidth = width
|
|
111
|
-
setResizing(true)
|
|
112
|
-
const onMove = (ev: PointerEvent): void => {
|
|
113
|
-
const rawDelta = edge === 'left'
|
|
114
|
-
? startX - ev.clientX // left-edge handle on right-docked panel
|
|
115
|
-
: ev.clientX - startX // right-edge handle on left-docked panel
|
|
116
|
-
setWidthState(clampPanelWidth(startWidth + rawDelta, { min, max, defaultWidth }))
|
|
117
|
-
}
|
|
118
|
-
const onUp = (): void => {
|
|
119
|
-
document.removeEventListener('pointermove', onMove)
|
|
120
|
-
document.removeEventListener('pointerup', onUp)
|
|
121
|
-
setResizing(false)
|
|
122
|
-
// Persist once on pointer-up so we don't churn Storage during drag.
|
|
123
|
-
if (opts.storageKey === null) return
|
|
124
|
-
try {
|
|
125
|
-
// Read latest width via a setState callback — closure captured
|
|
126
|
-
// `startWidth` is stale by the time we reach pointerup.
|
|
127
|
-
setWidthState((w) => {
|
|
128
|
-
try { window.localStorage?.setItem(opts.storageKey!, String(w)) }
|
|
129
|
-
catch { /* private mode / quota — width still works in-session */ }
|
|
130
|
-
return w
|
|
131
|
-
})
|
|
132
|
-
} catch { /* SSR / no window */ }
|
|
133
|
-
}
|
|
134
|
-
document.addEventListener('pointermove', onMove)
|
|
135
|
-
document.addEventListener('pointerup', onUp)
|
|
136
|
-
}, [width, edge, min, max, defaultWidth, opts.storageKey])
|
|
137
|
-
|
|
138
|
-
return { width, setWidth, onResizeStart, resizing }
|
|
139
|
-
}
|
package/src/react/utils.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { describe, it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
registerWidgetRenderer,
|
|
6
|
-
getWidgetRenderer,
|
|
7
|
-
_resetWidgetRendererRegistryForTests,
|
|
8
|
-
} from './widgetRegistry.js'
|
|
9
|
-
|
|
10
|
-
const Stub: () => null = () => null
|
|
11
|
-
|
|
12
|
-
describe('widget renderer registry', () => {
|
|
13
|
-
it('returns undefined for unregistered types', () => {
|
|
14
|
-
_resetWidgetRendererRegistryForTests()
|
|
15
|
-
assert.equal(getWidgetRenderer('chart'), undefined)
|
|
16
|
-
assert.equal(getWidgetRenderer('made-up-type'), undefined)
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
it('registers and retrieves a renderer', () => {
|
|
20
|
-
_resetWidgetRendererRegistryForTests()
|
|
21
|
-
registerWidgetRenderer('chart', Stub)
|
|
22
|
-
assert.equal(getWidgetRenderer('chart'), Stub)
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it('overwrites on re-register (HMR-friendly)', () => {
|
|
26
|
-
_resetWidgetRendererRegistryForTests()
|
|
27
|
-
const a: () => null = () => null
|
|
28
|
-
const b: () => null = () => null
|
|
29
|
-
registerWidgetRenderer('chart', a)
|
|
30
|
-
registerWidgetRenderer('chart', b)
|
|
31
|
-
assert.equal(getWidgetRenderer('chart'), b)
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
it('keys per type — multiple renderers coexist', () => {
|
|
35
|
-
_resetWidgetRendererRegistryForTests()
|
|
36
|
-
const c: () => null = () => null
|
|
37
|
-
const t: () => null = () => null
|
|
38
|
-
registerWidgetRenderer('chart', c)
|
|
39
|
-
registerWidgetRenderer('table-widget', t)
|
|
40
|
-
assert.equal(getWidgetRenderer('chart'), c)
|
|
41
|
-
assert.equal(getWidgetRenderer('table-widget'), t)
|
|
42
|
-
})
|
|
43
|
-
})
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { ComponentType } from 'react'
|
|
2
|
-
import type { ElementMeta } from '../schema/Element.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Plan #15 Phase C — runtime registry for widget renderers (Chart,
|
|
6
|
-
* future Table-widget slim mode, etc.). Mirrors the field-renderer
|
|
7
|
-
* registry pattern so adapter packages can plug their renderer in
|
|
8
|
-
* without forcing pilotiq core to import their dependencies.
|
|
9
|
-
*
|
|
10
|
-
* Built-in widget types (`stats`, `view`) are dispatched directly inside
|
|
11
|
-
* SchemaRenderer's switch. Adapter-package widgets (`chart` from
|
|
12
|
-
* `@pilotiq/recharts`) register here and SchemaRenderer's default case
|
|
13
|
-
* consults the registry before falling through.
|
|
14
|
-
*
|
|
15
|
-
* Call once at app boot, client-side:
|
|
16
|
-
*
|
|
17
|
-
* import { registerChartRenderer } from '@pilotiq/recharts'
|
|
18
|
-
* registerChartRenderer()
|
|
19
|
-
*
|
|
20
|
-
* Without the boot call, SchemaRenderer surfaces a clear "package not
|
|
21
|
-
* registered" error at the call site rather than silently rendering
|
|
22
|
-
* nothing.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
export interface WidgetRendererProps {
|
|
26
|
-
meta: ElementMeta
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const renderers = new Map<string, ComponentType<WidgetRendererProps>>()
|
|
30
|
-
|
|
31
|
-
/** Register a renderer for a widget element `type`. Re-registering
|
|
32
|
-
* overwrites, which is convenient for HMR. */
|
|
33
|
-
export function registerWidgetRenderer(
|
|
34
|
-
type: string,
|
|
35
|
-
Component: ComponentType<WidgetRendererProps>,
|
|
36
|
-
): void {
|
|
37
|
-
renderers.set(type, Component)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Look up a registered renderer; `undefined` for unregistered types. */
|
|
41
|
-
export function getWidgetRenderer(
|
|
42
|
-
type: string,
|
|
43
|
-
): ComponentType<WidgetRendererProps> | undefined {
|
|
44
|
-
return renderers.get(type)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Test-only — clear the registry. Not part of the public surface. */
|
|
48
|
-
export function _resetWidgetRendererRegistryForTests(): void {
|
|
49
|
-
renderers.clear()
|
|
50
|
-
}
|