@burdenoff/website-sdk 2026.924.11 → 2026.924.12

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.
package/dist/index.js CHANGED
@@ -10844,6 +10844,24 @@ var EXPLORE_CSS = `
10844
10844
  mask-image: linear-gradient(to left, hsl(var(--foreground)) calc(100% - 2rem), hsl(var(--foreground) / 0));
10845
10845
  }
10846
10846
 
10847
+ /* The concept rail had the chip row's problem: the card at its edge was cut hard mid-word
10848
+ ("Apparatus Rig", "CONCEPT ILLUST") on a dozen sites. It fades an edge only while there are
10849
+ more cards beyond it \u2014 the same state that lights the arrow on that side \u2014 so a rail
10850
+ scrolled to its end shows its last card whole. Physical edges, because that state is
10851
+ physical: it is measured from the left in either reading direction. */
10852
+ .boff-explore-rail-fade-left {
10853
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
10854
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
10855
+ }
10856
+ .boff-explore-rail-fade-right {
10857
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10858
+ mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10859
+ }
10860
+ .boff-explore-rail-fade-left.boff-explore-rail-fade-right {
10861
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10862
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10863
+ }
10864
+
10847
10865
  @keyframes boff-explore-fade-in {
10848
10866
  from { opacity: 0; transform: translateY(2px); }
10849
10867
  to { opacity: 1; transform: none; }
@@ -11022,8 +11040,18 @@ var EXPLORE_CSS = `
11022
11040
  .boff-explore-scroll .boff-explore-capabilities { display: none; }
11023
11041
  }
11024
11042
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[1])}) {
11025
- /* Step 2. */
11043
+ /* Step 2. At a 4:1 crop the picture is ~44px tall, and the full-size caveat badge covered
11044
+ half of it \u2014 on ten sites, every card, whenever the consent banner was up. It stays (the
11045
+ picture is still a mockup), just smaller and tucked into the corner. */
11026
11046
  .boff-explore-scroll .boff-explore-concept-media { aspect-ratio: 4 / 1; }
11047
+ .boff-explore-scroll .boff-explore-concept-badge {
11048
+ top: 0.25rem;
11049
+ left: 0.25rem;
11050
+ padding: 0 0.3125rem;
11051
+ font-size: 0.5rem;
11052
+ line-height: 0.75rem;
11053
+ letter-spacing: 0.02em;
11054
+ }
11027
11055
  }
11028
11056
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[2])}) {
11029
11057
  /* Step 3. Title-only cards. The "concept illustration" caveat lives on the picture, so it
@@ -12182,6 +12210,7 @@ function ErrorBanner({
12182
12210
  }
12183
12211
  function PromptCarousel({
12184
12212
  strings: T,
12213
+ label,
12185
12214
  prompts,
12186
12215
  onPrompt,
12187
12216
  disabled
@@ -12213,7 +12242,7 @@ function PromptCarousel({
12213
12242
  return /* @__PURE__ */ jsxRuntime.jsxs(
12214
12243
  "div",
12215
12244
  {
12216
- className: "flex min-w-0 touch-pan-y items-center gap-1.5",
12245
+ className: "grid min-w-0 touch-pan-y grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-x-1.5 gap-y-1.5 sm:grid-cols-[auto_minmax(0,1fr)_auto]",
12217
12246
  role: "group",
12218
12247
  "aria-roledescription": "carousel",
12219
12248
  "aria-label": "Example questions",
@@ -12223,13 +12252,14 @@ function PromptCarousel({
12223
12252
  onBlurCapture: () => setPaused(false),
12224
12253
  ...swipe,
12225
12254
  children: [
12255
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "col-start-1 row-start-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground sm:col-span-3", children: label }),
12226
12256
  count > 1 ? /* @__PURE__ */ jsxRuntime.jsx(
12227
12257
  "button",
12228
12258
  {
12229
12259
  type: "button",
12230
12260
  "aria-label": T.prevSuggestion,
12231
12261
  onClick: () => go(-1),
12232
- className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
12262
+ className: "col-start-2 row-start-1 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:col-start-1 sm:row-start-2",
12233
12263
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
12234
12264
  }
12235
12265
  ) : null,
@@ -12243,18 +12273,21 @@ function PromptCarousel({
12243
12273
  "aria-label": `Ask: ${current}`,
12244
12274
  "aria-live": paused ? "polite" : "off",
12245
12275
  onClick: () => onPrompt(current),
12246
- className: "group flex min-w-0 flex-1 items-center gap-2 rounded-full border border-border bg-card px-4 py-2 max-sm:min-h-[3.625rem] max-sm:rounded-2xl text-left text-sm text-card-foreground shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
12276
+ className: cn(
12277
+ "group col-span-3 row-start-2 flex min-w-0 items-center gap-2 rounded-full border border-border bg-card px-4 py-2 max-sm:min-h-[3.625rem] max-sm:rounded-2xl text-left text-sm text-card-foreground shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
12278
+ count > 1 ? "sm:col-span-1 sm:col-start-2" : "sm:col-span-3"
12279
+ ),
12247
12280
  children: [
12248
12281
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-3.5 w-3.5 shrink-0 text-primary" }),
12249
12282
  /* @__PURE__ */ jsxRuntime.jsx(
12250
12283
  "span",
12251
12284
  {
12252
- className: "boff-explore-fade min-w-0 max-sm:line-clamp-2 sm:truncate",
12285
+ className: "boff-explore-fade min-w-0 max-sm:line-clamp-3 sm:truncate",
12253
12286
  children: current
12254
12287
  },
12255
12288
  current
12256
12289
  ),
12257
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "ml-auto h-3.5 w-3.5 shrink-0 rotate-45 text-muted-foreground transition-colors group-hover:text-primary" })
12290
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "ml-auto h-3.5 w-3.5 shrink-0 rotate-45 text-muted-foreground transition-colors group-hover:text-primary max-sm:hidden" })
12258
12291
  ]
12259
12292
  }
12260
12293
  ),
@@ -12264,7 +12297,7 @@ function PromptCarousel({
12264
12297
  type: "button",
12265
12298
  "aria-label": T.nextSuggestion,
12266
12299
  onClick: () => go(1),
12267
- className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
12300
+ className: "col-start-3 row-start-1 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:row-start-2",
12268
12301
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
12269
12302
  }
12270
12303
  ) : null
@@ -12363,8 +12396,11 @@ function ConceptStrip({
12363
12396
  const measureRail = React.useCallback(() => {
12364
12397
  const el = railRef.current;
12365
12398
  if (!el) return;
12366
- setCanLeft(el.scrollLeft > 1);
12367
- setCanRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
12399
+ const max = el.scrollWidth - el.clientWidth;
12400
+ const rtl = typeof getComputedStyle === "function" && getComputedStyle(el).direction === "rtl";
12401
+ const fromLeft = rtl ? max + el.scrollLeft : el.scrollLeft;
12402
+ setCanLeft(fromLeft > 1);
12403
+ setCanRight(fromLeft < max - 1);
12368
12404
  }, []);
12369
12405
  React.useEffect(() => {
12370
12406
  const el = railRef.current;
@@ -12433,7 +12469,11 @@ function ConceptStrip({
12433
12469
  onScroll: measureRail,
12434
12470
  "data-boff-explore": "concept-strip",
12435
12471
  "aria-label": T.conceptStripLabel,
12436
- className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
12472
+ className: cn(
12473
+ "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
12474
+ canLeft && "boff-explore-rail-fade-left",
12475
+ canRight && "boff-explore-rail-fade-right"
12476
+ ),
12437
12477
  children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
12438
12478
  "li",
12439
12479
  {
@@ -12473,7 +12513,7 @@ function ConceptStrip({
12473
12513
  "span",
12474
12514
  {
12475
12515
  "aria-hidden": "true",
12476
- className: "pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
12516
+ className: "boff-explore-concept-badge pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
12477
12517
  children: T.conceptIllustration
12478
12518
  }
12479
12519
  )
@@ -12628,18 +12668,16 @@ function WelcomeState({
12628
12668
  },
12629
12669
  i
12630
12670
  )) }),
12631
- prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: [
12632
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
12633
- /* @__PURE__ */ jsxRuntime.jsx(
12634
- PromptCarousel,
12635
- {
12636
- strings: T,
12637
- prompts,
12638
- onPrompt,
12639
- disabled
12640
- }
12641
- )
12642
- ] }) : null,
12671
+ prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
12672
+ PromptCarousel,
12673
+ {
12674
+ strings: T,
12675
+ label: T.tryAsking,
12676
+ prompts,
12677
+ onPrompt,
12678
+ disabled
12679
+ }
12680
+ ) }) : null,
12643
12681
  products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-4", children: [
12644
12682
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
12645
12683
  /* @__PURE__ */ jsxRuntime.jsx(