@mortenbrudvik/waveui 0.14.1 → 0.16.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 (265) hide show
  1. package/README.md +413 -53
  2. package/dist/components/data-display/InfoButton.cjs +1 -1
  3. package/dist/components/data-display/InfoButton.cjs.map +1 -1
  4. package/dist/components/data-display/InfoButton.mjs +90 -82
  5. package/dist/components/data-display/InfoButton.mjs.map +1 -1
  6. package/dist/components/data-display/InfoLabel.cjs +1 -1
  7. package/dist/components/data-display/InfoLabel.cjs.map +1 -1
  8. package/dist/components/data-display/InfoLabel.mjs +19 -18
  9. package/dist/components/data-display/InfoLabel.mjs.map +1 -1
  10. package/dist/components/data-display/List.cjs +1 -1
  11. package/dist/components/data-display/List.cjs.map +1 -1
  12. package/dist/components/data-display/List.mjs +405 -219
  13. package/dist/components/data-display/List.mjs.map +1 -1
  14. package/dist/components/data-display/List.registry.cjs +1 -1
  15. package/dist/components/data-display/List.registry.cjs.map +1 -1
  16. package/dist/components/data-display/List.registry.mjs +12 -6
  17. package/dist/components/data-display/List.registry.mjs.map +1 -1
  18. package/dist/components/feedback/MessageBarGroup.cjs +2 -0
  19. package/dist/components/feedback/MessageBarGroup.cjs.map +1 -0
  20. package/dist/components/feedback/MessageBarGroup.mjs +63 -0
  21. package/dist/components/feedback/MessageBarGroup.mjs.map +1 -0
  22. package/dist/components/feedback/ProgressBar.cjs +1 -1
  23. package/dist/components/feedback/ProgressBar.cjs.map +1 -1
  24. package/dist/components/feedback/ProgressBar.mjs +41 -39
  25. package/dist/components/feedback/ProgressBar.mjs.map +1 -1
  26. package/dist/components/feedback/Toaster.cjs +1 -1
  27. package/dist/components/feedback/Toaster.cjs.map +1 -1
  28. package/dist/components/feedback/Toaster.mjs +222 -216
  29. package/dist/components/feedback/Toaster.mjs.map +1 -1
  30. package/dist/components/input/Combobox.cjs +1 -1
  31. package/dist/components/input/Combobox.cjs.map +1 -1
  32. package/dist/components/input/Combobox.mjs +163 -148
  33. package/dist/components/input/Combobox.mjs.map +1 -1
  34. package/dist/components/input/Dropdown.cjs +1 -1
  35. package/dist/components/input/Dropdown.cjs.map +1 -1
  36. package/dist/components/input/Dropdown.mjs +132 -117
  37. package/dist/components/input/Dropdown.mjs.map +1 -1
  38. package/dist/components/input/Listbox.cjs +1 -1
  39. package/dist/components/input/Listbox.cjs.map +1 -1
  40. package/dist/components/input/Listbox.mjs +90 -78
  41. package/dist/components/input/Listbox.mjs.map +1 -1
  42. package/dist/components/input/Option.cjs +1 -1
  43. package/dist/components/input/Option.cjs.map +1 -1
  44. package/dist/components/input/Option.data.cjs +2 -0
  45. package/dist/components/input/Option.data.cjs.map +1 -0
  46. package/dist/components/input/Option.data.mjs +114 -0
  47. package/dist/components/input/Option.data.mjs.map +1 -0
  48. package/dist/components/input/Option.mjs +21 -17
  49. package/dist/components/input/Option.mjs.map +1 -1
  50. package/dist/components/layout/Accordion.cjs +1 -1
  51. package/dist/components/layout/Accordion.cjs.map +1 -1
  52. package/dist/components/layout/Accordion.mjs +124 -109
  53. package/dist/components/layout/Accordion.mjs.map +1 -1
  54. package/dist/components/layout/Carousel.cjs +1 -1
  55. package/dist/components/layout/Carousel.cjs.map +1 -1
  56. package/dist/components/layout/Carousel.mjs +207 -193
  57. package/dist/components/layout/Carousel.mjs.map +1 -1
  58. package/dist/components/layout/FlatTree.cjs +2 -0
  59. package/dist/components/layout/FlatTree.cjs.map +1 -0
  60. package/dist/components/layout/FlatTree.context.cjs +2 -0
  61. package/dist/components/layout/FlatTree.context.cjs.map +1 -0
  62. package/dist/components/layout/FlatTree.context.mjs +20 -0
  63. package/dist/components/layout/FlatTree.context.mjs.map +1 -0
  64. package/dist/components/layout/FlatTree.item.cjs +2 -0
  65. package/dist/components/layout/FlatTree.item.cjs.map +1 -0
  66. package/dist/components/layout/FlatTree.item.mjs +90 -0
  67. package/dist/components/layout/FlatTree.item.mjs.map +1 -0
  68. package/dist/components/layout/FlatTree.mjs +276 -0
  69. package/dist/components/layout/FlatTree.mjs.map +1 -0
  70. package/dist/components/layout/TabList.cjs +1 -1
  71. package/dist/components/layout/TabList.cjs.map +1 -1
  72. package/dist/components/layout/TabList.mjs +149 -108
  73. package/dist/components/layout/TabList.mjs.map +1 -1
  74. package/dist/components/layout/Tree.cjs.map +1 -1
  75. package/dist/components/layout/Tree.context.cjs +1 -1
  76. package/dist/components/layout/Tree.context.cjs.map +1 -1
  77. package/dist/components/layout/Tree.context.mjs +2 -1
  78. package/dist/components/layout/Tree.context.mjs.map +1 -1
  79. package/dist/components/layout/Tree.core.cjs +1 -1
  80. package/dist/components/layout/Tree.core.cjs.map +1 -1
  81. package/dist/components/layout/Tree.core.mjs +162 -148
  82. package/dist/components/layout/Tree.core.mjs.map +1 -1
  83. package/dist/components/layout/Tree.mjs.map +1 -1
  84. package/dist/components/layout/Tree.selection.cjs +1 -1
  85. package/dist/components/layout/Tree.selection.cjs.map +1 -1
  86. package/dist/components/layout/Tree.selection.mjs +11 -57
  87. package/dist/components/layout/Tree.selection.mjs.map +1 -1
  88. package/dist/components/layout/useFlatTree.cjs +2 -0
  89. package/dist/components/layout/useFlatTree.cjs.map +1 -0
  90. package/dist/components/layout/useFlatTree.mjs +83 -0
  91. package/dist/components/layout/useFlatTree.mjs.map +1 -0
  92. package/dist/components/navigation/Menu.popover.cjs +1 -1
  93. package/dist/components/navigation/Menu.popover.cjs.map +1 -1
  94. package/dist/components/navigation/Menu.popover.mjs +154 -168
  95. package/dist/components/navigation/Menu.popover.mjs.map +1 -1
  96. package/dist/components/navigation/Nav.cjs +1 -1
  97. package/dist/components/navigation/Nav.cjs.map +1 -1
  98. package/dist/components/navigation/Nav.mjs +156 -136
  99. package/dist/components/navigation/Nav.mjs.map +1 -1
  100. package/dist/components/navigation/NavDrawer.cjs +1 -1
  101. package/dist/components/navigation/NavDrawer.cjs.map +1 -1
  102. package/dist/components/navigation/NavDrawer.mjs +48 -45
  103. package/dist/components/navigation/NavDrawer.mjs.map +1 -1
  104. package/dist/components/overlays/Dialog.cjs +1 -1
  105. package/dist/components/overlays/Dialog.cjs.map +1 -1
  106. package/dist/components/overlays/Dialog.mjs +128 -122
  107. package/dist/components/overlays/Dialog.mjs.map +1 -1
  108. package/dist/components/overlays/Dialog.slots.cjs +1 -1
  109. package/dist/components/overlays/Dialog.slots.cjs.map +1 -1
  110. package/dist/components/overlays/Dialog.slots.mjs +12 -12
  111. package/dist/components/overlays/Dialog.slots.mjs.map +1 -1
  112. package/dist/components/overlays/Drawer.cjs.map +1 -1
  113. package/dist/components/overlays/Drawer.mjs.map +1 -1
  114. package/dist/components/overlays/Drawer.panel.cjs +1 -1
  115. package/dist/components/overlays/Drawer.panel.cjs.map +1 -1
  116. package/dist/components/overlays/Drawer.panel.mjs +97 -81
  117. package/dist/components/overlays/Drawer.panel.mjs.map +1 -1
  118. package/dist/components/overlays/Drawer.root.cjs +1 -1
  119. package/dist/components/overlays/Drawer.root.cjs.map +1 -1
  120. package/dist/components/overlays/Drawer.root.mjs +34 -31
  121. package/dist/components/overlays/Drawer.root.mjs.map +1 -1
  122. package/dist/components/overlays/Popover.cjs +1 -1
  123. package/dist/components/overlays/Popover.cjs.map +1 -1
  124. package/dist/components/overlays/Popover.mjs +231 -216
  125. package/dist/components/overlays/Popover.mjs.map +1 -1
  126. package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
  127. package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
  128. package/dist/components/overlays/TeachingPopover.parts.cjs +1 -1
  129. package/dist/components/overlays/TeachingPopover.parts.cjs.map +1 -1
  130. package/dist/components/overlays/TeachingPopover.parts.mjs +199 -177
  131. package/dist/components/overlays/TeachingPopover.parts.mjs.map +1 -1
  132. package/dist/components/overlays/TeachingPopover.root.cjs +1 -1
  133. package/dist/components/overlays/TeachingPopover.root.cjs.map +1 -1
  134. package/dist/components/overlays/TeachingPopover.root.mjs +93 -92
  135. package/dist/components/overlays/TeachingPopover.root.mjs.map +1 -1
  136. package/dist/components/overlays/Tooltip.cjs +1 -1
  137. package/dist/components/overlays/Tooltip.cjs.map +1 -1
  138. package/dist/components/overlays/Tooltip.mjs +66 -61
  139. package/dist/components/overlays/Tooltip.mjs.map +1 -1
  140. package/dist/components/provider/WaveProvider.cjs +1 -1
  141. package/dist/components/provider/WaveProvider.cjs.map +1 -1
  142. package/dist/components/provider/WaveProvider.mjs +26 -23
  143. package/dist/components/provider/WaveProvider.mjs.map +1 -1
  144. package/dist/components/table/DataGrid.cjs +1 -1
  145. package/dist/components/table/DataGrid.cjs.map +1 -1
  146. package/dist/components/table/DataGrid.context.cjs +2 -0
  147. package/dist/components/table/DataGrid.context.cjs.map +1 -0
  148. package/dist/components/table/DataGrid.context.mjs +74 -0
  149. package/dist/components/table/DataGrid.context.mjs.map +1 -0
  150. package/dist/components/table/DataGrid.header.cjs +2 -0
  151. package/dist/components/table/DataGrid.header.cjs.map +1 -0
  152. package/dist/components/table/DataGrid.header.mjs +168 -0
  153. package/dist/components/table/DataGrid.header.mjs.map +1 -0
  154. package/dist/components/table/DataGrid.mjs +488 -591
  155. package/dist/components/table/DataGrid.mjs.map +1 -1
  156. package/dist/components/table/DataGrid.sizing.cjs +2 -0
  157. package/dist/components/table/DataGrid.sizing.cjs.map +1 -0
  158. package/dist/components/table/DataGrid.sizing.mjs +187 -0
  159. package/dist/components/table/DataGrid.sizing.mjs.map +1 -0
  160. package/dist/components/table/DataGrid.store.cjs +2 -0
  161. package/dist/components/table/DataGrid.store.cjs.map +1 -0
  162. package/dist/components/table/DataGrid.store.mjs +108 -0
  163. package/dist/components/table/DataGrid.store.mjs.map +1 -0
  164. package/dist/components/table/DataGrid.window.cjs +2 -0
  165. package/dist/components/table/DataGrid.window.cjs.map +1 -0
  166. package/dist/components/table/DataGrid.window.mjs +165 -0
  167. package/dist/components/table/DataGrid.window.mjs.map +1 -0
  168. package/dist/components/table/Table.cjs +1 -1
  169. package/dist/components/table/Table.cjs.map +1 -1
  170. package/dist/components/table/Table.mjs +74 -72
  171. package/dist/components/table/Table.mjs.map +1 -1
  172. package/dist/components/table/Table.resize.cjs +2 -0
  173. package/dist/components/table/Table.resize.cjs.map +1 -0
  174. package/dist/components/table/Table.resize.mjs +98 -0
  175. package/dist/components/table/Table.resize.mjs.map +1 -0
  176. package/dist/components/table/useGridNavigation.cjs +1 -1
  177. package/dist/components/table/useGridNavigation.cjs.map +1 -1
  178. package/dist/components/table/useGridNavigation.mjs +343 -140
  179. package/dist/components/table/useGridNavigation.mjs.map +1 -1
  180. package/dist/components/table/useTableColumnSizing.cjs +2 -0
  181. package/dist/components/table/useTableColumnSizing.cjs.map +1 -0
  182. package/dist/components/table/useTableColumnSizing.mjs +76 -0
  183. package/dist/components/table/useTableColumnSizing.mjs.map +1 -0
  184. package/dist/components/table/useTableFeatures.cjs +2 -0
  185. package/dist/components/table/useTableFeatures.cjs.map +1 -0
  186. package/dist/components/table/useTableFeatures.mjs +110 -0
  187. package/dist/components/table/useTableFeatures.mjs.map +1 -0
  188. package/dist/components/table/useTableSelection.cjs +2 -0
  189. package/dist/components/table/useTableSelection.cjs.map +1 -0
  190. package/dist/components/table/useTableSelection.mjs +39 -0
  191. package/dist/components/table/useTableSelection.mjs.map +1 -0
  192. package/dist/components/table/useTableSort.cjs +2 -0
  193. package/dist/components/table/useTableSort.cjs.map +1 -0
  194. package/dist/components/table/useTableSort.mjs +58 -0
  195. package/dist/components/table/useTableSort.mjs.map +1 -0
  196. package/dist/hooks/useActiveDescendant.cjs +1 -1
  197. package/dist/hooks/useActiveDescendant.cjs.map +1 -1
  198. package/dist/hooks/useActiveDescendant.mjs +33 -25
  199. package/dist/hooks/useActiveDescendant.mjs.map +1 -1
  200. package/dist/hooks/useCollapsePresence.cjs +2 -0
  201. package/dist/hooks/useCollapsePresence.cjs.map +1 -0
  202. package/dist/hooks/useCollapsePresence.mjs +21 -0
  203. package/dist/hooks/useCollapsePresence.mjs.map +1 -0
  204. package/dist/hooks/useFocusBeforeClose.cjs +2 -0
  205. package/dist/hooks/useFocusBeforeClose.cjs.map +1 -0
  206. package/dist/hooks/useFocusBeforeClose.mjs +33 -0
  207. package/dist/hooks/useFocusBeforeClose.mjs.map +1 -0
  208. package/dist/hooks/useListbox.cjs +1 -1
  209. package/dist/hooks/useListbox.cjs.map +1 -1
  210. package/dist/hooks/useListbox.mjs +140 -130
  211. package/dist/hooks/useListbox.mjs.map +1 -1
  212. package/dist/hooks/useMotion.cjs +2 -0
  213. package/dist/hooks/useMotion.cjs.map +1 -0
  214. package/dist/hooks/useMotion.mjs +14 -0
  215. package/dist/hooks/useMotion.mjs.map +1 -0
  216. package/dist/hooks/usePresenceGroup.cjs +2 -0
  217. package/dist/hooks/usePresenceGroup.cjs.map +1 -0
  218. package/dist/hooks/usePresenceGroup.mjs +68 -0
  219. package/dist/hooks/usePresenceGroup.mjs.map +1 -0
  220. package/dist/hooks/useRovingTabIndex.cjs +1 -1
  221. package/dist/hooks/useRovingTabIndex.cjs.map +1 -1
  222. package/dist/hooks/useRovingTabIndex.mjs +1 -1
  223. package/dist/hooks/useRovingTabIndex.mjs.map +1 -1
  224. package/dist/hooks/useSelection.cjs +2 -0
  225. package/dist/hooks/useSelection.cjs.map +1 -0
  226. package/dist/hooks/useSelection.mjs +57 -0
  227. package/dist/hooks/useSelection.mjs.map +1 -0
  228. package/dist/hooks/useVirtualWindow.cjs +2 -0
  229. package/dist/hooks/useVirtualWindow.cjs.map +1 -0
  230. package/dist/hooks/useVirtualWindow.mjs +102 -0
  231. package/dist/hooks/useVirtualWindow.mjs.map +1 -0
  232. package/dist/index.cjs +1 -1
  233. package/dist/index.d.cts +2249 -179
  234. package/dist/index.d.ts +2249 -179
  235. package/dist/index.mjs +147 -135
  236. package/dist/lib/classNames.cjs +1 -1
  237. package/dist/lib/classNames.cjs.map +1 -1
  238. package/dist/lib/classNames.mjs +125 -95
  239. package/dist/lib/classNames.mjs.map +1 -1
  240. package/dist/lib/columnSizing.cjs +2 -0
  241. package/dist/lib/columnSizing.cjs.map +1 -0
  242. package/dist/lib/columnSizing.mjs +27 -0
  243. package/dist/lib/columnSizing.mjs.map +1 -0
  244. package/dist/lib/flatTree.cjs +2 -0
  245. package/dist/lib/flatTree.cjs.map +1 -0
  246. package/dist/lib/flatTree.mjs +118 -0
  247. package/dist/lib/flatTree.mjs.map +1 -0
  248. package/dist/lib/motion.cjs +2 -0
  249. package/dist/lib/motion.cjs.map +1 -0
  250. package/dist/lib/motion.mjs +43 -0
  251. package/dist/lib/motion.mjs.map +1 -0
  252. package/dist/lib/selection.cjs +2 -0
  253. package/dist/lib/selection.cjs.map +1 -0
  254. package/dist/lib/selection.mjs +28 -0
  255. package/dist/lib/selection.mjs.map +1 -0
  256. package/dist/lib/treeCascade.cjs +2 -0
  257. package/dist/lib/treeCascade.cjs.map +1 -0
  258. package/dist/lib/treeCascade.mjs +52 -0
  259. package/dist/lib/treeCascade.mjs.map +1 -0
  260. package/dist/lib/virtual.cjs +2 -0
  261. package/dist/lib/virtual.cjs.map +1 -0
  262. package/dist/lib/virtual.mjs +54 -0
  263. package/dist/lib/virtual.mjs.map +1 -0
  264. package/dist/styles.css +1 -1
  265. package/package.json +2 -1
@@ -10,15 +10,18 @@ import { useControllable as h } from "../../hooks/useControllable.mjs";
10
10
  import { useId as g } from "../../hooks/useId.mjs";
11
11
  import { useRovingTabIndex as _ } from "../../hooks/useRovingTabIndex.mjs";
12
12
  import { useMergedRefs as v } from "../../hooks/useMergedRefs.mjs";
13
- import { disabledStyles as y, focusRing as b, focusRingInset as x, forcedColors as S } from "../../lib/styles.mjs";
14
- import { getPartId as C } from "./disclosureIds.mjs";
15
- import * as w from "react";
16
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
13
+ import { usePrefersReducedMotion as ee } from "../../hooks/usePrefersReducedMotion.mjs";
14
+ import { disabledStyles as te, focusRing as y, focusRingInset as b, forcedColors as x } from "../../lib/styles.mjs";
15
+ import { tabIndicatorMotion as S } from "../../lib/motion.mjs";
16
+ import { useMotionClasses as C } from "../../hooks/useMotion.mjs";
17
+ import { getPartId as w } from "./disclosureIds.mjs";
18
+ import * as T from "react";
19
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
17
20
  //#region src/components/layout/TabList.tsx
18
- function D(e) {
21
+ function O(e) {
19
22
  o(`TabList:duplicate:${e}`, `TabList: several tabs share the value "${e}". Tab values must be unique within a TabList; tabs with the same value share one id and are selected (and tab stops) together.`);
20
23
  }
21
- function O() {
24
+ function k() {
22
25
  let e = {
23
26
  tab: /* @__PURE__ */ new Map(),
24
27
  panel: /* @__PURE__ */ new Map()
@@ -28,7 +31,7 @@ function O() {
28
31
  return {
29
32
  register(t, n, i) {
30
33
  let a = e[t], o = a.get(n) ?? [];
31
- return t === "tab" && o.length > 0 && D(n), a.set(n, [...o, i]), r(), () => {
34
+ return t === "tab" && o.length > 0 && O(n), a.set(n, [...o, i]), r(), () => {
32
35
  let e = [...a.get(n) ?? []], t = e.indexOf(i);
33
36
  t !== -1 && e.splice(t, 1), e.length > 0 ? a.set(n, e) : a.delete(n), r();
34
37
  };
@@ -44,12 +47,12 @@ function O() {
44
47
  }
45
48
  };
46
49
  }
47
- var k = {
50
+ var A = {
48
51
  register: () => () => {},
49
52
  get: () => void 0,
50
53
  markReady: () => {},
51
54
  subscribe: () => () => {}
52
- }, A = w.createContext(null), j = {
55
+ }, j = T.createContext(null), M = {
53
56
  orientation: "horizontal",
54
57
  appearance: "transparent",
55
58
  size: "medium",
@@ -59,83 +62,113 @@ var k = {
59
62
  getGeneratedId: (e, t) => `wave-tablist-inert-${e}-${t}`,
60
63
  getStaticTabId: (e) => `wave-tablist-inert-tab-${e}`,
61
64
  getStaticPanelId: () => void 0,
62
- registry: k
65
+ registry: A,
66
+ indicator: null,
67
+ indicatorMotion: ""
63
68
  };
64
- function M(e) {
65
- return w.useContext(A) || (r(e, "<TabList>"), j);
66
- }
67
69
  function N(e) {
70
+ return T.useContext(j) || (r(e, "<TabList>"), M);
71
+ }
72
+ function P(e) {
68
73
  let t = e["aria-disabled"];
69
74
  return e.disabled === !0 || t === !0 || t === "true";
70
75
  }
71
- function P(e) {
76
+ function F(e) {
72
77
  return typeof e == "string" && e !== "" ? e : null;
73
78
  }
74
- function F(e, t) {
75
- if (Array.isArray(e)) return e.forEach((e) => F(e, t)), t;
76
- if (!w.isValidElement(e)) return t;
79
+ function I(e, t) {
80
+ if (Array.isArray(e)) return e.forEach((e) => I(e, t)), t;
81
+ if (!T.isValidElement(e)) return t;
77
82
  let { props: r } = e, i = n(e, { suspend: !1 }), a = typeof r.value == "string" ? r.value : void 0;
78
83
  if (i === W) {
79
84
  if (a !== void 0) {
80
- t.firstEnabled === void 0 && !N(r) && (t.firstEnabled = a);
81
- let e = P(r.id);
85
+ t.firstEnabled === void 0 && !P(r) && (t.firstEnabled = a);
86
+ let e = F(r.id);
82
87
  e !== null && t.tabIds.push([a, e]);
83
88
  }
84
89
  return t;
85
90
  }
86
- return i === G ? (a !== void 0 && t.panels.push([a, P(r.id)]), t) : i === z ? t : F(r.children, t);
91
+ return i === G ? (a !== void 0 && t.panels.push([a, F(r.id)]), t) : i === B ? t : I(r.children, t);
87
92
  }
88
- function I(e, t) {
89
- if (Array.isArray(e)) return e.some((e) => I(e, t));
90
- if (!w.isValidElement(e)) return !1;
93
+ function L(e, t) {
94
+ if (Array.isArray(e)) return e.some((e) => L(e, t));
95
+ if (!T.isValidElement(e)) return !1;
91
96
  let r = n(e, { suspend: !1 });
92
- return r === W ? t === "tab" : r === G || r === K ? t === "panel" : r !== z && I(e.props.children, t);
97
+ return r === W ? t === "tab" : r === G || r === K ? t === "panel" : r !== B && L(e.props.children, t);
93
98
  }
94
- function ee(e) {
95
- return I(e, "panel") && !I(e, "tab");
99
+ function ne(e) {
100
+ return L(e, "panel") && !L(e, "tab");
96
101
  }
97
- var L = w.createContext(null), R = "TabList.Panel was rendered inside the role=\"tablist\" element, where only tabs belong (axe aria-required-children). The TabList moves a Panel after the tablist when it is its child, or in a wrapper that holds no Tab, but it cannot see a Panel that a component renders itself, or separate a wrapper's Panels from its Tabs. Place such panels inside TabList.Panels, which renders after the tablist.", z = ({ value: n, defaultValue: r, onValueChange: o, orientation: s, appearance: c = "transparent", size: d = "medium", selectTabOnFocus: f = !0, selectedValue: p, defaultSelectedValue: y, onTabSelect: b, vertical: x, className: S, children: D, onKeyDown: k, onFocus: j, ref: M, ...N }) => {
98
- let P = i("TabList", n, p, "selectedValue", "value"), I = i("TabList", r, y, "defaultSelectedValue", "defaultValue"), R = i("TabList", s, x === void 0 ? void 0 : x ? "vertical" : "horizontal", "vertical", "orientation") ?? "horizontal";
102
+ var R = T.createContext(null), z = "TabList.Panel was rendered inside the role=\"tablist\" element, where only tabs belong (axe aria-required-children). The TabList moves a Panel after the tablist when it is its child, or in a wrapper that holds no Tab, but it cannot see a Panel that a component renders itself, or separate a wrapper's Panels from its Tabs. Place such panels inside TabList.Panels, which renders after the tablist.", B = ({ value: n, defaultValue: r, onValueChange: o, orientation: s, appearance: c = "transparent", size: d = "medium", selectTabOnFocus: f = !0, motion: p, selectedValue: te, defaultSelectedValue: y, onTabSelect: b, vertical: x, className: O, children: A, onKeyDown: M, onFocus: N, ref: P, ...F }) => {
103
+ let L = i("TabList", n, te, "selectedValue", "value"), z = i("TabList", r, y, "defaultSelectedValue", "defaultValue"), B = i("TabList", s, x === void 0 ? void 0 : x ? "vertical" : "horizontal", "vertical", "orientation") ?? "horizontal";
99
104
  b && a("TabList", "onTabSelect", "onValueChange", "`onValueChange` is called only when the selected tab changes.");
100
- let [z, B, V] = h(P, I ?? "", o), H = JSON.stringify(F(D, {
105
+ let [V, re, ie] = h(L, z ?? "", o), H = JSON.stringify(I(A, {
101
106
  tabIds: [],
102
107
  panels: []
103
- })), U = w.useMemo(() => {
108
+ })), U = T.useMemo(() => {
104
109
  let e = JSON.parse(H);
105
110
  return {
106
111
  firstEnabled: e.firstEnabled,
107
112
  tabIds: new Map(e.tabIds),
108
113
  panels: new Map(e.panels)
109
114
  };
110
- }, [H]), W = !V && z === "", { containerProps: G, getTabIndex: K } = _({
111
- activeValue: W ? U.firstEnabled ?? null : z,
112
- orientation: R,
115
+ }, [H]), W = !ie && V === "", { containerProps: G, getTabIndex: K } = _({
116
+ activeValue: W ? U.firstEnabled ?? null : V,
117
+ orientation: B,
113
118
  loop: !0,
114
119
  onFocusMove: f ? (e) => J(e) : void 0
115
- }), q = w.useCallback((e) => W ? K(e) === 0 : z === e, [
120
+ }), q = T.useCallback((e) => W ? K(e) === 0 : V === e, [
116
121
  W,
117
122
  K,
118
- z
123
+ V
119
124
  ]), J = m((e) => {
120
- b?.(e), q(e) || B(e);
121
- }), Y = g("tablist"), [X] = w.useState(O);
122
- w.useLayoutEffect(() => X.markReady(), [X]);
123
- let te = w.useMemo(() => ({
124
- orientation: R,
125
+ b?.(e), q(e) || re(e);
126
+ }), Y = g("tablist"), [X] = T.useState(k);
127
+ T.useLayoutEffect(() => X.markReady(), [X]);
128
+ let Z = B === "vertical", Q = C(p, S), ae = ee(), oe = c === "transparent" && Q !== "" && !ae, [$, se] = T.useState(null), ce = T.useRef(null), le = T.useRef(null);
129
+ T.useLayoutEffect(() => {
130
+ let e = ce.current;
131
+ if (!e) return;
132
+ let t = Array.from(e.querySelectorAll("[role=\"tab\"]")), n = (e) => e.getAttribute("data-roving-value"), r = t.find((e) => {
133
+ let t = n(e);
134
+ return t !== null && q(t);
135
+ }), i = r ? n(r) : null, a = le.current;
136
+ if (le.current = i, !oe || !r || i === null || a === null || i === a) return;
137
+ let o = t.find((e) => n(e) === a);
138
+ if (!o) return;
139
+ let s = o.getBoundingClientRect(), c = r.getBoundingClientRect(), l = Z ? c.height : c.width;
140
+ l !== 0 && se({
141
+ value: i,
142
+ offset: Z ? s.top - c.top : s.left - c.left,
143
+ scale: (Z ? s.height : s.width) / l
144
+ });
145
+ }, [
146
+ q,
147
+ oe,
148
+ Z
149
+ ]), T.useEffect(() => {
150
+ if (!$) return;
151
+ let e = requestAnimationFrame(() => se(null));
152
+ return () => cancelAnimationFrame(e);
153
+ }, [$]);
154
+ let ue = T.useMemo(() => ({
155
+ orientation: B,
125
156
  appearance: c,
126
157
  size: d,
127
158
  isSelected: q,
128
159
  select: J,
129
160
  getTabIndex: K,
130
- getGeneratedId: (e, t) => C(Y, e, t),
131
- getStaticTabId: (e) => U.tabIds.get(e) ?? C(Y, "tab", e),
161
+ getGeneratedId: (e, t) => w(Y, e, t),
162
+ getStaticTabId: (e) => U.tabIds.get(e) ?? w(Y, "tab", e),
132
163
  getStaticPanelId: (e) => {
133
164
  let t = U.panels.get(e);
134
- if (t !== void 0) return t ?? C(Y, "panel", e);
165
+ if (t !== void 0) return t ?? w(Y, "panel", e);
135
166
  },
136
- registry: X
167
+ registry: X,
168
+ indicator: $,
169
+ indicatorMotion: Q
137
170
  }), [
138
- R,
171
+ B,
139
172
  c,
140
173
  d,
141
174
  q,
@@ -143,115 +176,123 @@ var L = w.createContext(null), R = "TabList.Panel was rendered inside the role=\
143
176
  K,
144
177
  Y,
145
178
  U,
146
- X
147
- ]), ne = v(M, G.ref), Z = [], Q = [];
148
- t(D).forEach(({ key: e, node: t }) => {
149
- let n = /* @__PURE__ */ T(w.Fragment, { children: t }, e);
150
- (ee(t) ? Q : Z).push(n);
151
- });
152
- let $ = R === "vertical";
153
- return /* @__PURE__ */ T(A.Provider, {
154
- value: te,
155
- children: /* @__PURE__ */ E("div", {
156
- className: e($ && "flex"),
157
- children: [/* @__PURE__ */ T("div", {
179
+ X,
180
+ $,
181
+ Q
182
+ ]), de = v(P, G.ref, ce), fe = [], pe = [];
183
+ return t(A).forEach(({ key: e, node: t }) => {
184
+ let n = /* @__PURE__ */ E(T.Fragment, { children: t }, e);
185
+ (ne(t) ? pe : fe).push(n);
186
+ }), /* @__PURE__ */ E(j.Provider, {
187
+ value: ue,
188
+ children: /* @__PURE__ */ D("div", {
189
+ className: e(Z && "flex"),
190
+ children: [/* @__PURE__ */ E("div", {
158
191
  role: "tablist",
159
- "aria-orientation": R,
192
+ "aria-orientation": B,
160
193
  "data-appearance": c,
161
194
  "data-size": d,
162
- "data-orientation": R,
163
- className: e(u.root, $ ? "flex w-40 flex-col" : "flex", c === "transparent" ? $ ? "border-e border-border" : "border-b border-border" : "gap-1", S),
164
- ...N,
195
+ "data-orientation": B,
196
+ className: e(u.root, Z ? "flex w-40 flex-col" : "flex", c === "transparent" ? Z ? "border-e border-border" : "border-b border-border" : "gap-1", O),
197
+ ...F,
165
198
  "data-roving-container": "",
166
- onKeyDown: l(k, G.onKeyDown),
167
- onFocus: l(j, G.onFocus, { checkDefaultPrevented: !1 }),
168
- ref: ne,
169
- children: /* @__PURE__ */ T(L.Provider, {
199
+ onKeyDown: l(M, G.onKeyDown),
200
+ onFocus: l(N, G.onFocus, { checkDefaultPrevented: !1 }),
201
+ ref: de,
202
+ children: /* @__PURE__ */ E(R.Provider, {
170
203
  value: "tabs",
171
- children: Z
204
+ children: fe
172
205
  })
173
- }), /* @__PURE__ */ T(L.Provider, {
206
+ }), /* @__PURE__ */ E(R.Provider, {
174
207
  value: "panels",
175
- children: Q
208
+ children: pe
176
209
  })]
177
210
  })
178
211
  });
179
212
  };
180
- z.displayName = "TabList";
181
- var B = {
213
+ B.displayName = "TabList";
214
+ var V = {
182
215
  small: "px-3 py-1.5",
183
216
  medium: "px-4 py-2",
184
217
  large: "px-5 py-3"
185
- }, V = {
218
+ }, re = {
186
219
  small: "p-1.5",
187
220
  medium: "p-2",
188
221
  large: "p-3"
189
- }, H = {
222
+ }, ie = {
190
223
  small: "text-caption-1",
191
224
  medium: "text-body-1",
192
225
  large: "text-body-2"
226
+ }, H = {
227
+ horizontal: "relative border-b-2 border-b-transparent after:absolute after:inset-x-0 after:-bottom-0.5 after:border-b-2 after:border-b-primary after:origin-left after:translate-x-[var(--wave-tab-indicator-offset,0px)] after:scale-x-[var(--wave-tab-indicator-scale,1)] forced-colors:after:border-[Highlight]",
228
+ vertical: "relative border-s-2 border-s-transparent after:absolute after:inset-y-0 after:-start-0.5 after:border-s-2 after:border-s-primary after:origin-top after:translate-y-[var(--wave-tab-indicator-offset,0px)] after:scale-y-[var(--wave-tab-indicator-scale,1)] forced-colors:after:border-[Highlight]"
193
229
  };
194
230
  function U(t, n, r) {
195
231
  switch (t) {
196
232
  case "subtle":
197
233
  case "subtle-circular": {
198
234
  let r = t === "subtle" ? "rounded-md" : "rounded-full";
199
- return n ? e(r, "bg-subtle-selected text-foreground", S.selectedContainer) : e(r, "text-muted-foreground not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground not-disabled:not-aria-disabled:active:bg-subtle-pressed");
235
+ return n ? e(r, "bg-subtle-selected text-foreground", x.selectedContainer) : e(r, "text-muted-foreground not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground not-disabled:not-aria-disabled:active:bg-subtle-pressed");
200
236
  }
201
- case "filled-circular": return n ? e("rounded-full bg-primary text-primary-foreground not-disabled:not-aria-disabled:hover:bg-primary-hover not-disabled:not-aria-disabled:active:bg-primary-pressed", S.selectedContainer) : "rounded-full bg-muted text-muted-foreground not-disabled:not-aria-disabled:hover:bg-muted-hover not-disabled:not-aria-disabled:hover:text-foreground not-disabled:not-aria-disabled:active:bg-muted-pressed";
202
- default: return n ? e("text-primary forced-colors:border-[Highlight]", r ? "border-s-2 border-s-primary" : "border-b-2 border-b-primary") : "text-muted-foreground not-disabled:not-aria-disabled:hover:text-foreground";
237
+ case "filled-circular": return n ? e("rounded-full bg-primary text-primary-foreground not-disabled:not-aria-disabled:hover:bg-primary-hover not-disabled:not-aria-disabled:active:bg-primary-pressed", x.selectedContainer) : "rounded-full bg-muted text-muted-foreground not-disabled:not-aria-disabled:hover:bg-muted-hover not-disabled:not-aria-disabled:hover:text-foreground not-disabled:not-aria-disabled:active:bg-muted-pressed";
238
+ default: return e("border-transparent forced-colors:border-[Canvas]", n ? e("text-primary", H[r ? "vertical" : "horizontal"]) : "text-muted-foreground not-disabled:not-aria-disabled:hover:text-foreground");
203
239
  }
204
240
  }
205
- var W = ({ value: t, id: n, icon: r, className: i, children: a, onClick: u, ref: d, ...f }) => {
206
- let m = M("TabList.Tab"), h = m.isSelected(t), g = m.orientation === "vertical", _ = N(f), v = !!r && c(r), b = v && !c(a), S = f["aria-label"], C = f["aria-labelledby"], T = typeof S == "string" && S.trim() !== "" || typeof C == "string" && C.trim() !== "";
207
- w.useEffect(() => {
208
- b && !T && o("TabList.Tab:icon-only-name", "TabList.Tab: a tab with an icon and no text has no accessible name. Pass `aria-label` (or `aria-labelledby`).");
209
- }, [b, T]);
210
- let { registry: D } = m, O = P(n) ?? m.getGeneratedId("tab", t);
211
- w.useLayoutEffect(() => D.register("tab", t, O), [
212
- D,
241
+ var W = ({ value: t, id: n, icon: r, className: i, style: a, children: u, onClick: d, ref: f, ...m }) => {
242
+ let h = N("TabList.Tab"), g = h.isSelected(t), _ = h.orientation === "vertical", v = g && h.indicator?.value === t ? h.indicator : null, ee = g && h.appearance === "transparent" && !v ? h.indicatorMotion : void 0, y = v ? {
243
+ ...a,
244
+ "--wave-tab-indicator-offset": `${v.offset}px`,
245
+ "--wave-tab-indicator-scale": String(v.scale)
246
+ } : a, x = P(m), S = !!r && c(r), C = S && !c(u), w = m["aria-label"], E = m["aria-labelledby"], O = typeof w == "string" && w.trim() !== "" || typeof E == "string" && E.trim() !== "";
247
+ T.useEffect(() => {
248
+ C && !O && o("TabList.Tab:icon-only-name", "TabList.Tab: a tab with an icon and no text has no accessible name. Pass `aria-label` (or `aria-labelledby`).");
249
+ }, [C, O]);
250
+ let { registry: k } = h, A = F(n) ?? h.getGeneratedId("tab", t);
251
+ T.useLayoutEffect(() => k.register("tab", t, A), [
252
+ k,
213
253
  t,
214
- O
254
+ A
215
255
  ]);
216
- let k = w.useSyncExternalStore(D.subscribe, () => D.get("panel", t), () => void 0), A = k === void 0 ? m.getStaticPanelId(t) : k ?? void 0;
217
- return /* @__PURE__ */ E("button", {
256
+ let j = T.useSyncExternalStore(k.subscribe, () => k.get("panel", t), () => void 0), M = j === void 0 ? h.getStaticPanelId(t) : j ?? void 0;
257
+ return /* @__PURE__ */ D("button", {
218
258
  type: "button",
219
259
  role: "tab",
220
- className: e(p.root, "font-semibold transition-colors motion-reduce:transition-none", b ? V[m.size] : B[m.size], H[m.size], v && "inline-flex items-center justify-center gap-2", g && "text-start", U(m.appearance, h, g), y, x, i),
221
- ...f,
222
- id: O,
223
- "aria-selected": h,
224
- "aria-controls": h ? A : void 0,
225
- tabIndex: m.getTabIndex(t),
260
+ className: e(p.root, "font-semibold transition-colors motion-reduce:transition-none", C ? re[h.size] : V[h.size], ie[h.size], S && "inline-flex items-center justify-center gap-2", _ && "text-start", U(h.appearance, g, _), te, b, ee, i),
261
+ style: y,
262
+ ...m,
263
+ id: A,
264
+ "aria-selected": g,
265
+ "aria-controls": g ? M : void 0,
266
+ tabIndex: h.getTabIndex(t),
226
267
  "data-roving-value": t,
227
- "data-selected": h ? "" : void 0,
228
- "data-icon-only": b ? "" : void 0,
229
- onClick: l(u, () => {
230
- _ || m.select(t);
268
+ "data-selected": g ? "" : void 0,
269
+ "data-icon-only": C ? "" : void 0,
270
+ onClick: l(d, () => {
271
+ x || h.select(t);
231
272
  }),
232
- ref: d,
233
- children: [v && s(r, "span", p.icon, { "aria-hidden": !0 }), a]
273
+ ref: f,
274
+ children: [S && s(r, "span", p.icon, { "aria-hidden": !0 }), u]
234
275
  });
235
276
  };
236
277
  W.displayName = "Tab";
237
278
  var G = ({ value: t, id: n, children: r, className: i, ref: a, ...s }) => {
238
- let c = M("TabList.Panel"), l = w.useContext(L) === "tabs";
239
- w.useEffect(() => {
240
- l && o("TabList.Panel:inside-tablist", R);
279
+ let c = N("TabList.Panel"), l = T.useContext(R) === "tabs";
280
+ T.useEffect(() => {
281
+ l && o("TabList.Panel:inside-tablist", z);
241
282
  }, [l]);
242
- let { registry: u } = c, f = P(n) ?? c.getGeneratedId("panel", t);
243
- w.useLayoutEffect(() => u.register("panel", t, f), [
283
+ let { registry: u } = c, f = F(n) ?? c.getGeneratedId("panel", t);
284
+ T.useLayoutEffect(() => u.register("panel", t, f), [
244
285
  u,
245
286
  t,
246
287
  f
247
288
  ]);
248
- let p = w.useSyncExternalStore(u.subscribe, () => u.get("tab", t), () => void 0);
289
+ let p = T.useSyncExternalStore(u.subscribe, () => u.get("tab", t), () => void 0);
249
290
  if (!c.isSelected(t)) return null;
250
291
  let m = p === void 0 ? c.getStaticTabId(t) : p ?? void 0;
251
- return /* @__PURE__ */ T("div", {
292
+ return /* @__PURE__ */ E("div", {
252
293
  role: "tabpanel",
253
294
  tabIndex: 0,
254
- className: e(d.root, "p-4", b, i),
295
+ className: e(d.root, "p-4", y, i),
255
296
  ...s,
256
297
  id: f,
257
298
  "aria-labelledby": m,
@@ -260,14 +301,14 @@ var G = ({ value: t, id: n, children: r, className: i, ref: a, ...s }) => {
260
301
  });
261
302
  };
262
303
  G.displayName = "TabPanel";
263
- var K = ({ className: t, children: n, ref: r, ...i }) => /* @__PURE__ */ T("div", {
304
+ var K = ({ className: t, children: n, ref: r, ...i }) => /* @__PURE__ */ E("div", {
264
305
  ref: r,
265
306
  className: e(f.root, "min-w-0 flex-1", t),
266
307
  ...i,
267
308
  children: n
268
309
  });
269
310
  K.displayName = "TabPanels";
270
- var q = /* @__PURE__ */ Object.assign(z, {
311
+ var q = /* @__PURE__ */ Object.assign(B, {
271
312
  Tab: W,
272
313
  Panel: G,
273
314
  Panels: K