@omniharmonic/openspace-cli 0.1.5 → 0.1.6

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 (53) hide show
  1. package/dist/{agents-md-PVK5NBFF.js → agents-md-Q2TI3NHB.js} +2 -2
  2. package/dist/bin.js +2 -2
  3. package/dist/{chunk-RG7S2MUH.js → chunk-7SWL46LQ.js} +106 -10
  4. package/dist/chunk-7SWL46LQ.js.map +1 -0
  5. package/dist/{chunk-UQXJVMUV.js → chunk-BW42R6WD.js} +494 -57
  6. package/dist/chunk-BW42R6WD.js.map +1 -0
  7. package/dist/index.js +2 -2
  8. package/dist/templates/atelier/content/pages/home.json +11 -11
  9. package/dist/templates/beacon/content/collections/news/2026-09-12-heat-map-2026.mdoc +2 -2
  10. package/dist/templates/beacon/content/collections/news/2026-09-30-school-gardens-harvest.mdoc +2 -2
  11. package/dist/templates/beacon/content/collections/news/2026-10-14-planting-season-begins.mdoc +2 -2
  12. package/dist/templates/beacon/content/pages/home.json +1 -1
  13. package/dist/templates/beacon/media/LICENSES.json +33 -0
  14. package/dist/templates/commons/content/pages/home.json +4 -4
  15. package/dist/templates/commons/content/site.json +1 -1
  16. package/dist/templates/commons/media/LICENSES.json +11 -11
  17. package/dist/templates/darkroom/content/collections/work/after-hours.mdoc +7 -4
  18. package/dist/templates/darkroom/content/collections/work/faces-of-the-guild.mdoc +10 -7
  19. package/dist/templates/darkroom/content/collections/work/first-light.mdoc +34 -0
  20. package/dist/templates/darkroom/content/pages/home.json +27 -15
  21. package/dist/templates/darkroom/media/LICENSES.json +82 -49
  22. package/dist/templates/encore/content/pages/home.json +8 -4
  23. package/dist/templates/encore/media/LICENSES.json +11 -0
  24. package/dist/templates/field-notes/content/collections/essays/a-year-of-apples.mdoc +2 -2
  25. package/dist/templates/field-notes/content/collections/essays/in-praise-of-dirt-roads.mdoc +27 -0
  26. package/dist/templates/field-notes/content/collections/essays/learning-a-field.mdoc +2 -2
  27. package/dist/templates/field-notes/content/collections/essays/the-barn-that-leans.mdoc +29 -0
  28. package/dist/templates/field-notes/content/collections/essays/the-wall-builders.mdoc +2 -2
  29. package/dist/templates/field-notes/content/pages/home.json +3 -3
  30. package/dist/templates/field-notes/media/LICENSES.json +55 -33
  31. package/dist/templates/gather/content/pages/home.json +25 -11
  32. package/dist/templates/harbor/content/collections/news/2026-09-15-meet-the-repair-crew.mdoc +2 -2
  33. package/dist/templates/harbor/content/pages/get-involved.json +1 -1
  34. package/dist/templates/harbor/content/pages/home.json +9 -5
  35. package/dist/templates/harbor/content/pages/programs.json +2 -2
  36. package/dist/templates/harbor/media/LICENSES.json +22 -0
  37. package/dist/templates/hearth/content/pages/home.json +17 -22
  38. package/dist/templates/hearth/media/LICENSES.json +22 -11
  39. package/dist/templates/kiln/content/collections/classes/glaze-day-march.mdoc +2 -2
  40. package/dist/templates/kiln/content/collections/classes/hand-building-february.mdoc +2 -2
  41. package/dist/templates/kiln/content/collections/classes/wheel-weekend-january.mdoc +2 -2
  42. package/dist/templates/kiln/content/pages/home.json +5 -5
  43. package/dist/templates/kiln/media/LICENSES.json +55 -0
  44. package/dist/templates/link/content/pages/home.json +35 -31
  45. package/dist/templates/link/media/LICENSES.json +25 -25
  46. package/dist/templates/meadow/content/collections/workshops/breath-and-rest-workshop.mdoc +2 -2
  47. package/dist/templates/meadow/media/LICENSES.json +11 -0
  48. package/dist/templates/orbit/content/pages/home.json +25 -11
  49. package/package.json +7 -7
  50. package/dist/chunk-RG7S2MUH.js.map +0 -1
  51. package/dist/chunk-UQXJVMUV.js.map +0 -1
  52. package/dist/templates/darkroom/content/collections/work/dry-season.mdoc +0 -28
  53. /package/dist/{agents-md-PVK5NBFF.js.map → agents-md-Q2TI3NHB.js.map} +0 -0
@@ -24994,6 +24994,18 @@ function withBase(href, basePath = "") {
24994
24994
  if (href === base || href.startsWith(`${base}/`)) return href;
24995
24995
  return `${base}${href}`;
24996
24996
  }
24997
+ function withTrailingSlash(href) {
24998
+ if (!href.startsWith("/") || href.startsWith("//")) return href;
24999
+ const m = /^([^?#]*)(.*)$/.exec(href);
25000
+ const path = m?.[1] ?? href;
25001
+ const rest = m?.[2] ?? "";
25002
+ if (path.endsWith("/") || /\.[a-z0-9]+$/i.test(path.slice(path.lastIndexOf("/") + 1)))
25003
+ return href;
25004
+ return `${path}/${rest}`;
25005
+ }
25006
+ function internalHref(href, basePath = "") {
25007
+ return withBase(withTrailingSlash(href), basePath);
25008
+ }
24997
25009
  function sectionFragment(section2) {
24998
25010
  return section2.anchor ?? section2.id;
24999
25011
  }
@@ -25025,7 +25037,7 @@ function resolveLink(link2, opts = {}) {
25025
25037
  }
25026
25038
  case "url": {
25027
25039
  const external = /^https?:\/\//.test(link2.url);
25028
- return ok(external ? link2.url : withBase(link2.url, base), link2.newTab ?? false, external);
25040
+ return ok(external ? link2.url : internalHref(link2.url, base), link2.newTab ?? false, external);
25029
25041
  }
25030
25042
  case "email": {
25031
25043
  const subject = link2.subject ? `?subject=${encodeURIComponent(link2.subject)}` : "";
@@ -26996,7 +27008,7 @@ function wrapMark(mark, child, key, basePath) {
26996
27008
  return /* @__PURE__ */ jsx9(
26997
27009
  "a",
26998
27010
  {
26999
- href: withBase(href, basePath),
27011
+ href: internalHref(href, basePath),
27000
27012
  title,
27001
27013
  target: newTab ? "_blank" : void 0,
27002
27014
  rel: newTab ? "noopener" : void 0,
@@ -28175,6 +28187,10 @@ function useImageUrl() {
28175
28187
  height: image3.height
28176
28188
  }).src;
28177
28189
  }
28190
+ function balancedColumns(n, max) {
28191
+ if (n <= max) return Math.max(1, n);
28192
+ return Math.ceil(n / Math.ceil(n / max));
28193
+ }
28178
28194
  var sub = (id, part) => `${id}-${part}`;
28179
28195
  var unsplash = (id, alt, width, height) => ({
28180
28196
  src: `https://images.unsplash.com/photo-${id}?w=2400&q=80`,
@@ -29288,7 +29304,10 @@ var iconListBlock = defineBlock({
29288
29304
  "ul",
29289
29305
  {
29290
29306
  className: cx("os-iconlist", `os-iconlist--${variant}`),
29291
- style: { "--il-cols": fields.columns, "--il-tcols": Math.min(Number(fields.columns), 2) },
29307
+ style: {
29308
+ "--il-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29309
+ "--il-tcols": Math.min(Number(fields.columns), 2)
29310
+ },
29292
29311
  children: fields.items.map((item3, i) => (
29293
29312
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29294
29313
  /* @__PURE__ */ jsxs13("li", { className: "os-iconlist__item", children: [
@@ -29379,7 +29398,10 @@ var columnsBlock = defineBlock({
29379
29398
  "ol",
29380
29399
  {
29381
29400
  className: cx("os-columns", `os-columns--${variant}`),
29382
- style: { "--c-cols": fields.columns, "--c-tcols": Math.min(Number(fields.columns), 2) },
29401
+ style: {
29402
+ "--c-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29403
+ "--c-tcols": Math.min(Number(fields.columns), 2)
29404
+ },
29383
29405
  children: fields.items.map((item3, i) => (
29384
29406
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29385
29407
  /* @__PURE__ */ jsxs13("li", { className: "os-columns__item", children: [
@@ -29430,7 +29452,7 @@ var cardCss = `
29430
29452
  @container block (min-width:36rem){.os-cardblock--horizontal.has-image{grid-template-columns:minmax(0,2fr) minmax(0,3fr);align-items:center;gap:var(--os-space-sm)}}
29431
29453
  .os-cardblock--overlay{color:var(--os-color-neutral-50);overflow:hidden;border-radius:var(--os-image-radius)}
29432
29454
  .os-cardblock--overlay.has-image>.os-card__media{grid-area:1/1}
29433
- .os-cardblock--overlay.has-image>.os-cardblock__body{grid-area:1/1;align-self:end;z-index:2;padding:var(--os-space-xl) var(--os-space-sm) var(--os-space-sm);background:linear-gradient(to top,color-mix(in oklab,var(--os-color-neutral-950) 72%,transparent),transparent);border-radius:0 0 var(--os-image-radius) var(--os-image-radius)}
29455
+ .os-cardblock--overlay.has-image>.os-cardblock__body{grid-area:1/1;align-self:end;z-index:2;padding:var(--os-space-xl) var(--os-space-sm) var(--os-space-sm);background:linear-gradient(to top,color-mix(in oklab,var(--os-color-neutral-950) 80%,transparent),color-mix(in oklab,var(--os-color-neutral-950) 62%,transparent) 60%,transparent);border-radius:0 0 var(--os-image-radius) var(--os-image-radius)}
29434
29456
  .os-cardblock--overlay.has-image :is(.os-cardblock__title,.os-cardblock__eyebrow,.os-cardblock__text,.os-cardblock__text .os-rich,.os-cardblock__more){color:var(--os-color-neutral-50)}
29435
29457
  .os-cardblock--overlay.no-image{padding:var(--os-space-md);background:var(--os-color-accent);color:var(--os-color-accent-text)}
29436
29458
  .os-cardblock--overlay.no-image :is(.os-cardblock__title,.os-cardblock__eyebrow,.os-cardblock__text,.os-cardblock__text .os-rich,.os-cardblock__more,.os-card__icon){color:var(--os-color-accent-text)}
@@ -29937,11 +29959,18 @@ var summaryBlock = defineBlock({
29937
29959
  footer
29938
29960
  ] });
29939
29961
  }
29940
- return /* @__PURE__ */ jsxs15("div", { className: cx("os-summary", `os-summary--${variant}`), style: { "--s-cols": columns2 }, children: [
29941
- heading2,
29942
- /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
29943
- footer
29944
- ] });
29962
+ return /* @__PURE__ */ jsxs15(
29963
+ "div",
29964
+ {
29965
+ className: cx("os-summary", `os-summary--${variant}`),
29966
+ style: { "--s-cols": balancedColumns(items.length, columns2) },
29967
+ children: [
29968
+ heading2,
29969
+ /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
29970
+ footer
29971
+ ]
29972
+ }
29973
+ );
29945
29974
  }
29946
29975
  });
29947
29976
  function firstWeekday(locale) {
@@ -31917,7 +31946,10 @@ function Gallery({ id, fields, variant }) {
31917
31946
  "div",
31918
31947
  {
31919
31948
  className: cx("os-gallery", `os-gallery--${variant}`),
31920
- style: { "--g-cols": fields.columns, "--g-tcols": Math.min(Number(fields.columns), 3) },
31949
+ style: {
31950
+ "--g-cols": balancedColumns(fields.images.length, Number(fields.columns)),
31951
+ "--g-tcols": Math.min(Number(fields.columns), 3)
31952
+ },
31921
31953
  "data-os-behavior": behaviors || void 0,
31922
31954
  children: /* @__PURE__ */ jsx27("ul", { className: "os-gallery__items", "aria-label": label3, children: items })
31923
31955
  }
@@ -31945,7 +31977,7 @@ var galleryCss = `
31945
31977
  @container block (max-width:24rem){.os-gallery--masonry .os-gallery__items{columns:1}}
31946
31978
 
31947
31979
  .os-gallery--strips .os-gallery__items{--row-h:6.5rem;display:flex;flex-wrap:wrap;gap:var(--os-space-2xs)}
31948
- .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:999}
31980
+ .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:1.5}
31949
31981
  .os-gallery--strips .os-gallery__item{flex:var(--ar,1.5) 1 calc(var(--ar,1.5) * var(--row-h));min-width:0}
31950
31982
  .os-gallery--strips .os-img{aspect-ratio:var(--ar,1.5)}
31951
31983
  @container block (min-width:30rem){.os-gallery--strips .os-gallery__items{--row-h:10rem}}
@@ -32396,6 +32428,9 @@ var linkListCss = `
32396
32428
 
32397
32429
  // ../blocks/src/blocks/logo-strip.tsx
32398
32430
  import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
32431
+ function narrowColumns(n) {
32432
+ return n % 2 !== 0 && n % 3 === 0 ? 3 : Math.min(2, n);
32433
+ }
32399
32434
  var logoStripBlock = defineBlock({
32400
32435
  type: "logo-strip",
32401
32436
  version: 1,
@@ -32451,45 +32486,61 @@ var logoStripBlock = defineBlock({
32451
32486
  });
32452
32487
  const label3 = fields.label ? /* @__PURE__ */ jsx31("p", { className: "os-logos__label", children: fields.label }) : null;
32453
32488
  const cls = cx("os-logos", `os-logos--${variant}`, fields.monochrome && "is-mono");
32489
+ const n = fields.logos.length;
32490
+ const columns2 = {
32491
+ "--lo-s": narrowColumns(n),
32492
+ "--lo-m": balancedColumns(n, 4),
32493
+ "--lo-l": balancedColumns(n, 6)
32494
+ };
32454
32495
  if (variant === "marquee") {
32455
32496
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32456
32497
  label3,
32457
- /* @__PURE__ */ jsx31("div", { className: "os-marquee", "data-os-behavior": "marquee", "data-os-speed": "30", children: /* @__PURE__ */ jsx31("ul", { className: "os-marquee__track os-logos__list", "aria-label": fields.label || "Logos", children: items }) })
32498
+ /* @__PURE__ */ jsx31("div", { className: "os-marquee", "data-os-behavior": "marquee", "data-os-speed": "30", children: /* @__PURE__ */ jsx31(
32499
+ "ul",
32500
+ {
32501
+ className: "os-marquee__track os-logos__list",
32502
+ "aria-label": fields.label || "Logos",
32503
+ style: columns2,
32504
+ children: items
32505
+ }
32506
+ ) })
32458
32507
  ] });
32459
32508
  }
32460
32509
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32461
32510
  label3,
32462
- /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", children: items })
32511
+ /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", style: columns2, children: items })
32463
32512
  ] });
32464
32513
  }
32465
32514
  });
32466
32515
  var logoStripCss = `
32467
32516
  .os-logos{display:grid;gap:var(--os-space-sm)}
32468
32517
  .os-logos__label{font-family:var(--os-type-eyebrow-font-family);font-size:var(--os-type-eyebrow-font-size);letter-spacing:var(--os-type-eyebrow-letter-spacing);text-transform:var(--os-type-eyebrow-text-transform);font-weight:var(--os-type-eyebrow-font-weight);color:var(--os-color-text-muted);text-align:center}
32469
- .os-logos__list{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--os-space-sm) var(--os-space-lg);margin:0}
32470
- .os-logos__item{display:flex;align-items:center;justify-content:center;min-height:3rem}
32518
+ .os-logos__list{--lo-cols:var(--lo-s,2);display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--os-space-sm) 0;margin:0}
32519
+ @container block (min-width:40rem){.os-logos__list{--lo-cols:var(--lo-m,4)}}
32520
+ @container block (min-width:64rem){.os-logos__list{--lo-cols:var(--lo-l,6)}}
32521
+ .os-logos__item{display:flex;align-items:center;justify-content:center;min-height:3rem;flex:0 0 calc(100% / var(--lo-cols));min-width:0;padding-inline:calc(var(--os-space-sm) / 2);box-sizing:border-box}
32471
32522
  .os-logos__link{display:flex;color:inherit;text-decoration:none}
32472
32523
  .os-logos__img{width:auto;height:2.25rem;max-width:9rem;aspect-ratio:auto;background:none;border-radius:0;padding:0;clip-path:none}
32473
32524
  .os-logos__img>picture{background:none}
32474
32525
  .os-logos__img .os-img__img{width:auto;max-width:100%;height:100%;object-fit:contain;filter:none;mix-blend-mode:normal}
32475
32526
  .os-logos__img::after{display:none}
32476
- .os-logos__word{display:block;color:var(--os-color-heading);white-space:nowrap;line-height:1;font-size:1.25rem}
32527
+ .os-logos__word{display:block;color:var(--os-color-heading);line-height:1.1;font-size:1.25rem;text-align:center;text-wrap:balance;overflow-wrap:anywhere}
32477
32528
  .os-logos__word--0{font-family:var(--os-font-heading);font-weight:var(--os-font-weight-heading);font-style:italic;font-size:1.4rem}
32478
32529
  .os-logos__word--1{font-family:var(--os-font-body);font-weight:600;letter-spacing:0.18em;text-transform:uppercase;font-size:0.95rem}
32479
32530
  .os-logos__word--2{font-family:var(--os-font-heading);font-weight:400;letter-spacing:-0.01em;font-size:1.5rem}
32480
32531
  .os-logos__word--3{font-family:var(--os-font-body);font-weight:800;letter-spacing:-0.03em;font-size:1.3rem}
32481
- @container block (max-width:30rem){.os-logos__list{gap:var(--os-space-xs) var(--os-space-md)}.os-logos__word{font-size:1rem}.os-logos__word--0,.os-logos__word--2{font-size:1.15rem}.os-logos__word--1{font-size:0.8rem}.os-logos__img{height:1.75rem}}
32482
- .os-logos--grid .os-logos__word{white-space:normal;text-align:center;text-wrap:balance}
32532
+ @container block (max-width:30rem){.os-logos__list{row-gap:var(--os-space-xs)}.os-logos__item{padding-inline:calc(var(--os-space-xs) / 2)}.os-logos__word{font-size:1rem}.os-logos__word--0,.os-logos__word--2{font-size:1.15rem}.os-logos__word--1{font-size:0.8rem}.os-logos__img{height:1.75rem}}
32483
32533
  .os-logos.is-mono .os-logos__item{opacity:0.72;transition:opacity var(--os-motion-duration-base) var(--os-motion-ease)}
32484
32534
  .os-logos.is-mono .os-logos__img .os-img__img{filter:grayscale(1)}
32485
32535
  .os-logos.is-mono .os-logos__item:hover{opacity:1}
32486
32536
  .os-logos.is-mono .os-logos__item:hover .os-img__img{filter:none}
32487
- .os-logos--grid .os-logos__list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border-top:1px solid var(--os-color-border);border-inline-start:1px solid var(--os-color-border)}
32488
- @container block (min-width:40rem){.os-logos--grid .os-logos__list{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}}
32489
- .os-logos--grid .os-logos__item{min-height:6.5rem;padding:var(--os-space-sm);border-bottom:1px solid var(--os-color-border);border-inline-end:1px solid var(--os-color-border)}
32490
- .os-logos--marquee .os-marquee{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32491
- .os-logos--marquee .os-marquee__track{justify-content:center}
32492
- .os-logos--marquee .os-marquee.is-running .os-marquee__track{justify-content:flex-start;padding-inline-end:var(--os-space-lg)}
32537
+ .os-logos--grid .os-logos__list{gap:0;padding:1px}
32538
+ .os-logos--grid .os-logos__item{min-height:6.5rem;padding:var(--os-space-sm);box-shadow:1px 0 0 0 var(--os-color-border),0 1px 0 0 var(--os-color-border),1px 1px 0 0 var(--os-color-border),inset 1px 0 0 0 var(--os-color-border),inset 0 1px 0 0 var(--os-color-border)}
32539
+ .os-logos--marquee .os-marquee.is-running{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32540
+ .os-logos--marquee .os-marquee__track{justify-content:center;gap:var(--os-space-sm) 0}
32541
+ .os-logos--marquee .os-marquee.is-running .os-marquee__track{justify-content:flex-start;gap:var(--os-space-lg);padding-inline-end:var(--os-space-lg)}
32542
+ .os-logos--marquee .os-marquee.is-running .os-logos__item{flex:0 0 auto;padding-inline:0}
32543
+ .os-logos--marquee .os-marquee.is-running .os-logos__word{white-space:nowrap}
32493
32544
  `;
32494
32545
 
32495
32546
  // ../blocks/src/blocks/map.tsx
@@ -34412,10 +34463,13 @@ var tableBlock = defineBlock({
34412
34463
  const cols = fields.columns;
34413
34464
  const width = cols.length + 1;
34414
34465
  return /* @__PURE__ */ jsxs37("div", { className: cx("os-table", `os-table--${variant}`), children: [
34415
- /* @__PURE__ */ jsx43(
34466
+ /* @__PURE__ */ jsx43("p", { className: "os-table__hint", "aria-hidden": "true", children: "Swipe sideways to see every column \u2192" }),
34467
+ /* @__PURE__ */ jsx43("div", { className: "os-table__frame", children: /* @__PURE__ */ jsx43(
34416
34468
  "div",
34417
34469
  {
34418
34470
  className: "os-table__scroll",
34471
+ role: "group",
34472
+ "aria-label": `${fields.caption || "Comparison table"} (scrolls sideways on small screens)`,
34419
34473
  tabIndex: 0,
34420
34474
  children: /* @__PURE__ */ jsxs37("table", { className: "os-table__table", style: { "--cols": cols.length }, children: [
34421
34475
  fields.caption ? /* @__PURE__ */ jsx43("caption", { className: "os-table__caption", children: fields.caption }) : null,
@@ -34455,7 +34509,7 @@ var tableBlock = defineBlock({
34455
34509
  ) })
34456
34510
  ] })
34457
34511
  }
34458
- ),
34512
+ ) }),
34459
34513
  fields.note ? /* @__PURE__ */ jsx43("p", { className: "os-table__note", children: fields.note }) : null
34460
34514
  ] });
34461
34515
  }
@@ -34464,6 +34518,13 @@ var tableCss = `
34464
34518
  .os-table{display:grid;gap:var(--os-space-xs);min-width:0}
34465
34519
  .os-table__scroll{overflow-x:auto;min-width:0;border-radius:var(--os-radius-card);overscroll-behavior-x:contain}
34466
34520
  .os-table__scroll:focus-visible{outline:2px solid var(--os-color-focus);outline-offset:2px}
34521
+ .os-table__frame{position:relative;min-width:0;timeline-scope:--os-table-x}
34522
+ .os-table__frame>.os-table__scroll{scroll-timeline:--os-table-x inline}
34523
+ .os-table__frame::after{content:"";position:absolute;inset-block:0;inset-inline-end:0;width:1.75rem;pointer-events:none;border-radius:0 var(--os-radius-card) var(--os-radius-card) 0;background:linear-gradient(to left,color-mix(in srgb,var(--os-color-heading) 18%,transparent),transparent);opacity:0}
34524
+ @supports (animation-timeline:scroll()){.os-table__frame::after{animation:os-table-cue linear both;animation-timeline:--os-table-x}}
34525
+ @keyframes os-table-cue{0%,90%{opacity:1}100%{opacity:0}}
34526
+ .os-table__hint{display:none;margin:0;font-size:var(--os-type-small-font-size);color:var(--os-color-text-muted)}
34527
+ @media (max-width:40em){.os-table__hint{display:block}}
34467
34528
  .os-table__table{width:100%;min-width:calc(10rem + var(--cols,3) * 7.5rem);border-collapse:collapse;font-variant-numeric:tabular-nums}
34468
34529
  .os-table__caption{caption-side:top;text-align:start;padding:0 0 var(--os-space-xs);color:var(--os-color-text-muted);font-size:var(--os-type-small-font-size)}
34469
34530
  .os-table th,.os-table td{padding:0.85em 1em;text-align:center;vertical-align:middle;border-bottom:1px solid var(--os-color-border)}
@@ -34658,7 +34719,10 @@ var teamBlock = defineBlock({
34658
34719
  "ul",
34659
34720
  {
34660
34721
  className: cx("os-team", `os-team--${variant}`),
34661
- style: { "--t-cols": fields.columns, "--t-tcols": Math.min(Number(fields.columns), 2) },
34722
+ style: {
34723
+ "--t-cols": balancedColumns(fields.people.length, Number(fields.columns)),
34724
+ "--t-tcols": Math.min(Number(fields.columns), 2)
34725
+ },
34662
34726
  children: fields.people.map((person2, i) => {
34663
34727
  const name = person2.link ? /* @__PURE__ */ jsx45(Link, { to: person2.link, className: "os-team__link", children: person2.name }) : person2.name;
34664
34728
  return (
@@ -34699,7 +34763,7 @@ var teamCss = `
34699
34763
  .os-team--list{grid-template-columns:minmax(0,1fr);gap:var(--os-space-md)}
34700
34764
  @container block (min-width:36rem){.os-team--list .os-team__person{grid-template-columns:minmax(0,12rem) minmax(0,1fr);gap:var(--os-space-md);align-items:start}}
34701
34765
  .os-team--list .os-team__person+.os-team__person{padding-top:var(--os-space-md);border-top:1px solid var(--os-color-border)}
34702
- .os-team--circles{grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));text-align:center}
34766
+ .os-team--circles{grid-template-columns:repeat(auto-fit,minmax(9rem,11rem));justify-content:center;text-align:center}
34703
34767
  .os-team--circles .os-team__photo{width:min(100%,9rem);margin-inline:auto}
34704
34768
  `;
34705
34769
 
@@ -35712,6 +35776,171 @@ var PHOTOS = {
35712
35776
  4683,
35713
35777
  "A city street at night strung with red lanterns"
35714
35778
  ),
35779
+ // people at work (portrait & editorial portfolios)
35780
+ bakerApron: p(
35781
+ "1496811425508-6d7ebb7ff32c",
35782
+ 4918,
35783
+ 3376,
35784
+ "A young woman in a white shirt, bow tie and brown apron looking into the camera"
35785
+ ),
35786
+ bakerOven: p(
35787
+ "1772758632331-56fcdb6fd45b",
35788
+ 5707,
35789
+ 3805,
35790
+ "A smiling baker in a hairnet sliding bread from a brick oven",
35791
+ [0.3, 0.35]
35792
+ ),
35793
+ bakerKitchen: p(
35794
+ "1783768204400-7e6f402f3738",
35795
+ 3011,
35796
+ 4517,
35797
+ "A black-and-white photo of a woman kneading dough at a kitchen table"
35798
+ ),
35799
+ shopkeeper: p(
35800
+ "1748640858029-53c840ef5a1b",
35801
+ 3685,
35802
+ 5528,
35803
+ "A shopkeeper resting his chin on his hand behind a counter of flatbreads",
35804
+ [0.55, 0.55]
35805
+ ),
35806
+ woodCarver: p(
35807
+ "1776728016975-45f2197c0d2a",
35808
+ 3598,
35809
+ 5397,
35810
+ "A black-and-white portrait of a bearded wood carver holding his tools and a figure",
35811
+ [0.5, 0.3]
35812
+ ),
35813
+ makerShop: p(
35814
+ "1713652425093-47778c267769",
35815
+ 5716,
35816
+ 4912,
35817
+ "An older craftsman with his arms crossed in a cluttered workshop"
35818
+ ),
35819
+ woodworker: p(
35820
+ "1631396327810-0299385c06bf",
35821
+ 4e3,
35822
+ 6e3,
35823
+ "A black-and-white photo of a woodworker shaping a block at his bench"
35824
+ ),
35825
+ workshopNight: p(
35826
+ "1660796334912-8ce8e9c2cff0",
35827
+ 5391,
35828
+ 3556,
35829
+ "A man working late at a bench in a dim workshop under a single lamp",
35830
+ [0.55, 0.5]
35831
+ ),
35832
+ treePlanting: p(
35833
+ "1598335624134-5bceb5de202d",
35834
+ 4480,
35835
+ 6720,
35836
+ "Neighbours kneeling to plant a young tree together"
35837
+ ),
35838
+ chardHarvest: p(
35839
+ "1529007328922-d323f83de273",
35840
+ 5760,
35841
+ 3840,
35842
+ "A child holding an armful of freshly picked chard"
35843
+ ),
35844
+ shadedStreet: p(
35845
+ "1790026988616-8a01ef4a6709",
35846
+ 3356,
35847
+ 5043,
35848
+ "A quiet street under a canopy of tall plane trees"
35849
+ ),
35850
+ synthStage: p(
35851
+ "1561447920-ee278fe828a2",
35852
+ 4852,
35853
+ 2393,
35854
+ "A keyboard player on a stage washed in violet haze",
35855
+ [0.42, 0.55]
35856
+ ),
35857
+ repairVolunteer: p(
35858
+ "1505798577917-a65157d3320a",
35859
+ 5472,
35860
+ 3648,
35861
+ "An older volunteer in a cap cutting trim with a miter saw indoors",
35862
+ [0.45, 0.5]
35863
+ ),
35864
+ pastaCutting: p(
35865
+ "1447279506476-3faec8071eee",
35866
+ 6e3,
35867
+ 4e3,
35868
+ "Floury hands lifting fresh ribbons of pasta from a cutter",
35869
+ [0.65, 0.45]
35870
+ ),
35871
+ pastaRagu: p(
35872
+ "1600803907087-f56d462fd26b",
35873
+ 4472,
35874
+ 7952,
35875
+ "A dark bowl of pasta with slow-cooked rag\xF9 and herbs",
35876
+ [0.5, 0.6]
35877
+ ),
35878
+ potterWheel: p(
35879
+ "1609881583302-61548332039c",
35880
+ 4932,
35881
+ 4865,
35882
+ "A potter in a clay-spattered apron throwing a pot on the wheel"
35883
+ ),
35884
+ greenwareShelves: p(
35885
+ "1610206349499-c932c3b3aacb",
35886
+ 4337,
35887
+ 2891,
35888
+ "Studio shelves stacked with cups and bowls waiting to be fired"
35889
+ ),
35890
+ wheelLesson: p(
35891
+ "1637548580984-10c48d61b168",
35892
+ 3264,
35893
+ 2448,
35894
+ "A teacher's hands guiding a student's on a spinning pottery wheel"
35895
+ ),
35896
+ potteryClass: p(
35897
+ "1682868067843-11fbc221174a",
35898
+ 2784,
35899
+ 4176,
35900
+ "Students hand-building pots around a table in a bright studio"
35901
+ ),
35902
+ glazePainting: p(
35903
+ "1657395348373-28a0cb49804b",
35904
+ 6e3,
35905
+ 4e3,
35906
+ "A brush painting a butterfly in glaze on a white plate"
35907
+ ),
35908
+ stoneWall: p(
35909
+ "1611950318733-51d05def21ee",
35910
+ 4032,
35911
+ 3024,
35912
+ "An old dry-stone wall in the woods under early snow"
35913
+ ),
35914
+ appleTree: p(
35915
+ "1789448720981-96879056796d",
35916
+ 12032,
35917
+ 8018,
35918
+ "A gnarled old apple tree in a grassy field, in black and white"
35919
+ ),
35920
+ hayField: p(
35921
+ "1676903761134-a7806cd2f26d",
35922
+ 3600,
35923
+ 2400,
35924
+ "Hay bales in a green field below a barn and a wooded hill in Vermont"
35925
+ ),
35926
+ oldBarn: p(
35927
+ "1743351831171-a4317f076b2f",
35928
+ 5370,
35929
+ 2679,
35930
+ "A weathered barn with a rusted roof against autumn hills"
35931
+ ),
35932
+ dirtRoad: p(
35933
+ "1670967595704-f5f38475bb01",
35934
+ 6e3,
35935
+ 4e3,
35936
+ "A dirt road running between fields and forest under a grey sky"
35937
+ ),
35938
+ autumnFarm: p(
35939
+ "1744488340684-2b86590c15dd",
35940
+ 4799,
35941
+ 2673,
35942
+ "A small farm with a barn among autumn trees below a mountain"
35943
+ ),
35715
35944
  dunes: p("1542401886-65d6c61db217", 5835, 3890, "Rippled orange sand dunes under a hazy sky"),
35716
35945
  canyon: p(
35717
35946
  "1509316785289-025f5b846b35",
@@ -36551,6 +36780,128 @@ var PHOTO_CREDITS = {
36551
36780
  "marckleen",
36552
36781
  "a-person-walking-down-a-street-with-red-decorations-e1f9yY-DzoY"
36553
36782
  ],
36783
+ "1496811425508-6d7ebb7ff32c": [
36784
+ "Steven Cleghorn",
36785
+ "buliamti",
36786
+ "woman-wearing-brown-apron-psomVjxL29Y"
36787
+ ],
36788
+ "1772758632331-56fcdb6fd45b": [
36789
+ "Yasin Onus",
36790
+ "yasinonus",
36791
+ "baker-smiling-while-preparing-food-in-a-brick-oven-yS8tQoatvmM"
36792
+ ],
36793
+ "1783768204400-7e6f402f3738": [
36794
+ "Lisa Marie Theck",
36795
+ "lisa_marie_theck",
36796
+ "a-woman-preparing-food-in-a-rustic-kitchen-JzKQSxf4-4Q"
36797
+ ],
36798
+ "1748640858029-53c840ef5a1b": [
36799
+ "Rawan Yasser",
36800
+ "rawanyasser",
36801
+ "a-man-leans-on-a-counter-in-his-shop-1rW3RIxLu7E"
36802
+ ],
36803
+ "1776728016975-45f2197c0d2a": [
36804
+ "Tim Mossholder",
36805
+ "timmossholder",
36806
+ "elderly-craftsman-with-beard-holding-carving-tools-and-figurine-E5SfRlzUh2Q"
36807
+ ],
36808
+ "1713652425093-47778c267769": [
36809
+ "Andrew Heald",
36810
+ "aheald25",
36811
+ "a-man-in-an-old-fashioned-shop-with-his-arms-crossed-WV6tnAij3rU"
36812
+ ],
36813
+ "1631396327810-0299385c06bf": [
36814
+ "Bailey Alexander",
36815
+ "baileyal3xander",
36816
+ "a-man-is-working-on-a-piece-of-wood-UJfNwtQ7zAs"
36817
+ ],
36818
+ "1660796334912-8ce8e9c2cff0": [
36819
+ "Alex Gruber",
36820
+ "alex_gruber",
36821
+ "a-man-working-in-a-shop-rgSLzr82Kd8"
36822
+ ],
36823
+ "1598335624134-5bceb5de202d": [
36824
+ "Eyoel Kahssay",
36825
+ "eyoelkahssay",
36826
+ "woman-and-child-planting-tree-FyCjvyPG9Pg"
36827
+ ],
36828
+ "1529007328922-d323f83de273": [
36829
+ "Johnny McClung",
36830
+ "johnnymcclung",
36831
+ "person-holding-bok-choy-0aC-3Gt7jF4"
36832
+ ],
36833
+ "1790026988616-8a01ef4a6709": [
36834
+ "Jakub Tomasik",
36835
+ "jakubeq",
36836
+ "street-lined-with-plane-trees-Az4s1u1pyLs"
36837
+ ],
36838
+ "1561447920-ee278fe828a2": ["dreokt", "dreokt", "man-playing-electronic-keyboard-h5DPNz9kMZA"],
36839
+ "1505798577917-a65157d3320a": [
36840
+ "Annie Gray",
36841
+ "anniegray",
36842
+ "man-standing-infront-of-miter-saw-WEWTGkPUVT0"
36843
+ ],
36844
+ "1447279506476-3faec8071eee": [
36845
+ "Jorge Zapata",
36846
+ "jorgezapatag",
36847
+ "person-sheeting-dough-4nXkhLCrkLo"
36848
+ ],
36849
+ "1600803907087-f56d462fd26b": [
36850
+ "Emanuel Ekstr\xF6m",
36851
+ "emanuelekstrom",
36852
+ "pasta-dish-on-white-ceramic-bowl-KJOUnsGXq58"
36853
+ ],
36854
+ "1609881583302-61548332039c": [
36855
+ "Earl Wilcox",
36856
+ "earl_plannerzone",
36857
+ "person-in-blue-denim-jeans-making-clay-pot-7ZK_CuHroq4"
36858
+ ],
36859
+ "1610206349499-c932c3b3aacb": [
36860
+ "Manki Kim",
36861
+ "kimdonkey",
36862
+ "white-ceramic-teacup-on-brown-wooden-shelf-ZOeyUJB6t_Y"
36863
+ ],
36864
+ "1637548580984-10c48d61b168": [
36865
+ "Lindsey Elsey",
36866
+ "artsmarts",
36867
+ "a-group-of-people-working-on-a-pottery-wheel-fmuykMXH-dY"
36868
+ ],
36869
+ "1682868067843-11fbc221174a": [
36870
+ "Sander Breneman",
36871
+ "brenesan",
36872
+ "a-group-of-women-sitting-at-a-table-working-on-pottery-kJiPUr1KQSE"
36873
+ ],
36874
+ "1657395348373-28a0cb49804b": ["Grant Durr", "grant_durr", "a-child-painting-a-bowl-GjpUt15XbPE"],
36875
+ "1611950318733-51d05def21ee": [
36876
+ "natalie bowers",
36877
+ "nbowers",
36878
+ "gray-rocks-on-brown-soil-khAcUpojwhA"
36879
+ ],
36880
+ "1789448720981-96879056796d": [
36881
+ "Julian Kraus",
36882
+ "juliankraus",
36883
+ "gnarled-apple-tree-in-grassy-field-b3pCgNT1fn0"
36884
+ ],
36885
+ "1676903761134-a7806cd2f26d": [
36886
+ "David Trinks",
36887
+ "dtrinksrph",
36888
+ "a-large-field-with-hay-bales-in-the-foreground-and-a-barn-in-the-Rf5SsbLmFmc"
36889
+ ],
36890
+ "1743351831171-a4317f076b2f": [
36891
+ "LXS Photography",
36892
+ "lxsphotography",
36893
+ "old-weathered-barn-against-autumn-foliage-i7jff9hPR-U"
36894
+ ],
36895
+ "1670967595704-f5f38475bb01": [
36896
+ "Giuli Canderle",
36897
+ "giulicanderle",
36898
+ "a-dirt-road-in-the-middle-of-a-forest-G2k-BQWJ3DM"
36899
+ ],
36900
+ "1744488340684-2b86590c15dd": [
36901
+ "LXS Photography",
36902
+ "lxsphotography",
36903
+ "autumn-farm-scene-with-a-barn-and-covered-bridge-1PnkD5YV6Sw"
36904
+ ],
36554
36905
  "1542401886-65d6c61db217": [
36555
36906
  "Wolfgang Hasselmann",
36556
36907
  "wolfgang_hasselmann",
@@ -38206,7 +38557,7 @@ var ctaPresets = [
38206
38557
  "Sort donations, drive deliveries or cook with us on Saturdays. Training and lunch are on us."
38207
38558
  )
38208
38559
  ],
38209
- { style: { colorTheme: c3.theme, padding: { d: "xl", m: "md" } } }
38560
+ { style: { colorTheme: raised(c3.theme), padding: { d: "xl", m: "md" } } }
38210
38561
  );
38211
38562
  const cta = button2("Sign up to volunteer", c3.primary);
38212
38563
  return {
@@ -38859,20 +39210,26 @@ var ctaMorePresets = [
38859
39210
  definePreset({
38860
39211
  category: "cta",
38861
39212
  name: "card-centered",
38862
- label: "Card on tinted band",
38863
- description: "A raised card with headline, text and two actions, centred on a tinted section.",
39213
+ label: "Centred with accent rule",
39214
+ description: "A short accent rule over a centred headline, a line of text and two actions, on a tinted band.",
38864
39215
  copy: [headline4, copy.body(6, 35)],
38865
39216
  defaultTheme: "light-accent",
38866
- tags: ["card", "centered", "panel"],
39217
+ tags: ["centered", "rule", "band"],
38867
39218
  links: { primary: "/signup", secondary: "/demo" },
38868
39219
  ai: {
38869
- purpose: "Frames the final ask as a distinct, tidy panel.",
39220
+ purpose: "A calm, centred final ask with everything \u2014 words and both actions \u2014 in one group.",
38870
39221
  whenToUse: "Software, courses and memberships.",
38871
39222
  avoid: CTA_AVOID2
38872
39223
  },
38873
39224
  make: (c3) => ({
38874
- layout: stack({ width: "content", gap: "lg" }),
39225
+ layout: stack({ width: "content", gap: "md" }),
39226
+ padding: { d: "2xl", m: "xl" },
38875
39227
  blocks: [
39228
+ make2(
39229
+ lineBlock,
39230
+ { thickness: "regular", length: "short", color: "accent" },
39231
+ { variant: "solid", style: { align: { d: "center", m: "center" } } }
39232
+ ),
38876
39233
  text2(
38877
39234
  [
38878
39235
  rt.h(2, "Try Frontdesk free for 30 days", "h2"),
@@ -38880,7 +39237,7 @@ var ctaMorePresets = [
38880
39237
  "Set up your booking page in an afternoon. No card needed, and we'll move your clients across for you."
38881
39238
  )
38882
39239
  ],
38883
- { align: "center", style: { ...panel("light", "xl"), border: "subtle" } }
39240
+ { align: "center" }
38884
39241
  ),
38885
39242
  button2("Start your free trial", c3.primary, {
38886
39243
  align: "center",
@@ -41615,7 +41972,7 @@ var featuresMorePresets = [
41615
41972
  "Materials \u2014 Solid wood, oiled not lacquered",
41616
41973
  "Oak and ash from managed forests, finished with oil you can renew yourself. Scratches sand out instead of chipping."
41617
41974
  );
41618
- const d = image2(photo2("stool", 640));
41975
+ const d = image2(photo2("woodworker", 640));
41619
41976
  const dt = row2(
41620
41977
  "Aftercare \u2014 We come back every year",
41621
41978
  "An annual visit to oil worktops, adjust hinges and fix anything that's bothering you, for as long as you own the kitchen."
@@ -42151,7 +42508,7 @@ var galleryPresets = [
42151
42508
  label: "Masonry wall",
42152
42509
  description: "Photos at their natural proportions in staggered columns.",
42153
42510
  copy: [headline9],
42154
- images: [{ slot: "photos", aspect: "original", count: 7 }],
42511
+ images: [{ slot: "photos", aspect: "original", count: 6 }],
42155
42512
  defaultTheme: "light",
42156
42513
  tags: ["masonry", "portfolio"],
42157
42514
  ai: {
@@ -42171,8 +42528,7 @@ var galleryPresets = [
42171
42528
  "portraitTheo",
42172
42529
  "weddingAisle",
42173
42530
  "portraitAna",
42174
- "friendsSunset",
42175
- "portraitSam"
42531
+ "friendsSunset"
42176
42532
  ],
42177
42533
  460
42178
42534
  ),
@@ -42502,7 +42858,7 @@ var galleryMorePresets = [
42502
42858
  layout: stack({ width: "full", gap: "lg" }),
42503
42859
  blocks: [
42504
42860
  heading("Around the lodge", { eyebrow: "Gallery" }),
42505
- gallery2([["canyon"], ["dunes"], ["valley"], ["mountainLake"], ["road"]], 900, {
42861
+ gallery2([["mountainLake"], ["lake"], ["valley"], ["cliffs"], ["hills"]], 900, {
42506
42862
  variant: "carousel",
42507
42863
  aspect: "3:2"
42508
42864
  })
@@ -43417,7 +43773,7 @@ var heroMorePresets = [
43417
43773
  second: { label: "Book a design visit", link: c3.secondary }
43418
43774
  });
43419
43775
  const a = image2(photo2("kitchen", 560));
43420
- const b = image2(photo2("stool", 360));
43776
+ const b = image2(photo2("woodworker", 360));
43421
43777
  const proof = stats([["212", "Kitchens fitted"]], {
43422
43778
  variant: "large",
43423
43779
  style: panel("dark-accent")
@@ -44872,19 +45228,19 @@ var teamPresets = [
44872
45228
  make: () => ({
44873
45229
  layout: stack({ gap: "xl" }),
44874
45230
  blocks: [
44875
- heading("The people in the kitchen", {
45231
+ heading("The people behind the work", {
44876
45232
  eyebrow: "Our team",
44877
- sub: "A small crew who've cooked together for years \u2014 and still argue about the best tomato."
45233
+ sub: "A small team who've worked together for years \u2014 and still care about every detail."
44878
45234
  }),
44879
45235
  make2(
44880
45236
  teamBlock,
44881
45237
  {
44882
45238
  columns: "4",
44883
45239
  people: [
44884
- person("Elena Ruiz", "Chef & owner", "portraitMaya"),
44885
- person("Sam Okoro", "Head of pastry", "portraitSam"),
44886
- person("Clara Jensen", "Front of house", "portraitClara"),
44887
- person("Theo Marsh", "Sommelier", "portraitTheo")
45240
+ person("Elena Ruiz", "Founder", "portraitMaya"),
45241
+ person("Sam Okoro", "Lead", "portraitSam"),
45242
+ person("Clara Jensen", "Client care", "portraitClara"),
45243
+ person("Theo Marsh", "Operations", "portraitTheo")
44888
45244
  ]
44889
45245
  },
44890
45246
  { variant: "grid" }
@@ -47501,7 +47857,7 @@ var servicesPresets = [
47501
47857
  linkLabel: "About planting"
47502
47858
  },
47503
47859
  {
47504
- image: photo2("porchHouse", 400, "4:5"),
47860
+ image: photo2("urbanGarden", 400, "4:5"),
47505
47861
  heading: "Full garden builds",
47506
47862
  body: rt.doc(
47507
47863
  rt.p(
@@ -48317,25 +48673,28 @@ var testimonialsPresets = [
48317
48673
  avoid: AVOID15
48318
48674
  },
48319
48675
  make: () => {
48320
- const h = heading("Kind words from our regulars", { eyebrow: "Reviews", align: "center" });
48676
+ const h = heading("Kind words from the people we work with", {
48677
+ eyebrow: "Reviews",
48678
+ align: "center"
48679
+ });
48321
48680
  const a = testimonial2(
48322
- "The sourdough is the best I've had outside San Francisco, and the staff remember my order.",
48681
+ "Clear, friendly and on time from the first email to the last detail. We felt looked after throughout.",
48323
48682
  "Marcus Webb",
48324
- "Regular since 2019",
48683
+ "Customer since 2019",
48325
48684
  "portraitDaniel",
48326
48685
  { rating: 5 }
48327
48686
  );
48328
48687
  const b = testimonial2(
48329
- "We ordered our wedding cake here and people are still talking about it a year later.",
48688
+ "They listened properly, explained every option and delivered exactly what we hoped for \u2014 a year later we still recommend them.",
48330
48689
  "Hana Okafor",
48331
- "Wedding cake, June",
48690
+ "First-time customer",
48332
48691
  "portraitAna",
48333
48692
  { rating: 5 }
48334
48693
  );
48335
48694
  const d = testimonial2(
48336
- "Saturday croissants have become a family ritual. Worth the queue, every single time.",
48695
+ "Easy to work with and genuinely kind. We have come back again and again, and so have our friends.",
48337
48696
  "Leo Brandt",
48338
- "Neighbour",
48697
+ "Returning customer",
48339
48698
  "portraitSam",
48340
48699
  { rating: 5 }
48341
48700
  );
@@ -49033,6 +49392,71 @@ function starterSection(label3, blocks2, look = {}) {
49033
49392
  };
49034
49393
  }
49035
49394
 
49395
+ // ../blocks/src/presets/sample.ts
49396
+ var SAMPLE_BLOCK_TYPES = /* @__PURE__ */ new Set([
49397
+ "testimonial",
49398
+ "quote",
49399
+ "quote-carousel",
49400
+ "team",
49401
+ "restaurant-menu",
49402
+ "stats",
49403
+ "pricing",
49404
+ "timeline",
49405
+ "contact-info",
49406
+ "table"
49407
+ ]);
49408
+ var NOT_TEXT = /^(?:src|url|href|link|id|type|variant|icon|level|size|aspect|network|day|opens|closes|currency|source|provider|mode|frequency|target|tileServer|headingLevel|placeholder|columns|separator|speed|color|shape|thickness|length|height|align|alignment|layout|fit|theme|kind|alt|style|interval|period)$/;
49409
+ function normalizeSampleText(s) {
49410
+ return s.normalize("NFKC").toLowerCase().replace(/\s+/g, " ").trim();
49411
+ }
49412
+ function specific(s) {
49413
+ const t = s.trim();
49414
+ if (t.length < 4) return false;
49415
+ if (/\d/.test(t) || t.includes("@")) return true;
49416
+ if (/\p{Lu}[\p{L}’'-]+[\s.,&]+(?:\p{Ll}{1,3}\s+)?\p{Lu}[\p{L}’'-]+/u.test(t)) return true;
49417
+ return t.split(/\s+/).length >= 6;
49418
+ }
49419
+ function sampleStringsOf(block2) {
49420
+ const out = [];
49421
+ const push = (s) => {
49422
+ if (specific(s)) out.push(normalizeSampleText(s));
49423
+ };
49424
+ const walk = (v2, key) => {
49425
+ if (typeof v2 === "string") {
49426
+ if (!key || !NOT_TEXT.test(key)) push(v2);
49427
+ } else if (Array.isArray(v2)) for (const x of v2) walk(x);
49428
+ else if (v2 && typeof v2 === "object") {
49429
+ const o = v2;
49430
+ if (o.type === "doc" && Array.isArray(o.content)) {
49431
+ for (const node2 of o.content)
49432
+ push(plainText({ type: "doc", content: [node2] }));
49433
+ return;
49434
+ }
49435
+ if (typeof o.src === "string") return;
49436
+ for (const [k, x] of Object.entries(o)) walk(x, k);
49437
+ }
49438
+ };
49439
+ walk(block2.fields);
49440
+ return out;
49441
+ }
49442
+ function sectionSampleStrings(section2) {
49443
+ const out = /* @__PURE__ */ new Set();
49444
+ for (const b of section2.blocks)
49445
+ if (SAMPLE_BLOCK_TYPES.has(b.type)) for (const s of sampleStringsOf(b)) out.add(s);
49446
+ return out;
49447
+ }
49448
+ function sampleMatches(section2, sample) {
49449
+ if (!sample.size) return [];
49450
+ const out = [];
49451
+ for (const b of section2.blocks) {
49452
+ if (b.hidden || !SAMPLE_BLOCK_TYPES.has(b.type)) continue;
49453
+ const found = [...new Set(sampleStringsOf(b).filter((s) => sample.has(s)))];
49454
+ if (found.length) out.push({ blockId: b.id, blockType: b.type, found });
49455
+ }
49456
+ return out;
49457
+ }
49458
+ var PLACEHOLDER_RE = /\[(?:placeholder|todo|tbd|tk|insert[^\]]*|your [^\]]*|add [^\]]*)\]|\blorem ipsum\b|\{\{[^}]*\}\}/i;
49459
+
49036
49460
  // ../blocks/src/presets/index.ts
49037
49461
  var sectionPresets = [
49038
49462
  ...heroPresets,
@@ -49100,6 +49524,16 @@ function presetSection(ref, colorTheme) {
49100
49524
  if (!preset || preset.target === "header") return void 0;
49101
49525
  return preset.build(colorTheme ? { colorTheme } : {});
49102
49526
  }
49527
+ var sampleCache = /* @__PURE__ */ new Map();
49528
+ function presetSampleStrings(id) {
49529
+ let set2 = sampleCache.get(id);
49530
+ if (!set2) {
49531
+ const preset = getPreset(id);
49532
+ set2 = preset && preset.target !== "header" ? sectionSampleStrings(preset.build()) : /* @__PURE__ */ new Set();
49533
+ sampleCache.set(id, set2);
49534
+ }
49535
+ return set2;
49536
+ }
49103
49537
 
49104
49538
  // ../blocks/src/index.ts
49105
49539
  var allBlocks = [
@@ -49332,10 +49766,13 @@ export {
49332
49766
  copyViolations,
49333
49767
  PRESET_CATEGORIES,
49334
49768
  starterRef,
49769
+ sampleMatches,
49770
+ PLACEHOLDER_RE,
49335
49771
  getPreset,
49336
49772
  presetsIn,
49337
49773
  presetCatalog,
49338
49774
  presetSection,
49775
+ presetSampleStrings,
49339
49776
  registerAll,
49340
49777
  blocksRegistry,
49341
49778
  generateAgentsMd
@@ -49443,4 +49880,4 @@ lucide/dist/esm/lucide.mjs:
49443
49880
  * See the LICENSE file in the root directory of this source tree.
49444
49881
  *)
49445
49882
  */
49446
- //# sourceMappingURL=chunk-UQXJVMUV.js.map
49883
+ //# sourceMappingURL=chunk-BW42R6WD.js.map