@drawnagency/primitives 0.1.94 → 0.1.95

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 (65) hide show
  1. package/dist/{chunk-UFOWXOG6.js → chunk-ABV7OZB3.js} +6 -0
  2. package/dist/{chunk-677NTHAZ.js → chunk-PTOLUMGV.js} +3 -0
  3. package/dist/{chunk-GDLH3LVH.js → chunk-QQBBYQYD.js} +3 -2
  4. package/dist/{chunk-XYFZ57AS.js → chunk-YUUUCDXN.js} +59 -5
  5. package/dist/components/brandguide/Colors.d.ts +2 -2
  6. package/dist/components/brandguide/Colors.d.ts.map +1 -1
  7. package/dist/components/brandguide/ColorsEditable.d.ts +2 -2
  8. package/dist/components/brandguide/ColorsEditable.d.ts.map +1 -1
  9. package/dist/components/editor/SectionWrapper.d.ts.map +1 -1
  10. package/dist/components/editor/SettingsForm.d.ts.map +1 -1
  11. package/dist/components/editor/index.js +4 -3
  12. package/dist/components/sections/Container/Container.d.ts +2 -2
  13. package/dist/components/sections/Container/Container.d.ts.map +1 -1
  14. package/dist/components/sections/register-schemas.js +2 -2
  15. package/dist/components/sections/register.js +2 -2
  16. package/dist/components/shared/HistoryChangesModal.d.ts +39 -0
  17. package/dist/components/shared/HistoryChangesModal.d.ts.map +1 -0
  18. package/dist/components/shared/HistoryPopover.d.ts +3 -1
  19. package/dist/components/shared/HistoryPopover.d.ts.map +1 -1
  20. package/dist/components/shared/Navigation.d.ts.map +1 -1
  21. package/dist/components/shared/Popover.d.ts +10 -1
  22. package/dist/components/shared/Popover.d.ts.map +1 -1
  23. package/dist/components/shell/EditorModal.d.ts +6 -1
  24. package/dist/components/shell/EditorModal.d.ts.map +1 -1
  25. package/dist/components/shell/EditorModalContext.d.ts +3 -2
  26. package/dist/components/shell/EditorModalContext.d.ts.map +1 -1
  27. package/dist/components/shell/EditorShell.d.ts.map +1 -1
  28. package/dist/hooks/useEditorPublish.d.ts +5 -1
  29. package/dist/hooks/useEditorPublish.d.ts.map +1 -1
  30. package/dist/index.js +8 -6
  31. package/dist/lib/events.d.ts +18 -0
  32. package/dist/lib/events.d.ts.map +1 -1
  33. package/dist/lib/history-buckets.d.ts +30 -0
  34. package/dist/lib/history-buckets.d.ts.map +1 -0
  35. package/dist/lib/index.d.ts +1 -1
  36. package/dist/lib/index.d.ts.map +1 -1
  37. package/dist/lib/index.js +4 -2
  38. package/dist/lib/media-folders.d.ts +13 -0
  39. package/dist/lib/media-folders.d.ts.map +1 -1
  40. package/dist/lib/media-folders.js +172 -0
  41. package/dist/lib/registry.d.ts +7 -1
  42. package/dist/lib/registry.d.ts.map +1 -1
  43. package/dist/lib/theme-vars.d.ts +19 -4
  44. package/dist/lib/theme-vars.d.ts.map +1 -1
  45. package/package.json +5 -1
  46. package/src/components/brandguide/Colors.tsx +2 -1
  47. package/src/components/brandguide/ColorsEditable.tsx +2 -1
  48. package/src/components/editor/SectionWrapper.tsx +1 -0
  49. package/src/components/editor/SettingsForm.tsx +5 -2
  50. package/src/components/sections/Container/Container.tsx +5 -4
  51. package/src/components/shared/HistoryChangesModal.tsx +256 -0
  52. package/src/components/shared/HistoryPopover.tsx +255 -76
  53. package/src/components/shared/Navigation.tsx +30 -9
  54. package/src/components/shared/Popover.tsx +95 -2
  55. package/src/components/shell/EditorModal.tsx +26 -4
  56. package/src/components/shell/EditorModalContext.tsx +5 -4
  57. package/src/components/shell/EditorShell.tsx +51 -2
  58. package/src/components/shell/SiteSettingsModal.tsx +1 -1
  59. package/src/hooks/useEditorPublish.ts +15 -6
  60. package/src/lib/events.ts +11 -0
  61. package/src/lib/history-buckets.ts +190 -0
  62. package/src/lib/index.ts +1 -1
  63. package/src/lib/media-folders.ts +16 -0
  64. package/src/lib/registry.ts +9 -1
  65. package/src/lib/theme-vars.ts +25 -4
@@ -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,
@@ -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
 
@@ -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
@@ -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
  };
@@ -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
  }
@@ -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"}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  allSectionDefs
3
- } from "../../chunk-GDLH3LVH.js";
3
+ } from "../../chunk-QQBBYQYD.js";
4
4
  import "../../chunk-ZKGMLLUQ.js";
5
- import "../../chunk-XYFZ57AS.js";
5
+ import "../../chunk-YUUUCDXN.js";
6
6
  import "../../chunk-5THS4K5D.js";
7
7
  import "../../chunk-RQPHPAT2.js";
8
8
  import "../../chunk-DJAJRBPD.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  allSectionDefs
3
- } from "../../chunk-GDLH3LVH.js";
3
+ } from "../../chunk-QQBBYQYD.js";
4
4
  import "../../chunk-ZKGMLLUQ.js";
5
- import "../../chunk-XYFZ57AS.js";
5
+ import "../../chunk-YUUUCDXN.js";
6
6
  import "../../chunk-5THS4K5D.js";
7
7
  import "../../chunk-RQPHPAT2.js";
8
8
  import "../../chunk-DJAJRBPD.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"}
package/dist/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ import {
2
+ ASSET_CACHE_CONTROL,
3
+ StorageConflictError
4
+ } from "./chunk-VAOW4WXQ.js";
1
5
  import {
2
6
  AUDIENCE_COOKIE,
3
7
  AUDIENCE_MAX_AGE_SECONDS,
@@ -33,10 +37,6 @@ import {
33
37
  sanitizeMediaName,
34
38
  setMediaProvider
35
39
  } from "./chunk-SOILPZ7U.js";
36
- import {
37
- ASSET_CACHE_CONTROL,
38
- StorageConflictError
39
- } from "./chunk-VAOW4WXQ.js";
40
40
  import {
41
41
  CollabPeerSchema,
42
42
  HEARTBEAT_INTERVAL_MS,
@@ -80,6 +80,7 @@ import {
80
80
  loadSiteContent,
81
81
  loadStaticSiteContent,
82
82
  mergeSiteContent,
83
+ onPrimaryVarValue,
83
84
  primaryVarValue,
84
85
  relativeLuminance,
85
86
  resolveChatbotName,
@@ -87,7 +88,7 @@ import {
87
88
  safeRedirect,
88
89
  suggestAccessibleOn,
89
90
  wcagLevel
90
- } from "./chunk-UFOWXOG6.js";
91
+ } from "./chunk-ABV7OZB3.js";
91
92
  import {
92
93
  curatedIcons,
93
94
  getIcon
@@ -97,7 +98,7 @@ import {
97
98
  darkModeEvent,
98
99
  editModeEvent,
99
100
  navChangeEvent
100
- } from "./chunk-677NTHAZ.js";
101
+ } from "./chunk-PTOLUMGV.js";
101
102
  import {
102
103
  ensureSanitizer,
103
104
  generateNavLinks,
@@ -253,6 +254,7 @@ export {
253
254
  mimeToExt,
254
255
  navChangeEvent,
255
256
  normalizeSiteIndex,
257
+ onPrimaryVarValue,
256
258
  primaryVarValue,
257
259
  rebindImageRef,
258
260
  registerSchema,
@@ -14,6 +14,24 @@ export declare const historySelectEvent: TypedEvent<{
14
14
  sha: string;
15
15
  date: string;
16
16
  }>;
17
+ /** Restore straight from the history navigator, skipping the browse-then-restore
18
+ * detour. The shell loads the content at `sha` and runs the same restore path
19
+ * HistoryToolbar uses. Confirmation happens before this is dispatched. */
20
+ export declare const historyRestoreEvent: TypedEvent<{
21
+ sha: string;
22
+ date: string;
23
+ }>;
24
+ /** Restore failed. The navigator is a separate island from the shell that does
25
+ * the writing, so without this the failure is invisible and the UI sits on
26
+ * "Restoring…" forever. */
27
+ export declare const historyRestoreFailedEvent: TypedEvent<{
28
+ message: string;
29
+ }>;
30
+ /** Unsaved-draft state, published by the shell for other islands (the history
31
+ * navigator warns before restoring, which discards drafts irrecoverably). */
32
+ export declare const editorDirtyEvent: TypedEvent<{
33
+ hasUnsavedChanges: boolean;
34
+ }>;
17
35
  export declare const siteNavChangeEvent: TypedEvent<SiteNav>;
18
36
  export declare const pageSelectEvent: TypedEvent<string>;
19
37
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAW1D;AAED,eAAO,MAAM,aAAa;gBAA6B,OAAO;EAAqB,CAAC;AACpF,eAAO,MAAM,cAAc,uBAA0C,CAAC;AACtE,eAAO,MAAM,aAAa,oBAAsC,CAAC;AACjE,eAAO,MAAM,mBAAmB,oBAAwC,CAAC;AACzE,eAAO,MAAM,kBAAkB;SAAsB,MAAM;UAAQ,MAAM;EAAqB,CAAC;AAC/F,eAAO,MAAM,kBAAkB,qBAA2C,CAAC;AAC3E,eAAO,MAAM,eAAe,oBAAoC,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAW1D;AAED,eAAO,MAAM,aAAa;gBAA6B,OAAO;EAAqB,CAAC;AACpF,eAAO,MAAM,cAAc,uBAA0C,CAAC;AACtE,eAAO,MAAM,aAAa,oBAAsC,CAAC;AACjE,eAAO,MAAM,mBAAmB,oBAAwC,CAAC;AACzE,eAAO,MAAM,kBAAkB;SAAsB,MAAM;UAAQ,MAAM;EAAqB,CAAC;AAC/F;;2EAE2E;AAC3E,eAAO,MAAM,mBAAmB;SAAsB,MAAM;UAAQ,MAAM;EAAsB,CAAC;AACjG;;4BAE4B;AAC5B,eAAO,MAAM,yBAAyB;aAA0B,MAAM;EAA6B,CAAC;AACpG;8EAC8E;AAC9E,eAAO,MAAM,gBAAgB;uBAAoC,OAAO;EAAmB,CAAC;AAC5F,eAAO,MAAM,kBAAkB,qBAA2C,CAAC;AAC3E,eAAO,MAAM,eAAe,oBAAoC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface HistoryCommit {
2
+ sha: string;
3
+ date: string;
4
+ /** First parent's sha; null for the repo's root commit. */
5
+ parent: string | null;
6
+ }
7
+ export type NodeKind = "commit" | "day" | "week" | "month" | "year";
8
+ export interface HistoryNode {
9
+ /** Stable React key, unique within the tree. */
10
+ id: string;
11
+ kind: NodeKind;
12
+ label: string;
13
+ sublabel: string | null;
14
+ count: number;
15
+ /** Newest commit in this node — what "browse" opens. */
16
+ newestSha: string | null;
17
+ /** Compare base: parent of this node's oldest commit. Null at repo root. */
18
+ baseSha: string | null;
19
+ children: HistoryNode[];
20
+ }
21
+ export type GroupId = "today" | "this-week" | "previous-weeks" | "earlier-months" | "previous-years";
22
+ export interface HistoryGroup {
23
+ id: GroupId;
24
+ label: string;
25
+ nodes: HistoryNode[];
26
+ }
27
+ export declare function buildHistoryTree(commits: HistoryCommit[], now: Date): HistoryGroup[];
28
+ /** Largest node count anywhere in the tree; never 0, so callers can divide by it. */
29
+ export declare function maxNodeCount(groups: HistoryGroup[]): number;
30
+ //# sourceMappingURL=history-buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-buckets.d.ts","sourceRoot":"","sources":["../../src/lib/history-buckets.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,OAAO,GACf,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AA0HD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,YAAY,EAAE,CA0BpF;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAQ3D"}
@@ -4,7 +4,7 @@ export { audiencePasses } from "./pages";
4
4
  export { resolveChatbotName, resolveThinkingPhrases, DEFAULT_CHATBOT_NAME } from "./chatbot";
5
5
  export { generateNavLinks, toSectionId, type NavItem } from "./nav";
6
6
  export { deriveContrast, contrastColor, relativeLuminance, contrastRatio, wcagLevel, suggestAccessibleOn, type WcagLevel, } from "./contrast";
7
- export { primaryVarValue, accentVarValue } from "./theme-vars";
7
+ export { primaryVarValue, accentVarValue, onPrimaryVarValue } from "./theme-vars";
8
8
  export { sanitizeHtml, ensureSanitizer } from "./sanitize";
9
9
  export { gridColsClass } from "./grid";
10
10
  export { getIcon, curatedIcons, type IconEntry } from "./icons";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC"}