@drawnagency/primitives 0.1.75 → 0.1.77
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/chunk-2G2S36SY.js +13 -0
- package/dist/{chunk-7T2WQSWF.js → chunk-63BQQNZO.js} +9 -9
- package/dist/chunk-REM2NH7K.js +44 -0
- package/dist/{chunk-U4E6S4PX.js → chunk-RO4E5UJI.js} +53 -39
- package/dist/{chunk-NKVZGPR6.js → chunk-YP7IHMC3.js} +1 -1
- package/dist/collab/provider-registry.d.ts +4 -0
- package/dist/collab/provider-registry.d.ts.map +1 -0
- package/dist/collab/provider-registry.js +9 -0
- package/dist/collab/rebase.d.ts +37 -0
- package/dist/collab/rebase.d.ts.map +1 -0
- package/dist/collab/rebase.js +64 -0
- package/dist/collab/recovery.d.ts +89 -0
- package/dist/collab/recovery.d.ts.map +1 -0
- package/dist/collab/types.d.ts +93 -0
- package/dist/collab/types.d.ts.map +1 -0
- package/dist/collab/types.js +19 -0
- package/dist/components/editor/AudienceIndicator.d.ts +3 -1
- package/dist/components/editor/AudienceIndicator.d.ts.map +1 -1
- package/dist/components/editor/ChildBlockWrapper.d.ts +7 -0
- package/dist/components/editor/ChildBlockWrapper.d.ts.map +1 -1
- package/dist/components/editor/ConflictDialog.d.ts +14 -0
- package/dist/components/editor/ConflictDialog.d.ts.map +1 -0
- package/dist/components/editor/IndicatorPill.d.ts +4 -1
- package/dist/components/editor/IndicatorPill.d.ts.map +1 -1
- package/dist/components/editor/LockBadge.d.ts +7 -0
- package/dist/components/editor/LockBadge.d.ts.map +1 -0
- package/dist/components/editor/PresenceAvatars.d.ts +9 -0
- package/dist/components/editor/PresenceAvatars.d.ts.map +1 -0
- package/dist/components/editor/SectionWrapper.d.ts +1 -1
- package/dist/components/editor/SectionWrapper.d.ts.map +1 -1
- package/dist/components/editor/StatusIndicator.d.ts +3 -1
- package/dist/components/editor/StatusIndicator.d.ts.map +1 -1
- package/dist/components/editor/index.js +92 -44
- package/dist/components/primitives/index.js +3 -3
- package/dist/components/sections/Container/Container.d.ts.map +1 -1
- package/dist/components/sections/brand-guide.js +3 -3
- package/dist/components/sections/register-schemas.js +9 -9
- package/dist/components/sections/register.js +9 -9
- package/dist/components/shell/EditorShell.d.ts +3 -1
- package/dist/components/shell/EditorShell.d.ts.map +1 -1
- package/dist/hooks/useCollabSession.d.ts +23 -0
- package/dist/hooks/useCollabSession.d.ts.map +1 -0
- package/dist/hooks/useEditorPersistence.d.ts +21 -1
- package/dist/hooks/useEditorPersistence.d.ts.map +1 -1
- package/dist/hooks/useEditorPublish.d.ts +39 -2
- package/dist/hooks/useEditorPublish.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -22
- package/dist/lib/dexie.d.ts +12 -0
- package/dist/lib/dexie.d.ts.map +1 -1
- package/dist/lib/dexie.js +27 -0
- package/dist/lib/index.js +12 -12
- package/dist/lib/registry.d.ts +10 -0
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/types/database.d.ts +70 -0
- package/dist/types/database.d.ts.map +1 -1
- package/package.json +13 -1
- package/src/collab/provider-registry.ts +14 -0
- package/src/collab/rebase.ts +140 -0
- package/src/collab/recovery.ts +149 -0
- package/src/collab/types.ts +96 -0
- package/src/components/editor/AudienceIndicator.tsx +4 -1
- package/src/components/editor/ChildBlockWrapper.tsx +15 -1
- package/src/components/editor/ConflictDialog.tsx +61 -0
- package/src/components/editor/IndicatorPill.tsx +12 -6
- package/src/components/editor/LockBadge.tsx +31 -0
- package/src/components/editor/PresenceAvatars.tsx +53 -0
- package/src/components/editor/SectionWrapper.tsx +60 -29
- package/src/components/editor/StatusIndicator.tsx +4 -0
- package/src/components/sections/Container/Container.tsx +6 -4
- package/src/components/shell/EditorShell.tsx +561 -18
- package/src/hooks/useCollabSession.ts +220 -0
- package/src/hooks/useEditorPersistence.ts +104 -1
- package/src/hooks/useEditorPublish.ts +205 -63
- package/src/index.ts +2 -0
- package/src/lib/dexie.ts +44 -0
- package/src/lib/registry.ts +8 -0
- package/src/types/database.ts +55 -0
- package/dist/{chunk-Q3T23HVW.js → chunk-B2DLHZKC.js} +4 -4
- package/dist/{chunk-T7MP7ANP.js → chunk-UUCOJL7O.js} +0 -0
- package/dist/{chunk-ZRWGV5O6.js → chunk-XFDEUK37.js} +3 -3
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ConflictItem {
|
|
2
|
+
sectionId: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
/** Presented on 409 recovery when a section the editor changed was ALSO changed
|
|
6
|
+
* remotely. The user picks which side wins per section; the losing local copy
|
|
7
|
+
* is always snapshotted to Dexie either way (stored, not user-recoverable via
|
|
8
|
+
* the UI). Defaults every conflict to "mine" so a blind Continue never silently
|
|
9
|
+
* drops local work. */
|
|
10
|
+
export declare function ConflictDialog({ conflicts, onResolve, }: {
|
|
11
|
+
conflicts: ConflictItem[];
|
|
12
|
+
onResolve: (choices: Record<string, "mine" | "theirs">) => void;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=ConflictDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictDialog.d.ts","sourceRoot":"","sources":["../../../src/components/editor/ConflictDialog.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;wBAIwB;AACxB,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,SAAS,GACV,EAAE;IACD,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC;CACjE,2CAwCA"}
|
|
@@ -12,7 +12,10 @@ interface IndicatorPillProps {
|
|
|
12
12
|
className?: string;
|
|
13
13
|
buttonClassName?: string;
|
|
14
14
|
ariaLabel?: string;
|
|
15
|
+
/** Display-only mode: dots/label still render but the popovers never open
|
|
16
|
+
* (e.g. while another editor holds the section lock). */
|
|
17
|
+
disabled?: boolean;
|
|
15
18
|
}
|
|
16
|
-
export declare function IndicatorPill({ dots, label, hoverContent, clickContent, className, buttonClassName, ariaLabel, }: IndicatorPillProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function IndicatorPill({ dots, label, hoverContent, clickContent, className, buttonClassName, ariaLabel, disabled, }: IndicatorPillProps): import("react/jsx-runtime").JSX.Element;
|
|
17
20
|
export {};
|
|
18
21
|
//# sourceMappingURL=IndicatorPill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndicatorPill.d.ts","sourceRoot":"","sources":["../../../src/components/editor/IndicatorPill.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAItE,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,eAAe,EACf,SAAS,
|
|
1
|
+
{"version":3,"file":"IndicatorPill.d.ts","sourceRoot":"","sources":["../../../src/components/editor/IndicatorPill.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAItE,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8DAC0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,eAAe,EACf,SAAS,EACT,QAAQ,GACT,EAAE,kBAAkB,2CA+FpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockBadge.d.ts","sourceRoot":"","sources":["../../../src/components/editor/LockBadge.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAKD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,cAAc,2CAmB9D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CollabPeer, CollabStatus } from "../../collab/types";
|
|
2
|
+
interface PresenceAvatarsProps {
|
|
3
|
+
peers: CollabPeer[];
|
|
4
|
+
selfUserId: string | null;
|
|
5
|
+
status: CollabStatus;
|
|
6
|
+
}
|
|
7
|
+
export declare function PresenceAvatars({ peers, selfUserId, status }: PresenceAvatarsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=PresenceAvatars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PresenceAvatars.d.ts","sourceRoot":"","sources":["../../../src/components/editor/PresenceAvatars.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAuBnE,UAAU,oBAAoB;IAC5B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,oBAAoB,kDAuBlF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { WrapperProps } from "../../lib/registry";
|
|
2
|
-
export declare function SectionWrapper({ sectionId, sectionType, status, dirty, index, isLast, containerId, isContainerBlock, definition, options, audiences, access, onAccessChange, onStatusChange, onSectionChange, onReorder, onRequestInsert, onDelete, onMoveSection, onAddChild, mainStatus, contentDiffersFromMain, isLocalOnly, children, }: WrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function SectionWrapper({ sectionId, sectionType, status, dirty, index, isLast, containerId, isContainerBlock, definition, options, audiences, access, onAccessChange, onStatusChange, onSectionChange, onReorder, onRequestInsert, onDelete, onMoveSection, onAddChild, mainStatus, contentDiffersFromMain, isLocalOnly, lockedBy, onTakeover, onEditIntent, children, }: WrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=SectionWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SectionWrapper.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SectionWrapper.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,SAAS,EACT,MAAM,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,SAAS,EACT,eAAe,EACf,QAAQ,EACR,aAAa,EACb,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE,YAAY,2CAgVd"}
|
|
@@ -23,7 +23,9 @@ interface StatusIndicatorProps {
|
|
|
23
23
|
status: Status;
|
|
24
24
|
dirty?: boolean;
|
|
25
25
|
onChange: (status: Status) => void;
|
|
26
|
+
/** Display-only mode — the pill still shows status but the picker never opens. */
|
|
27
|
+
disabled?: boolean;
|
|
26
28
|
}
|
|
27
|
-
export declare function StatusIndicator({ mainStatus, savedStatus, contentDiffers, isLocalOnly, status, dirty, onChange, }: StatusIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare function StatusIndicator({ mainStatus, savedStatus, contentDiffers, isLocalOnly, status, dirty, onChange, disabled, }: StatusIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
28
30
|
export {};
|
|
29
31
|
//# sourceMappingURL=StatusIndicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/editor/StatusIndicator.tsx"],"names":[],"mappings":"AAKA,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAC9D,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,UAAU,MAAM;IACd,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,wBAAgB,mBAAmB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,WAAW,GAAG,YAAY,CAkCvH;AAYD,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/editor/StatusIndicator.tsx"],"names":[],"mappings":"AAKA,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAC9D,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,UAAU,MAAM;IACd,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,wBAAgB,mBAAmB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,WAAW,GAAG,YAAY,CAkCvH;AAYD,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,oBAAoB,2CA6CtB"}
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
buildBlockDropData,
|
|
12
12
|
canDropBlock,
|
|
13
13
|
isBlockDragData
|
|
14
|
-
} from "../../chunk-
|
|
15
|
-
import "../../chunk-ZSPCE6MZ.js";
|
|
14
|
+
} from "../../chunk-B2DLHZKC.js";
|
|
16
15
|
import "../../chunk-5THS4K5D.js";
|
|
16
|
+
import "../../chunk-ZSPCE6MZ.js";
|
|
17
17
|
import {
|
|
18
18
|
AddIcon,
|
|
19
19
|
IconButton
|
|
@@ -58,7 +58,8 @@ function IndicatorPill({
|
|
|
58
58
|
clickContent,
|
|
59
59
|
className,
|
|
60
60
|
buttonClassName,
|
|
61
|
-
ariaLabel
|
|
61
|
+
ariaLabel,
|
|
62
|
+
disabled
|
|
62
63
|
}) {
|
|
63
64
|
const [hoverOpen, setHoverOpen] = useState(false);
|
|
64
65
|
const [clickOpen, setClickOpen] = useState(false);
|
|
@@ -72,7 +73,7 @@ function IndicatorPill({
|
|
|
72
73
|
}, []);
|
|
73
74
|
function handleMouseEnter() {
|
|
74
75
|
clearHoverTimeout();
|
|
75
|
-
if (!clickOpen && hoverContent) {
|
|
76
|
+
if (!disabled && !clickOpen && hoverContent) {
|
|
76
77
|
setHoverOpen(true);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -83,7 +84,7 @@ function IndicatorPill({
|
|
|
83
84
|
}, 150);
|
|
84
85
|
}
|
|
85
86
|
function handleClick() {
|
|
86
|
-
if (!clickContent) return;
|
|
87
|
+
if (disabled || !clickContent) return;
|
|
87
88
|
setHoverOpen(false);
|
|
88
89
|
clearHoverTimeout();
|
|
89
90
|
setClickOpen((v) => !v);
|
|
@@ -100,15 +101,17 @@ function IndicatorPill({
|
|
|
100
101
|
onClick: handleClick,
|
|
101
102
|
onMouseEnter: handleMouseEnter,
|
|
102
103
|
onMouseLeave: handleMouseLeave,
|
|
103
|
-
"aria-haspopup": clickContent ? "true" : void 0,
|
|
104
|
-
"aria-expanded": clickContent ? clickOpen : void 0,
|
|
104
|
+
"aria-haspopup": !disabled && clickContent ? "true" : void 0,
|
|
105
|
+
"aria-expanded": !disabled && clickContent ? clickOpen : void 0,
|
|
106
|
+
"aria-disabled": disabled || void 0,
|
|
105
107
|
"aria-label": ariaLabel,
|
|
106
108
|
className: cn(
|
|
107
109
|
// align-middle keeps the inline-flex pill centred in its line box regardless of
|
|
108
110
|
// whether it leads with a status/audience dot — without it, the dot-less variant's
|
|
109
111
|
// text baseline sits ~2px lower than the dotted variant, misaligning the two pills.
|
|
110
|
-
"
|
|
111
|
-
"border border-base-200
|
|
112
|
+
"inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium align-middle",
|
|
113
|
+
"border border-base-200",
|
|
114
|
+
disabled ? "cursor-default opacity-60" : "cursor-pointer hover:bg-base-accent",
|
|
112
115
|
buttonClassName
|
|
113
116
|
),
|
|
114
117
|
children: [
|
|
@@ -206,7 +209,8 @@ function StatusIndicator({
|
|
|
206
209
|
isLocalOnly,
|
|
207
210
|
status,
|
|
208
211
|
dirty,
|
|
209
|
-
onChange
|
|
212
|
+
onChange,
|
|
213
|
+
disabled
|
|
210
214
|
}) {
|
|
211
215
|
const display = deriveStatusDisplay({ mainStatus, savedStatus, contentDiffers, isLocalOnly });
|
|
212
216
|
const pillDots = display.dots.map((d) => ({
|
|
@@ -221,6 +225,7 @@ function StatusIndicator({
|
|
|
221
225
|
label: labelText,
|
|
222
226
|
ariaLabel: display.description,
|
|
223
227
|
buttonClassName: "text-base-contrast-light",
|
|
228
|
+
disabled,
|
|
224
229
|
clickContent: (onClose) => /* @__PURE__ */ jsx3("ul", { role: "radiogroup", "aria-label": "Section status", className: "w-full overflow-hidden py-1", children: STATUSES.map((s) => {
|
|
225
230
|
const checked = s === status;
|
|
226
231
|
return /* @__PURE__ */ jsx3("li", { children: /* @__PURE__ */ jsxs3(
|
|
@@ -253,7 +258,7 @@ function StatusIndicator({
|
|
|
253
258
|
// src/components/editor/AudienceIndicator.tsx
|
|
254
259
|
import { Check as Check2 } from "lucide-react";
|
|
255
260
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
256
|
-
function AudienceIndicator({ access, audiences, onChange }) {
|
|
261
|
+
function AudienceIndicator({ access, audiences, onChange, disabled }) {
|
|
257
262
|
const selected = audiences.filter((a) => access.includes(a.name));
|
|
258
263
|
const visibleDots = selected.slice(0, 3);
|
|
259
264
|
function toggle(name) {
|
|
@@ -273,6 +278,7 @@ function AudienceIndicator({ access, audiences, onChange }) {
|
|
|
273
278
|
dots: pillDots,
|
|
274
279
|
label: labelText,
|
|
275
280
|
buttonClassName: selected.length === 0 ? "text-base-contrast-light" : void 0,
|
|
281
|
+
disabled,
|
|
276
282
|
clickContent: audiences.length === 0 ? /* @__PURE__ */ jsx4("div", { className: "px-3 py-2 text-xs text-base-contrast-light whitespace-nowrap", children: "No audiences configured. Add audiences in Site Settings \u2192 Viewer Access." }) : /* @__PURE__ */ jsx4("ul", { role: "list", className: "w-full overflow-hidden py-1", children: audiences.map((a) => {
|
|
277
283
|
const checked = access.includes(a.name);
|
|
278
284
|
return /* @__PURE__ */ jsx4("li", { children: /* @__PURE__ */ jsxs4(
|
|
@@ -313,9 +319,34 @@ function AudienceIndicator({ access, audiences, onChange }) {
|
|
|
313
319
|
import { useState as useState4, useRef as useRef2, useEffect } from "react";
|
|
314
320
|
import { ArrowRightLeft, Plus } from "lucide-react";
|
|
315
321
|
|
|
322
|
+
// src/components/editor/LockBadge.tsx
|
|
323
|
+
import { Lock } from "lucide-react";
|
|
324
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
325
|
+
function LockBadge({ email, onTakeover }) {
|
|
326
|
+
return /* @__PURE__ */ jsxs5("span", { className: "pointer-events-auto inline-flex items-center gap-1.5 rounded-full bg-status-modified-bg px-2 py-0.5 text-xs font-medium text-status-modified-text align-middle", children: [
|
|
327
|
+
/* @__PURE__ */ jsx5(Lock, { size: 12, strokeWidth: 2.5, "aria-hidden": "true" }),
|
|
328
|
+
/* @__PURE__ */ jsxs5("span", { className: "whitespace-nowrap", children: [
|
|
329
|
+
email,
|
|
330
|
+
" is editing"
|
|
331
|
+
] }),
|
|
332
|
+
onTakeover && /* @__PURE__ */ jsx5(
|
|
333
|
+
"button",
|
|
334
|
+
{
|
|
335
|
+
type: "button",
|
|
336
|
+
onClick: onTakeover,
|
|
337
|
+
className: cn(
|
|
338
|
+
"cursor-pointer rounded px-1.5 py-0.5 font-semibold",
|
|
339
|
+
"bg-status-modified-text/10 hover:bg-status-modified-text/20"
|
|
340
|
+
),
|
|
341
|
+
children: "Take over"
|
|
342
|
+
}
|
|
343
|
+
)
|
|
344
|
+
] });
|
|
345
|
+
}
|
|
346
|
+
|
|
316
347
|
// src/components/shell/EditorContext.tsx
|
|
317
348
|
import { createContext, useContext, useState as useState2, useCallback as useCallback2 } from "react";
|
|
318
|
-
import { jsx as
|
|
349
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
319
350
|
var EditorContext = createContext(null);
|
|
320
351
|
function useEditorContext() {
|
|
321
352
|
const context = useContext(EditorContext);
|
|
@@ -327,7 +358,7 @@ function useEditorContext() {
|
|
|
327
358
|
|
|
328
359
|
// src/components/shell/EditorModalContext.tsx
|
|
329
360
|
import { createContext as createContext2, useContext as useContext2, useState as useState3, useCallback as useCallback3 } from "react";
|
|
330
|
-
import { jsx as
|
|
361
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
331
362
|
var EditorModalContext = createContext2(null);
|
|
332
363
|
function useEditorModal() {
|
|
333
364
|
const context = useContext2(EditorModalContext);
|
|
@@ -338,7 +369,7 @@ function useEditorModal() {
|
|
|
338
369
|
}
|
|
339
370
|
|
|
340
371
|
// src/components/editor/SectionWrapper.tsx
|
|
341
|
-
import { Fragment as Fragment2, jsx as
|
|
372
|
+
import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
342
373
|
function SectionWrapper({
|
|
343
374
|
sectionId,
|
|
344
375
|
sectionType,
|
|
@@ -363,8 +394,12 @@ function SectionWrapper({
|
|
|
363
394
|
mainStatus,
|
|
364
395
|
contentDiffersFromMain,
|
|
365
396
|
isLocalOnly,
|
|
397
|
+
lockedBy,
|
|
398
|
+
onTakeover,
|
|
399
|
+
onEditIntent,
|
|
366
400
|
children
|
|
367
401
|
}) {
|
|
402
|
+
const isLocked = !!lockedBy;
|
|
368
403
|
const { isEditMode, showAllChrome } = useEditorContext();
|
|
369
404
|
const { openModal } = useEditorModal();
|
|
370
405
|
const [isActive, setIsActive] = useState4(false);
|
|
@@ -384,7 +419,10 @@ function SectionWrapper({
|
|
|
384
419
|
useEffect(() => {
|
|
385
420
|
const block = blockRef.current;
|
|
386
421
|
if (!block) return;
|
|
387
|
-
const onFocusIn = () =>
|
|
422
|
+
const onFocusIn = () => {
|
|
423
|
+
setIsActive(true);
|
|
424
|
+
if (!isLocked && onEditIntent) void onEditIntent();
|
|
425
|
+
};
|
|
388
426
|
const onFocusOut = (e) => {
|
|
389
427
|
if (!block.contains(e.relatedTarget)) setIsActive(false);
|
|
390
428
|
};
|
|
@@ -394,7 +432,7 @@ function SectionWrapper({
|
|
|
394
432
|
block.removeEventListener("focusin", onFocusIn);
|
|
395
433
|
block.removeEventListener("focusout", onFocusOut);
|
|
396
434
|
};
|
|
397
|
-
}, []);
|
|
435
|
+
}, [isLocked, onEditIntent]);
|
|
398
436
|
useEffect(() => {
|
|
399
437
|
const block = blockRef.current;
|
|
400
438
|
const handle = handleRef.current;
|
|
@@ -462,14 +500,14 @@ function SectionWrapper({
|
|
|
462
500
|
cancelled = true;
|
|
463
501
|
cleanup?.();
|
|
464
502
|
};
|
|
465
|
-
}, [sectionId, index, containerId, isContainerBlock, isEditMode]);
|
|
503
|
+
}, [sectionId, index, containerId, isContainerBlock, isEditMode, isLocked]);
|
|
466
504
|
function handleSettingsClick() {
|
|
467
505
|
if (!onSectionChange) return;
|
|
468
506
|
if (definition.settingsForm) {
|
|
469
507
|
const CustomForm = definition.settingsForm;
|
|
470
508
|
openModal(
|
|
471
509
|
`${definition.label} Settings`,
|
|
472
|
-
/* @__PURE__ */
|
|
510
|
+
/* @__PURE__ */ jsx8(
|
|
473
511
|
CustomForm,
|
|
474
512
|
{
|
|
475
513
|
...options ?? {},
|
|
@@ -480,7 +518,7 @@ function SectionWrapper({
|
|
|
480
518
|
} else if (definition.settings) {
|
|
481
519
|
openModal(
|
|
482
520
|
`${definition.label} Settings`,
|
|
483
|
-
/* @__PURE__ */
|
|
521
|
+
/* @__PURE__ */ jsx8(
|
|
484
522
|
SettingsForm,
|
|
485
523
|
{
|
|
486
524
|
schema: definition.settings,
|
|
@@ -494,14 +532,14 @@ function SectionWrapper({
|
|
|
494
532
|
}
|
|
495
533
|
if (!isEditMode) {
|
|
496
534
|
if (status && status !== "live") {
|
|
497
|
-
return /* @__PURE__ */
|
|
535
|
+
return /* @__PURE__ */ jsxs6(
|
|
498
536
|
"div",
|
|
499
537
|
{
|
|
500
538
|
className: "relative",
|
|
501
539
|
"data-section-id": sectionId,
|
|
502
540
|
"data-section-type": sectionType,
|
|
503
541
|
children: [
|
|
504
|
-
/* @__PURE__ */
|
|
542
|
+
/* @__PURE__ */ jsx8("div", { className: "pointer-events-none absolute right-0 bottom-full z-30 mb-1", children: /* @__PURE__ */ jsxs6(
|
|
505
543
|
"span",
|
|
506
544
|
{
|
|
507
545
|
className: cn(
|
|
@@ -510,7 +548,7 @@ function SectionWrapper({
|
|
|
510
548
|
),
|
|
511
549
|
children: [
|
|
512
550
|
status,
|
|
513
|
-
dirty && /* @__PURE__ */
|
|
551
|
+
dirty && /* @__PURE__ */ jsx8("span", { className: "ml-1 opacity-70", children: "\xB7 Unsaved" })
|
|
514
552
|
]
|
|
515
553
|
}
|
|
516
554
|
) }),
|
|
@@ -519,16 +557,17 @@ function SectionWrapper({
|
|
|
519
557
|
}
|
|
520
558
|
);
|
|
521
559
|
}
|
|
522
|
-
return /* @__PURE__ */
|
|
560
|
+
return /* @__PURE__ */ jsx8(Fragment2, { children });
|
|
523
561
|
}
|
|
524
562
|
const alwaysShow = showAllChrome || isActive;
|
|
525
|
-
return /* @__PURE__ */
|
|
563
|
+
return /* @__PURE__ */ jsxs6(
|
|
526
564
|
"div",
|
|
527
565
|
{
|
|
528
566
|
ref: blockRef,
|
|
529
567
|
className: cn(
|
|
530
568
|
"relative",
|
|
531
569
|
isDragging && "opacity-50",
|
|
570
|
+
isLocked && "opacity-60",
|
|
532
571
|
isActive && "outline outline-2 outline-primary/50 rounded-sm",
|
|
533
572
|
!isActive && showAllChrome && "outline outline-2 outline-primary/20 rounded-sm",
|
|
534
573
|
!alwaysShow && "group-hover:outline group-hover:outline-2 group-hover:outline-primary/20 group-hover:rounded-sm"
|
|
@@ -536,17 +575,17 @@ function SectionWrapper({
|
|
|
536
575
|
"data-section-id": sectionId,
|
|
537
576
|
"data-section-type": sectionType,
|
|
538
577
|
children: [
|
|
539
|
-
onRequestInsert && !isDragging && chromeReady && /* @__PURE__ */
|
|
578
|
+
!isLocked && onRequestInsert && !isDragging && chromeReady && /* @__PURE__ */ jsx8(
|
|
540
579
|
"div",
|
|
541
580
|
{
|
|
542
581
|
className: cn(
|
|
543
582
|
"absolute -left-16 bottom-full z-30 hover:z-[60] mb-1 hidden xl:block transition-opacity",
|
|
544
583
|
alwaysShow ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
545
584
|
),
|
|
546
|
-
children: /* @__PURE__ */
|
|
585
|
+
children: /* @__PURE__ */ jsx8(InsertButton, { index, onInsert: onRequestInsert })
|
|
547
586
|
}
|
|
548
587
|
),
|
|
549
|
-
/* @__PURE__ */
|
|
588
|
+
!isLocked && /* @__PURE__ */ jsxs6(
|
|
550
589
|
"div",
|
|
551
590
|
{
|
|
552
591
|
className: cn(
|
|
@@ -554,26 +593,28 @@ function SectionWrapper({
|
|
|
554
593
|
alwaysShow ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
555
594
|
),
|
|
556
595
|
children: [
|
|
557
|
-
/* @__PURE__ */
|
|
558
|
-
/* @__PURE__ */
|
|
596
|
+
/* @__PURE__ */ jsxs6("div", { className: "relative -ml-[34px] flex flex-col items-center", children: [
|
|
597
|
+
/* @__PURE__ */ jsx8(DragHandle, { ref: handleRef }),
|
|
559
598
|
onRequestInsert && !isDragging && chromeReady && // Below xl the gutter can't fit the plus beside the handle, so it
|
|
560
599
|
// hangs below it (absolute → no row-height contribution: the handle
|
|
561
600
|
// stays put and the pair stacks DOWN instead of centering).
|
|
562
|
-
/* @__PURE__ */
|
|
601
|
+
/* @__PURE__ */ jsx8("div", { className: "absolute top-full xl:hidden", children: /* @__PURE__ */ jsx8(InsertButton, { index, onInsert: onRequestInsert }) })
|
|
563
602
|
] }),
|
|
564
|
-
/* @__PURE__ */
|
|
603
|
+
/* @__PURE__ */ jsx8("span", { className: "pointer-events-none select-none whitespace-nowrap text-sm capitalize text-base-contrast-light/80", children: definition.label })
|
|
565
604
|
]
|
|
566
605
|
}
|
|
567
606
|
),
|
|
568
|
-
/* @__PURE__ */
|
|
607
|
+
/* @__PURE__ */ jsxs6(
|
|
569
608
|
"div",
|
|
570
609
|
{
|
|
571
610
|
className: cn(
|
|
572
611
|
"pointer-events-none absolute right-0 bottom-full z-30 mb-1 flex items-center gap-2 transition-opacity",
|
|
573
|
-
|
|
612
|
+
// A lock is important state — keep the cluster visible without hover.
|
|
613
|
+
alwaysShow || isLocked ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
574
614
|
),
|
|
575
615
|
children: [
|
|
576
|
-
/* @__PURE__ */
|
|
616
|
+
lockedBy && /* @__PURE__ */ jsx8(LockBadge, { email: lockedBy.email, onTakeover }),
|
|
617
|
+
/* @__PURE__ */ jsx8("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx8(
|
|
577
618
|
StatusIndicator,
|
|
578
619
|
{
|
|
579
620
|
mainStatus: mainStatus ?? null,
|
|
@@ -582,43 +623,45 @@ function SectionWrapper({
|
|
|
582
623
|
isLocalOnly: isLocalOnly ?? false,
|
|
583
624
|
status,
|
|
584
625
|
dirty,
|
|
626
|
+
disabled: isLocked,
|
|
585
627
|
onChange: (s) => onStatusChange?.(s)
|
|
586
628
|
}
|
|
587
629
|
) }),
|
|
588
|
-
/* @__PURE__ */
|
|
630
|
+
/* @__PURE__ */ jsx8("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx8(
|
|
589
631
|
AudienceIndicator,
|
|
590
632
|
{
|
|
591
633
|
access,
|
|
592
634
|
audiences,
|
|
635
|
+
disabled: isLocked,
|
|
593
636
|
onChange: (newAccess) => onAccessChange?.(newAccess)
|
|
594
637
|
}
|
|
595
638
|
) }),
|
|
596
|
-
onAddChild && /* @__PURE__ */
|
|
639
|
+
!isLocked && onAddChild && /* @__PURE__ */ jsx8(
|
|
597
640
|
"button",
|
|
598
641
|
{
|
|
599
642
|
type: "button",
|
|
600
643
|
onClick: onAddChild,
|
|
601
644
|
"aria-label": "Add block",
|
|
602
645
|
className: "pointer-events-auto cursor-pointer rounded p-1 text-base-contrast-light hover:text-primary",
|
|
603
|
-
children: /* @__PURE__ */
|
|
646
|
+
children: /* @__PURE__ */ jsx8(Plus, { size: 16 })
|
|
604
647
|
}
|
|
605
648
|
),
|
|
606
|
-
hasSettings && /* @__PURE__ */
|
|
607
|
-
onMoveSection && /* @__PURE__ */
|
|
649
|
+
!isLocked && hasSettings && /* @__PURE__ */ jsx8(SettingsButton, { onClick: handleSettingsClick }),
|
|
650
|
+
!isLocked && onMoveSection && /* @__PURE__ */ jsx8(
|
|
608
651
|
"button",
|
|
609
652
|
{
|
|
610
653
|
type: "button",
|
|
611
654
|
onClick: onMoveSection,
|
|
612
655
|
"aria-label": "Move to page",
|
|
613
656
|
className: "pointer-events-auto cursor-pointer rounded p-1 text-base-contrast-light hover:text-primary",
|
|
614
|
-
children: /* @__PURE__ */
|
|
657
|
+
children: /* @__PURE__ */ jsx8(ArrowRightLeft, { size: 16 })
|
|
615
658
|
}
|
|
616
659
|
),
|
|
617
|
-
onDelete && /* @__PURE__ */
|
|
660
|
+
!isLocked && onDelete && /* @__PURE__ */ jsx8(DeleteButton, { onDelete })
|
|
618
661
|
]
|
|
619
662
|
}
|
|
620
663
|
),
|
|
621
|
-
closestEdge === "top" && /* @__PURE__ */
|
|
664
|
+
closestEdge === "top" && /* @__PURE__ */ jsx8(
|
|
622
665
|
"div",
|
|
623
666
|
{
|
|
624
667
|
className: "absolute right-0 left-0 z-10 h-0.5 bg-primary",
|
|
@@ -628,8 +671,13 @@ function SectionWrapper({
|
|
|
628
671
|
}
|
|
629
672
|
}
|
|
630
673
|
),
|
|
631
|
-
closestEdge === "bottom" && isLast && /* @__PURE__ */
|
|
632
|
-
|
|
674
|
+
closestEdge === "bottom" && isLast && /* @__PURE__ */ jsx8("div", { className: "absolute right-0 bottom-0 left-0 z-10 h-0.5 bg-primary" }),
|
|
675
|
+
isLocked ? (
|
|
676
|
+
// React 19 supports the boolean `inert` prop — blocks focus, pointer,
|
|
677
|
+
// and edits to another editor's locked content. Only wrapped when
|
|
678
|
+
// locked so the unlocked DOM is unchanged.
|
|
679
|
+
/* @__PURE__ */ jsx8("div", { inert: true, children })
|
|
680
|
+
) : children
|
|
633
681
|
]
|
|
634
682
|
}
|
|
635
683
|
);
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
EditableRichText,
|
|
3
3
|
LinkPopover,
|
|
4
4
|
defineHeadingSection
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-YP7IHMC3.js";
|
|
6
6
|
import {
|
|
7
7
|
EditableGrid,
|
|
8
8
|
EditablePlainText,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
MediaBlock,
|
|
11
11
|
ResolvedMedia,
|
|
12
12
|
useEditableCollection
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-UUCOJL7O.js";
|
|
14
14
|
import "../../chunk-ZSPCE6MZ.js";
|
|
15
15
|
import {
|
|
16
16
|
DeleteIcon,
|
|
@@ -23,8 +23,8 @@ import {
|
|
|
23
23
|
cn
|
|
24
24
|
} from "../../chunk-7EOSDFS3.js";
|
|
25
25
|
import "../../chunk-4YEOTFVU.js";
|
|
26
|
-
import "../../chunk-VKAGMEKE.js";
|
|
27
26
|
import "../../chunk-SWIHUIFT.js";
|
|
27
|
+
import "../../chunk-VKAGMEKE.js";
|
|
28
28
|
import "../../chunk-JSBRDJBE.js";
|
|
29
29
|
|
|
30
30
|
// src/components/primitives/EditableList.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/components/sections/Container/Container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgB3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/components/sections/Container/Container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgB3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAyGzD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;CACzD;AAkDD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,2CAyLrF"}
|
|
@@ -2,17 +2,17 @@ import {
|
|
|
2
2
|
ColorItemSchema,
|
|
3
3
|
ColorSpaceSchema,
|
|
4
4
|
brandGuideSectionDefs
|
|
5
|
-
} from "../../chunk-
|
|
6
|
-
import "../../chunk-T7MP7ANP.js";
|
|
5
|
+
} from "../../chunk-63BQQNZO.js";
|
|
7
6
|
import "../../chunk-5THS4K5D.js";
|
|
7
|
+
import "../../chunk-UUCOJL7O.js";
|
|
8
8
|
import "../../chunk-IFHRHV7S.js";
|
|
9
9
|
import "../../chunk-S55OZ7F2.js";
|
|
10
10
|
import "../../chunk-PZJL2S3Z.js";
|
|
11
11
|
import "../../chunk-WDSVHKAH.js";
|
|
12
12
|
import "../../chunk-7EOSDFS3.js";
|
|
13
13
|
import "../../chunk-4YEOTFVU.js";
|
|
14
|
-
import "../../chunk-VKAGMEKE.js";
|
|
15
14
|
import "../../chunk-SWIHUIFT.js";
|
|
15
|
+
import "../../chunk-VKAGMEKE.js";
|
|
16
16
|
import "../../chunk-JSBRDJBE.js";
|
|
17
17
|
export {
|
|
18
18
|
ColorItemSchema,
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
2
|
allSectionDefs
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-7T2WQSWF.js";
|
|
7
|
-
import "../../chunk-T7MP7ANP.js";
|
|
8
|
-
import "../../chunk-Q3T23HVW.js";
|
|
9
|
-
import "../../chunk-ZSPCE6MZ.js";
|
|
3
|
+
} from "../../chunk-RO4E5UJI.js";
|
|
4
|
+
import "../../chunk-63BQQNZO.js";
|
|
5
|
+
import "../../chunk-B2DLHZKC.js";
|
|
10
6
|
import "../../chunk-5THS4K5D.js";
|
|
7
|
+
import "../../chunk-YP7IHMC3.js";
|
|
8
|
+
import "../../chunk-UUCOJL7O.js";
|
|
9
|
+
import "../../chunk-ZSPCE6MZ.js";
|
|
11
10
|
import "../../chunk-IFHRHV7S.js";
|
|
11
|
+
import "../../chunk-Y4JQGO6G.js";
|
|
12
12
|
import "../../chunk-S55OZ7F2.js";
|
|
13
13
|
import "../../chunk-PZJL2S3Z.js";
|
|
14
|
-
import "../../chunk-53DKVAB6.js";
|
|
15
14
|
import "../../chunk-WDSVHKAH.js";
|
|
15
|
+
import "../../chunk-53DKVAB6.js";
|
|
16
16
|
import "../../chunk-7EOSDFS3.js";
|
|
17
17
|
import "../../chunk-4YEOTFVU.js";
|
|
18
18
|
import "../../chunk-TZQPOR5A.js";
|
|
19
|
+
import "../../chunk-SWIHUIFT.js";
|
|
19
20
|
import {
|
|
20
21
|
registerRichText,
|
|
21
22
|
registerSchema
|
|
22
23
|
} from "../../chunk-VKAGMEKE.js";
|
|
23
|
-
import "../../chunk-SWIHUIFT.js";
|
|
24
24
|
import "../../chunk-NSCT3AMV.js";
|
|
25
25
|
import "../../chunk-JSBRDJBE.js";
|
|
26
26
|
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
allSectionDefs
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-7T2WQSWF.js";
|
|
7
|
-
import "../../chunk-T7MP7ANP.js";
|
|
8
|
-
import "../../chunk-Q3T23HVW.js";
|
|
9
|
-
import "../../chunk-ZSPCE6MZ.js";
|
|
3
|
+
} from "../../chunk-RO4E5UJI.js";
|
|
4
|
+
import "../../chunk-63BQQNZO.js";
|
|
5
|
+
import "../../chunk-B2DLHZKC.js";
|
|
10
6
|
import "../../chunk-5THS4K5D.js";
|
|
7
|
+
import "../../chunk-YP7IHMC3.js";
|
|
8
|
+
import "../../chunk-UUCOJL7O.js";
|
|
9
|
+
import "../../chunk-ZSPCE6MZ.js";
|
|
11
10
|
import "../../chunk-IFHRHV7S.js";
|
|
11
|
+
import "../../chunk-Y4JQGO6G.js";
|
|
12
12
|
import "../../chunk-S55OZ7F2.js";
|
|
13
13
|
import "../../chunk-PZJL2S3Z.js";
|
|
14
|
-
import "../../chunk-53DKVAB6.js";
|
|
15
14
|
import "../../chunk-WDSVHKAH.js";
|
|
15
|
+
import "../../chunk-53DKVAB6.js";
|
|
16
16
|
import "../../chunk-7EOSDFS3.js";
|
|
17
17
|
import "../../chunk-4YEOTFVU.js";
|
|
18
18
|
import "../../chunk-TZQPOR5A.js";
|
|
19
|
+
import "../../chunk-SWIHUIFT.js";
|
|
19
20
|
import {
|
|
20
21
|
registerSection
|
|
21
22
|
} from "../../chunk-VKAGMEKE.js";
|
|
22
|
-
import "../../chunk-SWIHUIFT.js";
|
|
23
23
|
import "../../chunk-NSCT3AMV.js";
|
|
24
24
|
import "../../chunk-JSBRDJBE.js";
|
|
25
25
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Audience } from "../../auth/types";
|
|
2
|
+
import type { CollabBootstrap } from "../../collab/types";
|
|
2
3
|
export { useMediaLibrary } from "./MediaLibraryContext";
|
|
3
4
|
interface Props {
|
|
4
5
|
headSha: string;
|
|
@@ -18,6 +19,7 @@ interface Props {
|
|
|
18
19
|
role: "owner" | "editor";
|
|
19
20
|
} | null;
|
|
20
21
|
chatbotPlatformEnabled?: boolean;
|
|
22
|
+
collabBootstrap?: CollabBootstrap | null;
|
|
21
23
|
}
|
|
22
|
-
export default function EditorShell({ headSha, draftHeadSha, siteId, audiences: initialAudiences, capabilities, currentUser, chatbotPlatformEnabled, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default function EditorShell({ headSha, draftHeadSha, siteId, audiences: initialAudiences, capabilities, currentUser, chatbotPlatformEnabled, collabBootstrap, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
//# sourceMappingURL=EditorShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorShell.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorShell.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,oBAAoB,CAAC;AAmCnH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAoBxD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAIhB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,YAAY,EAAE;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAC;IAIhE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAKjC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,OAAO,EACP,YAAY,EACZ,MAAM,EACN,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EACZ,WAAW,EACX,sBAA8B,EAC9B,eAAe,GAChB,EAAE,KAAK,2CA27CP"}
|