@mortenbrudvik/waveui 0.4.0 → 0.8.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 (650) hide show
  1. package/README.md +1484 -173
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  3. package/dist/components/button/Button.cjs +2 -0
  4. package/dist/components/button/Button.cjs.map +1 -0
  5. package/dist/components/button/Button.mjs +51 -0
  6. package/dist/components/button/Button.mjs.map +1 -0
  7. package/dist/components/button/Button.semantics.cjs +2 -0
  8. package/dist/components/button/Button.semantics.cjs.map +1 -0
  9. package/dist/components/button/Button.semantics.mjs +61 -0
  10. package/dist/components/button/Button.semantics.mjs.map +1 -0
  11. package/dist/components/button/Button.slots.cjs +2 -0
  12. package/dist/components/button/Button.slots.cjs.map +1 -0
  13. package/dist/components/button/Button.slots.mjs +57 -0
  14. package/dist/components/button/Button.slots.mjs.map +1 -0
  15. package/dist/components/button/CompoundButton.cjs +2 -0
  16. package/dist/components/button/CompoundButton.cjs.map +1 -0
  17. package/dist/components/button/CompoundButton.mjs +55 -0
  18. package/dist/components/button/CompoundButton.mjs.map +1 -0
  19. package/dist/components/button/Link.cjs +2 -0
  20. package/dist/components/button/Link.cjs.map +1 -0
  21. package/dist/components/button/Link.mjs +38 -0
  22. package/dist/components/button/Link.mjs.map +1 -0
  23. package/dist/components/button/MenuButton.cjs +2 -0
  24. package/dist/components/button/MenuButton.cjs.map +1 -0
  25. package/dist/components/button/MenuButton.mjs +46 -0
  26. package/dist/components/button/MenuButton.mjs.map +1 -0
  27. package/dist/components/button/SplitButton.cjs +2 -0
  28. package/dist/components/button/SplitButton.cjs.map +1 -0
  29. package/dist/components/button/SplitButton.mjs +67 -0
  30. package/dist/components/button/SplitButton.mjs.map +1 -0
  31. package/dist/components/button/ToggleButton.cjs +2 -0
  32. package/dist/components/button/ToggleButton.cjs.map +1 -0
  33. package/dist/components/button/ToggleButton.mjs +68 -0
  34. package/dist/components/button/ToggleButton.mjs.map +1 -0
  35. package/dist/components/button/Toolbar.cjs +2 -0
  36. package/dist/components/button/Toolbar.cjs.map +1 -0
  37. package/dist/components/button/Toolbar.context.cjs +2 -0
  38. package/dist/components/button/Toolbar.context.cjs.map +1 -0
  39. package/dist/components/button/Toolbar.context.mjs +31 -0
  40. package/dist/components/button/Toolbar.context.mjs.map +1 -0
  41. package/dist/components/button/Toolbar.mjs +64 -0
  42. package/dist/components/button/Toolbar.mjs.map +1 -0
  43. package/dist/components/button/Toolbar.parts.cjs +2 -0
  44. package/dist/components/button/Toolbar.parts.cjs.map +1 -0
  45. package/dist/components/button/Toolbar.parts.mjs +126 -0
  46. package/dist/components/button/Toolbar.parts.mjs.map +1 -0
  47. package/dist/components/button/buttonStyles.cjs +2 -0
  48. package/dist/components/button/buttonStyles.cjs.map +1 -0
  49. package/dist/components/button/buttonStyles.mjs +39 -0
  50. package/dist/components/button/buttonStyles.mjs.map +1 -0
  51. package/dist/components/data-display/Avatar.cjs +2 -0
  52. package/dist/components/data-display/Avatar.cjs.map +1 -0
  53. package/dist/components/data-display/Avatar.mjs +162 -0
  54. package/dist/components/data-display/Avatar.mjs.map +1 -0
  55. package/dist/components/data-display/AvatarGroup.cjs +2 -0
  56. package/dist/components/data-display/AvatarGroup.cjs.map +1 -0
  57. package/dist/components/data-display/AvatarGroup.mjs +135 -0
  58. package/dist/components/data-display/AvatarGroup.mjs.map +1 -0
  59. package/dist/components/data-display/Badge.cjs +2 -0
  60. package/dist/components/data-display/Badge.cjs.map +1 -0
  61. package/dist/components/data-display/Badge.colors.cjs +2 -0
  62. package/dist/components/data-display/Badge.colors.cjs.map +1 -0
  63. package/dist/components/data-display/Badge.colors.mjs +58 -0
  64. package/dist/components/data-display/Badge.colors.mjs.map +1 -0
  65. package/dist/components/data-display/Badge.mjs +33 -0
  66. package/dist/components/data-display/Badge.mjs.map +1 -0
  67. package/dist/components/data-display/CounterBadge.cjs +2 -0
  68. package/dist/components/data-display/CounterBadge.cjs.map +1 -0
  69. package/dist/components/data-display/CounterBadge.mjs +29 -0
  70. package/dist/components/data-display/CounterBadge.mjs.map +1 -0
  71. package/dist/components/data-display/Divider.cjs +2 -0
  72. package/dist/components/data-display/Divider.cjs.map +1 -0
  73. package/dist/components/data-display/Divider.mjs +53 -0
  74. package/dist/components/data-display/Divider.mjs.map +1 -0
  75. package/dist/components/data-display/Image.cjs +2 -0
  76. package/dist/components/data-display/Image.cjs.map +1 -0
  77. package/dist/components/data-display/Image.mjs +33 -0
  78. package/dist/components/data-display/Image.mjs.map +1 -0
  79. package/dist/components/data-display/InfoLabel.cjs +2 -0
  80. package/dist/components/data-display/InfoLabel.cjs.map +1 -0
  81. package/dist/components/data-display/InfoLabel.mjs +105 -0
  82. package/dist/components/data-display/InfoLabel.mjs.map +1 -0
  83. package/dist/components/data-display/List.cjs +2 -0
  84. package/dist/components/data-display/List.cjs.map +1 -0
  85. package/dist/components/data-display/List.mjs +382 -0
  86. package/dist/components/data-display/List.mjs.map +1 -0
  87. package/dist/components/data-display/List.registry.cjs +2 -0
  88. package/dist/components/data-display/List.registry.cjs.map +1 -0
  89. package/dist/components/data-display/List.registry.mjs +101 -0
  90. package/dist/components/data-display/List.registry.mjs.map +1 -0
  91. package/dist/components/data-display/Persona.cjs +2 -0
  92. package/dist/components/data-display/Persona.cjs.map +1 -0
  93. package/dist/components/data-display/Persona.mjs +50 -0
  94. package/dist/components/data-display/Persona.mjs.map +1 -0
  95. package/dist/components/data-display/PresenceBadge.cjs +2 -0
  96. package/dist/components/data-display/PresenceBadge.cjs.map +1 -0
  97. package/dist/components/data-display/PresenceBadge.mjs +72 -0
  98. package/dist/components/data-display/PresenceBadge.mjs.map +1 -0
  99. package/dist/components/data-display/Tag.cjs +2 -0
  100. package/dist/components/data-display/Tag.cjs.map +1 -0
  101. package/dist/components/data-display/Tag.mjs +152 -0
  102. package/dist/components/data-display/Tag.mjs.map +1 -0
  103. package/dist/components/feedback/MessageBar.cjs +2 -0
  104. package/dist/components/feedback/MessageBar.cjs.map +1 -0
  105. package/dist/components/feedback/MessageBar.mjs +202 -0
  106. package/dist/components/feedback/MessageBar.mjs.map +1 -0
  107. package/dist/components/feedback/MessageBar.parts.cjs +2 -0
  108. package/dist/components/feedback/MessageBar.parts.cjs.map +1 -0
  109. package/dist/components/feedback/MessageBar.parts.mjs +84 -0
  110. package/dist/components/feedback/MessageBar.parts.mjs.map +1 -0
  111. package/dist/components/feedback/MessageBar.reflow.cjs +2 -0
  112. package/dist/components/feedback/MessageBar.reflow.cjs.map +1 -0
  113. package/dist/components/feedback/MessageBar.reflow.mjs +74 -0
  114. package/dist/components/feedback/MessageBar.reflow.mjs.map +1 -0
  115. package/dist/components/feedback/MessageBar.status.cjs +2 -0
  116. package/dist/components/feedback/MessageBar.status.cjs.map +1 -0
  117. package/dist/components/feedback/MessageBar.status.mjs +46 -0
  118. package/dist/components/feedback/MessageBar.status.mjs.map +1 -0
  119. package/dist/components/feedback/ProgressBar.cjs +2 -0
  120. package/dist/components/feedback/ProgressBar.cjs.map +1 -0
  121. package/dist/components/feedback/ProgressBar.mjs +73 -0
  122. package/dist/components/feedback/ProgressBar.mjs.map +1 -0
  123. package/dist/components/feedback/Skeleton.cjs +2 -0
  124. package/dist/components/feedback/Skeleton.cjs.map +1 -0
  125. package/dist/components/feedback/Skeleton.mjs +49 -0
  126. package/dist/components/feedback/Skeleton.mjs.map +1 -0
  127. package/dist/components/feedback/Spinner.cjs +2 -0
  128. package/dist/components/feedback/Spinner.cjs.map +1 -0
  129. package/dist/components/feedback/Spinner.mjs +61 -0
  130. package/dist/components/feedback/Spinner.mjs.map +1 -0
  131. package/dist/components/feedback/Toast.cjs +2 -0
  132. package/dist/components/feedback/Toast.cjs.map +1 -0
  133. package/dist/components/feedback/Toast.context.cjs +2 -0
  134. package/dist/components/feedback/Toast.context.cjs.map +1 -0
  135. package/dist/components/feedback/Toast.context.mjs +23 -0
  136. package/dist/components/feedback/Toast.context.mjs.map +1 -0
  137. package/dist/components/feedback/Toast.mjs +15 -0
  138. package/dist/components/feedback/Toast.mjs.map +1 -0
  139. package/dist/components/feedback/Toast.parts.cjs +2 -0
  140. package/dist/components/feedback/Toast.parts.cjs.map +1 -0
  141. package/dist/components/feedback/Toast.parts.mjs +98 -0
  142. package/dist/components/feedback/Toast.parts.mjs.map +1 -0
  143. package/dist/components/feedback/Toast.root.cjs +2 -0
  144. package/dist/components/feedback/Toast.root.cjs.map +1 -0
  145. package/dist/components/feedback/Toast.root.mjs +109 -0
  146. package/dist/components/feedback/Toast.root.mjs.map +1 -0
  147. package/dist/components/feedback/Toaster.cjs +2 -0
  148. package/dist/components/feedback/Toaster.cjs.map +1 -0
  149. package/dist/components/feedback/Toaster.mjs +564 -0
  150. package/dist/components/feedback/Toaster.mjs.map +1 -0
  151. package/dist/components/input/AlphaSlider.cjs +2 -0
  152. package/dist/components/input/AlphaSlider.cjs.map +1 -0
  153. package/dist/components/input/AlphaSlider.mjs +115 -0
  154. package/dist/components/input/AlphaSlider.mjs.map +1 -0
  155. package/dist/components/input/Checkbox.cjs +2 -0
  156. package/dist/components/input/Checkbox.cjs.map +1 -0
  157. package/dist/components/input/Checkbox.mjs +97 -0
  158. package/dist/components/input/Checkbox.mjs.map +1 -0
  159. package/dist/components/input/ColorArea.cjs +2 -0
  160. package/dist/components/input/ColorArea.cjs.map +1 -0
  161. package/dist/components/input/ColorArea.mjs +204 -0
  162. package/dist/components/input/ColorArea.mjs.map +1 -0
  163. package/dist/components/input/ColorPicker.cjs +6 -0
  164. package/dist/components/input/ColorPicker.cjs.map +1 -0
  165. package/dist/components/input/ColorPicker.mjs +213 -0
  166. package/dist/components/input/ColorPicker.mjs.map +1 -0
  167. package/dist/components/input/ColorPicker.parts.cjs +2 -0
  168. package/dist/components/input/ColorPicker.parts.cjs.map +1 -0
  169. package/dist/components/input/ColorPicker.parts.mjs +192 -0
  170. package/dist/components/input/ColorPicker.parts.mjs.map +1 -0
  171. package/dist/components/input/ColorSlider.cjs +2 -0
  172. package/dist/components/input/ColorSlider.cjs.map +1 -0
  173. package/dist/components/input/ColorSlider.mjs +138 -0
  174. package/dist/components/input/ColorSlider.mjs.map +1 -0
  175. package/dist/components/input/Combobox.cjs +2 -0
  176. package/dist/components/input/Combobox.cjs.map +1 -0
  177. package/dist/components/input/Combobox.expand.cjs +2 -0
  178. package/dist/components/input/Combobox.expand.cjs.map +1 -0
  179. package/dist/components/input/Combobox.expand.mjs +38 -0
  180. package/dist/components/input/Combobox.expand.mjs.map +1 -0
  181. package/dist/components/input/Combobox.mjs +192 -0
  182. package/dist/components/input/Combobox.mjs.map +1 -0
  183. package/dist/components/input/DatePicker.cjs +2 -0
  184. package/dist/components/input/DatePicker.cjs.map +1 -0
  185. package/dist/components/input/DatePicker.mjs +341 -0
  186. package/dist/components/input/DatePicker.mjs.map +1 -0
  187. package/dist/components/input/Dropdown.cjs +2 -0
  188. package/dist/components/input/Dropdown.cjs.map +1 -0
  189. package/dist/components/input/Dropdown.mjs +131 -0
  190. package/dist/components/input/Dropdown.mjs.map +1 -0
  191. package/dist/components/input/Field.cjs +2 -0
  192. package/dist/components/input/Field.cjs.map +1 -0
  193. package/dist/components/input/Field.mjs +201 -0
  194. package/dist/components/input/Field.mjs.map +1 -0
  195. package/dist/components/input/Input.cjs +2 -0
  196. package/dist/components/input/Input.cjs.map +1 -0
  197. package/dist/components/input/Input.mjs +82 -0
  198. package/dist/components/input/Input.mjs.map +1 -0
  199. package/dist/components/input/Label.cjs +2 -0
  200. package/dist/components/input/Label.cjs.map +1 -0
  201. package/dist/components/input/Label.mjs +29 -0
  202. package/dist/components/input/Label.mjs.map +1 -0
  203. package/dist/components/input/Option.cjs +2 -0
  204. package/dist/components/input/Option.cjs.map +1 -0
  205. package/dist/components/input/Option.mjs +171 -0
  206. package/dist/components/input/Option.mjs.map +1 -0
  207. package/dist/components/input/RadioGroup.cjs +2 -0
  208. package/dist/components/input/RadioGroup.cjs.map +1 -0
  209. package/dist/components/input/RadioGroup.mjs +140 -0
  210. package/dist/components/input/RadioGroup.mjs.map +1 -0
  211. package/dist/components/input/Rating.cjs +2 -0
  212. package/dist/components/input/Rating.cjs.map +1 -0
  213. package/dist/components/input/Rating.mjs +197 -0
  214. package/dist/components/input/Rating.mjs.map +1 -0
  215. package/dist/components/input/SearchBox.cjs +2 -0
  216. package/dist/components/input/SearchBox.cjs.map +1 -0
  217. package/dist/components/input/SearchBox.mjs +204 -0
  218. package/dist/components/input/SearchBox.mjs.map +1 -0
  219. package/dist/components/input/Select.cjs +2 -0
  220. package/dist/components/input/Select.cjs.map +1 -0
  221. package/dist/components/input/Select.mjs +34 -0
  222. package/dist/components/input/Select.mjs.map +1 -0
  223. package/dist/components/input/Slider.cjs +2 -0
  224. package/dist/components/input/Slider.cjs.map +1 -0
  225. package/dist/components/input/Slider.mjs +80 -0
  226. package/dist/components/input/Slider.mjs.map +1 -0
  227. package/dist/components/input/SpinButton.cjs +2 -0
  228. package/dist/components/input/SpinButton.cjs.map +1 -0
  229. package/dist/components/input/SpinButton.mjs +158 -0
  230. package/dist/components/input/SpinButton.mjs.map +1 -0
  231. package/dist/components/input/SwatchPicker.cjs +2 -0
  232. package/dist/components/input/SwatchPicker.cjs.map +1 -0
  233. package/dist/components/input/SwatchPicker.mjs +114 -0
  234. package/dist/components/input/SwatchPicker.mjs.map +1 -0
  235. package/dist/components/input/Switch.cjs +2 -0
  236. package/dist/components/input/Switch.cjs.map +1 -0
  237. package/dist/components/input/Switch.mjs +93 -0
  238. package/dist/components/input/Switch.mjs.map +1 -0
  239. package/dist/components/input/TagPicker.cjs +2 -0
  240. package/dist/components/input/TagPicker.cjs.map +1 -0
  241. package/dist/components/input/TagPicker.mjs +253 -0
  242. package/dist/components/input/TagPicker.mjs.map +1 -0
  243. package/dist/components/input/Textarea.cjs +2 -0
  244. package/dist/components/input/Textarea.cjs.map +1 -0
  245. package/dist/components/input/Textarea.mjs +33 -0
  246. package/dist/components/input/Textarea.mjs.map +1 -0
  247. package/dist/components/input/TimePicker.cjs +2 -0
  248. package/dist/components/input/TimePicker.cjs.map +1 -0
  249. package/dist/components/input/TimePicker.mjs +295 -0
  250. package/dist/components/input/TimePicker.mjs.map +1 -0
  251. package/dist/components/input/colorName.cjs +2 -0
  252. package/dist/components/input/colorName.cjs.map +1 -0
  253. package/dist/components/input/colorName.mjs +30 -0
  254. package/dist/components/input/colorName.mjs.map +1 -0
  255. package/dist/components/input/colorUtils.cjs +2 -0
  256. package/dist/components/input/colorUtils.cjs.map +1 -0
  257. package/dist/components/input/colorUtils.mjs +194 -0
  258. package/dist/components/input/colorUtils.mjs.map +1 -0
  259. package/dist/components/input/dateUtils.cjs +2 -0
  260. package/dist/components/input/dateUtils.cjs.map +1 -0
  261. package/dist/components/input/dateUtils.mjs +250 -0
  262. package/dist/components/input/dateUtils.mjs.map +1 -0
  263. package/dist/components/input/pickerStyles.cjs +2 -0
  264. package/dist/components/input/pickerStyles.cjs.map +1 -0
  265. package/dist/components/input/pickerStyles.mjs +10 -0
  266. package/dist/components/input/pickerStyles.mjs.map +1 -0
  267. package/dist/components/internal/HiddenInput.cjs +2 -0
  268. package/dist/components/internal/HiddenInput.cjs.map +1 -0
  269. package/dist/components/internal/HiddenInput.mjs +88 -0
  270. package/dist/components/internal/HiddenInput.mjs.map +1 -0
  271. package/dist/components/layout/Accordion.cjs +2 -0
  272. package/dist/components/layout/Accordion.cjs.map +1 -0
  273. package/dist/components/layout/Accordion.mjs +237 -0
  274. package/dist/components/layout/Accordion.mjs.map +1 -0
  275. package/dist/components/layout/Card.cjs +2 -0
  276. package/dist/components/layout/Card.cjs.map +1 -0
  277. package/dist/components/layout/Card.mjs +122 -0
  278. package/dist/components/layout/Card.mjs.map +1 -0
  279. package/dist/components/layout/Carousel.cjs +2 -0
  280. package/dist/components/layout/Carousel.cjs.map +1 -0
  281. package/dist/components/layout/Carousel.mjs +206 -0
  282. package/dist/components/layout/Carousel.mjs.map +1 -0
  283. package/dist/components/layout/Flex.cjs +2 -0
  284. package/dist/components/layout/Flex.cjs.map +1 -0
  285. package/dist/components/layout/Flex.mjs +55 -0
  286. package/dist/components/layout/Flex.mjs.map +1 -0
  287. package/dist/components/layout/Grid.cjs +2 -0
  288. package/dist/components/layout/Grid.cjs.map +1 -0
  289. package/dist/components/layout/Grid.mjs +63 -0
  290. package/dist/components/layout/Grid.mjs.map +1 -0
  291. package/dist/components/layout/Overflow.cjs +2 -0
  292. package/dist/components/layout/Overflow.cjs.map +1 -0
  293. package/dist/components/layout/Overflow.mjs +270 -0
  294. package/dist/components/layout/Overflow.mjs.map +1 -0
  295. package/dist/components/layout/Stack.cjs +2 -0
  296. package/dist/components/layout/Stack.cjs.map +1 -0
  297. package/dist/components/layout/Stack.mjs +40 -0
  298. package/dist/components/layout/Stack.mjs.map +1 -0
  299. package/dist/components/layout/TabList.cjs +2 -0
  300. package/dist/components/layout/TabList.cjs.map +1 -0
  301. package/dist/components/layout/TabList.mjs +239 -0
  302. package/dist/components/layout/TabList.mjs.map +1 -0
  303. package/dist/components/layout/Tree.cjs +2 -0
  304. package/dist/components/layout/Tree.cjs.map +1 -0
  305. package/dist/components/layout/Tree.context.cjs +2 -0
  306. package/dist/components/layout/Tree.context.cjs.map +1 -0
  307. package/dist/components/layout/Tree.context.mjs +33 -0
  308. package/dist/components/layout/Tree.context.mjs.map +1 -0
  309. package/dist/components/layout/Tree.core.cjs +2 -0
  310. package/dist/components/layout/Tree.core.cjs.map +1 -0
  311. package/dist/components/layout/Tree.core.mjs +416 -0
  312. package/dist/components/layout/Tree.core.mjs.map +1 -0
  313. package/dist/components/layout/Tree.itemPersonaLayout.cjs +2 -0
  314. package/dist/components/layout/Tree.itemPersonaLayout.cjs.map +1 -0
  315. package/dist/components/layout/Tree.itemPersonaLayout.mjs +46 -0
  316. package/dist/components/layout/Tree.itemPersonaLayout.mjs.map +1 -0
  317. package/dist/components/layout/Tree.mjs +12 -0
  318. package/dist/components/layout/Tree.mjs.map +1 -0
  319. package/dist/components/layout/Tree.selection.cjs +2 -0
  320. package/dist/components/layout/Tree.selection.cjs.map +1 -0
  321. package/dist/components/layout/Tree.selection.mjs +73 -0
  322. package/dist/components/layout/Tree.selection.mjs.map +1 -0
  323. package/dist/components/layout/disclosureIds.cjs +2 -0
  324. package/dist/components/layout/disclosureIds.cjs.map +1 -0
  325. package/dist/components/layout/disclosureIds.mjs +12 -0
  326. package/dist/components/layout/disclosureIds.mjs.map +1 -0
  327. package/dist/components/motion/Presence.cjs +2 -0
  328. package/dist/components/motion/Presence.cjs.map +1 -0
  329. package/dist/components/motion/Presence.mjs +35 -0
  330. package/dist/components/motion/Presence.mjs.map +1 -0
  331. package/dist/components/navigation/Breadcrumb.cjs +2 -0
  332. package/dist/components/navigation/Breadcrumb.cjs.map +1 -0
  333. package/dist/components/navigation/Breadcrumb.mjs +145 -0
  334. package/dist/components/navigation/Breadcrumb.mjs.map +1 -0
  335. package/dist/components/navigation/Menu.cjs +2 -0
  336. package/dist/components/navigation/Menu.cjs.map +1 -0
  337. package/dist/components/navigation/Menu.context.cjs +2 -0
  338. package/dist/components/navigation/Menu.context.cjs.map +1 -0
  339. package/dist/components/navigation/Menu.context.mjs +82 -0
  340. package/dist/components/navigation/Menu.context.mjs.map +1 -0
  341. package/dist/components/navigation/Menu.group.cjs +2 -0
  342. package/dist/components/navigation/Menu.group.cjs.map +1 -0
  343. package/dist/components/navigation/Menu.group.mjs +60 -0
  344. package/dist/components/navigation/Menu.group.mjs.map +1 -0
  345. package/dist/components/navigation/Menu.items.cjs +2 -0
  346. package/dist/components/navigation/Menu.items.cjs.map +1 -0
  347. package/dist/components/navigation/Menu.items.mjs +133 -0
  348. package/dist/components/navigation/Menu.items.mjs.map +1 -0
  349. package/dist/components/navigation/Menu.link.cjs +2 -0
  350. package/dist/components/navigation/Menu.link.cjs.map +1 -0
  351. package/dist/components/navigation/Menu.link.mjs +47 -0
  352. package/dist/components/navigation/Menu.link.mjs.map +1 -0
  353. package/dist/components/navigation/Menu.mjs +27 -0
  354. package/dist/components/navigation/Menu.mjs.map +1 -0
  355. package/dist/components/navigation/Menu.popover.cjs +2 -0
  356. package/dist/components/navigation/Menu.popover.cjs.map +1 -0
  357. package/dist/components/navigation/Menu.popover.mjs +232 -0
  358. package/dist/components/navigation/Menu.popover.mjs.map +1 -0
  359. package/dist/components/navigation/Menu.root.cjs +2 -0
  360. package/dist/components/navigation/Menu.root.cjs.map +1 -0
  361. package/dist/components/navigation/Menu.root.mjs +309 -0
  362. package/dist/components/navigation/Menu.root.mjs.map +1 -0
  363. package/dist/components/navigation/Menu.selectable.cjs +2 -0
  364. package/dist/components/navigation/Menu.selectable.cjs.map +1 -0
  365. package/dist/components/navigation/Menu.selectable.mjs +111 -0
  366. package/dist/components/navigation/Menu.selectable.mjs.map +1 -0
  367. package/dist/components/navigation/Menu.shared.cjs +2 -0
  368. package/dist/components/navigation/Menu.shared.cjs.map +1 -0
  369. package/dist/components/navigation/Menu.shared.mjs +23 -0
  370. package/dist/components/navigation/Menu.shared.mjs.map +1 -0
  371. package/dist/components/navigation/Menu.splitGroup.cjs +2 -0
  372. package/dist/components/navigation/Menu.splitGroup.cjs.map +1 -0
  373. package/dist/components/navigation/Menu.splitGroup.mjs +52 -0
  374. package/dist/components/navigation/Menu.splitGroup.mjs.map +1 -0
  375. package/dist/components/navigation/Menu.trigger.cjs +2 -0
  376. package/dist/components/navigation/Menu.trigger.cjs.map +1 -0
  377. package/dist/components/navigation/Menu.trigger.mjs +79 -0
  378. package/dist/components/navigation/Menu.trigger.mjs.map +1 -0
  379. package/dist/components/navigation/Nav.cjs +2 -0
  380. package/dist/components/navigation/Nav.cjs.map +1 -0
  381. package/dist/components/navigation/Nav.mjs +291 -0
  382. package/dist/components/navigation/Nav.mjs.map +1 -0
  383. package/dist/components/navigation/Pagination.cjs +2 -0
  384. package/dist/components/navigation/Pagination.cjs.map +1 -0
  385. package/dist/components/navigation/Pagination.mjs +118 -0
  386. package/dist/components/navigation/Pagination.mjs.map +1 -0
  387. package/dist/components/navigation/Stepper.cjs +2 -0
  388. package/dist/components/navigation/Stepper.cjs.map +1 -0
  389. package/dist/components/navigation/Stepper.mjs +205 -0
  390. package/dist/components/navigation/Stepper.mjs.map +1 -0
  391. package/dist/components/overlays/Dialog.cjs +2 -0
  392. package/dist/components/overlays/Dialog.cjs.map +1 -0
  393. package/dist/components/overlays/Dialog.mjs +181 -0
  394. package/dist/components/overlays/Dialog.mjs.map +1 -0
  395. package/dist/components/overlays/Dialog.shared.cjs +2 -0
  396. package/dist/components/overlays/Dialog.shared.cjs.map +1 -0
  397. package/dist/components/overlays/Dialog.shared.mjs +227 -0
  398. package/dist/components/overlays/Dialog.shared.mjs.map +1 -0
  399. package/dist/components/overlays/Drawer.cjs +2 -0
  400. package/dist/components/overlays/Drawer.cjs.map +1 -0
  401. package/dist/components/overlays/Drawer.mjs +193 -0
  402. package/dist/components/overlays/Drawer.mjs.map +1 -0
  403. package/dist/components/overlays/Popover.cjs +2 -0
  404. package/dist/components/overlays/Popover.cjs.map +1 -0
  405. package/dist/components/overlays/Popover.mjs +367 -0
  406. package/dist/components/overlays/Popover.mjs.map +1 -0
  407. package/dist/components/overlays/Popover.shared.cjs +2 -0
  408. package/dist/components/overlays/Popover.shared.cjs.map +1 -0
  409. package/dist/components/overlays/Popover.shared.mjs +182 -0
  410. package/dist/components/overlays/Popover.shared.mjs.map +1 -0
  411. package/dist/components/overlays/TeachingPopover.cjs +2 -0
  412. package/dist/components/overlays/TeachingPopover.cjs.map +1 -0
  413. package/dist/components/overlays/TeachingPopover.mjs +185 -0
  414. package/dist/components/overlays/TeachingPopover.mjs.map +1 -0
  415. package/dist/components/overlays/Tooltip.cjs +2 -0
  416. package/dist/components/overlays/Tooltip.cjs.map +1 -0
  417. package/dist/components/overlays/Tooltip.mjs +161 -0
  418. package/dist/components/overlays/Tooltip.mjs.map +1 -0
  419. package/dist/components/portal/Portal.cjs +2 -0
  420. package/dist/components/portal/Portal.cjs.map +1 -0
  421. package/dist/components/portal/Portal.mjs +46 -0
  422. package/dist/components/portal/Portal.mjs.map +1 -0
  423. package/dist/components/provider/WaveProvider.cjs +2 -0
  424. package/dist/components/provider/WaveProvider.cjs.map +1 -0
  425. package/dist/components/provider/WaveProvider.mjs +52 -0
  426. package/dist/components/provider/WaveProvider.mjs.map +1 -0
  427. package/dist/components/table/DataGrid.cjs +2 -0
  428. package/dist/components/table/DataGrid.cjs.map +1 -0
  429. package/dist/components/table/DataGrid.mjs +490 -0
  430. package/dist/components/table/DataGrid.mjs.map +1 -0
  431. package/dist/components/table/Table.cjs +2 -0
  432. package/dist/components/table/Table.cjs.map +1 -0
  433. package/dist/components/table/Table.mjs +100 -0
  434. package/dist/components/table/Table.mjs.map +1 -0
  435. package/dist/components/table/useGridNavigation.cjs +2 -0
  436. package/dist/components/table/useGridNavigation.cjs.map +1 -0
  437. package/dist/components/table/useGridNavigation.mjs +336 -0
  438. package/dist/components/table/useGridNavigation.mjs.map +1 -0
  439. package/dist/components/typography/Text.cjs +2 -0
  440. package/dist/components/typography/Text.cjs.map +1 -0
  441. package/dist/components/typography/Text.mjs +39 -0
  442. package/dist/components/typography/Text.mjs.map +1 -0
  443. package/dist/hooks/useAnnounce.cjs +2 -0
  444. package/dist/hooks/useAnnounce.cjs.map +1 -0
  445. package/dist/hooks/useAnnounce.mjs +88 -0
  446. package/dist/hooks/useAnnounce.mjs.map +1 -0
  447. package/dist/hooks/useCheckedValues.cjs +2 -0
  448. package/dist/hooks/useCheckedValues.cjs.map +1 -0
  449. package/dist/hooks/useCheckedValues.mjs +102 -0
  450. package/dist/hooks/useCheckedValues.mjs.map +1 -0
  451. package/dist/hooks/useContextMenuAnchor.cjs +2 -0
  452. package/dist/hooks/useContextMenuAnchor.cjs.map +1 -0
  453. package/dist/hooks/useContextMenuAnchor.mjs +132 -0
  454. package/dist/hooks/useContextMenuAnchor.mjs.map +1 -0
  455. package/dist/hooks/useControllable.cjs +2 -0
  456. package/dist/hooks/useControllable.cjs.map +1 -0
  457. package/dist/hooks/useControllable.mjs +37 -0
  458. package/dist/hooks/useControllable.mjs.map +1 -0
  459. package/dist/hooks/useDirection.cjs +2 -0
  460. package/dist/hooks/useDirection.cjs.map +1 -0
  461. package/dist/hooks/useDirection.mjs +57 -0
  462. package/dist/hooks/useDirection.mjs.map +1 -0
  463. package/dist/hooks/useDismiss.cjs +2 -0
  464. package/dist/hooks/useDismiss.cjs.map +1 -0
  465. package/dist/hooks/useDismiss.mjs +57 -0
  466. package/dist/hooks/useDismiss.mjs.map +1 -0
  467. package/dist/hooks/useEventCallback.cjs +2 -0
  468. package/dist/hooks/useEventCallback.cjs.map +1 -0
  469. package/dist/hooks/useEventCallback.mjs +16 -0
  470. package/dist/hooks/useEventCallback.mjs.map +1 -0
  471. package/dist/hooks/useFieldControl.cjs +2 -0
  472. package/dist/hooks/useFieldControl.cjs.map +1 -0
  473. package/dist/hooks/useFieldControl.mjs +62 -0
  474. package/dist/hooks/useFieldControl.mjs.map +1 -0
  475. package/dist/hooks/useFocusTrap.cjs +2 -0
  476. package/dist/hooks/useFocusTrap.cjs.map +1 -0
  477. package/dist/hooks/useFocusTrap.mjs +266 -0
  478. package/dist/hooks/useFocusTrap.mjs.map +1 -0
  479. package/dist/hooks/useFormReset.cjs +2 -0
  480. package/dist/hooks/useFormReset.cjs.map +1 -0
  481. package/dist/hooks/useFormReset.mjs +33 -0
  482. package/dist/hooks/useFormReset.mjs.map +1 -0
  483. package/dist/hooks/useHoverIntent.cjs +2 -0
  484. package/dist/hooks/useHoverIntent.cjs.map +1 -0
  485. package/dist/hooks/useHoverIntent.mjs +201 -0
  486. package/dist/hooks/useHoverIntent.mjs.map +1 -0
  487. package/dist/hooks/useId.cjs +2 -0
  488. package/dist/hooks/useId.cjs.map +1 -0
  489. package/dist/hooks/useId.mjs +11 -0
  490. package/dist/hooks/useId.mjs.map +1 -0
  491. package/dist/hooks/useIsClient.cjs +2 -0
  492. package/dist/hooks/useIsClient.cjs.map +1 -0
  493. package/dist/hooks/useIsClient.mjs +19 -0
  494. package/dist/hooks/useIsClient.mjs.map +1 -0
  495. package/dist/hooks/useListbox.cjs +2 -0
  496. package/dist/hooks/useListbox.cjs.map +1 -0
  497. package/dist/hooks/useListbox.mjs +492 -0
  498. package/dist/hooks/useListbox.mjs.map +1 -0
  499. package/dist/hooks/useMediaQuery.cjs +2 -0
  500. package/dist/hooks/useMediaQuery.cjs.map +1 -0
  501. package/dist/hooks/useMediaQuery.mjs +20 -0
  502. package/dist/hooks/useMediaQuery.mjs.map +1 -0
  503. package/dist/hooks/useMergedRefs.cjs +2 -0
  504. package/dist/hooks/useMergedRefs.cjs.map +1 -0
  505. package/dist/hooks/useMergedRefs.mjs +57 -0
  506. package/dist/hooks/useMergedRefs.mjs.map +1 -0
  507. package/dist/hooks/useModalIsolation.cjs +2 -0
  508. package/dist/hooks/useModalIsolation.cjs.map +1 -0
  509. package/dist/hooks/useModalIsolation.mjs +87 -0
  510. package/dist/hooks/useModalIsolation.mjs.map +1 -0
  511. package/dist/hooks/useModalLayer.cjs +2 -0
  512. package/dist/hooks/useModalLayer.cjs.map +1 -0
  513. package/dist/hooks/useModalLayer.mjs +30 -0
  514. package/dist/hooks/useModalLayer.mjs.map +1 -0
  515. package/dist/hooks/usePopupPosition.cjs +2 -0
  516. package/dist/hooks/usePopupPosition.cjs.map +1 -0
  517. package/dist/hooks/usePopupPosition.mjs +117 -0
  518. package/dist/hooks/usePopupPosition.mjs.map +1 -0
  519. package/dist/hooks/usePrefersReducedMotion.cjs +2 -0
  520. package/dist/hooks/usePrefersReducedMotion.cjs.map +1 -0
  521. package/dist/hooks/usePrefersReducedMotion.mjs +10 -0
  522. package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -0
  523. package/dist/hooks/usePresence.cjs +2 -0
  524. package/dist/hooks/usePresence.cjs.map +1 -0
  525. package/dist/hooks/usePresence.mjs +136 -0
  526. package/dist/hooks/usePresence.mjs.map +1 -0
  527. package/dist/hooks/usePreserveFocus.cjs +2 -0
  528. package/dist/hooks/usePreserveFocus.cjs.map +1 -0
  529. package/dist/hooks/usePreserveFocus.mjs +50 -0
  530. package/dist/hooks/usePreserveFocus.mjs.map +1 -0
  531. package/dist/hooks/useRestoreFocus.cjs +2 -0
  532. package/dist/hooks/useRestoreFocus.cjs.map +1 -0
  533. package/dist/hooks/useRestoreFocus.mjs +271 -0
  534. package/dist/hooks/useRestoreFocus.mjs.map +1 -0
  535. package/dist/hooks/useRovingTabIndex.cjs +2 -0
  536. package/dist/hooks/useRovingTabIndex.cjs.map +1 -0
  537. package/dist/hooks/useRovingTabIndex.mjs +389 -0
  538. package/dist/hooks/useRovingTabIndex.mjs.map +1 -0
  539. package/dist/hooks/useScrollLock.cjs +2 -0
  540. package/dist/hooks/useScrollLock.cjs.map +1 -0
  541. package/dist/hooks/useScrollLock.mjs +71 -0
  542. package/dist/hooks/useScrollLock.mjs.map +1 -0
  543. package/dist/hooks/useTriggerElement.cjs +2 -0
  544. package/dist/hooks/useTriggerElement.cjs.map +1 -0
  545. package/dist/hooks/useTriggerElement.mjs +126 -0
  546. package/dist/hooks/useTriggerElement.mjs.map +1 -0
  547. package/dist/hooks/useTypeahead.cjs +2 -0
  548. package/dist/hooks/useTypeahead.cjs.map +1 -0
  549. package/dist/hooks/useTypeahead.mjs +38 -0
  550. package/dist/hooks/useTypeahead.mjs.map +1 -0
  551. package/dist/index.cjs +1 -1
  552. package/dist/index.d.cts +11086 -0
  553. package/dist/index.d.ts +10405 -1757
  554. package/dist/index.mjs +103 -5695
  555. package/dist/lib/aria.cjs +2 -0
  556. package/dist/lib/aria.cjs.map +1 -0
  557. package/dist/lib/aria.mjs +29 -0
  558. package/dist/lib/aria.mjs.map +1 -0
  559. package/dist/lib/children.cjs +2 -0
  560. package/dist/lib/children.cjs.map +1 -0
  561. package/dist/lib/children.mjs +37 -0
  562. package/dist/lib/children.mjs.map +1 -0
  563. package/dist/lib/classNames.cjs +2 -0
  564. package/dist/lib/classNames.cjs.map +1 -0
  565. package/dist/lib/classNames.mjs +415 -0
  566. package/dist/lib/classNames.mjs.map +1 -0
  567. package/dist/lib/cn.cjs +2 -0
  568. package/dist/lib/cn.cjs.map +1 -0
  569. package/dist/lib/cn.mjs +64 -0
  570. package/dist/lib/cn.mjs.map +1 -0
  571. package/dist/lib/color.cjs +2 -0
  572. package/dist/lib/color.cjs.map +1 -0
  573. package/dist/lib/color.mjs +86 -0
  574. package/dist/lib/color.mjs.map +1 -0
  575. package/dist/lib/composeEventHandlers.cjs +2 -0
  576. package/dist/lib/composeEventHandlers.cjs.map +1 -0
  577. package/dist/lib/composeEventHandlers.mjs +11 -0
  578. package/dist/lib/composeEventHandlers.mjs.map +1 -0
  579. package/dist/lib/dev.cjs +2 -0
  580. package/dist/lib/dev.cjs.map +1 -0
  581. package/dist/lib/dev.mjs +42 -0
  582. package/dist/lib/dev.mjs.map +1 -0
  583. package/dist/lib/direction.cjs +2 -0
  584. package/dist/lib/direction.cjs.map +1 -0
  585. package/dist/lib/direction.mjs +35 -0
  586. package/dist/lib/direction.mjs.map +1 -0
  587. package/dist/lib/events.cjs +2 -0
  588. package/dist/lib/events.cjs.map +1 -0
  589. package/dist/lib/events.mjs +31 -0
  590. package/dist/lib/events.mjs.map +1 -0
  591. package/dist/lib/focus.cjs +2 -0
  592. package/dist/lib/focus.cjs.map +1 -0
  593. package/dist/lib/focus.mjs +119 -0
  594. package/dist/lib/focus.mjs.map +1 -0
  595. package/dist/lib/globalRegistry.cjs +2 -0
  596. package/dist/lib/globalRegistry.cjs.map +1 -0
  597. package/dist/lib/globalRegistry.mjs +13 -0
  598. package/dist/lib/globalRegistry.mjs.map +1 -0
  599. package/dist/lib/icons.cjs +2 -0
  600. package/dist/lib/icons.cjs.map +1 -0
  601. package/dist/lib/icons.mjs +254 -0
  602. package/dist/lib/icons.mjs.map +1 -0
  603. package/dist/lib/labelInName.cjs +2 -0
  604. package/dist/lib/labelInName.cjs.map +1 -0
  605. package/dist/lib/labelInName.mjs +54 -0
  606. package/dist/lib/labelInName.mjs.map +1 -0
  607. package/dist/lib/layers.cjs +2 -0
  608. package/dist/lib/layers.cjs.map +1 -0
  609. package/dist/lib/layers.mjs +224 -0
  610. package/dist/lib/layers.mjs.map +1 -0
  611. package/dist/lib/mergeProps.cjs +2 -0
  612. package/dist/lib/mergeProps.cjs.map +1 -0
  613. package/dist/lib/mergeProps.mjs +21 -0
  614. package/dist/lib/mergeProps.mjs.map +1 -0
  615. package/dist/lib/mergeRefs.cjs +2 -0
  616. package/dist/lib/mergeRefs.cjs.map +1 -0
  617. package/dist/lib/mergeRefs.mjs +29 -0
  618. package/dist/lib/mergeRefs.mjs.map +1 -0
  619. package/dist/lib/renderTrigger.cjs +2 -0
  620. package/dist/lib/renderTrigger.cjs.map +1 -0
  621. package/dist/lib/renderTrigger.mjs +29 -0
  622. package/dist/lib/renderTrigger.mjs.map +1 -0
  623. package/dist/lib/slot.cjs +2 -0
  624. package/dist/lib/slot.cjs.map +1 -0
  625. package/dist/lib/slot.mjs +122 -0
  626. package/dist/lib/slot.mjs.map +1 -0
  627. package/dist/lib/styles.cjs +2 -0
  628. package/dist/lib/styles.cjs.map +1 -0
  629. package/dist/lib/styles.mjs +16 -0
  630. package/dist/lib/styles.mjs.map +1 -0
  631. package/dist/lib/theme.cjs +2 -0
  632. package/dist/lib/theme.cjs.map +1 -0
  633. package/dist/lib/theme.mjs +16 -0
  634. package/dist/lib/theme.mjs.map +1 -0
  635. package/dist/lib/toaster.cjs +2 -0
  636. package/dist/lib/toaster.cjs.map +1 -0
  637. package/dist/lib/toaster.mjs +77 -0
  638. package/dist/lib/toaster.mjs.map +1 -0
  639. package/dist/preflight.css +2 -0
  640. package/dist/styles.css +2 -0
  641. package/package.json +149 -100
  642. package/src/styles/animations.css +7 -39
  643. package/src/styles/base.css +103 -0
  644. package/src/styles/globals.css +10 -22
  645. package/src/styles/legacy-tokens.css +184 -0
  646. package/src/styles/preflight.css +7 -0
  647. package/src/styles/styles.css +32 -0
  648. package/src/styles/tailwind.css +17 -0
  649. package/src/styles/tokens.css +561 -221
  650. package/src/styles/variants.css +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.context.mjs","names":["React","ToasterContext","ToastContext","ToastUnscannedContext","unregisterNothing","INERT_TOAST_CONTEXT","useToastContext","reportMissingContext","componentName"],"sources":["../../../src/components/feedback/Toast.context.ts"],"sourcesContent":["import * as React from 'react';\nimport { reportMissingContext } from '../../lib/dev';\nimport type { Status } from '../../lib/types';\nimport type { ToastController } from './Toaster';\n\n/** The controller of the enclosing Toaster (`useToastController`); `null` outside one. */\nexport const ToasterContext = React.createContext<ToastController | null>(null);\nToasterContext.displayName = 'ToasterContext';\n\n/**\n * A part registered with its toast (D9, D10): the title (its label names the toast), the body (it\n * describes the toast) or the footer (its controls are actions). The getters are read when the\n * container composes its name, timer and announcement, after the parts have mounted.\n */\nexport type ToastPartRegistration =\n | {\n kind: 'title';\n id: string;\n getLabel: () => HTMLElement | null;\n getRow: () => HTMLElement | null;\n }\n | { kind: 'body'; id: string; getElement: () => HTMLElement | null }\n | { kind: 'footer'; getElement: () => HTMLElement | null };\n\n/** What a Toast rendered inside the Toaster's container registers with it (D10–D12). */\nexport interface ToastRegistration {\n status: Status;\n /** The resolved severity text (`''` when hidden). */\n statusLabel: string;\n /** The id of the visually hidden severity text, while it renders. */\n statusTextId: string | undefined;\n /** The Toast's `onDismiss`, called before the container dismisses the toast. */\n onDismiss: (() => void) | undefined;\n /** The Toast's built-in Dismiss button, which is no action. */\n getDismissButton: () => HTMLElement | null;\n}\n\n/** One per toast: provided by a standalone Toast and by the Toaster's container (D9). */\nexport interface ToastContextValue {\n /** The id of the title text that names the toast (`Toast.Title`'s label). */\n titleId: string | undefined;\n /**\n * What `Toast.Close` and the Dismiss button call: the Toast's `onDismiss` (when there is one),\n * then, inside the Toaster, the toast's dismissal. `undefined` when there is nothing to call.\n */\n dismiss: (() => void) | undefined;\n /** Registers a part (a no-op in a standalone Toast); returns the unregister function. */\n registerPart: (part: ToastPartRegistration) => () => void;\n /** Registers the Toast rendered inside a Toaster container; `null` everywhere else. */\n registerToast: ((toast: ToastRegistration) => () => void) | null;\n}\n\nexport const ToastContext = React.createContext<ToastContextValue | null>(null);\nToastContext.displayName = 'ToastContext';\n\n/** `true` inside the body a Toast wraps around children in which its scan found no part (D15 rule). */\nexport const ToastUnscannedContext = React.createContext(false);\nToastUnscannedContext.displayName = 'ToastUnscannedContext';\n\nconst unregisterNothing = () => {};\n\n/** The context a part gets in production outside a Toast (C-CONTEXT). */\nexport const INERT_TOAST_CONTEXT: ToastContextValue = {\n titleId: undefined,\n dismiss: undefined,\n registerPart: () => unregisterNothing,\n registerToast: null,\n};\n\n/**\n * The per-toast context of a part. Outside a Toast and a Toaster's container it throws\n * `[WaveUI] <componentName> must be used within <Toast>` in development and returns an inert\n * context in production (C-CONTEXT).\n */\nexport function useToastContext(componentName: string): ToastContextValue {\n const context = React.useContext(ToastContext);\n if (context) return context;\n reportMissingContext(componentName, '<Toast>');\n return INERT_TOAST_CONTEXT;\n}\n"],"mappings":";;;;AAMA,IAAaC,IAAiBD,EAAM,cAAsC,IAAI;AAC9E,EAAe,cAAc;AA6C7B,IAAaE,IAAeF,EAAM,cAAwC,IAAI;AAC9E,EAAa,cAAc;AAG3B,IAAaG,IAAwBH,EAAM,cAAc,EAAK;AAC9D,EAAsB,cAAc;AAEpC,IAAMI,UAA0B,CAAC,GAGpBC,IAAyC;CACpD,SAAS,KAAA;CACT,SAAS,KAAA;CACT,oBAAoBD;CACpB,eAAe;AACjB;AAOA,SAAgBE,EAAgB,GAA0C;CAIxE,OAHgBN,EAAM,WAAWE,CAC7B,MACJK,EAAqBC,GAAe,SAAS,GACtCH;AACT"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { ToastBody as e, ToastClose as t, ToastFooter as n, ToastTitle as r } from "./Toast.parts.mjs";
3
+ import { ToastRoot as i } from "./Toast.root.mjs";
4
+ import { Toaster as a, useToastController as o } from "./Toaster.mjs";
5
+ //#region src/components/feedback/Toast.tsx
6
+ var s = /* @__PURE__ */ Object.assign(i, {
7
+ Title: r,
8
+ Body: e,
9
+ Footer: n,
10
+ Close: t
11
+ });
12
+ //#endregion
13
+ export { s as Toast, e as ToastBody, t as ToastClose, n as ToastFooter, r as ToastTitle, a as Toaster, o as useToastController };
14
+
15
+ //# sourceMappingURL=Toast.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.mjs","names":["Toast","ToastRoot","ToastTitle","ToastBody","ToastFooter","ToastClose","Toaster","useToastController"],"sources":["../../../src/components/feedback/Toast.tsx"],"sourcesContent":["import { ToastBody, ToastClose, ToastFooter, ToastTitle } from './Toast.parts';\nimport { ToastRoot } from './Toast.root';\n\nexport type { ToastProps } from './Toast.root';\nexport type {\n ToastTitleProps,\n ToastBodyProps,\n ToastFooterProps,\n ToastCloseProps,\n ToastCloseRenderProps,\n} from './Toast.parts';\nexport { Toaster, useToastController } from './Toaster';\nexport type {\n ToasterProps,\n ToastOptions,\n ToastController,\n ToastPosition,\n ToastDispatchOptions,\n ToasterShortcuts,\n} from './Toaster';\n\n/**\n * A notification: status icon, visually hidden severity text, title, body, footer and a Dismiss\n * button. Its parts are direct children: `Toast.Title` (the title row, with an optional\n * `action`), `Toast.Body` (with an optional `subtitle`) and `Toast.Footer` (a row of actions); a\n * `Toast.Close` anywhere inside makes its child dismiss the toast. The `title` prop and plain\n * children are the 0.5 form and render as a Title and a Body.\n *\n * Dispatch it with `useToastController().dispatchToast(<Toast>…</Toast>)`, or render it yourself.\n *\n * - **In a Toaster**: not a live region itself; the Toaster announces it once per dispatch through\n * its permanent live regions (its severity text, then its title, body and the labels of its\n * actions, never the Dismiss button, or, after the severity text, the dispatch's\n * `announcement`), politely or, for `error`, assertively, and names its container by the\n * severity text and title. Every Toast there shows the Dismiss button.\n * - **On its own** (your own container, an inline notice): a live region, as in 0.4 —\n * `role=\"status\"` with `aria-live=\"polite\"`, or `role=\"alert\"` with `aria-live=\"assertive\"` for\n * `error` (override with `role`/`aria-live`). A live region that is added together with its\n * text is not announced by every screen reader, so render the Toast in advance and change its\n * content, or dispatch it through a Toaster.\n *\n * Sub-components are also exported under flat names (`ToastTitle`, `ToastBody`, `ToastFooter`,\n * `ToastClose`): React Server Components import those, because dotted access (`Toast.Title`)\n * needs a client file.\n */\nexport const Toast = /* @__PURE__ */ Object.assign(ToastRoot, {\n Title: ToastTitle,\n Body: ToastBody,\n Footer: ToastFooter,\n Close: ToastClose,\n});\n\nexport { ToastTitle, ToastBody, ToastFooter, ToastClose };\n"],"mappings":";;;;;AA6CA,IAAaA,IAAwB,uBAAO,OAAOC,GAAW;CAC5D,OAAOC;CACP,MAAMC;CACN,QAAQC;CACR,OAAOC;AACT,CAAC"}
@@ -0,0 +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("../../lib/classNames.cjs"),a=require("../../hooks/useId.cjs"),o=require("../../hooks/useMergedRefs.cjs"),s=require("../../lib/mergeProps.cjs"),c=require("../../hooks/useTriggerElement.cjs"),l=require("./Toast.context.cjs");let u=require("react");u=e.__toESM(u,1);let d=require("react/jsx-runtime");function f(e){let t=u.useContext(l.ToastUnscannedContext);u.useEffect(()=>{t&&n.warnOnce(`Toast.${e}:unscanned`,`Toast.${e} is not a direct child of Toast, so it renders inside the body that Toast makes for its children. Make it a direct child of Toast.`)},[t,e])}var p=({action:e,className:n,children:a,ref:s,...c})=>{let{titleId:p,registerPart:m}=l.useToastContext(`Toast.Title`);f(`Title`);let h=u.useRef(null),g=u.useRef(null),_=o.useMergedRefs(s,h);return u.useLayoutEffect(()=>{if(p!==void 0)return m({kind:`title`,id:p,getLabel:()=>g.current,getRow:()=>h.current})},[m,p]),(0,d.jsxs)(`div`,{ref:_,...c,className:t.cn(i.toastTitleClassNames.root,`flex items-start gap-2`,n),children:[(0,d.jsx)(`span`,{ref:g,id:p,className:t.cn(i.toastTitleClassNames.label,`min-w-0 flex-1 text-body-2 font-semibold text-foreground`),children:a}),r.slotRendersContent(e)?r.renderSlot(e,`span`,t.cn(i.toastTitleClassNames.action,`shrink-0`)):null]})};p.displayName=`ToastTitle`;var m=({subtitle:e,id:n,className:s,children:c,ref:p,...m})=>{let{registerPart:h}=l.useToastContext(`Toast.Body`);f(`Body`);let g=a.useId(`wave-toast-body`),_=n??g,v=u.useRef(null),y=o.useMergedRefs(p,v);return u.useLayoutEffect(()=>h({kind:`body`,id:_,getElement:()=>v.current}),[h,_]),(0,d.jsxs)(`div`,{ref:y,...m,id:_,className:t.cn(i.toastBodyClassNames.root,`mt-0.5 text-body-1 text-muted-foreground`,s),children:[c,r.slotRendersContent(e)?(0,d.jsx)(`div`,{className:t.cn(i.toastBodyClassNames.subtitle,`mt-1 text-caption-1 text-muted-foreground`),children:r.materialiseSlotContent(e)}):null]})};m.displayName=`ToastBody`;var h=({className:e,ref:n,...r})=>{let{registerPart:a}=l.useToastContext(`Toast.Footer`);f(`Footer`);let s=u.useRef(null),c=o.useMergedRefs(n,s);return u.useLayoutEffect(()=>a({kind:`footer`,getElement:()=>s.current}),[a]),(0,d.jsx)(`div`,{ref:c,...r,className:t.cn(i.toastFooterClassNames.root,`mt-2 flex flex-wrap gap-2`,e)})};h.displayName=`ToastFooter`;var g=({children:e,asChild:t,ref:r,...i})=>{let{dismiss:a}=l.useToastContext(`Toast.Close`),d=o.useMergedRefs(r),f=a!==void 0;u.useEffect(()=>{f||n.warnOnce(`Toast.Close:no-dismiss`,"Toast.Close has nothing to dismiss: render it in a toast dispatched to a Toaster, or in a Toast with `onDismiss`.")},[f]);let p=u.useCallback(()=>{a?.()},[a]),m=s.mergeProps({onClick:p,ref:d},i);return c.useTriggerElement(e,m,{componentName:`Toast.Close`,asChild:t})};g.displayName=`ToastClose`,exports.ToastBody=m,exports.ToastClose=g,exports.ToastFooter=h,exports.ToastTitle=p;
2
+ //# sourceMappingURL=Toast.parts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.parts.cjs","names":["React","ToastUnscannedContext","useToastContext","useMergedRefs","cn","toastTitleClassNames","slotRendersContent","renderSlot","useId","toastBodyClassNames","materialiseSlotContent","toastFooterClassNames","mergeProps","useTriggerElement","require_runtime","require_cn","require_dev","require_slot","require_classNames","require_useId","require_useMergedRefs","require_mergeProps","require_useTriggerElement","require_Toast_context","react","react_jsx_runtime","useUnscannedWarning","unscanned","part","ToastTitle","rest","rowRef","labelRef","mergedRef","ref","titleId","registerPart","className","action","ToastBody","idProp","generatedId","id","bodyRef","children","subtitle","ToastFooter","footerRef","ToastClose","hasDismiss","dismiss","close","closeProps"],"sources":["../../../src/components/feedback/Toast.parts.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n toastBodyClassNames,\n toastFooterClassNames,\n toastTitleClassNames,\n} from '../../lib/classNames';\nimport { warnOnce } from '../../lib/dev';\nimport { mergeProps } from '../../lib/mergeProps';\nimport { materialiseSlotContent, renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { useId } from '../../hooks/useId';\nimport { useMergedRefs } from '../../hooks/useMergedRefs';\nimport { useTriggerElement } from '../../hooks/useTriggerElement';\nimport { ToastUnscannedContext, useToastContext } from './Toast.context';\n\n/**\n * Development warning (once, from an effect) for a part that renders inside the body a Toast made\n * for children in which its scan found no part: the part sits inside the app's own component.\n */\nfunction useUnscannedWarning(part: 'Title' | 'Body' | 'Footer'): void {\n const unscanned = React.useContext(ToastUnscannedContext);\n React.useEffect(() => {\n if (!unscanned) return;\n warnOnce(\n `Toast.${part}:unscanned`,\n `Toast.${part} is not a direct child of Toast, so it renders inside the body that Toast makes for its children. Make it a direct child of Toast.`,\n );\n }, [unscanned, part]);\n}\n\n/** Properties for the ToastTitle sub-component. */\nexport interface ToastTitleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content at the end of the title row, such as a link or a button (often in `Toast.Close`). */\n action?: Slot<'span'>;\n /** Ref to the title row. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * The title row: the title text (which names the toast) and an optional `action` at its end. A\n * direct child of Toast, or dispatched content of a Toaster.\n *\n * Also exported as `ToastTitle` (import the flat name from React Server Components).\n */\nexport const ToastTitle = ({ action, className, children, ref, ...rest }: ToastTitleProps) => {\n const { titleId, registerPart } = useToastContext('Toast.Title');\n useUnscannedWarning('Title');\n const rowRef = React.useRef<HTMLDivElement>(null);\n const labelRef = React.useRef<HTMLSpanElement>(null);\n const mergedRef = useMergedRefs(ref, rowRef);\n React.useLayoutEffect(() => {\n if (titleId === undefined) return undefined;\n return registerPart({\n kind: 'title',\n id: titleId,\n getLabel: () => labelRef.current,\n getRow: () => rowRef.current,\n });\n }, [registerPart, titleId]);\n return (\n <div\n ref={mergedRef}\n {...rest}\n className={cn(toastTitleClassNames.root, 'flex items-start gap-2', className)}\n >\n <span\n ref={labelRef}\n id={titleId}\n className={cn(\n toastTitleClassNames.label,\n 'min-w-0 flex-1 text-body-2 font-semibold text-foreground',\n )}\n >\n {children}\n </span>\n {slotRendersContent(action)\n ? renderSlot(action, 'span', cn(toastTitleClassNames.action, 'shrink-0'))\n : null}\n </div>\n );\n};\nToastTitle.displayName = 'ToastTitle';\n\n/** Properties for the ToastBody sub-component. */\nexport interface ToastBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** A secondary line under the body text. */\n subtitle?: React.ReactNode;\n /** Ref to the body element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * The body text and an optional `subtitle`, which describe the toast. Your `id` is the id the\n * toast's description points at (a generated one otherwise).\n *\n * Also exported as `ToastBody` (import the flat name from React Server Components).\n */\nexport const ToastBody = ({\n subtitle,\n id: idProp,\n className,\n children,\n ref,\n ...rest\n}: ToastBodyProps) => {\n const { registerPart } = useToastContext('Toast.Body');\n useUnscannedWarning('Body');\n const generatedId = useId('wave-toast-body');\n const id = idProp ?? generatedId;\n const bodyRef = React.useRef<HTMLDivElement>(null);\n const mergedRef = useMergedRefs(ref, bodyRef);\n React.useLayoutEffect(\n () => registerPart({ kind: 'body', id, getElement: () => bodyRef.current }),\n [registerPart, id],\n );\n return (\n <div\n ref={mergedRef}\n {...rest}\n id={id}\n className={cn(\n toastBodyClassNames.root,\n 'mt-0.5 text-body-1 text-muted-foreground',\n className,\n )}\n >\n {children}\n {slotRendersContent(subtitle) ? (\n <div\n className={cn(toastBodyClassNames.subtitle, 'mt-1 text-caption-1 text-muted-foreground')}\n >\n {materialiseSlotContent(subtitle)}\n </div>\n ) : null}\n </div>\n );\n};\nToastBody.displayName = 'ToastBody';\n\n/** Properties for the ToastFooter sub-component. */\nexport interface ToastFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the footer element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * A row of actions under the body.\n *\n * Also exported as `ToastFooter` (import the flat name from React Server Components).\n */\nexport const ToastFooter = ({ className, ref, ...rest }: ToastFooterProps) => {\n const { registerPart } = useToastContext('Toast.Footer');\n useUnscannedWarning('Footer');\n const footerRef = React.useRef<HTMLDivElement>(null);\n const mergedRef = useMergedRefs(ref, footerRef);\n React.useLayoutEffect(\n () => registerPart({ kind: 'footer', getElement: () => footerRef.current }),\n [registerPart],\n );\n return (\n <div\n ref={mergedRef}\n {...rest}\n className={cn(toastFooterClassNames.root, 'mt-2 flex flex-wrap gap-2', className)}\n />\n );\n};\nToastFooter.displayName = 'ToastFooter';\n\n/** Props a `Toast.Close` puts on its element (and passes to a render-prop child), as `DialogCloseRenderProps`. */\nexport interface ToastCloseRenderProps extends React.HTMLAttributes<HTMLElement> {\n onClick: React.MouseEventHandler<HTMLElement>;\n /** A callback ref, so the props spread onto any element type. */\n ref: React.RefCallback<HTMLElement>;\n}\n\n/** Properties for the ToastClose sub-component (as `DialogCloseProps`). */\nexport interface ToastCloseProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n /** The element that dismisses the toast; a single element gets a composed `onClick`, a function the props. */\n children: React.ReactNode | ((props: ToastCloseRenderProps) => React.ReactNode);\n /** `false` renders a wrapper `<span>` that dismisses on click. @default true */\n asChild?: boolean;\n /** Ref to the close element (the child, or the wrapper span). */\n ref?: React.Ref<HTMLElement>;\n}\n\n/**\n * Makes its single child dismiss the toast: it calls the Toast's `onDismiss` (when there is one),\n * then, inside the Toaster, dismisses the toast. Your `onClick` runs first; `preventDefault()`\n * keeps the toast. Works in dispatched content with or without a `Toast`. Fluent's `ToastTrigger`.\n *\n * Also exported as `ToastClose` (import the flat name from React Server Components).\n */\nexport const ToastClose = ({ children, asChild, ref, ...rest }: ToastCloseProps) => {\n const { dismiss } = useToastContext('Toast.Close');\n const mergedRef = useMergedRefs<HTMLElement>(ref);\n const hasDismiss = dismiss !== undefined;\n React.useEffect(() => {\n if (hasDismiss) return;\n warnOnce(\n 'Toast.Close:no-dismiss',\n 'Toast.Close has nothing to dismiss: render it in a toast dispatched to a Toaster, or in a Toast with `onDismiss`.',\n );\n }, [hasDismiss]);\n const close = React.useCallback(() => {\n dismiss?.();\n }, [dismiss]);\n const closeProps = mergeProps({ onClick: close, ref: mergedRef }, rest);\n return useTriggerElement(children, closeProps as ToastCloseRenderProps, {\n componentName: 'Toast.Close',\n asChild,\n });\n};\nToastClose.displayName = 'ToastClose';\n"],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ "use client";
2
+ import { cn as e } from "../../lib/cn.mjs";
3
+ import { warnOnce as t } from "../../lib/dev.mjs";
4
+ import { materialiseSlotContent as n, renderSlot as r, slotRendersContent as i } from "../../lib/slot.mjs";
5
+ import { toastBodyClassNames as a, toastFooterClassNames as o, toastTitleClassNames as s } from "../../lib/classNames.mjs";
6
+ import { useId as c } from "../../hooks/useId.mjs";
7
+ import { useMergedRefs as l } from "../../hooks/useMergedRefs.mjs";
8
+ import { mergeProps as u } from "../../lib/mergeProps.mjs";
9
+ import { useTriggerElement as d } from "../../hooks/useTriggerElement.mjs";
10
+ import { ToastUnscannedContext as f, useToastContext as p } from "./Toast.context.mjs";
11
+ import * as m from "react";
12
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
13
+ //#region src/components/feedback/Toast.parts.tsx
14
+ function _(e) {
15
+ let n = m.useContext(f);
16
+ m.useEffect(() => {
17
+ n && t(`Toast.${e}:unscanned`, `Toast.${e} is not a direct child of Toast, so it renders inside the body that Toast makes for its children. Make it a direct child of Toast.`);
18
+ }, [n, e]);
19
+ }
20
+ var v = ({ action: t, className: n, children: a, ref: o, ...c }) => {
21
+ let { titleId: u, registerPart: d } = p("Toast.Title");
22
+ _("Title");
23
+ let f = m.useRef(null), v = m.useRef(null), y = l(o, f);
24
+ return m.useLayoutEffect(() => {
25
+ if (u !== void 0) return d({
26
+ kind: "title",
27
+ id: u,
28
+ getLabel: () => v.current,
29
+ getRow: () => f.current
30
+ });
31
+ }, [d, u]), /* @__PURE__ */ g("div", {
32
+ ref: y,
33
+ ...c,
34
+ className: e(s.root, "flex items-start gap-2", n),
35
+ children: [/* @__PURE__ */ h("span", {
36
+ ref: v,
37
+ id: u,
38
+ className: e(s.label, "min-w-0 flex-1 text-body-2 font-semibold text-foreground"),
39
+ children: a
40
+ }), i(t) ? r(t, "span", e(s.action, "shrink-0")) : null]
41
+ });
42
+ };
43
+ v.displayName = "ToastTitle";
44
+ var y = ({ subtitle: t, id: r, className: o, children: s, ref: u, ...d }) => {
45
+ let { registerPart: f } = p("Toast.Body");
46
+ _("Body");
47
+ let v = c("wave-toast-body"), y = r ?? v, b = m.useRef(null), x = l(u, b);
48
+ return m.useLayoutEffect(() => f({
49
+ kind: "body",
50
+ id: y,
51
+ getElement: () => b.current
52
+ }), [f, y]), /* @__PURE__ */ g("div", {
53
+ ref: x,
54
+ ...d,
55
+ id: y,
56
+ className: e(a.root, "mt-0.5 text-body-1 text-muted-foreground", o),
57
+ children: [s, i(t) ? /* @__PURE__ */ h("div", {
58
+ className: e(a.subtitle, "mt-1 text-caption-1 text-muted-foreground"),
59
+ children: n(t)
60
+ }) : null]
61
+ });
62
+ };
63
+ y.displayName = "ToastBody";
64
+ var b = ({ className: t, ref: n, ...r }) => {
65
+ let { registerPart: i } = p("Toast.Footer");
66
+ _("Footer");
67
+ let a = m.useRef(null), s = l(n, a);
68
+ return m.useLayoutEffect(() => i({
69
+ kind: "footer",
70
+ getElement: () => a.current
71
+ }), [i]), /* @__PURE__ */ h("div", {
72
+ ref: s,
73
+ ...r,
74
+ className: e(o.root, "mt-2 flex flex-wrap gap-2", t)
75
+ });
76
+ };
77
+ b.displayName = "ToastFooter";
78
+ var x = ({ children: e, asChild: n, ref: r, ...i }) => {
79
+ let { dismiss: a } = p("Toast.Close"), o = l(r), s = a !== void 0;
80
+ m.useEffect(() => {
81
+ s || t("Toast.Close:no-dismiss", "Toast.Close has nothing to dismiss: render it in a toast dispatched to a Toaster, or in a Toast with `onDismiss`.");
82
+ }, [s]);
83
+ let c = m.useCallback(() => {
84
+ a?.();
85
+ }, [a]), f = u({
86
+ onClick: c,
87
+ ref: o
88
+ }, i);
89
+ return d(e, f, {
90
+ componentName: "Toast.Close",
91
+ asChild: n
92
+ });
93
+ };
94
+ x.displayName = "ToastClose";
95
+ //#endregion
96
+ export { y as ToastBody, x as ToastClose, b as ToastFooter, v as ToastTitle };
97
+
98
+ //# sourceMappingURL=Toast.parts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.parts.mjs","names":["useId","useId$1","React","useUnscannedWarning","unscanned","ToastUnscannedContext","warnOnce","part","ToastTitle","rest","useToastContext","rowRef","labelRef","mergedRef","useMergedRefs","ref","titleId","registerPart","cn","toastTitleClassNames","className","slotRendersContent","action","renderSlot","ToastBody","idProp","generatedId","id","bodyRef","toastBodyClassNames","children","subtitle","materialiseSlotContent","ToastFooter","footerRef","toastFooterClassNames","ToastClose","hasDismiss","dismiss","close","closeProps","mergeProps","useTriggerElement"],"sources":["../../../src/components/feedback/Toast.parts.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '../../lib/cn';\nimport {\n toastBodyClassNames,\n toastFooterClassNames,\n toastTitleClassNames,\n} from '../../lib/classNames';\nimport { warnOnce } from '../../lib/dev';\nimport { mergeProps } from '../../lib/mergeProps';\nimport { materialiseSlotContent, renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { useId } from '../../hooks/useId';\nimport { useMergedRefs } from '../../hooks/useMergedRefs';\nimport { useTriggerElement } from '../../hooks/useTriggerElement';\nimport { ToastUnscannedContext, useToastContext } from './Toast.context';\n\n/**\n * Development warning (once, from an effect) for a part that renders inside the body a Toast made\n * for children in which its scan found no part: the part sits inside the app's own component.\n */\nfunction useUnscannedWarning(part: 'Title' | 'Body' | 'Footer'): void {\n const unscanned = React.useContext(ToastUnscannedContext);\n React.useEffect(() => {\n if (!unscanned) return;\n warnOnce(\n `Toast.${part}:unscanned`,\n `Toast.${part} is not a direct child of Toast, so it renders inside the body that Toast makes for its children. Make it a direct child of Toast.`,\n );\n }, [unscanned, part]);\n}\n\n/** Properties for the ToastTitle sub-component. */\nexport interface ToastTitleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content at the end of the title row, such as a link or a button (often in `Toast.Close`). */\n action?: Slot<'span'>;\n /** Ref to the title row. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * The title row: the title text (which names the toast) and an optional `action` at its end. A\n * direct child of Toast, or dispatched content of a Toaster.\n *\n * Also exported as `ToastTitle` (import the flat name from React Server Components).\n */\nexport const ToastTitle = ({ action, className, children, ref, ...rest }: ToastTitleProps) => {\n const { titleId, registerPart } = useToastContext('Toast.Title');\n useUnscannedWarning('Title');\n const rowRef = React.useRef<HTMLDivElement>(null);\n const labelRef = React.useRef<HTMLSpanElement>(null);\n const mergedRef = useMergedRefs(ref, rowRef);\n React.useLayoutEffect(() => {\n if (titleId === undefined) return undefined;\n return registerPart({\n kind: 'title',\n id: titleId,\n getLabel: () => labelRef.current,\n getRow: () => rowRef.current,\n });\n }, [registerPart, titleId]);\n return (\n <div\n ref={mergedRef}\n {...rest}\n className={cn(toastTitleClassNames.root, 'flex items-start gap-2', className)}\n >\n <span\n ref={labelRef}\n id={titleId}\n className={cn(\n toastTitleClassNames.label,\n 'min-w-0 flex-1 text-body-2 font-semibold text-foreground',\n )}\n >\n {children}\n </span>\n {slotRendersContent(action)\n ? renderSlot(action, 'span', cn(toastTitleClassNames.action, 'shrink-0'))\n : null}\n </div>\n );\n};\nToastTitle.displayName = 'ToastTitle';\n\n/** Properties for the ToastBody sub-component. */\nexport interface ToastBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** A secondary line under the body text. */\n subtitle?: React.ReactNode;\n /** Ref to the body element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * The body text and an optional `subtitle`, which describe the toast. Your `id` is the id the\n * toast's description points at (a generated one otherwise).\n *\n * Also exported as `ToastBody` (import the flat name from React Server Components).\n */\nexport const ToastBody = ({\n subtitle,\n id: idProp,\n className,\n children,\n ref,\n ...rest\n}: ToastBodyProps) => {\n const { registerPart } = useToastContext('Toast.Body');\n useUnscannedWarning('Body');\n const generatedId = useId('wave-toast-body');\n const id = idProp ?? generatedId;\n const bodyRef = React.useRef<HTMLDivElement>(null);\n const mergedRef = useMergedRefs(ref, bodyRef);\n React.useLayoutEffect(\n () => registerPart({ kind: 'body', id, getElement: () => bodyRef.current }),\n [registerPart, id],\n );\n return (\n <div\n ref={mergedRef}\n {...rest}\n id={id}\n className={cn(\n toastBodyClassNames.root,\n 'mt-0.5 text-body-1 text-muted-foreground',\n className,\n )}\n >\n {children}\n {slotRendersContent(subtitle) ? (\n <div\n className={cn(toastBodyClassNames.subtitle, 'mt-1 text-caption-1 text-muted-foreground')}\n >\n {materialiseSlotContent(subtitle)}\n </div>\n ) : null}\n </div>\n );\n};\nToastBody.displayName = 'ToastBody';\n\n/** Properties for the ToastFooter sub-component. */\nexport interface ToastFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the footer element. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * A row of actions under the body.\n *\n * Also exported as `ToastFooter` (import the flat name from React Server Components).\n */\nexport const ToastFooter = ({ className, ref, ...rest }: ToastFooterProps) => {\n const { registerPart } = useToastContext('Toast.Footer');\n useUnscannedWarning('Footer');\n const footerRef = React.useRef<HTMLDivElement>(null);\n const mergedRef = useMergedRefs(ref, footerRef);\n React.useLayoutEffect(\n () => registerPart({ kind: 'footer', getElement: () => footerRef.current }),\n [registerPart],\n );\n return (\n <div\n ref={mergedRef}\n {...rest}\n className={cn(toastFooterClassNames.root, 'mt-2 flex flex-wrap gap-2', className)}\n />\n );\n};\nToastFooter.displayName = 'ToastFooter';\n\n/** Props a `Toast.Close` puts on its element (and passes to a render-prop child), as `DialogCloseRenderProps`. */\nexport interface ToastCloseRenderProps extends React.HTMLAttributes<HTMLElement> {\n onClick: React.MouseEventHandler<HTMLElement>;\n /** A callback ref, so the props spread onto any element type. */\n ref: React.RefCallback<HTMLElement>;\n}\n\n/** Properties for the ToastClose sub-component (as `DialogCloseProps`). */\nexport interface ToastCloseProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n /** The element that dismisses the toast; a single element gets a composed `onClick`, a function the props. */\n children: React.ReactNode | ((props: ToastCloseRenderProps) => React.ReactNode);\n /** `false` renders a wrapper `<span>` that dismisses on click. @default true */\n asChild?: boolean;\n /** Ref to the close element (the child, or the wrapper span). */\n ref?: React.Ref<HTMLElement>;\n}\n\n/**\n * Makes its single child dismiss the toast: it calls the Toast's `onDismiss` (when there is one),\n * then, inside the Toaster, dismisses the toast. Your `onClick` runs first; `preventDefault()`\n * keeps the toast. Works in dispatched content with or without a `Toast`. Fluent's `ToastTrigger`.\n *\n * Also exported as `ToastClose` (import the flat name from React Server Components).\n */\nexport const ToastClose = ({ children, asChild, ref, ...rest }: ToastCloseProps) => {\n const { dismiss } = useToastContext('Toast.Close');\n const mergedRef = useMergedRefs<HTMLElement>(ref);\n const hasDismiss = dismiss !== undefined;\n React.useEffect(() => {\n if (hasDismiss) return;\n warnOnce(\n 'Toast.Close:no-dismiss',\n 'Toast.Close has nothing to dismiss: render it in a toast dispatched to a Toaster, or in a Toast with `onDismiss`.',\n );\n }, [hasDismiss]);\n const close = React.useCallback(() => {\n dismiss?.();\n }, [dismiss]);\n const closeProps = mergeProps({ onClick: close, ref: mergedRef }, rest);\n return useTriggerElement(children, closeProps as ToastCloseRenderProps, {\n componentName: 'Toast.Close',\n asChild,\n });\n};\nToastClose.displayName = 'ToastClose';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use client";const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/cn.cjs"),n=require("../../lib/children.cjs"),r=require("../../lib/dev.cjs"),i=require("../../lib/slot.cjs"),a=require("../../lib/classNames.cjs"),o=require("../../hooks/useEventCallback.cjs"),s=require("../../hooks/useId.cjs"),c=require("../../lib/styles.cjs"),l=require("../../lib/icons.cjs"),u=require("./MessageBar.status.cjs"),d=require("./Toast.context.cjs"),f=require("./Toast.parts.cjs");let p=require("react");p=e.__toESM(p,1);let m=require("react/jsx-runtime");var h=()=>()=>{};function g(e,t){let r=i.materialiseSlotContent(t),a=n.flattenChildren(r);if(a.some(({node:e})=>n.isElementOfType(e,f.ToastTitle,f.ToastBody,f.ToastFooter))){let t=a.some(({node:e})=>n.isElementOfType(e,f.ToastTitle));return{content:(0,m.jsxs)(m.Fragment,{children:[e&&!t?(0,m.jsx)(f.ToastTitle,{children:e}):null,r]}),titleTwice:!!e&&t}}return{content:(0,m.jsxs)(m.Fragment,{children:[e?(0,m.jsx)(f.ToastTitle,{children:e}):null,i.slotRendersContent(r)?(0,m.jsx)(f.ToastBody,{children:(0,m.jsx)(d.ToastUnscannedContext.Provider,{value:!0,children:r})}):null]}),titleTwice:!1}}var _=({status:e=`info`,title:n,statusLabel:f,icon:_,onDismiss:v,dismissLabel:y=`Dismiss`,className:b,children:x,ref:S,...C})=>{let w=p.useContext(d.ToastContext),T=w?.registerToast??null,E=T!==null,D=u.getStatusLabel(e,f),O=s.useId(`wave-toast-status`),k=s.useId(`wave-toast-title`),A=o.useEventCallback(v),j=v!==void 0,M=p.useRef(null);p.useLayoutEffect(()=>{if(T)return T({status:e,statusLabel:D,statusTextId:D?O:void 0,onDismiss:j?A:void 0,getDismissButton:()=>M.current})},[T,e,D,O,j,A]);let N=p.useMemo(()=>({titleId:k,dismiss:j?A:void 0,registerPart:h,registerToast:null}),[k,j,A]),P=E?w?.dismiss:N.dismiss,{content:F,titleTwice:I}=g(n,x);p.useEffect(()=>{I&&r.warnOnce(`Toast:title-twice`,"Toast: `title` is ignored because a Toast.Title is among the children. Remove one of them.")},[I]);let L=t.cn(a.toastClassNames.icon,`mt-0.5 inline-flex shrink-0`,u.STATUS_ICON_COLOR[e]),R=_===void 0?(0,m.jsx)(`span`,{"aria-hidden":`true`,className:L,children:(0,m.jsx)(u.StatusIcon,{status:e})}):i.slotRendersContent(_)?i.renderSlot(_,`span`,L,{"aria-hidden":!0}):null,z=(0,m.jsxs)(`div`,{ref:S,...E?{}:e===`error`?{role:`alert`,"aria-live":`assertive`}:{role:`status`,"aria-live":`polite`},...C,className:t.cn(a.toastClassNames.root,`flex items-start gap-3 rounded border border-s-4 border-border bg-background p-3 text-foreground shadow-4`,u.STATUS_BORDER[e],b),children:[R,(0,m.jsxs)(`div`,{className:t.cn(a.toastClassNames.content,`min-w-0 flex-1`),children:[(0,m.jsx)(u.StatusText,{label:D,id:O}),F]}),P?(0,m.jsx)(`button`,{ref:M,type:`button`,onClick:()=>P(),className:t.cn(a.toastClassNames.dismissButton,`inline-flex shrink-0 cursor-pointer items-center justify-center rounded border-none bg-transparent p-1 text-muted-foreground`,`not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground`,`not-disabled:not-aria-disabled:active:bg-subtle-pressed`,c.focusRing),"aria-label":y,children:(0,m.jsx)(l.DismissIcon,{})}):null]});return E?z:(0,m.jsx)(d.ToastContext.Provider,{value:N,children:z})};_.displayName=`Toast`,exports.ToastRoot=_;
2
+ //# sourceMappingURL=Toast.root.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.root.cjs","names":["materialiseSlotContent","flattenChildren","isElementOfType","ToastTitle","ToastBody","ToastFooter","_Fragment","slotRendersContent","ToastUnscannedContext","React","ToastContext","getStatusLabel","useId","useEventCallback","cn","toastClassNames","STATUS_ICON_COLOR","StatusIcon","renderSlot","STATUS_BORDER","StatusText","focusRing","DismissIcon","require_runtime","require_cn","require_children","require_dev","require_slot","require_classNames","require_useEventCallback","require_useId","require_styles","require_icons","require_MessageBar_status","require_Toast_context","require_Toast_parts","react","react_jsx_runtime","registerNothing","renderParts","items","children","flat","node","hasTitlePart","title","ToastRoot","rest","host","registerToast","inToaster","label","status","statusLabel","statusTextId","titleId","handleDismiss","onDismiss","hasOnDismiss","dismissButtonRef","ownContext","dismiss","titleTwice","iconClassName","renderedIcon","icon","root","className","content","dismissLabel"],"sources":["../../../src/components/feedback/Toast.root.tsx"],"sourcesContent":["import * as React from 'react';\nimport { flattenChildren, isElementOfType } from '../../lib/children';\nimport { cn } from '../../lib/cn';\nimport { toastClassNames } from '../../lib/classNames';\nimport { warnOnce } from '../../lib/dev';\nimport { DismissIcon } from '../../lib/icons';\nimport { materialiseSlotContent, renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { focusRing } from '../../lib/styles';\nimport type { Status } from '../../lib/types';\nimport { useEventCallback } from '../../hooks/useEventCallback';\nimport { useId } from '../../hooks/useId';\nimport {\n STATUS_BORDER,\n STATUS_ICON_COLOR,\n StatusIcon,\n StatusText,\n getStatusLabel,\n} from './MessageBar.status';\nimport { ToastContext, ToastUnscannedContext } from './Toast.context';\nimport type { ToastContextValue } from './Toast.context';\nimport { ToastBody, ToastFooter, ToastTitle } from './Toast.parts';\n\n/** Properties for the Toast component. */\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Status level controlling the toast color, icon and status text.\n * @default 'info'\n */\n status?: Status;\n /**\n * Title text (the 0.5 form; renders as a `Toast.Title`). A `Toast.Title` among the children wins\n * over it (development warning).\n */\n title?: string;\n /**\n * Visually hidden status text read before the toast (`'Info:'`, `'Success:'`, `'Warning:'`,\n * `'Error:'` by default). Pass a translation for other languages, or `''` to omit it.\n */\n statusLabel?: string;\n /**\n * Replaces the status icon (decorative, `aria-hidden`). Only `undefined` keeps the default;\n * `null`, or anything that renders nothing, shows no icon (the status-icon slot rule, as\n * `MessageBar.icon`). Fluent's `ToastTitle` `media`.\n */\n icon?: Slot<'span'>;\n /**\n * Called when the Dismiss button or a `Toast.Close` is activated; passing it renders the button.\n * Inside the Toaster every Toast shows the button and it dismisses the toast (your `onDismiss`\n * runs first). A timeout, Escape, Delete and `dismissToast` do not call it.\n */\n onDismiss?: () => void;\n /**\n * Accessible name of the dismiss button. Pass a translation for other languages.\n * @default 'Dismiss'\n */\n dismissLabel?: string;\n /** Ref to the root `<div>`. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nconst registerNothing: ToastContextValue['registerPart'] = () => () => {};\n\n/**\n * The content column's parts. With a `Toast.Title`, `Toast.Body` or `Toast.Footer` among the\n * direct children (Fragments and Server Component references included), the children render as\n * given, after a Title made from the `title` prop when there is no Title part. Otherwise the 0.5\n * form: the `title` prop as a Title and the children as a Body (none for content that renders\n * nothing).\n */\nfunction renderParts(\n title: string | undefined,\n children: React.ReactNode,\n): { content: React.ReactNode; titleTwice: boolean } {\n // A generator is read once here (and cached), so the scan and the render see the same items.\n const items = materialiseSlotContent(children);\n const flat = flattenChildren(items);\n if (flat.some(({ node }) => isElementOfType(node, ToastTitle, ToastBody, ToastFooter))) {\n const hasTitlePart = flat.some(({ node }) => isElementOfType(node, ToastTitle));\n return {\n content: (\n <>\n {title && !hasTitlePart ? <ToastTitle>{title}</ToastTitle> : null}\n {items}\n </>\n ),\n titleTwice: Boolean(title) && hasTitlePart,\n };\n }\n return {\n content: (\n <>\n {title ? <ToastTitle>{title}</ToastTitle> : null}\n {slotRendersContent(items) ? (\n <ToastBody>\n <ToastUnscannedContext.Provider value={true}>{items}</ToastUnscannedContext.Provider>\n </ToastBody>\n ) : null}\n </>\n ),\n titleTwice: false,\n };\n}\n\nexport const ToastRoot = ({\n status = 'info',\n title,\n statusLabel,\n icon,\n onDismiss,\n dismissLabel = 'Dismiss',\n className,\n children,\n ref,\n ...rest\n}: ToastProps) => {\n // Inside the Toaster's container, whose context has `registerToast`, the Toast registers its\n // severity, `onDismiss` and Dismiss button there and its parts use that context (the container's\n // ids); everywhere else it provides its own context and is a live region (D9, D10).\n const host = React.useContext(ToastContext);\n const registerToast = host?.registerToast ?? null;\n const inToaster = registerToast !== null;\n const label = getStatusLabel(status, statusLabel);\n const statusTextId = useId('wave-toast-status');\n const titleId = useId('wave-toast-title');\n const handleDismiss = useEventCallback(onDismiss);\n const hasOnDismiss = onDismiss !== undefined;\n const dismissButtonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useLayoutEffect(() => {\n if (!registerToast) return undefined;\n return registerToast({\n status,\n statusLabel: label,\n statusTextId: label ? statusTextId : undefined,\n onDismiss: hasOnDismiss ? handleDismiss : undefined,\n getDismissButton: () => dismissButtonRef.current,\n });\n }, [registerToast, status, label, statusTextId, hasOnDismiss, handleDismiss]);\n\n const ownContext = React.useMemo<ToastContextValue>(\n () => ({\n titleId,\n dismiss: hasOnDismiss ? handleDismiss : undefined,\n registerPart: registerNothing,\n registerToast: null,\n }),\n [titleId, hasOnDismiss, handleDismiss],\n );\n // Inside the Toaster every Toast shows the Dismiss button (D11); elsewhere `onDismiss` does.\n const dismiss = inToaster ? host?.dismiss : ownContext.dismiss;\n\n const { content, titleTwice } = renderParts(title, children);\n React.useEffect(() => {\n if (!titleTwice) return;\n warnOnce(\n 'Toast:title-twice',\n 'Toast: `title` is ignored because a Toast.Title is among the children. Remove one of them.',\n );\n }, [titleTwice]);\n\n // The status icon: only `undefined` keeps the default; `null`, or anything that renders\n // nothing, shows none (C-SLOTS status-icon rule). The class rides in the slot's base classes,\n // so a slot object that swaps the element keeps it.\n const iconClassName = cn(\n toastClassNames.icon,\n 'mt-0.5 inline-flex shrink-0',\n STATUS_ICON_COLOR[status],\n );\n const renderedIcon =\n icon === undefined ? (\n <span aria-hidden=\"true\" className={iconClassName}>\n <StatusIcon status={status} />\n </span>\n ) : slotRendersContent(icon) ? (\n renderSlot(icon, 'span', iconClassName, { 'aria-hidden': true })\n ) : null;\n\n const liveRegion: React.HTMLAttributes<HTMLDivElement> = inToaster\n ? {}\n : status === 'error'\n ? { role: 'alert', 'aria-live': 'assertive' }\n : { role: 'status', 'aria-live': 'polite' };\n const root = (\n <div\n ref={ref}\n {...liveRegion}\n {...rest}\n className={cn(\n toastClassNames.root,\n 'flex items-start gap-3 rounded border border-s-4 border-border bg-background p-3 text-foreground shadow-4',\n STATUS_BORDER[status],\n className,\n )}\n >\n {renderedIcon}\n <div className={cn(toastClassNames.content, 'min-w-0 flex-1')}>\n <StatusText label={label} id={statusTextId} />\n {content}\n </div>\n {dismiss ? (\n <button\n ref={dismissButtonRef}\n type=\"button\"\n onClick={() => dismiss()}\n className={cn(\n toastClassNames.dismissButton,\n 'inline-flex shrink-0 cursor-pointer items-center justify-center rounded border-none bg-transparent p-1 text-muted-foreground',\n 'not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground',\n 'not-disabled:not-aria-disabled:active:bg-subtle-pressed',\n focusRing,\n )}\n aria-label={dismissLabel}\n >\n <DismissIcon />\n </button>\n ) : null}\n </div>\n );\n return inToaster ? (\n root\n ) : (\n <ToastContext.Provider value={ownContext}>{root}</ToastContext.Provider>\n );\n};\nToastRoot.displayName = 'Toast';\n"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ "use client";
2
+ import { cn as e } from "../../lib/cn.mjs";
3
+ import { flattenChildren as t, isElementOfType as n } from "../../lib/children.mjs";
4
+ import { warnOnce as r } from "../../lib/dev.mjs";
5
+ import { materialiseSlotContent as i, renderSlot as a, slotRendersContent as o } from "../../lib/slot.mjs";
6
+ import { toastClassNames as s } from "../../lib/classNames.mjs";
7
+ import { useEventCallback as c } from "../../hooks/useEventCallback.mjs";
8
+ import { useId as l } from "../../hooks/useId.mjs";
9
+ import { focusRing as u } from "../../lib/styles.mjs";
10
+ import { DismissIcon as d } from "../../lib/icons.mjs";
11
+ import { STATUS_BORDER as f, STATUS_ICON_COLOR as p, StatusIcon as m, StatusText as h, getStatusLabel as g } from "./MessageBar.status.mjs";
12
+ import { ToastContext as _, ToastUnscannedContext as v } from "./Toast.context.mjs";
13
+ import { ToastBody as y, ToastFooter as b, ToastTitle as x } from "./Toast.parts.mjs";
14
+ import * as S from "react";
15
+ import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
16
+ //#region src/components/feedback/Toast.root.tsx
17
+ var E = () => () => {};
18
+ function D(e, r) {
19
+ let a = i(r), s = t(a);
20
+ if (s.some(({ node: e }) => n(e, x, y, b))) {
21
+ let t = s.some(({ node: e }) => n(e, x));
22
+ return {
23
+ content: /* @__PURE__ */ T(C, { children: [e && !t ? /* @__PURE__ */ w(x, { children: e }) : null, a] }),
24
+ titleTwice: !!e && t
25
+ };
26
+ }
27
+ return {
28
+ content: /* @__PURE__ */ T(C, { children: [e ? /* @__PURE__ */ w(x, { children: e }) : null, o(a) ? /* @__PURE__ */ w(y, { children: /* @__PURE__ */ w(v.Provider, {
29
+ value: !0,
30
+ children: a
31
+ }) }) : null] }),
32
+ titleTwice: !1
33
+ };
34
+ }
35
+ var O = ({ status: t = "info", title: n, statusLabel: i, icon: v, onDismiss: y, dismissLabel: b = "Dismiss", className: x, children: C, ref: O, ...k }) => {
36
+ let A = S.useContext(_), j = A?.registerToast ?? null, M = j !== null, N = g(t, i), P = l("wave-toast-status"), F = l("wave-toast-title"), I = c(y), L = y !== void 0, R = S.useRef(null);
37
+ S.useLayoutEffect(() => {
38
+ if (j) return j({
39
+ status: t,
40
+ statusLabel: N,
41
+ statusTextId: N ? P : void 0,
42
+ onDismiss: L ? I : void 0,
43
+ getDismissButton: () => R.current
44
+ });
45
+ }, [
46
+ j,
47
+ t,
48
+ N,
49
+ P,
50
+ L,
51
+ I
52
+ ]);
53
+ let z = S.useMemo(() => ({
54
+ titleId: F,
55
+ dismiss: L ? I : void 0,
56
+ registerPart: E,
57
+ registerToast: null
58
+ }), [
59
+ F,
60
+ L,
61
+ I
62
+ ]), B = M ? A?.dismiss : z.dismiss, { content: V, titleTwice: H } = D(n, C);
63
+ S.useEffect(() => {
64
+ H && r("Toast:title-twice", "Toast: `title` is ignored because a Toast.Title is among the children. Remove one of them.");
65
+ }, [H]);
66
+ let U = e(s.icon, "mt-0.5 inline-flex shrink-0", p[t]), W = v === void 0 ? /* @__PURE__ */ w("span", {
67
+ "aria-hidden": "true",
68
+ className: U,
69
+ children: /* @__PURE__ */ w(m, { status: t })
70
+ }) : o(v) ? a(v, "span", U, { "aria-hidden": !0 }) : null, G = /* @__PURE__ */ T("div", {
71
+ ref: O,
72
+ ...M ? {} : t === "error" ? {
73
+ role: "alert",
74
+ "aria-live": "assertive"
75
+ } : {
76
+ role: "status",
77
+ "aria-live": "polite"
78
+ },
79
+ ...k,
80
+ className: e(s.root, "flex items-start gap-3 rounded border border-s-4 border-border bg-background p-3 text-foreground shadow-4", f[t], x),
81
+ children: [
82
+ W,
83
+ /* @__PURE__ */ T("div", {
84
+ className: e(s.content, "min-w-0 flex-1"),
85
+ children: [/* @__PURE__ */ w(h, {
86
+ label: N,
87
+ id: P
88
+ }), V]
89
+ }),
90
+ B ? /* @__PURE__ */ w("button", {
91
+ ref: R,
92
+ type: "button",
93
+ onClick: () => B(),
94
+ className: e(s.dismissButton, "inline-flex shrink-0 cursor-pointer items-center justify-center rounded border-none bg-transparent p-1 text-muted-foreground", "not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground", "not-disabled:not-aria-disabled:active:bg-subtle-pressed", u),
95
+ "aria-label": b,
96
+ children: /* @__PURE__ */ w(d, {})
97
+ }) : null
98
+ ]
99
+ });
100
+ return M ? G : /* @__PURE__ */ w(_.Provider, {
101
+ value: z,
102
+ children: G
103
+ });
104
+ };
105
+ O.displayName = "Toast";
106
+ //#endregion
107
+ export { O as ToastRoot };
108
+
109
+ //# sourceMappingURL=Toast.root.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.root.mjs","names":["_Fragment","useId","useId$1","React","registerNothing","renderParts","items","materialiseSlotContent","children","flat","flattenChildren","isElementOfType","node","ToastTitle","ToastBody","ToastFooter","hasTitlePart","Fragment","title","slotRendersContent","ToastUnscannedContext","ToastRoot","rest","host","ToastContext","registerToast","inToaster","label","getStatusLabel","status","statusLabel","statusTextId","titleId","handleDismiss","useEventCallback","onDismiss","hasOnDismiss","dismissButtonRef","ownContext","dismiss","titleTwice","warnOnce","iconClassName","cn","toastClassNames","STATUS_ICON_COLOR","renderedIcon","icon","StatusIcon","renderSlot","root","STATUS_BORDER","className","StatusText","content","focusRing","dismissLabel","DismissIcon"],"sources":["../../../src/components/feedback/Toast.root.tsx"],"sourcesContent":["import * as React from 'react';\nimport { flattenChildren, isElementOfType } from '../../lib/children';\nimport { cn } from '../../lib/cn';\nimport { toastClassNames } from '../../lib/classNames';\nimport { warnOnce } from '../../lib/dev';\nimport { DismissIcon } from '../../lib/icons';\nimport { materialiseSlotContent, renderSlot, slotRendersContent } from '../../lib/slot';\nimport type { Slot } from '../../lib/slot';\nimport { focusRing } from '../../lib/styles';\nimport type { Status } from '../../lib/types';\nimport { useEventCallback } from '../../hooks/useEventCallback';\nimport { useId } from '../../hooks/useId';\nimport {\n STATUS_BORDER,\n STATUS_ICON_COLOR,\n StatusIcon,\n StatusText,\n getStatusLabel,\n} from './MessageBar.status';\nimport { ToastContext, ToastUnscannedContext } from './Toast.context';\nimport type { ToastContextValue } from './Toast.context';\nimport { ToastBody, ToastFooter, ToastTitle } from './Toast.parts';\n\n/** Properties for the Toast component. */\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Status level controlling the toast color, icon and status text.\n * @default 'info'\n */\n status?: Status;\n /**\n * Title text (the 0.5 form; renders as a `Toast.Title`). A `Toast.Title` among the children wins\n * over it (development warning).\n */\n title?: string;\n /**\n * Visually hidden status text read before the toast (`'Info:'`, `'Success:'`, `'Warning:'`,\n * `'Error:'` by default). Pass a translation for other languages, or `''` to omit it.\n */\n statusLabel?: string;\n /**\n * Replaces the status icon (decorative, `aria-hidden`). Only `undefined` keeps the default;\n * `null`, or anything that renders nothing, shows no icon (the status-icon slot rule, as\n * `MessageBar.icon`). Fluent's `ToastTitle` `media`.\n */\n icon?: Slot<'span'>;\n /**\n * Called when the Dismiss button or a `Toast.Close` is activated; passing it renders the button.\n * Inside the Toaster every Toast shows the button and it dismisses the toast (your `onDismiss`\n * runs first). A timeout, Escape, Delete and `dismissToast` do not call it.\n */\n onDismiss?: () => void;\n /**\n * Accessible name of the dismiss button. Pass a translation for other languages.\n * @default 'Dismiss'\n */\n dismissLabel?: string;\n /** Ref to the root `<div>`. */\n ref?: React.Ref<HTMLDivElement>;\n}\n\nconst registerNothing: ToastContextValue['registerPart'] = () => () => {};\n\n/**\n * The content column's parts. With a `Toast.Title`, `Toast.Body` or `Toast.Footer` among the\n * direct children (Fragments and Server Component references included), the children render as\n * given, after a Title made from the `title` prop when there is no Title part. Otherwise the 0.5\n * form: the `title` prop as a Title and the children as a Body (none for content that renders\n * nothing).\n */\nfunction renderParts(\n title: string | undefined,\n children: React.ReactNode,\n): { content: React.ReactNode; titleTwice: boolean } {\n // A generator is read once here (and cached), so the scan and the render see the same items.\n const items = materialiseSlotContent(children);\n const flat = flattenChildren(items);\n if (flat.some(({ node }) => isElementOfType(node, ToastTitle, ToastBody, ToastFooter))) {\n const hasTitlePart = flat.some(({ node }) => isElementOfType(node, ToastTitle));\n return {\n content: (\n <>\n {title && !hasTitlePart ? <ToastTitle>{title}</ToastTitle> : null}\n {items}\n </>\n ),\n titleTwice: Boolean(title) && hasTitlePart,\n };\n }\n return {\n content: (\n <>\n {title ? <ToastTitle>{title}</ToastTitle> : null}\n {slotRendersContent(items) ? (\n <ToastBody>\n <ToastUnscannedContext.Provider value={true}>{items}</ToastUnscannedContext.Provider>\n </ToastBody>\n ) : null}\n </>\n ),\n titleTwice: false,\n };\n}\n\nexport const ToastRoot = ({\n status = 'info',\n title,\n statusLabel,\n icon,\n onDismiss,\n dismissLabel = 'Dismiss',\n className,\n children,\n ref,\n ...rest\n}: ToastProps) => {\n // Inside the Toaster's container, whose context has `registerToast`, the Toast registers its\n // severity, `onDismiss` and Dismiss button there and its parts use that context (the container's\n // ids); everywhere else it provides its own context and is a live region (D9, D10).\n const host = React.useContext(ToastContext);\n const registerToast = host?.registerToast ?? null;\n const inToaster = registerToast !== null;\n const label = getStatusLabel(status, statusLabel);\n const statusTextId = useId('wave-toast-status');\n const titleId = useId('wave-toast-title');\n const handleDismiss = useEventCallback(onDismiss);\n const hasOnDismiss = onDismiss !== undefined;\n const dismissButtonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useLayoutEffect(() => {\n if (!registerToast) return undefined;\n return registerToast({\n status,\n statusLabel: label,\n statusTextId: label ? statusTextId : undefined,\n onDismiss: hasOnDismiss ? handleDismiss : undefined,\n getDismissButton: () => dismissButtonRef.current,\n });\n }, [registerToast, status, label, statusTextId, hasOnDismiss, handleDismiss]);\n\n const ownContext = React.useMemo<ToastContextValue>(\n () => ({\n titleId,\n dismiss: hasOnDismiss ? handleDismiss : undefined,\n registerPart: registerNothing,\n registerToast: null,\n }),\n [titleId, hasOnDismiss, handleDismiss],\n );\n // Inside the Toaster every Toast shows the Dismiss button (D11); elsewhere `onDismiss` does.\n const dismiss = inToaster ? host?.dismiss : ownContext.dismiss;\n\n const { content, titleTwice } = renderParts(title, children);\n React.useEffect(() => {\n if (!titleTwice) return;\n warnOnce(\n 'Toast:title-twice',\n 'Toast: `title` is ignored because a Toast.Title is among the children. Remove one of them.',\n );\n }, [titleTwice]);\n\n // The status icon: only `undefined` keeps the default; `null`, or anything that renders\n // nothing, shows none (C-SLOTS status-icon rule). The class rides in the slot's base classes,\n // so a slot object that swaps the element keeps it.\n const iconClassName = cn(\n toastClassNames.icon,\n 'mt-0.5 inline-flex shrink-0',\n STATUS_ICON_COLOR[status],\n );\n const renderedIcon =\n icon === undefined ? (\n <span aria-hidden=\"true\" className={iconClassName}>\n <StatusIcon status={status} />\n </span>\n ) : slotRendersContent(icon) ? (\n renderSlot(icon, 'span', iconClassName, { 'aria-hidden': true })\n ) : null;\n\n const liveRegion: React.HTMLAttributes<HTMLDivElement> = inToaster\n ? {}\n : status === 'error'\n ? { role: 'alert', 'aria-live': 'assertive' }\n : { role: 'status', 'aria-live': 'polite' };\n const root = (\n <div\n ref={ref}\n {...liveRegion}\n {...rest}\n className={cn(\n toastClassNames.root,\n 'flex items-start gap-3 rounded border border-s-4 border-border bg-background p-3 text-foreground shadow-4',\n STATUS_BORDER[status],\n className,\n )}\n >\n {renderedIcon}\n <div className={cn(toastClassNames.content, 'min-w-0 flex-1')}>\n <StatusText label={label} id={statusTextId} />\n {content}\n </div>\n {dismiss ? (\n <button\n ref={dismissButtonRef}\n type=\"button\"\n onClick={() => dismiss()}\n className={cn(\n toastClassNames.dismissButton,\n 'inline-flex shrink-0 cursor-pointer items-center justify-center rounded border-none bg-transparent p-1 text-muted-foreground',\n 'not-disabled:not-aria-disabled:hover:bg-subtle-hover not-disabled:not-aria-disabled:hover:text-foreground',\n 'not-disabled:not-aria-disabled:active:bg-subtle-pressed',\n focusRing,\n )}\n aria-label={dismissLabel}\n >\n <DismissIcon />\n </button>\n ) : null}\n </div>\n );\n return inToaster ? (\n root\n ) : (\n <ToastContext.Provider value={ownContext}>{root}</ToastContext.Provider>\n );\n};\nToastRoot.displayName = 'Toast';\n"],"mappings":"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"}
@@ -0,0 +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/composeEventHandlers.cjs"),i=require("../../lib/classNames.cjs"),a=require("../../lib/toaster.cjs"),o=require("../../hooks/useEventCallback.cjs"),s=require("../../hooks/useId.cjs"),c=require("../../lib/direction.cjs"),l=require("../../lib/focus.cjs"),ee=require("../../hooks/useMergedRefs.cjs"),te=require("../../lib/aria.cjs"),u=require("../../hooks/usePresence.cjs"),d=require("../../lib/layers.cjs"),f=require("../../hooks/useDirection.cjs"),p=require("../portal/Portal.cjs"),ne=require("../../lib/styles.cjs"),m=require("../../lib/events.cjs"),h=require("../../hooks/usePreserveFocus.cjs"),g=require("./MessageBar.status.cjs"),_=require("./Toast.context.cjs"),re=require("./Toast.root.cjs");let v=require("react");v=e.__toESM(v,1);let y=require("react/jsx-runtime");function b(e,t){let n=0,r=!1;for(let t of e)t.shown?t.dismissed||(n+=1):r=!0;return!r||n>=t?e:e.map(e=>e.shown||n>=t?e:(n+=1,{...e,shown:!0}))}function x(e,t){let n=e.findIndex(e=>e.id===t);if(n===-1)return e;let r=e[n];if(!r.shown)return[...e.slice(0,n),...e.slice(n+1)];if(r.dismissed)return e;let i=e.slice();return i[n]={...r,dismissed:!0},i}function ie(e){return e.every(e=>e.shown&&e.dismissed)?e:e.filter(e=>e.shown).map(e=>e.dismissed?e:{...e,dismissed:!0})}function ae(e){let t;for(let n of e)n.shown&&!n.dismissed&&(!t||n.seq>t.seq)&&(t=n);return t}function S(e,t){return e.contains(t)?!0:d.getOpenLayers().some(n=>{let r=n.getAnchor();return r!==null&&e.contains(r)&&d.isInsideLayerTree(n.id,t)})}function oe(e,t){let n=t?.getDismissButton()??null;return l.getTabbableElements(e).some(e=>e!==n)}function C(e){return e===void 0?1/0:e>=1?Math.floor(e):1}var w={dispatchToast:(e,t)=>(a.isToastOptions(e)?e.toastId:t?.toastId)??``,dismissToast:()=>{},dismissAllToasts:()=>{}},T=`useToastController must be used within <Toaster>. Wrap your app (or the part of it that shows toasts) in <Toaster>: it provides the controller to its children.`;function E(){return v.useContext(_.ToasterContext)||(n.reportMissingContext(`useToastController`,`<Toaster>`,T),w)}var se=5e3;function D(e){let t=new Map,n=new Set,r=new Map,i=!1,a=!1,o=o=>{let s=t.get(o);if(!s)return;let c=!a&&!i&&n.size===0;c&&s.handle===null?(s.startedAt=Date.now(),s.handle=setTimeout(()=>{t.delete(o),r.delete(o),e(o)},s.remaining)):!c&&s.handle!==null&&(clearTimeout(s.handle),s.handle=null,s.remaining=Math.max(0,s.remaining-(Date.now()-s.startedAt)))},s=()=>{for(let e of Array.from(t.keys()))o(e)},c=e=>{let n=t.get(e);n?.handle!=null&&clearTimeout(n.handle),t.delete(e)};return{start(e,n,i){r.get(e)!==n&&(r.set(e,n),c(e),i>0&&Number.isFinite(i)&&(t.set(e,{handle:null,remaining:i,startedAt:0}),o(e)))},remove(e){c(e),r.delete(e)},clear(){for(let e of Array.from(t.keys()))c(e);r.clear()},isPaused(e){return n.has(e)},setPaused(e,t){t?n.add(e):n.delete(e),s()},setInBackground(e){i=e,s()},setSuspended(e){a=e,s()}}}var O={"top-start":`top-4 start-4 ms-(--wave-toaster-offset)`,"top-end":`top-4 end-4 me-(--wave-toaster-offset)`,"bottom-start":`bottom-4 start-4 ms-(--wave-toaster-offset)`,"bottom-end":`bottom-4 end-4 me-(--wave-toaster-offset)`,"top-right":`top-4 right-4 mr-(--wave-toaster-offset)`,"top-left":`top-4 left-4 ml-(--wave-toaster-offset)`,"bottom-right":`bottom-4 right-4 mr-(--wave-toaster-offset)`,"bottom-left":`bottom-4 left-4 ml-(--wave-toaster-offset)`},k=16;function A(e,t){let n=e.slice(e.indexOf(`-`)+1);if(n===`right`||n===`left`)return n===`right`;let r=c.getDirection(t)===`rtl`;return n===`end`?!r:r}function j(e,t){let n=d.getOpenLayers().filter(e=>e.kind===`modal`);if(n.length===0)return 0;let r=e.ownerDocument,i=r.defaultView;if(!i)return 0;let a=r.documentElement.clientWidth||i.innerWidth,o=r.documentElement.clientHeight||i.innerHeight,s=A(t,e),c=t.startsWith(`top`),l=0;for(let e of n)for(let t of e.getElements()){if(!t?.isConnected)continue;let e=t.getBoundingClientRect();if(e.width<=0||e.height<=0)continue;let n=s?e.right>=a-k:e.left<=k,r=c?e.top<=k:e.bottom>=o-k;n&&r&&(l=Math.max(l,s?a-e.left:e.right))}return l<=0||a-l<e.offsetWidth+32?0:Math.ceil(l)}var M=2e3;function N({text:e}){let[t,n]=v.useState(!0);return v.useEffect(()=>{let e=setTimeout(()=>n(!1),M);return()=>clearTimeout(e)},[]),t?(0,y.jsx)(`div`,{children:e}):null}N.displayName=`LiveMessage`;function P(e){return e.kind===`title`}function F(e){return e.kind===`body`}function I(e){return e.kind===`footer`}var L=new Set(`a.abbr.b.bdi.bdo.cite.code.data.dfn.em.i.kbd.label.mark.q.s.samp.small.span.strong.sub.sup.time.u.var.wbr`.split(`.`)),R=new Set([`noscript`,`script`,`style`,`template`]),z=new Set([`button`,`img`,`input`,`select`,`textarea`]),B=new Set([`button`,`checkbox`,`combobox`,`img`,`link`,`option`,`radio`,`slider`,`spinbutton`,`switch`,`tab`,`textbox`]);function V(e){let t=e.getAttribute(`role`)?.trim().split(/\s+/)[0];return t?B.has(t)||t.startsWith(`menuitem`):e.localName===`a`?e.hasAttribute(`href`):z.has(e.localName)}function H(e){return e.getAttribute(`aria-hidden`)===`true`||e.hasAttribute(`hidden`)||R.has(e.localName)}function U(e,t){if(!e)return``;let n=[],r=(e,i)=>{if(e.nodeType===Node.TEXT_NODE){n.push(e.textContent??``);return}if(e.nodeType!==Node.ELEMENT_NODE)return;let a=e;if(!i&&t?.(a)||H(a))return;let o=a.getAttribute(`aria-label`);if(o&&V(a)){n.push(` ${o} `);return}if(a.localName===`img`){n.push(` ${a.getAttribute(`alt`)??``} `);return}let s=!L.has(a.localName);s&&n.push(` `);for(let e of Array.from(a.childNodes))r(e,!1);s&&n.push(` `)};return r(e,!0),n.join(``).replace(/\s+/g,` `).trim()}function W(e){return!e||H(e)?[]:Array.from(e.childNodes,e=>e.nodeType===Node.TEXT_NODE?(e.textContent??``).replace(/\s+/g,` `).trim():e.nodeType===Node.ELEMENT_NODE?U(e):``).filter(Boolean)}function ce(e,t,n,r){let i=t.find(P),a=t.find(F);if(!i&&!a){let t=n?.getDismissButton()??null;return U(e,e=>e===t||e.id!==``&&(e.id===r||e.id===n?.statusTextId))}let o=i?.getLabel()??null,s=i?.getRow()??null,c=s?Array.from(s.children).filter(e=>e!==o).flatMap(e=>W(e)):[];return[U(o),U(a?.getElement()??null),...c,...t.filter(I).flatMap(e=>W(e.getElement()))].filter(Boolean).join(` `)}function G({entry:e,timers:r,onDismiss:a,onExited:c,getFocusFallback:l,announce:d,registerContainer:f}){let{id:p,dismissed:b}=e,{isMounted:x,ref:ie,presenceProps:ae}=u.usePresence(!b,{appear:!0,onExited:()=>c(p)}),S=v.useRef(null),C=v.useRef(null),w=v.useCallback(e=>{S.current=e,e&&(C.current=e),f(p,e)},[p,f]),T=ee.useMergedRefs(w,ie);h.usePreserveFocus(S,()=>l(C.current),{enabled:!b});let E=s.useId(`wave-toast-title`),D=s.useId(`wave-toast-status`),[O,k]=v.useState([]),A=v.useRef([]),j=v.useCallback(e=>(A.current=[...A.current,e],k(A.current),()=>{A.current=A.current.filter(t=>t!==e),k(A.current)}),[]),[M,N]=v.useState(null),I=v.useRef(null),L=v.useCallback(e=>(I.current=e,N(e),()=>{I.current===e&&(I.current=null,N(null))}),[]),R=o.useEventCallback(()=>{I.current?.onDismiss?.(),a(p)}),z=v.useMemo(()=>({titleId:E,dismiss:R,registerPart:j,registerToast:L}),[E,R,j,L]),B=O.find(P),V=O.find(F),H=e.form===`content`&&M===null?g.getStatusLabel(e.options.status??`info`,e.options.statusLabel):``,U=M?M.statusTextId:H?D:void 0;v.useLayoutEffect(()=>{let t=S.current;if(e.dismissed||!t)return;let n=e.options.timeout??(oe(t,I.current)?0:se);r.start(e.id,e.seq,n)},[e,r]),v.useLayoutEffect(()=>{let t=S.current;if(e.dismissed||!t)return;let n=I.current,r=n?.status??e.options.status??`info`,i=n?n.statusLabel:g.getStatusLabel(r,e.options.statusLabel),a=e.form===`content`&&e.options.announcement!==void 0?e.options.announcement:ce(t,A.current,n,D);d(e.id,{seq:e.seq,text:[i,a].filter(Boolean).join(` `),assertive:r===`error`})},[e,d,D,M]);let W=e.form===`content`?e.options.status:void 0;v.useEffect(()=>{let e=I.current?.status;W!==void 0&&e!==void 0&&W!==e&&n.warnOnce(`Toaster:status-conflict`,`Toaster: the dispatched Toast has status "${e}" but the dispatch options pass "${W}"; the Toast's status is used. Remove \`status\` from the options.`)},[e,W,M]);let G=e=>{(e.key===`Delete`||e.key===`Backspace`)&&(e.defaultPrevented||!m.isOwnEvent(e)||m.isEditableTarget(e.target)||(e.preventDefault(),a(p)))};return x?(0,y.jsxs)(`div`,{ref:T,role:`group`,tabIndex:-1,"data-wave-toast":``,"aria-labelledby":te.joinIds(U,B?.id),"aria-describedby":V?.id,className:t.cn(i.toasterClassNames.toast,`rounded`,ne.focusRing),...ae,onKeyDown:G,children:[H?(0,y.jsx)(g.StatusText,{label:H,id:D}):null,(0,y.jsx)(_.ToastContext.Provider,{value:z,children:e.form===`options`?(0,y.jsx)(re.ToastRoot,{status:e.options.status,statusLabel:e.options.statusLabel,title:e.options.title,dismissLabel:e.options.dismissLabel,children:e.options.body}):e.content})]}):null}G.displayName=`ToastContainer`;var K=({position:e=`bottom-end`,limit:c,shortcuts:te,toaster:u,className:ne,style:h,children:g,onFocus:re,onBlur:oe,onKeyDown:w,onPointerEnter:T,onPointerLeave:E,onPointerOver:se,ref:k,...A})=>{let[M,P]=v.useState([]),[F,I]=v.useState(()=>new Map),L=v.useCallback((e,t)=>{I(n=>{let r=n.get(e);if(r&&r.seq===t.seq&&r.text===t.text&&r.assertive===t.assertive)return n;let i=new Map(n);return i.set(e,t),i})},[]),R=b(M,C(c));R!==M&&P(R);let z=R.filter(e=>e.shown);v.useEffect(()=>{c!==void 0&&!(c>=1)&&n.warnOnce(`Toaster:limit`,`Toaster: \`limit\` must be 1 or more (got ${String(c)}); it counts as 1.`)},[c]);let B=s.useId(`toast`),V=v.useRef(0),H=v.useRef(null),U=ee.useMergedRefs(k,H),W=v.useRef(null),ce=f.useDirection(),[K,le]=v.useState(0);v.useLayoutEffect(()=>{let t=()=>{let t=H.current;le(t?j(t,e):0)};t();let n=d.subscribeLayers(t);return window.addEventListener(`resize`,t),document.addEventListener(`transitionend`,t,!0),document.addEventListener(`animationend`,t,!0),()=>{n(),window.removeEventListener(`resize`,t),document.removeEventListener(`transitionend`,t,!0),document.removeEventListener(`animationend`,t,!0)}},[e,ce]);let[q]=v.useState(()=>D(e=>P(t=>x(t,e))));v.useEffect(()=>{let e=document,t=!1,n=()=>q.setInBackground(t||e.visibilityState===`hidden`),r=e=>{e.target instanceof Node||(t=!0,n())},i=e=>{e.target instanceof Node||(t=!1,n())};return n(),q.setSuspended(!1),window.addEventListener(`blur`,r),window.addEventListener(`focus`,i),e.addEventListener(`visibilitychange`,n),()=>{window.removeEventListener(`blur`,r),window.removeEventListener(`focus`,i),e.removeEventListener(`visibilitychange`,n),q.setSuspended(!0)}},[q]);let ue=v.useCallback((e,t)=>{V.current+=1;let n=V.current,r=a.isToastOptions(e)?{form:`options`,options:e}:{form:`content`,content:e,options:t??{}},i=r.options.toastId??`${B}-${n}`;return P(e=>{let t=e.findIndex(e=>e.id===i),a=t!==-1&&e[t].shown,o={...r,id:i,seq:n,shown:a,dismissed:!1};if(t===-1)return[...e,o];let s=e.slice();return s[t]=o,s}),i},[B]),J=v.useCallback(e=>{q.remove(e),P(t=>x(t,e))},[q]),Y=v.useCallback(()=>{q.clear(),P(e=>ie(e))},[q]),de=v.useCallback(e=>{P(t=>t.some(t=>t.id===e&&t.dismissed)?t.filter(t=>!(t.id===e&&t.dismissed)):t),I(t=>{if(!t.has(e))return t;let n=new Map(t);return n.delete(e),n})},[]),X=v.useMemo(()=>({dispatchToast:ue,dismissToast:J,dismissAllToasts:Y}),[ue,J,Y]),[fe]=v.useState(()=>({}));v.useLayoutEffect(()=>{if(!u)return;let e=a.bindToasterHandle(u,fe,X);if(e.status===`bound`)return e.unbind;e.status===`taken`?n.warnOnce(`Toaster:handle-bound`,`Toaster: this handle is already bound to another Toaster; a handle binds one Toaster. Create one handle per Toaster.`):n.warnOnce(`Toaster:handle-unknown`,"Toaster: `toaster` is not a handle from createToaster(), so nothing is bound. Pass the value createToaster() returns.")},[u,fe,X]);let pe=v.useCallback(e=>{let t=H.current,n=t?Array.from(t.children).filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-wave-toast`)):[],r=!!e&&e.ownerDocument.activeElement===e,i=e?n.indexOf(e):-1,a=t=>t!==e&&t.isConnected&&t.getAttribute(`data-presence`)!==`exiting`,o=n.slice(i+1).find(a),s=i>0?n.slice(0,i).reverse().find(a):void 0;for(let e of[o,s]){if(!e)continue;let t=r?e:l.getFirstTabbable(e);if(t)return t}let c=W.current;return W.current=null,c?.isConnected?c:null},[]),Z=o.useEventCallback(()=>{let e=H.current;if(!e)return;let t=e.ownerDocument;if(t.activeElement&&t.activeElement!==t.body)return;let n=q.isPaused(`focus`);q.setPaused(`focus`,!1);let r=W.current;W.current=null,n&&r&&l.isConnectedAndFocusable(r)&&r.focus({preventScroll:!0})});v.useLayoutEffect(()=>{Z()},[R,Z]),v.useLayoutEffect(()=>d.subscribeLayers(()=>queueMicrotask(Z)),[Z]);let Q=v.useRef(null);v.useEffect(()=>{let e=e=>{let t=Q.current===e;if(Q.current=null,t||!q.isPaused(`hover`))return;let n=H.current;n&&e.target instanceof Node&&S(n,e.target)||q.setPaused(`hover`,!1)};return document.addEventListener(`pointerover`,e),()=>document.removeEventListener(`pointerover`,e)},[q]);let me=v.useRef(R);v.useLayoutEffect(()=>{me.current=R});let $=v.useRef(new Map),he=v.useCallback((e,t)=>{t?$.current.set(e,t):$.current.delete(e)},[]),ge=typeof te?.focus==`function`,_e=o.useEventCallback(e=>{if(e.defaultPrevented||e.isComposing||!te?.focus?.(e))return;let t=ae(me.current),n=t?$.current.get(t.id):void 0;if(!n?.isConnected)return;e.preventDefault();let r=H.current,i=n.ownerDocument.activeElement;i instanceof HTMLElement&&i!==n.ownerDocument.body&&!(r&&S(r,i))&&(W.current=i),n.focus({preventScroll:!1})});v.useEffect(()=>{if(!ge)return;let e=e=>_e(e);return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[ge,_e]);let ve=e=>{let t=e.relatedTarget;t instanceof HTMLElement&&l.isConnectedAndFocusable(t)&&(S(e.currentTarget,t)||(W.current=t))},ye=e=>{let t=e.currentTarget,n=e.relatedTarget;if(!(n instanceof Node&&S(t,n))&&!e.target.closest(`[data-wave-toast][data-presence="exiting"]`)){if(n===null){let n=e.target;if(!n.isConnected)return;let r=n.ownerDocument.activeElement;if(r&&S(t,r))return}W.current=null}},be=e=>{if(e.key!==`Escape`&&e.key!==`Esc`||e.defaultPrevented||e.nativeEvent.isComposing||!m.isOwnEvent(e))return;let t=e.currentTarget;if(d.getOpenLayers().some(e=>e.escape&&t.contains(e.getAnchor())))return;e.preventDefault();let n=W.current;W.current=null,n?.isConnected&&n.focus({preventScroll:!0}),Y()},xe=[],Se=[];for(let e of z){if(e.dismissed)continue;let t=F.get(e.id);if(!t||t.seq!==e.seq||!t.text)continue;let n=(0,y.jsx)(N,{text:t.text},t.seq);(t.assertive?Se:xe).push(n)}let Ce=K>0?{...h,"--wave-toaster-offset":`${K}px`}:h;return(0,y.jsxs)(_.ToasterContext.Provider,{value:X,children:[g,(0,y.jsx)(p.Portal,{layer:`toast`,children:(0,y.jsxs)(`div`,{ref:U,role:`region`,"aria-label":`Notifications`,"data-wave-focus-trap-allow":``,"data-position":e,...A,style:Ce,onFocus:e=>{re?.(e),ve(e),q.setPaused(`focus`,!0)},onBlur:e=>{oe?.(e),ye(e);let t=e.relatedTarget;t instanceof Node&&S(e.currentTarget,t)||q.setPaused(`focus`,!1)},onPointerEnter:e=>{T?.(e),q.setPaused(`hover`,!0)},onPointerLeave:e=>{E?.(e),q.setPaused(`hover`,!1)},onPointerOver:e=>{se?.(e),Q.current=e.nativeEvent},onKeyDown:e=>r.composeEventHandlers(w,be)(e),className:t.cn(i.toasterClassNames.root,`fixed flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2`,O[e],ne),children:[(0,y.jsx)(`div`,{role:`status`,"aria-live":`polite`,"aria-atomic":`false`,className:`sr-only`,children:xe}),(0,y.jsx)(`div`,{"aria-live":`assertive`,"aria-atomic":`false`,className:`sr-only`,children:Se}),z.map(e=>(0,y.jsx)(G,{entry:e,timers:q,onDismiss:J,onExited:de,getFocusFallback:pe,announce:L,registerContainer:he},e.id))]})})]})};K.displayName=`Toaster`,exports.Toaster=K,exports.useToastController=E;
2
+ //# sourceMappingURL=Toaster.cjs.map