@drawnagency/primitives 0.1.93 → 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 (84) hide show
  1. package/dist/{chunk-UFOWXOG6.js → chunk-ABV7OZB3.js} +6 -0
  2. package/dist/{chunk-LQQY2RW6.js → chunk-DJAJRBPD.js} +1 -0
  3. package/dist/{chunk-677NTHAZ.js → chunk-PTOLUMGV.js} +3 -0
  4. package/dist/{chunk-RBKBNQGB.js → chunk-QQBBYQYD.js} +7 -6
  5. package/dist/{chunk-YI2HUFE3.js → chunk-RQPHPAT2.js} +1 -1
  6. package/dist/chunk-VAOW4WXQ.js +15 -0
  7. package/dist/{chunk-XYFZ57AS.js → chunk-YUUUCDXN.js} +59 -5
  8. package/dist/{chunk-HLKAQLTV.js → chunk-ZKGMLLUQ.js} +1 -1
  9. package/dist/components/brandguide/Colors.d.ts +2 -2
  10. package/dist/components/brandguide/Colors.d.ts.map +1 -1
  11. package/dist/components/brandguide/ColorsEditable.d.ts +2 -2
  12. package/dist/components/brandguide/ColorsEditable.d.ts.map +1 -1
  13. package/dist/components/editor/SectionWrapper.d.ts.map +1 -1
  14. package/dist/components/editor/SettingsForm.d.ts.map +1 -1
  15. package/dist/components/editor/index.js +4 -3
  16. package/dist/components/primitives/ResolvedMedia.d.ts.map +1 -1
  17. package/dist/components/primitives/index.js +2 -2
  18. package/dist/components/sections/Container/Container.d.ts +2 -2
  19. package/dist/components/sections/Container/Container.d.ts.map +1 -1
  20. package/dist/components/sections/Video/VideoBlock.d.ts.map +1 -1
  21. package/dist/components/sections/brand-guide.js +2 -2
  22. package/dist/components/sections/register-schemas.js +5 -5
  23. package/dist/components/sections/register.js +5 -5
  24. package/dist/components/shared/HistoryChangesModal.d.ts +39 -0
  25. package/dist/components/shared/HistoryChangesModal.d.ts.map +1 -0
  26. package/dist/components/shared/HistoryPopover.d.ts +3 -1
  27. package/dist/components/shared/HistoryPopover.d.ts.map +1 -1
  28. package/dist/components/shared/Navigation.d.ts.map +1 -1
  29. package/dist/components/shared/Popover.d.ts +10 -1
  30. package/dist/components/shared/Popover.d.ts.map +1 -1
  31. package/dist/components/shell/EditorModal.d.ts +6 -1
  32. package/dist/components/shell/EditorModal.d.ts.map +1 -1
  33. package/dist/components/shell/EditorModalContext.d.ts +3 -2
  34. package/dist/components/shell/EditorModalContext.d.ts.map +1 -1
  35. package/dist/components/shell/EditorShell.d.ts.map +1 -1
  36. package/dist/hooks/useEditorPublish.d.ts +5 -1
  37. package/dist/hooks/useEditorPublish.d.ts.map +1 -1
  38. package/dist/hooks/useMediaPipeline.d.ts.map +1 -1
  39. package/dist/index.js +9 -12
  40. package/dist/lib/events.d.ts +18 -0
  41. package/dist/lib/events.d.ts.map +1 -1
  42. package/dist/lib/history-buckets.d.ts +30 -0
  43. package/dist/lib/history-buckets.d.ts.map +1 -0
  44. package/dist/lib/index.d.ts +1 -1
  45. package/dist/lib/index.d.ts.map +1 -1
  46. package/dist/lib/index.js +4 -2
  47. package/dist/lib/media-folders.d.ts +13 -0
  48. package/dist/lib/media-folders.d.ts.map +1 -1
  49. package/dist/lib/media-folders.js +172 -0
  50. package/dist/lib/registry.d.ts +7 -1
  51. package/dist/lib/registry.d.ts.map +1 -1
  52. package/dist/lib/theme-vars.d.ts +19 -4
  53. package/dist/lib/theme-vars.d.ts.map +1 -1
  54. package/dist/storage/index.d.ts +1 -1
  55. package/dist/storage/index.d.ts.map +1 -1
  56. package/dist/storage/index.js +9 -0
  57. package/dist/storage/types.d.ts +14 -0
  58. package/dist/storage/types.d.ts.map +1 -1
  59. package/package.json +9 -1
  60. package/src/components/brandguide/Colors.tsx +2 -1
  61. package/src/components/brandguide/ColorsEditable.tsx +2 -1
  62. package/src/components/editor/SectionWrapper.tsx +1 -0
  63. package/src/components/editor/SettingsForm.tsx +5 -2
  64. package/src/components/primitives/ResolvedMedia.tsx +6 -0
  65. package/src/components/sections/Container/Container.tsx +5 -4
  66. package/src/components/sections/Video/VideoBlock.tsx +9 -1
  67. package/src/components/shared/HistoryChangesModal.tsx +256 -0
  68. package/src/components/shared/HistoryPopover.tsx +255 -76
  69. package/src/components/shared/Navigation.tsx +30 -9
  70. package/src/components/shared/Popover.tsx +95 -2
  71. package/src/components/shell/EditorModal.tsx +26 -4
  72. package/src/components/shell/EditorModalContext.tsx +5 -4
  73. package/src/components/shell/EditorShell.tsx +51 -2
  74. package/src/components/shell/SiteSettingsModal.tsx +1 -1
  75. package/src/hooks/useEditorPublish.ts +15 -6
  76. package/src/hooks/useMediaPipeline.ts +4 -0
  77. package/src/lib/events.ts +11 -0
  78. package/src/lib/history-buckets.ts +190 -0
  79. package/src/lib/index.ts +1 -1
  80. package/src/lib/media-folders.ts +16 -0
  81. package/src/lib/registry.ts +9 -1
  82. package/src/lib/theme-vars.ts +25 -4
  83. package/src/storage/index.ts +1 -1
  84. package/src/storage/types.ts +15 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useMediaPipeline.d.ts","sourceRoot":"","sources":["../../src/hooks/useMediaPipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAiC,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAexF,UAAU,qBAAqB;IAC7B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACnE,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAIvE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAI3C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC;CAC1E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAqS8B,IAAI,EAAE,mBAAkB,MAAM,GAAG,IAAI;6BAyDvC,MAAM,EAAE;+BAsDZ,MAAM,OAAO,MAAM;+BAiBnB,MAAM,YAAY,MAAM,GAAG,IAAI,KAAG,MAAM;6BAW1C,MAAM,QAAQ,MAAM;2BAWtB,MAAM,YAAY,MAAM,GAAG,IAAI;6BA4BvB,MAAM,YAAY,MAAM,GAAG,QAAQ;2BAd3C,MAAM,EAAE,YAAY,MAAM,GAAG,IAAI;kCA4DhE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,mBAC9B,MAAM,GAAG,IAAI;;;wBAkCO,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,SAAS;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;EAqFjH"}
1
+ {"version":3,"file":"useMediaPipeline.d.ts","sourceRoot":"","sources":["../../src/hooks/useMediaPipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAiC,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAgBxF,UAAU,qBAAqB;IAC7B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACnE,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAIvE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAI3C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC;CAC1E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAwS8B,IAAI,EAAE,mBAAkB,MAAM,GAAG,IAAI;6BAyDvC,MAAM,EAAE;+BAsDZ,MAAM,OAAO,MAAM;+BAiBnB,MAAM,YAAY,MAAM,GAAG,IAAI,KAAG,MAAM;6BAW1C,MAAM,QAAQ,MAAM;2BAWtB,MAAM,YAAY,MAAM,GAAG,IAAI;6BA4BvB,MAAM,YAAY,MAAM,GAAG,QAAQ;2BAd3C,MAAM,EAAE,YAAY,MAAM,GAAG,IAAI;kCA4DhE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,mBAC9B,MAAM,GAAG,IAAI;;;wBAkCO,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,SAAS;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;EAqFjH"}
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,
@@ -76,6 +80,7 @@ import {
76
80
  loadSiteContent,
77
81
  loadStaticSiteContent,
78
82
  mergeSiteContent,
83
+ onPrimaryVarValue,
79
84
  primaryVarValue,
80
85
  relativeLuminance,
81
86
  resolveChatbotName,
@@ -83,7 +88,7 @@ import {
83
88
  safeRedirect,
84
89
  suggestAccessibleOn,
85
90
  wcagLevel
86
- } from "./chunk-UFOWXOG6.js";
91
+ } from "./chunk-ABV7OZB3.js";
87
92
  import {
88
93
  curatedIcons,
89
94
  getIcon
@@ -93,7 +98,7 @@ import {
93
98
  darkModeEvent,
94
99
  editModeEvent,
95
100
  navChangeEvent
96
- } from "./chunk-677NTHAZ.js";
101
+ } from "./chunk-PTOLUMGV.js";
97
102
  import {
98
103
  ensureSanitizer,
99
104
  generateNavLinks,
@@ -155,17 +160,8 @@ import {
155
160
  env
156
161
  } from "./chunk-WKZ7OENC.js";
157
162
  import "./chunk-JSBRDJBE.js";
158
-
159
- // src/storage/types.ts
160
- var StorageConflictError = class extends Error {
161
- constructor(currentVersion) {
162
- super("Draft has been modified since it was loaded");
163
- this.currentVersion = currentVersion;
164
- this.name = "StorageConflictError";
165
- }
166
- currentVersion;
167
- };
168
163
  export {
164
+ ASSET_CACHE_CONTROL,
169
165
  AUDIENCE_COOKIE,
170
166
  AUDIENCE_MAX_AGE_SECONDS,
171
167
  AudienceColorSchema,
@@ -258,6 +254,7 @@ export {
258
254
  mimeToExt,
259
255
  navChangeEvent,
260
256
  normalizeSiteIndex,
257
+ onPrimaryVarValue,
261
258
  primaryVarValue,
262
259
  rebindImageRef,
263
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"}
package/dist/lib/index.js CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  loadSiteContent,
11
11
  loadStaticSiteContent,
12
12
  mergeSiteContent,
13
+ onPrimaryVarValue,
13
14
  primaryVarValue,
14
15
  relativeLuminance,
15
16
  resolveChatbotName,
@@ -17,7 +18,7 @@ import {
17
18
  safeRedirect,
18
19
  suggestAccessibleOn,
19
20
  wcagLevel
20
- } from "../chunk-UFOWXOG6.js";
21
+ } from "../chunk-ABV7OZB3.js";
21
22
  import {
22
23
  curatedIcons,
23
24
  getIcon
@@ -27,7 +28,7 @@ import {
27
28
  darkModeEvent,
28
29
  editModeEvent,
29
30
  navChangeEvent
30
- } from "../chunk-677NTHAZ.js";
31
+ } from "../chunk-PTOLUMGV.js";
31
32
  import {
32
33
  ensureSanitizer,
33
34
  generateNavLinks,
@@ -91,6 +92,7 @@ export {
91
92
  loadStaticSiteContent,
92
93
  mergeSiteContent,
93
94
  navChangeEvent,
95
+ onPrimaryVarValue,
94
96
  primaryVarValue,
95
97
  registerSchema,
96
98
  registerSection,
@@ -43,6 +43,19 @@ export declare function itemFolderId(folders: Record<string, MediaFolder>, item:
43
43
  export declare function recursiveItemCounts(folders: Record<string, MediaFolder>, items: MediaItem[]): Record<string, number>;
44
44
  /** Pure heal: dangling folderIds dropped, orphan/cyclic folders re-rooted. */
45
45
  export declare function healMediaManifest(manifest: MediaManifest): MediaManifest;
46
+ /**
47
+ * Rebase a local manifest onto a freshly-fetched remote one, so media another
48
+ * writer added is in our copy before the next save assembles from it. Without
49
+ * this a rebased session still writes its pre-conflict manifest, which silently
50
+ * drops their entries and orphans the files they committed.
51
+ *
52
+ * Images union, ours winning, so local alt/folder-move edits survive; a pending
53
+ * local deletion isn't removed from the manifest until save, so the union can't
54
+ * resurrect one. Folders stay ours verbatim — deleting a folder removes it from
55
+ * our map with no wire signal, so unioning would undo the delete. Mirrors the
56
+ * server-side merge in core's content-ops.
57
+ */
58
+ export declare function rebaseMediaManifest(local: MediaManifest, remote: MediaManifest): MediaManifest;
46
59
  /**
47
60
  * Save-time manifest assembly: merge uploaded pending items, apply deletions,
48
61
  * preserve every other manifest key (folders!), then heal.
@@ -1 +1 @@
1
- {"version":3,"file":"media-folders.d.ts","sourceRoot":"","sources":["../../src/lib/media-folders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,6DAA6D;IAC7D,WAAW,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACxD;AAED,gFAAgF;AAChF,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAQxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjG;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAItG;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,cAAc,EAAE,CAQtF;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ1F;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxF;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAgBjG;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAMT;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAYR;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAChC,MAAM,GAAG,IAAI,CAEf;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,KAAK,EAAE,SAAS,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAexE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,SAAS,EAAE,EAC1B,UAAU,EAAE,MAAM,EAAE,GACnB,aAAa,CAKf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,KAAK,GAAE,MAAM,MAAuB,GACnC,gBAAgB,CA2BlB"}
1
+ {"version":3,"file":"media-folders.d.ts","sourceRoot":"","sources":["../../src/lib/media-folders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import "../chunk-JSBRDJBE.js";
2
+
3
+ // src/lib/media-folders.ts
4
+ function createFolderId() {
5
+ const bytes = new Uint8Array(6);
6
+ crypto.getRandomValues(bytes);
7
+ return `f_${Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("")}`;
8
+ }
9
+ function isCyclicFolder(folders, id) {
10
+ const max = Object.keys(folders).length;
11
+ let cursor = folders[id]?.parentId ?? null;
12
+ for (let steps = 0; cursor !== null && folders[cursor] && steps <= max; steps++) {
13
+ if (cursor === id) return true;
14
+ cursor = folders[cursor].parentId;
15
+ }
16
+ return false;
17
+ }
18
+ function effectiveParentId(folders, id) {
19
+ const parentId = folders[id]?.parentId ?? null;
20
+ if (parentId === null || !folders[parentId]) return null;
21
+ return isCyclicFolder(folders, id) ? null : parentId;
22
+ }
23
+ function childFolderIds(folders, parentId) {
24
+ return Object.keys(folders).filter((id) => effectiveParentId(folders, id) === parentId).sort((a, b) => folders[a].name.localeCompare(folders[b].name, void 0, { sensitivity: "base" }));
25
+ }
26
+ function buildFolderTree(folders) {
27
+ const build = (parentId) => childFolderIds(folders, parentId).map((id) => ({
28
+ id,
29
+ name: folders[id].name,
30
+ children: build(id)
31
+ }));
32
+ return build(null);
33
+ }
34
+ function folderPathNames(folders, id) {
35
+ const names = [];
36
+ let cursor = id;
37
+ while (cursor !== null && folders[cursor]) {
38
+ names.unshift(folders[cursor].name);
39
+ cursor = effectiveParentId(folders, cursor);
40
+ }
41
+ return names;
42
+ }
43
+ function folderPathIds(folders, id) {
44
+ const ids = [];
45
+ let cursor = id;
46
+ while (cursor !== null && folders[cursor]) {
47
+ ids.unshift(cursor);
48
+ cursor = effectiveParentId(folders, cursor);
49
+ }
50
+ return ids;
51
+ }
52
+ function descendantFolderIds(folders, id) {
53
+ const result = /* @__PURE__ */ new Set([id]);
54
+ const ids = Object.keys(folders);
55
+ let grew = true;
56
+ while (grew) {
57
+ grew = false;
58
+ for (const fid of ids) {
59
+ if (result.has(fid)) continue;
60
+ const parent = effectiveParentId(folders, fid);
61
+ if (parent !== null && result.has(parent)) {
62
+ result.add(fid);
63
+ grew = true;
64
+ }
65
+ }
66
+ }
67
+ return result;
68
+ }
69
+ function canMoveFolder(folders, id, targetParentId) {
70
+ if (!folders[id]) return false;
71
+ if (targetParentId === null) return effectiveParentId(folders, id) !== null;
72
+ if (!folders[targetParentId]) return false;
73
+ if (descendantFolderIds(folders, id).has(targetParentId)) return false;
74
+ return effectiveParentId(folders, id) !== targetParentId;
75
+ }
76
+ function uniqueFolderName(folders, parentId, desired, excludeId) {
77
+ const base = desired.trim();
78
+ const siblings = new Set(
79
+ childFolderIds(folders, parentId).filter((id) => id !== excludeId).map((id) => folders[id].name.toLowerCase())
80
+ );
81
+ if (!siblings.has(base.toLowerCase())) return base;
82
+ for (let n = 2; ; n++) {
83
+ const candidate = `${base} (${n})`;
84
+ if (!siblings.has(candidate.toLowerCase())) return candidate;
85
+ }
86
+ }
87
+ function itemFolderId(folders, item) {
88
+ return item.folderId && folders[item.folderId] ? item.folderId : null;
89
+ }
90
+ function recursiveItemCounts(folders, items) {
91
+ const counts = {};
92
+ for (const item of items) {
93
+ let cursor = itemFolderId(folders, item);
94
+ const seen = /* @__PURE__ */ new Set();
95
+ while (cursor !== null && !seen.has(cursor)) {
96
+ seen.add(cursor);
97
+ counts[cursor] = (counts[cursor] ?? 0) + 1;
98
+ cursor = effectiveParentId(folders, cursor);
99
+ }
100
+ }
101
+ return counts;
102
+ }
103
+ function healMediaManifest(manifest) {
104
+ const folders = {};
105
+ for (const [id, f] of Object.entries(manifest.folders)) {
106
+ folders[id] = { ...f, parentId: effectiveParentId(manifest.folders, id) };
107
+ }
108
+ const images = {};
109
+ for (const [id, entry] of Object.entries(manifest.images)) {
110
+ if (entry.folderId && !folders[entry.folderId]) {
111
+ const { folderId: _dropped, ...rest } = entry;
112
+ images[id] = rest;
113
+ } else {
114
+ images[id] = entry;
115
+ }
116
+ }
117
+ return { ...manifest, images, folders };
118
+ }
119
+ function rebaseMediaManifest(local, remote) {
120
+ return { ...local, images: { ...remote.images, ...local.images } };
121
+ }
122
+ function assembleSavedManifest(manifest, uploadedItems, deletedIds) {
123
+ const images = { ...manifest.images };
124
+ for (const entry of uploadedItems) images[entry.id] = entry;
125
+ for (const id of deletedIds) delete images[id];
126
+ return healMediaManifest({ ...manifest, images });
127
+ }
128
+ function planFolderUpload(files, folders, currentFolderId, newId = createFolderId) {
129
+ const newFolders = {};
130
+ const byName = /* @__PURE__ */ new Map();
131
+ for (const [fid, f] of Object.entries(folders)) {
132
+ byName.set(`${effectiveParentId(folders, fid)}/${f.name.toLowerCase()}`, fid);
133
+ }
134
+ const ensureDir = (segments) => {
135
+ let parent = currentFolderId;
136
+ for (const segment of segments) {
137
+ const key = `${parent}/${segment.toLowerCase()}`;
138
+ let fid = byName.get(key);
139
+ if (!fid) {
140
+ fid = newId();
141
+ newFolders[fid] = { name: segment, parentId: parent };
142
+ byName.set(key, fid);
143
+ }
144
+ parent = fid;
145
+ }
146
+ return parent;
147
+ };
148
+ const fileTargets = files.map(({ file, relativePath }) => {
149
+ const segments = relativePath.split("/").filter(Boolean);
150
+ segments.pop();
151
+ return { file, folderId: ensureDir(segments) };
152
+ });
153
+ return { newFolders, fileTargets };
154
+ }
155
+ export {
156
+ assembleSavedManifest,
157
+ buildFolderTree,
158
+ canMoveFolder,
159
+ childFolderIds,
160
+ createFolderId,
161
+ descendantFolderIds,
162
+ effectiveParentId,
163
+ folderPathIds,
164
+ folderPathNames,
165
+ healMediaManifest,
166
+ isCyclicFolder,
167
+ itemFolderId,
168
+ planFolderUpload,
169
+ rebaseMediaManifest,
170
+ recursiveItemCounts,
171
+ uniqueFolderName
172
+ };
@@ -66,12 +66,18 @@ export type Thumbnail = {
66
66
  value: string;
67
67
  };
68
68
  export type CustomSettingsFormProps = Record<string, any>;
69
+ export interface ModalOptions {
70
+ /** Content is a tab set — lock the modal height so tab switches don't resize it. */
71
+ tabbed?: boolean;
72
+ }
73
+ /** Signature of the editor's modal opener as threaded down to sections. */
74
+ export type OpenModal = (title: string, content: ReactNode, options?: ModalOptions) => void;
69
75
  export interface SectionProps<T = unknown> {
70
76
  content: T;
71
77
  options?: Record<string, unknown>;
72
78
  onChange?: (content: T) => void;
73
79
  isEditMode: boolean;
74
- openModal?: (title: string, content: ReactNode) => void;
80
+ openModal?: OpenModal;
75
81
  /** Delete this whole section. Used e.g. when a colors section's last swatch
76
82
  * is dragged into another section, leaving it empty. */
77
83
  onDelete?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { SiteConfig } from "../schemas/site-config";
2
2
  /**
3
3
  * Computes the CSS value for the brand `--color-primary` / `--color-primary-contrast`
4
- * custom properties. When darkMode is "optional" AND a dark variant is set, the
5
- * value is a CSS `light-dark(<light>, <dark>)` expression — the browser resolves
6
- * it per the element's `color-scheme` (the `.dark` class sets `color-scheme: dark`;
7
- * `:root` sets `color-scheme: light`). Otherwise it's the plain light hex.
4
+ * / `--color-on-primary` custom properties. When darkMode is "optional" AND a dark
5
+ * variant is set, the value is a CSS `light-dark(<light>, <dark>)` expression — the
6
+ * browser resolves it per the element's `color-scheme` (the `.dark` class sets
7
+ * `color-scheme: dark`; `:root` sets `color-scheme: light`). Otherwise it's the
8
+ * plain light hex.
8
9
  *
9
10
  * Single source of truth for every injection site: Layout.astro / LoginLayout.astro
10
11
  * (SSR inline `<html style>`) and EditorShell (live setProperty + localStorage).
@@ -12,5 +13,19 @@ import type { SiteConfig } from "../schemas/site-config";
12
13
  type ThemeColorConfig = Pick<SiteConfig, "primaryColor" | "primaryContrast" | "primaryColorDark" | "primaryContrastDark" | "darkMode">;
13
14
  export declare function primaryVarValue(c?: Partial<ThemeColorConfig> | null): string;
14
15
  export declare function accentVarValue(c?: Partial<ThemeColorConfig> | null): string;
16
+ /**
17
+ * Foreground ink for text drawn ON a `--color-primary`-filled surface (branded
18
+ * plates, primary cards). Derived from `primaryColor` with the same
19
+ * black/white WCAG pick the editor's accent "Suggest" button uses, so a
20
+ * primary-filled surface is legible on every brand without configuration.
21
+ *
22
+ * This exists because `--color-primary-contrast` cannot serve the role: it is
23
+ * the *accent* — brands legitimately repoint it at a decorative colour (Siete's
24
+ * gold on aubergine) that reads as a highlight but cannot carry body copy.
25
+ * Sections should consume `var(--color-on-primary)` for text on primary and
26
+ * keep `--color-primary-contrast` for accents, and derive softer inks by mixing
27
+ * the two brand tokens: `color-mix(in srgb, var(--color-on-primary) 70%, var(--color-primary))`.
28
+ */
29
+ export declare function onPrimaryVarValue(c?: Partial<ThemeColorConfig> | null): string;
15
30
  export {};
16
31
  //# sourceMappingURL=theme-vars.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-vars.d.ts","sourceRoot":"","sources":["../../src/lib/theme-vars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;;;GASG;AACH,KAAK,gBAAgB,GAAG,IAAI,CAC1B,UAAU,EACV,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,UAAU,CAC7F,CAAC;AASF,wBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"theme-vars.d.ts","sourceRoot":"","sources":["../../src/lib/theme-vars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;;;;;;;;;GAUG;AACH,KAAK,gBAAgB,GAAG,IAAI,CAC1B,UAAU,EACV,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,UAAU,CAC7F,CAAC;AASF,wBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,MAAM,CAE3E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,MAAM,CAI9E"}
@@ -1,3 +1,3 @@
1
1
  export type { StorageProvider, FileWrite, AssetStore } from "./types";
2
- export { StorageConflictError } from "./types";
2
+ export { StorageConflictError, ASSET_CACHE_CONTROL } from "./types";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,9 @@
1
+ import {
2
+ ASSET_CACHE_CONTROL,
3
+ StorageConflictError
4
+ } from "../chunk-VAOW4WXQ.js";
5
+ import "../chunk-JSBRDJBE.js";
6
+ export {
7
+ ASSET_CACHE_CONTROL,
8
+ StorageConflictError
9
+ };
@@ -30,6 +30,20 @@ export type FileWrite = {
30
30
  content: string | Uint8Array | null;
31
31
  encoding?: "utf-8" | "base64";
32
32
  };
33
+ /**
34
+ * `Cache-Control` every bucket upload must set. Object paths are content-hashed
35
+ * ("media/{hash}/original.mp4"), so a given URL's bytes never change — replacing
36
+ * a video mints a new hash and therefore a new URL. That makes `immutable` safe
37
+ * and a one-year max-age correct.
38
+ *
39
+ * This is NOT cosmetic. A bucket upload sent with no `cache-control` request
40
+ * header is stored as `no-cache`, which means neither the browser nor a CDN will
41
+ * ever reuse a response — every play of every video becomes origin egress,
42
+ * including a plain page reload. That default is what exhausted the Supabase
43
+ * project's egress quota while the bucket sat at 46% of its size limit. Any new
44
+ * upload path MUST send this header.
45
+ */
46
+ export declare const ASSET_CACHE_CONTROL = "max-age=31536000, immutable";
33
47
  /**
34
48
  * Optional large-asset store (Supabase Storage bucket). Holds video originals
35
49
  * too big for the git path; deliberately generic so future large kinds (zips)
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aACjB,cAAc,EAAE,MAAM,GAAG,IAAI;gBAA7B,cAAc,EAAE,MAAM,GAAG,IAAI;CAI1D;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CACR,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,EAAE,MAAM,EAIf,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GACxC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEhC,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE9B,YAAY,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE7C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEnE,oEAAoE;IACpE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,sDAAsD;IACtD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CACpF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aACjB,cAAc,EAAE,MAAM,GAAG,IAAI;gBAA7B,cAAc,EAAE,MAAM,GAAG,IAAI;CAI1D;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CACR,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,EAAE,MAAM,EAIf,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GACxC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEhC,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE9B,YAAY,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE7C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEnE,oEAAoE;IACpE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,sDAAsD;IACtD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CACpF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawnagency/primitives",
3
- "version": "0.1.93",
3
+ "version": "0.1.95",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",
@@ -60,6 +60,10 @@
60
60
  "types": "./dist/lib/registry.d.ts",
61
61
  "default": "./dist/lib/registry.js"
62
62
  },
63
+ "./lib/media-folders": {
64
+ "types": "./dist/lib/media-folders.d.ts",
65
+ "default": "./dist/lib/media-folders.js"
66
+ },
63
67
  "./lib/migrate-sections-transform": {
64
68
  "types": "./dist/lib/migrate-sections-transform.d.ts",
65
69
  "default": "./dist/lib/migrate-sections-transform.js"
@@ -96,6 +100,10 @@
96
100
  "types": "./dist/media/index.d.ts",
97
101
  "default": "./dist/media/index.js"
98
102
  },
103
+ "./storage": {
104
+ "types": "./dist/storage/index.d.ts",
105
+ "default": "./dist/storage/index.js"
106
+ },
99
107
  "./types/database": {
100
108
  "types": "./dist/types/database.d.ts",
101
109
  "default": "./dist/types/database.js"
@@ -3,6 +3,7 @@ import ColorsView from "./ColorsView";
3
3
  import ColorsEditable from "./ColorsEditable";
4
4
  import type { ColorItem } from "../sections/Colors/schema";
5
5
  import type { SectionContent } from "../../schemas/sections";
6
+ import type { OpenModal } from "../../lib/registry";
6
7
 
7
8
  interface Props {
8
9
  colors: ColorItem[];
@@ -11,7 +12,7 @@ interface Props {
11
12
  collapsing?: boolean;
12
13
  showLabel?: boolean;
13
14
  onChange?: (content: SectionContent) => void;
14
- openModal?: (title: string, content: ReactNode) => void;
15
+ openModal?: OpenModal;
15
16
  onDelete?: () => void;
16
17
  }
17
18
 
@@ -8,6 +8,7 @@ import ColorSwatchSettings from "./ColorSwatchSettings";
8
8
  import { getContrastClass, createColorItem } from "./colors-shared";
9
9
  import type { ColorItem } from "../sections/Colors/schema";
10
10
  import type { SectionContent } from "../../schemas/sections";
11
+ import type { OpenModal } from "../../lib/registry";
11
12
 
12
13
  export function buildContent(
13
14
  colors: ColorItem[],
@@ -32,7 +33,7 @@ export default function ColorsEditable({
32
33
  collapsing?: boolean;
33
34
  showLabel?: boolean;
34
35
  onChange: (content: SectionContent) => void;
35
- openModal: (title: string, content: ReactNode) => void;
36
+ openModal: OpenModal;
36
37
  onDelete?: () => void;
37
38
  }) {
38
39
  const [expanded, setExpanded] = useState(!collapsing);
@@ -206,6 +206,7 @@ export function SectionWrapper({
206
206
  onChange={(result) => onSectionChange(result as unknown as Record<string, unknown>)}
207
207
  tabs={definition.settingsTabs}
208
208
  />,
209
+ { tabbed: (definition.settingsTabs?.length ?? 0) > 0 },
209
210
  );
210
211
  }
211
212
  }
@@ -194,9 +194,12 @@ export function SettingsForm({ schema, values, onChange, tabs }: SettingsFormPro
194
194
 
195
195
  const listed = new Set(tabs.flatMap((t) => t.fields));
196
196
  const otherKeys = Object.keys(schema).filter((key) => !listed.has(key));
197
+ // min-h-0 + overflow-y-auto: the modal locks its height for tabbed content,
198
+ // so a long tab scrolls in place rather than growing the dialog.
199
+ const panel = "flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-px";
197
200
  const tabItems = [
198
- ...tabs.map((t) => ({ id: t.label, label: t.label, content: <div className="flex flex-col gap-4">{fields(t.fields)}</div> })),
199
- ...(otherKeys.length > 0 ? [{ id: "__other__", label: "Other", content: <div className="flex flex-col gap-4">{fields(otherKeys)}</div> }] : []),
201
+ ...tabs.map((t) => ({ id: t.label, label: t.label, content: <div className={panel}>{fields(t.fields)}</div> })),
202
+ ...(otherKeys.length > 0 ? [{ id: "__other__", label: "Other", content: <div className={panel}>{fields(otherKeys)}</div> }] : []),
200
203
  ];
201
204
  return <Tabs tabs={tabItems} fullBleedTabBar />;
202
205
  }