octocms 0.4.13 → 0.4.16
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/admin/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +2 -2
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/actions/agent.d.ts +3 -3
- package/dist/admin/actions/agent.js.map +1 -1
- package/dist/admin/actions/media.d.ts.map +1 -1
- package/dist/admin/actions/media.js +3 -1
- package/dist/admin/actions/media.js.map +1 -1
- package/dist/admin/pages/AdminErrorView.d.ts.map +1 -1
- package/dist/admin/pages/AdminErrorView.js +9 -9
- package/dist/admin/pages/AdminErrorView.js.map +1 -1
- package/dist/admin/pages/AdminLayout.d.ts +1 -1
- package/dist/admin/pages/AdminLayout.d.ts.map +1 -1
- package/dist/admin/pages/AdminLayout.js +2 -2
- package/dist/admin/pages/AdminLayout.js.map +1 -1
- package/dist/admin/pages/ChatPage.d.ts +3 -3
- package/dist/admin/pages/ChatPage.d.ts.map +1 -1
- package/dist/admin/pages/ChatPage.js +8 -5
- package/dist/admin/pages/ChatPage.js.map +1 -1
- package/dist/admin/pages/CollectionPage.d.ts.map +1 -1
- package/dist/admin/pages/CollectionPage.js +5 -1
- package/dist/admin/pages/CollectionPage.js.map +1 -1
- package/dist/admin/pages/ContentModelPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentModelPage.js +5 -1
- package/dist/admin/pages/ContentModelPage.js.map +1 -1
- package/dist/admin/pages/ContentPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentPage.js +5 -1
- package/dist/admin/pages/ContentPage.js.map +1 -1
- package/dist/admin/pages/ContentTypePage.d.ts.map +1 -1
- package/dist/admin/pages/ContentTypePage.js +6 -2
- package/dist/admin/pages/ContentTypePage.js.map +1 -1
- package/dist/admin/pages/EntryPage.d.ts.map +1 -1
- package/dist/admin/pages/EntryPage.js +5 -1
- package/dist/admin/pages/EntryPage.js.map +1 -1
- package/dist/admin/pages/MediaAssetPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaAssetPage.js +6 -2
- package/dist/admin/pages/MediaAssetPage.js.map +1 -1
- package/dist/admin/pages/MediaPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaPage.js +6 -2
- package/dist/admin/pages/MediaPage.js.map +1 -1
- package/dist/admin/theme/toggle.d.ts.map +1 -1
- package/dist/admin/theme/toggle.js +27 -27
- package/dist/admin/theme/toggle.js.map +1 -1
- package/dist/agent/chatSetup.d.ts +19 -0
- package/dist/agent/chatSetup.d.ts.map +1 -0
- package/dist/agent/chatSetup.js +119 -0
- package/dist/agent/chatSetup.js.map +1 -0
- package/dist/agent/featureFlag.d.ts +3 -3
- package/dist/agent/featureFlag.js.map +1 -1
- package/dist/agent/index.cjs +75 -5309
- package/dist/agent/index.cjs.map +1 -1
- package/dist/{agentDocs-M3R2CPUQ.js → agentDocs-QZ4NOQVH.js} +2 -2
- package/dist/{chunk-DCDFWNC6.js → chunk-I7VNI2IG.js} +4 -7
- package/dist/{chunk-DCDFWNC6.js.map → chunk-I7VNI2IG.js.map} +1 -1
- package/dist/chunk-TOUAHFDW.js +7 -0
- package/dist/{chunk-NAHOP7TG.js.map → chunk-TOUAHFDW.js.map} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/lib/templates.js +3 -6
- package/dist/cli/lib/templates.js.map +1 -1
- package/dist/components/Chat/ChatAgentSetup.d.ts +7 -0
- package/dist/components/Chat/ChatAgentSetup.d.ts.map +1 -0
- package/dist/components/Chat/ChatAgentSetup.js +37 -0
- package/dist/components/Chat/ChatAgentSetup.js.map +1 -0
- package/dist/components/Chat/ChatPage.d.ts +6 -1
- package/dist/components/Chat/ChatPage.d.ts.map +1 -1
- package/dist/components/Chat/ChatPage.js +123 -128
- package/dist/components/Chat/ChatPage.js.map +1 -1
- package/dist/components/Chat/ChatSidebar.d.ts +10 -0
- package/dist/components/Chat/ChatSidebar.d.ts.map +1 -0
- package/dist/components/Chat/ChatSidebar.js +45 -0
- package/dist/components/Chat/ChatSidebar.js.map +1 -0
- package/dist/components/Chat/Composer.d.ts.map +1 -1
- package/dist/components/Chat/Composer.js +28 -45
- package/dist/components/Chat/Composer.js.map +1 -1
- package/dist/components/Chat/Message.d.ts.map +1 -1
- package/dist/components/Chat/Message.js +40 -39
- package/dist/components/Chat/Message.js.map +1 -1
- package/dist/components/Chat/ProposalCard.d.ts.map +1 -1
- package/dist/components/Chat/ProposalCard.js +56 -67
- package/dist/components/Chat/ProposalCard.js.map +1 -1
- package/dist/components/Chat/ToolCallCard.d.ts.map +1 -1
- package/dist/components/Chat/ToolCallCard.js +29 -38
- package/dist/components/Chat/ToolCallCard.js.map +1 -1
- package/dist/components/Chat/chatStorage.d.ts +64 -0
- package/dist/components/Chat/chatStorage.d.ts.map +1 -0
- package/dist/components/Chat/chatStorage.js +154 -0
- package/dist/components/Chat/chatStorage.js.map +1 -0
- package/dist/components/Chat/useChatHistory.d.ts +12 -0
- package/dist/components/Chat/useChatHistory.d.ts.map +1 -0
- package/dist/components/Chat/useChatHistory.js +196 -0
- package/dist/components/Chat/useChatHistory.js.map +1 -0
- package/dist/components/Chat/useChatStream.d.ts +6 -0
- package/dist/components/Chat/useChatStream.d.ts.map +1 -1
- package/dist/components/Chat/useChatStream.js +31 -2
- package/dist/components/Chat/useChatStream.js.map +1 -1
- package/dist/components/CommandK/CommandK.d.ts +1 -1
- package/dist/components/CommandK/CommandK.d.ts.map +1 -1
- package/dist/components/CommandK/CommandK.js +100 -116
- package/dist/components/CommandK/CommandK.js.map +1 -1
- package/dist/components/CommandK/parts.d.ts.map +1 -1
- package/dist/components/CommandK/parts.js +9 -11
- package/dist/components/CommandK/parts.js.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.js +40 -45
- package/dist/components/ContentModel/ConditionalBranchesEditor.js.map +1 -1
- package/dist/components/ContentModel/ContentModelList.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentModelList.js +65 -80
- package/dist/components/ContentModel/ContentModelList.js.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.js +253 -280
- package/dist/components/ContentModel/ContentTypeDetail.js.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.js +42 -30
- package/dist/components/ContentModel/CreateContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.js +14 -15
- package/dist/components/ContentModel/DeleteContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.js +27 -20
- package/dist/components/ContentModel/DeleteFieldDialog.js.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.js +46 -34
- package/dist/components/ContentModel/EditContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/FieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/FieldDialog.js +95 -84
- package/dist/components/ContentModel/FieldDialog.js.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.js +90 -81
- package/dist/components/ContentModel/RichTextOptionsEditor.js.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.js +19 -36
- package/dist/components/ContentModel/SchemaImpactList.js.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.js +63 -84
- package/dist/components/ContentModel/SchemaOptionFieldInput.js.map +1 -1
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js +15 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js +11 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js +3 -3
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.d.ts.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js +4 -12
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -1
- package/dist/components/Dashboard/DashboardContent.js +87 -114
- package/dist/components/Dashboard/DashboardContent.js.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.d.ts.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.js +33 -45
- package/dist/components/Dashboard/RecentPullRequests.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts +2 -7
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js +5 -20
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js +9 -9
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts +3 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js +10 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts +9 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js +16 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js +7 -18
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js.map +1 -1
- package/dist/components/DiffView/DiffHunk.d.ts.map +1 -1
- package/dist/components/DiffView/DiffHunk.js +12 -40
- package/dist/components/DiffView/DiffHunk.js.map +1 -1
- package/dist/components/DiffView/DiffView.d.ts.map +1 -1
- package/dist/components/DiffView/DiffView.js +33 -52
- package/dist/components/DiffView/DiffView.js.map +1 -1
- package/dist/components/EditPost/EditPost.d.ts.map +1 -1
- package/dist/components/EditPost/EditPost.js +139 -200
- package/dist/components/EditPost/EditPost.js.map +1 -1
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts +3 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts.map +1 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js +21 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js.map +1 -0
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js +1 -9
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js +12 -20
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js.map +1 -1
- package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/{ErrorBoundary.js → ErrorBoundary/ErrorBoundary.js} +15 -21
- package/dist/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
- package/dist/components/HistorySection/HistorySection.d.ts.map +1 -1
- package/dist/components/HistorySection/HistorySection.js +23 -42
- package/dist/components/HistorySection/HistorySection.js.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js +120 -123
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -1
- package/dist/components/Layout/BranchSelectorDialog.d.ts +9 -0
- package/dist/components/Layout/BranchSelectorDialog.d.ts.map +1 -0
- package/dist/components/Layout/BranchSelectorDialog.js +130 -0
- package/dist/components/Layout/BranchSelectorDialog.js.map +1 -0
- package/dist/components/Layout/CreateBranchDialog.d.ts.map +1 -0
- package/dist/components/{CreateBranchDialog.js → Layout/CreateBranchDialog.js} +16 -16
- package/dist/components/Layout/CreateBranchDialog.js.map +1 -0
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/Layout/Layout.js +18 -26
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/LeftNavItem.d.ts.map +1 -1
- package/dist/components/Layout/LeftNavItem.js +7 -7
- package/dist/components/Layout/LeftNavItem.js.map +1 -1
- package/dist/components/Layout/Page.d.ts +16 -0
- package/dist/components/Layout/Page.d.ts.map +1 -0
- package/dist/components/Layout/Page.js +47 -0
- package/dist/components/Layout/Page.js.map +1 -0
- package/dist/components/Layout/TopHeader.d.ts +1 -1
- package/dist/components/Layout/TopHeader.d.ts.map +1 -1
- package/dist/components/Layout/TopHeader.js +70 -165
- package/dist/components/Layout/TopHeader.js.map +1 -1
- package/dist/components/Layout/UserAccountDialog.d.ts +12 -0
- package/dist/components/Layout/UserAccountDialog.d.ts.map +1 -0
- package/dist/components/Layout/UserAccountDialog.js +48 -0
- package/dist/components/Layout/UserAccountDialog.js.map +1 -0
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js +1 -1
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js +1 -8
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts +3 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js +11 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts +19 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js +31 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts +9 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js +15 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js +10 -17
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts +16 -0
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js +48 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js.map +1 -0
- package/dist/components/LinkedBySection/LinkedBySection.js +13 -13
- package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.js +126 -136
- package/dist/components/MediaAsset/MediaAsset.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts +3 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js +21 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js +26 -22
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js +1 -9
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.js +15 -8
- package/dist/components/MediaManager/CreateFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.js +1 -2
- package/dist/components/MediaManager/DeleteFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js +7 -9
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js +6 -9
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.js +21 -23
- package/dist/components/MediaManager/MediaLeftPanel.js.map +1 -1
- package/dist/components/MediaManager/MediaListTable.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaListTable.js +15 -21
- package/dist/components/MediaManager/MediaListTable.js.map +1 -1
- package/dist/components/MediaManager/MediaManager.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaManager.js +101 -151
- package/dist/components/MediaManager/MediaManager.js.map +1 -1
- package/dist/components/MediaManager/MediaSelectDialog.js +22 -64
- package/dist/components/MediaManager/MediaSelectDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.js +9 -10
- package/dist/components/MediaManager/MediaUploadBar.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.js +18 -11
- package/dist/components/MediaManager/MediaUploadDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts +8 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js +14 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js +4 -12
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js +5 -13
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js +7 -15
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js +15 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js +21 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js.map +1 -0
- package/dist/components/public/MarkdownContent.d.ts.map +1 -1
- package/dist/components/public/MarkdownContent.js +1 -2
- package/dist/components/public/MarkdownContent.js.map +1 -1
- package/dist/components/public/RichTextContent.d.ts.map +1 -1
- package/dist/components/public/RichTextContent.js +19 -8
- package/dist/components/public/RichTextContent.js.map +1 -1
- package/dist/components/public/SearchBox.d.ts.map +1 -1
- package/dist/components/public/SearchBox.js +32 -60
- package/dist/components/public/SearchBox.js.map +1 -1
- package/dist/components/public/index.cjs +6 -413
- package/dist/components/public/index.cjs.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.d.ts +0 -7
- package/dist/components/skeletons/MainSlotSkeleton.d.ts.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.js +4 -17
- package/dist/components/skeletons/MainSlotSkeleton.js.map +1 -1
- package/dist/components/skeletons/blocks.d.ts.map +1 -1
- package/dist/components/skeletons/blocks.js +15 -7
- package/dist/components/skeletons/blocks.js.map +1 -1
- package/dist/components/skeletons/index.d.ts +4 -4
- package/dist/components/skeletons/index.d.ts.map +1 -1
- package/dist/components/skeletons/index.js +1 -2
- package/dist/components/skeletons/index.js.map +1 -1
- package/dist/components/skeletons/primitives.d.ts +2 -2
- package/dist/components/skeletons/primitives.d.ts.map +1 -1
- package/dist/components/skeletons/primitives.js +3 -3
- package/dist/components/skeletons/primitives.js.map +1 -1
- package/dist/components/test/dndTestUtils.d.ts +7 -0
- package/dist/components/test/dndTestUtils.d.ts.map +1 -0
- package/dist/components/test/dndTestUtils.js +15 -0
- package/dist/components/test/dndTestUtils.js.map +1 -0
- package/dist/components/ui/Avatar/Avatar.d.ts +5 -0
- package/dist/components/ui/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/ui/Avatar/Avatar.js +63 -0
- package/dist/components/ui/Avatar/Avatar.js.map +1 -0
- package/dist/components/ui/{branch-chip.d.ts → BranchChip/BranchChip.d.ts} +2 -5
- package/dist/components/ui/BranchChip/BranchChip.d.ts.map +1 -0
- package/dist/components/ui/BranchChip/BranchChip.js +47 -0
- package/dist/components/ui/BranchChip/BranchChip.js.map +1 -0
- package/dist/components/ui/Button/Button.d.ts +15 -0
- package/dist/components/ui/Button/Button.d.ts.map +1 -0
- package/dist/components/ui/Button/Button.js +49 -0
- package/dist/components/ui/Button/Button.js.map +1 -0
- package/dist/components/ui/Card/Card.d.ts +6 -0
- package/dist/components/ui/Card/Card.d.ts.map +1 -0
- package/dist/components/ui/{card.js → Card/Card.js} +12 -22
- package/dist/components/ui/Card/Card.js.map +1 -0
- package/dist/components/ui/{chip.d.ts → Chip/Chip.d.ts} +1 -1
- package/dist/components/ui/Chip/Chip.d.ts.map +1 -0
- package/dist/components/ui/Chip/Chip.js +24 -0
- package/dist/components/ui/Chip/Chip.js.map +1 -0
- package/dist/components/ui/Dialog/Dialog.d.ts +32 -0
- package/dist/components/ui/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/ui/Dialog/Dialog.js +194 -0
- package/dist/components/ui/Dialog/Dialog.js.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts +66 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js +308 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/ui/{field.d.ts → FormField/Field.d.ts} +1 -1
- package/dist/components/ui/FormField/Field.d.ts.map +1 -0
- package/dist/components/ui/FormField/Field.js +41 -0
- package/dist/components/ui/FormField/Field.js.map +1 -0
- package/dist/components/{FieldShell.d.ts → ui/FormField/FieldShell.d.ts} +2 -2
- package/dist/components/ui/FormField/FieldShell.d.ts.map +1 -0
- package/dist/components/ui/FormField/FieldShell.js +29 -0
- package/dist/components/ui/FormField/FieldShell.js.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.js +56 -0
- package/dist/components/ui/FormField/FormBooleanField.js.map +1 -0
- package/dist/components/ui/FormField/FormColorField.d.ts.map +1 -0
- package/dist/components/{FormColorField.js → ui/FormField/FormColorField.js} +10 -13
- package/dist/components/ui/FormField/FormColorField.js.map +1 -0
- package/dist/components/{FormConditionalField.d.ts → ui/FormField/FormConditionalField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormConditionalField.d.ts.map +1 -0
- package/dist/components/{FormConditionalField.js → ui/FormField/FormConditionalField.js} +61 -58
- package/dist/components/ui/FormField/FormConditionalField.js.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.js +48 -0
- package/dist/components/ui/FormField/FormDatetimeField.js.map +1 -0
- package/dist/components/{FormFields.d.ts → ui/FormField/FormFields.d.ts} +1 -1
- package/dist/components/ui/FormField/FormFields.d.ts.map +1 -0
- package/dist/components/{FormFields.js → ui/FormField/FormFields.js} +6 -6
- package/dist/components/ui/FormField/FormFields.js.map +1 -0
- package/dist/components/{FormImageField.d.ts → ui/FormField/FormImageField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormImageField.d.ts.map +1 -0
- package/dist/components/{FormImageField.js → ui/FormField/FormImageField.js} +25 -30
- package/dist/components/ui/FormField/FormImageField.js.map +1 -0
- package/dist/components/ui/FormField/FormJsonField.d.ts.map +1 -0
- package/dist/components/{FormJsonField.js → ui/FormField/FormJsonField.js} +7 -10
- package/dist/components/ui/FormField/FormJsonField.js.map +1 -0
- package/dist/components/ui/FormField/FormMarkdownField.d.ts.map +1 -0
- package/dist/components/{FormMarkdownField.js → ui/FormField/FormMarkdownField.js} +11 -20
- package/dist/components/ui/FormField/FormMarkdownField.js.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.js +38 -0
- package/dist/components/ui/FormField/FormNumberField.js.map +1 -0
- package/dist/components/{FormReferenceField.d.ts → ui/FormField/FormReferenceField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormReferenceField.d.ts.map +1 -0
- package/dist/components/{FormReferenceField.js → ui/FormField/FormReferenceField.js} +109 -118
- package/dist/components/ui/FormField/FormReferenceField.js.map +1 -0
- package/dist/components/{FormRichTextField.d.ts → ui/FormField/FormRichTextField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormRichTextField.d.ts.map +1 -0
- package/dist/components/{FormRichTextField.js → ui/FormField/FormRichTextField.js} +28 -33
- package/dist/components/ui/FormField/FormRichTextField.js.map +1 -0
- package/dist/components/{FormSelectField.d.ts → ui/FormField/FormSelectField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormSelectField.d.ts.map +1 -0
- package/dist/components/{FormSelectField.js → ui/FormField/FormSelectField.js} +11 -23
- package/dist/components/ui/FormField/FormSelectField.js.map +1 -0
- package/dist/components/ui/FormField/FormSlugField.d.ts.map +1 -0
- package/dist/components/{FormSlugField.js → ui/FormField/FormSlugField.js} +21 -26
- package/dist/components/ui/FormField/FormSlugField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormStringField.js +23 -0
- package/dist/components/ui/FormField/FormStringField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringListField.d.ts.map +1 -0
- package/dist/components/{FormStringListField.js → ui/FormField/FormStringListField.js} +14 -25
- package/dist/components/ui/FormField/FormStringListField.js.map +1 -0
- package/dist/components/ui/FormField/FormTextField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormTextField.js +35 -0
- package/dist/components/ui/FormField/FormTextField.js.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.js +26 -0
- package/dist/components/ui/FormField/FormUrlField.js.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ComponentEmbedEditor.d.ts +1 -1
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js +165 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.js +25 -39
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.js +77 -56
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.js +55 -43
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.js +21 -33
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.js.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js +61 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js.map +1 -0
- package/dist/components/ui/Icon/Icon.d.ts +77 -0
- package/dist/components/ui/Icon/Icon.d.ts.map +1 -0
- package/dist/components/ui/Icon/Icon.js +618 -0
- package/dist/components/ui/Icon/Icon.js.map +1 -0
- package/dist/components/ui/{input.d.ts → Input/Input.d.ts} +1 -1
- package/dist/components/ui/Input/Input.d.ts.map +1 -0
- package/dist/components/ui/Input/Input.js +25 -0
- package/dist/components/ui/Input/Input.js.map +1 -0
- package/dist/components/ui/{kbd.d.ts → Kbd/Kbd.d.ts} +1 -1
- package/dist/components/ui/Kbd/Kbd.d.ts.map +1 -0
- package/dist/components/ui/Kbd/Kbd.js +19 -0
- package/dist/components/ui/Kbd/Kbd.js.map +1 -0
- package/dist/components/ui/Label/Label.d.ts +3 -0
- package/dist/components/ui/Label/Label.d.ts.map +1 -0
- package/dist/components/ui/Label/Label.js +20 -0
- package/dist/components/ui/Label/Label.js.map +1 -0
- package/dist/components/ui/Portal/Portal.d.ts +8 -0
- package/dist/components/ui/Portal/Portal.d.ts.map +1 -0
- package/dist/components/ui/Portal/Portal.js +14 -0
- package/dist/components/ui/Portal/Portal.js.map +1 -0
- package/dist/components/ui/Select/Select.d.ts +33 -0
- package/dist/components/ui/Select/Select.d.ts.map +1 -0
- package/dist/components/ui/Select/Select.js +280 -0
- package/dist/components/ui/Select/Select.js.map +1 -0
- package/dist/components/ui/Slot/Slot.d.ts +6 -0
- package/dist/components/ui/Slot/Slot.d.ts.map +1 -0
- package/dist/components/ui/Slot/Slot.js +39 -0
- package/dist/components/ui/Slot/Slot.js.map +1 -0
- package/dist/components/ui/{status-badge.d.ts → StatusBadge/StatusBadge.d.ts} +2 -2
- package/dist/components/ui/StatusBadge/StatusBadge.d.ts.map +1 -0
- package/dist/components/ui/{status-badge.js → StatusBadge/StatusBadge.js} +8 -9
- package/dist/components/ui/StatusBadge/StatusBadge.js.map +1 -0
- package/dist/components/ui/Switcher/Switcher.d.ts +9 -0
- package/dist/components/ui/Switcher/Switcher.d.ts.map +1 -0
- package/dist/components/ui/Switcher/Switcher.js +75 -0
- package/dist/components/ui/Switcher/Switcher.js.map +1 -0
- package/dist/components/ui/{table.d.ts → Table/Table.d.ts} +1 -1
- package/dist/components/ui/Table/Table.d.ts.map +1 -0
- package/dist/components/ui/{table.js → Table/Table.js} +11 -29
- package/dist/components/ui/Table/Table.js.map +1 -0
- package/dist/components/ui/Tabs/Tabs.d.ts +16 -0
- package/dist/components/ui/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/ui/Tabs/Tabs.js +96 -0
- package/dist/components/ui/Tabs/Tabs.js.map +1 -0
- package/dist/components/ui/{textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
- package/dist/components/ui/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/ui/Textarea/Textarea.js +16 -0
- package/dist/components/ui/Textarea/Textarea.js.map +1 -0
- package/dist/components/ui/Toast/Toast.d.ts +21 -0
- package/dist/components/ui/Toast/Toast.d.ts.map +1 -0
- package/dist/components/ui/Toast/Toast.js +98 -0
- package/dist/components/ui/Toast/Toast.js.map +1 -0
- package/dist/components/ui/{toaster.d.ts → Toaster/Toaster.d.ts} +1 -1
- package/dist/components/ui/Toaster/Toaster.d.ts.map +1 -0
- package/dist/components/ui/Toaster/Toaster.js +27 -0
- package/dist/components/ui/Toaster/Toaster.js.map +1 -0
- package/dist/components/ui/index.d.ts +45 -31
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +76 -36
- package/dist/components/ui/index.js.map +1 -1
- package/dist/config.cjs +4 -99
- package/dist/config.cjs.map +1 -1
- package/dist/defineConfig.cjs +0 -2
- package/dist/defineConfig.cjs.map +1 -1
- package/dist/globals.css +9648 -430
- package/dist/hooks/useComposedRefs.d.ts +5 -0
- package/dist/hooks/useComposedRefs.d.ts.map +1 -0
- package/dist/hooks/useComposedRefs.js +23 -0
- package/dist/hooks/useComposedRefs.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +8 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +28 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/usePopoverContent.d.ts +26 -0
- package/dist/hooks/usePopoverContent.d.ts.map +1 -0
- package/dist/hooks/usePopoverContent.js +44 -0
- package/dist/hooks/usePopoverContent.js.map +1 -0
- package/dist/hooks/useToast.d.ts +4 -4
- package/dist/hooks/useToast.d.ts.map +1 -1
- package/dist/hooks/useToast.js +1 -3
- package/dist/hooks/useToast.js.map +1 -1
- package/dist/index.cjs +11 -9506
- package/dist/index.cjs.map +1 -1
- package/dist/{init-KWH66PKY.js → init-KNIWQGJL.js} +3 -18
- package/dist/init-KNIWQGJL.js.map +1 -0
- package/dist/lib/configStore.cjs +1 -3
- package/dist/lib/configStore.cjs.map +1 -1
- package/dist/lib/slugField.d.ts.map +1 -1
- package/dist/lib/slugField.js +3 -3
- package/dist/lib/slugField.js.map +1 -1
- package/dist/lib/slugify.d.ts +13 -0
- package/dist/lib/slugify.d.ts.map +1 -0
- package/dist/lib/slugify.js +8 -0
- package/dist/lib/slugify.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +29 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/query.cjs +58 -9011
- package/dist/query.cjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{update-QNJRYPMC.js → update-QALIQG76.js} +2 -2
- package/dist/withOctoCMS.cjs +2 -36
- package/dist/withOctoCMS.cjs.map +1 -1
- package/globals.css +9648 -430
- package/package.json +1 -16
- package/dist/chunk-NAHOP7TG.js +0 -7
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentModelList.skeleton.js +0 -16
- package/dist/components/ContentModel/ContentModelList.skeleton.js.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js +0 -22
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js.map +0 -1
- package/dist/components/ContentTypes.d.ts +0 -7
- package/dist/components/ContentTypes.d.ts.map +0 -1
- package/dist/components/ContentTypes.js +0 -132
- package/dist/components/ContentTypes.js.map +0 -1
- package/dist/components/CreateBranchDialog.d.ts.map +0 -1
- package/dist/components/CreateBranchDialog.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts +0 -3
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js +0 -10
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts +0 -7
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js +0 -22
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts +0 -2
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.js +0 -13
- package/dist/components/Dashboard/DashboardContent.skeleton.js.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.d.ts +0 -5
- package/dist/components/EditPost/EditPost.skeleton.d.ts.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.js +0 -34
- package/dist/components/EditPost/EditPost.skeleton.js.map +0 -1
- package/dist/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/components/ErrorBoundary.js.map +0 -1
- package/dist/components/FieldHintAndError.d.ts +0 -8
- package/dist/components/FieldHintAndError.d.ts.map +0 -1
- package/dist/components/FieldHintAndError.js +0 -14
- package/dist/components/FieldHintAndError.js.map +0 -1
- package/dist/components/FieldLabel.d.ts +0 -11
- package/dist/components/FieldLabel.d.ts.map +0 -1
- package/dist/components/FieldLabel.js +0 -17
- package/dist/components/FieldLabel.js.map +0 -1
- package/dist/components/FieldShell.d.ts.map +0 -1
- package/dist/components/FieldShell.js +0 -29
- package/dist/components/FieldShell.js.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.d.ts +0 -8
- package/dist/components/FileExplorer/FileExplorer.d.ts.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.js +0 -68
- package/dist/components/FileExplorer/FileExplorer.js.map +0 -1
- package/dist/components/FormBooleanField.d.ts.map +0 -1
- package/dist/components/FormBooleanField.js +0 -52
- package/dist/components/FormBooleanField.js.map +0 -1
- package/dist/components/FormColorField.d.ts.map +0 -1
- package/dist/components/FormColorField.js.map +0 -1
- package/dist/components/FormConditionalField.d.ts.map +0 -1
- package/dist/components/FormConditionalField.js.map +0 -1
- package/dist/components/FormDatetimeField.d.ts.map +0 -1
- package/dist/components/FormDatetimeField.js +0 -42
- package/dist/components/FormDatetimeField.js.map +0 -1
- package/dist/components/FormFields.d.ts.map +0 -1
- package/dist/components/FormFields.js.map +0 -1
- package/dist/components/FormImageField.d.ts.map +0 -1
- package/dist/components/FormImageField.js.map +0 -1
- package/dist/components/FormJsonField.d.ts.map +0 -1
- package/dist/components/FormJsonField.js.map +0 -1
- package/dist/components/FormMarkdownField.d.ts.map +0 -1
- package/dist/components/FormMarkdownField.js.map +0 -1
- package/dist/components/FormNumberField.d.ts.map +0 -1
- package/dist/components/FormNumberField.js +0 -43
- package/dist/components/FormNumberField.js.map +0 -1
- package/dist/components/FormReferenceField.d.ts.map +0 -1
- package/dist/components/FormReferenceField.js.map +0 -1
- package/dist/components/FormRichTextField.d.ts.map +0 -1
- package/dist/components/FormRichTextField.js.map +0 -1
- package/dist/components/FormSelectField.d.ts.map +0 -1
- package/dist/components/FormSelectField.js.map +0 -1
- package/dist/components/FormSlugField.d.ts.map +0 -1
- package/dist/components/FormSlugField.js.map +0 -1
- package/dist/components/FormStringField.d.ts.map +0 -1
- package/dist/components/FormStringField.js +0 -28
- package/dist/components/FormStringField.js.map +0 -1
- package/dist/components/FormStringListField.d.ts.map +0 -1
- package/dist/components/FormStringListField.js.map +0 -1
- package/dist/components/FormTextField.d.ts.map +0 -1
- package/dist/components/FormTextField.js +0 -40
- package/dist/components/FormTextField.js.map +0 -1
- package/dist/components/FormUrlField.d.ts.map +0 -1
- package/dist/components/FormUrlField.js +0 -31
- package/dist/components/FormUrlField.js.map +0 -1
- package/dist/components/Layout/PageBar.d.ts +0 -10
- package/dist/components/Layout/PageBar.d.ts.map +0 -1
- package/dist/components/Layout/PageBar.js +0 -43
- package/dist/components/Layout/PageBar.js.map +0 -1
- package/dist/components/Layout/PageShell.d.ts +0 -30
- package/dist/components/Layout/PageShell.d.ts.map +0 -1
- package/dist/components/Layout/PageShell.js +0 -33
- package/dist/components/Layout/PageShell.js.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts +0 -3
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.js +0 -42
- package/dist/components/MediaAsset/MediaAsset.skeleton.js.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts +0 -3
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.js +0 -30
- package/dist/components/MediaManager/MediaManager.skeleton.js.map +0 -1
- package/dist/components/StatusBadge.d.ts +0 -2
- package/dist/components/StatusBadge.d.ts.map +0 -1
- package/dist/components/StatusBadge.js +0 -7
- package/dist/components/StatusBadge.js.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.js +0 -153
- package/dist/components/richtext/ComponentEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.js.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.d.ts.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.js.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.js +0 -58
- package/dist/components/richtext/VariableEmbedEditor.js.map +0 -1
- package/dist/components/ui/avatar-stack.d.ts +0 -13
- package/dist/components/ui/avatar-stack.d.ts.map +0 -1
- package/dist/components/ui/avatar-stack.js +0 -27
- package/dist/components/ui/avatar-stack.js.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -7
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/avatar.js +0 -45
- package/dist/components/ui/avatar.js.map +0 -1
- package/dist/components/ui/banner.d.ts +0 -13
- package/dist/components/ui/banner.d.ts.map +0 -1
- package/dist/components/ui/banner.js +0 -24
- package/dist/components/ui/banner.js.map +0 -1
- package/dist/components/ui/branch-chip.d.ts.map +0 -1
- package/dist/components/ui/branch-chip.js +0 -58
- package/dist/components/ui/branch-chip.js.map +0 -1
- package/dist/components/ui/button.d.ts +0 -14
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/button.js +0 -65
- package/dist/components/ui/button.js.map +0 -1
- package/dist/components/ui/card.d.ts +0 -7
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/chip.d.ts.map +0 -1
- package/dist/components/ui/chip.js +0 -44
- package/dist/components/ui/chip.js.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -20
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dialog.js +0 -93
- package/dist/components/ui/dialog.js.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -28
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.js +0 -165
- package/dist/components/ui/dropdown-menu.js.map +0 -1
- package/dist/components/ui/empty.d.ts +0 -11
- package/dist/components/ui/empty.d.ts.map +0 -1
- package/dist/components/ui/empty.js +0 -24
- package/dist/components/ui/empty.js.map +0 -1
- package/dist/components/ui/field.d.ts.map +0 -1
- package/dist/components/ui/field.js +0 -52
- package/dist/components/ui/field.js.map +0 -1
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/input.js +0 -51
- package/dist/components/ui/input.js.map +0 -1
- package/dist/components/ui/kbd.d.ts.map +0 -1
- package/dist/components/ui/kbd.js +0 -30
- package/dist/components/ui/kbd.js.map +0 -1
- package/dist/components/ui/label.d.ts +0 -6
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/label.js +0 -20
- package/dist/components/ui/label.js.map +0 -1
- package/dist/components/ui/publish-button.d.ts +0 -7
- package/dist/components/ui/publish-button.d.ts.map +0 -1
- package/dist/components/ui/publish-button.js +0 -50
- package/dist/components/ui/publish-button.js.map +0 -1
- package/dist/components/ui/select.d.ts +0 -14
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/select.js +0 -132
- package/dist/components/ui/select.js.map +0 -1
- package/dist/components/ui/sonner.d.ts +0 -6
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js +0 -37
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/status-badge.d.ts.map +0 -1
- package/dist/components/ui/status-badge.js.map +0 -1
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/table.js.map +0 -1
- package/dist/components/ui/tabs-pill.d.ts +0 -17
- package/dist/components/ui/tabs-pill.d.ts.map +0 -1
- package/dist/components/ui/tabs-pill.js +0 -67
- package/dist/components/ui/tabs-pill.js.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/tabs.js +0 -59
- package/dist/components/ui/tabs.js.map +0 -1
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/textarea.js +0 -25
- package/dist/components/ui/textarea.js.map +0 -1
- package/dist/components/ui/toast-card.d.ts +0 -15
- package/dist/components/ui/toast-card.d.ts.map +0 -1
- package/dist/components/ui/toast-card.js +0 -90
- package/dist/components/ui/toast-card.js.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -16
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toast.js +0 -95
- package/dist/components/ui/toast.js.map +0 -1
- package/dist/components/ui/toaster.d.ts.map +0 -1
- package/dist/components/ui/toaster.js +0 -30
- package/dist/components/ui/toaster.js.map +0 -1
- package/dist/init-KWH66PKY.js.map +0 -1
- /package/dist/{agentDocs-M3R2CPUQ.js.map → agentDocs-QZ4NOQVH.js.map} +0 -0
- /package/dist/components/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
- /package/dist/components/{CreateBranchDialog.d.ts → Layout/CreateBranchDialog.d.ts} +0 -0
- /package/dist/components/{FormBooleanField.d.ts → ui/FormField/FormBooleanField.d.ts} +0 -0
- /package/dist/components/{FormColorField.d.ts → ui/FormField/FormColorField.d.ts} +0 -0
- /package/dist/components/{FormDatetimeField.d.ts → ui/FormField/FormDatetimeField.d.ts} +0 -0
- /package/dist/components/{FormJsonField.d.ts → ui/FormField/FormJsonField.d.ts} +0 -0
- /package/dist/components/{FormMarkdownField.d.ts → ui/FormField/FormMarkdownField.d.ts} +0 -0
- /package/dist/components/{FormNumberField.d.ts → ui/FormField/FormNumberField.d.ts} +0 -0
- /package/dist/components/{FormSlugField.d.ts → ui/FormField/FormSlugField.d.ts} +0 -0
- /package/dist/components/{FormStringField.d.ts → ui/FormField/FormStringField.d.ts} +0 -0
- /package/dist/components/{FormStringListField.d.ts → ui/FormField/FormStringListField.d.ts} +0 -0
- /package/dist/components/{FormTextField.d.ts → ui/FormField/FormTextField.d.ts} +0 -0
- /package/dist/components/{FormUrlField.d.ts → ui/FormField/FormUrlField.d.ts} +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/VariableEmbedEditor.d.ts +0 -0
- /package/dist/{update-QNJRYPMC.js.map → update-QALIQG76.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaGridSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock } from '../../skeletons/primitives';\n\n/**\n * Tile grid placeholder. Tile count defaults to 12 — enough to fill the\n * fold without making the page feel empty during a fast resolve.\n */\nexport function MediaGridSkeleton({ tiles = 12 }: { tiles?: number }) {\n return (\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaGridSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock } from '../../skeletons/primitives';\n\n/**\n * Tile grid placeholder. Tile count defaults to 12 — enough to fill the\n * fold without making the page feel empty during a fast resolve.\n */\nexport function MediaGridSkeleton({ tiles = 12 }: { tiles?: number }) {\n return (\n <div role=\"status\" aria-label=\"Loading media grid\" className=\"octo-media-grid\">\n {Array.from({ length: tiles }, (_, i) => (\n <div key={i} className=\"octo-media-grid__item-skel\">\n <ShimmerBlock className=\"octo-skel-aspect-square octo-skel-w-full octo-skel-rounded-xl\" />\n <ShimmerBlock className=\"octo-skel-h-3 octo-skel-w-2-3\" />\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";AAYQ,SACE,KADF;AAVR,SAAS,oBAAoB;AAMtB,SAAS,kBAAkB,EAAE,QAAQ,GAAG,GAAuB;AACpE,SACE,oBAAC,SAAI,MAAK,UAAS,cAAW,sBAAqB,WAAU,mBAC1D,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,MACjC,qBAAC,SAAY,WAAU,8BACrB;AAAA,wBAAC,gBAAa,WAAU,iEAAgE;AAAA,IACxF,oBAAC,gBAAa,WAAU,iCAAgC;AAAA,OAFhD,CAGV,CACD,GACH;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLeftPanelSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaLeftPanelSkeleton.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"MediaLeftPanelSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaLeftPanelSkeleton.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,sBAAsB,4CAcrC"}
|
|
@@ -2,19 +2,11 @@ import "../../../chunk-B5LE2OEC.js";
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { ShimmerBlock } from "../../skeletons/primitives";
|
|
4
4
|
function MediaLeftPanelSkeleton() {
|
|
5
|
-
return /* @__PURE__ */ jsx(
|
|
6
|
-
"
|
|
7
|
-
{
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
className: "flex w-[248px] shrink-0 flex-col overflow-y-auto border-r border-border bg-[var(--surface-2)]",
|
|
11
|
-
children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-4", children: [
|
|
12
|
-
/* @__PURE__ */ jsx(ShimmerBlock, { className: "mb-3 h-7 w-full rounded-lg" }),
|
|
13
|
-
/* @__PURE__ */ jsx(ShimmerBlock, { className: "mb-2 ml-2 h-3 w-16" }),
|
|
14
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5", children: Array.from({ length: 5 }, (_, i) => /* @__PURE__ */ jsx(ShimmerBlock, { className: "h-7 w-full rounded-lg" }, i)) })
|
|
15
|
-
] })
|
|
16
|
-
}
|
|
17
|
-
);
|
|
5
|
+
return /* @__PURE__ */ jsx("div", { role: "status", "aria-label": "Loading folders", children: /* @__PURE__ */ jsxs("div", { className: "octo-media-left-panel__skel-inner", children: [
|
|
6
|
+
/* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-mb-3 octo-skel-h-7 octo-skel-w-full octo-skel-rounded-lg" }),
|
|
7
|
+
/* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-mb-2 octo-skel-ml-2 octo-skel-h-3 octo-skel-w-16" }),
|
|
8
|
+
/* @__PURE__ */ jsx("div", { className: "octo-skel-col-6", children: Array.from({ length: 5 }, (_, i) => /* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-h-7 octo-skel-w-full octo-skel-rounded-lg" }, i)) })
|
|
9
|
+
] }) });
|
|
18
10
|
}
|
|
19
11
|
export {
|
|
20
12
|
MediaLeftPanelSkeleton
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaLeftPanelSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock } from '../../skeletons/primitives';\n\n/**\n * Mirrors `MediaLeftPanel` chrome — 248px sidebar, \"All files\" pill,\n * Folders header, then folder rows.\n */\nexport function MediaLeftPanelSkeleton() {\n return (\n <
|
|
1
|
+
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaLeftPanelSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock } from '../../skeletons/primitives';\n\n/**\n * Mirrors `MediaLeftPanel` chrome — 248px sidebar, \"All files\" pill,\n * Folders header, then folder rows.\n */\nexport function MediaLeftPanelSkeleton() {\n return (\n <div role=\"status\" aria-label=\"Loading folders\">\n <div className=\"octo-media-left-panel__skel-inner\">\n <ShimmerBlock className=\"octo-skel-mb-3 octo-skel-h-7 octo-skel-w-full octo-skel-rounded-lg\" />\n <ShimmerBlock className=\"octo-skel-mb-2 octo-skel-ml-2 octo-skel-h-3 octo-skel-w-16\" />\n <div className=\"octo-skel-col-6\">\n {Array.from({ length: 5 }, (_, i) => (\n <ShimmerBlock key={i} className=\"octo-skel-h-7 octo-skel-w-full octo-skel-rounded-lg\" />\n ))}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";AAWM,SACE,KADF;AATN,SAAS,oBAAoB;AAMtB,SAAS,yBAAyB;AACvC,SACE,oBAAC,SAAI,MAAK,UAAS,cAAW,mBAC5B,+BAAC,SAAI,WAAU,qCACb;AAAA,wBAAC,gBAAa,WAAU,sEAAqE;AAAA,IAC7F,oBAAC,gBAAa,WAAU,8DAA6D;AAAA,IACrF,oBAAC,SAAI,WAAU,mBACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAC7B,oBAAC,gBAAqB,WAAU,yDAAb,CAAmE,CACvF,GACH;AAAA,KACF,GACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaListTableSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaListTableSkeleton.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAQ,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"MediaListTableSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaListTableSkeleton.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAQ,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,2CAiBrE"}
|
|
@@ -3,21 +3,13 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { ShimmerBlock, ShimmerRow } from "../../skeletons/primitives";
|
|
4
4
|
function MediaListTableSkeleton({ rows = 8 }) {
|
|
5
5
|
const widths = ["40%", "16%", "12%", "14%", "16%"];
|
|
6
|
-
return /* @__PURE__ */ jsxs(
|
|
7
|
-
"div",
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/* @__PURE__ */ jsx("div", { className: "border-b border-border bg-[var(--surface-2)] px-4 py-2.5", children: /* @__PURE__ */ jsx(ShimmerRow, { widths }) }),
|
|
14
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 px-4 py-3", children: Array.from({ length: rows }, (_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
15
|
-
/* @__PURE__ */ jsx(ShimmerBlock, { className: "h-7 w-7 shrink-0 rounded-md" }),
|
|
16
|
-
/* @__PURE__ */ jsx(ShimmerRow, { className: "flex-1", widths })
|
|
17
|
-
] }, i)) })
|
|
18
|
-
]
|
|
19
|
-
}
|
|
20
|
-
);
|
|
6
|
+
return /* @__PURE__ */ jsxs("div", { role: "status", "aria-label": "Loading media list", className: "octo-content-card", children: [
|
|
7
|
+
/* @__PURE__ */ jsx("div", { className: "octo-content-card__th-row", style: { padding: "10px 16px" }, children: /* @__PURE__ */ jsx(ShimmerRow, { widths }) }),
|
|
8
|
+
/* @__PURE__ */ jsx("div", { className: "octo-content-table__skel-body", children: Array.from({ length: rows }, (_, i) => /* @__PURE__ */ jsxs("div", { className: "octo-skel-row-gap-16", children: [
|
|
9
|
+
/* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-h-7 octo-skel-w-7 octo-u-shrink-0 octo-skel-rounded-md" }),
|
|
10
|
+
/* @__PURE__ */ jsx(ShimmerRow, { className: "octo-u-flex-1", widths })
|
|
11
|
+
] }, i)) })
|
|
12
|
+
] });
|
|
21
13
|
}
|
|
22
14
|
export {
|
|
23
15
|
MediaListTableSkeleton
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaListTableSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock, ShimmerRow } from '../../skeletons/primitives';\n\n/**\n * Mirrors `MediaListTable` — header row + N body rows. Column widths match\n * the real table (Title 40%, Folder 16%, Format 12%, Dimensions 14%, File 16%).\n */\nexport function MediaListTableSkeleton({ rows = 8 }: { rows?: number }) {\n const widths = ['40%', '16%', '12%', '14%', '16%'];\n return (\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaListTableSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock, ShimmerRow } from '../../skeletons/primitives';\n\n/**\n * Mirrors `MediaListTable` — header row + N body rows. Column widths match\n * the real table (Title 40%, Folder 16%, Format 12%, Dimensions 14%, File 16%).\n */\nexport function MediaListTableSkeleton({ rows = 8 }: { rows?: number }) {\n const widths = ['40%', '16%', '12%', '14%', '16%'];\n return (\n <div role=\"status\" aria-label=\"Loading media list\" className=\"octo-content-card\">\n <div className=\"octo-content-card__th-row\" style={{ padding: '10px 16px' }}>\n <ShimmerRow widths={widths} />\n </div>\n <div className=\"octo-content-table__skel-body\">\n {Array.from({ length: rows }, (_, i) => (\n <div key={i} className=\"octo-skel-row-gap-16\">\n <ShimmerBlock className=\"octo-skel-h-7 octo-skel-w-7 octo-u-shrink-0 octo-skel-rounded-md\" />\n <ShimmerRow className=\"octo-u-flex-1\" widths={widths} />\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";AAaQ,cAIE,YAJF;AAXR,SAAS,cAAc,kBAAkB;AAMlC,SAAS,uBAAuB,EAAE,OAAO,EAAE,GAAsB;AACtE,QAAM,SAAS,CAAC,OAAO,OAAO,OAAO,OAAO,KAAK;AACjD,SACE,qBAAC,SAAI,MAAK,UAAS,cAAW,sBAAqB,WAAU,qBAC3D;AAAA,wBAAC,SAAI,WAAU,6BAA4B,OAAO,EAAE,SAAS,YAAY,GACvE,8BAAC,cAAW,QAAgB,GAC9B;AAAA,IACA,oBAAC,SAAI,WAAU,iCACZ,gBAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,GAAG,MAChC,qBAAC,SAAY,WAAU,wBACrB;AAAA,0BAAC,gBAAa,WAAU,oEAAmE;AAAA,MAC3F,oBAAC,cAAW,WAAU,iBAAgB,QAAgB;AAAA,SAF9C,CAGV,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaManagerMainSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaManagerMainSkeleton.tsx"],"names":[],"mappings":"AAMA,oFAAoF;AACpF,wBAAgB,wBAAwB,4CAcvC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "../../../chunk-B5LE2OEC.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ShimmerBlock } from "../../skeletons/primitives";
|
|
4
|
+
import { MediaGridSkeleton } from "./MediaGridSkeleton";
|
|
5
|
+
function MediaManagerMainSkeleton() {
|
|
6
|
+
return /* @__PURE__ */ jsx("div", { className: "octo-media-manager__body", children: /* @__PURE__ */ jsxs("div", { className: "octo-media-manager__content", children: [
|
|
7
|
+
/* @__PURE__ */ jsx("div", { className: "octo-media-manager__skel-header", children: /* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-h-16 octo-skel-w-full octo-skel-rounded-xl" }) }),
|
|
8
|
+
/* @__PURE__ */ jsx("div", { className: "octo-media-manager__skel-mid", children: /* @__PURE__ */ jsx(ShimmerBlock, { className: "octo-skel-h-8 octo-skel-w-72 octo-skel-rounded-lg" }) }),
|
|
9
|
+
/* @__PURE__ */ jsx(MediaGridSkeleton, {})
|
|
10
|
+
] }) });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
MediaManagerMainSkeleton
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=MediaManagerMainSkeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaManagerMainSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ShimmerBlock } from '../../skeletons/primitives';\n\nimport { MediaGridSkeleton } from './MediaGridSkeleton';\n\n/** Upload bar + search + grid placeholders inside `MediaManager` content column. */\nexport function MediaManagerMainSkeleton() {\n return (\n <div className=\"octo-media-manager__body\">\n <div className=\"octo-media-manager__content\">\n <div className=\"octo-media-manager__skel-header\">\n <ShimmerBlock className=\"octo-skel-h-16 octo-skel-w-full octo-skel-rounded-xl\" />\n </div>\n <div className=\"octo-media-manager__skel-mid\">\n <ShimmerBlock className=\"octo-skel-h-8 octo-skel-w-72 octo-skel-rounded-lg\" />\n </div>\n <MediaGridSkeleton />\n </div>\n </div>\n );\n}\n"],"mappings":";AAUM,SAEI,KAFJ;AARN,SAAS,oBAAoB;AAE7B,SAAS,yBAAyB;AAG3B,SAAS,2BAA2B;AACzC,SACE,oBAAC,SAAI,WAAU,4BACb,+BAAC,SAAI,WAAU,+BACb;AAAA,wBAAC,SAAI,WAAU,mCACb,8BAAC,gBAAa,WAAU,wDAAuD,GACjF;AAAA,IACA,oBAAC,SAAI,WAAU,gCACb,8BAAC,gBAAa,WAAU,qDAAoD,GAC9E;AAAA,IACA,oBAAC,qBAAkB;AAAA,KACrB,GACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaManagerPageSkeleton.d.ts","sourceRoot":"","sources":["../../../../components/MediaManager/skeletons/MediaManagerPageSkeleton.tsx"],"names":[],"mappings":"AAOA,2CAA2C;AAC3C,wBAAgB,wBAAwB,4CAWvC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import "../../../chunk-B5LE2OEC.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { PageChromeSkeleton } from "../../Layout/skeletons/PageChromeSkeleton";
|
|
4
|
+
import { MediaLeftPanelSkeleton } from "./MediaLeftPanelSkeleton";
|
|
5
|
+
import { MediaManagerMainSkeleton } from "./MediaManagerMainSkeleton";
|
|
6
|
+
function MediaManagerPageSkeleton() {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
PageChromeSkeleton,
|
|
9
|
+
{
|
|
10
|
+
className: "octo-media-manager",
|
|
11
|
+
leftBar: /* @__PURE__ */ jsx(MediaLeftPanelSkeleton, {}),
|
|
12
|
+
actionCount: 2,
|
|
13
|
+
ariaLabel: "Loading media",
|
|
14
|
+
children: /* @__PURE__ */ jsx(MediaManagerMainSkeleton, {})
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
MediaManagerPageSkeleton
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=MediaManagerPageSkeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../components/MediaManager/skeletons/MediaManagerPageSkeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { PageChromeSkeleton } from '../../Layout/skeletons/PageChromeSkeleton';\n\nimport { MediaLeftPanelSkeleton } from './MediaLeftPanelSkeleton';\nimport { MediaManagerMainSkeleton } from './MediaManagerMainSkeleton';\n\n/** Full-page fallback for `/cms/media`. */\nexport function MediaManagerPageSkeleton() {\n return (\n <PageChromeSkeleton\n className=\"octo-media-manager\"\n leftBar={<MediaLeftPanelSkeleton />}\n actionCount={2}\n ariaLabel=\"Loading media\"\n >\n <MediaManagerMainSkeleton />\n </PageChromeSkeleton>\n );\n}\n"],"mappings":";AAYe;AAVf,SAAS,0BAA0B;AAEnC,SAAS,8BAA8B;AACvC,SAAS,gCAAgC;AAGlC,SAAS,2BAA2B;AACzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,oBAAC,0BAAuB;AAAA,MACjC,aAAa;AAAA,MACb,WAAU;AAAA,MAEV,8BAAC,4BAAyB;AAAA;AAAA,EAC5B;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../components/public/MarkdownContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../components/public/MarkdownContent.tsx"],"names":[],"mappings":"AAuBA,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,eAAe,GAAI,yBAAyB,oBAAoB,mDAYrE,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -7,7 +7,6 @@ var _a, _b, _c;
|
|
|
7
7
|
import Markdown from "react-markdown";
|
|
8
8
|
import rehypeSanitize, { defaultSchema } from "rehype-sanitize";
|
|
9
9
|
import remarkGfm from "remark-gfm";
|
|
10
|
-
import { cn } from "../../lib/utils";
|
|
11
10
|
const sanitizeSchema = __spreadProps(__spreadValues({}, defaultSchema), {
|
|
12
11
|
tagNames: [
|
|
13
12
|
...(_a = defaultSchema.tagNames) != null ? _a : [],
|
|
@@ -23,7 +22,7 @@ const MarkdownContent = ({ children, className }) => {
|
|
|
23
22
|
if (!children) {
|
|
24
23
|
return null;
|
|
25
24
|
}
|
|
26
|
-
return /* @__PURE__ */ jsx("div", { className:
|
|
25
|
+
return /* @__PURE__ */ jsx("div", { className: `octo-markdown-content${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsx(Markdown, { remarkPlugins: [remarkGfm], rehypePlugins: [[rehypeSanitize, sanitizeSchema]], children }) });
|
|
27
26
|
};
|
|
28
27
|
var MarkdownContent_default = MarkdownContent;
|
|
29
28
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/public/MarkdownContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport Markdown from 'react-markdown';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport remarkGfm from 'remark-gfm';\n\
|
|
1
|
+
{"version":3,"sources":["../../../components/public/MarkdownContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport Markdown from 'react-markdown';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport remarkGfm from 'remark-gfm';\n\n/**\n * Sanitization schema: extends the default GitHub-flavoured schema with\n * the same tag/attribute allowlist that was previously applied via sanitize-html.\n */\nconst sanitizeSchema = {\n ...defaultSchema,\n tagNames: [\n ...(defaultSchema.tagNames ?? []),\n 'u', // underline — not in GitHub default\n ],\n attributes: {\n ...defaultSchema.attributes,\n code: [...(defaultSchema.attributes?.code ?? []), 'className'],\n img: ['src', 'alt', 'title'],\n },\n};\n\ntype MarkdownContentProps = {\n children: string | undefined | null;\n className?: string;\n};\n\n/**\n * Renders raw Markdown as React elements using react-markdown with GFM support\n * and HTML sanitization. Replaces the previous `dangerouslySetInnerHTML` approach.\n */\nconst MarkdownContent = ({ children, className }: MarkdownContentProps) => {\n if (!children) {\n return null;\n }\n\n return (\n <div className={`octo-markdown-content${className ? ` ${className}` : ''}`}>\n <Markdown remarkPlugins={[remarkGfm]} rehypePlugins={[[rehypeSanitize, sanitizeSchema]]}>\n {children}\n </Markdown>\n </div>\n );\n};\n\nexport default MarkdownContent;\n"],"mappings":";;;;AAuCM;AAvCN;AAEA,OAAO,cAAc;AACrB,OAAO,kBAAkB,qBAAqB;AAC9C,OAAO,eAAe;AAMtB,MAAM,iBAAiB,iCAClB,gBADkB;AAAA,EAErB,UAAU;AAAA,IACR,IAAI,mBAAc,aAAd,YAA0B,CAAC;AAAA,IAC/B;AAAA;AAAA,EACF;AAAA,EACA,YAAY,iCACP,cAAc,aADP;AAAA,IAEV,MAAM,CAAC,IAAI,yBAAc,eAAd,mBAA0B,SAA1B,YAAkC,CAAC,GAAI,WAAW;AAAA,IAC7D,KAAK,CAAC,OAAO,OAAO,OAAO;AAAA,EAC7B;AACF;AAWA,MAAM,kBAAkB,CAAC,EAAE,UAAU,UAAU,MAA4B;AACzE,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,SAAI,WAAW,wBAAwB,YAAY,IAAI,SAAS,KAAK,EAAE,IACtE,8BAAC,YAAS,eAAe,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,gBAAgB,cAAc,CAAC,GACnF,UACH,GACF;AAEJ;AAEA,IAAO,0BAAQ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextContent.d.ts","sourceRoot":"","sources":["../../../components/public/RichTextContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"RichTextContent.d.ts","sourceRoot":"","sources":["../../../components/public/RichTextContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAEtF,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,eAAe,GAAI,4DAA4D,oBAAoB,mDASxG,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -4,11 +4,10 @@ import {
|
|
|
4
4
|
} from "../../chunk-B5LE2OEC.js";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import Image from "next/image";
|
|
7
|
-
import { cn } from "../../lib/utils";
|
|
8
7
|
const RichTextContent = ({ document, components, variables, conditions, className }) => {
|
|
9
8
|
var _a;
|
|
10
9
|
if (!document || !((_a = document.content) == null ? void 0 : _a.length)) return null;
|
|
11
|
-
return /* @__PURE__ */ jsx("div", { className:
|
|
10
|
+
return /* @__PURE__ */ jsx("div", { className: `octo-richtext-content${className ? ` ${className}` : ""}`, children: document.content.map((node, i) => /* @__PURE__ */ jsx(RenderNode, { node, components, variables, conditions }, i)) });
|
|
12
11
|
};
|
|
13
12
|
var RichTextContent_default = RichTextContent;
|
|
14
13
|
function RenderNode({ node, components, variables, conditions }) {
|
|
@@ -112,13 +111,13 @@ function RenderImage({ image }) {
|
|
|
112
111
|
}, image.blurDataURL ? { placeholder: "blur", blurDataURL: image.blurDataURL } : {})
|
|
113
112
|
);
|
|
114
113
|
}
|
|
115
|
-
return /* @__PURE__ */ jsx("span", { className: "
|
|
114
|
+
return /* @__PURE__ */ jsx("span", { className: "octo-richtext-content__image-wrap", children: /* @__PURE__ */ jsx(
|
|
116
115
|
Image,
|
|
117
116
|
__spreadValues({
|
|
118
117
|
src: image.src,
|
|
119
118
|
alt: image.alt,
|
|
120
119
|
fill: true,
|
|
121
|
-
className: "
|
|
120
|
+
className: "octo-richtext-content__image"
|
|
122
121
|
}, image.blurDataURL ? { placeholder: "blur", blurDataURL: image.blurDataURL } : {})
|
|
123
122
|
) });
|
|
124
123
|
}
|
|
@@ -138,10 +137,22 @@ function RenderReference({
|
|
|
138
137
|
if (node.display === "inline") {
|
|
139
138
|
return /* @__PURE__ */ jsx("span", { children: (_b = title != null ? title : collectionType) != null ? _b : "Reference" });
|
|
140
139
|
}
|
|
141
|
-
return /* @__PURE__ */ jsxs(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
140
|
+
return /* @__PURE__ */ jsxs(
|
|
141
|
+
"div",
|
|
142
|
+
{
|
|
143
|
+
style: {
|
|
144
|
+
border: "1px solid var(--border)",
|
|
145
|
+
borderRadius: 6,
|
|
146
|
+
padding: "12px",
|
|
147
|
+
margin: "8px 0",
|
|
148
|
+
background: "color-mix(in oklab, var(--surface-2) 30%, transparent)"
|
|
149
|
+
},
|
|
150
|
+
children: [
|
|
151
|
+
collectionType && /* @__PURE__ */ jsx("span", { style: { fontSize: 12, color: "var(--muted)", display: "block", marginBottom: 2 }, children: collectionType }),
|
|
152
|
+
/* @__PURE__ */ jsx("span", { style: { fontSize: 13.5, fontWeight: 500 }, children: title != null ? title : "Untitled entry" })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
145
156
|
}
|
|
146
157
|
function RenderCondition({
|
|
147
158
|
node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/public/RichTextContent.tsx"],"sourcesContent":["import React from 'react';\nimport Image from 'next/image';\n\nimport type { RichTextDocument, RichTextNode, ResolvedImageField } from '../../types';\nimport { cn } from '../../lib/utils';\n\ntype RichTextContentProps = {\n document: RichTextDocument | null | undefined;\n /** Map custom component names to React components for rendering `{ type: 'component' }` nodes. */\n components?: Record<string, React.ComponentType<any>>;\n /** Variable substitutions for `{ type: 'variable' }` nodes. */\n variables?: Record<string, string>;\n /** Condition branch selections: map condition field names to the branch key to render. */\n conditions?: Record<string, string>;\n className?: string;\n};\n\n/**\n * Renders a `RichTextDocument` AST to React elements.\n *\n * Standard markdown nodes become HTML elements.\n * `CmsImage` embeds render as `next/image`.\n * Custom components and variables are resolved from the provided props.\n */\nconst RichTextContent = ({ document, components, variables, conditions, className }: RichTextContentProps) => {\n if (!document || !document.content?.length) return null;\n return (\n <div className={cn(className)}>\n {document.content.map((node, i) => (\n <RenderNode key={i} node={node} components={components} variables={variables} conditions={conditions} />\n ))}\n </div>\n );\n};\n\nexport default RichTextContent;\n\n// ---------------------------------------------------------------------------\n// Internal node renderer\n// ---------------------------------------------------------------------------\n\ntype NodeProps = {\n node: RichTextNode;\n components?: Record<string, React.ComponentType<any>>;\n variables?: Record<string, string>;\n conditions?: Record<string, string>;\n};\n\nfunction RenderNode({ node, components, variables, conditions }: NodeProps) {\n switch (node.type) {\n case 'paragraph':\n return (\n <p>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </p>\n );\n\n case 'heading': {\n const Tag = `h${node.level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <Tag>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </Tag>\n );\n }\n\n case 'blockquote':\n return (\n <blockquote>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </blockquote>\n );\n\n case 'list':\n if (node.ordered) {\n return (\n <ol>\n <RenderChildren\n nodes={node.children}\n components={components}\n variables={variables}\n conditions={conditions}\n />\n </ol>\n );\n }\n return (\n <ul>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </ul>\n );\n\n case 'listItem':\n return (\n <li>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </li>\n );\n\n case 'thematicBreak':\n return <hr />;\n\n case 'code':\n return (\n <pre>\n <code className={node.lang ? `language-${node.lang}` : undefined}>{node.value}</code>\n </pre>\n );\n\n case 'text':\n return <RenderText node={node} />;\n\n case 'link':\n return (\n <a href={node.url}>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </a>\n );\n\n case 'image':\n return <RenderImage image={node.image} />;\n\n case 'break':\n return <br />;\n\n case 'html':\n return null;\n\n case 'variable': {\n const value = variables?.[node.name];\n return <>{value ?? `{${node.name}}`}</>;\n }\n\n case 'component': {\n const Component = components?.[node.name];\n if (!Component) return null;\n return (\n <Component {...node.props}>\n {node.children?.length ? (\n <RenderChildren\n nodes={node.children}\n components={components}\n variables={variables}\n conditions={conditions}\n />\n ) : null}\n </Component>\n );\n }\n\n case 'reference':\n return <RenderReference node={node} components={components} />;\n\n case 'condition':\n return <RenderCondition node={node} components={components} variables={variables} conditions={conditions} />;\n\n default:\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Inline text with marks\n// ---------------------------------------------------------------------------\n\nfunction RenderText({ node }: { node: Extract<RichTextNode, { type: 'text' }> }) {\n let element: React.ReactNode = node.value;\n if (node.marks) {\n for (const mark of node.marks) {\n switch (mark) {\n case 'bold':\n element = <strong>{element}</strong>;\n break;\n case 'italic':\n element = <em>{element}</em>;\n break;\n case 'underline':\n element = <u>{element}</u>;\n break;\n case 'code':\n element = <code>{element}</code>;\n break;\n }\n }\n }\n return <>{element}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Image rendering via next/image\n// ---------------------------------------------------------------------------\n\nfunction RenderImage({ image }: { image: ResolvedImageField }) {\n if (!image.src) return null;\n\n const hasSize = image.width != null && image.height != null;\n\n if (hasSize) {\n return (\n <Image\n src={image.src}\n alt={image.alt}\n width={image.width!}\n height={image.height!}\n {...(image.blurDataURL ? { placeholder: 'blur' as const, blurDataURL: image.blurDataURL } : {})}\n />\n );\n }\n\n // Fallback for images without dimensions — use fill with a container\n return (\n <span className=\"relative block w-full\" style={{ aspectRatio: '16/9' }}>\n <Image\n src={image.src}\n alt={image.alt}\n fill\n className=\"object-cover\"\n {...(image.blurDataURL ? { placeholder: 'blur' as const, blurDataURL: image.blurDataURL } : {})}\n />\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Reference rendering — embedded entry references\n// ---------------------------------------------------------------------------\n\ntype ReferenceNode = Extract<RichTextNode, { type: 'reference' }>;\n\nfunction RenderReference({\n node,\n components,\n}: {\n node: ReferenceNode;\n components?: Record<string, React.ComponentType<any>>;\n}) {\n const entry = node.entry as { sys?: { type?: string }; fields?: Record<string, unknown> } | null;\n if (!entry) return null;\n\n const collectionType = entry.sys?.type;\n\n // If consumer provided a custom component for this collection type, use it\n if (collectionType && components?.[collectionType]) {\n const Component = components[collectionType];\n return node.display === 'inline' ? (\n <Component entry={entry} display={node.display} />\n ) : (\n <div>\n <Component entry={entry} display={node.display} />\n </div>\n );\n }\n\n // Default fallback: show the entry's title field if available\n const title = entry.fields\n ? (Object.values(entry.fields).find((v) => typeof v === 'string' && v.length > 0) as string | undefined)\n : null;\n\n if (node.display === 'inline') {\n return <span>{title ?? collectionType ?? 'Reference'}</span>;\n }\n\n return (\n <div className=\"rounded border border-border p-3 my-2 bg-muted/30\">\n {collectionType && <span className=\"text-xs text-muted-foreground block mb-0.5\">{collectionType}</span>}\n <span className=\"text-sm font-medium\">{title ?? 'Untitled entry'}</span>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Condition rendering — select and render the appropriate branch\n// ---------------------------------------------------------------------------\n\ntype ConditionNode = Extract<RichTextNode, { type: 'condition' }>;\n\nfunction RenderCondition({\n node,\n components,\n variables,\n conditions,\n}: {\n node: ConditionNode;\n components?: Record<string, React.ComponentType<any>>;\n variables?: Record<string, string>;\n conditions?: Record<string, string>;\n}) {\n const branches = node.branches;\n if (!branches || typeof branches !== 'object') return null;\n\n // If a condition selection was provided, render only the selected branch\n const selectedKey = node.field && conditions ? conditions[node.field] : undefined;\n\n if (selectedKey) {\n const doc = (branches as Record<string, RichTextDocument>)[selectedKey];\n if (!doc || !doc.content?.length) return null;\n return (\n <>\n {doc.content.map((child, i) => (\n <RenderNode key={i} node={child} components={components} variables={variables} conditions={conditions} />\n ))}\n </>\n );\n }\n\n // No condition provided — render nothing (consumer must specify which branch to show)\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Helper: render a list of child nodes\n// ---------------------------------------------------------------------------\n\nfunction RenderChildren({\n nodes,\n components,\n variables,\n conditions,\n}: { nodes: RichTextNode[] } & Pick<NodeProps, 'components' | 'variables' | 'conditions'>) {\n return (\n <>\n {nodes.map((child, i) => (\n <RenderNode key={i} node={child} components={components} variables={variables} conditions={conditions} />\n ))}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../components/public/RichTextContent.tsx"],"sourcesContent":["import React from 'react';\nimport Image from 'next/image';\n\nimport type { RichTextDocument, RichTextNode, ResolvedImageField } from '../../types';\n\ntype RichTextContentProps = {\n document: RichTextDocument | null | undefined;\n /** Map custom component names to React components for rendering `{ type: 'component' }` nodes. */\n components?: Record<string, React.ComponentType<any>>;\n /** Variable substitutions for `{ type: 'variable' }` nodes. */\n variables?: Record<string, string>;\n /** Condition branch selections: map condition field names to the branch key to render. */\n conditions?: Record<string, string>;\n className?: string;\n};\n\n/**\n * Renders a `RichTextDocument` AST to React elements.\n *\n * Standard markdown nodes become HTML elements.\n * `CmsImage` embeds render as `next/image`.\n * Custom components and variables are resolved from the provided props.\n */\nconst RichTextContent = ({ document, components, variables, conditions, className }: RichTextContentProps) => {\n if (!document || !document.content?.length) return null;\n return (\n <div className={`octo-richtext-content${className ? ` ${className}` : ''}`}>\n {document.content.map((node, i) => (\n <RenderNode key={i} node={node} components={components} variables={variables} conditions={conditions} />\n ))}\n </div>\n );\n};\n\nexport default RichTextContent;\n\n// ---------------------------------------------------------------------------\n// Internal node renderer\n// ---------------------------------------------------------------------------\n\ntype NodeProps = {\n node: RichTextNode;\n components?: Record<string, React.ComponentType<any>>;\n variables?: Record<string, string>;\n conditions?: Record<string, string>;\n};\n\nfunction RenderNode({ node, components, variables, conditions }: NodeProps) {\n switch (node.type) {\n case 'paragraph':\n return (\n <p>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </p>\n );\n\n case 'heading': {\n const Tag = `h${node.level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <Tag>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </Tag>\n );\n }\n\n case 'blockquote':\n return (\n <blockquote>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </blockquote>\n );\n\n case 'list':\n if (node.ordered) {\n return (\n <ol>\n <RenderChildren\n nodes={node.children}\n components={components}\n variables={variables}\n conditions={conditions}\n />\n </ol>\n );\n }\n return (\n <ul>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </ul>\n );\n\n case 'listItem':\n return (\n <li>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </li>\n );\n\n case 'thematicBreak':\n return <hr />;\n\n case 'code':\n return (\n <pre>\n <code className={node.lang ? `language-${node.lang}` : undefined}>{node.value}</code>\n </pre>\n );\n\n case 'text':\n return <RenderText node={node} />;\n\n case 'link':\n return (\n <a href={node.url}>\n <RenderChildren nodes={node.children} components={components} variables={variables} conditions={conditions} />\n </a>\n );\n\n case 'image':\n return <RenderImage image={node.image} />;\n\n case 'break':\n return <br />;\n\n case 'html':\n return null;\n\n case 'variable': {\n const value = variables?.[node.name];\n return <>{value ?? `{${node.name}}`}</>;\n }\n\n case 'component': {\n const Component = components?.[node.name];\n if (!Component) return null;\n return (\n <Component {...node.props}>\n {node.children?.length ? (\n <RenderChildren\n nodes={node.children}\n components={components}\n variables={variables}\n conditions={conditions}\n />\n ) : null}\n </Component>\n );\n }\n\n case 'reference':\n return <RenderReference node={node} components={components} />;\n\n case 'condition':\n return <RenderCondition node={node} components={components} variables={variables} conditions={conditions} />;\n\n default:\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Inline text with marks\n// ---------------------------------------------------------------------------\n\nfunction RenderText({ node }: { node: Extract<RichTextNode, { type: 'text' }> }) {\n let element: React.ReactNode = node.value;\n if (node.marks) {\n for (const mark of node.marks) {\n switch (mark) {\n case 'bold':\n element = <strong>{element}</strong>;\n break;\n case 'italic':\n element = <em>{element}</em>;\n break;\n case 'underline':\n element = <u>{element}</u>;\n break;\n case 'code':\n element = <code>{element}</code>;\n break;\n }\n }\n }\n return <>{element}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Image rendering via next/image\n// ---------------------------------------------------------------------------\n\nfunction RenderImage({ image }: { image: ResolvedImageField }) {\n if (!image.src) return null;\n\n const hasSize = image.width != null && image.height != null;\n\n if (hasSize) {\n return (\n <Image\n src={image.src}\n alt={image.alt}\n width={image.width!}\n height={image.height!}\n {...(image.blurDataURL ? { placeholder: 'blur' as const, blurDataURL: image.blurDataURL } : {})}\n />\n );\n }\n\n // Fallback for images without dimensions — use fill with a container\n return (\n <span className=\"octo-richtext-content__image-wrap\">\n <Image\n src={image.src}\n alt={image.alt}\n fill\n className=\"octo-richtext-content__image\"\n {...(image.blurDataURL ? { placeholder: 'blur' as const, blurDataURL: image.blurDataURL } : {})}\n />\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Reference rendering — embedded entry references\n// ---------------------------------------------------------------------------\n\ntype ReferenceNode = Extract<RichTextNode, { type: 'reference' }>;\n\nfunction RenderReference({\n node,\n components,\n}: {\n node: ReferenceNode;\n components?: Record<string, React.ComponentType<any>>;\n}) {\n const entry = node.entry as { sys?: { type?: string }; fields?: Record<string, unknown> } | null;\n if (!entry) return null;\n\n const collectionType = entry.sys?.type;\n\n // If consumer provided a custom component for this collection type, use it\n if (collectionType && components?.[collectionType]) {\n const Component = components[collectionType];\n return node.display === 'inline' ? (\n <Component entry={entry} display={node.display} />\n ) : (\n <div>\n <Component entry={entry} display={node.display} />\n </div>\n );\n }\n\n // Default fallback: show the entry's title field if available\n const title = entry.fields\n ? (Object.values(entry.fields).find((v) => typeof v === 'string' && v.length > 0) as string | undefined)\n : null;\n\n if (node.display === 'inline') {\n return <span>{title ?? collectionType ?? 'Reference'}</span>;\n }\n\n return (\n <div\n style={{\n border: '1px solid var(--border)',\n borderRadius: 6,\n padding: '12px',\n margin: '8px 0',\n background: 'color-mix(in oklab, var(--surface-2) 30%, transparent)',\n }}\n >\n {collectionType && (\n <span style={{ fontSize: 12, color: 'var(--muted)', display: 'block', marginBottom: 2 }}>{collectionType}</span>\n )}\n <span style={{ fontSize: 13.5, fontWeight: 500 }}>{title ?? 'Untitled entry'}</span>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Condition rendering — select and render the appropriate branch\n// ---------------------------------------------------------------------------\n\ntype ConditionNode = Extract<RichTextNode, { type: 'condition' }>;\n\nfunction RenderCondition({\n node,\n components,\n variables,\n conditions,\n}: {\n node: ConditionNode;\n components?: Record<string, React.ComponentType<any>>;\n variables?: Record<string, string>;\n conditions?: Record<string, string>;\n}) {\n const branches = node.branches;\n if (!branches || typeof branches !== 'object') return null;\n\n // If a condition selection was provided, render only the selected branch\n const selectedKey = node.field && conditions ? conditions[node.field] : undefined;\n\n if (selectedKey) {\n const doc = (branches as Record<string, RichTextDocument>)[selectedKey];\n if (!doc || !doc.content?.length) return null;\n return (\n <>\n {doc.content.map((child, i) => (\n <RenderNode key={i} node={child} components={components} variables={variables} conditions={conditions} />\n ))}\n </>\n );\n }\n\n // No condition provided — render nothing (consumer must specify which branch to show)\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Helper: render a list of child nodes\n// ---------------------------------------------------------------------------\n\nfunction RenderChildren({\n nodes,\n components,\n variables,\n conditions,\n}: { nodes: RichTextNode[] } & Pick<NodeProps, 'components' | 'variables' | 'conditions'>) {\n return (\n <>\n {nodes.map((child, i) => (\n <RenderNode key={i} node={child} components={components} variables={variables} conditions={conditions} />\n ))}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../components/public/SearchBox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../components/public/SearchBox.tsx"],"names":[],"mappings":"AAkCA,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,WAAyB,EAAE,SAAc,EAAE,EAAE,cAAc,2CAuL9F"}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
import "../../chunk-B5LE2OEC.js";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
5
|
-
import {
|
|
6
|
-
import { cn } from "../../lib/utils";
|
|
5
|
+
import { Icon } from "../ui";
|
|
7
6
|
function escapeRegex(s) {
|
|
8
7
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
9
8
|
}
|
|
@@ -13,7 +12,7 @@ function highlightTerms(text, terms) {
|
|
|
13
12
|
const pattern = filtered.map((t) => escapeRegex(t) + "\\w*").join("|");
|
|
14
13
|
const parts = text.split(new RegExp(`(${pattern})`, "gi"));
|
|
15
14
|
return parts.map(
|
|
16
|
-
(part, i) => i % 2 === 1 ? /* @__PURE__ */ jsx("mark", {
|
|
15
|
+
(part, i) => i % 2 === 1 ? /* @__PURE__ */ jsx("mark", { style: { background: "#fef08a", color: "inherit", borderRadius: 2, padding: "0 2px" }, children: part }, i) : part
|
|
17
16
|
);
|
|
18
17
|
}
|
|
19
18
|
function SearchBox({ placeholder = "Search...", className = "" }) {
|
|
@@ -113,9 +112,9 @@ function SearchBox({ placeholder = "Search...", className = "" }) {
|
|
|
113
112
|
setSelectedIndex(-1);
|
|
114
113
|
(_a = inputRef.current) == null ? void 0 : _a.focus();
|
|
115
114
|
};
|
|
116
|
-
return /* @__PURE__ */ jsxs("div", { className:
|
|
117
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
118
|
-
/* @__PURE__ */ jsx(Search, { className: "
|
|
115
|
+
return /* @__PURE__ */ jsxs("div", { className: `octo-search-box${className ? ` ${className}` : ""}`, children: [
|
|
116
|
+
/* @__PURE__ */ jsxs("div", { className: "octo-search-box__input-wrap", children: [
|
|
117
|
+
/* @__PURE__ */ jsx(Icon.Search, { className: "octo-search-box__icon", size: 18 }),
|
|
119
118
|
/* @__PURE__ */ jsx(
|
|
120
119
|
"input",
|
|
121
120
|
{
|
|
@@ -130,65 +129,38 @@ function SearchBox({ placeholder = "Search...", className = "" }) {
|
|
|
130
129
|
}
|
|
131
130
|
},
|
|
132
131
|
placeholder,
|
|
133
|
-
className:
|
|
134
|
-
"w-full pl-10 pr-10 py-2 text-sm border border-gray-200 rounded-lg",
|
|
135
|
-
"bg-white text-gray-900 placeholder-gray-400",
|
|
136
|
-
"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent",
|
|
137
|
-
"dark:bg-gray-900 dark:border-gray-700 dark:text-gray-100 dark:placeholder-gray-500"
|
|
138
|
-
),
|
|
132
|
+
className: "octo-search-box__input",
|
|
139
133
|
autoComplete: "off"
|
|
140
134
|
}
|
|
141
135
|
),
|
|
142
|
-
query && /* @__PURE__ */ jsx(
|
|
143
|
-
"button",
|
|
144
|
-
{
|
|
145
|
-
type: "button",
|
|
146
|
-
onClick: handleClear,
|
|
147
|
-
className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors",
|
|
148
|
-
"aria-label": "Clear search",
|
|
149
|
-
children: /* @__PURE__ */ jsx(X, { size: 18 })
|
|
150
|
-
}
|
|
151
|
-
)
|
|
136
|
+
query && /* @__PURE__ */ jsx("button", { type: "button", onClick: handleClear, className: "octo-search-box__clear", "aria-label": "Clear search", children: /* @__PURE__ */ jsx(Icon.X, { size: 18 }) })
|
|
152
137
|
] }),
|
|
153
|
-
isOpen && (results.length > 0 || isSearching) && /* @__PURE__ */ jsxs(
|
|
154
|
-
"div",
|
|
155
|
-
{
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
"
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
isSearching && results.length === 0 && /* @__PURE__ */ jsx("div", { className: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400 text-center", children: "Searching..." }),
|
|
163
|
-
results.length > 0 && /* @__PURE__ */ jsx("ul", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: results.map((result, index) => /* @__PURE__ */ jsx(
|
|
164
|
-
"li",
|
|
138
|
+
isOpen && (results.length > 0 || isSearching) && /* @__PURE__ */ jsxs("div", { ref: dropdownRef, className: "octo-search-box__results", children: [
|
|
139
|
+
isSearching && results.length === 0 && /* @__PURE__ */ jsx("div", { className: "octo-search-box__searching", children: "Searching..." }),
|
|
140
|
+
results.length > 0 && /* @__PURE__ */ jsx("ul", { className: "octo-search-box__list", children: results.map((result, index) => /* @__PURE__ */ jsx(
|
|
141
|
+
"li",
|
|
142
|
+
{
|
|
143
|
+
"data-result-item": true,
|
|
144
|
+
className: `octo-search-box__result${index === selectedIndex ? " octo-search-box__result octo-search-box__result--active" : ""}`,
|
|
145
|
+
children: /* @__PURE__ */ jsxs(
|
|
146
|
+
"button",
|
|
165
147
|
{
|
|
166
|
-
"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
Object.values(result.match).flat().includes("content") && result.snippet && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 line-clamp-2 text-left", children: highlightTerms(result.snippet, Object.keys(result.match)) })
|
|
183
|
-
]
|
|
184
|
-
}
|
|
185
|
-
)
|
|
186
|
-
},
|
|
187
|
-
result.id
|
|
188
|
-
)) })
|
|
189
|
-
]
|
|
190
|
-
}
|
|
191
|
-
)
|
|
148
|
+
type: "button",
|
|
149
|
+
onClick: () => navigateToResult(result),
|
|
150
|
+
className: "octo-search-box__result-btn",
|
|
151
|
+
children: [
|
|
152
|
+
/* @__PURE__ */ jsxs("div", { className: "octo-search-box__result-top", children: [
|
|
153
|
+
/* @__PURE__ */ jsx("span", { className: "octo-search-box__result-title", children: highlightTerms(result.title, Object.keys(result.match)) }),
|
|
154
|
+
/* @__PURE__ */ jsx("span", { className: "octo-search-box__result-badge", children: result.typeLabel })
|
|
155
|
+
] }),
|
|
156
|
+
Object.values(result.match).flat().includes("content") && result.snippet && /* @__PURE__ */ jsx("p", { className: "octo-search-box__result-snippet", children: highlightTerms(result.snippet, Object.keys(result.match)) })
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
)
|
|
160
|
+
},
|
|
161
|
+
result.id
|
|
162
|
+
)) })
|
|
163
|
+
] })
|
|
192
164
|
] });
|
|
193
165
|
}
|
|
194
166
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/public/SearchBox.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Search, X } from 'lucide-react';\n\nimport type { SearchResult } from '../../lib/searchIndex';\nimport { cn } from '../../lib/utils';\n\n/** Escape special regex characters in a string. */\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Split text into alternating non-match/match segments and wrap matches in <mark>.\n * Uses prefix matching (term\\w*) to support MiniSearch's prefix: true behavior.\n */\nfunction highlightTerms(text: string, terms: string[]): React.ReactNode {\n const filtered = terms.filter((t) => t.length > 0);\n if (filtered.length === 0) return text;\n\n const pattern = filtered.map((t) => escapeRegex(t) + '\\\\w*').join('|');\n const parts = text.split(new RegExp(`(${pattern})`, 'gi'));\n\n return parts.map((part, i) =>\n i % 2 === 1 ? (\n <mark key={i} className=\"bg-yellow-200 dark:bg-yellow-800 text-inherit rounded-sm px-0.5\">\n {part}\n </mark>\n ) : (\n part\n ),\n );\n}\n\nexport interface SearchBoxProps {\n placeholder?: string;\n className?: string;\n}\n\nexport default function SearchBox({ placeholder = 'Search...', className = '' }: SearchBoxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isOpen, setIsOpen] = useState(false);\n const [isSearching, setIsSearching] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Fetch search results\n const doSearch = useCallback(async (q: string) => {\n if (!q.trim()) {\n setResults([]);\n setIsOpen(false);\n setSelectedIndex(-1);\n return;\n }\n\n setIsSearching(true);\n try {\n const response = await fetch(`/api/search?q=${encodeURIComponent(q)}&limit=10`);\n if (response.ok) {\n const data = await response.json();\n setResults(data.results || []);\n setIsOpen(true);\n setSelectedIndex(-1);\n } else {\n setResults([]);\n setIsOpen(false);\n }\n } catch {\n setResults([]);\n setIsOpen(false);\n } finally {\n setIsSearching(false);\n }\n }, []);\n\n // Handle input change with debounce\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setQuery(value);\n\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => doSearch(value), 300);\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || results.length === 0) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) => (prev < results.length - 1 ? prev + 1 : 0));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : results.length - 1));\n break;\n case 'Enter':\n e.preventDefault();\n if (selectedIndex >= 0 && results[selectedIndex]) {\n navigateToResult(results[selectedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSelectedIndex(-1);\n break;\n default:\n break;\n }\n };\n\n // Navigate to a result\n const navigateToResult = (result: SearchResult) => {\n window.location.href = result.url;\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Scroll selected result into view\n useEffect(() => {\n if (selectedIndex >= 0 && dropdownRef.current) {\n const items = dropdownRef.current.querySelectorAll('[data-result-item]');\n if (items[selectedIndex]) {\n items[selectedIndex].scrollIntoView({ block: 'nearest' });\n }\n }\n }, [selectedIndex]);\n\n const handleClear = () => {\n setQuery('');\n setResults([]);\n setIsOpen(false);\n setSelectedIndex(-1);\n inputRef.current?.focus();\n };\n\n return (\n <div className={cn('relative w-full', className)}>\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\" size={18} />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (query.trim() && results.length > 0) {\n setIsOpen(true);\n }\n }}\n placeholder={placeholder}\n className={cn(\n 'w-full pl-10 pr-10 py-2 text-sm border border-gray-200 rounded-lg',\n 'bg-white text-gray-900 placeholder-gray-400',\n 'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent',\n 'dark:bg-gray-900 dark:border-gray-700 dark:text-gray-100 dark:placeholder-gray-500',\n )}\n autoComplete=\"off\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n aria-label=\"Clear search\"\n >\n <X size={18} />\n </button>\n )}\n </div>\n\n {/* Dropdown results */}\n {isOpen && (results.length > 0 || isSearching) && (\n <div\n ref={dropdownRef}\n className={cn(\n 'absolute top-full left-0 right-0 mt-2 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg z-50 max-h-96 overflow-y-auto',\n )}\n >\n {isSearching && results.length === 0 && (\n <div className=\"px-4 py-3 text-sm text-gray-500 dark:text-gray-400 text-center\">Searching...</div>\n )}\n\n {results.length > 0 && (\n <ul className=\"divide-y divide-gray-100 dark:divide-gray-800\">\n {results.map((result, index) => (\n <li\n key={result.id}\n data-result-item\n className={cn(\n 'p-0 transition-colors',\n index === selectedIndex\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800',\n )}\n >\n <button\n type=\"button\"\n onClick={() => navigateToResult(result)}\n className=\"w-full text-left px-4 py-3 flex flex-col gap-1\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-medium text-gray-900 dark:text-gray-100 truncate text-sm\">\n {highlightTerms(result.title, Object.keys(result.match))}\n </span>\n <span className=\"shrink-0 text-xs text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-gray-800 px-2 py-0.5 rounded\">\n {result.typeLabel}\n </span>\n </div>\n {Object.values(result.match).flat().includes('content') && result.snippet && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 line-clamp-2 text-left\">\n {highlightTerms(result.snippet, Object.keys(result.match))}\n </p>\n )}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../components/public/SearchBox.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Icon } from '../ui';\n\nimport type { SearchResult } from '../../lib/searchIndex';\n\n/** Escape special regex characters in a string. */\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Split text into alternating non-match/match segments and wrap matches in <mark>.\n * Uses prefix matching (term\\w*) to support MiniSearch's prefix: true behavior.\n */\nfunction highlightTerms(text: string, terms: string[]): React.ReactNode {\n const filtered = terms.filter((t) => t.length > 0);\n if (filtered.length === 0) return text;\n\n const pattern = filtered.map((t) => escapeRegex(t) + '\\\\w*').join('|');\n const parts = text.split(new RegExp(`(${pattern})`, 'gi'));\n\n return parts.map((part, i) =>\n i % 2 === 1 ? (\n <mark key={i} style={{ background: '#fef08a', color: 'inherit', borderRadius: 2, padding: '0 2px' }}>\n {part}\n </mark>\n ) : (\n part\n ),\n );\n}\n\nexport interface SearchBoxProps {\n placeholder?: string;\n className?: string;\n}\n\nexport default function SearchBox({ placeholder = 'Search...', className = '' }: SearchBoxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isOpen, setIsOpen] = useState(false);\n const [isSearching, setIsSearching] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Fetch search results\n const doSearch = useCallback(async (q: string) => {\n if (!q.trim()) {\n setResults([]);\n setIsOpen(false);\n setSelectedIndex(-1);\n return;\n }\n\n setIsSearching(true);\n try {\n const response = await fetch(`/api/search?q=${encodeURIComponent(q)}&limit=10`);\n if (response.ok) {\n const data = await response.json();\n setResults(data.results || []);\n setIsOpen(true);\n setSelectedIndex(-1);\n } else {\n setResults([]);\n setIsOpen(false);\n }\n } catch {\n setResults([]);\n setIsOpen(false);\n } finally {\n setIsSearching(false);\n }\n }, []);\n\n // Handle input change with debounce\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setQuery(value);\n\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => doSearch(value), 300);\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || results.length === 0) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) => (prev < results.length - 1 ? prev + 1 : 0));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : results.length - 1));\n break;\n case 'Enter':\n e.preventDefault();\n if (selectedIndex >= 0 && results[selectedIndex]) {\n navigateToResult(results[selectedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSelectedIndex(-1);\n break;\n default:\n break;\n }\n };\n\n // Navigate to a result\n const navigateToResult = (result: SearchResult) => {\n window.location.href = result.url;\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Scroll selected result into view\n useEffect(() => {\n if (selectedIndex >= 0 && dropdownRef.current) {\n const items = dropdownRef.current.querySelectorAll('[data-result-item]');\n if (items[selectedIndex]) {\n items[selectedIndex].scrollIntoView({ block: 'nearest' });\n }\n }\n }, [selectedIndex]);\n\n const handleClear = () => {\n setQuery('');\n setResults([]);\n setIsOpen(false);\n setSelectedIndex(-1);\n inputRef.current?.focus();\n };\n\n return (\n <div className={`octo-search-box${className ? ` ${className}` : ''}`}>\n <div className=\"octo-search-box__input-wrap\">\n <Icon.Search className=\"octo-search-box__icon\" size={18} />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (query.trim() && results.length > 0) {\n setIsOpen(true);\n }\n }}\n placeholder={placeholder}\n className=\"octo-search-box__input\"\n autoComplete=\"off\"\n />\n {query && (\n <button type=\"button\" onClick={handleClear} className=\"octo-search-box__clear\" aria-label=\"Clear search\">\n <Icon.X size={18} />\n </button>\n )}\n </div>\n\n {/* Dropdown results */}\n {isOpen && (results.length > 0 || isSearching) && (\n <div ref={dropdownRef} className=\"octo-search-box__results\">\n {isSearching && results.length === 0 && <div className=\"octo-search-box__searching\">Searching...</div>}\n\n {results.length > 0 && (\n <ul className=\"octo-search-box__list\">\n {results.map((result, index) => (\n <li\n key={result.id}\n data-result-item\n className={`octo-search-box__result${index === selectedIndex ? ' octo-search-box__result octo-search-box__result--active' : ''}`}\n >\n <button\n type=\"button\"\n onClick={() => navigateToResult(result)}\n className=\"octo-search-box__result-btn\"\n >\n <div className=\"octo-search-box__result-top\">\n <span className=\"octo-search-box__result-title\">\n {highlightTerms(result.title, Object.keys(result.match))}\n </span>\n <span className=\"octo-search-box__result-badge\">{result.typeLabel}</span>\n </div>\n {Object.values(result.match).flat().includes('content') && result.snippet && (\n <p className=\"octo-search-box__result-snippet\">\n {highlightTerms(result.snippet, Object.keys(result.match))}\n </p>\n )}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|