@alfadocs/ui-kit-debug 0.32.2 → 0.32.4

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.
@@ -1,7 +1,7 @@
1
1
  import { jsxs as v, jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as _, useContext as k, Children as w, createContext as y } from "react";
2
+ import { forwardRef as b, useContext as k, Children as w, createContext as y } from "react";
3
3
  import { c as s } from "./index-D2ZczOXr.js";
4
- const b = [
4
+ const _ = [
5
5
  "violet",
6
6
  "purple",
7
7
  "magenta",
@@ -44,17 +44,17 @@ const b = [
44
44
  // matches Card.elevated and PublicFooter compact. The thicker
45
45
  // line reads as a deliberate boundary rather than a hairline.
46
46
  //
47
- // 0.31.9: `border-t-0` on both variants the 4px accent strip
48
- // (absolutely positioned at top:0 inside the border-box) sits
49
- // BELOW the top border, so visually you see a thin grey
50
- // hairline, then the brand strip. That dilutes the brand
51
- // marker. Dropping the top border lets the accent strip BE the
52
- // card's top edge. The 3px-and-up strip carries enough
53
- // contrast (~5:1 on white in light theme, similar in dark) to
54
- // satisfy the accessible theme's ≥3:1 boundary requirement
55
- // without the extra hairline.
56
- elevated: "ds:shadow-[var(--shadow-card)] ds:border ds:border-t-0 ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2 ds:[.theme-accessible_&]:border-t-0",
57
- outlined: "ds:border ds:border-t-0 ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2 ds:[.theme-accessible_&]:border-t-0"
47
+ // 0.32.3: restored full 4-sided border. 0.31.9 dropped
48
+ // `border-top` so the accent strip would be the card's literal
49
+ // top edge but with `border-radius: lg` on all 4 corners the
50
+ // side borders curve toward a non-existent top edge, leaving
51
+ // the top corners visually "open" (visible page-bg slivers
52
+ // where the rounded corner outline should close). The 1px
53
+ // hairline above the accent strip is the cheaper visual cost
54
+ // subtle in light theme (14% black) and matches dark-theme
55
+ // chrome where shadow alone loses contrast.
56
+ elevated: "ds:shadow-[var(--shadow-card)] ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2",
57
+ outlined: "ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2"
58
58
  }
59
59
  },
60
60
  defaultVariants: { variant: "elevated" }
@@ -153,9 +153,9 @@ const b = [
153
153
  }
154
154
  );
155
155
  function S(a, o) {
156
- return a !== "auto" ? a : o ? b[o.index % b.length] : "primary";
156
+ return a !== "auto" ? a : o ? _[o.index % _.length] : "primary";
157
157
  }
158
- const p = _(
158
+ const p = b(
159
159
  ({ columns: a = 3, children: o, className: c, ...d }, l) => {
160
160
  const i = w.toArray(o);
161
161
  return /* @__PURE__ */ r(
@@ -171,7 +171,7 @@ const p = _(
171
171
  }
172
172
  );
173
173
  p.displayName = "BenefitCard.Row";
174
- const x = _(
174
+ const x = b(
175
175
  ({
176
176
  step: a,
177
177
  icon: o,
@@ -241,4 +241,4 @@ const H = Object.assign(x, {
241
241
  export {
242
242
  H as B
243
243
  };
244
- //# sourceMappingURL=benefit-card-_Sc-MGha.js.map
244
+ //# sourceMappingURL=benefit-card-Xnxj4Gmo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benefit-card-Xnxj4Gmo.js","sources":["../../src/components/benefit-card/benefit-card.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* BenefitCard — marketing-surface card for \"benefit row\" / \"how it */\n/* works\" / \"why choose us\" sections. */\n/* */\n/* Visually distinguished from <Card> by: */\n/* 1. A 4px accent strip across the top (logical block-start). */\n/* 2. A tinted icon chip inside the body using `color-mix(in srgb, */\n/* var(--accent-token) 12%, var(--background))`. */\n/* 3. An optional zero-padded step chip (\"01\", \"02\", ...) in the */\n/* top-end corner. */\n/* 4. A hover lift (translateY -2px + --shadow-hover), gated through */\n/* `--animation-duration` so the accessible theme freezes it. */\n/* */\n/* Compound API: */\n/* <BenefitCard.Row columns={3}> */\n/* <BenefitCard step={1} icon={…} title=\"…\">…</BenefitCard> */\n/* ... */\n/* </BenefitCard.Row> */\n/* */\n/* `accent=\"auto\"` rotates through the brand palette by row index */\n/* (violet → purple → magenta → blue → green → red, then wraps). */\n/* Outside a Row, `auto` falls back to `primary`. */\n/* ------------------------------------------------------------------ */\n\nimport {\n Children,\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\n\n/* ------------------------------------------------------------------ */\n/* Accent wheel — used by `accent=\"auto\"` inside a Row. */\n/* ------------------------------------------------------------------ */\n\nconst ACCENT_WHEEL = [\n 'violet',\n 'purple',\n 'magenta',\n 'blue',\n 'green',\n 'red',\n] as const;\n\ntype WheelAccent = (typeof ACCENT_WHEEL)[number];\ntype SemanticAccent = 'primary' | 'accent' | 'info' | 'success' | 'warning';\ntype ResolvedAccent = SemanticAccent | WheelAccent;\ntype AccentProp = SemanticAccent | WheelAccent | 'auto';\n\n/* ------------------------------------------------------------------ */\n/* Row context */\n/* ------------------------------------------------------------------ */\n\ninterface RowContextValue {\n index: number;\n}\n\nconst RowContext = createContext<RowContextValue | null>(null);\n\n/* ------------------------------------------------------------------ */\n/* CVA — Row grid */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva('ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-lg)]', {\n variants: {\n columns: {\n 1: 'ds:md:grid-cols-1',\n 2: 'ds:md:grid-cols-2',\n 3: 'ds:md:grid-cols-3',\n 4: 'ds:md:grid-cols-4',\n },\n },\n defaultVariants: { columns: 3 },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — BenefitCard root */\n/* */\n/* The top 4px accent strip uses `border-block-start` (logical) so it */\n/* sits at the inline-start-block-start corner regardless of writing */\n/* direction. Border colour is set per-accent in the `accent` variant. */\n/* ------------------------------------------------------------------ */\n\n// Card chrome — no per-accent variant; the gradient top strip is rendered\n// as a separate sibling element so it can use a linear-gradient. The\n// hover shadow's tint comes from `hoverShadowVariants` on the same root.\nconst cardVariants = cva(\n [\n 'ds:relative ds:rounded-[var(--radius-lg)] ds:overflow-hidden',\n 'ds:flex ds:flex-col ds:h-full',\n 'ds:bg-[var(--card)] ds:text-[var(--card-foreground)]',\n // Hover lift — the transform is gated through `motion-safe:` so users\n // with `prefers-reduced-motion: reduce` see only the shadow change.\n // `--animation-duration` is pinned to 0ms in the accessible theme,\n // which collapses the transition without dropping the rule entirely.\n 'ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n 'ds:motion-safe:hover:-translate-y-1',\n ].join(' '),\n {\n variants: {\n variant: {\n // The accessible theme demands a visible boundary at ≥3:1 — shadow\n // alone doesn't clear that against the light page wash. Always\n // emit a `--card-border` outline; light/dark themes use the\n // soft 14% / 32% values (subtle but present) while accessible\n // bumps to 50% black / 50% white for the strict-AA edge weight.\n //\n // 0.31.5: accessible theme also bumps border-width 1px → 2px —\n // matches Card.elevated and PublicFooter compact. The thicker\n // line reads as a deliberate boundary rather than a hairline.\n //\n // 0.32.3: restored full 4-sided border. 0.31.9 dropped\n // `border-top` so the accent strip would be the card's literal\n // top edge — but with `border-radius: lg` on all 4 corners the\n // side borders curve toward a non-existent top edge, leaving\n // the top corners visually \"open\" (visible page-bg slivers\n // where the rounded corner outline should close). The 1px\n // hairline above the accent strip is the cheaper visual cost\n // — subtle in light theme (14% black) and matches dark-theme\n // chrome where shadow alone loses contrast.\n elevated:\n 'ds:shadow-[var(--shadow-card)] ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n outlined:\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n },\n },\n defaultVariants: { variant: 'elevated' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Gradient top strip — Treatment B (Vivid). */\n/* */\n/* The strip is an absolutely-positioned `<span>` so its background can */\n/* be a `linear-gradient`. For brand-wheel accents (violet → purple → */\n/* magenta → blue → green → red) the gradient pairs with the next */\n/* wheel token. For semantic accents the gradient is a solid pair */\n/* (start=end) — same visual weight, less colour drama. */\n/* ------------------------------------------------------------------ */\n\nconst topStripVariants = cva(\n 'ds:absolute ds:inset-inline-0 ds:top-0 ds:h-[4px] ds:pointer-events-none',\n {\n variants: {\n accent: {\n primary:\n 'ds:bg-linear-to-r ds:from-[var(--primary)] ds:to-[var(--accent)]',\n accent:\n 'ds:bg-linear-to-r ds:from-[var(--accent)] ds:to-[var(--primary)]',\n info: 'ds:bg-linear-to-r ds:from-[var(--info)] ds:to-[var(--info)]',\n success:\n 'ds:bg-linear-to-r ds:from-[var(--success)] ds:to-[var(--success)]',\n warning:\n 'ds:bg-linear-to-r ds:from-[var(--warning)] ds:to-[var(--warning)]',\n violet:\n 'ds:bg-linear-to-r ds:from-[var(--color-violet-500)] ds:to-[var(--color-purple-500)]',\n purple:\n 'ds:bg-linear-to-r ds:from-[var(--color-purple-500)] ds:to-[var(--color-magenta-500)]',\n magenta:\n 'ds:bg-linear-to-r ds:from-[var(--color-magenta-500)] ds:to-[var(--color-violet-500)]',\n blue: 'ds:bg-linear-to-r ds:from-[var(--color-blue-500)] ds:to-[var(--color-green-500)]',\n green:\n 'ds:bg-linear-to-r ds:from-[var(--color-green-500)] ds:to-[var(--color-red-500)]',\n red: 'ds:bg-linear-to-r ds:from-[var(--color-red-500)] ds:to-[var(--color-blue-500)]',\n },\n },\n defaultVariants: { accent: 'primary' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Hover shadow — coloured halo on hover, tinted by accent. */\n/* ------------------------------------------------------------------ */\n\nconst hoverShadowVariants = cva('', {\n variants: {\n accent: {\n primary:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--primary)_18%,transparent)]',\n accent:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--accent)_18%,transparent)]',\n info: 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--info)_18%,transparent)]',\n success:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--success)_18%,transparent)]',\n warning:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--warning)_18%,transparent)]',\n violet:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-violet-500)_18%,transparent)]',\n purple:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-purple-500)_18%,transparent)]',\n magenta:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-magenta-500)_18%,transparent)]',\n blue: 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-blue-500)_18%,transparent)]',\n green:\n 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-green-500)_18%,transparent)]',\n red: 'ds:hover:shadow-[0_20px_40px_color-mix(in_srgb,var(--color-red-500)_18%,transparent)]',\n },\n },\n defaultVariants: { accent: 'primary' },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — icon chip */\n/* */\n/* The chip background uses `color-mix(in srgb, <token> 12%, */\n/* var(--background))` so it stays legible across themes. The Tailwind */\n/* JIT requires underscores in arbitrary-value classes wherever */\n/* whitespace would otherwise terminate the class. */\n/* ------------------------------------------------------------------ */\n\n// Icon chip — gradient tint (Treatment B). The chip pairs the resolved\n// accent with the \"next\" wheel/semantic token so the bg reads as a soft\n// diagonal blend instead of a flat tint, picking up the energy of the\n// gradient top strip. An inset highlight (`inset 0 1px 0` half-white)\n// adds a subtle glass edge.\nconst iconChipVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:size-14 ds:rounded-[var(--radius-md)] ds:shrink-0',\n 'ds:[&>svg]:size-7',\n 'ds:shadow-[inset_0_1px_0_color-mix(in_srgb,var(--foreground)_40%,transparent)]',\n ].join(' '),\n {\n variants: {\n accent: {\n primary:\n 'ds:text-[color:var(--primary)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--primary)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--accent)_8%,var(--background))]',\n accent:\n 'ds:text-[color:var(--accent)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--accent)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--primary)_8%,var(--background))]',\n info: 'ds:text-[color:var(--info)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--info)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--info)_8%,var(--background))]',\n success:\n 'ds:text-[color:var(--success)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--success)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--success)_8%,var(--background))]',\n warning:\n 'ds:text-[color:var(--warning)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--warning)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--warning)_8%,var(--background))]',\n violet:\n 'ds:text-[color:var(--color-violet-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-violet-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-purple-500)_8%,var(--background))]',\n purple:\n 'ds:text-[color:var(--color-purple-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-purple-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-magenta-500)_8%,var(--background))]',\n magenta:\n 'ds:text-[color:var(--color-magenta-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-magenta-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-violet-500)_8%,var(--background))]',\n blue: 'ds:text-[color:var(--color-blue-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-blue-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-green-500)_8%,var(--background))]',\n green:\n 'ds:text-[color:var(--color-green-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-green-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-red-500)_8%,var(--background))]',\n red: 'ds:text-[color:var(--color-red-500)] ds:bg-linear-to-br ds:from-[color-mix(in_srgb,var(--color-red-500)_22%,var(--background))] ds:to-[color-mix(in_srgb,var(--color-blue-500)_8%,var(--background))]',\n },\n },\n defaultVariants: { accent: 'primary' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Step chip — brand-tinted with a thin matching border. */\n/* ------------------------------------------------------------------ */\n\n// Text colour uses the -700 ramp step rather than -500 so the chip's\n// small `01` label clears WCAG AA (≥4.5:1) against its 12 %-tinted bg.\n// The brand -500 fails on the tinted surface (~4.07:1). For the\n// semantic accents we pin to the same brand-700 the kit resolves them\n// to (primary→violet-700, accent→magenta-700, etc.) so each variant\n// reads AA in light theme. In dark theme the tint surface darkens so\n// the ramp-700 text turns dark-on-dark and fails AA — we branch via\n// `[.theme-dark_&]:` to swap to the -200 ramp step (light text on the\n// dark tint), restoring comfortable contrast across both modes.\nconst stepChipVariants = cva(\n [\n 'type-eyebrow',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n // Accessible theme: the per-variant `30% primary` border is too\n // washed out for the ≥3:1 non-text contrast bar. Swap to\n // currentColor (which resolves to the brand-700 / -200 text colour\n // of the variant — same hue, fully opaque). Descendant selector\n // outweighs the per-variant declaration via specificity.\n 'ds:[.theme-accessible_&]:[border-color:currentColor]',\n ].join(' '),\n {\n variants: {\n accent: {\n primary:\n 'ds:text-[color:var(--color-violet-700)] ds:[.theme-dark_&]:text-[color:var(--color-violet-200)] ds:bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--primary)_30%,transparent)]',\n accent:\n 'ds:text-[color:var(--color-magenta-700)] ds:[.theme-dark_&]:text-[color:var(--color-magenta-200)] ds:bg-[color-mix(in_srgb,var(--accent)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--accent)_30%,transparent)]',\n info: 'ds:text-[color:var(--color-blue-700)] ds:[.theme-dark_&]:text-[color:var(--color-blue-200)] ds:bg-[color-mix(in_srgb,var(--info)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--info)_30%,transparent)]',\n success:\n 'ds:text-[color:var(--color-green-700)] ds:[.theme-dark_&]:text-[color:var(--color-green-200)] ds:bg-[color-mix(in_srgb,var(--success)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--success)_30%,transparent)]',\n warning:\n 'ds:text-[color:var(--color-red-700)] ds:[.theme-dark_&]:text-[color:var(--color-red-200)] ds:bg-[color-mix(in_srgb,var(--warning)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--warning)_30%,transparent)]',\n violet:\n 'ds:text-[color:var(--color-violet-700)] ds:[.theme-dark_&]:text-[color:var(--color-violet-200)] ds:bg-[color-mix(in_srgb,var(--color-violet-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-violet-500)_30%,transparent)]',\n purple:\n 'ds:text-[color:var(--color-purple-700)] ds:[.theme-dark_&]:text-[color:var(--color-purple-200)] ds:bg-[color-mix(in_srgb,var(--color-purple-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-purple-500)_30%,transparent)]',\n magenta:\n 'ds:text-[color:var(--color-magenta-700)] ds:[.theme-dark_&]:text-[color:var(--color-magenta-200)] ds:bg-[color-mix(in_srgb,var(--color-magenta-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-magenta-500)_30%,transparent)]',\n blue: 'ds:text-[color:var(--color-blue-700)] ds:[.theme-dark_&]:text-[color:var(--color-blue-200)] ds:bg-[color-mix(in_srgb,var(--color-blue-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-blue-500)_30%,transparent)]',\n green:\n 'ds:text-[color:var(--color-green-700)] ds:[.theme-dark_&]:text-[color:var(--color-green-200)] ds:bg-[color-mix(in_srgb,var(--color-green-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-green-500)_30%,transparent)]',\n red: 'ds:text-[color:var(--color-red-700)] ds:[.theme-dark_&]:text-[color:var(--color-red-200)] ds:bg-[color-mix(in_srgb,var(--color-red-500)_12%,var(--background))] ds:[border:1px_solid_color-mix(in_srgb,var(--color-red-500)_30%,transparent)]',\n },\n },\n defaultVariants: { accent: 'primary' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface BenefitCardProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Step number; rendered as a zero-padded chip (\"01\", \"02\", …). Omit to hide. */\n step?: number;\n /** Icon node — usually an `<svg>` 24-32px. Rendered inside a tinted square chip. */\n icon?: ReactNode;\n /** Card heading. Always rendered inside an `<h3>` — pass only inline / phrasing content. */\n title: ReactNode;\n /** Optional CTA — usually a `<Button intent=\"link\">` or kit `<Link>`. Rendered at the block-end. */\n cta?: ReactNode;\n /** Surface treatment. */\n variant?: 'elevated' | 'outlined';\n /**\n * Accent colour. `auto` (default inside a `<BenefitCard.Row>`) rotates through the brand\n * palette by row index: violet → purple → magenta → blue → green → red, then wraps.\n * Outside a Row, `auto` falls back to `primary`.\n */\n accent?: AccentProp;\n /** Body content (description / list / inline copy). */\n children?: ReactNode;\n}\n\nexport interface BenefitCardRowProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Number of columns at md+; defaults to 3. Collapses to 1 at < md. */\n columns?: 1 | 2 | 3 | 4;\n children?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Accent resolution */\n/* ------------------------------------------------------------------ */\n\nfunction resolveAccent(\n accent: AccentProp,\n rowCtx: RowContextValue | null,\n): ResolvedAccent {\n if (accent !== 'auto') return accent;\n if (rowCtx) return ACCENT_WHEEL[rowCtx.index % ACCENT_WHEEL.length];\n return 'primary';\n}\n\n/* ------------------------------------------------------------------ */\n/* Row */\n/* */\n/* Wraps every child in a `RowContext.Provider` so the child can look */\n/* up its index and pick a wheel colour when `accent=\"auto\"`. */\n/* ------------------------------------------------------------------ */\n\nconst BenefitCardRow = forwardRef<HTMLDivElement, BenefitCardRowProps>(\n ({ columns = 3, children, className, ...rest }, ref) => {\n const items = Children.toArray(children);\n return (\n <div\n ref={ref}\n data-component=\"benefit-card-row\"\n className={rowVariants({ columns, className })}\n {...rest}\n >\n {items.map((child, index) => (\n <RowContext.Provider key={index} value={{ index }}>\n {child}\n </RowContext.Provider>\n ))}\n </div>\n );\n },\n);\nBenefitCardRow.displayName = 'BenefitCard.Row';\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nconst BenefitCardRoot = forwardRef<HTMLElement, BenefitCardProps>(\n (\n {\n step,\n icon,\n title,\n cta,\n variant = 'elevated',\n accent = 'auto',\n children,\n className,\n ...rest\n },\n ref,\n ) => {\n const rowCtx = useContext(RowContext);\n const resolved = resolveAccent(accent, rowCtx);\n const hasStep = typeof step === 'number';\n\n return (\n <article\n ref={ref}\n data-component=\"benefit-card\"\n data-accent={resolved}\n className={[\n cardVariants({ variant }),\n hoverShadowVariants({ accent: resolved }),\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {/* Gradient top strip — Treatment B visual signature. Sits above\n the card body via absolute positioning. */}\n <span\n aria-hidden=\"true\"\n data-part=\"accent-strip\"\n className={topStripVariants({ accent: resolved })}\n />\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-lg)] ds:flex-1\">\n {(icon || hasStep) && (\n <div className=\"ds:flex ds:items-start ds:justify-between ds:gap-[var(--spacing-sm)]\">\n {icon ? (\n <span\n aria-hidden=\"true\"\n className={iconChipVariants({ accent: resolved })}\n >\n {icon}\n </span>\n ) : (\n <span aria-hidden=\"true\" />\n )}\n {hasStep ? (\n <span\n aria-hidden=\"true\"\n data-part=\"step\"\n className={stepChipVariants({ accent: resolved })}\n >\n {String(step).padStart(2, '0')}\n </span>\n ) : null}\n </div>\n )}\n <h3 className=\"type-title-card ds:text-[var(--foreground)]\">\n {title}\n </h3>\n {children ? (\n <div className=\"type-body ds:text-[var(--muted-foreground)] ds:flex-1\">\n {children}\n </div>\n ) : null}\n {cta ? <div className=\"ds:mt-[var(--spacing-xs)]\">{cta}</div> : null}\n </div>\n </article>\n );\n },\n);\nBenefitCardRoot.displayName = 'BenefitCard';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const BenefitCard = Object.assign(BenefitCardRoot, {\n Row: BenefitCardRow,\n});\n"],"names":["ACCENT_WHEEL","RowContext","createContext","rowVariants","cva","cardVariants","topStripVariants","hoverShadowVariants","iconChipVariants","stepChipVariants","resolveAccent","accent","rowCtx","BenefitCardRow","forwardRef","columns","children","className","rest","ref","items","Children","jsx","child","index","BenefitCardRoot","step","icon","title","cta","variant","useContext","resolved","hasStep","jsxs","BenefitCard"],"mappings":"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"}
@@ -33,18 +33,18 @@ const L = "https://www.alfadocs.com", F = {
33
33
  contacts: "/es/contacto"
34
34
  }
35
35
  }, B = "https://";
36
- function K(t) {
37
- return !t || !t.startsWith(B) ? L : t.replace(/\/+$/, "");
36
+ function K(s) {
37
+ return !s || !s.startsWith(B) ? L : s.replace(/\/+$/, "");
38
38
  }
39
- function k(t, s, a) {
39
+ function k(s, t, a) {
40
40
  var c, l;
41
- const r = (c = a == null ? void 0 : a[s]) == null ? void 0 : c[t];
41
+ const r = (c = a == null ? void 0 : a[t]) == null ? void 0 : c[s];
42
42
  if (r) return r;
43
- const n = (l = Y[t]) == null ? void 0 : l[s];
44
- return n || F[s];
43
+ const n = (l = Y[s]) == null ? void 0 : l[t];
44
+ return n || F[t];
45
45
  }
46
- function W(t, s, a) {
47
- const r = K(s), n = (t || "it").split("-")[0];
46
+ function W(s, t, a) {
47
+ const r = K(t), n = (s || "it").split("-")[0];
48
48
  return {
49
49
  privacy: `${r}${k(n, "privacy", a)}`,
50
50
  terms: `${r}${k(n, "terms", a)}`,
@@ -65,12 +65,12 @@ const X = [
65
65
  viewBox: "0 0 24 24",
66
66
  fill: "currentColor",
67
67
  xmlns: "http://www.w3.org/2000/svg"
68
- }, J = (t) => /* @__PURE__ */ e("svg", { ...y, ...t, children: /* @__PURE__ */ e("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.063 2.063 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }) }), Q = (t) => /* @__PURE__ */ e("svg", { ...y, ...t, children: /* @__PURE__ */ e("path", { d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }) }), Z = (t) => /* @__PURE__ */ e("svg", { ...y, ...t, children: /* @__PURE__ */ e("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z" }) }), ee = (t) => /* @__PURE__ */ e("svg", { ...y, ...t, children: /* @__PURE__ */ e("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) }), te = {
68
+ }, J = (s) => /* @__PURE__ */ e("svg", { ...y, ...s, children: /* @__PURE__ */ e("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.063 2.063 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }) }), Q = (s) => /* @__PURE__ */ e("svg", { ...y, ...s, children: /* @__PURE__ */ e("path", { d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }) }), Z = (s) => /* @__PURE__ */ e("svg", { ...y, ...s, children: /* @__PURE__ */ e("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z" }) }), ee = (s) => /* @__PURE__ */ e("svg", { ...y, ...s, children: /* @__PURE__ */ e("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) }), se = {
69
69
  linkedin: J,
70
70
  youtube: Q,
71
71
  instagram: Z,
72
72
  facebook: ee
73
- }, se = "AlfaDocs GmbH", ae = "P.IVA DE301955405", ne = R(
73
+ }, te = "AlfaDocs GmbH", ae = "P.IVA DE301955405", ne = R(
74
74
  [
75
75
  "ds:w-full",
76
76
  "ds:text-[color:var(--muted-foreground)]",
@@ -113,12 +113,12 @@ const X = [
113
113
  defaultVariants: { variant: "compact" }
114
114
  }
115
115
  ), re = /^(https?:\/\/|mailto:|tel:|\/(?!\/))/i;
116
- function I(t) {
117
- return re.test(t) ? t : "#";
116
+ function I(s) {
117
+ return re.test(s) ? s : "#";
118
118
  }
119
119
  function M({
120
- copyright: t,
121
- align: s = "center"
120
+ copyright: s,
121
+ align: t = "center"
122
122
  }) {
123
123
  return /* @__PURE__ */ e(
124
124
  "p",
@@ -126,15 +126,15 @@ function M({
126
126
  className: [
127
127
  "ds:m-0 ds:text-[color:var(--muted-foreground)]",
128
128
  "ds:text-[length:var(--font-size-sm)]",
129
- s === "center" ? "ds:text-center" : "ds:text-start"
129
+ t === "center" ? "ds:text-center" : "ds:text-start"
130
130
  ].join(" "),
131
- children: t
131
+ children: s
132
132
  }
133
133
  );
134
134
  }
135
135
  const ce = H(
136
136
  function({
137
- variant: s,
137
+ variant: t,
138
138
  marketingBaseUrl: a,
139
139
  legalUrlOverrides: r,
140
140
  linkGroups: n,
@@ -142,7 +142,7 @@ const ce = H(
142
142
  logoSlot: l,
143
143
  extraNavSlot: d,
144
144
  trustBadgesSlot: h,
145
- showTagline: v = !0,
145
+ showTagline: v = !1,
146
146
  id: g,
147
147
  "aria-label": z
148
148
  }, p) {
@@ -153,14 +153,14 @@ const ce = H(
153
153
  P(
154
154
  p,
155
155
  () => ({
156
- getVariant: () => s,
156
+ getVariant: () => t,
157
157
  getLegalUrls: () => x
158
158
  }),
159
- [s, x]
159
+ [t, x]
160
160
  );
161
161
  const j = (/* @__PURE__ */ new Date()).getFullYear(), N = o("footer.copyright", {
162
162
  year: j,
163
- entity: se,
163
+ entity: te,
164
164
  vat: ae
165
165
  }), $ = v ? o("footer.tagline") : void 0, E = z ?? o("footer.nav.label"), w = {
166
166
  privacy: o("footer.nav.privacy"),
@@ -174,10 +174,10 @@ const ce = H(
174
174
  role: "contentinfo",
175
175
  "aria-label": E,
176
176
  "data-component": "public-footer",
177
- "data-variant": s,
178
- className: ne({ variant: s }),
177
+ "data-variant": t,
178
+ className: ne({ variant: t }),
179
179
  children: [
180
- s === "minimal" && /* @__PURE__ */ e(
180
+ t === "minimal" && /* @__PURE__ */ e(
181
181
  ie,
182
182
  {
183
183
  legalUrls: x,
@@ -186,7 +186,7 @@ const ce = H(
186
186
  trustBadgesSlot: h
187
187
  }
188
188
  ),
189
- s === "compact" && /* @__PURE__ */ e(
189
+ t === "compact" && /* @__PURE__ */ e(
190
190
  le,
191
191
  {
192
192
  legalUrls: x,
@@ -199,7 +199,7 @@ const ce = H(
199
199
  t: o
200
200
  }
201
201
  ),
202
- s === "full" && /* @__PURE__ */ e(
202
+ t === "full" && /* @__PURE__ */ e(
203
203
  de,
204
204
  {
205
205
  legalUrls: x,
@@ -220,8 +220,8 @@ const ce = H(
220
220
  }
221
221
  );
222
222
  function ie({
223
- legalUrls: t,
224
- labels: s,
223
+ legalUrls: s,
224
+ labels: t,
225
225
  copyright: a,
226
226
  trustBadgesSlot: r
227
227
  }) {
@@ -237,22 +237,22 @@ function ie({
237
237
  /* @__PURE__ */ e(
238
238
  f,
239
239
  {
240
- href: t.privacy,
240
+ href: s.privacy,
241
241
  external: !0,
242
242
  externalIcon: !1,
243
243
  intent: "subtle",
244
- children: s.privacy
244
+ children: t.privacy
245
245
  }
246
246
  ),
247
247
  /* @__PURE__ */ e(m, { orientation: "vertical", className: "ds:h-4" }),
248
248
  /* @__PURE__ */ e(
249
249
  f,
250
250
  {
251
- href: t.terms,
251
+ href: s.terms,
252
252
  external: !0,
253
253
  externalIcon: !1,
254
254
  intent: "subtle",
255
- children: s.terms
255
+ children: t.terms
256
256
  }
257
257
  ),
258
258
  /* @__PURE__ */ e(m, { orientation: "vertical", className: "ds:h-4" }),
@@ -260,19 +260,19 @@ function ie({
260
260
  ] });
261
261
  }
262
262
  function _({
263
- socials: t,
264
- t: s,
263
+ socials: s,
264
+ t,
265
265
  size: a
266
266
  }) {
267
- if (t.length === 0) return null;
267
+ if (s.length === 0) return null;
268
268
  const r = a === "sm" ? "ds:size-4" : "ds:size-5";
269
269
  return /* @__PURE__ */ e(
270
270
  "ul",
271
271
  {
272
272
  "data-slot": "socials",
273
273
  className: "ds:list-none ds:m-0 ds:p-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)]",
274
- children: t.map((n) => {
275
- const c = te[n.network], l = n.href ?? q[n.network], d = s(`footer.social.aria.${n.network}`);
274
+ children: s.map((n) => {
275
+ const c = se[n.network], l = n.href ?? q[n.network], d = t(`footer.social.aria.${n.network}`);
276
276
  return /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
277
277
  f,
278
278
  {
@@ -297,8 +297,8 @@ function _({
297
297
  );
298
298
  }
299
299
  function le({
300
- legalUrls: t,
301
- labels: s,
300
+ legalUrls: s,
301
+ labels: t,
302
302
  copyright: a,
303
303
  tagline: r,
304
304
  socials: n,
@@ -337,33 +337,33 @@ function le({
337
337
  /* @__PURE__ */ e(
338
338
  f,
339
339
  {
340
- href: t.privacy,
340
+ href: s.privacy,
341
341
  external: !0,
342
342
  externalIcon: !1,
343
343
  intent: "subtle",
344
- children: s.privacy
344
+ children: t.privacy
345
345
  }
346
346
  ),
347
347
  /* @__PURE__ */ e(m, { orientation: "vertical", className: "ds:h-4" }),
348
348
  /* @__PURE__ */ e(
349
349
  f,
350
350
  {
351
- href: t.terms,
351
+ href: s.terms,
352
352
  external: !0,
353
353
  externalIcon: !1,
354
354
  intent: "subtle",
355
- children: s.terms
355
+ children: t.terms
356
356
  }
357
357
  ),
358
358
  /* @__PURE__ */ e(m, { orientation: "vertical", className: "ds:h-4" }),
359
359
  /* @__PURE__ */ e(
360
360
  f,
361
361
  {
362
- href: t.contacts,
362
+ href: s.contacts,
363
363
  external: !0,
364
364
  externalIcon: !1,
365
365
  intent: "subtle",
366
- children: s.contacts
366
+ children: t.contacts
367
367
  }
368
368
  ),
369
369
  l && /* @__PURE__ */ i(b, { children: [
@@ -382,19 +382,19 @@ function le({
382
382
  ) : null
383
383
  ] });
384
384
  }
385
- function oe(t, s) {
385
+ function oe(s, t) {
386
386
  return {
387
387
  key: "legal",
388
388
  links: [
389
- { href: t.privacy, label: s.privacy, external: !0 },
390
- { href: t.terms, label: s.terms, external: !0 },
391
- { href: t.contacts, label: s.contacts, external: !0 }
389
+ { href: s.privacy, label: t.privacy, external: !0 },
390
+ { href: s.terms, label: t.terms, external: !0 },
391
+ { href: s.contacts, label: t.contacts, external: !0 }
392
392
  ]
393
393
  };
394
394
  }
395
395
  function de({
396
- legalUrls: t,
397
- labels: s,
396
+ legalUrls: s,
397
+ labels: t,
398
398
  copyright: a,
399
399
  tagline: r,
400
400
  linkGroups: n,
@@ -406,7 +406,7 @@ function de({
406
406
  }) {
407
407
  const g = [
408
408
  ...n ?? [],
409
- oe(t, s)
409
+ oe(s, t)
410
410
  ];
411
411
  return /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xl)]", children: [
412
412
  /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xl)] ds:lg:flex-row ds:lg:items-start ds:lg:gap-[var(--spacing-xl)]", children: [
@@ -467,22 +467,22 @@ function de({
467
467
  /* @__PURE__ */ e(
468
468
  f,
469
469
  {
470
- href: t.privacy,
470
+ href: s.privacy,
471
471
  external: !0,
472
472
  externalIcon: !1,
473
473
  intent: "subtle",
474
- children: s.privacy
474
+ children: t.privacy
475
475
  }
476
476
  ),
477
477
  /* @__PURE__ */ e(m, { orientation: "vertical", className: "ds:h-4" }),
478
478
  /* @__PURE__ */ e(
479
479
  f,
480
480
  {
481
- href: t.terms,
481
+ href: s.terms,
482
482
  external: !0,
483
483
  externalIcon: !1,
484
484
  intent: "subtle",
485
- children: s.terms
485
+ children: t.terms
486
486
  }
487
487
  ),
488
488
  (h || d) && /* @__PURE__ */ i(b, { children: [
@@ -519,10 +519,10 @@ function de({
519
519
  ] });
520
520
  }
521
521
  function me({
522
- columns: t,
523
- t: s
522
+ columns: s,
523
+ t
524
524
  }) {
525
- return /* @__PURE__ */ e(b, { children: t.map((a, r) => /* @__PURE__ */ i(
525
+ return /* @__PURE__ */ e(b, { children: s.map((a, r) => /* @__PURE__ */ i(
526
526
  "section",
527
527
  {
528
528
  "aria-labelledby": `public-footer-group-${r}-${a.key}`,
@@ -532,7 +532,7 @@ function me({
532
532
  {
533
533
  id: `public-footer-group-${r}-${a.key}`,
534
534
  className: "ds:m-0 ds:mb-[var(--spacing-sm)] ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium",
535
- children: s(`footer.group.${a.key}`, { defaultValue: a.key })
535
+ children: t(`footer.group.${a.key}`, { defaultValue: a.key })
536
536
  }
537
537
  ),
538
538
  /* @__PURE__ */ e("ul", { className: "ds:list-none ds:m-0 ds:p-0 ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: a.links.map((n) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
@@ -558,12 +558,12 @@ const ye = {
558
558
  variant: {
559
559
  type: "string",
560
560
  description: "Active variant — one of `minimal`, `compact`, `full`.",
561
- read: (t) => t.getVariant()
561
+ read: (s) => s.getVariant()
562
562
  },
563
563
  legalUrls: {
564
564
  type: "object",
565
565
  description: "Resolved legal URLs for the active locale + marketingBaseUrl + overrides: `{ privacy, terms, contacts }`.",
566
- read: (t) => t.getLegalUrls()
566
+ read: (s) => s.getLegalUrls()
567
567
  }
568
568
  },
569
569
  actions: {},
@@ -588,4 +588,4 @@ export {
588
588
  W as c,
589
589
  ye as p
590
590
  };
591
- //# sourceMappingURL=public-footer.agent-Bh0rnx4i.js.map
591
+ //# sourceMappingURL=public-footer.agent-Cjfe5jus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-footer.agent-Cjfe5jus.js","sources":["../../src/components/public-footer/legal-urls.ts","../../src/components/public-footer/socials.tsx","../../src/components/public-footer/public-footer.tsx","../../src/components/public-footer/public-footer.agent.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* PublicFooter — legally-required URL composition. */\n/* */\n/* GDPR + Italian/German commercial law require Privacy, Terms-of-use, */\n/* entity name and VAT to be visible on every public AlfaDocs surface. */\n/* The kit owns the slug table so a privacy-policy URL change is a single */\n/* kit bump rather than three repo edits. */\n/* */\n/* For locales without an explicit canonical slug, we fall back to the */\n/* Italian slugs — alfadocs.com defaults to Italian and unlocalised pages */\n/* render the IT version. Marketing supplies updates over time. */\n/* -------------------------------------------------------------------- */\n\nexport const DEFAULT_MARKETING_BASE_URL = 'https://www.alfadocs.com';\n\nexport type LegalUrlKey = 'privacy' | 'terms' | 'contacts';\n\nexport type LegalSlugMap = Record<LegalUrlKey, string>;\n\n/** Per-locale slug override; missing locales fall back to the kit default. */\nexport type LegalUrlOverride = Record<string, string>;\n\nexport interface LegalUrlOverrides {\n privacy?: LegalUrlOverride;\n terms?: LegalUrlOverride;\n contacts?: LegalUrlOverride;\n}\n\n/* Italian default — also used as the fallback for any locale without an\n * explicit entry below. */\nconst ITALIAN_SLUGS: LegalSlugMap = {\n privacy: '/privacy-prenotazione-online',\n terms: '/it/condizioni-di-utilizzo',\n contacts: '/it/contattaci',\n};\n\n/* Canonical per-locale slug table. Explicit entries come from marketing;\n * everything else inherits ITALIAN_SLUGS via the resolver below. */\nconst SLUGS: Record<string, LegalSlugMap> = {\n it: ITALIAN_SLUGS,\n en: {\n privacy: '/en/privacy',\n terms: '/en/terms-of-use',\n contacts: '/en/contact-us',\n },\n de: {\n privacy: '/de/datenschutz',\n terms: '/de/nutzungsbedingungen',\n contacts: '/de/kontakt',\n },\n fr: {\n privacy: '/fr/confidentialite',\n terms: '/fr/conditions-utilisation',\n contacts: '/fr/contact',\n },\n es: {\n privacy: '/es/privacidad',\n terms: '/es/condiciones-uso',\n contacts: '/es/contacto',\n },\n};\n\nconst HTTPS_PREFIX = 'https://';\n\nfunction normaliseBaseUrl(input: string | undefined): string {\n if (!input) return DEFAULT_MARKETING_BASE_URL;\n if (!input.startsWith(HTTPS_PREFIX)) {\n if (import.meta.env.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[PublicFooter] marketingBaseUrl must start with \"https://\" — falling back to ${DEFAULT_MARKETING_BASE_URL}. Received: \"${input}\"`,\n );\n }\n return DEFAULT_MARKETING_BASE_URL;\n }\n // Strip trailing slash so composed URLs don't double up.\n return input.replace(/\\/+$/, '');\n}\n\nfunction pickSlug(\n locale: string,\n key: LegalUrlKey,\n overrides: LegalUrlOverrides | undefined,\n): string {\n const override = overrides?.[key]?.[locale];\n if (override) return override;\n const localeSlug = SLUGS[locale]?.[key];\n if (localeSlug) return localeSlug;\n return ITALIAN_SLUGS[key];\n}\n\n/** Resolved legal URLs for the active locale + baseUrl + overrides. */\nexport interface ResolvedLegalUrls {\n privacy: string;\n terms: string;\n contacts: string;\n}\n\nexport function composeLegalUrls(\n locale: string,\n marketingBaseUrl: string | undefined,\n overrides?: LegalUrlOverrides,\n): ResolvedLegalUrls {\n const base = normaliseBaseUrl(marketingBaseUrl);\n const lang = (locale || 'it').split('-')[0]; // strip region — 'pt-BR' → 'pt'\n return {\n privacy: `${base}${pickSlug(lang, 'privacy', overrides)}`,\n terms: `${base}${pickSlug(lang, 'terms', overrides)}`,\n contacts: `${base}${pickSlug(lang, 'contacts', overrides)}`,\n };\n}\n","/* -------------------------------------------------------------------- */\n/* PublicFooter — default social-network URLs + brand icon components. */\n/* */\n/* AlfaDocs's four canonical social profiles. Consumers can subset via */\n/* `socials={[...]}` or override individual `href` values. */\n/* */\n/* Icons are small inline SVG components (paths from simpleicons.org) */\n/* rendered with `currentColor` so they inherit the footer's */\n/* `--muted-foreground` ink. Lucide-react does not ship brand glyphs, and */\n/* pulling a separate brand-icon package for four logos is not worth the */\n/* bundle cost. */\n/* -------------------------------------------------------------------- */\n\nimport type { ComponentType, SVGProps } from 'react';\n\nexport const SOCIAL_NETWORKS = [\n 'linkedin',\n 'youtube',\n 'instagram',\n 'facebook',\n] as const;\n\nexport type SocialNetwork = (typeof SOCIAL_NETWORKS)[number];\n\nexport const DEFAULT_SOCIAL_URLS: Record<SocialNetwork, string> = {\n linkedin: 'https://www.linkedin.com/company/alfadocs',\n youtube: 'https://www.youtube.com/@alfadocs',\n instagram: 'https://www.instagram.com/alfadocs',\n facebook: 'https://www.facebook.com/alfadocs',\n};\n\ntype IconProps = SVGProps<SVGSVGElement>;\ntype SocialIcon = ComponentType<IconProps>;\n\nconst baseProps = {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n xmlns: 'http://www.w3.org/2000/svg',\n} as const;\n\nconst LinkedinIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.063 2.063 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n);\n\nconst YoutubeIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n);\n\nconst InstagramIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z\" />\n </svg>\n);\n\nconst FacebookIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\" />\n </svg>\n);\n\nexport const SOCIAL_ICONS: Record<SocialNetwork, SocialIcon> = {\n linkedin: LinkedinIcon,\n youtube: YoutubeIcon,\n instagram: InstagramIcon,\n facebook: FacebookIcon,\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '../link';\nimport { Separator } from '../separator';\nimport { Logo } from '../logo';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '../accordion';\nimport {\n composeLegalUrls,\n type LegalUrlOverrides,\n type ResolvedLegalUrls,\n} from './legal-urls';\nimport {\n DEFAULT_SOCIAL_URLS,\n SOCIAL_ICONS,\n SOCIAL_NETWORKS,\n type SocialNetwork,\n} from './socials';\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst ENTITY_NAME = 'AlfaDocs GmbH';\nconst ENTITY_VAT = 'P.IVA DE301955405';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:w-full',\n 'ds:text-[color:var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-sm)]',\n 'ds:bg-[var(--background)]',\n ].join(' '),\n {\n variants: {\n variant: {\n minimal: [\n 'ds:py-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:border-block-start ds:border-[var(--border)]',\n ].join(' '),\n // 0.30.5: compact got a polish pass — bumped vertical padding to\n // `lg` (~24px) so the footer reads as a real landmark, not a\n // one-line afterthought, plus a stronger top border in\n // accessible mode (the default `--border` clears 3:1 in light /\n // dark; accessible bumps to a heavier weight).\n //\n // 0.31.2: forced-colors top-border fallback. Windows High\n // Contrast strips `--border` to whatever the system maps it\n // to — which is often invisible against `Canvas`. Pinning to\n // `CanvasText` keeps the landmark edge visible for users on\n // strict HC themes.\n compact: [\n 'ds:py-[var(--spacing-lg)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:border-block-start ds:border-[var(--border)]',\n 'ds:[.theme-accessible_&]:[border-block-start-width:2px]',\n 'ds:forced-colors:[border-block-start-color:CanvasText]',\n ].join(' '),\n full: [\n 'ds:py-[var(--spacing-xl)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)]',\n 'ds:bg-[var(--muted)]',\n ].join(' '),\n },\n },\n defaultVariants: { variant: 'compact' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type PublicFooterVariant = NonNullable<\n VariantProps<typeof rootVariants>['variant']\n>;\n\nexport interface PublicFooterLink {\n href: string;\n label: string;\n /** When true, link opens in a new tab with the localised aria-label suffix. */\n external?: boolean;\n}\n\nexport interface PublicFooterLinkGroup {\n /** Stable key — used to look up the column heading via `t('ui.footer.group.<key>')`. */\n key: 'product' | 'resources' | 'company' | 'legal' | (string & {});\n links: PublicFooterLink[];\n}\n\nexport interface PublicFooterSocial {\n network: SocialNetwork;\n /** Override the kit's default URL. */\n href?: string;\n}\n\nexport interface PublicFooterProps {\n variant: PublicFooterVariant;\n /** Origin for legally-required URLs. Default: 'https://www.alfadocs.com'. */\n marketingBaseUrl?: string;\n /** Override individual legal-link slugs per locale. Rare. */\n legalUrlOverrides?: LegalUrlOverrides;\n /** `full` variant: consumer-supplied link columns. Legal column is always rendered. */\n linkGroups?: PublicFooterLinkGroup[];\n /** `full` variant: subset of social networks. Default: all four. Pass `[]` to hide the row. */\n socials?: PublicFooterSocial[];\n /** `full` variant: custom logo node. Default: kit's wordmark Logo. */\n logoSlot?: ReactNode;\n /** Extra surface-specific links — appended after the standard nav row in compact + full. Ignored by minimal. */\n extraNavSlot?: ReactNode;\n /** Trust badges (HIPAA, ISO). Rendered at the start of `minimal`'s row, or in the bottom strip of `full`. */\n trustBadgesSlot?: ReactNode;\n /**\n * @default false\n * Render the brand tagline (\"German technology, Italian design\") in\n * the bottom microcopy row of `compact` and `full` variants.\n *\n * 0.32.4: default flipped to `false`. The tagline was loud on\n * booking-website's deployed footer and didn't carry product\n * meaning for end-users; marketing surfaces can opt back in\n * explicitly with `showTagline`. The `footer.tagline` i18n key\n * stays available so the opt-in path still works.\n */\n showTagline?: boolean;\n 'aria-label'?: string;\n id?: string;\n}\n\nexport interface PublicFooterHandle {\n getVariant: () => PublicFooterVariant;\n /** Resolved legal URLs for the current locale + marketingBaseUrl + overrides. */\n getLegalUrls: () => ResolvedLegalUrls;\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\n/** Allowlist consumer-supplied URLs — public marketing surface, defence in depth. */\nconst SAFE_HREF_RE = /^(https?:\\/\\/|mailto:|tel:|\\/(?!\\/))/i;\nfunction safeHref(href: string): string {\n return SAFE_HREF_RE.test(href) ? href : '#';\n}\n\nfunction CopyrightLine({\n copyright,\n align = 'center',\n}: {\n copyright: string;\n align?: 'start' | 'center';\n}) {\n return (\n <p\n className={[\n 'ds:m-0 ds:text-[color:var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-sm)]',\n align === 'center' ? 'ds:text-center' : 'ds:text-start',\n ].join(' ')}\n >\n {copyright}\n </p>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* PublicFooter */\n/* ------------------------------------------------------------------ */\n\nexport const PublicFooter = forwardRef<PublicFooterHandle, PublicFooterProps>(\n function PublicFooter(\n {\n variant,\n marketingBaseUrl,\n legalUrlOverrides,\n linkGroups,\n socials,\n logoSlot,\n extraNavSlot,\n trustBadgesSlot,\n showTagline = false,\n id,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n\n const legalUrls = useMemo(\n () =>\n composeLegalUrls(i18n.language, marketingBaseUrl, legalUrlOverrides),\n [i18n.language, marketingBaseUrl, legalUrlOverrides],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getVariant: () => variant,\n getLegalUrls: () => legalUrls,\n }),\n [variant, legalUrls],\n );\n\n const year = new Date().getFullYear();\n const copyright = t('footer.copyright', {\n year,\n entity: ENTITY_NAME,\n vat: ENTITY_VAT,\n });\n const tagline = showTagline ? t('footer.tagline') : undefined;\n const landmarkLabel = ariaLabel ?? t('footer.nav.label');\n\n const labels = {\n privacy: t('footer.nav.privacy'),\n terms: t('footer.nav.terms'),\n contacts: t('footer.nav.contacts'),\n };\n\n const resolvedSocials = useMemo<PublicFooterSocial[]>(() => {\n if (socials !== undefined) return socials;\n return SOCIAL_NETWORKS.map((network) => ({ network }));\n }, [socials]);\n\n return (\n <footer\n id={id}\n role=\"contentinfo\"\n aria-label={landmarkLabel}\n data-component=\"public-footer\"\n data-variant={variant}\n className={rootVariants({ variant })}\n >\n {variant === 'minimal' && (\n <MinimalBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n trustBadgesSlot={trustBadgesSlot}\n />\n )}\n {variant === 'compact' && (\n <CompactBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n tagline={tagline}\n socials={resolvedSocials}\n logoSlot={logoSlot}\n extraNavSlot={extraNavSlot}\n t={t}\n />\n )}\n {variant === 'full' && (\n <FullBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n tagline={tagline}\n linkGroups={linkGroups}\n socials={resolvedSocials}\n logoSlot={logoSlot}\n extraNavSlot={extraNavSlot}\n trustBadgesSlot={trustBadgesSlot}\n t={t}\n />\n )}\n </footer>\n );\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Minimal */\n/* ------------------------------------------------------------------ */\n\nfunction MinimalBody({\n legalUrls,\n labels,\n copyright,\n trustBadgesSlot,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n trustBadgesSlot?: ReactNode;\n}) {\n return (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-sm)]\">\n {trustBadgesSlot && (\n <span\n data-slot=\"trust-badges\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)] ds:me-[var(--spacing-sm)]\"\n >\n {trustBadgesSlot}\n </span>\n )}\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <span>{copyright}</span>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Compact */\n/* ------------------------------------------------------------------ */\n\n// Shared social-icon row — used by Compact and Full. Renders an icon\n// per enabled network; the parent decides where to drop it.\nfunction SocialIconList({\n socials,\n t,\n size,\n}: {\n socials: PublicFooterSocial[];\n t: TFunction;\n size: 'sm' | 'md';\n}) {\n if (socials.length === 0) return null;\n const iconClass = size === 'sm' ? 'ds:size-4' : 'ds:size-5';\n return (\n <ul\n data-slot=\"socials\"\n className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\"\n >\n {socials.map((s) => {\n const Icon = SOCIAL_ICONS[s.network];\n const href = s.href ?? DEFAULT_SOCIAL_URLS[s.network];\n const label = t(`footer.social.aria.${s.network}`);\n return (\n <li key={s.network}>\n <Link\n href={safeHref(href)}\n external\n externalIcon={false}\n intent=\"subtle\"\n aria-label={label}\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:min-w-[var(--min-target-size)] ds:min-h-[var(--min-target-size)]\"\n >\n <Icon\n aria-hidden=\"true\"\n className={iconClass}\n focusable=\"false\"\n />\n </Link>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction CompactBody({\n legalUrls,\n labels,\n copyright,\n tagline,\n socials,\n logoSlot,\n extraNavSlot,\n t,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n tagline?: string;\n socials: PublicFooterSocial[];\n logoSlot?: ReactNode;\n extraNavSlot?: ReactNode;\n t: TFunction;\n}) {\n // 0.30.5: compact polish — defaults to a social-icon row + (small,\n // muted) wordmark at the start of the link row. Consumers who want\n // the lean treatment can opt out via `socials={[]}` (kills the row)\n // and `logoSlot={<></>}` (kills the wordmark). The lean fallback is\n // still a useful surface for embedded widgets (the booking aside).\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-md)]\">\n {socials.length > 0 ? (\n <SocialIconList socials={socials} t={t} size=\"sm\" />\n ) : null}\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-sm)]\">\n {logoSlot !== undefined ? (\n logoSlot !== null && logoSlot !== false && logoSlot !== '' ? (\n <>\n <span\n data-slot=\"compact-logo\"\n className=\"ds:inline-flex ds:items-center ds:opacity-70\"\n >\n {logoSlot}\n </span>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n </>\n ) : null\n ) : (\n // No consumer override — render the kit's default small\n // wordmark, muted so it reads as marker not headline.\n <>\n <span\n data-slot=\"compact-logo\"\n className=\"ds:inline-flex ds:items-center ds:opacity-70\"\n >\n <Logo variant=\"wordmark\" tone=\"auto\" aria-label=\"AlfaDocs\" />\n </span>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n </>\n )}\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.contacts}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.contacts}\n </Link>\n {extraNavSlot && (\n <>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <span data-slot=\"extra-nav\">{extraNavSlot}</span>\n </>\n )}\n </div>\n <CopyrightLine copyright={copyright} />\n {tagline ? (\n <p\n data-slot=\"tagline\"\n className=\"ds:m-0 ds:text-center ds:text-[color:var(--muted-foreground)] ds:text-[length:var(--font-size-xs)] ds:italic\"\n >\n {tagline}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Full */\n/* ------------------------------------------------------------------ */\n\ntype TFunction = ReturnType<typeof useTranslation>['t'];\n\nfunction buildLegalColumn(\n legalUrls: ResolvedLegalUrls,\n labels: { privacy: string; terms: string; contacts: string },\n): PublicFooterLinkGroup {\n return {\n key: 'legal',\n links: [\n { href: legalUrls.privacy, label: labels.privacy, external: true },\n { href: legalUrls.terms, label: labels.terms, external: true },\n { href: legalUrls.contacts, label: labels.contacts, external: true },\n ],\n };\n}\n\nfunction FullBody({\n legalUrls,\n labels,\n copyright,\n tagline,\n linkGroups,\n socials,\n logoSlot,\n extraNavSlot,\n trustBadgesSlot,\n t,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n tagline?: string;\n linkGroups?: PublicFooterLinkGroup[];\n socials: PublicFooterSocial[];\n logoSlot?: ReactNode;\n extraNavSlot?: ReactNode;\n trustBadgesSlot?: ReactNode;\n t: TFunction;\n}) {\n // The kit-built Legal column is always appended — Privacy / Terms /\n // Contacts must render in every variant per the legal brief.\n const columns: PublicFooterLinkGroup[] = [\n ...(linkGroups ?? []),\n buildLegalColumn(legalUrls, labels),\n ];\n\n const brand = (\n <div\n data-slot=\"brand\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <div className=\"ds:inline-flex\">\n {logoSlot ?? (\n <Logo variant=\"wordmark\" tone=\"auto\" aria-label=\"AlfaDocs\" />\n )}\n </div>\n <SocialIconList socials={socials} t={t} size=\"md\" />\n </div>\n );\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xl)]\">\n {/* Top: brand block on inline-start + link columns to inline-end */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xl)] ds:lg:flex-row ds:lg:items-start ds:lg:gap-[var(--spacing-xl)]\">\n <div className=\"ds:lg:w-[15rem] ds:lg:shrink-0\">{brand}</div>\n\n <div className=\"ds:flex-1 ds:min-w-0\">\n {/* md+ — grid of columns */}\n <div\n className=\"ds:hidden ds:md:grid ds:md:grid-cols-2 ds:lg:grid-cols-4 ds:gap-[var(--spacing-lg)]\"\n data-slot=\"link-columns-grid\"\n data-columns={columns.length}\n >\n <FullColumnsGrid columns={columns} t={t} />\n </div>\n\n {/* below md — accordion */}\n <div className=\"ds:md:hidden\" data-slot=\"link-columns-accordion\">\n <Accordion type=\"multiple\">\n {columns.map((group, i) => (\n <AccordionItem\n key={`${i}-${group.key}`}\n value={`${i}-${group.key}`}\n >\n <AccordionTrigger>\n {t(`footer.group.${group.key}`, {\n defaultValue: group.key,\n })}\n </AccordionTrigger>\n <AccordionContent>\n <ul className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {group.links.map((link) => (\n <li key={`${group.key}-${link.href}-${link.label}`}>\n <Link\n href={safeHref(link.href)}\n external={link.external}\n externalIcon={false}\n intent=\"subtle\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n </div>\n\n <Separator orientation=\"horizontal\" />\n\n {/* Bottom strip: copyright inline-start, mini legal links inline-end\n on the same row. Stacks under sm. */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:sm:flex-row ds:sm:items-center ds:sm:justify-between\">\n <CopyrightLine copyright={copyright} align=\"start\" />\n <div\n data-slot=\"bottom-legal\"\n className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)] ds:sm:justify-end\"\n >\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n {(trustBadgesSlot || extraNavSlot) && (\n <>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n {trustBadgesSlot && (\n <span\n data-slot=\"trust-badges\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]\"\n >\n {trustBadgesSlot}\n </span>\n )}\n {extraNavSlot && (\n <span\n data-slot=\"extra-nav\"\n className=\"ds:inline-flex ds:items-center\"\n >\n {extraNavSlot}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n\n {tagline ? (\n <p\n data-slot=\"tagline\"\n className=\"ds:m-0 ds:text-center ds:text-[color:var(--muted-foreground)] ds:text-[length:var(--font-size-xs)] ds:italic\"\n >\n {tagline}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction FullColumnsGrid({\n columns,\n t,\n}: {\n columns: PublicFooterLinkGroup[];\n t: TFunction;\n}) {\n return (\n <>\n {columns.map((group, i) => (\n <section\n key={`${i}-${group.key}`}\n aria-labelledby={`public-footer-group-${i}-${group.key}`}\n >\n {/* h3 so the footer's column headings don't collide with the host\n page's section h2 outline. */}\n <h3\n id={`public-footer-group-${i}-${group.key}`}\n className=\"ds:m-0 ds:mb-[var(--spacing-sm)] ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium\"\n >\n {t(`footer.group.${group.key}`, { defaultValue: group.key })}\n </h3>\n <ul className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {group.links.map((link) => (\n <li key={`${group.key}-${link.href}-${link.label}`}>\n <Link\n href={safeHref(link.href)}\n external={link.external}\n externalIcon={false}\n intent=\"subtle\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </>\n );\n}\n\nPublicFooter.displayName = 'PublicFooter';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — PublicFooter. */\n/* */\n/* PublicFooter is the kit's legally-grounded site footer with three */\n/* visual variants (minimal/compact/full). The adapter surfaces the */\n/* active variant + a `get_legal_urls` read so a host agent can verify */\n/* that the consumer's `marketingBaseUrl` + locale resolve to the */\n/* expected privacy / terms / contacts URLs without scraping DOM. */\n/* No write actions — the footer has no mutable state. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PublicFooterHandle } from './public-footer';\n\nexport const publicFooterAgent: AgentAdapter<PublicFooterHandle> = {\n id: 'public-footer',\n capabilities: ['navigate'],\n state: {\n variant: {\n type: 'string',\n description: 'Active variant — one of `minimal`, `compact`, `full`.',\n read: (handle) => handle.getVariant(),\n },\n legalUrls: {\n type: 'object',\n description:\n 'Resolved legal URLs for the active locale + marketingBaseUrl + overrides: `{ privacy, terms, contacts }`.',\n read: (handle) => handle.getLegalUrls(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'public-footer',\n description:\n 'Marks the PublicFooter root region. The root also carries `data-variant=\"minimal|compact|full\"` for CSS + agent selectors.',\n },\n instanceId: {\n attr: 'id',\n sourceProp: 'id',\n description: 'Sourced from the `id` prop when provided.',\n },\n },\n};\n"],"names":["DEFAULT_MARKETING_BASE_URL","ITALIAN_SLUGS","SLUGS","HTTPS_PREFIX","normaliseBaseUrl","input","pickSlug","locale","key","overrides","override","_a","localeSlug","_b","composeLegalUrls","marketingBaseUrl","base","lang","SOCIAL_NETWORKS","DEFAULT_SOCIAL_URLS","baseProps","LinkedinIcon","props","jsx","YoutubeIcon","InstagramIcon","FacebookIcon","SOCIAL_ICONS","ENTITY_NAME","ENTITY_VAT","rootVariants","cva","SAFE_HREF_RE","safeHref","href","CopyrightLine","copyright","align","PublicFooter","forwardRef","variant","legalUrlOverrides","linkGroups","socials","logoSlot","extraNavSlot","trustBadgesSlot","showTagline","id","ariaLabel","ref","t","i18n","useTranslation","legalUrls","useMemo","useImperativeHandle","year","tagline","landmarkLabel","labels","resolvedSocials","network","jsxs","MinimalBody","CompactBody","FullBody","Link","Separator","SocialIconList","size","iconClass","s","Icon","label","Fragment","Logo","buildLegalColumn","columns","FullColumnsGrid","Accordion","group","i","AccordionItem","AccordionTrigger","AccordionContent","link","publicFooterAgent","handle"],"mappings":";;;;;;;;AAaO,MAAMA,IAA6B,4BAiBpCC,IAA8B;AAAA,EAClC,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AACZ,GAIMC,IAAsC;AAAA,EAC1C,IAAID;AAAA,EACJ,IAAI;AAAA,IACF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,IAAI;AAAA,IACF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,IAAI;AAAA,IACF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,IAAI;AAAA,IACF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAEd,GAEME,IAAe;AAErB,SAASC,EAAiBC,GAAmC;AAE3D,SADI,CAACA,KACD,CAACA,EAAM,WAAWF,CAAY,IAOzBH,IAGFK,EAAM,QAAQ,QAAQ,EAAE;AACjC;AAEA,SAASC,EACPC,GACAC,GACAC,GACQ;;AACR,QAAMC,KAAWC,IAAAF,KAAA,gBAAAA,EAAYD,OAAZ,gBAAAG,EAAmBJ;AACpC,MAAIG,EAAU,QAAOA;AACrB,QAAME,KAAaC,IAAAX,EAAMK,CAAM,MAAZ,gBAAAM,EAAgBL;AACnC,SAAII,KACGX,EAAcO,CAAG;AAC1B;AASO,SAASM,EACdP,GACAQ,GACAN,GACmB;AACnB,QAAMO,IAAOZ,EAAiBW,CAAgB,GACxCE,KAAQV,KAAU,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1C,SAAO;AAAA,IACL,SAAS,GAAGS,CAAI,GAAGV,EAASW,GAAM,WAAWR,CAAS,CAAC;AAAA,IACvD,OAAO,GAAGO,CAAI,GAAGV,EAASW,GAAM,SAASR,CAAS,CAAC;AAAA,IACnD,UAAU,GAAGO,CAAI,GAAGV,EAASW,GAAM,YAAYR,CAAS,CAAC;AAAA,EAAA;AAE7D;AC/FO,MAAMS,IAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIaC,IAAqD;AAAA,EAChE,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AACZ,GAKMC,IAAY;AAAA,EAChB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AACT,GAEMC,IAA2B,CAACC,MAChC,gBAAAC,EAAC,OAAA,EAAK,GAAGH,GAAY,GAAGE,GACtB,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,ybAAwb,GAClc,GAGIC,IAA0B,CAACF,MAC/B,gBAAAC,EAAC,OAAA,EAAK,GAAGH,GAAY,GAAGE,GACtB,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,gWAA+V,GACzW,GAGIE,IAA4B,CAACH,MACjC,gBAAAC,EAAC,OAAA,EAAK,GAAGH,GAAY,GAAGE,GACtB,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,63BAA43B,GACt4B,GAGIG,KAA2B,CAACJ,MAChC,gBAAAC,EAAC,OAAA,EAAK,GAAGH,GAAY,GAAGE,GACtB,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,kSAAiS,GAC3S,GAGWI,KAAkD;AAAA,EAC7D,UAAUN;AAAA,EACV,SAASG;AAAA,EACT,WAAWC;AAAA,EACX,UAAUC;AACZ,GCpCME,KAAc,iBACdC,KAAa,qBAMbC,KAAeC;AAAA,EACnB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYV,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,iBAAiB,EAAE,SAAS,UAAA;AAAA,EAAU;AAE1C,GAwEMC,KAAe;AACrB,SAASC,EAASC,GAAsB;AACtC,SAAOF,GAAa,KAAKE,CAAI,IAAIA,IAAO;AAC1C;AAEA,SAASC,EAAc;AAAA,EACrB,WAAAC;AAAA,EACA,OAAAC,IAAQ;AACV,GAGG;AACD,SACE,gBAAAd;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACAc,MAAU,WAAW,mBAAmB;AAAA,MAAA,EACxC,KAAK,GAAG;AAAA,MAET,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;AAMO,MAAME,KAAeC;AAAA,EAC1B,SACE;AAAA,IACE,SAAAC;AAAA,IACA,kBAAAzB;AAAA,IACA,mBAAA0B;AAAA,IACA,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,IAAAC;AAAA,IACA,cAAcC;AAAA,EAAA,GAEhBC,GACA;AACA,UAAM,EAAE,GAAAC,GAAG,MAAAC,MAASC,EAAe,IAAI,GAEjCC,IAAYC;AAAA,MAChB,MACEzC,EAAiBsC,EAAK,UAAUrC,GAAkB0B,CAAiB;AAAA,MACrE,CAACW,EAAK,UAAUrC,GAAkB0B,CAAiB;AAAA,IAAA;AAGrD,IAAAe;AAAA,MACEN;AAAA,MACA,OAAO;AAAA,QACL,YAAY,MAAMV;AAAA,QAClB,cAAc,MAAMc;AAAA,MAAA;AAAA,MAEtB,CAACd,GAASc,CAAS;AAAA,IAAA;AAGrB,UAAMG,KAAO,oBAAI,KAAA,GAAO,YAAA,GAClBrB,IAAYe,EAAE,oBAAoB;AAAA,MACtC,MAAAM;AAAA,MACA,QAAQ7B;AAAA,MACR,KAAKC;AAAA,IAAA,CACN,GACK6B,IAAUX,IAAcI,EAAE,gBAAgB,IAAI,QAC9CQ,IAAgBV,KAAaE,EAAE,kBAAkB,GAEjDS,IAAS;AAAA,MACb,SAAST,EAAE,oBAAoB;AAAA,MAC/B,OAAOA,EAAE,kBAAkB;AAAA,MAC3B,UAAUA,EAAE,qBAAqB;AAAA,IAAA,GAG7BU,IAAkBN,EAA8B,MAChDZ,MAAY,SAAkBA,IAC3BzB,EAAgB,IAAI,CAAC4C,OAAa,EAAE,SAAAA,IAAU,GACpD,CAACnB,CAAO,CAAC;AAEZ,WACE,gBAAAoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAf;AAAA,QACA,MAAK;AAAA,QACL,cAAYW;AAAA,QACZ,kBAAe;AAAA,QACf,gBAAcnB;AAAA,QACd,WAAWV,GAAa,EAAE,SAAAU,GAAS;AAAA,QAElC,UAAA;AAAA,UAAAA,MAAY,aACX,gBAAAjB;AAAA,YAACyC;AAAA,YAAA;AAAA,cACC,WAAAV;AAAA,cACA,QAAAM;AAAA,cACA,WAAAxB;AAAA,cACA,iBAAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAGHN,MAAY,aACX,gBAAAjB;AAAA,YAAC0C;AAAA,YAAA;AAAA,cACC,WAAAX;AAAA,cACA,QAAAM;AAAA,cACA,WAAAxB;AAAA,cACA,SAAAsB;AAAA,cACA,SAASG;AAAA,cACT,UAAAjB;AAAA,cACA,cAAAC;AAAA,cACA,GAAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAGHX,MAAY,UACX,gBAAAjB;AAAA,YAAC2C;AAAA,YAAA;AAAA,cACC,WAAAZ;AAAA,cACA,QAAAM;AAAA,cACA,WAAAxB;AAAA,cACA,SAAAsB;AAAA,cACA,YAAAhB;AAAA,cACA,SAASmB;AAAA,cACT,UAAAjB;AAAA,cACA,cAAAC;AAAA,cACA,iBAAAC;AAAA,cACA,GAAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAMA,SAASa,GAAY;AAAA,EACnB,WAAAV;AAAA,EACA,QAAAM;AAAA,EACA,WAAAxB;AAAA,EACA,iBAAAU;AACF,GAKG;AACD,SACE,gBAAAiB,EAAC,OAAA,EAAI,WAAU,oHACZ,UAAA;AAAA,IAAAjB,KACC,gBAAAvB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAU;AAAA,QAET,UAAAuB;AAAA,MAAA;AAAA,IAAA;AAAA,IAGL,gBAAAvB;AAAA,MAAC4C;AAAA,MAAA;AAAA,QACC,MAAMb,EAAU;AAAA,QAChB,UAAQ;AAAA,QACR,cAAc;AAAA,QACd,QAAO;AAAA,QAEN,UAAAM,EAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAEV,gBAAArC,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,IACrD,gBAAA7C;AAAA,MAAC4C;AAAA,MAAA;AAAA,QACC,MAAMb,EAAU;AAAA,QAChB,UAAQ;AAAA,QACR,cAAc;AAAA,QACd,QAAO;AAAA,QAEN,UAAAM,EAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAEV,gBAAArC,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,IACrD,gBAAA7C,EAAC,UAAM,UAAAa,EAAA,CAAU;AAAA,EAAA,GACnB;AAEJ;AAQA,SAASiC,EAAe;AAAA,EACtB,SAAA1B;AAAA,EACA;AAAA,EACA,MAAA2B;AACF,GAIG;AACD,MAAI3B,EAAQ,WAAW,EAAG,QAAO;AACjC,QAAM4B,IAAYD,MAAS,OAAO,cAAc;AAChD,SACE,gBAAA/C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAET,UAAAoB,EAAQ,IAAI,CAAC6B,MAAM;AAClB,cAAMC,IAAO9C,GAAa6C,EAAE,OAAO,GAC7BtC,IAAOsC,EAAE,QAAQrD,EAAoBqD,EAAE,OAAO,GAC9CE,IAAQ,EAAE,sBAAsBF,EAAE,OAAO,EAAE;AACjD,iCACG,MAAA,EACC,UAAA,gBAAAjD;AAAA,UAAC4C;AAAA,UAAA;AAAA,YACC,MAAMlC,EAASC,CAAI;AAAA,YACnB,UAAQ;AAAA,YACR,cAAc;AAAA,YACd,QAAO;AAAA,YACP,cAAYwC;AAAA,YACZ,WAAU;AAAA,YAEV,UAAA,gBAAAnD;AAAA,cAACkD;AAAA,cAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,WAAWF;AAAA,gBACX,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA,EACF,GAdOC,EAAE,OAeX;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASP,GAAY;AAAA,EACnB,WAAAX;AAAA,EACA,QAAAM;AAAA,EACA,WAAAxB;AAAA,EACA,SAAAsB;AAAA,EACA,SAAAf;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAAM;AACF,GASG;AAMD,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAU,kEACZ,UAAA;AAAA,IAAApB,EAAQ,SAAS,IAChB,gBAAApB,EAAC8C,GAAA,EAAe,SAAA1B,GAAkB,GAAAQ,GAAM,MAAK,MAAK,IAChD;AAAA,IACJ,gBAAAY,EAAC,OAAA,EAAI,WAAU,oHACZ,UAAA;AAAA,MAAAnB,MAAa,SACZA,MAAa,QAAQA,MAAa,MAASA,MAAa,KACtD,gBAAAmB,EAAAY,GAAA,EACE,UAAA;AAAA,QAAA,gBAAApD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET,UAAAqB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAArB,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,SAAA,CAAS;AAAA,MAAA,EAAA,CACvD,IACE;AAAA;AAAA;AAAA,QAIJ,gBAAAL,EAAAY,GAAA,EACE,UAAA;AAAA,UAAA,gBAAApD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA,cAEV,4BAACqD,GAAA,EAAK,SAAQ,YAAW,MAAK,QAAO,cAAW,WAAA,CAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7D,gBAAArD,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,SAAA,CAAS;AAAA,QAAA,EAAA,CACvD;AAAA;AAAA,MAEF,gBAAA7C;AAAA,QAAC4C;AAAA,QAAA;AAAA,UACC,MAAMb,EAAU;AAAA,UAChB,UAAQ;AAAA,UACR,cAAc;AAAA,UACd,QAAO;AAAA,UAEN,UAAAM,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAEV,gBAAArC,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,MACrD,gBAAA7C;AAAA,QAAC4C;AAAA,QAAA;AAAA,UACC,MAAMb,EAAU;AAAA,UAChB,UAAQ;AAAA,UACR,cAAc;AAAA,UACd,QAAO;AAAA,UAEN,UAAAM,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAEV,gBAAArC,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,MACrD,gBAAA7C;AAAA,QAAC4C;AAAA,QAAA;AAAA,UACC,MAAMb,EAAU;AAAA,UAChB,UAAQ;AAAA,UACR,cAAc;AAAA,UACd,QAAO;AAAA,UAEN,UAAAM,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAETf,KACC,gBAAAkB,EAAAY,GAAA,EACE,UAAA;AAAA,QAAA,gBAAApD,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,QACrD,gBAAA7C,EAAC,QAAA,EAAK,aAAU,aAAa,UAAAsB,EAAA,CAAa;AAAA,MAAA,EAAA,CAC5C;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAtB,EAACY,KAAc,WAAAC,GAAsB;AAAA,IACpCsB,IACC,gBAAAnC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAU;AAAA,QAET,UAAAmC;AAAA,MAAA;AAAA,IAAA,IAED;AAAA,EAAA,GACN;AAEJ;AAQA,SAASmB,GACPvB,GACAM,GACuB;AACvB,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,MACL,EAAE,MAAMN,EAAU,SAAS,OAAOM,EAAO,SAAS,UAAU,GAAA;AAAA,MAC5D,EAAE,MAAMN,EAAU,OAAO,OAAOM,EAAO,OAAO,UAAU,GAAA;AAAA,MACxD,EAAE,MAAMN,EAAU,UAAU,OAAOM,EAAO,UAAU,UAAU,GAAA;AAAA,IAAK;AAAA,EACrE;AAEJ;AAEA,SAASM,GAAS;AAAA,EAChB,WAAAZ;AAAA,EACA,QAAAM;AAAA,EACA,WAAAxB;AAAA,EACA,SAAAsB;AAAA,EACA,YAAAhB;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,GAAAK;AACF,GAWG;AAGD,QAAM2B,IAAmC;AAAA,IACvC,GAAIpC,KAAc,CAAA;AAAA,IAClBmC,GAAiBvB,GAAWM,CAAM;AAAA,EAAA;AAiBpC,SACE,gBAAAG,EAAC,OAAA,EAAI,WAAU,kDAEb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iHACb,UAAA;AAAA,MAAA,gBAAAxC,EAAC,OAAA,EAAI,WAAU,kCAAkC,UAjBrD,gBAAAwC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAxC,EAAC,OAAA,EAAI,WAAU,kBACZ,UAAAqB,KACC,gBAAArB,EAACqD,GAAA,EAAK,SAAQ,YAAW,MAAK,QAAO,cAAW,WAAA,CAAW,GAE/D;AAAA,YACA,gBAAArD,EAAC8C,GAAA,EAAe,SAAA1B,GAAkB,GAAAQ,GAAM,MAAK,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAQO;AAAA,MAEvD,gBAAAY,EAAC,OAAA,EAAI,WAAU,wBAEb,UAAA;AAAA,QAAA,gBAAAxC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAU;AAAA,YACV,gBAAcuD,EAAQ;AAAA,YAEtB,UAAA,gBAAAvD,EAACwD,IAAA,EAAgB,SAAAD,GAAkB,GAAA3B,EAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAI3C,gBAAA5B,EAAC,OAAA,EAAI,WAAU,gBAAe,aAAU,0BACtC,UAAA,gBAAAA,EAACyD,GAAA,EAAU,MAAK,YACb,UAAAF,EAAQ,IAAI,CAACG,GAAOC,MACnB,gBAAAnB;AAAA,UAACoB;AAAA,UAAA;AAAA,YAEC,OAAO,GAAGD,CAAC,IAAID,EAAM,GAAG;AAAA,YAExB,UAAA;AAAA,cAAA,gBAAA1D,EAAC6D,GAAA,EACE,UAAAjC,EAAE,gBAAgB8B,EAAM,GAAG,IAAI;AAAA,gBAC9B,cAAcA,EAAM;AAAA,cAAA,CACrB,GACH;AAAA,cACA,gBAAA1D,EAAC8D,GAAA,EACC,UAAA,gBAAA9D,EAAC,MAAA,EAAG,WAAU,6EACX,UAAA0D,EAAM,MAAM,IAAI,CAACK,MAChB,gBAAA/D,EAAC,MAAA,EACC,UAAA,gBAAAA;AAAA,gBAAC4C;AAAA,gBAAA;AAAA,kBACC,MAAMlC,EAASqD,EAAK,IAAI;AAAA,kBACxB,UAAUA,EAAK;AAAA,kBACf,cAAc;AAAA,kBACd,QAAO;AAAA,kBAEN,UAAAA,EAAK;AAAA,gBAAA;AAAA,cAAA,EACR,GARO,GAAGL,EAAM,GAAG,IAAIK,EAAK,IAAI,IAAIA,EAAK,KAAK,EAShD,CACD,GACH,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UAvBK,GAAGJ,CAAC,IAAID,EAAM,GAAG;AAAA,QAAA,CAyBzB,GACH,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAEA,gBAAA1D,EAAC6C,GAAA,EAAU,aAAY,aAAA,CAAa;AAAA,IAIpC,gBAAAL,EAAC,OAAA,EAAI,WAAU,0GACb,UAAA;AAAA,MAAA,gBAAAxC,EAACY,GAAA,EAAc,WAAAC,GAAsB,OAAM,QAAA,CAAQ;AAAA,MACnD,gBAAA2B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAxC;AAAA,cAAC4C;AAAA,cAAA;AAAA,gBACC,MAAMb,EAAU;AAAA,gBAChB,UAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,QAAO;AAAA,gBAEN,UAAAM,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAEV,gBAAArC,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,YACrD,gBAAA7C;AAAA,cAAC4C;AAAA,cAAA;AAAA,gBACC,MAAMb,EAAU;AAAA,gBAChB,UAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,QAAO;AAAA,gBAEN,UAAAM,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,aAERd,KAAmBD,MACnB,gBAAAkB,EAAAY,GAAA,EACE,UAAA;AAAA,cAAA,gBAAApD,EAAC6C,GAAA,EAAU,aAAY,YAAW,WAAU,UAAS;AAAA,cACpDtB,KACC,gBAAAvB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,aAAU;AAAA,kBACV,WAAU;AAAA,kBAET,UAAAuB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGJD,KACC,gBAAAtB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,aAAU;AAAA,kBACV,WAAU;AAAA,kBAET,UAAAsB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GACF;AAAA,IAECa,IACC,gBAAAnC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAU;AAAA,QAET,UAAAmC;AAAA,MAAA;AAAA,IAAA,IAED;AAAA,EAAA,GACN;AAEJ;AAEA,SAASqB,GAAgB;AAAA,EACvB,SAAAD;AAAA,EACA;AACF,GAGG;AACD,SACE,gBAAAvD,EAAAoD,GAAA,EACG,UAAAG,EAAQ,IAAI,CAACG,GAAOC,MACnB,gBAAAnB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,mBAAiB,uBAAuBmB,CAAC,IAAID,EAAM,GAAG;AAAA,MAItD,UAAA;AAAA,QAAA,gBAAA1D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI,uBAAuB2D,CAAC,IAAID,EAAM,GAAG;AAAA,YACzC,WAAU;AAAA,YAET,UAAA,EAAE,gBAAgBA,EAAM,GAAG,IAAI,EAAE,cAAcA,EAAM,IAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAE7D,gBAAA1D,EAAC,MAAA,EAAG,WAAU,6EACX,UAAA0D,EAAM,MAAM,IAAI,CAACK,MAChB,gBAAA/D,EAAC,MAAA,EACC,UAAA,gBAAAA;AAAA,UAAC4C;AAAA,UAAA;AAAA,YACC,MAAMlC,EAASqD,EAAK,IAAI;AAAA,YACxB,UAAUA,EAAK;AAAA,YACf,cAAc;AAAA,YACd,QAAO;AAAA,YAEN,UAAAA,EAAK;AAAA,UAAA;AAAA,QAAA,EACR,GARO,GAAGL,EAAM,GAAG,IAAIK,EAAK,IAAI,IAAIA,EAAK,KAAK,EAShD,CACD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,IAxBK,GAAGJ,CAAC,IAAID,EAAM,GAAG;AAAA,EAAA,CA0BzB,GACH;AAEJ;AAEA3C,GAAa,cAAc;AClrBpB,MAAMiD,KAAsD;AAAA,EACjE,IAAI;AAAA,EACJ,cAAc,CAAC,UAAU;AAAA,EACzB,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,WAAA;AAAA,IAAW;AAAA,IAEtC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,EACxC;AAAA,EAEF,SAAS,CAAA;AAAA,EACT,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aACE;AAAA,IAAA;AAAA,IAEJ,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}