@exromany/lido-app-ui 0.0.1-pre.4 → 0.0.1-pre.5

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 (491) hide show
  1. package/README.md +17 -2
  2. package/dist/README.md +17 -2
  3. package/dist/cjs/accordion/Accordion.cjs +12 -7
  4. package/dist/cjs/accordion/Accordion.cjs.map +1 -1
  5. package/dist/cjs/accordion/Accordion.module.css.cjs +1 -1
  6. package/dist/cjs/address-button/AddressButton.cjs +4 -3
  7. package/dist/cjs/address-button/AddressButton.cjs.map +1 -1
  8. package/dist/cjs/address-button/AddressButton.module.css.cjs +1 -1
  9. package/dist/cjs/badge/Badge.cjs +4 -1
  10. package/dist/cjs/badge/Badge.cjs.map +1 -1
  11. package/dist/cjs/badge/Badge.module.css.cjs +1 -1
  12. package/dist/cjs/banner/Banner.cjs +28 -25
  13. package/dist/cjs/banner/Banner.cjs.map +1 -1
  14. package/dist/cjs/banner/Banner.module.css.cjs +1 -1
  15. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +12 -17
  16. package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -1
  17. package/dist/cjs/button/Button.cjs +2 -1
  18. package/dist/cjs/button/Button.cjs.map +1 -1
  19. package/dist/cjs/button/Button.module.css.cjs +1 -1
  20. package/dist/cjs/button/ButtonContent.cjs +3 -3
  21. package/dist/cjs/button/ButtonContent.cjs.map +1 -1
  22. package/dist/cjs/callout/Callout.cjs +75 -0
  23. package/dist/cjs/callout/Callout.cjs.map +1 -0
  24. package/dist/cjs/callout/Callout.module.css.cjs +6 -0
  25. package/dist/cjs/callout/Callout.module.css.cjs.map +1 -0
  26. package/dist/cjs/checkbox/Checkbox.cjs +55 -24
  27. package/dist/cjs/checkbox/Checkbox.cjs.map +1 -1
  28. package/dist/cjs/checkbox/Checkbox.module.css.cjs +1 -1
  29. package/dist/cjs/checkbox-row/CheckboxList.cjs +33 -0
  30. package/dist/cjs/checkbox-row/CheckboxList.cjs.map +1 -0
  31. package/dist/cjs/checkbox-row/CheckboxList.module.css.cjs +6 -0
  32. package/dist/cjs/checkbox-row/CheckboxList.module.css.cjs.map +1 -0
  33. package/dist/cjs/checkbox-row/CheckboxRow.cjs +80 -0
  34. package/dist/cjs/checkbox-row/CheckboxRow.cjs.map +1 -0
  35. package/dist/cjs/checkbox-row/CheckboxRow.module.css.cjs +6 -0
  36. package/dist/cjs/checkbox-row/CheckboxRow.module.css.cjs.map +1 -0
  37. package/dist/cjs/disclosure/Disclosure.cjs +73 -0
  38. package/dist/cjs/disclosure/Disclosure.cjs.map +1 -0
  39. package/dist/cjs/disclosure/Disclosure.module.css.cjs +6 -0
  40. package/dist/cjs/disclosure/Disclosure.module.css.cjs.map +1 -0
  41. package/dist/cjs/drawer/Drawer.cjs +110 -0
  42. package/dist/cjs/drawer/Drawer.cjs.map +1 -0
  43. package/dist/cjs/drawer/Drawer.module.css.cjs +6 -0
  44. package/dist/cjs/drawer/Drawer.module.css.cjs.map +1 -0
  45. package/dist/cjs/empty-state/EmptyState.cjs +54 -0
  46. package/dist/cjs/empty-state/EmptyState.cjs.map +1 -0
  47. package/dist/cjs/empty-state/EmptyState.module.css.cjs +6 -0
  48. package/dist/cjs/empty-state/EmptyState.module.css.cjs.map +1 -0
  49. package/dist/cjs/error-page/ErrorPage.cjs +21 -20
  50. package/dist/cjs/error-page/ErrorPage.cjs.map +1 -1
  51. package/dist/cjs/error-page/ErrorPage.module.css.cjs +1 -1
  52. package/dist/cjs/header/Header.cjs +1 -1
  53. package/dist/cjs/header/Header.cjs.map +1 -1
  54. package/dist/cjs/header/HeaderNav.cjs +4 -20
  55. package/dist/cjs/header/HeaderNav.cjs.map +1 -1
  56. package/dist/cjs/hooks/DialogLayer.cjs +94 -0
  57. package/dist/cjs/hooks/DialogLayer.cjs.map +1 -0
  58. package/dist/cjs/hooks/useDialogLayer.cjs +69 -0
  59. package/dist/cjs/hooks/useDialogLayer.cjs.map +1 -0
  60. package/dist/cjs/hooks/useEdgeFade.cjs +22 -22
  61. package/dist/cjs/hooks/useEdgeFade.cjs.map +1 -1
  62. package/dist/cjs/hooks/useExitLatch.cjs +19 -0
  63. package/dist/cjs/hooks/useExitLatch.cjs.map +1 -0
  64. package/dist/cjs/hooks/useHeaderOffset.cjs +20 -0
  65. package/dist/cjs/hooks/useHeaderOffset.cjs.map +1 -0
  66. package/dist/cjs/hooks/useOpenerElement.cjs +15 -0
  67. package/dist/cjs/hooks/useOpenerElement.cjs.map +1 -0
  68. package/dist/cjs/hooks/usePresence.cjs +154 -0
  69. package/dist/cjs/hooks/usePresence.cjs.map +1 -0
  70. package/dist/cjs/hooks/useResizeObserver.cjs +22 -0
  71. package/dist/cjs/hooks/useResizeObserver.cjs.map +1 -0
  72. package/dist/cjs/hooks/useSelectionIndicator.cjs +52 -0
  73. package/dist/cjs/hooks/useSelectionIndicator.cjs.map +1 -0
  74. package/dist/cjs/icon-button/IconButton.cjs +4 -4
  75. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  76. package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
  77. package/dist/cjs/index.cjs +48 -0
  78. package/dist/cjs/index.cjs.map +1 -1
  79. package/dist/cjs/index.css +6 -6
  80. package/dist/cjs/input/Field.cjs +79 -0
  81. package/dist/cjs/input/Field.cjs.map +1 -0
  82. package/dist/cjs/input/Field.module.css.cjs +6 -0
  83. package/dist/cjs/input/Field.module.css.cjs.map +1 -0
  84. package/dist/cjs/input/Input.cjs +37 -41
  85. package/dist/cjs/input/Input.cjs.map +1 -1
  86. package/dist/cjs/input/Input.module.css.cjs +1 -1
  87. package/dist/cjs/modal/Modal.cjs +45 -93
  88. package/dist/cjs/modal/Modal.cjs.map +1 -1
  89. package/dist/cjs/notification/Notification.cjs +2 -1
  90. package/dist/cjs/notification/Notification.cjs.map +1 -1
  91. package/dist/cjs/notification/Notification.module.css.cjs +1 -1
  92. package/dist/cjs/page-layout/FormLayout.cjs +42 -0
  93. package/dist/cjs/page-layout/FormLayout.cjs.map +1 -0
  94. package/dist/cjs/page-layout/FormLayout.module.css.cjs +6 -0
  95. package/dist/cjs/page-layout/FormLayout.module.css.cjs.map +1 -0
  96. package/dist/cjs/pagination/Pagination.cjs +3 -6
  97. package/dist/cjs/pagination/Pagination.cjs.map +1 -1
  98. package/dist/cjs/pagination/Pagination.module.css.cjs +1 -1
  99. package/dist/cjs/popover/Popover.cjs +65 -13
  100. package/dist/cjs/popover/Popover.cjs.map +1 -1
  101. package/dist/cjs/progress-bar/ProgressBar.cjs +87 -0
  102. package/dist/cjs/progress-bar/ProgressBar.cjs.map +1 -0
  103. package/dist/cjs/progress-bar/ProgressBar.module.css.cjs +6 -0
  104. package/dist/cjs/progress-bar/ProgressBar.module.css.cjs.map +1 -0
  105. package/dist/cjs/progress-bar/SegmentedBar.cjs +53 -0
  106. package/dist/cjs/progress-bar/SegmentedBar.cjs.map +1 -0
  107. package/dist/cjs/progress-bar/SegmentedBar.module.css.cjs +6 -0
  108. package/dist/cjs/progress-bar/SegmentedBar.module.css.cjs.map +1 -0
  109. package/dist/cjs/radio-button/RadioButton.cjs +31 -24
  110. package/dist/cjs/radio-button/RadioButton.cjs.map +1 -1
  111. package/dist/cjs/rich-input/RichInput.cjs +27 -17
  112. package/dist/cjs/rich-input/RichInput.cjs.map +1 -1
  113. package/dist/cjs/rich-input/RichInput.module.css.cjs +1 -1
  114. package/dist/cjs/segmented-control/SegmentedControl.cjs +9 -37
  115. package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
  116. package/dist/cjs/segmented-control/SegmentedControlCard.cjs +14 -33
  117. package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
  118. package/dist/cjs/select/Select.cjs +338 -0
  119. package/dist/cjs/select/Select.cjs.map +1 -0
  120. package/dist/cjs/select/Select.module.css.cjs +6 -0
  121. package/dist/cjs/select/Select.module.css.cjs.map +1 -0
  122. package/dist/cjs/select/SelectItem.cjs +97 -0
  123. package/dist/cjs/select/SelectItem.cjs.map +1 -0
  124. package/dist/cjs/select/SelectItem.module.css.cjs +6 -0
  125. package/dist/cjs/select/SelectItem.module.css.cjs.map +1 -0
  126. package/dist/cjs/sidebar/Sidebar.cjs +10 -12
  127. package/dist/cjs/sidebar/Sidebar.cjs.map +1 -1
  128. package/dist/cjs/spinner/Spinner.cjs +43 -0
  129. package/dist/cjs/spinner/Spinner.cjs.map +1 -0
  130. package/dist/cjs/spinner/Spinner.module.css.cjs +6 -0
  131. package/dist/cjs/spinner/Spinner.module.css.cjs.map +1 -0
  132. package/dist/cjs/stat-card/StatCard.cjs +132 -0
  133. package/dist/cjs/stat-card/StatCard.cjs.map +1 -0
  134. package/dist/cjs/stat-card/StatCard.module.css.cjs +6 -0
  135. package/dist/cjs/stat-card/StatCard.module.css.cjs.map +1 -0
  136. package/dist/cjs/stat-item/StatItem.cjs +1 -1
  137. package/dist/cjs/stat-item/StatItem.cjs.map +1 -1
  138. package/dist/cjs/stat-item/StatItem.module.css.cjs +1 -1
  139. package/dist/cjs/steps/Steps.cjs +85 -0
  140. package/dist/cjs/steps/Steps.cjs.map +1 -0
  141. package/dist/cjs/steps/Steps.module.css.cjs +6 -0
  142. package/dist/cjs/steps/Steps.module.css.cjs.map +1 -0
  143. package/dist/cjs/switch/Switch.cjs +32 -25
  144. package/dist/cjs/switch/Switch.cjs.map +1 -1
  145. package/dist/cjs/table/Table.cjs +280 -0
  146. package/dist/cjs/table/Table.cjs.map +1 -0
  147. package/dist/cjs/table/Table.module.css.cjs +6 -0
  148. package/dist/cjs/table/Table.module.css.cjs.map +1 -0
  149. package/dist/cjs/tabs/Tabs.cjs +18 -27
  150. package/dist/cjs/tabs/Tabs.cjs.map +1 -1
  151. package/dist/cjs/tabs/Tabs.module.css.cjs +1 -1
  152. package/dist/cjs/tag/Tag.cjs +4 -3
  153. package/dist/cjs/tag/Tag.cjs.map +1 -1
  154. package/dist/cjs/tag/Tag.module.css.cjs +1 -1
  155. package/dist/cjs/textarea/Textarea.cjs +108 -0
  156. package/dist/cjs/textarea/Textarea.cjs.map +1 -0
  157. package/dist/cjs/textarea/Textarea.module.css.cjs +6 -0
  158. package/dist/cjs/textarea/Textarea.module.css.cjs.map +1 -0
  159. package/dist/cjs/toast/ToastStack.cjs +34 -0
  160. package/dist/cjs/toast/ToastStack.cjs.map +1 -0
  161. package/dist/cjs/toast/ToastStack.module.css.cjs +6 -0
  162. package/dist/cjs/toast/ToastStack.module.css.cjs.map +1 -0
  163. package/dist/cjs/toast/Toaster.cjs +172 -0
  164. package/dist/cjs/toast/Toaster.cjs.map +1 -0
  165. package/dist/cjs/toast/toastStore.cjs +49 -0
  166. package/dist/cjs/toast/toastStore.cjs.map +1 -0
  167. package/dist/cjs/toast/useToasts.cjs +14 -0
  168. package/dist/cjs/toast/useToasts.cjs.map +1 -0
  169. package/dist/cjs/token-selector/TokenSelector.cjs +25 -137
  170. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  171. package/dist/cjs/tooltip/Tooltip.cjs +15 -4
  172. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  173. package/dist/cjs/tx-status/TxStatus.cjs +4 -3
  174. package/dist/cjs/tx-status/TxStatus.cjs.map +1 -1
  175. package/dist/cjs/tx-status/TxStatus.module.css.cjs +1 -1
  176. package/dist/cjs/utils/dom.cjs +14 -0
  177. package/dist/cjs/utils/dom.cjs.map +1 -0
  178. package/dist/esm/accordion/Accordion.mjs +12 -7
  179. package/dist/esm/accordion/Accordion.mjs.map +1 -1
  180. package/dist/esm/accordion/Accordion.module.css.mjs +1 -1
  181. package/dist/esm/address-button/AddressButton.mjs +4 -3
  182. package/dist/esm/address-button/AddressButton.mjs.map +1 -1
  183. package/dist/esm/address-button/AddressButton.module.css.mjs +1 -1
  184. package/dist/esm/badge/Badge.mjs +4 -1
  185. package/dist/esm/badge/Badge.mjs.map +1 -1
  186. package/dist/esm/badge/Badge.module.css.mjs +1 -1
  187. package/dist/esm/banner/Banner.mjs +29 -26
  188. package/dist/esm/banner/Banner.mjs.map +1 -1
  189. package/dist/esm/banner/Banner.module.css.mjs +1 -1
  190. package/dist/esm/breadcrumbs/Breadcrumbs.mjs +13 -18
  191. package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -1
  192. package/dist/esm/button/Button.mjs +2 -1
  193. package/dist/esm/button/Button.mjs.map +1 -1
  194. package/dist/esm/button/Button.module.css.mjs +1 -1
  195. package/dist/esm/button/ButtonContent.mjs +3 -3
  196. package/dist/esm/button/ButtonContent.mjs.map +1 -1
  197. package/dist/esm/callout/Callout.mjs +71 -0
  198. package/dist/esm/callout/Callout.mjs.map +1 -0
  199. package/dist/esm/callout/Callout.module.css.mjs +4 -0
  200. package/dist/esm/callout/Callout.module.css.mjs.map +1 -0
  201. package/dist/esm/checkbox/Checkbox.mjs +56 -25
  202. package/dist/esm/checkbox/Checkbox.mjs.map +1 -1
  203. package/dist/esm/checkbox/Checkbox.module.css.mjs +1 -1
  204. package/dist/esm/checkbox-row/CheckboxList.mjs +29 -0
  205. package/dist/esm/checkbox-row/CheckboxList.mjs.map +1 -0
  206. package/dist/esm/checkbox-row/CheckboxList.module.css.mjs +4 -0
  207. package/dist/esm/checkbox-row/CheckboxList.module.css.mjs.map +1 -0
  208. package/dist/esm/checkbox-row/CheckboxRow.mjs +76 -0
  209. package/dist/esm/checkbox-row/CheckboxRow.mjs.map +1 -0
  210. package/dist/esm/checkbox-row/CheckboxRow.module.css.mjs +4 -0
  211. package/dist/esm/checkbox-row/CheckboxRow.module.css.mjs.map +1 -0
  212. package/dist/esm/disclosure/Disclosure.mjs +69 -0
  213. package/dist/esm/disclosure/Disclosure.mjs.map +1 -0
  214. package/dist/esm/disclosure/Disclosure.module.css.mjs +4 -0
  215. package/dist/esm/disclosure/Disclosure.module.css.mjs.map +1 -0
  216. package/dist/esm/drawer/Drawer.mjs +106 -0
  217. package/dist/esm/drawer/Drawer.mjs.map +1 -0
  218. package/dist/esm/drawer/Drawer.module.css.mjs +4 -0
  219. package/dist/esm/drawer/Drawer.module.css.mjs.map +1 -0
  220. package/dist/esm/empty-state/EmptyState.mjs +50 -0
  221. package/dist/esm/empty-state/EmptyState.mjs.map +1 -0
  222. package/dist/esm/empty-state/EmptyState.module.css.mjs +4 -0
  223. package/dist/esm/empty-state/EmptyState.module.css.mjs.map +1 -0
  224. package/dist/esm/error-page/ErrorPage.mjs +22 -21
  225. package/dist/esm/error-page/ErrorPage.mjs.map +1 -1
  226. package/dist/esm/error-page/ErrorPage.module.css.mjs +1 -1
  227. package/dist/esm/header/Header.mjs +1 -1
  228. package/dist/esm/header/Header.mjs.map +1 -1
  229. package/dist/esm/header/HeaderNav.mjs +2 -18
  230. package/dist/esm/header/HeaderNav.mjs.map +1 -1
  231. package/dist/esm/hooks/DialogLayer.mjs +90 -0
  232. package/dist/esm/hooks/DialogLayer.mjs.map +1 -0
  233. package/dist/esm/hooks/useDialogLayer.mjs +65 -0
  234. package/dist/esm/hooks/useDialogLayer.mjs.map +1 -0
  235. package/dist/esm/hooks/useEdgeFade.mjs +22 -22
  236. package/dist/esm/hooks/useEdgeFade.mjs.map +1 -1
  237. package/dist/esm/hooks/useExitLatch.mjs +15 -0
  238. package/dist/esm/hooks/useExitLatch.mjs.map +1 -0
  239. package/dist/esm/hooks/useHeaderOffset.mjs +16 -0
  240. package/dist/esm/hooks/useHeaderOffset.mjs.map +1 -0
  241. package/dist/esm/hooks/useOpenerElement.mjs +11 -0
  242. package/dist/esm/hooks/useOpenerElement.mjs.map +1 -0
  243. package/dist/esm/hooks/usePresence.mjs +150 -0
  244. package/dist/esm/hooks/usePresence.mjs.map +1 -0
  245. package/dist/esm/hooks/useResizeObserver.mjs +18 -0
  246. package/dist/esm/hooks/useResizeObserver.mjs.map +1 -0
  247. package/dist/esm/hooks/useSelectionIndicator.mjs +48 -0
  248. package/dist/esm/hooks/useSelectionIndicator.mjs.map +1 -0
  249. package/dist/esm/icon-button/IconButton.mjs +4 -4
  250. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  251. package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
  252. package/dist/esm/index.css +6 -6
  253. package/dist/esm/index.mjs +20 -0
  254. package/dist/esm/index.mjs.map +1 -1
  255. package/dist/esm/input/Field.mjs +70 -0
  256. package/dist/esm/input/Field.mjs.map +1 -0
  257. package/dist/esm/input/Field.module.css.mjs +4 -0
  258. package/dist/esm/input/Field.module.css.mjs.map +1 -0
  259. package/dist/esm/input/Input.mjs +38 -42
  260. package/dist/esm/input/Input.mjs.map +1 -1
  261. package/dist/esm/input/Input.module.css.mjs +1 -1
  262. package/dist/esm/modal/Modal.mjs +46 -94
  263. package/dist/esm/modal/Modal.mjs.map +1 -1
  264. package/dist/esm/notification/Notification.mjs +2 -1
  265. package/dist/esm/notification/Notification.mjs.map +1 -1
  266. package/dist/esm/notification/Notification.module.css.mjs +1 -1
  267. package/dist/esm/page-layout/FormLayout.mjs +38 -0
  268. package/dist/esm/page-layout/FormLayout.mjs.map +1 -0
  269. package/dist/esm/page-layout/FormLayout.module.css.mjs +4 -0
  270. package/dist/esm/page-layout/FormLayout.module.css.mjs.map +1 -0
  271. package/dist/esm/pagination/Pagination.mjs +4 -7
  272. package/dist/esm/pagination/Pagination.mjs.map +1 -1
  273. package/dist/esm/pagination/Pagination.module.css.mjs +1 -1
  274. package/dist/esm/popover/Popover.mjs +66 -14
  275. package/dist/esm/popover/Popover.mjs.map +1 -1
  276. package/dist/esm/progress-bar/ProgressBar.mjs +83 -0
  277. package/dist/esm/progress-bar/ProgressBar.mjs.map +1 -0
  278. package/dist/esm/progress-bar/ProgressBar.module.css.mjs +4 -0
  279. package/dist/esm/progress-bar/ProgressBar.module.css.mjs.map +1 -0
  280. package/dist/esm/progress-bar/SegmentedBar.mjs +49 -0
  281. package/dist/esm/progress-bar/SegmentedBar.mjs.map +1 -0
  282. package/dist/esm/progress-bar/SegmentedBar.module.css.mjs +4 -0
  283. package/dist/esm/progress-bar/SegmentedBar.module.css.mjs.map +1 -0
  284. package/dist/esm/radio-button/RadioButton.mjs +31 -24
  285. package/dist/esm/radio-button/RadioButton.mjs.map +1 -1
  286. package/dist/esm/rich-input/RichInput.mjs +27 -17
  287. package/dist/esm/rich-input/RichInput.mjs.map +1 -1
  288. package/dist/esm/rich-input/RichInput.module.css.mjs +1 -1
  289. package/dist/esm/segmented-control/SegmentedControl.mjs +9 -37
  290. package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
  291. package/dist/esm/segmented-control/SegmentedControlCard.mjs +14 -33
  292. package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
  293. package/dist/esm/select/Select.mjs +334 -0
  294. package/dist/esm/select/Select.mjs.map +1 -0
  295. package/dist/esm/select/Select.module.css.mjs +4 -0
  296. package/dist/esm/select/Select.module.css.mjs.map +1 -0
  297. package/dist/esm/select/SelectItem.mjs +92 -0
  298. package/dist/esm/select/SelectItem.mjs.map +1 -0
  299. package/dist/esm/select/SelectItem.module.css.mjs +4 -0
  300. package/dist/esm/select/SelectItem.module.css.mjs.map +1 -0
  301. package/dist/esm/sidebar/Sidebar.mjs +10 -12
  302. package/dist/esm/sidebar/Sidebar.mjs.map +1 -1
  303. package/dist/esm/spinner/Spinner.mjs +39 -0
  304. package/dist/esm/spinner/Spinner.mjs.map +1 -0
  305. package/dist/esm/spinner/Spinner.module.css.mjs +4 -0
  306. package/dist/esm/spinner/Spinner.module.css.mjs.map +1 -0
  307. package/dist/esm/stat-card/StatCard.mjs +127 -0
  308. package/dist/esm/stat-card/StatCard.mjs.map +1 -0
  309. package/dist/esm/stat-card/StatCard.module.css.mjs +4 -0
  310. package/dist/esm/stat-card/StatCard.module.css.mjs.map +1 -0
  311. package/dist/esm/stat-item/StatItem.mjs +1 -1
  312. package/dist/esm/stat-item/StatItem.mjs.map +1 -1
  313. package/dist/esm/stat-item/StatItem.module.css.mjs +1 -1
  314. package/dist/esm/steps/Steps.mjs +81 -0
  315. package/dist/esm/steps/Steps.mjs.map +1 -0
  316. package/dist/esm/steps/Steps.module.css.mjs +4 -0
  317. package/dist/esm/steps/Steps.module.css.mjs.map +1 -0
  318. package/dist/esm/switch/Switch.mjs +32 -25
  319. package/dist/esm/switch/Switch.mjs.map +1 -1
  320. package/dist/esm/table/Table.mjs +269 -0
  321. package/dist/esm/table/Table.mjs.map +1 -0
  322. package/dist/esm/table/Table.module.css.mjs +4 -0
  323. package/dist/esm/table/Table.module.css.mjs.map +1 -0
  324. package/dist/esm/tabs/Tabs.mjs +18 -27
  325. package/dist/esm/tabs/Tabs.mjs.map +1 -1
  326. package/dist/esm/tabs/Tabs.module.css.mjs +1 -1
  327. package/dist/esm/tag/Tag.mjs +4 -3
  328. package/dist/esm/tag/Tag.mjs.map +1 -1
  329. package/dist/esm/tag/Tag.module.css.mjs +1 -1
  330. package/dist/esm/textarea/Textarea.mjs +104 -0
  331. package/dist/esm/textarea/Textarea.mjs.map +1 -0
  332. package/dist/esm/textarea/Textarea.module.css.mjs +4 -0
  333. package/dist/esm/textarea/Textarea.module.css.mjs.map +1 -0
  334. package/dist/esm/toast/ToastStack.mjs +30 -0
  335. package/dist/esm/toast/ToastStack.mjs.map +1 -0
  336. package/dist/esm/toast/ToastStack.module.css.mjs +4 -0
  337. package/dist/esm/toast/ToastStack.module.css.mjs.map +1 -0
  338. package/dist/esm/toast/Toaster.mjs +167 -0
  339. package/dist/esm/toast/Toaster.mjs.map +1 -0
  340. package/dist/esm/toast/toastStore.mjs +43 -0
  341. package/dist/esm/toast/toastStore.mjs.map +1 -0
  342. package/dist/esm/toast/useToasts.mjs +10 -0
  343. package/dist/esm/toast/useToasts.mjs.map +1 -0
  344. package/dist/esm/token-selector/TokenSelector.mjs +27 -139
  345. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  346. package/dist/esm/tooltip/Tooltip.mjs +15 -4
  347. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  348. package/dist/esm/tx-status/TxStatus.mjs +4 -3
  349. package/dist/esm/tx-status/TxStatus.mjs.map +1 -1
  350. package/dist/esm/tx-status/TxStatus.module.css.mjs +1 -1
  351. package/dist/esm/utils/dom.mjs +10 -0
  352. package/dist/esm/utils/dom.mjs.map +1 -0
  353. package/dist/index.css +6 -6
  354. package/dist/styles/motion-mixins.css +167 -0
  355. package/dist/types/accordion/Accordion.d.ts.map +1 -1
  356. package/dist/types/banner/Banner.d.ts +1 -1
  357. package/dist/types/banner/Banner.d.ts.map +1 -1
  358. package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  359. package/dist/types/button/Button.d.ts +1 -1
  360. package/dist/types/button/Button.d.ts.map +1 -1
  361. package/dist/types/button/types.d.ts +2 -0
  362. package/dist/types/button/types.d.ts.map +1 -1
  363. package/dist/types/callout/Callout.d.ts +32 -0
  364. package/dist/types/callout/Callout.d.ts.map +1 -0
  365. package/dist/types/callout/index.d.ts +3 -0
  366. package/dist/types/callout/index.d.ts.map +1 -0
  367. package/dist/types/checkbox/Checkbox.d.ts +4 -0
  368. package/dist/types/checkbox/Checkbox.d.ts.map +1 -1
  369. package/dist/types/checkbox-row/CheckboxList.d.ts +17 -0
  370. package/dist/types/checkbox-row/CheckboxList.d.ts.map +1 -0
  371. package/dist/types/checkbox-row/CheckboxRow.d.ts +32 -0
  372. package/dist/types/checkbox-row/CheckboxRow.d.ts.map +1 -0
  373. package/dist/types/checkbox-row/index.d.ts +5 -0
  374. package/dist/types/checkbox-row/index.d.ts.map +1 -0
  375. package/dist/types/disclosure/Disclosure.d.ts +24 -0
  376. package/dist/types/disclosure/Disclosure.d.ts.map +1 -0
  377. package/dist/types/disclosure/index.d.ts +3 -0
  378. package/dist/types/disclosure/index.d.ts.map +1 -0
  379. package/dist/types/drawer/Drawer.d.ts +55 -0
  380. package/dist/types/drawer/Drawer.d.ts.map +1 -0
  381. package/dist/types/drawer/index.d.ts +3 -0
  382. package/dist/types/drawer/index.d.ts.map +1 -0
  383. package/dist/types/empty-state/EmptyState.d.ts +33 -0
  384. package/dist/types/empty-state/EmptyState.d.ts.map +1 -0
  385. package/dist/types/empty-state/index.d.ts +3 -0
  386. package/dist/types/empty-state/index.d.ts.map +1 -0
  387. package/dist/types/error-page/ErrorPage.d.ts.map +1 -1
  388. package/dist/types/header/Header.d.ts +1 -1
  389. package/dist/types/header/Header.d.ts.map +1 -1
  390. package/dist/types/header/HeaderNav.d.ts.map +1 -1
  391. package/dist/types/hooks/DialogLayer.d.ts +21 -0
  392. package/dist/types/hooks/DialogLayer.d.ts.map +1 -0
  393. package/dist/types/hooks/index.d.ts +8 -0
  394. package/dist/types/hooks/index.d.ts.map +1 -1
  395. package/dist/types/hooks/useDialogLayer.d.ts +16 -0
  396. package/dist/types/hooks/useDialogLayer.d.ts.map +1 -0
  397. package/dist/types/hooks/useEdgeFade.d.ts +1 -2
  398. package/dist/types/hooks/useEdgeFade.d.ts.map +1 -1
  399. package/dist/types/hooks/useExitLatch.d.ts +6 -0
  400. package/dist/types/hooks/useExitLatch.d.ts.map +1 -0
  401. package/dist/types/hooks/useHeaderOffset.d.ts +3 -0
  402. package/dist/types/hooks/useHeaderOffset.d.ts.map +1 -0
  403. package/dist/types/hooks/useOpenerElement.d.ts +3 -0
  404. package/dist/types/hooks/useOpenerElement.d.ts.map +1 -0
  405. package/dist/types/hooks/usePresence.d.ts +28 -0
  406. package/dist/types/hooks/usePresence.d.ts.map +1 -0
  407. package/dist/types/hooks/useResizeObserver.d.ts +4 -0
  408. package/dist/types/hooks/useResizeObserver.d.ts.map +1 -0
  409. package/dist/types/hooks/useSelectionIndicator.d.ts +13 -0
  410. package/dist/types/hooks/useSelectionIndicator.d.ts.map +1 -0
  411. package/dist/types/icon-button/IconButton.d.ts +1 -1
  412. package/dist/types/index.d.ts +15 -2
  413. package/dist/types/index.d.ts.map +1 -1
  414. package/dist/types/input/Field.d.ts +35 -0
  415. package/dist/types/input/Field.d.ts.map +1 -0
  416. package/dist/types/input/Input.d.ts +5 -1
  417. package/dist/types/input/Input.d.ts.map +1 -1
  418. package/dist/types/modal/Modal.d.ts.map +1 -1
  419. package/dist/types/notification/Notification.d.ts +4 -0
  420. package/dist/types/notification/Notification.d.ts.map +1 -1
  421. package/dist/types/page-layout/FormLayout.d.ts +15 -0
  422. package/dist/types/page-layout/FormLayout.d.ts.map +1 -0
  423. package/dist/types/page-layout/index.d.ts +2 -0
  424. package/dist/types/page-layout/index.d.ts.map +1 -1
  425. package/dist/types/popover/Popover.d.ts +4 -4
  426. package/dist/types/popover/Popover.d.ts.map +1 -1
  427. package/dist/types/progress-bar/ProgressBar.d.ts +30 -0
  428. package/dist/types/progress-bar/ProgressBar.d.ts.map +1 -0
  429. package/dist/types/progress-bar/SegmentedBar.d.ts +22 -0
  430. package/dist/types/progress-bar/SegmentedBar.d.ts.map +1 -0
  431. package/dist/types/progress-bar/index.d.ts +5 -0
  432. package/dist/types/progress-bar/index.d.ts.map +1 -0
  433. package/dist/types/radio-button/RadioButton.d.ts.map +1 -1
  434. package/dist/types/rich-input/RichInput.d.ts +4 -2
  435. package/dist/types/rich-input/RichInput.d.ts.map +1 -1
  436. package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
  437. package/dist/types/segmented-control/SegmentedControlCard.d.ts +1 -1
  438. package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
  439. package/dist/types/select/Select.d.ts +70 -0
  440. package/dist/types/select/Select.d.ts.map +1 -0
  441. package/dist/types/select/SelectItem.d.ts +58 -0
  442. package/dist/types/select/SelectItem.d.ts.map +1 -0
  443. package/dist/types/select/index.d.ts +5 -0
  444. package/dist/types/select/index.d.ts.map +1 -0
  445. package/dist/types/sidebar/Sidebar.d.ts.map +1 -1
  446. package/dist/types/sidebar/SidebarItem.d.ts +1 -1
  447. package/dist/types/slider/Slider.d.ts +1 -1
  448. package/dist/types/spinner/Spinner.d.ts +28 -0
  449. package/dist/types/spinner/Spinner.d.ts.map +1 -0
  450. package/dist/types/spinner/index.d.ts +2 -0
  451. package/dist/types/spinner/index.d.ts.map +1 -0
  452. package/dist/types/stat-card/StatCard.d.ts +86 -0
  453. package/dist/types/stat-card/StatCard.d.ts.map +1 -0
  454. package/dist/types/stat-card/index.d.ts +3 -0
  455. package/dist/types/stat-card/index.d.ts.map +1 -0
  456. package/dist/types/stat-item/StatItem.d.ts +1 -1
  457. package/dist/types/stat-item/StatItem.d.ts.map +1 -1
  458. package/dist/types/steps/Steps.d.ts +30 -0
  459. package/dist/types/steps/Steps.d.ts.map +1 -0
  460. package/dist/types/steps/index.d.ts +3 -0
  461. package/dist/types/steps/index.d.ts.map +1 -0
  462. package/dist/types/switch/Switch.d.ts.map +1 -1
  463. package/dist/types/table/Table.d.ts +111 -0
  464. package/dist/types/table/Table.d.ts.map +1 -0
  465. package/dist/types/table/index.d.ts +3 -0
  466. package/dist/types/table/index.d.ts.map +1 -0
  467. package/dist/types/tabs/Tabs.d.ts +1 -1
  468. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  469. package/dist/types/tag/Tag.d.ts.map +1 -1
  470. package/dist/types/textarea/Textarea.d.ts +30 -0
  471. package/dist/types/textarea/Textarea.d.ts.map +1 -0
  472. package/dist/types/textarea/index.d.ts +2 -0
  473. package/dist/types/textarea/index.d.ts.map +1 -0
  474. package/dist/types/toast/ToastStack.d.ts +12 -0
  475. package/dist/types/toast/ToastStack.d.ts.map +1 -0
  476. package/dist/types/toast/Toaster.d.ts +11 -0
  477. package/dist/types/toast/Toaster.d.ts.map +1 -0
  478. package/dist/types/toast/index.d.ts +6 -0
  479. package/dist/types/toast/index.d.ts.map +1 -0
  480. package/dist/types/toast/toastStore.d.ts +26 -0
  481. package/dist/types/toast/toastStore.d.ts.map +1 -0
  482. package/dist/types/toast/useToasts.d.ts +4 -0
  483. package/dist/types/toast/useToasts.d.ts.map +1 -0
  484. package/dist/types/token-selector/TokenSelector.d.ts +10 -35
  485. package/dist/types/token-selector/TokenSelector.d.ts.map +1 -1
  486. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  487. package/dist/types/tx-status/TxStatus.d.ts.map +1 -1
  488. package/dist/types/utils/ActionElement.d.ts +1 -1
  489. package/dist/types/utils/dom.d.ts +3 -0
  490. package/dist/types/utils/dom.d.ts.map +1 -0
  491. package/package.json +1 -2
package/README.md CHANGED
@@ -30,6 +30,10 @@ function Widget() {
30
30
 
31
31
  Theme providers (`ThemeProvider`, `CookieThemeProvider`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components. `ThemeSwitcher` is the app-ui-styled theme toggle, since the shared `ThemeToggler` relies on `--lido-ui-*` tokens that app-ui doesn't define. `ThemeSwitcher` needs `CookieThemeProvider`; the static `ThemeProvider` has no toggle, so the switcher renders but clicking does nothing. In SSR apps pass the request cookie as `initialThemeName` so the label is right on first paint (the icon already follows `data-lido-theme` in CSS).
32
32
 
33
+ Set `color: var(--lido-app-ui-color-text-default)` and `font-family: var(--lido-app-ui-font-family)` on `body`: app-ui sets no default text color.
34
+
35
+ Optional mono font: `--lido-app-ui-font-family-mono` (system stack by default) is for keys and hashes (the Operators design renders them in Manrope, so this is opt-in). To use a webfont, load it yourself and override the token on `:root`. See the Foundations/Setup story for the full setup.
36
+
33
37
  ## Router links
34
38
 
35
39
  Every app-ui link (`TextLink`, `NavLink`, `Button` and `IconButton` with `href`, `SmallCard`, `Tag` with `href`, `Breadcrumbs` items with `href`, `Logo` with `href`) renders a plain `<a>` by default. Wrap the app in `LinkProvider` to route in-app hrefs through your router's link component; `externalComponent` does the same for absolute URLs. In-app hash links, `download` links and links with a non-`_self` `target` stay a plain `<a>`; absolute URLs always go to `externalComponent` when one is set. Absolute `http(s)` URLs open in a new tab (`target="_blank"`, `rel="noopener noreferrer"`) unless `target` is passed. Adapters must be `forwardRef` components: under React 18 `ref` is never passed as a prop.
@@ -133,7 +137,7 @@ Override any token after importing the stylesheet. Non-color tokens (radii, typo
133
137
  }
134
138
  ```
135
139
 
136
- The typography mixins and breakpoint definitions are published too, for products running `postcss-mixins` / `postcss-custom-media`:
140
+ The typography and motion mixins (`typography-mixins.css`, `motion-mixins.css`) and breakpoint definitions are published too under `@lidofinance/lido-app-ui/styles/*`, for products running `postcss-mixins` / `postcss-custom-media`. `mixinsDir` picks up both mixin files. The motion mixins use nested rules, so keep `postcss-nested` (or target browsers with native CSS nesting):
137
141
 
138
142
  ```js
139
143
  // postcss.config.mjs
@@ -151,11 +155,18 @@ export default {
151
155
  files: [path.join(stylesDir, 'breakpoints.css')],
152
156
  },
153
157
  'postcss-mixins': { mixinsDir: stylesDir },
158
+ 'postcss-nested': {},
154
159
  'postcss-custom-media': { preserve: false },
155
160
  },
156
161
  }
157
162
  ```
158
163
 
164
+ ## Motion
165
+
166
+ Durations, easings and amplitudes are tokens: enter `--lido-app-ui-duration-{fast,base,slow}`, exit `-exit` variants (shorter), `--lido-app-ui-easing-*`, `--lido-app-ui-motion-{shift,shift-lg,scale}`, `--lido-app-ui-transition-colors`. Override them on `:root` to retune.
167
+
168
+ Custom components can reuse the mixins (`motion-fade`, `motion-pop`, `motion-slide`, `motion-scrim`, `motion-collapse`, `motion-press`; see the `postcss-mixins` setup above) together with the `usePresence` hook. It keeps an element mounted through its exit and returns `{ mounted, status, ref, motionProps }`; spread `motionProps` (`data-state`, `data-motion`) on the element the CSS keys on. Mixins respect `prefers-reduced-motion`.
169
+
159
170
  ## Layout
160
171
 
161
172
  Breakpoints are desktop-first: `-down` is `(width <= N)`, `-up` is `(width > N)`. The queries use range syntax (Safari 16.4+, Chrome 104+, Firefox 63+).
@@ -176,9 +187,13 @@ In CSS use `@media (--lido-app-ui-breakpoint-md-down)`. Responsive props such as
176
187
  <Stack gap={{ base: 24, smDown: 12 }}>{children}</Stack>
177
188
  ```
178
189
 
190
+ For `@container`, which `postcss-custom-media` doesn't resolve, use raw values such as `@container (width <= 400px)`.
191
+
192
+ `Banner`, `Callout`, `EmptyState` and `StatCard` size their layout to their own width via container queries, so give them a definite-width parent; in a shrink-to-fit parent they collapse.
193
+
179
194
  Page shells align to the page gutter, which shrinks on narrow screens: `padding-inline: var(--lido-app-ui-page-gutter)`.
180
195
 
181
- Popovers, tooltips and modals with `withOverlay` portal to `<body>` and stack by `--lido-app-ui-z-index-*`: header 250, popover and modal 1000, toast 1050, tooltip 1100. Keep your own app chrome below 1000. `Modal` `inertOthers` makes the rest of `<body>` inert; mark body-level toast or live-region roots with `data-lido-overlay-keep` to keep them live.
196
+ Popovers, tooltips, drawers and modals with `withOverlay` portal to `<body>` and stack by `--lido-app-ui-z-index-*`: header 250, drawer, popover and modal 1000, toast 1050, tooltip 1100. Keep your own app chrome below 1000. `Modal` `inertOthers` makes the rest of `<body>` inert; mark body-level toast or live-region roots with `data-lido-overlay-keep` to keep them live.
182
197
 
183
198
  ## More
184
199
 
package/dist/README.md CHANGED
@@ -30,6 +30,10 @@ function Widget() {
30
30
 
31
31
  Theme providers (`ThemeProvider`, `CookieThemeProvider`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components. `ThemeSwitcher` is the app-ui-styled theme toggle, since the shared `ThemeToggler` relies on `--lido-ui-*` tokens that app-ui doesn't define. `ThemeSwitcher` needs `CookieThemeProvider`; the static `ThemeProvider` has no toggle, so the switcher renders but clicking does nothing. In SSR apps pass the request cookie as `initialThemeName` so the label is right on first paint (the icon already follows `data-lido-theme` in CSS).
32
32
 
33
+ Set `color: var(--lido-app-ui-color-text-default)` and `font-family: var(--lido-app-ui-font-family)` on `body`: app-ui sets no default text color.
34
+
35
+ Optional mono font: `--lido-app-ui-font-family-mono` (system stack by default) is for keys and hashes (the Operators design renders them in Manrope, so this is opt-in). To use a webfont, load it yourself and override the token on `:root`. See the Foundations/Setup story for the full setup.
36
+
33
37
  ## Router links
34
38
 
35
39
  Every app-ui link (`TextLink`, `NavLink`, `Button` and `IconButton` with `href`, `SmallCard`, `Tag` with `href`, `Breadcrumbs` items with `href`, `Logo` with `href`) renders a plain `<a>` by default. Wrap the app in `LinkProvider` to route in-app hrefs through your router's link component; `externalComponent` does the same for absolute URLs. In-app hash links, `download` links and links with a non-`_self` `target` stay a plain `<a>`; absolute URLs always go to `externalComponent` when one is set. Absolute `http(s)` URLs open in a new tab (`target="_blank"`, `rel="noopener noreferrer"`) unless `target` is passed. Adapters must be `forwardRef` components: under React 18 `ref` is never passed as a prop.
@@ -133,7 +137,7 @@ Override any token after importing the stylesheet. Non-color tokens (radii, typo
133
137
  }
134
138
  ```
135
139
 
136
- The typography mixins and breakpoint definitions are published too, for products running `postcss-mixins` / `postcss-custom-media`:
140
+ The typography and motion mixins (`typography-mixins.css`, `motion-mixins.css`) and breakpoint definitions are published too under `@lidofinance/lido-app-ui/styles/*`, for products running `postcss-mixins` / `postcss-custom-media`. `mixinsDir` picks up both mixin files. The motion mixins use nested rules, so keep `postcss-nested` (or target browsers with native CSS nesting):
137
141
 
138
142
  ```js
139
143
  // postcss.config.mjs
@@ -151,11 +155,18 @@ export default {
151
155
  files: [path.join(stylesDir, 'breakpoints.css')],
152
156
  },
153
157
  'postcss-mixins': { mixinsDir: stylesDir },
158
+ 'postcss-nested': {},
154
159
  'postcss-custom-media': { preserve: false },
155
160
  },
156
161
  }
157
162
  ```
158
163
 
164
+ ## Motion
165
+
166
+ Durations, easings and amplitudes are tokens: enter `--lido-app-ui-duration-{fast,base,slow}`, exit `-exit` variants (shorter), `--lido-app-ui-easing-*`, `--lido-app-ui-motion-{shift,shift-lg,scale}`, `--lido-app-ui-transition-colors`. Override them on `:root` to retune.
167
+
168
+ Custom components can reuse the mixins (`motion-fade`, `motion-pop`, `motion-slide`, `motion-scrim`, `motion-collapse`, `motion-press`; see the `postcss-mixins` setup above) together with the `usePresence` hook. It keeps an element mounted through its exit and returns `{ mounted, status, ref, motionProps }`; spread `motionProps` (`data-state`, `data-motion`) on the element the CSS keys on. Mixins respect `prefers-reduced-motion`.
169
+
159
170
  ## Layout
160
171
 
161
172
  Breakpoints are desktop-first: `-down` is `(width <= N)`, `-up` is `(width > N)`. The queries use range syntax (Safari 16.4+, Chrome 104+, Firefox 63+).
@@ -176,9 +187,13 @@ In CSS use `@media (--lido-app-ui-breakpoint-md-down)`. Responsive props such as
176
187
  <Stack gap={{ base: 24, smDown: 12 }}>{children}</Stack>
177
188
  ```
178
189
 
190
+ For `@container`, which `postcss-custom-media` doesn't resolve, use raw values such as `@container (width <= 400px)`.
191
+
192
+ `Banner`, `Callout`, `EmptyState` and `StatCard` size their layout to their own width via container queries, so give them a definite-width parent; in a shrink-to-fit parent they collapse.
193
+
179
194
  Page shells align to the page gutter, which shrinks on narrow screens: `padding-inline: var(--lido-app-ui-page-gutter)`.
180
195
 
181
- Popovers, tooltips and modals with `withOverlay` portal to `<body>` and stack by `--lido-app-ui-z-index-*`: header 250, popover and modal 1000, toast 1050, tooltip 1100. Keep your own app chrome below 1000. `Modal` `inertOthers` makes the rest of `<body>` inert; mark body-level toast or live-region roots with `data-lido-overlay-keep` to keep them live.
196
+ Popovers, tooltips, drawers and modals with `withOverlay` portal to `<body>` and stack by `--lido-app-ui-z-index-*`: header 250, drawer, popover and modal 1000, toast 1050, tooltip 1100. Keep your own app chrome below 1000. `Modal` `inertOthers` makes the rest of `<body>` inert; mark body-level toast or live-region roots with `data-lido-overlay-keep` to keep them live.
182
197
 
183
198
  ## More
184
199
 
@@ -6,7 +6,7 @@ const react = require('react');
6
6
  const cn = require('classnames');
7
7
  const Accordion_module = require('./Accordion.module.css.cjs');
8
8
  const jsxRuntime = require('react/jsx-runtime');
9
- const IconChevronUp = require('../icons/components/base/IconChevronUp.cjs');
9
+ const usePresence = require('../hooks/usePresence.cjs');
10
10
  const IconChevronDown = require('../icons/components/base/IconChevronDown.cjs');
11
11
 
12
12
  /** Collapsible section, uncontrolled by default; pass `expanded` + `onExpandedChange` to drive it from your own state. */
@@ -25,6 +25,12 @@ const Accordion = _ref => {
25
25
  const [uncontrolledExpanded, setUncontrolledExpanded] = react.useState(defaultExpanded);
26
26
  const isExpanded = expanded ?? uncontrolledExpanded;
27
27
  const contentId = react.useId();
28
+ const {
29
+ ref: presenceRef,
30
+ motionProps
31
+ } = usePresence.usePresence(isExpanded, {
32
+ keepMounted: true
33
+ });
28
34
  const handleToggle = () => {
29
35
  const next = !isExpanded;
30
36
  if (expanded == null) setUncontrolledExpanded(next);
@@ -48,17 +54,16 @@ const Accordion = _ref => {
48
54
  "data-testid": dataTestId?.title,
49
55
  children: title
50
56
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
51
- className: Accordion_module.chevron,
57
+ className: cn(Accordion_module.chevron, isExpanded && Accordion_module.chevronOpen),
52
58
  "aria-hidden": "true",
53
- children: isExpanded ? /*#__PURE__*/jsxRuntime.jsx(IconChevronUp.IconChevronUp, {}) : /*#__PURE__*/jsxRuntime.jsx(IconChevronDown.IconChevronDown, {})
59
+ children: /*#__PURE__*/jsxRuntime.jsx(IconChevronDown.IconChevronDown, {})
54
60
  })]
55
61
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
56
62
  id: contentId,
57
- className: cn(Accordion_module.contentWrapper, {
58
- [Accordion_module.expanded]: isExpanded
59
- }),
63
+ ref: presenceRef,
64
+ className: Accordion_module.contentWrapper,
65
+ ...motionProps,
60
66
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
61
- className: Accordion_module.content,
62
67
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
63
68
  className: Accordion_module.contentInner,
64
69
  "data-testid": dataTestId?.content,
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.cjs","sources":["../../../src/accordion/Accordion.tsx"],"sourcesContent":["import {\n useId,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\n\nimport { IconChevronDown, IconChevronUp } from '../icons'\nimport cn from 'classnames'\n\nimport styles from './Accordion.module.css'\n\nexport type AccordionDataTestId = {\n root?: string\n header?: string\n title?: string\n content?: string\n}\n\nexport type AccordionProps = Omit<ComponentPropsWithoutRef<'div'>, 'title'> & {\n title: ReactNode\n /** Bottom divider; turn it off on the last item of a list. */\n border?: boolean\n defaultExpanded?: boolean\n /** Controlled mode, pair with `onExpandedChange`. */\n expanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n dataTestId?: AccordionDataTestId\n}\n\n/** Collapsible section, uncontrolled by default; pass `expanded` + `onExpandedChange` to drive it from your own state. */\nexport const Accordion = ({\n title,\n border = true,\n defaultExpanded = false,\n expanded,\n onExpandedChange,\n children,\n className,\n dataTestId,\n ...rest\n}: AccordionProps) => {\n const [uncontrolledExpanded, setUncontrolledExpanded] =\n useState(defaultExpanded)\n const isExpanded = expanded ?? uncontrolledExpanded\n const contentId = useId()\n\n const handleToggle = () => {\n const next = !isExpanded\n if (expanded == null) setUncontrolledExpanded(next)\n onExpandedChange?.(next)\n }\n\n return (\n <div\n className={cn(styles.accordion, className, {\n [styles.borderless]: !border,\n })}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <button\n type='button'\n className={styles.header}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleToggle}\n data-testid={dataTestId?.header}\n >\n <span className={styles.title} data-testid={dataTestId?.title}>\n {title}\n </span>\n <span className={styles.chevron} aria-hidden='true'>\n {isExpanded ? <IconChevronUp /> : <IconChevronDown />}\n </span>\n </button>\n <div\n id={contentId}\n className={cn(styles.contentWrapper, {\n [styles.expanded]: isExpanded,\n })}\n >\n <div className={styles.content}>\n <div\n className={styles.contentInner}\n data-testid={dataTestId?.content}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nAccordion.displayName = 'Accordion'\n"],"names":["Accordion","_ref","title","border","defaultExpanded","expanded","onExpandedChange","children","className","dataTestId","rest","uncontrolledExpanded","setUncontrolledExpanded","useState","isExpanded","contentId","useId","handleToggle","next","_jsxs","cn","styles","accordion","borderless","root","type","header","onClick","_jsx","chevron","IconChevronUp","IconChevronDown","id","contentWrapper","content","contentInner","displayName"],"mappings":";;;;;;;;;;;AA8BA;AACaA,MAAAA,SAAS,GAAGC,IAAA,IAUH;EAAA,IAVI;IACxBC,KAAK;AACLC,IAAAA,MAAM,GAAG,IAAI;AACbC,IAAAA,eAAe,GAAG,KAAK;IACvBC,QAAQ;IACRC,gBAAgB;IAChBC,QAAQ;IACRC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACW,GAAC,GAAAT,IAAA,CAAA;EACf,MAAM,CAACU,oBAAoB,EAAEC,uBAAuB,CAAC,GACnDC,cAAQ,CAACT,eAAe,CAAC,CAAA;AAC3B,EAAA,MAAMU,UAAU,GAAGT,QAAQ,IAAIM,oBAAoB,CAAA;AACnD,EAAA,MAAMI,SAAS,GAAGC,WAAK,EAAE,CAAA;EAEzB,MAAMC,YAAY,GAAGA,MAAM;IACzB,MAAMC,IAAI,GAAG,CAACJ,UAAU,CAAA;AACxB,IAAA,IAAIT,QAAQ,IAAI,IAAI,EAAEO,uBAAuB,CAACM,IAAI,CAAC,CAAA;IACnDZ,gBAAgB,GAAGY,IAAI,CAAC,CAAA;GACzB,CAAA;AAED,EAAA,oBACEC,eAAA,CAAA,KAAA,EAAA;IACEX,SAAS,EAAEY,EAAE,CAACC,gBAAM,CAACC,SAAS,EAAEd,SAAS,EAAE;AACzC,MAAA,CAACa,gBAAM,CAACE,UAAU,GAAG,CAACpB,MAAAA;AACxB,KAAC,CAAE;IACH,aAAaM,EAAAA,UAAU,EAAEe,IAAK;AAAA,IAAA,GAC1Bd,IAAI;AAAAH,IAAAA,QAAA,gBAERY,eAAA,CAAA,QAAA,EAAA;AACEM,MAAAA,IAAI,EAAC,QAAQ;MACbjB,SAAS,EAAEa,gBAAM,CAACK,MAAO;AACzB,MAAA,eAAA,EAAeZ,UAAW;AAC1B,MAAA,eAAA,EAAeC,SAAU;AACzBY,MAAAA,OAAO,EAAEV,YAAa;MACtB,aAAaR,EAAAA,UAAU,EAAEiB,MAAO;AAAAnB,MAAAA,QAAA,gBAEhCqB,cAAA,CAAA,MAAA,EAAA;QAAMpB,SAAS,EAAEa,gBAAM,CAACnB,KAAM;QAAC,aAAaO,EAAAA,UAAU,EAAEP,KAAM;AAAAK,QAAAA,QAAA,EAC3DL,KAAAA;OACG,CAAC,eACP0B,cAAA,CAAA,MAAA,EAAA;QAAMpB,SAAS,EAAEa,gBAAM,CAACQ,OAAQ;AAAC,QAAA,aAAA,EAAY,MAAM;AAAAtB,QAAAA,QAAA,EAChDO,UAAU,gBAAGc,cAAA,CAACE,2BAAa,EAAE,EAAA,CAAC,gBAAGF,cAAA,CAACG,+BAAe,EAAE,EAAA,CAAA;AAAC,OACjD,CAAC,CAAA;KACD,CAAC,eACTH,cAAA,CAAA,KAAA,EAAA;AACEI,MAAAA,EAAE,EAAEjB,SAAU;AACdP,MAAAA,SAAS,EAAEY,EAAE,CAACC,gBAAM,CAACY,cAAc,EAAE;QACnC,CAACZ,gBAAM,CAAChB,QAAQ,GAAGS,UAAAA;AACrB,OAAC,CAAE;AAAAP,MAAAA,QAAA,eAEHqB,cAAA,CAAA,KAAA,EAAA;QAAKpB,SAAS,EAAEa,gBAAM,CAACa,OAAQ;AAAA3B,QAAAA,QAAA,eAC7BqB,cAAA,CAAA,KAAA,EAAA;UACEpB,SAAS,EAAEa,gBAAM,CAACc,YAAa;UAC/B,aAAa1B,EAAAA,UAAU,EAAEyB,OAAQ;AAAA3B,UAAAA,QAAA,EAEhCA,QAAAA;SACE,CAAA;OACF,CAAA;AAAC,KACH,CAAC,CAAA;AAAA,GACH,CAAC,CAAA;AAEV,EAAC;AAEDP,SAAS,CAACoC,WAAW,GAAG,WAAW;;;;"}
1
+ {"version":3,"file":"Accordion.cjs","sources":["../../../src/accordion/Accordion.tsx"],"sourcesContent":["import {\n useId,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\n\nimport { usePresence } from '../hooks'\nimport { IconChevronDown } from '../icons'\nimport cn from 'classnames'\n\nimport styles from './Accordion.module.css'\n\nexport type AccordionDataTestId = {\n root?: string\n header?: string\n title?: string\n content?: string\n}\n\nexport type AccordionProps = Omit<ComponentPropsWithoutRef<'div'>, 'title'> & {\n title: ReactNode\n /** Bottom divider; turn it off on the last item of a list. */\n border?: boolean\n defaultExpanded?: boolean\n /** Controlled mode, pair with `onExpandedChange`. */\n expanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n dataTestId?: AccordionDataTestId\n}\n\n/** Collapsible section, uncontrolled by default; pass `expanded` + `onExpandedChange` to drive it from your own state. */\nexport const Accordion = ({\n title,\n border = true,\n defaultExpanded = false,\n expanded,\n onExpandedChange,\n children,\n className,\n dataTestId,\n ...rest\n}: AccordionProps) => {\n const [uncontrolledExpanded, setUncontrolledExpanded] =\n useState(defaultExpanded)\n const isExpanded = expanded ?? uncontrolledExpanded\n const contentId = useId()\n const { ref: presenceRef, motionProps } = usePresence<HTMLDivElement>(\n isExpanded,\n { keepMounted: true },\n )\n\n const handleToggle = () => {\n const next = !isExpanded\n if (expanded == null) setUncontrolledExpanded(next)\n onExpandedChange?.(next)\n }\n\n return (\n <div\n className={cn(styles.accordion, className, {\n [styles.borderless]: !border,\n })}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <button\n type='button'\n className={styles.header}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleToggle}\n data-testid={dataTestId?.header}\n >\n <span className={styles.title} data-testid={dataTestId?.title}>\n {title}\n </span>\n <span\n className={cn(styles.chevron, isExpanded && styles.chevronOpen)}\n aria-hidden='true'\n >\n <IconChevronDown />\n </span>\n </button>\n <div\n id={contentId}\n ref={presenceRef}\n className={styles.contentWrapper}\n {...motionProps}\n >\n <div>\n <div\n className={styles.contentInner}\n data-testid={dataTestId?.content}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nAccordion.displayName = 'Accordion'\n"],"names":["Accordion","_ref","title","border","defaultExpanded","expanded","onExpandedChange","children","className","dataTestId","rest","uncontrolledExpanded","setUncontrolledExpanded","useState","isExpanded","contentId","useId","ref","presenceRef","motionProps","usePresence","keepMounted","handleToggle","next","_jsxs","cn","styles","accordion","borderless","root","type","header","onClick","_jsx","chevron","chevronOpen","IconChevronDown","id","contentWrapper","contentInner","content","displayName"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"accordion":"Accordion-module_accordion__Wzyid","borderless":"Accordion-module_borderless__AX3pr","header":"Accordion-module_header__xrik8","title":"Accordion-module_title__n-YUT","chevron":"Accordion-module_chevron__oFGVg","contentWrapper":"Accordion-module_contentWrapper__UEl1o","expanded":"Accordion-module_expanded__NRyM0","content":"Accordion-module_content__V9Ftc","contentInner":"Accordion-module_contentInner__9z222"};
3
+ const styles = {"accordion":"Accordion-module_accordion__Wzyid","borderless":"Accordion-module_borderless__AX3pr","header":"Accordion-module_header__xrik8","title":"Accordion-module_title__n-YUT","chevron":"Accordion-module_chevron__oFGVg","chevronOpen":"Accordion-module_chevronOpen__Lq6B4","contentWrapper":"Accordion-module_contentWrapper__UEl1o","contentInner":"Accordion-module_contentInner__9z222"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Accordion.module.css.cjs.map
@@ -7,7 +7,7 @@ const cn = require('classnames');
7
7
  const surface_module = require('../utils/surface.module.css.cjs');
8
8
  const AddressButton_module = require('./AddressButton.module.css.cjs');
9
9
  const jsxRuntime = require('react/jsx-runtime');
10
- const IconLoaderCircle = require('../icons/components/base/IconLoaderCircle.cjs');
10
+ const Spinner = require('../spinner/Spinner.cjs');
11
11
  const Address = require('../address/Address.cjs');
12
12
 
13
13
  /** Pill button showing an identicon and the trimmed address. */
@@ -32,8 +32,9 @@ const AddressButton = /*#__PURE__*/react.forwardRef((_ref, ref) => {
32
32
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
33
33
  className: AddressButton_module.slot,
34
34
  "aria-hidden": "true",
35
- children: /*#__PURE__*/jsxRuntime.jsx(IconLoaderCircle.IconLoaderCircle, {
36
- className: AddressButton_module.spinner
35
+ children: /*#__PURE__*/jsxRuntime.jsx(Spinner.Spinner, {
36
+ size: "sm",
37
+ decorative: true
37
38
  })
38
39
  }), "Loading"]
39
40
  }) : /*#__PURE__*/jsxRuntime.jsx(Address.Address, {
@@ -1 +1 @@
1
- {"version":3,"file":"AddressButton.cjs","sources":["../../../src/address-button/AddressButton.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { Address } from '../address'\nimport { IconLoaderCircle } from '../icons'\nimport surfaceStyles from '../utils/surface.module.css'\nimport styles from './AddressButton.module.css'\n\nexport type AddressButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> & {\n address: string\n symbols?: number\n loading?: boolean\n}\n\n/** Pill button showing an identicon and the trimmed address. */\nexport const AddressButton = forwardRef<HTMLButtonElement, AddressButtonProps>(\n (\n {\n address,\n symbols,\n loading = false,\n disabled = false,\n className,\n type = 'button',\n ...rest\n },\n ref,\n ) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n className={cn(\n surfaceStyles.surface,\n styles.button,\n loading && !disabled && styles.loading,\n className,\n )}\n {...rest}\n >\n {loading ? (\n <>\n <span className={styles.slot} aria-hidden='true'>\n <IconLoaderCircle className={styles.spinner} />\n </span>\n Loading\n </>\n ) : (\n <Address address={address} symbols={symbols} identicon={28} />\n )}\n </button>\n ),\n)\n\nAddressButton.displayName = 'AddressButton'\n"],"names":["AddressButton","forwardRef","_ref","ref","address","symbols","loading","disabled","className","type","rest","_jsx","undefined","cn","surfaceStyles","surface","styles","button","children","_jsxs","_Fragment","slot","IconLoaderCircle","spinner","Address","identicon","displayName"],"mappings":";;;;;;;;;;;;AAkBA;AACO,MAAMA,aAAa,gBAAGC,gBAAU,CACrC,CAAAC,IAAA,EAUEC,GAAG,KAAA;EAAA,IATH;IACEC,OAAO;IACPC,OAAO;AACPC,IAAAA,OAAO,GAAG,KAAK;AACfC,IAAAA,QAAQ,GAAG,KAAK;IAChBC,SAAS;AACTC,IAAAA,IAAI,GAAG,QAAQ;IACf,GAAGC,IAAAA;AACL,GAAC,GAAAR,IAAA,CAAA;AAAA,EAAA,oBAGDS,cAAA,CAAA,QAAA,EAAA;AACER,IAAAA,GAAG,EAAEA,GAAI;AACTM,IAAAA,IAAI,EAAEA,IAAK;IACXF,QAAQ,EAAEA,QAAQ,IAAID,OAAQ;IAC9B,WAAWA,EAAAA,OAAO,IAAIM,SAAU;IAChCJ,SAAS,EAAEK,EAAE,CACXC,cAAa,CAACC,OAAO,EACrBC,oBAAM,CAACC,MAAM,EACbX,OAAO,IAAI,CAACC,QAAQ,IAAIS,oBAAM,CAACV,OAAO,EACtCE,SACF,CAAE;AAAA,IAAA,GACEE,IAAI;AAAAQ,IAAAA,QAAA,EAEPZ,OAAO,gBACNa,eAAA,CAAAC,mBAAA,EAAA;AAAAF,MAAAA,QAAA,gBACEP,cAAA,CAAA,MAAA,EAAA;QAAMH,SAAS,EAAEQ,oBAAM,CAACK,IAAK;AAAC,QAAA,aAAA,EAAY,MAAM;QAAAH,QAAA,eAC9CP,cAAA,CAACW,iCAAgB,EAAA;UAACd,SAAS,EAAEQ,oBAAM,CAACO,OAAAA;SAAU,CAAA;AAAC,OAC3C,CAAC,EAET,SAAA,CAAA;AAAA,KAAE,CAAC,gBAEHZ,cAAA,CAACa,eAAO,EAAA;AAACpB,MAAAA,OAAO,EAAEA,OAAQ;AAACC,MAAAA,OAAO,EAAEA,OAAQ;AAACoB,MAAAA,SAAS,EAAE,EAAA;KAAK,CAAA;AAC9D,GACK,CAAC,CAAA;AAAA,CAEb,EAAC;AAEDzB,aAAa,CAAC0B,WAAW,GAAG,eAAe;;;;"}
1
+ {"version":3,"file":"AddressButton.cjs","sources":["../../../src/address-button/AddressButton.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { Address } from '../address'\nimport { Spinner } from '../spinner'\nimport surfaceStyles from '../utils/surface.module.css'\nimport styles from './AddressButton.module.css'\n\nexport type AddressButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> & {\n address: string\n symbols?: number\n loading?: boolean\n}\n\n/** Pill button showing an identicon and the trimmed address. */\nexport const AddressButton = forwardRef<HTMLButtonElement, AddressButtonProps>(\n (\n {\n address,\n symbols,\n loading = false,\n disabled = false,\n className,\n type = 'button',\n ...rest\n },\n ref,\n ) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n className={cn(\n surfaceStyles.surface,\n styles.button,\n loading && !disabled && styles.loading,\n className,\n )}\n {...rest}\n >\n {loading ? (\n <>\n <span className={styles.slot} aria-hidden='true'>\n <Spinner size='sm' decorative />\n </span>\n Loading\n </>\n ) : (\n <Address address={address} symbols={symbols} identicon={28} />\n )}\n </button>\n ),\n)\n\nAddressButton.displayName = 'AddressButton'\n"],"names":["AddressButton","forwardRef","_ref","ref","address","symbols","loading","disabled","className","type","rest","_jsx","undefined","cn","surfaceStyles","surface","styles","button","children","_jsxs","_Fragment","slot","Spinner","size","decorative","Address","identicon","displayName"],"mappings":";;;;;;;;;;;;AAkBA;AACO,MAAMA,aAAa,gBAAGC,gBAAU,CACrC,CAAAC,IAAA,EAUEC,GAAG,KAAA;EAAA,IATH;IACEC,OAAO;IACPC,OAAO;AACPC,IAAAA,OAAO,GAAG,KAAK;AACfC,IAAAA,QAAQ,GAAG,KAAK;IAChBC,SAAS;AACTC,IAAAA,IAAI,GAAG,QAAQ;IACf,GAAGC,IAAAA;AACL,GAAC,GAAAR,IAAA,CAAA;AAAA,EAAA,oBAGDS,cAAA,CAAA,QAAA,EAAA;AACER,IAAAA,GAAG,EAAEA,GAAI;AACTM,IAAAA,IAAI,EAAEA,IAAK;IACXF,QAAQ,EAAEA,QAAQ,IAAID,OAAQ;IAC9B,WAAWA,EAAAA,OAAO,IAAIM,SAAU;IAChCJ,SAAS,EAAEK,EAAE,CACXC,cAAa,CAACC,OAAO,EACrBC,oBAAM,CAACC,MAAM,EACbX,OAAO,IAAI,CAACC,QAAQ,IAAIS,oBAAM,CAACV,OAAO,EACtCE,SACF,CAAE;AAAA,IAAA,GACEE,IAAI;AAAAQ,IAAAA,QAAA,EAEPZ,OAAO,gBACNa,eAAA,CAAAC,mBAAA,EAAA;AAAAF,MAAAA,QAAA,gBACEP,cAAA,CAAA,MAAA,EAAA;QAAMH,SAAS,EAAEQ,oBAAM,CAACK,IAAK;AAAC,QAAA,aAAA,EAAY,MAAM;QAAAH,QAAA,eAC9CP,cAAA,CAACW,eAAO,EAAA;AAACC,UAAAA,IAAI,EAAC,IAAI;UAACC,UAAU,EAAA,IAAA;SAAE,CAAA;AAAC,OAC5B,CAAC,EAET,SAAA,CAAA;AAAA,KAAE,CAAC,gBAEHb,cAAA,CAACc,eAAO,EAAA;AAACrB,MAAAA,OAAO,EAAEA,OAAQ;AAACC,MAAAA,OAAO,EAAEA,OAAQ;AAACqB,MAAAA,SAAS,EAAE,EAAA;KAAK,CAAA;AAC9D,GACK,CAAC,CAAA;AAAA,CAEb,EAAC;AAED1B,aAAa,CAAC2B,WAAW,GAAG,eAAe;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"button":"AddressButton-module_button__cNJUm","loading":"AddressButton-module_loading__TmxUZ","slot":"AddressButton-module_slot__A5Xbe","spinner":"AddressButton-module_spinner__JztAP","spin":"AddressButton-module_spin__no7O5"};
3
+ const styles = {"button":"AddressButton-module_button__cNJUm","loading":"AddressButton-module_loading__TmxUZ","slot":"AddressButton-module_slot__A5Xbe"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=AddressButton.module.css.cjs.map
@@ -24,7 +24,10 @@ const Badge = _ref => {
24
24
  "aria-hidden": "true",
25
25
  "data-testid": dataTestId?.icon,
26
26
  children: icon
27
- }), children]
27
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
28
+ className: Badge_module.label,
29
+ children: children
30
+ })]
28
31
  });
29
32
  };
30
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.cjs","sources":["../../../src/badge/Badge.tsx"],"sourcesContent":["import cn from 'classnames'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport styles from './Badge.module.css'\n\nexport type BadgeDataTestId = {\n root?: string\n icon?: string\n}\n\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & {\n /** Optional glyph before the label. Omitted entirely when not passed. */\n icon?: ReactNode\n dataTestId?: BadgeDataTestId\n}\n\n/** Bordered pill for a single trust/verification marker (audited, verified). */\nexport const Badge = ({\n icon,\n className,\n children,\n dataTestId,\n ...rest\n}: BadgeProps) => (\n <span\n className={cn(styles.badge, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {icon && (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.icon}\n >\n {icon}\n </span>\n )}\n {children}\n </span>\n)\n"],"names":["Badge","_ref","icon","className","children","dataTestId","rest","_jsxs","cn","styles","badge","root","_jsx"],"mappings":";;;;;;;;AAeA;AACO,MAAMA,KAAK,GAAGC,IAAA,IAAA;EAAA,IAAC;IACpBC,IAAI;IACJC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACV,GAAGC,IAAAA;AACO,GAAC,GAAAL,IAAA,CAAA;AAAA,EAAA,oBACXM,eAAA,CAAA,MAAA,EAAA;IACEJ,SAAS,EAAEK,EAAE,CAACC,YAAM,CAACC,KAAK,EAAEP,SAAS,CAAE;IACvC,aAAaE,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;IAAAF,QAAA,EAAA,CAEPF,IAAI,iBACHU,cAAA,CAAA,MAAA,EAAA;MACET,SAAS,EAAEM,YAAM,CAACP,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaG,EAAAA,UAAU,EAAEH,IAAK;AAAAE,MAAAA,QAAA,EAE7BF,IAAAA;KACG,CACP,EACAE,QAAQ,CAAA;AAAA,GACL,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Badge.cjs","sources":["../../../src/badge/Badge.tsx"],"sourcesContent":["import cn from 'classnames'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport styles from './Badge.module.css'\n\nexport type BadgeDataTestId = {\n root?: string\n icon?: string\n}\n\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & {\n /** Optional glyph before the label. Omitted entirely when not passed. */\n icon?: ReactNode\n dataTestId?: BadgeDataTestId\n}\n\n/** Bordered pill for a single trust/verification marker (audited, verified). */\nexport const Badge = ({\n icon,\n className,\n children,\n dataTestId,\n ...rest\n}: BadgeProps) => (\n <span\n className={cn(styles.badge, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {icon && (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.icon}\n >\n {icon}\n </span>\n )}\n <span className={styles.label}>{children}</span>\n </span>\n)\n"],"names":["Badge","_ref","icon","className","children","dataTestId","rest","_jsxs","cn","styles","badge","root","_jsx","label"],"mappings":";;;;;;;;AAeA;AACO,MAAMA,KAAK,GAAGC,IAAA,IAAA;EAAA,IAAC;IACpBC,IAAI;IACJC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACV,GAAGC,IAAAA;AACO,GAAC,GAAAL,IAAA,CAAA;AAAA,EAAA,oBACXM,eAAA,CAAA,MAAA,EAAA;IACEJ,SAAS,EAAEK,EAAE,CAACC,YAAM,CAACC,KAAK,EAAEP,SAAS,CAAE;IACvC,aAAaE,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;IAAAF,QAAA,EAAA,CAEPF,IAAI,iBACHU,cAAA,CAAA,MAAA,EAAA;MACET,SAAS,EAAEM,YAAM,CAACP,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaG,EAAAA,UAAU,EAAEH,IAAK;AAAAE,MAAAA,QAAA,EAE7BF,IAAAA;KACG,CACP,eACDU,cAAA,CAAA,MAAA,EAAA;MAAMT,SAAS,EAAEM,YAAM,CAACI,KAAM;AAAAT,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAO,CAAC,CAAA;AAAA,GAC5C,CAAC,CAAA;AAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"badge":"Badge-module_badge__ikDSa","icon":"Badge-module_icon__lkt9n"};
3
+ const styles = {"badge":"Badge-module_badge__ikDSa","label":"Badge-module_label__FUOSJ","icon":"Badge-module_icon__lkt9n"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Badge.module.css.cjs.map
@@ -6,7 +6,7 @@ const cn = require('classnames');
6
6
  const Banner_module = require('./Banner.module.css.cjs');
7
7
  const jsxRuntime = require('react/jsx-runtime');
8
8
 
9
- /** Compact card row: icon, title and description, with an optional `action` slot on the right (usually a `Button`). */
9
+ /** Compact card row: icon, title and description, with an optional `action` slot on the right (usually a `Button`). Needs a definite-width parent (it fills it). */
10
10
  const Banner = _ref => {
11
11
  let {
12
12
  icon,
@@ -17,33 +17,36 @@ const Banner = _ref => {
17
17
  dataTestId,
18
18
  ...rest
19
19
  } = _ref;
20
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
20
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
21
21
  className: cn(Banner_module.banner, className),
22
22
  "data-testid": dataTestId?.root,
23
23
  ...rest,
24
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
25
- className: Banner_module.content,
26
- children: [icon ? /*#__PURE__*/jsxRuntime.jsx("span", {
27
- className: Banner_module.icon,
28
- "data-testid": dataTestId?.icon,
29
- children: icon
30
- }) : null, /*#__PURE__*/jsxRuntime.jsxs("div", {
31
- className: Banner_module.text,
32
- children: [/*#__PURE__*/jsxRuntime.jsx("p", {
33
- className: Banner_module.title,
34
- "data-testid": dataTestId?.title,
35
- children: title
36
- }), description ? /*#__PURE__*/jsxRuntime.jsx("p", {
37
- className: Banner_module.description,
38
- "data-testid": dataTestId?.description,
39
- children: description
40
- }) : null]
41
- })]
42
- }), action ? /*#__PURE__*/jsxRuntime.jsx("div", {
43
- className: Banner_module.action,
44
- "data-testid": dataTestId?.action,
45
- children: action
46
- }) : null]
24
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
25
+ className: Banner_module.inner,
26
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
27
+ className: Banner_module.content,
28
+ children: [icon ? /*#__PURE__*/jsxRuntime.jsx("span", {
29
+ className: Banner_module.icon,
30
+ "data-testid": dataTestId?.icon,
31
+ children: icon
32
+ }) : null, /*#__PURE__*/jsxRuntime.jsxs("div", {
33
+ className: Banner_module.text,
34
+ children: [/*#__PURE__*/jsxRuntime.jsx("p", {
35
+ className: Banner_module.title,
36
+ "data-testid": dataTestId?.title,
37
+ children: title
38
+ }), description ? /*#__PURE__*/jsxRuntime.jsx("p", {
39
+ className: Banner_module.description,
40
+ "data-testid": dataTestId?.description,
41
+ children: description
42
+ }) : null]
43
+ })]
44
+ }), action ? /*#__PURE__*/jsxRuntime.jsx("div", {
45
+ className: Banner_module.action,
46
+ "data-testid": dataTestId?.action,
47
+ children: action
48
+ }) : null]
49
+ })
47
50
  });
48
51
  };
49
52
  Banner.displayName = 'Banner';
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.cjs","sources":["../../../src/banner/Banner.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Banner.module.css'\n\nexport type BannerDataTestId = {\n root?: string\n icon?: string\n title?: string\n description?: string\n action?: string\n}\n\nexport type BannerProps = ComponentPropsWithoutRef<'div'> & {\n icon?: ReactNode\n title: ReactNode\n description?: ReactNode\n action?: ReactNode\n dataTestId?: BannerDataTestId\n}\n\n/** Compact card row: icon, title and description, with an optional `action` slot on the right (usually a `Button`). */\nexport const Banner = ({\n icon,\n title,\n description,\n action,\n className,\n dataTestId,\n ...rest\n}: BannerProps) => (\n <div\n className={cn(styles.banner, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <div className={styles.content}>\n {icon ? (\n <span className={styles.icon} data-testid={dataTestId?.icon}>\n {icon}\n </span>\n ) : null}\n <div className={styles.text}>\n <p className={styles.title} data-testid={dataTestId?.title}>\n {title}\n </p>\n {description ? (\n <p\n className={styles.description}\n data-testid={dataTestId?.description}\n >\n {description}\n </p>\n ) : null}\n </div>\n </div>\n {action ? (\n <div className={styles.action} data-testid={dataTestId?.action}>\n {action}\n </div>\n ) : null}\n </div>\n)\n\nBanner.displayName = 'Banner'\n"],"names":["Banner","_ref","icon","title","description","action","className","dataTestId","rest","_jsxs","cn","styles","banner","root","children","content","_jsx","text","displayName"],"mappings":";;;;;;;;AAsBA;AACO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IACrBC,IAAI;IACJC,KAAK;IACLC,WAAW;IACXC,MAAM;IACNC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACQ,GAAC,GAAAP,IAAA,CAAA;AAAA,EAAA,oBACZQ,eAAA,CAAA,KAAA,EAAA;IACEH,SAAS,EAAEI,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEN,SAAS,CAAE;IACxC,aAAaC,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;AAAAM,IAAAA,QAAA,gBAERL,eAAA,CAAA,KAAA,EAAA;MAAKH,SAAS,EAAEK,aAAM,CAACI,OAAQ;MAAAD,QAAA,EAAA,CAC5BZ,IAAI,gBACHc,cAAA,CAAA,MAAA,EAAA;QAAMV,SAAS,EAAEK,aAAM,CAACT,IAAK;QAAC,aAAaK,EAAAA,UAAU,EAAEL,IAAK;AAAAY,QAAAA,QAAA,EACzDZ,IAAAA;AAAI,OACD,CAAC,GACL,IAAI,eACRO,eAAA,CAAA,KAAA,EAAA;QAAKH,SAAS,EAAEK,aAAM,CAACM,IAAK;AAAAH,QAAAA,QAAA,gBAC1BE,cAAA,CAAA,GAAA,EAAA;UAAGV,SAAS,EAAEK,aAAM,CAACR,KAAM;UAAC,aAAaI,EAAAA,UAAU,EAAEJ,KAAM;AAAAW,UAAAA,QAAA,EACxDX,KAAAA;AAAK,SACL,CAAC,EACHC,WAAW,gBACVY,cAAA,CAAA,GAAA,EAAA;UACEV,SAAS,EAAEK,aAAM,CAACP,WAAY;UAC9B,aAAaG,EAAAA,UAAU,EAAEH,WAAY;AAAAU,UAAAA,QAAA,EAEpCV,WAAAA;SACA,CAAC,GACF,IAAI,CAAA;AAAA,OACL,CAAC,CAAA;AAAA,KACH,CAAC,EACLC,MAAM,gBACLW,cAAA,CAAA,KAAA,EAAA;MAAKV,SAAS,EAAEK,aAAM,CAACN,MAAO;MAAC,aAAaE,EAAAA,UAAU,EAAEF,MAAO;AAAAS,MAAAA,QAAA,EAC5DT,MAAAA;KACE,CAAC,GACJ,IAAI,CAAA;AAAA,GACL,CAAC,CAAA;AAAA,EACP;AAEDL,MAAM,CAACkB,WAAW,GAAG,QAAQ;;;;"}
1
+ {"version":3,"file":"Banner.cjs","sources":["../../../src/banner/Banner.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Banner.module.css'\n\nexport type BannerDataTestId = {\n root?: string\n icon?: string\n title?: string\n description?: string\n action?: string\n}\n\nexport type BannerProps = ComponentPropsWithoutRef<'div'> & {\n icon?: ReactNode\n title: ReactNode\n description?: ReactNode\n action?: ReactNode\n dataTestId?: BannerDataTestId\n}\n\n/** Compact card row: icon, title and description, with an optional `action` slot on the right (usually a `Button`). Needs a definite-width parent (it fills it). */\nexport const Banner = ({\n icon,\n title,\n description,\n action,\n className,\n dataTestId,\n ...rest\n}: BannerProps) => (\n <div\n className={cn(styles.banner, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <div className={styles.inner}>\n <div className={styles.content}>\n {icon ? (\n <span className={styles.icon} data-testid={dataTestId?.icon}>\n {icon}\n </span>\n ) : null}\n <div className={styles.text}>\n <p className={styles.title} data-testid={dataTestId?.title}>\n {title}\n </p>\n {description ? (\n <p\n className={styles.description}\n data-testid={dataTestId?.description}\n >\n {description}\n </p>\n ) : null}\n </div>\n </div>\n {action ? (\n <div className={styles.action} data-testid={dataTestId?.action}>\n {action}\n </div>\n ) : null}\n </div>\n </div>\n)\n\nBanner.displayName = 'Banner'\n"],"names":["Banner","_ref","icon","title","description","action","className","dataTestId","rest","_jsx","cn","styles","banner","root","children","_jsxs","inner","content","text","displayName"],"mappings":";;;;;;;;AAsBA;AACO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IACrBC,IAAI;IACJC,KAAK;IACLC,WAAW;IACXC,MAAM;IACNC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACQ,GAAC,GAAAP,IAAA,CAAA;AAAA,EAAA,oBACZQ,cAAA,CAAA,KAAA,EAAA;IACEH,SAAS,EAAEI,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEN,SAAS,CAAE;IACxC,aAAaC,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;AAAAM,IAAAA,QAAA,eAERC,eAAA,CAAA,KAAA,EAAA;MAAKT,SAAS,EAAEK,aAAM,CAACK,KAAM;AAAAF,MAAAA,QAAA,gBAC3BC,eAAA,CAAA,KAAA,EAAA;QAAKT,SAAS,EAAEK,aAAM,CAACM,OAAQ;QAAAH,QAAA,EAAA,CAC5BZ,IAAI,gBACHO,cAAA,CAAA,MAAA,EAAA;UAAMH,SAAS,EAAEK,aAAM,CAACT,IAAK;UAAC,aAAaK,EAAAA,UAAU,EAAEL,IAAK;AAAAY,UAAAA,QAAA,EACzDZ,IAAAA;AAAI,SACD,CAAC,GACL,IAAI,eACRa,eAAA,CAAA,KAAA,EAAA;UAAKT,SAAS,EAAEK,aAAM,CAACO,IAAK;AAAAJ,UAAAA,QAAA,gBAC1BL,cAAA,CAAA,GAAA,EAAA;YAAGH,SAAS,EAAEK,aAAM,CAACR,KAAM;YAAC,aAAaI,EAAAA,UAAU,EAAEJ,KAAM;AAAAW,YAAAA,QAAA,EACxDX,KAAAA;AAAK,WACL,CAAC,EACHC,WAAW,gBACVK,cAAA,CAAA,GAAA,EAAA;YACEH,SAAS,EAAEK,aAAM,CAACP,WAAY;YAC9B,aAAaG,EAAAA,UAAU,EAAEH,WAAY;AAAAU,YAAAA,QAAA,EAEpCV,WAAAA;WACA,CAAC,GACF,IAAI,CAAA;AAAA,SACL,CAAC,CAAA;AAAA,OACH,CAAC,EACLC,MAAM,gBACLI,cAAA,CAAA,KAAA,EAAA;QAAKH,SAAS,EAAEK,aAAM,CAACN,MAAO;QAAC,aAAaE,EAAAA,UAAU,EAAEF,MAAO;AAAAS,QAAAA,QAAA,EAC5DT,MAAAA;OACE,CAAC,GACJ,IAAI,CAAA;KACL,CAAA;AAAC,GACH,CAAC,CAAA;AAAA,EACP;AAEDL,MAAM,CAACmB,WAAW,GAAG,QAAQ;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"banner":"Banner-module_banner__bQhms","content":"Banner-module_content__44TzS","icon":"Banner-module_icon__PkyAA","text":"Banner-module_text__2q-km","title":"Banner-module_title__gUKq0","description":"Banner-module_description__tosgg","action":"Banner-module_action__OKt2C"};
3
+ const styles = {"banner":"Banner-module_banner__bQhms","inner":"Banner-module_inner__mahaD","content":"Banner-module_content__44TzS","icon":"Banner-module_icon__PkyAA","text":"Banner-module_text__2q-km","title":"Banner-module_title__gUKq0","description":"Banner-module_description__tosgg","action":"Banner-module_action__OKt2C"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Banner.module.css.cjs.map
@@ -8,6 +8,7 @@ const Breadcrumbs_module = require('./Breadcrumbs.module.css.cjs');
8
8
  const jsxRuntime = require('react/jsx-runtime');
9
9
  const useEdgeFade = require('../hooks/useEdgeFade.cjs');
10
10
  const useIsomorphicLayoutEffect = require('../hooks/useIsomorphicLayoutEffect.cjs');
11
+ const useResizeObserver = require('../hooks/useResizeObserver.cjs');
11
12
  const ActionElement = require('../utils/ActionElement.cjs');
12
13
  const IconChevronRight = require('../icons/components/base/IconChevronRight.cjs');
13
14
 
@@ -33,13 +34,14 @@ const BreadcrumbsTrail = /*#__PURE__*/react.forwardRef((_ref, ref) => {
33
34
  } = _ref;
34
35
  const listRef = react.useRef(null);
35
36
  const {
36
- sync,
37
- onFocus
37
+ sync
38
38
  } = useEdgeFade.useEdgeFade(listRef);
39
39
  const trailRef = react.useRef();
40
+ const hiddenRef = react.useRef();
40
41
  useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
41
42
  const list = listRef.current;
42
43
  if (!list) return;
44
+ hiddenRef.current ??= list.clientWidth === 0;
43
45
  const trail = Array.from(list.children, li => li.textContent).join('\u0000');
44
46
  if (trail !== trailRef.current) {
45
47
  trailRef.current = trail;
@@ -49,20 +51,15 @@ const BreadcrumbsTrail = /*#__PURE__*/react.forwardRef((_ref, ref) => {
49
51
  });
50
52
 
51
53
  // A list mounted hidden (display: none) can't scroll on mount, so scroll once it gets a width.
52
- react.useEffect(() => {
54
+ useResizeObserver.useResizeObserver(listRef, () => {
53
55
  const list = listRef.current;
54
- if (!list || typeof ResizeObserver === 'undefined') return;
55
- let hidden = list.clientWidth === 0;
56
- const observer = new ResizeObserver(() => {
57
- const wasHidden = hidden;
58
- hidden = list.clientWidth === 0;
59
- if (!wasHidden || hidden) return;
60
- list.scrollLeft = list.scrollWidth;
61
- sync();
62
- });
63
- observer.observe(list);
64
- return () => observer.disconnect();
65
- }, [sync]);
56
+ if (!list) return;
57
+ const wasHidden = hiddenRef.current;
58
+ hiddenRef.current = list.clientWidth === 0;
59
+ if (!wasHidden || hiddenRef.current) return;
60
+ list.scrollLeft = list.scrollWidth;
61
+ sync();
62
+ });
66
63
  return /*#__PURE__*/jsxRuntime.jsx("nav", {
67
64
  ref: ref,
68
65
  "aria-label": "Breadcrumb",
@@ -73,8 +70,6 @@ const BreadcrumbsTrail = /*#__PURE__*/react.forwardRef((_ref, ref) => {
73
70
  ref: listRef,
74
71
  className: Breadcrumbs_module.list,
75
72
  "data-testid": dataTestId?.list,
76
- onScroll: sync,
77
- onFocus: onFocus,
78
73
  onPointerOver: syncTitle,
79
74
  children: items.map((_ref2, index) => {
80
75
  let {
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { forwardRef, useEffect, useRef } from 'react'\nimport type { HTMLAttributes, PointerEvent, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport { useEdgeFade, useIsomorphicLayoutEffect } from '../hooks'\nimport { IconChevronRight } from '../icons'\nimport { ActionElement, type ActionElementProps } from '../utils'\nimport styles from './Breadcrumbs.module.css'\n\nexport type BreadcrumbItemDataTestId = { root?: string }\n\nexport type BreadcrumbItem = ActionElementProps & {\n label: ReactNode\n children?: never\n /** Test id of the item's label element, for link, plain and current items alike. */\n dataTestId?: BreadcrumbItemDataTestId\n}\n\nexport type BreadcrumbsDataTestId = { root?: string; list?: string }\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n /** `href` renders a link, only `onClick` a button, anything else (and `disabled`) plain text; the last item is the current page; an empty array renders nothing. */\n items: BreadcrumbItem[]\n dataTestId?: BreadcrumbsDataTestId\n}\n\nconst ANCHOR_ONLY = [\n 'href',\n 'onClick',\n 'disabled',\n 'external',\n 'linkProps',\n 'type',\n 'target',\n 'rel',\n 'download',\n] as const\n\nconst spanAttrs = (props: Omit<BreadcrumbItem, 'label'>) => {\n const attrs: Record<string, unknown> = { ...props }\n for (const key of ANCHOR_ONLY) delete attrs[key]\n return attrs as HTMLAttributes<HTMLSpanElement>\n}\n\nconst syncTitle = (e: PointerEvent<HTMLElement>) => {\n const el = (e.target as Element).closest('[data-label]')\n if (!el) return\n if (el.scrollWidth > el.clientWidth)\n el.setAttribute('title', el.textContent ?? '')\n else el.removeAttribute('title')\n}\n\nconst BreadcrumbsTrail = forwardRef<HTMLElement, BreadcrumbsProps>(\n ({ items, className, dataTestId, ...rest }, ref) => {\n const listRef = useRef<HTMLOListElement>(null)\n\n const { sync, onFocus } = useEdgeFade(listRef)\n const trailRef = useRef<string>()\n\n useIsomorphicLayoutEffect(() => {\n const list = listRef.current\n if (!list) return\n const trail = Array.from(list.children, (li) => li.textContent).join(\n '\\u0000',\n )\n if (trail !== trailRef.current) {\n trailRef.current = trail\n list.scrollLeft = list.scrollWidth\n }\n sync()\n })\n\n // A list mounted hidden (display: none) can't scroll on mount, so scroll once it gets a width.\n useEffect(() => {\n const list = listRef.current\n if (!list || typeof ResizeObserver === 'undefined') return\n let hidden = list.clientWidth === 0\n const observer = new ResizeObserver(() => {\n const wasHidden = hidden\n hidden = list.clientWidth === 0\n if (!wasHidden || hidden) return\n list.scrollLeft = list.scrollWidth\n sync()\n })\n observer.observe(list)\n return () => observer.disconnect()\n }, [sync])\n\n return (\n <nav\n ref={ref}\n aria-label='Breadcrumb'\n className={cn(styles.nav, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <ol\n ref={listRef}\n className={styles.list}\n data-testid={dataTestId?.list}\n onScroll={sync}\n onFocus={onFocus}\n onPointerOver={syncTitle}\n >\n {items.map(\n ({ label, dataTestId: itemTestId, ...itemProps }, index) => {\n const current = index === items.length - 1\n const labelAttrs =\n itemProps.title === undefined ? { 'data-label': '' } : {}\n const interactive =\n !current &&\n (itemProps.href !== undefined ||\n itemProps.onClick !== undefined) &&\n !itemProps.disabled\n return (\n <li key={index} className={styles.item}>\n {interactive ? (\n <ActionElement\n data-testid={itemTestId?.root}\n {...itemProps}\n {...labelAttrs}\n className={cn(\n styles.label,\n styles.link,\n itemProps.className,\n )}\n >\n {label}\n </ActionElement>\n ) : (\n <span\n data-testid={itemTestId?.root}\n {...spanAttrs(itemProps)}\n {...labelAttrs}\n {...(current && { 'aria-current': 'page' as const })}\n className={cn(\n styles.label,\n current && styles.current,\n itemProps.className,\n )}\n >\n {label}\n </span>\n )}\n {!current && (\n <IconChevronRight\n className={styles.separator}\n aria-hidden='true'\n />\n )}\n </li>\n )\n },\n )}\n </ol>\n </nav>\n )\n },\n)\n\nBreadcrumbsTrail.displayName = 'BreadcrumbsTrail'\n\n/** Trail of ancestors ending in the current page (`aria-current=\"page\"`); scrolls horizontally with an edge fade when it overflows. */\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n (props, ref) =>\n // Separate component so its mount effects attach once the list exists.\n props.items.length === 0 ? null : <BreadcrumbsTrail ref={ref} {...props} />,\n)\n\nBreadcrumbs.displayName = 'Breadcrumbs'\n"],"names":["ANCHOR_ONLY","spanAttrs","props","attrs","key","syncTitle","e","el","target","closest","scrollWidth","clientWidth","setAttribute","textContent","removeAttribute","BreadcrumbsTrail","forwardRef","_ref","ref","items","className","dataTestId","rest","listRef","useRef","sync","onFocus","useEdgeFade","trailRef","useIsomorphicLayoutEffect","list","current","trail","Array","from","children","li","join","scrollLeft","useEffect","ResizeObserver","hidden","observer","wasHidden","observe","disconnect","_jsx","cn","styles","nav","root","onScroll","onPointerOver","map","_ref2","index","label","itemTestId","itemProps","length","labelAttrs","title","undefined","interactive","href","onClick","disabled","_jsxs","item","ActionElement","link","IconChevronRight","separator","displayName","Breadcrumbs"],"mappings":"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"}
1
+ {"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { forwardRef, useRef } from 'react'\nimport type { HTMLAttributes, PointerEvent, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport {\n useEdgeFade,\n useIsomorphicLayoutEffect,\n useResizeObserver,\n} from '../hooks'\nimport { IconChevronRight } from '../icons'\nimport { ActionElement, type ActionElementProps } from '../utils'\nimport styles from './Breadcrumbs.module.css'\n\nexport type BreadcrumbItemDataTestId = { root?: string }\n\nexport type BreadcrumbItem = ActionElementProps & {\n label: ReactNode\n children?: never\n /** Test id of the item's label element, for link, plain and current items alike. */\n dataTestId?: BreadcrumbItemDataTestId\n}\n\nexport type BreadcrumbsDataTestId = { root?: string; list?: string }\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n /** `href` renders a link, only `onClick` a button, anything else (and `disabled`) plain text; the last item is the current page; an empty array renders nothing. */\n items: BreadcrumbItem[]\n dataTestId?: BreadcrumbsDataTestId\n}\n\nconst ANCHOR_ONLY = [\n 'href',\n 'onClick',\n 'disabled',\n 'external',\n 'linkProps',\n 'type',\n 'target',\n 'rel',\n 'download',\n] as const\n\nconst spanAttrs = (props: Omit<BreadcrumbItem, 'label'>) => {\n const attrs: Record<string, unknown> = { ...props }\n for (const key of ANCHOR_ONLY) delete attrs[key]\n return attrs as HTMLAttributes<HTMLSpanElement>\n}\n\nconst syncTitle = (e: PointerEvent<HTMLElement>) => {\n const el = (e.target as Element).closest('[data-label]')\n if (!el) return\n if (el.scrollWidth > el.clientWidth)\n el.setAttribute('title', el.textContent ?? '')\n else el.removeAttribute('title')\n}\n\nconst BreadcrumbsTrail = forwardRef<HTMLElement, BreadcrumbsProps>(\n ({ items, className, dataTestId, ...rest }, ref) => {\n const listRef = useRef<HTMLOListElement>(null)\n\n const { sync } = useEdgeFade(listRef)\n const trailRef = useRef<string>()\n const hiddenRef = useRef<boolean>()\n\n useIsomorphicLayoutEffect(() => {\n const list = listRef.current\n if (!list) return\n hiddenRef.current ??= list.clientWidth === 0\n const trail = Array.from(list.children, (li) => li.textContent).join(\n '\\u0000',\n )\n if (trail !== trailRef.current) {\n trailRef.current = trail\n list.scrollLeft = list.scrollWidth\n }\n sync()\n })\n\n // A list mounted hidden (display: none) can't scroll on mount, so scroll once it gets a width.\n useResizeObserver(listRef, () => {\n const list = listRef.current\n if (!list) return\n const wasHidden = hiddenRef.current\n hiddenRef.current = list.clientWidth === 0\n if (!wasHidden || hiddenRef.current) return\n list.scrollLeft = list.scrollWidth\n sync()\n })\n\n return (\n <nav\n ref={ref}\n aria-label='Breadcrumb'\n className={cn(styles.nav, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <ol\n ref={listRef}\n className={styles.list}\n data-testid={dataTestId?.list}\n onPointerOver={syncTitle}\n >\n {items.map(\n ({ label, dataTestId: itemTestId, ...itemProps }, index) => {\n const current = index === items.length - 1\n const labelAttrs =\n itemProps.title === undefined ? { 'data-label': '' } : {}\n const interactive =\n !current &&\n (itemProps.href !== undefined ||\n itemProps.onClick !== undefined) &&\n !itemProps.disabled\n return (\n <li key={index} className={styles.item}>\n {interactive ? (\n <ActionElement\n data-testid={itemTestId?.root}\n {...itemProps}\n {...labelAttrs}\n className={cn(\n styles.label,\n styles.link,\n itemProps.className,\n )}\n >\n {label}\n </ActionElement>\n ) : (\n <span\n data-testid={itemTestId?.root}\n {...spanAttrs(itemProps)}\n {...labelAttrs}\n {...(current && { 'aria-current': 'page' as const })}\n className={cn(\n styles.label,\n current && styles.current,\n itemProps.className,\n )}\n >\n {label}\n </span>\n )}\n {!current && (\n <IconChevronRight\n className={styles.separator}\n aria-hidden='true'\n />\n )}\n </li>\n )\n },\n )}\n </ol>\n </nav>\n )\n },\n)\n\nBreadcrumbsTrail.displayName = 'BreadcrumbsTrail'\n\n/** Trail of ancestors ending in the current page (`aria-current=\"page\"`); scrolls horizontally with an edge fade when it overflows. */\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n (props, ref) =>\n // Separate component so its mount effects attach once the list exists.\n props.items.length === 0 ? null : <BreadcrumbsTrail ref={ref} {...props} />,\n)\n\nBreadcrumbs.displayName = 'Breadcrumbs'\n"],"names":["ANCHOR_ONLY","spanAttrs","props","attrs","key","syncTitle","e","el","target","closest","scrollWidth","clientWidth","setAttribute","textContent","removeAttribute","BreadcrumbsTrail","forwardRef","_ref","ref","items","className","dataTestId","rest","listRef","useRef","sync","useEdgeFade","trailRef","hiddenRef","useIsomorphicLayoutEffect","list","current","trail","Array","from","children","li","join","scrollLeft","useResizeObserver","wasHidden","_jsx","cn","styles","nav","root","onPointerOver","map","_ref2","index","label","itemTestId","itemProps","length","labelAttrs","title","undefined","interactive","href","onClick","disabled","_jsxs","item","ActionElement","link","IconChevronRight","separator","displayName","Breadcrumbs"],"mappings":"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"}
@@ -17,6 +17,7 @@ const Button = /*#__PURE__*/react.forwardRef((_ref, ref) => {
17
17
  children,
18
18
  variant = 'primary',
19
19
  size = 'big',
20
+ fullWidth = false,
20
21
  loading = false,
21
22
  disabled = false,
22
23
  iconLeft,
@@ -29,7 +30,7 @@ const Button = /*#__PURE__*/react.forwardRef((_ref, ref) => {
29
30
  } = _ref;
30
31
  return /*#__PURE__*/jsxRuntime.jsx(ActionElement.ActionElement, {
31
32
  ref: ref,
32
- className: cn(Button_module.button, Button_module[variant], Button_module[size], loading && !disabled && Button_module.loading, className),
33
+ className: cn(Button_module.button, Button_module[variant], Button_module[size], fullWidth && Button_module.fullWidth, loading && !disabled && Button_module.loading, className),
33
34
  "data-testid": dataTestId?.root,
34
35
  "aria-label": joinAriaLabel.joinAriaLabel(ariaLabel, counterLabel),
35
36
  "aria-busy": loading || undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs","sources":["../../../src/button/Button.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport cn from 'classnames'\n\nimport { ActionElement, joinAriaLabel } from '../utils'\nimport styles from './Button.module.css'\nimport { ButtonContent } from './ButtonContent'\nimport type {\n ButtonAsButtonProps,\n ButtonAsLinkProps,\n ButtonDataTestId,\n ButtonProps,\n ButtonSize,\n ButtonVariant,\n} from './types'\n\nexport type {\n ButtonAsButtonProps,\n ButtonAsLinkProps,\n ButtonDataTestId,\n ButtonProps,\n ButtonSize,\n ButtonVariant,\n}\n\n/** Fully rounded call to action; `size` is big (52px) or small (36px), `loading` swaps the icon slot for a spinner and disables it. With `href` it renders a link that routes through `LinkProvider`. */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n className,\n children,\n variant = 'primary',\n size = 'big',\n loading = false,\n disabled = false,\n iconLeft,\n iconRight,\n counter,\n counterLabel,\n dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) => (\n <ActionElement\n ref={ref}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n loading && !disabled && styles.loading,\n className,\n )}\n data-testid={dataTestId?.root}\n aria-label={joinAriaLabel(ariaLabel, counterLabel)}\n aria-busy={loading || undefined}\n disabled={disabled || loading}\n {...rest}\n >\n <ButtonContent\n loading={loading}\n iconLeft={iconLeft}\n iconRight={iconRight}\n counter={counter}\n counterLabel={counterLabel}\n dataTestId={dataTestId}\n >\n {children}\n </ButtonContent>\n </ActionElement>\n ),\n)\n\nButton.displayName = 'Button'\n"],"names":["Button","forwardRef","_ref","ref","className","children","variant","size","loading","disabled","iconLeft","iconRight","counter","counterLabel","dataTestId","ariaLabel","rest","_jsx","ActionElement","cn","styles","button","root","joinAriaLabel","undefined","ButtonContent","displayName"],"mappings":";;;;;;;;;;;;AAyBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAI9B,CAAAC,IAAA,EAgBEC,GAAG,KAAA;EAAA,IAfH;IACEC,SAAS;IACTC,QAAQ;AACRC,IAAAA,OAAO,GAAG,SAAS;AACnBC,IAAAA,IAAI,GAAG,KAAK;AACZC,IAAAA,OAAO,GAAG,KAAK;AACfC,IAAAA,QAAQ,GAAG,KAAK;IAChBC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,UAAU;AACV,IAAA,YAAY,EAAEC,SAAS;IACvB,GAAGC,IAAAA;AACL,GAAC,GAAAd,IAAA,CAAA;EAAA,oBAGDe,cAAA,CAACC,2BAAa,EAAA;AACZf,IAAAA,GAAG,EAAEA,GAAI;IACTC,SAAS,EAAEe,EAAE,CACXC,aAAM,CAACC,MAAM,EACbD,aAAM,CAACd,OAAO,CAAC,EACfc,aAAM,CAACb,IAAI,CAAC,EACZC,OAAO,IAAI,CAACC,QAAQ,IAAIW,aAAM,CAACZ,OAAO,EACtCJ,SACF,CAAE;IACF,aAAaU,EAAAA,UAAU,EAAEQ,IAAK;AAC9B,IAAA,YAAA,EAAYC,2BAAa,CAACR,SAAS,EAAEF,YAAY,CAAE;IACnD,WAAWL,EAAAA,OAAO,IAAIgB,SAAU;IAChCf,QAAQ,EAAEA,QAAQ,IAAID,OAAQ;AAAA,IAAA,GAC1BQ,IAAI;IAAAX,QAAA,eAERY,cAAA,CAACQ,2BAAa,EAAA;AACZjB,MAAAA,OAAO,EAAEA,OAAQ;AACjBE,MAAAA,QAAQ,EAAEA,QAAS;AACnBC,MAAAA,SAAS,EAAEA,SAAU;AACrBC,MAAAA,OAAO,EAAEA,OAAQ;AACjBC,MAAAA,YAAY,EAAEA,YAAa;AAC3BC,MAAAA,UAAU,EAAEA,UAAW;AAAAT,MAAAA,QAAA,EAEtBA,QAAAA;KACY,CAAA;AAAC,GACH,CAAC,CAAA;AAAA,CAEpB,EAAC;AAEDL,MAAM,CAAC0B,WAAW,GAAG,QAAQ;;;;"}
1
+ {"version":3,"file":"Button.cjs","sources":["../../../src/button/Button.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport cn from 'classnames'\n\nimport { ActionElement, joinAriaLabel } from '../utils'\nimport styles from './Button.module.css'\nimport { ButtonContent } from './ButtonContent'\nimport type {\n ButtonAsButtonProps,\n ButtonAsLinkProps,\n ButtonDataTestId,\n ButtonProps,\n ButtonSize,\n ButtonVariant,\n} from './types'\n\nexport type {\n ButtonAsButtonProps,\n ButtonAsLinkProps,\n ButtonDataTestId,\n ButtonProps,\n ButtonSize,\n ButtonVariant,\n}\n\n/** Fully rounded call to action; `size` is big (52px) or small (36px), `loading` swaps the icon slot for a spinner and disables it. With `href` it renders a link that routes through `LinkProvider`. */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n className,\n children,\n variant = 'primary',\n size = 'big',\n fullWidth = false,\n loading = false,\n disabled = false,\n iconLeft,\n iconRight,\n counter,\n counterLabel,\n dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) => (\n <ActionElement\n ref={ref}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n loading && !disabled && styles.loading,\n className,\n )}\n data-testid={dataTestId?.root}\n aria-label={joinAriaLabel(ariaLabel, counterLabel)}\n aria-busy={loading || undefined}\n disabled={disabled || loading}\n {...rest}\n >\n <ButtonContent\n loading={loading}\n iconLeft={iconLeft}\n iconRight={iconRight}\n counter={counter}\n counterLabel={counterLabel}\n dataTestId={dataTestId}\n >\n {children}\n </ButtonContent>\n </ActionElement>\n ),\n)\n\nButton.displayName = 'Button'\n"],"names":["Button","forwardRef","_ref","ref","className","children","variant","size","fullWidth","loading","disabled","iconLeft","iconRight","counter","counterLabel","dataTestId","ariaLabel","rest","_jsx","ActionElement","cn","styles","button","root","joinAriaLabel","undefined","ButtonContent","displayName"],"mappings":";;;;;;;;;;;;AAyBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAI9B,CAAAC,IAAA,EAiBEC,GAAG,KAAA;EAAA,IAhBH;IACEC,SAAS;IACTC,QAAQ;AACRC,IAAAA,OAAO,GAAG,SAAS;AACnBC,IAAAA,IAAI,GAAG,KAAK;AACZC,IAAAA,SAAS,GAAG,KAAK;AACjBC,IAAAA,OAAO,GAAG,KAAK;AACfC,IAAAA,QAAQ,GAAG,KAAK;IAChBC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,UAAU;AACV,IAAA,YAAY,EAAEC,SAAS;IACvB,GAAGC,IAAAA;AACL,GAAC,GAAAf,IAAA,CAAA;EAAA,oBAGDgB,cAAA,CAACC,2BAAa,EAAA;AACZhB,IAAAA,GAAG,EAAEA,GAAI;AACTC,IAAAA,SAAS,EAAEgB,EAAE,CACXC,aAAM,CAACC,MAAM,EACbD,aAAM,CAACf,OAAO,CAAC,EACfe,aAAM,CAACd,IAAI,CAAC,EACZC,SAAS,IAAIa,aAAM,CAACb,SAAS,EAC7BC,OAAO,IAAI,CAACC,QAAQ,IAAIW,aAAM,CAACZ,OAAO,EACtCL,SACF,CAAE;IACF,aAAaW,EAAAA,UAAU,EAAEQ,IAAK;AAC9B,IAAA,YAAA,EAAYC,2BAAa,CAACR,SAAS,EAAEF,YAAY,CAAE;IACnD,WAAWL,EAAAA,OAAO,IAAIgB,SAAU;IAChCf,QAAQ,EAAEA,QAAQ,IAAID,OAAQ;AAAA,IAAA,GAC1BQ,IAAI;IAAAZ,QAAA,eAERa,cAAA,CAACQ,2BAAa,EAAA;AACZjB,MAAAA,OAAO,EAAEA,OAAQ;AACjBE,MAAAA,QAAQ,EAAEA,QAAS;AACnBC,MAAAA,SAAS,EAAEA,SAAU;AACrBC,MAAAA,OAAO,EAAEA,OAAQ;AACjBC,MAAAA,YAAY,EAAEA,YAAa;AAC3BC,MAAAA,UAAU,EAAEA,UAAW;AAAAV,MAAAA,QAAA,EAEtBA,QAAAA;KACY,CAAA;AAAC,GACH,CAAC,CAAA;AAAA,CAEpB,EAAC;AAEDL,MAAM,CAAC2B,WAAW,GAAG,QAAQ;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"button":"Button-module_button__eiKKZ","loading":"Button-module_loading__wZ1IR","content":"Button-module_content__SVjwi","icon":"Button-module_icon__Ojq-e","spinner":"Button-module_spinner__QToZm","spin":"Button-module_spin__Q6mex","big":"Button-module_big__-gJao","small":"Button-module_small__U2Zqq","primary":"Button-module_primary__EU45Z","outline":"Button-module_outline__Jx-Hc","subtle":"Button-module_subtle__2DyRK","ghost":"Button-module_ghost__OX4Ks","error":"Button-module_error__qp2tu"};
3
+ const styles = {"button":"Button-module_button__eiKKZ","loading":"Button-module_loading__wZ1IR","fullWidth":"Button-module_fullWidth__TLKFB","content":"Button-module_content__SVjwi","icon":"Button-module_icon__Ojq-e","spinner":"Button-module_spinner__QToZm","big":"Button-module_big__-gJao","small":"Button-module_small__U2Zqq","primary":"Button-module_primary__EU45Z","outline":"Button-module_outline__Jx-Hc","subtle":"Button-module_subtle__2DyRK","ghost":"Button-module_ghost__OX4Ks","error":"Button-module_error__qp2tu"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Button.module.css.cjs.map
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const CounterSlot = require('../counter/CounterSlot.cjs');
6
6
  const Button_module = require('./Button.module.css.cjs');
7
7
  const jsxRuntime = require('react/jsx-runtime');
8
- const IconLoaderCircle = require('../icons/components/base/IconLoaderCircle.cjs');
8
+ const Spinner = require('../spinner/Spinner.cjs');
9
9
 
10
10
  const ButtonContent = _ref => {
11
11
  let {
@@ -18,9 +18,9 @@ const ButtonContent = _ref => {
18
18
  children
19
19
  } = _ref;
20
20
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
21
- children: [loading ? /*#__PURE__*/jsxRuntime.jsx(IconLoaderCircle.IconLoaderCircle, {
21
+ children: [loading ? /*#__PURE__*/jsxRuntime.jsx(Spinner.Spinner, {
22
22
  className: Button_module.spinner,
23
- "aria-hidden": "true"
23
+ decorative: true
24
24
  }) : iconLeft != null && /*#__PURE__*/jsxRuntime.jsx("span", {
25
25
  className: Button_module.icon,
26
26
  "aria-hidden": "true",
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonContent.cjs","sources":["../../../src/button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport { CounterLabel, CounterSlot } from '../counter/CounterSlot'\nimport { IconLoaderCircle } from '../icons'\nimport styles from './Button.module.css'\nimport type { ButtonOwnProps } from './types'\n\ntype ButtonContentProps = Pick<\n ButtonOwnProps,\n 'iconLeft' | 'iconRight' | 'counter' | 'counterLabel' | 'dataTestId'\n> & {\n loading?: boolean\n children?: ReactNode\n}\n\nexport const ButtonContent = ({\n loading = false,\n iconLeft,\n iconRight,\n counter,\n counterLabel,\n dataTestId,\n children,\n}: ButtonContentProps) => (\n <>\n {loading ? (\n <IconLoaderCircle className={styles.spinner} aria-hidden='true' />\n ) : (\n iconLeft != null && (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.iconLeft}\n >\n {iconLeft}\n </span>\n )\n )}\n <span className={styles.content} data-testid={dataTestId?.content}>\n {children}\n </span>\n {!loading && iconRight != null ? (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.iconRight}\n >\n {iconRight}\n </span>\n ) : null}\n <CounterSlot dataTestId={dataTestId?.counter}>{counter}</CounterSlot>\n <CounterLabel>{counterLabel}</CounterLabel>\n </>\n)\n"],"names":["ButtonContent","_ref","loading","iconLeft","iconRight","counter","counterLabel","dataTestId","children","_jsxs","_Fragment","_jsx","IconLoaderCircle","className","styles","spinner","icon","content","CounterSlot","CounterLabel"],"mappings":";;;;;;;;;AAeO,MAAMA,aAAa,GAAGC,IAAA,IAAA;EAAA,IAAC;AAC5BC,IAAAA,OAAO,GAAG,KAAK;IACfC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,UAAU;AACVC,IAAAA,QAAAA;AACkB,GAAC,GAAAP,IAAA,CAAA;EAAA,oBACnBQ,eAAA,CAAAC,mBAAA,EAAA;AAAAF,IAAAA,QAAA,EACGN,CAAAA,OAAO,gBACNS,cAAA,CAACC,iCAAgB,EAAA;MAACC,SAAS,EAAEC,aAAM,CAACC,OAAQ;MAAC,aAAY,EAAA,MAAA;AAAM,KAAE,CAAC,GAElEZ,QAAQ,IAAI,IAAI,iBACdQ,cAAA,CAAA,MAAA,EAAA;MACEE,SAAS,EAAEC,aAAM,CAACE,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaT,EAAAA,UAAU,EAAEJ,QAAS;AAAAK,MAAAA,QAAA,EAEjCL,QAAAA;KACG,CAET,eACDQ,cAAA,CAAA,MAAA,EAAA;MAAME,SAAS,EAAEC,aAAM,CAACG,OAAQ;MAAC,aAAaV,EAAAA,UAAU,EAAEU,OAAQ;AAAAT,MAAAA,QAAA,EAC/DA,QAAAA;KACG,CAAC,EACN,CAACN,OAAO,IAAIE,SAAS,IAAI,IAAI,gBAC5BO,cAAA,CAAA,MAAA,EAAA;MACEE,SAAS,EAAEC,aAAM,CAACE,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaT,EAAAA,UAAU,EAAEH,SAAU;AAAAI,MAAAA,QAAA,EAElCJ,SAAAA;AAAS,KACN,CAAC,GACL,IAAI,eACRO,cAAA,CAACO,uBAAW,EAAA;MAACX,UAAU,EAAEA,UAAU,EAAEF,OAAQ;AAAAG,MAAAA,QAAA,EAAEH,OAAAA;AAAO,KAAc,CAAC,eACrEM,cAAA,CAACQ,wBAAY,EAAA;AAAAX,MAAAA,QAAA,EAAEF,YAAAA;AAAY,KAAe,CAAC,CAAA;AAAA,GAC3C,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"ButtonContent.cjs","sources":["../../../src/button/ButtonContent.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport { CounterLabel, CounterSlot } from '../counter/CounterSlot'\nimport { Spinner } from '../spinner'\nimport styles from './Button.module.css'\nimport type { ButtonOwnProps } from './types'\n\ntype ButtonContentProps = Pick<\n ButtonOwnProps,\n 'iconLeft' | 'iconRight' | 'counter' | 'counterLabel' | 'dataTestId'\n> & {\n loading?: boolean\n children?: ReactNode\n}\n\nexport const ButtonContent = ({\n loading = false,\n iconLeft,\n iconRight,\n counter,\n counterLabel,\n dataTestId,\n children,\n}: ButtonContentProps) => (\n <>\n {loading ? (\n <Spinner className={styles.spinner} decorative />\n ) : (\n iconLeft != null && (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.iconLeft}\n >\n {iconLeft}\n </span>\n )\n )}\n <span className={styles.content} data-testid={dataTestId?.content}>\n {children}\n </span>\n {!loading && iconRight != null ? (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.iconRight}\n >\n {iconRight}\n </span>\n ) : null}\n <CounterSlot dataTestId={dataTestId?.counter}>{counter}</CounterSlot>\n <CounterLabel>{counterLabel}</CounterLabel>\n </>\n)\n"],"names":["ButtonContent","_ref","loading","iconLeft","iconRight","counter","counterLabel","dataTestId","children","_jsxs","_Fragment","_jsx","Spinner","className","styles","spinner","decorative","icon","content","CounterSlot","CounterLabel"],"mappings":";;;;;;;;;AAeO,MAAMA,aAAa,GAAGC,IAAA,IAAA;EAAA,IAAC;AAC5BC,IAAAA,OAAO,GAAG,KAAK;IACfC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,UAAU;AACVC,IAAAA,QAAAA;AACkB,GAAC,GAAAP,IAAA,CAAA;EAAA,oBACnBQ,eAAA,CAAAC,mBAAA,EAAA;AAAAF,IAAAA,QAAA,EACGN,CAAAA,OAAO,gBACNS,cAAA,CAACC,eAAO,EAAA;MAACC,SAAS,EAAEC,aAAM,CAACC,OAAQ;MAACC,UAAU,EAAA,IAAA;AAAA,KAAE,CAAC,GAEjDb,QAAQ,IAAI,IAAI,iBACdQ,cAAA,CAAA,MAAA,EAAA;MACEE,SAAS,EAAEC,aAAM,CAACG,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaV,EAAAA,UAAU,EAAEJ,QAAS;AAAAK,MAAAA,QAAA,EAEjCL,QAAAA;KACG,CAET,eACDQ,cAAA,CAAA,MAAA,EAAA;MAAME,SAAS,EAAEC,aAAM,CAACI,OAAQ;MAAC,aAAaX,EAAAA,UAAU,EAAEW,OAAQ;AAAAV,MAAAA,QAAA,EAC/DA,QAAAA;KACG,CAAC,EACN,CAACN,OAAO,IAAIE,SAAS,IAAI,IAAI,gBAC5BO,cAAA,CAAA,MAAA,EAAA;MACEE,SAAS,EAAEC,aAAM,CAACG,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaV,EAAAA,UAAU,EAAEH,SAAU;AAAAI,MAAAA,QAAA,EAElCJ,SAAAA;AAAS,KACN,CAAC,GACL,IAAI,eACRO,cAAA,CAACQ,uBAAW,EAAA;MAACZ,UAAU,EAAEA,UAAU,EAAEF,OAAQ;AAAAG,MAAAA,QAAA,EAAEH,OAAAA;AAAO,KAAc,CAAC,eACrEM,cAAA,CAACS,wBAAY,EAAA;AAAAZ,MAAAA,QAAA,EAAEF,YAAAA;AAAY,KAAe,CAAC,CAAA;AAAA,GAC3C,CAAC,CAAA;AAAA;;;;"}