@postenbring/hedwig-react 0.0.82 → 0.0.84

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 (213) hide show
  1. package/dist/accordion/accordion-content.d.ts.map +1 -1
  2. package/dist/accordion/accordion-content.js +1 -0
  3. package/dist/accordion/accordion-content.js.map +1 -1
  4. package/dist/accordion/accordion-content.mjs +2 -2
  5. package/dist/accordion/accordion-header.d.ts.map +1 -1
  6. package/dist/accordion/accordion-header.js +1 -0
  7. package/dist/accordion/accordion-header.js.map +1 -1
  8. package/dist/accordion/accordion-header.mjs +2 -2
  9. package/dist/accordion/accordion-item.d.ts.map +1 -1
  10. package/dist/accordion/accordion-item.js +2 -1
  11. package/dist/accordion/accordion-item.js.map +1 -1
  12. package/dist/accordion/accordion-item.mjs +2 -2
  13. package/dist/accordion/accordion.js +4 -1
  14. package/dist/accordion/accordion.js.map +1 -1
  15. package/dist/accordion/accordion.mjs +5 -5
  16. package/dist/accordion/context.d.ts +1 -0
  17. package/dist/accordion/context.d.ts.map +1 -1
  18. package/dist/accordion/context.js.map +1 -1
  19. package/dist/accordion/context.mjs +1 -1
  20. package/dist/accordion/index.js +4 -1
  21. package/dist/accordion/index.js.map +1 -1
  22. package/dist/accordion/index.mjs +7 -7
  23. package/dist/badge/badge.d.ts +13 -4
  24. package/dist/badge/badge.d.ts.map +1 -1
  25. package/dist/badge/badge.js +22 -42
  26. package/dist/badge/badge.js.map +1 -1
  27. package/dist/badge/badge.mjs +3 -9
  28. package/dist/badge/index.d.ts +1 -1
  29. package/dist/badge/index.d.ts.map +1 -1
  30. package/dist/badge/index.js +22 -42
  31. package/dist/badge/index.js.map +1 -1
  32. package/dist/badge/index.mjs +3 -9
  33. package/dist/button/button.d.ts +17 -5
  34. package/dist/button/button.d.ts.map +1 -1
  35. package/dist/button/button.js +4 -17
  36. package/dist/button/button.js.map +1 -1
  37. package/dist/button/button.mjs +3 -5
  38. package/dist/button/index.d.ts +1 -1
  39. package/dist/button/index.d.ts.map +1 -1
  40. package/dist/button/index.js +4 -17
  41. package/dist/button/index.js.map +1 -1
  42. package/dist/button/index.mjs +3 -5
  43. package/dist/{chunk-67TP3E2D.mjs → chunk-6FBPKLWB.mjs} +3 -3
  44. package/dist/chunk-6FBPKLWB.mjs.map +1 -0
  45. package/dist/{chunk-KEKPEN2C.mjs → chunk-6MR5XZOX.mjs} +4 -16
  46. package/dist/chunk-6MR5XZOX.mjs.map +1 -0
  47. package/dist/{chunk-4WQWU5TL.mjs → chunk-AXQCREUJ.mjs} +2 -2
  48. package/dist/chunk-AXQCREUJ.mjs.map +1 -0
  49. package/dist/{chunk-M3Y3XOGC.mjs → chunk-B6L7IFDX.mjs} +6 -6
  50. package/dist/{chunk-F2C3KZFX.mjs → chunk-BVPSZ3JI.mjs} +2 -2
  51. package/dist/chunk-BVPSZ3JI.mjs.map +1 -0
  52. package/dist/chunk-CYDWEPFL.mjs +1 -0
  53. package/dist/{chunk-6AGDK5V3.mjs → chunk-EVUKWONG.mjs} +2 -2
  54. package/dist/chunk-GQUFERB2.mjs +37 -0
  55. package/dist/chunk-GQUFERB2.mjs.map +1 -0
  56. package/dist/{chunk-C34HEQXO.mjs → chunk-GRWLX5BC.mjs} +5 -5
  57. package/dist/chunk-GRWLX5BC.mjs.map +1 -0
  58. package/dist/{chunk-3EFAPJ3H.mjs → chunk-HJYS664B.mjs} +3 -2
  59. package/dist/chunk-HJYS664B.mjs.map +1 -0
  60. package/dist/{chunk-LCJSUBCZ.mjs → chunk-IHZ2MRF6.mjs} +4 -4
  61. package/dist/chunk-IHZ2MRF6.mjs.map +1 -0
  62. package/dist/{chunk-3WVRY6CC.mjs → chunk-L4YBHIS3.mjs} +20 -12
  63. package/dist/chunk-L4YBHIS3.mjs.map +1 -0
  64. package/dist/{chunk-6R7AXKBR.mjs → chunk-OIC2CPID.mjs} +19 -13
  65. package/dist/chunk-OIC2CPID.mjs.map +1 -0
  66. package/dist/{chunk-7UD72WOC.mjs → chunk-QZZIOBF4.mjs} +2 -2
  67. package/dist/{chunk-A2H2LAII.mjs → chunk-SKVM7G76.mjs} +5 -4
  68. package/dist/chunk-SKVM7G76.mjs.map +1 -0
  69. package/dist/chunk-SRLM3K2X.mjs +1 -0
  70. package/dist/{chunk-DEX36MFK.mjs → chunk-TDXU2IC6.mjs} +3 -4
  71. package/dist/chunk-TDXU2IC6.mjs.map +1 -0
  72. package/dist/{chunk-GLAEI3SD.mjs → chunk-VCQIR53Y.mjs} +3 -2
  73. package/dist/chunk-VCQIR53Y.mjs.map +1 -0
  74. package/dist/{chunk-V3PAFMK5.mjs → chunk-YQFL5UN4.mjs} +1 -1
  75. package/dist/chunk-YQFL5UN4.mjs.map +1 -0
  76. package/dist/footer/footer.js +7 -15
  77. package/dist/footer/footer.js.map +1 -1
  78. package/dist/footer/footer.mjs +7 -7
  79. package/dist/footer/index.js +7 -15
  80. package/dist/footer/index.js.map +1 -1
  81. package/dist/footer/index.mjs +7 -7
  82. package/dist/form/date-picker/date-picker.js +1 -1
  83. package/dist/form/date-picker/date-picker.js.map +1 -1
  84. package/dist/form/date-picker/date-picker.mjs +2 -2
  85. package/dist/form/date-picker/index.js +1 -1
  86. package/dist/form/date-picker/index.js.map +1 -1
  87. package/dist/form/date-picker/index.mjs +2 -2
  88. package/dist/form/index.js +1 -1
  89. package/dist/form/index.js.map +1 -1
  90. package/dist/form/index.mjs +2 -2
  91. package/dist/index-no-css.d.ts +1 -1
  92. package/dist/index-no-css.d.ts.map +1 -1
  93. package/dist/index-no-css.js +237 -242
  94. package/dist/index-no-css.js.map +1 -1
  95. package/dist/index-no-css.mjs +43 -42
  96. package/dist/index.js +237 -242
  97. package/dist/index.js.map +1 -1
  98. package/dist/index.mjs +43 -42
  99. package/dist/index.mjs.map +1 -1
  100. package/dist/modal/index.js +1 -1
  101. package/dist/modal/index.js.map +1 -1
  102. package/dist/modal/index.mjs +2 -2
  103. package/dist/modal/modal.d.ts +4 -4
  104. package/dist/modal/modal.js +1 -1
  105. package/dist/modal/modal.js.map +1 -1
  106. package/dist/modal/modal.mjs +2 -2
  107. package/dist/navbar/index.js +18 -12
  108. package/dist/navbar/index.js.map +1 -1
  109. package/dist/navbar/index.mjs +3 -3
  110. package/dist/navbar/navbar-expandable-menu.d.ts +7 -1
  111. package/dist/navbar/navbar-expandable-menu.d.ts.map +1 -1
  112. package/dist/navbar/navbar-expandable-menu.js +18 -12
  113. package/dist/navbar/navbar-expandable-menu.js.map +1 -1
  114. package/dist/navbar/navbar-expandable-menu.mjs +2 -2
  115. package/dist/navbar/navbar.js +18 -12
  116. package/dist/navbar/navbar.js.map +1 -1
  117. package/dist/navbar/navbar.mjs +3 -3
  118. package/dist/show-more/index.d.ts +0 -2
  119. package/dist/show-more/index.d.ts.map +1 -1
  120. package/dist/show-more/index.js +5 -143
  121. package/dist/show-more/index.js.map +1 -1
  122. package/dist/show-more/index.mjs +1 -6
  123. package/dist/tabs/index.js +1 -1
  124. package/dist/tabs/index.js.map +1 -1
  125. package/dist/tabs/index.mjs +3 -3
  126. package/dist/tabs/tabs-list.js +1 -1
  127. package/dist/tabs/tabs-list.js.map +1 -1
  128. package/dist/tabs/tabs-list.mjs +2 -2
  129. package/dist/tabs/tabs.js +1 -1
  130. package/dist/tabs/tabs.js.map +1 -1
  131. package/dist/tabs/tabs.mjs +3 -3
  132. package/dist/utils/auto-animate-height.d.ts.map +1 -0
  133. package/dist/{utilities → utils}/auto-animate-height.js +3 -3
  134. package/dist/utils/auto-animate-height.js.map +1 -0
  135. package/dist/utils/auto-animate-height.mjs +9 -0
  136. package/dist/{utilities → utils}/index.d.ts +1 -0
  137. package/dist/utils/index.d.ts.map +1 -0
  138. package/dist/{utilities → utils}/index.js +81 -11
  139. package/dist/utils/index.js.map +1 -0
  140. package/dist/utils/index.mjs +19 -0
  141. package/dist/{utils.d.ts → utils/utils.d.ts} +0 -4
  142. package/dist/utils/utils.d.ts.map +1 -0
  143. package/dist/{utils.js → utils/utils.js} +1 -3
  144. package/dist/utils/utils.js.map +1 -0
  145. package/dist/utils/utils.mjs +14 -0
  146. package/dist/warning-banner/index.js +28 -94
  147. package/dist/warning-banner/index.js.map +1 -1
  148. package/dist/warning-banner/index.mjs +1 -3
  149. package/dist/warning-banner/warning-banner.d.ts.map +1 -1
  150. package/dist/warning-banner/warning-banner.js +28 -94
  151. package/dist/warning-banner/warning-banner.js.map +1 -1
  152. package/dist/warning-banner/warning-banner.mjs +1 -3
  153. package/package.json +5 -5
  154. package/src/accordion/accordion-content.tsx +1 -0
  155. package/src/accordion/accordion-header.tsx +1 -0
  156. package/src/accordion/accordion-item.tsx +3 -2
  157. package/src/accordion/context.ts +1 -0
  158. package/src/badge/badge.stories.tsx +6 -4
  159. package/src/badge/badge.tsx +32 -40
  160. package/src/badge/index.tsx +1 -1
  161. package/src/button/button.stories.tsx +19 -17
  162. package/src/button/button.tsx +19 -18
  163. package/src/button/index.tsx +1 -1
  164. package/src/footer/footer.tsx +3 -3
  165. package/src/form/date-picker/date-picker.tsx +1 -1
  166. package/src/form/input/input.stories.tsx +6 -6
  167. package/src/index-no-css.tsx +1 -1
  168. package/src/modal/modal.stories.tsx +9 -9
  169. package/src/modal/modal.tsx +5 -5
  170. package/src/navbar/navbar-expandable-menu.tsx +26 -15
  171. package/src/show-more/index.ts +0 -3
  172. package/src/show-more/show-more.stories.tsx +1 -1
  173. package/src/skeleton/skeleton.stories.tsx +3 -3
  174. package/src/tabs/tabs-list.tsx +1 -1
  175. package/src/{utilities → utils}/auto-animate-height.tsx +1 -1
  176. package/src/{utilities → utils}/index.ts +2 -0
  177. package/src/{utils.ts → utils/utils.ts} +1 -1
  178. package/src/warning-banner/warning-banner.tsx +24 -13
  179. package/dist/chunk-3EFAPJ3H.mjs.map +0 -1
  180. package/dist/chunk-3WVRY6CC.mjs.map +0 -1
  181. package/dist/chunk-4WQWU5TL.mjs.map +0 -1
  182. package/dist/chunk-67TP3E2D.mjs.map +0 -1
  183. package/dist/chunk-6R7AXKBR.mjs.map +0 -1
  184. package/dist/chunk-A2H2LAII.mjs.map +0 -1
  185. package/dist/chunk-C34HEQXO.mjs.map +0 -1
  186. package/dist/chunk-DEX36MFK.mjs.map +0 -1
  187. package/dist/chunk-DZNH5JHY.mjs +0 -1
  188. package/dist/chunk-F2C3KZFX.mjs.map +0 -1
  189. package/dist/chunk-GLAEI3SD.mjs.map +0 -1
  190. package/dist/chunk-KEKPEN2C.mjs.map +0 -1
  191. package/dist/chunk-LCJSUBCZ.mjs.map +0 -1
  192. package/dist/chunk-MSFHJVHD.mjs +0 -1
  193. package/dist/chunk-P6KBFRF4.mjs +0 -54
  194. package/dist/chunk-P6KBFRF4.mjs.map +0 -1
  195. package/dist/chunk-V3PAFMK5.mjs.map +0 -1
  196. package/dist/utilities/auto-animate-height.d.ts.map +0 -1
  197. package/dist/utilities/auto-animate-height.js.map +0 -1
  198. package/dist/utilities/auto-animate-height.mjs +0 -9
  199. package/dist/utilities/index.d.ts.map +0 -1
  200. package/dist/utilities/index.js.map +0 -1
  201. package/dist/utilities/index.mjs +0 -10
  202. package/dist/utils.d.ts.map +0 -1
  203. package/dist/utils.js.map +0 -1
  204. package/dist/utils.mjs +0 -16
  205. /package/dist/{chunk-M3Y3XOGC.mjs.map → chunk-B6L7IFDX.mjs.map} +0 -0
  206. /package/dist/{chunk-DZNH5JHY.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
  207. /package/dist/{chunk-6AGDK5V3.mjs.map → chunk-EVUKWONG.mjs.map} +0 -0
  208. /package/dist/{chunk-7UD72WOC.mjs.map → chunk-QZZIOBF4.mjs.map} +0 -0
  209. /package/dist/{chunk-MSFHJVHD.mjs.map → chunk-SRLM3K2X.mjs.map} +0 -0
  210. /package/dist/{utilities → utils}/auto-animate-height.d.ts +0 -0
  211. /package/dist/{utilities → utils}/auto-animate-height.mjs.map +0 -0
  212. /package/dist/{utilities → utils}/index.mjs.map +0 -0
  213. /package/dist/{utils.mjs.map → utils/utils.mjs.map} +0 -0
@@ -2,11 +2,11 @@ import {
2
2
  LinkList
3
3
  } from "./chunk-COEZA7WA.mjs";
4
4
  import {
5
- PrimaryButton
6
- } from "./chunk-KEKPEN2C.mjs";
5
+ Button
6
+ } from "./chunk-6MR5XZOX.mjs";
7
7
  import {
8
8
  Accordion
9
- } from "./chunk-M3Y3XOGC.mjs";
9
+ } from "./chunk-B6L7IFDX.mjs";
10
10
  import {
11
11
  __objRest,
12
12
  __spreadProps,
@@ -30,7 +30,7 @@ var FooterButtonLink = forwardRef(
30
30
  (_a, ref) => {
31
31
  var _b = _a, { children, className, asChild } = _b, rest = __objRest(_b, ["children", "className", "asChild"]);
32
32
  const Component = asChild ? Slot : "a";
33
- return /* @__PURE__ */ jsx(PrimaryButton, { asChild: true, fill: "outline", className: clsx(className), children: /* @__PURE__ */ jsx(Component, __spreadProps(__spreadValues({ ref }, rest), { children })) });
33
+ return /* @__PURE__ */ jsx(Button, { asChild: true, variant: "primary-outline", className: clsx(className), children: /* @__PURE__ */ jsx(Component, __spreadProps(__spreadValues({ ref }, rest), { children })) });
34
34
  }
35
35
  );
36
36
  FooterButtonLink.displayName = "FooterButton";
@@ -106,4 +106,4 @@ export {
106
106
  FooterLinkSection,
107
107
  Footer
108
108
  };
109
- //# sourceMappingURL=chunk-C34HEQXO.mjs.map
109
+ //# sourceMappingURL=chunk-GRWLX5BC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/footer/footer.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactElement } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Accordion } from \"../accordion\";\nimport { LinkList } from \"../list/link-list\";\nimport { Button } from \"../button\";\n\ninterface FooterLogoProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\n\n/**\n * A fixed Posten or Bring logo.\n *\n * The logo follows the brand theme, so if the class `hds-theme-bring` is set the Bring logo will be shown instead of the Posten logo\n */\nexport const FooterLogo = forwardRef<HTMLDivElement, FooterLogoProps>(\n ({ children, className, asChild, ...rest }, ref) => {\n const Component = asChild ? Slot : \"div\";\n return (\n <Component className={clsx(`hds-footer__logo`, className as undefined)} ref={ref} {...rest}>\n {children}\n </Component>\n );\n },\n);\nFooterLogo.displayName = \"Footer.Logo\";\n\nexport interface FooterButtonLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\n\n/**\n * 🚨 WORK IN PROGRESS 🚨\n */\nexport const FooterButtonLink = forwardRef<HTMLAnchorElement, FooterButtonLinkProps>(\n ({ children, className, asChild, ...rest }, ref) => {\n const Component = asChild ? Slot : \"a\";\n return (\n <Button asChild variant=\"primary-outline\" className={clsx(className as undefined)}>\n <Component ref={ref} {...rest}>\n {children}\n </Component>\n </Button>\n );\n },\n);\nFooterButtonLink.displayName = \"FooterButton\";\n\ninterface FooterLinkSectionsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<FooterLinkSectionProps> | ReactElement<FooterLinkSectionProps>[];\n}\n\n/**\n * Responsive sections of links. Will become an accordion on mobile.\n *\n * Use with {@link FooterLinkSection} for each section.\n */\nexport const FooterLinkSections = forwardRef<HTMLDivElement, FooterLinkSectionsProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <>\n {/* Mobile and Desktop. The accordion styling gets removed on desktop */}\n <Accordion\n className={clsx(\"hds-footer__link-sections\", className as undefined)}\n ref={ref}\n {...rest}\n >\n {/* @ts-expect-error -- It's ok */}\n {children}\n </Accordion>\n </>\n );\n },\n);\nFooterLinkSections.displayName = \"Footer.LinkSections\";\n\ninterface FooterLinkSectionProps extends HTMLAttributes<HTMLDivElement> {\n heading: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport const FooterLinkSection = forwardRef<HTMLDivElement, FooterLinkSectionProps>(\n ({ heading, children, className, ...rest }, ref) => {\n // @ts-expect-error -- It's ok\n const linkListChildren = <LinkList>{children}</LinkList>;\n return (\n <>\n {/* Mobile */}\n <Accordion.Item\n className={clsx(`hds-footer__link-section`, className as undefined)}\n ref={ref}\n {...rest}\n >\n <Accordion.Header>{heading}</Accordion.Header>\n <Accordion.Content>{linkListChildren}</Accordion.Content>\n </Accordion.Item>\n\n {/* Desktop */}\n <div className={clsx(`hds-footer__link-section`, className as undefined)}>\n <h2>{heading}</h2>\n {linkListChildren}\n </div>\n </>\n );\n },\n);\nFooterLinkSection.displayName = \"Footer.LinkSection\";\n\nexport interface FooterProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Footer variant\n *\n * @default \"default\"\n */\n variant?: \"default\" | \"slim\";\n\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\n\n/**\n * 🚨 WORK IN PROGRESS 🚨\n */\nexport const Footer = forwardRef<HTMLDivElement, FooterProps>(\n ({ children, className, variant, asChild, ...rest }, ref) => {\n const Component = asChild ? Slot : \"footer\";\n return (\n <Component\n className={clsx(\n `hds-footer`,\n variant === \"slim\" && \"hds-footer--slim\",\n className as undefined,\n )}\n ref={ref}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n) as FooterType;\nFooter.displayName = \"Footer\";\n\ntype FooterType = ReturnType<typeof forwardRef<HTMLDivElement, FooterProps>> & {\n Logo: typeof FooterLogo;\n ButtonLink: typeof FooterButtonLink;\n LinkSections: typeof FooterLinkSections;\n LinkSection: typeof FooterLinkSection;\n};\n\nFooter.Logo = FooterLogo;\nFooter.ButtonLink = FooterButtonLink;\nFooter.LinkSections = FooterLinkSections;\nFooter.LinkSection = FooterLinkSection;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,kBAA0D;AACnE,SAAS,YAAY;AACrB,SAAS,YAAY;AAuBf,SA8CA,UA9CA,KA0EE,YA1EF;AAJC,IAAM,aAAa;AAAA,EACxB,CAAC,IAA2C,QAAQ;AAAnD,iBAAE,YAAU,WAAW,QAtB1B,IAsBG,IAAmC,iBAAnC,IAAmC,CAAjC,YAAU,aAAW;AACtB,UAAM,YAAY,UAAU,OAAO;AACnC,WACE,oBAAC,0CAAU,WAAW,KAAK,oBAAoB,SAAsB,GAAG,OAAc,OAArF,EACE,WACH;AAAA,EAEJ;AACF;AACA,WAAW,cAAc;AAclB,IAAM,mBAAmB;AAAA,EAC9B,CAAC,IAA2C,QAAQ;AAAnD,iBAAE,YAAU,WAAW,QA9C1B,IA8CG,IAAmC,iBAAnC,IAAmC,CAAjC,YAAU,aAAW;AACtB,UAAM,YAAY,UAAU,OAAO;AACnC,WACE,oBAAC,UAAO,SAAO,MAAC,SAAQ,mBAAkB,WAAW,KAAK,SAAsB,GAC9E,8BAAC,0CAAU,OAAc,OAAxB,EACE,WACH,GACF;AAAA,EAEJ;AACF;AACA,iBAAiB,cAAc;AAWxB,IAAM,qBAAqB;AAAA,EAChC,CAAC,IAAkC,QAAQ;AAA1C,iBAAE,YAAU,UArEf,IAqEG,IAA0B,iBAA1B,IAA0B,CAAxB,YAAU;AACX,WACE,gCAEE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,6BAA6B,SAAsB;AAAA,QACnE;AAAA,SACI,OAHL;AAAA,QAME;AAAA;AAAA,IACH,GACF;AAAA,EAEJ;AACF;AACA,mBAAmB,cAAc;AAO1B,IAAM,oBAAoB;AAAA,EAC/B,CAAC,IAA2C,QAAQ;AAAnD,iBAAE,WAAS,UAAU,UA7FxB,IA6FG,IAAmC,iBAAnC,IAAmC,CAAjC,WAAS,YAAU;AAEpB,UAAM,mBAAmB,oBAAC,YAAU,UAAS;AAC7C,WACE,iCAEE;AAAA;AAAA,QAAC,UAAU;AAAA,QAAV;AAAA,UACC,WAAW,KAAK,4BAA4B,SAAsB;AAAA,UAClE;AAAA,WACI,OAHL;AAAA,UAKC;AAAA,gCAAC,UAAU,QAAV,EAAkB,mBAAQ;AAAA,YAC3B,oBAAC,UAAU,SAAV,EAAmB,4BAAiB;AAAA;AAAA;AAAA,MACvC;AAAA,MAGA,qBAAC,SAAI,WAAW,KAAK,4BAA4B,SAAsB,GACrE;AAAA,4BAAC,QAAI,mBAAQ;AAAA,QACZ;AAAA,SACH;AAAA,OACF;AAAA,EAEJ;AACF;AACA,kBAAkB,cAAc;AAqBzB,IAAM,SAAS;AAAA,EACpB,CAAC,IAAoD,QAAQ;AAA5D,iBAAE,YAAU,WAAW,SAAS,QA3InC,IA2IG,IAA4C,iBAA5C,IAA4C,CAA1C,YAAU,aAAW,WAAS;AAC/B,UAAM,YAAY,UAAU,OAAO;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,UAAU;AAAA,UACtB;AAAA,QACF;AAAA,QACA;AAAA,SACI,OAPL;AAAA,QASE;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;AASrB,OAAO,OAAO;AACd,OAAO,aAAa;AACpB,OAAO,eAAe;AACtB,OAAO,cAAc;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AccordionItemContext
3
- } from "./chunk-V3PAFMK5.mjs";
3
+ } from "./chunk-YQFL5UN4.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
@@ -26,6 +26,7 @@ var AccordionHeader = forwardRef(
26
26
  "button",
27
27
  __spreadProps(__spreadValues({}, rest), {
28
28
  "aria-expanded": context.open,
29
+ "aria-controls": context.contentId,
29
30
  "data-state": context.open ? "open" : "closed",
30
31
  className: clsx("hds-accordion-item-header", className),
31
32
  onClick: expandOrCollapse,
@@ -41,4 +42,4 @@ AccordionHeader.displayName = "Accordion.Header";
41
42
  export {
42
43
  AccordionHeader
43
44
  };
44
- //# sourceMappingURL=chunk-3EFAPJ3H.mjs.map
45
+ //# sourceMappingURL=chunk-HJYS664B.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accordion/accordion-header.tsx"],"sourcesContent":["import type { MouseEvent, ReactNode } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { AccordionItemContext } from \"./context\";\n\nexport interface AccordionHeaderProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProps>(\n ({ children, className, onClick, ...rest }, ref) => {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n return null;\n }\n const expandOrCollapse = (e: MouseEvent<HTMLButtonElement>) => {\n context.setOpen(!context.open);\n onClick?.(e);\n };\n return (\n <button\n {...rest}\n aria-expanded={context.open}\n aria-controls={context.contentId}\n data-state={context.open ? \"open\" : \"closed\"}\n className={clsx(\"hds-accordion-item-header\", className as undefined)}\n onClick={expandOrCollapse}\n ref={ref}\n type=\"button\"\n >\n <span>{children}</span>\n </button>\n );\n },\n);\n\nAccordionHeader.displayName = \"Accordion.Header\";\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY;AA4Bb;AArBD,IAAM,kBAAkB;AAAA,EAC7B,CAAC,IAA2C,QAAQ;AAAnD,iBAAE,YAAU,WAAW,QAV1B,IAUG,IAAmC,iBAAnC,IAAmC,CAAjC,YAAU,aAAW;AACtB,UAAM,UAAU,WAAW,oBAAoB;AAC/C,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,IACT;AACA,UAAM,mBAAmB,CAAC,MAAqC;AAC7D,cAAQ,QAAQ,CAAC,QAAQ,IAAI;AAC7B,yCAAU;AAAA,IACZ;AACA,WACE;AAAA,MAAC;AAAA,uCACK,OADL;AAAA,QAEC,iBAAe,QAAQ;AAAA,QACvB,iBAAe,QAAQ;AAAA,QACvB,cAAY,QAAQ,OAAO,SAAS;AAAA,QACpC,WAAW,KAAK,6BAA6B,SAAsB;AAAA,QACnE,SAAS;AAAA,QACT;AAAA,QACA,MAAK;AAAA,QAEL,8BAAC,UAAM,UAAS;AAAA;AAAA,IAClB;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;","names":[]}
@@ -1,9 +1,9 @@
1
+ import {
2
+ useMergeRefs
3
+ } from "./chunk-TDXU2IC6.mjs";
1
4
  import {
2
5
  Box
3
6
  } from "./chunk-AJWSQEDP.mjs";
4
- import {
5
- useMergeRefs
6
- } from "./chunk-DEX36MFK.mjs";
7
7
  import {
8
8
  __objRest,
9
9
  __spreadProps,
@@ -131,4 +131,4 @@ export {
131
131
  ModalFooter,
132
132
  Modal
133
133
  };
134
- //# sourceMappingURL=chunk-LCJSUBCZ.mjs.map
134
+ //# sourceMappingURL=chunk-IHZ2MRF6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modal/modal.tsx"],"sourcesContent":["import { forwardRef, useEffect, useRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Box } from \"../box/box\";\nimport { useMergeRefs } from \"../utils/utils\";\n\ninterface ModalHeaderProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\nexport const ModalHeader = forwardRef<HTMLHeadingElement, ModalHeaderProps>(\n ({ asChild, className, ...rest }, ref) => {\n const Component = asChild ? Slot : \"h1\";\n return (\n <Component\n className={clsx(\"hds-modal__header\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nModalHeader.displayName = \"Modal.Header\";\n\ninterface ModalContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n ({ asChild, className, ...rest }, ref) => {\n const Component = asChild ? Slot : \"div\";\n return (\n <Component\n className={clsx(\"hds-modal__content\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nModalContent.displayName = \"Modal.Content\";\n\ninterface ModalFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ asChild, className, ...rest }, ref) => {\n const Component = asChild ? Slot : \"footer\";\n return (\n <Component\n className={clsx(\"hds-modal__footer\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nModalFooter.displayName = \"Modal.Footer\";\n\nexport interface ModalProps extends React.HTMLAttributes<HTMLDialogElement> {\n children: React.ReactNode;\n\n /**\n * Controls the open state of the modal\n */\n open?: boolean;\n\n /**\n * Whether to close when clicking on the backdrop.\n */\n closeOnBackdropClick?: boolean;\n}\n\n/**\n * A modal dialog is a window that forces the user to interact with it before they can return to other parts of the application.\n *\n * Uses the native [`dialog`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) element.\n *\n * @example\n * ```tsx\n * const modalRef = useRef<HTMLDialogElement>(null);\n * const onClose = () => modalRef.current?.close();\n *\n * return (\n * <>\n * <Button onClick={() => modalRef.current?.showModal()}>Open Modal</Button>\n * <Modal ref={modalRef}>\n * <Modal.Header>Dialog header</Modal.Header>\n * <Modal.Content>\n * <p>\n * Dialog header Dialog description - a description of what is about to happen and maybe\n * something about the consequences.\n * </p>\n * </Modal.Content>\n * <Modal.Footer>\n * <HStack gap=\"16\" wrap>\n * <Button onClick={onMainAction}>Main action</Button>\n * <Button variant=\"primary-outline\" onClick={onClose}>\n * Cancel\n * </Button>\n * </HStack>\n * </Modal.Footer>\n * </Modal>\n * </>\n * );\n * ```\n */\nexport const Modal = forwardRef<HTMLDialogElement, ModalProps>(\n ({ children, className, open, closeOnBackdropClick, onClick, ...rest }, ref) => {\n const modalRef = useRef<HTMLDialogElement>(null);\n const mergedRef = useMergeRefs([modalRef, ref]);\n\n // The X close button that comes from the `Box` component\n function onCloseButtonClick() {\n modalRef.current?.close();\n return false;\n }\n\n // No scroll when modal is open\n useScrollLock(modalRef, \"hds-modal-scroll-lock\");\n\n // `open` prop\n useEffect(() => {\n if (modalRef.current && open !== undefined) {\n if (open && !modalRef.current.open) {\n modalRef.current.showModal();\n } else if (!open && modalRef.current.open) {\n modalRef.current.close();\n }\n }\n }, [modalRef, open]);\n\n function onDialogClick(e: React.MouseEvent<HTMLElement>) {\n if (closeOnBackdropClick && e.target === modalRef.current) {\n modalRef.current.close();\n }\n onClick?.(e as React.MouseEvent<HTMLDialogElement>);\n }\n\n return (\n <Box\n asChild\n className={clsx(\"hds-modal\", className as undefined)}\n closeable\n onClick={onDialogClick}\n onClose={onCloseButtonClick}\n variant=\"white\"\n >\n <dialog ref={mergedRef} {...rest}>\n {children}\n </dialog>\n </Box>\n );\n },\n) as ModalType;\nModal.displayName = \"Modal\";\n\ntype ModalType = ReturnType<typeof forwardRef<HTMLDialogElement, ModalProps>> & {\n Header: typeof ModalHeader;\n Content: typeof ModalContent;\n Footer: typeof ModalFooter;\n};\n\nModal.Header = ModalHeader;\nModal.Content = ModalContent;\nModal.Footer = ModalFooter;\n\nfunction useScrollLock(modalRef: React.RefObject<HTMLDialogElement>, bodyClass: string) {\n useEffect(() => {\n if (!modalRef.current) return;\n if (modalRef.current.open) document.body.classList.add(bodyClass);\n\n const observer = new MutationObserver(() => {\n if (modalRef.current?.open) document.body.classList.add(bodyClass);\n else document.body.classList.remove(bodyClass);\n });\n observer.observe(modalRef.current, {\n attributes: true,\n attributeFilter: [\"open\"],\n });\n return () => {\n observer.disconnect();\n document.body.classList.remove(bodyClass);\n };\n }, [bodyClass, modalRef]);\n}\n"],"mappings":"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","names":["_a"]}
@@ -1,6 +1,3 @@
1
- import {
2
- Box
3
- } from "./chunk-AJWSQEDP.mjs";
4
1
  import {
5
2
  __objRest,
6
3
  __spreadProps,
@@ -8,31 +5,41 @@ import {
8
5
  } from "./chunk-R4SQKVDQ.mjs";
9
6
 
10
7
  // src/warning-banner/warning-banner.tsx
11
- import { forwardRef, useState } from "react";
8
+ import { forwardRef, useId, useState } from "react";
12
9
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
13
10
  import { jsx, jsxs } from "react/jsx-runtime";
14
11
  var WarningBanner = forwardRef(
15
12
  (_a, ref) => {
16
13
  var _b = _a, { title, description, className } = _b, rest = __objRest(_b, ["title", "description", "className"]);
14
+ const descriptionId = useId();
17
15
  const expandable = !!description;
18
- return /* @__PURE__ */ jsxs(Box, __spreadProps(__spreadValues({}, rest), { className: clsx("hds-warning-banner", className), ref, children: [
19
- /* @__PURE__ */ jsx(WarningBannerTitle, { variant: expandable ? "expandable" : "default", children: title }),
20
- expandable ? /* @__PURE__ */ jsx(WarningBannerDescription, { children: description }) : null
16
+ return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({}, rest), { className: clsx("hds-warning-banner", className), ref, children: [
17
+ /* @__PURE__ */ jsx(
18
+ WarningBannerTitle,
19
+ {
20
+ variant: expandable ? "expandable" : "default",
21
+ descriptionId,
22
+ children: title
23
+ }
24
+ ),
25
+ expandable ? /* @__PURE__ */ jsx(WarningBannerDescription, { id: descriptionId, children: description }) : null
21
26
  ] }));
22
27
  }
23
28
  );
24
29
  WarningBanner.displayName = "WarningBanner";
25
30
  var WarningBannerTitle = forwardRef((_a, ref) => {
26
- var _b = _a, { variant, children, className } = _b, rest = __objRest(_b, ["variant", "children", "className"]);
31
+ var _b = _a, { variant, descriptionId, children, className } = _b, rest = __objRest(_b, ["variant", "descriptionId", "children", "className"]);
27
32
  const [open, setOpen] = useState(false);
28
33
  if (variant === "expandable") {
29
34
  return /* @__PURE__ */ jsx(
30
35
  "button",
31
36
  __spreadProps(__spreadValues({}, rest), {
37
+ "aria-expanded": open,
38
+ "aria-controls": descriptionId,
39
+ "data-state": open ? "open" : "closed",
32
40
  className: clsx(
33
41
  "hds-warning-banner__title",
34
42
  "hds-warning-banner__title-trigger",
35
- { "hds-warning-banner--closed": !open },
36
43
  className
37
44
  ),
38
45
  onClick: () => {
@@ -40,7 +47,7 @@ var WarningBannerTitle = forwardRef((_a, ref) => {
40
47
  },
41
48
  ref,
42
49
  type: "button",
43
- children: /* @__PURE__ */ jsx("span", { children })
50
+ children: /* @__PURE__ */ jsx("div", { children })
44
51
  })
45
52
  );
46
53
  }
@@ -56,10 +63,11 @@ var WarningBannerTitle = forwardRef((_a, ref) => {
56
63
  WarningBannerTitle.displayName = "WarningBannerTitle";
57
64
  var WarningBannerDescription = forwardRef(
58
65
  (_a, ref) => {
59
- var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
66
+ var _b = _a, { className, id } = _b, rest = __objRest(_b, ["className", "id"]);
60
67
  return /* @__PURE__ */ jsx(
61
68
  "p",
62
69
  __spreadValues({
70
+ id,
63
71
  className: clsx("hds-warning-banner__description", className),
64
72
  ref
65
73
  }, rest)
@@ -71,4 +79,4 @@ WarningBannerDescription.displayName = "WarningBannerDescription";
71
79
  export {
72
80
  WarningBanner
73
81
  };
74
- //# sourceMappingURL=chunk-3WVRY6CC.mjs.map
82
+ //# sourceMappingURL=chunk-L4YBHIS3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/warning-banner/warning-banner.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { forwardRef, useId, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\n\nexport interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode;\n}\n\nexport const WarningBanner = forwardRef<HTMLDivElement, WarningBannerProps>(\n ({ title, description, className, ...rest }, ref) => {\n const descriptionId = useId();\n const expandable = !!description;\n return (\n <div {...rest} className={clsx(\"hds-warning-banner\", className as undefined)} ref={ref}>\n <WarningBannerTitle\n variant={expandable ? \"expandable\" : \"default\"}\n descriptionId={descriptionId}\n >\n {title}\n </WarningBannerTitle>\n {expandable ? (\n <WarningBannerDescription id={descriptionId}>{description}</WarningBannerDescription>\n ) : null}\n </div>\n );\n },\n);\nWarningBanner.displayName = \"WarningBanner\";\n\ntype WarningBannerTitleProps =\n | ({\n variant: \"expandable\";\n descriptionId: string;\n } & React.ButtonHTMLAttributes<HTMLButtonElement>)\n | ({ variant: \"default\"; descriptionId?: string } & React.HTMLAttributes<HTMLParagraphElement>);\n\nconst WarningBannerTitle = forwardRef<\n HTMLButtonElement | HTMLParagraphElement,\n WarningBannerTitleProps\n>(({ variant, descriptionId, children, className, ...rest }, ref) => {\n const [open, setOpen] = useState<boolean>(false);\n if (variant === \"expandable\") {\n return (\n <button\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n aria-expanded={open}\n aria-controls={descriptionId}\n data-state={open ? \"open\" : \"closed\"}\n className={clsx(\n \"hds-warning-banner__title\",\n \"hds-warning-banner__title-trigger\",\n className as undefined,\n )}\n onClick={() => {\n setOpen((prev) => !prev);\n }}\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n >\n <div>{children}</div>\n </button>\n );\n }\n return (\n <p\n {...(rest as React.HTMLAttributes<HTMLParagraphElement>)}\n className={clsx(\"hds-warning-banner__title\", className as undefined)}\n ref={ref as React.Ref<HTMLParagraphElement>}\n >\n {children}\n </p>\n );\n});\nWarningBannerTitle.displayName = \"WarningBannerTitle\";\n\ntype WarningBannerDescriptionProps = { id: string } & React.HTMLAttributes<HTMLParagraphElement>;\nconst WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(\n ({ className, id, ...rest }, ref) => {\n return (\n <p\n id={id}\n className={clsx(\"hds-warning-banner__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nWarningBannerDescription.displayName = \"WarningBannerDescription\";\n"],"mappings":";;;;;;;AACA,SAAgB,YAAY,OAAO,gBAAgB;AACnD,SAAS,YAAY;AAYf,SACE,KADF;AALC,IAAM,gBAAgB;AAAA,EAC3B,CAAC,IAA4C,QAAQ;AAApD,iBAAE,SAAO,aAAa,UAVzB,IAUG,IAAoC,iBAApC,IAAoC,CAAlC,SAAO,eAAa;AACrB,UAAM,gBAAgB,MAAM;AAC5B,UAAM,aAAa,CAAC,CAAC;AACrB,WACE,qBAAC,wCAAQ,OAAR,EAAc,WAAW,KAAK,sBAAsB,SAAsB,GAAG,KAC5E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,aAAa,eAAe;AAAA,UACrC;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MACC,aACC,oBAAC,4BAAyB,IAAI,eAAgB,uBAAY,IACxD;AAAA,QACN;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;AAS5B,IAAM,qBAAqB,WAGzB,CAAC,IAA0D,QAAQ;AAAlE,eAAE,WAAS,eAAe,UAAU,UAxCvC,IAwCG,IAAkD,iBAAlD,IAAkD,CAAhD,WAAS,iBAAe,YAAU;AACrC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAkB,KAAK;AAC/C,MAAI,YAAY,cAAc;AAC5B,WACE;AAAA,MAAC;AAAA,uCACM,OADN;AAAA,QAEC,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,cAAY,OAAO,SAAS;AAAA,QAC5B,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACb,kBAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QAEL,8BAAC,SAAK,UAAS;AAAA;AAAA,IACjB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,qCACM,OADN;AAAA,MAEC,WAAW,KAAK,6BAA6B,SAAsB;AAAA,MACnE;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AACD,mBAAmB,cAAc;AAGjC,IAAM,2BAA2B;AAAA,EAC/B,CAAC,IAA4B,QAAQ;AAApC,iBAAE,aAAW,GA9EhB,IA8EG,IAAoB,iBAApB,IAAoB,CAAlB,aAAW;AACZ,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,KAAK,mCAAmC,SAAsB;AAAA,QACzE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,yBAAyB,cAAc;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-MOU6WBT2.mjs";
5
5
  import {
6
6
  focusTrap
7
- } from "./chunk-DEX36MFK.mjs";
7
+ } from "./chunk-TDXU2IC6.mjs";
8
8
  import {
9
9
  __objRest,
10
10
  __spreadProps,
@@ -15,17 +15,17 @@ import {
15
15
  import { createContext, useContext, forwardRef, useState, useEffect, useId } from "react";
16
16
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
17
17
  import { jsx, jsxs } from "react/jsx-runtime";
18
- var expandableMenuContext = createContext([
19
- false,
20
- () => {
18
+ var ExpandableMenuContext = createContext(null);
19
+ var useNavbarExpendableMenuContext = () => {
20
+ const value = useContext(ExpandableMenuContext);
21
+ if (value === null) {
22
+ throw new Error("useNavbarExpendableMenuContext must be used within a Navbar.ExpandableMenu");
21
23
  }
22
- ]);
23
- var useNavbarExpendableMenuContext = () => useContext(expandableMenuContext);
24
+ return value;
25
+ };
24
26
  function NavbarExpandableMenu({ children }) {
27
+ const contentId = useId();
25
28
  const [open, setOpen] = useState(false);
26
- function toggleOpen() {
27
- setOpen((prev) => !prev);
28
- }
29
29
  useEffect(() => {
30
30
  if (open) {
31
31
  window.scrollTo(0, 0);
@@ -39,7 +39,7 @@ function NavbarExpandableMenu({ children }) {
39
39
  };
40
40
  }
41
41
  }, [open]);
42
- return /* @__PURE__ */ jsx(expandableMenuContext.Provider, { value: [open, toggleOpen], children });
42
+ return /* @__PURE__ */ jsx(ExpandableMenuContext.Provider, { value: { contentId, open, setOpen }, children });
43
43
  }
44
44
  NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
45
45
  var NavbarExpandableMenuTrigger = forwardRef(
@@ -59,7 +59,7 @@ var NavbarExpandableMenuTrigger = forwardRef(
59
59
  "style",
60
60
  "className"
61
61
  ]);
62
- const [open, toggleOpen] = useNavbarExpendableMenuContext();
62
+ const { contentId, open, setOpen } = useNavbarExpendableMenuContext();
63
63
  const [textWidth, setTextWidth] = useState(void 0);
64
64
  const measurementId = useId();
65
65
  useEffect(() => {
@@ -71,9 +71,14 @@ var NavbarExpandableMenuTrigger = forwardRef(
71
71
  const text = open ? whenOpenText : whenClosedText;
72
72
  const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;
73
73
  const icon = open ? /* @__PURE__ */ jsx(CloseIcon, {}) : /* @__PURE__ */ jsx(MenuIcon, {});
74
+ function toggleOpen() {
75
+ setOpen(!open);
76
+ }
74
77
  return /* @__PURE__ */ jsxs(
75
78
  "button",
76
79
  __spreadProps(__spreadValues({
80
+ "aria-expanded": open,
81
+ "aria-controls": contentId,
77
82
  className: clsx("hds-navbar__item", className),
78
83
  onClick: toggleOpen,
79
84
  ref,
@@ -127,10 +132,11 @@ var NavbarExpandableMenuTrigger = forwardRef(
127
132
  NavbarExpandableMenuTrigger.displayName = "Navbar.ExpandableMenuTrigger";
128
133
  var NavbarExpandableMenuContent = forwardRef((_a, ref) => {
129
134
  var _b = _a, { children, className } = _b, rest = __objRest(_b, ["children", "className"]);
130
- const [open] = useNavbarExpendableMenuContext();
135
+ const { contentId, open } = useNavbarExpendableMenuContext();
131
136
  return /* @__PURE__ */ jsx(
132
137
  "section",
133
138
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({}, rest), {
139
+ id: contentId,
134
140
  className: clsx("hds-navbar__expandable-menu-content", className),
135
141
  "data-state": open ? "open" : "closed"
136
142
  }), { inert: open ? void 0 : "true" }), {
@@ -147,4 +153,4 @@ export {
147
153
  NavbarExpandableMenuTrigger,
148
154
  NavbarExpandableMenuContent
149
155
  };
150
- //# sourceMappingURL=chunk-6R7AXKBR.mjs.map
156
+ //# sourceMappingURL=chunk-OIC2CPID.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/navbar/navbar-expandable-menu.tsx"],"sourcesContent":["import { createContext, useContext, forwardRef, useState, useEffect, useId } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { focusTrap } from \"../utils/utils\";\nimport { CloseIcon, MenuIcon } from \"./icons\";\n\ninterface ExpandableMenuContextProps {\n open: boolean;\n setOpen: (open: boolean) => void;\n contentId: string;\n}\nconst ExpandableMenuContext = createContext<ExpandableMenuContextProps | null>(null);\nexport const useNavbarExpendableMenuContext = () => {\n const value = useContext(ExpandableMenuContext);\n if (value === null) {\n throw new Error(\"useNavbarExpendableMenuContext must be used within a Navbar.ExpandableMenu\");\n }\n return value;\n};\n\nexport interface NavbarExpandableMenuProps {\n children: React.ReactNode;\n}\n\n/**\n * Expandable Menu Provider\n * Handles scroll and focus locking,\n * as well as scrolling the user to the top of the page.\n *\n * If we want a sticky header in the future the scrolling should be configurable\n */\nexport function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {\n const contentId = useId();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (open) {\n window.scrollTo(0, 0);\n document.body.classList.add(clsx(\"hds-navbar-scroll-lock\"));\n const releaseFocusTrap = focusTrap(\n document.getElementsByClassName(clsx(\"hds-navbar\"))[0] as HTMLElement,\n );\n\n return () => {\n document.body.classList.remove(clsx(\"hds-navbar-scroll-lock\"));\n releaseFocusTrap();\n };\n }\n }, [open]);\n\n return (\n <ExpandableMenuContext.Provider value={{ contentId, open, setOpen }}>\n {children}\n </ExpandableMenuContext.Provider>\n );\n}\nNavbarExpandableMenu.displayName = \"NavbarExpandableMenu\";\n\n/**\n * Trigger\n */\nexport interface NavbarExpandableMenuTriggerProps\n extends Omit<React.HTMLAttributes<HTMLButtonElement>, \"children\"> {\n whenClosedText: React.ReactNode;\n whenClosedHelperTitle?: string;\n\n whenOpenText: React.ReactNode;\n whenOpenHelperTitle?: string;\n}\nexport const NavbarExpandableMenuTrigger = forwardRef<\n HTMLButtonElement,\n NavbarExpandableMenuTriggerProps\n>(\n (\n {\n whenClosedText,\n whenClosedHelperTitle,\n\n whenOpenText,\n whenOpenHelperTitle,\n\n style,\n className,\n ...rest\n },\n ref,\n ) => {\n const { contentId, open, setOpen } = useNavbarExpendableMenuContext();\n\n // Measure the width of the text when open and closed and choose the widest one\n // This is to ensure that the button doesn't change size when the text changes\n const [textWidth, setTextWidth] = useState<number | undefined>(undefined);\n const measurementId = useId();\n useEffect(() => {\n const widthWhenOpen =\n document.getElementById(`${measurementId}-when-open`)?.getBoundingClientRect().width ?? 0;\n const widthWhenClosed =\n document.getElementById(`${measurementId}-when-closed`)?.getBoundingClientRect().width ?? 0;\n\n setTextWidth(widthWhenOpen < widthWhenClosed ? widthWhenClosed : widthWhenOpen);\n }, [measurementId]);\n\n const text = open ? whenOpenText : whenClosedText;\n const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;\n const icon = open ? <CloseIcon /> : <MenuIcon />;\n\n function toggleOpen() {\n setOpen(!open);\n }\n\n return (\n <button\n aria-expanded={open}\n aria-controls={contentId}\n className={clsx(\"hds-navbar__item\", className as undefined)}\n onClick={toggleOpen}\n ref={ref}\n title={title}\n type=\"button\"\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {/* Measurement elements, not shown to the user */}\n <span\n id={`${measurementId}-when-closed`}\n aria-hidden\n style={{\n position: \"absolute\",\n visibility: \"hidden\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {whenOpenText}\n </span>\n <span\n id={`${measurementId}-when-open`}\n aria-hidden\n style={{\n position: \"absolute\",\n visibility: \"hidden\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {whenClosedText}\n </span>\n\n {/* Actual content */}\n <span\n style={{ width: textWidth, whiteSpace: \"nowrap\" }}\n className={clsx(\"hds-navbar__item-responsive-text\")}\n >\n {text}\n </span>\n <span style={{ width: 32, height: 32 }}>{icon}</span>\n </button>\n );\n },\n);\nNavbarExpandableMenuTrigger.displayName = \"Navbar.ExpandableMenuTrigger\";\n\n/**\n * Content\n */\nexport interface NavbarExpandableMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\nexport const NavbarExpandableMenuContent = forwardRef<\n HTMLDivElement,\n NavbarExpandableMenuContentProps\n>(({ children, className, ...rest }, ref) => {\n const { contentId, open } = useNavbarExpendableMenuContext();\n return (\n <section\n {...rest}\n id={contentId}\n className={clsx(\"hds-navbar__expandable-menu-content\", className as undefined)}\n data-state={open ? \"open\" : \"closed\"}\n {...{ inert: open ? undefined : \"true\" }}\n ref={ref}\n >\n <div className={clsx(\"hds-navbar__expandable-menu-content-inner\")}>{children}</div>\n </section>\n );\n});\nNavbarExpandableMenuContent.displayName = \"Navbar.ExpandableMenuContent\";\n"],"mappings":"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","names":["_a","_b"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TabsList,
3
3
  TabsTab
4
- } from "./chunk-4WQWU5TL.mjs";
4
+ } from "./chunk-AXQCREUJ.mjs";
5
5
  import {
6
6
  TabsContent,
7
7
  TabsContents
@@ -37,4 +37,4 @@ Tabs.Content = TabsContent;
37
37
  export {
38
38
  Tabs
39
39
  };
40
- //# sourceMappingURL=chunk-7UD72WOC.mjs.map
40
+ //# sourceMappingURL=chunk-QZZIOBF4.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AccordionItemContext
3
- } from "./chunk-V3PAFMK5.mjs";
3
+ } from "./chunk-YQFL5UN4.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
@@ -8,12 +8,13 @@ import {
8
8
  } from "./chunk-R4SQKVDQ.mjs";
9
9
 
10
10
  // src/accordion/accordion-item.tsx
11
- import { forwardRef, useState } from "react";
11
+ import { forwardRef, useId, useState } from "react";
12
12
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
13
13
  import { jsx } from "react/jsx-runtime";
14
14
  var AccordionItem = forwardRef(
15
15
  (_a, ref) => {
16
16
  var _b = _a, { children, defaultOpen, open: outerOpen, onOpenChange, className } = _b, rest = __objRest(_b, ["children", "defaultOpen", "open", "onOpenChange", "className"]);
17
+ const contentId = useId();
17
18
  const [innerOpen, setInnerOpen] = useState(defaultOpen != null ? defaultOpen : false);
18
19
  const open = outerOpen != null ? outerOpen : innerOpen;
19
20
  const handleOpen = () => {
@@ -29,7 +30,7 @@ var AccordionItem = forwardRef(
29
30
  "data-state": open ? "open" : "closed",
30
31
  className: clsx("hds-accordion-item", className),
31
32
  ref,
32
- children: /* @__PURE__ */ jsx(AccordionItemContext.Provider, { value: { open, setOpen: handleOpen }, children })
33
+ children: /* @__PURE__ */ jsx(AccordionItemContext.Provider, { value: { contentId, open, setOpen: handleOpen }, children })
33
34
  })
34
35
  );
35
36
  }
@@ -39,4 +40,4 @@ AccordionItem.displayName = "Accordion.Item";
39
40
  export {
40
41
  AccordionItem
41
42
  };
42
- //# sourceMappingURL=chunk-A2H2LAII.mjs.map
43
+ //# sourceMappingURL=chunk-SKVM7G76.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accordion/accordion-item.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\nimport { forwardRef, useId, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { AccordionItemContext } from \"./context\";\nimport type { AccordionHeaderProps } from \"./accordion-header\";\nimport type { AccordionContentProps } from \"./accordion-content\";\n\nexport type AccordionItemChildrenType =\n | ReactElement<AccordionHeaderProps>\n | ReactElement<AccordionContentProps>;\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Control the open state of the accordion manually\n */\n open?: boolean;\n\n /**\n * Use with open to control the open state of the accordion manually\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * If the accordion should be open by default\n */\n defaultOpen?: boolean;\n\n /**\n * Accepts type of Accordion.Content and Accordion.Header\n */\n children: AccordionItemChildrenType[];\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ children, defaultOpen, open: outerOpen, onOpenChange, className, ...rest }, ref) => {\n const contentId = useId();\n const [innerOpen, setInnerOpen] = useState(defaultOpen ?? false);\n const open = outerOpen ?? innerOpen;\n\n const handleOpen = () => {\n if (outerOpen !== undefined) {\n onOpenChange && onOpenChange(!open);\n } else {\n setInnerOpen(!open);\n }\n };\n\n return (\n <div\n {...rest}\n data-state={open ? \"open\" : \"closed\"}\n className={clsx(\"hds-accordion-item\", className as undefined)}\n ref={ref}\n >\n <AccordionItemContext.Provider value={{ contentId, open, setOpen: handleOpen }}>\n {children}\n </AccordionItemContext.Provider>\n </div>\n );\n },\n);\n\nAccordionItem.displayName = \"Accordion.Item\";\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,OAAO,gBAAgB;AAC5C,SAAS,YAAY;AAoDb;AArBD,IAAM,gBAAgB;AAAA,EAC3B,CAAC,IAA8E,QAAQ;AAAtF,iBAAE,YAAU,aAAa,MAAM,WAAW,cAAc,UAlC3D,IAkCG,IAAsE,iBAAtE,IAAsE,CAApE,YAAU,eAAa,QAAiB,gBAAc;AACvD,UAAM,YAAY,MAAM;AACxB,UAAM,CAAC,WAAW,YAAY,IAAI,SAAS,oCAAe,KAAK;AAC/D,UAAM,OAAO,gCAAa;AAE1B,UAAM,aAAa,MAAM;AACvB,UAAI,cAAc,QAAW;AAC3B,wBAAgB,aAAa,CAAC,IAAI;AAAA,MACpC,OAAO;AACL,qBAAa,CAAC,IAAI;AAAA,MACpB;AAAA,IACF;AAEA,WACE;AAAA,MAAC;AAAA,uCACK,OADL;AAAA,QAEC,cAAY,OAAO,SAAS;AAAA,QAC5B,WAAW,KAAK,sBAAsB,SAAsB;AAAA,QAC5D;AAAA,QAEA,8BAAC,qBAAqB,UAArB,EAA8B,OAAO,EAAE,WAAW,MAAM,SAAS,WAAW,GAC1E,UACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,cAAc,cAAc;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-SRLM3K2X.mjs.map
@@ -1,4 +1,4 @@
1
- // src/utils.ts
1
+ // src/utils/utils.ts
2
2
  import * as React from "react";
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  function useMergeRefs(refs) {
@@ -86,7 +86,6 @@ export {
86
86
  useMergeRefs,
87
87
  useResize,
88
88
  useHydrated,
89
- focusTrap,
90
- releaseFocusTrap
89
+ focusTrap
91
90
  };
92
- //# sourceMappingURL=chunk-DEX36MFK.mjs.map
91
+ //# sourceMappingURL=chunk-TDXU2IC6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/utils.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/useMergeRefs\n */\nexport function useMergeRefs<Instance>(\n refs: (React.Ref<Instance> | undefined)[],\n): React.RefCallback<Instance> | null {\n return React.useMemo(() => {\n if (refs.every((ref) => ref === null)) {\n return null;\n }\n\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref !== null) {\n (ref as React.MutableRefObject<Instance | null>).current = value;\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- It's ok\n }, refs);\n}\n\nexport function useResize<Instance extends HTMLElement>(\n ref: React.RefObject<Instance> | undefined | null,\n): { width: number; height: number } {\n const [width, setWidth] = useState<number>(0);\n const [height, setHeight] = useState<number>(0);\n const handleResize = useCallback(() => {\n if (ref?.current !== null) {\n setWidth(ref?.current?.offsetWidth ?? 0);\n setHeight(ref?.current?.offsetHeight ?? 0);\n }\n }, [ref]);\n useEffect(() => {\n window.addEventListener(\"load\", handleResize);\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"load\", handleResize);\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [ref, handleResize]);\n useEffect(() => {\n handleResize();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- It's ok\n }, []);\n return { width, height };\n}\n\nfunction subscribe() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function -- It's ok\n return () => {};\n}\n\nexport function useHydrated() {\n return React.useSyncExternalStore(\n subscribe,\n () => true,\n () => false,\n );\n}\n\n/**\n * Trap focus inside an element using the `inert` attribute.\n *\n * Adds `inert` to all siblings of the given element, and all their ancestors up to the body.\n * Returns a cleanup function which removes the `inert` property from the elements, effectively giving focus back to rest of the document.\n *\n * NOTE: Does not support portals, i.e. elements outside the DOM hierarchy of the given element.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert\n * @see https://web.dev/articles/inert\n */\nexport function focusTrap(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function -- NOP on focus trapping the body element\n if (element === document.body) return () => {};\n\n let inertElements: HTMLElement[] = [];\n for (let el: HTMLElement | null = element; el; el = el.parentElement) {\n if (el === document.body) break;\n\n for (const sibling of el.parentElement?.children ?? []) {\n if (sibling === el) continue;\n if (!(sibling instanceof HTMLElement)) continue;\n if (sibling.hasAttribute(\"inert\")) continue;\n\n sibling.setAttribute(\"inert\", \"true\");\n inertElements.push(sibling);\n }\n }\n\n return () => {\n releaseFocusTrap(inertElements);\n inertElements = [];\n };\n}\n\n/**\n * Unset the `inert` attribute on all elements given\n */\nfunction releaseFocusTrap(inertElements: Iterable<HTMLElement>) {\n for (const el of inertElements) {\n el.removeAttribute(\"inert\");\n }\n}\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,aAAa,WAAW,gBAAgB;AAM1C,SAAS,aACd,MACoC;AACpC,SAAa,cAAQ,MAAM;AACzB,QAAI,KAAK,MAAM,CAAC,QAAQ,QAAQ,IAAI,GAAG;AACrC,aAAO;AAAA,IACT;AAEA,WAAO,CAAC,UAAU;AAChB,WAAK,QAAQ,CAAC,QAAQ;AACpB,YAAI,OAAO,QAAQ,YAAY;AAC7B,cAAI,KAAK;AAAA,QACX,WAAW,QAAQ,MAAM;AACvB,UAAC,IAAgD,UAAU;AAAA,QAC7D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EAEF,GAAG,IAAI;AACT;AAEO,SAAS,UACd,KACmC;AACnC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,CAAC;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAiB,CAAC;AAC9C,QAAM,eAAe,YAAY,MAAM;AAjCzC;AAkCI,SAAI,2BAAK,aAAY,MAAM;AACzB,gBAAS,sCAAK,YAAL,mBAAc,gBAAd,YAA6B,CAAC;AACvC,iBAAU,sCAAK,YAAL,mBAAc,iBAAd,YAA8B,CAAC;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AACR,YAAU,MAAM;AACd,WAAO,iBAAiB,QAAQ,YAAY;AAC5C,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ,YAAY;AAC/C,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,KAAK,YAAY,CAAC;AACtB,YAAU,MAAM;AACd,iBAAa;AAAA,EAEf,GAAG,CAAC,CAAC;AACL,SAAO,EAAE,OAAO,OAAO;AACzB;AAEA,SAAS,YAAY;AAEnB,SAAO,MAAM;AAAA,EAAC;AAChB;AAEO,SAAS,cAAc;AAC5B,SAAa;AAAA,IACX;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAaO,SAAS,UAAU,SAAsB;AA9EhD;AAgFE,MAAI,YAAY,SAAS;AAAM,WAAO,MAAM;AAAA,IAAC;AAE7C,MAAI,gBAA+B,CAAC;AACpC,WAAS,KAAyB,SAAS,IAAI,KAAK,GAAG,eAAe;AACpE,QAAI,OAAO,SAAS;AAAM;AAE1B,eAAW,YAAW,cAAG,kBAAH,mBAAkB,aAAlB,YAA8B,CAAC,GAAG;AACtD,UAAI,YAAY;AAAI;AACpB,UAAI,EAAE,mBAAmB;AAAc;AACvC,UAAI,QAAQ,aAAa,OAAO;AAAG;AAEnC,cAAQ,aAAa,SAAS,MAAM;AACpC,oBAAc,KAAK,OAAO;AAAA,IAC5B;AAAA,EACF;AAEA,SAAO,MAAM;AACX,qBAAiB,aAAa;AAC9B,oBAAgB,CAAC;AAAA,EACnB;AACF;AAKA,SAAS,iBAAiB,eAAsC;AAC9D,aAAW,MAAM,eAAe;AAC9B,OAAG,gBAAgB,OAAO;AAAA,EAC5B;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AccordionItemContext
3
- } from "./chunk-V3PAFMK5.mjs";
3
+ } from "./chunk-YQFL5UN4.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
@@ -21,6 +21,7 @@ var AccordionContent = forwardRef(
21
21
  return /* @__PURE__ */ jsx(
22
22
  "div",
23
23
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({
24
+ id: context.contentId,
24
25
  "aria-hidden": !context.open,
25
26
  "data-state": context.open ? "open" : "closed"
26
27
  }, { inert: context.open ? void 0 : "true" }), {
@@ -37,4 +38,4 @@ AccordionContent.displayName = "Accordion.Content";
37
38
  export {
38
39
  AccordionContent
39
40
  };
40
- //# sourceMappingURL=chunk-GLAEI3SD.mjs.map
41
+ //# sourceMappingURL=chunk-VCQIR53Y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accordion/accordion-content.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { AccordionItemContext } from \"./context\";\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, ...rest }, ref) => {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n return null;\n }\n return (\n <div\n id={context.contentId}\n aria-hidden={!context.open}\n data-state={context.open ? \"open\" : \"closed\"}\n {...{ inert: context.open ? undefined : \"true\" }}\n className={clsx(\"hds-accordion-item-content\", className as undefined)}\n ref={ref}\n {...rest}\n >\n <div className={clsx(\"hds-accordion-item-content-inner\")}>{children}</div>\n </div>\n );\n },\n);\n\nAccordionContent.displayName = \"Accordion.Content\";\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY;AAuBb;AAhBD,IAAM,mBAAmB;AAAA,EAC9B,CAAC,IAAkC,QAAQ;AAA1C,iBAAE,YAAU,UAVf,IAUG,IAA0B,iBAA1B,IAA0B,CAAxB,YAAU;AACX,UAAM,UAAU,WAAW,oBAAoB;AAC/C,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,IACT;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,QAAQ;AAAA,QACZ,eAAa,CAAC,QAAQ;AAAA,QACtB,cAAY,QAAQ,OAAO,SAAS;AAAA,SAChC,EAAE,OAAO,QAAQ,OAAO,SAAY,OAAO,IAJhD;AAAA,QAKC,WAAW,KAAK,8BAA8B,SAAsB;AAAA,QACpE;AAAA,UACI,OAPL;AAAA,QASC,8BAAC,SAAI,WAAW,KAAK,kCAAkC,GAAI,UAAS;AAAA;AAAA,IACtE;AAAA,EAEJ;AACF;AAEA,iBAAiB,cAAc;","names":[]}
@@ -5,4 +5,4 @@ var AccordionItemContext = createContext(null);
5
5
  export {
6
6
  AccordionItemContext
7
7
  };
8
- //# sourceMappingURL=chunk-V3PAFMK5.mjs.map
8
+ //# sourceMappingURL=chunk-YQFL5UN4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accordion/context.ts"],"sourcesContent":["import { createContext } from \"react\";\n\nexport interface AccordionItemContextProps {\n open: boolean;\n setOpen: (open: boolean) => void;\n contentId: string;\n}\n\nexport const AccordionItemContext = createContext<AccordionItemContextProps | null>(null);\n"],"mappings":";AAAA,SAAS,qBAAqB;AAQvB,IAAM,uBAAuB,cAAgD,IAAI;","names":[]}
@@ -77,6 +77,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
77
77
  var AccordionItem = (0, import_react2.forwardRef)(
78
78
  (_a, ref) => {
79
79
  var _b = _a, { children, defaultOpen, open: outerOpen, onOpenChange, className } = _b, rest = __objRest(_b, ["children", "defaultOpen", "open", "onOpenChange", "className"]);
80
+ const contentId = (0, import_react2.useId)();
80
81
  const [innerOpen, setInnerOpen] = (0, import_react2.useState)(defaultOpen != null ? defaultOpen : false);
81
82
  const open = outerOpen != null ? outerOpen : innerOpen;
82
83
  const handleOpen = () => {
@@ -92,7 +93,7 @@ var AccordionItem = (0, import_react2.forwardRef)(
92
93
  "data-state": open ? "open" : "closed",
93
94
  className: (0, import_typed_classname.clsx)("hds-accordion-item", className),
94
95
  ref,
95
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionItemContext.Provider, { value: { open, setOpen: handleOpen }, children })
96
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionItemContext.Provider, { value: { contentId, open, setOpen: handleOpen }, children })
96
97
  })
97
98
  );
98
99
  }
@@ -118,6 +119,7 @@ var AccordionHeader = (0, import_react3.forwardRef)(
118
119
  "button",
119
120
  __spreadProps(__spreadValues({}, rest), {
120
121
  "aria-expanded": context.open,
122
+ "aria-controls": context.contentId,
121
123
  "data-state": context.open ? "open" : "closed",
122
124
  className: (0, import_typed_classname2.clsx)("hds-accordion-item-header", className),
123
125
  onClick: expandOrCollapse,
@@ -144,6 +146,7 @@ var AccordionContent = (0, import_react4.forwardRef)(
144
146
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
145
147
  "div",
146
148
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({
149
+ id: context.contentId,
147
150
  "aria-hidden": !context.open,
148
151
  "data-state": context.open ? "open" : "closed"
149
152
  }, { inert: context.open ? void 0 : "true" }), {
@@ -242,10 +245,9 @@ var Button = (0, import_react8.forwardRef)(
242
245
  var _b = _a, {
243
246
  asChild,
244
247
  children,
245
- variant,
248
+ variant = "primary",
246
249
  size = "medium",
247
250
  fullWidth = false,
248
- fill = "contained",
249
251
  icon,
250
252
  className
251
253
  } = _b, rest = __objRest(_b, [
@@ -254,7 +256,6 @@ var Button = (0, import_react8.forwardRef)(
254
256
  "variant",
255
257
  "size",
256
258
  "fullWidth",
257
- "fill",
258
259
  "icon",
259
260
  "className"
260
261
  ]);
@@ -265,9 +266,8 @@ var Button = (0, import_react8.forwardRef)(
265
266
  className: (0, import_typed_classname7.clsx)(
266
267
  "hds-button",
267
268
  `hds-button--${size}`,
269
+ `hds-button--${variant}`,
268
270
  {
269
- [`hds-button--${variant}`]: fill === "contained",
270
- [`hds-button--outline-${variant}`]: fill === "outline",
271
271
  "hds-button--full": fullWidth === true,
272
272
  "hds-button--mobile-full": fullWidth === "mobile",
273
273
  "hds-button--icon-only": icon
@@ -282,14 +282,6 @@ var Button = (0, import_react8.forwardRef)(
282
282
  }
283
283
  );
284
284
  Button.displayName = "Button";
285
- var PrimaryButton = (0, import_react8.forwardRef)((props, ref) => {
286
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Button, __spreadProps(__spreadValues({}, props), { ref, variant: "primary" }));
287
- });
288
- PrimaryButton.displayName = "PrimaryButton";
289
- var SecondaryButton = (0, import_react8.forwardRef)((props, ref) => {
290
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Button, __spreadProps(__spreadValues({}, props), { ref, variant: "secondary" }));
291
- });
292
- SecondaryButton.displayName = "SecondaryButton";
293
285
 
294
286
  // src/footer/footer.tsx
295
287
  var import_jsx_runtime8 = require("react/jsx-runtime");
@@ -305,7 +297,7 @@ var FooterButtonLink = (0, import_react9.forwardRef)(
305
297
  (_a, ref) => {
306
298
  var _b = _a, { children, className, asChild } = _b, rest = __objRest(_b, ["children", "className", "asChild"]);
307
299
  const Component = asChild ? import_react_slot2.Slot : "a";
308
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PrimaryButton, { asChild: true, fill: "outline", className: (0, import_typed_classname8.clsx)(className), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Component, __spreadProps(__spreadValues({ ref }, rest), { children })) });
300
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Button, { asChild: true, variant: "primary-outline", className: (0, import_typed_classname8.clsx)(className), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Component, __spreadProps(__spreadValues({ ref }, rest), { children })) });
309
301
  }
310
302
  );
311
303
  FooterButtonLink.displayName = "FooterButton";