@drawnagency/primitives 0.1.94 → 0.1.96

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.
Files changed (82) hide show
  1. package/dist/{chunk-UFOWXOG6.js → chunk-CS2ECR3U.js} +9 -3
  2. package/dist/{chunk-GDLH3LVH.js → chunk-CSVGCAIH.js} +7 -6
  3. package/dist/chunk-EUSWEVOA.js +29 -0
  4. package/dist/{chunk-677NTHAZ.js → chunk-PTOLUMGV.js} +3 -0
  5. package/dist/{chunk-XYFZ57AS.js → chunk-YUUUCDXN.js} +59 -5
  6. package/dist/components/brandguide/Colors.d.ts +2 -2
  7. package/dist/components/brandguide/Colors.d.ts.map +1 -1
  8. package/dist/components/brandguide/ColorsEditable.d.ts +2 -2
  9. package/dist/components/brandguide/ColorsEditable.d.ts.map +1 -1
  10. package/dist/components/editor/SectionWrapper.d.ts.map +1 -1
  11. package/dist/components/editor/SettingsForm.d.ts.map +1 -1
  12. package/dist/components/editor/index.js +4 -3
  13. package/dist/components/primitives/index.js +1 -1
  14. package/dist/components/sections/Container/Container.d.ts +2 -2
  15. package/dist/components/sections/Container/Container.d.ts.map +1 -1
  16. package/dist/components/sections/brand-guide.js +2 -2
  17. package/dist/components/sections/register-schemas.js +4 -4
  18. package/dist/components/sections/register.js +4 -4
  19. package/dist/components/shared/HistoryChangesModal.d.ts +39 -0
  20. package/dist/components/shared/HistoryChangesModal.d.ts.map +1 -0
  21. package/dist/components/shared/HistoryPopover.d.ts +3 -1
  22. package/dist/components/shared/HistoryPopover.d.ts.map +1 -1
  23. package/dist/components/shared/Navigation.d.ts.map +1 -1
  24. package/dist/components/shared/Popover.d.ts +10 -1
  25. package/dist/components/shared/Popover.d.ts.map +1 -1
  26. package/dist/components/shell/EditorModal.d.ts +6 -1
  27. package/dist/components/shell/EditorModal.d.ts.map +1 -1
  28. package/dist/components/shell/EditorModalContext.d.ts +3 -2
  29. package/dist/components/shell/EditorModalContext.d.ts.map +1 -1
  30. package/dist/components/shell/EditorShell.d.ts.map +1 -1
  31. package/dist/hooks/useEditorPublish.d.ts +5 -1
  32. package/dist/hooks/useEditorPublish.d.ts.map +1 -1
  33. package/dist/index.js +45 -37
  34. package/dist/lib/events.d.ts +18 -0
  35. package/dist/lib/events.d.ts.map +1 -1
  36. package/dist/lib/history-buckets.d.ts +30 -0
  37. package/dist/lib/history-buckets.d.ts.map +1 -0
  38. package/dist/lib/index-ops.d.ts +77 -0
  39. package/dist/lib/index-ops.d.ts.map +1 -0
  40. package/dist/lib/index-ops.js +223 -0
  41. package/dist/lib/index.d.ts +1 -1
  42. package/dist/lib/index.d.ts.map +1 -1
  43. package/dist/lib/index.js +6 -4
  44. package/dist/lib/media-folders.d.ts +13 -0
  45. package/dist/lib/media-folders.d.ts.map +1 -1
  46. package/dist/lib/media-folders.js +172 -0
  47. package/dist/lib/registry.d.ts +7 -1
  48. package/dist/lib/registry.d.ts.map +1 -1
  49. package/dist/lib/theme-vars.d.ts +19 -4
  50. package/dist/lib/theme-vars.d.ts.map +1 -1
  51. package/dist/schemas/index.js +1 -1
  52. package/dist/storage/index.d.ts +1 -1
  53. package/dist/storage/index.d.ts.map +1 -1
  54. package/dist/storage/index.js +9 -3
  55. package/dist/storage/types.d.ts +44 -0
  56. package/dist/storage/types.d.ts.map +1 -1
  57. package/package.json +9 -1
  58. package/src/components/brandguide/Colors.tsx +2 -1
  59. package/src/components/brandguide/ColorsEditable.tsx +2 -1
  60. package/src/components/editor/SectionWrapper.tsx +1 -0
  61. package/src/components/editor/SettingsForm.tsx +5 -2
  62. package/src/components/sections/Container/Container.tsx +5 -4
  63. package/src/components/shared/HistoryChangesModal.tsx +256 -0
  64. package/src/components/shared/HistoryPopover.tsx +255 -76
  65. package/src/components/shared/Navigation.tsx +30 -9
  66. package/src/components/shared/Popover.tsx +95 -2
  67. package/src/components/shell/EditorModal.tsx +26 -4
  68. package/src/components/shell/EditorModalContext.tsx +5 -4
  69. package/src/components/shell/EditorShell.tsx +51 -2
  70. package/src/components/shell/SiteSettingsModal.tsx +1 -1
  71. package/src/hooks/useEditorPublish.ts +15 -6
  72. package/src/lib/events.ts +11 -0
  73. package/src/lib/history-buckets.ts +190 -0
  74. package/src/lib/index-ops.ts +309 -0
  75. package/src/lib/index.ts +1 -1
  76. package/src/lib/media-folders.ts +16 -0
  77. package/src/lib/registry.ts +9 -1
  78. package/src/lib/theme-vars.ts +25 -4
  79. package/src/storage/index.ts +1 -1
  80. package/src/storage/types.ts +55 -0
  81. package/dist/chunk-VAOW4WXQ.js +0 -15
  82. package/dist/{chunk-ZKGMLLUQ.js → chunk-IFCQWC3G.js} +3 -3
@@ -7,12 +7,12 @@ import {
7
7
  import {
8
8
  getSectionSchema
9
9
  } from "./chunk-TZQPOR5A.js";
10
- import {
11
- IndexSchema
12
- } from "./chunk-RHWWQV3J.js";
13
10
  import {
14
11
  getAllSchemas
15
12
  } from "./chunk-VKAGMEKE.js";
13
+ import {
14
+ IndexSchema
15
+ } from "./chunk-RHWWQV3J.js";
16
16
  import {
17
17
  MAX_BLOCK_DEPTH,
18
18
  blockDepth
@@ -90,6 +90,11 @@ function primaryVarValue(c) {
90
90
  function accentVarValue(c) {
91
91
  return lightDark(c?.primaryContrast ?? DEFAULT_CONTRAST, c?.primaryContrastDark, c?.darkMode === "optional");
92
92
  }
93
+ function onPrimaryVarValue(c) {
94
+ const light = suggestAccessibleOn(c?.primaryColor ?? DEFAULT_PRIMARY);
95
+ const dark = c?.primaryColorDark ? suggestAccessibleOn(c.primaryColorDark) : null;
96
+ return lightDark(light, dark, c?.darkMode === "optional");
97
+ }
93
98
 
94
99
  // src/lib/grid.ts
95
100
  var gridColsClass = {
@@ -212,6 +217,7 @@ export {
212
217
  suggestAccessibleOn,
213
218
  primaryVarValue,
214
219
  accentVarValue,
220
+ onPrimaryVarValue,
215
221
  gridColsClass,
216
222
  buildGoogleFontsUrl,
217
223
  formatTimestamp,
@@ -3,7 +3,7 @@ import {
3
3
  pluralize,
4
4
  stripHtmlToPlainText,
5
5
  truncate
6
- } from "./chunk-ZKGMLLUQ.js";
6
+ } from "./chunk-IFCQWC3G.js";
7
7
  import {
8
8
  DeleteButton,
9
9
  DragHandle,
@@ -17,7 +17,7 @@ import {
17
17
  buildBlockDropData,
18
18
  canDropBlock,
19
19
  isBlockDragData
20
- } from "./chunk-XYFZ57AS.js";
20
+ } from "./chunk-YUUUCDXN.js";
21
21
  import {
22
22
  EditableRichText,
23
23
  defineHeadingSection
@@ -52,13 +52,13 @@ import {
52
52
  import {
53
53
  getSectionSchema
54
54
  } from "./chunk-TZQPOR5A.js";
55
- import {
56
- SingleMediaReferenceSchema
57
- } from "./chunk-RHWWQV3J.js";
58
55
  import {
59
56
  defineSection,
60
57
  getSection
61
58
  } from "./chunk-VKAGMEKE.js";
59
+ import {
60
+ SingleMediaReferenceSchema
61
+ } from "./chunk-RHWWQV3J.js";
62
62
 
63
63
  // src/components/sections/LinkHeading/index.tsx
64
64
  import { Heading1 } from "lucide-react";
@@ -956,7 +956,8 @@ function Container({ content, isEditMode, onChange, openModal }) {
956
956
  onChange: applyResult,
957
957
  tabs: def.settingsTabs
958
958
  }
959
- )
959
+ ),
960
+ { tabbed: (def.settingsTabs?.length ?? 0) > 0 }
960
961
  );
961
962
  }
962
963
  };
@@ -0,0 +1,29 @@
1
+ // src/storage/types.ts
2
+ var StorageConflictError = class extends Error {
3
+ constructor(currentVersion) {
4
+ super("Draft has been modified since it was loaded");
5
+ this.currentVersion = currentVersion;
6
+ this.name = "StorageConflictError";
7
+ }
8
+ currentVersion;
9
+ };
10
+ var IDEMPOTENCY_TRAILER = "Idempotency-Key";
11
+ var IDEMPOTENCY_KEY_RE = /^[A-Za-z0-9._:-]{8,200}$/;
12
+ function withIdempotencyTrailer(subject, key) {
13
+ if (!key) return subject;
14
+ if (!IDEMPOTENCY_KEY_RE.test(key)) {
15
+ throw new Error("Invalid idempotency key: expected 8-200 chars of A-Za-z0-9._:-");
16
+ }
17
+ return `${subject}
18
+
19
+ ${IDEMPOTENCY_TRAILER}: ${key}`;
20
+ }
21
+ var ASSET_CACHE_CONTROL = "max-age=31536000, immutable";
22
+
23
+ export {
24
+ StorageConflictError,
25
+ IDEMPOTENCY_TRAILER,
26
+ IDEMPOTENCY_KEY_RE,
27
+ withIdempotencyTrailer,
28
+ ASSET_CACHE_CONTROL
29
+ };
@@ -16,6 +16,9 @@ var navChangeEvent = createEvent("sitenavchange");
16
16
  var darkModeEvent = createEvent("sitedarkmode");
17
17
  var siteNameChangeEvent = createEvent("sitenamechange");
18
18
  var historySelectEvent = createEvent("history-select");
19
+ var historyRestoreEvent = createEvent("history-restore");
20
+ var historyRestoreFailedEvent = createEvent("history-restore-failed");
21
+ var editorDirtyEvent = createEvent("editor-dirty");
19
22
  var siteNavChangeEvent = createEvent("sitenavchange-v2");
20
23
  var pageSelectEvent = createEvent("pageselect");
21
24
 
@@ -537,9 +537,10 @@ function SettingsForm({ schema, values, onChange, tabs }) {
537
537
  const fields = (keys) => keys.filter((key) => key in schema).map((key) => renderField(key, schema[key], local[key], handleFieldChange));
538
538
  const listed = new Set(tabs.flatMap((t) => t.fields));
539
539
  const otherKeys = Object.keys(schema).filter((key) => !listed.has(key));
540
+ const panel = "flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-px";
540
541
  const tabItems = [
541
- ...tabs.map((t) => ({ id: t.label, label: t.label, content: /* @__PURE__ */ jsx9("div", { className: "flex flex-col gap-4", children: fields(t.fields) }) })),
542
- ...otherKeys.length > 0 ? [{ id: "__other__", label: "Other", content: /* @__PURE__ */ jsx9("div", { className: "flex flex-col gap-4", children: fields(otherKeys) }) }] : []
542
+ ...tabs.map((t) => ({ id: t.label, label: t.label, content: /* @__PURE__ */ jsx9("div", { className: panel, children: fields(t.fields) }) })),
543
+ ...otherKeys.length > 0 ? [{ id: "__other__", label: "Other", content: /* @__PURE__ */ jsx9("div", { className: panel, children: fields(otherKeys) }) }] : []
543
544
  ];
544
545
  return /* @__PURE__ */ jsx9(Tabs, { tabs: tabItems, fullBleedTabBar: true });
545
546
  }
@@ -548,6 +549,7 @@ function SettingsForm({ schema, values, onChange, tabs }) {
548
549
 
549
550
  // src/components/shared/Popover.tsx
550
551
  import { useEffect as useEffect2, useLayoutEffect, useRef, useState as useState4 } from "react";
552
+ import { createPortal } from "react-dom";
551
553
 
552
554
  // src/hooks/useFocusTrap.ts
553
555
  import { useEffect } from "react";
@@ -605,12 +607,39 @@ function Popover({
605
607
  anchorRef,
606
608
  children,
607
609
  align = "auto",
608
- className
610
+ className,
611
+ portal = false,
612
+ placement = "bottom"
609
613
  }) {
610
614
  const panelRef = useRef(null);
611
615
  const [resolvedAlign, setResolvedAlign] = useState4("start");
612
- useFocusTrap(panelRef, isOpen);
616
+ const [fixedPos, setFixedPos] = useState4(null);
617
+ useFocusTrap(panelRef, isOpen && (!portal || fixedPos !== null));
618
+ useLayoutEffect(() => {
619
+ if (!portal) return;
620
+ if (!isOpen) {
621
+ setFixedPos(null);
622
+ return;
623
+ }
624
+ const anchor = anchorRef.current;
625
+ if (!anchor) return;
626
+ const update = () => {
627
+ const r = anchor.getBoundingClientRect();
628
+ const next = placement === "top" ? { left: r.left, bottom: window.innerHeight - r.top + 4 } : { left: r.left, top: r.bottom + 4 };
629
+ setFixedPos(
630
+ (prev) => prev && prev.left === next.left && prev.top === next.top && prev.bottom === next.bottom ? prev : next
631
+ );
632
+ };
633
+ update();
634
+ window.addEventListener("resize", update);
635
+ window.addEventListener("scroll", update, true);
636
+ return () => {
637
+ window.removeEventListener("resize", update);
638
+ window.removeEventListener("scroll", update, true);
639
+ };
640
+ }, [isOpen, portal, placement, anchorRef]);
613
641
  useLayoutEffect(() => {
642
+ if (portal) return;
614
643
  if (!isOpen || align !== "auto") {
615
644
  if (!isOpen) setResolvedAlign("start");
616
645
  return;
@@ -631,12 +660,15 @@ function Popover({
631
660
  useEffect2(() => {
632
661
  if (!isOpen) return;
633
662
  function onKeyDown(e) {
634
- if (e.key === "Escape") onClose();
663
+ if (e.key !== "Escape") return;
664
+ if (document.querySelector("[data-modal-layer]")) return;
665
+ onClose();
635
666
  }
636
667
  function onMouseDown(e) {
637
668
  const target = e.target;
638
669
  if (panelRef.current?.contains(target)) return;
639
670
  if (anchorRef.current?.contains(target)) return;
671
+ if (target instanceof Element && target.closest("[data-modal-layer]")) return;
640
672
  onClose();
641
673
  }
642
674
  document.addEventListener("keydown", onKeyDown);
@@ -648,6 +680,28 @@ function Popover({
648
680
  }, [isOpen, onClose, anchorRef]);
649
681
  if (!isOpen) return null;
650
682
  const effectiveAlign = align === "auto" ? resolvedAlign : align;
683
+ if (portal) {
684
+ if (!fixedPos) return null;
685
+ return createPortal(
686
+ /* @__PURE__ */ jsx10(
687
+ "div",
688
+ {
689
+ ref: panelRef,
690
+ role: "dialog",
691
+ "aria-modal": "false",
692
+ style: {
693
+ position: "fixed",
694
+ left: `${fixedPos.left}px`,
695
+ ...fixedPos.top !== void 0 ? { top: `${fixedPos.top}px` } : {},
696
+ ...fixedPos.bottom !== void 0 ? { bottom: `${fixedPos.bottom}px` } : {}
697
+ },
698
+ className: cn("z-50 rounded-md border border-base-200 bg-base shadow-lg", className),
699
+ children
700
+ }
701
+ ),
702
+ document.body
703
+ );
704
+ }
651
705
  return /* @__PURE__ */ jsx10(
652
706
  "div",
653
707
  {
@@ -1,6 +1,6 @@
1
- import type { ReactNode } from "react";
2
1
  import type { ColorItem } from "../sections/Colors/schema";
3
2
  import type { SectionContent } from "../../schemas/sections";
3
+ import type { OpenModal } from "../../lib/registry";
4
4
  interface Props {
5
5
  colors: ColorItem[];
6
6
  columns?: number;
@@ -8,7 +8,7 @@ interface Props {
8
8
  collapsing?: boolean;
9
9
  showLabel?: boolean;
10
10
  onChange?: (content: SectionContent) => void;
11
- openModal?: (title: string, content: ReactNode) => void;
11
+ openModal?: OpenModal;
12
12
  onDelete?: () => void;
13
13
  }
14
14
  export default function Colors({ colors, columns, label, collapsing, showLabel, onChange, openModal, onDelete }: Props): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Colors.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/Colors.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,UAAU,KAAK;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAW,EAAE,KAAK,EAAE,UAAU,EAAE,SAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAiBhI"}
1
+ {"version":3,"file":"Colors.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/Colors.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,UAAU,KAAK;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAW,EAAE,KAAK,EAAE,UAAU,EAAE,SAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAiBhI"}
@@ -1,6 +1,6 @@
1
- import type { ReactNode } from "react";
2
1
  import type { ColorItem } from "../sections/Colors/schema";
3
2
  import type { SectionContent } from "../../schemas/sections";
3
+ import type { OpenModal } from "../../lib/registry";
4
4
  export declare function buildContent(colors: ColorItem[], options: {
5
5
  label?: string;
6
6
  columns?: number;
@@ -14,7 +14,7 @@ export default function ColorsEditable({ colors, columns, label, collapsing, sho
14
14
  collapsing?: boolean;
15
15
  showLabel?: boolean;
16
16
  onChange: (content: SectionContent) => void;
17
- openModal: (title: string, content: ReactNode) => void;
17
+ openModal: OpenModal;
18
18
  onDelete?: () => void;
19
19
  }): import("react/jsx-runtime").JSX.Element;
20
20
  //# sourceMappingURL=ColorsEditable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorsEditable.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/ColorsEditable.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACvF,cAAc,CAShB;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAC7E,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,2CAqEA"}
1
+ {"version":3,"file":"ColorsEditable.d.ts","sourceRoot":"","sources":["../../../src/components/brandguide/ColorsEditable.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACvF,cAAc,CAShB;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAC7E,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,2CAqEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SectionWrapper.tsx"],"names":[],"mappings":"AAeA,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,2CAyVd"}
1
+ {"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SectionWrapper.tsx"],"names":[],"mappings":"AAeA,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,2CA0Vd"}
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsForm.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SettingsForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAC;AAY3E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CAC9C;AA8JD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA2BjF"}
1
+ {"version":3,"file":"SettingsForm.d.ts","sourceRoot":"","sources":["../../../src/components/editor/SettingsForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAC;AAY3E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CAC9C;AA8JD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA8BjF"}
@@ -11,7 +11,7 @@ import {
11
11
  buildBlockDropData,
12
12
  canDropBlock,
13
13
  isBlockDragData
14
- } from "../../chunk-XYFZ57AS.js";
14
+ } from "../../chunk-YUUUCDXN.js";
15
15
  import "../../chunk-5THS4K5D.js";
16
16
  import "../../chunk-ZSPCE6MZ.js";
17
17
  import {
@@ -19,7 +19,7 @@ import {
19
19
  IconButton
20
20
  } from "../../chunk-CI624HRS.js";
21
21
  import "../../chunk-SOILPZ7U.js";
22
- import "../../chunk-677NTHAZ.js";
22
+ import "../../chunk-PTOLUMGV.js";
23
23
  import {
24
24
  cn
25
25
  } from "../../chunk-7EOSDFS3.js";
@@ -536,7 +536,8 @@ function SectionWrapper({
536
536
  onChange: (result) => onSectionChange(result),
537
537
  tabs: definition.settingsTabs
538
538
  }
539
- )
539
+ ),
540
+ { tabbed: (definition.settingsTabs?.length ?? 0) > 0 }
540
541
  );
541
542
  }
542
543
  }
@@ -23,8 +23,8 @@ import {
23
23
  cn
24
24
  } from "../../chunk-7EOSDFS3.js";
25
25
  import "../../chunk-YBVK254P.js";
26
- import "../../chunk-RHWWQV3J.js";
27
26
  import "../../chunk-VKAGMEKE.js";
27
+ import "../../chunk-RHWWQV3J.js";
28
28
  import "../../chunk-FM4M4Q2W.js";
29
29
  import "../../chunk-JSBRDJBE.js";
30
30
 
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from "react";
1
+ import { type OpenModal } from "../../../lib/registry";
2
2
  import type { Section } from "../../../schemas/sections";
3
3
  interface ContainerContent {
4
4
  layout: "grid" | "masonry";
@@ -14,7 +14,7 @@ export interface ContainerProps {
14
14
  };
15
15
  isEditMode: boolean;
16
16
  onChange?: (content: unknown) => void;
17
- openModal?: (title: string, content: ReactNode) => void;
17
+ openModal?: OpenModal;
18
18
  }
19
19
  export declare function Container({ content, isEditMode, onChange, openModal }: ContainerProps): import("react/jsx-runtime").JSX.Element | null;
20
20
  export {};
@@ -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;AA4GzD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,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;AAwFD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,kDA6RrF"}
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/components/sections/Container/Container.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAcnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AA4GzD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,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,SAAS,CAAC;CACvB;AAwFD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,kDA8RrF"}
@@ -2,7 +2,7 @@ import {
2
2
  ColorItemSchema,
3
3
  ColorSpaceSchema,
4
4
  brandGuideSectionDefs
5
- } from "../../chunk-ZKGMLLUQ.js";
5
+ } from "../../chunk-IFCQWC3G.js";
6
6
  import "../../chunk-5THS4K5D.js";
7
7
  import "../../chunk-DJAJRBPD.js";
8
8
  import "../../chunk-CI624HRS.js";
@@ -11,8 +11,8 @@ import "../../chunk-PZJL2S3Z.js";
11
11
  import "../../chunk-WDSVHKAH.js";
12
12
  import "../../chunk-7EOSDFS3.js";
13
13
  import "../../chunk-YBVK254P.js";
14
- import "../../chunk-RHWWQV3J.js";
15
14
  import "../../chunk-VKAGMEKE.js";
15
+ import "../../chunk-RHWWQV3J.js";
16
16
  import "../../chunk-FM4M4Q2W.js";
17
17
  import "../../chunk-JSBRDJBE.js";
18
18
  export {
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  allSectionDefs
3
- } from "../../chunk-GDLH3LVH.js";
4
- import "../../chunk-ZKGMLLUQ.js";
5
- import "../../chunk-XYFZ57AS.js";
3
+ } from "../../chunk-CSVGCAIH.js";
4
+ import "../../chunk-IFCQWC3G.js";
5
+ import "../../chunk-YUUUCDXN.js";
6
6
  import "../../chunk-5THS4K5D.js";
7
7
  import "../../chunk-RQPHPAT2.js";
8
8
  import "../../chunk-DJAJRBPD.js";
@@ -16,11 +16,11 @@ import "../../chunk-53DKVAB6.js";
16
16
  import "../../chunk-7EOSDFS3.js";
17
17
  import "../../chunk-YBVK254P.js";
18
18
  import "../../chunk-TZQPOR5A.js";
19
- import "../../chunk-RHWWQV3J.js";
20
19
  import {
21
20
  registerRichText,
22
21
  registerSchema
23
22
  } from "../../chunk-VKAGMEKE.js";
23
+ import "../../chunk-RHWWQV3J.js";
24
24
  import "../../chunk-FM4M4Q2W.js";
25
25
  import "../../chunk-NSCT3AMV.js";
26
26
  import "../../chunk-JSBRDJBE.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  allSectionDefs
3
- } from "../../chunk-GDLH3LVH.js";
4
- import "../../chunk-ZKGMLLUQ.js";
5
- import "../../chunk-XYFZ57AS.js";
3
+ } from "../../chunk-CSVGCAIH.js";
4
+ import "../../chunk-IFCQWC3G.js";
5
+ import "../../chunk-YUUUCDXN.js";
6
6
  import "../../chunk-5THS4K5D.js";
7
7
  import "../../chunk-RQPHPAT2.js";
8
8
  import "../../chunk-DJAJRBPD.js";
@@ -16,10 +16,10 @@ import "../../chunk-53DKVAB6.js";
16
16
  import "../../chunk-7EOSDFS3.js";
17
17
  import "../../chunk-YBVK254P.js";
18
18
  import "../../chunk-TZQPOR5A.js";
19
- import "../../chunk-RHWWQV3J.js";
20
19
  import {
21
20
  registerSection
22
21
  } from "../../chunk-VKAGMEKE.js";
22
+ import "../../chunk-RHWWQV3J.js";
23
23
  import "../../chunk-FM4M4Q2W.js";
24
24
  import "../../chunk-NSCT3AMV.js";
25
25
  import "../../chunk-JSBRDJBE.js";
@@ -0,0 +1,39 @@
1
+ export interface ChangedSection {
2
+ id: string;
3
+ /** The section's heading, or null when it has none / wasn't resolved. */
4
+ title: string | null;
5
+ type: string;
6
+ page: string | null;
7
+ }
8
+ export interface ChangeSummary {
9
+ edited: ChangedSection[];
10
+ added: ChangedSection[];
11
+ removed: ChangedSection[];
12
+ structure: string[];
13
+ /** Too many sections changed to resolve real titles — ids shown instead. */
14
+ truncated: boolean;
15
+ }
16
+ interface HistoryChangesModalProps {
17
+ isOpen: boolean;
18
+ onClose: () => void;
19
+ /** Node label, e.g. "Friday · Jul 24" or "Edit at 4:47 PM". */
20
+ title: string;
21
+ base: string | null;
22
+ head: string;
23
+ commitCount: number;
24
+ onBrowse: () => void;
25
+ onRestore: () => void;
26
+ /**
27
+ * True when the editor holds unsaved local changes. Restoring discards them,
28
+ * and unlike published content they are NOT recoverable from history — so the
29
+ * confirmation has to say so rather than reassure.
30
+ */
31
+ hasUnsavedChanges?: boolean;
32
+ /** Disables the restore controls while a restore is in flight. */
33
+ isRestoring?: boolean;
34
+ /** Set when a dispatched restore came back failed. */
35
+ restoreError?: string | null;
36
+ }
37
+ export declare function HistoryChangesModal({ isOpen, onClose, title, base, head, commitCount, onBrowse, onRestore, hasUnsavedChanges, isRestoring, restoreError, }: HistoryChangesModalProps): import("react/jsx-runtime").JSX.Element;
38
+ export {};
39
+ //# sourceMappingURL=HistoryChangesModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistoryChangesModal.d.ts","sourceRoot":"","sources":["../../../src/components/shared/HistoryChangesModal.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAkBD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAgDD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EACpE,iBAAyB,EAAE,WAAmB,EAAE,YAAmB,GACpE,EAAE,wBAAwB,2CAmJ1B"}
@@ -1,6 +1,8 @@
1
1
  interface HistoryPopoverProps {
2
2
  onSelectCommit: (sha: string, date: string) => void;
3
+ /** Editor holds unsaved local changes; restoring would discard them. */
4
+ hasUnsavedChanges?: boolean;
3
5
  }
4
- export declare function HistoryPopover({ onSelectCommit }: HistoryPopoverProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function HistoryPopover({ onSelectCommit, hasUnsavedChanges }: HistoryPopoverProps): import("react/jsx-runtime").JSX.Element;
5
7
  export {};
6
8
  //# sourceMappingURL=HistoryPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryPopover.d.ts","sourceRoot":"","sources":["../../../src/components/shared/HistoryPopover.tsx"],"names":[],"mappings":"AAWA,UAAU,mBAAmB;IAC3B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,EAAE,mBAAmB,2CAwFrE"}
1
+ {"version":3,"file":"HistoryPopover.d.ts","sourceRoot":"","sources":["../../../src/components/shared/HistoryPopover.tsx"],"names":[],"mappings":"AAaA,UAAU,mBAAmB;IAC3B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA+CD,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,iBAAyB,EAAE,EAAE,mBAAmB,2CA0NhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../../../src/components/shared/Navigation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAW,MAAM,eAAe,CAAC;AAOtD,UAAU,KAAK;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAGlF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;kFAG8E;IAC9E,iBAAiB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACjC;AAQD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAwB,EAAE,EAAE,KAAK,2CA2P/I"}
1
+ {"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../../../src/components/shared/Navigation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAW,MAAM,eAAe,CAAC;AAOtD,UAAU,KAAK;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAGlF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;kFAG8E;IAC9E,iBAAiB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACjC;AAQD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAwB,EAAE,EAAE,KAAK,2CAgR/I"}
@@ -6,7 +6,16 @@ interface PopoverProps {
6
6
  children: ReactNode;
7
7
  align?: "start" | "end" | "auto";
8
8
  className?: string;
9
+ /**
10
+ * Render into document.body with fixed positioning. Required when the anchor
11
+ * sits inside a scroll container: the nav sidebar sets `overflow-y-auto`,
12
+ * which per CSS computes `overflow-x` to `auto`, so an absolutely-positioned
13
+ * panel wider than the sidebar is clipped and adds a horizontal scrollbar.
14
+ */
15
+ portal?: boolean;
16
+ /** Which side of the anchor to open toward. Only used with `portal`. */
17
+ placement?: "bottom" | "top";
9
18
  }
10
- export declare function Popover({ isOpen, onClose, anchorRef, children, align, className, }: PopoverProps): import("react/jsx-runtime").JSX.Element | null;
19
+ export declare function Popover({ isOpen, onClose, anchorRef, children, align, className, portal, placement, }: PopoverProps): import("react/jsx-runtime").JSX.Element | null;
11
20
  export {};
12
21
  //# sourceMappingURL=Popover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../src/components/shared/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrG,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAc,EACd,SAAS,GACV,EAAE,YAAY,kDA8Dd"}
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../src/components/shared/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKrG,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;CAC9B;AAED,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAc,EACd,SAAS,EACT,MAAc,EACd,SAAoB,GACrB,EAAE,YAAY,kDA+Id"}
@@ -6,8 +6,13 @@ interface EditorModalProps {
6
6
  blocking?: boolean;
7
7
  size?: "standard" | "large" | "settings";
8
8
  noPadding?: boolean;
9
+ /**
10
+ * The content is a tab set: lock the panel to one height per size so switching
11
+ * tabs never resizes the dialog. Tab panels scroll internally instead.
12
+ */
13
+ tabbed?: boolean;
9
14
  children: ReactNode;
10
15
  }
11
- export declare function EditorModal({ isOpen, onClose, title, blocking, size, noPadding, children }: EditorModalProps): import("react").ReactPortal | null;
16
+ export declare function EditorModal({ isOpen, onClose, title, blocking, size, noPadding, tabbed, children }: EditorModalProps): import("react").ReactPortal | null;
12
17
  export {};
13
18
  //# sourceMappingURL=EditorModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorModal.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjE,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAgB,EAAE,IAAiB,EAAE,SAAiB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,sCA2EzI"}
1
+ {"version":3,"file":"EditorModal.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjE,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAgB,EAAE,IAAiB,EAAE,SAAiB,EAAE,MAAc,EAAE,QAAQ,EAAE,EAAE,gBAAgB,sCA4FzJ"}
@@ -1,11 +1,12 @@
1
1
  import { type ReactNode } from "react";
2
- interface ModalState {
2
+ import type { ModalOptions, OpenModal } from "../../lib/registry";
3
+ interface ModalState extends ModalOptions {
3
4
  title: string;
4
5
  content: ReactNode;
5
6
  }
6
7
  interface EditorModalContextValue {
7
8
  modalState: ModalState | null;
8
- openModal: (title: string, content: ReactNode) => void;
9
+ openModal: OpenModal;
9
10
  closeModal: () => void;
10
11
  }
11
12
  export declare function EditorModalProvider({ children }: {
@@ -1 +1 @@
1
- {"version":3,"file":"EditorModalContext.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorModalContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAgBxE;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD"}
1
+ {"version":3,"file":"EditorModalContext.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorModalContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAElE,UAAU,UAAW,SAAQ,YAAY;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAgBxE;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD"}
@@ -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;AAcjD,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwDtF,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,oBAAoB,CAAC;AAwCnH,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,2CAynDP;AAuED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,EACvC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B"}
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;AAcjD,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyDtF,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,oBAAoB,CAAC;AAwCnH,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,2CAwqDP;AAuED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,EACvC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B"}
@@ -22,6 +22,10 @@ interface PublishDeps {
22
22
  sentDeletedIds: string[];
23
23
  }) => void;
24
24
  mediaManifest: MediaManifest;
25
+ /** Optional ref mirror of `mediaManifest`, read at save time. recoverConflict
26
+ * refreshes it synchronously, so the immediate 409 retry assembles against
27
+ * the rebased manifest instead of this render's pre-conflict copy. */
28
+ mediaManifestRef?: React.RefObject<MediaManifest>;
25
29
  manifestDirty: boolean;
26
30
  clearManifestDirty: () => void;
27
31
  pendingMediaItems: MediaItem[];
@@ -61,7 +65,7 @@ interface PublishDeps {
61
65
  getEditGeneration?: () => number;
62
66
  }
63
67
  export type PublishAction = "idle" | "saving" | "publishing";
64
- export declare function useEditorPublish({ flushNow, cancelPendingFlush, isConfigDirty, clearConfigDirty, siteIndexRef, siteConfig, sections, deletedSectionIds, onSuccess, mediaManifest, manifestDirty, clearManifestDirty, pendingMediaItems, pendingMediaDeletions, onMediaPublished, onShasUpdated, onPublishComplete, getBaseVersion, recoverConflict, onBaselineCommitted, saveChunkBudget, savingRef, getEditGeneration, }: PublishDeps): {
68
+ export declare function useEditorPublish({ flushNow, cancelPendingFlush, isConfigDirty, clearConfigDirty, siteIndexRef, siteConfig, sections, deletedSectionIds, onSuccess, mediaManifest, mediaManifestRef, manifestDirty, clearManifestDirty, pendingMediaItems, pendingMediaDeletions, onMediaPublished, onShasUpdated, onPublishComplete, getBaseVersion, recoverConflict, onBaselineCommitted, saveChunkBudget, savingRef, getEditGeneration, }: PublishDeps): {
65
69
  publishAction: PublishAction;
66
70
  publishFeedback: string | null;
67
71
  saveProgress: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useEditorPublish.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditorPublish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkD/D,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;mFAM+E;IAC/E,SAAS,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACtG,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtF,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAI/B,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC;;;;qDAIiD;IACjD,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC;;;;;sDAKkD;IAClD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChI,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;+EAE2E;IAC3E,SAAS,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C;;;+EAG2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAQD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,iBAAiB,GAClB,EAAE,WAAW;;;;;;;EAieb"}
1
+ {"version":3,"file":"useEditorPublish.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditorPublish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkD/D,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;mFAM+E;IAC/E,SAAS,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACtG,aAAa,EAAE,aAAa,CAAC;IAC7B;;2EAEuE;IACvE,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtF,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAI/B,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC;;;;qDAIiD;IACjD,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC;;;;;sDAKkD;IAClD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChI,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;+EAE2E;IAC3E,SAAS,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C;;;+EAG2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAQD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,iBAAiB,GAClB,EAAE,WAAW;;;;;;;EAqeb"}