camox 0.44.0 → 0.46.0
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/dist/components/AuthGate.js +0 -6
- package/dist/components/DeviceSelector.js +96 -0
- package/dist/components/PlatformLabel.js +20 -24
- package/dist/core/components/lexical/HighlightNode.js +1 -1
- package/dist/core/components/lexical/InlineContentEditable.js +15 -19
- package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
- package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
- package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
- package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
- package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
- package/dist/core/components/lexical/TextLinkPopover.js +169 -180
- package/dist/core/createApp.d.ts +241 -312
- package/dist/core/createApp.js +123 -29
- package/dist/core/createBlock.d.ts +5 -5
- package/dist/core/createBlock.js +385 -152
- package/dist/core/createCollection.d.ts +55 -0
- package/dist/core/createCollection.js +93 -0
- package/dist/core/createLayout.d.ts +197 -61
- package/dist/core/createLayout.js +114 -56
- package/dist/core/defineDocument.d.ts +3 -5
- package/dist/core/derivedRoutes.js +49 -1
- package/dist/core/dom.d.ts +13 -4
- package/dist/core/dom.js +44 -1
- package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
- package/dist/core/editing/BlockEditingRuntime.js +6 -15
- package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
- package/dist/core/editing/createEditableBlock.d.ts +754 -633
- package/dist/core/editing/createEditableBlock.js +2113 -1066
- package/dist/core/editing/referenceWrites.js +51 -0
- package/dist/core/editing/useLatestRecord.js +90 -0
- package/dist/core/hooks/useArtifactHost.js +139 -0
- package/dist/core/hooks/useFieldSelection.js +43 -18
- package/dist/core/hooks/useIsEditable.js +12 -10
- package/dist/core/hooks/useOverlayMessage.js +15 -19
- package/dist/core/lib/artifact.d.ts +21 -0
- package/dist/core/lib/artifact.js +154 -0
- package/dist/core/lib/artifactColors.js +123 -0
- package/dist/core/lib/artifactData.d.ts +1 -0
- package/dist/core/lib/artifactData.js +131 -0
- package/dist/core/lib/artifactHost.js +205 -0
- package/dist/core/lib/artifactRuntime.js +36 -0
- package/dist/core/lib/artifactTheme.js +57 -0
- package/dist/core/lib/contentType.d.ts +302 -106
- package/dist/core/lib/contentType.js +201 -173
- package/dist/core/lib/fieldTypes.js +3 -0
- package/dist/core/lib/iconTypes.d.ts +3 -3
- package/dist/core/lib/icons.d.ts +4 -4
- package/dist/core/lib/icons.js +40 -44
- package/dist/core/lib/imagePlaceholder.js +177 -0
- package/dist/core/lib/imageTransform.js +1 -1
- package/dist/core/lib/lexicalReact.d.ts +3 -1
- package/dist/core/lib/lexicalState.js +1 -1
- package/dist/core/lib/previewPaused.js +9 -0
- package/dist/core/lib/recordScope.js +316 -0
- package/dist/core/lib/reference.d.ts +81 -0
- package/dist/core/lib/reference.js +29 -0
- package/dist/core/lib/textLinks.js +7 -5
- package/dist/core/lib/textStyles.d.ts +5 -7
- package/dist/core/lib/textStyles.js +2 -2
- package/dist/core/notFound.d.ts +7 -0
- package/dist/core/notFound.js +11 -0
- package/dist/core/pageDestinations.js +6 -3
- package/dist/core/recordItem.js +34 -0
- package/dist/core/requestContext.d.ts +26 -0
- package/dist/core/requestContext.js +20 -0
- package/dist/features/canvas/CamoxCanvas.js +1401 -0
- package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
- package/dist/features/canvas/CanvasOverlays.js +254 -0
- package/dist/features/canvas/CanvasPageEdge.js +87 -0
- package/dist/features/canvas/CanvasPageFrame.js +333 -0
- package/dist/features/canvas/CanvasPageHeader.js +125 -0
- package/dist/features/canvas/CanvasPreviewPageSlot.js +123 -0
- package/dist/features/canvas/DerivedPagePathInput.js +238 -0
- package/dist/features/canvas/canvasCamera.js +229 -0
- package/dist/features/canvas/canvasFlight.js +104 -0
- package/dist/features/canvas/canvasFrameCapture.js +364 -0
- package/dist/features/canvas/canvasFrameDocument.js +302 -0
- package/dist/features/canvas/canvasFrameMode.js +53 -0
- package/dist/features/canvas/canvasInsertionSeams.js +44 -0
- package/dist/features/canvas/canvasItems.js +30 -0
- package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
- package/dist/features/canvas/canvasPages.js +79 -0
- package/dist/features/canvas/canvasScreenSpace.js +26 -0
- package/dist/features/canvas/canvasSelection.js +18 -0
- package/dist/features/canvas/canvasStore.js +60 -0
- package/dist/features/canvas/canvasThumbnails.js +304 -0
- package/dist/features/canvas/canvasZoom.js +10 -0
- package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
- package/dist/features/canvas/sidebar/CanvasNavigator.js +124 -0
- package/dist/features/canvas/sidebar/CanvasSidebar.js +54 -0
- package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
- package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
- package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
- package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
- package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
- package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
- package/dist/features/canvas/sidebar/PageInspector.js +157 -0
- package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
- package/dist/features/canvas/sidebar/PageOverview.js +27 -0
- package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
- package/dist/features/canvas/useCanvasCamera.js +783 -0
- package/dist/features/canvas/useCanvasFrame.js +148 -0
- package/dist/features/canvas/useCanvasFrameInput.js +97 -0
- package/dist/features/canvas/useCanvasNearness.js +57 -0
- package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
- package/dist/features/content/CamoxContent.d.ts +2 -5
- package/dist/features/content/CamoxContent.js +174 -271
- package/dist/features/content/CollectionItemSheetContext.js +106 -0
- package/dist/features/content/ContentAssets.js +315 -0
- package/dist/features/content/ContentCollection.js +663 -0
- package/dist/features/content/collection-form.js +58 -0
- package/dist/features/content/components/AssetCard.js +80 -84
- package/dist/features/content/components/AssetCardSkeleton.js +4 -8
- package/dist/features/content/components/ContentSidebar.js +129 -18
- package/dist/features/content/components/ContentSidebarGroup.js +37 -0
- package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
- package/dist/features/content/components/MissingFromLocale.js +282 -0
- package/dist/features/content/components/UploadDropZone.js +27 -31
- package/dist/features/content/components/UploadProgressDrawer.js +90 -98
- package/dist/features/navigation/navigation.d.ts +66 -20
- package/dist/features/navigation/navigation.js +257 -90
- package/dist/features/og/defaultFonts.js +8 -8
- package/dist/features/og/geist-variable-ttf-base64.js +1 -1
- package/dist/features/og/imageResponse.d.ts +8 -0
- package/dist/features/og/imageResponse.js +26 -0
- package/dist/features/page/CuratedPageContent.js +167 -0
- package/dist/features/page/DerivedPageContent.js +26 -30
- package/dist/features/page/SharedLayoutContent.js +25 -27
- package/dist/features/preview/CamoxPreview.d.ts +23 -61
- package/dist/features/preview/CamoxPreview.js +816 -537
- package/dist/features/preview/EditablePageContent.js +1 -1
- package/dist/features/preview/EditablePageExperience.js +16 -22
- package/dist/features/preview/components/AddBlockSheet.js +273 -0
- package/dist/features/preview/components/AssetFieldEditor.js +173 -154
- package/dist/features/preview/components/AssetLightbox.js +181 -134
- package/dist/features/preview/components/AssetPickerModal.js +153 -170
- package/dist/features/preview/components/BlockActionsPopover.js +150 -149
- package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
- package/dist/features/preview/components/BlockThumbnail.js +172 -98
- package/dist/features/preview/components/CanvasPreview.js +243 -0
- package/dist/features/preview/components/CreatePageModal.js +128 -137
- package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
- package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
- package/dist/features/preview/components/DrillRow.js +150 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
- package/dist/features/preview/components/FieldToolbar.js +160 -110
- package/dist/features/preview/components/Frame.js +108 -20
- package/dist/features/preview/components/IconFieldEditor.js +62 -66
- package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
- package/dist/features/preview/components/LinkFieldEditor.js +135 -139
- package/dist/features/preview/components/Metadata.js +22 -30
- package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
- package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
- package/dist/features/preview/components/OverlayTracker.js +9 -41
- package/dist/features/preview/components/Overlays.js +81 -69
- package/dist/features/preview/components/PageInfo.js +1748 -0
- package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
- package/dist/features/preview/components/PageLocationFieldset.js +112 -116
- package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
- package/dist/features/preview/components/PageNicknameField.js +22 -26
- package/dist/features/preview/components/PagePicker.js +128 -130
- package/dist/features/preview/components/PageTree.js +525 -532
- package/dist/features/preview/components/PreviewActivation.js +28 -32
- package/dist/features/preview/components/PreviewPanel.js +620 -319
- package/dist/features/preview/components/PreviewToolbar.js +105 -333
- package/dist/features/preview/components/RecordCard.js +80 -0
- package/dist/features/preview/components/RecordCombobox.js +178 -0
- package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
- package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
- package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
- package/dist/features/preview/components/RepeatableItemsList.js +125 -138
- package/dist/features/preview/components/SelectionEditor.js +993 -0
- package/dist/features/preview/components/ShikiMarkdown.js +14 -18
- package/dist/features/preview/components/SidebarSection.js +52 -64
- package/dist/features/preview/components/StudioEditingFallback.js +56 -0
- package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
- package/dist/features/preview/components/blockGridNavigation.js +15 -0
- package/dist/features/preview/components/contentFieldSchema.js +8 -0
- package/dist/features/preview/components/useFieldWriter.js +200 -0
- package/dist/features/preview/components/useRecordView.js +383 -0
- package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
- package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
- package/dist/features/preview/editingFrame.js +197 -0
- package/dist/features/preview/overlayHighlights.js +17 -44
- package/dist/features/preview/overlayMessages.js +72 -1
- package/dist/features/preview/pageRecord.js +189 -0
- package/dist/features/preview/previewConstants.js +6 -2
- package/dist/features/preview/previewPageFrame.js +95 -0
- package/dist/features/preview/previewPreparation.js +7 -0
- package/dist/features/preview/previewSelection.js +32 -63
- package/dist/features/preview/previewStore.js +225 -123
- package/dist/features/preview/referencePickerFocus.js +29 -0
- package/dist/features/preview/repeatableItemTargets.js +56 -0
- package/dist/features/preview/selectionReveal.js +21 -0
- package/dist/features/preview/usePreviewViewportActions.js +114 -0
- package/dist/features/preview/viewportContinuity.js +109 -0
- package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
- package/dist/features/provider/CamoxProvider.d.ts +3 -6
- package/dist/features/provider/CamoxProvider.js +38 -50
- package/dist/features/provider/CoreCamoxProvider.js +69 -50
- package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
- package/dist/features/provider/PreviewSignInPage.js +54 -0
- package/dist/features/provider/components/CamoxAppContext.js +11 -11
- package/dist/features/provider/components/CommandPalette.js +75 -82
- package/dist/features/provider/useAdminShortcuts.js +7 -11
- package/dist/features/routes/pageRuntime.d.ts +44 -4
- package/dist/features/routes/pageRuntime.js +244 -137
- package/dist/features/runtime/RuntimeChrome.js +117 -115
- package/dist/features/runtime/alternates.js +64 -0
- package/dist/features/runtime/analytics.d.ts +7 -0
- package/dist/features/runtime/analytics.js +66 -0
- package/dist/features/runtime/artifactSources.js +87 -0
- package/dist/features/runtime/editingFallback.js +20 -0
- package/dist/features/runtime/linkPrefetch.js +97 -0
- package/dist/features/runtime/livePages.js +62 -0
- package/dist/features/runtime/llmsTxt.js +40 -0
- package/dist/features/runtime/loopbackFetch.js +18 -0
- package/dist/features/runtime/navigationAccessibility.js +51 -0
- package/dist/features/runtime/navigationTarget.js +23 -2
- package/dist/features/runtime/pageApp.js +229 -158
- package/dist/features/runtime/pageBlockTypes.js +20 -0
- package/dist/features/runtime/pageClient.d.ts +2 -4
- package/dist/features/runtime/pageClient.js +18 -3
- package/dist/features/runtime/pageNavigation.js +254 -32
- package/dist/features/runtime/pageServer.d.ts +2 -4
- package/dist/features/runtime/pageServer.js +6 -2
- package/dist/features/runtime/pageViewport.js +7 -0
- package/dist/features/runtime/runtime.d.ts +54 -24
- package/dist/features/runtime/runtime.js +766 -191
- package/dist/features/runtime/runtimeChromeLoader.js +58 -0
- package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
- package/dist/features/runtime/runtimeRoutes.js +25 -0
- package/dist/features/runtime/scrollRestoration.js +133 -0
- package/dist/features/runtime/studioApp.d.ts +4 -3
- package/dist/features/runtime/studioApp.js +5 -9
- package/dist/features/runtime/studioClient.d.ts +2 -4
- package/dist/features/runtime/studioClient.js +12 -3
- package/dist/features/runtime/studioServer.d.ts +2 -4
- package/dist/features/runtime/studioServer.js +6 -1
- package/dist/features/runtime/worker.d.ts +6 -0
- package/dist/features/runtime/worker.js +23 -0
- package/dist/features/runtime/workerRequest.js +44 -0
- package/dist/features/studio/CamoxStudio.d.ts +2 -6
- package/dist/features/studio/CamoxStudio.js +34 -49
- package/dist/features/studio/FollowAgentProvider.js +327 -0
- package/dist/features/studio/components/ChatSidebar.js +356 -0
- package/dist/features/studio/components/DraftsControl.js +676 -0
- package/dist/features/studio/components/FaviconDialog.js +318 -0
- package/dist/features/studio/components/LocalePicker.js +785 -0
- package/dist/features/studio/components/Navbar.js +123 -103
- package/dist/features/studio/components/ProjectMenu.js +239 -260
- package/dist/features/studio/components/RenameDraftDialog.js +206 -0
- package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
- package/dist/features/studio/components/ThreadComposer.js +157 -0
- package/dist/features/studio/components/ThreadMarkdown.js +113 -0
- package/dist/features/studio/components/ThreadMessages.js +270 -0
- package/dist/features/studio/components/UserButton.js +34 -23
- package/dist/features/studio/draftLabel.js +33 -0
- package/dist/features/studio/draftNotice.js +13 -0
- package/dist/features/studio/followAgent.js +241 -0
- package/dist/features/studio/followAgentContext.js +7 -0
- package/dist/features/studio/localeOptions.js +118 -0
- package/dist/features/studio/localeSwitch.js +19 -0
- package/dist/features/studio/routes.js +26 -1
- package/dist/features/studio/studioStore.js +64 -1
- package/dist/features/studio/useTheme.js +24 -27
- package/dist/features/vite/artifactRuntimeMinification.js +36 -0
- package/dist/features/vite/blockBoilerplate.js +6 -5
- package/dist/features/vite/blockChunks.js +31 -0
- package/dist/features/vite/bundlerLogs.js +17 -0
- package/dist/features/vite/definitionsSync.js +158 -226
- package/dist/features/vite/devAuthentication.js +4 -16
- package/dist/features/vite/devSignIn.js +87 -0
- package/dist/features/vite/iconGeneration.js +1 -1
- package/dist/features/vite/layoutGeneration.js +11 -1
- package/dist/features/vite/publishSeededContent.js +30 -0
- package/dist/features/vite/routeGeneration.js +6 -7
- package/dist/features/vite/runtimeDev.js +80 -99
- package/dist/features/vite/vite.d.ts +51 -31
- package/dist/features/vite/vite.js +224 -127
- package/dist/features/vite/workerBuild.js +39 -0
- package/dist/hooks/use-debounced-field.js +116 -47
- package/dist/hooks/use-file-upload.js +114 -67
- package/dist/hooks/use-marquee-selection.js +32 -36
- package/dist/hooks/use-page-destinations.js +69 -37
- package/dist/lib/api-client-server.d.ts +5 -0
- package/dist/lib/api-client-server.js +10 -4
- package/dist/lib/api-client.d.ts +6 -0
- package/dist/lib/api-client.js +51 -16
- package/dist/lib/api-socket.js +17 -0
- package/dist/lib/auth-page-styles.js +39 -0
- package/dist/lib/auth.js +129 -61
- package/dist/lib/collection-cache.js +23 -0
- package/dist/lib/draft-scope.d.ts +4 -0
- package/dist/lib/draft-scope.js +222 -0
- package/dist/lib/html.js +12 -0
- package/dist/lib/link-pages.js +154 -0
- package/dist/lib/locale-path.d.ts +22 -0
- package/dist/lib/locale-path.js +57 -0
- package/dist/lib/normalized-data.js +252 -152
- package/dist/lib/preview-handoff.js +2 -2
- package/dist/lib/queries.d.ts +11 -0
- package/dist/lib/queries.js +70 -141
- package/dist/lib/studio-reads.d.ts +14 -0
- package/dist/lib/studio-reads.js +554 -0
- package/dist/lib/use-project-room.js +50 -50
- package/dist/lib/use-thread.js +310 -0
- package/dist/lib/utils.js +25 -29
- package/dist/lib/view-locale-context.js +22 -0
- package/dist/lib/view-locale.js +46 -0
- package/dist/package.js +5 -0
- package/dist/studio-overlays.css +41 -151
- package/dist/studio.css +2 -2
- package/package.json +70 -73
- package/skills/camox/SKILL.md +16 -11
- package/skills/camox/references/artifacts.md +179 -0
- package/skills/camox/references/block-definitions.md +75 -59
- package/skills/camox/references/cli-common.md +9 -11
- package/skills/camox/references/cli-content.md +92 -69
- package/skills/camox/references/cli-publishing.md +26 -0
- package/skills/camox/references/dom-integrations.md +27 -0
- package/skills/camox/references/field-styling.md +4 -4
- package/skills/camox/references/layout-definitions.md +16 -14
- package/skills/camox/references/localization.md +56 -0
- package/skills/camox/references/routed-layouts.md +133 -15
- package/skills/camox-expand/SKILL.md +70 -0
- package/skills/camox-expand/references/jobs.md +39 -0
- package/skills/camoxify/SKILL.md +29 -7
- package/dist/core/components/AddBlockControlBar.js +0 -78
- package/dist/core/hooks/useRequireDraftSource.js +0 -23
- package/dist/features/metadata/sitemap.d.ts +0 -8
- package/dist/features/metadata/sitemap.js +0 -17
- package/dist/features/og/imageResponse.node.d.ts +0 -12
- package/dist/features/og/imageResponse.node.js +0 -49
- package/dist/features/og/imageResponse.workerd.d.ts +0 -12
- package/dist/features/og/imageResponse.workerd.js +0 -40
- package/dist/features/page/PublishedPageContent.js +0 -205
- package/dist/features/page/PublishedPageExperience.js +0 -23
- package/dist/features/preview/DerivedPreview.js +0 -134
- package/dist/features/preview/commentsEnabled.js +0 -8
- package/dist/features/preview/components/AddBlockSidebar.js +0 -381
- package/dist/features/preview/components/AttachedComments.js +0 -331
- package/dist/features/preview/components/CommentHeader.js +0 -122
- package/dist/features/preview/components/CommentSidebar.js +0 -29
- package/dist/features/preview/components/CommentTargetQuote.js +0 -167
- package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
- package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
- package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
- package/dist/features/preview/components/LeftSidebar.js +0 -68
- package/dist/features/preview/components/PageEditorSidebar.js +0 -563
- package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
- package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
- package/dist/features/preview/components/PageStatusBadge.js +0 -97
- package/dist/features/preview/components/PeekedBlock.js +0 -217
- package/dist/features/preview/components/PreviewComments.js +0 -56
- package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
- package/dist/features/preview/components/PublicationRow.js +0 -422
- package/dist/features/preview/components/PublishDialog.js +0 -194
- package/dist/features/preview/components/RightSidebar.js +0 -59
- package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
- package/dist/features/preview/previewCommentsStore.js +0 -135
- package/dist/features/preview/publication.js +0 -81
- package/dist/features/preview/usePageComments.js +0 -39
- package/dist/features/runtime/SharedChromeContext.js +0 -7
- package/dist/features/studio/components/EnvironmentMenu.js +0 -425
- package/dist/features/vite/appGeneration.js +0 -89
- package/dist/lib/view-queries.js +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
- package/skills/camox/references/cli-environments.md +0 -37
|
@@ -1,20 +1,48 @@
|
|
|
1
|
+
import { Collection } from "../createCollection.js";
|
|
1
2
|
import { IconId, IconValue } from "./iconTypes.js";
|
|
2
|
-
import
|
|
3
|
-
import { Static, TArray, TObject, TSchema, TUnsafe } from "@sinclair/typebox";
|
|
4
|
-
|
|
3
|
+
import { SystemOrderKey } from "@camox/api-contract";
|
|
4
|
+
import { Static, TArray, TBoolean, TObject, TSchema, TUnsafe } from "@sinclair/typebox";
|
|
5
5
|
//#region src/core/lib/contentType.d.ts
|
|
6
|
-
declare
|
|
6
|
+
export declare const ReferenceContentBrand: unique symbol;
|
|
7
|
+
export type ReferenceSchema<T extends Record<string, TSchema>> = TUnsafe<string | null> & {
|
|
8
|
+
readonly [ReferenceContentBrand]: T;
|
|
9
|
+
fieldType: "Reference";
|
|
10
|
+
};
|
|
11
|
+
export type ReferenceListSchema<T extends Record<string, TSchema>> = TUnsafe<string[]> & {
|
|
12
|
+
readonly [ReferenceContentBrand]: T;
|
|
13
|
+
fieldType: "ReferenceList";
|
|
14
|
+
};
|
|
15
|
+
/** The keys a query can order a collection's records by: its text fields and system metadata. */
|
|
16
|
+
export type OrderableKeys<T extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends {
|
|
17
|
+
fieldType: "String";
|
|
18
|
+
} ? K : never; }[keyof T & string] | SystemOrderKey;
|
|
19
|
+
/** A single-key ordering: `{ title: "asc" }`. */
|
|
20
|
+
export type QueryOrderBy<K extends string> = { [P in K]: { [Q in P]: "asc" | "desc"; } & { [Q in Exclude<K, P>]?: never; }; }[K];
|
|
21
|
+
type Range<N extends number, Acc extends number[] = []> = Acc["length"] extends N ? Acc[number] : Range<N, [...Acc, Acc["length"]]>;
|
|
22
|
+
/** 1 to 100: literal limits outside it are rejected; computed `number` limits are checked on sync. */
|
|
23
|
+
type QueryLimit = Exclude<Range<101>, 0>;
|
|
24
|
+
export type ValidQueryLimit<L extends number> = number extends L ? number : L extends QueryLimit ? L : never;
|
|
25
|
+
/**
|
|
26
|
+
* Defines a query-backed list's membership and order in code: optionally one ordering key and a
|
|
27
|
+
* limit (at most, and by default, 100 records). Live pages list published records ordered by
|
|
28
|
+
* their published content; the preview lists drafts too. Ties break by record id.
|
|
29
|
+
*/
|
|
30
|
+
export type ReferenceQuery<T extends Record<string, TSchema>, L extends number = number> = {
|
|
31
|
+
orderBy?: QueryOrderBy<OrderableKeys<T>>;
|
|
32
|
+
limit?: L & ValidQueryLimit<L>;
|
|
33
|
+
};
|
|
34
|
+
export declare class FieldToken {
|
|
7
35
|
readonly fieldName: string;
|
|
8
36
|
constructor(fieldName: string);
|
|
9
37
|
toString(): string;
|
|
10
38
|
}
|
|
11
|
-
type SettingsScope = "block" | "item";
|
|
39
|
+
export type SettingsScope = "block" | "item";
|
|
12
40
|
/**
|
|
13
41
|
* Serializable conditional block produced by the settings proxy. Emits Handlebars-style
|
|
14
42
|
* `{{#if ...}}...{{/if}}` syntax wrapping each child line, tagged with its scope so the
|
|
15
43
|
* server-side resolver knows whether to read from `settings` or `itemSettings`.
|
|
16
44
|
*/
|
|
17
|
-
declare class Conditional {
|
|
45
|
+
export declare class Conditional {
|
|
18
46
|
readonly scope: SettingsScope;
|
|
19
47
|
readonly settingName: string;
|
|
20
48
|
readonly enumValue: string | null;
|
|
@@ -23,27 +51,31 @@ declare class Conditional {
|
|
|
23
51
|
get openTag(): string;
|
|
24
52
|
get closeTag(): string;
|
|
25
53
|
}
|
|
26
|
-
type ConditionalChild = string | FieldToken | Conditional;
|
|
27
|
-
type ConditionalLines = ConditionalChild | ReadonlyArray<ConditionalChild>;
|
|
28
|
-
type ContentProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: string & FieldToken };
|
|
54
|
+
export type ConditionalChild = string | FieldToken | Conditional;
|
|
55
|
+
export type ConditionalLines = ConditionalChild | ReadonlyArray<ConditionalChild>;
|
|
56
|
+
export type ContentProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: TShape[K] extends ReferenceSchema<infer T> ? ContentProxy<T> : string & FieldToken; };
|
|
29
57
|
/**
|
|
30
58
|
* Callable shape for one entry on the settings proxy. Booleans take a single `lines`
|
|
31
59
|
* argument; enums take `(value, lines)`. Settings of other shapes are disallowed — they
|
|
32
60
|
* don't make sense as conditions.
|
|
33
61
|
*/
|
|
34
62
|
type SettingCallable<T extends TSchema> = Static<T> extends boolean ? (lines: ConditionalLines) => Conditional : Static<T> extends string ? (value: Static<T>, lines: ConditionalLines) => Conditional : never;
|
|
35
|
-
type SettingsProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: SettingCallable<TShape[K]
|
|
36
|
-
type ToMarkdownBuilder<TContent extends Record<string, TSchema>, TSettings extends Record<string, TSchema> = Record<string, never>> = (c: ContentProxy<TContent>, s: SettingsProxy<TSettings>) => ReadonlyArray<string | FieldToken | Conditional>;
|
|
63
|
+
export type SettingsProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: SettingCallable<TShape[K]>; };
|
|
64
|
+
export type ToMarkdownBuilder<TContent extends Record<string, TSchema>, TSettings extends Record<string, TSchema> = Record<string, never>> = (c: ContentProxy<TContent>, s: SettingsProxy<TSettings>) => ReadonlyArray<string | FieldToken | Conditional>;
|
|
37
65
|
declare const EmbedURLBrand: unique symbol;
|
|
38
|
-
type EmbedURL = string & {
|
|
66
|
+
export type EmbedURL = string & {
|
|
39
67
|
readonly [EmbedURLBrand]: true;
|
|
40
68
|
};
|
|
41
|
-
declare const
|
|
42
|
-
type
|
|
69
|
+
declare const ArtifactSourceBrand: unique symbol;
|
|
70
|
+
export type ArtifactSource = string & {
|
|
71
|
+
readonly [ArtifactSourceBrand]: true;
|
|
72
|
+
};
|
|
73
|
+
export declare const ItemSettingsBrand: unique symbol;
|
|
74
|
+
export type WithItemSettings<S extends Record<string, TSchema>> = {
|
|
43
75
|
readonly [ItemSettingsBrand]?: S;
|
|
44
76
|
};
|
|
45
77
|
declare const LinkBrand: unique symbol;
|
|
46
|
-
type LinkValue = ({
|
|
78
|
+
export type LinkValue = ({
|
|
47
79
|
type: "external";
|
|
48
80
|
href: string;
|
|
49
81
|
} | {
|
|
@@ -55,7 +87,7 @@ type LinkValue = ({
|
|
|
55
87
|
} & {
|
|
56
88
|
readonly [LinkBrand]: true;
|
|
57
89
|
};
|
|
58
|
-
type ImageValue = {
|
|
90
|
+
export type ImageValue = {
|
|
59
91
|
url: string;
|
|
60
92
|
alt: string;
|
|
61
93
|
filename: string;
|
|
@@ -65,7 +97,7 @@ type ImageValue = {
|
|
|
65
97
|
} & {
|
|
66
98
|
readonly __brand: "ImageValue";
|
|
67
99
|
};
|
|
68
|
-
type FileValue = {
|
|
100
|
+
export type FileValue = {
|
|
69
101
|
url: string;
|
|
70
102
|
alt: string;
|
|
71
103
|
filename: string;
|
|
@@ -75,155 +107,319 @@ type FileValue = {
|
|
|
75
107
|
} & {
|
|
76
108
|
readonly __brand: "FileValue";
|
|
77
109
|
};
|
|
110
|
+
export type StringField = TUnsafe<string> & {
|
|
111
|
+
fieldType: "String";
|
|
112
|
+
};
|
|
113
|
+
export type LinkField = TUnsafe<LinkValue>;
|
|
114
|
+
export type ImageField = TUnsafe<ImageValue>;
|
|
115
|
+
export type ImageListField = TArray<TUnsafe<ImageValue>>;
|
|
116
|
+
export type FileField = TUnsafe<FileValue>;
|
|
117
|
+
export type FileListField = TArray<TUnsafe<FileValue>>;
|
|
118
|
+
export type EmbedField = TUnsafe<EmbedURL>;
|
|
119
|
+
declare const ArtifactDataBrand: unique symbol;
|
|
120
|
+
/** An artifact field; `D` carries the names of its Artifact Data at the type level only. */
|
|
121
|
+
export type ArtifactField<D extends string = string> = TUnsafe<ArtifactSource> & {
|
|
122
|
+
fieldType: "Artifact";
|
|
123
|
+
readonly [ArtifactDataBrand]?: D;
|
|
124
|
+
};
|
|
125
|
+
export type IconField = TUnsafe<IconValue>;
|
|
126
|
+
export type RepeaterField<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = TArray<TObject<T>> & WithItemSettings<S>;
|
|
127
|
+
export type EnumSetting<O extends Record<string, string>> = TUnsafe<keyof O & string> & {
|
|
128
|
+
fieldType: "Enum";
|
|
129
|
+
};
|
|
130
|
+
export type BooleanSetting = TBoolean & {
|
|
131
|
+
fieldType: "Boolean";
|
|
132
|
+
};
|
|
133
|
+
type StringOptions = {
|
|
134
|
+
title?: string;
|
|
135
|
+
maxLength?: number;
|
|
136
|
+
minLength?: number;
|
|
137
|
+
pattern?: string;
|
|
138
|
+
};
|
|
78
139
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
140
|
+
* Builds the fields of a block or repeatable item's content.
|
|
141
|
+
* `enum` and `boolean` are not content: declare them in `settings` instead.
|
|
81
142
|
*/
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
143
|
+
export interface ContentFieldBuilder {
|
|
144
|
+
/**
|
|
145
|
+
* An inline-editable text field.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* field.string({ default: "Hello", maxLength: 100, title: "Title" })
|
|
149
|
+
*/
|
|
150
|
+
string: (options: StringOptions & {
|
|
151
|
+
default: string;
|
|
152
|
+
}) => StringField;
|
|
153
|
+
/**
|
|
154
|
+
* A link with text, a target (external URL or internal page) and a new-tab flag.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* field.link({ default: { text: "Learn more", href: "/", newTab: false }, title: "CTA" })
|
|
158
|
+
*/
|
|
159
|
+
link: (options: {
|
|
160
|
+
default: {
|
|
161
|
+
text: string;
|
|
162
|
+
href: string;
|
|
163
|
+
newTab: boolean;
|
|
164
|
+
};
|
|
85
165
|
title?: string;
|
|
86
|
-
}) =>
|
|
166
|
+
}) => LinkField;
|
|
87
167
|
/**
|
|
88
|
-
*
|
|
168
|
+
* An image asset.
|
|
89
169
|
*
|
|
90
170
|
* @example
|
|
91
|
-
*
|
|
92
|
-
* Type.String({ default: 'Hello', maxLength: 100, title: 'Title' })
|
|
171
|
+
* field.image({ title: "Hero" })
|
|
93
172
|
*/
|
|
94
|
-
|
|
173
|
+
image: (options?: {
|
|
174
|
+
title?: string;
|
|
175
|
+
required?: boolean;
|
|
176
|
+
}) => ImageField;
|
|
177
|
+
/**
|
|
178
|
+
* A list of image assets.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* field.imageList({ title: "Gallery", defaultItems: 3 })
|
|
182
|
+
*/
|
|
183
|
+
imageList: (options?: {
|
|
184
|
+
title?: string;
|
|
185
|
+
defaultItems?: number;
|
|
186
|
+
}) => ImageListField;
|
|
187
|
+
/**
|
|
188
|
+
* A file asset.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* field.file({ accept: ["application/pdf"], title: "Datasheet" })
|
|
192
|
+
*/
|
|
193
|
+
file: (options: {
|
|
194
|
+
accept: string[];
|
|
195
|
+
title?: string;
|
|
196
|
+
required?: boolean;
|
|
197
|
+
}) => FileField;
|
|
198
|
+
/**
|
|
199
|
+
* A list of file assets.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* field.fileList({ accept: ["application/pdf"], title: "Attachments" })
|
|
203
|
+
*/
|
|
204
|
+
fileList: (options: {
|
|
205
|
+
accept: string[];
|
|
206
|
+
title?: string;
|
|
207
|
+
defaultItems?: number;
|
|
208
|
+
}) => FileListField;
|
|
209
|
+
/**
|
|
210
|
+
* A URL that must match `pattern`, rendered as an embed.
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* field.embed({
|
|
214
|
+
* pattern: "https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+",
|
|
215
|
+
* default: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
216
|
+
* title: "YouTube URL",
|
|
217
|
+
* })
|
|
218
|
+
*/
|
|
219
|
+
embed: (options: {
|
|
220
|
+
pattern: string;
|
|
95
221
|
default: string;
|
|
96
222
|
title?: string;
|
|
97
|
-
|
|
98
|
-
minLength?: number;
|
|
99
|
-
pattern?: string;
|
|
100
|
-
}) => TUnsafe<string>;
|
|
223
|
+
}) => EmbedField;
|
|
101
224
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
225
|
+
* A self-contained web page, usually written by an agent, rendered in a sandboxed frame.
|
|
226
|
+
* `size: "fill"` fills a container whose size you control; `size: "content"` follows the
|
|
227
|
+
* page's height. The source is optional: an empty artifact renders nothing on the website.
|
|
104
228
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
|
|
229
|
+
* @example
|
|
230
|
+
* field.artifact({ size: "fill", title: "Hero visual" })
|
|
231
|
+
*/
|
|
232
|
+
artifact: <const D extends string = never>(options: {
|
|
233
|
+
size: "fill" | "content";
|
|
234
|
+
/**
|
|
235
|
+
* Sibling content fields and settings shared with the artifact as Artifact Data. Inside a
|
|
236
|
+
* repeater, the siblings are the item's own fields and settings.
|
|
237
|
+
*/
|
|
238
|
+
data?: readonly D[];
|
|
239
|
+
default?: string;
|
|
240
|
+
title?: string;
|
|
241
|
+
}) => ArtifactField<NoInfer<D>>;
|
|
242
|
+
/**
|
|
243
|
+
* An icon from the set configured in `camox()`.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* field.icon({ default: "lucide:star", title: "Icon" })
|
|
247
|
+
*/
|
|
248
|
+
icon: (options: {
|
|
249
|
+
default: IconId;
|
|
250
|
+
title?: string;
|
|
251
|
+
}) => IconField;
|
|
252
|
+
/**
|
|
253
|
+
* Selects a record of `collection` by identity; its content is resolved independently.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* field.reference(customers, { title: "Customer" })
|
|
257
|
+
*/
|
|
258
|
+
reference: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
|
|
259
|
+
title?: string;
|
|
260
|
+
required?: boolean;
|
|
261
|
+
}) => ReferenceSchema<T>;
|
|
262
|
+
/**
|
|
263
|
+
* An ordered list of distinct records of `collection`; each resolves independently.
|
|
264
|
+
* An empty list is always valid, so there is no `required` or `minItems`.
|
|
265
|
+
* `toMarkdown` renders each linked record (one list item per record, in stored order);
|
|
266
|
+
* the block's own `toMarkdown` includes the whole list through its token.
|
|
267
|
+
*
|
|
268
|
+
* With `query`, the list is query-backed: code defines its membership and order, editors
|
|
269
|
+
* cannot pick, remove or reorder records, and nothing is stored on the block.
|
|
108
270
|
*
|
|
109
271
|
* @example
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
272
|
+
* field.referenceList(customers, { maxItems: 6, toMarkdown: (c) => [c.name] })
|
|
273
|
+
* field.referenceList(articles, { query: { orderBy: { publishedAt: "desc" }, limit: 3 } })
|
|
274
|
+
*/
|
|
275
|
+
referenceList: <T extends Record<string, TSchema>, const L extends number = number>(collection: Collection<T>, options?: {
|
|
276
|
+
title?: string;
|
|
277
|
+
description?: string;
|
|
278
|
+
maxItems?: number;
|
|
279
|
+
query?: ReferenceQuery<T, L>;
|
|
280
|
+
toMarkdown?: ToMarkdownBuilder<T>;
|
|
281
|
+
}) => ReferenceListSchema<T>;
|
|
282
|
+
/**
|
|
283
|
+
* Repeatable items, each with its own content and optional settings. Repeaters may nest.
|
|
284
|
+
* Item settings are edited in the sidebar when the item is selected.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* field.repeater({
|
|
288
|
+
* content: (field) => ({
|
|
289
|
+
* title: field.string({ default: "Item" }),
|
|
290
|
+
* description: field.string({ default: "Description" }),
|
|
291
|
+
* }),
|
|
292
|
+
* settings: (setting) => ({
|
|
293
|
+
* highlighted: setting.boolean({ default: false, title: "Highlighted" }),
|
|
294
|
+
* }),
|
|
118
295
|
* minItems: 1,
|
|
119
296
|
* maxItems: 10,
|
|
120
|
-
* title:
|
|
121
|
-
* toMarkdown: (c) => [`### ${c.title}`, c.description],
|
|
297
|
+
* title: "Items",
|
|
298
|
+
* toMarkdown: (c, s) => [`### ${c.title}`, s.highlighted(c.description)],
|
|
122
299
|
* })
|
|
123
300
|
*/
|
|
124
|
-
|
|
125
|
-
content: T
|
|
126
|
-
settings?: S;
|
|
301
|
+
repeater: <T extends Record<string, TSchema>, S extends Record<string, TSchema> = Record<string, never>>(options: {
|
|
302
|
+
content: (field: ContentFieldBuilder) => T & NoInfer<ArtifactDataCheck<T, S>>;
|
|
303
|
+
settings?: (setting: SettingBuilder) => S;
|
|
127
304
|
minItems: number;
|
|
128
305
|
maxItems: number;
|
|
129
306
|
title?: string;
|
|
130
307
|
toMarkdown: ToMarkdownBuilder<T, S>;
|
|
131
|
-
}) =>
|
|
308
|
+
}) => RepeaterField<T, S>;
|
|
309
|
+
}
|
|
310
|
+
/** Content fields that can't be Artifact Data: artifact sources, repeaters and references. */
|
|
311
|
+
type UnsharedField = {
|
|
312
|
+
fieldType: "Artifact" | "Reference" | "ReferenceList";
|
|
313
|
+
} | TArray<TObject<any>>;
|
|
314
|
+
/** The sibling names an artifact can list in `data`: shared content fields, then settings. */
|
|
315
|
+
export type ArtifactDataName<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends UnsharedField ? never : K; }[keyof T & string] | (string extends keyof S ? never : keyof S & string);
|
|
316
|
+
/**
|
|
317
|
+
* Checks each artifact's `data` against its siblings. Applied to the `content` callback's return
|
|
318
|
+
* type, because callback parameters are context-sensitive (ADR 0001).
|
|
319
|
+
*/
|
|
320
|
+
export type ArtifactDataCheck<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = true extends HasAnyField<T> ? unknown : { [K in ArtifactKey<T>]: ArtifactField<ArtifactDataName<T, S>>; };
|
|
321
|
+
/** Shapes with fields that already fail to type check (`any`) are left to that error. */
|
|
322
|
+
type HasAnyField<T extends Record<string, TSchema>> = { [K in keyof T]-?: 0 extends 1 & T[K] ? true : false; }[keyof T];
|
|
323
|
+
type ArtifactKey<T extends Record<string, TSchema>> = { [K in keyof T & string]-?: T[K] extends {
|
|
324
|
+
fieldType: "Artifact";
|
|
325
|
+
} ? K : never; }[keyof T & string];
|
|
326
|
+
/**
|
|
327
|
+
* Builds the settings of a block or repeatable item: presentation options edited in the
|
|
328
|
+
* sidebar, never inline. Only `enum` and `boolean` are settings.
|
|
329
|
+
*/
|
|
330
|
+
export interface SettingBuilder {
|
|
132
331
|
/**
|
|
133
|
-
*
|
|
332
|
+
* One of a fixed set of options; keys are stored, values are editor labels.
|
|
134
333
|
*
|
|
135
334
|
* @example
|
|
136
|
-
*
|
|
137
|
-
* default: 'left',
|
|
138
|
-
* options: { left: 'Left', center: 'Center', right: 'Right' },
|
|
139
|
-
* title: 'Alignment'
|
|
140
|
-
* })
|
|
335
|
+
* setting.enum({ default: "left", options: { left: "Left", right: "Right" }, title: "Alignment" })
|
|
141
336
|
*/
|
|
142
|
-
|
|
337
|
+
enum: <const O extends Record<string, string>>(options: {
|
|
143
338
|
default: keyof O & string;
|
|
144
339
|
options: O;
|
|
145
340
|
title?: string;
|
|
146
|
-
}) =>
|
|
341
|
+
}) => EnumSetting<O>;
|
|
147
342
|
/**
|
|
148
|
-
*
|
|
343
|
+
* A toggle.
|
|
149
344
|
*
|
|
150
345
|
* @example
|
|
151
|
-
*
|
|
346
|
+
* setting.boolean({ default: false, title: "Show background" })
|
|
152
347
|
*/
|
|
153
|
-
|
|
348
|
+
boolean: (options: {
|
|
154
349
|
default: boolean;
|
|
155
350
|
title?: string;
|
|
156
|
-
}) =>
|
|
351
|
+
}) => BooleanSetting;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Builds the fields of a collection record. Records are created through an authoring form, so
|
|
355
|
+
* `string` needs no default. Collections have no settings: `enum` and `boolean` are content here.
|
|
356
|
+
*/
|
|
357
|
+
export interface CollectionFieldBuilder extends Pick<ContentFieldBuilder, "imageList" | "fileList" | "embed"> {
|
|
157
358
|
/**
|
|
158
|
-
*
|
|
359
|
+
* An image asset. Never required: collection fields can't be (the API rejects it).
|
|
159
360
|
*
|
|
160
361
|
* @example
|
|
161
|
-
*
|
|
162
|
-
* pattern: 'https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+',
|
|
163
|
-
* default: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
|
|
164
|
-
* title: 'YouTube URL'
|
|
165
|
-
* })
|
|
362
|
+
* field.image({ title: "Cover" })
|
|
166
363
|
*/
|
|
167
|
-
|
|
168
|
-
pattern: string;
|
|
169
|
-
default: string;
|
|
364
|
+
image: (options?: {
|
|
170
365
|
title?: string;
|
|
171
|
-
}) =>
|
|
366
|
+
}) => ImageField;
|
|
172
367
|
/**
|
|
173
|
-
*
|
|
174
|
-
* Supports both external URLs and internal page links.
|
|
368
|
+
* A file asset. Never required: collection fields can't be (the API rejects it).
|
|
175
369
|
*
|
|
176
370
|
* @example
|
|
177
|
-
*
|
|
371
|
+
* field.file({ accept: ["application/pdf"], title: "Brochure" })
|
|
178
372
|
*/
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
text: string;
|
|
182
|
-
href: string;
|
|
183
|
-
newTab: boolean;
|
|
184
|
-
};
|
|
373
|
+
file: (options: {
|
|
374
|
+
accept: string[];
|
|
185
375
|
title?: string;
|
|
186
|
-
}) =>
|
|
376
|
+
}) => FileField;
|
|
187
377
|
/**
|
|
188
|
-
*
|
|
378
|
+
* An ordered list of distinct records of another collection, e.g. an article's co-authors.
|
|
379
|
+
* Collections hold manual lists only: a query would fan out across a whole collection.
|
|
189
380
|
*
|
|
190
381
|
* @example
|
|
191
|
-
*
|
|
382
|
+
* field.referenceList(authors, { title: "Co-authors" })
|
|
192
383
|
*/
|
|
193
|
-
|
|
384
|
+
referenceList: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
|
|
194
385
|
title?: string;
|
|
195
|
-
|
|
386
|
+
description?: string;
|
|
387
|
+
maxItems?: number;
|
|
388
|
+
toMarkdown?: ToMarkdownBuilder<T>;
|
|
389
|
+
}) => ReferenceListSchema<T>;
|
|
196
390
|
/**
|
|
197
|
-
*
|
|
391
|
+
* Selects a record of another collection by identity, e.g. an article's author. Never
|
|
392
|
+
* required: an unpublished record resolves empty on the live site.
|
|
198
393
|
*
|
|
199
394
|
* @example
|
|
200
|
-
*
|
|
395
|
+
* field.reference(authors, { title: "Author" })
|
|
201
396
|
*/
|
|
202
|
-
|
|
203
|
-
accept: string[];
|
|
397
|
+
reference: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
|
|
204
398
|
title?: string;
|
|
205
|
-
}) =>
|
|
399
|
+
}) => ReferenceSchema<T>;
|
|
206
400
|
/**
|
|
207
|
-
*
|
|
401
|
+
* A text field.
|
|
208
402
|
*
|
|
209
403
|
* @example
|
|
210
|
-
*
|
|
404
|
+
* field.string({ minLength: 1, title: "Name" })
|
|
211
405
|
*/
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}) => TArray<TUnsafe<ImageValue>>;
|
|
406
|
+
string: (options?: StringOptions & {
|
|
407
|
+
default?: string;
|
|
408
|
+
}) => StringField;
|
|
216
409
|
/**
|
|
217
|
-
*
|
|
410
|
+
* One of a fixed set of options; keys are stored, values are editor labels.
|
|
218
411
|
*
|
|
219
412
|
* @example
|
|
220
|
-
*
|
|
413
|
+
* field.enum({ default: "draft", options: { draft: "Draft", final: "Final" } })
|
|
221
414
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
415
|
+
enum: SettingBuilder["enum"];
|
|
416
|
+
/**
|
|
417
|
+
* A toggle.
|
|
418
|
+
*
|
|
419
|
+
* @example
|
|
420
|
+
* field.boolean({ default: false, title: "Featured" })
|
|
421
|
+
*/
|
|
422
|
+
boolean: SettingBuilder["boolean"];
|
|
423
|
+
}
|
|
228
424
|
//#endregion
|
|
229
|
-
export {
|
|
425
|
+
export {};
|