@mattermost/compass-ui 0.1.0-alpha.27 → 0.1.0-alpha.28

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 (360) hide show
  1. package/dist/compass-ui.css +16 -0
  2. package/dist/components/admin-console-footer/AdminConsoleFooter.css +1 -1
  3. package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.cjs +1 -1
  4. package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.js +7 -7
  5. package/dist/components/admin-console-header/AdminConsoleHeader.css +1 -1
  6. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.cjs +1 -1
  7. package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.js +8 -8
  8. package/dist/components/admin-panel/AdminPanel.css +1 -1
  9. package/dist/components/admin-panel/AdminPanel.module.scss.cjs +1 -1
  10. package/dist/components/admin-panel/AdminPanel.module.scss.js +5 -5
  11. package/dist/components/admin-panel-footer/AdminPanelFooter.css +1 -1
  12. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.cjs +1 -1
  13. package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.js +5 -5
  14. package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
  15. package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
  16. package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
  17. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +6 -0
  18. package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
  19. package/dist/components/admin-panel-header/AdminPanelHeader.js +145 -109
  20. package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
  21. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
  22. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +11 -10
  23. package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js.map +1 -1
  24. package/dist/components/attachment-card/AttachmentCard.css +1 -1
  25. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
  26. package/dist/components/attachment-card/AttachmentCard.module.scss.js +22 -19
  27. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
  28. package/dist/components/button/Button.css +1 -1
  29. package/dist/components/button/Button.module.scss.cjs +1 -1
  30. package/dist/components/button/Button.module.scss.js +20 -19
  31. package/dist/components/button/Button.module.scss.js.map +1 -1
  32. package/dist/components/card-button/CardButton.css +1 -1
  33. package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
  34. package/dist/components/card-button/CardButton.module.scss.js +7 -7
  35. package/dist/components/card-button/CardButtonGroup.css +1 -1
  36. package/dist/components/card-button/CardButtonGroup.module.scss.cjs +1 -1
  37. package/dist/components/card-button/CardButtonGroup.module.scss.js +1 -1
  38. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.css +1 -1
  39. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.cjs +1 -1
  40. package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.js +8 -8
  41. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  42. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  43. package/dist/components/channel-sidebar-item/ChannelSidebarItem.css +1 -1
  44. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +66 -7
  45. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  46. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +163 -93
  47. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  48. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
  49. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +35 -22
  50. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
  51. package/dist/components/checkbox/Checkbox.css +1 -1
  52. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  53. package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
  54. package/dist/components/chip/Chip.cjs +1 -1
  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.map +1 -1
  58. package/dist/components/chip/Chip.js +8 -8
  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 +13 -10
  62. package/dist/components/chip/Chip.module.scss.js.map +1 -1
  63. package/dist/components/chip/ChipGroup.cjs +1 -1
  64. package/dist/components/chip/ChipGroup.cjs.map +1 -1
  65. package/dist/components/chip/ChipGroup.css +1 -1
  66. package/dist/components/chip/ChipGroup.d.ts +1 -1
  67. package/dist/components/chip/ChipGroup.d.ts.map +1 -1
  68. package/dist/components/chip/ChipGroup.js +30 -30
  69. package/dist/components/chip/ChipGroup.js.map +1 -1
  70. package/dist/components/chip/ChipGroup.module.scss.cjs +1 -1
  71. package/dist/components/chip/ChipGroup.module.scss.js +1 -1
  72. package/dist/components/combobox/Combobox.cjs +1 -1
  73. package/dist/components/combobox/Combobox.cjs.map +1 -1
  74. package/dist/components/combobox/Combobox.css +1 -1
  75. package/dist/components/combobox/Combobox.d.ts +10 -0
  76. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  77. package/dist/components/combobox/Combobox.js +269 -252
  78. package/dist/components/combobox/Combobox.js.map +1 -1
  79. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  80. package/dist/components/combobox/Combobox.module.scss.js +34 -31
  81. package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
  82. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  83. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  84. package/dist/components/date-range-picker/DateRangePicker.css +1 -1
  85. package/dist/components/date-range-picker/DateRangePicker.d.ts +14 -1
  86. package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
  87. package/dist/components/date-range-picker/DateRangePicker.js +217 -195
  88. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  89. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  90. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +29 -26
  91. package/dist/components/date-range-picker/DateRangePicker.module.scss.js.map +1 -1
  92. package/dist/components/divider/Divider.css +1 -1
  93. package/dist/components/divider/Divider.module.scss.cjs +1 -1
  94. package/dist/components/divider/Divider.module.scss.js +1 -1
  95. package/dist/components/dropdown/Dropdown.css +1 -1
  96. package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
  97. package/dist/components/dropdown/Dropdown.module.scss.js +23 -22
  98. package/dist/components/dropdown/Dropdown.module.scss.js.map +1 -1
  99. package/dist/components/emoji/Emoji.css +1 -1
  100. package/dist/components/emoji/Emoji.module.scss.cjs +1 -1
  101. package/dist/components/emoji/Emoji.module.scss.js +12 -12
  102. package/dist/components/emoji-button/EmojiButton.css +1 -1
  103. package/dist/components/emoji-button/EmojiButton.module.scss.cjs +1 -1
  104. package/dist/components/emoji-button/EmojiButton.module.scss.js +12 -9
  105. package/dist/components/emoji-button/EmojiButton.module.scss.js.map +1 -1
  106. package/dist/components/emoji-popover/EmojiPopover.css +1 -1
  107. package/dist/components/emoji-popover/EmojiPopover.module.scss.cjs +1 -1
  108. package/dist/components/emoji-popover/EmojiPopover.module.scss.js +21 -21
  109. package/dist/components/empty-state/EmptyState.css +1 -1
  110. package/dist/components/empty-state/EmptyState.module.scss.cjs +1 -1
  111. package/dist/components/empty-state/EmptyState.module.scss.js +7 -7
  112. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.css +1 -1
  113. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.cjs +1 -1
  114. package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.js +9 -9
  115. package/dist/components/field/FieldClearButton.css +1 -1
  116. package/dist/components/field/FieldClearButton.module.scss.cjs +1 -1
  117. package/dist/components/field/FieldClearButton.module.scss.js +3 -3
  118. package/dist/components/field-message/FieldMessage.css +1 -1
  119. package/dist/components/field-message/FieldMessage.module.scss.cjs +1 -1
  120. package/dist/components/field-message/FieldMessage.module.scss.js +7 -7
  121. package/dist/components/global-banner/GlobalBanner.css +1 -1
  122. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
  123. package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
  124. package/dist/components/icon/Icon.css +1 -1
  125. package/dist/components/icon/Icon.module.scss.cjs +1 -1
  126. package/dist/components/icon/Icon.module.scss.js +13 -13
  127. package/dist/components/icon-button/IconButton.css +1 -1
  128. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  129. package/dist/components/icon-button/IconButton.module.scss.js +19 -16
  130. package/dist/components/icon-button/IconButton.module.scss.js.map +1 -1
  131. package/dist/components/illustration/Illustration.css +1 -1
  132. package/dist/components/illustration/Illustration.module.scss.cjs +1 -1
  133. package/dist/components/illustration/Illustration.module.scss.js +1 -1
  134. package/dist/components/image-preview/ImagePreview.css +1 -1
  135. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  136. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  137. package/dist/components/link-preview/LinkPreview.css +1 -1
  138. package/dist/components/link-preview/LinkPreview.module.scss.cjs +1 -1
  139. package/dist/components/link-preview/LinkPreview.module.scss.js +14 -14
  140. package/dist/components/mention-badge/MentionBadge.css +1 -1
  141. package/dist/components/mention-badge/MentionBadge.module.scss.cjs +1 -1
  142. package/dist/components/mention-badge/MentionBadge.module.scss.js +9 -9
  143. package/dist/components/menu-group-heading/MenuGroupHeading.css +1 -1
  144. package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.cjs +1 -1
  145. package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.js +2 -2
  146. package/dist/components/menu-item/MenuItem.css +1 -1
  147. package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
  148. package/dist/components/menu-item/MenuItem.module.scss.js +18 -18
  149. package/dist/components/message-actions/MessageActions.css +1 -1
  150. package/dist/components/message-actions/MessageActions.module.scss.cjs +1 -1
  151. package/dist/components/message-actions/MessageActions.module.scss.js +2 -2
  152. package/dist/components/message-header/MessageHeader.css +1 -1
  153. package/dist/components/message-header/MessageHeader.module.scss.cjs +1 -1
  154. package/dist/components/message-header/MessageHeader.module.scss.js +3 -3
  155. package/dist/components/message-separator/MessageSeparator.css +1 -1
  156. package/dist/components/message-separator/MessageSeparator.module.scss.cjs +1 -1
  157. package/dist/components/message-separator/MessageSeparator.module.scss.js +11 -11
  158. package/dist/components/modal/Modal.cjs +1 -1
  159. package/dist/components/modal/Modal.cjs.map +1 -1
  160. package/dist/components/modal/Modal.css +1 -1
  161. package/dist/components/modal/Modal.d.ts +11 -1
  162. package/dist/components/modal/Modal.d.ts.map +1 -1
  163. package/dist/components/modal/Modal.js +38 -36
  164. package/dist/components/modal/Modal.js.map +1 -1
  165. package/dist/components/modal/Modal.module.scss.cjs +1 -1
  166. package/dist/components/modal/Modal.module.scss.js +11 -11
  167. package/dist/components/modal/ModalOverlay.css +1 -1
  168. package/dist/components/modal/ModalOverlay.module.scss.cjs +1 -1
  169. package/dist/components/modal/ModalOverlay.module.scss.js +5 -5
  170. package/dist/components/modal-footer/ModalFooter.css +1 -1
  171. package/dist/components/modal-footer/ModalFooter.module.scss.cjs +1 -1
  172. package/dist/components/modal-footer/ModalFooter.module.scss.js +11 -11
  173. package/dist/components/modal-header/ModalHeader.cjs +1 -1
  174. package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
  175. package/dist/components/modal-header/ModalHeader.css +1 -1
  176. package/dist/components/modal-header/ModalHeader.d.ts +13 -3
  177. package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
  178. package/dist/components/modal-header/ModalHeader.js +61 -55
  179. package/dist/components/modal-header/ModalHeader.js.map +1 -1
  180. package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
  181. package/dist/components/modal-header/ModalHeader.module.scss.js +18 -16
  182. package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
  183. package/dist/components/more-unreads-banner/MoreUnreadsBanner.css +1 -1
  184. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  185. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +8 -5
  186. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js.map +1 -1
  187. package/dist/components/new-message-banner/NewMessageBanner.css +1 -1
  188. package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs +1 -1
  189. package/dist/components/new-message-banner/NewMessageBanner.module.scss.js +9 -9
  190. package/dist/components/pagination-dots/PaginationDots.css +1 -1
  191. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  192. package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
  193. package/dist/components/password-input/PasswordInput.css +1 -1
  194. package/dist/components/password-input/PasswordInput.module.scss.cjs +1 -1
  195. package/dist/components/password-input/PasswordInput.module.scss.js +15 -14
  196. package/dist/components/password-input/PasswordInput.module.scss.js.map +1 -1
  197. package/dist/components/permalink-preview/PermalinkPreview.css +1 -1
  198. package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
  199. package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -13
  200. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.css +1 -1
  201. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs +1 -1
  202. package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js +7 -7
  203. package/dist/components/popover-menu/PopoverMenu.css +1 -1
  204. package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
  205. package/dist/components/popover-menu/PopoverMenu.module.scss.js +13 -13
  206. package/dist/components/popover-notice/PopoverNotice.css +1 -1
  207. package/dist/components/popover-notice/PopoverNotice.module.scss.cjs +1 -1
  208. package/dist/components/popover-notice/PopoverNotice.module.scss.js +14 -14
  209. package/dist/components/profile-popover/ProfilePopover.css +1 -1
  210. package/dist/components/profile-popover/ProfilePopover.module.scss.cjs +1 -1
  211. package/dist/components/profile-popover/ProfilePopover.module.scss.js +33 -33
  212. package/dist/components/progress-bar/ProgressBar.css +1 -1
  213. package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
  214. package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -9
  215. package/dist/components/radio/Radio.css +1 -1
  216. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  217. package/dist/components/radio/Radio.module.scss.js +12 -12
  218. package/dist/components/reaction-button/ReactionButton.css +1 -1
  219. package/dist/components/reaction-button/ReactionButton.module.scss.cjs +1 -1
  220. package/dist/components/reaction-button/ReactionButton.module.scss.js +8 -8
  221. package/dist/components/reactions-row/ReactionsRow.css +1 -1
  222. package/dist/components/reactions-row/ReactionsRow.module.scss.cjs +1 -1
  223. package/dist/components/reactions-row/ReactionsRow.module.scss.js +8 -8
  224. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
  225. package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
  226. package/dist/components/right-sidebar-header/RightSidebarHeader.css +1 -1
  227. package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
  228. package/dist/components/right-sidebar-header/RightSidebarHeader.js +39 -36
  229. package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
  230. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.cjs +1 -1
  231. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js +12 -13
  232. package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js.map +1 -1
  233. package/dist/components/scrollbar/Scrollbar.css +1 -1
  234. package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
  235. package/dist/components/scrollbar/Scrollbar.module.scss.js +5 -5
  236. package/dist/components/search-input/SearchInput.css +1 -1
  237. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  238. package/dist/components/search-input/SearchInput.module.scss.js +15 -15
  239. package/dist/components/search-tip-banner/SearchTipBanner.css +1 -1
  240. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs +1 -1
  241. package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js +3 -3
  242. package/dist/components/section-notice/SectionNotice.css +1 -1
  243. package/dist/components/section-notice/SectionNotice.module.scss.cjs +1 -1
  244. package/dist/components/section-notice/SectionNotice.module.scss.js +12 -12
  245. package/dist/components/segmented-control/SegmentedControl.cjs +2 -0
  246. package/dist/components/segmented-control/SegmentedControl.cjs.map +1 -0
  247. package/dist/components/segmented-control/SegmentedControl.css +1 -0
  248. package/dist/components/segmented-control/SegmentedControl.d.ts +71 -0
  249. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -0
  250. package/dist/components/segmented-control/SegmentedControl.js +173 -0
  251. package/dist/components/segmented-control/SegmentedControl.js.map +1 -0
  252. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs +2 -0
  253. package/dist/components/segmented-control/SegmentedControl.module.scss.cjs.map +1 -0
  254. package/dist/components/segmented-control/SegmentedControl.module.scss.js +20 -0
  255. package/dist/components/segmented-control/SegmentedControl.module.scss.js.map +1 -0
  256. package/dist/components/segmented-control/index.cjs +2 -0
  257. package/dist/components/segmented-control/index.cjs.map +1 -0
  258. package/dist/components/segmented-control/index.d.ts +3 -0
  259. package/dist/components/segmented-control/index.d.ts.map +1 -0
  260. package/dist/components/segmented-control/index.js +5 -0
  261. package/dist/components/segmented-control/index.js.map +1 -0
  262. package/dist/components/select/Select.cjs +1 -1
  263. package/dist/components/select/Select.cjs.map +1 -1
  264. package/dist/components/select/Select.css +1 -1
  265. package/dist/components/select/Select.d.ts +14 -0
  266. package/dist/components/select/Select.d.ts.map +1 -1
  267. package/dist/components/select/Select.js +151 -130
  268. package/dist/components/select/Select.js.map +1 -1
  269. package/dist/components/select/Select.module.scss.cjs +1 -1
  270. package/dist/components/select/Select.module.scss.js +28 -26
  271. package/dist/components/select/Select.module.scss.js.map +1 -1
  272. package/dist/components/shortcut-tag/ShortcutTag.css +1 -1
  273. package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs +1 -1
  274. package/dist/components/shortcut-tag/ShortcutTag.module.scss.js +7 -7
  275. package/dist/components/spinner/Spinner.css +1 -1
  276. package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
  277. package/dist/components/spinner/Spinner.module.scss.js +2 -2
  278. package/dist/components/status-badge/StatusBadge.cjs +1 -1
  279. package/dist/components/status-badge/StatusBadge.cjs.map +1 -1
  280. package/dist/components/status-badge/StatusBadge.css +1 -1
  281. package/dist/components/status-badge/StatusBadge.d.ts +3 -1
  282. package/dist/components/status-badge/StatusBadge.d.ts.map +1 -1
  283. package/dist/components/status-badge/StatusBadge.js +16 -15
  284. package/dist/components/status-badge/StatusBadge.js.map +1 -1
  285. package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
  286. package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
  287. package/dist/components/switch/Switch.css +1 -1
  288. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  289. package/dist/components/switch/Switch.module.scss.js +8 -8
  290. package/dist/components/tabs/Tabs.css +1 -1
  291. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  292. package/dist/components/tabs/Tabs.module.scss.js +16 -13
  293. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  294. package/dist/components/tag/Tag.css +1 -1
  295. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  296. package/dist/components/tag/Tag.module.scss.js +11 -11
  297. package/dist/components/team-avatar/TeamAvatar.css +1 -1
  298. package/dist/components/team-avatar/TeamAvatar.module.scss.cjs +1 -1
  299. package/dist/components/team-avatar/TeamAvatar.module.scss.js +17 -17
  300. package/dist/components/text-area/TextArea.css +1 -1
  301. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  302. package/dist/components/text-area/TextArea.module.scss.js +12 -12
  303. package/dist/components/text-input/TextInput.css +1 -1
  304. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  305. package/dist/components/text-input/TextInput.module.scss.js +19 -19
  306. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  307. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  308. package/dist/components/thread-footer/ThreadFooter.css +1 -1
  309. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  310. package/dist/components/thread-footer/ThreadFooter.js +14 -14
  311. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  312. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  313. package/dist/components/thread-footer/ThreadFooter.module.scss.js +19 -20
  314. package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
  315. package/dist/components/thread-list-item/ThreadListItem.css +1 -1
  316. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  317. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -26
  318. package/dist/components/tile-button/TileButton.css +1 -1
  319. package/dist/components/tile-button/TileButton.module.scss.cjs +1 -1
  320. package/dist/components/tile-button/TileButton.module.scss.js +6 -6
  321. package/dist/components/toast/Toast.css +1 -1
  322. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  323. package/dist/components/toast/Toast.module.scss.js +11 -11
  324. package/dist/components/tooltip/Tooltip.cjs +1 -1
  325. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  326. package/dist/components/tooltip/Tooltip.css +1 -1
  327. package/dist/components/tooltip/Tooltip.d.ts +10 -1
  328. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  329. package/dist/components/tooltip/Tooltip.js +29 -17
  330. package/dist/components/tooltip/Tooltip.js.map +1 -1
  331. package/dist/components/tooltip/Tooltip.module.scss.cjs +1 -1
  332. package/dist/components/tooltip/Tooltip.module.scss.js +7 -6
  333. package/dist/components/tooltip/Tooltip.module.scss.js.map +1 -1
  334. package/dist/components/tooltip/index.d.ts +1 -1
  335. package/dist/components/tooltip/index.d.ts.map +1 -1
  336. package/dist/components/tour-point/TourPoint.css +1 -1
  337. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  338. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  339. package/dist/components/unread-badge/UnreadBadge.css +1 -1
  340. package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
  341. package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
  342. package/dist/components/user-avatar/UserAvatar.cjs +1 -1
  343. package/dist/components/user-avatar/UserAvatar.cjs.map +1 -1
  344. package/dist/components/user-avatar/UserAvatar.css +1 -1
  345. package/dist/components/user-avatar/UserAvatar.d.ts +18 -8
  346. package/dist/components/user-avatar/UserAvatar.d.ts.map +1 -1
  347. package/dist/components/user-avatar/UserAvatar.js +84 -52
  348. package/dist/components/user-avatar/UserAvatar.js.map +1 -1
  349. package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
  350. package/dist/components/user-avatar/UserAvatar.module.scss.js +33 -26
  351. package/dist/components/user-avatar/UserAvatar.module.scss.js.map +1 -1
  352. package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
  353. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
  354. package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
  355. package/dist/index.cjs +1 -1
  356. package/dist/index.d.ts +1 -0
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js +57 -55
  359. package/dist/index.js.map +1 -1
  360. package/package.json +4 -1
@@ -1 +1 @@
1
- @keyframes _tour-point-panel-in_ujjyx_1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes _tour-point-pulse-ring_ujjyx_1{0%{transform:scale(1);opacity:0}2.25%{opacity:.52}8.25%{opacity:.38}37.5%,to{transform:scale(4.25);opacity:0}}._tour-point_ujjyx_28{position:relative;display:inline-flex;flex-direction:column;align-items:stretch;max-width:352px;min-width:280px}._tour-point__pointer_ujjyx_36{position:absolute;z-index:2;pointer-events:none;overflow:visible}._tour-point__pointer-triangle_ujjyx_42{position:relative;z-index:2;display:block;width:100%;height:100%;background-color:var(--button-bg)}._tour-point__pointer-pulse_ujjyx_50{position:absolute;z-index:0;width:40px;height:40px;pointer-events:none}._tour-point__pointer-pulse-ring_ujjyx_57{position:absolute;left:50%;top:50%;z-index:0;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:var(--radius-pill);background-color:rgba(var(--color-success-rgb),.36);transform-origin:center center;animation:_tour-point-pulse-ring_ujjyx_1 calc(4 * var(--duration-moderate) + 40 * var(--duration-quick) / 3) linear infinite;will-change:transform,opacity}._tour-point__pointer-pulse-ring--delay_ujjyx_71{animation-delay:calc(2 * var(--duration-moderate))}@media(prefers-reduced-motion:reduce){._tour-point__pointer-pulse-ring_ujjyx_57{animation:none;opacity:0}}._tour-point__pointer-pulse-core_ujjyx_80{position:absolute;left:50%;top:50%;z-index:1;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:var(--radius-pill);background-color:var(--color-success)}._tour-point__panel_ujjyx_91{position:relative;z-index:1;display:flex;flex-direction:column;border-radius:var(--radius-m);background-color:var(--button-bg);box-shadow:var(--elevation-4);animation:_tour-point-panel-in_ujjyx_1 var(--duration-quick) var(--ease-entrance) both}._tour-point--pointer-top-center_ujjyx_101 ._tour-point__panel_ujjyx_91,._tour-point--pointer-top-left_ujjyx_101 ._tour-point__panel_ujjyx_91,._tour-point--pointer-top-right_ujjyx_101 ._tour-point__panel_ujjyx_91{transform-origin:50% 0}._tour-point--pointer-bottom-center_ujjyx_104 ._tour-point__panel_ujjyx_91,._tour-point--pointer-bottom-left_ujjyx_104 ._tour-point__panel_ujjyx_91,._tour-point--pointer-bottom-right_ujjyx_104 ._tour-point__panel_ujjyx_91{transform-origin:50% 100%}._tour-point--pointer-left-center_ujjyx_107 ._tour-point__panel_ujjyx_91{transform-origin:0 50%}._tour-point--pointer-right-center_ujjyx_110 ._tour-point__panel_ujjyx_91{transform-origin:100% 50%}._tour-point__header_ujjyx_113{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--spacing-m);padding:var(--spacing-xl) var(--spacing-xl) 0}._tour-point_ujjyx_28 ._tour-point__panel_ujjyx_91 ._tour-point__header_ujjyx_113 ._tour-point__close_ujjyx_120{--focus-ring-color: var(--button-color);position:relative;top:-4px;right:-4px;color:color-mix(in srgb,var(--button-color) 64%,transparent)}._tour-point_ujjyx_28 ._tour-point__panel_ujjyx_91 ._tour-point__header_ujjyx_113 ._tour-point__close_ujjyx_120:hover:not(:disabled):not(:active){background-color:color-mix(in srgb,var(--button-color) 8%,transparent);color:color-mix(in srgb,var(--button-color) 75%,transparent)}._tour-point_ujjyx_28 ._tour-point__panel_ujjyx_91 ._tour-point__header_ujjyx_113 ._tour-point__close_ujjyx_120:active:not(:disabled){background-color:color-mix(in srgb,var(--button-color) 20%,transparent)}._tour-point__title_ujjyx_134{margin:0;padding-right:var(--spacing-xs);font-family:var(--font-family-body);font-size:var(--font-size-100);font-weight:var(--font-weight-semibold);line-height:var(--line-height-100);color:var(--neutral-0)}._tour-point__body_ujjyx_143{display:flex;flex-direction:column;gap:var(--spacing-m);padding:var(--spacing-m) var(--spacing-xl) var(--spacing-xl)}._tour-point__description_ujjyx_149{font-size:var(--font-size-100);font-weight:var(--font-weight-regular);line-height:var(--line-height-100);color:color-mix(in srgb,var(--neutral-0) 92%,transparent)}._tour-point__media_ujjyx_155{border-radius:var(--radius-s);background-color:var(--color-blue-800);padding:var(--spacing-m);color:color-mix(in srgb,var(--neutral-0) 88%,transparent);font-size:var(--font-size-75);line-height:var(--line-height-100);border:1px solid color-mix(in srgb,var(--neutral-0) 20%,transparent)}._tour-point__media_ujjyx_155 img{display:block;width:100%;height:auto;border-radius:var(--radius-xs)}._tour-point__footer_ujjyx_170{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-l);padding:0 var(--spacing-xl) var(--spacing-xl)}._tour-point__footer-spacer_ujjyx_177{flex:1 0 0;min-width:0}._tour-point__progress_ujjyx_181,._tour-point__next-wrap_ujjyx_184{flex-shrink:0}._tour-point__next-wrap_ujjyx_184 button{--focus-ring-color: var(--neutral-0);--button-fg: var(--button-bg);background-color:var(--neutral-0);border-color:transparent;color:var(--button-bg);transition:background-color var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition),outline-color var(--duration-quick) var(--ease-transition),outline-offset var(--duration-quick) var(--ease-transition)}._tour-point__next-wrap_ujjyx_184 button:hover:not(:disabled){background-color:color-mix(in srgb,var(--neutral-0) 92%,transparent)}._tour-point__next-wrap_ujjyx_184 button:active:not(:disabled){background-color:color-mix(in srgb,var(--neutral-0) 86%,transparent)}._tour-point--pointer-top-center_ujjyx_101 ._tour-point__pointer_ujjyx_36{top:-9px;left:50%;width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-top-center_ujjyx_101 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-center_ujjyx_101 ._tour-point__pointer-pulse_ujjyx_50{left:50%;top:0;margin-left:-20px;margin-top:-20px}._tour-point--pointer-top-left_ujjyx_101 ._tour-point__pointer_ujjyx_36{top:-9px;left:var(--spacing-xl);width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-top-left_ujjyx_101 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-left_ujjyx_101 ._tour-point__pointer-pulse_ujjyx_50{left:50%;top:0;margin-left:-20px;margin-top:-20px}._tour-point--pointer-top-right_ujjyx_101 ._tour-point__pointer_ujjyx_36{top:-9px;right:var(--spacing-xl);width:18px;height:9px;transform:translate(50%)}._tour-point--pointer-top-right_ujjyx_101 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-right_ujjyx_101 ._tour-point__pointer-pulse_ujjyx_50{left:50%;top:0;margin-left:-20px;margin-top:-20px}._tour-point--pointer-bottom-center_ujjyx_104 ._tour-point__pointer_ujjyx_36{bottom:-9px;left:50%;width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-bottom-center_ujjyx_104 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-center_ujjyx_104 ._tour-point__pointer-pulse_ujjyx_50{left:50%;bottom:0;margin-left:-20px;margin-bottom:-20px}._tour-point--pointer-bottom-left_ujjyx_104 ._tour-point__pointer_ujjyx_36{bottom:-9px;left:var(--spacing-xl);width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-bottom-left_ujjyx_104 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-left_ujjyx_104 ._tour-point__pointer-pulse_ujjyx_50{left:50%;bottom:0;margin-left:-20px;margin-bottom:-20px}._tour-point--pointer-bottom-right_ujjyx_104 ._tour-point__pointer_ujjyx_36{bottom:-9px;right:var(--spacing-xl);width:18px;height:9px;transform:translate(50%)}._tour-point--pointer-bottom-right_ujjyx_104 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-right_ujjyx_104 ._tour-point__pointer-pulse_ujjyx_50{left:50%;bottom:0;margin-left:-20px;margin-bottom:-20px}._tour-point--pointer-left-center_ujjyx_107 ._tour-point__pointer_ujjyx_36{left:-9px;top:50%;width:9px;height:18px;transform:translateY(-50%)}._tour-point--pointer-left-center_ujjyx_107 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(0% 50%,100% 0%,100% 100%)}._tour-point--pointer-left-center_ujjyx_107 ._tour-point__pointer-pulse_ujjyx_50{left:0;top:50%;margin-left:-20px;margin-top:-20px}._tour-point--pointer-right-center_ujjyx_110 ._tour-point__pointer_ujjyx_36{right:-9px;top:50%;width:9px;height:18px;transform:translateY(-50%)}._tour-point--pointer-right-center_ujjyx_110 ._tour-point__pointer-triangle_ujjyx_42{clip-path:polygon(100% 50%,0% 0%,0% 100%)}._tour-point--pointer-right-center_ujjyx_110 ._tour-point__pointer-pulse_ujjyx_50{right:0;top:50%;margin-right:-20px;margin-top:-20px}
1
+ @keyframes _tour-point-panel-in_1kzq3_1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes _tour-point-pulse-ring_1kzq3_1{0%{transform:scale(1);opacity:0}2.25%{opacity:.52}8.25%{opacity:.38}37.5%,to{transform:scale(4.25);opacity:0}}._tour-point_1kzq3_39{position:relative;display:inline-flex;flex-direction:column;align-items:stretch;max-width:352px;min-width:280px}._tour-point__pointer_1kzq3_47{position:absolute;z-index:2;pointer-events:none;overflow:visible}._tour-point__pointer-triangle_1kzq3_53{position:relative;z-index:2;display:block;width:100%;height:100%;background-color:var(--button-bg)}._tour-point__pointer-pulse_1kzq3_61{position:absolute;z-index:0;width:40px;height:40px;pointer-events:none}._tour-point__pointer-pulse-ring_1kzq3_68{position:absolute;left:50%;top:50%;z-index:0;width:12px;height:12px;margin:calc(-1 * var(--spacing-xxs)) 0 0 calc(-1 * var(--spacing-xxs));border-radius:var(--radius-pill);background-color:rgba(var(--color-success-rgb),.36);transform-origin:center center;animation:_tour-point-pulse-ring_1kzq3_1 calc(4 * var(--duration-moderate) + 40 * var(--duration-quick) / 3) linear infinite;will-change:transform,opacity}._tour-point__pointer-pulse-ring--delay_1kzq3_82{animation-delay:calc(2 * var(--duration-moderate))}@media(prefers-reduced-motion:reduce){._tour-point__pointer-pulse-ring_1kzq3_68{animation:none;opacity:0}}._tour-point__pointer-pulse-core_1kzq3_91{position:absolute;left:50%;top:50%;z-index:1;width:12px;height:12px;margin:calc(-1 * var(--spacing-xxs)) 0 0 calc(-1 * var(--spacing-xxs));border-radius:var(--radius-pill);background-color:var(--color-success)}._tour-point__panel_1kzq3_102{position:relative;z-index:1;display:flex;flex-direction:column;border-radius:var(--radius-m);background-color:var(--button-bg);box-shadow:var(--elevation-4);animation:_tour-point-panel-in_1kzq3_1 var(--duration-quick) var(--ease-entrance) both}._tour-point--pointer-top-center_1kzq3_112 ._tour-point__panel_1kzq3_102,._tour-point--pointer-top-left_1kzq3_112 ._tour-point__panel_1kzq3_102,._tour-point--pointer-top-right_1kzq3_112 ._tour-point__panel_1kzq3_102{transform-origin:50% 0}._tour-point--pointer-bottom-center_1kzq3_115 ._tour-point__panel_1kzq3_102,._tour-point--pointer-bottom-left_1kzq3_115 ._tour-point__panel_1kzq3_102,._tour-point--pointer-bottom-right_1kzq3_115 ._tour-point__panel_1kzq3_102{transform-origin:50% 100%}._tour-point--pointer-left-center_1kzq3_118 ._tour-point__panel_1kzq3_102{transform-origin:0 50%}._tour-point--pointer-right-center_1kzq3_121 ._tour-point__panel_1kzq3_102{transform-origin:100% 50%}._tour-point__header_1kzq3_124{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--spacing-m);padding:var(--spacing-xl) var(--spacing-xl) 0}._tour-point_1kzq3_39 ._tour-point__panel_1kzq3_102 ._tour-point__header_1kzq3_124 ._tour-point__close_1kzq3_131{--focus-ring-color: var(--button-color);position:relative;top:-4px;right:-4px;color:color-mix(in srgb,var(--button-color) 64%,transparent)}._tour-point_1kzq3_39 ._tour-point__panel_1kzq3_102 ._tour-point__header_1kzq3_124 ._tour-point__close_1kzq3_131:hover:not(:disabled):not(:active){background-color:color-mix(in srgb,var(--button-color) 8%,transparent);color:color-mix(in srgb,var(--button-color) 75%,transparent)}._tour-point_1kzq3_39 ._tour-point__panel_1kzq3_102 ._tour-point__header_1kzq3_124 ._tour-point__close_1kzq3_131:active:not(:disabled){background-color:color-mix(in srgb,var(--button-color) 20%,transparent)}._tour-point__title_1kzq3_145{margin:0;padding-right:var(--spacing-xs);font-family:var(--font-family-body);font-size:var(--font-size-100);font-weight:var(--font-weight-semibold);line-height:var(--line-height-100);color:var(--neutral-0)}._tour-point__body_1kzq3_154{display:flex;flex-direction:column;gap:var(--spacing-m);padding:var(--spacing-m) var(--spacing-xl) var(--spacing-xl)}._tour-point__description_1kzq3_160{font-size:var(--font-size-100);font-weight:var(--font-weight-regular);line-height:var(--line-height-100);color:color-mix(in srgb,var(--neutral-0) 92%,transparent)}._tour-point__media_1kzq3_166{border-radius:var(--radius-s);background-color:var(--color-blue-800);padding:var(--spacing-m);color:color-mix(in srgb,var(--neutral-0) 88%,transparent);font-size:var(--font-size-75);line-height:var(--line-height-100);border:1px solid color-mix(in srgb,var(--neutral-0) 20%,transparent)}._tour-point__media_1kzq3_166 img{display:block;width:100%;height:auto;border-radius:var(--radius-xs)}._tour-point__footer_1kzq3_181{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-l);padding:0 var(--spacing-xl) var(--spacing-xl)}._tour-point__footer-spacer_1kzq3_188{flex:1 0 0;min-width:0}._tour-point__progress_1kzq3_192,._tour-point__next-wrap_1kzq3_195{flex-shrink:0}._tour-point__next-wrap_1kzq3_195 button{--focus-ring-color: var(--neutral-0);--button-fg: var(--button-bg);background-color:var(--neutral-0);border-color:transparent;color:var(--button-bg);transition:background-color var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition)}._tour-point__next-wrap_1kzq3_195 button:hover:not(:disabled){background-color:color-mix(in srgb,var(--neutral-0) 92%,transparent)}._tour-point__next-wrap_1kzq3_195 button:active:not(:disabled){background-color:color-mix(in srgb,var(--neutral-0) 86%,transparent)}._tour-point--pointer-top-center_1kzq3_112 ._tour-point__pointer_1kzq3_47{top:-9px;left:50%;width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-top-center_1kzq3_112 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-center_1kzq3_112 ._tour-point__pointer-pulse_1kzq3_61{left:50%;top:0;margin-left:calc(-1 * var(--spacing-xl));margin-top:calc(-1 * var(--spacing-xl))}._tour-point--pointer-top-left_1kzq3_112 ._tour-point__pointer_1kzq3_47{top:-9px;left:var(--spacing-xl);width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-top-left_1kzq3_112 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-left_1kzq3_112 ._tour-point__pointer-pulse_1kzq3_61{left:50%;top:0;margin-left:calc(-1 * var(--spacing-xl));margin-top:calc(-1 * var(--spacing-xl))}._tour-point--pointer-top-right_1kzq3_112 ._tour-point__pointer_1kzq3_47{top:-9px;right:var(--spacing-xl);width:18px;height:9px;transform:translate(50%)}._tour-point--pointer-top-right_1kzq3_112 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 0%,0% 100%,100% 100%)}._tour-point--pointer-top-right_1kzq3_112 ._tour-point__pointer-pulse_1kzq3_61{left:50%;top:0;margin-left:calc(-1 * var(--spacing-xl));margin-top:calc(-1 * var(--spacing-xl))}._tour-point--pointer-bottom-center_1kzq3_115 ._tour-point__pointer_1kzq3_47{bottom:-9px;left:50%;width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-bottom-center_1kzq3_115 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-center_1kzq3_115 ._tour-point__pointer-pulse_1kzq3_61{left:50%;bottom:0;margin-left:calc(-1 * var(--spacing-xl));margin-bottom:calc(-1 * var(--spacing-xl))}._tour-point--pointer-bottom-left_1kzq3_115 ._tour-point__pointer_1kzq3_47{bottom:-9px;left:var(--spacing-xl);width:18px;height:9px;transform:translate(-50%)}._tour-point--pointer-bottom-left_1kzq3_115 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-left_1kzq3_115 ._tour-point__pointer-pulse_1kzq3_61{left:50%;bottom:0;margin-left:calc(-1 * var(--spacing-xl));margin-bottom:calc(-1 * var(--spacing-xl))}._tour-point--pointer-bottom-right_1kzq3_115 ._tour-point__pointer_1kzq3_47{bottom:-9px;right:var(--spacing-xl);width:18px;height:9px;transform:translate(50%)}._tour-point--pointer-bottom-right_1kzq3_115 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(50% 100%,0% 0%,100% 0%)}._tour-point--pointer-bottom-right_1kzq3_115 ._tour-point__pointer-pulse_1kzq3_61{left:50%;bottom:0;margin-left:calc(-1 * var(--spacing-xl));margin-bottom:calc(-1 * var(--spacing-xl))}._tour-point--pointer-left-center_1kzq3_118 ._tour-point__pointer_1kzq3_47{left:-9px;top:50%;width:9px;height:18px;transform:translateY(-50%)}._tour-point--pointer-left-center_1kzq3_118 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(0% 50%,100% 0%,100% 100%)}._tour-point--pointer-left-center_1kzq3_118 ._tour-point__pointer-pulse_1kzq3_61{left:0;top:50%;margin-left:calc(-1 * var(--spacing-xl));margin-top:calc(-1 * var(--spacing-xl))}._tour-point--pointer-right-center_1kzq3_121 ._tour-point__pointer_1kzq3_47{right:-9px;top:50%;width:9px;height:18px;transform:translateY(-50%)}._tour-point--pointer-right-center_1kzq3_121 ._tour-point__pointer-triangle_1kzq3_53{clip-path:polygon(100% 50%,0% 0%,0% 100%)}._tour-point--pointer-right-center_1kzq3_121 ._tour-point__pointer-pulse_1kzq3_61{right:0;top:50%;margin-right:calc(-1 * var(--spacing-xl));margin-top:calc(-1 * var(--spacing-xl))}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./TourPoint.css');const t={"tour-point":"_tour-point_ujjyx_28","tour-point__pointer":"_tour-point__pointer_ujjyx_36","tour-point__pointer-triangle":"_tour-point__pointer-triangle_ujjyx_42","tour-point__pointer-pulse":"_tour-point__pointer-pulse_ujjyx_50","tour-point__pointer-pulse-ring":"_tour-point__pointer-pulse-ring_ujjyx_57","tour-point-pulse-ring":"_tour-point-pulse-ring_ujjyx_1","tour-point__pointer-pulse-ring--delay":"_tour-point__pointer-pulse-ring--delay_ujjyx_71","tour-point__pointer-pulse-core":"_tour-point__pointer-pulse-core_ujjyx_80","tour-point__panel":"_tour-point__panel_ujjyx_91","tour-point-panel-in":"_tour-point-panel-in_ujjyx_1","tour-point--pointer-top-center":"_tour-point--pointer-top-center_ujjyx_101","tour-point--pointer-top-left":"_tour-point--pointer-top-left_ujjyx_101","tour-point--pointer-top-right":"_tour-point--pointer-top-right_ujjyx_101","tour-point--pointer-bottom-center":"_tour-point--pointer-bottom-center_ujjyx_104","tour-point--pointer-bottom-left":"_tour-point--pointer-bottom-left_ujjyx_104","tour-point--pointer-bottom-right":"_tour-point--pointer-bottom-right_ujjyx_104","tour-point--pointer-left-center":"_tour-point--pointer-left-center_ujjyx_107","tour-point--pointer-right-center":"_tour-point--pointer-right-center_ujjyx_110","tour-point__header":"_tour-point__header_ujjyx_113","tour-point__close":"_tour-point__close_ujjyx_120","tour-point__title":"_tour-point__title_ujjyx_134","tour-point__body":"_tour-point__body_ujjyx_143","tour-point__description":"_tour-point__description_ujjyx_149","tour-point__media":"_tour-point__media_ujjyx_155","tour-point__footer":"_tour-point__footer_ujjyx_170","tour-point__footer-spacer":"_tour-point__footer-spacer_ujjyx_177","tour-point__progress":"_tour-point__progress_ujjyx_181","tour-point__next-wrap":"_tour-point__next-wrap_ujjyx_184"};exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./TourPoint.css');const t={"tour-point":"_tour-point_1kzq3_39","tour-point__pointer":"_tour-point__pointer_1kzq3_47","tour-point__pointer-triangle":"_tour-point__pointer-triangle_1kzq3_53","tour-point__pointer-pulse":"_tour-point__pointer-pulse_1kzq3_61","tour-point__pointer-pulse-ring":"_tour-point__pointer-pulse-ring_1kzq3_68","tour-point-pulse-ring":"_tour-point-pulse-ring_1kzq3_1","tour-point__pointer-pulse-ring--delay":"_tour-point__pointer-pulse-ring--delay_1kzq3_82","tour-point__pointer-pulse-core":"_tour-point__pointer-pulse-core_1kzq3_91","tour-point__panel":"_tour-point__panel_1kzq3_102","tour-point-panel-in":"_tour-point-panel-in_1kzq3_1","tour-point--pointer-top-center":"_tour-point--pointer-top-center_1kzq3_112","tour-point--pointer-top-left":"_tour-point--pointer-top-left_1kzq3_112","tour-point--pointer-top-right":"_tour-point--pointer-top-right_1kzq3_112","tour-point--pointer-bottom-center":"_tour-point--pointer-bottom-center_1kzq3_115","tour-point--pointer-bottom-left":"_tour-point--pointer-bottom-left_1kzq3_115","tour-point--pointer-bottom-right":"_tour-point--pointer-bottom-right_1kzq3_115","tour-point--pointer-left-center":"_tour-point--pointer-left-center_1kzq3_118","tour-point--pointer-right-center":"_tour-point--pointer-right-center_1kzq3_121","tour-point__header":"_tour-point__header_1kzq3_124","tour-point__close":"_tour-point__close_1kzq3_131","tour-point__title":"_tour-point__title_1kzq3_145","tour-point__body":"_tour-point__body_1kzq3_154","tour-point__description":"_tour-point__description_1kzq3_160","tour-point__media":"_tour-point__media_1kzq3_166","tour-point__footer":"_tour-point__footer_1kzq3_181","tour-point__footer-spacer":"_tour-point__footer-spacer_1kzq3_188","tour-point__progress":"_tour-point__progress_1kzq3_192","tour-point__next-wrap":"_tour-point__next-wrap_1kzq3_195"};exports.default=t;
2
2
  //# sourceMappingURL=TourPoint.module.scss.cjs.map
@@ -1,32 +1,32 @@
1
1
  import './TourPoint.css';const t = {
2
- "tour-point": "_tour-point_ujjyx_28",
3
- "tour-point__pointer": "_tour-point__pointer_ujjyx_36",
4
- "tour-point__pointer-triangle": "_tour-point__pointer-triangle_ujjyx_42",
5
- "tour-point__pointer-pulse": "_tour-point__pointer-pulse_ujjyx_50",
6
- "tour-point__pointer-pulse-ring": "_tour-point__pointer-pulse-ring_ujjyx_57",
7
- "tour-point-pulse-ring": "_tour-point-pulse-ring_ujjyx_1",
8
- "tour-point__pointer-pulse-ring--delay": "_tour-point__pointer-pulse-ring--delay_ujjyx_71",
9
- "tour-point__pointer-pulse-core": "_tour-point__pointer-pulse-core_ujjyx_80",
10
- "tour-point__panel": "_tour-point__panel_ujjyx_91",
11
- "tour-point-panel-in": "_tour-point-panel-in_ujjyx_1",
12
- "tour-point--pointer-top-center": "_tour-point--pointer-top-center_ujjyx_101",
13
- "tour-point--pointer-top-left": "_tour-point--pointer-top-left_ujjyx_101",
14
- "tour-point--pointer-top-right": "_tour-point--pointer-top-right_ujjyx_101",
15
- "tour-point--pointer-bottom-center": "_tour-point--pointer-bottom-center_ujjyx_104",
16
- "tour-point--pointer-bottom-left": "_tour-point--pointer-bottom-left_ujjyx_104",
17
- "tour-point--pointer-bottom-right": "_tour-point--pointer-bottom-right_ujjyx_104",
18
- "tour-point--pointer-left-center": "_tour-point--pointer-left-center_ujjyx_107",
19
- "tour-point--pointer-right-center": "_tour-point--pointer-right-center_ujjyx_110",
20
- "tour-point__header": "_tour-point__header_ujjyx_113",
21
- "tour-point__close": "_tour-point__close_ujjyx_120",
22
- "tour-point__title": "_tour-point__title_ujjyx_134",
23
- "tour-point__body": "_tour-point__body_ujjyx_143",
24
- "tour-point__description": "_tour-point__description_ujjyx_149",
25
- "tour-point__media": "_tour-point__media_ujjyx_155",
26
- "tour-point__footer": "_tour-point__footer_ujjyx_170",
27
- "tour-point__footer-spacer": "_tour-point__footer-spacer_ujjyx_177",
28
- "tour-point__progress": "_tour-point__progress_ujjyx_181",
29
- "tour-point__next-wrap": "_tour-point__next-wrap_ujjyx_184"
2
+ "tour-point": "_tour-point_1kzq3_39",
3
+ "tour-point__pointer": "_tour-point__pointer_1kzq3_47",
4
+ "tour-point__pointer-triangle": "_tour-point__pointer-triangle_1kzq3_53",
5
+ "tour-point__pointer-pulse": "_tour-point__pointer-pulse_1kzq3_61",
6
+ "tour-point__pointer-pulse-ring": "_tour-point__pointer-pulse-ring_1kzq3_68",
7
+ "tour-point-pulse-ring": "_tour-point-pulse-ring_1kzq3_1",
8
+ "tour-point__pointer-pulse-ring--delay": "_tour-point__pointer-pulse-ring--delay_1kzq3_82",
9
+ "tour-point__pointer-pulse-core": "_tour-point__pointer-pulse-core_1kzq3_91",
10
+ "tour-point__panel": "_tour-point__panel_1kzq3_102",
11
+ "tour-point-panel-in": "_tour-point-panel-in_1kzq3_1",
12
+ "tour-point--pointer-top-center": "_tour-point--pointer-top-center_1kzq3_112",
13
+ "tour-point--pointer-top-left": "_tour-point--pointer-top-left_1kzq3_112",
14
+ "tour-point--pointer-top-right": "_tour-point--pointer-top-right_1kzq3_112",
15
+ "tour-point--pointer-bottom-center": "_tour-point--pointer-bottom-center_1kzq3_115",
16
+ "tour-point--pointer-bottom-left": "_tour-point--pointer-bottom-left_1kzq3_115",
17
+ "tour-point--pointer-bottom-right": "_tour-point--pointer-bottom-right_1kzq3_115",
18
+ "tour-point--pointer-left-center": "_tour-point--pointer-left-center_1kzq3_118",
19
+ "tour-point--pointer-right-center": "_tour-point--pointer-right-center_1kzq3_121",
20
+ "tour-point__header": "_tour-point__header_1kzq3_124",
21
+ "tour-point__close": "_tour-point__close_1kzq3_131",
22
+ "tour-point__title": "_tour-point__title_1kzq3_145",
23
+ "tour-point__body": "_tour-point__body_1kzq3_154",
24
+ "tour-point__description": "_tour-point__description_1kzq3_160",
25
+ "tour-point__media": "_tour-point__media_1kzq3_166",
26
+ "tour-point__footer": "_tour-point__footer_1kzq3_181",
27
+ "tour-point__footer-spacer": "_tour-point__footer-spacer_1kzq3_188",
28
+ "tour-point__progress": "_tour-point__progress_1kzq3_192",
29
+ "tour-point__next-wrap": "_tour-point__next-wrap_1kzq3_195"
30
30
  };
31
31
  export {
32
32
  t as default
@@ -1 +1 @@
1
- ._unread-badge_1i73f_2{display:inline-block;flex-shrink:0;border-radius:var(--radius-pill)}._unread-badge--size-6_1i73f_7{width:6px;height:6px}._unread-badge--size-8_1i73f_11{width:8px;height:8px}._unread-badge--context-team-icon_1i73f_15{background-color:var(--mention-bg)}._unread-badge--context-icon-button_1i73f_18{background-color:var(--button-bg)}
1
+ ._unread-badge_zggqc_13{display:inline-block;flex-shrink:0;border-radius:var(--radius-pill)}._unread-badge--size-6_zggqc_18{width:6px;height:6px}._unread-badge--size-8_zggqc_22{width:8px;height:8px}._unread-badge--context-team-icon_zggqc_26{background-color:var(--mention-bg)}._unread-badge--context-icon-button_zggqc_29{background-color:var(--button-bg)}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UnreadBadge.css');const e={"unread-badge":"_unread-badge_1i73f_2","unread-badge--size-6":"_unread-badge--size-6_1i73f_7","unread-badge--size-8":"_unread-badge--size-8_1i73f_11","unread-badge--context-team-icon":"_unread-badge--context-team-icon_1i73f_15","unread-badge--context-icon-button":"_unread-badge--context-icon-button_1i73f_18"};exports.default=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UnreadBadge.css');const e={"unread-badge":"_unread-badge_zggqc_13","unread-badge--size-6":"_unread-badge--size-6_zggqc_18","unread-badge--size-8":"_unread-badge--size-8_zggqc_22","unread-badge--context-team-icon":"_unread-badge--context-team-icon_zggqc_26","unread-badge--context-icon-button":"_unread-badge--context-icon-button_zggqc_29"};exports.default=e;
2
2
  //# sourceMappingURL=UnreadBadge.module.scss.cjs.map
@@ -1,9 +1,9 @@
1
1
  import './UnreadBadge.css';const e = {
2
- "unread-badge": "_unread-badge_1i73f_2",
3
- "unread-badge--size-6": "_unread-badge--size-6_1i73f_7",
4
- "unread-badge--size-8": "_unread-badge--size-8_1i73f_11",
5
- "unread-badge--context-team-icon": "_unread-badge--context-team-icon_1i73f_15",
6
- "unread-badge--context-icon-button": "_unread-badge--context-icon-button_1i73f_18"
2
+ "unread-badge": "_unread-badge_zggqc_13",
3
+ "unread-badge--size-6": "_unread-badge--size-6_zggqc_18",
4
+ "unread-badge--size-8": "_unread-badge--size-8_zggqc_22",
5
+ "unread-badge--context-team-icon": "_unread-badge--context-team-icon_zggqc_26",
6
+ "unread-badge--context-icon-button": "_unread-badge--context-icon-button_zggqc_29"
7
7
  };
8
8
  export {
9
9
  e as default
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),v=require("../status-badge/StatusBadge.cjs"),u=require("../../utils/string.cjs"),t=require("./UserAvatar.module.scss.cjs"),c=["red","purple","neutral","blue","cyan","yellow","green","orange"],C={12:"xx-small",16:"xx-small",20:"x-small",24:"x-small",28:"x-small",32:"small",40:"small",48:"small",56:"medium",64:"medium",72:"medium",80:"medium",96:"large",120:"large"};function j(e){let l=0;for(let a=0;a<e.length;a++)l=l*31+e.charCodeAt(a)|0;return c[Math.abs(l)%c.length]}function p(e){var o;const l=e.trim();if(!l)return"";const a=l.split(/\s+/)[0];return a[0].toUpperCase()+(((o=a[1])==null?void 0:o.toLowerCase())??"")}function A({alt:e,className:l="",src:a,name:o,fallbackColor:m,size:s="48",status:d=!1,...f}){const _=t.default[`user-avatar--size-${u.toKebab(s)}`],b=[t.default["user-avatar"],_,l].filter(Boolean).join(" "),n=!a,i=o??e,g=n?p(i):"",h=m??j(i),x=n?t.default[`user-avatar__fallback--${u.toKebab(h)}`]:"";return r.jsxs("div",{className:b,"data-size":s,children:[n?r.jsx("span",{className:[t.default["user-avatar__fallback"],x].filter(Boolean).join(" "),role:"img","aria-label":e,children:g}):r.jsx("img",{...f,alt:e,className:t.default["user-avatar__image"],src:a,width:Number(s),height:Number(s)}),d&&r.jsx("span",{className:t.default["user-avatar__status"],children:r.jsx(v.default,{status:"online",size:C[s]})})]})}exports.default=A;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("react/jsx-runtime"),f=require("react"),B=require("../status-badge/StatusBadge.cjs"),g=require("../../utils/string.cjs"),l=require("./UserAvatar.module.scss.cjs"),b=["red","purple","neutral","blue","cyan","yellow","green","orange","charcoal","indigo","teal"],F={12:"xx-small",16:"xx-small",20:"x-small",24:"x-small",28:"x-small",32:"small",36:"small",40:"small",48:"small",50:"small",56:"medium",64:"medium",72:"medium",80:"medium",96:"large",120:"large",128:"large"};function U(s){let a=0;for(let e=0;e<s.length;e++)a=a*31+s.charCodeAt(e)|0;return b[Math.abs(a)%b.length]}function w(s){var t;const a=s.trim();if(!a)return"";const e=a.split(/\s+/)[0];return e[0].toUpperCase()+(((t=e[1])==null?void 0:t.toLowerCase())??"")}const L=f.forwardRef(function({alt:a,className:e="",src:t,name:_,fallbackColor:v,size:r="48",status:u,statusLabel:h,onError:o,...x},S){const[A,C]=f.useState(),j=l.default[`user-avatar--size-${g.toKebab(r)}`],p=[l.default["user-avatar"],j,e].filter(Boolean).join(" "),c=!!t&&t===A,n=!t||c,d=_??a,N=n?w(d):"",R=v??U(d),k=n?l.default[`user-avatar__fallback--${g.toKebab(R)}`]:"",m=u===!0?"online":u||void 0,q=F[r];return i.jsxs("div",{ref:S,className:p,"data-size":r,"data-image-failed":c?"true":void 0,children:[n?i.jsx("span",{className:[l.default["user-avatar__fallback"],k].filter(Boolean).join(" "),role:"img","aria-label":a,children:N}):i.jsx("img",{loading:"lazy",...x,onError:y=>{o==null||o(y),C(t)},alt:a,className:l.default["user-avatar__image"],src:t,width:Number(r),height:Number(r)}),m&&i.jsx("span",{className:l.default["user-avatar__status"],children:i.jsx(B.default,{status:m,size:q,label:h,className:l.default["user-avatar__badge"]})})]})});exports.default=L;
2
2
  //# sourceMappingURL=UserAvatar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatar.cjs","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"sourcesContent":["import type { ImgHTMLAttributes } from 'react';\nimport StatusBadge from '@/components/status-badge/StatusBadge';\nimport type { StatusBadgeSize } from '@/components/status-badge/StatusBadge';\nimport { toKebab } from '@/utils/string';\nimport styles from './UserAvatar.module.scss';\n\n/** Figma User Avatar sizes. */\nexport type UserAvatarSize =\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72'\n | '80'\n | '96'\n | '120';\n\n/** Figma User Avatar Fallback colour variants. */\nexport type UserAvatarFallbackColor =\n | 'red'\n | 'purple'\n | 'neutral'\n | 'blue'\n | 'cyan'\n | 'yellow'\n | 'green'\n | 'orange';\n\nexport interface UserAvatarProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n 'src' | 'alt' | 'width' | 'height'\n> {\n /** Alt text for the avatar image. */\n alt: string;\n /** Optional CSS class name. */\n className?: string;\n /**\n * Image URL for the avatar. When omitted, the avatar renders as Fallback\n * (initials on a deterministic colour background).\n */\n src?: string;\n /**\n * Display name used to derive initials and the fallback colour. Defaults\n * to `alt` when not provided.\n */\n name?: string;\n /** Force a specific fallback colour. Hashed from `name`/`alt` if omitted. */\n fallbackColor?: UserAvatarFallbackColor;\n /** Size variant. Figma: Size. Default: 48. */\n size?: UserAvatarSize;\n /** When true, shows online status badge (green dot with check). Figma: Status = On. */\n status?: boolean;\n}\n\nconst FALLBACK_COLORS: readonly UserAvatarFallbackColor[] = [\n 'red',\n 'purple',\n 'neutral',\n 'blue',\n 'cyan',\n 'yellow',\n 'green',\n 'orange',\n];\n\n/** Map UserAvatar size to StatusBadge size (Figma scale). */\nconst USER_AVATAR_TO_BADGE_SIZE: Record<UserAvatarSize, StatusBadgeSize> = {\n '12': 'xx-small',\n '16': 'xx-small',\n '20': 'x-small',\n '24': 'x-small',\n '28': 'x-small',\n '32': 'small',\n '40': 'small',\n '48': 'small',\n '56': 'medium',\n '64': 'medium',\n '72': 'medium',\n '80': 'medium',\n '96': 'large',\n '120': 'large',\n};\n\nfunction hashFallbackColor(s: string): UserAvatarFallbackColor {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return FALLBACK_COLORS[Math.abs(h) % FALLBACK_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return '';\n const firstName = trimmed.split(/\\s+/)[0]!;\n return firstName[0]!.toUpperCase() + (firstName[1]?.toLowerCase() ?? '');\n}\n\n/**\n * User Avatars represent a person — usually their uploaded photo, with initials on a colour\n * background as a fallback. Their circular shape distinguishes them from rounded-square Team\n * Avatars at a glance.\n */\nexport default function UserAvatar({\n alt,\n className = '',\n src,\n name,\n fallbackColor,\n size = '48',\n status = false,\n ...imgProps\n}: UserAvatarProps) {\n const sizeClass = styles[`user-avatar--size-${toKebab(size)}`];\n const rootClass = [styles['user-avatar'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const isFallback = !src;\n const displayName = name ?? alt;\n const initials = isFallback ? getInitials(displayName) : '';\n const color = fallbackColor ?? hashFallbackColor(displayName);\n const fallbackColorClass = isFallback\n ? styles[`user-avatar__fallback--${toKebab(color)}`]\n : '';\n\n return (\n <div className={rootClass} data-size={size}>\n {isFallback ? (\n <span\n className={[styles['user-avatar__fallback'], fallbackColorClass]\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n aria-label={alt}\n >\n {initials}\n </span>\n ) : (\n <img\n {...imgProps}\n alt={alt}\n className={styles['user-avatar__image']}\n src={src}\n width={Number(size)}\n height={Number(size)}\n />\n )}\n {status && (\n <span className={styles['user-avatar__status']}>\n <StatusBadge status=\"online\" size={USER_AVATAR_TO_BADGE_SIZE[size]} />\n </span>\n )}\n </div>\n );\n}\n"],"names":["FALLBACK_COLORS","USER_AVATAR_TO_BADGE_SIZE","hashFallbackColor","s","h","i","getInitials","name","trimmed","firstName","_a","UserAvatar","alt","className","src","fallbackColor","size","status","imgProps","sizeClass","styles","toKebab","rootClass","isFallback","displayName","initials","color","fallbackColorClass","jsxs","jsx","StatusBadge"],"mappings":"2QA4DMA,EAAsD,CAC1D,MACA,SACA,UACA,OACA,OACA,SACA,QACA,QACF,EAGMC,EAAqE,CACzE,GAAM,WACN,GAAM,WACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,QACN,IAAO,OACT,EAEA,SAASC,EAAkBC,EAAoC,CAC7D,IAAIC,EAAI,EACR,QAASC,EAAI,EAAGA,EAAIF,EAAE,OAAQE,IAC5BD,EAAKA,EAAI,GAAKD,EAAE,WAAWE,CAAC,EAAK,EAEnC,OAAOL,EAAgB,KAAK,IAAII,CAAC,EAAIJ,EAAgB,MAAM,CAC7D,CAEA,SAASM,EAAYC,EAAsB,OACzC,MAAMC,EAAUD,EAAK,KAAA,EACrB,GAAI,CAACC,EAAS,MAAO,GACrB,MAAMC,EAAYD,EAAQ,MAAM,KAAK,EAAE,CAAC,EACxC,OAAOC,EAAU,CAAC,EAAG,YAAA,KAAiBC,EAAAD,EAAU,CAAC,IAAX,YAAAC,EAAc,gBAAiB,GACvE,CAOA,SAAwBC,EAAW,CACjC,IAAAC,EACA,UAAAC,EAAY,GACZ,IAAAC,EACA,KAAAP,EACA,cAAAQ,EACA,KAAAC,EAAO,KACP,OAAAC,EAAS,GACT,GAAGC,CACL,EAAoB,CAClB,MAAMC,EAAYC,EAAAA,QAAO,qBAAqBC,EAAAA,QAAQL,CAAI,CAAC,EAAE,EACvDM,EAAY,CAACF,UAAO,aAAa,EAAGD,EAAWN,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG,EAELU,EAAa,CAACT,EACdU,EAAcjB,GAAQK,EACtBa,EAAWF,EAAajB,EAAYkB,CAAW,EAAI,GACnDE,EAAQX,GAAiBb,EAAkBsB,CAAW,EACtDG,EAAqBJ,EACvBH,EAAAA,QAAO,0BAA0BC,EAAAA,QAAQK,CAAK,CAAC,EAAE,EACjD,GAEJ,OACEE,EAAAA,KAAC,MAAA,CAAI,UAAWN,EAAW,YAAWN,EACnC,SAAA,CAAAO,EACCM,EAAAA,IAAC,OAAA,CACC,UAAW,CAACT,UAAO,uBAAuB,EAAGO,CAAkB,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG,EACX,KAAK,MACL,aAAYf,EAEX,SAAAa,CAAA,CAAA,EAGHI,EAAAA,IAAC,MAAA,CACE,GAAGX,EACJ,IAAAN,EACA,UAAWQ,EAAAA,QAAO,oBAAoB,EACtC,IAAAN,EACA,MAAO,OAAOE,CAAI,EAClB,OAAQ,OAAOA,CAAI,CAAA,CAAA,EAGtBC,GACCY,EAAAA,IAAC,OAAA,CAAK,UAAWT,EAAAA,QAAO,qBAAqB,EAC3C,SAAAS,EAAAA,IAACC,EAAAA,QAAA,CAAY,OAAO,SAAS,KAAM7B,EAA0Be,CAAI,EAAG,CAAA,CACtE,CAAA,EAEJ,CAEJ"}
1
+ {"version":3,"file":"UserAvatar.cjs","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react';\nimport type { ImgHTMLAttributes } from 'react';\nimport StatusBadge from '@/components/status-badge/StatusBadge';\nimport type {\n StatusBadgeSize,\n StatusBadgeStatus,\n} from '@/components/status-badge/StatusBadge';\nimport { toKebab } from '@/utils/string';\nimport styles from './UserAvatar.module.scss';\n\n/** Figma User Avatar sizes. */\nexport type UserAvatarSize =\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '36'\n | '40'\n | '48'\n | '50'\n | '56'\n | '64'\n | '72'\n | '80'\n | '96'\n | '120'\n | '128';\n\n/** Figma User Avatar Fallback colour variants. */\nexport type UserAvatarFallbackColor =\n | 'red'\n | 'purple'\n | 'neutral'\n | 'charcoal'\n | 'indigo'\n | 'teal'\n | 'blue'\n | 'cyan'\n | 'yellow'\n | 'green'\n | 'orange';\n\nexport interface UserAvatarProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n 'src' | 'alt' | 'width' | 'height'\n> {\n /** Alt text for the avatar image. */\n alt: string;\n /** Optional CSS class name. */\n className?: string;\n /**\n * Image URL for the avatar. When omitted, or when the image fails to load,\n * the avatar renders as Fallback (initials on a deterministic colour\n * background). A failed image sets `data-image-failed=\"true\"` on the root.\n */\n src?: string;\n /**\n * Display name used to derive initials and the fallback colour. Defaults\n * to `alt` when not provided.\n */\n name?: string;\n /** Force a specific fallback colour. Hashed from `name`/`alt` if omitted. */\n fallbackColor?: UserAvatarFallbackColor;\n /** Size variant. Figma: Size. Default: 48. */\n size?: UserAvatarSize;\n /**\n * Status badge shown on the avatar: `online`, `away`, `do-not-disturb` or `offline`.\n * Omit (or `false`) to hide it. `true` is kept for backwards compatibility and\n * means `online`. The badge size follows the avatar `size`.\n */\n status?: boolean | StatusBadgeStatus;\n /** Accessible name for the status badge. Defaults to the status value; pass a translated string. */\n statusLabel?: string;\n}\n\n/** Colours picked by the name hash when `fallbackColor` is not set. */\nconst FALLBACK_COLORS: readonly UserAvatarFallbackColor[] = [\n 'red',\n 'purple',\n 'neutral',\n 'blue',\n 'cyan',\n 'yellow',\n 'green',\n 'orange',\n 'charcoal',\n 'indigo',\n 'teal',\n];\n\n/** Map UserAvatar size to StatusBadge size (Figma scale). */\nconst USER_AVATAR_TO_BADGE_SIZE: Record<UserAvatarSize, StatusBadgeSize> = {\n '12': 'xx-small',\n '16': 'xx-small',\n '20': 'x-small',\n '24': 'x-small',\n '28': 'x-small',\n '32': 'small',\n '36': 'small',\n '40': 'small',\n '48': 'small',\n '50': 'small',\n '56': 'medium',\n '64': 'medium',\n '72': 'medium',\n '80': 'medium',\n '96': 'large',\n '120': 'large',\n '128': 'large',\n};\n\nfunction hashFallbackColor(s: string): UserAvatarFallbackColor {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return FALLBACK_COLORS[Math.abs(h) % FALLBACK_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return '';\n const firstName = trimmed.split(/\\s+/)[0]!;\n return firstName[0]!.toUpperCase() + (firstName[1]?.toLowerCase() ?? '');\n}\n\n/**\n * User Avatars represent a person — usually their uploaded photo, with initials on a colour\n * background as a fallback. Their circular shape distinguishes them from rounded-square Team\n * Avatars at a glance. `ref` points at the root element, which is present for both the image and\n * the fallback, so it works as a tooltip or popover anchor.\n */\nconst UserAvatar = forwardRef<HTMLDivElement, UserAvatarProps>(\n function UserAvatar(\n {\n alt,\n className = '',\n src,\n name,\n fallbackColor,\n size = '48',\n status,\n statusLabel,\n onError,\n ...imgProps\n },\n ref,\n ) {\n // The src that failed to load; a new src is tried again.\n const [failedSrc, setFailedSrc] = useState<string>();\n const sizeClass = styles[`user-avatar--size-${toKebab(size)}`];\n const rootClass = [styles['user-avatar'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const imageFailed = !!src && src === failedSrc;\n const isFallback = !src || imageFailed;\n const displayName = name ?? alt;\n const initials = isFallback ? getInitials(displayName) : '';\n const color = fallbackColor ?? hashFallbackColor(displayName);\n const fallbackColorClass = isFallback\n ? styles[`user-avatar__fallback--${toKebab(color)}`]\n : '';\n\n const badgeStatus: StatusBadgeStatus | undefined =\n status === true ? 'online' : status || undefined;\n const badgeSize = USER_AVATAR_TO_BADGE_SIZE[size];\n\n return (\n <div\n ref={ref}\n className={rootClass}\n data-size={size}\n data-image-failed={imageFailed ? 'true' : undefined}\n >\n {isFallback ? (\n <span\n className={[styles['user-avatar__fallback'], fallbackColorClass]\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n aria-label={alt}\n >\n {initials}\n </span>\n ) : (\n <img\n loading=\"lazy\"\n {...imgProps}\n onError={(e) => {\n onError?.(e);\n setFailedSrc(src);\n }}\n alt={alt}\n className={styles['user-avatar__image']}\n src={src}\n width={Number(size)}\n height={Number(size)}\n />\n )}\n {badgeStatus && (\n <span className={styles['user-avatar__status']}>\n <StatusBadge\n status={badgeStatus}\n size={badgeSize}\n label={statusLabel}\n className={styles['user-avatar__badge']}\n />\n </span>\n )}\n </div>\n );\n },\n);\n\nexport default UserAvatar;\n"],"names":["FALLBACK_COLORS","USER_AVATAR_TO_BADGE_SIZE","hashFallbackColor","h","i","getInitials","name","trimmed","firstName","_a","UserAvatar","forwardRef","alt","className","src","fallbackColor","size","status","statusLabel","onError","imgProps","ref","failedSrc","setFailedSrc","useState","sizeClass","styles","toKebab","rootClass","imageFailed","isFallback","displayName","initials","color","fallbackColorClass","badgeStatus","badgeSize","jsxs","jsx","e","StatusBadge"],"mappings":"8RA8EMA,EAAsD,CAC1D,MACA,SACA,UACA,OACA,OACA,SACA,QACA,SACA,WACA,SACA,MACF,EAGMC,EAAqE,CACzE,GAAM,WACN,GAAM,WACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,QACN,IAAO,QACP,IAAO,OACT,EAEA,SAASC,EAAkB,EAAoC,CAC7D,IAAIC,EAAI,EACR,QAASC,EAAI,EAAGA,EAAI,EAAE,OAAQA,IAC5BD,EAAKA,EAAI,GAAK,EAAE,WAAWC,CAAC,EAAK,EAEnC,OAAOJ,EAAgB,KAAK,IAAIG,CAAC,EAAIH,EAAgB,MAAM,CAC7D,CAEA,SAASK,EAAYC,EAAsB,OACzC,MAAMC,EAAUD,EAAK,KAAA,EACrB,GAAI,CAACC,EAAS,MAAO,GACrB,MAAMC,EAAYD,EAAQ,MAAM,KAAK,EAAE,CAAC,EACxC,OAAOC,EAAU,CAAC,EAAG,YAAA,KAAiBC,EAAAD,EAAU,CAAC,IAAX,YAAAC,EAAc,gBAAiB,GACvE,CAQA,MAAMC,EAAaC,EAAAA,WACjB,SACE,CACE,IAAAC,EACA,UAAAC,EAAY,GACZ,IAAAC,EACA,KAAAR,EACA,cAAAS,EACA,KAAAC,EAAO,KACP,OAAAC,EACA,YAAAC,EACA,QAAAC,EACA,GAAGC,CAAA,EAELC,EACA,CAEA,KAAM,CAACC,EAAWC,CAAY,EAAIC,WAAA,EAC5BC,EAAYC,EAAAA,QAAO,qBAAqBC,EAAAA,QAAQX,CAAI,CAAC,EAAE,EACvDY,EAAY,CAACF,UAAO,aAAa,EAAGD,EAAWZ,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG,EAELgB,EAAc,CAAC,CAACf,GAAOA,IAAQQ,EAC/BQ,EAAa,CAAChB,GAAOe,EACrBE,EAAczB,GAAQM,EACtBoB,EAAWF,EAAazB,EAAY0B,CAAW,EAAI,GACnDE,EAAQlB,GAAiBb,EAAkB6B,CAAW,EACtDG,EAAqBJ,EACvBJ,EAAAA,QAAO,0BAA0BC,EAAAA,QAAQM,CAAK,CAAC,EAAE,EACjD,GAEEE,EACJlB,IAAW,GAAO,SAAWA,GAAU,OACnCmB,EAAYnC,EAA0Be,CAAI,EAEhD,OACEqB,EAAAA,KAAC,MAAA,CACC,IAAAhB,EACA,UAAWO,EACX,YAAWZ,EACX,oBAAmBa,EAAc,OAAS,OAEzC,SAAA,CAAAC,EACCQ,EAAAA,IAAC,OAAA,CACC,UAAW,CAACZ,UAAO,uBAAuB,EAAGQ,CAAkB,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG,EACX,KAAK,MACL,aAAYtB,EAEX,SAAAoB,CAAA,CAAA,EAGHM,EAAAA,IAAC,MAAA,CACC,QAAQ,OACP,GAAGlB,EACJ,QAAUmB,GAAM,CACdpB,GAAA,MAAAA,EAAUoB,GACVhB,EAAaT,CAAG,CAClB,EACA,IAAAF,EACA,UAAWc,EAAAA,QAAO,oBAAoB,EACtC,IAAAZ,EACA,MAAO,OAAOE,CAAI,EAClB,OAAQ,OAAOA,CAAI,CAAA,CAAA,EAGtBmB,GACCG,EAAAA,IAAC,OAAA,CAAK,UAAWZ,EAAAA,QAAO,qBAAqB,EAC3C,SAAAY,EAAAA,IAACE,EAAAA,QAAA,CACC,OAAQL,EACR,KAAMC,EACN,MAAOlB,EACP,UAAWQ,EAAAA,QAAO,oBAAoB,CAAA,CAAA,CACxC,CACF,CAAA,CAAA,CAAA,CAIR,CACF"}
@@ -1 +1 @@
1
- ._user-avatar_1csb5_2{position:relative;flex-shrink:0;border-radius:var(--radius-pill);display:inline-block}._user-avatar__image_1csb5_8{display:block;width:100%;height:100%;object-fit:cover;vertical-align:middle;border-radius:var(--radius-pill)}._user-avatar__fallback_1csb5_16{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:var(--radius-pill);color:#ffffffeb;font-family:Metropolis,var(--font-family-body),sans-serif;font-weight:var(--font-weight-semibold);line-height:1;-webkit-user-select:none;user-select:none}._user-avatar__fallback--red_1csb5_29{background-color:var(--color-red-500)}._user-avatar__fallback--purple_1csb5_32{background-color:var(--color-purple-500)}._user-avatar__fallback--neutral_1csb5_35{background-color:var(--color-neutral-500)}._user-avatar__fallback--blue_1csb5_38{background-color:var(--color-blue-500)}._user-avatar__fallback--cyan_1csb5_41{background-color:var(--color-cyan-500)}._user-avatar__fallback--yellow_1csb5_44{background-color:var(--color-yellow-500)}._user-avatar__fallback--green_1csb5_47{background-color:var(--color-green-500)}._user-avatar__fallback--orange_1csb5_50{background-color:var(--color-orange-500)}._user-avatar__status_1csb5_53{position:absolute;right:0;bottom:0;display:flex;align-items:center;justify-content:center;box-sizing:content-box}._user-avatar--size-12_1csb5_62{width:12px;height:12px}._user-avatar--size-12_1csb5_62 ._user-avatar__fallback_1csb5_16{font-size:5.604px}._user-avatar--size-12_1csb5_62 ._user-avatar__status_1csb5_53{right:-1px;bottom:-1px}._user-avatar--size-16_1csb5_73{width:16px;height:16px}._user-avatar--size-16_1csb5_73 ._user-avatar__fallback_1csb5_16{font-size:7.472px}._user-avatar--size-16_1csb5_73 ._user-avatar__status_1csb5_53{right:-1px;bottom:-1px}._user-avatar--size-20_1csb5_84{width:20px;height:20px}._user-avatar--size-20_1csb5_84 ._user-avatar__fallback_1csb5_16{font-size:9.34px}._user-avatar--size-20_1csb5_84 ._user-avatar__status_1csb5_53{right:-1px;bottom:-1px}._user-avatar--size-24_1csb5_95{width:24px;height:24px}._user-avatar--size-24_1csb5_95 ._user-avatar__fallback_1csb5_16{font-size:11.208px}._user-avatar--size-24_1csb5_95 ._user-avatar__status_1csb5_53{right:-1px;bottom:-1px}._user-avatar--size-28_1csb5_106{width:28px;height:28px}._user-avatar--size-28_1csb5_106 ._user-avatar__fallback_1csb5_16{font-size:13.076px}._user-avatar--size-28_1csb5_106 ._user-avatar__status_1csb5_53{right:-1px;bottom:-1px}._user-avatar--size-32_1csb5_117{width:32px;height:32px}._user-avatar--size-32_1csb5_117 ._user-avatar__fallback_1csb5_16{font-size:14.944px}._user-avatar--size-32_1csb5_117 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-40_1csb5_128{width:40px;height:40px}._user-avatar--size-40_1csb5_128 ._user-avatar__fallback_1csb5_16{font-size:18.68px}._user-avatar--size-40_1csb5_128 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-48_1csb5_139{width:48px;height:48px}._user-avatar--size-48_1csb5_139 ._user-avatar__fallback_1csb5_16{font-size:22.416px}._user-avatar--size-48_1csb5_139 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-56_1csb5_150{width:56px;height:56px}._user-avatar--size-56_1csb5_150 ._user-avatar__fallback_1csb5_16{font-size:26.152px}._user-avatar--size-56_1csb5_150 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-64_1csb5_161{width:64px;height:64px}._user-avatar--size-64_1csb5_161 ._user-avatar__fallback_1csb5_16{font-size:29.888px}._user-avatar--size-64_1csb5_161 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-72_1csb5_172{width:72px;height:72px}._user-avatar--size-72_1csb5_172 ._user-avatar__fallback_1csb5_16{font-size:33.624px}._user-avatar--size-72_1csb5_172 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-80_1csb5_183{width:80px;height:80px}._user-avatar--size-80_1csb5_183 ._user-avatar__fallback_1csb5_16{font-size:37.36px}._user-avatar--size-80_1csb5_183 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-96_1csb5_194{width:96px;height:96px}._user-avatar--size-96_1csb5_194 ._user-avatar__fallback_1csb5_16{font-size:44.832px}._user-avatar--size-96_1csb5_194 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}._user-avatar--size-120_1csb5_205{width:120px;height:120px}._user-avatar--size-120_1csb5_205 ._user-avatar__fallback_1csb5_16{font-size:56.04px}._user-avatar--size-120_1csb5_205 ._user-avatar__status_1csb5_53{right:-2px;bottom:-2px}
1
+ ._user-avatar_enh1y_13{position:relative;flex-shrink:0;border-radius:var(--radius-pill);display:inline-block}._user-avatar__image_enh1y_19{display:block;width:100%;height:100%;object-fit:cover;vertical-align:middle;border-radius:var(--radius-pill)}._user-avatar__fallback_enh1y_27{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:var(--radius-pill);color:#ffffffeb;font-family:var(--font-family-heading);font-weight:var(--font-weight-semibold);line-height:1;-webkit-user-select:none;user-select:none}._user-avatar__fallback--red_enh1y_40{background-color:var(--color-red-500)}._user-avatar__fallback--purple_enh1y_43{background-color:var(--color-purple-500)}._user-avatar__fallback--neutral_enh1y_46{background-color:var(--color-neutral-500)}._user-avatar__fallback--charcoal_enh1y_49{background-color:var(--color-neutral-900)}._user-avatar__fallback--indigo_enh1y_52{background-color:var(--color-indigo-500)}._user-avatar__fallback--teal_enh1y_55{background-color:var(--color-teal-700)}._user-avatar__fallback--blue_enh1y_58{background-color:var(--color-blue-500)}._user-avatar__fallback--cyan_enh1y_61{background-color:var(--color-cyan-500)}._user-avatar__fallback--yellow_enh1y_64{background-color:var(--color-yellow-500)}._user-avatar__fallback--green_enh1y_67{background-color:var(--color-green-500)}._user-avatar__fallback--orange_enh1y_70{background-color:var(--color-orange-500)}._user-avatar__status_enh1y_73{position:absolute;right:0;bottom:0;display:flex;align-items:center;justify-content:center;box-sizing:content-box}._user-avatar--size-12_enh1y_82{width:12px;height:12px}._user-avatar--size-12_enh1y_82 ._user-avatar__fallback_enh1y_27{font-size:5.604px}._user-avatar--size-12_enh1y_82 ._user-avatar__status_enh1y_73{right:-1px;bottom:-1px}._user-avatar--size-16_enh1y_93{width:16px;height:16px}._user-avatar--size-16_enh1y_93 ._user-avatar__fallback_enh1y_27{font-size:7.472px}._user-avatar--size-16_enh1y_93 ._user-avatar__status_enh1y_73{right:-1px;bottom:-1px}._user-avatar--size-20_enh1y_104{width:20px;height:20px}._user-avatar--size-20_enh1y_104 ._user-avatar__fallback_enh1y_27{font-size:9.34px}._user-avatar--size-20_enh1y_104 ._user-avatar__status_enh1y_73{right:-1px;bottom:-1px}._user-avatar--size-24_enh1y_115{width:24px;height:24px}._user-avatar--size-24_enh1y_115 ._user-avatar__fallback_enh1y_27{font-size:11.208px}._user-avatar--size-24_enh1y_115 ._user-avatar__status_enh1y_73{right:-1px;bottom:-1px}._user-avatar--size-28_enh1y_126{width:28px;height:28px}._user-avatar--size-28_enh1y_126 ._user-avatar__fallback_enh1y_27{font-size:13.076px}._user-avatar--size-28_enh1y_126 ._user-avatar__status_enh1y_73{right:-1px;bottom:-1px}._user-avatar--size-32_enh1y_137{width:32px;height:32px}._user-avatar--size-32_enh1y_137 ._user-avatar__fallback_enh1y_27{font-size:14.944px}._user-avatar--size-32_enh1y_137 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-36_enh1y_148{width:36px;height:36px}._user-avatar--size-36_enh1y_148 ._user-avatar__fallback_enh1y_27{font-size:16.812px}._user-avatar--size-36_enh1y_148 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-40_enh1y_159{width:40px;height:40px}._user-avatar--size-40_enh1y_159 ._user-avatar__fallback_enh1y_27{font-size:18.68px}._user-avatar--size-40_enh1y_159 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-48_enh1y_170{width:48px;height:48px}._user-avatar--size-48_enh1y_170 ._user-avatar__fallback_enh1y_27{font-size:22.416px}._user-avatar--size-48_enh1y_170 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-50_enh1y_181{width:50px;height:50px}._user-avatar--size-50_enh1y_181 ._user-avatar__fallback_enh1y_27{font-size:23.35px}._user-avatar--size-50_enh1y_181 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-56_enh1y_192{width:56px;height:56px}._user-avatar--size-56_enh1y_192 ._user-avatar__fallback_enh1y_27{font-size:26.152px}._user-avatar--size-56_enh1y_192 ._user-avatar__status_enh1y_73 ._user-avatar__badge_enh1y_199{width:var(--icon-size-20);height:var(--icon-size-20)}._user-avatar--size-56_enh1y_192 ._user-avatar__status_enh1y_73{right:0;bottom:0}._user-avatar--size-64_enh1y_207{width:64px;height:64px}._user-avatar--size-64_enh1y_207 ._user-avatar__fallback_enh1y_27{font-size:29.888px}._user-avatar--size-64_enh1y_207 ._user-avatar__status_enh1y_73 ._user-avatar__badge_enh1y_199{width:var(--icon-size-20);height:var(--icon-size-20)}._user-avatar--size-64_enh1y_207 ._user-avatar__status_enh1y_73{right:0;bottom:0}._user-avatar--size-72_enh1y_222{width:72px;height:72px}._user-avatar--size-72_enh1y_222 ._user-avatar__fallback_enh1y_27{font-size:33.624px}._user-avatar--size-72_enh1y_222 ._user-avatar__status_enh1y_73 ._user-avatar__badge_enh1y_199{width:var(--icon-size-20);height:var(--icon-size-20)}._user-avatar--size-72_enh1y_222 ._user-avatar__status_enh1y_73{right:0;bottom:0}._user-avatar--size-80_enh1y_237{width:80px;height:80px}._user-avatar--size-80_enh1y_237 ._user-avatar__fallback_enh1y_27{font-size:37.36px}._user-avatar--size-80_enh1y_237 ._user-avatar__status_enh1y_73 ._user-avatar__badge_enh1y_199{width:var(--icon-size-20);height:var(--icon-size-20)}._user-avatar--size-80_enh1y_237 ._user-avatar__status_enh1y_73{right:0;bottom:0}._user-avatar--size-96_enh1y_252{width:96px;height:96px}._user-avatar--size-96_enh1y_252 ._user-avatar__fallback_enh1y_27{font-size:44.832px}._user-avatar--size-96_enh1y_252 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-120_enh1y_263{width:120px;height:120px}._user-avatar--size-120_enh1y_263 ._user-avatar__fallback_enh1y_27{font-size:56.04px}._user-avatar--size-120_enh1y_263 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}._user-avatar--size-128_enh1y_274{width:128px;height:128px}._user-avatar--size-128_enh1y_274 ._user-avatar__fallback_enh1y_27{font-size:59.776px}._user-avatar--size-128_enh1y_274 ._user-avatar__status_enh1y_73{right:-2px;bottom:-2px}
@@ -1,16 +1,18 @@
1
1
  import { ImgHTMLAttributes } from 'react';
2
+ import { StatusBadgeStatus } from '../status-badge/StatusBadge';
2
3
  /** Figma User Avatar sizes. */
3
- export type UserAvatarSize = '12' | '16' | '20' | '24' | '28' | '32' | '40' | '48' | '56' | '64' | '72' | '80' | '96' | '120';
4
+ export type UserAvatarSize = '12' | '16' | '20' | '24' | '28' | '32' | '36' | '40' | '48' | '50' | '56' | '64' | '72' | '80' | '96' | '120' | '128';
4
5
  /** Figma User Avatar Fallback colour variants. */
5
- export type UserAvatarFallbackColor = 'red' | 'purple' | 'neutral' | 'blue' | 'cyan' | 'yellow' | 'green' | 'orange';
6
+ export type UserAvatarFallbackColor = 'red' | 'purple' | 'neutral' | 'charcoal' | 'indigo' | 'teal' | 'blue' | 'cyan' | 'yellow' | 'green' | 'orange';
6
7
  export interface UserAvatarProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'width' | 'height'> {
7
8
  /** Alt text for the avatar image. */
8
9
  alt: string;
9
10
  /** Optional CSS class name. */
10
11
  className?: string;
11
12
  /**
12
- * Image URL for the avatar. When omitted, the avatar renders as Fallback
13
- * (initials on a deterministic colour background).
13
+ * Image URL for the avatar. When omitted, or when the image fails to load,
14
+ * the avatar renders as Fallback (initials on a deterministic colour
15
+ * background). A failed image sets `data-image-failed="true"` on the root.
14
16
  */
15
17
  src?: string;
16
18
  /**
@@ -22,13 +24,21 @@ export interface UserAvatarProps extends Omit<ImgHTMLAttributes<HTMLImageElement
22
24
  fallbackColor?: UserAvatarFallbackColor;
23
25
  /** Size variant. Figma: Size. Default: 48. */
24
26
  size?: UserAvatarSize;
25
- /** When true, shows online status badge (green dot with check). Figma: Status = On. */
26
- status?: boolean;
27
+ /**
28
+ * Status badge shown on the avatar: `online`, `away`, `do-not-disturb` or `offline`.
29
+ * Omit (or `false`) to hide it. `true` is kept for backwards compatibility and
30
+ * means `online`. The badge size follows the avatar `size`.
31
+ */
32
+ status?: boolean | StatusBadgeStatus;
33
+ /** Accessible name for the status badge. Defaults to the status value; pass a translated string. */
34
+ statusLabel?: string;
27
35
  }
28
36
  /**
29
37
  * User Avatars represent a person — usually their uploaded photo, with initials on a colour
30
38
  * background as a fallback. Their circular shape distinguishes them from rounded-square Team
31
- * Avatars at a glance.
39
+ * Avatars at a glance. `ref` points at the root element, which is present for both the image and
40
+ * the fallback, so it works as a tooltip or popover anchor.
32
41
  */
33
- export default function UserAvatar({ alt, className, src, name, fallbackColor, size, status, ...imgProps }: UserAvatarProps): import("react/jsx-runtime").JSX.Element;
42
+ declare const UserAvatar: import('react').ForwardRefExoticComponent<UserAvatarProps & import('react').RefAttributes<HTMLDivElement>>;
43
+ export default UserAvatar;
34
44
  //# sourceMappingURL=UserAvatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAM/C,+BAA+B;AAC/B,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;AAEV,kDAAkD;AAClD,MAAM,MAAM,uBAAuB,GAC/B,KAAK,GACL,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,iBAAiB,CAAC,gBAAgB,CAAC,EACnC,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CACnC;IACC,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8CD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,GAAG,EACH,SAAc,EACd,GAAG,EACH,IAAI,EACJ,aAAa,EACb,IAAW,EACX,MAAc,EACd,GAAG,QAAQ,EACZ,EAAE,eAAe,2CA2CjB"}
1
+ {"version":3,"file":"UserAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,sCAAsC,CAAC;AAI9C,+BAA+B;AAC/B,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,CAAC;AAEV,kDAAkD;AAClD,MAAM,MAAM,uBAAuB,GAC/B,KAAK,GACL,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,iBAAiB,CAAC,gBAAgB,CAAC,EACnC,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CACnC;IACC,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACrC,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqDD;;;;;GAKG;AACH,QAAA,MAAM,UAAU,4GAiFf,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,8 +1,9 @@
1
- import { jsxs as x, jsx as o } from "react/jsx-runtime";
2
- import C from "../status-badge/StatusBadge.js";
3
- import { toKebab as m } from "../../utils/string.js";
4
- import e from "./UserAvatar.module.scss.js";
5
- const c = [
1
+ import { jsxs as j, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as w, useState as L } from "react";
3
+ import R from "../status-badge/StatusBadge.js";
4
+ import { toKebab as f } from "../../utils/string.js";
5
+ import t from "./UserAvatar.module.scss.js";
6
+ const g = [
6
7
  "red",
7
8
  "purple",
8
9
  "neutral",
@@ -10,71 +11,102 @@ const c = [
10
11
  "cyan",
11
12
  "yellow",
12
13
  "green",
13
- "orange"
14
- ], v = {
14
+ "orange",
15
+ "charcoal",
16
+ "indigo",
17
+ "teal"
18
+ ], U = {
15
19
  12: "xx-small",
16
20
  16: "xx-small",
17
21
  20: "x-small",
18
22
  24: "x-small",
19
23
  28: "x-small",
20
24
  32: "small",
25
+ 36: "small",
21
26
  40: "small",
22
27
  48: "small",
28
+ 50: "small",
23
29
  56: "medium",
24
30
  64: "medium",
25
31
  72: "medium",
26
32
  80: "medium",
27
33
  96: "large",
28
- 120: "large"
34
+ 120: "large",
35
+ 128: "large"
29
36
  };
30
- function A(l) {
31
- let s = 0;
32
- for (let a = 0; a < l.length; a++)
33
- s = s * 31 + l.charCodeAt(a) | 0;
34
- return c[Math.abs(s) % c.length];
37
+ function O(s) {
38
+ let a = 0;
39
+ for (let e = 0; e < s.length; e++)
40
+ a = a * 31 + s.charCodeAt(e) | 0;
41
+ return g[Math.abs(a) % g.length];
35
42
  }
36
- function N(l) {
37
- var r;
38
- const s = l.trim();
39
- if (!s) return "";
40
- const a = s.split(/\s+/)[0];
41
- return a[0].toUpperCase() + (((r = a[1]) == null ? void 0 : r.toLowerCase()) ?? "");
43
+ function z(s) {
44
+ var l;
45
+ const a = s.trim();
46
+ if (!a) return "";
47
+ const e = a.split(/\s+/)[0];
48
+ return e[0].toUpperCase() + (((l = e[1]) == null ? void 0 : l.toLowerCase()) ?? "");
42
49
  }
43
- function L({
44
- alt: l,
45
- className: s = "",
46
- src: a,
47
- name: r,
48
- fallbackColor: u,
49
- size: t = "48",
50
- status: f = !1,
51
- ...d
52
- }) {
53
- const h = e[`user-avatar--size-${m(t)}`], p = [e["user-avatar"], h, s].filter(Boolean).join(" "), n = !a, i = r ?? l, _ = n ? N(i) : "", b = u ?? A(i), g = n ? e[`user-avatar__fallback--${m(b)}`] : "";
54
- return /* @__PURE__ */ x("div", { className: p, "data-size": t, children: [
55
- n ? /* @__PURE__ */ o(
56
- "span",
50
+ const G = w(
51
+ function({
52
+ alt: a,
53
+ className: e = "",
54
+ src: l,
55
+ name: b,
56
+ fallbackColor: _,
57
+ size: r = "48",
58
+ status: n,
59
+ statusLabel: h,
60
+ onError: i,
61
+ ...p
62
+ }, v) {
63
+ const [x, C] = L(), A = t[`user-avatar--size-${f(r)}`], N = [t["user-avatar"], A, e].filter(Boolean).join(" "), c = !!l && l === x, m = !l || c, u = b ?? a, S = m ? z(u) : "", k = _ ?? O(u), y = m ? t[`user-avatar__fallback--${f(k)}`] : "", d = n === !0 ? "online" : n || void 0, B = U[r];
64
+ return /* @__PURE__ */ j(
65
+ "div",
57
66
  {
58
- className: [e["user-avatar__fallback"], g].filter(Boolean).join(" "),
59
- role: "img",
60
- "aria-label": l,
61
- children: _
67
+ ref: v,
68
+ className: N,
69
+ "data-size": r,
70
+ "data-image-failed": c ? "true" : void 0,
71
+ children: [
72
+ m ? /* @__PURE__ */ o(
73
+ "span",
74
+ {
75
+ className: [t["user-avatar__fallback"], y].filter(Boolean).join(" "),
76
+ role: "img",
77
+ "aria-label": a,
78
+ children: S
79
+ }
80
+ ) : /* @__PURE__ */ o(
81
+ "img",
82
+ {
83
+ loading: "lazy",
84
+ ...p,
85
+ onError: (F) => {
86
+ i == null || i(F), C(l);
87
+ },
88
+ alt: a,
89
+ className: t["user-avatar__image"],
90
+ src: l,
91
+ width: Number(r),
92
+ height: Number(r)
93
+ }
94
+ ),
95
+ d && /* @__PURE__ */ o("span", { className: t["user-avatar__status"], children: /* @__PURE__ */ o(
96
+ R,
97
+ {
98
+ status: d,
99
+ size: B,
100
+ label: h,
101
+ className: t["user-avatar__badge"]
102
+ }
103
+ ) })
104
+ ]
62
105
  }
63
- ) : /* @__PURE__ */ o(
64
- "img",
65
- {
66
- ...d,
67
- alt: l,
68
- className: e["user-avatar__image"],
69
- src: a,
70
- width: Number(t),
71
- height: Number(t)
72
- }
73
- ),
74
- f && /* @__PURE__ */ o("span", { className: e["user-avatar__status"], children: /* @__PURE__ */ o(C, { status: "online", size: v[t] }) })
75
- ] });
76
- }
106
+ );
107
+ }
108
+ );
77
109
  export {
78
- L as default
110
+ G as default
79
111
  };
80
112
  //# sourceMappingURL=UserAvatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatar.js","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"sourcesContent":["import type { ImgHTMLAttributes } from 'react';\nimport StatusBadge from '@/components/status-badge/StatusBadge';\nimport type { StatusBadgeSize } from '@/components/status-badge/StatusBadge';\nimport { toKebab } from '@/utils/string';\nimport styles from './UserAvatar.module.scss';\n\n/** Figma User Avatar sizes. */\nexport type UserAvatarSize =\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72'\n | '80'\n | '96'\n | '120';\n\n/** Figma User Avatar Fallback colour variants. */\nexport type UserAvatarFallbackColor =\n | 'red'\n | 'purple'\n | 'neutral'\n | 'blue'\n | 'cyan'\n | 'yellow'\n | 'green'\n | 'orange';\n\nexport interface UserAvatarProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n 'src' | 'alt' | 'width' | 'height'\n> {\n /** Alt text for the avatar image. */\n alt: string;\n /** Optional CSS class name. */\n className?: string;\n /**\n * Image URL for the avatar. When omitted, the avatar renders as Fallback\n * (initials on a deterministic colour background).\n */\n src?: string;\n /**\n * Display name used to derive initials and the fallback colour. Defaults\n * to `alt` when not provided.\n */\n name?: string;\n /** Force a specific fallback colour. Hashed from `name`/`alt` if omitted. */\n fallbackColor?: UserAvatarFallbackColor;\n /** Size variant. Figma: Size. Default: 48. */\n size?: UserAvatarSize;\n /** When true, shows online status badge (green dot with check). Figma: Status = On. */\n status?: boolean;\n}\n\nconst FALLBACK_COLORS: readonly UserAvatarFallbackColor[] = [\n 'red',\n 'purple',\n 'neutral',\n 'blue',\n 'cyan',\n 'yellow',\n 'green',\n 'orange',\n];\n\n/** Map UserAvatar size to StatusBadge size (Figma scale). */\nconst USER_AVATAR_TO_BADGE_SIZE: Record<UserAvatarSize, StatusBadgeSize> = {\n '12': 'xx-small',\n '16': 'xx-small',\n '20': 'x-small',\n '24': 'x-small',\n '28': 'x-small',\n '32': 'small',\n '40': 'small',\n '48': 'small',\n '56': 'medium',\n '64': 'medium',\n '72': 'medium',\n '80': 'medium',\n '96': 'large',\n '120': 'large',\n};\n\nfunction hashFallbackColor(s: string): UserAvatarFallbackColor {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return FALLBACK_COLORS[Math.abs(h) % FALLBACK_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return '';\n const firstName = trimmed.split(/\\s+/)[0]!;\n return firstName[0]!.toUpperCase() + (firstName[1]?.toLowerCase() ?? '');\n}\n\n/**\n * User Avatars represent a person — usually their uploaded photo, with initials on a colour\n * background as a fallback. Their circular shape distinguishes them from rounded-square Team\n * Avatars at a glance.\n */\nexport default function UserAvatar({\n alt,\n className = '',\n src,\n name,\n fallbackColor,\n size = '48',\n status = false,\n ...imgProps\n}: UserAvatarProps) {\n const sizeClass = styles[`user-avatar--size-${toKebab(size)}`];\n const rootClass = [styles['user-avatar'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const isFallback = !src;\n const displayName = name ?? alt;\n const initials = isFallback ? getInitials(displayName) : '';\n const color = fallbackColor ?? hashFallbackColor(displayName);\n const fallbackColorClass = isFallback\n ? styles[`user-avatar__fallback--${toKebab(color)}`]\n : '';\n\n return (\n <div className={rootClass} data-size={size}>\n {isFallback ? (\n <span\n className={[styles['user-avatar__fallback'], fallbackColorClass]\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n aria-label={alt}\n >\n {initials}\n </span>\n ) : (\n <img\n {...imgProps}\n alt={alt}\n className={styles['user-avatar__image']}\n src={src}\n width={Number(size)}\n height={Number(size)}\n />\n )}\n {status && (\n <span className={styles['user-avatar__status']}>\n <StatusBadge status=\"online\" size={USER_AVATAR_TO_BADGE_SIZE[size]} />\n </span>\n )}\n </div>\n );\n}\n"],"names":["FALLBACK_COLORS","USER_AVATAR_TO_BADGE_SIZE","hashFallbackColor","s","h","i","getInitials","name","trimmed","firstName","_a","UserAvatar","alt","className","src","fallbackColor","size","status","imgProps","sizeClass","styles","toKebab","rootClass","isFallback","displayName","initials","color","fallbackColorClass","jsxs","jsx","StatusBadge"],"mappings":";;;;AA4DA,MAAMA,IAAsD;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGMC,IAAqE;AAAA,EACzE,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,KAAO;AACT;AAEA,SAASC,EAAkBC,GAAoC;AAC7D,MAAIC,IAAI;AACR,WAASC,IAAI,GAAGA,IAAIF,EAAE,QAAQE;AAC5B,IAAAD,IAAKA,IAAI,KAAKD,EAAE,WAAWE,CAAC,IAAK;AAEnC,SAAOL,EAAgB,KAAK,IAAII,CAAC,IAAIJ,EAAgB,MAAM;AAC7D;AAEA,SAASM,EAAYC,GAAsB;;AACzC,QAAMC,IAAUD,EAAK,KAAA;AACrB,MAAI,CAACC,EAAS,QAAO;AACrB,QAAMC,IAAYD,EAAQ,MAAM,KAAK,EAAE,CAAC;AACxC,SAAOC,EAAU,CAAC,EAAG,YAAA,OAAiBC,IAAAD,EAAU,CAAC,MAAX,gBAAAC,EAAc,kBAAiB;AACvE;AAOA,SAAwBC,EAAW;AAAA,EACjC,KAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,KAAAC;AAAA,EACA,MAAAP;AAAA,EACA,eAAAQ;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,GAAGC;AACL,GAAoB;AAClB,QAAMC,IAAYC,EAAO,qBAAqBC,EAAQL,CAAI,CAAC,EAAE,GACvDM,IAAY,CAACF,EAAO,aAAa,GAAGD,GAAWN,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG,GAELU,IAAa,CAACT,GACdU,IAAcjB,KAAQK,GACtBa,IAAWF,IAAajB,EAAYkB,CAAW,IAAI,IACnDE,IAAQX,KAAiBb,EAAkBsB,CAAW,GACtDG,IAAqBJ,IACvBH,EAAO,0BAA0BC,EAAQK,CAAK,CAAC,EAAE,IACjD;AAEJ,SACE,gBAAAE,EAAC,OAAA,EAAI,WAAWN,GAAW,aAAWN,GACnC,UAAA;AAAA,IAAAO,IACC,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,CAACT,EAAO,uBAAuB,GAAGO,CAAkB,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,MAAK;AAAA,QACL,cAAYf;AAAA,QAEX,UAAAa;AAAA,MAAA;AAAA,IAAA,IAGH,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGX;AAAA,QACJ,KAAAN;AAAA,QACA,WAAWQ,EAAO,oBAAoB;AAAA,QACtC,KAAAN;AAAA,QACA,OAAO,OAAOE,CAAI;AAAA,QAClB,QAAQ,OAAOA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAGtBC,KACC,gBAAAY,EAAC,QAAA,EAAK,WAAWT,EAAO,qBAAqB,GAC3C,UAAA,gBAAAS,EAACC,GAAA,EAAY,QAAO,UAAS,MAAM7B,EAA0Be,CAAI,GAAG,EAAA,CACtE;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"UserAvatar.js","sources":["../../../src/components/user-avatar/UserAvatar.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react';\nimport type { ImgHTMLAttributes } from 'react';\nimport StatusBadge from '@/components/status-badge/StatusBadge';\nimport type {\n StatusBadgeSize,\n StatusBadgeStatus,\n} from '@/components/status-badge/StatusBadge';\nimport { toKebab } from '@/utils/string';\nimport styles from './UserAvatar.module.scss';\n\n/** Figma User Avatar sizes. */\nexport type UserAvatarSize =\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '36'\n | '40'\n | '48'\n | '50'\n | '56'\n | '64'\n | '72'\n | '80'\n | '96'\n | '120'\n | '128';\n\n/** Figma User Avatar Fallback colour variants. */\nexport type UserAvatarFallbackColor =\n | 'red'\n | 'purple'\n | 'neutral'\n | 'charcoal'\n | 'indigo'\n | 'teal'\n | 'blue'\n | 'cyan'\n | 'yellow'\n | 'green'\n | 'orange';\n\nexport interface UserAvatarProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n 'src' | 'alt' | 'width' | 'height'\n> {\n /** Alt text for the avatar image. */\n alt: string;\n /** Optional CSS class name. */\n className?: string;\n /**\n * Image URL for the avatar. When omitted, or when the image fails to load,\n * the avatar renders as Fallback (initials on a deterministic colour\n * background). A failed image sets `data-image-failed=\"true\"` on the root.\n */\n src?: string;\n /**\n * Display name used to derive initials and the fallback colour. Defaults\n * to `alt` when not provided.\n */\n name?: string;\n /** Force a specific fallback colour. Hashed from `name`/`alt` if omitted. */\n fallbackColor?: UserAvatarFallbackColor;\n /** Size variant. Figma: Size. Default: 48. */\n size?: UserAvatarSize;\n /**\n * Status badge shown on the avatar: `online`, `away`, `do-not-disturb` or `offline`.\n * Omit (or `false`) to hide it. `true` is kept for backwards compatibility and\n * means `online`. The badge size follows the avatar `size`.\n */\n status?: boolean | StatusBadgeStatus;\n /** Accessible name for the status badge. Defaults to the status value; pass a translated string. */\n statusLabel?: string;\n}\n\n/** Colours picked by the name hash when `fallbackColor` is not set. */\nconst FALLBACK_COLORS: readonly UserAvatarFallbackColor[] = [\n 'red',\n 'purple',\n 'neutral',\n 'blue',\n 'cyan',\n 'yellow',\n 'green',\n 'orange',\n 'charcoal',\n 'indigo',\n 'teal',\n];\n\n/** Map UserAvatar size to StatusBadge size (Figma scale). */\nconst USER_AVATAR_TO_BADGE_SIZE: Record<UserAvatarSize, StatusBadgeSize> = {\n '12': 'xx-small',\n '16': 'xx-small',\n '20': 'x-small',\n '24': 'x-small',\n '28': 'x-small',\n '32': 'small',\n '36': 'small',\n '40': 'small',\n '48': 'small',\n '50': 'small',\n '56': 'medium',\n '64': 'medium',\n '72': 'medium',\n '80': 'medium',\n '96': 'large',\n '120': 'large',\n '128': 'large',\n};\n\nfunction hashFallbackColor(s: string): UserAvatarFallbackColor {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return FALLBACK_COLORS[Math.abs(h) % FALLBACK_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) return '';\n const firstName = trimmed.split(/\\s+/)[0]!;\n return firstName[0]!.toUpperCase() + (firstName[1]?.toLowerCase() ?? '');\n}\n\n/**\n * User Avatars represent a person — usually their uploaded photo, with initials on a colour\n * background as a fallback. Their circular shape distinguishes them from rounded-square Team\n * Avatars at a glance. `ref` points at the root element, which is present for both the image and\n * the fallback, so it works as a tooltip or popover anchor.\n */\nconst UserAvatar = forwardRef<HTMLDivElement, UserAvatarProps>(\n function UserAvatar(\n {\n alt,\n className = '',\n src,\n name,\n fallbackColor,\n size = '48',\n status,\n statusLabel,\n onError,\n ...imgProps\n },\n ref,\n ) {\n // The src that failed to load; a new src is tried again.\n const [failedSrc, setFailedSrc] = useState<string>();\n const sizeClass = styles[`user-avatar--size-${toKebab(size)}`];\n const rootClass = [styles['user-avatar'], sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n const imageFailed = !!src && src === failedSrc;\n const isFallback = !src || imageFailed;\n const displayName = name ?? alt;\n const initials = isFallback ? getInitials(displayName) : '';\n const color = fallbackColor ?? hashFallbackColor(displayName);\n const fallbackColorClass = isFallback\n ? styles[`user-avatar__fallback--${toKebab(color)}`]\n : '';\n\n const badgeStatus: StatusBadgeStatus | undefined =\n status === true ? 'online' : status || undefined;\n const badgeSize = USER_AVATAR_TO_BADGE_SIZE[size];\n\n return (\n <div\n ref={ref}\n className={rootClass}\n data-size={size}\n data-image-failed={imageFailed ? 'true' : undefined}\n >\n {isFallback ? (\n <span\n className={[styles['user-avatar__fallback'], fallbackColorClass]\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n aria-label={alt}\n >\n {initials}\n </span>\n ) : (\n <img\n loading=\"lazy\"\n {...imgProps}\n onError={(e) => {\n onError?.(e);\n setFailedSrc(src);\n }}\n alt={alt}\n className={styles['user-avatar__image']}\n src={src}\n width={Number(size)}\n height={Number(size)}\n />\n )}\n {badgeStatus && (\n <span className={styles['user-avatar__status']}>\n <StatusBadge\n status={badgeStatus}\n size={badgeSize}\n label={statusLabel}\n className={styles['user-avatar__badge']}\n />\n </span>\n )}\n </div>\n );\n },\n);\n\nexport default UserAvatar;\n"],"names":["FALLBACK_COLORS","USER_AVATAR_TO_BADGE_SIZE","hashFallbackColor","h","i","getInitials","name","trimmed","firstName","_a","UserAvatar","forwardRef","alt","className","src","fallbackColor","size","status","statusLabel","onError","imgProps","ref","failedSrc","setFailedSrc","useState","sizeClass","styles","toKebab","rootClass","imageFailed","isFallback","displayName","initials","color","fallbackColorClass","badgeStatus","badgeSize","jsxs","jsx","e","StatusBadge"],"mappings":";;;;;AA8EA,MAAMA,IAAsD;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGMC,IAAqE;AAAA,EACzE,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,KAAO;AAAA,EACP,KAAO;AACT;AAEA,SAASC,EAAkB,GAAoC;AAC7D,MAAIC,IAAI;AACR,WAASC,IAAI,GAAGA,IAAI,EAAE,QAAQA;AAC5B,IAAAD,IAAKA,IAAI,KAAK,EAAE,WAAWC,CAAC,IAAK;AAEnC,SAAOJ,EAAgB,KAAK,IAAIG,CAAC,IAAIH,EAAgB,MAAM;AAC7D;AAEA,SAASK,EAAYC,GAAsB;;AACzC,QAAMC,IAAUD,EAAK,KAAA;AACrB,MAAI,CAACC,EAAS,QAAO;AACrB,QAAMC,IAAYD,EAAQ,MAAM,KAAK,EAAE,CAAC;AACxC,SAAOC,EAAU,CAAC,EAAG,YAAA,OAAiBC,IAAAD,EAAU,CAAC,MAAX,gBAAAC,EAAc,kBAAiB;AACvE;AAQA,MAAMC,IAAaC;AAAA,EACjB,SACE;AAAA,IACE,KAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,KAAAC;AAAA,IACA,MAAAR;AAAA,IACA,eAAAS;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,QAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,GACA;AAEA,UAAM,CAACC,GAAWC,CAAY,IAAIC,EAAA,GAC5BC,IAAYC,EAAO,qBAAqBC,EAAQX,CAAI,CAAC,EAAE,GACvDY,IAAY,CAACF,EAAO,aAAa,GAAGD,GAAWZ,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG,GAELgB,IAAc,CAAC,CAACf,KAAOA,MAAQQ,GAC/BQ,IAAa,CAAChB,KAAOe,GACrBE,IAAczB,KAAQM,GACtBoB,IAAWF,IAAazB,EAAY0B,CAAW,IAAI,IACnDE,IAAQlB,KAAiBb,EAAkB6B,CAAW,GACtDG,IAAqBJ,IACvBJ,EAAO,0BAA0BC,EAAQM,CAAK,CAAC,EAAE,IACjD,IAEEE,IACJlB,MAAW,KAAO,WAAWA,KAAU,QACnCmB,IAAYnC,EAA0Be,CAAI;AAEhD,WACE,gBAAAqB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAhB;AAAA,QACA,WAAWO;AAAA,QACX,aAAWZ;AAAA,QACX,qBAAmBa,IAAc,SAAS;AAAA,QAEzC,UAAA;AAAA,UAAAC,IACC,gBAAAQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,CAACZ,EAAO,uBAAuB,GAAGQ,CAAkB,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,MAAK;AAAA,cACL,cAAYtB;AAAA,cAEX,UAAAoB;AAAA,YAAA;AAAA,UAAA,IAGH,gBAAAM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACP,GAAGlB;AAAA,cACJ,SAAS,CAACmB,MAAM;AACd,gBAAApB,KAAA,QAAAA,EAAUoB,IACVhB,EAAaT,CAAG;AAAA,cAClB;AAAA,cACA,KAAAF;AAAA,cACA,WAAWc,EAAO,oBAAoB;AAAA,cACtC,KAAAZ;AAAA,cACA,OAAO,OAAOE,CAAI;AAAA,cAClB,QAAQ,OAAOA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAGtBmB,KACC,gBAAAG,EAAC,QAAA,EAAK,WAAWZ,EAAO,qBAAqB,GAC3C,UAAA,gBAAAY;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,QAAQL;AAAA,cACR,MAAMC;AAAA,cACN,OAAOlB;AAAA,cACP,WAAWQ,EAAO,oBAAoB;AAAA,YAAA;AAAA,UAAA,EACxC,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatar.css');const a={"user-avatar":"_user-avatar_1csb5_2","user-avatar__image":"_user-avatar__image_1csb5_8","user-avatar__fallback":"_user-avatar__fallback_1csb5_16","user-avatar__fallback--red":"_user-avatar__fallback--red_1csb5_29","user-avatar__fallback--purple":"_user-avatar__fallback--purple_1csb5_32","user-avatar__fallback--neutral":"_user-avatar__fallback--neutral_1csb5_35","user-avatar__fallback--blue":"_user-avatar__fallback--blue_1csb5_38","user-avatar__fallback--cyan":"_user-avatar__fallback--cyan_1csb5_41","user-avatar__fallback--yellow":"_user-avatar__fallback--yellow_1csb5_44","user-avatar__fallback--green":"_user-avatar__fallback--green_1csb5_47","user-avatar__fallback--orange":"_user-avatar__fallback--orange_1csb5_50","user-avatar__status":"_user-avatar__status_1csb5_53","user-avatar--size-12":"_user-avatar--size-12_1csb5_62","user-avatar--size-16":"_user-avatar--size-16_1csb5_73","user-avatar--size-20":"_user-avatar--size-20_1csb5_84","user-avatar--size-24":"_user-avatar--size-24_1csb5_95","user-avatar--size-28":"_user-avatar--size-28_1csb5_106","user-avatar--size-32":"_user-avatar--size-32_1csb5_117","user-avatar--size-40":"_user-avatar--size-40_1csb5_128","user-avatar--size-48":"_user-avatar--size-48_1csb5_139","user-avatar--size-56":"_user-avatar--size-56_1csb5_150","user-avatar--size-64":"_user-avatar--size-64_1csb5_161","user-avatar--size-72":"_user-avatar--size-72_1csb5_172","user-avatar--size-80":"_user-avatar--size-80_1csb5_183","user-avatar--size-96":"_user-avatar--size-96_1csb5_194","user-avatar--size-120":"_user-avatar--size-120_1csb5_205"};exports.default=a;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatar.css');const a={"user-avatar":"_user-avatar_enh1y_13","user-avatar__image":"_user-avatar__image_enh1y_19","user-avatar__fallback":"_user-avatar__fallback_enh1y_27","user-avatar__fallback--red":"_user-avatar__fallback--red_enh1y_40","user-avatar__fallback--purple":"_user-avatar__fallback--purple_enh1y_43","user-avatar__fallback--neutral":"_user-avatar__fallback--neutral_enh1y_46","user-avatar__fallback--charcoal":"_user-avatar__fallback--charcoal_enh1y_49","user-avatar__fallback--indigo":"_user-avatar__fallback--indigo_enh1y_52","user-avatar__fallback--teal":"_user-avatar__fallback--teal_enh1y_55","user-avatar__fallback--blue":"_user-avatar__fallback--blue_enh1y_58","user-avatar__fallback--cyan":"_user-avatar__fallback--cyan_enh1y_61","user-avatar__fallback--yellow":"_user-avatar__fallback--yellow_enh1y_64","user-avatar__fallback--green":"_user-avatar__fallback--green_enh1y_67","user-avatar__fallback--orange":"_user-avatar__fallback--orange_enh1y_70","user-avatar__status":"_user-avatar__status_enh1y_73","user-avatar--size-12":"_user-avatar--size-12_enh1y_82","user-avatar--size-16":"_user-avatar--size-16_enh1y_93","user-avatar--size-20":"_user-avatar--size-20_enh1y_104","user-avatar--size-24":"_user-avatar--size-24_enh1y_115","user-avatar--size-28":"_user-avatar--size-28_enh1y_126","user-avatar--size-32":"_user-avatar--size-32_enh1y_137","user-avatar--size-36":"_user-avatar--size-36_enh1y_148","user-avatar--size-40":"_user-avatar--size-40_enh1y_159","user-avatar--size-48":"_user-avatar--size-48_enh1y_170","user-avatar--size-50":"_user-avatar--size-50_enh1y_181","user-avatar--size-56":"_user-avatar--size-56_enh1y_192","user-avatar__badge":"_user-avatar__badge_enh1y_199","user-avatar--size-64":"_user-avatar--size-64_enh1y_207","user-avatar--size-72":"_user-avatar--size-72_enh1y_222","user-avatar--size-80":"_user-avatar--size-80_enh1y_237","user-avatar--size-96":"_user-avatar--size-96_enh1y_252","user-avatar--size-120":"_user-avatar--size-120_enh1y_263","user-avatar--size-128":"_user-avatar--size-128_enh1y_274"};exports.default=a;
2
2
  //# sourceMappingURL=UserAvatar.module.scss.cjs.map