@mortenbrudvik/waveui 0.7.0 → 0.9.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 (439) hide show
  1. package/README.md +564 -155
  2. package/dist/components/button/Button.cjs +1 -1
  3. package/dist/components/button/Button.cjs.map +1 -1
  4. package/dist/components/button/Button.mjs +36 -35
  5. package/dist/components/button/Button.mjs.map +1 -1
  6. package/dist/components/button/Button.slots.cjs +1 -1
  7. package/dist/components/button/Button.slots.cjs.map +1 -1
  8. package/dist/components/button/Button.slots.mjs +31 -21
  9. package/dist/components/button/Button.slots.mjs.map +1 -1
  10. package/dist/components/button/CompoundButton.cjs +1 -1
  11. package/dist/components/button/CompoundButton.cjs.map +1 -1
  12. package/dist/components/button/CompoundButton.mjs +31 -29
  13. package/dist/components/button/CompoundButton.mjs.map +1 -1
  14. package/dist/components/button/Link.cjs +1 -1
  15. package/dist/components/button/Link.cjs.map +1 -1
  16. package/dist/components/button/Link.mjs +24 -23
  17. package/dist/components/button/Link.mjs.map +1 -1
  18. package/dist/components/button/MenuButton.cjs +1 -1
  19. package/dist/components/button/MenuButton.cjs.map +1 -1
  20. package/dist/components/button/MenuButton.mjs +29 -28
  21. package/dist/components/button/MenuButton.mjs.map +1 -1
  22. package/dist/components/button/SplitButton.cjs +1 -1
  23. package/dist/components/button/SplitButton.cjs.map +1 -1
  24. package/dist/components/button/SplitButton.mjs +46 -45
  25. package/dist/components/button/SplitButton.mjs.map +1 -1
  26. package/dist/components/button/ToggleButton.cjs +1 -1
  27. package/dist/components/button/ToggleButton.cjs.map +1 -1
  28. package/dist/components/button/ToggleButton.mjs +38 -35
  29. package/dist/components/button/ToggleButton.mjs.map +1 -1
  30. package/dist/components/button/Toolbar.cjs +1 -1
  31. package/dist/components/button/Toolbar.cjs.map +1 -1
  32. package/dist/components/button/Toolbar.mjs +43 -42
  33. package/dist/components/button/Toolbar.mjs.map +1 -1
  34. package/dist/components/button/Toolbar.parts.cjs +1 -1
  35. package/dist/components/button/Toolbar.parts.cjs.map +1 -1
  36. package/dist/components/button/Toolbar.parts.mjs +76 -81
  37. package/dist/components/button/Toolbar.parts.mjs.map +1 -1
  38. package/dist/components/data-display/Avatar.cjs +1 -1
  39. package/dist/components/data-display/Avatar.cjs.map +1 -1
  40. package/dist/components/data-display/Avatar.mjs +72 -67
  41. package/dist/components/data-display/Avatar.mjs.map +1 -1
  42. package/dist/components/data-display/AvatarGroup.cjs +1 -1
  43. package/dist/components/data-display/AvatarGroup.cjs.map +1 -1
  44. package/dist/components/data-display/AvatarGroup.mjs +89 -88
  45. package/dist/components/data-display/AvatarGroup.mjs.map +1 -1
  46. package/dist/components/data-display/Badge.cjs +1 -1
  47. package/dist/components/data-display/Badge.cjs.map +1 -1
  48. package/dist/components/data-display/Badge.mjs +17 -16
  49. package/dist/components/data-display/Badge.mjs.map +1 -1
  50. package/dist/components/data-display/CounterBadge.cjs +1 -1
  51. package/dist/components/data-display/CounterBadge.cjs.map +1 -1
  52. package/dist/components/data-display/CounterBadge.mjs +18 -17
  53. package/dist/components/data-display/CounterBadge.mjs.map +1 -1
  54. package/dist/components/data-display/Divider.cjs +1 -1
  55. package/dist/components/data-display/Divider.cjs.map +1 -1
  56. package/dist/components/data-display/Divider.mjs +31 -30
  57. package/dist/components/data-display/Divider.mjs.map +1 -1
  58. package/dist/components/data-display/Image.cjs +1 -1
  59. package/dist/components/data-display/Image.cjs.map +1 -1
  60. package/dist/components/data-display/Image.mjs +16 -15
  61. package/dist/components/data-display/Image.mjs.map +1 -1
  62. package/dist/components/data-display/InfoButton.cjs +2 -0
  63. package/dist/components/data-display/InfoButton.cjs.map +1 -0
  64. package/dist/components/data-display/InfoButton.mjs +173 -0
  65. package/dist/components/data-display/InfoButton.mjs.map +1 -0
  66. package/dist/components/data-display/InfoLabel.cjs +1 -1
  67. package/dist/components/data-display/InfoLabel.cjs.map +1 -1
  68. package/dist/components/data-display/InfoLabel.mjs +36 -92
  69. package/dist/components/data-display/InfoLabel.mjs.map +1 -1
  70. package/dist/components/data-display/List.cjs +1 -1
  71. package/dist/components/data-display/List.cjs.map +1 -1
  72. package/dist/components/data-display/List.mjs +175 -174
  73. package/dist/components/data-display/List.mjs.map +1 -1
  74. package/dist/components/data-display/Persona.cjs +1 -1
  75. package/dist/components/data-display/Persona.cjs.map +1 -1
  76. package/dist/components/data-display/Persona.mjs +31 -29
  77. package/dist/components/data-display/Persona.mjs.map +1 -1
  78. package/dist/components/data-display/PresenceBadge.cjs +1 -1
  79. package/dist/components/data-display/PresenceBadge.cjs.map +1 -1
  80. package/dist/components/data-display/PresenceBadge.mjs +25 -24
  81. package/dist/components/data-display/PresenceBadge.mjs.map +1 -1
  82. package/dist/components/data-display/Tag.cjs +1 -1
  83. package/dist/components/data-display/Tag.cjs.map +1 -1
  84. package/dist/components/data-display/Tag.mjs +87 -82
  85. package/dist/components/data-display/Tag.mjs.map +1 -1
  86. package/dist/components/feedback/MessageBar.cjs +1 -1
  87. package/dist/components/feedback/MessageBar.cjs.map +1 -1
  88. package/dist/components/feedback/MessageBar.mjs +129 -71
  89. package/dist/components/feedback/MessageBar.mjs.map +1 -1
  90. package/dist/components/feedback/MessageBar.parts.cjs +2 -0
  91. package/dist/components/feedback/MessageBar.parts.cjs.map +1 -0
  92. package/dist/components/feedback/MessageBar.parts.mjs +84 -0
  93. package/dist/components/feedback/MessageBar.parts.mjs.map +1 -0
  94. package/dist/components/feedback/MessageBar.reflow.cjs +2 -0
  95. package/dist/components/feedback/MessageBar.reflow.cjs.map +1 -0
  96. package/dist/components/feedback/MessageBar.reflow.mjs +74 -0
  97. package/dist/components/feedback/MessageBar.reflow.mjs.map +1 -0
  98. package/dist/components/feedback/MessageBar.status.cjs +1 -1
  99. package/dist/components/feedback/MessageBar.status.cjs.map +1 -1
  100. package/dist/components/feedback/MessageBar.status.mjs +2 -1
  101. package/dist/components/feedback/MessageBar.status.mjs.map +1 -1
  102. package/dist/components/feedback/ProgressBar.cjs +1 -1
  103. package/dist/components/feedback/ProgressBar.cjs.map +1 -1
  104. package/dist/components/feedback/ProgressBar.mjs +44 -43
  105. package/dist/components/feedback/ProgressBar.mjs.map +1 -1
  106. package/dist/components/feedback/Skeleton.cjs +1 -1
  107. package/dist/components/feedback/Skeleton.cjs.map +1 -1
  108. package/dist/components/feedback/Skeleton.mjs +26 -24
  109. package/dist/components/feedback/Skeleton.mjs.map +1 -1
  110. package/dist/components/feedback/Spinner.cjs +1 -1
  111. package/dist/components/feedback/Spinner.cjs.map +1 -1
  112. package/dist/components/feedback/Spinner.mjs +32 -31
  113. package/dist/components/feedback/Spinner.mjs.map +1 -1
  114. package/dist/components/feedback/Toast.cjs +1 -1
  115. package/dist/components/feedback/Toast.cjs.map +1 -1
  116. package/dist/components/feedback/Toast.context.cjs +2 -0
  117. package/dist/components/feedback/Toast.context.cjs.map +1 -0
  118. package/dist/components/feedback/Toast.context.mjs +23 -0
  119. package/dist/components/feedback/Toast.context.mjs.map +1 -0
  120. package/dist/components/feedback/Toast.mjs +10 -342
  121. package/dist/components/feedback/Toast.mjs.map +1 -1
  122. package/dist/components/feedback/Toast.parts.cjs +2 -0
  123. package/dist/components/feedback/Toast.parts.cjs.map +1 -0
  124. package/dist/components/feedback/Toast.parts.mjs +98 -0
  125. package/dist/components/feedback/Toast.parts.mjs.map +1 -0
  126. package/dist/components/feedback/Toast.root.cjs +2 -0
  127. package/dist/components/feedback/Toast.root.cjs.map +1 -0
  128. package/dist/components/feedback/Toast.root.mjs +109 -0
  129. package/dist/components/feedback/Toast.root.mjs.map +1 -0
  130. package/dist/components/feedback/Toaster.cjs +2 -0
  131. package/dist/components/feedback/Toaster.cjs.map +1 -0
  132. package/dist/components/feedback/Toaster.mjs +564 -0
  133. package/dist/components/feedback/Toaster.mjs.map +1 -0
  134. package/dist/components/input/AlphaSlider.cjs +2 -0
  135. package/dist/components/input/AlphaSlider.cjs.map +1 -0
  136. package/dist/components/input/AlphaSlider.mjs +115 -0
  137. package/dist/components/input/AlphaSlider.mjs.map +1 -0
  138. package/dist/components/input/Checkbox.cjs +1 -1
  139. package/dist/components/input/Checkbox.cjs.map +1 -1
  140. package/dist/components/input/Checkbox.mjs +87 -70
  141. package/dist/components/input/Checkbox.mjs.map +1 -1
  142. package/dist/components/input/ColorArea.cjs +2 -0
  143. package/dist/components/input/ColorArea.cjs.map +1 -0
  144. package/dist/components/input/ColorArea.mjs +204 -0
  145. package/dist/components/input/ColorArea.mjs.map +1 -0
  146. package/dist/components/input/ColorPicker.cjs +5 -5
  147. package/dist/components/input/ColorPicker.cjs.map +1 -1
  148. package/dist/components/input/ColorPicker.mjs +142 -165
  149. package/dist/components/input/ColorPicker.mjs.map +1 -1
  150. package/dist/components/input/ColorPicker.parts.cjs +2 -0
  151. package/dist/components/input/ColorPicker.parts.cjs.map +1 -0
  152. package/dist/components/input/ColorPicker.parts.mjs +192 -0
  153. package/dist/components/input/ColorPicker.parts.mjs.map +1 -0
  154. package/dist/components/input/ColorSlider.cjs +2 -0
  155. package/dist/components/input/ColorSlider.cjs.map +1 -0
  156. package/dist/components/input/ColorSlider.mjs +138 -0
  157. package/dist/components/input/ColorSlider.mjs.map +1 -0
  158. package/dist/components/input/Combobox.cjs +1 -1
  159. package/dist/components/input/Combobox.cjs.map +1 -1
  160. package/dist/components/input/Combobox.expand.cjs +1 -1
  161. package/dist/components/input/Combobox.expand.cjs.map +1 -1
  162. package/dist/components/input/Combobox.expand.mjs +22 -22
  163. package/dist/components/input/Combobox.expand.mjs.map +1 -1
  164. package/dist/components/input/Combobox.mjs +151 -141
  165. package/dist/components/input/Combobox.mjs.map +1 -1
  166. package/dist/components/input/DatePicker.cjs +1 -1
  167. package/dist/components/input/DatePicker.cjs.map +1 -1
  168. package/dist/components/input/DatePicker.mjs +239 -234
  169. package/dist/components/input/DatePicker.mjs.map +1 -1
  170. package/dist/components/input/Dropdown.cjs +1 -1
  171. package/dist/components/input/Dropdown.cjs.map +1 -1
  172. package/dist/components/input/Dropdown.mjs +109 -100
  173. package/dist/components/input/Dropdown.mjs.map +1 -1
  174. package/dist/components/input/Field.cjs +1 -1
  175. package/dist/components/input/Field.cjs.map +1 -1
  176. package/dist/components/input/Field.mjs +139 -105
  177. package/dist/components/input/Field.mjs.map +1 -1
  178. package/dist/components/input/Input.cjs +1 -1
  179. package/dist/components/input/Input.cjs.map +1 -1
  180. package/dist/components/input/Input.mjs +80 -55
  181. package/dist/components/input/Input.mjs.map +1 -1
  182. package/dist/components/input/Label.cjs +1 -1
  183. package/dist/components/input/Label.cjs.map +1 -1
  184. package/dist/components/input/Label.mjs +19 -12
  185. package/dist/components/input/Label.mjs.map +1 -1
  186. package/dist/components/input/Option.cjs +1 -1
  187. package/dist/components/input/Option.cjs.map +1 -1
  188. package/dist/components/input/Option.mjs +100 -98
  189. package/dist/components/input/Option.mjs.map +1 -1
  190. package/dist/components/input/RadioGroup.cjs +1 -1
  191. package/dist/components/input/RadioGroup.cjs.map +1 -1
  192. package/dist/components/input/RadioGroup.mjs +89 -88
  193. package/dist/components/input/RadioGroup.mjs.map +1 -1
  194. package/dist/components/input/Rating.cjs +1 -1
  195. package/dist/components/input/Rating.cjs.map +1 -1
  196. package/dist/components/input/Rating.item.cjs +2 -0
  197. package/dist/components/input/Rating.item.cjs.map +1 -0
  198. package/dist/components/input/Rating.item.mjs +255 -0
  199. package/dist/components/input/Rating.item.mjs.map +1 -0
  200. package/dist/components/input/Rating.mjs +152 -152
  201. package/dist/components/input/Rating.mjs.map +1 -1
  202. package/dist/components/input/SearchBox.cjs +1 -1
  203. package/dist/components/input/SearchBox.cjs.map +1 -1
  204. package/dist/components/input/SearchBox.mjs +162 -132
  205. package/dist/components/input/SearchBox.mjs.map +1 -1
  206. package/dist/components/input/Select.cjs +1 -1
  207. package/dist/components/input/Select.cjs.map +1 -1
  208. package/dist/components/input/Select.mjs +34 -24
  209. package/dist/components/input/Select.mjs.map +1 -1
  210. package/dist/components/input/Slider.cjs +1 -1
  211. package/dist/components/input/Slider.cjs.map +1 -1
  212. package/dist/components/input/Slider.mjs +78 -54
  213. package/dist/components/input/Slider.mjs.map +1 -1
  214. package/dist/components/input/SpinButton.cjs +1 -1
  215. package/dist/components/input/SpinButton.cjs.map +1 -1
  216. package/dist/components/input/SpinButton.mjs +202 -99
  217. package/dist/components/input/SpinButton.mjs.map +1 -1
  218. package/dist/components/input/SwatchPicker.cjs +1 -1
  219. package/dist/components/input/SwatchPicker.cjs.map +1 -1
  220. package/dist/components/input/SwatchPicker.mjs +38 -37
  221. package/dist/components/input/SwatchPicker.mjs.map +1 -1
  222. package/dist/components/input/Switch.cjs +1 -1
  223. package/dist/components/input/Switch.cjs.map +1 -1
  224. package/dist/components/input/Switch.mjs +75 -58
  225. package/dist/components/input/Switch.mjs.map +1 -1
  226. package/dist/components/input/TagPicker.cjs +1 -1
  227. package/dist/components/input/TagPicker.cjs.map +1 -1
  228. package/dist/components/input/TagPicker.mjs +199 -169
  229. package/dist/components/input/TagPicker.mjs.map +1 -1
  230. package/dist/components/input/Textarea.cjs +1 -1
  231. package/dist/components/input/Textarea.cjs.map +1 -1
  232. package/dist/components/input/Textarea.mjs +31 -23
  233. package/dist/components/input/Textarea.mjs.map +1 -1
  234. package/dist/components/input/TimePicker.cjs +1 -1
  235. package/dist/components/input/TimePicker.cjs.map +1 -1
  236. package/dist/components/input/TimePicker.mjs +185 -177
  237. package/dist/components/input/TimePicker.mjs.map +1 -1
  238. package/dist/components/input/colorName.cjs +2 -0
  239. package/dist/components/input/colorName.cjs.map +1 -0
  240. package/dist/components/input/colorName.mjs +30 -0
  241. package/dist/components/input/colorName.mjs.map +1 -0
  242. package/dist/components/input/colorUtils.cjs +1 -1
  243. package/dist/components/input/colorUtils.cjs.map +1 -1
  244. package/dist/components/input/colorUtils.mjs +154 -56
  245. package/dist/components/input/colorUtils.mjs.map +1 -1
  246. package/dist/components/input/fieldLabel.cjs +2 -0
  247. package/dist/components/input/fieldLabel.cjs.map +1 -0
  248. package/dist/components/input/fieldLabel.mjs +17 -0
  249. package/dist/components/input/fieldLabel.mjs.map +1 -0
  250. package/dist/components/input/inputLook.cjs +2 -0
  251. package/dist/components/input/inputLook.cjs.map +1 -0
  252. package/dist/components/input/inputLook.mjs +28 -0
  253. package/dist/components/input/inputLook.mjs.map +1 -0
  254. package/dist/components/input/pickerStyles.cjs +1 -1
  255. package/dist/components/input/pickerStyles.cjs.map +1 -1
  256. package/dist/components/input/pickerStyles.mjs +42 -4
  257. package/dist/components/input/pickerStyles.mjs.map +1 -1
  258. package/dist/components/layout/Accordion.cjs +1 -1
  259. package/dist/components/layout/Accordion.cjs.map +1 -1
  260. package/dist/components/layout/Accordion.mjs +130 -129
  261. package/dist/components/layout/Accordion.mjs.map +1 -1
  262. package/dist/components/layout/Card.cjs +1 -1
  263. package/dist/components/layout/Card.cjs.map +1 -1
  264. package/dist/components/layout/Card.mjs +78 -77
  265. package/dist/components/layout/Card.mjs.map +1 -1
  266. package/dist/components/layout/Carousel.cjs +1 -1
  267. package/dist/components/layout/Carousel.cjs.map +1 -1
  268. package/dist/components/layout/Carousel.mjs +111 -110
  269. package/dist/components/layout/Carousel.mjs.map +1 -1
  270. package/dist/components/layout/Flex.cjs +1 -1
  271. package/dist/components/layout/Flex.cjs.map +1 -1
  272. package/dist/components/layout/Flex.mjs +22 -21
  273. package/dist/components/layout/Flex.mjs.map +1 -1
  274. package/dist/components/layout/Grid.cjs +1 -1
  275. package/dist/components/layout/Grid.cjs.map +1 -1
  276. package/dist/components/layout/Grid.mjs +19 -18
  277. package/dist/components/layout/Grid.mjs.map +1 -1
  278. package/dist/components/layout/Overflow.cjs +1 -1
  279. package/dist/components/layout/Overflow.cjs.map +1 -1
  280. package/dist/components/layout/Overflow.mjs +92 -91
  281. package/dist/components/layout/Overflow.mjs.map +1 -1
  282. package/dist/components/layout/Stack.cjs +1 -1
  283. package/dist/components/layout/Stack.cjs.map +1 -1
  284. package/dist/components/layout/Stack.mjs +14 -13
  285. package/dist/components/layout/Stack.mjs.map +1 -1
  286. package/dist/components/layout/TabList.cjs +1 -1
  287. package/dist/components/layout/TabList.cjs.map +1 -1
  288. package/dist/components/layout/TabList.mjs +118 -117
  289. package/dist/components/layout/TabList.mjs.map +1 -1
  290. package/dist/components/layout/Tree.cjs +1 -1
  291. package/dist/components/layout/Tree.cjs.map +1 -1
  292. package/dist/components/layout/Tree.context.cjs +2 -0
  293. package/dist/components/layout/Tree.context.cjs.map +1 -0
  294. package/dist/components/layout/Tree.context.mjs +33 -0
  295. package/dist/components/layout/Tree.context.mjs.map +1 -0
  296. package/dist/components/layout/Tree.core.cjs +2 -0
  297. package/dist/components/layout/Tree.core.cjs.map +1 -0
  298. package/dist/components/layout/Tree.core.mjs +416 -0
  299. package/dist/components/layout/Tree.core.mjs.map +1 -0
  300. package/dist/components/layout/Tree.itemPersonaLayout.cjs +2 -0
  301. package/dist/components/layout/Tree.itemPersonaLayout.cjs.map +1 -0
  302. package/dist/components/layout/Tree.itemPersonaLayout.mjs +46 -0
  303. package/dist/components/layout/Tree.itemPersonaLayout.mjs.map +1 -0
  304. package/dist/components/layout/Tree.mjs +7 -215
  305. package/dist/components/layout/Tree.mjs.map +1 -1
  306. package/dist/components/layout/Tree.selection.cjs +2 -0
  307. package/dist/components/layout/Tree.selection.cjs.map +1 -0
  308. package/dist/components/layout/Tree.selection.mjs +73 -0
  309. package/dist/components/layout/Tree.selection.mjs.map +1 -0
  310. package/dist/components/navigation/Breadcrumb.cjs +1 -1
  311. package/dist/components/navigation/Breadcrumb.cjs.map +1 -1
  312. package/dist/components/navigation/Breadcrumb.mjs +76 -75
  313. package/dist/components/navigation/Breadcrumb.mjs.map +1 -1
  314. package/dist/components/navigation/Menu.group.cjs +1 -1
  315. package/dist/components/navigation/Menu.group.cjs.map +1 -1
  316. package/dist/components/navigation/Menu.group.mjs +39 -37
  317. package/dist/components/navigation/Menu.group.mjs.map +1 -1
  318. package/dist/components/navigation/Menu.items.cjs +1 -1
  319. package/dist/components/navigation/Menu.items.cjs.map +1 -1
  320. package/dist/components/navigation/Menu.items.mjs +67 -61
  321. package/dist/components/navigation/Menu.items.mjs.map +1 -1
  322. package/dist/components/navigation/Menu.link.cjs +1 -1
  323. package/dist/components/navigation/Menu.link.cjs.map +1 -1
  324. package/dist/components/navigation/Menu.link.mjs +34 -28
  325. package/dist/components/navigation/Menu.link.mjs.map +1 -1
  326. package/dist/components/navigation/Menu.popover.cjs +1 -1
  327. package/dist/components/navigation/Menu.popover.cjs.map +1 -1
  328. package/dist/components/navigation/Menu.popover.mjs +114 -113
  329. package/dist/components/navigation/Menu.popover.mjs.map +1 -1
  330. package/dist/components/navigation/Menu.root.cjs +1 -1
  331. package/dist/components/navigation/Menu.root.cjs.map +1 -1
  332. package/dist/components/navigation/Menu.root.mjs +171 -170
  333. package/dist/components/navigation/Menu.root.mjs.map +1 -1
  334. package/dist/components/navigation/Menu.selectable.cjs +1 -1
  335. package/dist/components/navigation/Menu.selectable.cjs.map +1 -1
  336. package/dist/components/navigation/Menu.selectable.mjs +85 -63
  337. package/dist/components/navigation/Menu.selectable.mjs.map +1 -1
  338. package/dist/components/navigation/Menu.splitGroup.cjs +1 -1
  339. package/dist/components/navigation/Menu.splitGroup.cjs.map +1 -1
  340. package/dist/components/navigation/Menu.splitGroup.mjs +27 -26
  341. package/dist/components/navigation/Menu.splitGroup.mjs.map +1 -1
  342. package/dist/components/navigation/Menu.trigger.cjs +1 -1
  343. package/dist/components/navigation/Menu.trigger.cjs.map +1 -1
  344. package/dist/components/navigation/Menu.trigger.mjs +6 -6
  345. package/dist/components/navigation/Nav.cjs +1 -1
  346. package/dist/components/navigation/Nav.cjs.map +1 -1
  347. package/dist/components/navigation/Nav.mjs +170 -155
  348. package/dist/components/navigation/Nav.mjs.map +1 -1
  349. package/dist/components/navigation/Pagination.cjs +1 -1
  350. package/dist/components/navigation/Pagination.cjs.map +1 -1
  351. package/dist/components/navigation/Pagination.mjs +73 -65
  352. package/dist/components/navigation/Pagination.mjs.map +1 -1
  353. package/dist/components/navigation/Stepper.cjs +1 -1
  354. package/dist/components/navigation/Stepper.cjs.map +1 -1
  355. package/dist/components/navigation/Stepper.mjs +110 -109
  356. package/dist/components/navigation/Stepper.mjs.map +1 -1
  357. package/dist/components/overlays/Dialog.cjs +1 -1
  358. package/dist/components/overlays/Dialog.cjs.map +1 -1
  359. package/dist/components/overlays/Dialog.mjs +109 -108
  360. package/dist/components/overlays/Dialog.mjs.map +1 -1
  361. package/dist/components/overlays/Drawer.cjs +1 -1
  362. package/dist/components/overlays/Drawer.cjs.map +1 -1
  363. package/dist/components/overlays/Drawer.mjs +110 -109
  364. package/dist/components/overlays/Drawer.mjs.map +1 -1
  365. package/dist/components/overlays/Popover.cjs +1 -1
  366. package/dist/components/overlays/Popover.cjs.map +1 -1
  367. package/dist/components/overlays/Popover.mjs +148 -151
  368. package/dist/components/overlays/Popover.mjs.map +1 -1
  369. package/dist/components/overlays/Popover.shared.cjs +1 -1
  370. package/dist/components/overlays/Popover.shared.cjs.map +1 -1
  371. package/dist/components/overlays/Popover.shared.mjs +82 -77
  372. package/dist/components/overlays/Popover.shared.mjs.map +1 -1
  373. package/dist/components/overlays/TeachingPopover.cjs +1 -1
  374. package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
  375. package/dist/components/overlays/TeachingPopover.mjs +41 -37
  376. package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
  377. package/dist/components/overlays/Tooltip.cjs +1 -1
  378. package/dist/components/overlays/Tooltip.cjs.map +1 -1
  379. package/dist/components/overlays/Tooltip.mjs +87 -86
  380. package/dist/components/overlays/Tooltip.mjs.map +1 -1
  381. package/dist/components/portal/Portal.cjs +1 -1
  382. package/dist/components/portal/Portal.cjs.map +1 -1
  383. package/dist/components/portal/Portal.mjs +33 -32
  384. package/dist/components/portal/Portal.mjs.map +1 -1
  385. package/dist/components/provider/WaveProvider.cjs +1 -1
  386. package/dist/components/provider/WaveProvider.cjs.map +1 -1
  387. package/dist/components/provider/WaveProvider.mjs +36 -29
  388. package/dist/components/provider/WaveProvider.mjs.map +1 -1
  389. package/dist/components/table/DataGrid.cjs +1 -1
  390. package/dist/components/table/DataGrid.cjs.map +1 -1
  391. package/dist/components/table/DataGrid.mjs +228 -227
  392. package/dist/components/table/DataGrid.mjs.map +1 -1
  393. package/dist/components/table/Table.cjs +1 -1
  394. package/dist/components/table/Table.cjs.map +1 -1
  395. package/dist/components/table/Table.mjs +60 -59
  396. package/dist/components/table/Table.mjs.map +1 -1
  397. package/dist/components/typography/Text.cjs +1 -1
  398. package/dist/components/typography/Text.cjs.map +1 -1
  399. package/dist/components/typography/Text.mjs +12 -11
  400. package/dist/components/typography/Text.mjs.map +1 -1
  401. package/dist/hooks/useFieldControl.cjs.map +1 -1
  402. package/dist/hooks/useFieldControl.mjs.map +1 -1
  403. package/dist/hooks/useMediaQuery.cjs +2 -0
  404. package/dist/hooks/useMediaQuery.cjs.map +1 -0
  405. package/dist/hooks/useMediaQuery.mjs +20 -0
  406. package/dist/hooks/useMediaQuery.mjs.map +1 -0
  407. package/dist/hooks/usePrefersReducedMotion.cjs +1 -1
  408. package/dist/hooks/usePrefersReducedMotion.cjs.map +1 -1
  409. package/dist/hooks/usePrefersReducedMotion.mjs +4 -18
  410. package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -1
  411. package/dist/hooks/useRovingTabIndex.cjs +1 -1
  412. package/dist/hooks/useRovingTabIndex.cjs.map +1 -1
  413. package/dist/hooks/useRovingTabIndex.mjs +3 -3
  414. package/dist/hooks/useRovingTabIndex.mjs.map +1 -1
  415. package/dist/index.cjs +1 -1
  416. package/dist/index.d.cts +2890 -197
  417. package/dist/index.d.ts +2890 -197
  418. package/dist/index.mjs +101 -87
  419. package/dist/lib/classNames.cjs +2 -0
  420. package/dist/lib/classNames.cjs.map +1 -0
  421. package/dist/lib/classNames.mjs +423 -0
  422. package/dist/lib/classNames.mjs.map +1 -0
  423. package/dist/lib/color.cjs +2 -0
  424. package/dist/lib/color.cjs.map +1 -0
  425. package/dist/lib/color.mjs +86 -0
  426. package/dist/lib/color.mjs.map +1 -0
  427. package/dist/lib/globalRegistry.cjs.map +1 -1
  428. package/dist/lib/globalRegistry.mjs.map +1 -1
  429. package/dist/lib/styles.cjs +1 -1
  430. package/dist/lib/styles.cjs.map +1 -1
  431. package/dist/lib/styles.mjs +21 -4
  432. package/dist/lib/styles.mjs.map +1 -1
  433. package/dist/lib/toaster.cjs +2 -0
  434. package/dist/lib/toaster.cjs.map +1 -0
  435. package/dist/lib/toaster.mjs +77 -0
  436. package/dist/lib/toaster.mjs.map +1 -0
  437. package/dist/styles.css +1 -1
  438. package/package.json +1 -1
  439. package/src/styles/tokens.css +13 -0
@@ -3,17 +3,18 @@ import { cn as e } from "../../lib/cn.mjs";
3
3
  import { flattenChildren as t } from "../../lib/children.mjs";
4
4
  import { reportMissingContext as n } from "../../lib/dev.mjs";
5
5
  import { renderSlot as r, slotRendersContent as i } from "../../lib/slot.mjs";
6
- import { useEventCallback as a } from "../../hooks/useEventCallback.mjs";
7
- import { useControllable as o } from "../../hooks/useControllable.mjs";
8
- import { useId as s } from "../../hooks/useId.mjs";
9
- import { focusRing as c, forcedColors as l } from "../../lib/styles.mjs";
10
- import { CheckIcon as u, DismissIcon as d } from "../../lib/icons.mjs";
11
- import * as f from "react";
12
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
6
+ import { stepperClassNames as a, stepperStepClassNames as o } from "../../lib/classNames.mjs";
7
+ import { useEventCallback as s } from "../../hooks/useEventCallback.mjs";
8
+ import { useControllable as c } from "../../hooks/useControllable.mjs";
9
+ import { useId as l } from "../../hooks/useId.mjs";
10
+ import { focusRing as u, forcedColors as d } from "../../lib/styles.mjs";
11
+ import { CheckIcon as f, DismissIcon as p } from "../../lib/icons.mjs";
12
+ import * as m from "react";
13
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
13
14
  //#region src/components/navigation/Stepper.tsx
14
- var h = "Completed:", g = "Error:", _ = [], v = () => _;
15
- function y() {
16
- let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Set(), n = _, r = () => {
15
+ var _ = "Completed:", v = "Error:", y = [], b = () => y;
16
+ function x() {
17
+ let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Set(), n = y, r = () => {
17
18
  if (n.length !== e.size) return !1;
18
19
  let t;
19
20
  for (let r of n) {
@@ -42,153 +43,153 @@ function y() {
42
43
  sync: i
43
44
  };
44
45
  }
45
- var b = f.createContext(null), x = f.createContext(null), S = () => {}, C = {
46
+ var S = m.createContext(null), C = m.createContext(null), w = () => {}, T = {
46
47
  activeStep: 0,
47
- select: S,
48
+ select: w,
48
49
  orientation: "horizontal",
49
50
  linear: !1,
50
- order: _,
51
+ order: y,
51
52
  childCount: 0,
52
- completedLabel: h,
53
- errorLabel: g,
54
- register: () => S,
55
- sync: S
53
+ completedLabel: _,
54
+ errorLabel: v,
55
+ register: () => w,
56
+ sync: w
56
57
  };
57
- function w(e) {
58
- return f.useContext(b) || (n(e, "Stepper"), C);
58
+ function E(e) {
59
+ return m.useContext(S) || (n(e, "Stepper"), T);
59
60
  }
60
- function T(e) {
61
+ function D(e) {
61
62
  let n = 0;
62
63
  return t(e).map(({ key: e, node: t }) => ({
63
64
  key: e,
64
65
  node: t,
65
- slot: f.isValidElement(t) ? n++ : null
66
+ slot: m.isValidElement(t) ? n++ : null
66
67
  }));
67
68
  }
68
- var E = "inline-flex items-center justify-center", D = e("bg-success", l.fill), O = "bg-border forced-colors:bg-[CanvasText] forced-colors:forced-color-adjust-none", k = ({ label: t, description: n, icon: a, disabled: o = !1, completed: h, error: g = !1, index: _, className: v, onClick: y, ref: b, ...S }) => {
69
- let { activeStep: C, select: T, orientation: k, linear: A, order: j, childCount: M, completedLabel: N, errorLabel: P, register: F, sync: I } = w("Stepper.Step"), L = f.useContext(x), R = s("wave-step"), z = `${R}-label`, B = `${R}-description`, V = f.useCallback((e) => e ? F(R, e) : void 0, [F, R]);
70
- f.useLayoutEffect(() => {
71
- I();
69
+ var O = "inline-flex items-center justify-center", k = e("bg-success", d.fill), A = "bg-border forced-colors:bg-[CanvasText] forced-colors:forced-color-adjust-none", j = ({ label: t, description: n, icon: a, disabled: s = !1, completed: c, error: _ = !1, index: v, className: y, onClick: b, ref: x, ...S }) => {
70
+ let { activeStep: w, select: T, orientation: D, linear: j, order: M, childCount: N, completedLabel: P, errorLabel: F, register: I, sync: L } = E("Stepper.Step"), R = m.useContext(C), z = l("wave-step"), B = `${z}-label`, V = `${z}-description`, H = m.useCallback((e) => e ? I(z, e) : void 0, [I, z]);
71
+ m.useLayoutEffect(() => {
72
+ L();
72
73
  });
73
- let H = j.indexOf(R), U = _ ?? (H === -1 ? L ?? 0 : H), W = U >= (H === -1 ? M : j.length) - 1, G = U === C, K = h ?? U < C, q = !o && (!A || U <= C + 1), J = k === "horizontal", Y = (e) => {
74
- if (!q) {
74
+ let U = M.indexOf(z), W = v ?? (U === -1 ? R ?? 0 : U), G = W >= (U === -1 ? N : M.length) - 1, K = W === w, q = c ?? W < w, J = !s && (!j || W <= w + 1), Y = D === "horizontal", X = (e) => {
75
+ if (!J) {
75
76
  e.preventDefault();
76
77
  return;
77
78
  }
78
- y?.(e), !e.defaultPrevented && T(U);
79
- }, X = (e) => {
80
- e.target === e.currentTarget && (e.key === "Enter" ? (e.preventDefault(), e.currentTarget.click()) : e.key === " " && e.preventDefault());
79
+ b?.(e), !e.defaultPrevented && T(W);
81
80
  }, ee = (e) => {
81
+ e.target === e.currentTarget && (e.key === "Enter" ? (e.preventDefault(), e.currentTarget.click()) : e.key === " " && e.preventDefault());
82
+ }, te = (e) => {
82
83
  e.target === e.currentTarget && e.key === " " && (e.preventDefault(), e.currentTarget.click());
83
- }, Z = g ? P : K ? N : "", te = Z ? `${Z} ${U + 1}.` : `${U + 1}.`, Q = !!a && i(a), $;
84
- $ = g ? /* @__PURE__ */ p(d, {}) : K && !Q ? /* @__PURE__ */ p(u, {}) : Q ? r(a, "span", E, { "aria-hidden": !0 }) : /* @__PURE__ */ p("span", {
84
+ }, Z = _ ? F : q ? P : "", ne = Z ? `${Z} ${W + 1}.` : `${W + 1}.`, Q = !!a && i(a), $;
85
+ $ = _ ? /* @__PURE__ */ h(p, {}) : q && !Q ? /* @__PURE__ */ h(f, {}) : Q ? r(a, "span", e(o.icon, O), { "aria-hidden": !0 }) : /* @__PURE__ */ h("span", {
85
86
  className: "text-caption-1 font-semibold",
86
- children: U + 1
87
+ children: W + 1
87
88
  });
88
- let ne = g ? "text-error" : G ? "text-primary" : K ? "text-success" : "text-foreground";
89
- return /* @__PURE__ */ p("li", {
90
- ref: V,
91
- className: e("flex min-w-0", J && !W && "flex-1"),
92
- children: /* @__PURE__ */ m("div", {
93
- ref: b,
94
- "data-active": G ? "" : void 0,
95
- "data-completed": K ? "" : void 0,
96
- "data-error": g ? "" : void 0,
97
- "data-disabled": o ? "" : void 0,
89
+ let re = _ ? "text-error" : K ? "text-primary" : q ? "text-success" : "text-foreground";
90
+ return /* @__PURE__ */ h("li", {
91
+ ref: H,
92
+ className: e(o.listItem, "flex min-w-0", Y && !G && "flex-1"),
93
+ children: /* @__PURE__ */ g("div", {
94
+ ref: x,
95
+ "data-active": K ? "" : void 0,
96
+ "data-completed": q ? "" : void 0,
97
+ "data-error": _ ? "" : void 0,
98
+ "data-disabled": s ? "" : void 0,
98
99
  ...S,
99
- className: e(J ? "flex flex-1 items-center" : "flex flex-1 flex-col", v),
100
- children: [/* @__PURE__ */ m("div", {
100
+ className: e(o.root, Y ? "flex flex-1 items-center" : "flex flex-1 flex-col", y),
101
+ children: [/* @__PURE__ */ g("div", {
101
102
  role: "button",
102
- tabIndex: q ? 0 : -1,
103
- "aria-current": G ? "step" : void 0,
104
- "aria-disabled": !q || void 0,
105
- "aria-labelledby": z,
106
- "aria-describedby": n ? B : void 0,
107
- onClick: Y,
108
- onKeyDown: X,
109
- onKeyUp: ee,
110
- className: e("relative flex rounded", J ? "flex-col items-center gap-1" : "items-center gap-3", c, q ? "cursor-pointer" : "cursor-default", o && "opacity-50"),
111
- children: [/* @__PURE__ */ p("span", {
103
+ tabIndex: J ? 0 : -1,
104
+ "aria-current": K ? "step" : void 0,
105
+ "aria-disabled": !J || void 0,
106
+ "aria-labelledby": B,
107
+ "aria-describedby": n ? V : void 0,
108
+ onClick: X,
109
+ onKeyDown: ee,
110
+ onKeyUp: te,
111
+ className: e(o.button, "relative flex rounded", Y ? "flex-col items-center gap-1" : "items-center gap-3", u, J ? "cursor-pointer" : "cursor-default", s && "opacity-50"),
112
+ children: [/* @__PURE__ */ h("span", {
112
113
  "aria-hidden": "true",
113
- className: e("flex size-8 shrink-0 items-center justify-center rounded-full border-2 transition-colors motion-reduce:transition-none", g ? "border-error bg-error-tint text-error-tint-foreground" : G ? e("border-primary bg-primary text-primary-foreground", l.selectedLeaf) : K ? "border-success bg-success-tint text-success-tint-foreground" : "border-border bg-background text-muted-foreground"),
114
+ className: e(o.indicator, "flex size-8 shrink-0 items-center justify-center rounded-full border-2 transition-colors motion-reduce:transition-none", _ ? "border-error bg-error-tint text-error-tint-foreground" : K ? e("border-primary bg-primary text-primary-foreground", d.selectedLeaf) : q ? "border-success bg-success-tint text-success-tint-foreground" : "border-border bg-background text-muted-foreground"),
114
115
  children: $
115
- }), /* @__PURE__ */ m("span", {
116
- className: e("flex flex-col", J && "items-center text-center"),
117
- children: [/* @__PURE__ */ m("span", {
118
- id: z,
119
- className: e("font-semibold", J ? "text-caption-1 whitespace-nowrap" : "text-body-1", ne),
116
+ }), /* @__PURE__ */ g("span", {
117
+ className: e("flex flex-col", Y && "items-center text-center"),
118
+ children: [/* @__PURE__ */ g("span", {
119
+ id: B,
120
+ className: e(o.label, "font-semibold", Y ? "text-caption-1 whitespace-nowrap" : "text-body-1", re),
120
121
  children: [
121
- /* @__PURE__ */ p("span", {
122
+ /* @__PURE__ */ h("span", {
122
123
  className: "sr-only",
123
- children: te
124
+ children: ne
124
125
  }),
125
126
  " ",
126
127
  t
127
128
  ]
128
- }), n && /* @__PURE__ */ p("span", {
129
- id: B,
130
- className: e("text-muted-foreground", J ? "text-caption-2 whitespace-nowrap" : "text-caption-1"),
129
+ }), n && /* @__PURE__ */ h("span", {
130
+ id: V,
131
+ className: e(o.description, "text-muted-foreground", Y ? "text-caption-2 whitespace-nowrap" : "text-caption-1"),
131
132
  children: n
132
133
  })]
133
134
  })]
134
- }), !W && /* @__PURE__ */ p("div", {
135
+ }), !G && /* @__PURE__ */ h("div", {
135
136
  "data-wave-stepper-connector": "",
136
137
  "aria-hidden": "true",
137
- className: e("transition-colors motion-reduce:transition-none", J ? "mx-2 h-0.5 flex-1" : "my-1 ms-3.75 min-h-6 w-0.5", K ? D : O)
138
+ className: e(o.connector, "transition-colors motion-reduce:transition-none", Y ? "mx-2 h-0.5 flex-1" : "my-1 ms-3.75 min-h-6 w-0.5", q ? k : A)
138
139
  })]
139
140
  })
140
141
  });
141
142
  };
142
- k.displayName = "Step";
143
- var A = ({ activeStep: t, defaultActiveStep: n = 0, onStepChange: r, orientation: i = "horizontal", linear: s = !1, statusLabels: c, className: l, children: u, ref: d, ...m }) => {
144
- let _ = c?.completed ?? h, S = c?.error ?? g, [C, w] = o(t, n), E = a(r), D = f.useCallback((e) => {
145
- w(e), E(e);
146
- }, [w, E]), [O] = f.useState(y), k = f.useSyncExternalStore(O.subscribe, O.getOrder, v), A = f.useRef(null);
147
- f.useEffect(() => {
148
- let e = A.current;
143
+ j.displayName = "Step";
144
+ var M = ({ activeStep: t, defaultActiveStep: n = 0, onStepChange: r, orientation: i = "horizontal", linear: o = !1, statusLabels: l, className: u, children: d, ref: f, ...p }) => {
145
+ let g = l?.completed ?? _, y = l?.error ?? v, [w, T] = c(t, n), E = s(r), O = m.useCallback((e) => {
146
+ T(e), E(e);
147
+ }, [T, E]), [k] = m.useState(x), A = m.useSyncExternalStore(k.subscribe, k.getOrder, b), j = m.useRef(null);
148
+ m.useEffect(() => {
149
+ let e = j.current;
149
150
  if (!e) return;
150
- let t = new MutationObserver(O.sync);
151
+ let t = new MutationObserver(k.sync);
151
152
  return t.observe(e, {
152
153
  childList: !0,
153
154
  subtree: !0
154
155
  }), () => t.disconnect();
155
- }, [O]);
156
- let j = f.useMemo(() => T(u), [u]), M = j.filter((e) => e.slot !== null).length, N = f.useMemo(() => ({
157
- activeStep: C,
158
- select: D,
156
+ }, [k]);
157
+ let M = m.useMemo(() => D(d), [d]), N = M.filter((e) => e.slot !== null).length, P = m.useMemo(() => ({
158
+ activeStep: w,
159
+ select: O,
159
160
  orientation: i,
160
- linear: s,
161
- order: k,
162
- childCount: M,
163
- completedLabel: _,
164
- errorLabel: S,
165
- register: O.register,
166
- sync: O.sync
161
+ linear: o,
162
+ order: A,
163
+ childCount: N,
164
+ completedLabel: g,
165
+ errorLabel: y,
166
+ register: k.register,
167
+ sync: k.sync
167
168
  }), [
168
- C,
169
- D,
169
+ w,
170
+ O,
170
171
  i,
171
- s,
172
- k,
173
- M,
174
- _,
175
- S,
176
- O
177
- ]), P = i === "horizontal";
178
- return /* @__PURE__ */ p(b.Provider, {
179
- value: N,
180
- children: /* @__PURE__ */ p("div", {
181
- ref: d,
172
+ o,
173
+ A,
174
+ N,
175
+ g,
176
+ y,
177
+ k
178
+ ]), F = i === "horizontal";
179
+ return /* @__PURE__ */ h(S.Provider, {
180
+ value: P,
181
+ children: /* @__PURE__ */ h("div", {
182
+ ref: f,
182
183
  role: "group",
183
184
  "aria-label": "Progress",
184
185
  "data-orientation": i,
185
- ...m,
186
- className: e("flex", P ? "flex-row items-start" : "flex-col", l),
187
- children: /* @__PURE__ */ p("ol", {
188
- ref: A,
186
+ ...p,
187
+ className: e(a.root, "flex", F ? "flex-row items-start" : "flex-col", u),
188
+ children: /* @__PURE__ */ h("ol", {
189
+ ref: j,
189
190
  role: "list",
190
- className: e("m-0 flex list-none p-0", P ? "flex-1 flex-row items-start" : "flex-col"),
191
- children: j.map((e) => e.slot === null ? e.node : /* @__PURE__ */ p(x.Provider, {
191
+ className: e(a.list, "m-0 flex list-none p-0", F ? "flex-1 flex-row items-start" : "flex-col"),
192
+ children: M.map((e) => e.slot === null ? e.node : /* @__PURE__ */ h(C.Provider, {
192
193
  value: e.slot,
193
194
  children: e.node
194
195
  }, e.key))
@@ -196,9 +197,9 @@ var A = ({ activeStep: t, defaultActiveStep: n = 0, onStepChange: r, orientation
196
197
  })
197
198
  });
198
199
  };
199
- A.displayName = "Stepper";
200
- var j = /* @__PURE__ */ Object.assign(A, { Step: k });
200
+ M.displayName = "Stepper";
201
+ var N = /* @__PURE__ */ Object.assign(M, { Step: j });
201
202
  //#endregion
202
- export { j as Stepper, k as StepperStep };
203
+ export { N as Stepper, j as StepperStep };
203
204
 
204
205
  //# sourceMappingURL=Stepper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.mjs","names":["useId","useId$1","React","DEFAULT_COMPLETED_LABEL","DEFAULT_ERROR_LABEL","EMPTY_ORDER","getServerOrder","createStepRegistry","elements","listeners","order","isCurrent","previous","key","element","sync","next","a","b","i","listener","StepperContext","StepSlotContext","noop","INERT_CONTEXT","useStepperContext","reportMissingContext","componentName","numberChildren","slot","flattenChildren","children","node","indicatorSlotClasses","connectorCompletedClasses","cn","forcedColors","connectorPendingClasses","StepperStep","indexProp","rest","slotIndex","labelId","descriptionId","registerItem","register","position","index","isLast","childCount","isActive","activeStep","isCompleted","completed","isClickable","disabled","linear","horizontal","orientation","activate","onClick","event","select","handleKeyDown","handleKeyUp","status","error","errorLabel","completedLabel","statusText","hasIcon","icon","slotRendersContent","indicator","DismissIcon","CheckIcon","renderSlot","toneClass","className","description","focusRing","label","StepperRoot","controlledStep","statusLabels","setActiveStep","useControllable","defaultActiveStep","emitStepChange","useEventCallback","onStepChange","step","registry","listRef","list","observer","items","item","context","Stepper"],"sources":["../../../src/components/navigation/Stepper.tsx"],"sourcesContent":["import * as React from 'react';\nimport { flattenChildren } from '../../lib/children';\nimport { cn } from '../../lib/cn';\nimport { reportMissingContext } from '../../lib/dev';\nimport { CheckIcon, DismissIcon } from '../../lib/icons';\nimport { renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { focusRing, forcedColors } from '../../lib/styles';\nimport type { Orientation } from '../../lib/types';\nimport { useControllable } from '../../hooks/useControllable';\nimport { useEventCallback } from '../../hooks/useEventCallback';\nimport { useId } from '../../hooks/useId';\n\n/** Properties for the Stepper component. */\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled index (0-based) of the currently active step. */\n activeStep?: number;\n /** Default active step index for uncontrolled usage.\n * @default 0\n */\n defaultActiveStep?: number;\n /**\n * Called with the step index whenever a step is activated (click, Enter or Space) — also when the\n * active step is activated again (0.4 semantics). Not called for disabled or unreachable steps.\n */\n onStepChange?: (step: number) => void;\n /** Layout orientation of the stepper.\n * @default 'horizontal'\n */\n orientation?: Orientation;\n /**\n * Whether navigation is restricted to sequential steps: only steps up to the one after the active\n * step can be activated; later steps are `aria-disabled` and leave the tab order.\n * @default false\n */\n linear?: boolean;\n /**\n * Visually hidden status text read before the number of a completed or error step (\"Completed:\n * 2. Profile\"), for localization: `{ completed: 'Fullført:', error: 'Feil:' }`. A label that is\n * not given keeps its English default; `''` leaves that status out of the step names.\n * @default { completed: 'Completed:', error: 'Error:' }\n */\n statusLabels?: { completed?: string; error?: string };\n /** Ref to the root `<div>` element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nconst DEFAULT_COMPLETED_LABEL = 'Completed:';\nconst DEFAULT_ERROR_LABEL = 'Error:';\n\n/** Properties for the Step sub-component. */\nexport interface StepProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Label text for the step. */\n label: string;\n /** Optional description text displayed below the label (the step button's description). */\n description?: string;\n /**\n * Custom icon to display in the step indicator (`Slot<'span'>`: a node, or a slot object for full\n * control). Decorative: rendered with `aria-hidden=\"true\"`; the step number stays in the name. A\n * falsy icon (`''`, `0`) or a list of nothing is no icon: the step shows its number (or its check\n * mark when completed).\n */\n icon?: Slot<'span'>;\n /**\n * Whether the step is disabled and non-interactive.\n * @default false\n */\n disabled?: boolean;\n /** Whether the step is marked as completed. Defaults to `true` for steps before the active step. */\n completed?: boolean;\n /**\n * Whether the step is in an error state.\n * @default false\n */\n error?: boolean;\n /**\n * Zero-based position of the step. Normally derived from the step's position in the Stepper\n * (Fragments, conditional steps and wrapper components included); set it only to override that.\n * In server HTML (and the first client render, before the steps register) each Stepper child\n * counts as one step, so steps inside a wrapper component that renders more or fewer than one\n * step are numbered correctly only after hydration; set `index` on them to pin the server HTML.\n */\n index?: number;\n /** Ref to the step's root `<div>` (rendered inside the step's `<li>`). */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n// ---------------------------------------------------------------------------\n// Step registry: a useId-keyed descendant list in DOM order\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ORDER: readonly string[] = [];\nconst getServerOrder = () => EMPTY_ORDER;\n\ninterface StepRegistry {\n /** Registers a step's list item under its key; returns the cleanup that unregisters it. */\n register: (key: string, element: HTMLElement) => () => void;\n subscribe: (listener: () => void) => () => void;\n /** Keys of the registered steps in DOM order (a new array only when the order changed). */\n getOrder: () => readonly string[];\n /**\n * Re-reads the DOM order and notifies subscribers when it changed. Cheap when nothing moved (one\n * pass over adjacent pairs), so every Step calls it after each of its commits. A commit that\n * re-renders all n steps (an `activeStep` change) therefore costs n passes, O(n²) position\n * checks, and the root's observer adds one pass per list mutation (indicator swaps included):\n * negligible for step counts a stepper can show. If that ever matters, coalesce the per-step calls\n * into one pass per commit (a dirty flag set by the steps, flushed once) — keeping this per-step\n * call or the observer as the path for commits in which the root does not re-render.\n */\n sync: () => void;\n}\n\nfunction createStepRegistry(): StepRegistry {\n const elements = new Map<string, HTMLElement>();\n const listeners = new Set<() => void>();\n let order = EMPTY_ORDER;\n\n /** Whether `order` still lists exactly the registered elements, in DOM order. */\n const isCurrent = () => {\n if (order.length !== elements.size) return false;\n let previous: HTMLElement | undefined;\n for (const key of order) {\n const element = elements.get(key);\n if (!element) return false;\n if (\n previous &&\n !(previous.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING)\n ) {\n return false;\n }\n previous = element;\n }\n return true;\n };\n\n const sync = () => {\n if (isCurrent()) return;\n const next = Array.from(elements.entries())\n .sort(([, a], [, b]) =>\n a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n .map(([key]) => key);\n if (next.length === order.length && next.every((key, i) => key === order[i])) return;\n order = next;\n listeners.forEach((listener) => listener());\n };\n\n return {\n register(key, element) {\n elements.set(key, element);\n sync();\n return () => {\n if (elements.get(key) === element) elements.delete(key);\n sync();\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getOrder: () => order,\n sync,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Contexts\n// ---------------------------------------------------------------------------\n\ninterface StepperContextValue {\n activeStep: number;\n /** Activates a step: updates the (uncontrolled) state and calls `onStepChange`. */\n select: (step: number) => void;\n orientation: Orientation;\n linear: boolean;\n /** Registered step keys in DOM order (empty on the server and before the first commit). */\n order: readonly string[];\n /** Number of element children after flattening Fragments (the pre-registration step count). */\n childCount: number;\n /** Resolved `statusLabels.completed`. */\n completedLabel: string;\n /** Resolved `statusLabels.error`. */\n errorLabel: string;\n register: StepRegistry['register'];\n sync: StepRegistry['sync'];\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\n/**\n * Position of a Stepper child among the element children (Fragments flattened), set by the root\n * around each child. It numbers the steps on the server and in the first render; after mount the\n * registry's DOM order takes over (it also covers wrappers that render several steps or none, which\n * the slot numbering gets wrong — documented on `Stepper` and `StepProps.index`).\n */\nconst StepSlotContext = React.createContext<number | null>(null);\n\nconst noop = () => {};\nconst INERT_CONTEXT: StepperContextValue = {\n activeStep: 0,\n select: noop,\n orientation: 'horizontal',\n linear: false,\n order: EMPTY_ORDER,\n childCount: 0,\n completedLabel: DEFAULT_COMPLETED_LABEL,\n errorLabel: DEFAULT_ERROR_LABEL,\n register: () => noop,\n sync: noop,\n};\n\n/**\n * Reads the Stepper context; a Step outside a Stepper throws in development and logs once in\n * production, where it renders inert (C-CONTEXT).\n */\nfunction useStepperContext(componentName: string): StepperContextValue {\n const context = React.useContext(StepperContext);\n if (context) return context;\n reportMissingContext(componentName, 'Stepper');\n return INERT_CONTEXT;\n}\n\n/** A Stepper child after flattening; an element carries its position among the elements. */\ninterface StepperChild {\n key: string;\n node: React.ReactNode;\n slot: number | null;\n}\n\n/**\n * The Stepper's children with Fragments flattened at any depth (`flattenChildren`: keys unique,\n * `null`/booleans dropped) and every element numbered in order.\n */\nfunction numberChildren(children: React.ReactNode): StepperChild[] {\n let slot = 0;\n return flattenChildren(children).map(({ key, node }) => ({\n key,\n node,\n slot: React.isValidElement(node) ? slot++ : null,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Step\n// ---------------------------------------------------------------------------\n\nconst indicatorSlotClasses = 'inline-flex items-center justify-center';\n\n/**\n * Connector colors. A connector is drawn by its background only, which forced colors replace with\n * Canvas, so it opts out there: a completed one is painted `Highlight` (`forcedColors.fill`), the\n * others `CanvasText`, like a Slider rail.\n */\nconst connectorCompletedClasses = cn('bg-success', forcedColors.fill);\nconst connectorPendingClasses =\n 'bg-border forced-colors:bg-[CanvasText] forced-colors:forced-color-adjust-none';\n\n/**\n * One step of a {@link Stepper}: a `role=\"button\"` step (indicator, label, optional description)\n * inside its own `<li>`, followed by a connector unless it is the last step. `ref`, `className` and\n * rest props land on the step's root `<div>`; `onClick` runs on activation by mouse, Enter or Space\n * (not for disabled or unreachable steps). Must be rendered inside a `Stepper` (throws in\n * development otherwise). Flat name `StepperStep`, importable from React Server Components.\n */\nconst StepperStep = ({\n label,\n description,\n icon,\n disabled = false,\n completed,\n error = false,\n index: indexProp,\n className,\n onClick,\n ref,\n ...rest\n}: StepProps) => {\n const {\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n register,\n sync,\n } = useStepperContext('Stepper.Step');\n const slotIndex = React.useContext(StepSlotContext);\n const key = useId('wave-step');\n const labelId = `${key}-label`;\n const descriptionId = `${key}-description`;\n\n // The list item registers itself under this step's id; the registry sorts by DOM position.\n const registerItem = React.useCallback(\n (element: HTMLLIElement | null) => (element ? register(key, element) : undefined),\n [register, key],\n );\n // A keyed reorder moves list items without re-running their ref callbacks, and a wrapper component\n // can reorder its own steps without re-rendering the root: re-read the DOM order after every commit\n // of this step (a changed order re-renders before paint). Moves that re-render no step at all\n // (reused elements) are caught by the root's MutationObserver.\n React.useLayoutEffect(() => {\n sync();\n });\n\n const position = order.indexOf(key);\n const index = indexProp ?? (position !== -1 ? position : (slotIndex ?? 0));\n const stepCount = position !== -1 ? order.length : childCount;\n const isLast = index >= stepCount - 1;\n const isActive = index === activeStep;\n const isCompleted = completed ?? index < activeStep;\n const isClickable = !disabled && (!linear || index <= activeStep + 1);\n const horizontal = orientation === 'horizontal';\n\n /**\n * The single activation path for mouse and keyboard (Enter/Space dispatch a click): an\n * unavailable step does nothing — neither the consumer `onClick` nor `onStepChange` runs; a\n * consumer `onClick` that calls `preventDefault()` suppresses the step change (C-COMPOSE).\n */\n const activate = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!isClickable) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n if (event.defaultPrevented) return;\n select(index);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n event.currentTarget.click();\n } else if (event.key === ' ') {\n // Space activates on keyup, like a native button; stop the page from scrolling.\n event.preventDefault();\n }\n };\n\n const handleKeyUp = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget || event.key !== ' ') return;\n event.preventDefault();\n event.currentTarget.click();\n };\n\n const status = error ? errorLabel : isCompleted ? completedLabel : '';\n const statusText = status ? `${status} ${index + 1}.` : `${index + 1}.`;\n\n // A falsy icon (`icon={name && <Icon />}` with `name` '' or a count of 0) is no icon, as in Menu,\n // Nav, Tree and Avatar, and so is a collection whose items render nothing: the step keeps its\n // number or check mark. The check does not consume a generator: renderSlot still renders it.\n const hasIcon = !!icon && slotRendersContent(icon);\n let indicator: React.ReactNode;\n if (error) {\n indicator = <DismissIcon />;\n } else if (isCompleted && !hasIcon) {\n indicator = <CheckIcon />;\n } else if (hasIcon) {\n indicator = renderSlot(icon, 'span', indicatorSlotClasses, { 'aria-hidden': true });\n } else {\n indicator = <span className=\"text-caption-1 font-semibold\">{index + 1}</span>;\n }\n\n const toneClass = error\n ? 'text-error'\n : isActive\n ? 'text-primary'\n : isCompleted\n ? 'text-success'\n : 'text-foreground';\n\n return (\n <li ref={registerItem} className={cn('flex min-w-0', horizontal && !isLast && 'flex-1')}>\n <div\n ref={ref}\n data-active={isActive ? '' : undefined}\n data-completed={isCompleted ? '' : undefined}\n data-error={error ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n {...rest}\n className={cn(horizontal ? 'flex flex-1 items-center' : 'flex flex-1 flex-col', className)}\n >\n <div\n role=\"button\"\n tabIndex={isClickable ? 0 : -1}\n aria-current={isActive ? 'step' : undefined}\n aria-disabled={isClickable ? undefined : true}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : undefined}\n onClick={activate}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n className={cn(\n 'relative flex rounded',\n horizontal ? 'flex-col items-center gap-1' : 'items-center gap-3',\n focusRing,\n isClickable ? 'cursor-pointer' : 'cursor-default',\n disabled && 'opacity-50',\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-full border-2 transition-colors motion-reduce:transition-none',\n error\n ? 'border-error bg-error-tint text-error-tint-foreground'\n : isActive\n ? cn(\n 'border-primary bg-primary text-primary-foreground',\n forcedColors.selectedLeaf,\n )\n : isCompleted\n ? 'border-success bg-success-tint text-success-tint-foreground'\n : 'border-border bg-background text-muted-foreground',\n )}\n >\n {indicator}\n </span>\n <span className={cn('flex flex-col', horizontal && 'items-center text-center')}>\n <span\n id={labelId}\n className={cn(\n 'font-semibold',\n horizontal ? 'text-caption-1 whitespace-nowrap' : 'text-body-1',\n toneClass,\n )}\n >\n <span className=\"sr-only\">{statusText}</span> {label}\n </span>\n {description && (\n <span\n id={descriptionId}\n className={cn(\n 'text-muted-foreground',\n horizontal ? 'text-caption-2 whitespace-nowrap' : 'text-caption-1',\n )}\n >\n {description}\n </span>\n )}\n </span>\n </div>\n {!isLast && (\n <div\n data-wave-stepper-connector=\"\"\n aria-hidden=\"true\"\n className={cn(\n 'transition-colors motion-reduce:transition-none',\n // Vertical: centred under the size-8 circle, (8 - 0.5) / 2 spacing units in, so the\n // offset scales with the circle at any root font size.\n horizontal ? 'mx-2 h-0.5 flex-1' : 'my-1 ms-3.75 min-h-6 w-0.5',\n isCompleted ? connectorCompletedClasses : connectorPendingClasses,\n )}\n />\n )}\n </div>\n </li>\n );\n};\nStepperStep.displayName = 'Step';\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nconst StepperRoot = ({\n activeStep: controlledStep,\n defaultActiveStep = 0,\n onStepChange,\n orientation = 'horizontal',\n linear = false,\n statusLabels,\n className,\n children,\n ref,\n ...rest\n}: StepperProps) => {\n // Resolved to strings, so an inline `statusLabels` object does not change the context each render.\n const completedLabel = statusLabels?.completed ?? DEFAULT_COMPLETED_LABEL;\n const errorLabel = statusLabels?.error ?? DEFAULT_ERROR_LABEL;\n const [activeStep, setActiveStep] = useControllable(controlledStep, defaultActiveStep);\n const emitStepChange = useEventCallback(onStepChange);\n // Event callback semantics (C-NAMING): every activation emits, also of the active step.\n const select = React.useCallback(\n (step: number) => {\n setActiveStep(step);\n emitStepChange(step);\n },\n [setActiveStep, emitStepChange],\n );\n\n const [registry] = React.useState(createStepRegistry);\n const order = React.useSyncExternalStore(registry.subscribe, registry.getOrder, getServerOrder);\n // Steps re-sync after each of their commits. A move that re-renders no step (a wrapper reordering\n // reused step elements) only shows up in the DOM: observe the list for it (C-HOOKS DOM-derived\n // collection; the callback runs in a microtask, before paint).\n const listRef = React.useRef<HTMLOListElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n if (!list) return;\n const observer = new MutationObserver(registry.sync);\n observer.observe(list, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, [registry]);\n\n const items = React.useMemo(() => numberChildren(children), [children]);\n const childCount = items.filter((item) => item.slot !== null).length;\n\n const context = React.useMemo<StepperContextValue>(\n () => ({\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n register: registry.register,\n sync: registry.sync,\n }),\n [\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n registry,\n ],\n );\n\n const horizontal = orientation === 'horizontal';\n\n return (\n <StepperContext.Provider value={context}>\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Progress\"\n data-orientation={orientation}\n {...rest}\n className={cn('flex', horizontal ? 'flex-row items-start' : 'flex-col', className)}\n >\n {/* role=\"list\" is not redundant: WebKit/VoiceOver drops list semantics from a\n `list-style: none` list outside a <nav> unless the role is explicit. */}\n <ol\n ref={listRef}\n role=\"list\"\n className={cn(\n 'm-0 flex list-none p-0',\n horizontal ? 'flex-1 flex-row items-start' : 'flex-col',\n )}\n >\n {items.map((item) =>\n item.slot === null ? (\n item.node\n ) : (\n <StepSlotContext.Provider key={item.key} value={item.slot}>\n {item.node}\n </StepSlotContext.Provider>\n ),\n )}\n </ol>\n </div>\n </StepperContext.Provider>\n );\n};\nStepperRoot.displayName = 'Stepper';\n\n/**\n * A multi-step progress indicator. Steps are `Stepper.Step` children (Fragments, conditional steps\n * and wrapper components are numbered in DOM order) rendered as an ordered list inside a\n * `role=\"group\"` root named \"Progress\" (override with `aria-label`). The active step's button\n * carries `aria-current=\"step\"`; completed and error steps announce their status (\"Completed:\",\n * \"Error:\"; localized with `statusLabels`).\n *\n * Server rendering: before hydration, steps are numbered by their position among the Stepper's\n * children (Fragments flattened), so a wrapper component that renders more or fewer than one step\n * is numbered correctly only after hydration. Pin such steps with `index` if the server HTML must\n * already be exact.\n *\n * Compound access (`Stepper.Step`) needs a client module; React Server Components import the flat\n * name `StepperStep` instead.\n */\nexport const Stepper = /* @__PURE__ */ Object.assign(StepperRoot, { Step: StepperStep });\n\n// Flat name of `Stepper.Step` (C-COMPOUND).\nexport { StepperStep };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Stepper.mjs","names":["useId","useId$1","React","DEFAULT_COMPLETED_LABEL","DEFAULT_ERROR_LABEL","EMPTY_ORDER","getServerOrder","createStepRegistry","elements","listeners","order","isCurrent","previous","key","element","sync","next","a","b","i","listener","StepperContext","StepSlotContext","noop","INERT_CONTEXT","useStepperContext","reportMissingContext","componentName","numberChildren","slot","flattenChildren","children","node","indicatorSlotClasses","connectorCompletedClasses","cn","forcedColors","connectorPendingClasses","StepperStep","indexProp","rest","slotIndex","labelId","descriptionId","registerItem","register","position","index","isLast","childCount","isActive","activeStep","isCompleted","completed","isClickable","disabled","linear","horizontal","orientation","activate","onClick","event","select","handleKeyDown","handleKeyUp","status","error","errorLabel","completedLabel","statusText","hasIcon","icon","slotRendersContent","indicator","DismissIcon","CheckIcon","renderSlot","stepperStepClassNames","toneClass","className","description","focusRing","label","StepperRoot","controlledStep","statusLabels","setActiveStep","useControllable","defaultActiveStep","emitStepChange","useEventCallback","onStepChange","step","registry","listRef","list","observer","items","item","context","stepperClassNames","Stepper"],"sources":["../../../src/components/navigation/Stepper.tsx"],"sourcesContent":["import * as React from 'react';\nimport { flattenChildren } from '../../lib/children';\nimport { cn } from '../../lib/cn';\nimport { stepperClassNames, stepperStepClassNames } from '../../lib/classNames';\nimport { reportMissingContext } from '../../lib/dev';\nimport { CheckIcon, DismissIcon } from '../../lib/icons';\nimport { renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { focusRing, forcedColors } from '../../lib/styles';\nimport type { Orientation } from '../../lib/types';\nimport { useControllable } from '../../hooks/useControllable';\nimport { useEventCallback } from '../../hooks/useEventCallback';\nimport { useId } from '../../hooks/useId';\n\n/** Properties for the Stepper component. */\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled index (0-based) of the currently active step. */\n activeStep?: number;\n /** Default active step index for uncontrolled usage.\n * @default 0\n */\n defaultActiveStep?: number;\n /**\n * Called with the step index whenever a step is activated (click, Enter or Space) — also when the\n * active step is activated again (0.4 semantics). Not called for disabled or unreachable steps.\n */\n onStepChange?: (step: number) => void;\n /** Layout orientation of the stepper.\n * @default 'horizontal'\n */\n orientation?: Orientation;\n /**\n * Whether navigation is restricted to sequential steps: only steps up to the one after the active\n * step can be activated; later steps are `aria-disabled` and leave the tab order.\n * @default false\n */\n linear?: boolean;\n /**\n * Visually hidden status text read before the number of a completed or error step (\"Completed:\n * 2. Profile\"), for localization: `{ completed: 'Fullført:', error: 'Feil:' }`. A label that is\n * not given keeps its English default; `''` leaves that status out of the step names.\n * @default { completed: 'Completed:', error: 'Error:' }\n */\n statusLabels?: { completed?: string; error?: string };\n /** Ref to the root `<div>` element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nconst DEFAULT_COMPLETED_LABEL = 'Completed:';\nconst DEFAULT_ERROR_LABEL = 'Error:';\n\n/** Properties for the Step sub-component. */\nexport interface StepProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Label text for the step. */\n label: string;\n /** Optional description text displayed below the label (the step button's description). */\n description?: string;\n /**\n * Custom icon to display in the step indicator (`Slot<'span'>`: a node, or a slot object for full\n * control). Decorative: rendered with `aria-hidden=\"true\"`; the step number stays in the name. A\n * falsy icon (`''`, `0`) or a list of nothing is no icon: the step shows its number (or its check\n * mark when completed).\n */\n icon?: Slot<'span'>;\n /**\n * Whether the step is disabled and non-interactive.\n * @default false\n */\n disabled?: boolean;\n /** Whether the step is marked as completed. Defaults to `true` for steps before the active step. */\n completed?: boolean;\n /**\n * Whether the step is in an error state.\n * @default false\n */\n error?: boolean;\n /**\n * Zero-based position of the step. Normally derived from the step's position in the Stepper\n * (Fragments, conditional steps and wrapper components included); set it only to override that.\n * In server HTML (and the first client render, before the steps register) each Stepper child\n * counts as one step, so steps inside a wrapper component that renders more or fewer than one\n * step are numbered correctly only after hydration; set `index` on them to pin the server HTML.\n */\n index?: number;\n /** Ref to the step's root `<div>` (rendered inside the step's `<li>`). */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n// ---------------------------------------------------------------------------\n// Step registry: a useId-keyed descendant list in DOM order\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ORDER: readonly string[] = [];\nconst getServerOrder = () => EMPTY_ORDER;\n\ninterface StepRegistry {\n /** Registers a step's list item under its key; returns the cleanup that unregisters it. */\n register: (key: string, element: HTMLElement) => () => void;\n subscribe: (listener: () => void) => () => void;\n /** Keys of the registered steps in DOM order (a new array only when the order changed). */\n getOrder: () => readonly string[];\n /**\n * Re-reads the DOM order and notifies subscribers when it changed. Cheap when nothing moved (one\n * pass over adjacent pairs), so every Step calls it after each of its commits. A commit that\n * re-renders all n steps (an `activeStep` change) therefore costs n passes, O(n²) position\n * checks, and the root's observer adds one pass per list mutation (indicator swaps included):\n * negligible for step counts a stepper can show. If that ever matters, coalesce the per-step calls\n * into one pass per commit (a dirty flag set by the steps, flushed once) — keeping this per-step\n * call or the observer as the path for commits in which the root does not re-render.\n */\n sync: () => void;\n}\n\nfunction createStepRegistry(): StepRegistry {\n const elements = new Map<string, HTMLElement>();\n const listeners = new Set<() => void>();\n let order = EMPTY_ORDER;\n\n /** Whether `order` still lists exactly the registered elements, in DOM order. */\n const isCurrent = () => {\n if (order.length !== elements.size) return false;\n let previous: HTMLElement | undefined;\n for (const key of order) {\n const element = elements.get(key);\n if (!element) return false;\n if (\n previous &&\n !(previous.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING)\n ) {\n return false;\n }\n previous = element;\n }\n return true;\n };\n\n const sync = () => {\n if (isCurrent()) return;\n const next = Array.from(elements.entries())\n .sort(([, a], [, b]) =>\n a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n .map(([key]) => key);\n if (next.length === order.length && next.every((key, i) => key === order[i])) return;\n order = next;\n listeners.forEach((listener) => listener());\n };\n\n return {\n register(key, element) {\n elements.set(key, element);\n sync();\n return () => {\n if (elements.get(key) === element) elements.delete(key);\n sync();\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getOrder: () => order,\n sync,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Contexts\n// ---------------------------------------------------------------------------\n\ninterface StepperContextValue {\n activeStep: number;\n /** Activates a step: updates the (uncontrolled) state and calls `onStepChange`. */\n select: (step: number) => void;\n orientation: Orientation;\n linear: boolean;\n /** Registered step keys in DOM order (empty on the server and before the first commit). */\n order: readonly string[];\n /** Number of element children after flattening Fragments (the pre-registration step count). */\n childCount: number;\n /** Resolved `statusLabels.completed`. */\n completedLabel: string;\n /** Resolved `statusLabels.error`. */\n errorLabel: string;\n register: StepRegistry['register'];\n sync: StepRegistry['sync'];\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\n/**\n * Position of a Stepper child among the element children (Fragments flattened), set by the root\n * around each child. It numbers the steps on the server and in the first render; after mount the\n * registry's DOM order takes over (it also covers wrappers that render several steps or none, which\n * the slot numbering gets wrong — documented on `Stepper` and `StepProps.index`).\n */\nconst StepSlotContext = React.createContext<number | null>(null);\n\nconst noop = () => {};\nconst INERT_CONTEXT: StepperContextValue = {\n activeStep: 0,\n select: noop,\n orientation: 'horizontal',\n linear: false,\n order: EMPTY_ORDER,\n childCount: 0,\n completedLabel: DEFAULT_COMPLETED_LABEL,\n errorLabel: DEFAULT_ERROR_LABEL,\n register: () => noop,\n sync: noop,\n};\n\n/**\n * Reads the Stepper context; a Step outside a Stepper throws in development and logs once in\n * production, where it renders inert (C-CONTEXT).\n */\nfunction useStepperContext(componentName: string): StepperContextValue {\n const context = React.useContext(StepperContext);\n if (context) return context;\n reportMissingContext(componentName, 'Stepper');\n return INERT_CONTEXT;\n}\n\n/** A Stepper child after flattening; an element carries its position among the elements. */\ninterface StepperChild {\n key: string;\n node: React.ReactNode;\n slot: number | null;\n}\n\n/**\n * The Stepper's children with Fragments flattened at any depth (`flattenChildren`: keys unique,\n * `null`/booleans dropped) and every element numbered in order.\n */\nfunction numberChildren(children: React.ReactNode): StepperChild[] {\n let slot = 0;\n return flattenChildren(children).map(({ key, node }) => ({\n key,\n node,\n slot: React.isValidElement(node) ? slot++ : null,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Step\n// ---------------------------------------------------------------------------\n\nconst indicatorSlotClasses = 'inline-flex items-center justify-center';\n\n/**\n * Connector colors. A connector is drawn by its background only, which forced colors replace with\n * Canvas, so it opts out there: a completed one is painted `Highlight` (`forcedColors.fill`), the\n * others `CanvasText`, like a Slider rail.\n */\nconst connectorCompletedClasses = cn('bg-success', forcedColors.fill);\nconst connectorPendingClasses =\n 'bg-border forced-colors:bg-[CanvasText] forced-colors:forced-color-adjust-none';\n\n/**\n * One step of a {@link Stepper}: a `role=\"button\"` step (indicator, label, optional description)\n * inside its own `<li>`, followed by a connector unless it is the last step. `ref`, `className` and\n * rest props land on the step's root `<div>`; `onClick` runs on activation by mouse, Enter or Space\n * (not for disabled or unreachable steps). Must be rendered inside a `Stepper` (throws in\n * development otherwise). Flat name `StepperStep`, importable from React Server Components.\n */\nconst StepperStep = ({\n label,\n description,\n icon,\n disabled = false,\n completed,\n error = false,\n index: indexProp,\n className,\n onClick,\n ref,\n ...rest\n}: StepProps) => {\n const {\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n register,\n sync,\n } = useStepperContext('Stepper.Step');\n const slotIndex = React.useContext(StepSlotContext);\n const key = useId('wave-step');\n const labelId = `${key}-label`;\n const descriptionId = `${key}-description`;\n\n // The list item registers itself under this step's id; the registry sorts by DOM position.\n const registerItem = React.useCallback(\n (element: HTMLLIElement | null) => (element ? register(key, element) : undefined),\n [register, key],\n );\n // A keyed reorder moves list items without re-running their ref callbacks, and a wrapper component\n // can reorder its own steps without re-rendering the root: re-read the DOM order after every commit\n // of this step (a changed order re-renders before paint). Moves that re-render no step at all\n // (reused elements) are caught by the root's MutationObserver.\n React.useLayoutEffect(() => {\n sync();\n });\n\n const position = order.indexOf(key);\n const index = indexProp ?? (position !== -1 ? position : (slotIndex ?? 0));\n const stepCount = position !== -1 ? order.length : childCount;\n const isLast = index >= stepCount - 1;\n const isActive = index === activeStep;\n const isCompleted = completed ?? index < activeStep;\n const isClickable = !disabled && (!linear || index <= activeStep + 1);\n const horizontal = orientation === 'horizontal';\n\n /**\n * The single activation path for mouse and keyboard (Enter/Space dispatch a click): an\n * unavailable step does nothing — neither the consumer `onClick` nor `onStepChange` runs; a\n * consumer `onClick` that calls `preventDefault()` suppresses the step change (C-COMPOSE).\n */\n const activate = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!isClickable) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n if (event.defaultPrevented) return;\n select(index);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n event.currentTarget.click();\n } else if (event.key === ' ') {\n // Space activates on keyup, like a native button; stop the page from scrolling.\n event.preventDefault();\n }\n };\n\n const handleKeyUp = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget || event.key !== ' ') return;\n event.preventDefault();\n event.currentTarget.click();\n };\n\n const status = error ? errorLabel : isCompleted ? completedLabel : '';\n const statusText = status ? `${status} ${index + 1}.` : `${index + 1}.`;\n\n // A falsy icon (`icon={name && <Icon />}` with `name` '' or a count of 0) is no icon, as in Menu,\n // Nav, Tree and Avatar, and so is a collection whose items render nothing: the step keeps its\n // number or check mark. The check does not consume a generator: renderSlot still renders it.\n const hasIcon = !!icon && slotRendersContent(icon);\n let indicator: React.ReactNode;\n if (error) {\n indicator = <DismissIcon />;\n } else if (isCompleted && !hasIcon) {\n indicator = <CheckIcon />;\n } else if (hasIcon) {\n indicator = renderSlot(icon, 'span', cn(stepperStepClassNames.icon, indicatorSlotClasses), {\n 'aria-hidden': true,\n });\n } else {\n indicator = <span className=\"text-caption-1 font-semibold\">{index + 1}</span>;\n }\n\n const toneClass = error\n ? 'text-error'\n : isActive\n ? 'text-primary'\n : isCompleted\n ? 'text-success'\n : 'text-foreground';\n\n return (\n <li\n ref={registerItem}\n className={cn(\n stepperStepClassNames.listItem,\n 'flex min-w-0',\n horizontal && !isLast && 'flex-1',\n )}\n >\n <div\n ref={ref}\n data-active={isActive ? '' : undefined}\n data-completed={isCompleted ? '' : undefined}\n data-error={error ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n {...rest}\n className={cn(\n stepperStepClassNames.root,\n horizontal ? 'flex flex-1 items-center' : 'flex flex-1 flex-col',\n className,\n )}\n >\n <div\n role=\"button\"\n tabIndex={isClickable ? 0 : -1}\n aria-current={isActive ? 'step' : undefined}\n aria-disabled={isClickable ? undefined : true}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : undefined}\n onClick={activate}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n className={cn(\n stepperStepClassNames.button,\n 'relative flex rounded',\n horizontal ? 'flex-col items-center gap-1' : 'items-center gap-3',\n focusRing,\n isClickable ? 'cursor-pointer' : 'cursor-default',\n disabled && 'opacity-50',\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n stepperStepClassNames.indicator,\n 'flex size-8 shrink-0 items-center justify-center rounded-full border-2 transition-colors motion-reduce:transition-none',\n error\n ? 'border-error bg-error-tint text-error-tint-foreground'\n : isActive\n ? cn(\n 'border-primary bg-primary text-primary-foreground',\n forcedColors.selectedLeaf,\n )\n : isCompleted\n ? 'border-success bg-success-tint text-success-tint-foreground'\n : 'border-border bg-background text-muted-foreground',\n )}\n >\n {indicator}\n </span>\n <span className={cn('flex flex-col', horizontal && 'items-center text-center')}>\n <span\n id={labelId}\n className={cn(\n stepperStepClassNames.label,\n 'font-semibold',\n horizontal ? 'text-caption-1 whitespace-nowrap' : 'text-body-1',\n toneClass,\n )}\n >\n <span className=\"sr-only\">{statusText}</span> {label}\n </span>\n {description && (\n <span\n id={descriptionId}\n className={cn(\n stepperStepClassNames.description,\n 'text-muted-foreground',\n horizontal ? 'text-caption-2 whitespace-nowrap' : 'text-caption-1',\n )}\n >\n {description}\n </span>\n )}\n </span>\n </div>\n {!isLast && (\n <div\n data-wave-stepper-connector=\"\"\n aria-hidden=\"true\"\n className={cn(\n stepperStepClassNames.connector,\n 'transition-colors motion-reduce:transition-none',\n // Vertical: centred under the size-8 circle, (8 - 0.5) / 2 spacing units in, so the\n // offset scales with the circle at any root font size.\n horizontal ? 'mx-2 h-0.5 flex-1' : 'my-1 ms-3.75 min-h-6 w-0.5',\n isCompleted ? connectorCompletedClasses : connectorPendingClasses,\n )}\n />\n )}\n </div>\n </li>\n );\n};\nStepperStep.displayName = 'Step';\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nconst StepperRoot = ({\n activeStep: controlledStep,\n defaultActiveStep = 0,\n onStepChange,\n orientation = 'horizontal',\n linear = false,\n statusLabels,\n className,\n children,\n ref,\n ...rest\n}: StepperProps) => {\n // Resolved to strings, so an inline `statusLabels` object does not change the context each render.\n const completedLabel = statusLabels?.completed ?? DEFAULT_COMPLETED_LABEL;\n const errorLabel = statusLabels?.error ?? DEFAULT_ERROR_LABEL;\n const [activeStep, setActiveStep] = useControllable(controlledStep, defaultActiveStep);\n const emitStepChange = useEventCallback(onStepChange);\n // Event callback semantics (C-NAMING): every activation emits, also of the active step.\n const select = React.useCallback(\n (step: number) => {\n setActiveStep(step);\n emitStepChange(step);\n },\n [setActiveStep, emitStepChange],\n );\n\n const [registry] = React.useState(createStepRegistry);\n const order = React.useSyncExternalStore(registry.subscribe, registry.getOrder, getServerOrder);\n // Steps re-sync after each of their commits. A move that re-renders no step (a wrapper reordering\n // reused step elements) only shows up in the DOM: observe the list for it (C-HOOKS DOM-derived\n // collection; the callback runs in a microtask, before paint).\n const listRef = React.useRef<HTMLOListElement>(null);\n React.useEffect(() => {\n const list = listRef.current;\n if (!list) return;\n const observer = new MutationObserver(registry.sync);\n observer.observe(list, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, [registry]);\n\n const items = React.useMemo(() => numberChildren(children), [children]);\n const childCount = items.filter((item) => item.slot !== null).length;\n\n const context = React.useMemo<StepperContextValue>(\n () => ({\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n register: registry.register,\n sync: registry.sync,\n }),\n [\n activeStep,\n select,\n orientation,\n linear,\n order,\n childCount,\n completedLabel,\n errorLabel,\n registry,\n ],\n );\n\n const horizontal = orientation === 'horizontal';\n\n return (\n <StepperContext.Provider value={context}>\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Progress\"\n data-orientation={orientation}\n {...rest}\n className={cn(\n stepperClassNames.root,\n 'flex',\n horizontal ? 'flex-row items-start' : 'flex-col',\n className,\n )}\n >\n {/* role=\"list\" is not redundant: WebKit/VoiceOver drops list semantics from a\n `list-style: none` list outside a <nav> unless the role is explicit. */}\n <ol\n ref={listRef}\n role=\"list\"\n className={cn(\n stepperClassNames.list,\n 'm-0 flex list-none p-0',\n horizontal ? 'flex-1 flex-row items-start' : 'flex-col',\n )}\n >\n {items.map((item) =>\n item.slot === null ? (\n item.node\n ) : (\n <StepSlotContext.Provider key={item.key} value={item.slot}>\n {item.node}\n </StepSlotContext.Provider>\n ),\n )}\n </ol>\n </div>\n </StepperContext.Provider>\n );\n};\nStepperRoot.displayName = 'Stepper';\n\n/**\n * A multi-step progress indicator. Steps are `Stepper.Step` children (Fragments, conditional steps\n * and wrapper components are numbered in DOM order) rendered as an ordered list inside a\n * `role=\"group\"` root named \"Progress\" (override with `aria-label`). The active step's button\n * carries `aria-current=\"step\"`; completed and error steps announce their status (\"Completed:\",\n * \"Error:\"; localized with `statusLabels`).\n *\n * Server rendering: before hydration, steps are numbered by their position among the Stepper's\n * children (Fragments flattened), so a wrapper component that renders more or fewer than one step\n * is numbered correctly only after hydration. Pin such steps with `index` if the server HTML must\n * already be exact.\n *\n * Compound access (`Stepper.Step`) needs a client module; React Server Components import the flat\n * name `StepperStep` instead.\n */\nexport const Stepper = /* @__PURE__ */ Object.assign(StepperRoot, { Step: StepperStep });\n\n// Flat name of `Stepper.Step` (C-COMPOUND).\nexport { StepperStep };\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/cn.cjs"),n=require("../../lib/dev.cjs"),r=require("../../lib/slot.cjs"),i=require("../../hooks/useId.cjs"),a=require("../../hooks/useMergedRefs.cjs"),o=require("../../hooks/useIsClient.cjs"),s=require("../portal/Portal.cjs"),c=require("../button/Button.cjs"),l=require("../../lib/icons.cjs"),u=require("../../hooks/useModalLayer.cjs"),d=require("./Dialog.shared.cjs");let f=require("react");f=e.__toESM(f,1);let p=require("react/jsx-runtime");var m=f.createContext(null);m.displayName=`DialogContext`;var h={open:!1,requestOpen:()=>{},modalType:`modal`,trigger:d.inertModalTrigger,finalFocusRef:void 0,contentId:void 0,registerContentId:()=>()=>{}};function g(e){return d.useRequiredContext(m,e,`Dialog`,()=>h)}var _=({open:e,defaultOpen:t,onOpenChange:n,modalType:r=`modal`,finalFocusRef:i,children:a})=>{let[s,c]=d.useModalOpenState(e,t,n),l=o.useIsClient(),u=s&&l,h=d.useModalTrigger();d.useModalTriggerSession(h,u);let[g,_]=f.useState(void 0),v=f.useCallback(e=>(_(e),()=>_(t=>t===e?void 0:t)),[]),y=f.useMemo(()=>({open:u,requestOpen:c,modalType:r,trigger:h,finalFocusRef:i,contentId:g,registerContentId:v}),[u,c,r,h,i,g,v]);return(0,p.jsx)(m.Provider,{value:y,children:a})};_.displayName=`Dialog`;var v=e=>{let{open:t,requestOpen:n,trigger:r,contentId:i}=g(`Dialog.Trigger`);return d.useModalTriggerPart({open:t,requestOpen:n,trigger:r,controlsId:i},e,`Dialog.Trigger`)};v.displayName=`DialogTrigger`;var y=e=>{let{requestOpen:t}=g(`Dialog.Close`);return d.useModalClosePart(t,e,`Dialog.Close`)};y.displayName=`DialogClose`;var b={small:`max-w-[400px]`,medium:`max-w-[600px]`},x=({title:e,size:n=`medium`,closeLabel:o=`Close`,children:m,className:h,id:_,ref:v,...y})=>{let{open:x,requestOpen:S,modalType:C,trigger:w,finalFocusRef:T,registerContentId:E}=g(`Dialog.Content`),D=i.useId(`wave-dialog`),O=_??D,k=i.useId(`wave-dialog-title`),A=d.useTitleRegistry(),[j,M]=f.useState(null),N=f.useRef(null),P=f.useCallback(e=>{N.current=e,M(e)},[]),F=f.useCallback(e=>e?E(O):void 0,[E,O]),I=a.useMergedRefs(v,P,F),L=C!==`alert`,R=d.useBackdropPress(N,L),z=d.useModalDismiss(S,`Dialog`,R.afterOutsidePress),B=u.useModalLayer({open:x,onDismiss:z,refs:[N],outsidePress:L,container:j,triggerRef:w.focusRef,finalFocusRef:T});d.useUnnamedModalWarning(x?j:null,A.hasTitle,`Dialog.Content`,`Dialog.Title`);let[V,H]=f.useState(null),U=f.useMemo(()=>({...A.context,setFooterHeight:H}),[A.context]);if(!x)return null;let W=r.slotRendersContent(e);return(0,p.jsx)(s.Portal,{layerId:B.layerId,children:(0,p.jsx)(`div`,{className:`fixed inset-0 flex items-center justify-center bg-backdrop p-4`,onMouseDown:R.onMouseDown,children:(0,p.jsx)(`div`,{ref:I,role:C===`alert`?`alertdialog`:`dialog`,id:O,"aria-labelledby":W?k:A.titleId,tabIndex:-1,"data-modal-type":C,...y,className:t.cn(`relative flex max-h-[calc(100dvh-2rem)] w-full flex-col rounded-lg border border-border bg-background p-6 text-foreground shadow-64`,b[n],h),children:(0,p.jsxs)(d.ModalSurfaceContext.Provider,{value:U,children:[W&&(0,p.jsx)(`h2`,{id:k,className:`pe-8 text-subtitle-1 font-semibold`,children:e}),(0,p.jsx)(c.Button,{appearance:`subtle`,size:`small`,icon:(0,p.jsx)(l.DismissIcon,{}),"aria-label":o,onClick:e=>S(!1,{reason:`close-button`,event:e.nativeEvent}),className:`absolute end-4 top-4 text-muted-foreground`}),(0,p.jsx)(`div`,{className:`-mx-1 mt-1 min-h-0 flex-1 overflow-y-auto scroll-pb-(--wave-dialog-footer-height) p-1 text-body-1 text-muted-foreground`,style:V===null?void 0:{"--wave-dialog-footer-height":`${V}px`},children:m})]})})})})};x.displayName=`DialogContent`;var S=({id:e,className:n,children:r,ref:i,...a})=>{let{id:o,ref:s}=d.useModalTitle(`Dialog.Title`,`Dialog.Content`,e,i);return(0,p.jsx)(`h2`,{...a,id:o,ref:s,className:t.cn(`pe-8 text-subtitle-1 font-semibold text-foreground`,n),children:r})};S.displayName=`DialogTitle`;var C=`sticky -bottom-1 z-10 -mx-1 -mb-1 mt-6 flex justify-end gap-2 bg-background px-1 pb-2 pt-3`,w=`mt-6 flex justify-end gap-2`,T=({children:e,className:r,ref:i,...o})=>{let s=f.useContext(d.ModalSurfaceContext),c=s===null,l=s?.setFooterHeight,[u,m]=f.useState(null),h=a.useMergedRefs(i,m);return f.useEffect(()=>{c&&n.warnOnce(`Dialog.Footer:outside-content`,`Dialog.Footer must be rendered inside Dialog.Content. Outside it, the footer stays on the page while the dialog is closed.`)},[c]),f.useLayoutEffect(()=>{if(!u||!l||typeof ResizeObserver>`u`)return;let e=new ResizeObserver(e=>{let t=e[e.length-1];t&&l(t.borderBoxSize?.[0]?.blockSize??u.offsetHeight)});return e.observe(u,{box:`border-box`}),()=>{e.disconnect(),l(null)}},[u,l]),(0,p.jsx)(`div`,{ref:h,...o,className:t.cn(l?C:w,r),children:e})};T.displayName=`DialogFooter`;var E=Object.assign(_,{Trigger:v,Content:x,Footer:T,Title:S,Close:y});exports.Dialog=E,exports.DialogClose=y,exports.DialogContent=x,exports.DialogFooter=T,exports.DialogTitle=S,exports.DialogTrigger=v;
1
+ "use client";const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/cn.cjs"),n=require("../../lib/dev.cjs"),r=require("../../lib/slot.cjs"),i=require("../../lib/classNames.cjs"),a=require("../../hooks/useId.cjs"),o=require("../../hooks/useMergedRefs.cjs"),s=require("../../hooks/useIsClient.cjs"),c=require("../portal/Portal.cjs"),l=require("../button/Button.cjs"),u=require("../../lib/icons.cjs"),d=require("../../hooks/useModalLayer.cjs"),f=require("./Dialog.shared.cjs");let p=require("react");p=e.__toESM(p,1);let m=require("react/jsx-runtime");var h=p.createContext(null);h.displayName=`DialogContext`;var g={open:!1,requestOpen:()=>{},modalType:`modal`,trigger:f.inertModalTrigger,finalFocusRef:void 0,contentId:void 0,registerContentId:()=>()=>{}};function _(e){return f.useRequiredContext(h,e,`Dialog`,()=>g)}var v=({open:e,defaultOpen:t,onOpenChange:n,modalType:r=`modal`,finalFocusRef:i,children:a})=>{let[o,c]=f.useModalOpenState(e,t,n),l=s.useIsClient(),u=o&&l,d=f.useModalTrigger();f.useModalTriggerSession(d,u);let[g,_]=p.useState(void 0),v=p.useCallback(e=>(_(e),()=>_(t=>t===e?void 0:t)),[]),y=p.useMemo(()=>({open:u,requestOpen:c,modalType:r,trigger:d,finalFocusRef:i,contentId:g,registerContentId:v}),[u,c,r,d,i,g,v]);return(0,m.jsx)(h.Provider,{value:y,children:a})};v.displayName=`Dialog`;var y=e=>{let{open:t,requestOpen:n,trigger:r,contentId:i}=_(`Dialog.Trigger`);return f.useModalTriggerPart({open:t,requestOpen:n,trigger:r,controlsId:i},e,`Dialog.Trigger`)};y.displayName=`DialogTrigger`;var b=e=>{let{requestOpen:t}=_(`Dialog.Close`);return f.useModalClosePart(t,e,`Dialog.Close`)};b.displayName=`DialogClose`;var x={small:`max-w-[400px]`,medium:`max-w-[600px]`},S=({title:e,size:n=`medium`,closeLabel:s=`Close`,children:h,className:g,id:v,ref:y,...b})=>{let{open:S,requestOpen:C,modalType:w,trigger:T,finalFocusRef:E,registerContentId:D}=_(`Dialog.Content`),O=a.useId(`wave-dialog`),k=v??O,A=a.useId(`wave-dialog-title`),j=f.useTitleRegistry(),[M,N]=p.useState(null),P=p.useRef(null),F=p.useCallback(e=>{P.current=e,N(e)},[]),I=p.useCallback(e=>e?D(k):void 0,[D,k]),L=o.useMergedRefs(y,F,I),R=w!==`alert`,z=f.useBackdropPress(P,R),B=f.useModalDismiss(C,`Dialog`,z.afterOutsidePress),V=d.useModalLayer({open:S,onDismiss:B,refs:[P],outsidePress:R,container:M,triggerRef:T.focusRef,finalFocusRef:E});f.useUnnamedModalWarning(S?M:null,j.hasTitle,`Dialog.Content`,`Dialog.Title`);let[H,U]=p.useState(null),W=p.useMemo(()=>({...j.context,setFooterHeight:U}),[j.context]);if(!S)return null;let G=r.slotRendersContent(e);return(0,m.jsx)(c.Portal,{layerId:V.layerId,children:(0,m.jsx)(`div`,{className:t.cn(i.dialogContentClassNames.backdrop,`fixed inset-0 flex items-center justify-center bg-backdrop`),onMouseDown:z.onMouseDown,children:(0,m.jsx)(`div`,{ref:L,role:w===`alert`?`alertdialog`:`dialog`,id:k,"aria-labelledby":G?A:j.titleId,tabIndex:-1,"data-modal-type":w,...b,className:t.cn(i.dialogContentClassNames.root,`relative m-4 flex min-w-0 max-h-[calc(100dvh-2rem)] w-full flex-col rounded-lg border border-border bg-background p-6 text-foreground shadow-64`,x[n],g),children:(0,m.jsxs)(f.ModalSurfaceContext.Provider,{value:W,children:[G&&(0,m.jsx)(`h2`,{id:A,className:t.cn(i.dialogTitleClassNames.root,`pe-8 text-subtitle-1 font-semibold`),children:e}),(0,m.jsx)(l.Button,{appearance:`subtle`,size:`small`,icon:(0,m.jsx)(u.DismissIcon,{}),"aria-label":s,onClick:e=>C(!1,{reason:`close-button`,event:e.nativeEvent}),className:t.cn(i.dialogContentClassNames.closeButton,`absolute end-4 top-4 text-muted-foreground`)}),(0,m.jsx)(`div`,{className:t.cn(i.dialogContentClassNames.body,`-mx-1 mt-1 min-h-0 flex-1 overflow-y-auto scroll-pb-(--wave-dialog-footer-height) p-1 text-body-1`),style:H===null?void 0:{"--wave-dialog-footer-height":`${H}px`},children:h})]})})})})};S.displayName=`DialogContent`;var C=({id:e,className:n,children:r,ref:a,...o})=>{let{id:s,ref:c}=f.useModalTitle(`Dialog.Title`,`Dialog.Content`,e,a);return(0,m.jsx)(`h2`,{...o,id:s,ref:c,className:t.cn(i.dialogTitleClassNames.root,`pe-8 text-subtitle-1 font-semibold text-foreground`,n),children:r})};C.displayName=`DialogTitle`;var w=`sticky -bottom-1 z-10 -mx-1 -mb-1 mt-6 flex justify-end gap-2 bg-background px-1 pb-2 pt-3`,T=`mt-6 flex justify-end gap-2`,E=({children:e,className:r,ref:a,...s})=>{let c=p.useContext(f.ModalSurfaceContext),l=c===null,u=c?.setFooterHeight,[d,h]=p.useState(null),g=o.useMergedRefs(a,h);return p.useEffect(()=>{l&&n.warnOnce(`Dialog.Footer:outside-content`,`Dialog.Footer must be rendered inside Dialog.Content. Outside it, the footer stays on the page while the dialog is closed.`)},[l]),p.useLayoutEffect(()=>{if(!d||!u||typeof ResizeObserver>`u`)return;let e=new ResizeObserver(e=>{let t=e[e.length-1];t&&u(t.borderBoxSize?.[0]?.blockSize??d.offsetHeight)});return e.observe(d,{box:`border-box`}),()=>{e.disconnect(),u(null)}},[d,u]),(0,m.jsx)(`div`,{ref:g,...s,className:t.cn(i.dialogFooterClassNames.root,u?w:T,r),children:e})};E.displayName=`DialogFooter`;var D=Object.assign(v,{Trigger:y,Content:S,Footer:E,Title:C,Close:b});exports.Dialog=D,exports.DialogClose=b,exports.DialogContent=S,exports.DialogFooter=E,exports.DialogTitle=C,exports.DialogTrigger=y;
2
2
  //# sourceMappingURL=Dialog.cjs.map