@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../editor-tabs/src/editor-tabs.ts", "../../editor-tabs/src/editor-tabs.styles.ts", "../../react-editor-tabs/src/editor-tabs.tsx"],
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\n/** A single tab entry in the editor tab bar. */\nexport interface EditorTabData {\n /** Unique identifier for the tab. */\n id: string\n /** Display label (e.g. \"solution.py\"). */\n label: string\n /** Optional icon — a short string like an emoji or a ligature glyph. */\n icon?: string\n /** Whether the tab has unsaved changes (shows a dirty dot). */\n dirty?: boolean\n /** Whether the tab shows a close button. */\n closable?: boolean\n}\n\nexport interface EditorTabsProps {\n /** The id of the currently active tab. */\n activeId?: string\n}\n\nexport interface EditorTabsAPI {\n /** ARIA attributes to spread on the tab list container. */\n ariaProps: Partial<AccessibilityProps>\n /** Data attributes for styling hooks. */\n dataAttributes: Record<string, string>\n}\n\n/**\n * Build the framework-agnostic container props for an IDE-style editor tab bar.\n *\n * Returns `role=\"tablist\"` plus data attributes. Each individual tab is\n * `role=\"tab\"` with `aria-selected`; adapters spread ariaProps on the container\n * and render the tabs themselves.\n */\nexport function createEditorTabs(props: EditorTabsProps = {}): EditorTabsAPI {\n const { activeId } = props\n\n const ariaProps: Partial<AccessibilityProps> = {\n role: 'tablist',\n }\n\n const dataAttributes: Record<string, string> = {}\n if (activeId !== undefined) {\n dataAttributes['data-active-id'] = activeId\n }\n\n return { ariaProps, dataAttributes }\n}\n\n/**\n * Roving keyboard navigation for the editor tab bar.\n *\n * Unlike a rating scale, tabs **wrap** at the ends so you can cycle through\n * them continuously — matching standard tab-bar behaviour (similar to\n * segmented-control). Home/End jump to the first/last tab.\n *\n * - ArrowRight → next (wraps to first after last)\n * - ArrowLeft → previous (wraps to last before first)\n * - Home → first\n * - End → last\n */\nexport function getNextTabIndex(\n currentIndex: number,\n key: string,\n count: number,\n): number {\n if (count <= 0) return currentIndex\n\n switch (key) {\n case 'ArrowRight':\n return (currentIndex + 1) % count\n case 'ArrowLeft':\n return (currentIndex - 1 + count) % count\n case 'Home':\n return 0\n case 'End':\n return count - 1\n default:\n return currentIndex\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/** The tab bar container row. */\nexport const editorTabsVariants = cva({\n base: 'inline-flex items-end gap-0 border-b border-border bg-muted/40 overflow-x-auto',\n variants: {},\n defaultVariants: {},\n})\n\n/**\n * A single tab button. The `state` variant switches between active and\n * inactive treatments so adapters never inline these classes.\n */\nexport const editorTabVariants = cva({\n base: [\n 'group inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium',\n 'border-b-2 transition-colors select-none whitespace-nowrap',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background',\n ].join(' '),\n variants: {\n state: {\n active: [\n 'border-primary text-foreground bg-background',\n 'border-t border-l border-r border-border border-b-background -mb-px',\n ].join(' '),\n inactive: [\n 'border-transparent text-muted-foreground',\n 'hover:text-foreground hover:bg-background/60',\n ].join(' '),\n },\n },\n defaultVariants: {\n state: 'inactive',\n },\n})\n\n/** The dot indicator shown when a tab has unsaved changes. */\nexport const editorTabDirtyDotClass =\n 'size-1.5 rounded-full bg-amber-400 shrink-0'\n\n/** The close button inside a tab. */\nexport const editorTabCloseButtonClass = [\n 'ml-1 inline-flex items-center justify-center rounded-sm size-4 shrink-0',\n 'text-muted-foreground opacity-0 transition-opacity',\n 'group-hover:opacity-100 focus-visible:opacity-100',\n 'hover:bg-accent hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n].join(' ')\n\n/** The optional icon slot to the left of the label. */\nexport const editorTabIconClass = 'shrink-0 text-[0.85em] leading-none'\n", "import * as React from 'react'\nimport {\n createEditorTabs,\n getNextTabIndex,\n editorTabsVariants,\n editorTabVariants,\n editorTabDirtyDotClass,\n editorTabCloseButtonClass,\n editorTabIconClass,\n type EditorTabData,\n} from '@refraction-ui/editor-tabs'\nimport { cn } from '@refraction-ui/shared'\n\nexport type { EditorTabData }\n\nexport interface EditorTabsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** The list of tab entries to render. */\n tabs: EditorTabData[]\n /** The id of the currently active tab (controlled). */\n activeId: string\n /** Called when the user clicks or navigates to a tab. */\n onSelect: (id: string) => void\n /** Called when the user clicks the close button on a tab. */\n onClose?: (id: string) => void\n}\n\n/**\n * EditorTabs — an IDE-style open-file tab bar.\n *\n * Renders `role=\"tablist\"`; each tab is `role=\"tab\"` with `aria-selected`.\n * Supports optional icons, dirty-state dots, and close buttons. Keyboard\n * navigation uses wrapping roving tabindex (ArrowLeft/Right, Home/End) via the\n * headless `@refraction-ui/editor-tabs` core helper.\n */\nexport const EditorTabs = React.forwardRef<HTMLDivElement, EditorTabsProps>(\n function EditorTabs({ tabs, activeId, onSelect, onClose, className, ...props }, ref) {\n const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([])\n\n const activeIndex = tabs.findIndex((t) => t.id === activeId)\n // If nothing is active, make the first tab tabbable.\n const tabbableIndex = activeIndex === -1 ? 0 : activeIndex\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n index: number,\n ) => {\n const next = getNextTabIndex(index, event.key, tabs.length)\n if (next !== index) {\n event.preventDefault()\n onSelect(tabs[next].id)\n tabRefs.current[next]?.focus()\n }\n }\n\n const api = createEditorTabs({ activeId })\n\n return (\n <div\n ref={ref}\n className={cn(editorTabsVariants(), className)}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {tabs.map((tab, index) => {\n const isActive = tab.id === activeId\n return (\n <button\n key={tab.id}\n ref={(node) => {\n tabRefs.current[index] = node\n }}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${tab.id}`}\n id={`tab-${tab.id}`}\n tabIndex={index === tabbableIndex ? 0 : -1}\n data-state={isActive ? 'active' : 'inactive'}\n className={editorTabVariants({ state: isActive ? 'active' : 'inactive' })}\n onClick={() => onSelect(tab.id)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n >\n {tab.icon && (\n <span className={editorTabIconClass} aria-hidden=\"true\">\n {tab.icon}\n </span>\n )}\n <span>{tab.label}</span>\n {tab.dirty && (\n <span\n className={editorTabDirtyDotClass}\n aria-label=\"unsaved changes\"\n role=\"status\"\n />\n )}\n {tab.closable && (\n <span\n role=\"button\"\n aria-label={`Close ${tab.label}`}\n tabIndex={-1}\n className={editorTabCloseButtonClass}\n onClick={(e) => {\n e.stopPropagation()\n onClose?.(tab.id)\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation()\n onClose?.(tab.id)\n }\n }}\n >\n ×\n </span>\n )}\n </button>\n )\n })}\n </div>\n )\n },\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["EditorTabs"]
7
+ }
@@ -0,0 +1,238 @@
1
+ import {
2
+ CATEGORY_LABELS,
3
+ DEFAULT_TWEMOJI_BASE_URL,
4
+ EMOJI_CATEGORIES,
5
+ EMOJI_COUNT_TOTAL,
6
+ EMOJI_DATA,
7
+ SHORTCODE_ALIASES,
8
+ STARTER_STICKER_SET,
9
+ buildShortcodeMap,
10
+ createEmojiPicker,
11
+ emojiPickerCategoryBarStyles,
12
+ emojiPickerCategoryTabVariants,
13
+ emojiPickerContainerStyles,
14
+ emojiPickerEmojiButtonStyles,
15
+ emojiPickerGridStyles,
16
+ emojiPickerPanelStyles,
17
+ emojiPickerSearchStyles,
18
+ emojiPickerSectionLabelStyles,
19
+ emojiPickerStickerButtonStyles,
20
+ getAllEmojis,
21
+ resolveShortcode,
22
+ searchEmojis,
23
+ twemojiAssetUrl,
24
+ twemojiFilename
25
+ } from "./chunk-533MCMSU.js";
26
+ import {
27
+ cn
28
+ } from "./chunk-ZF3OHCGV.js";
29
+
30
+ // ../react-emoji-picker/dist/index.js
31
+ import * as React from "react";
32
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
33
+ var nativeEmojiRenderer = (emoji) => emoji.emoji;
34
+ function createTwemojiRenderer(baseUrl = DEFAULT_TWEMOJI_BASE_URL) {
35
+ return (emoji) => /* @__PURE__ */ jsx(
36
+ "img",
37
+ {
38
+ src: twemojiAssetUrl(emoji.emoji, baseUrl),
39
+ alt: emoji.emoji,
40
+ draggable: false,
41
+ loading: "lazy",
42
+ className: "pointer-events-none h-[1.2em] w-[1.2em] select-none"
43
+ }
44
+ );
45
+ }
46
+ var twemojiRenderer = createTwemojiRenderer();
47
+ var defaultStickerRenderer = (sticker) => {
48
+ if (sticker.kind === "svg") {
49
+ return /* @__PURE__ */ jsx(
50
+ "span",
51
+ {
52
+ "aria-hidden": "true",
53
+ className: "block h-full w-full",
54
+ dangerouslySetInnerHTML: { __html: sticker.source }
55
+ }
56
+ );
57
+ }
58
+ if (sticker.kind === "image" || /^https?:|^data:/.test(sticker.source)) {
59
+ return /* @__PURE__ */ jsx(
60
+ "img",
61
+ {
62
+ src: sticker.source,
63
+ alt: sticker.label,
64
+ loading: "lazy",
65
+ draggable: false,
66
+ className: "pointer-events-none h-full w-full select-none object-contain"
67
+ }
68
+ );
69
+ }
70
+ return /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: sticker.label });
71
+ };
72
+ var RECENT_LIMIT = 20;
73
+ var EmojiPicker = React.forwardRef(
74
+ function EmojiPicker2({ onSelect, onStickerSelect, recentEmojis: initialRecent = [], className, emojiRenderer, twemojiBaseUrl, stickerSets = [STARTER_STICKER_SET], stickerRenderer = defaultStickerRenderer }, ref) {
75
+ const [search, setSearch] = React.useState("");
76
+ const [activeCategory, setActiveCategory] = React.useState("smileys");
77
+ const [mode, setMode] = React.useState("emoji");
78
+ const [recentEmojis, setRecentEmojis] = React.useState(initialRecent);
79
+ const renderEmoji = React.useMemo(
80
+ () => emojiRenderer ?? createTwemojiRenderer(twemojiBaseUrl),
81
+ [emojiRenderer, twemojiBaseUrl]
82
+ );
83
+ const api = React.useMemo(() => createEmojiPicker({ recentEmojis }), [recentEmojis]);
84
+ const filteredEmojis = React.useMemo(() => {
85
+ if (search.trim()) return searchEmojis(search);
86
+ return EMOJI_DATA[activeCategory];
87
+ }, [search, activeCategory]);
88
+ const handleSelect = (emoji) => {
89
+ setRecentEmojis(
90
+ (prev) => [emoji, ...prev.filter((e) => e.emoji !== emoji.emoji)].slice(0, RECENT_LIMIT)
91
+ );
92
+ onSelect?.(emoji);
93
+ };
94
+ const handleCategoryClick = (cat) => {
95
+ setMode("emoji");
96
+ setActiveCategory(cat);
97
+ setSearch("");
98
+ };
99
+ const hasStickers = stickerSets.length > 0;
100
+ const showStickerTab = hasStickers && !search;
101
+ const panelKey = search ? "search" : mode === "sticker" ? "sticker" : activeCategory;
102
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(emojiPickerContainerStyles, className), ...api.ariaProps, children: [
103
+ /* @__PURE__ */ jsx(
104
+ "input",
105
+ {
106
+ ...api.searchInputProps,
107
+ className: emojiPickerSearchStyles,
108
+ value: search,
109
+ onChange: (e) => {
110
+ setSearch(e.target.value);
111
+ if (e.target.value) setMode("emoji");
112
+ }
113
+ }
114
+ ),
115
+ !search && /* @__PURE__ */ jsxs("div", { className: emojiPickerCategoryBarStyles, role: "tablist", "aria-label": "Emoji categories", children: [
116
+ api.categoryTabs.map((tab) => /* @__PURE__ */ jsx(
117
+ "button",
118
+ {
119
+ type: "button",
120
+ role: "tab",
121
+ "aria-selected": mode === "emoji" && tab.category === activeCategory,
122
+ className: emojiPickerCategoryTabVariants({
123
+ state: mode === "emoji" && tab.category === activeCategory ? "active" : "inactive"
124
+ }),
125
+ onClick: () => handleCategoryClick(tab.category),
126
+ title: tab.label,
127
+ "aria-label": tab.label,
128
+ children: tab.emoji
129
+ },
130
+ tab.category
131
+ )),
132
+ showStickerTab && /* @__PURE__ */ jsx(
133
+ "button",
134
+ {
135
+ type: "button",
136
+ role: "tab",
137
+ "aria-selected": mode === "sticker",
138
+ className: emojiPickerCategoryTabVariants({
139
+ state: mode === "sticker" ? "active" : "inactive"
140
+ }),
141
+ onClick: () => {
142
+ setMode("sticker");
143
+ setSearch("");
144
+ },
145
+ title: "Stickers",
146
+ "aria-label": "Stickers",
147
+ children: "\u2B50"
148
+ }
149
+ )
150
+ ] }),
151
+ /* @__PURE__ */ jsx("div", { className: emojiPickerPanelStyles, children: mode === "sticker" && !search ? /* @__PURE__ */ jsx(
152
+ StickerPanel,
153
+ {
154
+ stickerSets,
155
+ render: stickerRenderer,
156
+ onPick: (s) => onStickerSelect?.(s)
157
+ }
158
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
159
+ !search && recentEmojis.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
160
+ /* @__PURE__ */ jsx("div", { className: emojiPickerSectionLabelStyles, children: "Recent" }),
161
+ /* @__PURE__ */ jsx("div", { className: emojiPickerGridStyles, children: recentEmojis.map((emoji, i) => /* @__PURE__ */ jsx(
162
+ "button",
163
+ {
164
+ type: "button",
165
+ className: emojiPickerEmojiButtonStyles,
166
+ onClick: () => handleSelect(emoji),
167
+ ...api.getEmojiAriaProps(emoji),
168
+ children: renderEmoji(emoji)
169
+ },
170
+ `recent-${emoji.emoji}-${i}`
171
+ )) })
172
+ ] }),
173
+ /* @__PURE__ */ jsxs("div", { children: [
174
+ !search && /* @__PURE__ */ jsx("div", { className: emojiPickerSectionLabelStyles, children: CATEGORY_LABELS[activeCategory] }),
175
+ /* @__PURE__ */ jsxs("div", { className: emojiPickerGridStyles, role: "grid", children: [
176
+ filteredEmojis.map((emoji, i) => /* @__PURE__ */ jsx(
177
+ "button",
178
+ {
179
+ type: "button",
180
+ className: emojiPickerEmojiButtonStyles,
181
+ onClick: () => handleSelect(emoji),
182
+ ...api.getEmojiAriaProps(emoji),
183
+ children: renderEmoji(emoji)
184
+ },
185
+ `${emoji.emoji}-${i}`
186
+ )),
187
+ filteredEmojis.length === 0 && /* @__PURE__ */ jsx("div", { className: "col-span-8 py-4 text-center text-sm text-muted-foreground", children: "No emojis found" })
188
+ ] })
189
+ ] })
190
+ ] }) }, panelKey)
191
+ ] });
192
+ }
193
+ );
194
+ function StickerPanel({
195
+ stickerSets,
196
+ render,
197
+ onPick
198
+ }) {
199
+ return /* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto p-1", children: stickerSets.map((set) => /* @__PURE__ */ jsxs("div", { children: [
200
+ /* @__PURE__ */ jsx("div", { className: emojiPickerSectionLabelStyles, children: set.label }),
201
+ set.stickers.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-2 py-4 text-center text-sm text-muted-foreground", children: "No stickers yet" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 gap-1 p-1", children: set.stickers.map((sticker) => /* @__PURE__ */ jsx(
202
+ "button",
203
+ {
204
+ type: "button",
205
+ className: emojiPickerStickerButtonStyles,
206
+ onClick: () => onPick(sticker),
207
+ "aria-label": sticker.label,
208
+ title: sticker.label,
209
+ children: render(sticker)
210
+ },
211
+ sticker.id
212
+ )) })
213
+ ] }, set.id)) });
214
+ }
215
+ export {
216
+ CATEGORY_LABELS,
217
+ DEFAULT_TWEMOJI_BASE_URL,
218
+ EMOJI_CATEGORIES,
219
+ EMOJI_COUNT_TOTAL,
220
+ EMOJI_DATA,
221
+ EmojiPicker,
222
+ SHORTCODE_ALIASES,
223
+ STARTER_STICKER_SET,
224
+ buildShortcodeMap,
225
+ createTwemojiRenderer,
226
+ defaultStickerRenderer,
227
+ emojiPickerContainerStyles,
228
+ emojiPickerEmojiButtonStyles,
229
+ emojiPickerGridStyles,
230
+ getAllEmojis,
231
+ nativeEmojiRenderer,
232
+ resolveShortcode,
233
+ searchEmojis,
234
+ twemojiAssetUrl,
235
+ twemojiFilename,
236
+ twemojiRenderer
237
+ };
238
+ //# sourceMappingURL=react-emoji-picker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../react-emoji-picker/src/emoji-picker.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport {\n createEmojiPicker,\n EMOJI_DATA,\n CATEGORY_LABELS,\n searchEmojis,\n twemojiAssetUrl,\n DEFAULT_TWEMOJI_BASE_URL,\n STARTER_STICKER_SET,\n emojiPickerContainerStyles,\n emojiPickerSearchStyles,\n emojiPickerCategoryBarStyles,\n emojiPickerCategoryTabVariants,\n emojiPickerGridStyles,\n emojiPickerEmojiButtonStyles,\n emojiPickerSectionLabelStyles,\n emojiPickerPanelStyles,\n emojiPickerStickerButtonStyles,\n type EmojiCategory,\n type EmojiEntry,\n type StickerItem,\n type StickerSet,\n} from '@refraction-ui/emoji-picker'\nimport { cn } from '@refraction-ui/shared'\n\n/**\n * The emoji render seam: maps an emoji entry to a React node. Swap it to change\n * how glyphs are painted (native, Twemoji, Noto, Fluent, a Lottie player, …)\n * WITHOUT touching the data or the picker. The default is `twemojiRenderer`,\n * which lazily loads one small uniform SVG per glyph (WhatsApp-style \"one look\n * everywhere\"); `nativeEmojiRenderer` falls back to the OS glyph.\n */\nexport type EmojiRenderer = (emoji: EmojiEntry) => React.ReactNode\n\n/** The sticker render seam: maps a sticker item to a React node. */\nexport type StickerRenderer = (sticker: StickerItem) => React.ReactNode\n\n/** Renders the OS-native glyph (non-uniform across platforms). */\nexport const nativeEmojiRenderer: EmojiRenderer = (emoji) => emoji.emoji\n\n/**\n * Renders a uniform Twemoji SVG (CC-BY 4.0 — attribution required, see the\n * package README). Lazily loaded per glyph; the native glyph is the `alt`\n * fallback if the asset can't load (e.g. offline).\n */\nexport function createTwemojiRenderer(baseUrl: string = DEFAULT_TWEMOJI_BASE_URL): EmojiRenderer {\n return (emoji) => (\n <img\n src={twemojiAssetUrl(emoji.emoji, baseUrl)}\n alt={emoji.emoji}\n draggable={false}\n loading=\"lazy\"\n className=\"pointer-events-none h-[1.2em] w-[1.2em] select-none\"\n />\n )\n}\n\nexport const twemojiRenderer: EmojiRenderer = createTwemojiRenderer()\n\n/**\n * Default sticker renderer. Handles inline SVG (`svg`, may self-animate via\n * SMIL) and image/animated-WebP URLs (`image`). For `lottie`, a host must\n * supply its own `stickerRenderer` with a Lottie player; the default shows the\n * static poster if `source` is a URL, else the label.\n */\nexport const defaultStickerRenderer: StickerRenderer = (sticker) => {\n if (sticker.kind === 'svg') {\n return (\n <span\n aria-hidden=\"true\"\n className=\"block h-full w-full\"\n dangerouslySetInnerHTML={{ __html: sticker.source }}\n />\n )\n }\n if (sticker.kind === 'image' || /^https?:|^data:/.test(sticker.source)) {\n return (\n <img\n src={sticker.source}\n alt={sticker.label}\n loading=\"lazy\"\n draggable={false}\n className=\"pointer-events-none h-full w-full select-none object-contain\"\n />\n )\n }\n return <span className=\"text-xs text-muted-foreground\">{sticker.label}</span>\n}\n\nexport interface EmojiPickerProps {\n /** Fired with the selected emoji entry. */\n onSelect?: (emoji: EmojiEntry) => void\n /** Fired with the selected sticker. */\n onStickerSelect?: (sticker: StickerItem) => void\n /** Initial recents (most-recent-first). */\n recentEmojis?: EmojiEntry[]\n className?: string\n /** Emoji render seam. Default: uniform Twemoji. */\n emojiRenderer?: EmojiRenderer\n /** Base URL for Twemoji assets (self-host to avoid the public CDN). */\n twemojiBaseUrl?: string\n /**\n * Sticker sets for the sticker tab. Defaults to the bundled starter pack;\n * pass `[]` to hide the sticker tab entirely.\n */\n stickerSets?: StickerSet[]\n /** Sticker render seam. Default: `defaultStickerRenderer`. */\n stickerRenderer?: StickerRenderer\n}\n\nconst RECENT_LIMIT = 20\n\nexport const EmojiPicker = React.forwardRef<HTMLDivElement, EmojiPickerProps>(\n function EmojiPicker({ onSelect, onStickerSelect, recentEmojis: initialRecent = [], className, emojiRenderer, twemojiBaseUrl, stickerSets = [STARTER_STICKER_SET], stickerRenderer = defaultStickerRenderer }: EmojiPickerProps, ref) {\n const [search, setSearch] = React.useState('')\n const [activeCategory, setActiveCategory] = React.useState<EmojiCategory>('smileys')\n const [mode, setMode] = React.useState<'emoji' | 'sticker'>('emoji')\n const [recentEmojis, setRecentEmojis] = React.useState<EmojiEntry[]>(initialRecent)\n\n // Stable renderer: an explicit prop wins, else a Twemoji renderer bound to\n // the (optional) custom base URL.\n const renderEmoji = React.useMemo<EmojiRenderer>(\n () => emojiRenderer ?? createTwemojiRenderer(twemojiBaseUrl),\n [emojiRenderer, twemojiBaseUrl],\n )\n\n // Headless core drives ARIA + ids only; the grid data is derived here so the\n // full-set fuzzy search (`searchEmojis`) can rank results.\n const api = React.useMemo(() => createEmojiPicker({ recentEmojis }), [recentEmojis])\n\n const filteredEmojis = React.useMemo(() => {\n if (search.trim()) return searchEmojis(search)\n return EMOJI_DATA[activeCategory]\n }, [search, activeCategory])\n\n const handleSelect = (emoji: EmojiEntry) => {\n setRecentEmojis((prev) =>\n [emoji, ...prev.filter((e) => e.emoji !== emoji.emoji)].slice(0, RECENT_LIMIT),\n )\n onSelect?.(emoji)\n }\n\n const handleCategoryClick = (cat: EmojiCategory) => {\n setMode('emoji')\n setActiveCategory(cat)\n setSearch('')\n }\n\n const hasStickers = stickerSets.length > 0\n const showStickerTab = hasStickers && !search\n const panelKey = search ? 'search' : mode === 'sticker' ? 'sticker' : activeCategory\n\n return (\n <div ref={ref} className={cn(emojiPickerContainerStyles, className)} {...api.ariaProps}>\n <input\n {...api.searchInputProps}\n className={emojiPickerSearchStyles}\n value={search}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value)\n if (e.target.value) setMode('emoji')\n }}\n />\n\n {!search && (\n <div className={emojiPickerCategoryBarStyles} role=\"tablist\" aria-label=\"Emoji categories\">\n {api.categoryTabs.map((tab) => (\n <button\n key={tab.category}\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'emoji' && tab.category === activeCategory}\n className={emojiPickerCategoryTabVariants({\n state: mode === 'emoji' && tab.category === activeCategory ? 'active' : 'inactive',\n })}\n onClick={() => handleCategoryClick(tab.category)}\n title={tab.label}\n aria-label={tab.label}\n >\n {tab.emoji}\n </button>\n ))}\n {showStickerTab && (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'sticker'}\n className={emojiPickerCategoryTabVariants({\n state: mode === 'sticker' ? 'active' : 'inactive',\n })}\n onClick={() => {\n setMode('sticker')\n setSearch('')\n }}\n title=\"Stickers\"\n aria-label=\"Stickers\"\n >\n {'⭐'}\n </button>\n )}\n </div>\n )}\n\n {/* Swappable panel — keyed so a category/mode/search change cross-fades. */}\n <div key={panelKey} className={emojiPickerPanelStyles}>\n {mode === 'sticker' && !search ? (\n <StickerPanel\n stickerSets={stickerSets}\n render={stickerRenderer}\n onPick={(s) => onStickerSelect?.(s)}\n />\n ) : (\n <>\n {!search && recentEmojis.length > 0 && (\n <div>\n <div className={emojiPickerSectionLabelStyles}>Recent</div>\n <div className={emojiPickerGridStyles}>\n {recentEmojis.map((emoji, i) => (\n <button\n key={`recent-${emoji.emoji}-${i}`}\n type=\"button\"\n className={emojiPickerEmojiButtonStyles}\n onClick={() => handleSelect(emoji)}\n {...api.getEmojiAriaProps(emoji)}\n >\n {renderEmoji(emoji)}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div>\n {!search && (\n <div className={emojiPickerSectionLabelStyles}>{CATEGORY_LABELS[activeCategory]}</div>\n )}\n <div className={emojiPickerGridStyles} role=\"grid\">\n {filteredEmojis.map((emoji, i) => (\n <button\n key={`${emoji.emoji}-${i}`}\n type=\"button\"\n className={emojiPickerEmojiButtonStyles}\n onClick={() => handleSelect(emoji)}\n {...api.getEmojiAriaProps(emoji)}\n >\n {renderEmoji(emoji)}\n </button>\n ))}\n {filteredEmojis.length === 0 && (\n <div className=\"col-span-8 py-4 text-center text-sm text-muted-foreground\">\n No emojis found\n </div>\n )}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n )\n },\n)\n\nfunction StickerPanel({\n stickerSets,\n render,\n onPick,\n}: {\n stickerSets: StickerSet[]\n render: StickerRenderer\n onPick: (sticker: StickerItem) => void\n}) {\n return (\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {stickerSets.map((set) => (\n <div key={set.id}>\n <div className={emojiPickerSectionLabelStyles}>{set.label}</div>\n {set.stickers.length === 0 ? (\n <div className=\"px-2 py-4 text-center text-sm text-muted-foreground\">\n No stickers yet\n </div>\n ) : (\n <div className=\"grid grid-cols-4 gap-1 p-1\">\n {set.stickers.map((sticker) => (\n <button\n key={sticker.id}\n type=\"button\"\n className={emojiPickerStickerButtonStyles}\n onClick={() => onPick(sticker)}\n aria-label={sticker.label}\n title={sticker.label}\n >\n {render(sticker)}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["EmojiPicker"]
7
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ cn,
3
+ cva
4
+ } from "./chunk-ZF3OHCGV.js";
5
+
6
+ // ../react-empty-state/dist/index.js
7
+ import * as React from "react";
8
+
9
+ // ../empty-state/dist/index.js
10
+ function createEmptyState(options = {}) {
11
+ const { tone = "neutral" } = options;
12
+ const dataAttributes = {
13
+ "data-tone": tone
14
+ };
15
+ return {
16
+ dataAttributes
17
+ };
18
+ }
19
+ var emptyStateVariants = cva({
20
+ base: "flex flex-col items-center text-center gap-3 p-8",
21
+ variants: {
22
+ bordered: {
23
+ true: "rounded-xl border border-border bg-card",
24
+ false: ""
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ bordered: "false"
29
+ }
30
+ });
31
+ var emptyStateIconChipVariants = cva({
32
+ base: "flex size-12 items-center justify-center rounded-full",
33
+ variants: {
34
+ tone: {
35
+ neutral: "bg-muted text-muted-foreground",
36
+ success: "bg-success/10 text-success",
37
+ warning: "bg-warning/10 text-warning",
38
+ danger: "bg-destructive/10 text-destructive"
39
+ }
40
+ },
41
+ defaultVariants: {
42
+ tone: "neutral"
43
+ }
44
+ });
45
+ var emptyStateTitleClass = "text-lg font-semibold text-foreground";
46
+ var emptyStateDescriptionClass = "text-sm text-muted-foreground";
47
+ var emptyStateActionsClass = "flex items-center justify-center gap-2";
48
+
49
+ // ../react-empty-state/dist/index.js
50
+ import { jsxs, jsx } from "react/jsx-runtime";
51
+ var EmptyState = React.forwardRef(
52
+ function EmptyState2({
53
+ icon,
54
+ tone = "neutral",
55
+ title,
56
+ description,
57
+ actions,
58
+ bordered = false,
59
+ className,
60
+ ...props
61
+ }, ref) {
62
+ const api = createEmptyState({ tone });
63
+ return /* @__PURE__ */ jsxs(
64
+ "div",
65
+ {
66
+ ref,
67
+ className: cn(
68
+ emptyStateVariants({ bordered: bordered ? "true" : "false" }),
69
+ className
70
+ ),
71
+ ...api.dataAttributes,
72
+ ...props,
73
+ children: [
74
+ icon != null && /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: emptyStateIconChipVariants({ tone }), children: icon }),
75
+ /* @__PURE__ */ jsx("h3", { className: emptyStateTitleClass, children: title }),
76
+ description != null && /* @__PURE__ */ jsx("p", { className: emptyStateDescriptionClass, children: description }),
77
+ actions != null && /* @__PURE__ */ jsx("div", { className: emptyStateActionsClass, children: actions })
78
+ ]
79
+ }
80
+ );
81
+ }
82
+ );
83
+ var ConfirmationCard = React.forwardRef(function ConfirmationCard2({ bordered = true, ...props }, ref) {
84
+ return /* @__PURE__ */ jsx(EmptyState, { ref, bordered, ...props });
85
+ });
86
+ export {
87
+ ConfirmationCard,
88
+ EmptyState
89
+ };
90
+ //# sourceMappingURL=react-empty-state.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../empty-state/src/empty-state.ts", "../../empty-state/src/empty-state.styles.ts", "../../react-empty-state/src/empty-state.tsx"],
4
+ "sourcesContent": ["export type EmptyStateTone = 'neutral' | 'success' | 'warning' | 'danger'\n\nexport interface EmptyStateOptions {\n /** Tone that tints the icon chip. Defaults to `neutral`. */\n tone?: EmptyStateTone\n}\n\nexport interface EmptyStateAPI {\n /** Data attributes for CSS styling hooks. */\n dataAttributes: Record<string, string>\n}\n\n/**\n * Headless EmptyState core — JSX-free. Resolves the tone into the data\n * attributes that adapters spread onto the root element.\n */\nexport function createEmptyState(options: EmptyStateOptions = {}): EmptyStateAPI {\n const { tone = 'neutral' } = options\n\n const dataAttributes: Record<string, string> = {\n 'data-tone': tone,\n }\n\n return {\n dataAttributes,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/**\n * Container for the EmptyState column. The `bordered` variant wraps the\n * content in a card surface.\n */\nexport const emptyStateVariants = cva({\n base: 'flex flex-col items-center text-center gap-3 p-8',\n variants: {\n bordered: {\n true: 'rounded-xl border border-border bg-card',\n false: '',\n },\n },\n defaultVariants: {\n bordered: 'false',\n },\n})\n\n/**\n * Tone-tinted classes for the icon chip. Tone styling lives here as a single\n * source of truth (no scattered inline literals in the adapters).\n */\nexport const emptyStateIconChipVariants = cva({\n base: 'flex size-12 items-center justify-center rounded-full',\n variants: {\n tone: {\n neutral: 'bg-muted text-muted-foreground',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n danger: 'bg-destructive/10 text-destructive',\n },\n },\n defaultVariants: {\n tone: 'neutral',\n },\n})\n\n/** Layout class helpers for the title/description/actions slots. */\nexport const emptyStateTitleClass = 'text-lg font-semibold text-foreground'\nexport const emptyStateDescriptionClass = 'text-sm text-muted-foreground'\nexport const emptyStateActionsClass = 'flex items-center justify-center gap-2'\n", "import * as React from 'react'\nimport { cn } from '@refraction-ui/shared'\nimport {\n createEmptyState,\n emptyStateVariants,\n emptyStateIconChipVariants,\n emptyStateTitleClass,\n emptyStateDescriptionClass,\n emptyStateActionsClass,\n type EmptyStateTone,\n} from '@refraction-ui/empty-state'\n\nexport type { EmptyStateTone }\n\nexport interface EmptyStateProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Optional icon rendered inside a tone-tinted rounded chip. */\n icon?: React.ReactNode\n /** Tone that tints the icon chip. Defaults to `neutral`. */\n tone?: EmptyStateTone\n /** Primary heading. */\n title: React.ReactNode\n /** Optional supporting copy (supports rich children). */\n description?: React.ReactNode\n /** Optional action row (e.g. buttons), centered under the description. */\n actions?: React.ReactNode\n /** Wrap the content in a bordered card surface. */\n bordered?: boolean\n}\n\n/**\n * EmptyState — a centered column for empty/zero/result states and inline\n * confirmations. The icon chip is tinted via `tone`; pass `bordered` to render\n * it on a card surface.\n *\n * Styling and tone resolution come from the headless @refraction-ui/empty-state\n * core (no inline class literals here).\n */\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n function EmptyState(\n {\n icon,\n tone = 'neutral',\n title,\n description,\n actions,\n bordered = false,\n className,\n ...props\n },\n ref,\n ) {\n const api = createEmptyState({ tone })\n\n return (\n <div\n ref={ref}\n className={cn(\n emptyStateVariants({ bordered: bordered ? 'true' : 'false' }),\n className,\n )}\n {...api.dataAttributes}\n {...props}\n >\n {icon != null && (\n <div aria-hidden=\"true\" className={emptyStateIconChipVariants({ tone })}>\n {icon}\n </div>\n )}\n <h3 className={emptyStateTitleClass}>{title}</h3>\n {description != null && (\n <p className={emptyStateDescriptionClass}>{description}</p>\n )}\n {actions != null && (\n <div className={emptyStateActionsClass}>{actions}</div>\n )}\n </div>\n )\n },\n)\n\nexport interface ConfirmationCardProps extends EmptyStateProps {}\n\n/**\n * ConfirmationCard — a thin preset of {@link EmptyState} with `bordered`\n * defaulting to `true`, for inline confirmation states (e.g. \"Check your email\").\n */\nexport const ConfirmationCard = React.forwardRef<\n HTMLDivElement,\n ConfirmationCardProps\n>(function ConfirmationCard({ bordered = true, ...props }, ref) {\n return (\n <EmptyState ref={ref} bordered={bordered} {...props} />\n )\n })\n"],
5
+ "mappings": ";;;;;;;;;AAgBO,SAAS,iBAAiB,UAA6B,CAAA,GAAmB;AAC/E,QAAM,EAAE,OAAO,UAAA,IAAc;AAE7B,QAAM,iBAAyC;IAC7C,aAAa;EAAA;AAGf,SAAO;IACL;EAAA;AAEJ;ACpBO,IAAM,qBAAqB,IAAI;EACpC,MAAM;EACN,UAAU;IACR,UAAU;MACR,MAAM;MACN,OAAO;IAAA;EACT;EAEF,iBAAiB;IACf,UAAU;EAAA;AAEd,CAAC;AAMM,IAAM,6BAA6B,IAAI;EAC5C,MAAM;EACN,UAAU;IACR,MAAM;MACJ,SAAS;MACT,SAAS;MACT,SAAS;MACT,QAAQ;IAAA;EACV;EAEF,iBAAiB;IACf,MAAM;EAAA;AAEV,CAAC;AAGM,IAAM,uBAAuB;AAC7B,IAAM,6BAA6B;AACnC,IAAM,yBAAyB;;;;ACH/B,IAAM,aAAmB;EAC9B,SAASA,YACP;IACE;IACA,OAAO;IACP;IACA;IACA;IACA,WAAW;IACX;IACA,GAAG;EAAA,GAEL,KACA;AACA,UAAM,MAAM,iBAAiB,EAAE,KAAA,CAAM;AAErC,WACE;MAAC;MAAA;QACC;QACA,WAAW;UACT,mBAAmB,EAAE,UAAU,WAAW,SAAS,QAAA,CAAS;UAC5D;QAAA;QAED,GAAG,IAAI;QACP,GAAG;QAEH,UAAA;UAAA,QAAQ,QACP,oBAAC,OAAA,EAAI,eAAY,QAAO,WAAW,2BAA2B,EAAE,KAAA,CAAM,GACnE,UAAA,KAAA,CACH;UAEF,oBAAC,MAAA,EAAG,WAAW,sBAAuB,UAAA,MAAA,CAAM;UAC3C,eAAe,QACd,oBAAC,KAAA,EAAE,WAAW,4BAA6B,UAAA,YAAA,CAAY;UAExD,WAAW,QACV,oBAAC,OAAA,EAAI,WAAW,wBAAyB,UAAA,QAAA,CAAQ;QAAA;MAAA;IAAA;EAIzD;AACF;AAQO,IAAM,mBAAyB,iBAGpC,SAASC,kBAAiB,EAAE,WAAW,MAAM,GAAG,MAAA,GAAS,KAAK;AAC5D,SACA,oBAAC,YAAA,EAAW,KAAU,UAAqB,GAAG,MAAA,CAAO;AAEvD,CAAC;",
6
+ "names": ["EmptyState", "ConfirmationCard"]
7
+ }