@mattermost/compass-ui 0.1.0-alpha.12 → 0.1.0-alpha.14

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 (398) hide show
  1. package/README.md +15 -3
  2. package/dist/compass-ui-standalone.css +270 -276
  3. package/dist/compass-ui.css +293 -290
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js.map +1 -1
  8. package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -1
  9. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts +3 -1
  10. package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -1
  11. package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
  12. package/dist/components/admin-panel/AdminPanel.cjs +1 -1
  13. package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
  14. package/dist/components/admin-panel/AdminPanel.d.ts +13 -6
  15. package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
  16. package/dist/components/admin-panel/AdminPanel.js +21 -15
  17. package/dist/components/admin-panel/AdminPanel.js.map +1 -1
  18. package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
  19. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts +8 -4
  20. package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
  21. package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  23. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  24. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  25. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +11 -4
  26. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  27. package/dist/components/admin-panel-header/AdminPanelHeader.js +25 -23
  28. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  29. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  30. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +10 -10
  31. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  32. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  33. package/dist/components/attachment-card/AttachmentCard.d.ts +18 -5
  34. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  35. package/dist/components/attachment-card/AttachmentCard.js +85 -79
  36. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  37. package/dist/components/card-button/CardButton.css +1 -1
  38. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  39. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +1 -1
  41. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
  42. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts +5 -4
  43. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -1
  44. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +7 -7
  45. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +10 -4
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +67 -62
  51. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  52. package/dist/components/checkbox/Checkbox.css +1 -1
  53. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  54. package/dist/components/checkbox/Checkbox.module.scss.js +10 -10
  55. package/dist/components/chip/Chip.cjs.map +1 -1
  56. package/dist/components/chip/Chip.css +1 -1
  57. package/dist/components/chip/Chip.d.ts +4 -0
  58. package/dist/components/chip/Chip.d.ts.map +1 -1
  59. package/dist/components/chip/Chip.js.map +1 -1
  60. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  61. package/dist/components/chip/Chip.module.scss.js +11 -11
  62. package/dist/components/combobox/Combobox.cjs +1 -1
  63. package/dist/components/combobox/Combobox.cjs.map +1 -1
  64. package/dist/components/combobox/Combobox.css +1 -1
  65. package/dist/components/combobox/Combobox.d.ts +24 -1
  66. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  67. package/dist/components/combobox/Combobox.js +307 -271
  68. package/dist/components/combobox/Combobox.js.map +1 -1
  69. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  70. package/dist/components/combobox/Combobox.module.scss.js +28 -26
  71. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  72. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  73. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  74. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  75. package/dist/components/date-range-picker/DateRangePicker.d.ts +18 -2
  76. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  77. package/dist/components/date-range-picker/DateRangePicker.js +134 -126
  78. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  80. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
  81. package/dist/components/emoji-popover/EmojiPopover.cjs +1 -1
  82. package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
  83. package/dist/components/emoji-popover/EmojiPopover.d.ts +25 -4
  84. package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
  85. package/dist/components/emoji-popover/EmojiPopover.js +84 -73
  86. package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
  87. package/dist/components/empty-state/EmptyState.cjs +1 -1
  88. package/dist/components/empty-state/EmptyState.cjs.map +1 -1
  89. package/dist/components/empty-state/EmptyState.d.ts +3 -3
  90. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  91. package/dist/components/empty-state/EmptyState.js +11 -9
  92. package/dist/components/empty-state/EmptyState.js.map +1 -1
  93. package/dist/components/error-message/ErrorMessage.cjs +1 -1
  94. package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
  95. package/dist/components/error-message/ErrorMessage.d.ts +3 -3
  96. package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
  97. package/dist/components/error-message/ErrorMessage.js +10 -9
  98. package/dist/components/error-message/ErrorMessage.js.map +1 -1
  99. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -1
  100. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts +7 -6
  101. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -1
  102. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -1
  103. package/dist/components/global-banner/GlobalBanner.cjs +1 -1
  104. package/dist/components/global-banner/GlobalBanner.cjs.map +1 -1
  105. package/dist/components/global-banner/GlobalBanner.d.ts +10 -5
  106. package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -1
  107. package/dist/components/global-banner/GlobalBanner.js +33 -26
  108. package/dist/components/global-banner/GlobalBanner.js.map +1 -1
  109. package/dist/components/icon-button/IconButton.css +1 -1
  110. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  111. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  112. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  113. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  114. package/dist/components/image-preview/ImagePreview.css +1 -1
  115. package/dist/components/image-preview/ImagePreview.d.ts +12 -1
  116. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  117. package/dist/components/image-preview/ImagePreview.js +25 -20
  118. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  119. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  120. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  121. package/dist/components/link-preview/LinkPreview.cjs +1 -1
  122. package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
  123. package/dist/components/link-preview/LinkPreview.d.ts +12 -6
  124. package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
  125. package/dist/components/link-preview/LinkPreview.js +19 -16
  126. package/dist/components/link-preview/LinkPreview.js.map +1 -1
  127. package/dist/components/mention-badge/MentionBadge.cjs +1 -1
  128. package/dist/components/mention-badge/MentionBadge.cjs.map +1 -1
  129. package/dist/components/mention-badge/MentionBadge.d.ts +3 -1
  130. package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -1
  131. package/dist/components/mention-badge/MentionBadge.js +18 -23
  132. package/dist/components/mention-badge/MentionBadge.js.map +1 -1
  133. package/dist/components/menu-group-heading/MenuGroupHeading.cjs.map +1 -1
  134. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts +3 -3
  135. package/dist/components/menu-group-heading/MenuGroupHeading.d.ts.map +1 -1
  136. package/dist/components/menu-group-heading/MenuGroupHeading.js.map +1 -1
  137. package/dist/components/menu-item/MenuItem.cjs +1 -1
  138. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  139. package/dist/components/menu-item/MenuItem.d.ts +2 -0
  140. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  141. package/dist/components/menu-item/MenuItem.js +29 -28
  142. package/dist/components/menu-item/MenuItem.js.map +1 -1
  143. package/dist/components/message-actions/MessageActions.cjs +1 -1
  144. package/dist/components/message-actions/MessageActions.cjs.map +1 -1
  145. package/dist/components/message-actions/MessageActions.d.ts +26 -2
  146. package/dist/components/message-actions/MessageActions.d.ts.map +1 -1
  147. package/dist/components/message-actions/MessageActions.js +67 -55
  148. package/dist/components/message-actions/MessageActions.js.map +1 -1
  149. package/dist/components/message-header/MessageHeader.cjs.map +1 -1
  150. package/dist/components/message-header/MessageHeader.d.ts +5 -3
  151. package/dist/components/message-header/MessageHeader.d.ts.map +1 -1
  152. package/dist/components/message-header/MessageHeader.js.map +1 -1
  153. package/dist/components/message-separator/MessageSeparator.cjs +1 -1
  154. package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
  155. package/dist/components/message-separator/MessageSeparator.d.ts +8 -4
  156. package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
  157. package/dist/components/message-separator/MessageSeparator.js +16 -14
  158. package/dist/components/message-separator/MessageSeparator.js.map +1 -1
  159. package/dist/components/modal/Modal.cjs +1 -1
  160. package/dist/components/modal/Modal.cjs.map +1 -1
  161. package/dist/components/modal/Modal.css +1 -1
  162. package/dist/components/modal/Modal.d.ts +40 -4
  163. package/dist/components/modal/Modal.d.ts.map +1 -1
  164. package/dist/components/modal/Modal.js +105 -56
  165. package/dist/components/modal/Modal.js.map +1 -1
  166. package/dist/components/modal/Modal.module.scss.cjs +1 -1
  167. package/dist/components/modal/Modal.module.scss.js +14 -12
  168. package/dist/components/modal/Modal.module.scss.js.map +1 -1
  169. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  170. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  171. package/dist/components/modal-header/ModalHeader.css +1 -1
  172. package/dist/components/modal-header/ModalHeader.d.ts +16 -1
  173. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  174. package/dist/components/modal-header/ModalHeader.js +72 -57
  175. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  176. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  177. package/dist/components/modal-header/ModalHeader.module.scss.js +15 -13
  178. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  179. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +1 -1
  180. package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -1
  181. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts +4 -1
  182. package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -1
  183. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +11 -10
  184. package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -1
  185. package/dist/components/new-message-banner/NewMessageBanner.cjs +1 -1
  186. package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
  187. package/dist/components/new-message-banner/NewMessageBanner.d.ts +15 -3
  188. package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
  189. package/dist/components/new-message-banner/NewMessageBanner.js +30 -22
  190. package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -1
  193. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  194. package/dist/components/pagination-dots/PaginationDots.d.ts +5 -1
  195. package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -1
  196. package/dist/components/pagination-dots/PaginationDots.js +22 -19
  197. package/dist/components/pagination-dots/PaginationDots.js.map +1 -1
  198. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  199. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  200. package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
  201. package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
  202. package/dist/components/permalink-preview/PermalinkPreview.d.ts +16 -5
  203. package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
  204. package/dist/components/permalink-preview/PermalinkPreview.js +39 -35
  205. package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
  206. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +1 -1
  207. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -1
  208. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts +8 -1
  209. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -1
  210. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +20 -17
  211. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -1
  212. package/dist/components/popover-menu/PopoverMenu.cjs +1 -1
  213. package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
  214. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  215. package/dist/components/popover-menu/PopoverMenu.d.ts +9 -1
  216. package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
  217. package/dist/components/popover-menu/PopoverMenu.js +39 -28
  218. package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
  219. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  220. package/dist/components/popover-menu/PopoverMenu.module.scss.js +12 -10
  221. package/dist/components/popover-menu/PopoverMenu.module.scss.js.map +1 -1
  222. package/dist/components/popover-notice/PopoverNotice.cjs +1 -1
  223. package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
  224. package/dist/components/popover-notice/PopoverNotice.d.ts +13 -5
  225. package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
  226. package/dist/components/popover-notice/PopoverNotice.js +58 -48
  227. package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
  228. package/dist/components/profile-popover/ProfilePopover.cjs +1 -1
  229. package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
  230. package/dist/components/profile-popover/ProfilePopover.d.ts +34 -12
  231. package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
  232. package/dist/components/profile-popover/ProfilePopover.js +122 -106
  233. package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
  234. package/dist/components/progress-bar/ProgressBar.cjs +1 -1
  235. package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
  236. package/dist/components/progress-bar/ProgressBar.d.ts +4 -3
  237. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
  238. package/dist/components/progress-bar/ProgressBar.js +9 -7
  239. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  240. package/dist/components/radio/Radio.css +1 -1
  241. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  242. package/dist/components/radio/Radio.module.scss.js +11 -11
  243. package/dist/components/reaction-button/ReactionButton.cjs +1 -1
  244. package/dist/components/reaction-button/ReactionButton.cjs.map +1 -1
  245. package/dist/components/reaction-button/ReactionButton.d.ts +3 -1
  246. package/dist/components/reaction-button/ReactionButton.d.ts.map +1 -1
  247. package/dist/components/reaction-button/ReactionButton.js +20 -18
  248. package/dist/components/reaction-button/ReactionButton.js.map +1 -1
  249. package/dist/components/reactions-row/ReactionsRow.cjs +1 -1
  250. package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
  251. package/dist/components/reactions-row/ReactionsRow.d.ts +10 -2
  252. package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
  253. package/dist/components/reactions-row/ReactionsRow.js +33 -28
  254. package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
  255. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  256. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  257. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +15 -7
  258. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  259. package/dist/components/right-sidebar-header/RightSidebarHeader.js +23 -19
  260. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  261. package/dist/components/scrollbar/Scrollbar.cjs +1 -1
  262. package/dist/components/scrollbar/Scrollbar.cjs.map +1 -1
  263. package/dist/components/scrollbar/Scrollbar.css +1 -1
  264. package/dist/components/scrollbar/Scrollbar.d.ts +2 -2
  265. package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -1
  266. package/dist/components/scrollbar/Scrollbar.js +24 -15
  267. package/dist/components/scrollbar/Scrollbar.js.map +1 -1
  268. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  269. package/dist/components/scrollbar/Scrollbar.module.scss.js +4 -4
  270. package/dist/components/scrollbar/simplebar-vendor.css +1 -0
  271. package/dist/components/search-input/SearchInput.cjs +1 -1
  272. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  273. package/dist/components/search-input/SearchInput.d.ts +5 -0
  274. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  275. package/dist/components/search-input/SearchInput.js +92 -85
  276. package/dist/components/search-input/SearchInput.js.map +1 -1
  277. package/dist/components/search-tip-banner/SearchTipBanner.cjs +1 -1
  278. package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -1
  279. package/dist/components/search-tip-banner/SearchTipBanner.d.ts +8 -5
  280. package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -1
  281. package/dist/components/search-tip-banner/SearchTipBanner.js +17 -16
  282. package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -1
  283. package/dist/components/section-notice/SectionNotice.cjs +1 -1
  284. package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
  285. package/dist/components/section-notice/SectionNotice.d.ts +16 -3
  286. package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
  287. package/dist/components/section-notice/SectionNotice.js +64 -48
  288. package/dist/components/section-notice/SectionNotice.js.map +1 -1
  289. package/dist/components/select/Select.cjs +1 -1
  290. package/dist/components/select/Select.cjs.map +1 -1
  291. package/dist/components/select/Select.d.ts +8 -1
  292. package/dist/components/select/Select.d.ts.map +1 -1
  293. package/dist/components/select/Select.js +81 -79
  294. package/dist/components/select/Select.js.map +1 -1
  295. package/dist/components/spinner/Spinner.cjs.map +1 -1
  296. package/dist/components/spinner/Spinner.css +1 -1
  297. package/dist/components/spinner/Spinner.d.ts +1 -0
  298. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  299. package/dist/components/spinner/Spinner.js.map +1 -1
  300. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  301. package/dist/components/spinner/Spinner.module.scss.js +5 -5
  302. package/dist/components/status-badge/StatusBadge.css +1 -1
  303. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  304. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  305. package/dist/components/switch/Switch.css +1 -1
  306. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  307. package/dist/components/switch/Switch.module.scss.js +17 -17
  308. package/dist/components/tabs/Tabs.cjs +1 -1
  309. package/dist/components/tabs/Tabs.cjs.map +1 -1
  310. package/dist/components/tabs/Tabs.css +1 -1
  311. package/dist/components/tabs/Tabs.d.ts +14 -3
  312. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  313. package/dist/components/tabs/Tabs.js +62 -53
  314. package/dist/components/tabs/Tabs.js.map +1 -1
  315. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  316. package/dist/components/tabs/Tabs.module.scss.js +13 -12
  317. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  318. package/dist/components/tabs/index.d.ts +1 -1
  319. package/dist/components/tabs/index.d.ts.map +1 -1
  320. package/dist/components/tag/Tag.cjs +1 -1
  321. package/dist/components/tag/Tag.cjs.map +1 -1
  322. package/dist/components/tag/Tag.d.ts +3 -3
  323. package/dist/components/tag/Tag.d.ts.map +1 -1
  324. package/dist/components/tag/Tag.js +12 -11
  325. package/dist/components/tag/Tag.js.map +1 -1
  326. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  327. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  328. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  329. package/dist/components/thread-footer/ThreadFooter.d.ts +19 -3
  330. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  331. package/dist/components/thread-footer/ThreadFooter.js +53 -48
  332. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  333. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  334. package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -18
  335. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  336. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  337. package/dist/components/thread-list-item/ThreadListItem.d.ts +15 -7
  338. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  339. package/dist/components/thread-list-item/ThreadListItem.js +66 -62
  340. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  341. package/dist/components/toast/Toast.cjs +1 -1
  342. package/dist/components/toast/Toast.cjs.map +1 -1
  343. package/dist/components/toast/Toast.d.ts +8 -3
  344. package/dist/components/toast/Toast.d.ts.map +1 -1
  345. package/dist/components/toast/Toast.js +47 -39
  346. package/dist/components/toast/Toast.js.map +1 -1
  347. package/dist/components/tour-point/TourPoint.cjs +1 -1
  348. package/dist/components/tour-point/TourPoint.cjs.map +1 -1
  349. package/dist/components/tour-point/TourPoint.css +1 -1
  350. package/dist/components/tour-point/TourPoint.d.ts +19 -5
  351. package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
  352. package/dist/components/tour-point/TourPoint.js +66 -54
  353. package/dist/components/tour-point/TourPoint.js.map +1 -1
  354. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  355. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  356. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  357. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  358. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  359. package/dist/components/user-avatar/UserAvatar.css +1 -1
  360. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  361. package/dist/components/user-avatar/UserAvatar.module.scss.js +26 -26
  362. package/dist/components/user-avatar-group/UserAvatarGroup.cjs +1 -1
  363. package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
  364. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  365. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts +8 -1
  366. package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
  367. package/dist/components/user-avatar-group/UserAvatarGroup.js +22 -18
  368. package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
  369. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  370. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  371. package/dist/hooks/use-modal-focus.cjs +2 -0
  372. package/dist/hooks/use-modal-focus.cjs.map +1 -0
  373. package/dist/hooks/use-modal-focus.d.ts +26 -0
  374. package/dist/hooks/use-modal-focus.d.ts.map +1 -0
  375. package/dist/hooks/use-modal-focus.js +91 -0
  376. package/dist/hooks/use-modal-focus.js.map +1 -0
  377. package/dist/hooks/use-popover-transition.cjs +1 -1
  378. package/dist/hooks/use-popover-transition.cjs.map +1 -1
  379. package/dist/hooks/use-popover-transition.d.ts +6 -4
  380. package/dist/hooks/use-popover-transition.d.ts.map +1 -1
  381. package/dist/hooks/use-popover-transition.js +19 -15
  382. package/dist/hooks/use-popover-transition.js.map +1 -1
  383. package/dist/index.d.ts +1 -0
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/utils/duration.cjs +2 -0
  386. package/dist/utils/duration.cjs.map +1 -0
  387. package/dist/utils/duration.d.ts +8 -0
  388. package/dist/utils/duration.d.ts.map +1 -0
  389. package/dist/utils/duration.js +11 -0
  390. package/dist/utils/duration.js.map +1 -0
  391. package/dist/utils/props.cjs +2 -0
  392. package/dist/utils/props.cjs.map +1 -0
  393. package/dist/utils/props.d.ts +13 -0
  394. package/dist/utils/props.d.ts.map +1 -0
  395. package/dist/utils/props.js +7 -0
  396. package/dist/utils/props.js.map +1 -0
  397. package/package.json +4 -6
  398. package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
@@ -1 +1 @@
1
- ._user-avatar-group_sgxpf_2{display:inline-flex;align-items:center;padding-right:var(--spacing-xxxxs)}._user-avatar-group__item_sgxpf_7{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-right:-2px;border-radius:var(--radius-full);outline:1px solid var(--center-channel-bg, var(--color-neutral-0));transform:scale(1);transition:transform var(--duration-quick) var(--ease-transition),box-shadow var(--duration-quick) var(--ease-transition)}._user-avatar-group__item_sgxpf_7:hover{z-index:10;transform:scale(1.04);box-shadow:var(--elevation-2)}._user-avatar-group__item_sgxpf_7:hover ._user-avatar-group__tooltip-layer_sgxpf_26{opacity:1;visibility:visible;transition:opacity var(--duration-quick) var(--ease-entrance),visibility 0s linear 0s}._user-avatar-group__trigger_sgxpf_31{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:inherit;overflow:hidden}._user-avatar-group__tooltip-layer_sgxpf_26{position:absolute;left:50%;bottom:100%;z-index:20;margin-bottom:var(--spacing-xxxxs);transform:translate(-50%);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--duration-quick) var(--ease-exit),visibility 0s linear var(--duration-quick)}._user-avatar-group__tooltip_sgxpf_26{flex-shrink:0}._user-avatar-group__overflow_sgxpf_55{display:inline-flex;align-items:center;justify-content:center;background-color:var(--center-channel-bg);background-image:linear-gradient(rgba(var(--center-channel-color-rgb),.08),rgba(var(--center-channel-color-rgb),.08));color:rgba(var(--center-channel-color-rgb),.56);font-size:var(--font-size-25);font-weight:var(--font-weight-semibold);letter-spacing:.01em;border-radius:var(--radius-full)}._user-avatar-group--size-24_sgxpf_67{padding-right:3px}._user-avatar-group--size-24_sgxpf_67 ._user-avatar-group__item_sgxpf_7{width:24px;height:24px;margin-right:-3px;outline-width:1px}._user-avatar-group--size-24_sgxpf_67 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-50)}._user-avatar-group--size-28_sgxpf_79{padding-right:3px}._user-avatar-group--size-28_sgxpf_79 ._user-avatar-group__item_sgxpf_7{width:28px;height:28px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-28_sgxpf_79 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-75)}._user-avatar-group--size-32_sgxpf_91{padding-right:3px}._user-avatar-group--size-32_sgxpf_91 ._user-avatar-group__item_sgxpf_7{width:32px;height:32px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-32_sgxpf_91 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-75)}._user-avatar-group--size-40_sgxpf_103{padding-right:5px}._user-avatar-group--size-40_sgxpf_103 ._user-avatar-group__item_sgxpf_7{width:40px;height:40px;margin-right:-5px;outline-width:2px}._user-avatar-group--size-40_sgxpf_103 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-100)}._user-avatar-group--size-48_sgxpf_115{padding-right:7px}._user-avatar-group--size-48_sgxpf_115 ._user-avatar-group__item_sgxpf_7{width:48px;height:48px;margin-right:-7px;outline-width:2px}._user-avatar-group--size-48_sgxpf_115 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-200)}._user-avatar-group--size-56_sgxpf_127{padding-right:8px}._user-avatar-group--size-56_sgxpf_127 ._user-avatar-group__item_sgxpf_7{width:56px;height:56px;margin-right:-8px;outline-width:2px}._user-avatar-group--size-56_sgxpf_127 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-300)}._user-avatar-group--size-64_sgxpf_139{padding-right:9px}._user-avatar-group--size-64_sgxpf_139 ._user-avatar-group__item_sgxpf_7{width:64px;height:64px;margin-right:-9px;outline-width:2px}._user-avatar-group--size-64_sgxpf_139 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-400)}._user-avatar-group--size-72_sgxpf_151{padding-right:10px}._user-avatar-group--size-72_sgxpf_151 ._user-avatar-group__item_sgxpf_7{width:72px;height:72px;margin-right:-10px;outline-width:2px}._user-avatar-group--size-72_sgxpf_151 ._user-avatar-group__overflow_sgxpf_55{font-size:var(--font-size-500)}
1
+ ._user-avatar-group_17zfx_2{display:inline-flex;align-items:center;padding-right:var(--spacing-xxxxs)}._user-avatar-group__item_17zfx_7{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-right:-2px;border-radius:var(--radius-pill);outline:1px solid var(--center-channel-bg, var(--color-neutral-0));transform:scale(1);transition:transform var(--duration-quick) var(--ease-transition),box-shadow var(--duration-quick) var(--ease-transition)}._user-avatar-group__item_17zfx_7:hover{z-index:10;transform:scale(1.04);box-shadow:var(--elevation-2)}._user-avatar-group__item_17zfx_7:hover ._user-avatar-group__tooltip-layer_17zfx_26{opacity:1;visibility:visible;transition:opacity var(--duration-quick) var(--ease-entrance),visibility 0s linear 0s}._user-avatar-group__trigger_17zfx_31{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:inherit;overflow:hidden}._user-avatar-group__tooltip-layer_17zfx_26{position:absolute;left:50%;bottom:100%;z-index:20;margin-bottom:var(--spacing-xxxxs);transform:translate(-50%);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--duration-quick) var(--ease-exit),visibility 0s linear var(--duration-quick)}._user-avatar-group__tooltip_17zfx_26{flex-shrink:0}._user-avatar-group__overflow_17zfx_55{display:inline-flex;align-items:center;justify-content:center;background-color:var(--center-channel-bg);background-image:linear-gradient(rgba(var(--center-channel-color-rgb),.08),rgba(var(--center-channel-color-rgb),.08));color:rgba(var(--center-channel-color-rgb),.56);font-size:var(--font-size-25);font-weight:var(--font-weight-semibold);letter-spacing:.01em;border-radius:var(--radius-pill)}._user-avatar-group--size-24_17zfx_67{padding-right:3px}._user-avatar-group--size-24_17zfx_67 ._user-avatar-group__item_17zfx_7{width:24px;height:24px;margin-right:-3px;outline-width:1px}._user-avatar-group--size-24_17zfx_67 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-50)}._user-avatar-group--size-28_17zfx_79{padding-right:3px}._user-avatar-group--size-28_17zfx_79 ._user-avatar-group__item_17zfx_7{width:28px;height:28px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-28_17zfx_79 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-75)}._user-avatar-group--size-32_17zfx_91{padding-right:3px}._user-avatar-group--size-32_17zfx_91 ._user-avatar-group__item_17zfx_7{width:32px;height:32px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-32_17zfx_91 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-75)}._user-avatar-group--size-40_17zfx_103{padding-right:5px}._user-avatar-group--size-40_17zfx_103 ._user-avatar-group__item_17zfx_7{width:40px;height:40px;margin-right:-5px;outline-width:2px}._user-avatar-group--size-40_17zfx_103 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-100)}._user-avatar-group--size-48_17zfx_115{padding-right:7px}._user-avatar-group--size-48_17zfx_115 ._user-avatar-group__item_17zfx_7{width:48px;height:48px;margin-right:-7px;outline-width:2px}._user-avatar-group--size-48_17zfx_115 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-200)}._user-avatar-group--size-56_17zfx_127{padding-right:8px}._user-avatar-group--size-56_17zfx_127 ._user-avatar-group__item_17zfx_7{width:56px;height:56px;margin-right:-8px;outline-width:2px}._user-avatar-group--size-56_17zfx_127 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-300)}._user-avatar-group--size-64_17zfx_139{padding-right:9px}._user-avatar-group--size-64_17zfx_139 ._user-avatar-group__item_17zfx_7{width:64px;height:64px;margin-right:-9px;outline-width:2px}._user-avatar-group--size-64_17zfx_139 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-400)}._user-avatar-group--size-72_17zfx_151{padding-right:10px}._user-avatar-group--size-72_17zfx_151 ._user-avatar-group__item_17zfx_7{width:72px;height:72px;margin-right:-10px;outline-width:2px}._user-avatar-group--size-72_17zfx_151 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-500)}
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  export type UserAvatarGroupSize = '20' | '24' | '28' | '32' | '40' | '48' | '56' | '64' | '72';
2
3
  export interface UserAvatarGroupItem {
3
4
  /** Unique key for the list item. */
@@ -16,11 +17,17 @@ export interface UserAvatarGroupProps {
16
17
  size?: UserAvatarGroupSize;
17
18
  /** Optional CSS class name. */
18
19
  className?: string;
20
+ /** Accessible name for the group. Default: `{count} participants`. */
21
+ formatGroupLabel?: (count: number) => string;
22
+ /** Accessible name for the +N overflow. Default: `{count} more participants`. */
23
+ formatOverflowLabel?: (count: number) => string;
24
+ /** Overflow tooltip text. Default: up to three names, then `A, B, +N more`. */
25
+ formatOverflowNames?: (hidden: UserAvatarGroupItem[]) => ReactNode;
19
26
  }
20
27
  /**
21
28
  * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's
22
29
  * a compact way to show "who's involved" — thread participants, channel members, call
23
30
  * attendees — without a list.
24
31
  */
25
- export default function UserAvatarGroup({ avatars, className, max, size, }: UserAvatarGroupProps): import("react/jsx-runtime").JSX.Element;
32
+ export default function UserAvatarGroup({ avatars, className, max, size, formatGroupLabel, formatOverflowLabel, formatOverflowNames, }: UserAvatarGroupProps): import("react/jsx-runtime").JSX.Element;
26
33
  //# sourceMappingURL=UserAvatarGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAC3B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,OAAO,EACP,SAAc,EACd,GAAO,EACP,IAAW,GACZ,EAAE,oBAAoB,2CAkEtB"}
1
+ {"version":3,"file":"UserAvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,MAAM,mBAAmB,GAC3B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,SAAS,CAAC;CACpE;AAgBD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,OAAO,EACP,SAAc,EACd,GAAO,EACP,IAAW,EACX,gBAA0C,EAC1C,mBAAgD,EAChD,mBAAwC,GACzC,EAAE,oBAAoB,2CAkEtB"}
@@ -1,36 +1,40 @@
1
- import { jsxs as s, jsx as e } from "react/jsx-runtime";
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
2
  import m from "../tooltip/Tooltip.js";
3
- import g from "../user-avatar/UserAvatar.js";
3
+ import v from "../user-avatar/UserAvatar.js";
4
4
  import a from "./UserAvatarGroup.module.scss.js";
5
- function _(r) {
5
+ const b = (r) => `${r} participants`, N = (r) => `${r} more participants`;
6
+ function h(r) {
6
7
  return r.length === 0 ? "" : r.length === 1 ? r[0].name : r.length <= 3 ? r.map((o) => o.name).join(", ") : `${r.slice(0, 2).map((o) => o.name).join(", ")}, +${r.length - 2} more`;
7
8
  }
8
- function h({
9
+ function d({
9
10
  avatars: r,
10
11
  className: o = "",
11
12
  max: i = 3,
12
- size: l = "20"
13
+ size: s = "20",
14
+ formatGroupLabel: u = b,
15
+ formatOverflowLabel: c = N,
16
+ formatOverflowNames: g = h
13
17
  }) {
14
- const u = r.slice(0, i), p = r.slice(i), n = p.length, c = [
18
+ const _ = r.slice(0, i), p = r.slice(i), n = p.length, f = [
15
19
  a["user-avatar-group"],
16
- l !== "20" ? a[`user-avatar-group--size-${l}`] : "",
20
+ s !== "20" ? a[`user-avatar-group--size-${s}`] : "",
17
21
  o
18
22
  ].filter(Boolean).join(" ");
19
- return /* @__PURE__ */ s(
23
+ return /* @__PURE__ */ l(
20
24
  "div",
21
25
  {
22
- className: c,
26
+ className: f,
23
27
  role: "group",
24
- "aria-label": `${r.length} participants`,
28
+ "aria-label": u(r.length),
25
29
  children: [
26
- u.map((t) => /* @__PURE__ */ s("span", { className: a["user-avatar-group__item"], children: [
30
+ _.map((t) => /* @__PURE__ */ l("span", { className: a["user-avatar-group__item"], children: [
27
31
  /* @__PURE__ */ e("span", { className: a["user-avatar-group__trigger"], children: /* @__PURE__ */ e(
28
- g,
32
+ v,
29
33
  {
30
34
  src: t.src,
31
35
  alt: t.name,
32
36
  name: t.name,
33
- size: l
37
+ size: s
34
38
  }
35
39
  ) }),
36
40
  /* @__PURE__ */ e(
@@ -49,16 +53,16 @@ function h({
49
53
  }
50
54
  )
51
55
  ] }, t.key)),
52
- n > 0 && /* @__PURE__ */ s(
56
+ n > 0 && /* @__PURE__ */ l(
53
57
  "span",
54
58
  {
55
59
  className: [
56
60
  a["user-avatar-group__item"],
57
61
  a["user-avatar-group__overflow"]
58
62
  ].join(" "),
59
- "aria-label": `${n} more participants`,
63
+ "aria-label": c(n),
60
64
  children: [
61
- /* @__PURE__ */ s("span", { className: a["user-avatar-group__trigger"], children: [
65
+ /* @__PURE__ */ l("span", { className: a["user-avatar-group__trigger"], children: [
62
66
  "+",
63
67
  n
64
68
  ] }),
@@ -72,7 +76,7 @@ function h({
72
76
  {
73
77
  arrow: "bottom",
74
78
  className: a["user-avatar-group__tooltip"],
75
- label: _(p)
79
+ label: g(p)
76
80
  }
77
81
  )
78
82
  }
@@ -85,6 +89,6 @@ function h({
85
89
  );
86
90
  }
87
91
  export {
88
- h as default
92
+ d as default
89
93
  };
90
94
  //# sourceMappingURL=UserAvatarGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatarGroup.js","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"sourcesContent":["import Tooltip from '@/components/tooltip/Tooltip';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport styles from './UserAvatarGroup.module.scss';\n\nexport type UserAvatarGroupSize =\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72';\n\nexport interface UserAvatarGroupItem {\n /** Unique key for the list item. */\n key: string;\n /** Image URL for the avatar. Omit to render the Fallback (initials) variant. */\n src?: string;\n /** Alt text / display name for the avatar. Drives initials and fallback colour. */\n name: string;\n}\n\nexport interface UserAvatarGroupProps {\n /** Array of avatar items to display. */\n avatars: UserAvatarGroupItem[];\n /** Maximum number of avatars to show before showing the overflow count. Default: 3. */\n max?: number;\n /** Avatar size in px. Matches Figma Avatar Group size options. Default: '20'. */\n size?: UserAvatarGroupSize;\n /** Optional CSS class name. */\n className?: string;\n}\n\nfunction overflowNamesLabel(hidden: UserAvatarGroupItem[]): string {\n if (hidden.length === 0) return '';\n if (hidden.length === 1) return hidden[0].name;\n if (hidden.length <= 3) return hidden.map((a) => a.name).join(', ');\n return `${hidden\n .slice(0, 2)\n .map((a) => a.name)\n .join(', ')}, +${hidden.length - 2} more`;\n}\n\n/**\n * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's\n * a compact way to show \"who's involved\" — thread participants, channel members, call\n * attendees — without a list.\n */\nexport default function UserAvatarGroup({\n avatars,\n className = '',\n max = 3,\n size = '20',\n}: UserAvatarGroupProps) {\n const visible = avatars.slice(0, max);\n const hidden = avatars.slice(max);\n const overflow = hidden.length;\n\n const rootClass = [\n styles['user-avatar-group'],\n size !== '20' ? styles[`user-avatar-group--size-${size}`] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"group\"\n aria-label={`${avatars.length} participants`}\n >\n {visible.map((avatar) => (\n <span key={avatar.key} className={styles['user-avatar-group__item']}>\n <span className={styles['user-avatar-group__trigger']}>\n <UserAvatar\n src={avatar.src}\n alt={avatar.name}\n name={avatar.name}\n size={size}\n />\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={avatar.name}\n />\n </div>\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={[\n styles['user-avatar-group__item'],\n styles['user-avatar-group__overflow'],\n ].join(' ')}\n aria-label={`${overflow} more participants`}\n >\n <span className={styles['user-avatar-group__trigger']}>\n +{overflow}\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={overflowNamesLabel(hidden)}\n />\n </div>\n </span>\n )}\n </div>\n );\n}\n"],"names":["overflowNamesLabel","hidden","a","UserAvatarGroup","avatars","className","max","size","visible","overflow","rootClass","styles","jsxs","avatar","jsx","UserAvatar","Tooltip"],"mappings":";;;;AAmCA,SAASA,EAAmBC,GAAuC;AACjE,SAAIA,EAAO,WAAW,IAAU,KAC5BA,EAAO,WAAW,IAAUA,EAAO,CAAC,EAAE,OACtCA,EAAO,UAAU,IAAUA,EAAO,IAAI,CAACC,MAAMA,EAAE,IAAI,EAAE,KAAK,IAAI,IAC3D,GAAGD,EACP,MAAM,GAAG,CAAC,EACV,IAAI,CAACC,MAAMA,EAAE,IAAI,EACjB,KAAK,IAAI,CAAC,MAAMD,EAAO,SAAS,CAAC;AACtC;AAOA,SAAwBE,EAAgB;AAAA,EACtC,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AACT,GAAyB;AACvB,QAAMC,IAAUJ,EAAQ,MAAM,GAAGE,CAAG,GAC9BL,IAASG,EAAQ,MAAME,CAAG,GAC1BG,IAAWR,EAAO,QAElBS,IAAY;AAAA,IAChBC,EAAO,mBAAmB;AAAA,IAC1BJ,MAAS,OAAOI,EAAO,2BAA2BJ,CAAI,EAAE,IAAI;AAAA,IAC5DF;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWF;AAAA,MACX,MAAK;AAAA,MACL,cAAY,GAAGN,EAAQ,MAAM;AAAA,MAE5B,UAAA;AAAA,QAAAI,EAAQ,IAAI,CAACK,MACZ,gBAAAD,EAAC,UAAsB,WAAWD,EAAO,yBAAyB,GAChE,UAAA;AAAA,UAAA,gBAAAG,EAAC,QAAA,EAAK,WAAWH,EAAO,4BAA4B,GAClD,UAAA,gBAAAG;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,KAAKF,EAAO;AAAA,cACZ,KAAKA,EAAO;AAAA,cACZ,MAAMA,EAAO;AAAA,cACb,MAAAN;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UACA,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH,EAAO,kCAAkC;AAAA,cACpD,MAAK;AAAA,cAEL,UAAA,gBAAAG;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,WAAWL,EAAO,4BAA4B;AAAA,kBAC9C,OAAOE,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAChB;AAAA,UAAA;AAAA,QACF,KAlBSA,EAAO,GAmBlB,CACD;AAAA,QACAJ,IAAW,KACV,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTD,EAAO,yBAAyB;AAAA,cAChCA,EAAO,6BAA6B;AAAA,YAAA,EACpC,KAAK,GAAG;AAAA,YACV,cAAY,GAAGF,CAAQ;AAAA,YAEvB,UAAA;AAAA,cAAA,gBAAAG,EAAC,QAAA,EAAK,WAAWD,EAAO,4BAA4B,GAAG,UAAA;AAAA,gBAAA;AAAA,gBACnDF;AAAA,cAAA,GACJ;AAAA,cACA,gBAAAK;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWH,EAAO,kCAAkC;AAAA,kBACpD,MAAK;AAAA,kBAEL,UAAA,gBAAAG;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,OAAM;AAAA,sBACN,WAAWL,EAAO,4BAA4B;AAAA,sBAC9C,OAAOX,EAAmBC,CAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAClC;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"UserAvatarGroup.js","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport Tooltip from '@/components/tooltip/Tooltip';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport styles from './UserAvatarGroup.module.scss';\n\nexport type UserAvatarGroupSize =\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72';\n\nexport interface UserAvatarGroupItem {\n /** Unique key for the list item. */\n key: string;\n /** Image URL for the avatar. Omit to render the Fallback (initials) variant. */\n src?: string;\n /** Alt text / display name for the avatar. Drives initials and fallback colour. */\n name: string;\n}\n\nexport interface UserAvatarGroupProps {\n /** Array of avatar items to display. */\n avatars: UserAvatarGroupItem[];\n /** Maximum number of avatars to show before showing the overflow count. Default: 3. */\n max?: number;\n /** Avatar size in px. Matches Figma Avatar Group size options. Default: '20'. */\n size?: UserAvatarGroupSize;\n /** Optional CSS class name. */\n className?: string;\n /** Accessible name for the group. Default: `{count} participants`. */\n formatGroupLabel?: (count: number) => string;\n /** Accessible name for the +N overflow. Default: `{count} more participants`. */\n formatOverflowLabel?: (count: number) => string;\n /** Overflow tooltip text. Default: up to three names, then `A, B, +N more`. */\n formatOverflowNames?: (hidden: UserAvatarGroupItem[]) => ReactNode;\n}\n\nconst defaultFormatGroupLabel = (count: number) => `${count} participants`;\nconst defaultFormatOverflowLabel = (count: number) =>\n `${count} more participants`;\n\nfunction overflowNamesLabel(hidden: UserAvatarGroupItem[]): string {\n if (hidden.length === 0) return '';\n if (hidden.length === 1) return hidden[0].name;\n if (hidden.length <= 3) return hidden.map((a) => a.name).join(', ');\n return `${hidden\n .slice(0, 2)\n .map((a) => a.name)\n .join(', ')}, +${hidden.length - 2} more`;\n}\n\n/**\n * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's\n * a compact way to show \"who's involved\" — thread participants, channel members, call\n * attendees — without a list.\n */\nexport default function UserAvatarGroup({\n avatars,\n className = '',\n max = 3,\n size = '20',\n formatGroupLabel = defaultFormatGroupLabel,\n formatOverflowLabel = defaultFormatOverflowLabel,\n formatOverflowNames = overflowNamesLabel,\n}: UserAvatarGroupProps) {\n const visible = avatars.slice(0, max);\n const hidden = avatars.slice(max);\n const overflow = hidden.length;\n\n const rootClass = [\n styles['user-avatar-group'],\n size !== '20' ? styles[`user-avatar-group--size-${size}`] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"group\"\n aria-label={formatGroupLabel(avatars.length)}\n >\n {visible.map((avatar) => (\n <span key={avatar.key} className={styles['user-avatar-group__item']}>\n <span className={styles['user-avatar-group__trigger']}>\n <UserAvatar\n src={avatar.src}\n alt={avatar.name}\n name={avatar.name}\n size={size}\n />\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={avatar.name}\n />\n </div>\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={[\n styles['user-avatar-group__item'],\n styles['user-avatar-group__overflow'],\n ].join(' ')}\n aria-label={formatOverflowLabel(overflow)}\n >\n <span className={styles['user-avatar-group__trigger']}>\n +{overflow}\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={formatOverflowNames(hidden)}\n />\n </div>\n </span>\n )}\n </div>\n );\n}\n"],"names":["defaultFormatGroupLabel","count","defaultFormatOverflowLabel","overflowNamesLabel","hidden","a","UserAvatarGroup","avatars","className","max","size","formatGroupLabel","formatOverflowLabel","formatOverflowNames","visible","overflow","rootClass","styles","jsxs","avatar","jsx","UserAvatar","Tooltip"],"mappings":";;;;AA0CA,MAAMA,IAA0B,CAACC,MAAkB,GAAGA,CAAK,iBACrDC,IAA6B,CAACD,MAClC,GAAGA,CAAK;AAEV,SAASE,EAAmBC,GAAuC;AACjE,SAAIA,EAAO,WAAW,IAAU,KAC5BA,EAAO,WAAW,IAAUA,EAAO,CAAC,EAAE,OACtCA,EAAO,UAAU,IAAUA,EAAO,IAAI,CAACC,MAAMA,EAAE,IAAI,EAAE,KAAK,IAAI,IAC3D,GAAGD,EACP,MAAM,GAAG,CAAC,EACV,IAAI,CAACC,MAAMA,EAAE,IAAI,EACjB,KAAK,IAAI,CAAC,MAAMD,EAAO,SAAS,CAAC;AACtC;AAOA,SAAwBE,EAAgB;AAAA,EACtC,SAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,kBAAAC,IAAmBX;AAAA,EACnB,qBAAAY,IAAsBV;AAAA,EACtB,qBAAAW,IAAsBV;AACxB,GAAyB;AACvB,QAAMW,IAAUP,EAAQ,MAAM,GAAGE,CAAG,GAC9BL,IAASG,EAAQ,MAAME,CAAG,GAC1BM,IAAWX,EAAO,QAElBY,IAAY;AAAA,IAChBC,EAAO,mBAAmB;AAAA,IAC1BP,MAAS,OAAOO,EAAO,2BAA2BP,CAAI,EAAE,IAAI;AAAA,IAC5DF;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWF;AAAA,MACX,MAAK;AAAA,MACL,cAAYL,EAAiBJ,EAAQ,MAAM;AAAA,MAE1C,UAAA;AAAA,QAAAO,EAAQ,IAAI,CAACK,MACZ,gBAAAD,EAAC,UAAsB,WAAWD,EAAO,yBAAyB,GAChE,UAAA;AAAA,UAAA,gBAAAG,EAAC,QAAA,EAAK,WAAWH,EAAO,4BAA4B,GAClD,UAAA,gBAAAG;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,KAAKF,EAAO;AAAA,cACZ,KAAKA,EAAO;AAAA,cACZ,MAAMA,EAAO;AAAA,cACb,MAAAT;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UACA,gBAAAU;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWH,EAAO,kCAAkC;AAAA,cACpD,MAAK;AAAA,cAEL,UAAA,gBAAAG;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,WAAWL,EAAO,4BAA4B;AAAA,kBAC9C,OAAOE,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAChB;AAAA,UAAA;AAAA,QACF,KAlBSA,EAAO,GAmBlB,CACD;AAAA,QACAJ,IAAW,KACV,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTD,EAAO,yBAAyB;AAAA,cAChCA,EAAO,6BAA6B;AAAA,YAAA,EACpC,KAAK,GAAG;AAAA,YACV,cAAYL,EAAoBG,CAAQ;AAAA,YAExC,UAAA;AAAA,cAAA,gBAAAG,EAAC,QAAA,EAAK,WAAWD,EAAO,4BAA4B,GAAG,UAAA;AAAA,gBAAA;AAAA,gBACnDF;AAAA,cAAA,GACJ;AAAA,cACA,gBAAAK;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWH,EAAO,kCAAkC;AAAA,kBACpD,MAAK;AAAA,kBAEL,UAAA,gBAAAG;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,OAAM;AAAA,sBACN,WAAWL,EAAO,4BAA4B;AAAA,sBAC9C,OAAOJ,EAAoBT,CAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACnC;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatarGroup.css');const r={"user-avatar-group":"_user-avatar-group_sgxpf_2","user-avatar-group__item":"_user-avatar-group__item_sgxpf_7","user-avatar-group__tooltip-layer":"_user-avatar-group__tooltip-layer_sgxpf_26","user-avatar-group__trigger":"_user-avatar-group__trigger_sgxpf_31","user-avatar-group__tooltip":"_user-avatar-group__tooltip_sgxpf_26","user-avatar-group__overflow":"_user-avatar-group__overflow_sgxpf_55","user-avatar-group--size-24":"_user-avatar-group--size-24_sgxpf_67","user-avatar-group--size-28":"_user-avatar-group--size-28_sgxpf_79","user-avatar-group--size-32":"_user-avatar-group--size-32_sgxpf_91","user-avatar-group--size-40":"_user-avatar-group--size-40_sgxpf_103","user-avatar-group--size-48":"_user-avatar-group--size-48_sgxpf_115","user-avatar-group--size-56":"_user-avatar-group--size-56_sgxpf_127","user-avatar-group--size-64":"_user-avatar-group--size-64_sgxpf_139","user-avatar-group--size-72":"_user-avatar-group--size-72_sgxpf_151"};exports.default=r;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatarGroup.css');const r={"user-avatar-group":"_user-avatar-group_17zfx_2","user-avatar-group__item":"_user-avatar-group__item_17zfx_7","user-avatar-group__tooltip-layer":"_user-avatar-group__tooltip-layer_17zfx_26","user-avatar-group__trigger":"_user-avatar-group__trigger_17zfx_31","user-avatar-group__tooltip":"_user-avatar-group__tooltip_17zfx_26","user-avatar-group__overflow":"_user-avatar-group__overflow_17zfx_55","user-avatar-group--size-24":"_user-avatar-group--size-24_17zfx_67","user-avatar-group--size-28":"_user-avatar-group--size-28_17zfx_79","user-avatar-group--size-32":"_user-avatar-group--size-32_17zfx_91","user-avatar-group--size-40":"_user-avatar-group--size-40_17zfx_103","user-avatar-group--size-48":"_user-avatar-group--size-48_17zfx_115","user-avatar-group--size-56":"_user-avatar-group--size-56_17zfx_127","user-avatar-group--size-64":"_user-avatar-group--size-64_17zfx_139","user-avatar-group--size-72":"_user-avatar-group--size-72_17zfx_151"};exports.default=r;
2
2
  //# sourceMappingURL=UserAvatarGroup.module.scss.cjs.map
@@ -1,18 +1,18 @@
1
1
  import './UserAvatarGroup.css';const r = {
2
- "user-avatar-group": "_user-avatar-group_sgxpf_2",
3
- "user-avatar-group__item": "_user-avatar-group__item_sgxpf_7",
4
- "user-avatar-group__tooltip-layer": "_user-avatar-group__tooltip-layer_sgxpf_26",
5
- "user-avatar-group__trigger": "_user-avatar-group__trigger_sgxpf_31",
6
- "user-avatar-group__tooltip": "_user-avatar-group__tooltip_sgxpf_26",
7
- "user-avatar-group__overflow": "_user-avatar-group__overflow_sgxpf_55",
8
- "user-avatar-group--size-24": "_user-avatar-group--size-24_sgxpf_67",
9
- "user-avatar-group--size-28": "_user-avatar-group--size-28_sgxpf_79",
10
- "user-avatar-group--size-32": "_user-avatar-group--size-32_sgxpf_91",
11
- "user-avatar-group--size-40": "_user-avatar-group--size-40_sgxpf_103",
12
- "user-avatar-group--size-48": "_user-avatar-group--size-48_sgxpf_115",
13
- "user-avatar-group--size-56": "_user-avatar-group--size-56_sgxpf_127",
14
- "user-avatar-group--size-64": "_user-avatar-group--size-64_sgxpf_139",
15
- "user-avatar-group--size-72": "_user-avatar-group--size-72_sgxpf_151"
2
+ "user-avatar-group": "_user-avatar-group_17zfx_2",
3
+ "user-avatar-group__item": "_user-avatar-group__item_17zfx_7",
4
+ "user-avatar-group__tooltip-layer": "_user-avatar-group__tooltip-layer_17zfx_26",
5
+ "user-avatar-group__trigger": "_user-avatar-group__trigger_17zfx_31",
6
+ "user-avatar-group__tooltip": "_user-avatar-group__tooltip_17zfx_26",
7
+ "user-avatar-group__overflow": "_user-avatar-group__overflow_17zfx_55",
8
+ "user-avatar-group--size-24": "_user-avatar-group--size-24_17zfx_67",
9
+ "user-avatar-group--size-28": "_user-avatar-group--size-28_17zfx_79",
10
+ "user-avatar-group--size-32": "_user-avatar-group--size-32_17zfx_91",
11
+ "user-avatar-group--size-40": "_user-avatar-group--size-40_17zfx_103",
12
+ "user-avatar-group--size-48": "_user-avatar-group--size-48_17zfx_115",
13
+ "user-avatar-group--size-56": "_user-avatar-group--size-56_17zfx_127",
14
+ "user-avatar-group--size-64": "_user-avatar-group--size-64_17zfx_139",
15
+ "user-avatar-group--size-72": "_user-avatar-group--size-72_17zfx_151"
16
16
  };
17
17
  export {
18
18
  r as default
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),S=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","summary",'[contenteditable=""]','[contenteditable="true"]',"[tabindex]"].join(",");function w(r,s){for(let t=r;t;t=t.parentElement){if(t.hidden||t.hasAttribute("inert")||t.getAttribute("aria-hidden")==="true")return!0;const l=getComputedStyle(t);if(l.display==="none"||t===r&&l.visibility==="hidden")return!0;if(t===s)break}return!1}function x(r){return Array.from(r.querySelectorAll(S)).filter(s=>s.tabIndex>=0&&!s.matches(":disabled")&&!w(s,r))}const u=[];function T(r,{initialFocusRef:s,closeOnEscape:t=!0,onClose:l,active:p=!0}){const y=d.useRef(s);y.current=s;const m=d.useRef({closeOnEscape:t,onClose:l});m.current={closeOnEscape:t,onClose:l};const v=d.useRef(null),a=d.useRef(null);d.useEffect(()=>{var i;const c=document.activeElement;function b(){const o=u[u.length-1],f=v.current;return f&&u.includes(f)?o===f:a.current?a.current.wasTop&&o===a.current.below:o===void 0}const e=r.current,n=(i=y.current)==null?void 0:i.current;return n&&(e!=null&&e.contains(n))&&n.focus(),(!n||document.activeElement!==n)&&(e==null||e.focus()),()=>{b()&&c&&c.isConnected&&typeof c.focus=="function"&&c.focus()}},[r]),d.useEffect(()=>{if(!p)return;const c={};u.push(c),v.current=c,a.current=null;function b(e){var E,k;if(e.defaultPrevented||u[u.length-1]!==c)return;const n=r.current;if(!n)return;if(e.key==="Escape"){m.current.closeOnEscape&&((k=(E=m.current).onClose)==null||k.call(E));return}if(e.key!=="Tab")return;const i=x(n);if(i.length===0){e.preventDefault(),n.focus();return}const o=i[0],f=i[i.length-1],h=document.activeElement,g=!n.contains(h);e.shiftKey?(g||h===o||h===n)&&(e.preventDefault(),f.focus()):(g||h===f)&&(e.preventDefault(),o.focus())}return document.addEventListener("keydown",b),()=>{document.removeEventListener("keydown",b);const e=u.indexOf(c);a.current={wasTop:e===u.length-1,below:u[e-1]},u.splice(e,1)}},[r,p])}exports.useModalFocus=T;
2
+ //# sourceMappingURL=use-modal-focus.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-modal-focus.cjs","sources":["../../src/hooks/use-modal-focus.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'summary',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n '[tabindex]',\n].join(',');\n\nfunction isHidden(el: HTMLElement, root: HTMLElement): boolean {\n for (let node: HTMLElement | null = el; node; node = node.parentElement) {\n if (node.hidden || node.hasAttribute('inert')) return true;\n if (node.getAttribute('aria-hidden') === 'true') return true;\n const style = getComputedStyle(node);\n if (style.display === 'none') return true;\n if (node === el && style.visibility === 'hidden') return true;\n if (node === root) break;\n }\n return false;\n}\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter(\n (el) => el.tabIndex >= 0 && !el.matches(':disabled') && !isHidden(el, root),\n );\n}\n\n/** Open modals in mount order; only the last one reacts to Tab and Escape. */\nconst modalStack: object[] = [];\n\nexport interface UseModalFocusOptions {\n /** Element to focus on mount. Falls back to the dialog root. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Close on Escape. Default true. */\n closeOnEscape?: boolean;\n onClose?: () => void;\n /**\n * When false (e.g. during an exit transition) Tab and Escape are no longer\n * handled and the modal leaves the stack, but focus is still restored on\n * unmount. Default true.\n */\n active?: boolean;\n}\n\n/**\n * Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap\n * (focusable elements computed at keypress), Escape (skipped when already\n * handled), and focus restore on unmount.\n *\n * Tab and Escape are handled by one document listener, so the trap still holds\n * when focus sits outside the dialog (e.g. after a backdrop click), and only\n * the topmost active modal responds. Events whose default was prevented (by an\n * inner widget or the host's `onKeyDown`) are ignored.\n */\nexport function useModalFocus(\n rootRef: RefObject<HTMLElement | null>,\n {\n initialFocusRef,\n closeOnEscape = true,\n onClose,\n active = true,\n }: UseModalFocusOptions,\n): void {\n const initialFocusRefRef = useRef(initialFocusRef);\n initialFocusRefRef.current = initialFocusRef;\n const latest = useRef({ closeOnEscape, onClose });\n latest.current = { closeOnEscape, onClose };\n const keyToken = useRef<object | null>(null);\n // Stack position recorded when the token leaves the stack (exit start).\n const exit = useRef<{ wasTop: boolean; below: object | undefined } | null>(\n null,\n );\n\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n function shouldRestoreFocus(): boolean {\n const top = modalStack[modalStack.length - 1];\n const token = keyToken.current;\n if (token && modalStack.includes(token)) return top === token;\n if (!exit.current) return top === undefined;\n return exit.current.wasTop && top === exit.current.below;\n }\n const root = rootRef.current;\n const target = initialFocusRefRef.current?.current;\n if (target && root?.contains(target)) target.focus();\n if (!target || document.activeElement !== target) root?.focus();\n return () => {\n if (\n shouldRestoreFocus() &&\n previous &&\n previous.isConnected &&\n typeof previous.focus === 'function'\n ) {\n previous.focus();\n }\n };\n }, [rootRef]);\n\n useEffect(() => {\n if (!active) return;\n const token = {};\n modalStack.push(token);\n keyToken.current = token;\n exit.current = null;\n\n function handle(e: KeyboardEvent) {\n if (e.defaultPrevented || modalStack[modalStack.length - 1] !== token)\n return;\n const dialog = rootRef.current;\n if (!dialog) return;\n if (e.key === 'Escape') {\n if (latest.current.closeOnEscape) latest.current.onClose?.();\n return;\n }\n if (e.key !== 'Tab') return;\n const focusable = getFocusable(dialog);\n if (focusable.length === 0) {\n e.preventDefault();\n dialog.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const current = document.activeElement;\n const outside = !dialog.contains(current);\n if (e.shiftKey) {\n if (outside || current === first || current === dialog) {\n e.preventDefault();\n last.focus();\n }\n } else if (outside || current === last) {\n e.preventDefault();\n first.focus();\n }\n }\n document.addEventListener('keydown', handle);\n return () => {\n document.removeEventListener('keydown', handle);\n const index = modalStack.indexOf(token);\n exit.current = {\n wasTop: index === modalStack.length - 1,\n below: modalStack[index - 1],\n };\n modalStack.splice(index, 1);\n };\n }, [rootRef, active]);\n}\n"],"names":["FOCUSABLE_SELECTOR","isHidden","el","root","node","style","getFocusable","modalStack","useModalFocus","rootRef","initialFocusRef","closeOnEscape","onClose","active","initialFocusRefRef","useRef","latest","keyToken","exit","useEffect","previous","shouldRestoreFocus","top","token","target","_a","handle","dialog","_b","focusable","first","last","current","outside","index"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { RefObject } from 'react';
2
+ export interface UseModalFocusOptions {
3
+ /** Element to focus on mount. Falls back to the dialog root. */
4
+ initialFocusRef?: RefObject<HTMLElement | null>;
5
+ /** Close on Escape. Default true. */
6
+ closeOnEscape?: boolean;
7
+ onClose?: () => void;
8
+ /**
9
+ * When false (e.g. during an exit transition) Tab and Escape are no longer
10
+ * handled and the modal leaves the stack, but focus is still restored on
11
+ * unmount. Default true.
12
+ */
13
+ active?: boolean;
14
+ }
15
+ /**
16
+ * Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap
17
+ * (focusable elements computed at keypress), Escape (skipped when already
18
+ * handled), and focus restore on unmount.
19
+ *
20
+ * Tab and Escape are handled by one document listener, so the trap still holds
21
+ * when focus sits outside the dialog (e.g. after a backdrop click), and only
22
+ * the topmost active modal responds. Events whose default was prevented (by an
23
+ * inner widget or the host's `onKeyDown`) are ignored.
24
+ */
25
+ export declare function useModalFocus(rootRef: RefObject<HTMLElement | null>, { initialFocusRef, closeOnEscape, onClose, active, }: UseModalFocusOptions): void;
26
+ //# sourceMappingURL=use-modal-focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-modal-focus.d.ts","sourceRoot":"","sources":["../../src/hooks/use-modal-focus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAsCvC,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACtC,EACE,eAAe,EACf,aAAoB,EACpB,OAAO,EACP,MAAa,GACd,EAAE,oBAAoB,GACtB,IAAI,CAoFN"}
@@ -0,0 +1,91 @@
1
+ import { useRef as m, useEffect as x } from "react";
2
+ const w = [
3
+ "a[href]",
4
+ "area[href]",
5
+ "button:not([disabled])",
6
+ 'input:not([disabled]):not([type="hidden"])',
7
+ "select:not([disabled])",
8
+ "textarea:not([disabled])",
9
+ "summary",
10
+ '[contenteditable=""]',
11
+ '[contenteditable="true"]',
12
+ "[tabindex]"
13
+ ].join(",");
14
+ function A(r, i) {
15
+ for (let t = r; t; t = t.parentElement) {
16
+ if (t.hidden || t.hasAttribute("inert") || t.getAttribute("aria-hidden") === "true") return !0;
17
+ const d = getComputedStyle(t);
18
+ if (d.display === "none" || t === r && d.visibility === "hidden") return !0;
19
+ if (t === i) break;
20
+ }
21
+ return !1;
22
+ }
23
+ function S(r) {
24
+ return Array.from(
25
+ r.querySelectorAll(w)
26
+ ).filter(
27
+ (i) => i.tabIndex >= 0 && !i.matches(":disabled") && !A(i, r)
28
+ );
29
+ }
30
+ const u = [];
31
+ function C(r, {
32
+ initialFocusRef: i,
33
+ closeOnEscape: t = !0,
34
+ onClose: d,
35
+ active: h = !0
36
+ }) {
37
+ const y = m(i);
38
+ y.current = i;
39
+ const p = m({ closeOnEscape: t, onClose: d });
40
+ p.current = { closeOnEscape: t, onClose: d };
41
+ const v = m(null), l = m(
42
+ null
43
+ );
44
+ x(() => {
45
+ var o;
46
+ const c = document.activeElement;
47
+ function a() {
48
+ const s = u[u.length - 1], f = v.current;
49
+ return f && u.includes(f) ? s === f : l.current ? l.current.wasTop && s === l.current.below : s === void 0;
50
+ }
51
+ const e = r.current, n = (o = y.current) == null ? void 0 : o.current;
52
+ return n && (e != null && e.contains(n)) && n.focus(), (!n || document.activeElement !== n) && (e == null || e.focus()), () => {
53
+ a() && c && c.isConnected && typeof c.focus == "function" && c.focus();
54
+ };
55
+ }, [r]), x(() => {
56
+ if (!h) return;
57
+ const c = {};
58
+ u.push(c), v.current = c, l.current = null;
59
+ function a(e) {
60
+ var g, k;
61
+ if (e.defaultPrevented || u[u.length - 1] !== c)
62
+ return;
63
+ const n = r.current;
64
+ if (!n) return;
65
+ if (e.key === "Escape") {
66
+ p.current.closeOnEscape && ((k = (g = p.current).onClose) == null || k.call(g));
67
+ return;
68
+ }
69
+ if (e.key !== "Tab") return;
70
+ const o = S(n);
71
+ if (o.length === 0) {
72
+ e.preventDefault(), n.focus();
73
+ return;
74
+ }
75
+ const s = o[0], f = o[o.length - 1], b = document.activeElement, E = !n.contains(b);
76
+ e.shiftKey ? (E || b === s || b === n) && (e.preventDefault(), f.focus()) : (E || b === f) && (e.preventDefault(), s.focus());
77
+ }
78
+ return document.addEventListener("keydown", a), () => {
79
+ document.removeEventListener("keydown", a);
80
+ const e = u.indexOf(c);
81
+ l.current = {
82
+ wasTop: e === u.length - 1,
83
+ below: u[e - 1]
84
+ }, u.splice(e, 1);
85
+ };
86
+ }, [r, h]);
87
+ }
88
+ export {
89
+ C as useModalFocus
90
+ };
91
+ //# sourceMappingURL=use-modal-focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-modal-focus.js","sources":["../../src/hooks/use-modal-focus.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'summary',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n '[tabindex]',\n].join(',');\n\nfunction isHidden(el: HTMLElement, root: HTMLElement): boolean {\n for (let node: HTMLElement | null = el; node; node = node.parentElement) {\n if (node.hidden || node.hasAttribute('inert')) return true;\n if (node.getAttribute('aria-hidden') === 'true') return true;\n const style = getComputedStyle(node);\n if (style.display === 'none') return true;\n if (node === el && style.visibility === 'hidden') return true;\n if (node === root) break;\n }\n return false;\n}\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter(\n (el) => el.tabIndex >= 0 && !el.matches(':disabled') && !isHidden(el, root),\n );\n}\n\n/** Open modals in mount order; only the last one reacts to Tab and Escape. */\nconst modalStack: object[] = [];\n\nexport interface UseModalFocusOptions {\n /** Element to focus on mount. Falls back to the dialog root. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Close on Escape. Default true. */\n closeOnEscape?: boolean;\n onClose?: () => void;\n /**\n * When false (e.g. during an exit transition) Tab and Escape are no longer\n * handled and the modal leaves the stack, but focus is still restored on\n * unmount. Default true.\n */\n active?: boolean;\n}\n\n/**\n * Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap\n * (focusable elements computed at keypress), Escape (skipped when already\n * handled), and focus restore on unmount.\n *\n * Tab and Escape are handled by one document listener, so the trap still holds\n * when focus sits outside the dialog (e.g. after a backdrop click), and only\n * the topmost active modal responds. Events whose default was prevented (by an\n * inner widget or the host's `onKeyDown`) are ignored.\n */\nexport function useModalFocus(\n rootRef: RefObject<HTMLElement | null>,\n {\n initialFocusRef,\n closeOnEscape = true,\n onClose,\n active = true,\n }: UseModalFocusOptions,\n): void {\n const initialFocusRefRef = useRef(initialFocusRef);\n initialFocusRefRef.current = initialFocusRef;\n const latest = useRef({ closeOnEscape, onClose });\n latest.current = { closeOnEscape, onClose };\n const keyToken = useRef<object | null>(null);\n // Stack position recorded when the token leaves the stack (exit start).\n const exit = useRef<{ wasTop: boolean; below: object | undefined } | null>(\n null,\n );\n\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n function shouldRestoreFocus(): boolean {\n const top = modalStack[modalStack.length - 1];\n const token = keyToken.current;\n if (token && modalStack.includes(token)) return top === token;\n if (!exit.current) return top === undefined;\n return exit.current.wasTop && top === exit.current.below;\n }\n const root = rootRef.current;\n const target = initialFocusRefRef.current?.current;\n if (target && root?.contains(target)) target.focus();\n if (!target || document.activeElement !== target) root?.focus();\n return () => {\n if (\n shouldRestoreFocus() &&\n previous &&\n previous.isConnected &&\n typeof previous.focus === 'function'\n ) {\n previous.focus();\n }\n };\n }, [rootRef]);\n\n useEffect(() => {\n if (!active) return;\n const token = {};\n modalStack.push(token);\n keyToken.current = token;\n exit.current = null;\n\n function handle(e: KeyboardEvent) {\n if (e.defaultPrevented || modalStack[modalStack.length - 1] !== token)\n return;\n const dialog = rootRef.current;\n if (!dialog) return;\n if (e.key === 'Escape') {\n if (latest.current.closeOnEscape) latest.current.onClose?.();\n return;\n }\n if (e.key !== 'Tab') return;\n const focusable = getFocusable(dialog);\n if (focusable.length === 0) {\n e.preventDefault();\n dialog.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const current = document.activeElement;\n const outside = !dialog.contains(current);\n if (e.shiftKey) {\n if (outside || current === first || current === dialog) {\n e.preventDefault();\n last.focus();\n }\n } else if (outside || current === last) {\n e.preventDefault();\n first.focus();\n }\n }\n document.addEventListener('keydown', handle);\n return () => {\n document.removeEventListener('keydown', handle);\n const index = modalStack.indexOf(token);\n exit.current = {\n wasTop: index === modalStack.length - 1,\n below: modalStack[index - 1],\n };\n modalStack.splice(index, 1);\n };\n }, [rootRef, active]);\n}\n"],"names":["FOCUSABLE_SELECTOR","isHidden","el","root","node","style","getFocusable","modalStack","useModalFocus","rootRef","initialFocusRef","closeOnEscape","onClose","active","initialFocusRefRef","useRef","latest","keyToken","exit","useEffect","previous","shouldRestoreFocus","top","token","target","_a","handle","dialog","_b","focusable","first","last","current","outside","index"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),o=150;function l(e){const[s,i]=n.useState(e),[a,r]=n.useState(!1);return n.useEffect(()=>{if(e){i(!0);let t=0;const c=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>r(!0))});return()=>{cancelAnimationFrame(c),t&&cancelAnimationFrame(t)}}r(!1);const u=window.setTimeout(()=>i(!1),o);return()=>window.clearTimeout(u)},[e]),{mounted:s,visible:a}}exports.POPOVER_TRANSITION_MS=o;exports.usePopoverTransition=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),m=require("../utils/duration.cjs"),s=150;function f(e,i="--duration-quick"){const[a,n]=r.useState(e),[u,o]=r.useState(!1);return r.useEffect(()=>{if(e){n(!0);let t=0;const l=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>o(!0))});return()=>{cancelAnimationFrame(l),t&&cancelAnimationFrame(t)}}o(!1);const c=window.setTimeout(()=>n(!1),m.readDurationMs(i,s));return()=>window.clearTimeout(c)},[e,i]),{mounted:a,visible:u}}exports.POPOVER_TRANSITION_MS=s;exports.usePopoverTransition=f;
2
2
  //# sourceMappingURL=use-popover-transition.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-popover-transition.cjs","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n// --duration-quick is 150ms; keep in sync if that token changes.\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a popover mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. See CLAUDE.md:\n * \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(open: boolean) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(() => setMounted(false), POPOVER_TRANSITION_MS);\n return () => window.clearTimeout(t);\n }, [open]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t"],"mappings":"yGAGaA,EAAwB,IAO9B,SAASC,EAAqBC,EAAe,CAClD,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAASH,CAAI,EACrC,CAACI,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EAE5CG,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIN,EAAM,CACRE,EAAW,EAAI,EACf,IAAIK,EAAO,EACX,MAAMC,EAAO,sBAAsB,IAAM,CACvCD,EAAO,sBAAsB,IAAMF,EAAW,EAAI,CAAC,CACrD,CAAC,EACD,MAAO,IAAM,CACX,qBAAqBG,CAAI,EACrBD,wBAA2BA,CAAI,CACrC,CACF,CACAF,EAAW,EAAK,EAChB,MAAMI,EAAI,OAAO,WAAW,IAAMP,EAAW,EAAK,EAAGJ,CAAqB,EAC1E,MAAO,IAAM,OAAO,aAAaW,CAAC,CACpC,EAAG,CAACT,CAAI,CAAC,EAEF,CAAE,QAAAC,EAAS,QAAAG,CAAA,CACpB"}
1
+ {"version":3,"file":"use-popover-transition.cjs","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { readDurationMs } from '@/utils/duration';\n\n/** Fallback for `--duration-quick` when the token is not available. */\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a surface mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. The exit wait is read\n * from `durationToken` (default `--duration-quick`) so it always matches the\n * CSS transition. See CLAUDE.md: \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(\n open: boolean,\n durationToken = '--duration-quick',\n) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(\n () => setMounted(false),\n readDurationMs(durationToken, POPOVER_TRANSITION_MS),\n );\n return () => window.clearTimeout(t);\n }, [open, durationToken]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","durationToken","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t","readDurationMs"],"mappings":"4IAIaA,EAAwB,IAQ9B,SAASC,EACdC,EACAC,EAAgB,mBAChB,CACA,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAASJ,CAAI,EACrC,CAACK,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EAE5CG,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIP,EAAM,CACRG,EAAW,EAAI,EACf,IAAIK,EAAO,EACX,MAAMC,EAAO,sBAAsB,IAAM,CACvCD,EAAO,sBAAsB,IAAMF,EAAW,EAAI,CAAC,CACrD,CAAC,EACD,MAAO,IAAM,CACX,qBAAqBG,CAAI,EACrBD,wBAA2BA,CAAI,CACrC,CACF,CACAF,EAAW,EAAK,EAChB,MAAMI,EAAI,OAAO,WACf,IAAMP,EAAW,EAAK,EACtBQ,EAAAA,eAAeV,EAAeH,CAAqB,CAAA,EAErD,MAAO,IAAM,OAAO,aAAaY,CAAC,CACpC,EAAG,CAACV,EAAMC,CAAa,CAAC,EAEjB,CAAE,QAAAC,EAAS,QAAAG,CAAA,CACpB"}
@@ -1,10 +1,12 @@
1
+ /** Fallback for `--duration-quick` when the token is not available. */
1
2
  export declare const POPOVER_TRANSITION_MS = 150;
2
3
  /**
3
- * Keeps a popover mounted for the duration of its exit animation so the close
4
- * transition can play before React unmounts the node. See CLAUDE.md:
5
- * "Animation: popover panel open/close".
4
+ * Keeps a surface mounted for the duration of its exit animation so the close
5
+ * transition can play before React unmounts the node. The exit wait is read
6
+ * from `durationToken` (default `--duration-quick`) so it always matches the
7
+ * CSS transition. See CLAUDE.md: "Animation: popover panel open/close".
6
8
  */
7
- export declare function usePopoverTransition(open: boolean): {
9
+ export declare function usePopoverTransition(open: boolean, durationToken?: string): {
8
10
  mounted: boolean;
9
11
  visible: boolean;
10
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-popover-transition.d.ts","sourceRoot":"","sources":["../../src/hooks/use-popover-transition.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO;;;EAsBjD"}
1
+ {"version":3,"file":"use-popover-transition.d.ts","sourceRoot":"","sources":["../../src/hooks/use-popover-transition.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,aAAa,SAAqB;;;EA0BnC"}
@@ -1,25 +1,29 @@
1
- import { useState as r, useEffect as m } from "react";
2
- const c = 150;
3
- function l(e) {
4
- const [o, n] = r(e), [s, i] = r(!1);
5
- return m(() => {
1
+ import { useState as o, useEffect as c } from "react";
2
+ import { readDurationMs as f } from "../utils/duration.js";
3
+ const l = 150;
4
+ function w(e, r = "--duration-quick") {
5
+ const [a, i] = o(e), [s, n] = o(!1);
6
+ return c(() => {
6
7
  if (e) {
7
- n(!0);
8
+ i(!0);
8
9
  let t = 0;
9
- const u = requestAnimationFrame(() => {
10
- t = requestAnimationFrame(() => i(!0));
10
+ const m = requestAnimationFrame(() => {
11
+ t = requestAnimationFrame(() => n(!0));
11
12
  });
12
13
  return () => {
13
- cancelAnimationFrame(u), t && cancelAnimationFrame(t);
14
+ cancelAnimationFrame(m), t && cancelAnimationFrame(t);
14
15
  };
15
16
  }
16
- i(!1);
17
- const a = window.setTimeout(() => n(!1), c);
18
- return () => window.clearTimeout(a);
19
- }, [e]), { mounted: o, visible: s };
17
+ n(!1);
18
+ const u = window.setTimeout(
19
+ () => i(!1),
20
+ f(r, l)
21
+ );
22
+ return () => window.clearTimeout(u);
23
+ }, [e, r]), { mounted: a, visible: s };
20
24
  }
21
25
  export {
22
- c as POPOVER_TRANSITION_MS,
23
- l as usePopoverTransition
26
+ l as POPOVER_TRANSITION_MS,
27
+ w as usePopoverTransition
24
28
  };
25
29
  //# sourceMappingURL=use-popover-transition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-popover-transition.js","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n// --duration-quick is 150ms; keep in sync if that token changes.\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a popover mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. See CLAUDE.md:\n * \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(open: boolean) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(() => setMounted(false), POPOVER_TRANSITION_MS);\n return () => window.clearTimeout(t);\n }, [open]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t"],"mappings":";AAGO,MAAMA,IAAwB;AAO9B,SAASC,EAAqBC,GAAe;AAClD,QAAM,CAACC,GAASC,CAAU,IAAIC,EAASH,CAAI,GACrC,CAACI,GAASC,CAAU,IAAIF,EAAS,EAAK;AAE5C,SAAAG,EAAU,MAAM;AACd,QAAIN,GAAM;AACR,MAAAE,EAAW,EAAI;AACf,UAAIK,IAAO;AACX,YAAMC,IAAO,sBAAsB,MAAM;AACvC,QAAAD,IAAO,sBAAsB,MAAMF,EAAW,EAAI,CAAC;AAAA,MACrD,CAAC;AACD,aAAO,MAAM;AACX,6BAAqBG,CAAI,GACrBD,0BAA2BA,CAAI;AAAA,MACrC;AAAA,IACF;AACA,IAAAF,EAAW,EAAK;AAChB,UAAMI,IAAI,OAAO,WAAW,MAAMP,EAAW,EAAK,GAAGJ,CAAqB;AAC1E,WAAO,MAAM,OAAO,aAAaW,CAAC;AAAA,EACpC,GAAG,CAACT,CAAI,CAAC,GAEF,EAAE,SAAAC,GAAS,SAAAG,EAAA;AACpB;"}
1
+ {"version":3,"file":"use-popover-transition.js","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { readDurationMs } from '@/utils/duration';\n\n/** Fallback for `--duration-quick` when the token is not available. */\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a surface mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. The exit wait is read\n * from `durationToken` (default `--duration-quick`) so it always matches the\n * CSS transition. See CLAUDE.md: \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(\n open: boolean,\n durationToken = '--duration-quick',\n) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(\n () => setMounted(false),\n readDurationMs(durationToken, POPOVER_TRANSITION_MS),\n );\n return () => window.clearTimeout(t);\n }, [open, durationToken]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","durationToken","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t","readDurationMs"],"mappings":";;AAIO,MAAMA,IAAwB;AAQ9B,SAASC,EACdC,GACAC,IAAgB,oBAChB;AACA,QAAM,CAACC,GAASC,CAAU,IAAIC,EAASJ,CAAI,GACrC,CAACK,GAASC,CAAU,IAAIF,EAAS,EAAK;AAE5C,SAAAG,EAAU,MAAM;AACd,QAAIP,GAAM;AACR,MAAAG,EAAW,EAAI;AACf,UAAIK,IAAO;AACX,YAAMC,IAAO,sBAAsB,MAAM;AACvC,QAAAD,IAAO,sBAAsB,MAAMF,EAAW,EAAI,CAAC;AAAA,MACrD,CAAC;AACD,aAAO,MAAM;AACX,6BAAqBG,CAAI,GACrBD,0BAA2BA,CAAI;AAAA,MACrC;AAAA,IACF;AACA,IAAAF,EAAW,EAAK;AAChB,UAAMI,IAAI,OAAO;AAAA,MACf,MAAMP,EAAW,EAAK;AAAA,MACtBQ,EAAeV,GAAeH,CAAqB;AAAA,IAAA;AAErD,WAAO,MAAM,OAAO,aAAaY,CAAC;AAAA,EACpC,GAAG,CAACV,GAAMC,CAAa,CAAC,GAEjB,EAAE,SAAAC,GAAS,SAAAG,EAAA;AACpB;"}
package/dist/index.d.ts CHANGED
@@ -80,5 +80,6 @@ export * from './hooks/use-exit-animation';
80
80
  export * from './hooks/use-outside-close';
81
81
  export * from './hooks/use-popover-transition';
82
82
  export { toKebab } from './utils/string';
83
+ export type { BuiltInButtonProps, DataAttributes } from './utils/props';
83
84
  export { default as btnStyles } from './components/button/Button.module.scss';
84
85
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function u(n,t){if(typeof document>"u")return t;const o=getComputedStyle(document.documentElement).getPropertyValue(n).trim(),e=/^(\d*\.?\d+)(ms|s)$/.exec(o);if(!e)return t;const r=parseFloat(e[1]);return e[2]==="s"?r*1e3:r}exports.readDurationMs=u;
2
+ //# sourceMappingURL=duration.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.cjs","sources":["../../src/utils/duration.ts"],"sourcesContent":["/**\n * Reads a duration token (e.g. `--duration-quick`) from the document root and\n * returns milliseconds, so JS timers that wait on a CSS transition follow the\n * token instead of a hard-coded copy. Falls back when the token is missing\n * (SSR, tests, hosts that did not load the stylesheet).\n */\nexport function readDurationMs(token: string, fallbackMs: number): number {\n if (typeof document === 'undefined') return fallbackMs;\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const match = /^(\\d*\\.?\\d+)(ms|s)$/.exec(raw);\n if (!match) return fallbackMs;\n const value = parseFloat(match[1]);\n return match[2] === 's' ? value * 1000 : value;\n}\n"],"names":["readDurationMs","token","fallbackMs","raw","match","value"],"mappings":"gFAMO,SAASA,EAAeC,EAAeC,EAA4B,CACxE,GAAI,OAAO,SAAa,IAAa,OAAOA,EAC5C,MAAMC,EAAM,iBAAiB,SAAS,eAAe,EAClD,iBAAiBF,CAAK,EACtB,KAAA,EACGG,EAAQ,sBAAsB,KAAKD,CAAG,EAC5C,GAAI,CAACC,EAAO,OAAOF,EACnB,MAAMG,EAAQ,WAAWD,EAAM,CAAC,CAAC,EACjC,OAAOA,EAAM,CAAC,IAAM,IAAMC,EAAQ,IAAOA,CAC3C"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Reads a duration token (e.g. `--duration-quick`) from the document root and
3
+ * returns milliseconds, so JS timers that wait on a CSS transition follow the
4
+ * token instead of a hard-coded copy. Falls back when the token is missing
5
+ * (SSR, tests, hosts that did not load the stylesheet).
6
+ */
7
+ export declare function readDurationMs(token: string, fallbackMs: number): number;
8
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CASxE"}
@@ -0,0 +1,11 @@
1
+ function u(r, t) {
2
+ if (typeof document > "u") return t;
3
+ const o = getComputedStyle(document.documentElement).getPropertyValue(r).trim(), e = /^(\d*\.?\d+)(ms|s)$/.exec(o);
4
+ if (!e) return t;
5
+ const n = parseFloat(e[1]);
6
+ return e[2] === "s" ? n * 1e3 : n;
7
+ }
8
+ export {
9
+ u as readDurationMs
10
+ };
11
+ //# sourceMappingURL=duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.js","sources":["../../src/utils/duration.ts"],"sourcesContent":["/**\n * Reads a duration token (e.g. `--duration-quick`) from the document root and\n * returns milliseconds, so JS timers that wait on a CSS transition follow the\n * token instead of a hard-coded copy. Falls back when the token is missing\n * (SSR, tests, hosts that did not load the stylesheet).\n */\nexport function readDurationMs(token: string, fallbackMs: number): number {\n if (typeof document === 'undefined') return fallbackMs;\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const match = /^(\\d*\\.?\\d+)(ms|s)$/.exec(raw);\n if (!match) return fallbackMs;\n const value = parseFloat(match[1]);\n return match[2] === 's' ? value * 1000 : value;\n}\n"],"names":["readDurationMs","token","fallbackMs","raw","match","value"],"mappings":"AAMO,SAASA,EAAeC,GAAeC,GAA4B;AACxE,MAAI,OAAO,WAAa,IAAa,QAAOA;AAC5C,QAAMC,IAAM,iBAAiB,SAAS,eAAe,EAClD,iBAAiBF,CAAK,EACtB,KAAA,GACGG,IAAQ,sBAAsB,KAAKD,CAAG;AAC5C,MAAI,CAACC,EAAO,QAAOF;AACnB,QAAMG,IAAQ,WAAWD,EAAM,CAAC,CAAC;AACjC,SAAOA,EAAM,CAAC,MAAM,MAAMC,IAAQ,MAAOA;AAC3C;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function r(...e){return e.filter(Boolean).join(" ")}exports.mergeClassNames=r;
2
+ //# sourceMappingURL=props.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.cjs","sources":["../../src/utils/props.ts"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\n\n/** `data-*` attributes, so object literals like `{ 'data-testid': 'x' }` type-check. */\nexport type DataAttributes = {\n [key: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/**\n * Extra attributes for a component's built-in button (close, dismiss, back,\n * clear). The component's own `onClick`, `aria-label`, and variant props take\n * precedence; `className` is merged.\n */\nexport type BuiltInButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children' | 'style'\n> &\n DataAttributes;\n\nexport function mergeClassNames(\n ...names: Array<string | false | null | undefined>\n): string {\n return names.filter(Boolean).join(' ');\n}\n"],"names":["mergeClassNames","names"],"mappings":"gFAkBO,SAASA,KACXC,EACK,CACR,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC"}
@@ -0,0 +1,13 @@
1
+ import { ButtonHTMLAttributes } from 'react';
2
+ /** `data-*` attributes, so object literals like `{ 'data-testid': 'x' }` type-check. */
3
+ export type DataAttributes = {
4
+ [key: `data-${string}`]: string | number | boolean | undefined;
5
+ };
6
+ /**
7
+ * Extra attributes for a component's built-in button (close, dismiss, back,
8
+ * clear). The component's own `onClick`, `aria-label`, and variant props take
9
+ * precedence; `className` is merged.
10
+ */
11
+ export type BuiltInButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'style'> & DataAttributes;
12
+ export declare function mergeClassNames(...names: Array<string | false | null | undefined>): string;
13
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/utils/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,OAAO,CACrB,GACC,cAAc,CAAC;AAEjB,wBAAgB,eAAe,CAC7B,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GACjD,MAAM,CAER"}