@burdenoff/website-sdk 2026.924.8 → 2026.924.9

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.d.mts CHANGED
@@ -770,7 +770,7 @@ declare function formatAnswerDate(value: string, locale: ExploreLocale): string;
770
770
 
771
771
  declare const buttonVariants: (props?: ({
772
772
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
773
- size?: "icon" | "default" | "sm" | "lg" | null | undefined;
773
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
774
774
  } & class_variance_authority_types.ClassProp) | undefined) => string;
775
775
  interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
776
776
  asChild?: boolean;
package/dist/index.d.ts CHANGED
@@ -770,7 +770,7 @@ declare function formatAnswerDate(value: string, locale: ExploreLocale): string;
770
770
 
771
771
  declare const buttonVariants: (props?: ({
772
772
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
773
- size?: "icon" | "default" | "sm" | "lg" | null | undefined;
773
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
774
774
  } & class_variance_authority_types.ClassProp) | undefined) => string;
775
775
  interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
776
776
  asChild?: boolean;
package/dist/index.js CHANGED
@@ -10707,6 +10707,9 @@ function toPayload(staged) {
10707
10707
  }));
10708
10708
  }
10709
10709
  var SHORT_VIEWPORT_PX = 420;
10710
+ var WELCOME_FIT_MIN_WIDTH_PX = 640;
10711
+ var WELCOME_FIT_STEP_PX = [700, 549, 505, 422];
10712
+ var toRem = (px) => `${px / 16}rem`;
10710
10713
  var EXPLORE_CSS = `
10711
10714
  @keyframes boff-explore-pulse {
10712
10715
  0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
@@ -10917,6 +10920,50 @@ var EXPLORE_CSS = `
10917
10920
  }
10918
10921
  }
10919
10922
 
10923
+ /* ---- Welcome fit ----------------------------------------------------------------------
10924
+ The ladder is documented at WELCOME_FIT_STEP_PX. The pane becomes a query container only
10925
+ in viewport mode and above the short-viewport threshold, because size containment sizes
10926
+ an element as if it had no content. That is safe exactly while the pane's height comes
10927
+ from its flex parent. In \`auto\` mode, and in the short-viewport fallback above, the pane
10928
+ grows WITH its content \u2014 and containment there would collapse it to zero height.
10929
+
10930
+ Selectors are two classes deep on purpose. The host sites' Tailwind puts \`py-5\`, \`mt-4\`
10931
+ and \`aspect-[2/1]\` on these same elements; unlayered SDK CSS already outranks a v4
10932
+ \`@layer utilities\` rule, and the extra class makes it outrank a v3 one too, whichever
10933
+ stylesheet happens to load last.
10934
+
10935
+ Nothing here hides the concept strip, and nothing here hides content the page does not
10936
+ also say elsewhere. Below the last step the pane scrolls, so every control stays
10937
+ reachable at every zoom level. */
10938
+ @media (min-height: ${SHORT_VIEWPORT_PX + 1}px) {
10939
+ .boff-explore-viewport .boff-explore-scroll {
10940
+ container: boff-explore-pane / size;
10941
+ }
10942
+ }
10943
+ @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[0])}) {
10944
+ /* Step 1. Each tile restates something the page already says in the badge, the intro or
10945
+ the composer footer, so this is the one block whose absence loses nothing. */
10946
+ .boff-explore-scroll .boff-explore-capabilities { display: none; }
10947
+ }
10948
+ @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[1])}) {
10949
+ /* Step 2. */
10950
+ .boff-explore-scroll .boff-explore-concept-media { aspect-ratio: 4 / 1; }
10951
+ }
10952
+ @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[2])}) {
10953
+ /* Step 3. Title-only cards. The "concept illustration" caveat lives on the picture, so it
10954
+ goes with it; the button's accessible name never depended on the image. Lazy images
10955
+ inside a display:none box are not fetched until there is room to show them. */
10956
+ .boff-explore-scroll .boff-explore-concept-media { display: none; }
10957
+ .boff-explore-scroll .boff-explore-aura { padding-top: 0.75rem; padding-bottom: 0.75rem; }
10958
+ .boff-explore-scroll .boff-explore-aura > :not(:first-child) { margin-top: 0.5rem; }
10959
+ }
10960
+ @container boff-explore-pane (min-width: ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) and (max-height: ${toRem(WELCOME_FIT_STEP_PX[3])}) {
10961
+ /* Step 4. The badge is the third statement on this screen that answers come from our
10962
+ documentation. The heading beneath it loses its top margin so the hero starts flush. */
10963
+ .boff-explore-scroll .boff-explore-hero-badge { display: none; }
10964
+ .boff-explore-scroll .boff-explore-hero-badge + h1 { margin-top: 0; }
10965
+ }
10966
+
10920
10967
  /* ---- Composer dock --------------------------------------------------------------------
10921
10968
  Three declarations, each the fallback for the one after it: a plain 1rem where \`max()\`
10922
10969
  is unknown, then the measured overlap of any FOREIGN fixed chrome sitting over the
@@ -12243,7 +12290,12 @@ function ConceptStrip({
12243
12290
  measureRail();
12244
12291
  const onResize = () => measureRail();
12245
12292
  window.addEventListener("resize", onResize);
12246
- return () => window.removeEventListener("resize", onResize);
12293
+ const observer = typeof ResizeObserver === "function" ? new ResizeObserver(onResize) : null;
12294
+ observer?.observe(el);
12295
+ return () => {
12296
+ window.removeEventListener("resize", onResize);
12297
+ observer?.disconnect();
12298
+ };
12247
12299
  }, [measureRail, highlights.length, failed]);
12248
12300
  const scrollRail = React.useCallback((direction) => {
12249
12301
  const el = railRef.current;
@@ -12323,7 +12375,7 @@ function ConceptStrip({
12323
12375
  ),
12324
12376
  className: "group flex w-40 flex-col overflow-hidden rounded-xl border border-border bg-card text-left 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 sm:w-44",
12325
12377
  children: [
12326
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[2/1] w-full overflow-hidden bg-muted", children: [
12378
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "boff-explore-concept-media relative block aspect-[2/1] w-full overflow-hidden bg-muted", children: [
12327
12379
  /* @__PURE__ */ jsxRuntime.jsx(
12328
12380
  "img",
12329
12381
  {
@@ -12475,14 +12527,14 @@ function WelcomeState({
12475
12527
  }) {
12476
12528
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-aura mx-auto my-auto w-full max-w-3xl px-4 py-4 sm:py-5", children: [
12477
12529
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise text-center", children: [
12478
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium text-muted-foreground", children: [
12530
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "boff-explore-hero-badge inline-flex items-center gap-1.5 rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium text-muted-foreground", children: [
12479
12531
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }),
12480
12532
  T.badge
12481
12533
  ] }),
12482
12534
  /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-2 text-balance break-words text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
12483
12535
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mt-2 max-w-2xl text-pretty text-sm leading-relaxed text-muted-foreground", children: body })
12484
12536
  ] }),
12485
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "boff-explore-rise boff-explore-rise-1 mt-4 grid grid-cols-3 gap-2 sm:gap-2.5", children: CAPABILITIES.map(({ icon: Icon, body: capBody }, i) => /* @__PURE__ */ jsxRuntime.jsxs(
12537
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "boff-explore-capabilities boff-explore-rise boff-explore-rise-1 mt-4 grid grid-cols-3 gap-2 sm:gap-2.5", children: CAPABILITIES.map(({ icon: Icon, body: capBody }, i) => /* @__PURE__ */ jsxRuntime.jsxs(
12486
12538
  "li",
12487
12539
  {
12488
12540
  className: "rounded-xl border border-border/70 bg-card/60 p-2.5 text-center transition-colors hover:border-border sm:p-2.5 sm:text-left",