@refraction-ui/react 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/dist/chunk-533MCMSU.js +2355 -0
  2. package/dist/chunk-533MCMSU.js.map +7 -0
  3. package/dist/chunk-AMK4VCBG.js +250 -0
  4. package/dist/chunk-AMK4VCBG.js.map +7 -0
  5. package/dist/chunk-BOLFYVI6.js +90 -0
  6. package/dist/chunk-BOLFYVI6.js.map +7 -0
  7. package/dist/chunk-F7B64KT3.js +187 -0
  8. package/dist/chunk-F7B64KT3.js.map +7 -0
  9. package/dist/chunk-FD37DFCC.js +77 -0
  10. package/dist/chunk-FD37DFCC.js.map +7 -0
  11. package/dist/chunk-H54FLNAF.js +132 -0
  12. package/dist/chunk-H54FLNAF.js.map +7 -0
  13. package/dist/chunk-INP46354.js +664 -0
  14. package/dist/chunk-INP46354.js.map +7 -0
  15. package/dist/chunk-ONACRMG4.js +116 -0
  16. package/dist/chunk-ONACRMG4.js.map +7 -0
  17. package/dist/chunk-SDZ3LROZ.js +7 -0
  18. package/dist/chunk-SDZ3LROZ.js.map +7 -0
  19. package/dist/chunk-TOZBR4GL.js +154 -0
  20. package/dist/chunk-TOZBR4GL.js.map +7 -0
  21. package/dist/chunk-UNEM2TRI.js +225 -0
  22. package/dist/chunk-UNEM2TRI.js.map +7 -0
  23. package/dist/chunk-VK3EQ34F.js +92 -0
  24. package/dist/chunk-VK3EQ34F.js.map +7 -0
  25. package/dist/chunk-WK2IIUFO.js +316 -0
  26. package/dist/chunk-WK2IIUFO.js.map +7 -0
  27. package/dist/chunk-WSPJTQAV.js +59 -0
  28. package/dist/chunk-WSPJTQAV.js.map +7 -0
  29. package/dist/chunk-XWP763SH.js +3 -2
  30. package/dist/chunk-XWP763SH.js.map +7 -1
  31. package/dist/chunk-Y2FNNAIL.js +80 -0
  32. package/dist/chunk-Y2FNNAIL.js.map +1 -0
  33. package/dist/{chunk-4A4BW3GR.js → chunk-ZF3OHCGV.js} +28 -5
  34. package/dist/chunk-ZF3OHCGV.js.map +7 -0
  35. package/dist/form.cjs +5 -11
  36. package/dist/form.cjs.map +1 -1
  37. package/dist/form.js +6 -12
  38. package/dist/form.js.map +1 -1
  39. package/dist/index.cjs +2879 -33936
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +1 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +126 -28780
  44. package/dist/internal/react-app-shell/index.d.cts +2 -22
  45. package/dist/internal/react-app-shell/index.d.ts +2 -22
  46. package/dist/internal/react-badge/index.d.cts +5 -0
  47. package/dist/internal/react-badge/index.d.ts +5 -0
  48. package/dist/internal/react-callout/index.d.cts +4 -0
  49. package/dist/internal/react-callout/index.d.ts +4 -0
  50. package/dist/internal/react-card/index.d.cts +8 -1
  51. package/dist/internal/react-card/index.d.ts +8 -1
  52. package/dist/internal/react-collapsible/index.d.cts +0 -3
  53. package/dist/internal/react-collapsible/index.d.ts +0 -3
  54. package/dist/internal/react-combobox/index.d.cts +0 -3
  55. package/dist/internal/react-combobox/index.d.ts +0 -3
  56. package/dist/internal/react-command/index.d.cts +0 -3
  57. package/dist/internal/react-command/index.d.ts +0 -3
  58. package/dist/internal/react-data-table/index.d.cts +0 -3
  59. package/dist/internal/react-data-table/index.d.ts +0 -3
  60. package/dist/internal/react-dialog/index.d.cts +0 -3
  61. package/dist/internal/react-dialog/index.d.ts +0 -3
  62. package/dist/internal/react-dropdown-menu/index.d.cts +0 -3
  63. package/dist/internal/react-dropdown-menu/index.d.ts +0 -3
  64. package/dist/internal/react-feedback-dialog/index.d.cts +0 -3
  65. package/dist/internal/react-feedback-dialog/index.d.ts +0 -3
  66. package/dist/internal/react-form/index.d.cts +2 -21
  67. package/dist/internal/react-form/index.d.ts +2 -21
  68. package/dist/internal/react-keyboard-shortcut/index.d.cts +0 -6
  69. package/dist/internal/react-keyboard-shortcut/index.d.ts +0 -6
  70. package/dist/internal/react-link-card/index.d.cts +8 -2
  71. package/dist/internal/react-link-card/index.d.ts +8 -2
  72. package/dist/internal/react-popover/index.d.cts +0 -3
  73. package/dist/internal/react-popover/index.d.ts +0 -3
  74. package/dist/internal/react-sheet/index.d.cts +0 -3
  75. package/dist/internal/react-sheet/index.d.ts +0 -3
  76. package/dist/internal/react-slot/index.d.cts +23 -0
  77. package/dist/internal/react-slot/index.d.ts +23 -0
  78. package/dist/internal/react-toast/index.d.cts +0 -3
  79. package/dist/internal/react-toast/index.d.ts +0 -3
  80. package/dist/internal/react-tooltip/index.d.cts +0 -3
  81. package/dist/internal/react-tooltip/index.d.ts +0 -3
  82. package/dist/react-accordion.js +125 -0
  83. package/dist/react-accordion.js.map +7 -0
  84. package/dist/react-ai.js +257 -0
  85. package/dist/react-ai.js.map +7 -0
  86. package/dist/react-analytics.js +1698 -0
  87. package/dist/react-analytics.js.map +7 -0
  88. package/dist/react-animated-text.js +164 -0
  89. package/dist/react-animated-text.js.map +7 -0
  90. package/dist/react-app-shell.js +631 -0
  91. package/dist/react-app-shell.js.map +7 -0
  92. package/dist/react-audience-feature-card.js +53 -0
  93. package/dist/react-audience-feature-card.js.map +7 -0
  94. package/dist/react-audio-room.js +166 -0
  95. package/dist/react-audio-room.js.map +7 -0
  96. package/dist/react-auth.js +211 -0
  97. package/dist/react-auth.js.map +7 -0
  98. package/dist/react-avatar-group.js +154 -0
  99. package/dist/react-avatar-group.js.map +7 -0
  100. package/dist/react-avatar.js +168 -0
  101. package/dist/react-avatar.js.map +7 -0
  102. package/dist/react-badge.js +86 -0
  103. package/dist/react-badge.js.map +7 -0
  104. package/dist/react-bottom-nav.js +67 -0
  105. package/dist/react-bottom-nav.js.map +7 -0
  106. package/dist/react-brand-network-cell.js +92 -0
  107. package/dist/react-brand-network-cell.js.map +7 -0
  108. package/dist/react-breadcrumbs.js +104 -0
  109. package/dist/react-breadcrumbs.js.map +7 -0
  110. package/dist/react-browser-chrome-mock.js +89 -0
  111. package/dist/react-browser-chrome-mock.js.map +7 -0
  112. package/dist/react-button.js +13 -0
  113. package/dist/react-button.js.map +7 -0
  114. package/dist/react-calendar.js +301 -0
  115. package/dist/react-calendar.js.map +7 -0
  116. package/dist/react-call-controls.js +113 -0
  117. package/dist/react-call-controls.js.map +7 -0
  118. package/dist/react-callout.js +152 -0
  119. package/dist/react-callout.js.map +7 -0
  120. package/dist/react-card-grid.js +34 -0
  121. package/dist/react-card-grid.js.map +7 -0
  122. package/dist/react-card.js +200 -0
  123. package/dist/react-card.js.map +7 -0
  124. package/dist/react-carousel.js +132 -0
  125. package/dist/react-carousel.js.map +7 -0
  126. package/dist/react-charts.js +509 -0
  127. package/dist/react-charts.js.map +7 -0
  128. package/dist/react-checkbox.js +156 -0
  129. package/dist/react-checkbox.js.map +7 -0
  130. package/dist/react-checklist.js +168 -0
  131. package/dist/react-checklist.js.map +7 -0
  132. package/dist/react-code-block.js +78 -0
  133. package/dist/react-code-block.js.map +7 -0
  134. package/dist/react-code-editor.js +184 -0
  135. package/dist/react-code-editor.js.map +7 -0
  136. package/dist/react-collapsible.js +192 -0
  137. package/dist/react-collapsible.js.map +7 -0
  138. package/dist/react-combobox.js +609 -0
  139. package/dist/react-combobox.js.map +7 -0
  140. package/dist/react-command-input.js +202 -0
  141. package/dist/react-command-input.js.map +7 -0
  142. package/dist/react-command.js +364 -0
  143. package/dist/react-command.js.map +7 -0
  144. package/dist/react-composer.js +2036 -0
  145. package/dist/react-composer.js.map +7 -0
  146. package/dist/react-content-protection.js +133 -0
  147. package/dist/react-content-protection.js.map +7 -0
  148. package/dist/react-conversation.js +1226 -0
  149. package/dist/react-conversation.js.map +7 -0
  150. package/dist/react-cookie-consent.js +291 -0
  151. package/dist/react-cookie-consent.js.map +7 -0
  152. package/dist/react-data-table.js +310 -0
  153. package/dist/react-data-table.js.map +7 -0
  154. package/dist/react-date-picker.js +95 -0
  155. package/dist/react-date-picker.js.map +7 -0
  156. package/dist/react-device-frame.js +137 -0
  157. package/dist/react-device-frame.js.map +7 -0
  158. package/dist/react-dialog.js +218 -0
  159. package/dist/react-dialog.js.map +7 -0
  160. package/dist/react-diff-viewer.js +460 -0
  161. package/dist/react-diff-viewer.js.map +7 -0
  162. package/dist/react-dropdown-menu.js +292 -0
  163. package/dist/react-dropdown-menu.js.map +7 -0
  164. package/dist/react-editor-status-bar.js +148 -0
  165. package/dist/react-editor-status-bar.js.map +7 -0
  166. package/dist/react-editor-tabs.js +159 -0
  167. package/dist/react-editor-tabs.js.map +7 -0
  168. package/dist/react-emoji-picker.js +238 -0
  169. package/dist/react-emoji-picker.js.map +7 -0
  170. package/dist/react-empty-state.js +90 -0
  171. package/dist/react-empty-state.js.map +7 -0
  172. package/dist/react-feedback-dialog.js +275 -0
  173. package/dist/react-feedback-dialog.js.map +7 -0
  174. package/dist/react-file-tree.js +376 -0
  175. package/dist/react-file-tree.js.map +7 -0
  176. package/dist/react-file-upload.js +360 -0
  177. package/dist/react-file-upload.js.map +7 -0
  178. package/dist/react-floating-reactions.js +124 -0
  179. package/dist/react-floating-reactions.js.map +7 -0
  180. package/dist/react-flow-editor.js +198 -0
  181. package/dist/react-flow-editor.js.map +7 -0
  182. package/dist/react-footer.js +67 -0
  183. package/dist/react-footer.js.map +7 -0
  184. package/dist/react-graph-view.js +197 -0
  185. package/dist/react-graph-view.js.map +7 -0
  186. package/dist/react-icon-system.js +9 -0
  187. package/dist/react-icon-system.js.map +7 -0
  188. package/dist/react-infinite-canvas.js +8 -0
  189. package/dist/react-infinite-canvas.js.map +7 -0
  190. package/dist/react-inline-editor.js +216 -0
  191. package/dist/react-inline-editor.js.map +7 -0
  192. package/dist/react-input-group.js +150 -0
  193. package/dist/react-input-group.js.map +7 -0
  194. package/dist/react-input.js +10 -0
  195. package/dist/react-input.js.map +7 -0
  196. package/dist/react-install-prompt.js +132 -0
  197. package/dist/react-install-prompt.js.map +7 -0
  198. package/dist/react-kanban-board.js +198 -0
  199. package/dist/react-kanban-board.js.map +7 -0
  200. package/dist/react-keyboard-shortcut.js +36 -0
  201. package/dist/react-keyboard-shortcut.js.map +7 -0
  202. package/dist/react-language-selector.js +311 -0
  203. package/dist/react-language-selector.js.map +7 -0
  204. package/dist/react-link-card.js +48 -0
  205. package/dist/react-link-card.js.map +7 -0
  206. package/dist/react-live-captions.js +92 -0
  207. package/dist/react-live-captions.js.map +7 -0
  208. package/dist/react-live-cursors.js +145 -0
  209. package/dist/react-live-cursors.js.map +7 -0
  210. package/dist/react-live-transcript.js +117 -0
  211. package/dist/react-live-transcript.js.map +7 -0
  212. package/dist/react-location-selector.js +252 -0
  213. package/dist/react-location-selector.js.map +7 -0
  214. package/dist/react-logger.js +415 -0
  215. package/dist/react-logger.js.map +7 -0
  216. package/dist/react-markdown-renderer.js +12 -0
  217. package/dist/react-markdown-renderer.js.map +7 -0
  218. package/dist/react-marquee-strip.js +62 -0
  219. package/dist/react-marquee-strip.js.map +7 -0
  220. package/dist/react-mascot.js +367 -0
  221. package/dist/react-mascot.js.map +7 -0
  222. package/dist/react-mastery-bar.js +97 -0
  223. package/dist/react-mastery-bar.js.map +7 -0
  224. package/dist/react-mini-map.js +207 -0
  225. package/dist/react-mini-map.js.map +7 -0
  226. package/dist/react-mobile-nav.js +216 -0
  227. package/dist/react-mobile-nav.js.map +7 -0
  228. package/dist/react-navbar.js +96 -0
  229. package/dist/react-navbar.js.map +7 -0
  230. package/dist/react-numbered-steps.js +67 -0
  231. package/dist/react-numbered-steps.js.map +7 -0
  232. package/dist/react-otp-input.js +318 -0
  233. package/dist/react-otp-input.js.map +7 -0
  234. package/dist/react-pagination.js +199 -0
  235. package/dist/react-pagination.js.map +7 -0
  236. package/dist/react-password-input.js +104 -0
  237. package/dist/react-password-input.js.map +7 -0
  238. package/dist/react-payment.js +81 -0
  239. package/dist/react-payment.js.map +7 -0
  240. package/dist/react-popover.js +176 -0
  241. package/dist/react-popover.js.map +7 -0
  242. package/dist/react-pre-call-lobby.js +309 -0
  243. package/dist/react-pre-call-lobby.js.map +7 -0
  244. package/dist/react-presence-indicator.js +86 -0
  245. package/dist/react-presence-indicator.js.map +7 -0
  246. package/dist/react-pricing-card.js +142 -0
  247. package/dist/react-pricing-card.js.map +7 -0
  248. package/dist/react-progress-display.js +188 -0
  249. package/dist/react-progress-display.js.map +7 -0
  250. package/dist/react-radial-gauge.js +193 -0
  251. package/dist/react-radial-gauge.js.map +7 -0
  252. package/dist/react-radio.js +169 -0
  253. package/dist/react-radio.js.map +7 -0
  254. package/dist/react-rating-scale.js +171 -0
  255. package/dist/react-rating-scale.js.map +7 -0
  256. package/dist/react-reaction-bar.js +111 -0
  257. package/dist/react-reaction-bar.js.map +7 -0
  258. package/dist/react-resizable-layout.js +298 -0
  259. package/dist/react-resizable-layout.js.map +7 -0
  260. package/dist/react-rich-editor.js +1 -0
  261. package/dist/react-rich-editor.js.map +7 -0
  262. package/dist/react-search-bar.js +285 -0
  263. package/dist/react-search-bar.js.map +7 -0
  264. package/dist/react-section-head.js +65 -0
  265. package/dist/react-section-head.js.map +7 -0
  266. package/dist/react-segmented-control.js +215 -0
  267. package/dist/react-segmented-control.js.map +7 -0
  268. package/dist/react-select.js +389 -0
  269. package/dist/react-select.js.map +7 -0
  270. package/dist/react-separator.js +86 -0
  271. package/dist/react-separator.js.map +7 -0
  272. package/dist/react-sheet.js +310 -0
  273. package/dist/react-sheet.js.map +7 -0
  274. package/dist/react-sidebar.js +100 -0
  275. package/dist/react-sidebar.js.map +7 -0
  276. package/dist/react-skeleton.js +91 -0
  277. package/dist/react-skeleton.js.map +7 -0
  278. package/dist/react-skip-to-content.js +38 -0
  279. package/dist/react-skip-to-content.js.map +7 -0
  280. package/dist/react-slide-viewer.js +264 -0
  281. package/dist/react-slide-viewer.js.map +7 -0
  282. package/dist/react-slider.js +105 -0
  283. package/dist/react-slider.js.map +7 -0
  284. package/dist/react-slot-picker.js +184 -0
  285. package/dist/react-slot-picker.js.map +7 -0
  286. package/dist/react-slot.js +7 -0
  287. package/dist/react-slot.js.map +7 -0
  288. package/dist/react-social-auth-button.js +169 -0
  289. package/dist/react-social-auth-button.js.map +7 -0
  290. package/dist/react-sortable-list.js +204 -0
  291. package/dist/react-sortable-list.js.map +7 -0
  292. package/dist/react-stat-grid.js +69 -0
  293. package/dist/react-stat-grid.js.map +7 -0
  294. package/dist/react-status-indicator.js +117 -0
  295. package/dist/react-status-indicator.js.map +7 -0
  296. package/dist/react-steps.js +167 -0
  297. package/dist/react-steps.js.map +7 -0
  298. package/dist/react-sticky-note.js +131 -0
  299. package/dist/react-sticky-note.js.map +7 -0
  300. package/dist/react-switch.js +139 -0
  301. package/dist/react-switch.js.map +7 -0
  302. package/dist/react-table-of-contents.js +80 -0
  303. package/dist/react-table-of-contents.js.map +7 -0
  304. package/dist/react-tabs.js +230 -0
  305. package/dist/react-tabs.js.map +7 -0
  306. package/dist/react-terminal.js +101 -0
  307. package/dist/react-terminal.js.map +7 -0
  308. package/dist/react-test-results.js +158 -0
  309. package/dist/react-test-results.js.map +7 -0
  310. package/dist/react-textarea.js +89 -0
  311. package/dist/react-textarea.js.map +7 -0
  312. package/dist/react-thread-view.js +139 -0
  313. package/dist/react-thread-view.js.map +7 -0
  314. package/dist/react-timeline.js +153 -0
  315. package/dist/react-timeline.js.map +7 -0
  316. package/dist/react-toast.js +253 -0
  317. package/dist/react-toast.js.map +7 -0
  318. package/dist/react-tooltip.js +221 -0
  319. package/dist/react-tooltip.js.map +7 -0
  320. package/dist/react-version-selector.js +270 -0
  321. package/dist/react-version-selector.js.map +7 -0
  322. package/dist/react-video-grid.js +129 -0
  323. package/dist/react-video-grid.js.map +7 -0
  324. package/dist/react-video-player.js +206 -0
  325. package/dist/react-video-player.js.map +7 -0
  326. package/dist/react-video-tile.js +8 -0
  327. package/dist/react-video-tile.js.map +7 -0
  328. package/dist/react-voice-pill.js +314 -0
  329. package/dist/react-voice-pill.js.map +7 -0
  330. package/dist/react-waveform.js +558 -0
  331. package/dist/react-waveform.js.map +7 -0
  332. package/dist/react-wizard.js +337 -0
  333. package/dist/react-wizard.js.map +7 -0
  334. package/dist/styles.css +7 -0
  335. package/dist/theme.js +1 -1
  336. package/package.json +3 -2
  337. package/dist/applicationinsights-web-H7OBLIVJ.js +0 -23393
  338. package/dist/applicationinsights-web-H7OBLIVJ.js.map +0 -1
  339. package/dist/chunk-4A4BW3GR.js.map +0 -1
  340. package/dist/index.js.map +0 -1
  341. package/dist/module-X3HTTRQK.js +0 -6438
  342. package/dist/module-X3HTTRQK.js.map +0 -1
@@ -0,0 +1,154 @@
1
+ import {
2
+ cn,
3
+ cva,
4
+ generateId
5
+ } from "./chunk-ZF3OHCGV.js";
6
+
7
+ // ../react-avatar-group/dist/index.js
8
+ import * as React from "react";
9
+
10
+ // ../avatar-group/dist/index.js
11
+ function getInitials(name) {
12
+ const parts = name.trim().split(/\s+/);
13
+ if (parts.length === 0) return "";
14
+ if (parts.length === 1) return parts[0].charAt(0).toUpperCase();
15
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
16
+ }
17
+ function createAvatarGroup(props) {
18
+ const { users, max, size = "md" } = props;
19
+ const visibleUsers = max && max > 0 ? users.slice(0, max) : users;
20
+ const overflowUsers = max && max > 0 ? users.slice(max) : [];
21
+ const overflowCount = overflowUsers.length;
22
+ const groupId = generateId("rfr-avatar-group");
23
+ const labelId = generateId("rfr-avatar-group-label");
24
+ const ariaProps = {
25
+ role: "group",
26
+ "aria-label": `${users.length} users`,
27
+ id: groupId
28
+ };
29
+ function getAvatarAriaProps(user) {
30
+ const label = user.status ? `${user.name} (${user.status})` : user.name;
31
+ return {
32
+ role: "img",
33
+ "aria-label": label
34
+ };
35
+ }
36
+ const overflowBadgeProps = {
37
+ role: "button",
38
+ "aria-label": `${overflowCount} more users`
39
+ };
40
+ return {
41
+ visibleUsers,
42
+ overflowCount,
43
+ overflowUsers,
44
+ ariaProps,
45
+ getAvatarAriaProps,
46
+ getInitials,
47
+ overflowBadgeProps,
48
+ ids: {
49
+ group: groupId,
50
+ label: labelId
51
+ }
52
+ };
53
+ }
54
+ var avatarGroupStyles = "flex items-center -space-x-2";
55
+ var avatarVariants = cva({
56
+ base: "relative inline-flex items-center justify-center rounded-full border-2 border-background bg-muted text-muted-foreground font-medium overflow-hidden ring-2 ring-background",
57
+ variants: {
58
+ size: {
59
+ xs: "h-6 w-6 text-[10px]",
60
+ sm: "h-8 w-8 text-xs",
61
+ md: "h-10 w-10 text-sm",
62
+ lg: "h-12 w-12 text-base",
63
+ xl: "h-16 w-16 text-xl"
64
+ }
65
+ },
66
+ defaultVariants: {
67
+ size: "md"
68
+ }
69
+ });
70
+ var avatarOverflowBadgeVariants = cva({
71
+ base: "relative inline-flex items-center justify-center rounded-full border-2 border-background bg-muted text-muted-foreground font-medium ring-2 ring-background",
72
+ variants: {
73
+ size: {
74
+ xs: "h-6 w-6 text-[10px]",
75
+ sm: "h-8 w-8 text-xs",
76
+ md: "h-10 w-10 text-sm",
77
+ lg: "h-12 w-12 text-base",
78
+ xl: "h-16 w-16 text-xl"
79
+ }
80
+ },
81
+ defaultVariants: {
82
+ size: "md"
83
+ }
84
+ });
85
+ var avatarImageStyles = "h-full w-full object-cover";
86
+ var avatarPresenceDotVariants = cva({
87
+ base: "absolute bottom-0 right-0 rounded-full border-2 border-background",
88
+ variants: {
89
+ size: {
90
+ xs: "h-2 w-2",
91
+ sm: "h-2.5 w-2.5",
92
+ md: "h-3 w-3",
93
+ lg: "h-3.5 w-3.5",
94
+ xl: "h-4 w-4"
95
+ },
96
+ status: {
97
+ online: "bg-success",
98
+ offline: "bg-gray-400",
99
+ away: "bg-warning",
100
+ busy: "bg-destructive",
101
+ dnd: "bg-destructive"
102
+ }
103
+ },
104
+ defaultVariants: {
105
+ size: "md",
106
+ status: "offline"
107
+ }
108
+ });
109
+
110
+ // ../react-avatar-group/dist/index.js
111
+ var AvatarGroup = React.forwardRef(
112
+ function AvatarGroup2({ users, max, size = "md", className }, ref) {
113
+ const api = createAvatarGroup({ users, max, size });
114
+ return React.createElement(
115
+ "div",
116
+ { ref, ...api.ariaProps, className: cn(avatarGroupStyles, className) },
117
+ api.visibleUsers.map(
118
+ (user) => React.createElement(
119
+ "div",
120
+ {
121
+ key: user.id,
122
+ className: avatarVariants({ size }),
123
+ ...api.getAvatarAriaProps(user)
124
+ },
125
+ user.src ? React.createElement("img", {
126
+ src: user.src,
127
+ alt: user.name,
128
+ className: avatarImageStyles
129
+ }) : React.createElement("span", null, api.getInitials(user.name)),
130
+ user.status && React.createElement("span", {
131
+ className: avatarPresenceDotVariants({ size, status: user.status })
132
+ })
133
+ )
134
+ ),
135
+ api.overflowCount > 0 && React.createElement(
136
+ "div",
137
+ {
138
+ className: avatarOverflowBadgeVariants({ size }),
139
+ ...api.overflowBadgeProps
140
+ },
141
+ `+${api.overflowCount}`
142
+ )
143
+ );
144
+ }
145
+ );
146
+ export {
147
+ AvatarGroup,
148
+ avatarGroupStyles,
149
+ avatarImageStyles,
150
+ avatarOverflowBadgeVariants,
151
+ avatarPresenceDotVariants,
152
+ avatarVariants
153
+ };
154
+ //# sourceMappingURL=react-avatar-group.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../avatar-group/src/avatar-group.ts", "../../avatar-group/src/avatar-group.styles.ts", "../../react-avatar-group/src/avatar-group.tsx"],
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\nimport { generateId } from '@refraction-ui/shared'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type PresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'dnd'\n\nexport interface AvatarUser {\n /** Unique identifier */\n id: string\n /** Display name */\n name: string\n /** Avatar image URL */\n src?: string\n /** Online presence status */\n status?: PresenceStatus\n}\n\nexport interface AvatarGroupProps {\n /** Array of users to display */\n users: AvatarUser[]\n /** Maximum number of visible avatars */\n max?: number\n /** Avatar size */\n size?: AvatarSize\n}\n\nexport interface AvatarGroupAPI {\n /** Users that are visible (within max limit) */\n visibleUsers: AvatarUser[]\n /** Number of overflow users */\n overflowCount: number\n /** All overflow users (for tooltip/popup) */\n overflowUsers: AvatarUser[]\n /** ARIA props for the group container */\n ariaProps: Partial<AccessibilityProps> & Record<string, unknown>\n /** Get ARIA props for an individual avatar */\n getAvatarAriaProps(user: AvatarUser): Record<string, unknown>\n /** Get initials from a user's name */\n getInitials(name: string): string\n /** Get the overflow badge ARIA props */\n overflowBadgeProps: Record<string, unknown>\n /** Generated IDs */\n ids: {\n group: string\n label: string\n }\n}\n\nexport const AVATAR_SIZES: Record<AvatarSize, { width: number; fontSize: number }> = {\n xs: { width: 24, fontSize: 10 },\n sm: { width: 32, fontSize: 12 },\n md: { width: 40, fontSize: 14 },\n lg: { width: 48, fontSize: 16 },\n xl: { width: 64, fontSize: 20 },\n}\n\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n}\n\nexport function createAvatarGroup(props: AvatarGroupProps): AvatarGroupAPI {\n const { users, max, size = 'md' } = props\n\n const visibleUsers = max && max > 0 ? users.slice(0, max) : users\n const overflowUsers = max && max > 0 ? users.slice(max) : []\n const overflowCount = overflowUsers.length\n\n const groupId = generateId('rfr-avatar-group')\n const labelId = generateId('rfr-avatar-group-label')\n\n const ariaProps: Partial<AccessibilityProps> & Record<string, unknown> = {\n role: 'group',\n 'aria-label': `${users.length} users`,\n id: groupId,\n }\n\n function getAvatarAriaProps(user: AvatarUser): Record<string, unknown> {\n const label = user.status ? `${user.name} (${user.status})` : user.name\n return {\n role: 'img',\n 'aria-label': label,\n }\n }\n\n const overflowBadgeProps: Record<string, unknown> = {\n role: 'button',\n 'aria-label': `${overflowCount} more users`,\n }\n\n return {\n visibleUsers,\n overflowCount,\n overflowUsers,\n ariaProps,\n getAvatarAriaProps,\n getInitials,\n overflowBadgeProps,\n ids: {\n group: groupId,\n label: labelId,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const avatarGroupStyles =\n 'flex items-center -space-x-2'\n\nexport const avatarVariants = cva({\n base: 'relative inline-flex items-center justify-center rounded-full border-2 border-background bg-muted text-muted-foreground font-medium overflow-hidden ring-2 ring-background',\n variants: {\n size: {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-xs',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const avatarOverflowBadgeVariants = cva({\n base: 'relative inline-flex items-center justify-center rounded-full border-2 border-background bg-muted text-muted-foreground font-medium ring-2 ring-background',\n variants: {\n size: {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-xs',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const avatarImageStyles =\n 'h-full w-full object-cover'\n\nexport const avatarPresenceDotVariants = cva({\n base: 'absolute bottom-0 right-0 rounded-full border-2 border-background',\n variants: {\n size: {\n xs: 'h-2 w-2',\n sm: 'h-2.5 w-2.5',\n md: 'h-3 w-3',\n lg: 'h-3.5 w-3.5',\n xl: 'h-4 w-4',\n },\n status: {\n online: 'bg-success',\n offline: 'bg-gray-400',\n away: 'bg-warning',\n busy: 'bg-destructive',\n dnd: 'bg-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n status: 'offline',\n },\n})\n", "import * as React from 'react'\nimport {\n createAvatarGroup,\n avatarGroupStyles,\n avatarVariants,\n avatarOverflowBadgeVariants,\n avatarImageStyles,\n avatarPresenceDotVariants,\n type AvatarUser,\n type AvatarSize,\n} from '@refraction-ui/avatar-group'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface AvatarGroupProps {\n users: AvatarUser[]\n max?: number\n size?: AvatarSize\n className?: string\n}\n\nexport const AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n function AvatarGroup({ users, max, size = 'md', className }, ref) {\n const api = createAvatarGroup({ users, max, size })\n\n return React.createElement(\n 'div',\n { ref, ...api.ariaProps, className: cn(avatarGroupStyles, className) },\n api.visibleUsers.map((user) =>\n React.createElement(\n 'div',\n {\n key: user.id,\n className: avatarVariants({ size }),\n ...api.getAvatarAriaProps(user),\n },\n user.src\n ? React.createElement('img', {\n src: user.src,\n alt: user.name,\n className: avatarImageStyles,\n })\n : React.createElement('span', null, api.getInitials(user.name)),\n user.status &&\n React.createElement('span', {\n className: avatarPresenceDotVariants({ size, status: user.status }),\n }),\n ),\n ),\n api.overflowCount > 0 &&\n React.createElement(\n 'div',\n {\n className: avatarOverflowBadgeVariants({ size }),\n ...api.overflowBadgeProps,\n },\n `+${api.overflowCount}`,\n ),\n )\n },\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["AvatarGroup"]
7
+ }
@@ -0,0 +1,168 @@
1
+ import {
2
+ cn,
3
+ cva
4
+ } from "./chunk-ZF3OHCGV.js";
5
+
6
+ // ../react-avatar/dist/index.js
7
+ import * as React from "react";
8
+
9
+ // ../avatar/dist/index.js
10
+ function getInitials(name) {
11
+ const parts = name.trim().split(/\s+/);
12
+ if (parts.length === 0 || parts[0] === "") return "";
13
+ if (parts.length === 1) return parts[0].charAt(0).toUpperCase();
14
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
15
+ }
16
+ function createAvatar(props = {}) {
17
+ const { src, alt = "", fallback = "", size = "md" } = props;
18
+ const ariaProps = {
19
+ role: "img"
20
+ };
21
+ if (alt) {
22
+ ariaProps["aria-label"] = alt;
23
+ }
24
+ const fallbackText = fallback ? getInitials(fallback) : alt ? getInitials(alt) : "";
25
+ const dataAttributes = {
26
+ "data-slot": "avatar"
27
+ };
28
+ return {
29
+ ariaProps,
30
+ dataAttributes,
31
+ imageProps: {
32
+ alt,
33
+ role: "img"
34
+ },
35
+ fallbackText,
36
+ state: {
37
+ size,
38
+ hasSrc: !!src
39
+ }
40
+ };
41
+ }
42
+ var avatarTokens = {
43
+ name: "avatar",
44
+ tokens: {
45
+ bg: { variable: "--rfr-avatar-bg", fallback: "hsl(var(--muted))" },
46
+ fg: { variable: "--rfr-avatar-fg", fallback: "hsl(var(--muted-foreground))" },
47
+ border: { variable: "--rfr-avatar-border", fallback: "hsl(var(--border))" }
48
+ }
49
+ };
50
+ var avatarVariants = cva({
51
+ base: "relative flex shrink-0 overflow-hidden rounded-full",
52
+ variants: {
53
+ size: {
54
+ xs: "h-6 w-6",
55
+ sm: "h-8 w-8",
56
+ md: "h-10 w-10",
57
+ lg: "h-12 w-12",
58
+ xl: "h-16 w-16"
59
+ }
60
+ },
61
+ defaultVariants: {
62
+ size: "md"
63
+ }
64
+ });
65
+ var avatarImageVariants = cva({
66
+ base: "aspect-square h-full w-full object-cover"
67
+ });
68
+ var avatarFallbackVariants = cva({
69
+ base: "flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground",
70
+ variants: {
71
+ size: {
72
+ xs: "text-xs",
73
+ sm: "text-xs",
74
+ md: "text-sm",
75
+ lg: "text-base",
76
+ xl: "text-lg"
77
+ }
78
+ },
79
+ defaultVariants: {
80
+ size: "md"
81
+ }
82
+ });
83
+
84
+ // ../react-avatar/dist/index.js
85
+ import { jsx } from "react/jsx-runtime";
86
+ var AvatarContext = React.createContext({
87
+ size: "md",
88
+ imageLoaded: false,
89
+ imageError: false,
90
+ setImageLoaded: () => {
91
+ },
92
+ setImageError: () => {
93
+ }
94
+ });
95
+ var Avatar = React.forwardRef(
96
+ function Avatar2({ size = "md", className, children, ...props }, ref) {
97
+ const [imageLoaded, setImageLoaded] = React.useState(false);
98
+ const [imageError, setImageError] = React.useState(false);
99
+ const api = createAvatar({ size });
100
+ return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: { size, imageLoaded, imageError, setImageLoaded, setImageError }, children: /* @__PURE__ */ jsx(
101
+ "span",
102
+ {
103
+ ref,
104
+ className: cn(avatarVariants({ size }), className),
105
+ ...api.ariaProps,
106
+ ...api.dataAttributes,
107
+ ...props,
108
+ children
109
+ }
110
+ ) });
111
+ }
112
+ );
113
+ var AvatarImage = React.forwardRef(
114
+ function AvatarImage2({ className, src, alt = "", onLoad, onError, ...props }, ref) {
115
+ const { imageError, setImageLoaded, setImageError } = React.useContext(AvatarContext);
116
+ React.useEffect(() => {
117
+ setImageLoaded(false);
118
+ setImageError(false);
119
+ }, [src, setImageLoaded, setImageError]);
120
+ const handleLoad = (e) => {
121
+ setImageLoaded(true);
122
+ onLoad?.(e);
123
+ };
124
+ const handleError = (e) => {
125
+ setImageError(true);
126
+ onError?.(e);
127
+ };
128
+ if (imageError) return null;
129
+ return /* @__PURE__ */ jsx(
130
+ "img",
131
+ {
132
+ ref,
133
+ className: cn(avatarImageVariants(), className),
134
+ src,
135
+ alt,
136
+ onLoad: handleLoad,
137
+ onError: handleError,
138
+ ...props
139
+ }
140
+ );
141
+ }
142
+ );
143
+ var AvatarFallback = React.forwardRef(
144
+ function AvatarFallback2({ className, children, ...props }, ref) {
145
+ const { size, imageLoaded, imageError } = React.useContext(AvatarContext);
146
+ if (imageLoaded && !imageError) return null;
147
+ return /* @__PURE__ */ jsx(
148
+ "span",
149
+ {
150
+ ref,
151
+ className: cn(avatarFallbackVariants({ size }), className),
152
+ ...props,
153
+ children
154
+ }
155
+ );
156
+ }
157
+ );
158
+ export {
159
+ Avatar,
160
+ AvatarFallback,
161
+ AvatarImage,
162
+ avatarFallbackVariants,
163
+ avatarImageVariants,
164
+ avatarTokens,
165
+ avatarVariants,
166
+ getInitials
167
+ };
168
+ //# sourceMappingURL=react-avatar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../avatar/src/avatar.ts", "../../avatar/src/avatar.styles.ts", "../../react-avatar/src/avatar.tsx"],
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport type AvatarLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n fallback?: string\n size?: AvatarSize\n}\n\nexport interface AvatarAPI {\n /** ARIA attributes to spread on the root element */\n ariaProps: Partial<AccessibilityProps>\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n /** Image ARIA props */\n imageProps: {\n alt: string\n role: string\n }\n /** Fallback text (initials) */\n fallbackText: string\n /** Current state */\n state: {\n size: AvatarSize\n hasSrc: boolean\n }\n}\n\n/**\n * Extract initials from a name or fallback string.\n * Takes first letter of first two words, uppercased.\n */\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 0 || parts[0] === '') return ''\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n}\n\nexport function createAvatar(props: AvatarProps = {}): AvatarAPI {\n const { src, alt = '', fallback = '', size = 'md' } = props\n\n const ariaProps: Partial<AccessibilityProps> = {\n role: 'img',\n }\n if (alt) {\n ariaProps['aria-label'] = alt\n }\n\n const fallbackText = fallback ? getInitials(fallback) : (alt ? getInitials(alt) : '')\n\n const dataAttributes: Record<string, string> = {\n 'data-slot': 'avatar',\n }\n\n return {\n ariaProps,\n dataAttributes,\n imageProps: {\n alt,\n role: 'img',\n },\n fallbackText,\n state: {\n size,\n hasSrc: !!src,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const avatarTokens: TokenContract = {\n name: 'avatar',\n tokens: {\n bg: { variable: '--rfr-avatar-bg', fallback: 'hsl(var(--muted))' },\n fg: { variable: '--rfr-avatar-fg', fallback: 'hsl(var(--muted-foreground))' },\n border: { variable: '--rfr-avatar-border', fallback: 'hsl(var(--border))' },\n },\n}\n\nexport const avatarVariants = cva({\n base: 'relative flex shrink-0 overflow-hidden rounded-full',\n variants: {\n size: {\n xs: 'h-6 w-6',\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n xl: 'h-16 w-16',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const avatarImageVariants = cva({\n base: 'aspect-square h-full w-full object-cover',\n})\n\nexport const avatarFallbackVariants = cva({\n base: 'flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground',\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n", "import * as React from 'react'\nimport {\n createAvatar,\n avatarVariants,\n avatarImageVariants,\n avatarFallbackVariants,\n type AvatarSize,\n} from '@refraction-ui/avatar'\nimport { cn } from '@refraction-ui/shared'\n\n/* ─── Context ──────────────────────────────────────────────────── */\ninterface AvatarContextValue {\n size: AvatarSize\n imageLoaded: boolean\n imageError: boolean\n setImageLoaded: (loaded: boolean) => void\n setImageError: (error: boolean) => void\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue>({\n size: 'md',\n imageLoaded: false,\n imageError: false,\n setImageLoaded: () => {},\n setImageError: () => {},\n})\n\n/* ─── Avatar (root) ────────────────────────────────────────────── */\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: AvatarSize\n}\n\n/**\n * Avatar -- circular image with fallback support.\n * Compound component: use Avatar > AvatarImage + AvatarFallback.\n */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar({ size = 'md', className, children, ...props }, ref) {\n const [imageLoaded, setImageLoaded] = React.useState(false)\n const [imageError, setImageError] = React.useState(false)\n\n const api = createAvatar({ size })\n\n return (\n <AvatarContext.Provider value={{ size, imageLoaded, imageError, setImageLoaded, setImageError }}>\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {children}\n </span>\n </AvatarContext.Provider>\n )\n },\n)\n\n/* ─── AvatarImage ──────────────────────────────────────────────── */\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {}\n\nexport const AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n function AvatarImage({ className, src, alt = '', onLoad, onError, ...props }, ref) {\n const { imageError, setImageLoaded, setImageError } = React.useContext(AvatarContext)\n\n React.useEffect(() => {\n setImageLoaded(false)\n setImageError(false)\n }, [src, setImageLoaded, setImageError])\n\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageLoaded(true)\n onLoad?.(e)\n }\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageError(true)\n onError?.(e)\n }\n\n if (imageError) return null\n\n return (\n <img\n ref={ref}\n className={cn(avatarImageVariants(), className)}\n src={src}\n alt={alt}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n )\n },\n)\n\n/* ─── AvatarFallback ───────────────────────────────────────────── */\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nexport const AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n function AvatarFallback({ className, children, ...props }, ref) {\n const { size, imageLoaded, imageError } = React.useContext(AvatarContext)\n\n if (imageLoaded && !imageError) return null\n\n return (\n <span\n ref={ref}\n className={cn(avatarFallbackVariants({ size }), className)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["Avatar", "AvatarImage", "AvatarFallback"]
7
+ }
@@ -0,0 +1,86 @@
1
+ import {
2
+ Slot
3
+ } from "./chunk-WSPJTQAV.js";
4
+ import {
5
+ cn,
6
+ cva
7
+ } from "./chunk-ZF3OHCGV.js";
8
+
9
+ // ../react-badge/dist/index.js
10
+ import * as React from "react";
11
+
12
+ // ../badge/dist/index.js
13
+ var statusVariants = ["success", "warning", "destructive"];
14
+ function createBadge(props = {}) {
15
+ const { variant = "default" } = props;
16
+ const ariaProps = {};
17
+ if (statusVariants.includes(variant)) {
18
+ ariaProps.role = "status";
19
+ }
20
+ const dataAttributes = {};
21
+ dataAttributes["data-variant"] = variant;
22
+ return {
23
+ ariaProps,
24
+ dataAttributes
25
+ };
26
+ }
27
+ var badgeVariants = cva({
28
+ base: "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
29
+ variants: {
30
+ variant: {
31
+ default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
32
+ primary: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
33
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
34
+ destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80 font-semibold",
35
+ outline: "text-foreground",
36
+ success: "border-transparent bg-success text-success-foreground shadow hover:bg-success/80 font-semibold",
37
+ warning: "border-transparent bg-warning text-warning-foreground shadow hover:bg-warning/80 font-semibold"
38
+ },
39
+ size: {
40
+ sm: "px-2 py-0 text-[10px]",
41
+ md: "px-2.5 py-0.5 text-xs"
42
+ }
43
+ },
44
+ defaultVariants: {
45
+ variant: "default",
46
+ size: "md"
47
+ }
48
+ });
49
+
50
+ // ../react-badge/dist/index.js
51
+ import { jsx } from "react/jsx-runtime";
52
+ var Badge = React.forwardRef(
53
+ function Badge2({ variant, size, asChild = false, className, children, ...props }, ref) {
54
+ const api = createBadge({ variant, size });
55
+ const classes = cn(badgeVariants({ variant, size }), className);
56
+ if (asChild) {
57
+ return /* @__PURE__ */ jsx(
58
+ Slot,
59
+ {
60
+ ref,
61
+ className: classes,
62
+ ...api.ariaProps,
63
+ ...api.dataAttributes,
64
+ ...props,
65
+ children
66
+ }
67
+ );
68
+ }
69
+ return /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ ref,
73
+ className: classes,
74
+ ...api.ariaProps,
75
+ ...api.dataAttributes,
76
+ ...props,
77
+ children
78
+ }
79
+ );
80
+ }
81
+ );
82
+ export {
83
+ Badge,
84
+ badgeVariants
85
+ };
86
+ //# sourceMappingURL=react-badge.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../badge/src/badge.ts", "../../badge/src/badge.styles.ts", "../../react-badge/src/badge.tsx"],
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type BadgeVariant = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning'\nexport type BadgeSize = 'sm' | 'md'\n\nexport interface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n}\n\nexport interface BadgeAPI {\n /** ARIA attributes to spread on the element */\n ariaProps: Partial<AccessibilityProps>\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n}\n\nconst statusVariants: BadgeVariant[] = ['success', 'warning', 'destructive']\n\n/** Icon name for status badge variants — non-color indicator for colorblind safety */\nconst BADGE_ICONS: Partial<Record<BadgeVariant, string>> = {\n success: 'check',\n warning: 'alert',\n destructive: 'x',\n}\n\n/** Get the icon name for a badge variant (undefined for non-status variants) */\nexport function getBadgeIcon(variant: BadgeVariant): string | undefined {\n return BADGE_ICONS[variant]\n}\n\nexport function createBadge(props: BadgeProps = {}): BadgeAPI {\n const { variant = 'default' } = props\n\n const ariaProps: Partial<AccessibilityProps> = {}\n\n if (statusVariants.includes(variant)) {\n ariaProps.role = 'status'\n }\n\n const dataAttributes: Record<string, string> = {}\n dataAttributes['data-variant'] = variant\n\n return {\n ariaProps,\n dataAttributes,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const badgeVariants = cva({\n base: 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n primary: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80 font-semibold',\n outline: 'text-foreground',\n success: 'border-transparent bg-success text-success-foreground shadow hover:bg-success/80 font-semibold',\n warning: 'border-transparent bg-warning text-warning-foreground shadow hover:bg-warning/80 font-semibold',\n },\n size: {\n sm: 'px-2 py-0 text-[10px]',\n md: 'px-2.5 py-0.5 text-xs',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n})\n", "import * as React from 'react'\nimport {\n createBadge,\n badgeVariants,\n type BadgeVariant,\n type BadgeSize,\n} from '@refraction-ui/badge'\nimport { cn } from '@refraction-ui/shared'\nimport { Slot } from '@refraction-ui/react-slot'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: BadgeVariant\n size?: BadgeSize\n /** Merge the badge's classes/props onto the single child element instead of\n * rendering a `<div>` (Radix-style `asChild`) — e.g.\n * `<Badge asChild><a href=\"/x\">…</a></Badge>` for a linked badge. Expects\n * exactly one React element child. */\n asChild?: boolean\n}\n\n/**\n * Badge component — renders a styled badge with variant and size support.\n *\n * Uses the headless @refraction-ui/badge core for state and ARIA attributes.\n * Styling via Tailwind utility classes (no external CSS-in-JS).\n */\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(\n function Badge({ variant, size, asChild = false, className, children, ...props }, ref) {\n const api = createBadge({ variant, size })\n const classes = cn(badgeVariants({ variant, size }), className)\n\n if (asChild) {\n return (\n <Slot\n ref={ref as React.Ref<HTMLElement>}\n className={classes}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {children}\n </Slot>\n )\n }\n\n return (\n <div\n ref={ref}\n className={classes}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n"],
5
+ "mappings": ";;;;;;;;;;;;AAiBA,IAAM,iBAAiC,CAAC,WAAW,WAAW,aAAa;AAcpE,SAAS,YAAY,QAAoB,CAAA,GAAc;AAC5D,QAAM,EAAE,UAAU,UAAA,IAAc;AAEhC,QAAM,YAAyC,CAAA;AAE/C,MAAI,eAAe,SAAS,OAAO,GAAG;AACpC,cAAU,OAAO;EACnB;AAEA,QAAM,iBAAyC,CAAA;AAC/C,iBAAe,cAAc,IAAI;AAEjC,SAAO;IACL;IACA;EAAA;AAEJ;AC7CO,IAAM,gBAAgB,IAAI;EAC/B,MAAM;EACN,UAAU;IACR,SAAS;MACP,SAAS;MACT,SAAS;MACT,WAAW;MACX,aAAa;MACb,SAAS;MACT,SAAS;MACT,SAAS;IAAA;IAEX,MAAM;MACJ,IAAI;MACJ,IAAI;IAAA;EACN;EAEF,iBAAiB;IACf,SAAS;IACT,MAAM;EAAA;AAEV,CAAC;;;;ACGM,IAAM,QAAc;EACzB,SAASA,OAAM,EAAE,SAAS,MAAM,UAAU,OAAO,WAAW,UAAU,GAAG,MAAA,GAAS,KAAK;AACrF,UAAM,MAAM,YAAY,EAAE,SAAS,KAAA,CAAM;AACzC,UAAM,UAAU,GAAG,cAAc,EAAE,SAAS,KAAA,CAAM,GAAG,SAAS;AAE9D,QAAI,SAAS;AACX,aACE;QAAC;QAAA;UACC;UACA,WAAW;UACV,GAAG,IAAI;UACP,GAAG,IAAI;UACP,GAAG;UAEH;QAAA;MAAA;IAGP;AAEA,WACE;MAAC;MAAA;QACC;QACA,WAAW;QACV,GAAG,IAAI;QACP,GAAG,IAAI;QACP,GAAG;QAEH;MAAA;IAAA;EAGP;AACF;",
6
+ "names": ["Badge"]
7
+ }
@@ -0,0 +1,67 @@
1
+ import {
2
+ cn,
3
+ cva
4
+ } from "./chunk-ZF3OHCGV.js";
5
+
6
+ // ../react-bottom-nav/dist/index.js
7
+ import * as React from "react";
8
+
9
+ // ../bottom-nav/dist/index.js
10
+ function createBottomNav(props = {}) {
11
+ const { currentPath = "/" } = props;
12
+ function isActive(href) {
13
+ if (href === "/") return currentPath === "/";
14
+ return currentPath.startsWith(href);
15
+ }
16
+ return {
17
+ ariaProps: { role: "navigation", "aria-label": "Main navigation" },
18
+ isActive,
19
+ tabAriaProps: (href) => isActive(href) ? { "aria-current": "page" } : {}
20
+ };
21
+ }
22
+ var bottomNavVariants = cva({
23
+ base: "fixed bottom-0 left-0 right-0 z-40 border-t bg-background md:hidden"
24
+ });
25
+ var bottomNavTabVariants = cva({
26
+ base: "flex flex-1 flex-col items-center justify-center gap-1 py-2 text-xs transition-colors",
27
+ variants: {
28
+ active: {
29
+ true: "text-foreground",
30
+ false: "text-muted-foreground"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ active: "false"
35
+ }
36
+ });
37
+
38
+ // ../react-bottom-nav/dist/index.js
39
+ import { jsx, jsxs } from "react/jsx-runtime";
40
+ var BottomNav = React.forwardRef(
41
+ function BottomNav2({ tabs = [], currentPath, className, ...props }, ref) {
42
+ const api = createBottomNav({ tabs, currentPath });
43
+ const classes = cn(bottomNavVariants(), className);
44
+ return /* @__PURE__ */ jsx("nav", { ref, className: classes, ...api.ariaProps, ...props, children: /* @__PURE__ */ jsx("div", { className: "flex", children: tabs.map((tab) => {
45
+ const active = api.isActive(tab.href);
46
+ return /* @__PURE__ */ jsxs(
47
+ "a",
48
+ {
49
+ href: tab.href,
50
+ className: bottomNavTabVariants({ active: active ? "true" : "false" }),
51
+ ...api.tabAriaProps(tab.href),
52
+ children: [
53
+ tab.icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: active && tab.activeIcon ? tab.activeIcon : tab.icon }),
54
+ /* @__PURE__ */ jsx("span", { children: tab.label })
55
+ ]
56
+ },
57
+ tab.href
58
+ );
59
+ }) }) });
60
+ }
61
+ );
62
+ export {
63
+ BottomNav,
64
+ bottomNavTabVariants,
65
+ bottomNavVariants
66
+ };
67
+ //# sourceMappingURL=react-bottom-nav.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bottom-nav/src/bottom-nav.ts", "../../bottom-nav/src/bottom-nav.styles.ts", "../../react-bottom-nav/src/bottom-nav.tsx"],
4
+ "sourcesContent": ["export interface NavTab {\n label: string\n href: string\n icon?: string\n activeIcon?: string\n}\n\nexport interface BottomNavProps {\n tabs?: NavTab[]\n currentPath?: string\n}\n\nexport interface BottomNavAPI {\n ariaProps: Record<string, string>\n isActive: (href: string) => boolean\n tabAriaProps: (href: string) => Record<string, string>\n}\n\nexport function createBottomNav(props: BottomNavProps = {}): BottomNavAPI {\n const { currentPath = '/' } = props\n\n function isActive(href: string): boolean {\n if (href === '/') return currentPath === '/'\n return currentPath.startsWith(href)\n }\n\n return {\n ariaProps: { role: 'navigation', 'aria-label': 'Main navigation' },\n isActive,\n tabAriaProps: (href: string): Record<string, string> =>\n isActive(href) ? { 'aria-current': 'page' } : {},\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const bottomNavVariants = cva({\n base: 'fixed bottom-0 left-0 right-0 z-40 border-t bg-background md:hidden',\n})\n\nexport const bottomNavTabVariants = cva({\n base: 'flex flex-1 flex-col items-center justify-center gap-1 py-2 text-xs transition-colors',\n variants: {\n active: {\n true: 'text-foreground',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n active: 'false',\n },\n})\n", "import * as React from 'react'\nimport {\n createBottomNav,\n bottomNavVariants,\n bottomNavTabVariants,\n type NavTab,\n} from '@refraction-ui/bottom-nav'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface BottomNavProps extends React.HTMLAttributes<HTMLElement> {\n /** Tab items */\n tabs?: NavTab[]\n /** Current pathname for active state */\n currentPath?: string\n}\n\n/**\n * BottomNav component — renders a fixed bottom navigation bar with tab buttons.\n *\n * Uses the headless @refraction-ui/bottom-nav core for state and ARIA attributes.\n * Visible on mobile only (md:hidden via styles).\n */\nexport const BottomNav = React.forwardRef<HTMLElement, BottomNavProps>(\n function BottomNav({ tabs = [], currentPath, className, ...props }, ref) {\n const api = createBottomNav({ tabs, currentPath })\n const classes = cn(bottomNavVariants(), className)\n\n return (\n <nav ref={ref} className={classes} {...api.ariaProps} {...props}>\n <div className=\"flex\">\n {tabs.map((tab) => {\n const active = api.isActive(tab.href)\n return (\n <a\n key={tab.href}\n href={tab.href}\n className={bottomNavTabVariants({ active: active ? 'true' : 'false' })}\n {...api.tabAriaProps(tab.href)}\n >\n {tab.icon && <span aria-hidden=\"true\">{active && tab.activeIcon ? tab.activeIcon : tab.icon}</span>}\n <span>{tab.label}</span>\n </a>\n )\n })}\n </div>\n </nav>\n )\n },\n)\n"],
5
+ "mappings": ";;;;;;;;;AAkBO,SAAS,gBAAgB,QAAwB,CAAA,GAAkB;AACxE,QAAM,EAAE,cAAc,IAAA,IAAQ;AAE9B,WAAS,SAAS,MAAuB;AACvC,QAAI,SAAS,IAAK,QAAO,gBAAgB;AACzC,WAAO,YAAY,WAAW,IAAI;EACpC;AAEA,SAAO;IACL,WAAW,EAAE,MAAM,cAAc,cAAc,kBAAA;IAC/C;IACA,cAAc,CAAC,SACb,SAAS,IAAI,IAAI,EAAE,gBAAgB,OAAA,IAAW,CAAA;EAAC;AAErD;AC9BO,IAAM,oBAAoB,IAAI;EACnC,MAAM;AACR,CAAC;AAEM,IAAM,uBAAuB,IAAI;EACtC,MAAM;EACN,UAAU;IACR,QAAQ;MACN,MAAM;MACN,OAAO;IAAA;EACT;EAEF,iBAAiB;IACf,QAAQ;EAAA;AAEZ,CAAC;;;;ACKM,IAAM,YAAkB;EAC7B,SAASA,WAAU,EAAE,OAAO,CAAA,GAAI,aAAa,WAAW,GAAG,MAAA,GAAS,KAAK;AACvE,UAAM,MAAM,gBAAgB,EAAE,MAAM,YAAA,CAAa;AACjD,UAAM,UAAU,GAAG,kBAAA,GAAqB,SAAS;AAEjD,WAAA,oBACG,OAAA,EAAI,KAAU,WAAW,SAAU,GAAG,IAAI,WAAY,GAAG,OACxD,UAAA,oBAAC,OAAA,EAAI,WAAU,QACZ,UAAA,KAAK,IAAI,CAAC,QAAQ;AACjB,YAAM,SAAS,IAAI,SAAS,IAAI,IAAI;AACpC,aACE;QAAC;QAAA;UAEC,MAAM,IAAI;UACV,WAAW,qBAAqB,EAAE,QAAQ,SAAS,SAAS,QAAA,CAAS;UACpE,GAAG,IAAI,aAAa,IAAI,IAAI;UAE5B,UAAA;YAAA,IAAI,QAAQ,oBAAC,QAAA,EAAK,eAAY,QAAQ,UAAA,UAAU,IAAI,aAAa,IAAI,aAAa,IAAI,KAAA,CAAK;YAC5F,oBAAC,QAAA,EAAM,UAAA,IAAI,MAAA,CAAM;UAAA;QAAA;QANZ,IAAI;MAAA;IASf,CAAC,EAAA,CACH,EAAA,CACF;EAEJ;AACF;",
6
+ "names": ["BottomNav"]
7
+ }
@@ -0,0 +1,92 @@
1
+ import {
2
+ cn,
3
+ cva
4
+ } from "./chunk-ZF3OHCGV.js";
5
+
6
+ // ../react-brand-network-cell/dist/index.js
7
+ import * as React from "react";
8
+
9
+ // ../brand-network-cell/dist/index.js
10
+ function createBrandNetworkCell(props = {}) {
11
+ const { current = false } = props;
12
+ const ariaProps = {
13
+ role: "group"
14
+ };
15
+ const dataAttributes = {
16
+ "data-current": String(current)
17
+ };
18
+ return { ariaProps, dataAttributes };
19
+ }
20
+ var brandNetworkCellVariants = cva({
21
+ base: [
22
+ "relative rounded-xl border border-border bg-card p-4",
23
+ "flex flex-col gap-3 transition-shadow"
24
+ ].join(" "),
25
+ variants: {
26
+ current: {
27
+ true: "ring-1 ring-primary",
28
+ false: ""
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ current: "false"
33
+ }
34
+ });
35
+ var brandNetworkCellGlyphClass = "flex size-10 items-center justify-center rounded-lg text-sm font-bold";
36
+ var brandNetworkCellDomainClass = "font-semibold text-foreground";
37
+ var brandNetworkCellCurrentBadgeClass = "inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary";
38
+ var brandNetworkCellBodyClass = "text-sm text-muted-foreground";
39
+ var brandNetworkCellLinkClass = "text-sm text-primary";
40
+
41
+ // ../react-brand-network-cell/dist/index.js
42
+ import { jsxs, jsx } from "react/jsx-runtime";
43
+ var BrandNetworkCell = React.forwardRef(
44
+ function BrandNetworkCell2({
45
+ glyph,
46
+ glyphBg,
47
+ glyphColor,
48
+ domain,
49
+ body,
50
+ href,
51
+ linkLabel,
52
+ current = false,
53
+ className,
54
+ ...props
55
+ }, ref) {
56
+ const api = createBrandNetworkCell({ current });
57
+ return /* @__PURE__ */ jsxs(
58
+ "div",
59
+ {
60
+ ref,
61
+ className: cn(
62
+ brandNetworkCellVariants({ current: current ? "true" : "false" }),
63
+ className
64
+ ),
65
+ ...api.ariaProps,
66
+ ...api.dataAttributes,
67
+ ...props,
68
+ children: [
69
+ /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ className: brandNetworkCellGlyphClass,
73
+ style: { background: glyphBg, color: glyphColor },
74
+ "aria-hidden": "true",
75
+ children: glyph
76
+ }
77
+ ),
78
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
79
+ /* @__PURE__ */ jsx("span", { className: brandNetworkCellDomainClass, children: domain }),
80
+ current && /* @__PURE__ */ jsx("span", { className: brandNetworkCellCurrentBadgeClass, children: "You are here" })
81
+ ] }),
82
+ /* @__PURE__ */ jsx("p", { className: brandNetworkCellBodyClass, children: body }),
83
+ href != null && /* @__PURE__ */ jsx("a", { href, className: brandNetworkCellLinkClass, children: linkLabel ?? "Visit \u2192" })
84
+ ]
85
+ }
86
+ );
87
+ }
88
+ );
89
+ export {
90
+ BrandNetworkCell
91
+ };
92
+ //# sourceMappingURL=react-brand-network-cell.js.map