camox 0.0.0 → 0.1.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +110 -0
- package/dist/components/AuthGate.d.ts +7 -0
- package/dist/components/AuthGate.d.ts.map +1 -0
- package/dist/core/components/AddBlockControlBar.d.ts +9 -0
- package/dist/core/components/AddBlockControlBar.d.ts.map +1 -0
- package/dist/core/components/AddBlockControlBar.js +65 -0
- package/dist/core/components/lexical/InlineContentEditable.d.ts +7 -0
- package/dist/core/components/lexical/InlineContentEditable.d.ts.map +1 -0
- package/dist/core/components/lexical/InlineContentEditable.js +40 -0
- package/dist/core/components/lexical/InlineLexicalEditor.d.ts +12 -0
- package/dist/core/components/lexical/InlineLexicalEditor.d.ts.map +1 -0
- package/dist/core/components/lexical/InlineLexicalEditor.js +133 -0
- package/dist/core/components/lexical/InlineParagraphNode.d.ts +10 -0
- package/dist/core/components/lexical/InlineParagraphNode.d.ts.map +1 -0
- package/dist/core/components/lexical/InlineParagraphNode.js +34 -0
- package/dist/core/components/lexical/SelectionBroadcaster.d.ts +6 -0
- package/dist/core/components/lexical/SelectionBroadcaster.d.ts.map +1 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +62 -0
- package/dist/core/components/lexical/SidebarLexicalEditor.d.ts +9 -0
- package/dist/core/components/lexical/SidebarLexicalEditor.d.ts.map +1 -0
- package/dist/core/components/lexical/editorConfig.d.ts +4 -0
- package/dist/core/components/lexical/editorConfig.d.ts.map +1 -0
- package/dist/core/components/lexical/editorConfig.js +24 -0
- package/dist/core/createApp.d.ts +373 -0
- package/dist/core/createApp.d.ts.map +1 -0
- package/dist/core/createApp.js +40 -0
- package/dist/core/createBlock.d.ts +947 -0
- package/dist/core/createBlock.d.ts.map +1 -0
- package/dist/core/createBlock.js +873 -0
- package/dist/core/createLayout.d.ts +78 -0
- package/dist/core/createLayout.d.ts.map +1 -0
- package/dist/core/createLayout.js +73 -0
- package/dist/core/hooks/useFieldSelection.d.ts +11 -0
- package/dist/core/hooks/useFieldSelection.d.ts.map +1 -0
- package/dist/core/hooks/useFieldSelection.js +25 -0
- package/dist/core/hooks/useIsEditable.d.ts +2 -0
- package/dist/core/hooks/useIsEditable.d.ts.map +1 -0
- package/dist/core/hooks/useIsEditable.js +12 -0
- package/dist/core/hooks/useOverlayMessage.d.ts +10 -0
- package/dist/core/hooks/useOverlayMessage.d.ts.map +1 -0
- package/dist/core/hooks/useOverlayMessage.js +37 -0
- package/dist/core/lib/contentType.d.ts +165 -0
- package/dist/core/lib/contentType.d.ts.map +1 -0
- package/dist/core/lib/contentType.js +148 -0
- package/dist/core/lib/fieldTypes.d.ts +85 -0
- package/dist/core/lib/fieldTypes.d.ts.map +1 -0
- package/dist/core/lib/lexicalReact.d.ts +3 -0
- package/dist/core/lib/lexicalReact.d.ts.map +1 -0
- package/dist/core/lib/lexicalReact.js +24 -0
- package/dist/core/lib/lexicalState.d.ts +10 -0
- package/dist/core/lib/lexicalState.d.ts.map +1 -0
- package/dist/core/lib/lexicalState.js +38 -0
- package/dist/core/lib/modifierFormats.d.ts +9 -0
- package/dist/core/lib/modifierFormats.d.ts.map +1 -0
- package/dist/core/lib/modifierFormats.js +8 -0
- package/dist/core/lib/modifiers.d.ts +12 -0
- package/dist/core/lib/modifiers.d.ts.map +1 -0
- package/dist/core/lib/modifiers.js +27 -0
- package/dist/features/content/CamoxContent.d.ts +2 -0
- package/dist/features/content/CamoxContent.d.ts.map +1 -0
- package/dist/features/content/CamoxContent.js +100 -0
- package/dist/features/content/components/AssetCard.d.ts +10 -0
- package/dist/features/content/components/AssetCard.d.ts.map +1 -0
- package/dist/features/content/components/AssetCard.js +41 -0
- package/dist/features/content/components/AssetCardSkeleton.d.ts +2 -0
- package/dist/features/content/components/AssetCardSkeleton.d.ts.map +1 -0
- package/dist/features/content/components/AssetCardSkeleton.js +11 -0
- package/dist/features/content/components/ContentSidebar.d.ts +2 -0
- package/dist/features/content/components/ContentSidebar.d.ts.map +1 -0
- package/dist/features/content/components/ContentSidebar.js +15 -0
- package/dist/features/content/components/UploadDropZone.d.ts +9 -0
- package/dist/features/content/components/UploadDropZone.d.ts.map +1 -0
- package/dist/features/content/components/UploadDropZone.js +51 -0
- package/dist/features/content/components/UploadProgressDrawer.d.ts +11 -0
- package/dist/features/content/components/UploadProgressDrawer.d.ts.map +1 -0
- package/dist/features/content/components/UploadProgressDrawer.js +72 -0
- package/dist/features/preview/CamoxPreview.d.ts +124 -0
- package/dist/features/preview/CamoxPreview.d.ts.map +1 -0
- package/dist/features/preview/CamoxPreview.js +253 -0
- package/dist/features/preview/components/AddBlockSheet.d.ts +3 -0
- package/dist/features/preview/components/AddBlockSheet.d.ts.map +1 -0
- package/dist/features/preview/components/AddBlockSheet.js +121 -0
- package/dist/features/preview/components/AgentChatSheet.d.ts +3 -0
- package/dist/features/preview/components/AgentChatSheet.d.ts.map +1 -0
- package/dist/features/preview/components/AgentChatSheet.js +24 -0
- package/dist/features/preview/components/AssetFieldEditor.d.ts +18 -0
- package/dist/features/preview/components/AssetFieldEditor.d.ts.map +1 -0
- package/dist/features/preview/components/AssetFieldEditor.js +139 -0
- package/dist/features/preview/components/AssetLightbox.d.ts +9 -0
- package/dist/features/preview/components/AssetLightbox.d.ts.map +1 -0
- package/dist/features/preview/components/AssetLightbox.js +421 -0
- package/dist/features/preview/components/AssetPickerGrid.d.ts +11 -0
- package/dist/features/preview/components/AssetPickerGrid.d.ts.map +1 -0
- package/dist/features/preview/components/AssetPickerGrid.js +92 -0
- package/dist/features/preview/components/BlockActionsPopover.d.ts +15 -0
- package/dist/features/preview/components/BlockActionsPopover.d.ts.map +1 -0
- package/dist/features/preview/components/BlockActionsPopover.js +506 -0
- package/dist/features/preview/components/CreatePageSheet.d.ts +3 -0
- package/dist/features/preview/components/CreatePageSheet.d.ts.map +1 -0
- package/dist/features/preview/components/CreatePageSheet.js +159 -0
- package/dist/features/preview/components/DebouncedFieldEditor.d.ts +10 -0
- package/dist/features/preview/components/DebouncedFieldEditor.d.ts.map +1 -0
- package/dist/features/preview/components/DebouncedFieldEditor.js +51 -0
- package/dist/features/preview/components/EditPageSheet.d.ts +3 -0
- package/dist/features/preview/components/EditPageSheet.d.ts.map +1 -0
- package/dist/features/preview/components/EditPageSheet.js +352 -0
- package/dist/features/preview/components/ItemFieldsEditor.d.ts +29 -0
- package/dist/features/preview/components/ItemFieldsEditor.d.ts.map +1 -0
- package/dist/features/preview/components/ItemFieldsEditor.js +308 -0
- package/dist/features/preview/components/LinkFieldEditor.d.ts +8 -0
- package/dist/features/preview/components/LinkFieldEditor.d.ts.map +1 -0
- package/dist/features/preview/components/LinkFieldEditor.js +190 -0
- package/dist/features/preview/components/MultipleAssetFieldEditor.d.ts +10 -0
- package/dist/features/preview/components/MultipleAssetFieldEditor.d.ts.map +1 -0
- package/dist/features/preview/components/MultipleAssetFieldEditor.js +232 -0
- package/dist/features/preview/components/OverlayTracker.d.ts +6 -0
- package/dist/features/preview/components/OverlayTracker.d.ts.map +1 -0
- package/dist/features/preview/components/OverlayTracker.js +41 -0
- package/dist/features/preview/components/Overlays.d.ts +6 -0
- package/dist/features/preview/components/Overlays.d.ts.map +1 -0
- package/dist/features/preview/components/Overlays.js +58 -0
- package/dist/features/preview/components/PageContentSheet.d.ts +3 -0
- package/dist/features/preview/components/PageContentSheet.d.ts.map +1 -0
- package/dist/features/preview/components/PageContentSheet.js +492 -0
- package/dist/features/preview/components/PageLocationFieldset.d.ts +14 -0
- package/dist/features/preview/components/PageLocationFieldset.d.ts.map +1 -0
- package/dist/features/preview/components/PageLocationFieldset.js +77 -0
- package/dist/features/preview/components/PagePicker.d.ts +3 -0
- package/dist/features/preview/components/PagePicker.d.ts.map +1 -0
- package/dist/features/preview/components/PagePicker.js +185 -0
- package/dist/features/preview/components/PageTree.d.ts +3 -0
- package/dist/features/preview/components/PageTree.d.ts.map +1 -0
- package/dist/features/preview/components/PageTree.js +410 -0
- package/dist/features/preview/components/PeekedBlock.d.ts +6 -0
- package/dist/features/preview/components/PeekedBlock.d.ts.map +1 -0
- package/dist/features/preview/components/PeekedBlock.js +95 -0
- package/dist/features/preview/components/PreviewPanel.d.ts +12 -0
- package/dist/features/preview/components/PreviewPanel.d.ts.map +1 -0
- package/dist/features/preview/components/PreviewPanel.js +192 -0
- package/dist/features/preview/components/PreviewSideSheet.d.ts +13 -0
- package/dist/features/preview/components/PreviewSideSheet.d.ts.map +1 -0
- package/dist/features/preview/components/PreviewSideSheet.js +28 -0
- package/dist/features/preview/components/PreviewToolbar.d.ts +2 -0
- package/dist/features/preview/components/PreviewToolbar.d.ts.map +1 -0
- package/dist/features/preview/components/PreviewToolbar.js +79 -0
- package/dist/features/preview/components/RepeatableItemsList.d.ts +14 -0
- package/dist/features/preview/components/RepeatableItemsList.d.ts.map +1 -0
- package/dist/features/preview/components/RepeatableItemsList.js +366 -0
- package/dist/features/preview/components/ShikiMarkdown.d.ts +4 -0
- package/dist/features/preview/components/ShikiMarkdown.d.ts.map +1 -0
- package/dist/features/preview/components/ShikiMarkdown.js +37 -0
- package/dist/features/preview/components/TextFormatToolbar.d.ts +2 -0
- package/dist/features/preview/components/TextFormatToolbar.d.ts.map +1 -0
- package/dist/features/preview/components/TextFormatToolbar.js +73 -0
- package/dist/features/preview/components/UnlinkAssetButton.d.ts +9 -0
- package/dist/features/preview/components/UnlinkAssetButton.d.ts.map +1 -0
- package/dist/features/preview/components/UnlinkAssetButton.js +55 -0
- package/dist/features/preview/overlayConstants.d.ts +19 -0
- package/dist/features/preview/overlayConstants.d.ts.map +1 -0
- package/dist/features/preview/overlayConstants.js +21 -0
- package/dist/features/preview/overlayMessages.d.ts +62 -0
- package/dist/features/preview/overlayMessages.d.ts.map +1 -0
- package/dist/features/preview/overlayMessages.js +9 -0
- package/dist/features/preview/previewConstants.d.ts +2 -0
- package/dist/features/preview/previewConstants.d.ts.map +1 -0
- package/dist/features/preview/previewStore.d.ts +116 -0
- package/dist/features/preview/previewStore.d.ts.map +1 -0
- package/dist/features/preview/previewStore.js +321 -0
- package/dist/features/provider/CamoxProvider.d.ts +11 -0
- package/dist/features/provider/CamoxProvider.d.ts.map +1 -0
- package/dist/features/provider/CamoxProvider.js +73 -0
- package/dist/features/provider/actionsStore.d.ts +39 -0
- package/dist/features/provider/actionsStore.d.ts.map +1 -0
- package/dist/features/provider/actionsStore.js +35 -0
- package/dist/features/provider/components/CamoxAppContext.d.ts +371 -0
- package/dist/features/provider/components/CamoxAppContext.d.ts.map +1 -0
- package/dist/features/provider/components/CamoxAppContext.js +17 -0
- package/dist/features/provider/components/CommandPalette.d.ts +3 -0
- package/dist/features/provider/components/CommandPalette.d.ts.map +1 -0
- package/dist/features/provider/components/CommandPalette.js +127 -0
- package/dist/features/provider/useAdminShortcuts.d.ts +5 -0
- package/dist/features/provider/useAdminShortcuts.d.ts.map +1 -0
- package/dist/features/provider/useAdminShortcuts.js +83 -0
- package/dist/features/routes/ogRoute.d.ts +7 -0
- package/dist/features/routes/ogRoute.d.ts.map +1 -0
- package/dist/features/routes/ogRoute.js +19 -0
- package/dist/features/routes/pageRoute.d.ts +135 -0
- package/dist/features/routes/pageRoute.d.ts.map +1 -0
- package/dist/features/routes/pageRoute.js +112 -0
- package/dist/features/studio/CamoxStudio.d.ts +7 -0
- package/dist/features/studio/CamoxStudio.d.ts.map +1 -0
- package/dist/features/studio/CamoxStudio.js +24 -0
- package/dist/features/studio/components/Navbar.d.ts +4 -0
- package/dist/features/studio/components/Navbar.d.ts.map +1 -0
- package/dist/features/studio/components/Navbar.js +95 -0
- package/dist/features/studio/components/ProjectMenu.d.ts +2 -0
- package/dist/features/studio/components/ProjectMenu.d.ts.map +1 -0
- package/dist/features/studio/components/ProjectMenu.js +132 -0
- package/dist/features/studio/components/UserButton.d.ts +2 -0
- package/dist/features/studio/components/UserButton.d.ts.map +1 -0
- package/dist/features/studio/components/UserButton.js +96 -0
- package/dist/features/studio/studioStore.d.ts +17 -0
- package/dist/features/studio/studioStore.d.ts.map +1 -0
- package/dist/features/studio/studioStore.js +44 -0
- package/dist/features/studio/useTheme.d.ts +9 -0
- package/dist/features/studio/useTheme.d.ts.map +1 -0
- package/dist/features/studio/useTheme.js +98 -0
- package/dist/features/vite/appGeneration.d.ts +4 -0
- package/dist/features/vite/appGeneration.d.ts.map +1 -0
- package/dist/features/vite/appGeneration.js +67 -0
- package/dist/features/vite/blockBoilerplate.d.ts +3 -0
- package/dist/features/vite/blockBoilerplate.d.ts.map +1 -0
- package/dist/features/vite/blockBoilerplate.js +59 -0
- package/dist/features/vite/convexSync.d.ts +6 -0
- package/dist/features/vite/convexSync.d.ts.map +1 -0
- package/dist/features/vite/convexSync.js +98 -0
- package/dist/features/vite/definitionsSync.d.ts +11 -0
- package/dist/features/vite/definitionsSync.d.ts.map +1 -0
- package/dist/features/vite/definitionsSync.js +157 -0
- package/dist/features/vite/routeGeneration.d.ts +4 -0
- package/dist/features/vite/routeGeneration.d.ts.map +1 -0
- package/dist/features/vite/routeGeneration.js +194 -0
- package/dist/features/vite/skillGeneration.d.ts +4 -0
- package/dist/features/vite/skillGeneration.d.ts.map +1 -0
- package/dist/features/vite/skillGeneration.js +69 -0
- package/dist/features/vite/utils.d.ts +2 -0
- package/dist/features/vite/utils.d.ts.map +1 -0
- package/dist/features/vite/utils.js +10 -0
- package/dist/features/vite/vite.d.ts +18 -0
- package/dist/features/vite/vite.d.ts.map +1 -0
- package/dist/features/vite/vite.js +77 -0
- package/dist/hooks/use-file-upload.d.ts +22 -0
- package/dist/hooks/use-file-upload.d.ts.map +1 -0
- package/dist/hooks/use-marquee-selection.d.ts +17 -0
- package/dist/hooks/use-marquee-selection.d.ts.map +1 -0
- package/dist/lib/analytics-client.d.ts +3 -0
- package/dist/lib/analytics-client.d.ts.map +1 -0
- package/dist/lib/analytics.d.ts +3 -0
- package/dist/lib/analytics.d.ts.map +1 -0
- package/dist/lib/analytics.js +24 -0
- package/dist/lib/auth.d.ts +3683 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/convex-site.d.ts +3 -0
- package/dist/lib/convex-site.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +40 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/studio.css +2 -0
- package/package.json +123 -10
- package/server/api.d.ts +1 -0
- package/server/api.js +1 -0
- package/server/dataModel.d.ts +1 -0
- package/server/dataModel.js +1 -0
- package/skills/camox-block/SKILL.md +357 -0
- package/skills/camox-layout/SKILL.md +181 -0
- package/index.js +0 -3
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { previewStore } from "../previewStore.js";
|
|
2
|
+
import { useSelector } from "@xstate/store/react";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/features/preview/components/PeekedBlock.tsx
|
|
6
|
+
var PeekedBlock = ({ onExitComplete }) => {
|
|
7
|
+
const peekedBlock = useSelector(previewStore, (state) => state.context.peekedBlock);
|
|
8
|
+
const skipExitAnimation = useSelector(previewStore, (state) => state.context.skipPeekedBlockExitAnimation);
|
|
9
|
+
const peekedBlockRef = React.useRef(null);
|
|
10
|
+
const [displayedBlock, setDisplayedBlock] = React.useState(null);
|
|
11
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
12
|
+
React.useEffect(() => {
|
|
13
|
+
if (peekedBlock) {
|
|
14
|
+
setDisplayedBlock(peekedBlock);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (skipExitAnimation) {
|
|
18
|
+
setIsExpanded(false);
|
|
19
|
+
setDisplayedBlock(null);
|
|
20
|
+
onExitComplete?.();
|
|
21
|
+
previewStore.send({ type: "clearSkipPeekedBlockExitAnimation" });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setIsExpanded(false);
|
|
25
|
+
}, [
|
|
26
|
+
peekedBlock,
|
|
27
|
+
skipExitAnimation,
|
|
28
|
+
onExitComplete
|
|
29
|
+
]);
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
if (!displayedBlock) return;
|
|
32
|
+
const id = requestAnimationFrame(() => setIsExpanded(true));
|
|
33
|
+
return () => cancelAnimationFrame(id);
|
|
34
|
+
}, [displayedBlock]);
|
|
35
|
+
React.useEffect(() => {
|
|
36
|
+
if (displayedBlock && peekedBlockRef.current) peekedBlockRef.current.scrollIntoView({
|
|
37
|
+
behavior: "instant",
|
|
38
|
+
block: "start"
|
|
39
|
+
});
|
|
40
|
+
}, [displayedBlock]);
|
|
41
|
+
const handleTransitionEnd = React.useCallback((e) => {
|
|
42
|
+
if (e.propertyName !== "grid-template-rows" || e.target !== e.currentTarget) return;
|
|
43
|
+
if (isExpanded) {
|
|
44
|
+
peekedBlockRef.current?.scrollIntoView({
|
|
45
|
+
behavior: "instant",
|
|
46
|
+
block: "start"
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
setDisplayedBlock(null);
|
|
51
|
+
onExitComplete?.();
|
|
52
|
+
}, [isExpanded, onExitComplete]);
|
|
53
|
+
const normalizedContent = React.useMemo(() => {
|
|
54
|
+
if (!displayedBlock) return null;
|
|
55
|
+
const result = { ...displayedBlock.getInitialContent() };
|
|
56
|
+
for (const key in result) {
|
|
57
|
+
const value = result[key];
|
|
58
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
59
|
+
const firstItem = value[0];
|
|
60
|
+
if (firstItem && typeof firstItem === "object" && !firstItem.content && !firstItem._id) result[key] = value.map((item) => ({
|
|
61
|
+
content: item,
|
|
62
|
+
_id: void 0
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}, [displayedBlock]);
|
|
68
|
+
if (!displayedBlock || !normalizedContent) return null;
|
|
69
|
+
return /* @__PURE__ */ jsx("div", {
|
|
70
|
+
ref: peekedBlockRef,
|
|
71
|
+
style: {
|
|
72
|
+
scrollMargin: "5rem",
|
|
73
|
+
display: "grid",
|
|
74
|
+
gridTemplateRows: isExpanded ? "1fr" : "0fr",
|
|
75
|
+
transition: "grid-template-rows 300ms ease-out",
|
|
76
|
+
background: "var(--background)"
|
|
77
|
+
},
|
|
78
|
+
onTransitionEnd: handleTransitionEnd,
|
|
79
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
80
|
+
style: { overflow: "hidden" },
|
|
81
|
+
children: /* @__PURE__ */ jsx(displayedBlock.Component, {
|
|
82
|
+
blockData: {
|
|
83
|
+
_id: "__preview__",
|
|
84
|
+
type: displayedBlock.id,
|
|
85
|
+
content: normalizedContent,
|
|
86
|
+
settings: displayedBlock.getInitialSettings(),
|
|
87
|
+
position: ""
|
|
88
|
+
},
|
|
89
|
+
mode: "peek"
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
export { PeekedBlock };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export declare const PreviewFrame: ({ children, style, className, onIframeReady, }: {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
className?: string;
|
|
6
|
+
onIframeReady?: (iframe: HTMLIFrameElement) => void;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare const PreviewPanel: ({ children }: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export { PreviewPanel };
|
|
12
|
+
//# sourceMappingURL=PreviewPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../../../../src/features/preview/components/PreviewPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmB/B,eAAO,MAAM,YAAY,GAAI,gDAK1B;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACrD,4CAQA,CAAC;AAmFF,QAAA,MAAM,YAAY,GAAI,cAAc;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,4CAwHhE,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { previewStore } from "../previewStore.js";
|
|
2
|
+
import { actionsStore } from "../../provider/actionsStore.js";
|
|
3
|
+
import { useIsPreviewSheetOpen } from "./PreviewSideSheet.js";
|
|
4
|
+
import { useBlockActionsShortcuts } from "./BlockActionsPopover.js";
|
|
5
|
+
import { Overlays } from "./Overlays.js";
|
|
6
|
+
import { OverlayTracker } from "./OverlayTracker.js";
|
|
7
|
+
import { PreviewToolbar } from "./PreviewToolbar.js";
|
|
8
|
+
import { TextFormatToolbar } from "./TextFormatToolbar.js";
|
|
9
|
+
import { Frame, useFrame } from "@camox/ui/frame";
|
|
10
|
+
import { useSelector } from "@xstate/store/react";
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { PanelContent } from "@camox/ui/panel";
|
|
14
|
+
import { checkIfInputFocused } from "@/lib/utils";
|
|
15
|
+
//#region src/features/preview/components/PreviewPanel.tsx
|
|
16
|
+
var PreviewFrame = ({ children, style, className, onIframeReady }) => {
|
|
17
|
+
return /* @__PURE__ */ jsxs(Frame, {
|
|
18
|
+
className,
|
|
19
|
+
style,
|
|
20
|
+
onIframeReady,
|
|
21
|
+
children: [
|
|
22
|
+
children,
|
|
23
|
+
/* @__PURE__ */ jsx(KeyDownForwarder, {}),
|
|
24
|
+
/* @__PURE__ */ jsx(OverlayTracker, {})
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var KeyDownForwarder = () => {
|
|
29
|
+
const { window: iframeWindow } = useFrame();
|
|
30
|
+
const actions = useSelector(actionsStore, (state) => state.context.actions);
|
|
31
|
+
React.useEffect(() => {
|
|
32
|
+
if (!iframeWindow || !iframeWindow.parent || iframeWindow.parent === iframeWindow) return;
|
|
33
|
+
const handleKeyDown = (e) => {
|
|
34
|
+
if (e.key.toLowerCase() === "l" && !e.repeat && !checkIfInputFocused(iframeWindow.document)) {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
iframeWindow.parent.postMessage({ type: "holdLockContent" }, "*");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const matchingAction = actions.find((action) => {
|
|
40
|
+
if (!action.shortcut) return false;
|
|
41
|
+
if (!action.checkIfAvailable()) return false;
|
|
42
|
+
if (checkIfInputFocused(iframeWindow.document)) {
|
|
43
|
+
if (!action.shortcut.withMeta && !action.shortcut.withAlt) return false;
|
|
44
|
+
if (action.shortcut.key === "Backspace") return false;
|
|
45
|
+
}
|
|
46
|
+
const { key, withMeta, withAlt, withShift } = action.shortcut;
|
|
47
|
+
return (withAlt && key.length === 1 && /[a-z]/i.test(key) ? e.code === `Key${key.toUpperCase()}` : key.toLowerCase() === e.key.toLowerCase()) && !!withMeta === (e.metaKey || e.ctrlKey) && !!withAlt === e.altKey && !!withShift === e.shiftKey;
|
|
48
|
+
});
|
|
49
|
+
if (matchingAction) {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
iframeWindow.parent.postMessage({
|
|
52
|
+
type: "executeAction",
|
|
53
|
+
actionId: matchingAction.id
|
|
54
|
+
}, "*");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const handleKeyUp = (e) => {
|
|
58
|
+
if (e.key.toLowerCase() === "l") iframeWindow.parent.postMessage({ type: "releaseLockContent" }, "*");
|
|
59
|
+
};
|
|
60
|
+
iframeWindow.addEventListener("keydown", handleKeyDown);
|
|
61
|
+
iframeWindow.addEventListener("keyup", handleKeyUp);
|
|
62
|
+
return () => {
|
|
63
|
+
iframeWindow.removeEventListener("keydown", handleKeyDown);
|
|
64
|
+
iframeWindow.removeEventListener("keyup", handleKeyUp);
|
|
65
|
+
};
|
|
66
|
+
}, [iframeWindow, actions]);
|
|
67
|
+
return null;
|
|
68
|
+
};
|
|
69
|
+
var PreviewPanel = ({ children }) => {
|
|
70
|
+
useBlockActionsShortcuts();
|
|
71
|
+
const iframeElement = useSelector(previewStore, (state) => state.context.iframeElement);
|
|
72
|
+
const handleIframeReady = React.useCallback((element) => {
|
|
73
|
+
previewStore.send({
|
|
74
|
+
type: "setIframeElement",
|
|
75
|
+
element
|
|
76
|
+
});
|
|
77
|
+
}, []);
|
|
78
|
+
const isMobileMode = useSelector(previewStore, (state) => state.context.isMobileMode);
|
|
79
|
+
const isAgentChatSheetOpen = useSelector(previewStore, (state) => state.context.isAgentChatSheetOpen);
|
|
80
|
+
const isAnySideSheetOpen = useIsPreviewSheetOpen();
|
|
81
|
+
const wrapperRef = React.useRef(null);
|
|
82
|
+
const [panelWidth, setPanelWidth] = React.useState(0);
|
|
83
|
+
const [panelLeft, setPanelLeft] = React.useState(0);
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
const el = wrapperRef.current?.parentElement;
|
|
86
|
+
if (!el) return;
|
|
87
|
+
const update = () => {
|
|
88
|
+
const rect = el.getBoundingClientRect();
|
|
89
|
+
setPanelWidth(rect.width);
|
|
90
|
+
setPanelLeft(rect.left);
|
|
91
|
+
};
|
|
92
|
+
update();
|
|
93
|
+
const observer = new ResizeObserver(update);
|
|
94
|
+
observer.observe(el);
|
|
95
|
+
return () => observer.disconnect();
|
|
96
|
+
}, []);
|
|
97
|
+
const sheetOverlap = Math.max(0, 400 - panelLeft);
|
|
98
|
+
const sheetOpenScale = panelWidth > 0 ? (panelWidth - sheetOverlap) / panelWidth : 1;
|
|
99
|
+
React.useEffect(() => {
|
|
100
|
+
const actions = [
|
|
101
|
+
{
|
|
102
|
+
id: "toggle-editing-panel",
|
|
103
|
+
label: "Toggle editing panel",
|
|
104
|
+
groupLabel: "Preview",
|
|
105
|
+
checkIfAvailable: () => true,
|
|
106
|
+
execute: () => previewStore.send({ type: "toggleSidebar" }),
|
|
107
|
+
shortcut: {
|
|
108
|
+
key: "b",
|
|
109
|
+
withAlt: true
|
|
110
|
+
},
|
|
111
|
+
icon: "PanelRight"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: "toggle-lock-content",
|
|
115
|
+
label: "Toggle lock content",
|
|
116
|
+
groupLabel: "Preview",
|
|
117
|
+
checkIfAvailable: () => true,
|
|
118
|
+
execute: () => previewStore.send({ type: "toggleLockContent" }),
|
|
119
|
+
icon: "Lock"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "toggle-mobile-mode",
|
|
123
|
+
label: "Toggle mobile mode",
|
|
124
|
+
groupLabel: "Preview",
|
|
125
|
+
checkIfAvailable: () => true,
|
|
126
|
+
execute: () => previewStore.send({ type: "toggleMobileMode" }),
|
|
127
|
+
shortcut: { key: "m" },
|
|
128
|
+
icon: "TabletSmartphone"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: "open-agent-chat",
|
|
132
|
+
label: "Ask for changes",
|
|
133
|
+
groupLabel: "Preview",
|
|
134
|
+
checkIfAvailable: () => !isAgentChatSheetOpen,
|
|
135
|
+
execute: () => previewStore.send({ type: "openAgentChatSheet" }),
|
|
136
|
+
shortcut: {
|
|
137
|
+
key: "i",
|
|
138
|
+
withAlt: true
|
|
139
|
+
},
|
|
140
|
+
icon: "MessageSquare"
|
|
141
|
+
}
|
|
142
|
+
];
|
|
143
|
+
actionsStore.send({
|
|
144
|
+
type: "registerManyActions",
|
|
145
|
+
actions
|
|
146
|
+
});
|
|
147
|
+
return () => {
|
|
148
|
+
actionsStore.send({
|
|
149
|
+
type: "unregisterManyActions",
|
|
150
|
+
ids: actions.map((a) => a.id)
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
}, [isAgentChatSheetOpen]);
|
|
154
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(PanelContent, {
|
|
155
|
+
className: "relative overflow-hidden",
|
|
156
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
157
|
+
ref: wrapperRef,
|
|
158
|
+
className: "absolute inset-0 transition-[transform,height] duration-500 ease-in-out will-change-transform",
|
|
159
|
+
style: {
|
|
160
|
+
height: isAnySideSheetOpen ? `${100 / sheetOpenScale}%` : "100%",
|
|
161
|
+
transformOrigin: "top right",
|
|
162
|
+
transform: isAnySideSheetOpen ? `scale(${sheetOpenScale})` : "scale(1)"
|
|
163
|
+
},
|
|
164
|
+
children: isMobileMode ? /* @__PURE__ */ jsxs("div", {
|
|
165
|
+
className: "checkered flex h-full justify-center",
|
|
166
|
+
children: [
|
|
167
|
+
/* @__PURE__ */ jsxs("div", {
|
|
168
|
+
className: "relative mt-8 h-[700px] w-[393px] overflow-hidden",
|
|
169
|
+
children: [/* @__PURE__ */ jsx(PreviewFrame, {
|
|
170
|
+
className: "overflow-auto",
|
|
171
|
+
onIframeReady: handleIframeReady,
|
|
172
|
+
children
|
|
173
|
+
}), /* @__PURE__ */ jsx(Overlays, { iframeElement })]
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ jsx(TextFormatToolbar, {}),
|
|
176
|
+
/* @__PURE__ */ jsx(PreviewToolbar, {})
|
|
177
|
+
]
|
|
178
|
+
}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
179
|
+
/* @__PURE__ */ jsx(PreviewFrame, {
|
|
180
|
+
className: "checkered h-full w-full",
|
|
181
|
+
onIframeReady: handleIframeReady,
|
|
182
|
+
children
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ jsx(Overlays, { iframeElement }),
|
|
185
|
+
/* @__PURE__ */ jsx(TextFormatToolbar, {}),
|
|
186
|
+
/* @__PURE__ */ jsx(PreviewToolbar, {})
|
|
187
|
+
] })
|
|
188
|
+
})
|
|
189
|
+
}) });
|
|
190
|
+
};
|
|
191
|
+
//#endregion
|
|
192
|
+
export { PreviewFrame, PreviewPanel };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as Sheet from "@camox/ui/sheet";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
interface PreviewSideSheetProps {
|
|
4
|
+
open: boolean;
|
|
5
|
+
onOpenChange: (open: boolean) => void;
|
|
6
|
+
onOpenAutoFocus?: (e: Event) => void;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const PreviewSideSheet: ({ open, onOpenChange, onOpenAutoFocus, children, className, }: PreviewSideSheetProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function useIsPreviewSheetOpen(): boolean;
|
|
12
|
+
export { PreviewSideSheet, Sheet as SheetParts };
|
|
13
|
+
//# sourceMappingURL=PreviewSideSheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewSideSheet.d.ts","sourceRoot":"","sources":["../../../../src/features/preview/components/PreviewSideSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAEzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,gBAAgB,GAAI,+DAMvB,qBAAqB,4CAcvB,CAAC;AAEF,wBAAgB,qBAAqB,YAYpC;AAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { previewStore } from "../previewStore.js";
|
|
2
|
+
import { useSelector } from "@xstate/store/react";
|
|
3
|
+
import "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import * as Sheet from "@camox/ui/sheet";
|
|
6
|
+
//#region src/features/preview/components/PreviewSideSheet.tsx
|
|
7
|
+
var PreviewSideSheet = ({ open, onOpenChange, onOpenAutoFocus, children, className }) => {
|
|
8
|
+
return /* @__PURE__ */ jsx(Sheet.Sheet, {
|
|
9
|
+
open,
|
|
10
|
+
onOpenChange,
|
|
11
|
+
children: /* @__PURE__ */ jsx(Sheet.SheetContent, {
|
|
12
|
+
className,
|
|
13
|
+
side: "left",
|
|
14
|
+
overlayClassName: "bg-black/0",
|
|
15
|
+
style: { minWidth: 400 },
|
|
16
|
+
onOpenAutoFocus,
|
|
17
|
+
children
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
function useIsPreviewSheetOpen() {
|
|
22
|
+
const isPageContentSheetOpen = useSelector(previewStore, (state) => state.context.isPageContentSheetOpen);
|
|
23
|
+
const isPeekingBlock = useSelector(previewStore, (state) => state.context.peekedBlock != null);
|
|
24
|
+
const isAgentChatSheetOpen = useSelector(previewStore, (state) => state.context.isAgentChatSheetOpen);
|
|
25
|
+
return isPageContentSheetOpen || isPeekingBlock || isAgentChatSheetOpen;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { PreviewSideSheet, Sheet, useIsPreviewSheetOpen };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewToolbar.d.ts","sourceRoot":"","sources":["../../../../src/features/preview/components/PreviewToolbar.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,+CAoG1B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { previewStore } from "../previewStore.js";
|
|
2
|
+
import { actionsStore } from "../../provider/actionsStore.js";
|
|
3
|
+
import { Kbd } from "@camox/ui/kbd";
|
|
4
|
+
import { useSelector } from "@xstate/store/react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cn, getActionShortcut } from "@/lib/utils";
|
|
7
|
+
import { Button } from "@camox/ui/button";
|
|
8
|
+
import { Lock, MonitorPlay, PanelRight, TabletSmartphone } from "lucide-react";
|
|
9
|
+
import * as Tooltip$1 from "@camox/ui/tooltip";
|
|
10
|
+
import { ButtonGroup } from "@camox/ui/button-group";
|
|
11
|
+
import { FloatingToolbar } from "@camox/ui/floating-toolbar";
|
|
12
|
+
import { Toggle } from "@camox/ui/toggle";
|
|
13
|
+
//#region src/features/preview/components/PreviewToolbar.tsx
|
|
14
|
+
var PreviewToolbar = () => {
|
|
15
|
+
const isEditingLocked = useSelector(previewStore, (state) => state.context.isContentLocked);
|
|
16
|
+
const isEditingPanelOpen = useSelector(previewStore, (state) => state.context.isSidebarOpen);
|
|
17
|
+
const isPresentationMode = useSelector(previewStore, (state) => state.context.isPresentationMode);
|
|
18
|
+
const isPageContentSheetOpen = useSelector(previewStore, (state) => state.context.isPageContentSheetOpen);
|
|
19
|
+
const isAddBlockSheetOpen = useSelector(previewStore, (state) => state.context.isAddBlockSheetOpen);
|
|
20
|
+
const isAgentChatSheetOpen = useSelector(previewStore, (state) => state.context.isAgentChatSheetOpen);
|
|
21
|
+
const isAnySideSheetOpen = isPageContentSheetOpen || isAddBlockSheetOpen || isAgentChatSheetOpen;
|
|
22
|
+
const actions = useSelector(actionsStore, (state) => state.context.actions);
|
|
23
|
+
const isMobileMode = useSelector(previewStore, (state) => state.context.isMobileMode);
|
|
24
|
+
return /* @__PURE__ */ jsxs(FloatingToolbar, {
|
|
25
|
+
className: cn("bottom-2 gap-4 justify-between", isAnySideSheetOpen && "opacity-0 pointer-events-none translate-y-full"),
|
|
26
|
+
children: [/* @__PURE__ */ jsxs(ButtonGroup, { children: [
|
|
27
|
+
/* @__PURE__ */ jsxs(Tooltip$1.Tooltip, { children: [/* @__PURE__ */ jsx(Tooltip$1.TooltipTrigger, {
|
|
28
|
+
asChild: true,
|
|
29
|
+
children: /* @__PURE__ */ jsx(Toggle, {
|
|
30
|
+
"data-state": isEditingPanelOpen ? "off" : "on",
|
|
31
|
+
pressed: !isEditingPanelOpen,
|
|
32
|
+
variant: "outline",
|
|
33
|
+
onClick: () => previewStore.send({ type: "toggleSidebar" }),
|
|
34
|
+
children: /* @__PURE__ */ jsx(PanelRight, {})
|
|
35
|
+
})
|
|
36
|
+
}), /* @__PURE__ */ jsxs(Tooltip$1.TooltipContent, { children: ["Toggle sidebar ", getActionShortcut(actions, "toggle-editing-panel")] })] }),
|
|
37
|
+
/* @__PURE__ */ jsxs(Tooltip$1.Tooltip, { children: [/* @__PURE__ */ jsx(Tooltip$1.TooltipTrigger, {
|
|
38
|
+
asChild: true,
|
|
39
|
+
children: /* @__PURE__ */ jsx(Toggle, {
|
|
40
|
+
"data-state": isEditingLocked ? "on" : "off",
|
|
41
|
+
pressed: isEditingLocked,
|
|
42
|
+
onPressedChange: () => previewStore.send({ type: "toggleLockContent" }),
|
|
43
|
+
variant: "outline",
|
|
44
|
+
children: /* @__PURE__ */ jsx(Lock, {})
|
|
45
|
+
})
|
|
46
|
+
}), /* @__PURE__ */ jsxs(Tooltip$1.TooltipContent, { children: ["Toggle edit mode ", /* @__PURE__ */ jsx(Kbd, { children: "L" })] })] }),
|
|
47
|
+
/* @__PURE__ */ jsxs(Tooltip$1.Tooltip, { children: [/* @__PURE__ */ jsx(Tooltip$1.TooltipTrigger, {
|
|
48
|
+
asChild: true,
|
|
49
|
+
children: /* @__PURE__ */ jsx(Toggle, {
|
|
50
|
+
"data-state": isMobileMode ? "on" : "off",
|
|
51
|
+
pressed: isMobileMode,
|
|
52
|
+
onPressedChange: () => previewStore.send({ type: "toggleMobileMode" }),
|
|
53
|
+
variant: "outline",
|
|
54
|
+
children: /* @__PURE__ */ jsx(TabletSmartphone, {})
|
|
55
|
+
})
|
|
56
|
+
}), /* @__PURE__ */ jsxs(Tooltip$1.TooltipContent, { children: ["Toggle mobile layout ", getActionShortcut(actions, "toggle-mobile-mode")] })] }),
|
|
57
|
+
/* @__PURE__ */ jsxs(Tooltip$1.Tooltip, { children: [/* @__PURE__ */ jsx(Tooltip$1.TooltipTrigger, {
|
|
58
|
+
asChild: true,
|
|
59
|
+
children: /* @__PURE__ */ jsxs(Toggle, {
|
|
60
|
+
"data-state": isPresentationMode ? "on" : "off",
|
|
61
|
+
pressed: isPresentationMode,
|
|
62
|
+
variant: "outline",
|
|
63
|
+
onClick: () => previewStore.send({ type: "enterPresentationMode" }),
|
|
64
|
+
children: [/* @__PURE__ */ jsx(MonitorPlay, {}), "Preview"]
|
|
65
|
+
})
|
|
66
|
+
}), /* @__PURE__ */ jsxs(Tooltip$1.TooltipContent, { children: ["Hide all admin interface ", getActionShortcut(actions, "enter-presentation-mode")] })] })
|
|
67
|
+
] }), /* @__PURE__ */ jsxs(Button, {
|
|
68
|
+
variant: "outline",
|
|
69
|
+
className: "bg-transparent dark:bg-transparent",
|
|
70
|
+
onClick: () => previewStore.send({ type: "openAgentChatSheet" }),
|
|
71
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
72
|
+
className: "text-muted-foreground",
|
|
73
|
+
children: "Ask for changes..."
|
|
74
|
+
}), getActionShortcut(actions, "open-agent-chat")]
|
|
75
|
+
})]
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
//#endregion
|
|
79
|
+
export { PreviewToolbar };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Doc, Id } from 'camox/server/dataModel';
|
|
2
|
+
interface RepeatableItemsListProps {
|
|
3
|
+
items: Doc<"repeatableItems">[] | Record<string, unknown>[];
|
|
4
|
+
blockId: Id<"blocks">;
|
|
5
|
+
fieldName: string;
|
|
6
|
+
minItems?: number;
|
|
7
|
+
maxItems?: number;
|
|
8
|
+
schema: unknown;
|
|
9
|
+
/** When set, items are inline objects managed through the parent item's content */
|
|
10
|
+
parentItemId?: Id<"repeatableItems">;
|
|
11
|
+
}
|
|
12
|
+
declare const RepeatableItemsList: ({ items, blockId, fieldName, minItems, maxItems, schema, parentItemId, }: RepeatableItemsListProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export { RepeatableItemsList };
|
|
14
|
+
//# sourceMappingURL=RepeatableItemsList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepeatableItemsList.d.ts","sourceRoot":"","sources":["../../../../src/features/preview/components/RepeatableItemsList.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AA2RjD,UAAU,wBAAwB;IAChC,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAED,QAAA,MAAM,mBAAmB,GAAI,0EAQ1B,wBAAwB,4CA4Q1B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|