@drawnagency/primitives 0.1.87 → 0.1.88

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 (27) hide show
  1. package/dist/{chunk-VY5V4HBV.js → chunk-H2FENAQH.js} +1 -1
  2. package/dist/{chunk-6VOIZP2O.js → chunk-SK6GGTTO.js} +217 -204
  3. package/dist/components/brandguide/Colors.d.ts.map +1 -1
  4. package/dist/components/brandguide/ColorsEditable.d.ts +20 -0
  5. package/dist/components/brandguide/ColorsEditable.d.ts.map +1 -0
  6. package/dist/components/brandguide/ColorsView.d.ts +9 -0
  7. package/dist/components/brandguide/ColorsView.d.ts.map +1 -0
  8. package/dist/components/brandguide/colors-shared.d.ts +4 -0
  9. package/dist/components/brandguide/colors-shared.d.ts.map +1 -0
  10. package/dist/components/sections/Colors/index.d.ts.map +1 -1
  11. package/dist/components/sections/SectionIsland.d.ts +8 -0
  12. package/dist/components/sections/SectionIsland.d.ts.map +1 -0
  13. package/dist/components/sections/brand-guide.js +1 -1
  14. package/dist/components/sections/register-schemas.js +2 -2
  15. package/dist/components/sections/register.js +2 -2
  16. package/dist/hooks/useCollabSession.d.ts.map +1 -1
  17. package/dist/lib/registry.d.ts +7 -0
  18. package/dist/lib/registry.d.ts.map +1 -1
  19. package/package.json +1 -1
  20. package/src/components/brandguide/Colors.tsx +2 -275
  21. package/src/components/brandguide/ColorsEditable.tsx +155 -0
  22. package/src/components/brandguide/ColorsView.tsx +100 -0
  23. package/src/components/brandguide/colors-shared.ts +17 -0
  24. package/src/components/sections/Colors/index.tsx +1 -0
  25. package/src/components/sections/SectionIsland.tsx +21 -0
  26. package/src/hooks/useCollabSession.ts +27 -0
  27. package/src/lib/registry.ts +7 -0
@@ -55,53 +55,11 @@ var ColorItemSchema = z.object({
55
55
  spaces: z.array(ColorSpaceSchema).describe("One or more color-space definitions (hex/rgb/cmyk/pantone) for this color.").min(1)
56
56
  });
57
57
 
58
- // src/components/brandguide/Colors.tsx
59
- import { useState as useState2, useEffect } from "react";
60
- import { Eye, EyeOff } from "lucide-react";
61
-
62
- // src/components/brandguide/ColorSwatchSettings.tsx
58
+ // src/components/brandguide/ColorsView.tsx
63
59
  import { useState } from "react";
64
- import { jsx, jsxs } from "react/jsx-runtime";
65
- function mergeSpaces(spaces) {
66
- return Object.assign({}, ...spaces);
67
- }
68
- function ColorSwatchSettings({ color, onChange }) {
69
- const [localColor, setLocalColor] = useState(() => ({
70
- ...color,
71
- spaces: [mergeSpaces(color.spaces)]
72
- }));
73
- const space = localColor.spaces[0] || {};
74
- const update = (updated) => {
75
- setLocalColor(updated);
76
- onChange(updated);
77
- };
78
- const updateSpace = (key, value) => {
79
- const newSpace = { ...space, [key]: value || void 0 };
80
- update({ ...localColor, spaces: [newSpace] });
81
- };
82
- return /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
83
- /* @__PURE__ */ jsx(
84
- Input,
85
- {
86
- label: "Name",
87
- value: localColor.name || "",
88
- onChange: (name) => update({ ...localColor, name })
89
- }
90
- ),
91
- ["hex", "rgb", "cmyk", "pantone"].map((key) => /* @__PURE__ */ jsx(
92
- Input,
93
- {
94
- label: key.toUpperCase(),
95
- value: space[key] || "",
96
- onChange: (value) => updateSpace(key, value)
97
- },
98
- key
99
- ))
100
- ] });
101
- }
60
+ import { Eye, EyeOff } from "lucide-react";
102
61
 
103
- // src/components/brandguide/Colors.tsx
104
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
62
+ // src/components/brandguide/colors-shared.ts
105
63
  function getContrastClass(hex) {
106
64
  if (!hex) return "text-white";
107
65
  const h = hex.replace("#", "");
@@ -116,32 +74,9 @@ var createColorItem = () => ({
116
74
  name: "",
117
75
  spaces: [{ hex: "#cccccc" }]
118
76
  });
119
- function buildContent(colors, options) {
120
- const { label, columns, collapsing, showLabel } = options;
121
- return {
122
- type: "colors",
123
- content: { colors },
124
- ...label || columns || collapsing !== void 0 || showLabel !== void 0 ? { options: { label, columns, collapsing, showLabel } } : {}
125
- };
126
- }
127
- function Colors({ colors, columns = 3, label, collapsing, showLabel = true, onChange, openModal, onDelete }) {
128
- if (onChange && openModal) {
129
- return /* @__PURE__ */ jsx2(
130
- ColorsEditable,
131
- {
132
- colors,
133
- columns,
134
- label,
135
- collapsing,
136
- showLabel,
137
- onChange,
138
- openModal,
139
- onDelete
140
- }
141
- );
142
- }
143
- return /* @__PURE__ */ jsx2(ColorsView, { colors, columns, label, collapsing, showLabel });
144
- }
77
+
78
+ // src/components/brandguide/ColorsView.tsx
79
+ import { jsx, jsxs } from "react/jsx-runtime";
145
80
  function ColorsView({
146
81
  colors,
147
82
  columns,
@@ -149,8 +84,8 @@ function ColorsView({
149
84
  collapsing,
150
85
  showLabel
151
86
  }) {
152
- const [expanded, setExpanded] = useState2(!collapsing);
153
- const [copiedIndex, setCopiedIndex] = useState2(null);
87
+ const [expanded, setExpanded] = useState(!collapsing);
88
+ const [copiedIndex, setCopiedIndex] = useState(null);
154
89
  const handleCopy = (value, colorIndex) => {
155
90
  if (navigator.clipboard?.writeText) {
156
91
  navigator.clipboard.writeText(value);
@@ -167,38 +102,38 @@ function ColorsView({
167
102
  setCopiedIndex(colorIndex);
168
103
  setTimeout(() => setCopiedIndex(null), 1500);
169
104
  };
170
- return /* @__PURE__ */ jsxs2("div", { children: [
171
- (showLabel && !!label || collapsing) && /* @__PURE__ */ jsxs2("div", { className: "mb-4 flex items-center gap-2", children: [
172
- showLabel && !!label && /* @__PURE__ */ jsx2("span", { className: "text-lg font-bold", children: label }),
173
- collapsing && /* @__PURE__ */ jsxs2(
105
+ return /* @__PURE__ */ jsxs("div", { children: [
106
+ (showLabel && !!label || collapsing) && /* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
107
+ showLabel && !!label && /* @__PURE__ */ jsx("span", { className: "text-lg font-bold", children: label }),
108
+ collapsing && /* @__PURE__ */ jsxs(
174
109
  "button",
175
110
  {
176
111
  onClick: () => setExpanded(!expanded),
177
112
  className: "cursor-pointer ml-auto flex items-center gap-1.5 text-sm text-base-contrast-light hover:text-base-contrast",
178
113
  children: [
179
- /* @__PURE__ */ jsx2("span", { children: expanded ? "Hide Details" : "Show Details" }),
180
- expanded ? /* @__PURE__ */ jsx2(EyeOff, { size: 16 }) : /* @__PURE__ */ jsx2(Eye, { size: 16 })
114
+ /* @__PURE__ */ jsx("span", { children: expanded ? "Hide Details" : "Show Details" }),
115
+ expanded ? /* @__PURE__ */ jsx(EyeOff, { size: 16 }) : /* @__PURE__ */ jsx(Eye, { size: 16 })
181
116
  ]
182
117
  }
183
118
  )
184
119
  ] }),
185
- /* @__PURE__ */ jsx2("div", { className: "@container", children: /* @__PURE__ */ jsx2("div", { className: cn("grid gap-4", containerGridClass[columns] || containerGridClass[3]), children: colors.map((color, i) => {
120
+ /* @__PURE__ */ jsx("div", { className: "@container", children: /* @__PURE__ */ jsx("div", { className: cn("grid gap-4", containerGridClass[columns] || containerGridClass[3]), children: colors.map((color, i) => {
186
121
  const hex = color.spaces[0]?.hex;
187
122
  const contrast = getContrastClass(hex);
188
- return /* @__PURE__ */ jsxs2("div", { className: "flex h-full flex-col overflow-hidden rounded-outer border border-base-200", children: [
189
- /* @__PURE__ */ jsxs2("div", { className: cn("relative flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: [
190
- color.name && /* @__PURE__ */ jsx2("span", { className: "text-sm font-bold", children: color.name }),
191
- copiedIndex === i && /* @__PURE__ */ jsx2("span", { className: cn(
123
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden rounded-outer border border-base-200", children: [
124
+ /* @__PURE__ */ jsxs("div", { className: cn("relative flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: [
125
+ color.name && /* @__PURE__ */ jsx("span", { className: "text-sm font-bold", children: color.name }),
126
+ copiedIndex === i && /* @__PURE__ */ jsx("span", { className: cn(
192
127
  "absolute top-2 right-2 rounded-full px-2.5 py-0.5 text-xs font-medium",
193
128
  getContrastClass(hex) === "text-black" ? "bg-black/15 text-black" : "bg-white/25 text-white"
194
129
  ), children: "Copied!" })
195
130
  ] }),
196
131
  expanded && // flex-1 so every swatch's label block grows to the tallest in its row.
197
- /* @__PURE__ */ jsx2("div", { className: "flex-1 space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map(
132
+ /* @__PURE__ */ jsx("div", { className: "flex-1 space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map(
198
133
  (space, j) => Object.entries(space).map(
199
- ([key, value]) => value ? /* @__PURE__ */ jsxs2("button", { onClick: () => handleCopy(value, i), className: "cursor-pointer flex w-full justify-between hover:text-primary", children: [
200
- /* @__PURE__ */ jsx2("span", { className: "font-medium uppercase", children: key }),
201
- /* @__PURE__ */ jsx2("span", { children: value })
134
+ ([key, value]) => value ? /* @__PURE__ */ jsxs("button", { onClick: () => handleCopy(value, i), className: "cursor-pointer flex w-full justify-between hover:text-primary", children: [
135
+ /* @__PURE__ */ jsx("span", { className: "font-medium uppercase", children: key }),
136
+ /* @__PURE__ */ jsx("span", { children: value })
202
137
  ] }, `${j}-${key}`) : null
203
138
  )
204
139
  ) })
@@ -206,6 +141,62 @@ function ColorsView({
206
141
  }) }) })
207
142
  ] });
208
143
  }
144
+
145
+ // src/components/brandguide/ColorsEditable.tsx
146
+ import { useState as useState3, useEffect } from "react";
147
+ import { Eye as Eye2, EyeOff as EyeOff2 } from "lucide-react";
148
+
149
+ // src/components/brandguide/ColorSwatchSettings.tsx
150
+ import { useState as useState2 } from "react";
151
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
152
+ function mergeSpaces(spaces) {
153
+ return Object.assign({}, ...spaces);
154
+ }
155
+ function ColorSwatchSettings({ color, onChange }) {
156
+ const [localColor, setLocalColor] = useState2(() => ({
157
+ ...color,
158
+ spaces: [mergeSpaces(color.spaces)]
159
+ }));
160
+ const space = localColor.spaces[0] || {};
161
+ const update = (updated) => {
162
+ setLocalColor(updated);
163
+ onChange(updated);
164
+ };
165
+ const updateSpace = (key, value) => {
166
+ const newSpace = { ...space, [key]: value || void 0 };
167
+ update({ ...localColor, spaces: [newSpace] });
168
+ };
169
+ return /* @__PURE__ */ jsxs2("div", { className: "space-y-3", children: [
170
+ /* @__PURE__ */ jsx2(
171
+ Input,
172
+ {
173
+ label: "Name",
174
+ value: localColor.name || "",
175
+ onChange: (name) => update({ ...localColor, name })
176
+ }
177
+ ),
178
+ ["hex", "rgb", "cmyk", "pantone"].map((key) => /* @__PURE__ */ jsx2(
179
+ Input,
180
+ {
181
+ label: key.toUpperCase(),
182
+ value: space[key] || "",
183
+ onChange: (value) => updateSpace(key, value)
184
+ },
185
+ key
186
+ ))
187
+ ] });
188
+ }
189
+
190
+ // src/components/brandguide/ColorsEditable.tsx
191
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
192
+ function buildContent(colors, options) {
193
+ const { label, columns, collapsing, showLabel } = options;
194
+ return {
195
+ type: "colors",
196
+ content: { colors },
197
+ ...label || columns || collapsing !== void 0 || showLabel !== void 0 ? { options: { label, columns, collapsing, showLabel } } : {}
198
+ };
199
+ }
209
200
  function ColorsEditable({
210
201
  colors,
211
202
  columns,
@@ -216,7 +207,7 @@ function ColorsEditable({
216
207
  openModal,
217
208
  onDelete
218
209
  }) {
219
- const [expanded, setExpanded] = useState2(!collapsing);
210
+ const [expanded, setExpanded] = useState3(!collapsing);
220
211
  const options = { label, columns, collapsing, showLabel };
221
212
  useEffect(() => {
222
213
  setExpanded(!collapsing);
@@ -225,15 +216,15 @@ function ColorsEditable({
225
216
  const color = colors[index];
226
217
  openModal(
227
218
  "Color Settings",
228
- /* @__PURE__ */ jsx2(ColorSwatchSettings, { color, onChange: (updated) => {
219
+ /* @__PURE__ */ jsx3(ColorSwatchSettings, { color, onChange: (updated) => {
229
220
  const newColors = colors.map((c, i) => i === index ? updated : c);
230
221
  onChange(buildContent(newColors, options));
231
222
  } })
232
223
  );
233
224
  };
234
- return /* @__PURE__ */ jsxs2("div", { children: [
235
- (showLabel && !!label || collapsing) && /* @__PURE__ */ jsxs2("div", { className: "mb-4 flex items-center gap-2", children: [
236
- showLabel && !!label && /* @__PURE__ */ jsx2(
225
+ return /* @__PURE__ */ jsxs3("div", { children: [
226
+ (showLabel && !!label || collapsing) && /* @__PURE__ */ jsxs3("div", { className: "mb-4 flex items-center gap-2", children: [
227
+ showLabel && !!label && /* @__PURE__ */ jsx3(
237
228
  EditablePlainText,
238
229
  {
239
230
  tag: "span",
@@ -243,19 +234,19 @@ function ColorsEditable({
243
234
  className: "text-lg font-bold"
244
235
  }
245
236
  ),
246
- collapsing && /* @__PURE__ */ jsxs2(
237
+ collapsing && /* @__PURE__ */ jsxs3(
247
238
  "button",
248
239
  {
249
240
  onClick: () => setExpanded(!expanded),
250
241
  className: "cursor-pointer ml-auto flex items-center gap-1.5 text-sm text-base-contrast-light hover:text-base-contrast",
251
242
  children: [
252
- /* @__PURE__ */ jsx2("span", { children: expanded ? "Hide Details" : "Show Details" }),
253
- expanded ? /* @__PURE__ */ jsx2(EyeOff, { size: 16 }) : /* @__PURE__ */ jsx2(Eye, { size: 16 })
243
+ /* @__PURE__ */ jsx3("span", { children: expanded ? "Hide Details" : "Show Details" }),
244
+ expanded ? /* @__PURE__ */ jsx3(EyeOff2, { size: 16 }) : /* @__PURE__ */ jsx3(Eye2, { size: 16 })
254
245
  ]
255
246
  }
256
247
  )
257
248
  ] }),
258
- /* @__PURE__ */ jsx2(
249
+ /* @__PURE__ */ jsx3(
259
250
  EditableGrid,
260
251
  {
261
252
  items: colors,
@@ -266,7 +257,7 @@ function ColorsEditable({
266
257
  createItem: createColorItem,
267
258
  isEditMode: true,
268
259
  onItemSettings: handleItemSettings,
269
- renderItem: (color, { index }) => /* @__PURE__ */ jsx2(
260
+ renderItem: (color, { index }) => /* @__PURE__ */ jsx3(
270
261
  ColorSwatchEditable,
271
262
  {
272
263
  color,
@@ -295,8 +286,8 @@ function ColorSwatchEditable({
295
286
  const newColors = colors.map((c, i) => i === index ? updated : c);
296
287
  onChange(buildContent(newColors, options));
297
288
  };
298
- return /* @__PURE__ */ jsxs2("div", { className: "flex h-full flex-col overflow-hidden rounded-outer border border-base-200", children: [
299
- /* @__PURE__ */ jsx2("div", { className: cn("flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: /* @__PURE__ */ jsx2(
289
+ return /* @__PURE__ */ jsxs3("div", { className: "flex h-full flex-col overflow-hidden rounded-outer border border-base-200", children: [
290
+ /* @__PURE__ */ jsx3("div", { className: cn("flex min-h-[80px] items-end p-3", contrast), style: { backgroundColor: hex || "#ccc" }, children: /* @__PURE__ */ jsx3(
300
291
  EditablePlainText,
301
292
  {
302
293
  tag: "span",
@@ -308,17 +299,38 @@ function ColorSwatchEditable({
308
299
  }
309
300
  ) }),
310
301
  expanded && // flex-1 so every swatch's label block grows to the tallest in its row.
311
- /* @__PURE__ */ jsx2("div", { className: "flex-1 space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map(
302
+ /* @__PURE__ */ jsx3("div", { className: "flex-1 space-y-1 bg-base-accent p-3 text-sm", children: color.spaces.map(
312
303
  (space, j) => Object.entries(space).map(
313
- ([key, value]) => value ? /* @__PURE__ */ jsxs2("div", { className: "flex w-full justify-between", children: [
314
- /* @__PURE__ */ jsx2("span", { className: "font-medium uppercase", children: key }),
315
- /* @__PURE__ */ jsx2("span", { children: value })
304
+ ([key, value]) => value ? /* @__PURE__ */ jsxs3("div", { className: "flex w-full justify-between", children: [
305
+ /* @__PURE__ */ jsx3("span", { className: "font-medium uppercase", children: key }),
306
+ /* @__PURE__ */ jsx3("span", { children: value })
316
307
  ] }, `${j}-${key}`) : null
317
308
  )
318
309
  ) })
319
310
  ] });
320
311
  }
321
312
 
313
+ // src/components/brandguide/Colors.tsx
314
+ import { jsx as jsx4 } from "react/jsx-runtime";
315
+ function Colors({ colors, columns = 3, label, collapsing, showLabel = true, onChange, openModal, onDelete }) {
316
+ if (onChange && openModal) {
317
+ return /* @__PURE__ */ jsx4(
318
+ ColorsEditable,
319
+ {
320
+ colors,
321
+ columns,
322
+ label,
323
+ collapsing,
324
+ showLabel,
325
+ onChange,
326
+ openModal,
327
+ onDelete
328
+ }
329
+ );
330
+ }
331
+ return /* @__PURE__ */ jsx4(ColorsView, { colors, columns, label, collapsing, showLabel });
332
+ }
333
+
322
334
  // src/lib/text.ts
323
335
  function stripHtmlToPlainText(html) {
324
336
  return html.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1>/gi, "").replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim();
@@ -332,7 +344,7 @@ function pluralize(n, word) {
332
344
  }
333
345
 
334
346
  // src/components/sections/Colors/index.tsx
335
- import { jsx as jsx3 } from "react/jsx-runtime";
347
+ import { jsx as jsx5 } from "react/jsx-runtime";
336
348
  var schema = z2.object({
337
349
  type: z2.literal("colors"),
338
350
  content: z2.object({
@@ -347,12 +359,13 @@ var schema = z2.object({
347
359
  });
348
360
  var Colors_default = defineSection({
349
361
  type: "colors",
362
+ interactive: true,
350
363
  category: "brand-guide",
351
364
  label: "Colors",
352
- icon: /* @__PURE__ */ jsx3(Palette, { size: 18 }),
365
+ icon: /* @__PURE__ */ jsx5(Palette, { size: 18 }),
353
366
  schema,
354
367
  authoringNote: "A brand color palette. Each color may carry hex/rgb/cmyk/pantone values. Use to document brand colors with swatches.",
355
- component: ({ content, options, onChange, openModal, onDelete }) => /* @__PURE__ */ jsx3(
368
+ component: ({ content, options, onChange, openModal, onDelete }) => /* @__PURE__ */ jsx5(
356
369
  Colors,
357
370
  {
358
371
  colors: content.content.colors,
@@ -390,12 +403,12 @@ import { z as z3 } from "zod";
390
403
  import { List, Columns2 } from "lucide-react";
391
404
 
392
405
  // src/components/sections/IconList/IconList.tsx
393
- import { useRef as useRef3, useEffect as useEffect4, useState as useState3, useCallback } from "react";
406
+ import { useRef as useRef3, useEffect as useEffect4, useState as useState4, useCallback } from "react";
394
407
  import { Check as Check2, CopyPlus, Pencil, X as X2 } from "lucide-react";
395
408
 
396
409
  // src/components/primitives/IconPicker.tsx
397
410
  import { useEffect as useEffect2, useRef } from "react";
398
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
411
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
399
412
  function IconPicker({ selected, onSelect, onClose, showRemove = true }) {
400
413
  const panelRef = useRef(null);
401
414
  useEffect2(() => {
@@ -405,16 +418,16 @@ function IconPicker({ selected, onSelect, onClose, showRemove = true }) {
405
418
  document.addEventListener("mousedown", handleMouseDown);
406
419
  return () => document.removeEventListener("mousedown", handleMouseDown);
407
420
  }, [onClose]);
408
- return /* @__PURE__ */ jsxs3(
421
+ return /* @__PURE__ */ jsxs4(
409
422
  "div",
410
423
  {
411
424
  ref: panelRef,
412
425
  className: "absolute z-50 w-56 rounded-lg border border-base-200 bg-base p-2 shadow-lg",
413
426
  children: [
414
- /* @__PURE__ */ jsx4("div", { className: "grid grid-cols-5 gap-1", children: curatedIcons.map((entry) => {
427
+ /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-5 gap-1", children: curatedIcons.map((entry) => {
415
428
  const Icon = entry.icon;
416
429
  const isSelected = selected === entry.id;
417
- return /* @__PURE__ */ jsx4(
430
+ return /* @__PURE__ */ jsx6(
418
431
  "button",
419
432
  {
420
433
  "aria-label": entry.label,
@@ -424,12 +437,12 @@ function IconPicker({ selected, onSelect, onClose, showRemove = true }) {
424
437
  isSelected && "ring-2 ring-primary bg-base-accent text-primary"
425
438
  ),
426
439
  onClick: () => onSelect(entry.id),
427
- children: /* @__PURE__ */ jsx4(Icon, { size: 18 })
440
+ children: /* @__PURE__ */ jsx6(Icon, { size: 18 })
428
441
  },
429
442
  entry.id
430
443
  );
431
444
  }) }),
432
- showRemove && /* @__PURE__ */ jsx4(
445
+ showRemove && /* @__PURE__ */ jsx6(
433
446
  "button",
434
447
  {
435
448
  className: "cursor-pointer mt-2 w-full rounded px-2 py-1.5 text-center text-xs text-base-contrast-light hover:bg-base-accent hover:text-base-contrast",
@@ -445,7 +458,7 @@ function IconPicker({ selected, onSelect, onClose, showRemove = true }) {
445
458
  // src/components/sections/IconList/DoDontToggle.tsx
446
459
  import { useEffect as useEffect3, useRef as useRef2 } from "react";
447
460
  import { Check, X } from "lucide-react";
448
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
461
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
449
462
  function DoDontToggle({ value, onSelect, onClose }) {
450
463
  const panelRef = useRef2(null);
451
464
  useEffect3(() => {
@@ -455,13 +468,13 @@ function DoDontToggle({ value, onSelect, onClose }) {
455
468
  document.addEventListener("mousedown", handleMouseDown);
456
469
  return () => document.removeEventListener("mousedown", handleMouseDown);
457
470
  }, [onClose]);
458
- return /* @__PURE__ */ jsx5(
471
+ return /* @__PURE__ */ jsx7(
459
472
  "div",
460
473
  {
461
474
  ref: panelRef,
462
475
  className: "absolute z-50 w-44 rounded-lg border border-base-200 bg-base p-2 shadow-lg",
463
- children: /* @__PURE__ */ jsxs4("div", { className: "grid grid-cols-3 gap-2", children: [
464
- /* @__PURE__ */ jsxs4(
476
+ children: /* @__PURE__ */ jsxs5("div", { className: "grid grid-cols-3 gap-2", children: [
477
+ /* @__PURE__ */ jsxs5(
465
478
  "button",
466
479
  {
467
480
  type: "button",
@@ -473,12 +486,12 @@ function DoDontToggle({ value, onSelect, onClose }) {
473
486
  ),
474
487
  onClick: () => onSelect(void 0),
475
488
  children: [
476
- /* @__PURE__ */ jsx5("span", { className: "flex h-5 w-5 items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" }),
477
- /* @__PURE__ */ jsx5("span", { className: "text-xs font-medium", children: "None" })
489
+ /* @__PURE__ */ jsx7("span", { className: "flex h-5 w-5 items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" }),
490
+ /* @__PURE__ */ jsx7("span", { className: "text-xs font-medium", children: "None" })
478
491
  ]
479
492
  }
480
493
  ),
481
- /* @__PURE__ */ jsxs4(
494
+ /* @__PURE__ */ jsxs5(
482
495
  "button",
483
496
  {
484
497
  type: "button",
@@ -490,12 +503,12 @@ function DoDontToggle({ value, onSelect, onClose }) {
490
503
  ),
491
504
  onClick: () => onSelect("do"),
492
505
  children: [
493
- /* @__PURE__ */ jsx5(Check, { size: 20 }),
494
- /* @__PURE__ */ jsx5("span", { className: "text-xs font-medium", children: "Do" })
506
+ /* @__PURE__ */ jsx7(Check, { size: 20 }),
507
+ /* @__PURE__ */ jsx7("span", { className: "text-xs font-medium", children: "Do" })
495
508
  ]
496
509
  }
497
510
  ),
498
- /* @__PURE__ */ jsxs4(
511
+ /* @__PURE__ */ jsxs5(
499
512
  "button",
500
513
  {
501
514
  type: "button",
@@ -507,8 +520,8 @@ function DoDontToggle({ value, onSelect, onClose }) {
507
520
  ),
508
521
  onClick: () => onSelect("dont"),
509
522
  children: [
510
- /* @__PURE__ */ jsx5(X, { size: 20 }),
511
- /* @__PURE__ */ jsx5("span", { className: "text-xs font-medium", children: "Don't" })
523
+ /* @__PURE__ */ jsx7(X, { size: 20 }),
524
+ /* @__PURE__ */ jsx7("span", { className: "text-xs font-medium", children: "Don't" })
512
525
  ]
513
526
  }
514
527
  )
@@ -518,7 +531,7 @@ function DoDontToggle({ value, onSelect, onClose }) {
518
531
  }
519
532
 
520
533
  // src/components/sections/IconList/IconList.tsx
521
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
534
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
522
535
  function IconList({
523
536
  items,
524
537
  icon = null,
@@ -544,7 +557,7 @@ function IconList({
544
557
  [onChange, onItemsChange, icon, showLabel, stackText, dodont]
545
558
  );
546
559
  if (!isEditMode) {
547
- return /* @__PURE__ */ jsx6(
560
+ return /* @__PURE__ */ jsx8(
548
561
  ViewIconList,
549
562
  {
550
563
  items,
@@ -558,7 +571,7 @@ function IconList({
558
571
  }
559
572
  );
560
573
  }
561
- return /* @__PURE__ */ jsx6(
574
+ return /* @__PURE__ */ jsx8(
562
575
  EditIconList,
563
576
  {
564
577
  items,
@@ -600,10 +613,10 @@ function ViewIconList({
600
613
  iconClassName
601
614
  }) {
602
615
  const hasAnyIcon = items.some((item) => resolveIcon(item, defaultIcon, dodont));
603
- return /* @__PURE__ */ jsx6("div", { className: "grid gap-4 pb-4", children: items.map((item, i) => {
616
+ return /* @__PURE__ */ jsx8("div", { className: "grid gap-4 pb-4", children: items.map((item, i) => {
604
617
  const iconEntry = resolveIcon(item, defaultIcon, dodont);
605
618
  const iconColor = resolveIconColor(item, iconClassName, dodont);
606
- return /* @__PURE__ */ jsxs5(
619
+ return /* @__PURE__ */ jsxs6(
607
620
  "div",
608
621
  {
609
622
  className: cn(
@@ -611,25 +624,25 @@ function ViewIconList({
611
624
  hasAnyIcon ? "grid-cols-[24px_1fr]" : "grid-cols-1"
612
625
  ),
613
626
  children: [
614
- hasAnyIcon && /* @__PURE__ */ jsx6(
627
+ hasAnyIcon && /* @__PURE__ */ jsx8(
615
628
  "div",
616
629
  {
617
630
  "data-testid": "icon-list-icon",
618
631
  className: cn("flex items-start pt-0.5", iconColor),
619
- children: iconEntry && /* @__PURE__ */ jsx6(iconEntry.icon, { size: 18 })
632
+ children: iconEntry && /* @__PURE__ */ jsx8(iconEntry.icon, { size: 18 })
620
633
  }
621
634
  ),
622
- /* @__PURE__ */ jsxs5(
635
+ /* @__PURE__ */ jsxs6(
623
636
  "div",
624
637
  {
625
638
  "data-testid": "icon-list-content",
626
639
  className: stackText ? "flex flex-col" : void 0,
627
640
  children: [
628
- showLabel && /* @__PURE__ */ jsxs5("span", { className: labelClassName, children: [
641
+ showLabel && /* @__PURE__ */ jsxs6("span", { className: labelClassName, children: [
629
642
  item.label,
630
643
  !stackText && " "
631
644
  ] }),
632
- /* @__PURE__ */ jsx6("span", { className: textClassName, children: item.text })
645
+ /* @__PURE__ */ jsx8("span", { className: textClassName, children: item.text })
633
646
  ]
634
647
  }
635
648
  )
@@ -655,7 +668,7 @@ function EditIconList({
655
668
  onChange: onItemsChange,
656
669
  createItem: () => ({ label: "", text: "" })
657
670
  });
658
- const [dragState, setDragState] = useState3({ sourceId: null, targetId: null });
671
+ const [dragState, setDragState] = useState4({ sourceId: null, targetId: null });
659
672
  const updateItem = useCallback(
660
673
  (index, patch) => {
661
674
  const updated = wrappedItems.map(
@@ -678,8 +691,8 @@ function EditIconList({
678
691
  [wrappedItems, onItemsChange]
679
692
  );
680
693
  const hasAnyIcon = true;
681
- return /* @__PURE__ */ jsxs5("div", { className: "group/list relative grid gap-4 pb-4", children: [
682
- wrappedItems.map((wrapped, index) => /* @__PURE__ */ jsx6(
694
+ return /* @__PURE__ */ jsxs6("div", { className: "group/list relative grid gap-4 pb-4", children: [
695
+ wrappedItems.map((wrapped, index) => /* @__PURE__ */ jsx8(
683
696
  EditableRow,
684
697
  {
685
698
  id: wrapped.id,
@@ -702,7 +715,7 @@ function EditIconList({
702
715
  },
703
716
  wrapped.id
704
717
  )),
705
- /* @__PURE__ */ jsx6(
718
+ /* @__PURE__ */ jsx8(
706
719
  TrailingDropZone,
707
720
  {
708
721
  index: wrappedItems.length,
@@ -711,10 +724,10 @@ function EditIconList({
711
724
  onReorder
712
725
  }
713
726
  ),
714
- /* @__PURE__ */ jsx6(
727
+ /* @__PURE__ */ jsx8(
715
728
  IconButton,
716
729
  {
717
- icon: /* @__PURE__ */ jsx6(AddIcon, { size: 16 }),
730
+ icon: /* @__PURE__ */ jsx8(AddIcon, { size: 16 }),
718
731
  label: "Add item",
719
732
  size: "lg",
720
733
  intent: "primary",
@@ -745,10 +758,10 @@ function EditableRow({
745
758
  }) {
746
759
  const rowRef = useRef3(null);
747
760
  const handleRef = useRef3(null);
748
- const [iconHover, setIconHover] = useState3(false);
749
- const [pickerOpen, setPickerOpen] = useState3(false);
750
- const [dodontOpen, setDodontOpen] = useState3(false);
751
- const [editingSuppressed, setEditingSuppressed] = useState3(false);
761
+ const [iconHover, setIconHover] = useState4(false);
762
+ const [pickerOpen, setPickerOpen] = useState4(false);
763
+ const [dodontOpen, setDodontOpen] = useState4(false);
764
+ const [editingSuppressed, setEditingSuppressed] = useState4(false);
752
765
  const iconEntry = resolveIcon(item, defaultIcon, dodont);
753
766
  const effectiveIconId = item.icon ?? defaultIcon ?? null;
754
767
  const iconColor = resolveIconColor(item, iconClassName, dodont);
@@ -796,7 +809,7 @@ function EditableRow({
796
809
  setEditingSuppressed(true);
797
810
  }
798
811
  };
799
- return /* @__PURE__ */ jsxs5(
812
+ return /* @__PURE__ */ jsxs6(
800
813
  "div",
801
814
  {
802
815
  ref: rowRef,
@@ -809,7 +822,7 @@ function EditableRow({
809
822
  onInput: onEditableActivity,
810
823
  onMouseMove: () => setEditingSuppressed(false),
811
824
  children: [
812
- hasAnyIcon && /* @__PURE__ */ jsxs5(
825
+ hasAnyIcon && /* @__PURE__ */ jsxs6(
813
826
  "div",
814
827
  {
815
828
  "data-testid": "icon-list-icon",
@@ -817,7 +830,7 @@ function EditableRow({
817
830
  onMouseEnter: () => setIconHover(true),
818
831
  onMouseLeave: () => setIconHover(false),
819
832
  children: [
820
- /* @__PURE__ */ jsx6(
833
+ /* @__PURE__ */ jsx8(
821
834
  "button",
822
835
  {
823
836
  className: "cursor-pointer transition-opacity hover:opacity-70",
@@ -826,10 +839,10 @@ function EditableRow({
826
839
  setPickerOpen((prev) => !prev);
827
840
  setDodontOpen(false);
828
841
  },
829
- children: iconHover && !pickerOpen ? /* @__PURE__ */ jsx6(Pencil, { size: 18, className: "text-base-contrast-light" }) : iconEntry ? /* @__PURE__ */ jsx6(iconEntry.icon, { size: 18 }) : /* @__PURE__ */ jsx6("span", { className: "flex h-[18px] w-[18px] items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" })
842
+ children: iconHover && !pickerOpen ? /* @__PURE__ */ jsx8(Pencil, { size: 18, className: "text-base-contrast-light" }) : iconEntry ? /* @__PURE__ */ jsx8(iconEntry.icon, { size: 18 }) : /* @__PURE__ */ jsx8("span", { className: "flex h-[18px] w-[18px] items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" })
830
843
  }
831
844
  ),
832
- pickerOpen && /* @__PURE__ */ jsx6("div", { className: "absolute top-full left-0 z-50 mt-1", children: /* @__PURE__ */ jsx6(
845
+ pickerOpen && /* @__PURE__ */ jsx8("div", { className: "absolute top-full left-0 z-50 mt-1", children: /* @__PURE__ */ jsx8(
833
846
  IconPicker,
834
847
  {
835
848
  selected: effectiveIconId,
@@ -848,8 +861,8 @@ function EditableRow({
848
861
  ]
849
862
  }
850
863
  ),
851
- /* @__PURE__ */ jsxs5("div", { className: stackText ? "flex flex-col" : void 0, children: [
852
- showLabel && /* @__PURE__ */ jsx6(
864
+ /* @__PURE__ */ jsxs6("div", { className: stackText ? "flex flex-col" : void 0, children: [
865
+ showLabel && /* @__PURE__ */ jsx8(
853
866
  EditablePlainText,
854
867
  {
855
868
  tag: "span",
@@ -860,7 +873,7 @@ function EditableRow({
860
873
  className: cn(labelClassName, !stackText && "mr-1")
861
874
  }
862
875
  ),
863
- /* @__PURE__ */ jsx6(
876
+ /* @__PURE__ */ jsx8(
864
877
  EditablePlainText,
865
878
  {
866
879
  tag: "span",
@@ -872,7 +885,7 @@ function EditableRow({
872
885
  }
873
886
  )
874
887
  ] }),
875
- /* @__PURE__ */ jsxs5(
888
+ /* @__PURE__ */ jsxs6(
876
889
  "div",
877
890
  {
878
891
  className: cn(
@@ -880,8 +893,8 @@ function EditableRow({
880
893
  editingSuppressed ? "opacity-0 pointer-events-none" : "opacity-0 group-hover/row:opacity-100 no-hover:opacity-100"
881
894
  ),
882
895
  children: [
883
- /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
884
- /* @__PURE__ */ jsx6(
896
+ /* @__PURE__ */ jsxs6("div", { className: "relative", children: [
897
+ /* @__PURE__ */ jsx8(
885
898
  "button",
886
899
  {
887
900
  "aria-label": "Set do/don't",
@@ -890,10 +903,10 @@ function EditableRow({
890
903
  setPickerOpen(false);
891
904
  },
892
905
  className: "cursor-pointer rounded bg-base/80 p-1 shadow-sm text-base-contrast-light hover:text-primary",
893
- children: item.dodont === "do" ? /* @__PURE__ */ jsx6(Check2, { size: 14, className: "text-green-600" }) : item.dodont === "dont" ? /* @__PURE__ */ jsx6(X2, { size: 14, className: "text-red-600" }) : /* @__PURE__ */ jsx6(Pencil, { size: 14 })
906
+ children: item.dodont === "do" ? /* @__PURE__ */ jsx8(Check2, { size: 14, className: "text-green-600" }) : item.dodont === "dont" ? /* @__PURE__ */ jsx8(X2, { size: 14, className: "text-red-600" }) : /* @__PURE__ */ jsx8(Pencil, { size: 14 })
894
907
  }
895
908
  ),
896
- dodontOpen && /* @__PURE__ */ jsx6("div", { className: "absolute top-full right-0 z-50 mt-1", children: /* @__PURE__ */ jsx6(
909
+ dodontOpen && /* @__PURE__ */ jsx8("div", { className: "absolute top-full right-0 z-50 mt-1", children: /* @__PURE__ */ jsx8(
897
910
  DoDontToggle,
898
911
  {
899
912
  value: item.dodont,
@@ -905,30 +918,30 @@ function EditableRow({
905
918
  }
906
919
  ) })
907
920
  ] }),
908
- /* @__PURE__ */ jsx6(
921
+ /* @__PURE__ */ jsx8(
909
922
  IconButton,
910
923
  {
911
924
  ref: handleRef,
912
- icon: /* @__PURE__ */ jsx6(DragHandle, { size: 14 }),
925
+ icon: /* @__PURE__ */ jsx8(DragHandle, { size: 14 }),
913
926
  label: "Drag to reorder",
914
927
  size: "sm",
915
928
  className: "cursor-grab rounded bg-base/80 p-1 shadow-sm text-base-contrast-light/80 hover:text-base-contrast active:cursor-grabbing",
916
929
  tabIndex: -1
917
930
  }
918
931
  ),
919
- /* @__PURE__ */ jsx6(
932
+ /* @__PURE__ */ jsx8(
920
933
  "button",
921
934
  {
922
935
  "aria-label": "Duplicate item",
923
936
  onClick: onDuplicate,
924
937
  className: "cursor-pointer rounded bg-base/80 p-1 shadow-sm text-base-contrast-light hover:text-primary",
925
- children: /* @__PURE__ */ jsx6(CopyPlus, { size: 14 })
938
+ children: /* @__PURE__ */ jsx8(CopyPlus, { size: 14 })
926
939
  }
927
940
  ),
928
- /* @__PURE__ */ jsx6(
941
+ /* @__PURE__ */ jsx8(
929
942
  IconButton,
930
943
  {
931
- icon: /* @__PURE__ */ jsx6(DeleteIcon, { size: 14 }),
944
+ icon: /* @__PURE__ */ jsx8(DeleteIcon, { size: 14 }),
932
945
  label: "Delete item",
933
946
  size: "sm",
934
947
  intent: "destructive",
@@ -978,7 +991,7 @@ function TrailingDropZone({
978
991
  };
979
992
  }, [index, onReorder, setDragState]);
980
993
  const isDropTarget = dragState.targetId === trailingId && dragState.sourceId !== null;
981
- return /* @__PURE__ */ jsx6(
994
+ return /* @__PURE__ */ jsx8(
982
995
  "div",
983
996
  {
984
997
  ref,
@@ -988,9 +1001,9 @@ function TrailingDropZone({
988
1001
  }
989
1002
 
990
1003
  // src/components/sections/IconList/IconListSettings.tsx
991
- import { useState as useState4 } from "react";
1004
+ import { useState as useState5 } from "react";
992
1005
  import { Check as Check3, X as X3 } from "lucide-react";
993
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1006
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
994
1007
  function IconListSettings({
995
1008
  icon: initialIcon,
996
1009
  showLabel: initialShowLabel,
@@ -998,15 +1011,15 @@ function IconListSettings({
998
1011
  dodont: initialDodont,
999
1012
  onChange
1000
1013
  }) {
1001
- const [icon, setIcon] = useState4(initialIcon);
1002
- const [showLabel, setShowLabel] = useState4(initialShowLabel);
1003
- const [stackText, setStackText] = useState4(initialStackText);
1004
- const [dodont, setDodont] = useState4(initialDodont);
1005
- const [pickerOpen, setPickerOpen] = useState4(false);
1014
+ const [icon, setIcon] = useState5(initialIcon);
1015
+ const [showLabel, setShowLabel] = useState5(initialShowLabel);
1016
+ const [stackText, setStackText] = useState5(initialStackText);
1017
+ const [dodont, setDodont] = useState5(initialDodont);
1018
+ const [pickerOpen, setPickerOpen] = useState5(false);
1006
1019
  const emit = (overrides) => onChange({ content: {}, options: { icon, showLabel, stackText, dodont, ...overrides } });
1007
1020
  const iconEntry = icon ? getIcon(icon) : null;
1008
1021
  const dodontActive = dodont === "do" || dodont === "dont";
1009
- const tile = (value, label, aria, glyph, tint) => /* @__PURE__ */ jsxs6(
1022
+ const tile = (value, label, aria, glyph, tint) => /* @__PURE__ */ jsxs7(
1010
1023
  "button",
1011
1024
  {
1012
1025
  type: "button",
@@ -1023,29 +1036,29 @@ function IconListSettings({
1023
1036
  },
1024
1037
  children: [
1025
1038
  glyph,
1026
- /* @__PURE__ */ jsx7("span", { className: "text-xs font-medium", children: label })
1039
+ /* @__PURE__ */ jsx9("span", { className: "text-xs font-medium", children: label })
1027
1040
  ]
1028
1041
  }
1029
1042
  );
1030
- return /* @__PURE__ */ jsxs6("div", { className: "space-y-4", children: [
1031
- /* @__PURE__ */ jsxs6("div", { children: [
1032
- /* @__PURE__ */ jsx7(FormLabel, { children: "Do / Don't list" }),
1033
- /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-3 gap-2", children: [
1043
+ return /* @__PURE__ */ jsxs7("div", { className: "space-y-4", children: [
1044
+ /* @__PURE__ */ jsxs7("div", { children: [
1045
+ /* @__PURE__ */ jsx9(FormLabel, { children: "Do / Don't list" }),
1046
+ /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-3 gap-2", children: [
1034
1047
  tile(
1035
1048
  void 0,
1036
1049
  "None",
1037
1050
  "No do/don't",
1038
- /* @__PURE__ */ jsx7("span", { className: "flex h-5 w-5 items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" }),
1051
+ /* @__PURE__ */ jsx9("span", { className: "flex h-5 w-5 items-center justify-center rounded-sm border border-dashed border-base-contrast-light/40" }),
1039
1052
  "text-base-contrast-light"
1040
1053
  ),
1041
- tile("do", "Do", "Do list", /* @__PURE__ */ jsx7(Check3, { size: 20 }), "text-green-600"),
1042
- tile("dont", "Don't", "Don't list", /* @__PURE__ */ jsx7(X3, { size: 20 }), "text-red-600")
1054
+ tile("do", "Do", "Do list", /* @__PURE__ */ jsx9(Check3, { size: 20 }), "text-green-600"),
1055
+ tile("dont", "Don't", "Don't list", /* @__PURE__ */ jsx9(X3, { size: 20 }), "text-red-600")
1043
1056
  ] })
1044
1057
  ] }),
1045
- /* @__PURE__ */ jsxs6("div", { className: "relative", children: [
1046
- /* @__PURE__ */ jsx7(FormLabel, { htmlFor: "icon-picker-btn", children: "Default Icon" }),
1047
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
1048
- /* @__PURE__ */ jsxs6(
1058
+ /* @__PURE__ */ jsxs7("div", { className: "relative", children: [
1059
+ /* @__PURE__ */ jsx9(FormLabel, { htmlFor: "icon-picker-btn", children: "Default Icon" }),
1060
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2", children: [
1061
+ /* @__PURE__ */ jsxs7(
1049
1062
  "button",
1050
1063
  {
1051
1064
  id: "icon-picker-btn",
@@ -1058,12 +1071,12 @@ function IconListSettings({
1058
1071
  if (!dodontActive) setPickerOpen((prev) => !prev);
1059
1072
  },
1060
1073
  children: [
1061
- iconEntry && /* @__PURE__ */ jsx7(iconEntry.icon, { size: 16 }),
1062
- /* @__PURE__ */ jsx7("span", { children: iconEntry?.label ?? "None" })
1074
+ iconEntry && /* @__PURE__ */ jsx9(iconEntry.icon, { size: 16 }),
1075
+ /* @__PURE__ */ jsx9("span", { children: iconEntry?.label ?? "None" })
1063
1076
  ]
1064
1077
  }
1065
1078
  ),
1066
- icon && !dodontActive && /* @__PURE__ */ jsx7(
1079
+ icon && !dodontActive && /* @__PURE__ */ jsx9(
1067
1080
  "button",
1068
1081
  {
1069
1082
  className: "cursor-pointer text-xs text-base-contrast-light hover:text-base-contrast",
@@ -1075,8 +1088,8 @@ function IconListSettings({
1075
1088
  }
1076
1089
  )
1077
1090
  ] }),
1078
- dodontActive && /* @__PURE__ */ jsx7("p", { className: "mt-1 text-xs text-base-contrast-light/70", children: "Whole-list Do/Don't overrides the default icon." }),
1079
- pickerOpen && !dodontActive && /* @__PURE__ */ jsx7("div", { className: "absolute top-full left-0 z-50 mt-1", children: /* @__PURE__ */ jsx7(
1091
+ dodontActive && /* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs text-base-contrast-light/70", children: "Whole-list Do/Don't overrides the default icon." }),
1092
+ pickerOpen && !dodontActive && /* @__PURE__ */ jsx9("div", { className: "absolute top-full left-0 z-50 mt-1", children: /* @__PURE__ */ jsx9(
1080
1093
  IconPicker,
1081
1094
  {
1082
1095
  selected: icon,
@@ -1091,7 +1104,7 @@ function IconListSettings({
1091
1104
  }
1092
1105
  ) })
1093
1106
  ] }),
1094
- /* @__PURE__ */ jsx7(
1107
+ /* @__PURE__ */ jsx9(
1095
1108
  Checkbox,
1096
1109
  {
1097
1110
  checked: showLabel,
@@ -1102,7 +1115,7 @@ function IconListSettings({
1102
1115
  label: "Show labels"
1103
1116
  }
1104
1117
  ),
1105
- showLabel && /* @__PURE__ */ jsx7(
1118
+ showLabel && /* @__PURE__ */ jsx9(
1106
1119
  Checkbox,
1107
1120
  {
1108
1121
  checked: stackText,
@@ -1117,7 +1130,7 @@ function IconListSettings({
1117
1130
  }
1118
1131
 
1119
1132
  // src/components/sections/IconList/index.tsx
1120
- import { jsx as jsx8 } from "react/jsx-runtime";
1133
+ import { jsx as jsx10 } from "react/jsx-runtime";
1121
1134
  var IconListItemSchema = z3.object({
1122
1135
  label: z3.string(),
1123
1136
  text: z3.string(),
@@ -1141,7 +1154,7 @@ var schema2 = z3.object({
1141
1154
  var doDontListPreset = {
1142
1155
  id: "do_dont_list",
1143
1156
  label: "Do / Don't list",
1144
- icon: /* @__PURE__ */ jsx8(Columns2, { size: 18 }),
1157
+ icon: /* @__PURE__ */ jsx10(Columns2, { size: 18 }),
1145
1158
  build: (newId) => ({
1146
1159
  type: "container",
1147
1160
  content: {
@@ -1158,10 +1171,10 @@ var IconList_default = defineSection({
1158
1171
  type: "icon_list",
1159
1172
  category: "brand-guide",
1160
1173
  label: "Icon List",
1161
- icon: /* @__PURE__ */ jsx8(List, { size: 18 }),
1174
+ icon: /* @__PURE__ */ jsx10(List, { size: 18 }),
1162
1175
  schema: schema2,
1163
1176
  authoringNote: "A list of labeled items, optionally with per-item icons and do/don't markers. Use for feature lists, guidelines, or do/don't guidance.",
1164
- component: ({ content, options, onChange }) => /* @__PURE__ */ jsx8(
1177
+ component: ({ content, options, onChange }) => /* @__PURE__ */ jsx10(
1165
1178
  IconList,
1166
1179
  {
1167
1180
  items: content.content.items,
@@ -1187,11 +1200,11 @@ import { Image as ImageIcon } from "lucide-react";
1187
1200
 
1188
1201
  // src/components/sections/DoDontMedia/DoDontMediaBlock.tsx
1189
1202
  import { Check as Check4, X as X4 } from "lucide-react";
1190
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
1203
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1191
1204
  function DoDontMediaBlock({ refValue, options, link, dodont, isEditMode, onRefChange }) {
1192
- return /* @__PURE__ */ jsxs7("div", { children: [
1193
- /* @__PURE__ */ jsx9("div", { className: "flex h-10 items-center justify-center pb-1", children: dodont === "do" ? /* @__PURE__ */ jsx9(Check4, { size: 28, className: "text-green-600" }) : /* @__PURE__ */ jsx9(X4, { size: 28, className: "text-red-600" }) }),
1194
- /* @__PURE__ */ jsx9(
1205
+ return /* @__PURE__ */ jsxs8("div", { children: [
1206
+ /* @__PURE__ */ jsx11("div", { className: "flex h-10 items-center justify-center pb-1", children: dodont === "do" ? /* @__PURE__ */ jsx11(Check4, { size: 28, className: "text-green-600" }) : /* @__PURE__ */ jsx11(X4, { size: 28, className: "text-red-600" }) }),
1207
+ /* @__PURE__ */ jsx11(
1195
1208
  MediaBlock,
1196
1209
  {
1197
1210
  refValue,
@@ -1205,7 +1218,7 @@ function DoDontMediaBlock({ refValue, options, link, dodont, isEditMode, onRefCh
1205
1218
  }
1206
1219
 
1207
1220
  // src/components/sections/DoDontMedia/index.tsx
1208
- import { jsx as jsx10 } from "react/jsx-runtime";
1221
+ import { jsx as jsx12 } from "react/jsx-runtime";
1209
1222
  var schema3 = z4.object({
1210
1223
  type: z4.literal("dodont_media"),
1211
1224
  content: z4.object({
@@ -1228,10 +1241,10 @@ var DoDontMedia_default = defineSection({
1228
1241
  type: "dodont_media",
1229
1242
  label: "Do / Don't Media",
1230
1243
  category: "brand-guide",
1231
- icon: /* @__PURE__ */ jsx10(ImageIcon, { size: 18 }),
1244
+ icon: /* @__PURE__ */ jsx12(ImageIcon, { size: 18 }),
1232
1245
  schema: schema3,
1233
1246
  authoringNote: "A single image or video tagged as a 'do' or 'don't' example. Use inside a Container to build side-by-side do/don't comparisons of visual usage.",
1234
- component: ({ content, options, onChange }) => /* @__PURE__ */ jsx10(
1247
+ component: ({ content, options, onChange }) => /* @__PURE__ */ jsx12(
1235
1248
  DoDontMediaBlock,
1236
1249
  {
1237
1250
  refValue: content.content.ref,