@ugurdemirel/landcraft 0.1.23 → 0.1.24

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.
Files changed (105) hide show
  1. package/README.md +13 -8
  2. package/dist/cjs/components/Button.cjs +1 -1
  3. package/dist/cjs/components/Button.cjs.map +1 -1
  4. package/dist/cjs/components/CTA/CTA.cjs +1 -1
  5. package/dist/cjs/components/CTA/CTA.cjs.map +1 -1
  6. package/dist/cjs/components/CTA/parts.cjs +1 -1
  7. package/dist/cjs/components/CTA/parts.cjs.map +1 -1
  8. package/dist/cjs/components/CTA/variants/Panel.cjs +1 -1
  9. package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -1
  10. package/dist/cjs/components/CTA/variants/Surface.cjs +1 -1
  11. package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -1
  12. package/dist/cjs/components/Footer/Footer.cjs +1 -1
  13. package/dist/cjs/components/Footer/Footer.cjs.map +1 -1
  14. package/dist/cjs/components/Footer/parts.cjs +1 -1
  15. package/dist/cjs/components/Footer/parts.cjs.map +1 -1
  16. package/dist/cjs/components/Footer/variants/Columns.cjs +2 -0
  17. package/dist/cjs/components/Footer/variants/Columns.cjs.map +1 -0
  18. package/dist/cjs/components/Footer/variants/Editorial.cjs +1 -1
  19. package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -1
  20. package/dist/cjs/components/Footer/variants/Minimal.cjs +1 -1
  21. package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -1
  22. package/dist/cjs/components/Hero/parts.cjs +1 -1
  23. package/dist/cjs/components/Hero/parts.cjs.map +1 -1
  24. package/dist/cjs/components/Hero/variants/Centered.cjs +1 -1
  25. package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -1
  26. package/dist/cjs/components/Hero/variants/Parallax.cjs +1 -1
  27. package/dist/cjs/components/Hero/variants/Parallax.cjs.map +1 -1
  28. package/dist/cjs/components/Hero/variants/Split.cjs +1 -1
  29. package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -1
  30. package/dist/cjs/components/Hero/variants/Statement.cjs +1 -1
  31. package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -1
  32. package/dist/cjs/components/LanguageSwitcher/parts.cjs +1 -1
  33. package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -1
  34. package/dist/cjs/components/MegaMenu/MegaMenu.cjs +1 -1
  35. package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -1
  36. package/dist/cjs/components/Navbar/Navbar.cjs +1 -1
  37. package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -1
  38. package/dist/cjs/components/Stats/Stats.cjs +1 -1
  39. package/dist/cjs/components/Stats/Stats.cjs.map +1 -1
  40. package/dist/cjs/components/Stats/variants/{Hairline.cjs → Divided.cjs} +2 -2
  41. package/dist/cjs/components/Stats/variants/Divided.cjs.map +1 -0
  42. package/dist/cjs/components/Stats/variants/{Editorial.cjs → Stacked.cjs} +2 -2
  43. package/dist/cjs/components/Stats/variants/Stacked.cjs.map +1 -0
  44. package/dist/cjs/utils/surface.cjs +2 -0
  45. package/dist/cjs/utils/surface.cjs.map +1 -0
  46. package/dist/es/components/Button.js +41 -31
  47. package/dist/es/components/Button.js.map +1 -1
  48. package/dist/es/components/CTA/CTA.js +5 -6
  49. package/dist/es/components/CTA/CTA.js.map +1 -1
  50. package/dist/es/components/CTA/parts.js +19 -14
  51. package/dist/es/components/CTA/parts.js.map +1 -1
  52. package/dist/es/components/CTA/variants/Panel.js +15 -17
  53. package/dist/es/components/CTA/variants/Panel.js.map +1 -1
  54. package/dist/es/components/CTA/variants/Surface.js +21 -11
  55. package/dist/es/components/CTA/variants/Surface.js.map +1 -1
  56. package/dist/es/components/Footer/Footer.js +5 -5
  57. package/dist/es/components/Footer/Footer.js.map +1 -1
  58. package/dist/es/components/Footer/parts.js +21 -20
  59. package/dist/es/components/Footer/parts.js.map +1 -1
  60. package/dist/es/components/Footer/variants/Columns.js +76 -0
  61. package/dist/es/components/Footer/variants/Columns.js.map +1 -0
  62. package/dist/es/components/Footer/variants/Editorial.js +68 -35
  63. package/dist/es/components/Footer/variants/Editorial.js.map +1 -1
  64. package/dist/es/components/Footer/variants/Minimal.js +50 -16
  65. package/dist/es/components/Footer/variants/Minimal.js.map +1 -1
  66. package/dist/es/components/Hero/parts.js +13 -11
  67. package/dist/es/components/Hero/parts.js.map +1 -1
  68. package/dist/es/components/Hero/variants/Centered.js +29 -17
  69. package/dist/es/components/Hero/variants/Centered.js.map +1 -1
  70. package/dist/es/components/Hero/variants/Parallax.js +23 -23
  71. package/dist/es/components/Hero/variants/Parallax.js.map +1 -1
  72. package/dist/es/components/Hero/variants/Split.js +35 -23
  73. package/dist/es/components/Hero/variants/Split.js.map +1 -1
  74. package/dist/es/components/Hero/variants/Statement.js +28 -23
  75. package/dist/es/components/Hero/variants/Statement.js.map +1 -1
  76. package/dist/es/components/LanguageSwitcher/parts.js +44 -44
  77. package/dist/es/components/LanguageSwitcher/parts.js.map +1 -1
  78. package/dist/es/components/MegaMenu/MegaMenu.js +131 -126
  79. package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -1
  80. package/dist/es/components/Navbar/Navbar.js +110 -92
  81. package/dist/es/components/Navbar/Navbar.js.map +1 -1
  82. package/dist/es/components/Stats/Stats.js +8 -8
  83. package/dist/es/components/Stats/Stats.js.map +1 -1
  84. package/dist/es/components/Stats/variants/{Hairline.js → Divided.js} +13 -13
  85. package/dist/es/components/Stats/variants/Divided.js.map +1 -0
  86. package/dist/es/components/Stats/variants/{Editorial.js → Stacked.js} +12 -12
  87. package/dist/es/components/Stats/variants/Stacked.js.map +1 -0
  88. package/dist/es/utils/surface.js +16 -0
  89. package/dist/es/utils/surface.js.map +1 -0
  90. package/dist/index.d.ts +48 -9
  91. package/dist/styles.css +79 -98
  92. package/dist/theme.css +27 -0
  93. package/package.json +1 -1
  94. package/dist/cjs/components/CTA/variants/Inverse.cjs +0 -2
  95. package/dist/cjs/components/CTA/variants/Inverse.cjs.map +0 -1
  96. package/dist/cjs/components/Footer/variants/Classic.cjs +0 -2
  97. package/dist/cjs/components/Footer/variants/Classic.cjs.map +0 -1
  98. package/dist/cjs/components/Stats/variants/Editorial.cjs.map +0 -1
  99. package/dist/cjs/components/Stats/variants/Hairline.cjs.map +0 -1
  100. package/dist/es/components/CTA/variants/Inverse.js +0 -42
  101. package/dist/es/components/CTA/variants/Inverse.js.map +0 -1
  102. package/dist/es/components/Footer/variants/Classic.js +0 -43
  103. package/dist/es/components/Footer/variants/Classic.js.map +0 -1
  104. package/dist/es/components/Stats/variants/Editorial.js.map +0 -1
  105. package/dist/es/components/Stats/variants/Hairline.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),p=require("react"),o=require("../../../utils/cn.cjs"),n=require("../parts.cjs"),c=p.forwardRef(({className:i,title:x,description:r,primaryAction:l,secondaryAction:s,media:y,meta:a,id:d,...m},u)=>e.jsxs("section",{ref:u,id:d,className:o.cn("relative w-full overflow-hidden bg-secondary",i),style:{color:"contrast-color(rgb(var(--color-secondary)))"},...m,children:[e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay"}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10"}),e.jsxs("div",{className:o.cn(n.heroContainer,"pt-28 pb-24 text-center sm:pt-36 sm:pb-32"),children:[e.jsx("h1",{className:"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl",style:{color:"contrast-color(rgb(var(--color-secondary)))"},children:x}),r?e.jsx("p",{className:"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg",style:{color:"contrast-color(rgb(var(--color-secondary)))",opacity:.72},children:r}):null,l||s?e.jsx("div",{className:"mt-11 justify-center",children:e.jsx(n.HeroActions,{primaryAction:l,secondaryAction:s})}):null,a?e.jsx("ul",{className:"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3",children:a.map(t=>e.jsxs("li",{className:"flex items-center gap-2 text-sm font-medium",style:{color:"contrast-color(rgb(var(--color-secondary)))",opacity:.72},children:[t.icon?e.jsx("span",{children:t.icon}):null,t.label]},t.label))}):null]})]}));c.displayName="HeroStatement";exports.HeroStatement=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),h=require("react"),s=require("../../../utils/cn.cjs"),j=require("../../../utils/surface.cjs"),a=require("../parts.cjs"),c=h.forwardRef(({className:o,title:x,description:n,primaryAction:l,secondaryAction:r,media:f,meta:i,background:m,id:u,...d},p)=>e.jsxs("section",{ref:p,id:u,className:s.cn("relative w-full overflow-hidden",o),style:j.emphasisSurfaceStyle(m),...d,children:[e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay"}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10"}),e.jsxs("div",{className:s.cn(a.heroContainer,"pt-28 pb-24 text-center sm:pt-36 sm:pb-32"),children:[e.jsx("h1",{className:s.cn(a.heroTitleType,"max-w-5xl text-[2.9rem] sm:text-7xl lg:text-8xl"),children:x}),n?e.jsx("p",{className:s.cn(a.heroDescriptionBase,"mx-auto mt-8 max-w-xl opacity-70"),children:n}):null,l||r?e.jsx("div",{className:"mt-11 justify-center",children:e.jsx(a.HeroActions,{primaryAction:l,secondaryAction:r,emphasis:!0})}):null,i?e.jsx("ul",{className:"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3",children:i.map(t=>e.jsxs("li",{className:"flex items-center gap-2 text-sm font-medium opacity-70",children:[t.icon?e.jsx("span",{children:t.icon}):null,t.label]},t.label))}):null]})]}));c.displayName="HeroStatement";exports.HeroStatement=c;
2
2
  //# sourceMappingURL=Statement.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Statement.cjs","sources":["../../../../../src/components/Hero/variants/Statement.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, heroContainer } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Statement — full-bleed ink band. No eyebrow, pure message. */\nexport const HeroStatement = forwardRef<HTMLElement, HeroProps>(\n (\n { className, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => {\n // Statement paints its own background from --color-secondary, so the\n // readable text color is derived from THAT token via contrast-color().\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full overflow-hidden bg-secondary\", className)}\n style={{ color: \"contrast-color(rgb(var(--color-secondary)))\" }}\n {...props}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div aria-hidden className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10\" />\n <div className={cn(heroContainer, \"pt-28 pb-24 text-center sm:pt-36 sm:pb-32\")}>\n <h1\n className=\"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl\"\n style={{ color: \"contrast-color(rgb(var(--color-secondary)))\" }}\n >\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg\" style={{ color: \"contrast-color(rgb(var(--color-secondary)))\", opacity: 0.72 }}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-11 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm font-medium\" style={{ color: \"contrast-color(rgb(var(--color-secondary)))\", opacity: 0.72 }}>\n {m.icon ? <span>{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n },\n);\nHeroStatement.displayName = \"HeroStatement\";"],"names":["HeroStatement","forwardRef","className","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","jsxs","cn","jsx","heroContainer","HeroActions","m"],"mappings":"qMAMaA,EAAgBC,EAAAA,WAC3B,CACE,CAAE,UAAAC,EAAW,MAAAC,EAAO,YAAAC,EAAa,cAAAC,EAAe,gBAAAC,EAAiB,MAAAC,EAAO,KAAAC,EAAM,GAAAC,EAAI,GAAGC,CAAA,EACrFC,IAKEC,EAAAA,KAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,+CAAgDX,CAAS,EACvE,MAAO,CAAE,MAAO,6CAAA,EACf,GAAGQ,EAEJ,SAAA,CAAAI,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,8EAA8E,EACzGA,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,gEAAgE,SAC1F,MAAA,CAAI,UAAWD,EAAAA,GAAGE,gBAAe,2CAA2C,EAC3E,SAAA,CAAAD,EAAAA,IAAC,KAAA,CACC,UAAU,4HACV,MAAO,CAAE,MAAO,6CAAA,EAEf,SAAAX,CAAA,CAAA,EAEFC,EACCU,EAAAA,IAAC,IAAA,CAAE,UAAU,+DAA+D,MAAO,CAAE,MAAO,8CAA+C,QAAS,GAAA,EACjJ,WACH,EACE,KACHT,GAAiBC,EAChBQ,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAA,EAAAA,IAACE,EAAAA,YAAA,CAAY,cAAAX,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,EACCM,EAAAA,IAAC,KAAA,CAAG,UAAU,oEACX,SAAAN,EAAK,IAAKS,UACR,KAAA,CAAiB,UAAU,8CAA8C,MAAO,CAAE,MAAO,8CAA+C,QAAS,KAC/I,SAAA,CAAAA,EAAE,KAAOH,EAAAA,IAAC,OAAA,CAAM,SAAAG,EAAE,KAAK,EAAU,KACjCA,EAAE,KAAA,CAAA,EAFIA,EAAE,KAGX,CACD,CAAA,CACH,EACE,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAIR,EACAjB,EAAc,YAAc"}
1
+ {"version":3,"file":"Statement.cjs","sources":["../../../../../src/components/Hero/variants/Statement.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { emphasisSurfaceStyle } from \"../../../utils/surface\";\nimport {\n HeroActions,\n heroContainer,\n heroDescriptionBase,\n heroTitleType,\n} from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/**\n * Statement — full-bleed brand emphasis band. No eyebrow, pure message.\n *\n * The band is painted from `--color-primary` and its text color is computed\n * with CSS `contrast-color()`. Pass `background` to replace the brand gradient\n * with any CSS color while keeping the contrast behavior.\n */\nexport const HeroStatement = forwardRef<HTMLElement, HeroProps>(\n (\n {\n className,\n title,\n description,\n primaryAction,\n secondaryAction,\n media,\n meta,\n background,\n id,\n ...props\n },\n ref,\n ) => {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full overflow-hidden\", className)}\n style={emphasisSurfaceStyle(background)}\n {...props}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div aria-hidden className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10\" />\n <div className={cn(heroContainer, \"pt-28 pb-24 text-center sm:pt-36 sm:pb-32\")}>\n <h1 className={cn(heroTitleType, \"max-w-5xl text-[2.9rem] sm:text-7xl lg:text-8xl\")}>\n {title}\n </h1>\n {description ? (\n <p className={cn(heroDescriptionBase, \"mx-auto mt-8 max-w-xl opacity-70\")}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-11 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} emphasis />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm font-medium opacity-70\">\n {m.icon ? <span>{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n },\n);\nHeroStatement.displayName = \"HeroStatement\";\n"],"names":["HeroStatement","forwardRef","className","title","description","primaryAction","secondaryAction","media","meta","background","id","props","ref","jsxs","cn","emphasisSurfaceStyle","jsx","heroContainer","heroTitleType","heroDescriptionBase","HeroActions","m"],"mappings":"6OAkBaA,EAAgBC,EAAAA,WAC3B,CACE,CACE,UAAAC,EACA,MAAAC,EACA,YAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,KAAAC,EACA,WAAAC,EACA,GAAAC,EACA,GAAGC,CAAA,EAELC,IAGEC,EAAAA,KAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,kCAAmCZ,CAAS,EAC1D,MAAOa,EAAAA,qBAAqBN,CAAU,EACrC,GAAGE,EAEJ,SAAA,CAAAK,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,8EAA8E,EACzGA,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,gEAAgE,SAC1F,MAAA,CAAI,UAAWF,EAAAA,GAAGG,gBAAe,2CAA2C,EAC3E,SAAA,CAAAD,MAAC,MAAG,UAAWF,EAAAA,GAAGI,EAAAA,cAAe,iDAAiD,EAC/E,SAAAf,EACH,EACCC,QACE,IAAA,CAAE,UAAWU,EAAAA,GAAGK,sBAAqB,kCAAkC,EACrE,SAAAf,CAAA,CACH,EACE,KACHC,GAAiBC,EAChBU,MAAC,MAAA,CAAI,UAAU,uBACb,SAAAA,EAAAA,IAACI,EAAAA,YAAA,CAAY,cAAAf,EAA8B,gBAAAC,EAAkC,SAAQ,EAAA,CAAC,EACxF,EACE,KACHE,EACCQ,EAAAA,IAAC,KAAA,CAAG,UAAU,oEACX,SAAAR,EAAK,IAAKa,GACTR,EAAAA,KAAC,KAAA,CAAiB,UAAU,yDACzB,SAAA,CAAAQ,EAAE,KAAOL,EAAAA,IAAC,OAAA,CAAM,SAAAK,EAAE,KAAK,EAAU,KACjCA,EAAE,KAAA,CAAA,EAFIA,EAAE,KAGX,CACD,CAAA,CACH,EACE,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAIR,EACArB,EAAc,YAAc"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("react"),i=require("../../utils/cn.cjs"),l=require("../../utils/iso2Flag.cjs"),c=require("../../icons.cjs");function g(t,o,n){a.useEffect(()=>{if(!t)return;const e=s=>{o.current&&!o.current.contains(s.target)&&n()},u=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",u),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",u)}},[t,o,n])}function d(t,{size:o="text-sm",globeClass:n="text-muted-foreground"}={}){const e=l.iso2ToFlagEmoji(t);return e?r.jsx("span",{"aria-hidden":!0,className:i.cn(o,"leading-none"),children:e}):r.jsx(c.Globe,{className:i.cn("h-4 w-4 shrink-0",n)})}function m({inverse:t,open:o,showFlag:n,currentLang:e,onClick:u,ariaProps:s}){return r.jsxs("button",{type:"button","aria-haspopup":s.haspopup,"aria-expanded":s.expanded,"aria-controls":s.controls,onClick:u,className:i.cn("inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"border-white/10 text-on-secondary hover:bg-white/10":"border-border text-foreground hover:bg-surface"),children:[n?d(e.code,{globeClass:t?"opacity-70":"text-muted-foreground"}):r.jsx(c.Globe,{className:i.cn("h-4 w-4",t?"opacity-70":"text-muted-foreground")}),r.jsx("span",{className:"tracking-tight",children:e.label}),r.jsx(c.ChevronDown,{className:i.cn("h-3.5 w-3.5 transition-transform duration-150",o&&"rotate-180",t?"opacity-70":"text-muted-foreground")})]})}function f({lang:t,active:o,onSelect:n,variant:e,showFlag:u}){return r.jsxs("button",{type:"button",role:"option","aria-selected":o,onClick:n,className:e==="modal"?i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o?"border-primary/40 bg-primary-soft text-foreground":"border-border text-foreground hover:bg-surface-strong"):i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o?"bg-surface-strong text-foreground":"text-muted-foreground hover:bg-surface-strong hover:text-foreground"),children:[r.jsxs("span",{className:e==="modal"?"flex items-center gap-3":"flex items-center gap-2.5",children:[u?d(t.code,e==="modal"?{size:"text-base"}:{}):null,r.jsx("span",{className:"text-sm font-medium",children:t.label})]}),r.jsxs("span",{className:e==="modal"?"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground":void 0,children:[e==="modal"?t.code:null,o?r.jsx(c.Check,{className:e==="modal"?"h-4 w-4 text-primary":"h-3.5 w-3.5 text-primary"}):null]})]},t.code)}exports.LanguageOptionRow=f;exports.LanguageTrigger=m;exports.renderFlagOrGlobe=d;exports.useOutsideClose=g;
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),a=require("react"),i=require("../../utils/cn.cjs"),l=require("../../utils/iso2Flag.cjs"),c=require("../../icons.cjs");function g(r,t,o){a.useEffect(()=>{if(!r)return;const e=s=>{t.current&&!t.current.contains(s.target)&&o()},u=s=>{s.key==="Escape"&&o()};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",u),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",u)}},[r,t,o])}function d(r,{size:t="text-sm",globeClass:o="text-muted-foreground"}={}){const e=l.iso2ToFlagEmoji(r);return e?n.jsx("span",{"aria-hidden":!0,className:i.cn(t,"leading-none"),children:e}):n.jsx(c.Globe,{className:i.cn("h-4 w-4 shrink-0",o)})}function m({inverse:r,open:t,showFlag:o,currentLang:e,onClick:u,ariaProps:s}){return n.jsxs("button",{type:"button","aria-haspopup":s.haspopup,"aria-expanded":s.expanded,"aria-controls":s.controls,onClick:u,className:i.cn("inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",r?"border-current/20 text-current hover:bg-current/10":"border-border text-foreground hover:bg-surface"),children:[o?d(e.code,{globeClass:r?"opacity-70":"text-muted-foreground"}):n.jsx(c.Globe,{className:i.cn("h-4 w-4",r?"opacity-70":"text-muted-foreground")}),n.jsx("span",{className:"tracking-tight",children:e.label}),n.jsx(c.ChevronDown,{className:i.cn("h-3.5 w-3.5 transition-transform duration-150",t&&"rotate-180",r?"opacity-70":"text-muted-foreground")})]})}function f({lang:r,active:t,onSelect:o,variant:e,showFlag:u}){return n.jsxs("button",{type:"button",role:"option","aria-selected":t,onClick:o,className:e==="modal"?i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"border-primary/40 bg-primary-soft text-foreground":"border-border text-foreground hover:bg-surface-strong"):i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"bg-surface-strong text-foreground":"text-muted-foreground hover:bg-surface-strong hover:text-foreground"),children:[n.jsxs("span",{className:e==="modal"?"flex items-center gap-3":"flex items-center gap-2.5",children:[u?d(r.code,e==="modal"?{size:"text-base"}:{}):null,n.jsx("span",{className:"text-sm font-medium",children:r.label})]}),n.jsxs("span",{className:e==="modal"?"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground":void 0,children:[e==="modal"?r.code:null,t?n.jsx(c.Check,{className:e==="modal"?"h-4 w-4 text-primary":"h-3.5 w-3.5 text-primary"}):null]})]},r.code)}exports.LanguageOptionRow=f;exports.LanguageTrigger=m;exports.renderFlagOrGlobe=d;exports.useOutsideClose=g;
3
3
  //# sourceMappingURL=parts.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"parts.cjs","sources":["../../../../src/components/LanguageSwitcher/parts.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { iso2ToFlagEmoji } from \"../../utils/iso2Flag\";\nimport { Check, ChevronDown, Globe } from \"../../icons\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useOutsideClose(\n open: boolean,\n rootRef: { current: HTMLDivElement | null },\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, rootRef, onClose]);\n}\n\nexport function renderFlagOrGlobe(\n code: string,\n { size = \"text-sm\", globeClass = \"text-muted-foreground\" }: { size?: string; globeClass?: string } = {},\n) {\n const flag = iso2ToFlagEmoji(code);\n return flag ? (\n <span aria-hidden className={cn(size, \"leading-none\")}>\n {flag}\n </span>\n ) : (\n <Globe className={cn(\"h-4 w-4 shrink-0\", globeClass)} />\n );\n}\n\nexport function LanguageTrigger({\n inverse,\n open,\n showFlag,\n currentLang,\n onClick,\n ariaProps,\n}: {\n inverse?: boolean;\n open: boolean;\n showFlag?: boolean;\n currentLang: LanguageOption;\n onClick: () => void;\n ariaProps: {\n haspopup: \"listbox\" | \"dialog\";\n expanded: boolean;\n controls?: string;\n };\n}) {\n return (\n <button\n type=\"button\"\n aria-haspopup={ariaProps.haspopup}\n aria-expanded={ariaProps.expanded}\n aria-controls={ariaProps.controls}\n onClick={onClick}\n className={cn(\n \"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse\n ? \"border-white/10 text-on-secondary hover:bg-white/10\"\n : \"border-border text-foreground hover:bg-surface\",\n )}\n >\n {showFlag ? (\n renderFlagOrGlobe(currentLang.code, { globeClass: inverse ? \"opacity-70\" : \"text-muted-foreground\" })\n ) : (\n <Globe\n className={cn(\"h-4 w-4\", inverse ? \"opacity-70\" : \"text-muted-foreground\")}\n />\n )}\n <span className=\"tracking-tight\">{currentLang.label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 transition-transform duration-150\",\n open && \"rotate-180\",\n inverse ? \"opacity-70\" : \"text-muted-foreground\",\n )}\n />\n </button>\n );\n}\n\nexport function LanguageOptionRow({\n lang,\n active,\n onSelect,\n variant,\n showFlag,\n}: {\n lang: LanguageOption;\n active: boolean;\n onSelect: () => void;\n variant: \"dropdown\" | \"modal\";\n showFlag?: boolean;\n}) {\n return (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n onClick={onSelect}\n className={\n variant === \"modal\"\n ? cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"border-primary/40 bg-primary-soft text-foreground\"\n : \"border-border text-foreground hover:bg-surface-strong\",\n )\n : cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-surface-strong text-foreground\"\n : \"text-muted-foreground hover:bg-surface-strong hover:text-foreground\",\n )\n }\n >\n <span className={variant === \"modal\" ? \"flex items-center gap-3\" : \"flex items-center gap-2.5\"}>\n {showFlag ? renderFlagOrGlobe(lang.code, variant === \"modal\" ? { size: \"text-base\" } : {}) : null}\n <span className=\"text-sm font-medium\">{lang.label}</span>\n </span>\n <span className={variant === \"modal\" ? \"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\" : undefined}>\n {variant === \"modal\" ? lang.code : null}\n {active ? <Check className={variant === \"modal\" ? \"h-4 w-4 text-primary\" : \"h-3.5 w-3.5 text-primary\"} /> : null}\n </span>\n </button>\n );\n}"],"names":["useOutsideClose","open","rootRef","onClose","useEffect","onPointerDown","event","onKeyDown","renderFlagOrGlobe","code","size","globeClass","flag","iso2ToFlagEmoji","jsx","cn","Globe","LanguageTrigger","inverse","showFlag","currentLang","onClick","ariaProps","jsxs","ChevronDown","LanguageOptionRow","lang","active","onSelect","variant","Check"],"mappings":"2OAOO,SAASA,EACdC,EACAC,EACAC,EACA,CACAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,EAAM,OACX,MAAMI,EAAiBC,GAAwB,CACzCJ,EAAQ,SAAW,CAACA,EAAQ,QAAQ,SAASI,EAAM,MAAc,GACnEH,EAAA,CAEJ,EACMI,EAAaD,GAAyB,CACtCA,EAAM,MAAQ,UAAUH,EAAA,CAC9B,EACA,gBAAS,iBAAiB,cAAeE,CAAa,EACtD,SAAS,iBAAiB,UAAWE,CAAS,EACvC,IAAM,CACX,SAAS,oBAAoB,cAAeF,CAAa,EACzD,SAAS,oBAAoB,UAAWE,CAAS,CACnD,CACF,EAAG,CAACN,EAAMC,EAASC,CAAO,CAAC,CAC7B,CAEO,SAASK,EACdC,EACA,CAAE,KAAAC,EAAO,UAAW,WAAAC,EAAa,uBAAA,EAAoE,GACrG,CACA,MAAMC,EAAOC,EAAAA,gBAAgBJ,CAAI,EACjC,OAAOG,EACLE,MAAC,OAAA,CAAK,cAAW,GAAC,UAAWC,KAAGL,EAAM,cAAc,EACjD,SAAAE,CAAA,CACH,EAEAE,EAAAA,IAACE,EAAAA,MAAA,CAAM,UAAWD,KAAG,mBAAoBJ,CAAU,EAAG,CAE1D,CAEO,SAASM,EAAgB,CAC9B,QAAAC,EACA,KAAAjB,EACA,SAAAkB,EACA,YAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAWG,CACD,OACEC,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,gBAAeD,EAAU,SACzB,gBAAeA,EAAU,SACzB,gBAAeA,EAAU,SACzB,QAAAD,EACA,UAAWN,EAAAA,GACT,4MACAG,EACI,sDACA,gDAAA,EAGL,SAAA,CAAAC,EACCX,EAAkBY,EAAY,KAAM,CAAE,WAAYF,EAAU,aAAe,uBAAA,CAAyB,EAEpGJ,EAAAA,IAACE,EAAAA,MAAA,CACC,UAAWD,EAAAA,GAAG,UAAWG,EAAU,aAAe,uBAAuB,CAAA,CAAA,EAG7EJ,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,WAAY,MAAM,EACpDA,EAAAA,IAACU,EAAAA,YAAA,CACC,UAAWT,EAAAA,GACT,gDACAd,GAAQ,aACRiB,EAAU,aAAe,uBAAA,CAC3B,CAAA,CACF,CAAA,CAAA,CAGN,CAEO,SAASO,EAAkB,CAChC,KAAAC,EACA,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAV,CACF,EAMG,CACD,OACEI,EAAAA,KAAC,SAAA,CAEC,KAAK,SACL,KAAK,SACL,gBAAeI,EACf,QAASC,EACT,UACEC,IAAY,QACRd,EAAAA,GACE,6MACAY,EACI,oDACA,uDAAA,EAENZ,EAAAA,GACE,oNACAY,EACI,oCACA,qEAAA,EAIZ,SAAA,CAAAJ,OAAC,OAAA,CAAK,UAAWM,IAAY,QAAU,0BAA4B,4BAChE,SAAA,CAAAV,EAAWX,EAAkBkB,EAAK,KAAMG,IAAY,QAAU,CAAE,KAAM,aAAgB,CAAA,CAAE,EAAI,KAC7Ff,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,WAAK,KAAA,CAAM,CAAA,EACpD,SACC,OAAA,CAAK,UAAWe,IAAY,QAAU,8FAAgG,OACpI,SAAA,CAAAA,IAAY,QAAUH,EAAK,KAAO,KAClCC,QAAUG,EAAAA,MAAA,CAAM,UAAWD,IAAY,QAAU,uBAAyB,2BAA4B,EAAK,IAAA,CAAA,CAC9G,CAAA,CAAA,EA5BKH,EAAK,IAAA,CA+BhB"}
1
+ {"version":3,"file":"parts.cjs","sources":["../../../../src/components/LanguageSwitcher/parts.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { iso2ToFlagEmoji } from \"../../utils/iso2Flag\";\nimport { Check, ChevronDown, Globe } from \"../../icons\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useOutsideClose(\n open: boolean,\n rootRef: { current: HTMLDivElement | null },\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, rootRef, onClose]);\n}\n\nexport function renderFlagOrGlobe(\n code: string,\n { size = \"text-sm\", globeClass = \"text-muted-foreground\" }: { size?: string; globeClass?: string } = {},\n) {\n const flag = iso2ToFlagEmoji(code);\n return flag ? (\n <span aria-hidden className={cn(size, \"leading-none\")}>\n {flag}\n </span>\n ) : (\n <Globe className={cn(\"h-4 w-4 shrink-0\", globeClass)} />\n );\n}\n\nexport function LanguageTrigger({\n inverse,\n open,\n showFlag,\n currentLang,\n onClick,\n ariaProps,\n}: {\n inverse?: boolean;\n open: boolean;\n showFlag?: boolean;\n currentLang: LanguageOption;\n onClick: () => void;\n ariaProps: {\n haspopup: \"listbox\" | \"dialog\";\n expanded: boolean;\n controls?: string;\n };\n}) {\n return (\n <button\n type=\"button\"\n aria-haspopup={ariaProps.haspopup}\n aria-expanded={ariaProps.expanded}\n aria-controls={ariaProps.controls}\n onClick={onClick}\n className={cn(\n \"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse\n ? \"border-current/20 text-current hover:bg-current/10\"\n : \"border-border text-foreground hover:bg-surface\",\n )}\n >\n {showFlag ? (\n renderFlagOrGlobe(currentLang.code, { globeClass: inverse ? \"opacity-70\" : \"text-muted-foreground\" })\n ) : (\n <Globe\n className={cn(\"h-4 w-4\", inverse ? \"opacity-70\" : \"text-muted-foreground\")}\n />\n )}\n <span className=\"tracking-tight\">{currentLang.label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 transition-transform duration-150\",\n open && \"rotate-180\",\n inverse ? \"opacity-70\" : \"text-muted-foreground\",\n )}\n />\n </button>\n );\n}\n\nexport function LanguageOptionRow({\n lang,\n active,\n onSelect,\n variant,\n showFlag,\n}: {\n lang: LanguageOption;\n active: boolean;\n onSelect: () => void;\n variant: \"dropdown\" | \"modal\";\n showFlag?: boolean;\n}) {\n return (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n onClick={onSelect}\n className={\n variant === \"modal\"\n ? cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"border-primary/40 bg-primary-soft text-foreground\"\n : \"border-border text-foreground hover:bg-surface-strong\",\n )\n : cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-surface-strong text-foreground\"\n : \"text-muted-foreground hover:bg-surface-strong hover:text-foreground\",\n )\n }\n >\n <span className={variant === \"modal\" ? \"flex items-center gap-3\" : \"flex items-center gap-2.5\"}>\n {showFlag ? renderFlagOrGlobe(lang.code, variant === \"modal\" ? { size: \"text-base\" } : {}) : null}\n <span className=\"text-sm font-medium\">{lang.label}</span>\n </span>\n <span className={variant === \"modal\" ? \"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\" : undefined}>\n {variant === \"modal\" ? lang.code : null}\n {active ? <Check className={variant === \"modal\" ? \"h-4 w-4 text-primary\" : \"h-3.5 w-3.5 text-primary\"} /> : null}\n </span>\n </button>\n );\n}"],"names":["useOutsideClose","open","rootRef","onClose","useEffect","onPointerDown","event","onKeyDown","renderFlagOrGlobe","code","size","globeClass","flag","iso2ToFlagEmoji","jsx","cn","Globe","LanguageTrigger","inverse","showFlag","currentLang","onClick","ariaProps","jsxs","ChevronDown","LanguageOptionRow","lang","active","onSelect","variant","Check"],"mappings":"2OAOO,SAASA,EACdC,EACAC,EACAC,EACA,CACAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,EAAM,OACX,MAAMI,EAAiBC,GAAwB,CACzCJ,EAAQ,SAAW,CAACA,EAAQ,QAAQ,SAASI,EAAM,MAAc,GACnEH,EAAA,CAEJ,EACMI,EAAaD,GAAyB,CACtCA,EAAM,MAAQ,UAAUH,EAAA,CAC9B,EACA,gBAAS,iBAAiB,cAAeE,CAAa,EACtD,SAAS,iBAAiB,UAAWE,CAAS,EACvC,IAAM,CACX,SAAS,oBAAoB,cAAeF,CAAa,EACzD,SAAS,oBAAoB,UAAWE,CAAS,CACnD,CACF,EAAG,CAACN,EAAMC,EAASC,CAAO,CAAC,CAC7B,CAEO,SAASK,EACdC,EACA,CAAE,KAAAC,EAAO,UAAW,WAAAC,EAAa,uBAAA,EAAoE,GACrG,CACA,MAAMC,EAAOC,EAAAA,gBAAgBJ,CAAI,EACjC,OAAOG,EACLE,MAAC,OAAA,CAAK,cAAW,GAAC,UAAWC,KAAGL,EAAM,cAAc,EACjD,SAAAE,CAAA,CACH,EAEAE,EAAAA,IAACE,EAAAA,MAAA,CAAM,UAAWD,KAAG,mBAAoBJ,CAAU,EAAG,CAE1D,CAEO,SAASM,EAAgB,CAC9B,QAAAC,EACA,KAAAjB,EACA,SAAAkB,EACA,YAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAWG,CACD,OACEC,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,gBAAeD,EAAU,SACzB,gBAAeA,EAAU,SACzB,gBAAeA,EAAU,SACzB,QAAAD,EACA,UAAWN,EAAAA,GACT,4MACAG,EACI,qDACA,gDAAA,EAGL,SAAA,CAAAC,EACCX,EAAkBY,EAAY,KAAM,CAAE,WAAYF,EAAU,aAAe,uBAAA,CAAyB,EAEpGJ,EAAAA,IAACE,EAAAA,MAAA,CACC,UAAWD,EAAAA,GAAG,UAAWG,EAAU,aAAe,uBAAuB,CAAA,CAAA,EAG7EJ,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,WAAY,MAAM,EACpDA,EAAAA,IAACU,EAAAA,YAAA,CACC,UAAWT,EAAAA,GACT,gDACAd,GAAQ,aACRiB,EAAU,aAAe,uBAAA,CAC3B,CAAA,CACF,CAAA,CAAA,CAGN,CAEO,SAASO,EAAkB,CAChC,KAAAC,EACA,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAV,CACF,EAMG,CACD,OACEI,EAAAA,KAAC,SAAA,CAEC,KAAK,SACL,KAAK,SACL,gBAAeI,EACf,QAASC,EACT,UACEC,IAAY,QACRd,EAAAA,GACE,6MACAY,EACI,oDACA,uDAAA,EAENZ,EAAAA,GACE,oNACAY,EACI,oCACA,qEAAA,EAIZ,SAAA,CAAAJ,OAAC,OAAA,CAAK,UAAWM,IAAY,QAAU,0BAA4B,4BAChE,SAAA,CAAAV,EAAWX,EAAkBkB,EAAK,KAAMG,IAAY,QAAU,CAAE,KAAM,aAAgB,CAAA,CAAE,EAAI,KAC7Ff,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,WAAK,KAAA,CAAM,CAAA,EACpD,SACC,OAAA,CAAK,UAAWe,IAAY,QAAU,8FAAgG,OACpI,SAAA,CAAAA,IAAY,QAAUH,EAAK,KAAO,KAClCC,QAAUG,EAAAA,MAAA,CAAM,UAAWD,IAAY,QAAU,uBAAyB,2BAA4B,EAAK,IAAA,CAAA,CAC9G,CAAA,CAAA,EA5BKH,EAAK,IAAA,CA+BhB"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),s=require("../../utils/cn.cjs"),x=require("../../icons.cjs"),$="text-on-secondary",b="text-foreground",J={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"border-t border-border bg-background",mobileButton:`${b} hover:bg-surface`,mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:b,brandDot:"bg-foreground"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileButton:`${b} hover:bg-surface`,mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:b,brandDot:"bg-foreground"},inverse:{shell:"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10",triggerOpen:"bg-white/10 text-on-secondary",badge:"bg-white/15 text-on-secondary",panel:"border-white/10 bg-[#161616]",columnTitle:"text-on-secondary/45",columnLink:"hover:bg-white/10",linkDescription:"text-on-secondary/50",mobilePanel:"border-t border-white/10 bg-[#101010]",mobileButton:`${$} hover:bg-white/10`,mobileLink:"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",brandText:$,brandDot:"bg-on-secondary"}},B=({className:E,variant:w="classic",brand:p,logo:_,logoSrc:k,logoAlt:q,logoClassName:I,brandHref:S="#",items:g,actions:m,cta:h,languageSwitcher:f,sticky:z=!0,LinkComponent:A,onKeyDown:v,...F})=>{const R=u.useId(),d=A??"a",[M,i]=u.useState(null),[c,j]=u.useState(!1),[y,C]=u.useState(null),o=J[w],X=()=>i(null),N=()=>{i(null),j(!1),C(null)},L=r=>`${R}-panel-${r}`,O=_??(k?e.jsx("img",{src:k,alt:q??(typeof p=="string"?p:"Logo"),className:s.cn("h-7 w-auto",I)}):null),G=O?e.jsx("span",{className:"flex items-center",children:O}):e.jsxs("span",{className:s.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",o.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:s.cn("inline-block h-2.5 w-2.5 rounded-sm",o.brandDot)}),p]}),T=s.cn("flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150",o.trigger),D=r=>{var l;return e.jsx("div",{className:s.cn("grid gap-x-10 gap-y-8 sm:grid-cols-2",r.featured?"":"lg:grid-cols-3"),children:(l=r.columns)==null?void 0:l.map((n,a)=>e.jsxs("div",{children:[n.title?e.jsx("h4",{className:s.cn("text-xs font-semibold uppercase tracking-[0.14em]",o.columnTitle),children:n.title}):null,e.jsx("ul",{className:s.cn(n.title&&"mt-3","space-y-0.5"),children:n.links.map(t=>e.jsx("li",{children:e.jsxs(d,{href:t.href,onClick:N,target:t.external?"_blank":void 0,rel:t.external?"noopener noreferrer":void 0,className:s.cn("-mx-2 block rounded-md px-2 py-2 transition-colors duration-150",o.columnLink),children:[e.jsx("span",{className:"block text-sm font-medium text-foreground",children:t.label}),t.description?e.jsx("span",{className:s.cn("mt-0.5 block text-[13px] leading-snug",o.linkDescription),children:t.description}):null]})},t.href))})]},n.title??a))})},P=(r,l=!1)=>{const n=r.featured;if(!n)return null;const a=n.accent?{backgroundColor:n.accent,color:`contrast-color(${n.accent})`}:void 0;return e.jsxs(d,{href:n.href,onClick:N,target:n.external?"_blank":void 0,rel:n.external?"noopener noreferrer":void 0,className:s.cn("group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5",l&&"mt-8",!n.accent&&"bg-primary text-on-primary"),style:a,children:[e.jsxs("div",{className:"flex h-full flex-col justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-display text-base font-semibold tracking-tight",children:n.title}),n.description?e.jsx("p",{className:"mt-1.5 text-[13px] leading-relaxed opacity-80",children:n.description}):null]}),n.cta?e.jsxs("span",{className:"text-sm font-semibold underline decoration-1 underline-offset-4",children:[n.cta," →"]}):null]}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40"})]})},H=r=>{r.key==="Escape"&&N(),v==null||v(r)};return e.jsxs("header",{className:s.cn("relative w-full transition-colors duration-200",z&&"sticky top-0 z-50",o.shell,o.header,E),onKeyDown:H,...F,children:[e.jsxs("nav",{className:s.cn("relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",o.bar),onMouseLeave:X,"aria-label":"Mega menu",children:[e.jsx(d,{href:S,className:"shrink-0",children:G}),e.jsx("ul",{className:"hidden items-center gap-1 lg:flex",children:g.map((r,l)=>{var t;const n=!!((t=r.columns)!=null&&t.length||r.featured),a=M===l;return e.jsx("li",{className:"relative",children:n?e.jsxs("button",{type:"button","aria-haspopup":"true","aria-expanded":a,"aria-controls":L(l),onClick:()=>i(a?null:l),onMouseEnter:()=>i(l),className:s.cn(T,a&&o.triggerOpen),children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[r.label,r.badge?e.jsx("span",{className:s.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",o.badge),children:r.badge}):null]}),e.jsx(x.ChevronDown,{className:s.cn("h-4 w-4 shrink-0 transition-transform duration-150",a&&"rotate-180")})]}):e.jsxs(d,{href:r.href??"#",target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,className:T,children:[r.label,r.badge?e.jsx("span",{className:s.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",o.badge),children:r.badge}):null]})},r.label)})}),e.jsxs("div",{className:"hidden items-center gap-3 lg:flex",children:[f,m,h]}),e.jsx("button",{type:"button","aria-label":c?"Close menu":"Open menu","aria-expanded":c,onClick:()=>j(r=>!r),className:s.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o.mobileButton),children:c?e.jsx(x.X,{className:"h-5 w-5"}):e.jsx(x.Menu,{className:"h-5 w-5"})})]}),g.map((r,l)=>{var a;if(!((a=r.columns)!=null&&a.length)&&!r.featured)return null;const n=M===l;return e.jsx("div",{id:L(l),role:"region","aria-label":`${r.label} menu`,onMouseEnter:()=>i(l),className:s.cn("absolute top-full z-50 pt-2 transition-all duration-150",w==="floating"?"inset-x-0 mx-auto w-full max-w-5xl":"inset-x-0",n?"visible translate-y-0 opacity-100":"pointer-events-none invisible -translate-y-1 opacity-0"),children:e.jsxs("div",{className:s.cn("overflow-hidden rounded-xl border p-6 md:p-8",o.panel,r.featured?"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12":""),children:[D(r),r.featured&&e.jsx("div",{className:s.cn("mt-8 max-w-sm lg:mt-0 lg:w-64"),children:P(r)})]})},r.label)}),e.jsx("div",{className:s.cn("grid transition-[grid-template-rows,opacity] duration-200 lg:hidden",c?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",o.mobilePanel),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:"flex flex-col py-4",children:[f?e.jsx("li",{className:"px-5 pb-4",children:f}):null,g.map((r,l)=>{var n;return(n=r.columns)!=null&&n.length||r.featured?e.jsxs("li",{className:"px-5",children:[e.jsxs("button",{type:"button","aria-expanded":y===l,onClick:()=>C(a=>a===l?null:l),className:s.cn("flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",o.mobileButton),children:[e.jsxs("span",{className:"flex items-center gap-2",children:[r.label,r.badge?e.jsx("span",{className:s.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",o.badge),children:r.badge}):null]}),e.jsx(x.ChevronDown,{className:s.cn("h-4 w-4 shrink-0 transition-transform duration-150",y===l&&"rotate-180")})]}),e.jsx("div",{className:s.cn("grid transition-[grid-template-rows,opacity] duration-200",y===l?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("div",{className:"py-2 pl-1",children:[D(r),r.featured?e.jsx("div",{className:"max-w-sm",children:P(r,!0)}):null]})})})]},r.label):e.jsx("li",{className:"px-5",children:e.jsx(d,{href:r.href??"#",target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,onClick:()=>j(!1),className:s.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",o.mobileLink),children:r.label})},r.label)}),h?e.jsx("li",{className:"px-8 pb-2 pt-3",children:h}):m?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-8 pb-2",children:m}):null]})})})]})};B.displayName="MegaMenu";exports.MegaMenu=B;
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),t=require("../../utils/cn.cjs"),p=require("../../icons.cjs"),Q=require("../../utils/surface.cjs"),U={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"border-t border-border bg-background",mobileButton:"text-foreground hover:bg-surface",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:"text-foreground",brandDot:"bg-foreground"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileButton:"text-foreground hover:bg-surface",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:"text-foreground",brandDot:"bg-foreground"}},V={shell:"",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-current/70 hover:text-current hover:bg-current/10",triggerOpen:"bg-current/15 text-current",badge:"bg-current/20 text-current",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"border-t border-current/15",mobileButton:"text-current hover:bg-current/10",mobileLink:"text-current/70 hover:bg-current/10 hover:text-current",brandText:"text-current",brandDot:"bg-current"},q=({className:E,variant:k="classic",brand:b,logo:S,logoSrc:w,logoAlt:_,logoClassName:I,brandHref:$="#",items:g,actions:m,cta:f,languageSwitcher:h,sticky:z=!0,background:d,LinkComponent:A,onKeyDown:v,style:M,...F})=>{const R=x.useId(),i=A??"a",[C,c]=x.useState(null),[u,j]=x.useState(!1),[N,L]=x.useState(null),l=d?V:U[k],X=!d&&k==="floating",G=()=>c(null),y=()=>{c(null),j(!1),L(null)},O=r=>`${R}-panel-${r}`,T=S??(w?e.jsx("img",{src:w,alt:_??(typeof b=="string"?b:"Logo"),className:t.cn("h-7 w-auto",I)}):null),H=T?e.jsx("span",{className:"flex items-center",children:T}):e.jsxs("span",{className:t.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",l.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:t.cn("inline-block h-2.5 w-2.5 rounded-sm",l.brandDot)}),b]}),D=t.cn("flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150",l.trigger),P=r=>{var s;return e.jsx("div",{className:t.cn("grid gap-x-10 gap-y-8 sm:grid-cols-2",r.featured?"":"lg:grid-cols-3"),children:(s=r.columns)==null?void 0:s.map((n,a)=>e.jsxs("div",{children:[n.title?e.jsx("h4",{className:t.cn("text-xs font-semibold uppercase tracking-[0.14em]",l.columnTitle),children:n.title}):null,e.jsx("ul",{className:t.cn(n.title&&"mt-3","space-y-0.5"),children:n.links.map(o=>e.jsx("li",{children:e.jsxs(i,{href:o.href,onClick:y,target:o.external?"_blank":void 0,rel:o.external?"noopener noreferrer":void 0,className:t.cn("-mx-2 block rounded-md px-2 py-2 transition-colors duration-150",l.columnLink),children:[e.jsx("span",{className:"block text-sm font-medium text-foreground",children:o.label}),o.description?e.jsx("span",{className:t.cn("mt-0.5 block text-[13px] leading-snug",l.linkDescription),children:o.description}):null]})},o.href))})]},n.title??a))})},B=(r,s=!1)=>{const n=r.featured;if(!n)return null;const a=n.accent?{backgroundColor:n.accent,color:`contrast-color(${n.accent})`}:void 0;return e.jsxs(i,{href:n.href,onClick:y,target:n.external?"_blank":void 0,rel:n.external?"noopener noreferrer":void 0,className:t.cn("group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5",s&&"mt-8",!n.accent&&"bg-primary text-on-primary"),style:a,children:[e.jsxs("div",{className:"flex h-full flex-col justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-display text-base font-semibold tracking-tight",children:n.title}),n.description?e.jsx("p",{className:"mt-1.5 text-[13px] leading-relaxed opacity-80",children:n.description}):null]}),n.cta?e.jsxs("span",{className:"text-sm font-semibold underline decoration-1 underline-offset-4",children:[n.cta," →"]}):null]}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40"})]})},J=r=>{r.key==="Escape"&&y(),v==null||v(r)};return e.jsxs("header",{"data-emphasis":d?"":void 0,style:d?{...Q.emphasisSurfaceStyle(d),...M}:M,className:t.cn("relative w-full transition-colors duration-200",z&&"sticky top-0 z-50",l.shell,l.header,E),onKeyDown:J,...F,children:[e.jsxs("nav",{className:t.cn("relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",l.bar),onMouseLeave:G,"aria-label":"Mega menu",children:[e.jsx(i,{href:$,className:"shrink-0",children:H}),e.jsx("ul",{className:"hidden items-center gap-1 lg:flex",children:g.map((r,s)=>{var o;const n=!!((o=r.columns)!=null&&o.length||r.featured),a=C===s;return e.jsx("li",{className:"relative",children:n?e.jsxs("button",{type:"button","aria-haspopup":"true","aria-expanded":a,"aria-controls":O(s),onClick:()=>c(a?null:s),onMouseEnter:()=>c(s),className:t.cn(D,a&&l.triggerOpen),children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[r.label,r.badge?e.jsx("span",{className:t.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",l.badge),children:r.badge}):null]}),e.jsx(p.ChevronDown,{className:t.cn("h-4 w-4 shrink-0 transition-transform duration-150",a&&"rotate-180")})]}):e.jsxs(i,{href:r.href??"#",target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,className:D,children:[r.label,r.badge?e.jsx("span",{className:t.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",l.badge),children:r.badge}):null]})},r.label)})}),e.jsxs("div",{className:"hidden items-center gap-3 lg:flex",children:[h,m,f]}),e.jsx("button",{type:"button","aria-label":u?"Close menu":"Open menu","aria-expanded":u,onClick:()=>j(r=>!r),className:t.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",l.mobileButton),children:u?e.jsx(p.X,{className:"h-5 w-5"}):e.jsx(p.Menu,{className:"h-5 w-5"})})]}),g.map((r,s)=>{var a;if(!((a=r.columns)!=null&&a.length)&&!r.featured)return null;const n=C===s;return e.jsx("div",{id:O(s),role:"region","aria-label":`${r.label} menu`,onMouseEnter:()=>c(s),className:t.cn("absolute top-full z-50 pt-2 transition-all duration-150",X?"inset-x-0 mx-auto w-full max-w-5xl":"inset-x-0",n?"visible translate-y-0 opacity-100":"pointer-events-none invisible -translate-y-1 opacity-0"),children:e.jsxs("div",{className:t.cn("overflow-hidden rounded-xl border p-6 md:p-8",l.panel,r.featured?"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12":""),children:[P(r),r.featured&&e.jsx("div",{className:t.cn("mt-8 max-w-sm lg:mt-0 lg:w-64"),children:B(r)})]})},r.label)}),e.jsx("div",{className:t.cn("grid transition-[grid-template-rows,opacity] duration-200 lg:hidden",u?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",l.mobilePanel,d&&"bg-transparent"),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:"flex flex-col py-4",children:[h?e.jsx("li",{className:"px-5 pb-4",children:h}):null,g.map((r,s)=>{var n;return(n=r.columns)!=null&&n.length||r.featured?e.jsxs("li",{className:"px-5",children:[e.jsxs("button",{type:"button","aria-expanded":N===s,onClick:()=>L(a=>a===s?null:s),className:t.cn("flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",l.mobileButton),children:[e.jsxs("span",{className:"flex items-center gap-2",children:[r.label,r.badge?e.jsx("span",{className:t.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",l.badge),children:r.badge}):null]}),e.jsx(p.ChevronDown,{className:t.cn("h-4 w-4 shrink-0 transition-transform duration-150",N===s&&"rotate-180")})]}),e.jsx("div",{className:t.cn("grid transition-[grid-template-rows,opacity] duration-200",N===s?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("div",{className:"py-2 pl-1",children:[P(r),r.featured?e.jsx("div",{className:"max-w-sm",children:B(r,!0)}):null]})})})]},r.label):e.jsx("li",{className:"px-5",children:e.jsx(i,{href:r.href??"#",target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,onClick:()=>j(!1),className:t.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",l.mobileLink),children:r.label})},r.label)}),f?e.jsx("li",{className:"px-8 pb-2 pt-3",children:f}):m?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-8 pb-2",children:m}):null]})})})]})};q.displayName="MegaMenu";exports.MegaMenu=q;
3
3
  //# sourceMappingURL=MegaMenu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MegaMenu.cjs","sources":["../../../../src/components/MegaMenu/MegaMenu.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { ChevronDown, Menu, X } from \"../../icons\";\nimport type { MegaMenuProps, MegaMenuVariant, MegaMenuItem } from \"./types\";\n\ninterface MegaMenuStyle {\n shell: string;\n bar: string;\n header: string;\n trigger: string;\n triggerOpen: string;\n badge: string;\n panel: string;\n columnTitle: string;\n columnLink: string;\n linkDescription: string;\n mobilePanel: string;\n mobileButton: string;\n mobileLink: string;\n brandText: string;\n brandDot: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<MegaMenuVariant, MegaMenuStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10\",\n triggerOpen: \"bg-white/10 text-on-secondary\",\n badge: \"bg-white/15 text-on-secondary\",\n panel: \"border-white/10 bg-[#161616]\",\n columnTitle: \"text-on-secondary/45\",\n columnLink: \"hover:bg-white/10\",\n linkDescription: \"text-on-secondary/50\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileButton: `${inverse} hover:bg-white/10`,\n mobileLink: \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n },\n};\n\nexport const MegaMenu = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n items,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n onKeyDown,\n ...props\n}: MegaMenuProps) => {\n const ids = useId();\n const Link = LinkComponent ?? \"a\";\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<number | null>(null);\n const s = styles[variant];\n\n const closePanels = () => setOpenIndex(null);\n const closeAll = () => {\n setOpenIndex(null);\n setMobileOpen(false);\n setMobileExpanded(null);\n };\n\n const panelId = (i: number) => `${ids}-panel-${i}`;\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n const triggerClasses = cn(\n \"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150\",\n s.trigger,\n );\n\n const renderColumns = (item: MegaMenuItem) => (\n <div\n className={cn(\n \"grid gap-x-10 gap-y-8 sm:grid-cols-2\",\n item.featured ? \"\" : \"lg:grid-cols-3\",\n )}\n >\n {item.columns?.map((column, ci) => (\n <div key={column.title ?? ci}>\n {column.title ? (\n <h4\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.14em]\",\n s.columnTitle,\n )}\n >\n {column.title}\n </h4>\n ) : null}\n <ul className={cn(column.title && \"mt-3\", \"space-y-0.5\")}>\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={closeAll}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150\",\n s.columnLink,\n )}\n >\n <span className=\"block text-sm font-medium text-foreground\">\n {link.label}\n </span>\n {link.description ? (\n <span\n className={cn(\n \"mt-0.5 block text-[13px] leading-snug\",\n s.linkDescription,\n )}\n >\n {link.description}\n </span>\n ) : null}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n\n const renderFeatured = (item: MegaMenuItem, mobile = false) => {\n const featured = item.featured;\n if (!featured) return null;\n const featuredStyle = featured.accent\n ? { backgroundColor: featured.accent, color: `contrast-color(${featured.accent})` }\n : undefined;\n\n return (\n <Link\n href={featured.href}\n onClick={closeAll}\n target={featured.external ? \"_blank\" : undefined}\n rel={featured.external ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5\",\n mobile && \"mt-8\",\n !featured.accent && \"bg-primary text-on-primary\",\n )}\n style={featuredStyle}\n >\n <div className=\"flex h-full flex-col justify-between gap-4\">\n <div>\n <h4 className=\"font-display text-base font-semibold tracking-tight\">\n {featured.title}\n </h4>\n {featured.description ? (\n <p className=\"mt-1.5 text-[13px] leading-relaxed opacity-80\">\n {featured.description}\n </p>\n ) : null}\n </div>\n {featured.cta ? (\n <span className=\"text-sm font-semibold underline decoration-1 underline-offset-4\">\n {featured.cta} →\n </span>\n ) : null}\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40\"\n />\n </Link>\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n closeAll();\n }\n onKeyDown?.(event);\n };\n\n return (\n <header\n className={cn(\n \"relative w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <nav className={cn(\"relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} onMouseLeave={closePanels} aria-label=\"Mega menu\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className=\"hidden items-center gap-1 lg:flex\">\n {items.map((item, i) => {\n const hasPanel = Boolean(item.columns?.length || item.featured);\n const open = openIndex === i;\n return (\n <li key={item.label} className=\"relative\">\n {hasPanel ? (\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n aria-controls={panelId(i)}\n onClick={() => setOpenIndex(open ? null : i)}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(triggerClasses, open && s.triggerOpen)}\n >\n <span className=\"flex items-center gap-1.5\">\n {item.label}\n {item.badge ? (\n <span\n className={cn(\n \"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\",\n s.badge,\n )}\n >\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <Link href={item.href ?? \"#\"} target={item.external ? \"_blank\" : undefined} rel={item.external ? \"noopener noreferrer\" : undefined} className={triggerClasses}>\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n\n <div className=\"hidden items-center gap-3 lg:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={mobileOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.mobileButton,\n )}\n >\n {mobileOpen ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {items.map((item, i) => {\n if (!item.columns?.length && !item.featured) return null;\n const open = openIndex === i;\n return (\n <div\n key={item.label}\n id={panelId(i)}\n role=\"region\"\n aria-label={`${item.label} menu`}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n \"absolute top-full z-50 pt-2 transition-all duration-150\",\n variant === \"floating\" ? \"inset-x-0 mx-auto w-full max-w-5xl\" : \"inset-x-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n <div\n className={cn(\n \"overflow-hidden rounded-xl border p-6 md:p-8\",\n s.panel,\n item.featured ? \"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12\" : \"\",\n )}\n >\n {renderColumns(item)}\n {item.featured && (\n <div className={cn(\"mt-8 max-w-sm lg:mt-0 lg:w-64\")}>\n {renderFeatured(item)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden\",\n mobileOpen ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className=\"flex flex-col py-4\">\n {languageSwitcher ? (\n <li className=\"px-5 pb-4\">{languageSwitcher}</li>\n ) : null}\n {items.map((item, i) =>\n item.columns?.length || item.featured ? (\n <li key={item.label} className=\"px-5\">\n <button\n type=\"button\"\n aria-expanded={mobileExpanded === i}\n onClick={() =>\n setMobileExpanded((prev) => (prev === i ? null : i))\n }\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileButton,\n )}\n >\n <span className=\"flex items-center gap-2\">\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n mobileExpanded === i && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200\",\n mobileExpanded === i\n ? \"grid-rows-[1fr] opacity-100\"\n : \"grid-rows-[0fr] opacity-0\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"py-2 pl-1\">\n {renderColumns(item)}\n {item.featured ? (\n <div className=\"max-w-sm\">{renderFeatured(item, true)}</div>\n ) : null}\n </div>\n </div>\n </div>\n </li>\n ) : (\n <li key={item.label} className=\"px-5\">\n <Link\n href={item.href ?? \"#\"}\n target={item.external ? \"_blank\" : undefined}\n rel={item.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {item.label}\n </Link>\n </li>\n ),\n )}\n {cta ? (\n <li className=\"px-8 pb-2 pt-3\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-8 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nMegaMenu.displayName = \"MegaMenu\";"],"names":["inverse","light","styles","MegaMenu","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","items","actions","cta","languageSwitcher","sticky","LinkComponent","onKeyDown","props","ids","useId","Link","openIndex","setOpenIndex","useState","mobileOpen","setMobileOpen","mobileExpanded","setMobileExpanded","s","closePanels","closeAll","panelId","i","logoNode","jsx","cn","brandNode","jsxs","triggerClasses","renderColumns","item","column","ci","link","renderFeatured","mobile","featured","featuredStyle","handleKeyDown","event","hasPanel","_a","open","ChevronDown","o","X","Menu","prev"],"mappings":"qMAwBMA,EAAU,oBACVC,EAAQ,kBAERC,EAAiD,CACrD,QAAS,CACP,MAAO,uGACP,IAAK,iCACL,OAAQ,OACR,QAAS,+DACT,YAAa,6BACb,MAAO,+BACP,MAAO,yCACP,YAAa,2BACb,WAAY,0BACZ,gBAAiB,wBACjB,YAAa,uCACb,aAAc,GAAGD,CAAK,oBACtB,WAAY,+DACZ,UAAWA,EACX,SAAU,eAAA,EAEZ,SAAU,CACR,MAAO,OACP,IAAK,kJACL,OAAQ,eACR,QAAS,+DACT,YAAa,6BACb,MAAO,+BACP,MAAO,yCACP,YAAa,2BACb,WAAY,0BACZ,gBAAiB,wBACjB,YAAa,mFACb,aAAc,GAAGA,CAAK,oBACtB,WAAY,+DACZ,UAAWA,EACX,SAAU,eAAA,EAEZ,QAAS,CACP,MAAO,4DACP,IAAK,iCACL,OAAQ,OACR,QAAS,iEACT,YAAa,gCACb,MAAO,gCACP,MAAO,+BACP,YAAa,uBACb,WAAY,oBACZ,gBAAiB,uBACjB,YAAa,wCACb,aAAc,GAAGD,CAAO,qBACxB,WAAY,iEACZ,UAAWA,EACX,SAAU,iBAAA,CAEd,EAEaG,EAAW,CAAC,CACvB,UAAAC,EACA,QAAAC,EAAU,UACV,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,UAAAC,EAAY,IACZ,MAAAC,EACA,QAAAC,EACA,IAAAC,EACA,iBAAAC,EACA,OAAAC,EAAS,GACT,cAAAC,EACA,UAAAC,EACA,GAAGC,CACL,IAAqB,CACnB,MAAMC,EAAMC,EAAAA,MAAA,EACNC,EAAOL,GAAiB,IACxB,CAACM,EAAWC,CAAY,EAAIC,EAAAA,SAAwB,IAAI,EACxD,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAAS,EAAK,EAC5C,CAACG,EAAgBC,CAAiB,EAAIJ,EAAAA,SAAwB,IAAI,EAClEK,EAAI5B,EAAOG,CAAO,EAElB0B,EAAc,IAAMP,EAAa,IAAI,EACrCQ,EAAW,IAAM,CACrBR,EAAa,IAAI,EACjBG,EAAc,EAAK,EACnBE,EAAkB,IAAI,CACxB,EAEMI,EAAWC,GAAc,GAAGd,CAAG,UAAUc,CAAC,GAE1CC,EACJ5B,IACCC,EACC4B,EAAAA,IAAC,MAAA,CACC,IAAK5B,EACL,IAAKC,IAAY,OAAOH,GAAU,SAAWA,EAAQ,QACrD,UAAW+B,EAAAA,GAAG,aAAc3B,CAAa,CAAA,CAAA,EAEzC,MAEA4B,EAAYH,EAChBC,MAAC,OAAA,CAAK,UAAU,oBAAqB,SAAAD,CAAA,CAAS,EAE9CI,OAAC,QAAK,UAAWF,EAAAA,GAAG,4EAA6EP,EAAE,SAAS,EAC1G,SAAA,CAAAM,EAAAA,IAAC,OAAA,CAAK,cAAW,GAAC,UAAWC,EAAAA,GAAG,sCAAuCP,EAAE,QAAQ,EAAG,EACnFxB,CAAA,EACH,EAGIkC,EAAiBH,EAAAA,GACrB,oGACAP,EAAE,OAAA,EAGEW,EAAiBC,UACrBN,OAAAA,EAAAA,IAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uCACAK,EAAK,SAAW,GAAK,gBAAA,EAGtB,cAAK,wBAAS,IAAI,CAACC,EAAQC,WACzB,MAAA,CACE,SAAA,CAAAD,EAAO,MACNP,EAAAA,IAAC,KAAA,CACC,UAAWC,EAAAA,GACT,oDACAP,EAAE,WAAA,EAGH,SAAAa,EAAO,KAAA,CAAA,EAER,KACJP,MAAC,KAAA,CAAG,UAAWC,EAAAA,GAAGM,EAAO,OAAS,OAAQ,aAAa,EACpD,WAAO,MAAM,IAAKE,SAChB,KAAA,CACC,SAAAN,EAAAA,KAACjB,EAAA,CACC,KAAMuB,EAAK,KACX,QAASb,EACT,OAAQa,EAAK,SAAW,SAAW,OACnC,IAAKA,EAAK,SAAW,sBAAwB,OAC7C,UAAWR,EAAAA,GACT,kEACAP,EAAE,UAAA,EAGJ,SAAA,CAAAM,EAAAA,IAAC,OAAA,CAAK,UAAU,4CACb,SAAAS,EAAK,MACR,EACCA,EAAK,YACJT,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,GACT,wCACAP,EAAE,eAAA,EAGH,SAAAe,EAAK,WAAA,CAAA,EAEN,IAAA,CAAA,CAAA,GAvBCA,EAAK,IAyBd,CACD,CAAA,CACH,CAAA,GAxCQF,EAAO,OAASC,CAyC1B,EACD,CAAA,GAICE,EAAiB,CAACJ,EAAoBK,EAAS,KAAU,CAC7D,MAAMC,EAAWN,EAAK,SACtB,GAAI,CAACM,EAAU,OAAO,KACtB,MAAMC,EAAgBD,EAAS,OAC3B,CAAE,gBAAiBA,EAAS,OAAQ,MAAO,kBAAkBA,EAAS,MAAM,GAAA,EAC5E,OAEJ,OACET,EAAAA,KAACjB,EAAA,CACC,KAAM0B,EAAS,KACf,QAAShB,EACT,OAAQgB,EAAS,SAAW,SAAW,OACvC,IAAKA,EAAS,SAAW,sBAAwB,OACjD,UAAWX,EAAAA,GACT,+GACAU,GAAU,OACV,CAACC,EAAS,QAAU,4BAAA,EAEtB,MAAOC,EAEP,SAAA,CAAAV,EAAAA,KAAC,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,KAAA,CAAG,UAAU,sDACX,SAAAY,EAAS,MACZ,EACCA,EAAS,YACRZ,MAAC,IAAA,CAAE,UAAU,gDACV,SAAAY,EAAS,YACZ,EACE,IAAA,EACN,EACCA,EAAS,IACRT,OAAC,OAAA,CAAK,UAAU,kEACb,SAAA,CAAAS,EAAS,IAAI,IAAA,CAAA,CAChB,EACE,IAAA,EACN,EACAZ,EAAAA,IAAC,MAAA,CACC,cAAW,GACX,UAAU,qGAAA,CAAA,CACZ,CAAA,CAAA,CAGN,EAEMc,EAAiBC,GAA4C,CAC7DA,EAAM,MAAQ,UAChBnB,EAAA,EAEFd,GAAA,MAAAA,EAAYiC,EACd,EAEA,OACEZ,EAAAA,KAAC,SAAA,CACC,UAAWF,EAAAA,GACT,iDACArB,GAAU,oBACVc,EAAE,MACFA,EAAE,OACF1B,CAAA,EAEF,UAAW8C,EACV,GAAG/B,EAEJ,SAAA,CAAAoB,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAAA,GAAG,8FAA+FP,EAAE,GAAG,EAAG,aAAcC,EAAa,aAAW,YAC9J,SAAA,CAAAK,MAACd,EAAA,CAAK,KAAMX,EAAW,UAAU,WAC9B,SAAA2B,EACH,EAEAF,MAAC,MAAG,UAAU,oCACX,WAAM,IAAI,CAACM,EAAMR,IAAM,OACtB,MAAMkB,EAAW,IAAQC,EAAAX,EAAK,UAAL,MAAAW,EAAc,QAAUX,EAAK,UAChDY,EAAO/B,IAAcW,EAC3B,OACEE,EAAAA,IAAC,KAAA,CAAoB,UAAU,WAC5B,SAAAgB,EACCb,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,gBAAc,OACd,gBAAee,EACf,gBAAerB,EAAQC,CAAC,EACxB,QAAS,IAAMV,EAAa8B,EAAO,KAAOpB,CAAC,EAC3C,aAAc,IAAMV,EAAaU,CAAC,EAClC,UAAWG,EAAAA,GAAGG,EAAgBc,GAAQxB,EAAE,WAAW,EAEnD,SAAA,CAAAS,EAAAA,KAAC,OAAA,CAAK,UAAU,4BACb,SAAA,CAAAG,EAAK,MACLA,EAAK,MACJN,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,GACT,qEACAP,EAAE,KAAA,EAGH,SAAAY,EAAK,KAAA,CAAA,EAEN,IAAA,EACN,EACAN,EAAAA,IAACmB,EAAAA,YAAA,CACC,UAAWlB,EAAAA,GACT,qDACAiB,GAAQ,YAAA,CACV,CAAA,CACF,CAAA,CAAA,EAGFf,EAAAA,KAACjB,EAAA,CAAK,KAAMoB,EAAK,MAAQ,IAAK,OAAQA,EAAK,SAAW,SAAW,OAAW,IAAKA,EAAK,SAAW,sBAAwB,OAAW,UAAWF,EAC5I,SAAA,CAAAE,EAAK,MACLA,EAAK,MACJN,EAAAA,IAAC,OAAA,CAAK,UAAWC,EAAAA,GAAG,qEAAsEP,EAAE,KAAK,EAC9F,SAAAY,EAAK,KAAA,CACR,EACE,IAAA,EACN,CAAA,EAvCKA,EAAK,KAyCd,CAEJ,CAAC,CAAA,CACH,EAEAH,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACZ,SAAA,CAAAxB,EACAF,EACAC,CAAA,EACH,EAEAsB,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,aAAYV,EAAa,aAAe,YACxC,gBAAeA,EACf,QAAS,IAAMC,EAAe6B,GAAM,CAACA,CAAC,EACtC,UAAWnB,EAAAA,GACT,iGACA,yGACAP,EAAE,YAAA,EAGH,SAAAJ,QAAc+B,EAAAA,EAAA,CAAE,UAAU,UAAU,EAAKrB,EAAAA,IAACsB,EAAAA,KAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAAA,CACtE,EACF,EAEC9C,EAAM,IAAI,CAAC8B,EAAMR,IAAM,OACtB,GAAI,GAACmB,EAAAX,EAAK,UAAL,MAAAW,EAAc,SAAU,CAACX,EAAK,SAAU,OAAO,KACpD,MAAMY,EAAO/B,IAAcW,EAC3B,OACEE,EAAAA,IAAC,MAAA,CAEC,GAAIH,EAAQC,CAAC,EACb,KAAK,SACL,aAAY,GAAGQ,EAAK,KAAK,QACzB,aAAc,IAAMlB,EAAaU,CAAC,EAClC,UAAWG,EAAAA,GACT,0DACAhC,IAAY,WAAa,qCAAuC,YAChEiD,EACI,oCACA,wDAAA,EAGN,SAAAf,EAAAA,KAAC,MAAA,CACC,UAAWF,EAAAA,GACT,+CACAP,EAAE,MACFY,EAAK,SAAW,sDAAwD,EAAA,EAGzE,SAAA,CAAAD,EAAcC,CAAI,EAClBA,EAAK,UACJN,MAAC,MAAA,CAAI,UAAWC,KAAG,+BAA+B,EAC/C,SAAAS,EAAeJ,CAAI,CAAA,CACtB,CAAA,CAAA,CAAA,CAEJ,EA1BKA,EAAK,KAAA,CA6BhB,CAAC,EAEDN,EAAAA,IAAC,MAAA,CACC,UAAWC,EAAAA,GACT,sEACAX,EAAa,8BAAgC,4BAC7CI,EAAE,WAAA,EAGJ,eAAC,MAAA,CAAI,UAAU,0BACb,SAAAS,EAAAA,KAAC,KAAA,CAAG,UAAU,qBACX,SAAA,CAAAxB,EACCqB,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAa,WAAiB,EAC1C,KACHxB,EAAM,IAAI,CAAC8B,EAAMR,IAAA,OAChB,OAAAmB,EAAAX,EAAK,UAAL,MAAAW,EAAc,QAAUX,EAAK,SAC3BH,EAAAA,KAAC,KAAA,CAAoB,UAAU,OAC7B,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,gBAAeX,IAAmBM,EAClC,QAAS,IACPL,EAAmB8B,GAAUA,IAASzB,EAAI,KAAOA,CAAE,EAErD,UAAWG,EAAAA,GACT,qHACAP,EAAE,YAAA,EAGJ,SAAA,CAAAS,EAAAA,KAAC,OAAA,CAAK,UAAU,0BACb,SAAA,CAAAG,EAAK,MACLA,EAAK,MACJN,EAAAA,IAAC,OAAA,CAAK,UAAWC,EAAAA,GAAG,qEAAsEP,EAAE,KAAK,EAC9F,SAAAY,EAAK,KAAA,CACR,EACE,IAAA,EACN,EACAN,EAAAA,IAACmB,EAAAA,YAAA,CACC,UAAWlB,EAAAA,GACT,qDACAT,IAAmBM,GAAK,YAAA,CAC1B,CAAA,CACF,CAAA,CAAA,EAEFE,EAAAA,IAAC,MAAA,CACC,UAAWC,EAAAA,GACT,4DACAT,IAAmBM,EACf,8BACA,2BAAA,EAGN,eAAC,MAAA,CAAI,UAAU,0BACb,SAAAK,EAAAA,KAAC,MAAA,CAAI,UAAU,YACZ,SAAA,CAAAE,EAAcC,CAAI,EAClBA,EAAK,SACJN,MAAC,MAAA,CAAI,UAAU,WAAY,SAAAU,EAAeJ,EAAM,EAAI,CAAA,CAAE,EACpD,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CAAA,CACF,GA3COA,EAAK,KA4Cd,EAEAN,EAAAA,IAAC,KAAA,CAAoB,UAAU,OAC7B,SAAAA,EAAAA,IAACd,EAAA,CACC,KAAMoB,EAAK,MAAQ,IACnB,OAAQA,EAAK,SAAW,SAAW,OACnC,IAAKA,EAAK,SAAW,sBAAwB,OAC7C,QAAS,IAAMf,EAAc,EAAK,EAClC,UAAWU,EAAAA,GACT,kFACAP,EAAE,UAAA,EAGH,SAAAY,EAAK,KAAA,CAAA,CACR,EAZOA,EAAK,KAad,EAAA,EAGH5B,EACCsB,EAAAA,IAAC,KAAA,CAAG,UAAU,iBAAkB,SAAAtB,CAAA,CAAI,EAClCD,EACFuB,EAAAA,IAAC,KAAA,CAAG,UAAU,sCAAuC,WAAQ,EAC3D,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,EACAjC,EAAS,YAAc"}
1
+ {"version":3,"file":"MegaMenu.cjs","sources":["../../../../src/components/MegaMenu/MegaMenu.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { ChevronDown, Menu, X } from \"../../icons\";\nimport { emphasisSurfaceStyle } from \"../../utils/surface\";\nimport type { MegaMenuProps, MegaMenuVariant, MegaMenuItem } from \"./types\";\n\ninterface MegaMenuStyle {\n shell: string;\n bar: string;\n header: string;\n trigger: string;\n triggerOpen: string;\n badge: string;\n panel: string;\n columnTitle: string;\n columnLink: string;\n linkDescription: string;\n mobilePanel: string;\n mobileButton: string;\n mobileLink: string;\n brandText: string;\n brandDot: string;\n}\n\nconst styles: Record<MegaMenuVariant, MegaMenuStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileButton: \"text-foreground hover:bg-surface\",\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileButton: \"text-foreground hover:bg-surface\",\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n },\n};\n\n/**\n * On an emphasis (custom-background) bar the triggers and mobile controls inherit\n * the resolved contrast color instead of the page tokens. The dropdown panel\n * stays a paper card for legibility.\n */\nconst emphatic: MegaMenuStyle = {\n shell: \"\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-current/70 hover:text-current hover:bg-current/10\",\n triggerOpen: \"bg-current/15 text-current\",\n badge: \"bg-current/20 text-current\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"border-t border-current/15\",\n mobileButton: \"text-current hover:bg-current/10\",\n mobileLink: \"text-current/70 hover:bg-current/10 hover:text-current\",\n brandText: \"text-current\",\n brandDot: \"bg-current\",\n};\n\nexport const MegaMenu = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n items,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n background,\n LinkComponent,\n onKeyDown,\n style,\n ...props\n}: MegaMenuProps) => {\n const ids = useId();\n const Link = LinkComponent ?? \"a\";\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<number | null>(null);\n const s = background ? emphatic : styles[variant];\n const floating = !background && variant === \"floating\";\n\n const closePanels = () => setOpenIndex(null);\n const closeAll = () => {\n setOpenIndex(null);\n setMobileOpen(false);\n setMobileExpanded(null);\n };\n\n const panelId = (i: number) => `${ids}-panel-${i}`;\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n const triggerClasses = cn(\n \"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150\",\n s.trigger,\n );\n\n const renderColumns = (item: MegaMenuItem) => (\n <div\n className={cn(\n \"grid gap-x-10 gap-y-8 sm:grid-cols-2\",\n item.featured ? \"\" : \"lg:grid-cols-3\",\n )}\n >\n {item.columns?.map((column, ci) => (\n <div key={column.title ?? ci}>\n {column.title ? (\n <h4\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.14em]\",\n s.columnTitle,\n )}\n >\n {column.title}\n </h4>\n ) : null}\n <ul className={cn(column.title && \"mt-3\", \"space-y-0.5\")}>\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={closeAll}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150\",\n s.columnLink,\n )}\n >\n <span className=\"block text-sm font-medium text-foreground\">\n {link.label}\n </span>\n {link.description ? (\n <span\n className={cn(\n \"mt-0.5 block text-[13px] leading-snug\",\n s.linkDescription,\n )}\n >\n {link.description}\n </span>\n ) : null}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n\n const renderFeatured = (item: MegaMenuItem, mobile = false) => {\n const featured = item.featured;\n if (!featured) return null;\n const featuredStyle = featured.accent\n ? { backgroundColor: featured.accent, color: `contrast-color(${featured.accent})` }\n : undefined;\n\n return (\n <Link\n href={featured.href}\n onClick={closeAll}\n target={featured.external ? \"_blank\" : undefined}\n rel={featured.external ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5\",\n mobile && \"mt-8\",\n !featured.accent && \"bg-primary text-on-primary\",\n )}\n style={featuredStyle}\n >\n <div className=\"flex h-full flex-col justify-between gap-4\">\n <div>\n <h4 className=\"font-display text-base font-semibold tracking-tight\">\n {featured.title}\n </h4>\n {featured.description ? (\n <p className=\"mt-1.5 text-[13px] leading-relaxed opacity-80\">\n {featured.description}\n </p>\n ) : null}\n </div>\n {featured.cta ? (\n <span className=\"text-sm font-semibold underline decoration-1 underline-offset-4\">\n {featured.cta} →\n </span>\n ) : null}\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40\"\n />\n </Link>\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n closeAll();\n }\n onKeyDown?.(event);\n };\n\n return (\n <header\n data-emphasis={background ? \"\" : undefined}\n style={background ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\n \"relative w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <nav className={cn(\"relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} onMouseLeave={closePanels} aria-label=\"Mega menu\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className=\"hidden items-center gap-1 lg:flex\">\n {items.map((item, i) => {\n const hasPanel = Boolean(item.columns?.length || item.featured);\n const open = openIndex === i;\n return (\n <li key={item.label} className=\"relative\">\n {hasPanel ? (\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n aria-controls={panelId(i)}\n onClick={() => setOpenIndex(open ? null : i)}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(triggerClasses, open && s.triggerOpen)}\n >\n <span className=\"flex items-center gap-1.5\">\n {item.label}\n {item.badge ? (\n <span\n className={cn(\n \"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\",\n s.badge,\n )}\n >\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <Link href={item.href ?? \"#\"} target={item.external ? \"_blank\" : undefined} rel={item.external ? \"noopener noreferrer\" : undefined} className={triggerClasses}>\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n\n <div className=\"hidden items-center gap-3 lg:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={mobileOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.mobileButton,\n )}\n >\n {mobileOpen ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {items.map((item, i) => {\n if (!item.columns?.length && !item.featured) return null;\n const open = openIndex === i;\n return (\n <div\n key={item.label}\n id={panelId(i)}\n role=\"region\"\n aria-label={`${item.label} menu`}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n \"absolute top-full z-50 pt-2 transition-all duration-150\",\n floating ? \"inset-x-0 mx-auto w-full max-w-5xl\" : \"inset-x-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n <div\n className={cn(\n \"overflow-hidden rounded-xl border p-6 md:p-8\",\n s.panel,\n item.featured ? \"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12\" : \"\",\n )}\n >\n {renderColumns(item)}\n {item.featured && (\n <div className={cn(\"mt-8 max-w-sm lg:mt-0 lg:w-64\")}>\n {renderFeatured(item)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden\",\n mobileOpen ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n background && \"bg-transparent\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className=\"flex flex-col py-4\">\n {languageSwitcher ? (\n <li className=\"px-5 pb-4\">{languageSwitcher}</li>\n ) : null}\n {items.map((item, i) =>\n item.columns?.length || item.featured ? (\n <li key={item.label} className=\"px-5\">\n <button\n type=\"button\"\n aria-expanded={mobileExpanded === i}\n onClick={() =>\n setMobileExpanded((prev) => (prev === i ? null : i))\n }\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileButton,\n )}\n >\n <span className=\"flex items-center gap-2\">\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n mobileExpanded === i && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200\",\n mobileExpanded === i\n ? \"grid-rows-[1fr] opacity-100\"\n : \"grid-rows-[0fr] opacity-0\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"py-2 pl-1\">\n {renderColumns(item)}\n {item.featured ? (\n <div className=\"max-w-sm\">{renderFeatured(item, true)}</div>\n ) : null}\n </div>\n </div>\n </div>\n </li>\n ) : (\n <li key={item.label} className=\"px-5\">\n <Link\n href={item.href ?? \"#\"}\n target={item.external ? \"_blank\" : undefined}\n rel={item.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {item.label}\n </Link>\n </li>\n ),\n )}\n {cta ? (\n <li className=\"px-8 pb-2 pt-3\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-8 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nMegaMenu.displayName = \"MegaMenu\";"],"names":["styles","emphatic","MegaMenu","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","items","actions","cta","languageSwitcher","sticky","background","LinkComponent","onKeyDown","style","props","ids","useId","Link","openIndex","setOpenIndex","useState","mobileOpen","setMobileOpen","mobileExpanded","setMobileExpanded","s","floating","closePanels","closeAll","panelId","i","logoNode","jsx","cn","brandNode","jsxs","triggerClasses","renderColumns","item","column","ci","link","renderFeatured","mobile","featured","featuredStyle","handleKeyDown","event","emphasisSurfaceStyle","hasPanel","_a","open","ChevronDown","o","X","Menu","prev"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),q=require("react"),n=require("../../utils/cn.cjs"),p=require("../../icons.cjs"),f="text-on-secondary",s="text-foreground",B={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-muted-foreground hover:text-foreground",mobilePanel:"border-t border-border bg-background",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:`${s} hover:bg-surface`,brandText:s,brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",link:"text-muted-foreground hover:text-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:`${s} hover:bg-surface`,brandText:s,brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"},inverse:{shell:"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-on-secondary/60 hover:text-on-secondary",mobilePanel:"border-t border-white/10 bg-[#101010]",mobileLink:"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",menuButton:`${f} hover:bg-white/10`,brandText:f,brandDot:"bg-on-secondary",desktopList:"hidden items-center gap-7 md:flex"}},g=({className:v,variant:x="classic",brand:a,logo:j,logoSrc:b,logoAlt:N,logoClassName:k,brandHref:w="#",links:m,actions:d,cta:l,languageSwitcher:i,sticky:y=!0,LinkComponent:L,...P})=>{const[t,u]=q.useState(!1),c=L??"a",o=B[x],h=j??(b?e.jsx("img",{src:b,alt:N??(typeof a=="string"?a:"Logo"),className:n.cn("h-7 w-auto",k)}):null),T=h?e.jsx("span",{className:"flex items-center",children:h}):e.jsxs("span",{className:n.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",o.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:n.cn("inline-block h-2.5 w-2.5 rounded-sm",o.brandDot)}),a]});return e.jsxs("header",{className:n.cn("w-full transition-colors duration-200",y&&"sticky top-0 z-50",o.shell,o.header,v),...P,children:[e.jsxs("nav",{className:n.cn("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",o.bar),"aria-label":"Main navigation",children:[e.jsx(c,{href:w,className:"shrink-0",children:T}),e.jsx("ul",{className:o.desktopList,children:m.map(r=>e.jsx("li",{children:e.jsx(c,{href:r.href,target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,className:n.cn("text-sm font-medium transition-colors duration-150",o.link),children:r.label})},r.href))}),e.jsxs("div",{className:"hidden items-center gap-3 md:flex",children:[i,d,l]}),e.jsx("button",{type:"button","aria-label":t?"Close menu":"Open menu","aria-expanded":t,onClick:()=>u(r=>!r),className:n.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o.menuButton),children:t?e.jsx(p.X,{className:"h-5 w-5"}):e.jsx(p.Menu,{className:"h-5 w-5"})})]}),e.jsx("div",{className:n.cn("grid transition-[grid-template-rows,opacity] duration-200 md:hidden",t?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",o.mobilePanel),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:n.cn("flex flex-col py-4",x!=="floating"&&"px-5"),children:[i?e.jsx("li",{className:"px-2 pb-4",children:i}):null,m.map(r=>e.jsx("li",{children:e.jsx(c,{href:r.href,target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,onClick:()=>u(!1),className:n.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",o.mobileLink),children:r.label})},r.href)),l?e.jsx("li",{className:"mt-3 px-2 pb-2",children:l}):d?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-2 pb-2",children:d}):null]})})})]})};g.displayName="Navbar";exports.Navbar=g;
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),B=require("react"),n=require("../../utils/cn.cjs"),p=require("../../icons.cjs"),D=require("../../utils/surface.cjs"),C={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-muted-foreground hover:text-foreground",mobilePanel:"border-t border-border bg-background",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:"text-foreground hover:bg-surface",brandText:"text-foreground",brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",link:"text-muted-foreground hover:text-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:"text-foreground hover:bg-surface",brandText:"text-foreground",brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"}},M={shell:"",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-current/70 hover:text-current",mobilePanel:"border-t border-current/15",mobileLink:"text-current/70 hover:bg-current/10 hover:text-current",menuButton:"text-current hover:bg-current/10",brandText:"text-current",brandDot:"bg-current",desktopList:"hidden items-center gap-7 md:flex"},g=({className:v,variant:x="classic",brand:a,logo:j,logoSrc:u,logoAlt:N,logoClassName:w,brandHref:k="#",links:m,actions:l,cta:i,languageSwitcher:d,sticky:y=!0,background:o,LinkComponent:L,style:b,...q})=>{const[s,f]=B.useState(!1),c=L??"a",t=o?M:C[x],P=!o&&x==="floating",h=j??(u?e.jsx("img",{src:u,alt:N??(typeof a=="string"?a:"Logo"),className:n.cn("h-7 w-auto",w)}):null),T=h?e.jsx("span",{className:"flex items-center",children:h}):e.jsxs("span",{className:n.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",t.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:n.cn("inline-block h-2.5 w-2.5 rounded-sm",t.brandDot)}),a]});return e.jsxs("header",{"data-emphasis":o?"":void 0,style:o?{...D.emphasisSurfaceStyle(o),...b}:b,className:n.cn("w-full transition-colors duration-200",y&&"sticky top-0 z-50",t.shell,t.header,v),...q,children:[e.jsxs("nav",{className:n.cn("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",t.bar),"aria-label":"Main navigation",children:[e.jsx(c,{href:k,className:"shrink-0",children:T}),e.jsx("ul",{className:t.desktopList,children:m.map(r=>e.jsx("li",{children:e.jsx(c,{href:r.href,target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,className:n.cn("text-sm font-medium transition-colors duration-150",t.link),children:r.label})},r.href))}),e.jsxs("div",{className:"hidden items-center gap-3 md:flex",children:[d,l,i]}),e.jsx("button",{type:"button","aria-label":s?"Close menu":"Open menu","aria-expanded":s,onClick:()=>f(r=>!r),className:n.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t.menuButton),children:s?e.jsx(p.X,{className:"h-5 w-5"}):e.jsx(p.Menu,{className:"h-5 w-5"})})]}),e.jsx("div",{className:n.cn("grid transition-[grid-template-rows,opacity] duration-200 md:hidden",s?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",t.mobilePanel,o&&"bg-transparent"),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:n.cn("flex flex-col py-4",!P&&"px-5"),children:[d?e.jsx("li",{className:"px-2 pb-4",children:d}):null,m.map(r=>e.jsx("li",{children:e.jsx(c,{href:r.href,target:r.external?"_blank":void 0,rel:r.external?"noopener noreferrer":void 0,onClick:()=>f(!1),className:n.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",t.mobileLink),children:r.label})},r.href)),i?e.jsx("li",{className:"mt-3 px-2 pb-2",children:i}):l?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-2 pb-2",children:l}):null]})})})]})};g.displayName="Navbar";exports.Navbar=g;
3
3
  //# sourceMappingURL=Navbar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Navbar.cjs","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-on-secondary/60 hover:text-on-secondary\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileLink:\n \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n menuButton: `${inverse} hover:bg-white/10`,\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = styles[variant];\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(\"w-full transition-colors duration-200\", sticky && \"sticky top-0 z-50\", s.shell, s.header, className)} {...props}>\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";"],"names":["inverse","light","styles","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","LinkComponent","props","open","setOpen","useState","Link","s","logoNode","jsx","cn","brandNode","jsxs","link","o","X","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"Navbar.cjs","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport { emphasisSurfaceStyle } from \"../../utils/surface\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: \"text-foreground hover:bg-surface\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: \"text-foreground hover:bg-surface\",\n brandText: \"text-foreground\",\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\n/**\n * On an emphasis (custom-background) bar everything inherits the resolved\n * contrast color instead of the page's --color-foreground/--color-border tokens.\n */\nconst emphatic: NavbarStyle = {\n shell: \"\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-current/70 hover:text-current\",\n mobilePanel: \"border-t border-current/15\",\n mobileLink: \"text-current/70 hover:bg-current/10 hover:text-current\",\n menuButton: \"text-current hover:bg-current/10\",\n brandText: \"text-current\",\n brandDot: \"bg-current\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n background,\n LinkComponent,\n style,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = background ? emphatic : styles[variant];\n const floating = !background && variant === \"floating\";\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header\n data-emphasis={background ? \"\" : undefined}\n style={background ? { ...emphasisSurfaceStyle(background), ...style } : style}\n className={cn(\n \"w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n {...props}\n >\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n background && \"bg-transparent\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", !floating && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";\n"],"names":["styles","emphatic","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","background","LinkComponent","style","props","open","setOpen","useState","Link","s","floating","logoNode","jsx","cn","brandNode","jsxs","emphasisSurfaceStyle","link","o","X","Menu"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("react"),l=require("./variants/Editorial.cjs"),n=require("./variants/Hairline.cjs"),c=require("./variants/Cells.cjs"),u=require("./variants/Ticker.cjs"),s=a.forwardRef(({option:i="editorial",...t},e)=>i==="ticker"?r.jsx(u.StatsTicker,{ref:e,...t}):i==="cells"?r.jsx(c.StatsCells,{ref:e,...t}):i==="hairline"?r.jsx(n.StatsHairline,{ref:e,...t}):r.jsx(l.StatsEditorial,{ref:e,...t}));s.displayName="Stats";exports.Stats=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),c=require("react"),a=require("./variants/Stacked.cjs"),d=require("./variants/Divided.cjs"),u=require("./variants/Cells.cjs"),n=require("./variants/Ticker.cjs"),i=c.forwardRef(({option:s="stacked",...e},t)=>s==="ticker"?r.jsx(n.StatsTicker,{ref:t,...e}):s==="cells"?r.jsx(u.StatsCells,{ref:t,...e}):s==="divided"?r.jsx(d.StatsDivided,{ref:t,...e}):r.jsx(a.StatsStacked,{ref:t,...e}));i.displayName="Stats";exports.Stats=i;
2
2
  //# sourceMappingURL=Stats.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stats.cjs","sources":["../../../../src/components/Stats/Stats.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { StatsProps } from \"./types\";\nimport { StatsEditorial } from \"./variants/Editorial\";\nimport { StatsHairline } from \"./variants/Hairline\";\nimport { StatsCells } from \"./variants/Cells\";\nimport { StatsTicker } from \"./variants/Ticker\";\n\nexport const Stats = forwardRef<HTMLDListElement, StatsProps>(\n ({ option = \"editorial\", ...props }, ref) => {\n if (option === \"ticker\") return <StatsTicker ref={ref} {...props} />;\n if (option === \"cells\") return <StatsCells ref={ref} {...props} />;\n if (option === \"hairline\") return <StatsHairline ref={ref} {...props} />;\n return <StatsEditorial ref={ref} {...props} />;\n },\n);\nStats.displayName = \"Stats\";"],"names":["Stats","forwardRef","option","props","ref","StatsTicker","StatsCells","StatsHairline","jsx","StatsEditorial"],"mappings":"wRAOaA,EAAQC,EAAAA,WACnB,CAAC,CAAE,OAAAC,EAAS,YAAa,GAAGC,CAAA,EAASC,IAC/BF,IAAW,eAAkBG,EAAAA,YAAA,CAAY,IAAAD,EAAW,GAAGD,EAAO,EAC9DD,IAAW,cAAiBI,EAAAA,WAAA,CAAW,IAAAF,EAAW,GAAGD,EAAO,EAC5DD,IAAW,iBAAoBK,EAAAA,cAAA,CAAc,IAAAH,EAAW,GAAGD,EAAO,EAC/DK,EAAAA,IAACC,EAAAA,eAAA,CAAe,IAAAL,EAAW,GAAGD,CAAA,CAAO,CAEhD,EACAH,EAAM,YAAc"}
1
+ {"version":3,"file":"Stats.cjs","sources":["../../../../src/components/Stats/Stats.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { StatsProps } from \"./types\";\nimport { StatsStacked } from \"./variants/Stacked\";\nimport { StatsDivided } from \"./variants/Divided\";\nimport { StatsCells } from \"./variants/Cells\";\nimport { StatsTicker } from \"./variants/Ticker\";\n\nexport const Stats = forwardRef<HTMLDListElement, StatsProps>(\n ({ option = \"stacked\", ...props }, ref) => {\n if (option === \"ticker\") return <StatsTicker ref={ref} {...props} />;\n if (option === \"cells\") return <StatsCells ref={ref} {...props} />;\n if (option === \"divided\") return <StatsDivided ref={ref} {...props} />;\n return <StatsStacked ref={ref} {...props} />;\n },\n);\nStats.displayName = \"Stats\";\n"],"names":["Stats","forwardRef","option","props","ref","StatsTicker","StatsCells","StatsDivided","jsx","StatsStacked"],"mappings":"qRAOaA,EAAQC,EAAAA,WACnB,CAAC,CAAE,OAAAC,EAAS,UAAW,GAAGC,CAAA,EAASC,IAC7BF,IAAW,eAAkBG,EAAAA,YAAA,CAAY,IAAAD,EAAW,GAAGD,EAAO,EAC9DD,IAAW,cAAiBI,EAAAA,WAAA,CAAW,IAAAF,EAAW,GAAGD,EAAO,EAC5DD,IAAW,gBAAmBK,EAAAA,aAAA,CAAa,IAAAH,EAAW,GAAGD,EAAO,EAC7DK,EAAAA,IAACC,EAAAA,aAAA,CAAa,IAAAL,EAAW,GAAGD,CAAA,CAAO,CAE9C,EACAH,EAAM,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),x=require("react"),a=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),i=x.forwardRef(({className:d,stats:t,columns:s=4,...n},c)=>l.jsx("dl",{ref:c,className:a.cn("grid grid-cols-1 gap-y-10",r.gridCols[s],r.gridDivider[s],d),...n,children:t.map(e=>l.jsxs("div",{className:"flex flex-col items-center gap-2.5 border-border text-center sm:px-6",children:[l.jsxs("dd",{className:a.cn(r.valueBase,"text-4xl sm:text-5xl",e.accent?"text-primary":void 0),children:[e.value,e.suffix?l.jsx("span",{className:r.suffixBase,children:e.suffix}):null]}),l.jsx("dt",{className:"text-sm leading-5 text-muted-foreground",children:e.label}),typeof e.delta=="number"?l.jsx(r.DeltaMark,{delta:e.delta,className:"mt-0.5"}):null,e.sub?l.jsx("p",{className:"mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground",children:e.sub}):null]},e.label))}));i.displayName="StatsHairline";exports.StatsHairline=i;
2
- //# sourceMappingURL=Hairline.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),x=require("react"),d=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),i=x.forwardRef(({className:a,stats:t,columns:s=4,...c},n)=>l.jsx("dl",{ref:n,className:d.cn("grid grid-cols-1 gap-y-10",r.gridCols[s],r.gridDivider[s],a),...c,children:t.map(e=>l.jsxs("div",{className:"flex flex-col items-center gap-2.5 border-border text-center sm:px-6",children:[l.jsxs("dd",{className:d.cn(r.valueBase,"text-4xl sm:text-5xl",e.accent?"text-primary":void 0),children:[e.value,e.suffix?l.jsx("span",{className:r.suffixBase,children:e.suffix}):null]}),l.jsx("dt",{className:"text-sm leading-5 text-muted-foreground",children:e.label}),typeof e.delta=="number"?l.jsx(r.DeltaMark,{delta:e.delta,className:"mt-0.5"}):null,e.sub?l.jsx("p",{className:"mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground",children:e.sub}):null]},e.label))}));i.displayName="StatsDivided";exports.StatsDivided=i;
2
+ //# sourceMappingURL=Divided.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divided.cjs","sources":["../../../../../src/components/Stats/variants/Divided.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, gridDivider, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface DividedProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** divided — centered numerals in a symmetric run, divided by true vertical hairlines. */\nexport const StatsDivided = forwardRef<HTMLDListElement, DividedProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-y-10\", gridCols[columns], gridDivider[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex flex-col items-center gap-2.5 border-border text-center sm:px-6\"\n >\n <dd\n className={cn(\n valueBase,\n \"text-4xl sm:text-5xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n {typeof stat.delta === \"number\" ? (\n <DeltaMark delta={stat.delta} className=\"mt-0.5\" />\n ) : null}\n {stat.sub ? (\n <p className=\"mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground\">\n {stat.sub}\n </p>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsDivided.displayName = \"StatsDivided\";\n"],"names":["StatsDivided","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","gridDivider","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":"qMAWaA,EAAeC,EAAAA,WAC1B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,QAAAC,EAAU,EAAG,GAAGC,CAAA,EAASC,IAC5CC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,UAAWE,EAAAA,GAAG,4BAA6BC,EAAAA,SAASL,CAAO,EAAGM,EAAAA,YAAYN,CAAO,EAAGF,CAAS,EAC5F,GAAGG,EAEH,SAAAF,EAAM,IAAKQ,GACVC,EAAAA,KAAC,MAAA,CAEC,UAAU,uEAEV,SAAA,CAAAA,EAAAA,KAAC,KAAA,CACC,UAAWJ,EAAAA,GACTK,EAAAA,UACA,uBACAF,EAAK,OAAS,eAAiB,MAAA,EAGhC,SAAA,CAAAA,EAAK,MACLA,EAAK,OAASJ,MAAC,OAAA,CAAK,UAAWO,EAAAA,WAAa,SAAAH,EAAK,OAAO,EAAU,IAAA,CAAA,CAAA,EAErEJ,EAAAA,IAAC,KAAA,CAAG,UAAU,0CAA2C,WAAK,MAAM,EACnE,OAAOI,EAAK,OAAU,SACrBJ,EAAAA,IAACQ,EAAAA,UAAA,CAAU,MAAOJ,EAAK,MAAO,UAAU,QAAA,CAAS,EAC/C,KACHA,EAAK,IACJJ,MAAC,IAAA,CAAE,UAAU,gEACV,SAAAI,EAAK,IACR,EACE,IAAA,CAAA,EArBCA,EAAK,KAAA,CAuBb,CAAA,CAAA,CAGP,EACAX,EAAa,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),u=require("react"),s=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),a=u.forwardRef(({className:d,stats:i,columns:n=4,...t},c)=>l.jsx("dl",{ref:c,className:s.cn("grid grid-cols-1 gap-x-10 gap-y-10",r.gridCols[n],d),...t,children:i.map(e=>l.jsxs("div",{className:"border-t border-border pt-5",children:[l.jsx("dt",{className:"text-sm leading-5 text-muted-foreground",children:e.label}),l.jsxs("dd",{className:s.cn(r.valueBase,"mt-3 text-5xl sm:text-6xl",e.accent?"text-primary":void 0),children:[e.value,e.suffix?l.jsx("span",{className:r.suffixBase,children:e.suffix}):null]}),typeof e.delta=="number"||e.sub?l.jsxs("div",{className:"mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[typeof e.delta=="number"?l.jsx(r.DeltaMark,{delta:e.delta}):null,e.sub?l.jsx("p",{className:"text-[13px] leading-5 text-muted-foreground",children:e.sub}):null]}):null]},e.label))}));a.displayName="StatsEditorial";exports.StatsEditorial=a;
2
- //# sourceMappingURL=Editorial.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),u=require("react"),s=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),a=u.forwardRef(({className:d,stats:c,columns:n=4,...t},i)=>l.jsx("dl",{ref:i,className:s.cn("grid grid-cols-1 gap-x-10 gap-y-10",r.gridCols[n],d),...t,children:c.map(e=>l.jsxs("div",{className:"border-t border-border pt-5",children:[l.jsx("dt",{className:"text-sm leading-5 text-muted-foreground",children:e.label}),l.jsxs("dd",{className:s.cn(r.valueBase,"mt-3 text-5xl sm:text-6xl",e.accent?"text-primary":void 0),children:[e.value,e.suffix?l.jsx("span",{className:r.suffixBase,children:e.suffix}):null]}),typeof e.delta=="number"||e.sub?l.jsxs("div",{className:"mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[typeof e.delta=="number"?l.jsx(r.DeltaMark,{delta:e.delta}):null,e.sub?l.jsx("p",{className:"text-[13px] leading-5 text-muted-foreground",children:e.sub}):null]}):null]},e.label))}));a.displayName="StatsStacked";exports.StatsStacked=a;
2
+ //# sourceMappingURL=Stacked.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stacked.cjs","sources":["../../../../../src/components/Stats/variants/Stacked.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface StackedProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** stacked — a ruled ledger: label on the rule, oversized numeral, typed meta. */\nexport const StatsStacked = forwardRef<HTMLDListElement, StackedProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-x-10 gap-y-10\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div key={stat.label} className=\"border-t border-border pt-5\">\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n <dd\n className={cn(\n valueBase,\n \"mt-3 text-5xl sm:text-6xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n {typeof stat.delta === \"number\" || stat.sub ? (\n <div className=\"mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n {typeof stat.delta === \"number\" ? <DeltaMark delta={stat.delta} /> : null}\n {stat.sub ? (\n <p className=\"text-[13px] leading-5 text-muted-foreground\">{stat.sub}</p>\n ) : null}\n </div>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsStacked.displayName = \"StatsStacked\";\n"],"names":["StatsStacked","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":"qMAWaA,EAAeC,EAAAA,WAC1B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,QAAAC,EAAU,EAAG,GAAGC,CAAA,EAASC,IAC5CC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,UAAWE,EAAAA,GAAG,qCAAsCC,EAAAA,SAASL,CAAO,EAAGF,CAAS,EAC/E,GAAGG,EAEH,WAAM,IAAKK,GACVC,OAAC,MAAA,CAAqB,UAAU,8BAC9B,SAAA,CAAAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,0CAA2C,SAAAG,EAAK,MAAM,EACpEC,EAAAA,KAAC,KAAA,CACC,UAAWH,EAAAA,GACTI,EAAAA,UACA,4BACAF,EAAK,OAAS,eAAiB,MAAA,EAGhC,SAAA,CAAAA,EAAK,MACLA,EAAK,OAASH,MAAC,OAAA,CAAK,UAAWM,EAAAA,WAAa,SAAAH,EAAK,OAAO,EAAU,IAAA,CAAA,CAAA,EAEpE,OAAOA,EAAK,OAAU,UAAYA,EAAK,IACtCC,EAAAA,KAAC,MAAA,CAAI,UAAU,qDACZ,SAAA,CAAA,OAAOD,EAAK,OAAU,SAAWH,MAACO,EAAAA,WAAU,MAAOJ,EAAK,MAAO,EAAK,KACpEA,EAAK,IACJH,MAAC,IAAA,CAAE,UAAU,8CAA+C,SAAAG,EAAK,IAAI,EACnE,IAAA,CAAA,CACN,EACE,IAAA,CAAA,EAnBIA,EAAK,KAoBf,CACD,CAAA,CAAA,CAGP,EACAV,EAAa,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o="radial-gradient(120% 160% at 0% 0%, rgb(var(--color-primary)), rgb(var(--color-primary-hover)) 55%, rgb(var(--color-primary) / 0.85))";function a(r){return r?{"--lc-bg":r,backgroundColor:"var(--lc-bg)",color:"contrast-color(var(--lc-bg))"}:{background:o,color:"contrast-color(rgb(var(--color-primary)))"}}exports.emphasisGradient=o;exports.emphasisSurfaceStyle=a;
2
+ //# sourceMappingURL=surface.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.cjs","sources":["../../../src/utils/surface.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Default brand fill for \"emphasis\" (bold) sections. Defined once so every\n * emphasis surface — CTA panels, Hero statements, and any future band — paints\n * the exact same gradient and reads as one design language.\n */\nexport const emphasisGradient =\n \"radial-gradient(120% 160% at 0% 0%, rgb(var(--color-primary)), rgb(var(--color-primary-hover)) 55%, rgb(var(--color-primary) / 0.85))\";\n\n/**\n * Inline style for an emphasis surface.\n *\n * - Without a `background`, the surface is painted with the brand gradient and\n * the text color is derived from `--color-primary` via CSS `contrast-color()`.\n * - With a `background` (any CSS color), it binds `--lc-bg` so the background\n * and its text color share one source; `contrast-color(var(--lc-bg))` picks\n * white/black and re-evaluates automatically when the value changes.\n *\n * This is the CSS-only contrast path mandated by AGENTS.md — no JS luminance\n * helpers.\n */\nexport function emphasisSurfaceStyle(background?: string): CSSProperties {\n if (background) {\n return {\n \"--lc-bg\": background,\n backgroundColor: \"var(--lc-bg)\",\n color: \"contrast-color(var(--lc-bg))\",\n } as CSSProperties;\n }\n\n return {\n background: emphasisGradient,\n color: \"contrast-color(rgb(var(--color-primary)))\",\n };\n}\n"],"names":["emphasisGradient","emphasisSurfaceStyle","background"],"mappings":"gFAOO,MAAMA,EACX,wIAcK,SAASC,EAAqBC,EAAoC,CACvE,OAAIA,EACK,CACL,UAAWA,EACX,gBAAiB,eACjB,MAAO,8BAAA,EAIJ,CACL,WAAYF,EACZ,MAAO,2CAAA,CAEX"}