@burdenoff/website-sdk 2026.923.1 → 2026.923.3

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
@@ -30,7 +30,7 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
30
30
  import { VariantProps } from 'class-variance-authority';
31
31
  import * as LabelPrimitive from '@radix-ui/react-label';
32
32
  export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from './product-card-CGxETsFa.mjs';
33
- export { EXPLORE_RECAPTCHA_ACTION, RecaptchaV3, cn, getRecaptchaV3Token, loadRecaptchaV3 } from './utils/index.mjs';
33
+ export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, RecaptchaV3, cn, getRecaptchaV3Token, isFooterlessPath, loadRecaptchaV3, normalizeRoutePath, shouldRenderSiteFooter } from './utils/index.mjs';
34
34
  import 'clsx';
35
35
 
36
36
  interface CareersSubmissionFormProps {
@@ -549,6 +549,9 @@ interface ExploreStrings {
549
549
  * because two phrasings for the same caveat read as two different caveats.
550
550
  */
551
551
  conceptIllustration: string;
552
+ /** Rail arrows on the concept strip — pointer devices only. */
553
+ conceptScrollPrev: string;
554
+ conceptScrollNext: string;
552
555
  opensInNewTab: string;
553
556
  /** Heading over the concept strip on the welcome screen. */
554
557
  conceptStripTitle: string;
@@ -735,7 +738,7 @@ declare function formatAnswerDate(value: string, locale: ExploreLocale): string;
735
738
 
736
739
  declare const buttonVariants: (props?: ({
737
740
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
738
- size?: "default" | "sm" | "lg" | "icon" | null | undefined;
741
+ size?: "icon" | "default" | "sm" | "lg" | null | undefined;
739
742
  } & class_variance_authority_types.ClassProp) | undefined) => string;
740
743
  interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
741
744
  asChild?: boolean;
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
30
30
  import { VariantProps } from 'class-variance-authority';
31
31
  import * as LabelPrimitive from '@radix-ui/react-label';
32
32
  export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from './product-card-CGxETsFa.js';
33
- export { EXPLORE_RECAPTCHA_ACTION, RecaptchaV3, cn, getRecaptchaV3Token, loadRecaptchaV3 } from './utils/index.js';
33
+ export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, RecaptchaV3, cn, getRecaptchaV3Token, isFooterlessPath, loadRecaptchaV3, normalizeRoutePath, shouldRenderSiteFooter } from './utils/index.js';
34
34
  import 'clsx';
35
35
 
36
36
  interface CareersSubmissionFormProps {
@@ -549,6 +549,9 @@ interface ExploreStrings {
549
549
  * because two phrasings for the same caveat read as two different caveats.
550
550
  */
551
551
  conceptIllustration: string;
552
+ /** Rail arrows on the concept strip — pointer devices only. */
553
+ conceptScrollPrev: string;
554
+ conceptScrollNext: string;
552
555
  opensInNewTab: string;
553
556
  /** Heading over the concept strip on the welcome screen. */
554
557
  conceptStripTitle: string;
@@ -735,7 +738,7 @@ declare function formatAnswerDate(value: string, locale: ExploreLocale): string;
735
738
 
736
739
  declare const buttonVariants: (props?: ({
737
740
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
738
- size?: "default" | "sm" | "lg" | "icon" | null | undefined;
741
+ size?: "icon" | "default" | "sm" | "lg" | null | undefined;
739
742
  } & class_variance_authority_types.ClassProp) | undefined) => string;
740
743
  interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
741
744
  asChild?: boolean;
package/dist/index.js CHANGED
@@ -6017,6 +6017,8 @@ var EN = {
6017
6017
  prevSuggestion: "Previous suggestion",
6018
6018
  nextSuggestion: "Next suggestion",
6019
6019
  conceptIllustration: "Concept illustration",
6020
+ conceptScrollPrev: "Scroll concepts left",
6021
+ conceptScrollNext: "Scroll concepts right",
6020
6022
  opensInNewTab: "opens in a new tab",
6021
6023
  conceptStripTitle: "Or start from a concept",
6022
6024
  conceptStripLabel: "Concepts you can ask about",
@@ -6116,6 +6118,8 @@ var ZH = {
6116
6118
  prevSuggestion: "\u4E0A\u4E00\u4E2A\u5EFA\u8BAE",
6117
6119
  nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
6118
6120
  conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
6121
+ conceptScrollPrev: "\u5411\u5DE6\u6EDA\u52A8\u6982\u5FF5",
6122
+ conceptScrollNext: "\u5411\u53F3\u6EDA\u52A8\u6982\u5FF5",
6119
6123
  opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00",
6120
6124
  conceptStripTitle: "\u6216\u8005\u4ECE\u4E00\u4E2A\u6982\u5FF5\u5F00\u59CB",
6121
6125
  conceptStripLabel: "\u4F60\u53EF\u4EE5\u8BE2\u95EE\u7684\u6982\u5FF5",
@@ -6211,6 +6215,8 @@ var HI = {
6211
6215
  prevSuggestion: "\u092A\u093F\u091B\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
6212
6216
  nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
6213
6217
  conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
6218
+ conceptScrollPrev: "\u0915\u0949\u0928\u094D\u0938\u0947\u092A\u094D\u091F \u092C\u093E\u090F\u0901 \u0938\u094D\u0915\u094D\u0930\u0949\u0932 \u0915\u0930\u0947\u0902",
6219
+ conceptScrollNext: "\u0915\u0949\u0928\u094D\u0938\u0947\u092A\u094D\u091F \u0926\u093E\u090F\u0901 \u0938\u094D\u0915\u094D\u0930\u0949\u0932 \u0915\u0930\u0947\u0902",
6214
6220
  opensInNewTab: "\u0928\u090F \u091F\u0948\u092C \u092E\u0947\u0902 \u0916\u0941\u0932\u0924\u093E \u0939\u0948",
6215
6221
  conceptStripTitle: "\u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0938\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
6216
6222
  conceptStripLabel: "\u091C\u093F\u0928 \u0905\u0935\u0927\u093E\u0930\u0923\u093E\u0913\u0902 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
@@ -6310,6 +6316,8 @@ var ES = {
6310
6316
  prevSuggestion: "Sugerencia anterior",
6311
6317
  nextSuggestion: "Sugerencia siguiente",
6312
6318
  conceptIllustration: "Ilustraci\xF3n del concepto",
6319
+ conceptScrollPrev: "Desplazar conceptos a la izquierda",
6320
+ conceptScrollNext: "Desplazar conceptos a la derecha",
6313
6321
  opensInNewTab: "se abre en una pesta\xF1a nueva",
6314
6322
  conceptStripTitle: "O empieza por un concepto",
6315
6323
  conceptStripLabel: "Conceptos sobre los que puedes preguntar",
@@ -6409,6 +6417,8 @@ var AR = {
6409
6417
  prevSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u0633\u0627\u0628\u0642",
6410
6418
  nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
6411
6419
  conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
6420
+ conceptScrollPrev: "\u062A\u0645\u0631\u064A\u0631 \u0627\u0644\u0645\u0641\u0627\u0647\u064A\u0645 \u0644\u0644\u064A\u0633\u0627\u0631",
6421
+ conceptScrollNext: "\u062A\u0645\u0631\u064A\u0631 \u0627\u0644\u0645\u0641\u0627\u0647\u064A\u0645 \u0644\u0644\u064A\u0645\u064A\u0646",
6412
6422
  opensInNewTab: "\u064A\u064F\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629",
6413
6423
  conceptStripTitle: "\u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0646 \u0645\u0641\u0647\u0648\u0645",
6414
6424
  conceptStripLabel: "\u0645\u0641\u0627\u0647\u064A\u0645 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646\u0647\u0627",
@@ -6508,6 +6518,8 @@ var TA = {
6508
6518
  prevSuggestion: "\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
6509
6519
  nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
6510
6520
  conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
6521
+ conceptScrollPrev: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BB3\u0BC8 \u0B87\u0B9F\u0BA4\u0BC1\u0BAA\u0BC1\u0BB1\u0BAE\u0BCD \u0BA8\u0B95\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC1",
6522
+ conceptScrollNext: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BB3\u0BC8 \u0BB5\u0BB2\u0BA4\u0BC1\u0BAA\u0BC1\u0BB1\u0BAE\u0BCD \u0BA8\u0B95\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC1",
6511
6523
  opensInNewTab: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0BA4\u0BBE\u0BB5\u0BB2\u0BBF\u0BB2\u0BCD \u0BA4\u0BBF\u0BB1\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD",
6512
6524
  conceptStripTitle: "\u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 \u0B92\u0BB0\u0BC1 \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
6513
6525
  conceptStripLabel: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0B95\u0BCD\u0B95\u0BC2\u0B9F\u0BBF\u0BAF \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BB3\u0BCD",
@@ -12082,6 +12094,28 @@ function ConceptStrip({
12082
12094
  (current) => current.has(src) ? current : new Set(current).add(src)
12083
12095
  );
12084
12096
  }, []);
12097
+ const railRef = React.useRef(null);
12098
+ const [canLeft, setCanLeft] = React.useState(false);
12099
+ const [canRight, setCanRight] = React.useState(false);
12100
+ const measureRail = React.useCallback(() => {
12101
+ const el = railRef.current;
12102
+ if (!el) return;
12103
+ setCanLeft(el.scrollLeft > 1);
12104
+ setCanRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
12105
+ }, []);
12106
+ React.useEffect(() => {
12107
+ const el = railRef.current;
12108
+ if (!el) return;
12109
+ measureRail();
12110
+ const onResize = () => measureRail();
12111
+ window.addEventListener("resize", onResize);
12112
+ return () => window.removeEventListener("resize", onResize);
12113
+ }, [measureRail, highlights.length, failed]);
12114
+ const scrollRail = React.useCallback((direction) => {
12115
+ const el = railRef.current;
12116
+ if (!el) return;
12117
+ el.scrollBy({ left: direction * el.clientWidth * 0.8, behavior: "smooth" });
12118
+ }, []);
12085
12119
  const visible = highlights.filter(
12086
12120
  (highlight) => highlight.imageUrl !== "" && !failed.has(highlight.imageUrl)
12087
12121
  ).slice(0, MAX_CONCEPT_CARDS);
@@ -12090,71 +12124,105 @@ function ConceptStrip({
12090
12124
  "div",
12091
12125
  {
12092
12126
  "data-boff-explore": "concept-strip-block",
12093
- className: "boff-explore-rise boff-explore-rise-3 mt-6",
12127
+ className: "boff-explore-rise boff-explore-rise-3 mt-5",
12094
12128
  children: [
12095
12129
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.conceptStripTitle }),
12096
- /* @__PURE__ */ jsxRuntime.jsx(
12097
- "ul",
12098
- {
12099
- "data-boff-explore": "concept-strip",
12100
- "aria-label": T.conceptStripLabel,
12101
- className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
12102
- children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
12103
- "li",
12104
- {
12105
- className: "shrink-0 snap-start",
12106
- children: /* @__PURE__ */ jsxRuntime.jsxs(
12107
- "button",
12108
- {
12109
- "data-boff-explore": "concept-card",
12110
- "data-product": highlight.product,
12111
- type: "button",
12112
- disabled,
12113
- "aria-label": fill(T.conceptAsk, {
12114
- title: highlight.title,
12115
- product: highlight.productName
12116
- }),
12117
- onClick: () => onAsk(
12118
- fill(T.conceptAskQuestion, {
12130
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
12131
+ /* @__PURE__ */ jsxRuntime.jsx(
12132
+ "button",
12133
+ {
12134
+ type: "button",
12135
+ "data-boff-explore": "concept-prev",
12136
+ "aria-label": T.conceptScrollPrev,
12137
+ tabIndex: -1,
12138
+ onClick: () => scrollRail(-1),
12139
+ className: cn(
12140
+ "absolute left-0 top-1/2 z-10 hidden h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full border border-border bg-background/90 text-muted-foreground shadow-sm backdrop-blur transition-opacity hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:flex",
12141
+ canLeft ? "opacity-100" : "pointer-events-none opacity-0"
12142
+ ),
12143
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
12144
+ }
12145
+ ),
12146
+ /* @__PURE__ */ jsxRuntime.jsx(
12147
+ "button",
12148
+ {
12149
+ type: "button",
12150
+ "data-boff-explore": "concept-next",
12151
+ "aria-label": T.conceptScrollNext,
12152
+ tabIndex: -1,
12153
+ onClick: () => scrollRail(1),
12154
+ className: cn(
12155
+ "absolute right-0 top-1/2 z-10 hidden h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full border border-border bg-background/90 text-muted-foreground shadow-sm backdrop-blur transition-opacity hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:flex",
12156
+ canRight ? "opacity-100" : "pointer-events-none opacity-0"
12157
+ ),
12158
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
12159
+ }
12160
+ ),
12161
+ /* @__PURE__ */ jsxRuntime.jsx(
12162
+ "ul",
12163
+ {
12164
+ ref: railRef,
12165
+ onScroll: measureRail,
12166
+ "data-boff-explore": "concept-strip",
12167
+ "aria-label": T.conceptStripLabel,
12168
+ className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
12169
+ children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
12170
+ "li",
12171
+ {
12172
+ className: "shrink-0 snap-start",
12173
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
12174
+ "button",
12175
+ {
12176
+ "data-boff-explore": "concept-card",
12177
+ "data-product": highlight.product,
12178
+ type: "button",
12179
+ disabled,
12180
+ "aria-label": fill(T.conceptAsk, {
12119
12181
  title: highlight.title,
12120
12182
  product: highlight.productName
12121
- })
12122
- ),
12123
- 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-48",
12124
- children: [
12125
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
12126
- /* @__PURE__ */ jsxRuntime.jsx(
12127
- "img",
12128
- {
12129
- src: highlight.imageUrl,
12130
- alt: highlight.alt,
12131
- loading: "lazy",
12132
- decoding: "async",
12133
- onError: () => markFailed(highlight.imageUrl),
12134
- className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
12135
- }
12136
- ),
12137
- /* @__PURE__ */ jsxRuntime.jsx(
12138
- "span",
12139
- {
12140
- "aria-hidden": "true",
12141
- 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",
12142
- children: T.conceptIllustration
12143
- }
12144
- )
12145
- ] }),
12146
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
12147
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
12148
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
12149
- ] })
12150
- ]
12151
- }
12152
- )
12153
- },
12154
- `${highlight.product}:${highlight.url}`
12155
- ))
12156
- }
12157
- )
12183
+ }),
12184
+ onClick: () => onAsk(
12185
+ fill(T.conceptAskQuestion, {
12186
+ title: highlight.title,
12187
+ product: highlight.productName
12188
+ })
12189
+ ),
12190
+ 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-48",
12191
+ children: [
12192
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
12193
+ /* @__PURE__ */ jsxRuntime.jsx(
12194
+ "img",
12195
+ {
12196
+ src: highlight.imageUrl,
12197
+ alt: highlight.alt,
12198
+ loading: "lazy",
12199
+ decoding: "async",
12200
+ onError: () => markFailed(highlight.imageUrl),
12201
+ className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
12202
+ }
12203
+ ),
12204
+ /* @__PURE__ */ jsxRuntime.jsx(
12205
+ "span",
12206
+ {
12207
+ "aria-hidden": "true",
12208
+ 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",
12209
+ children: T.conceptIllustration
12210
+ }
12211
+ )
12212
+ ] }),
12213
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
12214
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
12215
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
12216
+ ] })
12217
+ ]
12218
+ }
12219
+ )
12220
+ },
12221
+ `${highlight.product}:${highlight.url}`
12222
+ ))
12223
+ }
12224
+ )
12225
+ ] })
12158
12226
  ]
12159
12227
  }
12160
12228
  );
@@ -12271,28 +12339,28 @@ function WelcomeState({
12271
12339
  onFocus,
12272
12340
  disabled
12273
12341
  }) {
12274
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-aura mx-auto my-auto w-full max-w-3xl px-4 py-6 sm:py-8 lg:py-10", children: [
12342
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-aura mx-auto my-auto w-full max-w-3xl px-4 py-5 sm:py-6", children: [
12275
12343
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise text-center", children: [
12276
12344
  /* @__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: [
12277
12345
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }),
12278
12346
  T.badge
12279
12347
  ] }),
12280
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-4 text-balance break-words text-2xl font-bold tracking-tight sm:text-4xl", children: title }),
12281
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mt-2.5 max-w-2xl text-pretty text-sm leading-relaxed text-muted-foreground sm:text-lg", children: body })
12348
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-3 text-balance break-words text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
12349
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mt-2 max-w-2xl text-pretty text-sm leading-relaxed text-muted-foreground sm:text-base", children: body })
12282
12350
  ] }),
12283
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "boff-explore-rise boff-explore-rise-1 mt-6 grid grid-cols-3 gap-2 sm:mt-7 sm:gap-2.5", children: CAPABILITIES.map(({ icon: Icon, body: capBody }, i) => /* @__PURE__ */ jsxRuntime.jsxs(
12351
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "boff-explore-rise boff-explore-rise-1 mt-5 grid grid-cols-3 gap-2 sm:gap-2.5", children: CAPABILITIES.map(({ icon: Icon, body: capBody }, i) => /* @__PURE__ */ jsxRuntime.jsxs(
12284
12352
  "li",
12285
12353
  {
12286
- className: "rounded-xl border border-border/70 bg-card/60 p-2.5 text-center transition-colors hover:border-border sm:p-3.5 sm:text-left",
12354
+ className: "rounded-xl border border-border/70 bg-card/60 p-2.5 text-center transition-colors hover:border-border sm:p-3 sm:text-left",
12287
12355
  children: [
12288
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mx-auto mb-1.5 flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary sm:mx-0 sm:mb-2.5 sm:h-8 sm:w-8", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 sm:h-4 sm:w-4" }) }),
12356
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mx-auto mb-1.5 flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary sm:mx-0 sm:mb-2 sm:h-8 sm:w-8", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 sm:h-4 sm:w-4" }) }),
12289
12357
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] font-semibold leading-tight text-card-foreground sm:text-sm sm:leading-normal", children: T.capabilities[i] ?? "" }),
12290
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 hidden text-xs leading-relaxed text-muted-foreground sm:block", children: capBody })
12358
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 hidden text-xs leading-snug text-muted-foreground lg:block", children: capBody })
12291
12359
  ]
12292
12360
  },
12293
12361
  i
12294
12362
  )) }),
12295
- prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-8", children: [
12363
+ prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-5", children: [
12296
12364
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
12297
12365
  /* @__PURE__ */ jsxRuntime.jsx(
12298
12366
  PromptCarousel,
@@ -12304,7 +12372,7 @@ function WelcomeState({
12304
12372
  }
12305
12373
  )
12306
12374
  ] }) : null,
12307
- products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
12375
+ products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-5", children: [
12308
12376
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
12309
12377
  /* @__PURE__ */ jsxRuntime.jsx(
12310
12378
  ProductStrip,
@@ -17963,6 +18031,19 @@ function StoreProductDetailPage({
17963
18031
  ] });
17964
18032
  }
17965
18033
 
18034
+ // src/utils/site-chrome.ts
18035
+ var FOOTERLESS_ROUTES = ["/explore"];
18036
+ function normalizeRoutePath(pathname) {
18037
+ const trimmed = pathname.toLowerCase().replace(/\/+$/, "");
18038
+ return trimmed === "" ? "/" : trimmed;
18039
+ }
18040
+ function isFooterlessPath(pathname) {
18041
+ return FOOTERLESS_ROUTES.includes(normalizeRoutePath(pathname));
18042
+ }
18043
+ function shouldRenderSiteFooter(pathname) {
18044
+ return !isFooterlessPath(pathname);
18045
+ }
18046
+
17966
18047
  exports.ANSWERS_PATH = ANSWERS_PATH;
17967
18048
  exports.ANSWER_HEADING_SHIFT = ANSWER_HEADING_SHIFT;
17968
18049
  exports.ANSWER_PATH_PREFIX = ANSWER_PATH_PREFIX;
@@ -18000,6 +18081,7 @@ exports.ExploreAnswerStyles = ExploreAnswerStyles;
18000
18081
  exports.ExploreCta = ExploreCta;
18001
18082
  exports.ExplorePage = ExplorePage;
18002
18083
  exports.FALLBACK_EXPLORE_LIMITS = FALLBACK_EXPLORE_LIMITS;
18084
+ exports.FOOTERLESS_ROUTES = FOOTERLESS_ROUTES;
18003
18085
  exports.Input = Input;
18004
18086
  exports.Label = Label;
18005
18087
  exports.LaunchCountdown = LaunchCountdown;
@@ -18052,11 +18134,14 @@ exports.getAnswerBySlug = getAnswerBySlug;
18052
18134
  exports.getConceptBySlug = getConceptBySlug;
18053
18135
  exports.getRecaptchaV3Token = getRecaptchaV3Token;
18054
18136
  exports.inlineImageOrigins = inlineImageOrigins;
18137
+ exports.isFooterlessPath = isFooterlessPath;
18055
18138
  exports.isInlineImageAllowed = isInlineImageAllowed;
18056
18139
  exports.isPublishedSourceUrl = isPublishedSourceUrl;
18057
18140
  exports.isValidUrl = isValidUrl;
18058
18141
  exports.loadRecaptchaV3 = loadRecaptchaV3;
18059
18142
  exports.looksLikeDeliverableEmail = looksLikeDeliverableEmail;
18143
+ exports.normalizeRoutePath = normalizeRoutePath;
18144
+ exports.shouldRenderSiteFooter = shouldRenderSiteFooter;
18060
18145
  exports.speechLocaleOf = speechLocaleOf;
18061
18146
  exports.stopSpeaking = stopSpeaking;
18062
18147
  exports.useContentPage = useContentPage;