@burdenoff/website-sdk 2026.924.11 → 2026.925.1

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.mjs CHANGED
@@ -8733,8 +8733,8 @@ var ECOSYSTEM_PRODUCTS = [
8733
8733
  name: "FluidGrids",
8734
8734
  websiteUrl: "https://www.fluidgrids.ai"
8735
8735
  },
8736
- // Botlit ships on botlit.ai — botlit.com does not resolve.
8737
- { slug: "botlit", name: "Botlit", websiteUrl: "https://www.botlit.ai" },
8736
+ // BotManor ships on botlit.ai — botlit.com does not resolve.
8737
+ { slug: "botlit", name: "BotManor", websiteUrl: "https://www.botlit.ai" },
8738
8738
  {
8739
8739
  slug: "bigconsole",
8740
8740
  name: "BigConsole",
@@ -10814,6 +10814,24 @@ var EXPLORE_CSS = `
10814
10814
  mask-image: linear-gradient(to left, hsl(var(--foreground)) calc(100% - 2rem), hsl(var(--foreground) / 0));
10815
10815
  }
10816
10816
 
10817
+ /* The concept rail had the chip row's problem: the card at its edge was cut hard mid-word
10818
+ ("Apparatus Rig", "CONCEPT ILLUST") on a dozen sites. It fades an edge only while there are
10819
+ more cards beyond it \u2014 the same state that lights the arrow on that side \u2014 so a rail
10820
+ scrolled to its end shows its last card whole. Physical edges, because that state is
10821
+ physical: it is measured from the left in either reading direction. */
10822
+ .boff-explore-rail-fade-left {
10823
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
10824
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem);
10825
+ }
10826
+ .boff-explore-rail-fade-right {
10827
+ -webkit-mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10828
+ mask-image: linear-gradient(to right, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10829
+ }
10830
+ .boff-explore-rail-fade-left.boff-explore-rail-fade-right {
10831
+ -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));
10832
+ mask-image: linear-gradient(to right, hsl(var(--foreground) / 0), hsl(var(--foreground)) 3rem, hsl(var(--foreground)) calc(100% - 3rem), hsl(var(--foreground) / 0));
10833
+ }
10834
+
10817
10835
  @keyframes boff-explore-fade-in {
10818
10836
  from { opacity: 0; transform: translateY(2px); }
10819
10837
  to { opacity: 1; transform: none; }
@@ -10992,8 +11010,18 @@ var EXPLORE_CSS = `
10992
11010
  .boff-explore-scroll .boff-explore-capabilities { display: none; }
10993
11011
  }
10994
11012
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[1])}) {
10995
- /* Step 2. */
11013
+ /* Step 2. At a 4:1 crop the picture is ~44px tall, and the full-size caveat badge covered
11014
+ half of it \u2014 on ten sites, every card, whenever the consent banner was up. It stays (the
11015
+ picture is still a mockup), just smaller and tucked into the corner. */
10996
11016
  .boff-explore-scroll .boff-explore-concept-media { aspect-ratio: 4 / 1; }
11017
+ .boff-explore-scroll .boff-explore-concept-badge {
11018
+ top: 0.25rem;
11019
+ left: 0.25rem;
11020
+ padding: 0 0.3125rem;
11021
+ font-size: 0.5rem;
11022
+ line-height: 0.75rem;
11023
+ letter-spacing: 0.02em;
11024
+ }
10997
11025
  }
10998
11026
  @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[2])}) {
10999
11027
  /* Step 3. Title-only cards. The "concept illustration" caveat lives on the picture, so it
@@ -12152,6 +12180,7 @@ function ErrorBanner({
12152
12180
  }
12153
12181
  function PromptCarousel({
12154
12182
  strings: T,
12183
+ label,
12155
12184
  prompts,
12156
12185
  onPrompt,
12157
12186
  disabled
@@ -12183,7 +12212,7 @@ function PromptCarousel({
12183
12212
  return /* @__PURE__ */ jsxs(
12184
12213
  "div",
12185
12214
  {
12186
- className: "flex min-w-0 touch-pan-y items-center gap-1.5",
12215
+ 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]",
12187
12216
  role: "group",
12188
12217
  "aria-roledescription": "carousel",
12189
12218
  "aria-label": "Example questions",
@@ -12193,13 +12222,14 @@ function PromptCarousel({
12193
12222
  onBlurCapture: () => setPaused(false),
12194
12223
  ...swipe,
12195
12224
  children: [
12225
+ /* @__PURE__ */ 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 }),
12196
12226
  count > 1 ? /* @__PURE__ */ jsx(
12197
12227
  "button",
12198
12228
  {
12199
12229
  type: "button",
12200
12230
  "aria-label": T.prevSuggestion,
12201
12231
  onClick: () => go(-1),
12202
- 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",
12232
+ 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",
12203
12233
  children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
12204
12234
  }
12205
12235
  ) : null,
@@ -12213,18 +12243,21 @@ function PromptCarousel({
12213
12243
  "aria-label": `Ask: ${current}`,
12214
12244
  "aria-live": paused ? "polite" : "off",
12215
12245
  onClick: () => onPrompt(current),
12216
- 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",
12246
+ className: cn(
12247
+ "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",
12248
+ count > 1 ? "sm:col-span-1 sm:col-start-2" : "sm:col-span-3"
12249
+ ),
12217
12250
  children: [
12218
12251
  /* @__PURE__ */ jsx(Sparkles, { className: "h-3.5 w-3.5 shrink-0 text-primary" }),
12219
12252
  /* @__PURE__ */ jsx(
12220
12253
  "span",
12221
12254
  {
12222
- className: "boff-explore-fade min-w-0 max-sm:line-clamp-2 sm:truncate",
12255
+ className: "boff-explore-fade min-w-0 max-sm:line-clamp-3 sm:truncate",
12223
12256
  children: current
12224
12257
  },
12225
12258
  current
12226
12259
  ),
12227
- /* @__PURE__ */ jsx(ArrowUp, { className: "ml-auto h-3.5 w-3.5 shrink-0 rotate-45 text-muted-foreground transition-colors group-hover:text-primary" })
12260
+ /* @__PURE__ */ jsx(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" })
12228
12261
  ]
12229
12262
  }
12230
12263
  ),
@@ -12234,7 +12267,7 @@ function PromptCarousel({
12234
12267
  type: "button",
12235
12268
  "aria-label": T.nextSuggestion,
12236
12269
  onClick: () => go(1),
12237
- 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",
12270
+ 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",
12238
12271
  children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
12239
12272
  }
12240
12273
  ) : null
@@ -12333,8 +12366,11 @@ function ConceptStrip({
12333
12366
  const measureRail = useCallback(() => {
12334
12367
  const el = railRef.current;
12335
12368
  if (!el) return;
12336
- setCanLeft(el.scrollLeft > 1);
12337
- setCanRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
12369
+ const max = el.scrollWidth - el.clientWidth;
12370
+ const rtl = typeof getComputedStyle === "function" && getComputedStyle(el).direction === "rtl";
12371
+ const fromLeft = rtl ? max + el.scrollLeft : el.scrollLeft;
12372
+ setCanLeft(fromLeft > 1);
12373
+ setCanRight(fromLeft < max - 1);
12338
12374
  }, []);
12339
12375
  useEffect(() => {
12340
12376
  const el = railRef.current;
@@ -12403,7 +12439,11 @@ function ConceptStrip({
12403
12439
  onScroll: measureRail,
12404
12440
  "data-boff-explore": "concept-strip",
12405
12441
  "aria-label": T.conceptStripLabel,
12406
- className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
12442
+ className: cn(
12443
+ "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1 sm:mx-10",
12444
+ canLeft && "boff-explore-rail-fade-left",
12445
+ canRight && "boff-explore-rail-fade-right"
12446
+ ),
12407
12447
  children: visible.map((highlight) => /* @__PURE__ */ jsx(
12408
12448
  "li",
12409
12449
  {
@@ -12443,7 +12483,7 @@ function ConceptStrip({
12443
12483
  "span",
12444
12484
  {
12445
12485
  "aria-hidden": "true",
12446
- 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",
12486
+ 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",
12447
12487
  children: T.conceptIllustration
12448
12488
  }
12449
12489
  )
@@ -12598,18 +12638,16 @@ function WelcomeState({
12598
12638
  },
12599
12639
  i
12600
12640
  )) }),
12601
- prompts.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: [
12602
- /* @__PURE__ */ jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
12603
- /* @__PURE__ */ jsx(
12604
- PromptCarousel,
12605
- {
12606
- strings: T,
12607
- prompts,
12608
- onPrompt,
12609
- disabled
12610
- }
12611
- )
12612
- ] }) : null,
12641
+ prompts.length > 0 ? /* @__PURE__ */ jsx("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: /* @__PURE__ */ jsx(
12642
+ PromptCarousel,
12643
+ {
12644
+ strings: T,
12645
+ label: T.tryAsking,
12646
+ prompts,
12647
+ onPrompt,
12648
+ disabled
12649
+ }
12650
+ ) }) : null,
12613
12651
  products.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-4", children: [
12614
12652
  /* @__PURE__ */ jsx("p", { className: "mb-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
12615
12653
  /* @__PURE__ */ jsx(