camox 0.43.0 → 0.45.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/bin/camox.mjs +9 -1
- 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 +57 -41
- package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
- package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
- package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
- package/dist/core/components/lexical/TextLinkPopover.js +169 -180
- package/dist/core/createApp.d.ts +254 -299
- package/dist/core/createApp.js +123 -29
- package/dist/core/createBlock.d.ts +5 -5
- package/dist/core/createBlock.js +399 -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 +820 -565
- package/dist/core/editing/createEditableBlock.js +2153 -971
- 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 +304 -103
- package/dist/core/lib/contentType.js +207 -168
- package/dist/core/lib/fieldTypes.js +4 -0
- package/dist/core/lib/iconTypes.d.ts +13 -0
- package/dist/core/lib/icons.d.ts +6 -0
- package/dist/core/lib/icons.js +126 -0
- 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 +7 -7
- package/dist/core/lib/modifierFormats.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 +6 -8
- package/dist/core/lib/textStyles.js +5 -5
- 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 +1734 -0
- package/dist/features/canvas/CanvasBlockFrame.js +353 -0
- package/dist/features/canvas/CanvasBlockHeader.js +55 -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 +335 -0
- package/dist/features/canvas/CanvasPageHeader.js +125 -0
- package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
- package/dist/features/canvas/CanvasShelfMarker.js +255 -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 +317 -0
- package/dist/features/canvas/canvasFrameMode.js +53 -0
- package/dist/features/canvas/canvasInsertionSeams.js +44 -0
- package/dist/features/canvas/canvasItems.js +120 -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 +149 -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 +226 -0
- package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
- package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
- package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
- package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -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 +803 -0
- package/dist/features/canvas/useCanvasFrame.js +149 -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 +101 -69
- 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 +811 -507
- package/dist/features/preview/EditablePageContent.js +1 -1
- package/dist/features/preview/EditablePageExperience.js +16 -22
- package/dist/features/preview/components/AddBlockDialog.js +270 -0
- package/dist/features/preview/components/AssetFieldEditor.js +173 -154
- package/dist/features/preview/components/AssetLightbox.js +194 -136
- 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 +176 -100
- 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 +46 -29
- package/dist/features/preview/components/DrillRow.js +150 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
- package/dist/features/preview/components/FieldToolbar.js +166 -116
- package/dist/features/preview/components/Frame.js +108 -20
- package/dist/features/preview/components/IconFieldEditor.js +227 -0
- package/dist/features/preview/components/ItemFieldsEditor.js +238 -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 +10 -42
- 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 +145 -147
- 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 +111 -340
- 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 +27 -0
- 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 +33 -59
- 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 +71 -23
- package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
- package/dist/features/provider/PreviewSignInPage.js +54 -0
- package/dist/features/provider/components/CamoxAppContext.js +11 -11
- package/dist/features/provider/components/CommandPalette.js +87 -143
- 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 +216 -141
- 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 +8 -1
- package/dist/features/runtime/pageViewport.js +7 -0
- package/dist/features/runtime/runtime.d.ts +60 -23
- package/dist/features/runtime/runtime.js +779 -166
- 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 +338 -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 +250 -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 +48 -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/auth.js +1 -50
- 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 +16 -0
- 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 +53 -31
- package/dist/features/vite/vite.js +230 -116
- 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 +139 -60
- 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 +13 -0
- package/dist/lib/queries.d.ts +11 -0
- package/dist/lib/queries.js +71 -131
- package/dist/lib/studio-reads.d.ts +14 -0
- package/dist/lib/studio-reads.js +574 -0
- package/dist/lib/use-project-room.js +50 -47
- 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 -147
- package/dist/studio.css +2 -2
- package/package.json +70 -72
- package/skills/camox/SKILL.md +16 -5
- package/skills/camox/references/artifacts.md +179 -0
- package/skills/camox/references/block-definitions.md +98 -55
- package/skills/camox/references/cli-common.md +18 -6
- package/skills/camox/references/cli-content.md +92 -58
- 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 +7 -7
- 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 +69 -0
- package/skills/camox-expand/references/jobs.md +39 -0
- package/skills/camoxify/SKILL.md +38 -2
- 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 -194
- 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 -166
- 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/previewCommentsStore.js +0 -115
- package/dist/features/preview/publication.js +0 -81
- package/dist/features/runtime/SharedChromeContext.js +0 -7
- package/dist/features/studio/components/EnvironmentMenu.js +0 -413
- 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,19 +1,48 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Collection } from "../createCollection.js";
|
|
2
|
+
import { IconId, IconValue } from "./iconTypes.js";
|
|
3
|
+
import { SystemOrderKey } from "@camox/api-contract";
|
|
4
|
+
import { Static, TArray, TBoolean, TObject, TSchema, TUnsafe } from "@sinclair/typebox";
|
|
4
5
|
//#region src/core/lib/contentType.d.ts
|
|
5
|
-
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 {
|
|
6
35
|
readonly fieldName: string;
|
|
7
36
|
constructor(fieldName: string);
|
|
8
37
|
toString(): string;
|
|
9
38
|
}
|
|
10
|
-
type SettingsScope = "block" | "item";
|
|
39
|
+
export type SettingsScope = "block" | "item";
|
|
11
40
|
/**
|
|
12
41
|
* Serializable conditional block produced by the settings proxy. Emits Handlebars-style
|
|
13
42
|
* `{{#if ...}}...{{/if}}` syntax wrapping each child line, tagged with its scope so the
|
|
14
43
|
* server-side resolver knows whether to read from `settings` or `itemSettings`.
|
|
15
44
|
*/
|
|
16
|
-
declare class Conditional {
|
|
45
|
+
export declare class Conditional {
|
|
17
46
|
readonly scope: SettingsScope;
|
|
18
47
|
readonly settingName: string;
|
|
19
48
|
readonly enumValue: string | null;
|
|
@@ -22,27 +51,31 @@ declare class Conditional {
|
|
|
22
51
|
get openTag(): string;
|
|
23
52
|
get closeTag(): string;
|
|
24
53
|
}
|
|
25
|
-
type ConditionalChild = string | FieldToken | Conditional;
|
|
26
|
-
type ConditionalLines = ConditionalChild | ReadonlyArray<ConditionalChild>;
|
|
27
|
-
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; };
|
|
28
57
|
/**
|
|
29
58
|
* Callable shape for one entry on the settings proxy. Booleans take a single `lines`
|
|
30
59
|
* argument; enums take `(value, lines)`. Settings of other shapes are disallowed — they
|
|
31
60
|
* don't make sense as conditions.
|
|
32
61
|
*/
|
|
33
62
|
type SettingCallable<T extends TSchema> = Static<T> extends boolean ? (lines: ConditionalLines) => Conditional : Static<T> extends string ? (value: Static<T>, lines: ConditionalLines) => Conditional : never;
|
|
34
|
-
type SettingsProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: SettingCallable<TShape[K]
|
|
35
|
-
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>;
|
|
36
65
|
declare const EmbedURLBrand: unique symbol;
|
|
37
|
-
type EmbedURL = string & {
|
|
66
|
+
export type EmbedURL = string & {
|
|
38
67
|
readonly [EmbedURLBrand]: true;
|
|
39
68
|
};
|
|
40
|
-
declare const
|
|
41
|
-
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>> = {
|
|
42
75
|
readonly [ItemSettingsBrand]?: S;
|
|
43
76
|
};
|
|
44
77
|
declare const LinkBrand: unique symbol;
|
|
45
|
-
type LinkValue = ({
|
|
78
|
+
export type LinkValue = ({
|
|
46
79
|
type: "external";
|
|
47
80
|
href: string;
|
|
48
81
|
} | {
|
|
@@ -54,7 +87,7 @@ type LinkValue = ({
|
|
|
54
87
|
} & {
|
|
55
88
|
readonly [LinkBrand]: true;
|
|
56
89
|
};
|
|
57
|
-
type ImageValue = {
|
|
90
|
+
export type ImageValue = {
|
|
58
91
|
url: string;
|
|
59
92
|
alt: string;
|
|
60
93
|
filename: string;
|
|
@@ -64,7 +97,7 @@ type ImageValue = {
|
|
|
64
97
|
} & {
|
|
65
98
|
readonly __brand: "ImageValue";
|
|
66
99
|
};
|
|
67
|
-
type FileValue = {
|
|
100
|
+
export type FileValue = {
|
|
68
101
|
url: string;
|
|
69
102
|
alt: string;
|
|
70
103
|
filename: string;
|
|
@@ -74,151 +107,319 @@ type FileValue = {
|
|
|
74
107
|
} & {
|
|
75
108
|
readonly __brand: "FileValue";
|
|
76
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
|
+
};
|
|
77
139
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
140
|
+
* Builds the fields of a block or repeatable item's content.
|
|
141
|
+
* `enum` and `boolean` are not content: declare them in `settings` instead.
|
|
80
142
|
*/
|
|
81
|
-
|
|
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
|
+
};
|
|
165
|
+
title?: string;
|
|
166
|
+
}) => LinkField;
|
|
82
167
|
/**
|
|
83
|
-
*
|
|
168
|
+
* An image asset.
|
|
84
169
|
*
|
|
85
170
|
* @example
|
|
86
|
-
*
|
|
87
|
-
|
|
171
|
+
* field.image({ title: "Hero" })
|
|
172
|
+
*/
|
|
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
|
+
* })
|
|
88
218
|
*/
|
|
89
|
-
|
|
219
|
+
embed: (options: {
|
|
220
|
+
pattern: string;
|
|
90
221
|
default: string;
|
|
91
222
|
title?: string;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
223
|
+
}) => EmbedField;
|
|
224
|
+
/**
|
|
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.
|
|
228
|
+
*
|
|
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>;
|
|
96
262
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
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.
|
|
99
267
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* similar to block-level settings.
|
|
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.
|
|
103
270
|
*
|
|
104
271
|
* @example
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
+
* }),
|
|
113
295
|
* minItems: 1,
|
|
114
296
|
* maxItems: 10,
|
|
115
|
-
* title:
|
|
116
|
-
* toMarkdown: (c) => [`### ${c.title}`, c.description],
|
|
297
|
+
* title: "Items",
|
|
298
|
+
* toMarkdown: (c, s) => [`### ${c.title}`, s.highlighted(c.description)],
|
|
117
299
|
* })
|
|
118
300
|
*/
|
|
119
|
-
|
|
120
|
-
content: T
|
|
121
|
-
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;
|
|
122
304
|
minItems: number;
|
|
123
305
|
maxItems: number;
|
|
124
306
|
title?: string;
|
|
125
307
|
toMarkdown: ToMarkdownBuilder<T, S>;
|
|
126
|
-
}) =>
|
|
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 {
|
|
127
331
|
/**
|
|
128
|
-
*
|
|
332
|
+
* One of a fixed set of options; keys are stored, values are editor labels.
|
|
129
333
|
*
|
|
130
334
|
* @example
|
|
131
|
-
*
|
|
132
|
-
* default: 'left',
|
|
133
|
-
* options: { left: 'Left', center: 'Center', right: 'Right' },
|
|
134
|
-
* title: 'Alignment'
|
|
135
|
-
* })
|
|
335
|
+
* setting.enum({ default: "left", options: { left: "Left", right: "Right" }, title: "Alignment" })
|
|
136
336
|
*/
|
|
137
|
-
|
|
337
|
+
enum: <const O extends Record<string, string>>(options: {
|
|
138
338
|
default: keyof O & string;
|
|
139
339
|
options: O;
|
|
140
340
|
title?: string;
|
|
141
|
-
}) =>
|
|
341
|
+
}) => EnumSetting<O>;
|
|
142
342
|
/**
|
|
143
|
-
*
|
|
343
|
+
* A toggle.
|
|
144
344
|
*
|
|
145
345
|
* @example
|
|
146
|
-
*
|
|
346
|
+
* setting.boolean({ default: false, title: "Show background" })
|
|
147
347
|
*/
|
|
148
|
-
|
|
348
|
+
boolean: (options: {
|
|
149
349
|
default: boolean;
|
|
150
350
|
title?: string;
|
|
151
|
-
}) =>
|
|
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"> {
|
|
152
358
|
/**
|
|
153
|
-
*
|
|
359
|
+
* An image asset. Never required: collection fields can't be (the API rejects it).
|
|
154
360
|
*
|
|
155
361
|
* @example
|
|
156
|
-
*
|
|
157
|
-
* pattern: 'https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+',
|
|
158
|
-
* default: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
|
|
159
|
-
* title: 'YouTube URL'
|
|
160
|
-
* })
|
|
362
|
+
* field.image({ title: "Cover" })
|
|
161
363
|
*/
|
|
162
|
-
|
|
163
|
-
pattern: string;
|
|
164
|
-
default: string;
|
|
364
|
+
image: (options?: {
|
|
165
365
|
title?: string;
|
|
166
|
-
}) =>
|
|
366
|
+
}) => ImageField;
|
|
167
367
|
/**
|
|
168
|
-
*
|
|
169
|
-
* Supports both external URLs and internal page links.
|
|
368
|
+
* A file asset. Never required: collection fields can't be (the API rejects it).
|
|
170
369
|
*
|
|
171
370
|
* @example
|
|
172
|
-
*
|
|
371
|
+
* field.file({ accept: ["application/pdf"], title: "Brochure" })
|
|
173
372
|
*/
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
text: string;
|
|
177
|
-
href: string;
|
|
178
|
-
newTab: boolean;
|
|
179
|
-
};
|
|
373
|
+
file: (options: {
|
|
374
|
+
accept: string[];
|
|
180
375
|
title?: string;
|
|
181
|
-
}) =>
|
|
376
|
+
}) => FileField;
|
|
182
377
|
/**
|
|
183
|
-
*
|
|
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.
|
|
184
380
|
*
|
|
185
381
|
* @example
|
|
186
|
-
*
|
|
382
|
+
* field.referenceList(authors, { title: "Co-authors" })
|
|
187
383
|
*/
|
|
188
|
-
|
|
384
|
+
referenceList: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
|
|
189
385
|
title?: string;
|
|
190
|
-
|
|
386
|
+
description?: string;
|
|
387
|
+
maxItems?: number;
|
|
388
|
+
toMarkdown?: ToMarkdownBuilder<T>;
|
|
389
|
+
}) => ReferenceListSchema<T>;
|
|
191
390
|
/**
|
|
192
|
-
*
|
|
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.
|
|
193
393
|
*
|
|
194
394
|
* @example
|
|
195
|
-
*
|
|
395
|
+
* field.reference(authors, { title: "Author" })
|
|
196
396
|
*/
|
|
197
|
-
|
|
198
|
-
accept: string[];
|
|
397
|
+
reference: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
|
|
199
398
|
title?: string;
|
|
200
|
-
}) =>
|
|
399
|
+
}) => ReferenceSchema<T>;
|
|
201
400
|
/**
|
|
202
|
-
*
|
|
401
|
+
* A text field.
|
|
203
402
|
*
|
|
204
403
|
* @example
|
|
205
|
-
*
|
|
404
|
+
* field.string({ minLength: 1, title: "Name" })
|
|
206
405
|
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}) => TArray<TUnsafe<ImageValue>>;
|
|
406
|
+
string: (options?: StringOptions & {
|
|
407
|
+
default?: string;
|
|
408
|
+
}) => StringField;
|
|
211
409
|
/**
|
|
212
|
-
*
|
|
410
|
+
* One of a fixed set of options; keys are stored, values are editor labels.
|
|
213
411
|
*
|
|
214
412
|
* @example
|
|
215
|
-
*
|
|
413
|
+
* field.enum({ default: "draft", options: { draft: "Draft", final: "Final" } })
|
|
216
414
|
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
415
|
+
enum: SettingBuilder["enum"];
|
|
416
|
+
/**
|
|
417
|
+
* A toggle.
|
|
418
|
+
*
|
|
419
|
+
* @example
|
|
420
|
+
* field.boolean({ default: false, title: "Featured" })
|
|
421
|
+
*/
|
|
422
|
+
boolean: SettingBuilder["boolean"];
|
|
423
|
+
}
|
|
223
424
|
//#endregion
|
|
224
|
-
export {
|
|
425
|
+
export {};
|