@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
@@ -52,108 +52,41 @@ __export(warning_banner_exports, {
52
52
  WarningBanner: () => WarningBanner
53
53
  });
54
54
  module.exports = __toCommonJS(warning_banner_exports);
55
- var import_react2 = require("react");
56
- var import_typed_classname2 = require("@postenbring/hedwig-css/typed-classname");
57
-
58
- // src/box/box.tsx
59
55
  var import_react = require("react");
60
56
  var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
61
- var import_react_slot = require("@radix-ui/react-slot");
62
57
  var import_jsx_runtime = require("react/jsx-runtime");
63
- var BoxCloseButton = (0, import_react.forwardRef)(
64
- (_a, ref) => {
65
- var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
66
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
67
- "button",
68
- __spreadValues({
69
- className: (0, import_typed_classname.clsx)("hds-box__close-button", className),
70
- ref,
71
- type: "button"
72
- }, rest)
73
- );
74
- }
75
- );
76
- BoxCloseButton.displayName = "Box.CloseButton";
77
- var Box = (0, import_react.forwardRef)(
78
- (_a, ref) => {
79
- var _b = _a, {
80
- asChild,
81
- variant,
82
- closeable = false,
83
- onClose: onCloseProp,
84
- closed: closedProp,
85
- closeButtonProps,
86
- children,
87
- className
88
- } = _b, rest = __objRest(_b, [
89
- "asChild",
90
- "variant",
91
- "closeable",
92
- "onClose",
93
- "closed",
94
- "closeButtonProps",
95
- "children",
96
- "className"
97
- ]);
98
- const [closedState, setClosedState] = (0, import_react.useState)(false);
99
- const onClose = (0, import_react.useCallback)(() => {
100
- if (onCloseProp) {
101
- const result = onCloseProp();
102
- if (result === true) {
103
- setClosedState(true);
104
- }
105
- } else {
106
- setClosedState(true);
107
- }
108
- }, []);
109
- const closed = closedProp != null ? closedProp : closedState;
110
- const Component = asChild ? import_react_slot.Slot : "div";
111
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
112
- Component,
113
- __spreadProps(__spreadValues({
114
- className: (0, import_typed_classname.clsx)(
115
- "hds-box",
116
- variant && `hds-box--${variant}`,
117
- { "hds-box--closed": closed },
118
- className
119
- ),
120
- ref
121
- }, rest), {
122
- children: [
123
- closeable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BoxCloseButton, __spreadValues({ onClick: onClose }, closeButtonProps)) : null,
124
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_slot.Slottable, { children })
125
- ]
126
- })
127
- );
128
- }
129
- );
130
- Box.displayName = "Box";
131
- Box.CloseButton = BoxCloseButton;
132
-
133
- // src/warning-banner/warning-banner.tsx
134
- var import_jsx_runtime2 = require("react/jsx-runtime");
135
- var WarningBanner = (0, import_react2.forwardRef)(
58
+ var WarningBanner = (0, import_react.forwardRef)(
136
59
  (_a, ref) => {
137
60
  var _b = _a, { title, description, className } = _b, rest = __objRest(_b, ["title", "description", "className"]);
61
+ const descriptionId = (0, import_react.useId)();
138
62
  const expandable = !!description;
139
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Box, __spreadProps(__spreadValues({}, rest), { className: (0, import_typed_classname2.clsx)("hds-warning-banner", className), ref, children: [
140
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WarningBannerTitle, { variant: expandable ? "expandable" : "default", children: title }),
141
- expandable ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WarningBannerDescription, { children: description }) : null
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", __spreadProps(__spreadValues({}, rest), { className: (0, import_typed_classname.clsx)("hds-warning-banner", className), ref, children: [
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
+ WarningBannerTitle,
66
+ {
67
+ variant: expandable ? "expandable" : "default",
68
+ descriptionId,
69
+ children: title
70
+ }
71
+ ),
72
+ expandable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WarningBannerDescription, { id: descriptionId, children: description }) : null
142
73
  ] }));
143
74
  }
144
75
  );
145
76
  WarningBanner.displayName = "WarningBanner";
146
- var WarningBannerTitle = (0, import_react2.forwardRef)((_a, ref) => {
147
- var _b = _a, { variant, children, className } = _b, rest = __objRest(_b, ["variant", "children", "className"]);
148
- const [open, setOpen] = (0, import_react2.useState)(false);
77
+ var WarningBannerTitle = (0, import_react.forwardRef)((_a, ref) => {
78
+ var _b = _a, { variant, descriptionId, children, className } = _b, rest = __objRest(_b, ["variant", "descriptionId", "children", "className"]);
79
+ const [open, setOpen] = (0, import_react.useState)(false);
149
80
  if (variant === "expandable") {
150
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
81
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
151
82
  "button",
152
83
  __spreadProps(__spreadValues({}, rest), {
153
- className: (0, import_typed_classname2.clsx)(
84
+ "aria-expanded": open,
85
+ "aria-controls": descriptionId,
86
+ "data-state": open ? "open" : "closed",
87
+ className: (0, import_typed_classname.clsx)(
154
88
  "hds-warning-banner__title",
155
89
  "hds-warning-banner__title-trigger",
156
- { "hds-warning-banner--closed": !open },
157
90
  className
158
91
  ),
159
92
  onClick: () => {
@@ -161,27 +94,28 @@ var WarningBannerTitle = (0, import_react2.forwardRef)((_a, ref) => {
161
94
  },
162
95
  ref,
163
96
  type: "button",
164
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children })
97
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children })
165
98
  })
166
99
  );
167
100
  }
168
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
101
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
169
102
  "p",
170
103
  __spreadProps(__spreadValues({}, rest), {
171
- className: (0, import_typed_classname2.clsx)("hds-warning-banner__title", className),
104
+ className: (0, import_typed_classname.clsx)("hds-warning-banner__title", className),
172
105
  ref,
173
106
  children
174
107
  })
175
108
  );
176
109
  });
177
110
  WarningBannerTitle.displayName = "WarningBannerTitle";
178
- var WarningBannerDescription = (0, import_react2.forwardRef)(
111
+ var WarningBannerDescription = (0, import_react.forwardRef)(
179
112
  (_a, ref) => {
180
- var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
181
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
113
+ var _b = _a, { className, id } = _b, rest = __objRest(_b, ["className", "id"]);
114
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
182
115
  "p",
183
116
  __spreadValues({
184
- className: (0, import_typed_classname2.clsx)("hds-warning-banner__description", className),
117
+ id,
118
+ className: (0, import_typed_classname.clsx)("hds-warning-banner__description", className),
185
119
  ref
186
120
  }, rest)
187
121
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/warning-banner/warning-banner.tsx","../../src/box/box.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Box } from \"../box\";\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 expandable = !!description;\n return (\n <Box {...rest} className={clsx(\"hds-warning-banner\", className as undefined)} ref={ref}>\n <WarningBannerTitle variant={expandable ? \"expandable\" : \"default\"}>\n {title}\n </WarningBannerTitle>\n {expandable ? <WarningBannerDescription>{description}</WarningBannerDescription> : null}\n </Box>\n );\n },\n);\nWarningBanner.displayName = \"WarningBanner\";\n\ntype WarningBannerTitleProps =\n | ({ variant: \"expandable\" } & React.ButtonHTMLAttributes<HTMLButtonElement>)\n | ({ variant: \"default\" } & React.HTMLAttributes<HTMLParagraphElement>);\n\nconst WarningBannerTitle = forwardRef<\n HTMLButtonElement | HTMLParagraphElement,\n WarningBannerTitleProps\n>(({ variant, 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 className={clsx(\n \"hds-warning-banner__title\",\n \"hds-warning-banner__title-trigger\",\n { \"hds-warning-banner--closed\": !open },\n className as undefined,\n )}\n onClick={() => {\n setOpen((prev) => !prev);\n }}\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n >\n <span>{children}</span>\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 = React.HTMLAttributes<HTMLParagraphElement>;\nconst WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(\n ({ className, ...rest }, ref) => {\n return (\n <p\n className={clsx(\"hds-warning-banner__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nWarningBannerDescription.displayName = \"WarningBannerDescription\";\n","import { forwardRef, useCallback, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\n\nexport type BoxCloseButtonProps = Omit<React.HTMLAttributes<HTMLButtonElement>, \"children\">;\nexport const BoxCloseButton = forwardRef<HTMLButtonElement, BoxCloseButtonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <button\n className={clsx(\"hds-box__close-button\", className as undefined)}\n ref={ref}\n type=\"button\"\n {...rest}\n />\n );\n },\n);\nBoxCloseButton.displayName = \"Box.CloseButton\";\n\nexport interface BoxProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n\n /**\n * Color variant of the box\n *\n * @default \"light-grey\"\n */\n variant?: \"light-grey\" | \"lighter\" | \"white\" | \"warning\";\n\n /**\n * If `true`, a close button will be shown.\n * Use when you want to control the close button using the BoxCloseButton component.\n *\n * @default false\n */\n closeable?: boolean;\n\n /**\n * Callback fired when the component requests to be closed.\n * If not set, the component will be closed without any user interaction.\n *\n * If set, and the handler returns non-true value, the component will not be closed.\n * Use this if you want to control the closing of the component, using the `closed` prop\n *\n * If set, and the handler returns the true, the component will be closed.\n * Use this with `window.confirm()` to ask the user to confirm closing the component.\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- It's fine, I want to have the boolean in the type\n onClose?: () => boolean | unknown;\n\n /**\n * If `true`, the box will be closed and hidden from view\n */\n closed?: boolean;\n\n /**\n * Props applied to the close button element.\n */\n closeButtonProps?: BoxCloseButtonProps;\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\nexport const Box = forwardRef<HTMLDivElement, BoxProps>(\n (\n {\n asChild,\n variant,\n closeable = false,\n onClose: onCloseProp,\n closed: closedProp,\n closeButtonProps,\n children,\n className,\n ...rest\n },\n ref,\n ) => {\n const [closedState, setClosedState] = useState(false);\n const onClose = useCallback(() => {\n if (onCloseProp) {\n const result = onCloseProp();\n if (result === true) {\n setClosedState(true);\n }\n } else {\n setClosedState(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- I know better\n }, []);\n const closed = closedProp ?? closedState;\n const Component = asChild ? Slot : \"div\";\n\n return (\n <Component\n className={clsx(\n \"hds-box\",\n variant && `hds-box--${variant}`,\n { \"hds-box--closed\": closed },\n className as undefined,\n )}\n ref={ref}\n {...rest}\n >\n {closeable ? <BoxCloseButton onClick={onClose} {...closeButtonProps} /> : null}\n <Slottable>{children}</Slottable>\n </Component>\n );\n },\n) as BoxType;\nBox.displayName = \"Box\";\n\nBox.CloseButton = BoxCloseButton;\n\ntype BoxType = ReturnType<typeof forwardRef<HTMLDivElement, BoxProps>> & {\n CloseButton: typeof BoxCloseButton;\n};\n"],"mappings":"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","names":["import_react","import_typed_classname","import_jsx_runtime"]}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmD;AACnD,6BAAqB;AAYf;AALC,IAAM,oBAAgB;AAAA,EAC3B,CAAC,IAA4C,QAAQ;AAApD,iBAAE,SAAO,aAAa,UAVzB,IAUG,IAAoC,iBAApC,IAAoC,CAAlC,SAAO,eAAa;AACrB,UAAM,oBAAgB,oBAAM;AAC5B,UAAM,aAAa,CAAC,CAAC;AACrB,WACE,6CAAC,wCAAQ,OAAR,EAAc,eAAW,6BAAK,sBAAsB,SAAsB,GAAG,KAC5E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,aAAa,eAAe;AAAA,UACrC;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MACC,aACC,4CAAC,4BAAyB,IAAI,eAAgB,uBAAY,IACxD;AAAA,QACN;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;AAS5B,IAAM,yBAAqB,yBAGzB,CAAC,IAA0D,QAAQ;AAAlE,eAAE,WAAS,eAAe,UAAU,UAxCvC,IAwCG,IAAkD,iBAAlD,IAAkD,CAAhD,WAAS,iBAAe,YAAU;AACrC,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAkB,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,eAAW;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,sDAAC,SAAK,UAAS;AAAA;AAAA,IACjB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,qCACM,OADN;AAAA,MAEC,eAAW,6BAAK,6BAA6B,SAAsB;AAAA,MACnE;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AACD,mBAAmB,cAAc;AAGjC,IAAM,+BAA2B;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,eAAW,6BAAK,mCAAmC,SAAsB;AAAA,QACzE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,yBAAyB,cAAc;","names":[]}
@@ -1,8 +1,6 @@
1
1
  import {
2
2
  WarningBanner
3
- } from "../chunk-3WVRY6CC.mjs";
4
- import "../chunk-BCFV6VOE.mjs";
5
- import "../chunk-AJWSQEDP.mjs";
3
+ } from "../chunk-L4YBHIS3.mjs";
6
4
  import "../chunk-R4SQKVDQ.mjs";
7
5
  export {
8
6
  WarningBanner
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@postenbring/hedwig-react",
3
- "version": "0.0.82",
3
+ "version": "0.0.84",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -13,14 +13,14 @@
13
13
  "src/**"
14
14
  ],
15
15
  "devDependencies": {
16
- "@types/react": "^18.3.1",
16
+ "@types/react": "^18.3.2",
17
17
  "@types/react-dom": "^18.3.0",
18
18
  "react": "^18.3.1",
19
19
  "react-dom": "18.3.1",
20
20
  "tsup": "^8.0.1",
21
21
  "typescript": "^5.4.5",
22
- "eslint-config-custom": "0.0.1",
23
- "hedwig-tsconfig": "0.0.0"
22
+ "hedwig-tsconfig": "0.0.0",
23
+ "eslint-config-custom": "0.0.1"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "@types/react": "^17.0.0 || ^18.0.0",
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "@radix-ui/react-popover": "1.0.7",
33
33
  "@radix-ui/react-slot": "1.0.2",
34
- "@postenbring/hedwig-css": "0.0.69"
34
+ "@postenbring/hedwig-css": "0.0.70"
35
35
  },
36
36
  "publishConfig": {
37
37
  "access": "public"
@@ -15,6 +15,7 @@ export const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps
15
15
  }
16
16
  return (
17
17
  <div
18
+ id={context.contentId}
18
19
  aria-hidden={!context.open}
19
20
  data-state={context.open ? "open" : "closed"}
20
21
  {...{ inert: context.open ? undefined : "true" }}
@@ -21,6 +21,7 @@ export const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProp
21
21
  <button
22
22
  {...rest}
23
23
  aria-expanded={context.open}
24
+ aria-controls={context.contentId}
24
25
  data-state={context.open ? "open" : "closed"}
25
26
  className={clsx("hds-accordion-item-header", className as undefined)}
26
27
  onClick={expandOrCollapse}
@@ -1,5 +1,5 @@
1
1
  import type { ReactElement } from "react";
2
- import { forwardRef, useState } from "react";
2
+ import { forwardRef, useId, useState } from "react";
3
3
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
4
4
  import { AccordionItemContext } from "./context";
5
5
  import type { AccordionHeaderProps } from "./accordion-header";
@@ -33,6 +33,7 @@ export interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement>
33
33
 
34
34
  export const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
35
35
  ({ children, defaultOpen, open: outerOpen, onOpenChange, className, ...rest }, ref) => {
36
+ const contentId = useId();
36
37
  const [innerOpen, setInnerOpen] = useState(defaultOpen ?? false);
37
38
  const open = outerOpen ?? innerOpen;
38
39
 
@@ -51,7 +52,7 @@ export const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
51
52
  className={clsx("hds-accordion-item", className as undefined)}
52
53
  ref={ref}
53
54
  >
54
- <AccordionItemContext.Provider value={{ open, setOpen: handleOpen }}>
55
+ <AccordionItemContext.Provider value={{ contentId, open, setOpen: handleOpen }}>
55
56
  {children}
56
57
  </AccordionItemContext.Provider>
57
58
  </div>
@@ -3,6 +3,7 @@ import { createContext } from "react";
3
3
  export interface AccordionItemContextProps {
4
4
  open: boolean;
5
5
  setOpen: (open: boolean) => void;
6
+ contentId: string;
6
7
  }
7
8
 
8
9
  export const AccordionItemContext = createContext<AccordionItemContextProps | null>(null);
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
3
  import { Box } from "../box";
4
- import { Badge, DarkBadge, WhiteBadge, WarningBadge } from ".";
4
+ import { Badge } from ".";
5
5
 
6
6
  const meta: Meta<typeof Badge> = {
7
7
  title: "Badge",
@@ -14,31 +14,33 @@ type Story = StoryObj<typeof Badge>;
14
14
 
15
15
  export const Lighter: Story = {
16
16
  args: {
17
+ variant: "lighter",
17
18
  children: "Default badge",
18
19
  },
19
20
  };
20
21
 
21
22
  export const Dark: Story = {
22
23
  args: {
24
+ variant: "dark",
23
25
  children: "Dark badge",
24
26
  },
25
- render: (props) => <DarkBadge {...props} />,
26
27
  };
27
28
 
28
29
  export const White: Story = {
29
30
  args: {
31
+ variant: "white",
30
32
  children: "White badge",
31
33
  },
32
34
  render: (props) => (
33
35
  <Box>
34
- <WhiteBadge {...props} />
36
+ <Badge {...props} />
35
37
  </Box>
36
38
  ),
37
39
  };
38
40
 
39
41
  export const Warning: Story = {
40
42
  args: {
43
+ variant: "warning",
41
44
  children: "Warning badge",
42
45
  },
43
- render: (props) => <WarningBadge {...props} />,
44
46
  };
@@ -5,6 +5,13 @@ import { forwardRef } from "react";
5
5
  export interface BadgeProps extends React.AnchorHTMLAttributes<HTMLSpanElement> {
6
6
  children: React.ReactNode;
7
7
 
8
+ /**
9
+ * Color of the badge
10
+ *
11
+ * @default "lighter"
12
+ */
13
+ variant?: "lighter" | "dark" | "white" | "warning";
14
+
8
15
  /**
9
16
  * Font size of the badge
10
17
  *
@@ -20,44 +27,29 @@ export interface BadgeProps extends React.AnchorHTMLAttributes<HTMLSpanElement>
20
27
  asChild?: boolean;
21
28
  }
22
29
 
23
- const Badge = forwardRef<
24
- HTMLSpanElement,
25
- BadgeProps & { variant: "lighter" | "dark" | "white" | "warning" }
26
- >(({ children, asChild, variant, size = "small", className, ...rest }, ref) => {
27
- const Component = asChild ? Slot : "span";
28
- return (
29
- <Component
30
- ref={ref}
31
- className={clsx(
32
- "hds-badge",
33
- `hds-badge--${size}`,
34
- `hds-badge--${variant}`,
35
- className as undefined,
36
- )}
37
- {...rest}
38
- >
39
- {children}
40
- </Component>
41
- );
42
- });
30
+ /**
31
+ * Badges are used to label, categorize or organize items using keywords to describe them.
32
+ *
33
+ * @example
34
+ * <Badge variant="dark">Dark</Badge>
35
+ */
36
+ export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
37
+ ({ children, asChild, variant = "lighter", size = "small", className, ...rest }, ref) => {
38
+ const Component = asChild ? Slot : "span";
39
+ return (
40
+ <Component
41
+ ref={ref}
42
+ className={clsx(
43
+ "hds-badge",
44
+ `hds-badge--${size}`,
45
+ `hds-badge--${variant}`,
46
+ className as undefined,
47
+ )}
48
+ {...rest}
49
+ >
50
+ {children}
51
+ </Component>
52
+ );
53
+ },
54
+ );
43
55
  Badge.displayName = "Badge";
44
-
45
- export const LighterBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
46
- return <Badge {...props} ref={ref} variant="lighter" />;
47
- });
48
- LighterBadge.displayName = "LighterBadge";
49
-
50
- export const DarkBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
51
- return <Badge {...props} ref={ref} variant="dark" />;
52
- });
53
- DarkBadge.displayName = "DarkBadge";
54
-
55
- export const WhiteBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
56
- return <Badge {...props} ref={ref} variant="white" />;
57
- });
58
- WhiteBadge.displayName = "WhiteBadge";
59
-
60
- export const WarningBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
61
- return <Badge {...props} ref={ref} variant="warning" />;
62
- });
63
- WarningBadge.displayName = "WarningBadge";
@@ -1,3 +1,3 @@
1
- export { LighterBadge as Badge, DarkBadge, WarningBadge, WhiteBadge } from "./badge";
1
+ export { Badge } from "./badge";
2
2
 
3
3
  export type * from "./badge";
@@ -2,11 +2,11 @@
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
3
  import { HStack } from "../layout";
4
4
  import type { ButtonProps } from ".";
5
- import { PrimaryButton, SecondaryButton } from ".";
5
+ import { Button } from ".";
6
6
 
7
- const meta: Meta<typeof PrimaryButton> = {
7
+ const meta: Meta<typeof Button> = {
8
8
  title: "Button",
9
- component: PrimaryButton,
9
+ component: Button,
10
10
  argTypes: {
11
11
  fullWidth: { control: "radio", options: [false, true, "mobile"] },
12
12
  },
@@ -14,33 +14,33 @@ const meta: Meta<typeof PrimaryButton> = {
14
14
 
15
15
  export default meta;
16
16
 
17
- type Story = StoryObj<typeof PrimaryButton>;
17
+ type Story = StoryObj<typeof Button>;
18
18
 
19
19
  export const Primary: Story = {
20
20
  args: {
21
+ variant: "primary",
21
22
  children: "Primary button",
22
23
  },
23
24
  };
24
25
 
25
26
  export const PrimaryOutline: Story = {
26
27
  args: {
28
+ variant: "primary-outline",
27
29
  children: "Primary outline button",
28
- fill: "outline",
29
30
  },
30
31
  };
31
32
 
32
33
  export const Secondary: Story = {
33
34
  args: {
35
+ variant: "secondary",
34
36
  children: "Secondary button",
35
37
  },
36
- render: (props) => <SecondaryButton {...props} />,
37
38
  };
38
39
 
39
40
  export const SecondaryOutline: Story = {
40
- render: (props) => <SecondaryButton {...props} />,
41
41
  args: {
42
+ variant: "secondary-outline",
42
43
  children: "Secondary outline button",
43
- fill: "outline",
44
44
  },
45
45
  };
46
46
 
@@ -48,10 +48,10 @@ export const AsALink: Story = {
48
48
  name: "As a link",
49
49
  render: (args) => (
50
50
  <HStack gap="16" wrap>
51
- <PrimaryButton {...args} />
52
- <PrimaryButton {...args} fill="outline" />
53
- <SecondaryButton {...args} />
54
- <SecondaryButton {...args} fill="outline" />
51
+ <Button {...args} variant="primary" />
52
+ <Button {...args} variant="primary-outline" />
53
+ <Button {...args} variant="secondary" />
54
+ <Button {...args} variant="secondary-outline" />
55
55
  </HStack>
56
56
  ),
57
57
  args: {
@@ -65,7 +65,7 @@ export const AsALink: Story = {
65
65
  };
66
66
 
67
67
  const createIconStory = (
68
- Component: typeof PrimaryButton,
68
+ Component: typeof Button,
69
69
  extraArgs: Partial<ButtonProps> = {},
70
70
  ): Story => ({
71
71
  render: (args) => (
@@ -98,7 +98,9 @@ const createIconStory = (
98
98
  },
99
99
  });
100
100
 
101
- export const IconPrimary: Story = createIconStory(PrimaryButton);
102
- export const IconPrimaryOutline: Story = createIconStory(PrimaryButton, { fill: "outline" });
103
- export const IconSecondary: Story = createIconStory(SecondaryButton);
104
- export const IconSecondaryOutline: Story = createIconStory(SecondaryButton, { fill: "outline" });
101
+ export const IconPrimary: Story = createIconStory(Button, { variant: "secondary" });
102
+ export const IconPrimaryOutline: Story = createIconStory(Button, { variant: "primary-outline" });
103
+ export const IconSecondary: Story = createIconStory(Button, { variant: "secondary" });
104
+ export const IconSecondaryOutline: Story = createIconStory(Button, {
105
+ variant: "secondary-outline",
106
+ });
@@ -9,11 +9,11 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
9
9
  size?: "small" | "medium" | "large";
10
10
 
11
11
  /**
12
- * The background fill of the button
12
+ * The background and fill of the button
13
13
  *
14
- * @default "contained"
14
+ * @default "primary"
15
15
  */
16
- fill?: "contained" | "outline";
16
+ variant?: "primary" | "secondary" | "primary-outline" | "secondary-outline";
17
17
 
18
18
  /**
19
19
  * Make the button use 100% width available.
@@ -36,15 +36,27 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
36
36
  asChild?: boolean;
37
37
  }
38
38
 
39
- const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary" | "secondary" }>(
39
+ /**
40
+ * Button component
41
+ *
42
+ * @example
43
+ * <Button variant="primary">Primary</Button>
44
+ * <Button variant="secondary" size="large">Secondary</Button>
45
+ * <Button variant="primary-outline">Primary Outline</Button>
46
+ * <Button variant="secondary-outline" fullWidth="mobile">Secondary Outline</Button>
47
+ *
48
+ * @example
49
+ * // If used for navigation use the `asChild` prop with a anchor element as a child.
50
+ * <Button asChild><a href="/home">Home</a></Button>
51
+ */
52
+ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
40
53
  (
41
54
  {
42
55
  asChild,
43
56
  children,
44
- variant,
57
+ variant = "primary",
45
58
  size = "medium",
46
59
  fullWidth = false,
47
- fill = "contained",
48
60
  icon,
49
61
  className,
50
62
  ...rest
@@ -57,9 +69,8 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary"
57
69
  className={clsx(
58
70
  "hds-button",
59
71
  `hds-button--${size}`,
72
+ `hds-button--${variant}`,
60
73
  {
61
- [`hds-button--${variant}`]: fill === "contained",
62
- [`hds-button--outline-${variant}`]: fill === "outline",
63
74
  "hds-button--full": fullWidth === true,
64
75
  "hds-button--mobile-full": fullWidth === "mobile",
65
76
  "hds-button--icon-only": icon,
@@ -75,13 +86,3 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary"
75
86
  },
76
87
  );
77
88
  Button.displayName = "Button";
78
-
79
- export const PrimaryButton = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
80
- return <Button {...props} ref={ref} variant="primary" />;
81
- });
82
- PrimaryButton.displayName = "PrimaryButton";
83
-
84
- export const SecondaryButton = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
85
- return <Button {...props} ref={ref} variant="secondary" />;
86
- });
87
- SecondaryButton.displayName = "SecondaryButton";
@@ -1,3 +1,3 @@
1
- export { PrimaryButton, SecondaryButton } from "./button";
1
+ export { Button } from "./button";
2
2
 
3
3
  export type * from "./button";
@@ -3,7 +3,7 @@ import { clsx } from "@postenbring/hedwig-css/typed-classname";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
4
  import { Accordion } from "../accordion";
5
5
  import { LinkList } from "../list/link-list";
6
- import { PrimaryButton } from "../button";
6
+ import { Button } from "../button";
7
7
 
8
8
  interface FooterLogoProps extends HTMLAttributes<HTMLDivElement> {
9
9
  /**
@@ -47,11 +47,11 @@ export const FooterButtonLink = forwardRef<HTMLAnchorElement, FooterButtonLinkPr
47
47
  ({ children, className, asChild, ...rest }, ref) => {
48
48
  const Component = asChild ? Slot : "a";
49
49
  return (
50
- <PrimaryButton asChild fill="outline" className={clsx(className as undefined)}>
50
+ <Button asChild variant="primary-outline" className={clsx(className as undefined)}>
51
51
  <Component ref={ref} {...rest}>
52
52
  {children}
53
53
  </Component>
54
- </PrimaryButton>
54
+ </Button>
55
55
  );
56
56
  },
57
57
  );
@@ -1,7 +1,7 @@
1
1
  import { forwardRef, useRef, type InputHTMLAttributes } from "react";
2
2
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
3
3
  import { InputGroup, type InputGroupProps } from "../input-group";
4
- import { useMergeRefs } from "../../utils";
4
+ import { useMergeRefs } from "../../utils/utils";
5
5
 
6
6
  export type DatePickerProps = Omit<
7
7
  InputGroupProps & InputHTMLAttributes<HTMLInputElement>,