@arbidocs/blocks 0.5.23 → 0.5.24

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 (83) hide show
  1. package/dist/{WorkspaceTableView-6JVHGDUB.cjs → WorkspaceTableView-GIDGNGBW.cjs} +6 -6
  2. package/dist/{WorkspaceTableView-6JVHGDUB.cjs.map → WorkspaceTableView-GIDGNGBW.cjs.map} +1 -1
  3. package/dist/{WorkspaceTableView-ECPHGWHF.js → WorkspaceTableView-S2PTTVHL.js} +4 -4
  4. package/dist/{WorkspaceTableView-ECPHGWHF.js.map → WorkspaceTableView-S2PTTVHL.js.map} +1 -1
  5. package/dist/{chunk-7DDMF3DZ.cjs → chunk-53T2FY4Z.cjs} +5 -31
  6. package/dist/chunk-53T2FY4Z.cjs.map +1 -0
  7. package/dist/chunk-5ZBXFHZW.js +434 -0
  8. package/dist/chunk-5ZBXFHZW.js.map +1 -0
  9. package/dist/{chunk-O4EQYPLO.cjs → chunk-C2SZQKX2.cjs} +169 -27
  10. package/dist/chunk-C2SZQKX2.cjs.map +1 -0
  11. package/dist/{chunk-RVKVGS72.js → chunk-FDUQQNDT.js} +2 -2
  12. package/dist/{chunk-RVKVGS72.js.map → chunk-FDUQQNDT.js.map} +1 -1
  13. package/dist/{chunk-TTJGCJWX.cjs → chunk-H3XAHVDT.cjs} +42 -2
  14. package/dist/chunk-H3XAHVDT.cjs.map +1 -0
  15. package/dist/{chunk-XL55UDLO.js → chunk-IJJKUTKM.js} +5 -30
  16. package/dist/chunk-IJJKUTKM.js.map +1 -0
  17. package/dist/{chunk-ZX663X3X.cjs → chunk-KNRAKOCO.cjs} +6 -428
  18. package/dist/chunk-KNRAKOCO.cjs.map +1 -0
  19. package/dist/chunk-KUQOHPKP.cjs +443 -0
  20. package/dist/chunk-KUQOHPKP.cjs.map +1 -0
  21. package/dist/{chunk-F2BYURQZ.cjs → chunk-LYF47OXX.cjs} +5 -5
  22. package/dist/{chunk-F2BYURQZ.cjs.map → chunk-LYF47OXX.cjs.map} +1 -1
  23. package/dist/{chunk-PZRTRYPD.js → chunk-MKTEVOC3.js} +44 -5
  24. package/dist/chunk-MKTEVOC3.js.map +1 -0
  25. package/dist/{chunk-6XW3CMU4.js → chunk-N3KNAQ55.js} +144 -4
  26. package/dist/chunk-N3KNAQ55.js.map +1 -0
  27. package/dist/{chunk-FZVAJFRH.cjs → chunk-RHKFCSFC.cjs} +2 -2
  28. package/dist/{chunk-FZVAJFRH.cjs.map → chunk-RHKFCSFC.cjs.map} +1 -1
  29. package/dist/{chunk-NVRJ6WTR.js → chunk-RTAYJUQM.js} +3 -3
  30. package/dist/{chunk-NVRJ6WTR.js.map → chunk-RTAYJUQM.js.map} +1 -1
  31. package/dist/{chunk-SLRVI2YU.js → chunk-X6U6L6BG.js} +29 -4
  32. package/dist/chunk-X6U6L6BG.js.map +1 -0
  33. package/dist/{chunk-SQ5F5BFW.cjs → chunk-XDU3HHUU.cjs} +32 -6
  34. package/dist/chunk-XDU3HHUU.cjs.map +1 -0
  35. package/dist/{chunk-SKVVOEMX.js → chunk-XXUPUXBF.js} +8 -423
  36. package/dist/chunk-XXUPUXBF.js.map +1 -0
  37. package/dist/connect/index.cjs +1039 -565
  38. package/dist/connect/index.cjs.map +1 -1
  39. package/dist/connect/index.js +649 -180
  40. package/dist/connect/index.js.map +1 -1
  41. package/dist/connection/auth/CompactLogin.d.ts +26 -0
  42. package/dist/connection/auth/ConnectedLoginPage.d.ts +9 -1
  43. package/dist/connection/auth/index.d.ts +3 -1
  44. package/dist/connection/auth/sso-popup.d.ts +13 -0
  45. package/dist/connection/auth/sso-sign-in.d.ts +38 -0
  46. package/dist/connection/auth/useLoginActions.d.ts +4 -2
  47. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +9 -1
  48. package/dist/connection/projects/ProjectsListPage.d.ts +40 -0
  49. package/dist/connection/projects/index.d.ts +1 -0
  50. package/dist/connection/settings-page/appearanceSection.d.ts +30 -0
  51. package/dist/connection/settings-page/index.d.ts +1 -0
  52. package/dist/index.cjs +162 -190
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +9 -48
  56. package/dist/index.js.map +1 -1
  57. package/dist/settings/AppearanceSettings.d.ts +1 -2
  58. package/dist/settings/index.cjs +153 -153
  59. package/dist/settings/index.d.ts +2 -1
  60. package/dist/settings/index.js +1 -1
  61. package/dist/site/index.cjs +82 -74
  62. package/dist/site/index.d.ts +2 -0
  63. package/dist/site/index.js +3 -3
  64. package/dist/studio/index.cjs +73 -73
  65. package/dist/studio/index.js +5 -5
  66. package/dist/theme/appearance.d.ts +47 -0
  67. package/dist/theme/fromCss.d.ts +33 -0
  68. package/node_modules/@arbidocs/coedit/package.json +1 -1
  69. package/package.json +5 -5
  70. package/dist/chunk-6XW3CMU4.js.map +0 -1
  71. package/dist/chunk-7DDMF3DZ.cjs.map +0 -1
  72. package/dist/chunk-AMTWY22T.js +0 -11
  73. package/dist/chunk-AMTWY22T.js.map +0 -1
  74. package/dist/chunk-O4EQYPLO.cjs.map +0 -1
  75. package/dist/chunk-PZRTRYPD.js.map +0 -1
  76. package/dist/chunk-SKVVOEMX.js.map +0 -1
  77. package/dist/chunk-SLRVI2YU.js.map +0 -1
  78. package/dist/chunk-SQ5F5BFW.cjs.map +0 -1
  79. package/dist/chunk-TTJGCJWX.cjs.map +0 -1
  80. package/dist/chunk-XL55UDLO.js.map +0 -1
  81. package/dist/chunk-ZU2B2RZK.cjs +0 -13
  82. package/dist/chunk-ZU2B2RZK.cjs.map +0 -1
  83. package/dist/chunk-ZX663X3X.cjs.map +0 -1
@@ -2,11 +2,11 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk7ZHPLTGK_cjs = require('../chunk-7ZHPLTGK.cjs');
5
- var chunk7DDMF3DZ_cjs = require('../chunk-7DDMF3DZ.cjs');
6
- var chunkZX663X3X_cjs = require('../chunk-ZX663X3X.cjs');
5
+ var chunk53T2FY4Z_cjs = require('../chunk-53T2FY4Z.cjs');
6
+ var chunkKNRAKOCO_cjs = require('../chunk-KNRAKOCO.cjs');
7
7
  var chunkELR74ME6_cjs = require('../chunk-ELR74ME6.cjs');
8
- require('../chunk-SQ5F5BFW.cjs');
9
- var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
8
+ var chunkXDU3HHUU_cjs = require('../chunk-XDU3HHUU.cjs');
9
+ var chunkKUQOHPKP_cjs = require('../chunk-KUQOHPKP.cjs');
10
10
  require('../chunk-VPPX5XUF.cjs');
11
11
  var chunkPCB2BPN3_cjs = require('../chunk-PCB2BPN3.cjs');
12
12
  require('../chunk-NWNVWO6L.cjs');
@@ -116,7 +116,7 @@ function LiveMetricInner({
116
116
  const query = source === "documents" ? docs : convos;
117
117
  const count = Array.isArray(query.data) ? query.data.length : 0;
118
118
  return /* @__PURE__ */ jsxRuntime.jsx(
119
- chunk7DDMF3DZ_cjs.MetricCard,
119
+ chunk53T2FY4Z_cjs.MetricCard,
120
120
  {
121
121
  label: label || METRIC_SOURCES[source].label,
122
122
  value: query.isLoading ? "\u2014" : String(count),
@@ -240,7 +240,7 @@ function createArbiMaterializer(arbi, opts = {}) {
240
240
  }
241
241
  function collectAssetRefs(node, acc) {
242
242
  if (typeof node === "string") {
243
- if (chunkZX663X3X_cjs.isAssetRef(node)) acc.add(node);
243
+ if (chunkKNRAKOCO_cjs.isAssetRef(node)) acc.add(node);
244
244
  return;
245
245
  }
246
246
  if (Array.isArray(node)) {
@@ -274,7 +274,7 @@ async function materializePageData(data, materialize) {
274
274
  const replacements = /* @__PURE__ */ new Map();
275
275
  await Promise.all(
276
276
  [...refs].map(async (ref) => {
277
- const src = await materialize(chunkZX663X3X_cjs.assetRefId(ref));
277
+ const src = await materialize(chunkKNRAKOCO_cjs.assetRefId(ref));
278
278
  if (src) replacements.set(ref, src);
279
279
  })
280
280
  );
@@ -380,7 +380,7 @@ function StudioEditor({
380
380
  radius: stored.radius ?? defaultTheme.radius,
381
381
  activePresetId: null
382
382
  });
383
- chunkZX663X3X_cjs.applyStoredTheme(themeBundle);
383
+ chunkKNRAKOCO_cjs.applyStoredTheme(themeBundle);
384
384
  })();
385
385
  return () => {
386
386
  cancelled = true;
@@ -486,7 +486,7 @@ function StudioEditor({
486
486
  "\u201D\u2026"
487
487
  ]
488
488
  }
489
- ) : /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.AssetResolverProvider, { render: AssetThumb, children: /* @__PURE__ */ jsxRuntime.jsx(
489
+ ) : /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.AssetResolverProvider, { render: AssetThumb, children: /* @__PURE__ */ jsxRuntime.jsx(
490
490
  puck.Puck,
491
491
  {
492
492
  config,
@@ -504,7 +504,7 @@ function StudioEditor({
504
504
  className: "w-80 shrink-0 border-l border-border",
505
505
  "data-testid": `${testIdPrefix}-theme-drawer`,
506
506
  children: /* @__PURE__ */ jsxRuntime.jsx(
507
- chunkZX663X3X_cjs.ThemeEditor,
507
+ chunkKUQOHPKP_cjs.ThemeEditor,
508
508
  {
509
509
  bundle: themeBundle,
510
510
  variant: "drawer",
@@ -546,7 +546,7 @@ function PageRenderer({
546
546
  const page = initialData ?? (await persistence.loadPublished(arbi, live, slug)).data ?? (await persistence.loadPage(arbi, live, slug)).data;
547
547
  if (cancelled) return;
548
548
  if (applyTheme) {
549
- chunkZX663X3X_cjs.applyThemeVars(
549
+ chunkKUQOHPKP_cjs.applyThemeVars(
550
550
  theme ? { ...defaultTheme, ...theme, colors: { ...defaultTheme.colors, ...theme.colors } } : defaultTheme
551
551
  );
552
552
  }
@@ -788,7 +788,7 @@ function AiTextField({
788
788
  setActive(true);
789
789
  await task.run(buildPrompt({ kind, label, current: value ?? "" }), docIds);
790
790
  };
791
- const inputTid = chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-field`, name);
791
+ const inputTid = chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-field`, name);
792
792
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "al-ai-field", children: [
793
793
  multiline ? /* @__PURE__ */ jsxRuntime.jsx(
794
794
  "textarea",
@@ -817,7 +817,7 @@ function AiTextField({
817
817
  className: "al-ai-field__btn",
818
818
  onClick: () => void write(),
819
819
  disabled: task.isRunning,
820
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-ai-write`, name),
820
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-ai-write`, name),
821
821
  title: "Draft this field with AI, grounded in the marketing workspace",
822
822
  children: [
823
823
  task.isRunning ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "size-3" }),
@@ -920,8 +920,8 @@ function ImageFieldControl({
920
920
  const arbi = react$1.useArbi();
921
921
  const gen = useImageGen();
922
922
  const queryClient = reactQuery.useQueryClient();
923
- const currentAssetImage = useAssetImage(chunkZX663X3X_cjs.isAssetRef(value) ? chunkZX663X3X_cjs.assetRefId(value) : "");
924
- const tp = (...q) => chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-image`, name, ...q);
923
+ const currentAssetImage = useAssetImage(chunkKNRAKOCO_cjs.isAssetRef(value) ? chunkKNRAKOCO_cjs.assetRefId(value) : "");
924
+ const tp = (...q) => chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-image`, name, ...q);
925
925
  const refreshAssets = (id) => react$1.refreshDocuments(queryClient, arbi, [id]);
926
926
  const { data: docs } = react$1.useDocuments(workspaceId);
927
927
  const imageDocs = react.useMemo(
@@ -955,7 +955,7 @@ function ImageFieldControl({
955
955
  const res = await arbi.documents.upload([file], { folder, workspaceExtId: workspaceId });
956
956
  const id = res.doc_ext_ids?.[0];
957
957
  if (id) {
958
- onChange(chunkZX663X3X_cjs.asAssetRef(id));
958
+ onChange(chunkKNRAKOCO_cjs.asAssetRef(id));
959
959
  void refreshAssets(id);
960
960
  }
961
961
  } finally {
@@ -973,7 +973,7 @@ function ImageFieldControl({
973
973
  if (!prompt.trim() || gen.isGenerating) return;
974
974
  const id = await gen.generate(prompt, refIds);
975
975
  if (id) {
976
- onChange(chunkZX663X3X_cjs.asAssetRef(id));
976
+ onChange(chunkKNRAKOCO_cjs.asAssetRef(id));
977
977
  setRefIds([]);
978
978
  void refreshAssets(id);
979
979
  }
@@ -988,7 +988,7 @@ function ImageFieldControl({
988
988
  const tabClass = (on) => `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${on ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:text-foreground"}`;
989
989
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", "data-testid": tp(), children: [
990
990
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
991
- /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.BlockImage, { src: value, aspect: "16:9", rounded: "md", testId: tp("preview") }),
991
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.BlockImage, { src: value, aspect: "16:9", rounded: "md", testId: tp("preview") }),
992
992
  currentAssetImage ? /* @__PURE__ */ jsxRuntime.jsxs(
993
993
  "button",
994
994
  {
@@ -1022,12 +1022,12 @@ function ImageFieldControl({
1022
1022
  imageDocs.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "col-span-3 py-3 text-center text-xs text-muted-foreground", children: "No image assets yet \u2014 upload or generate one." }),
1023
1023
  imageDocs.map((d) => {
1024
1024
  const thumb = thumbs?.[d.external_id];
1025
- const selected = value === chunkZX663X3X_cjs.asAssetRef(d.external_id);
1025
+ const selected = value === chunkKNRAKOCO_cjs.asAssetRef(d.external_id);
1026
1026
  return /* @__PURE__ */ jsxRuntime.jsx(
1027
1027
  "button",
1028
1028
  {
1029
1029
  type: "button",
1030
- onClick: () => onChange(chunkZX663X3X_cjs.asAssetRef(d.external_id)),
1030
+ onClick: () => onChange(chunkKNRAKOCO_cjs.asAssetRef(d.external_id)),
1031
1031
  className: `overflow-hidden rounded border ${selected ? "border-primary ring-1 ring-primary" : "border-border"}`,
1032
1032
  title: d.file_name ?? "",
1033
1033
  "data-testid": tp("asset", d.external_id),
@@ -1089,14 +1089,14 @@ function ImageFieldControl({
1089
1089
  "Reference images",
1090
1090
  refIds.length > 0 ? ` (${refIds.length})` : " (optional)"
1091
1091
  ] }),
1092
- chunkZX663X3X_cjs.isAssetRef(value) && /* @__PURE__ */ jsxRuntime.jsx(
1092
+ chunkKNRAKOCO_cjs.isAssetRef(value) && /* @__PURE__ */ jsxRuntime.jsx(
1093
1093
  "button",
1094
1094
  {
1095
1095
  type: "button",
1096
1096
  className: "text-xs font-medium text-primary hover:underline",
1097
- onClick: () => toggleRef(chunkZX663X3X_cjs.assetRefId(value)),
1097
+ onClick: () => toggleRef(chunkKNRAKOCO_cjs.assetRefId(value)),
1098
1098
  "data-testid": tp("vary-current"),
1099
- children: refIds.includes(chunkZX663X3X_cjs.assetRefId(value)) ? "Varying current" : "Vary current image"
1099
+ children: refIds.includes(chunkKNRAKOCO_cjs.assetRefId(value)) ? "Varying current" : "Vary current image"
1100
1100
  }
1101
1101
  )
1102
1102
  ] }),
@@ -1310,7 +1310,7 @@ function createBlockKit(ai, image, eyebrowClassName) {
1310
1310
  }),
1311
1311
  iconField: (label = "Icon") => ({ type: "select", label, options: ICON_OPTIONS }),
1312
1312
  resolveIcon: (name) => name ? iconMap[name] : void 0,
1313
- blockTestId: (id) => chunkZU2B2RZK_cjs.tid("arbi-block", id)
1313
+ blockTestId: (id) => chunkKUQOHPKP_cjs.tid("arbi-block", id)
1314
1314
  };
1315
1315
  }
1316
1316
  var emptySlot = [];
@@ -1375,7 +1375,7 @@ function createWebsiteBlocks(kit) {
1375
1375
  render: ({ id, count, gap, col1, col2, col3, col4 }) => {
1376
1376
  const n = Number(count) || 3;
1377
1377
  const columns = [col1, col2, col3, col4].slice(0, n).map(renderSlot);
1378
- return /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Columns, { count: n, gap, columns, testId: blockTestId(id) });
1378
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Columns, { count: n, gap, columns, testId: blockTestId(id) });
1379
1379
  }
1380
1380
  };
1381
1381
  const SpacerBlock = {
@@ -1393,7 +1393,7 @@ function createWebsiteBlocks(kit) {
1393
1393
  }
1394
1394
  },
1395
1395
  defaultProps: { size: "md" },
1396
- render: ({ id, size }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Spacer, { size, testId: blockTestId(id) })
1396
+ render: ({ id, size }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Spacer, { size, testId: blockTestId(id) })
1397
1397
  };
1398
1398
  const ContainerBlock = {
1399
1399
  label: "Container",
@@ -1421,7 +1421,7 @@ function createWebsiteBlocks(kit) {
1421
1421
  children: { type: "slot" }
1422
1422
  },
1423
1423
  defaultProps: { width: "default", padding: "md", children: emptySlot },
1424
- render: ({ id, width, padding, children }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Container, { width, padding, testId: blockTestId(id), children: renderSlot(children) })
1424
+ render: ({ id, width, padding, children }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Container, { width, padding, testId: blockTestId(id), children: renderSlot(children) })
1425
1425
  };
1426
1426
  const HeroBlock = {
1427
1427
  label: "Hero",
@@ -1472,7 +1472,7 @@ function createWebsiteBlocks(kit) {
1472
1472
  backgroundImage,
1473
1473
  overlay
1474
1474
  }) => /* @__PURE__ */ jsxRuntime.jsx(
1475
- chunkZX663X3X_cjs.Hero,
1475
+ chunkKNRAKOCO_cjs.Hero,
1476
1476
  {
1477
1477
  eyebrow,
1478
1478
  title,
@@ -1544,7 +1544,7 @@ function createWebsiteBlocks(kit) {
1544
1544
  icon: resolveIcon(it.icon)
1545
1545
  })
1546
1546
  );
1547
- return /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.FeatureGrid, { columns, items: list, testId: blockTestId(id) });
1547
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.FeatureGrid, { columns, items: list, testId: blockTestId(id) });
1548
1548
  }
1549
1549
  };
1550
1550
  const StatGroupBlock = {
@@ -1569,7 +1569,7 @@ function createWebsiteBlocks(kit) {
1569
1569
  { value: "24/7", label: "Support" }
1570
1570
  ]
1571
1571
  },
1572
- render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunk7DDMF3DZ_cjs.StatGroup, { items, testId: blockTestId(id) })
1572
+ render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunk53T2FY4Z_cjs.StatGroup, { items, testId: blockTestId(id) })
1573
1573
  };
1574
1574
  const TestimonialBlock = {
1575
1575
  label: "Testimonial",
@@ -1586,7 +1586,7 @@ function createWebsiteBlocks(kit) {
1586
1586
  avatarUrl: ""
1587
1587
  },
1588
1588
  render: ({ id, quote, author, role, avatarUrl }) => /* @__PURE__ */ jsxRuntime.jsx(
1589
- chunkZX663X3X_cjs.Testimonial,
1589
+ chunkKNRAKOCO_cjs.Testimonial,
1590
1590
  {
1591
1591
  quote,
1592
1592
  author,
@@ -1615,7 +1615,7 @@ function createWebsiteBlocks(kit) {
1615
1615
  overlay: true
1616
1616
  },
1617
1617
  render: ({ id, title, subtitle, cta, tone, backgroundImage, overlay }) => /* @__PURE__ */ jsxRuntime.jsx(
1618
- chunkZX663X3X_cjs.CTABanner,
1618
+ chunkKNRAKOCO_cjs.CTABanner,
1619
1619
  {
1620
1620
  title,
1621
1621
  subtitle,
@@ -1647,7 +1647,7 @@ function createWebsiteBlocks(kit) {
1647
1647
  { label: "Umbrella" }
1648
1648
  ]
1649
1649
  },
1650
- render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.LogoCloud, { items, testId: blockTestId(id) })
1650
+ render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.LogoCloud, { items, testId: blockTestId(id) })
1651
1651
  };
1652
1652
  const FAQBlock = {
1653
1653
  label: "FAQ",
@@ -1679,7 +1679,7 @@ function createWebsiteBlocks(kit) {
1679
1679
  }
1680
1680
  ]
1681
1681
  },
1682
- render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.FAQ, { items, testId: blockTestId(id) })
1682
+ render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.FAQ, { items, testId: blockTestId(id) })
1683
1683
  };
1684
1684
  const TimelineBlockConfig = {
1685
1685
  label: "Timeline",
@@ -1754,7 +1754,7 @@ function createWebsiteBlocks(kit) {
1754
1754
  defaultProps: {
1755
1755
  content: "## About us\n\nWe build tools that help teams do their best work. Our platform combines **power** and _simplicity_ so you can focus on what matters.\n\n- Fast to learn\n- Easy to scale\n- Loved by teams"
1756
1756
  },
1757
- render: ({ id, content }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.RichTextBlock, { content, testId: blockTestId(id) })
1757
+ render: ({ id, content }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.RichTextBlock, { content, testId: blockTestId(id) })
1758
1758
  };
1759
1759
  const CalloutBlock = {
1760
1760
  label: "Callout",
@@ -1808,7 +1808,7 @@ function createWebsiteBlocks(kit) {
1808
1808
  },
1809
1809
  defaultProps: { src: "", alt: "Image", aspect: "16:9", rounded: "lg", framed: false },
1810
1810
  render: ({ id, src, alt, aspect, rounded, framed }) => /* @__PURE__ */ jsxRuntime.jsx(
1811
- chunkZX663X3X_cjs.BlockImage,
1811
+ chunkKNRAKOCO_cjs.BlockImage,
1812
1812
  {
1813
1813
  src,
1814
1814
  alt,
@@ -1836,7 +1836,7 @@ function createWebsiteBlocks(kit) {
1836
1836
  }
1837
1837
  },
1838
1838
  defaultProps: { src: "", name: "Jane Doe", size: "md" },
1839
- render: ({ id, src, name, size }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.AvatarBlock, { src, name, size, testId: blockTestId(id) })
1839
+ render: ({ id, src, name, size }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.AvatarBlock, { src, name, size, testId: blockTestId(id) })
1840
1840
  };
1841
1841
  const NavbarBlock = {
1842
1842
  label: "Navbar",
@@ -1864,7 +1864,7 @@ function createWebsiteBlocks(kit) {
1864
1864
  ],
1865
1865
  cta: { label: "Sign up", href: "#" }
1866
1866
  },
1867
- render: ({ id, brand, links, cta }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Navbar, { brand, links, cta, testId: blockTestId(id) })
1867
+ render: ({ id, brand, links, cta }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Navbar, { brand, links, cta, testId: blockTestId(id) })
1868
1868
  };
1869
1869
  const FooterBlock = {
1870
1870
  label: "Footer",
@@ -1923,7 +1923,7 @@ function createWebsiteBlocks(kit) {
1923
1923
  ],
1924
1924
  copyright: "\xA9 2026 Acme, Inc. All rights reserved."
1925
1925
  },
1926
- render: ({ id, columns, copyright }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Footer, { columns, copyright, testId: blockTestId(id) })
1926
+ render: ({ id, columns, copyright }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Footer, { columns, copyright, testId: blockTestId(id) })
1927
1927
  };
1928
1928
  const ListBlockConfig = {
1929
1929
  label: "List",
@@ -1941,7 +1941,7 @@ function createWebsiteBlocks(kit) {
1941
1941
  ordered: false,
1942
1942
  items: [{ text: "First item" }, { text: "Second item" }, { text: "Third item" }]
1943
1943
  },
1944
- render: ({ id, ordered, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.ListBlock, { ordered, items, testId: blockTestId(id) })
1944
+ render: ({ id, ordered, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.ListBlock, { ordered, items, testId: blockTestId(id) })
1945
1945
  };
1946
1946
  return {
1947
1947
  Columns: ColumnsBlock,
@@ -2044,7 +2044,7 @@ function createSiteBlocks(kit) {
2044
2044
  ]
2045
2045
  },
2046
2046
  render: ({ id, plans }) => /* @__PURE__ */ jsxRuntime.jsx(
2047
- chunkZX663X3X_cjs.PricingTable,
2047
+ chunkKNRAKOCO_cjs.PricingTable,
2048
2048
  {
2049
2049
  plans: (plans ?? []).map(
2050
2050
  (p) => ({
@@ -2082,7 +2082,7 @@ function createSiteBlocks(kit) {
2082
2082
  { label: "FAQ", content: "Answers to common questions." }
2083
2083
  ]
2084
2084
  },
2085
- render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Tabs, { items, testId: blockTestId(id) })
2085
+ render: ({ id, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Tabs, { items, testId: blockTestId(id) })
2086
2086
  };
2087
2087
  const AccordionBlock = {
2088
2088
  label: "Accordion",
@@ -2106,7 +2106,7 @@ function createSiteBlocks(kit) {
2106
2106
  { title: "How does billing work?", content: "Monthly or annually, cancel anytime." }
2107
2107
  ]
2108
2108
  },
2109
- render: ({ id, allowMultiple, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Accordion, { allowMultiple, items, testId: blockTestId(id) })
2109
+ render: ({ id, allowMultiple, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Accordion, { allowMultiple, items, testId: blockTestId(id) })
2110
2110
  };
2111
2111
  const GalleryBlock = {
2112
2112
  label: "Gallery",
@@ -2142,7 +2142,7 @@ function createSiteBlocks(kit) {
2142
2142
  { src: "", alt: "Image three", caption: "" }
2143
2143
  ]
2144
2144
  },
2145
- render: ({ id, columns, aspect, images }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Gallery, { columns, aspect, images, testId: blockTestId(id) })
2145
+ render: ({ id, columns, aspect, images }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Gallery, { columns, aspect, images, testId: blockTestId(id) })
2146
2146
  };
2147
2147
  const VideoBlock = {
2148
2148
  label: "Video",
@@ -2162,7 +2162,7 @@ function createSiteBlocks(kit) {
2162
2162
  },
2163
2163
  defaultProps: { url: "", title: "", aspect: "16:9", rounded: true },
2164
2164
  render: ({ id, url, title, aspect, rounded }) => /* @__PURE__ */ jsxRuntime.jsx(
2165
- chunkZX663X3X_cjs.VideoEmbed,
2165
+ chunkKNRAKOCO_cjs.VideoEmbed,
2166
2166
  {
2167
2167
  url,
2168
2168
  title,
@@ -2211,7 +2211,7 @@ function createSiteBlocks(kit) {
2211
2211
  ]
2212
2212
  },
2213
2213
  render: ({ id, submitLabel, action, successMessage, fields }) => /* @__PURE__ */ jsxRuntime.jsx(
2214
- chunkZX663X3X_cjs.ContactForm,
2214
+ chunkKNRAKOCO_cjs.ContactForm,
2215
2215
  {
2216
2216
  submitLabel,
2217
2217
  action: action || void 0,
@@ -2241,7 +2241,7 @@ function createSiteBlocks(kit) {
2241
2241
  cta: { label: "Read more", href: "#" },
2242
2242
  tone: "primary"
2243
2243
  },
2244
- render: ({ id, text, cta, tone }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Banner, { text, cta, tone, testId: blockTestId(id) })
2244
+ render: ({ id, text, cta, tone }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Banner, { text, cta, tone, testId: blockTestId(id) })
2245
2245
  };
2246
2246
  const MediaTextBlock = {
2247
2247
  label: "Media & text",
@@ -2269,7 +2269,7 @@ function createSiteBlocks(kit) {
2269
2269
  cta: { label: "Learn more", href: "#" }
2270
2270
  },
2271
2271
  render: ({ id, eyebrow, title, body, imageUrl, mediaSide, cta }) => /* @__PURE__ */ jsxRuntime.jsx(
2272
- chunkZX663X3X_cjs.MediaText,
2272
+ chunkKNRAKOCO_cjs.MediaText,
2273
2273
  {
2274
2274
  eyebrow,
2275
2275
  title,
@@ -2306,7 +2306,7 @@ function createSiteBlocks(kit) {
2306
2306
  { name: "Jordan Lee", role: "Lead Engineer", bio: "", avatarUrl: "" }
2307
2307
  ]
2308
2308
  },
2309
- render: ({ id, columns, members }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.TeamGrid, { columns, members, testId: blockTestId(id) })
2309
+ render: ({ id, columns, members }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.TeamGrid, { columns, members, testId: blockTestId(id) })
2310
2310
  };
2311
2311
  const StepsBlock = {
2312
2312
  label: "Steps",
@@ -2338,7 +2338,7 @@ function createSiteBlocks(kit) {
2338
2338
  { title: "Launch", description: "Go live and start seeing results." }
2339
2339
  ]
2340
2340
  },
2341
- render: ({ id, variant, steps }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.Steps, { variant, steps, testId: blockTestId(id) })
2341
+ render: ({ id, variant, steps }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.Steps, { variant, steps, testId: blockTestId(id) })
2342
2342
  };
2343
2343
  const TestimonialGridBlock = {
2344
2344
  label: "Testimonial grid",
@@ -2380,7 +2380,7 @@ function createSiteBlocks(kit) {
2380
2380
  }
2381
2381
  ]
2382
2382
  },
2383
- render: ({ id, columns, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkZX663X3X_cjs.TestimonialGrid, { columns, items, testId: blockTestId(id) })
2383
+ render: ({ id, columns, items }) => /* @__PURE__ */ jsxRuntime.jsx(chunkKNRAKOCO_cjs.TestimonialGrid, { columns, items, testId: blockTestId(id) })
2384
2384
  };
2385
2385
  return {
2386
2386
  Pricing: PricingBlock,
@@ -2424,7 +2424,7 @@ function createArbiBlocksConfig(opts = {}) {
2424
2424
  },
2425
2425
  defaultProps: { title: "Section title", align: "left", invert: false },
2426
2426
  render: ({ id, title, eyebrow, lead, align, invert }) => /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": blockTestId(id), children: /* @__PURE__ */ jsxRuntime.jsx(
2427
- chunkZX663X3X_cjs.SectionHeading,
2427
+ chunkKNRAKOCO_cjs.SectionHeading,
2428
2428
  {
2429
2429
  title,
2430
2430
  eyebrow,
@@ -2447,7 +2447,7 @@ function createArbiBlocksConfig(opts = {}) {
2447
2447
  },
2448
2448
  defaultProps: { title: "Page title", actions: emptySlot2 },
2449
2449
  render: ({ id, title, eyebrow, description, actions: Actions }) => /* @__PURE__ */ jsxRuntime.jsx(
2450
- chunk7DDMF3DZ_cjs.PageHeader,
2450
+ chunkXDU3HHUU_cjs.PageHeader,
2451
2451
  {
2452
2452
  title,
2453
2453
  eyebrow,
@@ -2514,7 +2514,7 @@ function createArbiBlocksConfig(opts = {}) {
2514
2514
  },
2515
2515
  defaultProps: { label: "Metric", value: "0", accent: "default" },
2516
2516
  render: ({ id, label, value, hint, accent, delta, icon }) => /* @__PURE__ */ jsxRuntime.jsx(
2517
- chunk7DDMF3DZ_cjs.MetricCard,
2517
+ chunk53T2FY4Z_cjs.MetricCard,
2518
2518
  {
2519
2519
  label,
2520
2520
  value,
@@ -2630,7 +2630,7 @@ function createArbiBlocksConfig(opts = {}) {
2630
2630
  field: col.field || `col-${index}`
2631
2631
  }));
2632
2632
  return /* @__PURE__ */ jsxRuntime.jsx(
2633
- chunk7DDMF3DZ_cjs.DataTableBlock,
2633
+ chunk53T2FY4Z_cjs.DataTableBlock,
2634
2634
  {
2635
2635
  columns: normalisedCols,
2636
2636
  rows: recordRows,
@@ -3018,7 +3018,7 @@ function ModuleManager({ store, testIdPrefix = "builder" }) {
3018
3018
  {
3019
3019
  variant: "elevated",
3020
3020
  className: "rounded-lg",
3021
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-modules-section`, group.section),
3021
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-modules-section`, group.section),
3022
3022
  children: [
3023
3023
  /* @__PURE__ */ jsxRuntime.jsx(ui.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.CardTitle, { className: "text-base", children: group.section }) }),
3024
3024
  /* @__PURE__ */ jsxRuntime.jsx(ui.CardContent, { className: "space-y-1.5", children: group.modules.map((m, idx) => {
@@ -3027,7 +3027,7 @@ function ModuleManager({ store, testIdPrefix = "builder" }) {
3027
3027
  "div",
3028
3028
  {
3029
3029
  className: "flex items-center gap-3 rounded-md border border-border/60 bg-card px-3 py-2",
3030
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-module`, m.id),
3030
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-module`, m.id),
3031
3031
  children: [
3032
3032
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
3033
3033
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3039,7 +3039,7 @@ function ModuleManager({ store, testIdPrefix = "builder" }) {
3039
3039
  disabled: idx === 0,
3040
3040
  onClick: () => move(m.id, "up"),
3041
3041
  "aria-label": `Move ${m.label} up`,
3042
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-module-up`, m.id),
3042
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-module-up`, m.id),
3043
3043
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "size-3.5" })
3044
3044
  }
3045
3045
  ),
@@ -3052,7 +3052,7 @@ function ModuleManager({ store, testIdPrefix = "builder" }) {
3052
3052
  disabled: idx === group.modules.length - 1,
3053
3053
  onClick: () => move(m.id, "down"),
3054
3054
  "aria-label": `Move ${m.label} down`,
3055
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-module-down`, m.id),
3055
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-module-down`, m.id),
3056
3056
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" })
3057
3057
  }
3058
3058
  )
@@ -3072,7 +3072,7 @@ function ModuleManager({ store, testIdPrefix = "builder" }) {
3072
3072
  checked: m.enabled,
3073
3073
  onCheckedChange: () => toggle2(m.id),
3074
3074
  "aria-label": `Enable ${m.label}`,
3075
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-module-toggle`, m.id)
3075
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-module-toggle`, m.id)
3076
3076
  }
3077
3077
  )
3078
3078
  ]
@@ -3104,7 +3104,7 @@ function ConfigModelBadge({ configId, testIdPrefix }) {
3104
3104
  ui.Badge,
3105
3105
  {
3106
3106
  variant: TIER_VARIANT[tier] ?? "secondary",
3107
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-agents-config-tier`, configId),
3107
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-agents-config-tier`, configId),
3108
3108
  children: [
3109
3109
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Cpu, { className: "size-3" }),
3110
3110
  " ",
@@ -3141,14 +3141,14 @@ function AgentsPanel({ store, testIdPrefix = "builder" }) {
3141
3141
  "label",
3142
3142
  {
3143
3143
  className: "flex cursor-pointer items-center gap-3 rounded-md border border-border/60 bg-card px-3 py-2",
3144
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-agents-config`, v.external_id),
3144
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-agents-config`, v.external_id),
3145
3145
  children: [
3146
3146
  /* @__PURE__ */ jsxRuntime.jsx(
3147
3147
  ui.Checkbox,
3148
3148
  {
3149
3149
  checked: configIds.includes(v.external_id),
3150
3150
  onCheckedChange: () => toggleConfig(v.external_id),
3151
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-agents-config-toggle`, v.external_id)
3151
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-agents-config-toggle`, v.external_id)
3152
3152
  }
3153
3153
  ),
3154
3154
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -3177,14 +3177,14 @@ function AgentsPanel({ store, testIdPrefix = "builder" }) {
3177
3177
  "label",
3178
3178
  {
3179
3179
  className: "flex cursor-pointer items-center gap-3 rounded-md border border-border/60 bg-card px-3 py-2",
3180
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-agents-agent`, a.external_id),
3180
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-agents-agent`, a.external_id),
3181
3181
  children: [
3182
3182
  /* @__PURE__ */ jsxRuntime.jsx(
3183
3183
  ui.Checkbox,
3184
3184
  {
3185
3185
  checked: agentIds.includes(a.external_id),
3186
3186
  onCheckedChange: () => toggleAgent(a.external_id),
3187
- "data-testid": chunkZU2B2RZK_cjs.tid(`${testIdPrefix}-agents-agent-toggle`, a.external_id)
3187
+ "data-testid": chunkKUQOHPKP_cjs.tid(`${testIdPrefix}-agents-agent-toggle`, a.external_id)
3188
3188
  }
3189
3189
  ),
3190
3190
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -3271,7 +3271,7 @@ function VerticalBuilder({
3271
3271
  ] })
3272
3272
  ] }),
3273
3273
  /* @__PURE__ */ jsxRuntime.jsx(ui.TabsContent, { value: "theme", children: /* @__PURE__ */ jsxRuntime.jsx(
3274
- chunkZX663X3X_cjs.ThemeEditor,
3274
+ chunkKUQOHPKP_cjs.ThemeEditor,
3275
3275
  {
3276
3276
  bundle: themeBundle,
3277
3277
  variant: "panel",
@@ -3297,31 +3297,31 @@ function VerticalBuilder({
3297
3297
 
3298
3298
  Object.defineProperty(exports, "ASSET_REF_PREFIX", {
3299
3299
  enumerable: true,
3300
- get: function () { return chunkZX663X3X_cjs.ASSET_REF_PREFIX; }
3300
+ get: function () { return chunkKNRAKOCO_cjs.ASSET_REF_PREFIX; }
3301
3301
  });
3302
3302
  Object.defineProperty(exports, "AssetResolverProvider", {
3303
3303
  enumerable: true,
3304
- get: function () { return chunkZX663X3X_cjs.AssetResolverProvider; }
3304
+ get: function () { return chunkKNRAKOCO_cjs.AssetResolverProvider; }
3305
3305
  });
3306
3306
  Object.defineProperty(exports, "asAssetRef", {
3307
3307
  enumerable: true,
3308
- get: function () { return chunkZX663X3X_cjs.asAssetRef; }
3308
+ get: function () { return chunkKNRAKOCO_cjs.asAssetRef; }
3309
3309
  });
3310
3310
  Object.defineProperty(exports, "assetRefId", {
3311
3311
  enumerable: true,
3312
- get: function () { return chunkZX663X3X_cjs.assetRefId; }
3312
+ get: function () { return chunkKNRAKOCO_cjs.assetRefId; }
3313
3313
  });
3314
3314
  Object.defineProperty(exports, "isAssetRef", {
3315
3315
  enumerable: true,
3316
- get: function () { return chunkZX663X3X_cjs.isAssetRef; }
3316
+ get: function () { return chunkKNRAKOCO_cjs.isAssetRef; }
3317
3317
  });
3318
3318
  Object.defineProperty(exports, "useAssetRenderer", {
3319
3319
  enumerable: true,
3320
- get: function () { return chunkZX663X3X_cjs.useAssetRenderer; }
3320
+ get: function () { return chunkKNRAKOCO_cjs.useAssetRenderer; }
3321
3321
  });
3322
3322
  Object.defineProperty(exports, "useAssetResolverActive", {
3323
3323
  enumerable: true,
3324
- get: function () { return chunkZX663X3X_cjs.useAssetResolverActive; }
3324
+ get: function () { return chunkKNRAKOCO_cjs.useAssetResolverActive; }
3325
3325
  });
3326
3326
  exports.AgentsPanel = AgentsPanel;
3327
3327
  exports.AssetThumb = AssetThumb;
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { useConnectedAiTask } from '../chunk-MUF3RFJZ.js';
3
- import { PageHeader, MetricCard, DataTableBlock, StatGroup } from '../chunk-XL55UDLO.js';
4
- import { assetRefId, applyStoredTheme, AssetResolverProvider, ThemeEditor, applyThemeVars, SectionHeading, PricingTable, Tabs as Tabs$1, Accordion, Gallery, VideoEmbed, ContactForm, Banner, MediaText, TeamGrid, Steps, TestimonialGrid, Columns, Spacer, Container, Hero, FeatureGrid, Testimonial, CTABanner, LogoCloud, FAQ, RichTextBlock, BlockImage, AvatarBlock, Navbar, Footer, ListBlock, isAssetRef, asAssetRef } from '../chunk-SKVVOEMX.js';
5
- export { ASSET_REF_PREFIX, AssetResolverProvider, asAssetRef, assetRefId, isAssetRef, useAssetRenderer, useAssetResolverActive } from '../chunk-SKVVOEMX.js';
3
+ import { MetricCard, DataTableBlock, StatGroup } from '../chunk-IJJKUTKM.js';
4
+ import { assetRefId, applyStoredTheme, AssetResolverProvider, SectionHeading, PricingTable, Tabs as Tabs$1, Accordion, Gallery, VideoEmbed, ContactForm, Banner, MediaText, TeamGrid, Steps, TestimonialGrid, Columns, Spacer, Container, Hero, FeatureGrid, Testimonial, CTABanner, LogoCloud, FAQ, RichTextBlock, BlockImage, AvatarBlock, Navbar, Footer, ListBlock, isAssetRef, asAssetRef } from '../chunk-XXUPUXBF.js';
5
+ export { ASSET_REF_PREFIX, AssetResolverProvider, asAssetRef, assetRefId, isAssetRef, useAssetRenderer, useAssetResolverActive } from '../chunk-XXUPUXBF.js';
6
6
  import { Timeline } from '../chunk-OVEQERPO.js';
7
- import '../chunk-SLRVI2YU.js';
8
- import { tid } from '../chunk-AMTWY22T.js';
7
+ import { PageHeader } from '../chunk-X6U6L6BG.js';
8
+ import { ThemeEditor, applyThemeVars, tid } from '../chunk-5ZBXFHZW.js';
9
9
  import '../chunk-4EZVCGRL.js';
10
10
  import { Callout } from '../chunk-UJE32SST.js';
11
11
  import '../chunk-NHZK64TQ.js';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The reader's appearance on this device: typeface, colour scheme and text size.
3
+ *
4
+ * Separate from {@link createThemeStore}. A theme bundle is the site's brand (a whole token set an
5
+ * author edits); this store only ever sets the two typography vars and the root font-size (inline
6
+ * on `<html>`, so they win over any `:root` block a `cssVars` theme emits) and toggles the `.dark`
7
+ * class (class-based dark mode). The faces come from `FONT_PAIRINGS`, so every site offers the
8
+ * same typography vocabulary.
9
+ *
10
+ * The text size sets the root font-size as a percentage of the browser's own default, so the
11
+ * reader's browser preference still compounds with it, and every rem-based size scales with it.
12
+ */
13
+ import { type StoreApi, type UseBoundStore } from 'zustand';
14
+ import { type FontPairing } from './fontPairings';
15
+ export type AppearanceColorScheme = 'light' | 'dark';
16
+ export type AppearanceTextSize = 'default' | 'large' | 'larger';
17
+ export interface AppearanceDefaults {
18
+ /** A `FONT_PAIRINGS` id; must match the faces the site's stylesheet paints first. */
19
+ pairingId: string;
20
+ colorScheme: AppearanceColorScheme;
21
+ textSize: AppearanceTextSize;
22
+ }
23
+ export interface AppearanceState extends AppearanceDefaults {
24
+ setPairing: (pairingId: string) => void;
25
+ setColorScheme: (scheme: AppearanceColorScheme) => void;
26
+ setTextSize: (size: AppearanceTextSize) => void;
27
+ reset: () => void;
28
+ }
29
+ export interface AppearanceStoreConfig {
30
+ /** localStorage key for persistence (namespaced per site). */
31
+ storageKey: string;
32
+ /** The site's shipped appearance. Default: light, default size; the pairing is required. */
33
+ defaults: Pick<AppearanceDefaults, 'pairingId'> & Partial<AppearanceDefaults>;
34
+ /** Typefaces offered in Settings (`FONT_PAIRINGS` ids); default: the settings' own spread. */
35
+ pairingIds?: readonly string[];
36
+ }
37
+ export interface AppearanceBundle {
38
+ useStore: UseBoundStore<StoreApi<AppearanceState>>;
39
+ defaults: AppearanceDefaults;
40
+ pairingIds?: readonly string[];
41
+ /** Resolve an id to a pairing, falling back to the default pairing for unknown ids. */
42
+ resolvePairing: (pairingId: string) => FontPairing;
43
+ /** Paint the stored appearance before the first render (safe at module scope). */
44
+ applyStored: () => void;
45
+ }
46
+ /** Build a site's appearance store. */
47
+ export declare function createAppearanceStore({ storageKey, defaults: given, pairingIds, }: AppearanceStoreConfig): AppearanceBundle;