@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,184 @@
1
+ import {
2
+ cn,
3
+ cva
4
+ } from "./chunk-ZF3OHCGV.js";
5
+
6
+ // ../react-code-editor/dist/index.js
7
+ import * as React from "react";
8
+
9
+ // ../code-editor/dist/index.js
10
+ var languageLabels = {
11
+ js: "JavaScript",
12
+ javascript: "JavaScript",
13
+ ts: "TypeScript",
14
+ typescript: "TypeScript",
15
+ jsx: "JSX",
16
+ tsx: "TSX",
17
+ py: "Python",
18
+ python: "Python",
19
+ rb: "Ruby",
20
+ ruby: "Ruby",
21
+ go: "Go",
22
+ rust: "Rust",
23
+ rs: "Rust",
24
+ java: "Java",
25
+ cpp: "C++",
26
+ c: "C",
27
+ cs: "C#",
28
+ csharp: "C#",
29
+ html: "HTML",
30
+ css: "CSS",
31
+ json: "JSON",
32
+ yaml: "YAML",
33
+ yml: "YAML",
34
+ md: "Markdown",
35
+ markdown: "Markdown",
36
+ sql: "SQL",
37
+ sh: "Shell",
38
+ bash: "Bash",
39
+ zsh: "Zsh",
40
+ xml: "XML",
41
+ toml: "TOML",
42
+ swift: "Swift",
43
+ kotlin: "Kotlin",
44
+ dart: "Dart",
45
+ php: "PHP",
46
+ lua: "Lua",
47
+ r: "R",
48
+ scala: "Scala"
49
+ };
50
+ function createCodeEditor(props = {}) {
51
+ const {
52
+ value = "",
53
+ onChange,
54
+ language = "plaintext",
55
+ readOnly = false,
56
+ theme = "light"
57
+ } = props;
58
+ let currentValue = value;
59
+ const state = {
60
+ value: currentValue,
61
+ language,
62
+ theme
63
+ };
64
+ const ariaProps = {
65
+ role: "textbox",
66
+ "aria-multiline": true,
67
+ "aria-label": `Code editor - ${getLabel(language)}`
68
+ };
69
+ if (readOnly) {
70
+ ariaProps["aria-readonly"] = true;
71
+ }
72
+ const dataAttributes = {
73
+ "data-language": language,
74
+ "data-theme": theme
75
+ };
76
+ if (readOnly) {
77
+ dataAttributes["data-readonly"] = "";
78
+ }
79
+ function setValue(newValue) {
80
+ currentValue = newValue;
81
+ state.value = newValue;
82
+ if (onChange) {
83
+ onChange(newValue);
84
+ }
85
+ }
86
+ function getLabel(lang) {
87
+ return languageLabels[lang.toLowerCase()] ?? lang.charAt(0).toUpperCase() + lang.slice(1);
88
+ }
89
+ function getLanguageLabel() {
90
+ return getLabel(language);
91
+ }
92
+ return {
93
+ state,
94
+ ariaProps,
95
+ dataAttributes,
96
+ setValue,
97
+ getLanguageLabel
98
+ };
99
+ }
100
+ var codeEditorTokens = {
101
+ name: "code-editor",
102
+ tokens: {
103
+ bg: { variable: "--rfr-code-editor-bg", fallback: "hsl(var(--background))" },
104
+ fg: { variable: "--rfr-code-editor-fg", fallback: "hsl(var(--foreground))" },
105
+ headerBg: { variable: "--rfr-code-editor-header-bg", fallback: "hsl(var(--muted))" },
106
+ border: { variable: "--rfr-code-editor-border", fallback: "hsl(var(--border))" },
107
+ lineNumberFg: { variable: "--rfr-code-editor-line-number", fallback: "hsl(var(--muted-foreground))" }
108
+ }
109
+ };
110
+ var codeEditorVariants = cva({
111
+ base: "flex flex-col rounded-lg border overflow-hidden font-mono text-sm",
112
+ variants: {
113
+ theme: {
114
+ light: "bg-white text-gray-900 border-gray-200",
115
+ dark: "bg-gray-900 text-gray-100 border-gray-700"
116
+ },
117
+ size: {
118
+ sm: "text-xs",
119
+ default: "text-sm",
120
+ lg: "text-base"
121
+ }
122
+ },
123
+ defaultVariants: {
124
+ theme: "light",
125
+ size: "default"
126
+ }
127
+ });
128
+
129
+ // ../react-code-editor/dist/index.js
130
+ import { jsxs, jsx } from "react/jsx-runtime";
131
+ var CodeEditor = React.forwardRef(
132
+ function CodeEditor2({
133
+ value = "",
134
+ onChange,
135
+ language = "plaintext",
136
+ readOnly = false,
137
+ theme = "light",
138
+ className,
139
+ placeholder,
140
+ actions
141
+ }, ref) {
142
+ const api = createCodeEditor({ value, onChange, language, readOnly, theme });
143
+ const containerClasses = cn(codeEditorVariants({ theme }), className);
144
+ function handleChange(e) {
145
+ api.setValue(e.target.value);
146
+ }
147
+ return /* @__PURE__ */ jsxs("div", { ref, className: containerClasses, ...api.dataAttributes, children: [
148
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-b bg-muted/50 text-xs text-muted-foreground", children: [
149
+ /* @__PURE__ */ jsx("span", { children: api.getLanguageLabel() }),
150
+ actions && actions.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex gap-1", children: actions.map((action) => /* @__PURE__ */ jsx(
151
+ "button",
152
+ {
153
+ type: "button",
154
+ onClick: action.onClick,
155
+ className: "px-2 py-1 rounded text-xs hover:bg-muted transition-colors",
156
+ children: action.label
157
+ },
158
+ action.label
159
+ )) })
160
+ ] }),
161
+ /* @__PURE__ */ jsx(
162
+ "textarea",
163
+ {
164
+ value,
165
+ onChange: handleChange,
166
+ readOnly,
167
+ placeholder,
168
+ className: "flex-1 w-full p-4 bg-transparent resize-none outline-none font-mono min-h-[200px]",
169
+ spellCheck: false,
170
+ autoCapitalize: "off",
171
+ autoComplete: "off",
172
+ autoCorrect: "off",
173
+ ...api.ariaProps
174
+ }
175
+ )
176
+ ] });
177
+ }
178
+ );
179
+ export {
180
+ CodeEditor,
181
+ codeEditorTokens,
182
+ codeEditorVariants
183
+ };
184
+ //# sourceMappingURL=react-code-editor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../code-editor/src/code-editor.ts", "../../code-editor/src/code-editor.styles.ts", "../../react-code-editor/src/CodeEditor.tsx"],
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type CodeEditorTheme = 'light' | 'dark'\n\nexport interface CodeEditorProps {\n value?: string\n onChange?: (value: string) => void\n language?: string\n readOnly?: boolean\n theme?: CodeEditorTheme\n}\n\nexport interface CodeEditorState {\n value: string\n language: string\n theme: CodeEditorTheme\n}\n\nexport interface CodeEditorAPI {\n /** Current editor state */\n state: CodeEditorState\n /** ARIA attributes for the editor element */\n ariaProps: Partial<AccessibilityProps> & { 'aria-multiline'?: boolean }\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n /** Update the editor value */\n setValue: (value: string) => void\n /** Get a human-readable label for the current language */\n getLanguageLabel: () => string\n}\n\n/** Map of language identifiers to human-readable labels */\nconst languageLabels: Record<string, string> = {\n js: 'JavaScript',\n javascript: 'JavaScript',\n ts: 'TypeScript',\n typescript: 'TypeScript',\n jsx: 'JSX',\n tsx: 'TSX',\n py: 'Python',\n python: 'Python',\n rb: 'Ruby',\n ruby: 'Ruby',\n go: 'Go',\n rust: 'Rust',\n rs: 'Rust',\n java: 'Java',\n cpp: 'C++',\n c: 'C',\n cs: 'C#',\n csharp: 'C#',\n html: 'HTML',\n css: 'CSS',\n json: 'JSON',\n yaml: 'YAML',\n yml: 'YAML',\n md: 'Markdown',\n markdown: 'Markdown',\n sql: 'SQL',\n sh: 'Shell',\n bash: 'Bash',\n zsh: 'Zsh',\n xml: 'XML',\n toml: 'TOML',\n swift: 'Swift',\n kotlin: 'Kotlin',\n dart: 'Dart',\n php: 'PHP',\n lua: 'Lua',\n r: 'R',\n scala: 'Scala',\n}\n\n/**\n * Create a headless code editor API.\n *\n * This provides the headless interface for a code editor — state management,\n * ARIA props, and data attributes. Actual rendering (Monaco, CodeMirror, or\n * a simple textarea) is handled by framework-specific wrappers.\n */\nexport function createCodeEditor(props: CodeEditorProps = {}): CodeEditorAPI {\n const {\n value = '',\n onChange,\n language = 'plaintext',\n readOnly = false,\n theme = 'light',\n } = props\n\n let currentValue = value\n\n const state: CodeEditorState = {\n value: currentValue,\n language,\n theme,\n }\n\n const ariaProps: Partial<AccessibilityProps> & { 'aria-multiline'?: boolean; 'aria-readonly'?: boolean } = {\n role: 'textbox',\n 'aria-multiline': true,\n 'aria-label': `Code editor - ${getLabel(language)}`,\n }\n\n if (readOnly) {\n ariaProps['aria-readonly'] = true\n }\n\n const dataAttributes: Record<string, string> = {\n 'data-language': language,\n 'data-theme': theme,\n }\n\n if (readOnly) {\n dataAttributes['data-readonly'] = ''\n }\n\n function setValue(newValue: string) {\n currentValue = newValue\n state.value = newValue\n if (onChange) {\n onChange(newValue)\n }\n }\n\n function getLabel(lang: string): string {\n return languageLabels[lang.toLowerCase()] ?? lang.charAt(0).toUpperCase() + lang.slice(1)\n }\n\n function getLanguageLabel(): string {\n return getLabel(language)\n }\n\n return {\n state,\n ariaProps,\n dataAttributes,\n setValue,\n getLanguageLabel,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const codeEditorTokens: TokenContract = {\n name: 'code-editor',\n tokens: {\n bg: { variable: '--rfr-code-editor-bg', fallback: 'hsl(var(--background))' },\n fg: { variable: '--rfr-code-editor-fg', fallback: 'hsl(var(--foreground))' },\n headerBg: { variable: '--rfr-code-editor-header-bg', fallback: 'hsl(var(--muted))' },\n border: { variable: '--rfr-code-editor-border', fallback: 'hsl(var(--border))' },\n lineNumberFg: { variable: '--rfr-code-editor-line-number', fallback: 'hsl(var(--muted-foreground))' },\n },\n}\n\nexport const codeEditorVariants = cva({\n base: 'flex flex-col rounded-lg border overflow-hidden font-mono text-sm',\n variants: {\n theme: {\n light: 'bg-white text-gray-900 border-gray-200',\n dark: 'bg-gray-900 text-gray-100 border-gray-700',\n },\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n theme: 'light',\n size: 'default',\n },\n})\n", "import * as React from 'react'\nimport {\n createCodeEditor,\n codeEditorVariants,\n type CodeEditorTheme,\n} from '@refraction-ui/code-editor'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface CodeEditorProps {\n value?: string\n onChange?: (value: string) => void\n language?: string\n readOnly?: boolean\n theme?: CodeEditorTheme\n className?: string\n placeholder?: string\n /** Optional action buttons rendered in the header bar */\n actions?: Array<{ label: string; onClick: () => void }>\n}\n\n/**\n * CodeEditor component — a styled textarea-based code editor.\n *\n * Uses the headless @refraction-ui/code-editor core for state and ARIA.\n * Renders a simple monospace textarea with a header bar showing the language\n * label and optional action buttons. Syntax highlighting is a future enhancement.\n */\nexport const CodeEditor = React.forwardRef<HTMLDivElement, CodeEditorProps>(\n function CodeEditor(\n {\n value = '',\n onChange,\n language = 'plaintext',\n readOnly = false,\n theme = 'light',\n className,\n placeholder,\n actions,\n },\n ref,\n ) {\n const api = createCodeEditor({ value, onChange, language, readOnly, theme })\n const containerClasses = cn(codeEditorVariants({ theme }), className)\n\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n api.setValue(e.target.value)\n }\n\n return (\n <div ref={ref} className={containerClasses} {...api.dataAttributes}>\n <div className=\"flex items-center justify-between px-3 py-2 border-b bg-muted/50 text-xs text-muted-foreground\">\n <span>{api.getLanguageLabel()}</span>\n {actions && actions.length > 0 && (\n <div className=\"flex gap-1\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n onClick={action.onClick}\n className=\"px-2 py-1 rounded text-xs hover:bg-muted transition-colors\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <textarea\n value={value}\n onChange={handleChange}\n readOnly={readOnly}\n placeholder={placeholder}\n className=\"flex-1 w-full p-4 bg-transparent resize-none outline-none font-mono min-h-[200px]\"\n spellCheck={false}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n {...api.ariaProps}\n />\n </div>\n )\n },\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["CodeEditor"]
7
+ }
@@ -0,0 +1,192 @@
1
+ import {
2
+ Keys,
3
+ cn,
4
+ createKeyboardHandler,
5
+ cva,
6
+ devWarn,
7
+ generateId
8
+ } from "./chunk-ZF3OHCGV.js";
9
+
10
+ // ../react-collapsible/dist/index.js
11
+ import * as React from "react";
12
+
13
+ // ../collapsible/dist/index.js
14
+ function createCollapsible(props = {}) {
15
+ const {
16
+ open: controlledOpen,
17
+ defaultOpen = false,
18
+ onOpenChange,
19
+ disabled = false
20
+ } = props;
21
+ const isControlled = controlledOpen !== void 0;
22
+ let internalOpen = isControlled ? controlledOpen : defaultOpen;
23
+ const contentId = generateId("rfr-collapsible");
24
+ const setOpen = (next) => {
25
+ if (disabled) return;
26
+ if (!isControlled) {
27
+ internalOpen = next;
28
+ }
29
+ onOpenChange?.(next);
30
+ };
31
+ const toggle = () => setOpen(!internalOpen);
32
+ const openFn = () => setOpen(true);
33
+ const closeFn = () => setOpen(false);
34
+ const keyboardHandler = createKeyboardHandler({
35
+ [Keys.Enter]: (event) => {
36
+ event.preventDefault();
37
+ toggle();
38
+ },
39
+ [Keys.Space]: (event) => {
40
+ event.preventDefault();
41
+ toggle();
42
+ }
43
+ });
44
+ const dataState = internalOpen ? "open" : "closed";
45
+ return {
46
+ state: { open: internalOpen },
47
+ triggerProps: {
48
+ "aria-expanded": internalOpen,
49
+ "aria-controls": contentId,
50
+ "data-state": dataState,
51
+ "data-disabled": disabled ? "" : void 0
52
+ },
53
+ contentProps: {
54
+ id: contentId,
55
+ role: "region",
56
+ "data-state": dataState,
57
+ hidden: !internalOpen
58
+ },
59
+ toggle,
60
+ open: openFn,
61
+ close: closeFn,
62
+ keyboardHandler
63
+ };
64
+ }
65
+ var collapsibleContentVariants = cva({
66
+ base: "overflow-hidden transition-all",
67
+ variants: {
68
+ state: {
69
+ open: "animate-accordion-down",
70
+ closed: "animate-accordion-up"
71
+ }
72
+ },
73
+ defaultVariants: {
74
+ state: "closed"
75
+ }
76
+ });
77
+
78
+ // ../react-collapsible/dist/index.js
79
+ var CollapsibleContext = React.createContext(null);
80
+ function useCollapsibleContext() {
81
+ const ctx = React.useContext(CollapsibleContext);
82
+ if (!ctx) {
83
+ devWarn(
84
+ "react-collapsible/context-outside-provider",
85
+ "Collapsible compound components (CollapsibleTrigger/CollapsibleContent) must be rendered inside a <Collapsible>. The missing CollapsibleContext makes this throw."
86
+ );
87
+ throw new Error(
88
+ "Collapsible compound components must be used within <Collapsible>"
89
+ );
90
+ }
91
+ return ctx;
92
+ }
93
+ function Collapsible({
94
+ open: controlledOpen,
95
+ defaultOpen = false,
96
+ onOpenChange,
97
+ disabled = false,
98
+ children,
99
+ className
100
+ }) {
101
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
102
+ const isControlled = controlledOpen !== void 0;
103
+ const open = isControlled ? controlledOpen : uncontrolledOpen;
104
+ const handleOpenChange = React.useCallback(
105
+ (next) => {
106
+ if (!isControlled) {
107
+ setUncontrolledOpen(next);
108
+ }
109
+ onOpenChange?.(next);
110
+ },
111
+ [isControlled, onOpenChange]
112
+ );
113
+ const apiRef = React.useRef(null);
114
+ if (apiRef.current === null) {
115
+ apiRef.current = createCollapsible({ open, defaultOpen, disabled });
116
+ }
117
+ const contentId = apiRef.current.contentProps.id;
118
+ const ctx = React.useMemo(
119
+ () => ({
120
+ open,
121
+ onOpenChange: handleOpenChange,
122
+ disabled,
123
+ contentId
124
+ }),
125
+ [open, handleOpenChange, disabled, contentId]
126
+ );
127
+ return React.createElement(
128
+ CollapsibleContext.Provider,
129
+ { value: ctx },
130
+ React.createElement(
131
+ "div",
132
+ {
133
+ "data-state": open ? "open" : "closed",
134
+ "data-disabled": disabled ? "" : void 0,
135
+ className
136
+ },
137
+ children
138
+ )
139
+ );
140
+ }
141
+ var CollapsibleTrigger = React.forwardRef(function CollapsibleTrigger2({ onClick, disabled: disabledProp, children, ...props }, ref) {
142
+ const { open, onOpenChange, disabled: ctxDisabled, contentId } = useCollapsibleContext();
143
+ const disabled = disabledProp ?? ctxDisabled;
144
+ const handleClick = (e) => {
145
+ if (!disabled) {
146
+ onOpenChange(!open);
147
+ }
148
+ onClick?.(e);
149
+ };
150
+ return React.createElement(
151
+ "button",
152
+ {
153
+ ref,
154
+ type: "button",
155
+ "aria-expanded": open,
156
+ "aria-controls": contentId,
157
+ "data-state": open ? "open" : "closed",
158
+ "data-disabled": disabled ? "" : void 0,
159
+ disabled: disabled || void 0,
160
+ onClick: handleClick,
161
+ ...props
162
+ },
163
+ children
164
+ );
165
+ });
166
+ var CollapsibleContent = React.forwardRef(function CollapsibleContent2({ className, children, ...props }, ref) {
167
+ const { open, contentId } = useCollapsibleContext();
168
+ const dataState = open ? "open" : "closed";
169
+ if (!open) return null;
170
+ return React.createElement(
171
+ "div",
172
+ {
173
+ ref,
174
+ id: contentId,
175
+ role: "region",
176
+ "data-state": dataState,
177
+ className: cn(
178
+ collapsibleContentVariants({ state: open ? "open" : "closed" }),
179
+ className
180
+ ),
181
+ ...props
182
+ },
183
+ children
184
+ );
185
+ });
186
+ export {
187
+ Collapsible,
188
+ CollapsibleContent,
189
+ CollapsibleTrigger,
190
+ collapsibleContentVariants
191
+ };
192
+ //# sourceMappingURL=react-collapsible.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../collapsible/src/collapsible.ts", "../../collapsible/src/collapsible.styles.ts", "../../react-collapsible/src/collapsible.tsx"],
4
+ "sourcesContent": ["import { generateId, Keys, createKeyboardHandler } from '@refraction-ui/shared'\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n}\n\nexport interface CollapsibleAPI {\n /** Current open state */\n state: { open: boolean }\n /** Props to spread on the trigger element */\n triggerProps: {\n 'aria-expanded': boolean\n 'aria-controls': string\n 'data-state': 'open' | 'closed'\n 'data-disabled': string | undefined\n }\n /** Props to spread on the content element */\n contentProps: {\n id: string\n role: 'region'\n 'data-state': 'open' | 'closed'\n hidden: boolean\n }\n /** Toggle the open state */\n toggle: () => void\n /** Open the collapsible */\n open: () => void\n /** Close the collapsible */\n close: () => void\n /** Keyboard event handler for Enter/Space toggle */\n keyboardHandler: (event: KeyboardEvent) => void\n}\n\nexport function createCollapsible(props: CollapsibleProps = {}): CollapsibleAPI {\n const {\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n } = props\n\n const isControlled = controlledOpen !== undefined\n let internalOpen = isControlled ? controlledOpen : defaultOpen\n const contentId = generateId('rfr-collapsible')\n\n const setOpen = (next: boolean) => {\n if (disabled) return\n if (!isControlled) {\n internalOpen = next\n }\n onOpenChange?.(next)\n }\n\n const toggle = () => setOpen(!internalOpen)\n const openFn = () => setOpen(true)\n const closeFn = () => setOpen(false)\n\n const keyboardHandler = createKeyboardHandler({\n [Keys.Enter]: (event: KeyboardEvent) => {\n event.preventDefault()\n toggle()\n },\n [Keys.Space]: (event: KeyboardEvent) => {\n event.preventDefault()\n toggle()\n },\n })\n\n const dataState = internalOpen ? 'open' : 'closed'\n\n return {\n state: { open: internalOpen },\n triggerProps: {\n 'aria-expanded': internalOpen,\n 'aria-controls': contentId,\n 'data-state': dataState,\n 'data-disabled': disabled ? '' : undefined,\n },\n contentProps: {\n id: contentId,\n role: 'region',\n 'data-state': dataState,\n hidden: !internalOpen,\n },\n toggle,\n open: openFn,\n close: closeFn,\n keyboardHandler,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const collapsibleContentVariants = cva({\n base: 'overflow-hidden transition-all',\n variants: {\n state: {\n open: 'animate-accordion-down',\n closed: 'animate-accordion-up',\n },\n },\n defaultVariants: {\n state: 'closed',\n },\n})\n", "import * as React from 'react'\nimport {\n createCollapsible,\n collapsibleContentVariants,\n type CollapsibleProps as CoreCollapsibleProps,\n} from '@refraction-ui/collapsible'\nimport { cn, devWarn } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface CollapsibleContextValue {\n open: boolean\n onOpenChange: (open: boolean) => void\n disabled: boolean\n contentId: string\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(null)\n\nfunction useCollapsibleContext(): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext)\n if (!ctx) {\n devWarn(\n 'react-collapsible/context-outside-provider',\n 'Collapsible compound components (CollapsibleTrigger/CollapsibleContent) must be rendered inside a <Collapsible>. The missing CollapsibleContext makes this throw.',\n )\n throw new Error(\n 'Collapsible compound components must be used within <Collapsible>',\n )\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible (root provider)\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n children?: React.ReactNode\n className?: string\n}\n\nexport function Collapsible({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n children,\n className,\n}: CollapsibleProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : uncontrolledOpen\n\n const handleOpenChange = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next)\n }\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange],\n )\n\n // Use the headless core to get a stable content ID\n const apiRef = React.useRef<ReturnType<typeof createCollapsible> | null>(null)\n if (apiRef.current === null) {\n apiRef.current = createCollapsible({ open, defaultOpen, disabled })\n }\n const contentId = apiRef.current.contentProps.id\n\n const ctx = React.useMemo<CollapsibleContextValue>(\n () => ({\n open,\n onOpenChange: handleOpenChange,\n disabled,\n contentId,\n }),\n [open, handleOpenChange, disabled, contentId],\n )\n\n return React.createElement(\n CollapsibleContext.Provider,\n { value: ctx },\n React.createElement(\n 'div',\n {\n 'data-state': open ? 'open' : 'closed',\n 'data-disabled': disabled ? '' : undefined,\n className,\n },\n children,\n ),\n )\n}\n\n// ---------------------------------------------------------------------------\n// CollapsibleTrigger\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(function CollapsibleTrigger({ onClick, disabled: disabledProp, children, ...props }, ref) {\n const { open, onOpenChange, disabled: ctxDisabled, contentId } =\n useCollapsibleContext()\n const disabled = disabledProp ?? ctxDisabled\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled) {\n onOpenChange(!open)\n }\n onClick?.(e)\n }\n\n return React.createElement(\n 'button',\n {\n ref,\n type: 'button',\n 'aria-expanded': open,\n 'aria-controls': contentId,\n 'data-state': open ? 'open' : 'closed',\n 'data-disabled': disabled ? '' : undefined,\n disabled: disabled || undefined,\n onClick: handleClick,\n ...props,\n },\n children,\n )\n})\n\n// ---------------------------------------------------------------------------\n// CollapsibleContent\n// ---------------------------------------------------------------------------\n\nexport interface CollapsibleContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n CollapsibleContentProps\n>(function CollapsibleContent({ className, children, ...props }, ref) {\n const { open, contentId } = useCollapsibleContext()\n const dataState = open ? 'open' : 'closed'\n\n if (!open) return null\n\n return React.createElement(\n 'div',\n {\n ref,\n id: contentId,\n role: 'region',\n 'data-state': dataState,\n className: cn(\n collapsibleContentVariants({ state: open ? 'open' : 'closed' }),\n className,\n ),\n ...props,\n },\n children,\n )\n})\n"],
5
+ "mappings": "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",
6
+ "names": ["CollapsibleTrigger", "CollapsibleContent"]
7
+ }