@navikt/ds-react 6.4.1 → 6.5.0

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 (203) hide show
  1. package/cjs/date/datepicker/parts/DayButton.js +1 -1
  2. package/cjs/date/datepicker/parts/DayButton.js.map +1 -1
  3. package/cjs/date/hooks/useDatepicker.js +4 -1
  4. package/cjs/date/hooks/useDatepicker.js.map +1 -1
  5. package/cjs/date/hooks/useMonthPicker.js +4 -1
  6. package/cjs/date/hooks/useMonthPicker.js.map +1 -1
  7. package/cjs/date/monthpicker/MonthButton.js +1 -1
  8. package/cjs/date/monthpicker/MonthButton.js.map +1 -1
  9. package/cjs/tabs/Tabs.context.d.ts +30 -0
  10. package/cjs/tabs/Tabs.context.js +14 -0
  11. package/cjs/tabs/Tabs.context.js.map +1 -0
  12. package/cjs/tabs/Tabs.d.ts +8 -43
  13. package/cjs/tabs/Tabs.js +19 -12
  14. package/cjs/tabs/Tabs.js.map +1 -1
  15. package/cjs/tabs/Tabs.types.d.ts +41 -0
  16. package/cjs/tabs/Tabs.types.js +3 -0
  17. package/cjs/tabs/Tabs.types.js.map +1 -0
  18. package/cjs/tabs/index.d.ts +5 -4
  19. package/cjs/tabs/index.js +6 -6
  20. package/cjs/tabs/index.js.map +1 -1
  21. package/cjs/tabs/parts/tab/Tab.d.ts +25 -0
  22. package/cjs/tabs/{Tab.js → parts/tab/Tab.js} +15 -14
  23. package/cjs/tabs/parts/tab/Tab.js.map +1 -0
  24. package/cjs/tabs/parts/tab/useTab.d.ts +20 -0
  25. package/cjs/tabs/parts/tab/useTab.js +29 -0
  26. package/cjs/tabs/parts/tab/useTab.js.map +1 -0
  27. package/cjs/tabs/parts/tablist/ScrollButtons.d.ts +8 -0
  28. package/cjs/tabs/parts/tablist/ScrollButtons.js +15 -0
  29. package/cjs/tabs/parts/tablist/ScrollButtons.js.map +1 -0
  30. package/{esm/tabs → cjs/tabs/parts/tablist}/TabList.d.ts +1 -1
  31. package/cjs/tabs/parts/tablist/TabList.js +61 -0
  32. package/cjs/tabs/parts/tablist/TabList.js.map +1 -0
  33. package/cjs/tabs/parts/tablist/useScrollButtons.d.ts +12 -0
  34. package/cjs/tabs/parts/tablist/useScrollButtons.js +61 -0
  35. package/cjs/tabs/parts/tablist/useScrollButtons.js.map +1 -0
  36. package/cjs/tabs/parts/tablist/useTabList.d.ts +7 -0
  37. package/cjs/tabs/parts/tablist/useTabList.js +66 -0
  38. package/cjs/tabs/parts/tablist/useTabList.js.map +1 -0
  39. package/cjs/tabs/parts/tabpanel/TabPanel.d.ts +25 -0
  40. package/cjs/tabs/{TabPanel.js → parts/tabpanel/TabPanel.js} +5 -3
  41. package/cjs/tabs/parts/tabpanel/TabPanel.js.map +1 -0
  42. package/cjs/tabs/parts/tabpanel/useTabPanel.d.ts +12 -0
  43. package/cjs/tabs/parts/tabpanel/useTabPanel.js +17 -0
  44. package/cjs/tabs/parts/tabpanel/useTabPanel.js.map +1 -0
  45. package/cjs/tabs/useTabs.d.ts +14 -0
  46. package/cjs/tabs/useTabs.js +43 -0
  47. package/cjs/tabs/useTabs.js.map +1 -0
  48. package/cjs/toggle-group/ToggleGroup.context.d.ts +31 -0
  49. package/cjs/toggle-group/ToggleGroup.context.js +16 -0
  50. package/cjs/toggle-group/ToggleGroup.context.js.map +1 -0
  51. package/cjs/toggle-group/ToggleGroup.d.ts +5 -36
  52. package/cjs/toggle-group/ToggleGroup.js +24 -24
  53. package/cjs/toggle-group/ToggleGroup.js.map +1 -1
  54. package/cjs/toggle-group/ToggleGroup.types.d.ts +38 -0
  55. package/cjs/toggle-group/ToggleGroup.types.js +3 -0
  56. package/cjs/toggle-group/ToggleGroup.types.js.map +1 -0
  57. package/cjs/toggle-group/index.d.ts +3 -2
  58. package/cjs/toggle-group/index.js +1 -1
  59. package/cjs/toggle-group/index.js.map +1 -1
  60. package/cjs/toggle-group/{ToggleItem.d.ts → parts/ToggleItem.d.ts} +2 -2
  61. package/cjs/toggle-group/{ToggleItem.js → parts/ToggleItem.js} +9 -8
  62. package/cjs/toggle-group/parts/ToggleItem.js.map +1 -0
  63. package/cjs/toggle-group/parts/useToggleItem.d.ts +20 -0
  64. package/cjs/toggle-group/parts/useToggleItem.js +76 -0
  65. package/cjs/toggle-group/parts/useToggleItem.js.map +1 -0
  66. package/cjs/toggle-group/useToggleGroup.d.ts +8 -0
  67. package/cjs/toggle-group/useToggleGroup.js +29 -0
  68. package/cjs/toggle-group/useToggleGroup.js.map +1 -0
  69. package/esm/date/datepicker/parts/DayButton.js +1 -1
  70. package/esm/date/datepicker/parts/DayButton.js.map +1 -1
  71. package/esm/date/hooks/useDatepicker.js +4 -1
  72. package/esm/date/hooks/useDatepicker.js.map +1 -1
  73. package/esm/date/hooks/useMonthPicker.js +4 -1
  74. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  75. package/esm/date/monthpicker/MonthButton.js +1 -1
  76. package/esm/date/monthpicker/MonthButton.js.map +1 -1
  77. package/esm/tabs/Tabs.context.d.ts +30 -0
  78. package/esm/tabs/Tabs.context.js +10 -0
  79. package/esm/tabs/Tabs.context.js.map +1 -0
  80. package/esm/tabs/Tabs.d.ts +8 -43
  81. package/esm/tabs/Tabs.js +19 -12
  82. package/esm/tabs/Tabs.js.map +1 -1
  83. package/esm/tabs/Tabs.types.d.ts +41 -0
  84. package/esm/tabs/Tabs.types.js +2 -0
  85. package/esm/tabs/Tabs.types.js.map +1 -0
  86. package/esm/tabs/index.d.ts +5 -4
  87. package/esm/tabs/index.js +3 -3
  88. package/esm/tabs/index.js.map +1 -1
  89. package/esm/tabs/parts/tab/Tab.d.ts +25 -0
  90. package/esm/tabs/parts/tab/Tab.js +35 -0
  91. package/esm/tabs/parts/tab/Tab.js.map +1 -0
  92. package/esm/tabs/parts/tab/useTab.d.ts +20 -0
  93. package/esm/tabs/parts/tab/useTab.js +25 -0
  94. package/esm/tabs/parts/tab/useTab.js.map +1 -0
  95. package/esm/tabs/parts/tablist/ScrollButtons.d.ts +8 -0
  96. package/esm/tabs/parts/tablist/ScrollButtons.js +10 -0
  97. package/esm/tabs/parts/tablist/ScrollButtons.js.map +1 -0
  98. package/{cjs/tabs → esm/tabs/parts/tablist}/TabList.d.ts +1 -1
  99. package/esm/tabs/parts/tablist/TabList.js +32 -0
  100. package/esm/tabs/parts/tablist/TabList.js.map +1 -0
  101. package/esm/tabs/parts/tablist/useScrollButtons.d.ts +12 -0
  102. package/esm/tabs/parts/tablist/useScrollButtons.js +57 -0
  103. package/esm/tabs/parts/tablist/useScrollButtons.js.map +1 -0
  104. package/esm/tabs/parts/tablist/useTabList.d.ts +7 -0
  105. package/esm/tabs/parts/tablist/useTabList.js +62 -0
  106. package/esm/tabs/parts/tablist/useTabList.js.map +1 -0
  107. package/esm/tabs/parts/tabpanel/TabPanel.d.ts +25 -0
  108. package/esm/tabs/parts/tabpanel/TabPanel.js +22 -0
  109. package/esm/tabs/parts/tabpanel/TabPanel.js.map +1 -0
  110. package/esm/tabs/parts/tabpanel/useTabPanel.d.ts +12 -0
  111. package/esm/tabs/parts/tabpanel/useTabPanel.js +13 -0
  112. package/esm/tabs/parts/tabpanel/useTabPanel.js.map +1 -0
  113. package/esm/tabs/useTabs.d.ts +14 -0
  114. package/esm/tabs/useTabs.js +39 -0
  115. package/esm/tabs/useTabs.js.map +1 -0
  116. package/esm/toggle-group/ToggleGroup.context.d.ts +31 -0
  117. package/esm/toggle-group/ToggleGroup.context.js +12 -0
  118. package/esm/toggle-group/ToggleGroup.context.js.map +1 -0
  119. package/esm/toggle-group/ToggleGroup.d.ts +5 -36
  120. package/esm/toggle-group/ToggleGroup.js +24 -24
  121. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  122. package/esm/toggle-group/ToggleGroup.types.d.ts +38 -0
  123. package/esm/toggle-group/ToggleGroup.types.js +2 -0
  124. package/esm/toggle-group/ToggleGroup.types.js.map +1 -0
  125. package/esm/toggle-group/index.d.ts +3 -2
  126. package/esm/toggle-group/index.js +1 -1
  127. package/esm/toggle-group/index.js.map +1 -1
  128. package/esm/toggle-group/{ToggleItem.d.ts → parts/ToggleItem.d.ts} +2 -2
  129. package/esm/toggle-group/parts/ToggleItem.js +25 -0
  130. package/esm/toggle-group/parts/ToggleItem.js.map +1 -0
  131. package/esm/toggle-group/parts/useToggleItem.d.ts +20 -0
  132. package/esm/toggle-group/parts/useToggleItem.js +72 -0
  133. package/esm/toggle-group/parts/useToggleItem.js.map +1 -0
  134. package/esm/toggle-group/useToggleGroup.d.ts +8 -0
  135. package/esm/toggle-group/useToggleGroup.js +25 -0
  136. package/esm/toggle-group/useToggleGroup.js.map +1 -0
  137. package/package.json +3 -5
  138. package/src/date/datepicker/datepicker.stories.tsx +39 -0
  139. package/src/date/datepicker/parts/DayButton.tsx +2 -0
  140. package/src/date/hooks/useDatepicker.tsx +5 -1
  141. package/src/date/hooks/useMonthPicker.tsx +5 -1
  142. package/src/date/monthpicker/MonthButton.tsx +1 -0
  143. package/src/date/monthpicker/monthpicker.stories.tsx +36 -19
  144. package/src/modal/modal.stories.tsx +2 -6
  145. package/src/tabs/Tabs.context.ts +24 -0
  146. package/src/tabs/Tabs.stories.tsx +233 -113
  147. package/src/tabs/Tabs.test.tsx +99 -37
  148. package/src/tabs/Tabs.tsx +48 -70
  149. package/src/tabs/Tabs.types.ts +43 -0
  150. package/src/tabs/index.ts +11 -4
  151. package/src/tabs/parts/tab/Tab.tsx +93 -0
  152. package/src/tabs/parts/tab/useTab.ts +52 -0
  153. package/src/tabs/parts/tablist/ScrollButtons.tsx +29 -0
  154. package/src/tabs/parts/tablist/TabList.tsx +56 -0
  155. package/src/tabs/parts/tablist/useScrollButtons.ts +69 -0
  156. package/src/tabs/parts/tablist/useTabList.ts +68 -0
  157. package/src/tabs/parts/tabpanel/TabPanel.tsx +50 -0
  158. package/src/tabs/parts/tabpanel/useTabPanel.ts +18 -0
  159. package/src/tabs/useTabs.ts +51 -0
  160. package/src/toggle-group/ToggleGroup.context.ts +31 -0
  161. package/src/toggle-group/ToggleGroup.stories.tsx +67 -6
  162. package/src/toggle-group/ToggleGroup.test.tsx +57 -16
  163. package/src/toggle-group/ToggleGroup.tsx +63 -90
  164. package/src/toggle-group/ToggleGroup.types.ts +40 -0
  165. package/src/toggle-group/index.ts +3 -2
  166. package/src/toggle-group/parts/ToggleItem.tsx +55 -0
  167. package/src/toggle-group/parts/useToggleItem.ts +104 -0
  168. package/src/toggle-group/useToggleGroup.ts +33 -0
  169. package/cjs/tabs/Tab.d.ts +0 -18
  170. package/cjs/tabs/Tab.js.map +0 -1
  171. package/cjs/tabs/TabList.js +0 -111
  172. package/cjs/tabs/TabList.js.map +0 -1
  173. package/cjs/tabs/TabPanel.d.ts +0 -13
  174. package/cjs/tabs/TabPanel.js.map +0 -1
  175. package/cjs/tabs/context.d.ts +0 -8
  176. package/cjs/tabs/context.js +0 -6
  177. package/cjs/tabs/context.js.map +0 -1
  178. package/cjs/toggle-group/ToggleItem.js.map +0 -1
  179. package/cjs/toggle-group/context.d.ts +0 -6
  180. package/cjs/toggle-group/context.js +0 -6
  181. package/cjs/toggle-group/context.js.map +0 -1
  182. package/esm/tabs/Tab.d.ts +0 -18
  183. package/esm/tabs/Tab.js +0 -34
  184. package/esm/tabs/Tab.js.map +0 -1
  185. package/esm/tabs/TabList.js +0 -82
  186. package/esm/tabs/TabList.js.map +0 -1
  187. package/esm/tabs/TabPanel.d.ts +0 -13
  188. package/esm/tabs/TabPanel.js +0 -20
  189. package/esm/tabs/TabPanel.js.map +0 -1
  190. package/esm/tabs/context.d.ts +0 -8
  191. package/esm/tabs/context.js +0 -3
  192. package/esm/tabs/context.js.map +0 -1
  193. package/esm/toggle-group/ToggleItem.js +0 -24
  194. package/esm/toggle-group/ToggleItem.js.map +0 -1
  195. package/esm/toggle-group/context.d.ts +0 -6
  196. package/esm/toggle-group/context.js +0 -3
  197. package/esm/toggle-group/context.js.map +0 -1
  198. package/src/tabs/Tab.tsx +0 -66
  199. package/src/tabs/TabList.tsx +0 -128
  200. package/src/tabs/TabPanel.tsx +0 -26
  201. package/src/tabs/context.ts +0 -9
  202. package/src/toggle-group/ToggleItem.tsx +0 -41
  203. package/src/toggle-group/context.ts +0 -9
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.TabList = void 0;
41
+ /* eslint-disable jsx-a11y/interactive-supports-focus */
42
+ const clsx_1 = __importDefault(require("clsx"));
43
+ const react_1 = __importStar(require("react"));
44
+ const composeEventHandlers_1 = require("../../../util/composeEventHandlers");
45
+ const useMergeRefs_1 = require("../../../util/hooks/useMergeRefs");
46
+ const ScrollButtons_1 = __importDefault(require("./ScrollButtons"));
47
+ const useScrollButtons_1 = require("./useScrollButtons");
48
+ const useTabList_1 = require("./useTabList");
49
+ exports.TabList = (0, react_1.forwardRef)((_a, ref) => {
50
+ var { className, onKeyDown } = _a, rest = __rest(_a, ["className", "onKeyDown"]);
51
+ const { onKeyDown: _onKeyDown } = (0, useTabList_1.useTabList)();
52
+ const listRef = (0, react_1.useRef)(null);
53
+ const mergedRef = (0, useMergeRefs_1.useMergeRefs)(listRef, ref);
54
+ const scrollCtx = (0, useScrollButtons_1.useScrollButtons)(listRef);
55
+ return (react_1.default.createElement("div", { className: "navds-tabs__tablist-wrapper" },
56
+ scrollCtx.show && (react_1.default.createElement(ScrollButtons_1.default, { dir: "left", hidden: !scrollCtx.start, onClick: scrollCtx.scrollLeft })),
57
+ react_1.default.createElement("div", Object.assign({ ref: mergedRef }, rest, { onScroll: scrollCtx.update, className: (0, clsx_1.default)("navds-tabs__tablist", className), role: "tablist", "aria-orientation": "horizontal", onKeyDown: (0, composeEventHandlers_1.composeEventHandlers)(onKeyDown, _onKeyDown) })),
58
+ scrollCtx.show && (react_1.default.createElement(ScrollButtons_1.default, { dir: "right", hidden: !scrollCtx.end, onClick: scrollCtx.scrollRight }))));
59
+ });
60
+ exports.default = exports.TabList;
61
+ //# sourceMappingURL=TabList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../../../src/tabs/parts/tablist/TabList.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAwD;AACxD,gDAAsB;AACtB,+CAAkD;AAClD,6EAA0E;AAC1E,mEAAgE;AAChE,oEAA2C;AAC3C,yDAAsD;AACtD,6CAA0C;AAS7B,QAAA,OAAO,GAAG,IAAA,kBAAU,EAC/B,CAAC,EAAiC,EAAE,GAAG,EAAE,EAAE;QAA1C,EAAE,SAAS,EAAE,SAAS,OAAW,EAAN,IAAI,cAA/B,0BAAiC,CAAF;IAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAC;IAE/C,MAAM,OAAO,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAA,2BAAY,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,IAAA,mCAAgB,EAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,CACL,uCAAK,SAAS,EAAC,6BAA6B;QACzC,SAAS,CAAC,IAAI,IAAI,CACjB,8BAAC,uBAAY,IACX,GAAG,EAAC,MAAM,EACV,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,EACxB,OAAO,EAAE,SAAS,CAAC,UAAU,GAC7B,CACH;QACD,qDACE,GAAG,EAAE,SAAS,IACV,IAAI,IACR,QAAQ,EAAE,SAAS,CAAC,MAAM,EAC1B,SAAS,EAAE,IAAA,cAAE,EAAC,qBAAqB,EAAE,SAAS,CAAC,EAC/C,IAAI,EAAC,SAAS,sBACG,YAAY,EAC7B,SAAS,EAAE,IAAA,2CAAoB,EAAC,SAAS,EAAE,UAAU,CAAC,IACtD;QACD,SAAS,CAAC,IAAI,IAAI,CACjB,8BAAC,uBAAY,IACX,GAAG,EAAC,OAAO,EACX,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EACtB,OAAO,EAAE,SAAS,CAAC,WAAW,GAC9B,CACH,CACG,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,kBAAe,eAAO,CAAC"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export declare function useScrollButtons(listRef: React.RefObject<HTMLDivElement>): {
3
+ update: {
4
+ (this: any, ...args: any[]): void;
5
+ clear(): void;
6
+ };
7
+ start: boolean;
8
+ end: boolean;
9
+ show: boolean;
10
+ scrollLeft: () => void;
11
+ scrollRight: () => void;
12
+ };
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useScrollButtons = void 0;
4
+ const react_1 = require("react");
5
+ const util_1 = require("../../../util");
6
+ function useScrollButtons(listRef) {
7
+ const [displayScroll, setDisplayScroll] = (0, react_1.useState)({
8
+ start: false,
9
+ end: false,
10
+ });
11
+ const updateScrollButtonState = (0, react_1.useMemo)(() => (0, util_1.debounce)(() => {
12
+ if (!(listRef === null || listRef === void 0 ? void 0 : listRef.current))
13
+ return;
14
+ const { scrollWidth, clientWidth } = listRef.current;
15
+ const scrollLeft = listRef.current.scrollLeft;
16
+ // use 1 for the potential rounding error with browser zooms.
17
+ const showStartScroll = scrollLeft > 1;
18
+ const showEndScroll = scrollLeft < scrollWidth - clientWidth - 1;
19
+ setDisplayScroll((oldDisplayScroll) => showStartScroll === oldDisplayScroll.start &&
20
+ showEndScroll === oldDisplayScroll.end
21
+ ? oldDisplayScroll
22
+ : { start: showStartScroll, end: showEndScroll });
23
+ }), [listRef]);
24
+ (0, react_1.useEffect)(() => {
25
+ var _a, _b, _c;
26
+ const handleResize = () => updateScrollButtonState();
27
+ const win = (_c = (_b = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument) !== null && _b !== void 0 ? _b : document) !== null && _c !== void 0 ? _c : window;
28
+ win.addEventListener("resize", handleResize);
29
+ let resizeObserver;
30
+ if (typeof ResizeObserver !== "undefined") {
31
+ resizeObserver = new ResizeObserver(handleResize);
32
+ resizeObserver.observe(listRef.current);
33
+ }
34
+ return () => {
35
+ win.removeEventListener("resize", handleResize);
36
+ resizeObserver && resizeObserver.disconnect();
37
+ updateScrollButtonState.clear();
38
+ };
39
+ }, [listRef, updateScrollButtonState]);
40
+ (0, react_1.useEffect)(() => {
41
+ updateScrollButtonState();
42
+ });
43
+ return {
44
+ update: updateScrollButtonState,
45
+ start: displayScroll.start,
46
+ end: displayScroll.end,
47
+ show: displayScroll.end || displayScroll.start,
48
+ scrollLeft: () => {
49
+ if (listRef.current) {
50
+ listRef.current.scrollLeft -= 100;
51
+ }
52
+ },
53
+ scrollRight: () => {
54
+ if (listRef.current) {
55
+ listRef.current.scrollLeft += 100;
56
+ }
57
+ },
58
+ };
59
+ }
60
+ exports.useScrollButtons = useScrollButtons;
61
+ //# sourceMappingURL=useScrollButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollButtons.js","sourceRoot":"","sources":["../../../../src/tabs/parts/tablist/useScrollButtons.ts"],"names":[],"mappings":";;;AAAA,iCAAqD;AACrD,wCAAyC;AAEzC,SAAgB,gBAAgB,CAAC,OAAwC;IACvE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC;QACjD,KAAK,EAAE,KAAK;QACZ,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,IAAA,eAAO,EACrC,GAAG,EAAE,CACH,IAAA,eAAQ,EAAC,GAAG,EAAE;QACZ,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA;YAAE,OAAO;QAC9B,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,6DAA6D;QAC7D,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;QAEjE,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,EAAE,CACpC,eAAe,KAAK,gBAAgB,CAAC,KAAK;YAC1C,aAAa,KAAK,gBAAgB,CAAC,GAAG;YACpC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,CACnD,CAAC;IACJ,CAAC,CAAC,EACJ,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,MAAA,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,aAAa,mCAAI,QAAQ,mCAAI,MAAM,CAAC;QACjE,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE7C,IAAI,cAAc,CAAC;QAEnB,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;YAC1C,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;YAClD,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAChD,cAAc,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;YAC9C,uBAAuB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAEvC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,uBAAuB,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,uBAAuB;QAC/B,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,GAAG,EAAE,aAAa,CAAC,GAAG;QACtB,IAAI,EAAE,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,KAAK;QAC9C,UAAU,EAAE,GAAG,EAAE;YACf,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;YACpC,CAAC;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YAChB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;YACpC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAjED,4CAiEC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * TabList hook to manage multiple tab buttons,
3
+ * and ensures only one tab is selected at a time.
4
+ */
5
+ export declare function useTabList(): {
6
+ onKeyDown: (event: React.KeyboardEvent) => void;
7
+ };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTabList = void 0;
4
+ const react_1 = require("react");
5
+ const Tabs_context_1 = require("../../Tabs.context");
6
+ /**
7
+ * TabList hook to manage multiple tab buttons,
8
+ * and ensures only one tab is selected at a time.
9
+ */
10
+ function useTabList() {
11
+ const { focusedValue, loop, selectedValue, setFocusedValue } = (0, Tabs_context_1.useTabsContext)();
12
+ const descendants = (0, Tabs_context_1.useTabsDescendantsContext)();
13
+ /**
14
+ * Implements rowing-tabindex for horizontal tabs
15
+ */
16
+ const onKeyDown = (0, react_1.useCallback)((event) => {
17
+ /**
18
+ * Tabs.Tab is registered with its prop 'value'.
19
+ * We can then use it to find the current focuses descendant
20
+ */
21
+ const idx = descendants
22
+ .values()
23
+ .findIndex((x) => x.value === focusedValue);
24
+ const nextTab = () => {
25
+ var _a;
26
+ const next = descendants.nextEnabled(idx, loop);
27
+ next && ((_a = next.node) === null || _a === void 0 ? void 0 : _a.focus());
28
+ };
29
+ const prevTab = () => {
30
+ var _a;
31
+ const prev = descendants.prevEnabled(idx, loop);
32
+ prev && ((_a = prev.node) === null || _a === void 0 ? void 0 : _a.focus());
33
+ };
34
+ const firstTab = () => {
35
+ var _a;
36
+ const first = descendants.firstEnabled();
37
+ first && ((_a = first.node) === null || _a === void 0 ? void 0 : _a.focus());
38
+ };
39
+ const lastTab = () => {
40
+ var _a;
41
+ const last = descendants.lastEnabled();
42
+ last && ((_a = last.node) === null || _a === void 0 ? void 0 : _a.focus());
43
+ };
44
+ const keyMap = {
45
+ ArrowLeft: prevTab,
46
+ ArrowRight: nextTab,
47
+ Home: firstTab,
48
+ End: lastTab,
49
+ };
50
+ const action = keyMap[event.key];
51
+ if (action) {
52
+ event.preventDefault();
53
+ action(event);
54
+ }
55
+ else if (event.key === "Tab") {
56
+ /**
57
+ * Imperative focus during keydown is risky so we prevent React's batching updates
58
+ * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
59
+ */
60
+ selectedValue && setTimeout(() => setFocusedValue(selectedValue));
61
+ }
62
+ }, [descendants, focusedValue, loop, selectedValue, setFocusedValue]);
63
+ return { onKeyDown };
64
+ }
65
+ exports.useTabList = useTabList;
66
+ //# sourceMappingURL=useTabList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabList.js","sourceRoot":"","sources":["../../../../src/tabs/parts/tablist/useTabList.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AACpC,qDAA+E;AAE/E;;;GAGG;AACH,SAAgB,UAAU;IACxB,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,GAC1D,IAAA,6BAAc,GAAE,CAAC;IAEnB,MAAM,WAAW,GAAG,IAAA,wCAAyB,GAAE,CAAC;IAEhD;;OAEG;IACH,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,CAAC,KAA0B,EAAE,EAAE;QAC7B;;;WAGG;QACH,MAAM,GAAG,GAAG,WAAW;aACpB,MAAM,EAAE;aACR,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,GAAG,EAAE;;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAA,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAA,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,EAAE;;YACpB,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YACzC,KAAK,KAAI,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAA,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAA,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,MAAM,GAA+C;YACzD,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,OAAO;SACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAC/B;;;eAGG;YACH,aAAa,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAClE,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AA5DD,gCA4DC"}
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ export interface TabPanelProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * Tab panel content.
5
+ */
6
+ children: React.ReactNode;
7
+ /**
8
+ * Value for state-handling.
9
+ */
10
+ value: string;
11
+ /**
12
+ * If true, will only render children when selected.
13
+ * @default true
14
+ */
15
+ lazy?: boolean;
16
+ /**
17
+ * Overrides auto-generated id.
18
+ *
19
+ * **Warning**: TabPanel generates an id if not provided. If you need to override it,
20
+ * make sure to also include the correct `aria-labelledby` id for the Tab that labels it.
21
+ */
22
+ id?: string;
23
+ }
24
+ declare const TabPanel: React.ForwardRefExoticComponent<TabPanelProps & React.RefAttributes<HTMLDivElement>>;
25
+ export default TabPanel;
@@ -37,12 +37,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- const RadixTabs = __importStar(require("@radix-ui/react-tabs"));
41
40
  const clsx_1 = __importDefault(require("clsx"));
42
41
  const react_1 = __importStar(require("react"));
42
+ const useTabPanel_1 = require("./useTabPanel");
43
43
  const TabPanel = (0, react_1.forwardRef)((_a, ref) => {
44
- var { className } = _a, rest = __rest(_a, ["className"]);
45
- return (react_1.default.createElement(RadixTabs.TabsContent, Object.assign({}, rest, { ref: ref, className: (0, clsx_1.default)("navds-tabs__tabpanel", className) })));
44
+ var _b;
45
+ var { className, value, children, lazy = true, id } = _a, rest = __rest(_a, ["className", "value", "children", "lazy", "id"]);
46
+ const ctx = (0, useTabPanel_1.useTabPanel)({ value });
47
+ return (react_1.default.createElement("div", Object.assign({ ref: ref }, rest, { className: (0, clsx_1.default)("navds-tabs__tabpanel", className), role: "tabpanel", tabIndex: 0, "aria-labelledby": (_b = rest["aria-labelledby"]) !== null && _b !== void 0 ? _b : ctx.labelledbyId, id: id !== null && id !== void 0 ? id : ctx.id, hidden: ctx.hidden, "data-state": !ctx.hidden ? "active" : "inactive" }), lazy && ctx.hidden ? null : children));
46
48
  });
47
49
  exports.default = TabPanel;
48
50
  //# sourceMappingURL=TabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabPanel.js","sourceRoot":"","sources":["../../../../src/tabs/parts/tabpanel/TabPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAsB;AACtB,+CAA0C;AAC1C,+CAA4C;AAyB5C,MAAM,QAAQ,GAAG,IAAA,kBAAU,EACzB,CAAC,EAAwD,EAAE,GAAG,EAAE,EAAE;;QAAjE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,OAAW,EAAN,IAAI,cAAtD,gDAAwD,CAAF;IACrD,MAAM,GAAG,GAAG,IAAA,yBAAW,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnC,OAAO,CACL,qDACE,GAAG,EAAE,GAAG,IACJ,IAAI,IACR,SAAS,EAAE,IAAA,cAAE,EAAC,sBAAsB,EAAE,SAAS,CAAC,EAChD,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,qBACM,MAAA,IAAI,CAAC,iBAAiB,CAAC,mCAAI,GAAG,CAAC,YAAY,EAC5D,EAAE,EAAE,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,GAAG,CAAC,EAAE,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,gBACN,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,KAE9C,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CACjC,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,12 @@
1
+ type TabPanelProps = {
2
+ value: string;
3
+ };
4
+ /**
5
+ * Tabs hook for managing the visible/hidden state of Tabs.Panel
6
+ */
7
+ export declare function useTabPanel({ value }: TabPanelProps): {
8
+ labelledbyId: string;
9
+ hidden: boolean;
10
+ id: string;
11
+ };
12
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTabPanel = void 0;
4
+ const Tabs_context_1 = require("../../Tabs.context");
5
+ /**
6
+ * Tabs hook for managing the visible/hidden state of Tabs.Panel
7
+ */
8
+ function useTabPanel({ value }) {
9
+ const { id, selectedValue, makeTabId, makeTabPanelId } = (0, Tabs_context_1.useTabsContext)();
10
+ return {
11
+ labelledbyId: makeTabId(id, value),
12
+ hidden: selectedValue !== value,
13
+ id: makeTabPanelId(id, value),
14
+ };
15
+ }
16
+ exports.useTabPanel = useTabPanel;
17
+ //# sourceMappingURL=useTabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabPanel.js","sourceRoot":"","sources":["../../../../src/tabs/parts/tabpanel/useTabPanel.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAMpD;;GAEG;AACH,SAAgB,WAAW,CAAC,EAAE,KAAK,EAAiB;IAClD,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAA,6BAAc,GAAE,CAAC;IAE1E,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;QAClC,MAAM,EAAE,aAAa,KAAK,KAAK;QAC/B,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC;KAC9B,CAAC;AACJ,CAAC;AARD,kCAQC"}
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { TabsProps } from "./Tabs.types";
3
+ export declare function useTabs({ onChange, value, defaultValue, id, }: Pick<TabsProps, "onChange" | "value" | "defaultValue" | "id">): {
4
+ id: string;
5
+ selectedValue: string;
6
+ setSelectedValue: (next: import("react").SetStateAction<string>) => void;
7
+ focusedValue: string;
8
+ setFocusedValue: import("react").Dispatch<import("react").SetStateAction<string>>;
9
+ makeTabId: typeof makeTabId;
10
+ makeTabPanelId: typeof makeTabPanelId;
11
+ };
12
+ declare function makeTabId(id: string, value: string): string;
13
+ declare function makeTabPanelId(id: string, value: string): string;
14
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTabs = void 0;
4
+ const react_1 = require("react");
5
+ const util_1 = require("../util");
6
+ const useControllableState_1 = require("../util/hooks/useControllableState");
7
+ function useTabs({ onChange, value, defaultValue = "", id, }) {
8
+ const [focusedValue, setFocusedValue] = (0, react_1.useState)(defaultValue);
9
+ const [selectedValue, setSelectedValue] = (0, useControllableState_1.useControllableState)({
10
+ defaultValue,
11
+ value,
12
+ onChange,
13
+ });
14
+ /**
15
+ * Sync focused `value` with controlled `selectedValue`
16
+ */
17
+ (0, react_1.useEffect)(() => {
18
+ if (value != null) {
19
+ setFocusedValue(value);
20
+ }
21
+ }, [value]);
22
+ /**
23
+ * Scope ids for better tracking
24
+ */
25
+ const uuid = (0, util_1.useId)();
26
+ return {
27
+ id: `tabs-${id !== null && id !== void 0 ? id : uuid}`,
28
+ selectedValue,
29
+ setSelectedValue,
30
+ focusedValue,
31
+ setFocusedValue,
32
+ makeTabId,
33
+ makeTabPanelId,
34
+ };
35
+ }
36
+ exports.useTabs = useTabs;
37
+ function makeTabId(id, value) {
38
+ return `${id}--tab-${value}`;
39
+ }
40
+ function makeTabPanelId(id, value) {
41
+ return `${id}--tabpanel-${value}`;
42
+ }
43
+ //# sourceMappingURL=useTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabs.js","sourceRoot":"","sources":["../../src/tabs/useTabs.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,kCAAgC;AAChC,6EAA0E;AAG1E,SAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,KAAK,EACL,YAAY,GAAG,EAAE,EACjB,EAAE,GAC4D;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,YAAY,CAAC,CAAC;IAE/D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,2CAAoB,EAAC;QAC7D,YAAY;QACZ,KAAK;QACL,QAAQ;KACT,CAAC,CAAC;IAEH;;OAEG;IACH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ;;OAEG;IACH,MAAM,IAAI,GAAG,IAAA,YAAK,GAAE,CAAC;IAErB,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,EAAE;QACxB,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,eAAe;QACf,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AArCD,0BAqCC;AAED,SAAS,SAAS,CAAC,EAAU,EAAE,KAAa;IAC1C,OAAO,GAAG,EAAE,SAAS,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,KAAa;IAC/C,OAAO,GAAG,EAAE,cAAc,KAAK,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,31 @@
1
+ /// <reference types="react" />
2
+ import { ToggleGroupProps } from "./ToggleGroup.types";
3
+ import { useToggleGroup } from "./useToggleGroup";
4
+ interface ToggleContextProps {
5
+ size: "medium" | "small";
6
+ }
7
+ export declare const ToggleGroupContext: import("react").Context<ToggleContextProps | null>;
8
+ export declare const ToggleGroupDescendantsProvider: import("react").Provider<import("../util/hooks/descendants/descendant").DescendantsManager<HTMLButtonElement, {
9
+ value: string;
10
+ }>>, useToggleGroupDescendantsContext: () => import("../util/hooks/descendants/descendant").DescendantsManager<HTMLButtonElement, {
11
+ value: string;
12
+ }>, useToggleGroupDescendants: () => import("../util/hooks/descendants/descendant").DescendantsManager<HTMLButtonElement, {
13
+ value: string;
14
+ }>, useToggleGroupDescendant: (options?: import("../util/hooks/descendants/descendant").DescendantOptions<{
15
+ value: string;
16
+ }> | undefined) => {
17
+ descendants: import("../util/hooks/descendants/descendant").DescendantsManager<HTMLElement, Record<string, any>>;
18
+ index: number;
19
+ enabledIndex: number;
20
+ register: (instance: HTMLButtonElement | null) => void;
21
+ };
22
+ type ToggleGroupProviderProps = ReturnType<typeof useToggleGroup> & Pick<ToggleGroupProps, "size">;
23
+ export declare const ToggleGroupProvider: import("react").ForwardRefExoticComponent<{
24
+ selectedValue: string;
25
+ setSelectedValue: (next: import("react").SetStateAction<string>) => void;
26
+ focusedValue: string;
27
+ setFocusedValue: import("react").Dispatch<import("react").SetStateAction<string>>;
28
+ } & Pick<ToggleGroupProps, "size"> & {
29
+ children: import("react").ReactNode;
30
+ } & import("react").RefAttributes<unknown>>, useToggleGroupContext: <S extends boolean = true>(strict?: S) => S extends true ? ToggleGroupProviderProps : ToggleGroupProviderProps | undefined;
31
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useToggleGroupContext = exports.ToggleGroupProvider = exports.useToggleGroupDescendant = exports.useToggleGroupDescendants = exports.useToggleGroupDescendantsContext = exports.ToggleGroupDescendantsProvider = exports.ToggleGroupContext = void 0;
5
+ const react_1 = require("react");
6
+ const create_context_1 = require("../util/create-context");
7
+ const useDescendant_1 = require("../util/hooks/descendants/useDescendant");
8
+ exports.ToggleGroupContext = (0, react_1.createContext)(null);
9
+ _a = (0, useDescendant_1.createDescendantContext)(), exports.ToggleGroupDescendantsProvider = _a[0], exports.useToggleGroupDescendantsContext = _a[1], exports.useToggleGroupDescendants = _a[2], exports.useToggleGroupDescendant = _a[3];
10
+ /* State context */
11
+ _b = (0, create_context_1.createContext)({
12
+ name: "ToggleGroupContext",
13
+ hookName: "useToggleGroupContext",
14
+ providerName: "ToggleGroupProvider",
15
+ }), exports.ToggleGroupProvider = _b[0], exports.useToggleGroupContext = _b[1];
16
+ //# sourceMappingURL=ToggleGroup.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.context.js","sourceRoot":"","sources":["../../src/toggle-group/ToggleGroup.context.ts"],"names":[],"mappings":";;;;AAAA,iCAA4D;AAC5D,2DAAuD;AACvD,2EAAkF;AAQrE,QAAA,kBAAkB,GAAG,IAAA,qBAAkB,EAClD,IAAI,CACL,CAAC;AAEW,KAKT,IAAA,uCAAuB,GAAwC,EAJjE,sCAA8B,UAC9B,wCAAgC,UAChC,iCAAyB,UACzB,gCAAwB,SAC0C;AAKpE,mBAAmB;AACN,KACX,IAAA,8BAAa,EAA2B;IACtC,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,uBAAuB;IACjC,YAAY,EAAE,qBAAqB;CACpC,CAAC,EALU,2BAAmB,UAAE,6BAAqB,SAKnD"}
@@ -1,42 +1,11 @@
1
- import React, { HTMLAttributes } from "react";
2
- import { ToggleGroupItemProps } from "./ToggleItem";
3
- export interface ToggleGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "dir"> {
4
- /**
5
- * Toggles.Item elements
6
- */
7
- children: React.ReactNode;
8
- /**
9
- * Changes padding and font-size
10
- * @default "medium"
11
- */
12
- size?: "medium" | "small";
13
- /**
14
- * Controlled selected value
15
- */
16
- value?: string;
17
- /**
18
- * If not controlled, a default-value needs to be set
19
- */
20
- defaultValue?: string;
21
- /**
22
- * Callback for selected toggle
23
- */
24
- onChange: (value: string) => void;
25
- /**
26
- * Label describing ToggleGroup
27
- */
28
- label?: React.ReactNode;
29
- /**
30
- * Changes design and interaction-visuals
31
- * @default "action"
32
- */
33
- variant?: "action" | "neutral";
34
- }
1
+ import React from "react";
2
+ import { ToggleGroupProps } from "./ToggleGroup.types";
3
+ import ToggleItem from "./parts/ToggleItem";
35
4
  interface ToggleGroupComponent extends React.ForwardRefExoticComponent<ToggleGroupProps & React.RefAttributes<HTMLDivElement>> {
36
5
  /**
37
- * @see 🏷️ {@link ToggleGroupItemProps}
6
+ * @see 🏷️ {@link ToggleItem}
38
7
  */
39
- Item: React.ForwardRefExoticComponent<ToggleGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
8
+ Item: typeof ToggleItem;
40
9
  }
41
10
  /**
42
11
  * A component that displays a group of toggle buttons.
@@ -38,13 +38,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.ToggleGroup = void 0;
41
- const RadixToggleGroup = __importStar(require("@radix-ui/react-toggle-group"));
42
41
  const clsx_1 = __importDefault(require("clsx"));
43
42
  const react_1 = __importStar(require("react"));
44
43
  const typography_1 = require("../typography");
45
- const hooks_1 = require("../util/hooks");
46
- const ToggleItem_1 = __importDefault(require("./ToggleItem"));
47
- const context_1 = require("./context");
44
+ const util_1 = require("../util");
45
+ const ToggleGroup_context_1 = require("./ToggleGroup.context");
46
+ const ToggleItem_1 = __importDefault(require("./parts/ToggleItem"));
47
+ const useToggleGroup_1 = require("./useToggleGroup");
48
48
  /**
49
49
  * A component that displays a group of toggle buttons.
50
50
  *
@@ -61,31 +61,31 @@ const context_1 = require("./context");
61
61
  * ```
62
62
  */
63
63
  exports.ToggleGroup = (0, react_1.forwardRef)((_a, ref) => {
64
- var { className, children, onChange, size = "medium", label, value, defaultValue, "aria-describedby": desc, variant = "action" } = _a, rest = __rest(_a, ["className", "children", "onChange", "size", "label", "value", "defaultValue", "aria-describedby", "variant"]);
65
- const [groupValue, setGroupValue] = (0, react_1.useState)(defaultValue);
66
- const labelId = (0, hooks_1.useId)();
67
- const handleValueChange = (v) => {
68
- if (v !== "") {
69
- setGroupValue(v);
70
- onChange === null || onChange === void 0 ? void 0 : onChange(v);
71
- }
72
- };
64
+ var { className, children, onChange, size = "medium", label, value, defaultValue, "aria-describedby": userDescribedby, variant = "action", fill = false } = _a, rest = __rest(_a, ["className", "children", "onChange", "size", "label", "value", "defaultValue", "aria-describedby", "variant", "fill"]);
65
+ const descendants = (0, ToggleGroup_context_1.useToggleGroupDescendants)();
66
+ const toggleGroupContext = (0, useToggleGroup_1.useToggleGroup)({
67
+ defaultValue,
68
+ value,
69
+ onChange,
70
+ });
71
+ /**
72
+ * ToggleGroupProvider handles memoization.
73
+ */
74
+ const context = Object.assign(Object.assign({}, toggleGroupContext), { size });
75
+ const labelId = (0, util_1.useId)();
73
76
  if (!value && !defaultValue) {
74
- console.error("ToggleGroup without value/defaultvalue is not allowed");
77
+ console.error("ToggleGroup without value or defaultvalue is not allowed");
75
78
  }
76
- const describeBy = (0, clsx_1.default)({
77
- [desc !== null && desc !== void 0 ? desc : ""]: !!desc,
78
- [labelId !== null && labelId !== void 0 ? labelId : ""]: !!label,
79
- });
80
79
  if (!value && !defaultValue) {
81
80
  console.error("ToggleGroup needs either a value or defaultValue");
82
81
  }
83
- return (react_1.default.createElement(context_1.ToggleGroupContext.Provider, { value: {
84
- size,
85
- } },
86
- react_1.default.createElement("div", { className: (0, clsx_1.default)("navds-toggle-group__wrapper", className) },
87
- label && (react_1.default.createElement(typography_1.Label, { size: size, className: "navds-toggle-group__label", id: labelId }, label)),
88
- react_1.default.createElement(RadixToggleGroup.Root, Object.assign({}, rest, { onValueChange: handleValueChange, value: value !== null && value !== void 0 ? value : groupValue, defaultValue: defaultValue, ref: ref, className: (0, clsx_1.default)("navds-toggle-group", `navds-toggle-group--${size}`, `navds-toggle-group--${variant}`) }, (describeBy && { "aria-describedby": describeBy }), { role: "radiogroup", type: "single" }), children))));
82
+ return (react_1.default.createElement(ToggleGroup_context_1.ToggleGroupDescendantsProvider, { value: descendants },
83
+ react_1.default.createElement(ToggleGroup_context_1.ToggleGroupProvider, Object.assign({}, context),
84
+ react_1.default.createElement("div", { className: (0, clsx_1.default)("navds-toggle-group__wrapper", className, {
85
+ "navds-toggle-group__wrapper--fill": fill,
86
+ }) },
87
+ label && (react_1.default.createElement(typography_1.Label, { size: size, className: "navds-toggle-group__label", id: labelId }, label)),
88
+ react_1.default.createElement("div", Object.assign({}, rest, { ref: ref, className: (0, clsx_1.default)("navds-toggle-group", `navds-toggle-group--${size}`, `navds-toggle-group--${variant}`), "aria-describedby": (0, clsx_1.default)(userDescribedby, !!label && labelId) || undefined, role: "radiogroup" }), children)))));
89
89
  });
90
90
  exports.ToggleGroup.Item = ToggleItem_1.default;
91
91
  exports.default = exports.ToggleGroup;
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleGroup.js","sourceRoot":"","sources":["../../src/toggle-group/ToggleGroup.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAAiE;AACjE,gDAAsB;AACtB,+CAAoE;AACpE,8CAAsC;AACtC,yCAAsC;AACtC,8DAAgE;AAChE,uCAA+C;AAgD/C;;;;;;;;;;;;;;GAcG;AACU,QAAA,WAAW,GAAG,IAAA,kBAAU,EACnC,CACE,EAWC,EACD,GAAG,EACH,EAAE;QAbF,EACE,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,KAAK,EACL,KAAK,EACL,YAAY,EACZ,kBAAkB,EAAE,IAAI,EACxB,OAAO,GAAG,QAAQ,OAEnB,EADI,IAAI,cAVT,8GAWC,CADQ;IAIT,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAA,aAAK,GAAE,CAAC;IAExB,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,EAAE;QACtC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACb,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,cAAE,EAAC;QACpB,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI;QACpB,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK;KACzB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CACL,8BAAC,4BAAkB,CAAC,QAAQ,IAC1B,KAAK,EAAE;YACL,IAAI;SACL;QAED,uCAAK,SAAS,EAAE,IAAA,cAAE,EAAC,6BAA6B,EAAE,SAAS,CAAC;YACzD,KAAK,IAAI,CACR,8BAAC,kBAAK,IACJ,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,2BAA2B,EACrC,EAAE,EAAE,OAAO,IAEV,KAAK,CACA,CACT;YACD,8BAAC,gBAAgB,CAAC,IAAI,oBAChB,IAAI,IACR,aAAa,EAAE,iBAAiB,EAChC,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,UAAU,EAC1B,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,IAAA,cAAE,EACX,oBAAoB,EACpB,uBAAuB,IAAI,EAAE,EAC7B,uBAAuB,OAAO,EAAE,CACjC,IACG,CAAC,UAAU,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,IACtD,IAAI,EAAC,YAAY,EACjB,IAAI,EAAC,QAAQ,KAEZ,QAAQ,CACa,CACpB,CACsB,CAC/B,CAAC;AACJ,CAAC,CACsB,CAAC;AAE1B,mBAAW,CAAC,IAAI,GAAG,oBAAU,CAAC;AAE9B,kBAAe,mBAAW,CAAC"}
1
+ {"version":3,"file":"ToggleGroup.js","sourceRoot":"","sources":["../../src/toggle-group/ToggleGroup.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAsB;AACtB,+CAA0C;AAC1C,8CAAsC;AACtC,kCAAgC;AAChC,+DAI+B;AAE/B,oEAA4C;AAC5C,qDAAkD;AAYlD;;;;;;;;;;;;;;GAcG;AACU,QAAA,WAAW,GAAG,IAAA,kBAAU,EACnC,CACE,EAYC,EACD,GAAG,EACH,EAAE;QAdF,EACE,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,KAAK,EACL,KAAK,EACL,YAAY,EACZ,kBAAkB,EAAE,eAAe,EACnC,OAAO,GAAG,QAAQ,EAClB,IAAI,GAAG,KAAK,OAEb,EADI,IAAI,cAXT,sHAYC,CADQ;IAIT,MAAM,WAAW,GAAG,IAAA,+CAAyB,GAAE,CAAC;IAEhD,MAAM,kBAAkB,GAAG,IAAA,+BAAc,EAAC;QACxC,YAAY;QACZ,KAAK;QACL,QAAQ;KACT,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,OAAO,mCACR,kBAAkB,KACrB,IAAI,GACL,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,YAAK,GAAE,CAAC;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CACL,8BAAC,oDAA8B,IAAC,KAAK,EAAE,WAAW;QAChD,8BAAC,yCAAmB,oBAAK,OAAO;YAC9B,uCACE,SAAS,EAAE,IAAA,cAAE,EAAC,6BAA6B,EAAE,SAAS,EAAE;oBACtD,mCAAmC,EAAE,IAAI;iBAC1C,CAAC;gBAED,KAAK,IAAI,CACR,8BAAC,kBAAK,IACJ,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,2BAA2B,EACrC,EAAE,EAAE,OAAO,IAEV,KAAK,CACA,CACT;gBACD,uDACM,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,IAAA,cAAE,EACX,oBAAoB,EACpB,uBAAuB,IAAI,EAAE,EAC7B,uBAAuB,OAAO,EAAE,CACjC,sBAEC,IAAA,cAAE,EAAC,eAAe,EAAE,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,SAAS,EAEtD,IAAI,EAAC,YAAY,KAEhB,QAAQ,CACL,CACF,CACc,CACS,CAClC,CAAC;AACJ,CAAC,CACsB,CAAC;AAE1B,mBAAW,CAAC,IAAI,GAAG,oBAAU,CAAC;AAE9B,kBAAe,mBAAW,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { HTMLAttributes } from "react";
2
+ export interface ToggleGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "dir"> {
3
+ /**
4
+ * Toggles.Item elements.
5
+ */
6
+ children: React.ReactNode;
7
+ /**
8
+ * Changes padding and font-size.
9
+ * @default "medium"
10
+ */
11
+ size?: "medium" | "small";
12
+ /**
13
+ * Controlled selected value.
14
+ */
15
+ value?: string;
16
+ /**
17
+ * If not controlled, a default-value needs to be set.
18
+ */
19
+ defaultValue?: string;
20
+ /**
21
+ * Callback for selected toggle.
22
+ */
23
+ onChange: (value: string) => void;
24
+ /**
25
+ * Label describing ToggleGroup.
26
+ */
27
+ label?: React.ReactNode;
28
+ /**
29
+ * Changes design and interaction-visuals.
30
+ * @default "action"
31
+ */
32
+ variant?: "action" | "neutral";
33
+ /**
34
+ * Stretch each button to fill avaliable space in container.
35
+ * @default false
36
+ */
37
+ fill?: boolean;
38
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ToggleGroup.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.types.js","sourceRoot":"","sources":["../../src/toggle-group/ToggleGroup.types.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
- export { default as ToggleGroup, type ToggleGroupProps } from "./ToggleGroup";
2
- export { default as ToggleGroupItem, type ToggleGroupItemProps, } from "./ToggleItem";
1
+ export { default as ToggleGroup } from "./ToggleGroup";
2
+ export { type ToggleGroupProps } from "./ToggleGroup.types";
3
+ export { default as ToggleGroupItem, type ToggleGroupItemProps, } from "./parts/ToggleItem";
@@ -7,6 +7,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.ToggleGroupItem = exports.ToggleGroup = void 0;
8
8
  var ToggleGroup_1 = require("./ToggleGroup");
9
9
  Object.defineProperty(exports, "ToggleGroup", { enumerable: true, get: function () { return __importDefault(ToggleGroup_1).default; } });
10
- var ToggleItem_1 = require("./ToggleItem");
10
+ var ToggleItem_1 = require("./parts/ToggleItem");
11
11
  Object.defineProperty(exports, "ToggleGroupItem", { enumerable: true, get: function () { return __importDefault(ToggleItem_1).default; } });
12
12
  //# sourceMappingURL=index.js.map