@postenbring/hedwig-react 0.0.64 → 0.0.66

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 (208) hide show
  1. package/dist/_tsup-dts-rollup.d.mts +301 -68
  2. package/dist/_tsup-dts-rollup.d.ts +301 -68
  3. package/dist/accordion/accordion-content.js +5 -9
  4. package/dist/accordion/accordion-content.js.map +1 -1
  5. package/dist/accordion/accordion-content.mjs +1 -1
  6. package/dist/accordion/accordion-header.js +6 -9
  7. package/dist/accordion/accordion-header.js.map +1 -1
  8. package/dist/accordion/accordion-header.mjs +1 -1
  9. package/dist/accordion/accordion-item.js +2 -7
  10. package/dist/accordion/accordion-item.js.map +1 -1
  11. package/dist/accordion/accordion-item.mjs +1 -1
  12. package/dist/accordion/index.js +13 -25
  13. package/dist/accordion/index.js.map +1 -1
  14. package/dist/accordion/index.mjs +4 -4
  15. package/dist/chunk-27XJO7E4.mjs +51 -0
  16. package/dist/chunk-27XJO7E4.mjs.map +1 -0
  17. package/dist/{chunk-POJTVNEO.mjs → chunk-2ICZ3Q7N.mjs} +1 -1
  18. package/dist/chunk-2ICZ3Q7N.mjs.map +1 -0
  19. package/dist/{chunk-H3VGHTDC.mjs → chunk-2JH4FG63.mjs} +2 -2
  20. package/dist/chunk-2JH4FG63.mjs.map +1 -0
  21. package/dist/{chunk-SAGJ5W7M.mjs → chunk-62F4I3MQ.mjs} +3 -8
  22. package/dist/{chunk-SAGJ5W7M.mjs.map → chunk-62F4I3MQ.mjs.map} +1 -1
  23. package/dist/{chunk-V4NGUB4I.mjs → chunk-6NGF7FFY.mjs} +2 -2
  24. package/dist/chunk-6NGF7FFY.mjs.map +1 -0
  25. package/dist/{chunk-BYDSISQZ.mjs → chunk-A47QULAK.mjs} +2 -2
  26. package/dist/{chunk-BYDSISQZ.mjs.map → chunk-A47QULAK.mjs.map} +1 -1
  27. package/dist/chunk-BZRCDLEW.mjs +118 -0
  28. package/dist/chunk-BZRCDLEW.mjs.map +1 -0
  29. package/dist/chunk-CLXHNRAI.mjs +104 -0
  30. package/dist/chunk-CLXHNRAI.mjs.map +1 -0
  31. package/dist/{chunk-37WVYY6X.mjs → chunk-DM4PJFLG.mjs} +6 -3
  32. package/dist/chunk-DM4PJFLG.mjs.map +1 -0
  33. package/dist/{chunk-KRGKVH5J.mjs → chunk-GUB3UCXO.mjs} +6 -10
  34. package/dist/chunk-GUB3UCXO.mjs.map +1 -0
  35. package/dist/{chunk-WGVZWX5L.mjs → chunk-HMB4TY2F.mjs} +14 -4
  36. package/dist/chunk-HMB4TY2F.mjs.map +1 -0
  37. package/dist/{chunk-5MDJP43L.mjs → chunk-IFGQR4J6.mjs} +10 -10
  38. package/dist/chunk-IFGQR4J6.mjs.map +1 -0
  39. package/dist/chunk-KQITCS3U.mjs +18 -0
  40. package/dist/chunk-KQITCS3U.mjs.map +1 -0
  41. package/dist/chunk-L4GQJETB.mjs +1 -0
  42. package/dist/{chunk-QSYU64U4.mjs → chunk-MRCE2Q7A.mjs} +2 -2
  43. package/dist/chunk-NE6W2PCD.mjs +9 -0
  44. package/dist/chunk-NE6W2PCD.mjs.map +1 -0
  45. package/dist/chunk-RHCMBJOT.mjs +76 -0
  46. package/dist/chunk-RHCMBJOT.mjs.map +1 -0
  47. package/dist/chunk-RXIP2JTE.mjs +19 -0
  48. package/dist/chunk-RXIP2JTE.mjs.map +1 -0
  49. package/dist/{chunk-EJADADIY.mjs → chunk-UWTGHSWT.mjs} +6 -9
  50. package/dist/chunk-UWTGHSWT.mjs.map +1 -0
  51. package/dist/{chunk-2E6XPNPX.mjs → chunk-X46LM2QH.mjs} +9 -6
  52. package/dist/chunk-X46LM2QH.mjs.map +1 -0
  53. package/dist/{chunk-DJRMXOCP.mjs → chunk-XIHKASNB.mjs} +4 -4
  54. package/dist/{chunk-MBBFU4IR.mjs → chunk-XVFQWVHO.mjs} +3 -9
  55. package/dist/{chunk-MBBFU4IR.mjs.map → chunk-XVFQWVHO.mjs.map} +1 -1
  56. package/dist/chunk-YWNVB7TY.mjs +1 -0
  57. package/dist/{chunk-FT5CX2W5.mjs → chunk-YXHXRUFX.mjs} +7 -10
  58. package/dist/chunk-YXHXRUFX.mjs.map +1 -0
  59. package/dist/chunk-ZTYEOZLK.mjs +18 -0
  60. package/dist/chunk-ZTYEOZLK.mjs.map +1 -0
  61. package/dist/footer/footer.d.mts +7 -0
  62. package/dist/footer/footer.d.ts +7 -0
  63. package/dist/footer/footer.js +401 -0
  64. package/dist/footer/footer.js.map +1 -0
  65. package/dist/footer/footer.mjs +26 -0
  66. package/dist/footer/footer.mjs.map +1 -0
  67. package/dist/footer/index.d.mts +7 -0
  68. package/dist/footer/index.d.ts +7 -0
  69. package/dist/footer/index.js +402 -0
  70. package/dist/footer/index.js.map +1 -0
  71. package/dist/footer/index.mjs +19 -0
  72. package/dist/footer/index.mjs.map +1 -0
  73. package/dist/form/checkbox/checkbox.js +122 -24
  74. package/dist/form/checkbox/checkbox.js.map +1 -1
  75. package/dist/form/checkbox/checkbox.mjs +5 -1
  76. package/dist/form/checkbox/index.js +122 -24
  77. package/dist/form/checkbox/index.js.map +1 -1
  78. package/dist/form/checkbox/index.mjs +5 -1
  79. package/dist/form/fieldset/fieldset.d.mts +1 -0
  80. package/dist/form/fieldset/fieldset.d.ts +1 -0
  81. package/dist/form/fieldset/fieldset.js +7 -3
  82. package/dist/form/fieldset/fieldset.js.map +1 -1
  83. package/dist/form/fieldset/fieldset.mjs +5 -3
  84. package/dist/form/fieldset/index.d.mts +1 -0
  85. package/dist/form/fieldset/index.d.ts +1 -0
  86. package/dist/form/fieldset/index.js +7 -3
  87. package/dist/form/fieldset/index.js.map +1 -1
  88. package/dist/form/fieldset/index.mjs +5 -3
  89. package/dist/form/index.d.mts +2 -1
  90. package/dist/form/index.d.ts +2 -1
  91. package/dist/form/index.js +68 -27
  92. package/dist/form/index.js.map +1 -1
  93. package/dist/form/index.mjs +20 -16
  94. package/dist/form/radiobutton/index.d.mts +1 -1
  95. package/dist/form/radiobutton/index.d.ts +1 -1
  96. package/dist/form/radiobutton/index.js +17 -8
  97. package/dist/form/radiobutton/index.js.map +1 -1
  98. package/dist/form/radiobutton/index.mjs +7 -5
  99. package/dist/form/radiobutton/radiobutton.js +13 -6
  100. package/dist/form/radiobutton/radiobutton.js.map +1 -1
  101. package/dist/form/radiobutton/radiobutton.mjs +3 -3
  102. package/dist/form/radiobutton/radiogroup.js +2 -1
  103. package/dist/form/radiobutton/radiogroup.js.map +1 -1
  104. package/dist/form/radiobutton/radiogroup.mjs +2 -2
  105. package/dist/index-no-css.d.mts +20 -7
  106. package/dist/index-no-css.d.ts +20 -7
  107. package/dist/index-no-css.js +537 -310
  108. package/dist/index-no-css.js.map +1 -1
  109. package/dist/index-no-css.mjs +100 -68
  110. package/dist/index.d.mts +20 -7
  111. package/dist/index.d.ts +20 -7
  112. package/dist/index.js +537 -310
  113. package/dist/index.js.map +1 -1
  114. package/dist/index.mjs +100 -68
  115. package/dist/index.mjs.map +1 -1
  116. package/dist/layout/index.d.mts +5 -1
  117. package/dist/layout/index.d.ts +5 -1
  118. package/dist/layout/index.js +62 -2
  119. package/dist/layout/index.js.map +1 -1
  120. package/dist/layout/index.mjs +12 -2
  121. package/dist/layout/responsive.d.mts +2 -0
  122. package/dist/layout/responsive.d.ts +2 -0
  123. package/dist/layout/responsive.js +42 -0
  124. package/dist/layout/responsive.js.map +1 -0
  125. package/dist/layout/responsive.mjs +8 -0
  126. package/dist/layout/responsive.mjs.map +1 -0
  127. package/dist/layout/spacing.d.mts +3 -0
  128. package/dist/layout/spacing.d.ts +3 -0
  129. package/dist/layout/spacing.js +33 -0
  130. package/dist/layout/spacing.js.map +1 -0
  131. package/dist/layout/spacing.mjs +8 -0
  132. package/dist/layout/spacing.mjs.map +1 -0
  133. package/dist/layout/stack/index.d.mts +4 -0
  134. package/dist/layout/stack/index.d.ts +4 -0
  135. package/dist/layout/stack/index.js +117 -0
  136. package/dist/layout/stack/index.js.map +1 -0
  137. package/dist/layout/stack/index.mjs +14 -0
  138. package/dist/layout/stack/index.mjs.map +1 -0
  139. package/dist/layout/stack/stack.d.mts +4 -0
  140. package/dist/layout/stack/stack.d.ts +4 -0
  141. package/dist/layout/stack/stack.js +115 -0
  142. package/dist/layout/stack/stack.js.map +1 -0
  143. package/dist/layout/stack/stack.mjs +14 -0
  144. package/dist/layout/stack/stack.mjs.map +1 -0
  145. package/dist/modal/index.js.map +1 -1
  146. package/dist/modal/index.mjs +2 -2
  147. package/dist/modal/modal.js.map +1 -1
  148. package/dist/modal/modal.mjs +1 -1
  149. package/dist/navbar/index.d.mts +1 -0
  150. package/dist/navbar/index.d.ts +1 -0
  151. package/dist/navbar/index.js +11 -7
  152. package/dist/navbar/index.js.map +1 -1
  153. package/dist/navbar/index.mjs +7 -4
  154. package/dist/navbar/navbar-expandable-menu.d.mts +1 -0
  155. package/dist/navbar/navbar-expandable-menu.d.ts +1 -0
  156. package/dist/navbar/navbar-expandable-menu.js +11 -7
  157. package/dist/navbar/navbar-expandable-menu.js.map +1 -1
  158. package/dist/navbar/navbar-expandable-menu.mjs +5 -3
  159. package/dist/skeleton/index.js +1 -1
  160. package/dist/skeleton/index.js.map +1 -1
  161. package/dist/skeleton/index.mjs +1 -1
  162. package/dist/skeleton/skeleton.js +1 -1
  163. package/dist/skeleton/skeleton.js.map +1 -1
  164. package/dist/skeleton/skeleton.mjs +1 -1
  165. package/dist/tabs/context.d.mts +1 -0
  166. package/dist/tabs/context.d.ts +1 -0
  167. package/dist/tabs/context.js +13 -8
  168. package/dist/tabs/context.js.map +1 -1
  169. package/dist/tabs/context.mjs +5 -3
  170. package/dist/tabs/index.d.mts +5 -5
  171. package/dist/tabs/index.d.ts +5 -5
  172. package/dist/tabs/index.js +59 -33
  173. package/dist/tabs/index.js.map +1 -1
  174. package/dist/tabs/index.mjs +16 -6
  175. package/dist/tabs/tabs-content.js +11 -11
  176. package/dist/tabs/tabs-content.js.map +1 -1
  177. package/dist/tabs/tabs-content.mjs +2 -2
  178. package/dist/tabs/tabs-list.d.mts +2 -2
  179. package/dist/tabs/tabs-list.d.ts +2 -2
  180. package/dist/tabs/tabs-list.js +49 -22
  181. package/dist/tabs/tabs-list.js.map +1 -1
  182. package/dist/tabs/tabs-list.mjs +6 -6
  183. package/dist/tabs/tabs.js +2 -14
  184. package/dist/tabs/tabs.js.map +1 -1
  185. package/dist/tabs/tabs.mjs +2 -2
  186. package/package.json +5 -5
  187. package/dist/chunk-2E6XPNPX.mjs.map +0 -1
  188. package/dist/chunk-33JD5XDW.mjs +0 -14
  189. package/dist/chunk-33JD5XDW.mjs.map +0 -1
  190. package/dist/chunk-37WVYY6X.mjs.map +0 -1
  191. package/dist/chunk-5MDJP43L.mjs.map +0 -1
  192. package/dist/chunk-EJADADIY.mjs.map +0 -1
  193. package/dist/chunk-FT5CX2W5.mjs.map +0 -1
  194. package/dist/chunk-H3VGHTDC.mjs.map +0 -1
  195. package/dist/chunk-H4GIHEB2.mjs +0 -1
  196. package/dist/chunk-KRGKVH5J.mjs.map +0 -1
  197. package/dist/chunk-OIQUYB26.mjs +0 -1
  198. package/dist/chunk-POJTVNEO.mjs.map +0 -1
  199. package/dist/chunk-PXHYOQPB.mjs +0 -42
  200. package/dist/chunk-PXHYOQPB.mjs.map +0 -1
  201. package/dist/chunk-V4NGUB4I.mjs.map +0 -1
  202. package/dist/chunk-WGVZWX5L.mjs.map +0 -1
  203. package/dist/chunk-XVZ44NGD.mjs +0 -80
  204. package/dist/chunk-XVZ44NGD.mjs.map +0 -1
  205. /package/dist/{chunk-H4GIHEB2.mjs.map → chunk-L4GQJETB.mjs.map} +0 -0
  206. /package/dist/{chunk-QSYU64U4.mjs.map → chunk-MRCE2Q7A.mjs.map} +0 -0
  207. /package/dist/{chunk-DJRMXOCP.mjs.map → chunk-XIHKASNB.mjs.map} +0 -0
  208. /package/dist/{chunk-OIQUYB26.mjs.map → chunk-YWNVB7TY.mjs.map} +0 -0
@@ -59,7 +59,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
59
59
  // src/tabs/index.tsx
60
60
  var tabs_exports = {};
61
61
  __export(tabs_exports, {
62
- Tabs: () => TabsComponent
62
+ Tabs: () => TabsComponent,
63
+ TabsContent: () => TabsContent,
64
+ TabsContents: () => TabsContents,
65
+ TabsList: () => TabsList,
66
+ TabsTab: () => TabsTab
63
67
  });
64
68
  module.exports = __toCommonJS(tabs_exports);
65
69
 
@@ -69,13 +73,16 @@ var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
69
73
 
70
74
  // src/tabs/context.ts
71
75
  var import_react = require("react");
72
- var TabsContext = (0, import_react.createContext)({
73
- mounted: false,
74
- activeTabId: void 0,
75
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling
76
- toggleActiveTabId: (tabId) => {
76
+ var TabsContext = (0, import_react.createContext)(null);
77
+ function useTabsContext() {
78
+ const context = (0, import_react.useContext)(TabsContext);
79
+ if (!context) {
80
+ throw new Error(
81
+ "Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?"
82
+ );
77
83
  }
78
- });
84
+ return context;
85
+ }
79
86
 
80
87
  // src/tabs/tabs.tsx
81
88
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -83,13 +90,7 @@ var Tabs = (0, import_react2.forwardRef)(
83
90
  (_a, ref) => {
84
91
  var _b = _a, { as: Component = "div", defaultTab, children } = _b, rest = __objRest(_b, ["as", "defaultTab", "children"]);
85
92
  const [activeTabId, setActiveTabId] = (0, import_react2.useState)(defaultTab);
86
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs"), ref }, rest), { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
- TabsContext.Provider,
88
- {
89
- value: { activeTabId, toggleActiveTabId: setActiveTabId, mounted: true },
90
- children
91
- }
92
- ) }));
93
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs"), ref }, rest), { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsContext.Provider, { value: { activeTabId, toggleActiveTabId: setActiveTabId }, children }) }));
93
94
  }
94
95
  );
95
96
  Tabs.displayName = "Tabs";
@@ -129,20 +130,47 @@ function useResize(ref) {
129
130
  var import_jsx_runtime2 = require("react/jsx-runtime");
130
131
  function TabsList(_a) {
131
132
  var _b = _a, { children, direction = "horizontal", className } = _b, rest = __objRest(_b, ["children", "direction", "className"]);
133
+ const { activeTabId } = useTabsContext();
132
134
  const tabsListRef = (0, import_react4.useRef)(null);
133
135
  const { width: tabsWidth } = useResize(tabsListRef);
134
136
  const { innerWidth } = window;
135
137
  const wideEnough = innerWidth >= tabsWidth;
138
+ const previousTabId = (0, import_react4.useRef)(activeTabId);
139
+ (0, import_react4.useEffect)(() => {
140
+ const tabList = tabsListRef.current;
141
+ const activeTab = tabList == null ? void 0 : tabList.querySelector(`[data-tabid="${activeTabId}"]`);
142
+ if (!activeTab || !tabList)
143
+ return;
144
+ const { offsetHeight: containerHeight, offsetWidth: containerWidth } = tabList;
145
+ const { offsetHeight, offsetWidth, offsetTop, offsetLeft } = activeTab;
146
+ const height = offsetHeight / containerHeight;
147
+ const width = offsetWidth / containerWidth;
148
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-height", String(height));
149
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-width", String(width));
150
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-top", `${offsetTop}px`);
151
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-left", `${offsetLeft}px`);
152
+ if (previousTabId.current !== activeTabId) {
153
+ tabsListRef.current.style.setProperty(
154
+ "--_hds-tabs-marker-animated-color",
155
+ "var(--_hds-tabs-marker-color)"
156
+ );
157
+ tabsListRef.current.style.setProperty(
158
+ "--_hds-tabs-marker-border-fallback-color",
159
+ "transparent"
160
+ );
161
+ }
162
+ previousTabId.current = activeTabId;
163
+ }, [activeTabId, innerWidth]);
136
164
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
137
165
  "div",
138
166
  __spreadProps(__spreadValues({
139
167
  className: (0, import_typed_classname2.clsx)(
140
- "hds-tabs--list",
168
+ "hds-tabs__list",
141
169
  direction === "horizontal" ? {
142
- [`hds-tabs--list-horizontal`]: wideEnough,
143
- "hds-tabs--list-vertical": !wideEnough
170
+ "hds-tabs__list--horizontal": wideEnough,
171
+ "hds-tabs__list--vertical": !wideEnough
144
172
  } : {
145
- "hds-tabs--list-vertical": true
173
+ "hds-tabs__list--vertical": true
146
174
  },
147
175
  className
148
176
  ),
@@ -154,13 +182,10 @@ function TabsList(_a) {
154
182
  );
155
183
  }
156
184
  TabsList.displayName = "Tabs.List";
157
- var Tab = (0, import_react4.forwardRef)(
185
+ var TabsTab = (0, import_react4.forwardRef)(
158
186
  (_a, ref) => {
159
187
  var _b = _a, { as: Component = "button", children, tabId, className, onClick } = _b, rest = __objRest(_b, ["as", "children", "tabId", "className", "onClick"]);
160
- const context = (0, import_react4.useContext)(TabsContext);
161
- if (!context.mounted) {
162
- throw new Error("Context required. Did you use <TabContent/> outside of <Tabs/>?");
163
- }
188
+ const context = useTabsContext();
164
189
  const toggleTab = (e) => {
165
190
  e.preventDefault();
166
191
  context.toggleActiveTabId(tabId);
@@ -170,8 +195,8 @@ var Tab = (0, import_react4.forwardRef)(
170
195
  Component,
171
196
  __spreadProps(__spreadValues({
172
197
  className: (0, import_typed_classname2.clsx)(
173
- "hds-tabs--tab",
174
- { "hds-tabs--tab-active": context.activeTabId === tabId },
198
+ "hds-tabs__tab",
199
+ { "hds-tabs__tab--active": context.activeTabId === tabId },
175
200
  className
176
201
  ),
177
202
  "data-tabid": tabId,
@@ -184,7 +209,7 @@ var Tab = (0, import_react4.forwardRef)(
184
209
  );
185
210
  }
186
211
  );
187
- Tab.displayName = "Tabs.Tab";
212
+ TabsTab.displayName = "Tabs.Tab";
188
213
 
189
214
  // src/tabs/tabs-content.tsx
190
215
  var import_react5 = require("react");
@@ -192,16 +217,13 @@ var import_typed_classname3 = require("@postenbring/hedwig-css/typed-classname")
192
217
  var import_jsx_runtime3 = require("react/jsx-runtime");
193
218
  function TabsContents(_a) {
194
219
  var _b = _a, { children } = _b, rest = __objRest(_b, ["children"]);
195
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", __spreadProps(__spreadValues({ className: (0, import_typed_classname3.clsx)("hds-tabs--contents") }, rest), { children }));
220
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", __spreadProps(__spreadValues({ className: (0, import_typed_classname3.clsx)("hds-tabs__contents") }, rest), { children }));
196
221
  }
197
222
  TabsContents.displayName = "Tabs.Contents";
198
223
  var TabsContent = (0, import_react5.forwardRef)(
199
224
  (_a, ref) => {
200
225
  var _b = _a, { as: Component = "div", forTabId, children } = _b, rest = __objRest(_b, ["as", "forTabId", "children"]);
201
- const context = (0, import_react5.useContext)(TabsContext);
202
- if (!context.mounted) {
203
- throw new Error("Context required. Did you use <Tabs.Content /> outside of <Tabs/>?");
204
- }
226
+ const context = useTabsContext();
205
227
  if (context.activeTabId === forTabId) {
206
228
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Component, __spreadProps(__spreadValues({}, rest), { ref, children }));
207
229
  }
@@ -213,11 +235,15 @@ TabsContent.displayName = "Tabs.Content";
213
235
  // src/tabs/index.tsx
214
236
  var TabsComponent = Tabs;
215
237
  TabsComponent.List = TabsList;
216
- TabsComponent.Tab = Tab;
238
+ TabsComponent.Tab = TabsTab;
217
239
  TabsComponent.Contents = TabsContents;
218
240
  TabsComponent.Content = TabsContent;
219
241
  // Annotate the CommonJS export names for ESM import in node:
220
242
  0 && (module.exports = {
221
- Tabs
243
+ Tabs,
244
+ TabsContent,
245
+ TabsContents,
246
+ TabsList,
247
+ TabsTab
222
248
  });
223
249
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/index.tsx","../../src/tabs/tabs.tsx","../../src/tabs/context.ts","../../src/tabs/tabs-list.tsx","../../src/utils.ts","../../src/tabs/tabs-content.tsx"],"sourcesContent":["import { Tabs } from \"./tabs\";\nimport { TabsList, Tab } from \"./tabs-list\";\nimport { TabsContents, TabsContent } from \"./tabs-content\";\n\nconst TabsComponent = Tabs as typeof Tabs & {\n List: typeof TabsList;\n Tab: typeof Tab;\n Contents: typeof TabsContents;\n Content: typeof TabsContent;\n};\nTabsComponent.List = TabsList;\nTabsComponent.Tab = Tab;\nTabsComponent.Contents = TabsContents;\nTabsComponent.Content = TabsContent;\n\nexport { TabsComponent as Tabs };\n\nexport type * from \"./tabs\";\nexport type * from \"./tabs-list\";\nexport type * from \"./tabs-content\";\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\nimport type { TabContentsProps } from \"./tabs-content\";\nimport type { TabListProps } from \"./tabs-list\";\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<TabListProps | TabContentsProps>[] | ReactElement;\n\n /**\n * Define which tab to use as default. Must be one of the <Tab/>s identifier.\n */\n defaultTab: string;\n}\n\nexport const Tabs: OverridableComponent<TabsProps, HTMLDivElement> = forwardRef(\n ({ as: Component = \"div\", defaultTab, children, ...rest }, ref) => {\n const [activeTabId, setActiveTabId] = useState<string>(defaultTab);\n return (\n <Component className={clsx(\"hds-tabs\")} ref={ref} {...rest}>\n <TabsContext.Provider\n value={{ activeTabId, toggleActiveTabId: setActiveTabId, mounted: true }}\n >\n {children}\n </TabsContext.Provider>\n </Component>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { createContext } from \"react\";\n\nexport interface TabsContextProps {\n mounted: boolean;\n activeTabId?: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps>({\n mounted: false,\n activeTabId: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling\n toggleActiveTabId: (tabId: string) => {\n // default\n },\n});\n","import type { HTMLAttributes, ReactElement, MouseEvent } from \"react\";\nimport { forwardRef, useContext, useRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { type OverridableComponent, useResize } from \"../utils\";\nimport { TabsContext } from \"./context\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabProps> | ReactElement<TabProps>[];\n\n /**\n * Direction of the tabs. Can either be vertical or horizontal.\n * Horizontal breaks on window width with fallback back to vertical\n */\n direction?: \"vertical\" | \"horizontal\";\n}\n\nexport function TabsList({ children, direction = \"horizontal\", className, ...rest }: TabListProps) {\n const tabsListRef = useRef<HTMLDivElement>(null);\n const { width: tabsWidth } = useResize(tabsListRef);\n const { innerWidth } = window;\n const wideEnough = innerWidth >= tabsWidth;\n return (\n <div\n className={clsx(\n \"hds-tabs--list\",\n direction === \"horizontal\"\n ? {\n [`hds-tabs--list-horizontal`]: wideEnough,\n \"hds-tabs--list-vertical\": !wideEnough,\n }\n : {\n \"hds-tabs--list-vertical\": true,\n },\n className as undefined,\n )}\n ref={tabsListRef}\n role=\"tablist\"\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nTabsList.displayName = \"Tabs.List\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactElement<HTMLElement> | string;\n\n /**\n * Identifier for the tab\n */\n tabId: string;\n}\n\nexport const Tab: OverridableComponent<TabProps, HTMLButtonElement> = forwardRef(\n ({ as: Component = \"button\", children, tabId, className, onClick, ...rest }, ref) => {\n const context = useContext(TabsContext);\n if (!context.mounted) {\n throw new Error(\"Context required. Did you use <TabContent/> outside of <Tabs/>?\");\n }\n const toggleTab = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n context.toggleActiveTabId(tabId);\n onClick && onClick(e);\n };\n return (\n <Component\n className={clsx(\n \"hds-tabs--tab\",\n { \"hds-tabs--tab-active\": context.activeTabId === tabId },\n className as undefined,\n )}\n data-tabid={tabId}\n onClick={toggleTab}\n ref={ref}\n role=\"tab\"\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nTab.displayName = \"Tabs.Tab\";\n","import type { ComponentPropsWithRef, ElementType, FC, RefAttributes } from \"react\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * OverridableComponent makes the `as` prop available,\n * to be used to override the html element being used for a component\n *\n * Taken from digdir design system: https://github.com/digdir/designsystem/blob/main/packages/react/src/types/OverridableComponent.ts\n */\nexport type OverridableComponent<ComponentProps, Element extends HTMLElement> = {\n (props: ComponentProps & RefAttributes<Element>): ReturnType<FC>;\n\n <As extends ElementType>(\n props: {\n /** Override html element */\n as?: As;\n } & ComponentProps &\n Omit<ComponentPropsWithRef<As>, keyof ComponentProps>,\n ): ReturnType<FC>;\n} & Pick<FC, \"displayName\">;\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","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\n\nexport interface TabContentsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsContentProps> | ReactElement<TabsContentProps>[];\n}\n\nexport function TabsContents({ children, ...rest }: TabContentsProps) {\n return (\n <div className={clsx(\"hds-tabs--contents\")} {...rest}>\n {children}\n </div>\n );\n}\nTabsContents.displayName = \"Tabs.Contents\";\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<HTMLElement> | ReactElement<HTMLElement>[] | string;\n\n /**\n * Content for the referenced tabId\n */\n forTabId: string;\n}\n\nexport const TabsContent: OverridableComponent<TabsContentProps, HTMLElement> = forwardRef(\n ({ as: Component = \"div\", forTabId, children, ...rest }, ref) => {\n const context = useContext(TabsContext);\n if (!context.mounted) {\n throw new Error(\"Context required. Did you use <Tabs.Content /> outside of <Tabs/>?\");\n }\n if (context.activeTabId === forTabId) {\n return (\n <Component {...rest} ref={ref}>\n {children}\n </Component>\n );\n }\n return null;\n },\n);\n\nTabsContent.displayName = \"Tabs.Content\";\n"],"mappings":"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","names":["import_react","import_react","import_typed_classname","import_react","import_jsx_runtime","import_react","import_typed_classname","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/tabs/index.tsx","../../src/tabs/tabs.tsx","../../src/tabs/context.ts","../../src/tabs/tabs-list.tsx","../../src/utils.ts","../../src/tabs/tabs-content.tsx"],"sourcesContent":["import { Tabs } from \"./tabs\";\nimport { TabsList, TabsTab } from \"./tabs-list\";\nimport { TabsContents, TabsContent } from \"./tabs-content\";\n\nconst TabsComponent = Tabs as typeof Tabs & {\n List: typeof TabsList;\n Tab: typeof TabsTab;\n Contents: typeof TabsContents;\n Content: typeof TabsContent;\n};\nTabsComponent.List = TabsList;\nTabsComponent.Tab = TabsTab;\nTabsComponent.Contents = TabsContents;\nTabsComponent.Content = TabsContent;\n\nexport { TabsComponent as Tabs, TabsList, TabsTab, TabsContents, TabsContent };\n\nexport type * from \"./tabs\";\nexport type * from \"./tabs-list\";\nexport type * from \"./tabs-content\";\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\nimport type { TabContentsProps } from \"./tabs-content\";\nimport type { TabListProps } from \"./tabs-list\";\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<TabListProps | TabContentsProps>[] | ReactElement;\n\n /**\n * Define which tab to use as default. Must be one of the <Tab/>s identifier.\n */\n defaultTab: string;\n}\n\nexport const Tabs: OverridableComponent<TabsProps, HTMLDivElement> = forwardRef(\n ({ as: Component = \"div\", defaultTab, children, ...rest }, ref) => {\n const [activeTabId, setActiveTabId] = useState<string>(defaultTab);\n return (\n <Component className={clsx(\"hds-tabs\")} ref={ref} {...rest}>\n <TabsContext.Provider value={{ activeTabId, toggleActiveTabId: setActiveTabId }}>\n {children}\n </TabsContext.Provider>\n </Component>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { createContext, useContext } from \"react\";\n\nexport interface TabsContextProps {\n activeTabId: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?\",\n );\n }\n return context;\n}\n","import type { HTMLAttributes, ReactElement, MouseEvent } from \"react\";\nimport { forwardRef, useEffect, useRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { type OverridableComponent, useResize } from \"../utils\";\nimport { useTabsContext } from \"./context\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsTabProps> | ReactElement<TabsTabProps>[];\n\n /**\n * Direction of the tabs. Can either be vertical or horizontal.\n * Horizontal breaks on window width with fallback back to vertical\n */\n direction?: \"vertical\" | \"horizontal\";\n}\n\nexport function TabsList({ children, direction = \"horizontal\", className, ...rest }: TabListProps) {\n const { activeTabId } = useTabsContext();\n const tabsListRef = useRef<HTMLDivElement>(null);\n const { width: tabsWidth } = useResize(tabsListRef);\n const { innerWidth } = window;\n const wideEnough = innerWidth >= tabsWidth;\n\n const previousTabId = useRef(activeTabId);\n\n // Marker animation\n useEffect(() => {\n const tabList = tabsListRef.current;\n const activeTab = tabList?.querySelector(`[data-tabid=\"${activeTabId}\"]`);\n if (!activeTab || !tabList) return;\n\n const { offsetHeight: containerHeight, offsetWidth: containerWidth } = tabList;\n const { offsetHeight, offsetWidth, offsetTop, offsetLeft } = activeTab as HTMLElement;\n\n // Calculate the height and width of the marker relative to the container\n const height = offsetHeight / containerHeight;\n const width = offsetWidth / containerWidth;\n\n // NOTE: Doing a DOM manipulation here to set the CSS variables for the marker\n // Not really the react idomatic way, but as long as it works we are able to skip some intermidiate `useState`\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-height\", String(height));\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-width\", String(width));\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-top\", `${offsetTop}px`);\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-left\", `${offsetLeft}px`);\n\n // Start with border fallback, then switch to the animated marker when the user changes tabs\n // This way the marker is placed immediately to the default tab, then animates smoothly to the next when selected\n if (previousTabId.current !== activeTabId) {\n tabsListRef.current.style.setProperty(\n \"--_hds-tabs-marker-animated-color\",\n \"var(--_hds-tabs-marker-color)\",\n );\n tabsListRef.current.style.setProperty(\n \"--_hds-tabs-marker-border-fallback-color\",\n \"transparent\",\n );\n }\n previousTabId.current = activeTabId;\n }, [activeTabId, innerWidth]);\n\n return (\n <div\n className={clsx(\n \"hds-tabs__list\",\n direction === \"horizontal\"\n ? {\n \"hds-tabs__list--horizontal\": wideEnough,\n \"hds-tabs__list--vertical\": !wideEnough,\n }\n : {\n \"hds-tabs__list--vertical\": true,\n },\n className as undefined,\n )}\n ref={tabsListRef}\n role=\"tablist\"\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nTabsList.displayName = \"Tabs.List\";\n\nexport interface TabsTabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactElement<HTMLElement> | string;\n\n /**\n * Identifier for the tab\n */\n tabId: string;\n}\n\nexport const TabsTab: OverridableComponent<TabsTabProps, HTMLButtonElement> = forwardRef(\n ({ as: Component = \"button\", children, tabId, className, onClick, ...rest }, ref) => {\n const context = useTabsContext();\n\n const toggleTab = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n context.toggleActiveTabId(tabId);\n onClick && onClick(e);\n };\n return (\n <Component\n className={clsx(\n \"hds-tabs__tab\",\n { \"hds-tabs__tab--active\": context.activeTabId === tabId },\n className as undefined,\n )}\n data-tabid={tabId}\n onClick={toggleTab}\n ref={ref}\n role=\"tab\"\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nTabsTab.displayName = \"Tabs.Tab\";\n","import type { ComponentPropsWithRef, ElementType, FC, RefAttributes } from \"react\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * OverridableComponent makes the `as` prop available,\n * to be used to override the html element being used for a component\n *\n * Taken from digdir design system: https://github.com/digdir/designsystem/blob/main/packages/react/src/types/OverridableComponent.ts\n */\nexport type OverridableComponent<ComponentProps, Element extends HTMLElement> = {\n (props: ComponentProps & RefAttributes<Element>): ReturnType<FC>;\n\n <As extends ElementType>(\n props: {\n /** Override html element */\n as?: As;\n } & ComponentProps &\n Omit<ComponentPropsWithRef<As>, keyof ComponentProps>,\n ): ReturnType<FC>;\n} & Pick<FC, \"displayName\">;\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","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { useTabsContext } from \"./context\";\n\nexport interface TabContentsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsContentProps> | ReactElement<TabsContentProps>[];\n}\n\nexport function TabsContents({ children, ...rest }: TabContentsProps) {\n return (\n <div className={clsx(\"hds-tabs__contents\")} {...rest}>\n {children}\n </div>\n );\n}\nTabsContents.displayName = \"Tabs.Contents\";\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<HTMLElement> | ReactElement<HTMLElement>[] | string;\n\n /**\n * Content for the referenced tabId\n */\n forTabId: string;\n}\n\nexport const TabsContent: OverridableComponent<TabsContentProps, HTMLElement> = forwardRef(\n ({ as: Component = \"div\", forTabId, children, ...rest }, ref) => {\n const context = useTabsContext();\n\n if (context.activeTabId === forTabId) {\n return (\n <Component {...rest} ref={ref}>\n {children}\n </Component>\n );\n }\n return null;\n },\n);\n\nTabsContent.displayName = \"Tabs.Content\";\n"],"mappings":"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","names":["import_react","import_react","import_typed_classname","import_react","import_jsx_runtime","import_react","import_typed_classname","import_jsx_runtime"]}
@@ -1,13 +1,23 @@
1
1
  import {
2
2
  TabsComponent
3
- } from "../chunk-5MDJP43L.mjs";
4
- import "../chunk-XVZ44NGD.mjs";
5
- import "../chunk-MBBFU4IR.mjs";
6
- import "../chunk-EJADADIY.mjs";
3
+ } from "../chunk-IFGQR4J6.mjs";
4
+ import {
5
+ TabsContent,
6
+ TabsContents
7
+ } from "../chunk-UWTGHSWT.mjs";
8
+ import {
9
+ TabsList,
10
+ TabsTab
11
+ } from "../chunk-CLXHNRAI.mjs";
12
+ import "../chunk-XVFQWVHO.mjs";
13
+ import "../chunk-KQITCS3U.mjs";
7
14
  import "../chunk-WCA2WPFS.mjs";
8
- import "../chunk-33JD5XDW.mjs";
9
15
  import "../chunk-R4SQKVDQ.mjs";
10
16
  export {
11
- TabsComponent as Tabs
17
+ TabsComponent as Tabs,
18
+ TabsContent,
19
+ TabsContents,
20
+ TabsList,
21
+ TabsTab
12
22
  };
13
23
  //# sourceMappingURL=index.mjs.map
@@ -58,28 +58,28 @@ var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
58
58
 
59
59
  // src/tabs/context.ts
60
60
  var import_react = require("react");
61
- var TabsContext = (0, import_react.createContext)({
62
- mounted: false,
63
- activeTabId: void 0,
64
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling
65
- toggleActiveTabId: (tabId) => {
61
+ var TabsContext = (0, import_react.createContext)(null);
62
+ function useTabsContext() {
63
+ const context = (0, import_react.useContext)(TabsContext);
64
+ if (!context) {
65
+ throw new Error(
66
+ "Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?"
67
+ );
66
68
  }
67
- });
69
+ return context;
70
+ }
68
71
 
69
72
  // src/tabs/tabs-content.tsx
70
73
  var import_jsx_runtime = require("react/jsx-runtime");
71
74
  function TabsContents(_a) {
72
75
  var _b = _a, { children } = _b, rest = __objRest(_b, ["children"]);
73
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs--contents") }, rest), { children }));
76
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs__contents") }, rest), { children }));
74
77
  }
75
78
  TabsContents.displayName = "Tabs.Contents";
76
79
  var TabsContent = (0, import_react2.forwardRef)(
77
80
  (_a, ref) => {
78
81
  var _b = _a, { as: Component = "div", forTabId, children } = _b, rest = __objRest(_b, ["as", "forTabId", "children"]);
79
- const context = (0, import_react2.useContext)(TabsContext);
80
- if (!context.mounted) {
81
- throw new Error("Context required. Did you use <Tabs.Content /> outside of <Tabs/>?");
82
- }
82
+ const context = useTabsContext();
83
83
  if (context.activeTabId === forTabId) {
84
84
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, __spreadProps(__spreadValues({}, rest), { ref, children }));
85
85
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/tabs-content.tsx","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\n\nexport interface TabContentsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsContentProps> | ReactElement<TabsContentProps>[];\n}\n\nexport function TabsContents({ children, ...rest }: TabContentsProps) {\n return (\n <div className={clsx(\"hds-tabs--contents\")} {...rest}>\n {children}\n </div>\n );\n}\nTabsContents.displayName = \"Tabs.Contents\";\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<HTMLElement> | ReactElement<HTMLElement>[] | string;\n\n /**\n * Content for the referenced tabId\n */\n forTabId: string;\n}\n\nexport const TabsContent: OverridableComponent<TabsContentProps, HTMLElement> = forwardRef(\n ({ as: Component = \"div\", forTabId, children, ...rest }, ref) => {\n const context = useContext(TabsContext);\n if (!context.mounted) {\n throw new Error(\"Context required. Did you use <Tabs.Content /> outside of <Tabs/>?\");\n }\n if (context.activeTabId === forTabId) {\n return (\n <Component {...rest} ref={ref}>\n {children}\n </Component>\n );\n }\n return null;\n },\n);\n\nTabsContent.displayName = \"Tabs.Content\";\n","import { createContext } from \"react\";\n\nexport interface TabsContextProps {\n mounted: boolean;\n activeTabId?: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps>({\n mounted: false,\n activeTabId: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling\n toggleActiveTabId: (tabId: string) => {\n // default\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAAuC;AACvC,6BAAqB;;;ACFrB,mBAA8B;AAQvB,IAAM,kBAAc,4BAAgC;AAAA,EACzD,SAAS;AAAA,EACT,aAAa;AAAA;AAAA,EAEb,mBAAmB,CAAC,UAAkB;AAAA,EAEtC;AACF,CAAC;;;ADHG;AAFG,SAAS,aAAa,IAAyC;AAAzC,eAAE,WAV/B,IAU6B,IAAe,iBAAf,IAAe,CAAb;AAC7B,SACE,4CAAC,sCAAI,eAAW,6BAAK,oBAAoB,KAAO,OAA/C,EACE,WACH;AAEJ;AACA,aAAa,cAAc;AAWpB,IAAM,kBAAmE;AAAA,EAC9E,CAAC,IAAwD,QAAQ;AAAhE,iBAAE,MAAI,YAAY,OAAO,UAAU,SA7BtC,IA6BG,IAAgD,iBAAhD,IAAgD,CAA9C,MAAuB,YAAU;AAClC,UAAM,cAAU,0BAAW,WAAW;AACtC,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AACA,QAAI,QAAQ,gBAAgB,UAAU;AACpC,aACE,4CAAC,4CAAc,OAAd,EAAoB,KAClB,WACH;AAAA,IAEJ;AACA,WAAO;AAAA,EACT;AACF;AAEA,YAAY,cAAc;","names":["import_react"]}
1
+ {"version":3,"sources":["../../src/tabs/tabs-content.tsx","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { useTabsContext } from \"./context\";\n\nexport interface TabContentsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsContentProps> | ReactElement<TabsContentProps>[];\n}\n\nexport function TabsContents({ children, ...rest }: TabContentsProps) {\n return (\n <div className={clsx(\"hds-tabs__contents\")} {...rest}>\n {children}\n </div>\n );\n}\nTabsContents.displayName = \"Tabs.Contents\";\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<HTMLElement> | ReactElement<HTMLElement>[] | string;\n\n /**\n * Content for the referenced tabId\n */\n forTabId: string;\n}\n\nexport const TabsContent: OverridableComponent<TabsContentProps, HTMLElement> = forwardRef(\n ({ as: Component = \"div\", forTabId, children, ...rest }, ref) => {\n const context = useTabsContext();\n\n if (context.activeTabId === forTabId) {\n return (\n <Component {...rest} ref={ref}>\n {children}\n </Component>\n );\n }\n return null;\n },\n);\n\nTabsContent.displayName = \"Tabs.Content\";\n","import { createContext, useContext } from \"react\";\n\nexport interface TabsContextProps {\n activeTabId: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?\",\n );\n }\n return context;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAA2B;AAC3B,6BAAqB;;;ACFrB,mBAA0C;AAOnC,IAAM,kBAAc,4BAAuC,IAAI;AAE/D,SAAS,iBAAiB;AAC/B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ADLI;AAFG,SAAS,aAAa,IAAyC;AAAzC,eAAE,WAV/B,IAU6B,IAAe,iBAAf,IAAe,CAAb;AAC7B,SACE,4CAAC,sCAAI,eAAW,6BAAK,oBAAoB,KAAO,OAA/C,EACE,WACH;AAEJ;AACA,aAAa,cAAc;AAWpB,IAAM,kBAAmE;AAAA,EAC9E,CAAC,IAAwD,QAAQ;AAAhE,iBAAE,MAAI,YAAY,OAAO,UAAU,SA7BtC,IA6BG,IAAgD,iBAAhD,IAAgD,CAA9C,MAAuB,YAAU;AAClC,UAAM,UAAU,eAAe;AAE/B,QAAI,QAAQ,gBAAgB,UAAU;AACpC,aACE,4CAAC,4CAAc,OAAd,EAAoB,KAClB,WACH;AAAA,IAEJ;AACA,WAAO;AAAA,EACT;AACF;AAEA,YAAY,cAAc;","names":["import_react"]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  TabsContent,
3
3
  TabsContents
4
- } from "../chunk-EJADADIY.mjs";
5
- import "../chunk-33JD5XDW.mjs";
4
+ } from "../chunk-UWTGHSWT.mjs";
5
+ import "../chunk-KQITCS3U.mjs";
6
6
  import "../chunk-R4SQKVDQ.mjs";
7
7
  export {
8
8
  TabsContent,
@@ -1,4 +1,4 @@
1
1
  export { TabsList_alias_3 as TabsList } from '../_tsup-dts-rollup';
2
2
  export { TabListProps_alias_3 as TabListProps } from '../_tsup-dts-rollup';
3
- export { TabProps_alias_3 as TabProps } from '../_tsup-dts-rollup';
4
- export { Tab_alias_3 as Tab } from '../_tsup-dts-rollup';
3
+ export { TabsTabProps_alias_3 as TabsTabProps } from '../_tsup-dts-rollup';
4
+ export { TabsTab_alias_3 as TabsTab } from '../_tsup-dts-rollup';
@@ -1,4 +1,4 @@
1
1
  export { TabsList_alias_3 as TabsList } from '../_tsup-dts-rollup';
2
2
  export { TabListProps_alias_3 as TabListProps } from '../_tsup-dts-rollup';
3
- export { TabProps_alias_3 as TabProps } from '../_tsup-dts-rollup';
4
- export { Tab_alias_3 as Tab } from '../_tsup-dts-rollup';
3
+ export { TabsTabProps_alias_3 as TabsTabProps } from '../_tsup-dts-rollup';
4
+ export { TabsTab_alias_3 as TabsTab } from '../_tsup-dts-rollup';
@@ -59,8 +59,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
59
59
  // src/tabs/tabs-list.tsx
60
60
  var tabs_list_exports = {};
61
61
  __export(tabs_list_exports, {
62
- Tab: () => Tab,
63
- TabsList: () => TabsList
62
+ TabsList: () => TabsList,
63
+ TabsTab: () => TabsTab
64
64
  });
65
65
  module.exports = __toCommonJS(tabs_list_exports);
66
66
  var import_react3 = require("react");
@@ -95,32 +95,62 @@ function useResize(ref) {
95
95
 
96
96
  // src/tabs/context.ts
97
97
  var import_react2 = require("react");
98
- var TabsContext = (0, import_react2.createContext)({
99
- mounted: false,
100
- activeTabId: void 0,
101
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling
102
- toggleActiveTabId: (tabId) => {
98
+ var TabsContext = (0, import_react2.createContext)(null);
99
+ function useTabsContext() {
100
+ const context = (0, import_react2.useContext)(TabsContext);
101
+ if (!context) {
102
+ throw new Error(
103
+ "Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?"
104
+ );
103
105
  }
104
- });
106
+ return context;
107
+ }
105
108
 
106
109
  // src/tabs/tabs-list.tsx
107
110
  var import_jsx_runtime = require("react/jsx-runtime");
108
111
  function TabsList(_a) {
109
112
  var _b = _a, { children, direction = "horizontal", className } = _b, rest = __objRest(_b, ["children", "direction", "className"]);
113
+ const { activeTabId } = useTabsContext();
110
114
  const tabsListRef = (0, import_react3.useRef)(null);
111
115
  const { width: tabsWidth } = useResize(tabsListRef);
112
116
  const { innerWidth } = window;
113
117
  const wideEnough = innerWidth >= tabsWidth;
118
+ const previousTabId = (0, import_react3.useRef)(activeTabId);
119
+ (0, import_react3.useEffect)(() => {
120
+ const tabList = tabsListRef.current;
121
+ const activeTab = tabList == null ? void 0 : tabList.querySelector(`[data-tabid="${activeTabId}"]`);
122
+ if (!activeTab || !tabList)
123
+ return;
124
+ const { offsetHeight: containerHeight, offsetWidth: containerWidth } = tabList;
125
+ const { offsetHeight, offsetWidth, offsetTop, offsetLeft } = activeTab;
126
+ const height = offsetHeight / containerHeight;
127
+ const width = offsetWidth / containerWidth;
128
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-height", String(height));
129
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-width", String(width));
130
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-top", `${offsetTop}px`);
131
+ tabsListRef.current.style.setProperty("--_hds-tabs-marker-left", `${offsetLeft}px`);
132
+ if (previousTabId.current !== activeTabId) {
133
+ tabsListRef.current.style.setProperty(
134
+ "--_hds-tabs-marker-animated-color",
135
+ "var(--_hds-tabs-marker-color)"
136
+ );
137
+ tabsListRef.current.style.setProperty(
138
+ "--_hds-tabs-marker-border-fallback-color",
139
+ "transparent"
140
+ );
141
+ }
142
+ previousTabId.current = activeTabId;
143
+ }, [activeTabId, innerWidth]);
114
144
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
115
145
  "div",
116
146
  __spreadProps(__spreadValues({
117
147
  className: (0, import_typed_classname.clsx)(
118
- "hds-tabs--list",
148
+ "hds-tabs__list",
119
149
  direction === "horizontal" ? {
120
- [`hds-tabs--list-horizontal`]: wideEnough,
121
- "hds-tabs--list-vertical": !wideEnough
150
+ "hds-tabs__list--horizontal": wideEnough,
151
+ "hds-tabs__list--vertical": !wideEnough
122
152
  } : {
123
- "hds-tabs--list-vertical": true
153
+ "hds-tabs__list--vertical": true
124
154
  },
125
155
  className
126
156
  ),
@@ -132,13 +162,10 @@ function TabsList(_a) {
132
162
  );
133
163
  }
134
164
  TabsList.displayName = "Tabs.List";
135
- var Tab = (0, import_react3.forwardRef)(
165
+ var TabsTab = (0, import_react3.forwardRef)(
136
166
  (_a, ref) => {
137
167
  var _b = _a, { as: Component = "button", children, tabId, className, onClick } = _b, rest = __objRest(_b, ["as", "children", "tabId", "className", "onClick"]);
138
- const context = (0, import_react3.useContext)(TabsContext);
139
- if (!context.mounted) {
140
- throw new Error("Context required. Did you use <TabContent/> outside of <Tabs/>?");
141
- }
168
+ const context = useTabsContext();
142
169
  const toggleTab = (e) => {
143
170
  e.preventDefault();
144
171
  context.toggleActiveTabId(tabId);
@@ -148,8 +175,8 @@ var Tab = (0, import_react3.forwardRef)(
148
175
  Component,
149
176
  __spreadProps(__spreadValues({
150
177
  className: (0, import_typed_classname.clsx)(
151
- "hds-tabs--tab",
152
- { "hds-tabs--tab-active": context.activeTabId === tabId },
178
+ "hds-tabs__tab",
179
+ { "hds-tabs__tab--active": context.activeTabId === tabId },
153
180
  className
154
181
  ),
155
182
  "data-tabid": tabId,
@@ -162,10 +189,10 @@ var Tab = (0, import_react3.forwardRef)(
162
189
  );
163
190
  }
164
191
  );
165
- Tab.displayName = "Tabs.Tab";
192
+ TabsTab.displayName = "Tabs.Tab";
166
193
  // Annotate the CommonJS export names for ESM import in node:
167
194
  0 && (module.exports = {
168
- Tab,
169
- TabsList
195
+ TabsList,
196
+ TabsTab
170
197
  });
171
198
  //# sourceMappingURL=tabs-list.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/tabs-list.tsx","../../src/utils.ts","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement, MouseEvent } from \"react\";\nimport { forwardRef, useContext, useRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { type OverridableComponent, useResize } from \"../utils\";\nimport { TabsContext } from \"./context\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabProps> | ReactElement<TabProps>[];\n\n /**\n * Direction of the tabs. Can either be vertical or horizontal.\n * Horizontal breaks on window width with fallback back to vertical\n */\n direction?: \"vertical\" | \"horizontal\";\n}\n\nexport function TabsList({ children, direction = \"horizontal\", className, ...rest }: TabListProps) {\n const tabsListRef = useRef<HTMLDivElement>(null);\n const { width: tabsWidth } = useResize(tabsListRef);\n const { innerWidth } = window;\n const wideEnough = innerWidth >= tabsWidth;\n return (\n <div\n className={clsx(\n \"hds-tabs--list\",\n direction === \"horizontal\"\n ? {\n [`hds-tabs--list-horizontal`]: wideEnough,\n \"hds-tabs--list-vertical\": !wideEnough,\n }\n : {\n \"hds-tabs--list-vertical\": true,\n },\n className as undefined,\n )}\n ref={tabsListRef}\n role=\"tablist\"\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nTabsList.displayName = \"Tabs.List\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactElement<HTMLElement> | string;\n\n /**\n * Identifier for the tab\n */\n tabId: string;\n}\n\nexport const Tab: OverridableComponent<TabProps, HTMLButtonElement> = forwardRef(\n ({ as: Component = \"button\", children, tabId, className, onClick, ...rest }, ref) => {\n const context = useContext(TabsContext);\n if (!context.mounted) {\n throw new Error(\"Context required. Did you use <TabContent/> outside of <Tabs/>?\");\n }\n const toggleTab = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n context.toggleActiveTabId(tabId);\n onClick && onClick(e);\n };\n return (\n <Component\n className={clsx(\n \"hds-tabs--tab\",\n { \"hds-tabs--tab-active\": context.activeTabId === tabId },\n className as undefined,\n )}\n data-tabid={tabId}\n onClick={toggleTab}\n ref={ref}\n role=\"tab\"\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nTab.displayName = \"Tabs.Tab\";\n","import type { ComponentPropsWithRef, ElementType, FC, RefAttributes } from \"react\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * OverridableComponent makes the `as` prop available,\n * to be used to override the html element being used for a component\n *\n * Taken from digdir design system: https://github.com/digdir/designsystem/blob/main/packages/react/src/types/OverridableComponent.ts\n */\nexport type OverridableComponent<ComponentProps, Element extends HTMLElement> = {\n (props: ComponentProps & RefAttributes<Element>): ReturnType<FC>;\n\n <As extends ElementType>(\n props: {\n /** Override html element */\n as?: As;\n } & ComponentProps &\n Omit<ComponentPropsWithRef<As>, keyof ComponentProps>,\n ): ReturnType<FC>;\n} & Pick<FC, \"displayName\">;\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","import { createContext } from \"react\";\n\nexport interface TabsContextProps {\n mounted: boolean;\n activeTabId?: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps>({\n mounted: false,\n activeTabId: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling\n toggleActiveTabId: (tabId: string) => {\n // default\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAA+C;AAC/C,6BAAqB;;;ACDrB,YAAuB;AACvB,mBAAiD;AA6C1C,SAAS,UACd,KACmC;AACnC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAiB,CAAC;AAC5C,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAiB,CAAC;AAC9C,QAAM,mBAAe,0BAAY,MAAM;AApDzC;AAqDI,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,8BAAU,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,8BAAU,MAAM;AACd,iBAAa;AAAA,EAEf,GAAG,CAAC,CAAC;AACL,SAAO,EAAE,OAAO,OAAO;AACzB;;;ACvEA,IAAAC,gBAA8B;AAQvB,IAAM,kBAAc,6BAAgC;AAAA,EACzD,SAAS;AAAA,EACT,aAAa;AAAA;AAAA,EAEb,mBAAmB,CAAC,UAAkB;AAAA,EAEtC;AACF,CAAC;;;AFOG;AANG,SAAS,SAAS,IAA0E;AAA1E,eAAE,YAAU,YAAY,cAAc,UAhB/D,IAgByB,IAAoD,iBAApD,IAAoD,CAAlD,YAAU,aAA0B;AAC7D,QAAM,kBAAc,sBAAuB,IAAI;AAC/C,QAAM,EAAE,OAAO,UAAU,IAAI,UAAU,WAAW;AAClD,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,aAAa,cAAc;AACjC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,cAAc,eACV;AAAA,UACE,CAAC,2BAA2B,GAAG;AAAA,UAC/B,2BAA2B,CAAC;AAAA,QAC9B,IACA;AAAA,UACE,2BAA2B;AAAA,QAC7B;AAAA,QACJ;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,MAAK;AAAA,OACD,OAfL;AAAA,MAiBE;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,cAAc;AAWhB,IAAM,UAAyD;AAAA,EACpE,CAAC,IAA4E,QAAQ;AAApF,iBAAE,MAAI,YAAY,UAAU,UAAU,OAAO,WAAW,QAxD3D,IAwDG,IAAoE,iBAApE,IAAoE,CAAlE,MAA0B,YAAU,SAAO,aAAW;AACvD,UAAM,cAAU,0BAAW,WAAW;AACtC,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AACA,UAAM,YAAY,CAAC,MAAqC;AACtD,QAAE,eAAe;AACjB,cAAQ,kBAAkB,KAAK;AAC/B,iBAAW,QAAQ,CAAC;AAAA,IACtB;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,EAAE,wBAAwB,QAAQ,gBAAgB,MAAM;AAAA,UACxD;AAAA,QACF;AAAA,QACA,cAAY;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,QACA,MAAK;AAAA,SACD,OAVL;AAAA,QAYE;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,IAAI,cAAc;","names":["import_react","import_react"]}
1
+ {"version":3,"sources":["../../src/tabs/tabs-list.tsx","../../src/utils.ts","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement, MouseEvent } from \"react\";\nimport { forwardRef, useEffect, useRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { type OverridableComponent, useResize } from \"../utils\";\nimport { useTabsContext } from \"./context\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement<TabsTabProps> | ReactElement<TabsTabProps>[];\n\n /**\n * Direction of the tabs. Can either be vertical or horizontal.\n * Horizontal breaks on window width with fallback back to vertical\n */\n direction?: \"vertical\" | \"horizontal\";\n}\n\nexport function TabsList({ children, direction = \"horizontal\", className, ...rest }: TabListProps) {\n const { activeTabId } = useTabsContext();\n const tabsListRef = useRef<HTMLDivElement>(null);\n const { width: tabsWidth } = useResize(tabsListRef);\n const { innerWidth } = window;\n const wideEnough = innerWidth >= tabsWidth;\n\n const previousTabId = useRef(activeTabId);\n\n // Marker animation\n useEffect(() => {\n const tabList = tabsListRef.current;\n const activeTab = tabList?.querySelector(`[data-tabid=\"${activeTabId}\"]`);\n if (!activeTab || !tabList) return;\n\n const { offsetHeight: containerHeight, offsetWidth: containerWidth } = tabList;\n const { offsetHeight, offsetWidth, offsetTop, offsetLeft } = activeTab as HTMLElement;\n\n // Calculate the height and width of the marker relative to the container\n const height = offsetHeight / containerHeight;\n const width = offsetWidth / containerWidth;\n\n // NOTE: Doing a DOM manipulation here to set the CSS variables for the marker\n // Not really the react idomatic way, but as long as it works we are able to skip some intermidiate `useState`\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-height\", String(height));\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-width\", String(width));\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-top\", `${offsetTop}px`);\n tabsListRef.current.style.setProperty(\"--_hds-tabs-marker-left\", `${offsetLeft}px`);\n\n // Start with border fallback, then switch to the animated marker when the user changes tabs\n // This way the marker is placed immediately to the default tab, then animates smoothly to the next when selected\n if (previousTabId.current !== activeTabId) {\n tabsListRef.current.style.setProperty(\n \"--_hds-tabs-marker-animated-color\",\n \"var(--_hds-tabs-marker-color)\",\n );\n tabsListRef.current.style.setProperty(\n \"--_hds-tabs-marker-border-fallback-color\",\n \"transparent\",\n );\n }\n previousTabId.current = activeTabId;\n }, [activeTabId, innerWidth]);\n\n return (\n <div\n className={clsx(\n \"hds-tabs__list\",\n direction === \"horizontal\"\n ? {\n \"hds-tabs__list--horizontal\": wideEnough,\n \"hds-tabs__list--vertical\": !wideEnough,\n }\n : {\n \"hds-tabs__list--vertical\": true,\n },\n className as undefined,\n )}\n ref={tabsListRef}\n role=\"tablist\"\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nTabsList.displayName = \"Tabs.List\";\n\nexport interface TabsTabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactElement<HTMLElement> | string;\n\n /**\n * Identifier for the tab\n */\n tabId: string;\n}\n\nexport const TabsTab: OverridableComponent<TabsTabProps, HTMLButtonElement> = forwardRef(\n ({ as: Component = \"button\", children, tabId, className, onClick, ...rest }, ref) => {\n const context = useTabsContext();\n\n const toggleTab = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n context.toggleActiveTabId(tabId);\n onClick && onClick(e);\n };\n return (\n <Component\n className={clsx(\n \"hds-tabs__tab\",\n { \"hds-tabs__tab--active\": context.activeTabId === tabId },\n className as undefined,\n )}\n data-tabid={tabId}\n onClick={toggleTab}\n ref={ref}\n role=\"tab\"\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nTabsTab.displayName = \"Tabs.Tab\";\n","import type { ComponentPropsWithRef, ElementType, FC, RefAttributes } from \"react\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * OverridableComponent makes the `as` prop available,\n * to be used to override the html element being used for a component\n *\n * Taken from digdir design system: https://github.com/digdir/designsystem/blob/main/packages/react/src/types/OverridableComponent.ts\n */\nexport type OverridableComponent<ComponentProps, Element extends HTMLElement> = {\n (props: ComponentProps & RefAttributes<Element>): ReturnType<FC>;\n\n <As extends ElementType>(\n props: {\n /** Override html element */\n as?: As;\n } & ComponentProps &\n Omit<ComponentPropsWithRef<As>, keyof ComponentProps>,\n ): ReturnType<FC>;\n} & Pick<FC, \"displayName\">;\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","import { createContext, useContext } from \"react\";\n\nexport interface TabsContextProps {\n activeTabId: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?\",\n );\n }\n return context;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAA8C;AAC9C,6BAAqB;;;ACDrB,YAAuB;AACvB,mBAAiD;AA6C1C,SAAS,UACd,KACmC;AACnC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAiB,CAAC;AAC5C,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAiB,CAAC;AAC9C,QAAM,mBAAe,0BAAY,MAAM;AApDzC;AAqDI,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,8BAAU,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,8BAAU,MAAM;AACd,iBAAa;AAAA,EAEf,GAAG,CAAC,CAAC;AACL,SAAO,EAAE,OAAO,OAAO;AACzB;;;ACvEA,IAAAC,gBAA0C;AAOnC,IAAM,kBAAc,6BAAuC,IAAI;AAE/D,SAAS,iBAAiB;AAC/B,QAAM,cAAU,0BAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AF4CI;AA7CG,SAAS,SAAS,IAA0E;AAA1E,eAAE,YAAU,YAAY,cAAc,UAhB/D,IAgByB,IAAoD,iBAApD,IAAoD,CAAlD,YAAU,aAA0B;AAC7D,QAAM,EAAE,YAAY,IAAI,eAAe;AACvC,QAAM,kBAAc,sBAAuB,IAAI;AAC/C,QAAM,EAAE,OAAO,UAAU,IAAI,UAAU,WAAW;AAClD,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,aAAa,cAAc;AAEjC,QAAM,oBAAgB,sBAAO,WAAW;AAGxC,+BAAU,MAAM;AACd,UAAM,UAAU,YAAY;AAC5B,UAAM,YAAY,mCAAS,cAAc,gBAAgB,WAAW;AACpE,QAAI,CAAC,aAAa,CAAC;AAAS;AAE5B,UAAM,EAAE,cAAc,iBAAiB,aAAa,eAAe,IAAI;AACvE,UAAM,EAAE,cAAc,aAAa,WAAW,WAAW,IAAI;AAG7D,UAAM,SAAS,eAAe;AAC9B,UAAM,QAAQ,cAAc;AAI5B,gBAAY,QAAQ,MAAM,YAAY,6BAA6B,OAAO,MAAM,CAAC;AACjF,gBAAY,QAAQ,MAAM,YAAY,4BAA4B,OAAO,KAAK,CAAC;AAC/E,gBAAY,QAAQ,MAAM,YAAY,0BAA0B,GAAG,SAAS,IAAI;AAChF,gBAAY,QAAQ,MAAM,YAAY,2BAA2B,GAAG,UAAU,IAAI;AAIlF,QAAI,cAAc,YAAY,aAAa;AACzC,kBAAY,QAAQ,MAAM;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AACA,kBAAY,QAAQ,MAAM;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAc,UAAU;AAAA,EAC1B,GAAG,CAAC,aAAa,UAAU,CAAC;AAE5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,cAAc,eACV;AAAA,UACE,8BAA8B;AAAA,UAC9B,4BAA4B,CAAC;AAAA,QAC/B,IACA;AAAA,UACE,4BAA4B;AAAA,QAC9B;AAAA,QACJ;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,MAAK;AAAA,OACD,OAfL;AAAA,MAiBE;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,cAAc;AAWhB,IAAM,cAAiE;AAAA,EAC5E,CAAC,IAA4E,QAAQ;AAApF,iBAAE,MAAI,YAAY,UAAU,UAAU,OAAO,WAAW,QA/F3D,IA+FG,IAAoE,iBAApE,IAAoE,CAAlE,MAA0B,YAAU,SAAO,aAAW;AACvD,UAAM,UAAU,eAAe;AAE/B,UAAM,YAAY,CAAC,MAAqC;AACtD,QAAE,eAAe;AACjB,cAAQ,kBAAkB,KAAK;AAC/B,iBAAW,QAAQ,CAAC;AAAA,IACtB;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,EAAE,yBAAyB,QAAQ,gBAAgB,MAAM;AAAA,UACzD;AAAA,QACF;AAAA,QACA,cAAY;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,QACA,MAAK;AAAA,SACD,OAVL;AAAA,QAYE;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,QAAQ,cAAc;","names":["import_react","import_react"]}
@@ -1,12 +1,12 @@
1
1
  import {
2
- Tab,
3
- TabsList
4
- } from "../chunk-XVZ44NGD.mjs";
2
+ TabsList,
3
+ TabsTab
4
+ } from "../chunk-CLXHNRAI.mjs";
5
+ import "../chunk-KQITCS3U.mjs";
5
6
  import "../chunk-WCA2WPFS.mjs";
6
- import "../chunk-33JD5XDW.mjs";
7
7
  import "../chunk-R4SQKVDQ.mjs";
8
8
  export {
9
- Tab,
10
- TabsList
9
+ TabsList,
10
+ TabsTab
11
11
  };
12
12
  //# sourceMappingURL=tabs-list.mjs.map
package/dist/tabs/tabs.js CHANGED
@@ -57,13 +57,7 @@ var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
57
57
 
58
58
  // src/tabs/context.ts
59
59
  var import_react = require("react");
60
- var TabsContext = (0, import_react.createContext)({
61
- mounted: false,
62
- activeTabId: void 0,
63
- // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling
64
- toggleActiveTabId: (tabId) => {
65
- }
66
- });
60
+ var TabsContext = (0, import_react.createContext)(null);
67
61
 
68
62
  // src/tabs/tabs.tsx
69
63
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -71,13 +65,7 @@ var Tabs = (0, import_react2.forwardRef)(
71
65
  (_a, ref) => {
72
66
  var _b = _a, { as: Component = "div", defaultTab, children } = _b, rest = __objRest(_b, ["as", "defaultTab", "children"]);
73
67
  const [activeTabId, setActiveTabId] = (0, import_react2.useState)(defaultTab);
74
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs"), ref }, rest), { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
- TabsContext.Provider,
76
- {
77
- value: { activeTabId, toggleActiveTabId: setActiveTabId, mounted: true },
78
- children
79
- }
80
- ) }));
68
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, __spreadProps(__spreadValues({ className: (0, import_typed_classname.clsx)("hds-tabs"), ref }, rest), { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsContext.Provider, { value: { activeTabId, toggleActiveTabId: setActiveTabId }, children }) }));
81
69
  }
82
70
  );
83
71
  Tabs.displayName = "Tabs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/tabs.tsx","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\nimport type { TabContentsProps } from \"./tabs-content\";\nimport type { TabListProps } from \"./tabs-list\";\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<TabListProps | TabContentsProps>[] | ReactElement;\n\n /**\n * Define which tab to use as default. Must be one of the <Tab/>s identifier.\n */\n defaultTab: string;\n}\n\nexport const Tabs: OverridableComponent<TabsProps, HTMLDivElement> = forwardRef(\n ({ as: Component = \"div\", defaultTab, children, ...rest }, ref) => {\n const [activeTabId, setActiveTabId] = useState<string>(defaultTab);\n return (\n <Component className={clsx(\"hds-tabs\")} ref={ref} {...rest}>\n <TabsContext.Provider\n value={{ activeTabId, toggleActiveTabId: setActiveTabId, mounted: true }}\n >\n {children}\n </TabsContext.Provider>\n </Component>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { createContext } from \"react\";\n\nexport interface TabsContextProps {\n mounted: boolean;\n activeTabId?: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps>({\n mounted: false,\n activeTabId: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Added default section, without handling\n toggleActiveTabId: (tabId: string) => {\n // default\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAAqC;AACrC,6BAAqB;;;ACFrB,mBAA8B;AAQvB,IAAM,kBAAc,4BAAgC;AAAA,EACzD,SAAS;AAAA,EACT,aAAa;AAAA;AAAA,EAEb,mBAAmB,CAAC,UAAkB;AAAA,EAEtC;AACF,CAAC;;;ADOO;AALD,IAAM,WAAwD;AAAA,EACnE,CAAC,IAA0D,QAAQ;AAAlE,iBAAE,MAAI,YAAY,OAAO,YAAY,SAlBxC,IAkBG,IAAkD,iBAAlD,IAAkD,CAAhD,MAAuB,cAAY;AACpC,UAAM,CAAC,aAAa,cAAc,QAAI,wBAAiB,UAAU;AACjE,WACE,4CAAC,0CAAU,eAAW,6BAAK,UAAU,GAAG,OAAc,OAArD,EACC;AAAA,MAAC,YAAY;AAAA,MAAZ;AAAA,QACC,OAAO,EAAE,aAAa,mBAAmB,gBAAgB,SAAS,KAAK;AAAA,QAEtE;AAAA;AAAA,IACH,IACF;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;","names":["import_react"]}
1
+ {"version":3,"sources":["../../src/tabs/tabs.tsx","../../src/tabs/context.ts"],"sourcesContent":["import type { HTMLAttributes, ReactElement } from \"react\";\nimport { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport type { OverridableComponent } from \"../utils\";\nimport { TabsContext } from \"./context\";\nimport type { TabContentsProps } from \"./tabs-content\";\nimport type { TabListProps } from \"./tabs-list\";\n\nexport interface TabsProps extends HTMLAttributes<HTMLElement> {\n children: ReactElement<TabListProps | TabContentsProps>[] | ReactElement;\n\n /**\n * Define which tab to use as default. Must be one of the <Tab/>s identifier.\n */\n defaultTab: string;\n}\n\nexport const Tabs: OverridableComponent<TabsProps, HTMLDivElement> = forwardRef(\n ({ as: Component = \"div\", defaultTab, children, ...rest }, ref) => {\n const [activeTabId, setActiveTabId] = useState<string>(defaultTab);\n return (\n <Component className={clsx(\"hds-tabs\")} ref={ref} {...rest}>\n <TabsContext.Provider value={{ activeTabId, toggleActiveTabId: setActiveTabId }}>\n {children}\n </TabsContext.Provider>\n </Component>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { createContext, useContext } from \"react\";\n\nexport interface TabsContextProps {\n activeTabId: string;\n toggleActiveTabId: (tabId: string) => void;\n}\n\nexport const TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs context required. Did you use `<Tabs.List />`, `<Tabs.Tab />`, or `<Tabs.Content />` outside of <Tabs/>?\",\n );\n }\n return context;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAAqC;AACrC,6BAAqB;;;ACFrB,mBAA0C;AAOnC,IAAM,kBAAc,4BAAuC,IAAI;;;ADe9D;AALD,IAAM,WAAwD;AAAA,EACnE,CAAC,IAA0D,QAAQ;AAAlE,iBAAE,MAAI,YAAY,OAAO,YAAY,SAlBxC,IAkBG,IAAkD,iBAAlD,IAAkD,CAAhD,MAAuB,cAAY;AACpC,UAAM,CAAC,aAAa,cAAc,QAAI,wBAAiB,UAAU;AACjE,WACE,4CAAC,0CAAU,eAAW,6BAAK,UAAU,GAAG,OAAc,OAArD,EACC,sDAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,aAAa,mBAAmB,eAAe,GAC3E,UACH,IACF;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;","names":["import_react"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Tabs
3
- } from "../chunk-MBBFU4IR.mjs";
4
- import "../chunk-33JD5XDW.mjs";
3
+ } from "../chunk-XVFQWVHO.mjs";
4
+ import "../chunk-KQITCS3U.mjs";
5
5
  import "../chunk-R4SQKVDQ.mjs";
6
6
  export {
7
7
  Tabs