@tetrascience-npm/tetrascience-react-ui 0.7.0-beta.108.1 → 0.7.0-beta.128.1

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 (439) hide show
  1. package/README.md +2 -2
  2. package/dist/components/ai/chain-of-thought.cjs +1 -1
  3. package/dist/components/ai/chain-of-thought.cjs.map +1 -1
  4. package/dist/components/ai/chain-of-thought.js +1 -1
  5. package/dist/components/ai/chain-of-thought.js.map +1 -1
  6. package/dist/components/ai/confirmation.cjs +1 -1
  7. package/dist/components/ai/confirmation.cjs.map +1 -1
  8. package/dist/components/ai/confirmation.js +1 -1
  9. package/dist/components/ai/confirmation.js.map +1 -1
  10. package/dist/components/ai/context.cjs +1 -1
  11. package/dist/components/ai/context.cjs.map +1 -1
  12. package/dist/components/ai/context.js +36 -35
  13. package/dist/components/ai/context.js.map +1 -1
  14. package/dist/components/ai/message.cjs +1 -1
  15. package/dist/components/ai/message.cjs.map +1 -1
  16. package/dist/components/ai/message.js +68 -68
  17. package/dist/components/ai/message.js.map +1 -1
  18. package/dist/components/ai/prompt-input.cjs +1 -1
  19. package/dist/components/ai/prompt-input.cjs.map +1 -1
  20. package/dist/components/ai/prompt-input.js +4 -2
  21. package/dist/components/ai/prompt-input.js.map +1 -1
  22. package/dist/components/ai/queue.cjs +1 -1
  23. package/dist/components/ai/queue.cjs.map +1 -1
  24. package/dist/components/ai/queue.js +9 -9
  25. package/dist/components/ai/queue.js.map +1 -1
  26. package/dist/components/ai/reasoning.cjs +1 -1
  27. package/dist/components/ai/reasoning.cjs.map +1 -1
  28. package/dist/components/ai/reasoning.js +67 -67
  29. package/dist/components/ai/reasoning.js.map +1 -1
  30. package/dist/components/ai/stream-status.cjs +1 -1
  31. package/dist/components/ai/stream-status.cjs.map +1 -1
  32. package/dist/components/ai/stream-status.js +41 -39
  33. package/dist/components/ai/stream-status.js.map +1 -1
  34. package/dist/components/ai/streamdown-code-plugin.cjs +2 -0
  35. package/dist/components/ai/streamdown-code-plugin.cjs.map +1 -0
  36. package/dist/components/ai/streamdown-code-plugin.js +42 -0
  37. package/dist/components/ai/streamdown-code-plugin.js.map +1 -0
  38. package/dist/components/ai/streamdown-plugins.cjs +2 -0
  39. package/dist/components/ai/streamdown-plugins.cjs.map +1 -0
  40. package/dist/components/ai/streamdown-plugins.js +14 -0
  41. package/dist/components/ai/streamdown-plugins.js.map +1 -0
  42. package/dist/components/ai/task.cjs +1 -1
  43. package/dist/components/ai/task.cjs.map +1 -1
  44. package/dist/components/ai/task.js +18 -11
  45. package/dist/components/ai/task.js.map +1 -1
  46. package/dist/components/ai/tool.cjs +1 -1
  47. package/dist/components/ai/tool.cjs.map +1 -1
  48. package/dist/components/ai/tool.js +51 -55
  49. package/dist/components/ai/tool.js.map +1 -1
  50. package/dist/components/ai/use-streamdown-plugins.cjs +2 -0
  51. package/dist/components/ai/use-streamdown-plugins.cjs.map +1 -0
  52. package/dist/components/ai/use-streamdown-plugins.js +25 -0
  53. package/dist/components/ai/use-streamdown-plugins.js.map +1 -0
  54. package/dist/components/charts/AreaPlot/AreaPlot.cjs +2 -0
  55. package/dist/components/charts/AreaPlot/AreaPlot.cjs.map +1 -0
  56. package/dist/components/charts/AreaPlot/AreaPlot.js +270 -0
  57. package/dist/components/charts/AreaPlot/AreaPlot.js.map +1 -0
  58. package/dist/components/charts/BarChart/BarChart.cjs +2 -0
  59. package/dist/components/charts/BarChart/BarChart.cjs.map +1 -0
  60. package/dist/components/charts/BarChart/BarChart.js +219 -0
  61. package/dist/components/charts/BarChart/BarChart.js.map +1 -0
  62. package/dist/components/charts/BoxPlot/BoxPlot.cjs +2 -0
  63. package/dist/components/charts/BoxPlot/BoxPlot.cjs.map +1 -0
  64. package/dist/components/charts/{Boxplot/Boxplot.js → BoxPlot/BoxPlot.js} +78 -79
  65. package/dist/components/charts/BoxPlot/BoxPlot.js.map +1 -0
  66. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs +1 -1
  67. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs.map +1 -1
  68. package/dist/components/charts/ChartTooltip/ChartTooltip.js +22 -22
  69. package/dist/components/charts/ChartTooltip/ChartTooltip.js.map +1 -1
  70. package/dist/components/charts/Chromatogram/Chromatogram.cjs +1 -1
  71. package/dist/components/charts/Chromatogram/Chromatogram.cjs.map +1 -1
  72. package/dist/components/charts/Chromatogram/Chromatogram.js +232 -170
  73. package/dist/components/charts/Chromatogram/Chromatogram.js.map +1 -1
  74. package/dist/components/charts/Chromatogram/annotations.cjs +2 -0
  75. package/dist/components/charts/Chromatogram/annotations.cjs.map +1 -0
  76. package/dist/components/charts/Chromatogram/annotations.js +137 -0
  77. package/dist/components/charts/Chromatogram/annotations.js.map +1 -0
  78. package/dist/components/charts/Chromatogram/boundaryMarkers.cjs.map +1 -0
  79. package/dist/components/charts/Chromatogram/boundaryMarkers.js.map +1 -0
  80. package/dist/components/charts/Chromatogram/constants.cjs.map +1 -0
  81. package/dist/components/charts/Chromatogram/constants.js.map +1 -0
  82. package/dist/components/charts/Chromatogram/dataProcessing.cjs.map +1 -0
  83. package/dist/components/charts/Chromatogram/dataProcessing.js.map +1 -0
  84. package/dist/components/charts/Chromatogram/peakDetection.cjs.map +1 -0
  85. package/dist/components/charts/Chromatogram/peakDetection.js.map +1 -0
  86. package/dist/components/charts/Chromatogram/plotBuilder.cjs +2 -0
  87. package/dist/components/charts/Chromatogram/plotBuilder.cjs.map +1 -0
  88. package/dist/components/charts/Chromatogram/plotBuilder.js +216 -0
  89. package/dist/components/charts/Chromatogram/plotBuilder.js.map +1 -0
  90. package/dist/components/charts/Chromatogram/regionOverlays.cjs.map +1 -0
  91. package/dist/components/charts/Chromatogram/regionOverlays.js.map +1 -0
  92. package/dist/components/charts/Electropherogram/Electropherogram.cjs +2 -0
  93. package/dist/components/charts/Electropherogram/Electropherogram.cjs.map +1 -0
  94. package/dist/components/charts/Electropherogram/Electropherogram.js +180 -0
  95. package/dist/components/charts/Electropherogram/Electropherogram.js.map +1 -0
  96. package/dist/components/charts/Histogram/Histogram.cjs +1 -1
  97. package/dist/components/charts/Histogram/Histogram.cjs.map +1 -1
  98. package/dist/components/charts/Histogram/Histogram.js +107 -108
  99. package/dist/components/charts/Histogram/Histogram.js.map +1 -1
  100. package/dist/components/charts/LinePlot/LinePlot.cjs +2 -0
  101. package/dist/components/charts/LinePlot/LinePlot.cjs.map +1 -0
  102. package/dist/components/charts/LinePlot/LinePlot.js +224 -0
  103. package/dist/components/charts/LinePlot/LinePlot.js.map +1 -0
  104. package/dist/components/charts/PieChart/PieChart.cjs +1 -1
  105. package/dist/components/charts/PieChart/PieChart.cjs.map +1 -1
  106. package/dist/components/charts/PieChart/PieChart.js +62 -61
  107. package/dist/components/charts/PieChart/PieChart.js.map +1 -1
  108. package/dist/components/charts/PlateMap/PlateMap.cjs +1 -1
  109. package/dist/components/charts/PlateMap/PlateMap.cjs.map +1 -1
  110. package/dist/components/charts/PlateMap/PlateMap.js +246 -242
  111. package/dist/components/charts/PlateMap/PlateMap.js.map +1 -1
  112. package/dist/components/charts/ScatterPlot/ScatterPlot.cjs +2 -0
  113. package/dist/components/charts/ScatterPlot/ScatterPlot.cjs.map +1 -0
  114. package/dist/components/charts/ScatterPlot/ScatterPlot.js +252 -0
  115. package/dist/components/charts/ScatterPlot/ScatterPlot.js.map +1 -0
  116. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs +2 -0
  117. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs.map +1 -0
  118. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js +215 -0
  119. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js.map +1 -0
  120. package/dist/components/charts/ScatterPlotInteractive/constants.cjs +2 -0
  121. package/dist/components/charts/ScatterPlotInteractive/constants.cjs.map +1 -0
  122. package/dist/components/charts/ScatterPlotInteractive/constants.js +38 -0
  123. package/dist/components/charts/ScatterPlotInteractive/constants.js.map +1 -0
  124. package/dist/components/charts/ScatterPlotInteractive/utils.cjs +2 -0
  125. package/dist/components/charts/ScatterPlotInteractive/utils.cjs.map +1 -0
  126. package/dist/components/charts/ScatterPlotInteractive/utils.js +261 -0
  127. package/dist/components/charts/ScatterPlotInteractive/utils.js.map +1 -0
  128. package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs +2 -0
  129. package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs.map +1 -0
  130. package/dist/components/charts/StackedChromatogram/StackedChromatogram.js +40 -0
  131. package/dist/components/charts/StackedChromatogram/StackedChromatogram.js.map +1 -0
  132. package/dist/components/charts/StackedChromatogram/transforms.cjs.map +1 -0
  133. package/dist/components/charts/StackedChromatogram/transforms.js.map +1 -0
  134. package/dist/components/charts/plotly-loader.cjs +2 -0
  135. package/dist/components/charts/plotly-loader.cjs.map +1 -0
  136. package/dist/components/charts/plotly-loader.js +22 -0
  137. package/dist/components/charts/plotly-loader.js.map +1 -0
  138. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs +2 -0
  139. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs.map +1 -0
  140. package/dist/components/composed/AssistantLayout/AssistantLayout.js +142 -0
  141. package/dist/components/composed/AssistantLayout/AssistantLayout.js.map +1 -0
  142. package/dist/components/composed/AssistantLayout/dockLayout.cjs +2 -0
  143. package/dist/components/composed/AssistantLayout/dockLayout.cjs.map +1 -0
  144. package/dist/components/composed/AssistantLayout/dockLayout.js +10 -0
  145. package/dist/components/composed/AssistantLayout/dockLayout.js.map +1 -0
  146. package/dist/components/composed/Chat/Chat.cjs +1 -1
  147. package/dist/components/composed/Chat/Chat.cjs.map +1 -1
  148. package/dist/components/composed/Chat/Chat.js +23 -23
  149. package/dist/components/composed/Chat/Chat.js.map +1 -1
  150. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs +1 -1
  151. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  152. package/dist/components/composed/ConfirmDialog/ConfirmDialog.js +33 -29
  153. package/dist/components/composed/ConfirmDialog/ConfirmDialog.js.map +1 -1
  154. package/dist/components/composed/DataAppShell/CollapseButton.cjs +2 -0
  155. package/dist/components/composed/DataAppShell/CollapseButton.cjs.map +1 -0
  156. package/dist/components/composed/DataAppShell/CollapseButton.js +42 -0
  157. package/dist/components/composed/DataAppShell/CollapseButton.js.map +1 -0
  158. package/dist/components/composed/DataAppShell/DataAppShell.cjs +1 -1
  159. package/dist/components/composed/DataAppShell/DataAppShell.cjs.map +1 -1
  160. package/dist/components/composed/DataAppShell/DataAppShell.js +349 -313
  161. package/dist/components/composed/DataAppShell/DataAppShell.js.map +1 -1
  162. package/dist/components/composed/DataAppShell/PrimaryNav.cjs +2 -0
  163. package/dist/components/composed/DataAppShell/PrimaryNav.cjs.map +1 -0
  164. package/dist/components/composed/DataAppShell/PrimaryNav.js +268 -0
  165. package/dist/components/composed/DataAppShell/PrimaryNav.js.map +1 -0
  166. package/dist/components/composed/DataAppShell/RightPanel.cjs +2 -0
  167. package/dist/components/composed/DataAppShell/RightPanel.cjs.map +1 -0
  168. package/dist/components/composed/DataAppShell/RightPanel.js +282 -0
  169. package/dist/components/composed/DataAppShell/RightPanel.js.map +1 -0
  170. package/dist/components/composed/DataAppShell/SecondaryNav.cjs +2 -0
  171. package/dist/components/composed/DataAppShell/SecondaryNav.cjs.map +1 -0
  172. package/dist/components/composed/DataAppShell/SecondaryNav.js +364 -0
  173. package/dist/components/composed/DataAppShell/SecondaryNav.js.map +1 -0
  174. package/dist/components/composed/DataAppShell/ShellContext.cjs +2 -0
  175. package/dist/components/composed/DataAppShell/ShellContext.cjs.map +1 -0
  176. package/dist/components/composed/DataAppShell/ShellContext.js +23 -0
  177. package/dist/components/composed/DataAppShell/ShellContext.js.map +1 -0
  178. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs +2 -0
  179. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs.map +1 -0
  180. package/dist/components/composed/MoleculeStructure/MoleculeStructure.js +87 -0
  181. package/dist/components/composed/MoleculeStructure/MoleculeStructure.js.map +1 -0
  182. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs +2 -0
  183. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs.map +1 -0
  184. package/dist/components/composed/MoleculeStructure/rdkit-loader.js +89 -0
  185. package/dist/components/composed/MoleculeStructure/rdkit-loader.js.map +1 -0
  186. package/dist/components/composed/MoleculeStructure/use-rdkit.cjs +2 -0
  187. package/dist/components/composed/MoleculeStructure/use-rdkit.cjs.map +1 -0
  188. package/dist/components/composed/MoleculeStructure/use-rdkit.js +19 -0
  189. package/dist/components/composed/MoleculeStructure/use-rdkit.js.map +1 -0
  190. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs +1 -1
  191. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs.map +1 -1
  192. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js +17 -17
  193. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js.map +1 -1
  194. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs +1 -1
  195. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs.map +1 -1
  196. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js +33 -33
  197. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js.map +1 -1
  198. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs +1 -1
  199. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs.map +1 -1
  200. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js +7 -7
  201. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js.map +1 -1
  202. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs +1 -1
  203. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs.map +1 -1
  204. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js +1 -1
  205. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js.map +1 -1
  206. package/dist/components/composed/PlateMapEditor/WellLegend.cjs +1 -1
  207. package/dist/components/composed/PlateMapEditor/WellLegend.cjs.map +1 -1
  208. package/dist/components/composed/PlateMapEditor/WellLegend.js +24 -12
  209. package/dist/components/composed/PlateMapEditor/WellLegend.js.map +1 -1
  210. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs +1 -1
  211. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs.map +1 -1
  212. package/dist/components/composed/PlateMapEditor/WellManifestTable.js +1 -1
  213. package/dist/components/composed/PlateMapEditor/WellManifestTable.js.map +1 -1
  214. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs +1 -1
  215. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs.map +1 -1
  216. package/dist/components/composed/TdpSearch/components/DefaultFilters.js +3 -3
  217. package/dist/components/composed/TdpSearch/components/DefaultFilters.js.map +1 -1
  218. package/dist/components/composed/TopBar/TopBar.cjs +2 -0
  219. package/dist/components/composed/TopBar/TopBar.cjs.map +1 -0
  220. package/dist/components/composed/TopBar/TopBar.js +56 -0
  221. package/dist/components/composed/TopBar/TopBar.js.map +1 -0
  222. package/dist/components/composed/UserMenu/UserMenu.cjs +2 -0
  223. package/dist/components/composed/UserMenu/UserMenu.cjs.map +1 -0
  224. package/dist/components/composed/UserMenu/UserMenu.js +99 -0
  225. package/dist/components/composed/UserMenu/UserMenu.js.map +1 -0
  226. package/dist/components/composed/tdp-link.cjs +1 -1
  227. package/dist/components/composed/tdp-link.cjs.map +1 -1
  228. package/dist/components/composed/tdp-link.js +5 -5
  229. package/dist/components/composed/tdp-link.js.map +1 -1
  230. package/dist/components/ui/alert.cjs +1 -1
  231. package/dist/components/ui/alert.cjs.map +1 -1
  232. package/dist/components/ui/alert.js +12 -12
  233. package/dist/components/ui/alert.js.map +1 -1
  234. package/dist/components/ui/badge.cjs +1 -1
  235. package/dist/components/ui/badge.cjs.map +1 -1
  236. package/dist/components/ui/badge.js +14 -14
  237. package/dist/components/ui/badge.js.map +1 -1
  238. package/dist/components/ui/banner.cjs +1 -1
  239. package/dist/components/ui/banner.cjs.map +1 -1
  240. package/dist/components/ui/banner.js +17 -17
  241. package/dist/components/ui/banner.js.map +1 -1
  242. package/dist/components/ui/button.cjs +1 -1
  243. package/dist/components/ui/button.cjs.map +1 -1
  244. package/dist/components/ui/button.js +16 -16
  245. package/dist/components/ui/button.js.map +1 -1
  246. package/dist/components/ui/calendar.cjs +1 -1
  247. package/dist/components/ui/calendar.cjs.map +1 -1
  248. package/dist/components/ui/calendar.js +3 -3
  249. package/dist/components/ui/calendar.js.map +1 -1
  250. package/dist/components/ui/code-block.cjs +3 -3
  251. package/dist/components/ui/code-block.cjs.map +1 -1
  252. package/dist/components/ui/code-block.js +136 -118
  253. package/dist/components/ui/code-block.js.map +1 -1
  254. package/dist/components/ui/code-editor.cjs +1 -1
  255. package/dist/components/ui/code-editor.cjs.map +1 -1
  256. package/dist/components/ui/code-editor.js +14 -12
  257. package/dist/components/ui/code-editor.js.map +1 -1
  258. package/dist/components/ui/combobox.cjs +1 -1
  259. package/dist/components/ui/combobox.cjs.map +1 -1
  260. package/dist/components/ui/combobox.js +33 -29
  261. package/dist/components/ui/combobox.js.map +1 -1
  262. package/dist/components/ui/command.cjs +1 -1
  263. package/dist/components/ui/command.cjs.map +1 -1
  264. package/dist/components/ui/command.js +81 -77
  265. package/dist/components/ui/command.js.map +1 -1
  266. package/dist/components/ui/context-menu.cjs +1 -1
  267. package/dist/components/ui/context-menu.cjs.map +1 -1
  268. package/dist/components/ui/context-menu.js +13 -13
  269. package/dist/components/ui/context-menu.js.map +1 -1
  270. package/dist/components/ui/data-table/data-table-column-toggle.cjs +1 -1
  271. package/dist/components/ui/data-table/data-table-column-toggle.cjs.map +1 -1
  272. package/dist/components/ui/data-table/data-table-column-toggle.js +70 -62
  273. package/dist/components/ui/data-table/data-table-column-toggle.js.map +1 -1
  274. package/dist/components/ui/data-table/data-table-filter.cjs +1 -1
  275. package/dist/components/ui/data-table/data-table-filter.cjs.map +1 -1
  276. package/dist/components/ui/data-table/data-table-filter.js +24 -23
  277. package/dist/components/ui/data-table/data-table-filter.js.map +1 -1
  278. package/dist/components/ui/data-table/data-table-group.cjs +1 -1
  279. package/dist/components/ui/data-table/data-table-group.cjs.map +1 -1
  280. package/dist/components/ui/data-table/data-table-group.js +17 -16
  281. package/dist/components/ui/data-table/data-table-group.js.map +1 -1
  282. package/dist/components/ui/data-table/data-table-pagination.cjs +1 -1
  283. package/dist/components/ui/data-table/data-table-pagination.cjs.map +1 -1
  284. package/dist/components/ui/data-table/data-table-pagination.js +15 -15
  285. package/dist/components/ui/data-table/data-table-pagination.js.map +1 -1
  286. package/dist/components/ui/data-table/data-table.cjs +1 -1
  287. package/dist/components/ui/data-table/data-table.cjs.map +1 -1
  288. package/dist/components/ui/data-table/data-table.js +191 -190
  289. package/dist/components/ui/data-table/data-table.js.map +1 -1
  290. package/dist/components/ui/dialog.cjs +1 -1
  291. package/dist/components/ui/dialog.cjs.map +1 -1
  292. package/dist/components/ui/dialog.js +1 -1
  293. package/dist/components/ui/dialog.js.map +1 -1
  294. package/dist/components/ui/dropdown-menu.cjs +1 -1
  295. package/dist/components/ui/dropdown-menu.cjs.map +1 -1
  296. package/dist/components/ui/dropdown-menu.js +12 -4
  297. package/dist/components/ui/dropdown-menu.js.map +1 -1
  298. package/dist/components/ui/hover-card.cjs +1 -1
  299. package/dist/components/ui/hover-card.cjs.map +1 -1
  300. package/dist/components/ui/hover-card.js +3 -3
  301. package/dist/components/ui/hover-card.js.map +1 -1
  302. package/dist/components/ui/item.cjs +1 -1
  303. package/dist/components/ui/item.cjs.map +1 -1
  304. package/dist/components/ui/item.js +44 -36
  305. package/dist/components/ui/item.js.map +1 -1
  306. package/dist/components/ui/menubar.cjs +1 -1
  307. package/dist/components/ui/menubar.cjs.map +1 -1
  308. package/dist/components/ui/menubar.js +2 -2
  309. package/dist/components/ui/menubar.js.map +1 -1
  310. package/dist/components/ui/navigation-menu.cjs +1 -1
  311. package/dist/components/ui/navigation-menu.cjs.map +1 -1
  312. package/dist/components/ui/navigation-menu.js +1 -1
  313. package/dist/components/ui/navigation-menu.js.map +1 -1
  314. package/dist/components/ui/popover.cjs +1 -1
  315. package/dist/components/ui/popover.cjs.map +1 -1
  316. package/dist/components/ui/popover.js +1 -1
  317. package/dist/components/ui/popover.js.map +1 -1
  318. package/dist/components/ui/scroll-area.cjs +1 -1
  319. package/dist/components/ui/scroll-area.cjs.map +1 -1
  320. package/dist/components/ui/scroll-area.js +1 -0
  321. package/dist/components/ui/scroll-area.js.map +1 -1
  322. package/dist/components/ui/select.cjs +1 -1
  323. package/dist/components/ui/select.cjs.map +1 -1
  324. package/dist/components/ui/select.js +1 -1
  325. package/dist/components/ui/select.js.map +1 -1
  326. package/dist/components/ui/sheet.cjs +1 -1
  327. package/dist/components/ui/sheet.cjs.map +1 -1
  328. package/dist/components/ui/sheet.js +5 -5
  329. package/dist/components/ui/sheet.js.map +1 -1
  330. package/dist/components/ui/sidebar.cjs +1 -1
  331. package/dist/components/ui/sidebar.cjs.map +1 -1
  332. package/dist/components/ui/sidebar.js +2 -2
  333. package/dist/components/ui/sidebar.js.map +1 -1
  334. package/dist/components/ui/slider.cjs +1 -1
  335. package/dist/components/ui/slider.cjs.map +1 -1
  336. package/dist/components/ui/slider.js +10 -9
  337. package/dist/components/ui/slider.js.map +1 -1
  338. package/dist/components/ui/sonner.cjs +1 -1
  339. package/dist/components/ui/sonner.cjs.map +1 -1
  340. package/dist/components/ui/sonner.js +25 -10
  341. package/dist/components/ui/sonner.js.map +1 -1
  342. package/dist/components/ui/table.cjs +1 -1
  343. package/dist/components/ui/table.cjs.map +1 -1
  344. package/dist/components/ui/table.js +1 -0
  345. package/dist/components/ui/table.js.map +1 -1
  346. package/dist/components/ui/tabs.cjs +1 -1
  347. package/dist/components/ui/tabs.cjs.map +1 -1
  348. package/dist/components/ui/tabs.js +18 -18
  349. package/dist/components/ui/tabs.js.map +1 -1
  350. package/dist/components/ui/tetra-molecule-icon.cjs +2 -0
  351. package/dist/components/ui/tetra-molecule-icon.cjs.map +1 -0
  352. package/dist/components/ui/tetra-molecule-icon.js +49 -0
  353. package/dist/components/ui/tetra-molecule-icon.js.map +1 -0
  354. package/dist/components/ui/toggle-group.cjs +1 -1
  355. package/dist/components/ui/toggle-group.cjs.map +1 -1
  356. package/dist/components/ui/toggle-group.js +35 -31
  357. package/dist/components/ui/toggle-group.js.map +1 -1
  358. package/dist/hooks/use-plotly-theme.cjs +1 -1
  359. package/dist/hooks/use-plotly-theme.cjs.map +1 -1
  360. package/dist/hooks/use-plotly-theme.js +4 -3
  361. package/dist/hooks/use-plotly-theme.js.map +1 -1
  362. package/dist/index.cjs +1 -1
  363. package/dist/index.css +1 -1
  364. package/dist/index.d.ts +1073 -136
  365. package/dist/index.js +698 -647
  366. package/dist/index.js.map +1 -1
  367. package/dist/index.tailwind.css +1 -1
  368. package/dist/lib/shiki.cjs +2 -0
  369. package/dist/lib/shiki.cjs.map +1 -0
  370. package/dist/lib/shiki.js +72 -0
  371. package/dist/lib/shiki.js.map +1 -0
  372. package/package.json +23 -12
  373. package/dist/components/charts/AreaGraph/AreaGraph.cjs +0 -2
  374. package/dist/components/charts/AreaGraph/AreaGraph.cjs.map +0 -1
  375. package/dist/components/charts/AreaGraph/AreaGraph.js +0 -271
  376. package/dist/components/charts/AreaGraph/AreaGraph.js.map +0 -1
  377. package/dist/components/charts/BarGraph/BarGraph.cjs +0 -2
  378. package/dist/components/charts/BarGraph/BarGraph.cjs.map +0 -1
  379. package/dist/components/charts/BarGraph/BarGraph.js +0 -220
  380. package/dist/components/charts/BarGraph/BarGraph.js.map +0 -1
  381. package/dist/components/charts/Boxplot/Boxplot.cjs +0 -2
  382. package/dist/components/charts/Boxplot/Boxplot.cjs.map +0 -1
  383. package/dist/components/charts/Boxplot/Boxplot.js.map +0 -1
  384. package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs +0 -2
  385. package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs.map +0 -1
  386. package/dist/components/charts/ChromatogramChart/ChromatogramChart.js +0 -241
  387. package/dist/components/charts/ChromatogramChart/ChromatogramChart.js.map +0 -1
  388. package/dist/components/charts/ChromatogramChart/annotations.cjs +0 -2
  389. package/dist/components/charts/ChromatogramChart/annotations.cjs.map +0 -1
  390. package/dist/components/charts/ChromatogramChart/annotations.js +0 -136
  391. package/dist/components/charts/ChromatogramChart/annotations.js.map +0 -1
  392. package/dist/components/charts/ChromatogramChart/boundaryMarkers.cjs.map +0 -1
  393. package/dist/components/charts/ChromatogramChart/boundaryMarkers.js.map +0 -1
  394. package/dist/components/charts/ChromatogramChart/constants.cjs.map +0 -1
  395. package/dist/components/charts/ChromatogramChart/constants.js.map +0 -1
  396. package/dist/components/charts/ChromatogramChart/dataProcessing.cjs.map +0 -1
  397. package/dist/components/charts/ChromatogramChart/dataProcessing.js.map +0 -1
  398. package/dist/components/charts/ChromatogramChart/peakDetection.cjs.map +0 -1
  399. package/dist/components/charts/ChromatogramChart/peakDetection.js.map +0 -1
  400. package/dist/components/charts/ChromatogramChart/plotBuilder.cjs +0 -2
  401. package/dist/components/charts/ChromatogramChart/plotBuilder.cjs.map +0 -1
  402. package/dist/components/charts/ChromatogramChart/plotBuilder.js +0 -207
  403. package/dist/components/charts/ChromatogramChart/plotBuilder.js.map +0 -1
  404. package/dist/components/charts/ChromatogramChart/regionOverlays.cjs.map +0 -1
  405. package/dist/components/charts/ChromatogramChart/regionOverlays.js.map +0 -1
  406. package/dist/components/charts/DotPlot/DotPlot.cjs +0 -2
  407. package/dist/components/charts/DotPlot/DotPlot.cjs.map +0 -1
  408. package/dist/components/charts/DotPlot/DotPlot.js +0 -208
  409. package/dist/components/charts/DotPlot/DotPlot.js.map +0 -1
  410. package/dist/components/charts/Heatmap/Heatmap.cjs +0 -2
  411. package/dist/components/charts/Heatmap/Heatmap.cjs.map +0 -1
  412. package/dist/components/charts/Heatmap/Heatmap.js +0 -67
  413. package/dist/components/charts/Heatmap/Heatmap.js.map +0 -1
  414. package/dist/components/charts/LineGraph/LineGraph.cjs +0 -2
  415. package/dist/components/charts/LineGraph/LineGraph.cjs.map +0 -1
  416. package/dist/components/charts/LineGraph/LineGraph.js +0 -225
  417. package/dist/components/charts/LineGraph/LineGraph.js.map +0 -1
  418. package/dist/components/charts/ScatterGraph/ScatterGraph.cjs +0 -2
  419. package/dist/components/charts/ScatterGraph/ScatterGraph.cjs.map +0 -1
  420. package/dist/components/charts/ScatterGraph/ScatterGraph.js +0 -234
  421. package/dist/components/charts/ScatterGraph/ScatterGraph.js.map +0 -1
  422. package/dist/components/charts/StackedChromatogramChart/StackedChromatogramChart.cjs +0 -2
  423. package/dist/components/charts/StackedChromatogramChart/StackedChromatogramChart.cjs.map +0 -1
  424. package/dist/components/charts/StackedChromatogramChart/StackedChromatogramChart.js +0 -40
  425. package/dist/components/charts/StackedChromatogramChart/StackedChromatogramChart.js.map +0 -1
  426. package/dist/components/charts/StackedChromatogramChart/transforms.cjs.map +0 -1
  427. package/dist/components/charts/StackedChromatogramChart/transforms.js.map +0 -1
  428. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/boundaryMarkers.cjs +0 -0
  429. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/boundaryMarkers.js +0 -0
  430. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/constants.cjs +0 -0
  431. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/constants.js +0 -0
  432. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/dataProcessing.cjs +0 -0
  433. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/dataProcessing.js +0 -0
  434. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.cjs +0 -0
  435. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.js +0 -0
  436. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/regionOverlays.cjs +0 -0
  437. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/regionOverlays.js +0 -0
  438. /package/dist/components/charts/{StackedChromatogramChart → StackedChromatogram}/transforms.cjs +0 -0
  439. /package/dist/components/charts/{StackedChromatogramChart → StackedChromatogram}/transforms.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"code-block.js","sources":["../../../src/components/ui/code-block.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon } from \"lucide-react\";\nimport {\n createContext,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createHighlighter } from \"shiki\";\n\nimport type { ComponentProps, CSSProperties, HTMLAttributes } from \"react\";\nimport type {\n BundledLanguage,\n BundledTheme,\n HighlighterGeneric,\n ThemedToken,\n} from \"shiki\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { cn } from \"@/lib/utils\";\n\n\n\n\n// Shiki uses bitflags for font styles: 1=italic, 2=bold, 4=underline\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isItalic = (fontStyle: number | undefined) => fontStyle && fontStyle & 1;\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isBold = (fontStyle: number | undefined) => fontStyle && fontStyle & 2;\nconst isUnderline = (fontStyle: number | undefined) =>\n // oxlint-disable-next-line eslint(no-bitwise)\n fontStyle && fontStyle & 4;\n\n// Transform tokens to include pre-computed keys to avoid noArrayIndexKey lint\ninterface KeyedToken {\n token: ThemedToken;\n key: string;\n}\ninterface KeyedLine {\n tokens: KeyedToken[];\n key: string;\n}\n\nconst addKeysToTokens = (lines: ThemedToken[][]): KeyedLine[] =>\n lines.map((line, lineIdx) => ({\n key: `line-${lineIdx}`,\n tokens: line.map((token, tokenIdx) => ({\n key: `line-${lineIdx}-${tokenIdx}`,\n token,\n })),\n }));\n\n// Token rendering component\nconst TokenSpan = ({ token }: { token: ThemedToken }) => (\n <span\n className=\"dark:!bg-[var(--shiki-dark-bg)] dark:!text-[var(--shiki-dark)]\"\n style={\n {\n backgroundColor: token.bgColor,\n color: token.color,\n fontStyle: isItalic(token.fontStyle) ? \"italic\" : undefined,\n fontWeight: isBold(token.fontStyle) ? \"bold\" : undefined,\n textDecoration: isUnderline(token.fontStyle) ? \"underline\" : undefined,\n ...token.htmlStyle,\n } as CSSProperties\n }\n >\n {token.content}\n </span>\n);\n\n// Line number styles using CSS counters\nconst LINE_NUMBER_CLASSES = cn(\n \"block\",\n \"before:content-[counter(line)]\",\n \"before:inline-block\",\n \"before:[counter-increment:line]\",\n \"before:w-8\",\n \"before:mr-4\",\n \"before:text-right\",\n \"before:text-muted-foreground/50\",\n \"before:font-mono\",\n \"before:select-none\"\n);\n\n// Line rendering component\nconst LineSpan = ({\n keyedLine,\n showLineNumbers,\n}: {\n keyedLine: KeyedLine;\n showLineNumbers: boolean;\n}) => (\n <span className={showLineNumbers ? LINE_NUMBER_CLASSES : \"block\"}>\n {keyedLine.tokens.length === 0\n ? \"\\n\"\n : keyedLine.tokens.map(({ token, key }) => (\n <TokenSpan key={key} token={token} />\n ))}\n </span>\n);\n\n// Types\ntype CodeBlockProps = HTMLAttributes<HTMLDivElement> & {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n};\n\ninterface TokenizedCode {\n tokens: ThemedToken[][];\n fg: string;\n bg: string;\n}\n\ninterface CodeBlockContextType {\n code: string;\n}\n\n// Context\nconst CodeBlockContext = createContext<CodeBlockContextType>({\n code: \"\",\n});\n\n// Highlighter cache (singleton per language)\nconst highlighterCache = new Map<\n string,\n Promise<HighlighterGeneric<BundledLanguage, BundledTheme>>\n>();\n\n// Token cache\nconst tokensCache = new Map<string, TokenizedCode>();\n\n// Subscribers for async token updates\nconst subscribers = new Map<string, Set<(result: TokenizedCode) => void>>();\n\nconst CACHE_KEY_SLICE_LENGTH = 100;\n\nconst getTokensCacheKey = (code: string, language: BundledLanguage) => {\n const start = code.slice(0, CACHE_KEY_SLICE_LENGTH);\n const end = code.length > CACHE_KEY_SLICE_LENGTH ? code.slice(-CACHE_KEY_SLICE_LENGTH) : \"\";\n return `${language}:${code.length}:${start}:${end}`;\n};\n\nconst getHighlighter = (\n language: BundledLanguage\n): Promise<HighlighterGeneric<BundledLanguage, BundledTheme>> => {\n const cached = highlighterCache.get(language);\n if (cached) {\n return cached;\n }\n\n const highlighterPromise = createHighlighter({\n langs: [language],\n themes: [\"github-light\", \"github-dark\"],\n });\n\n highlighterCache.set(language, highlighterPromise);\n return highlighterPromise;\n};\n\n// Create raw tokens for immediate display while highlighting loads\nconst createRawTokens = (code: string): TokenizedCode => ({\n bg: \"transparent\",\n fg: \"inherit\",\n tokens: code.split(\"\\n\").map((line) =>\n line === \"\"\n ? []\n : [\n {\n color: \"inherit\",\n content: line,\n } as ThemedToken,\n ]\n ),\n});\n\n// Synchronous highlight with callback for async results\nexport const highlightCode = (\n code: string,\n language: BundledLanguage,\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-callbacks)\n callback?: (result: TokenizedCode) => void\n): TokenizedCode | null => {\n const tokensCacheKey = getTokensCacheKey(code, language);\n\n // Return cached result if available\n const cached = tokensCache.get(tokensCacheKey);\n if (cached) {\n return cached;\n }\n\n // Subscribe callback if provided\n if (callback) {\n if (!subscribers.has(tokensCacheKey)) {\n subscribers.set(tokensCacheKey, new Set());\n }\n subscribers.get(tokensCacheKey)?.add(callback);\n }\n\n // Start highlighting in background - fire-and-forget async pattern\n getHighlighter(language)\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then)\n .then((highlighter) => {\n const availableLangs = highlighter.getLoadedLanguages();\n const langToUse = availableLangs.includes(language) ? language : \"text\";\n\n const result = highlighter.codeToTokens(code, {\n lang: langToUse,\n themes: {\n dark: \"github-dark\",\n light: \"github-light\",\n },\n });\n\n const tokenized: TokenizedCode = {\n bg: result.bg ?? \"transparent\",\n fg: result.fg ?? \"inherit\",\n tokens: result.tokens,\n };\n\n // Cache the result\n tokensCache.set(tokensCacheKey, tokenized);\n\n // Notify all subscribers\n const subs = subscribers.get(tokensCacheKey);\n if (subs) {\n for (const sub of subs) {\n sub(tokenized);\n }\n subscribers.delete(tokensCacheKey);\n }\n })\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then), eslint-plugin-promise(prefer-await-to-callbacks)\n .catch((error) => {\n console.error(\"Failed to highlight code:\", error);\n subscribers.delete(tokensCacheKey);\n });\n\n return null;\n};\n\nconst CodeBlockBody = memo(\n ({\n tokenized,\n showLineNumbers,\n className,\n }: {\n tokenized: TokenizedCode;\n showLineNumbers: boolean;\n className?: string;\n }) => {\n const preStyle = useMemo(\n () => ({\n backgroundColor: tokenized.bg,\n color: tokenized.fg,\n }),\n [tokenized.bg, tokenized.fg]\n );\n\n const keyedLines = useMemo(\n () => addKeysToTokens(tokenized.tokens),\n [tokenized.tokens]\n );\n\n return (\n <pre\n className={cn(\n \"dark:!bg-[var(--shiki-dark-bg)] dark:!text-[var(--shiki-dark)] m-0 p-4 text-sm\",\n className\n )}\n style={preStyle}\n >\n <code\n className={cn(\n \"font-mono text-sm\",\n showLineNumbers && \"[counter-increment:line_0] [counter-reset:line]\"\n )}\n >\n {keyedLines.map((keyedLine) => (\n <LineSpan\n key={keyedLine.key}\n keyedLine={keyedLine}\n showLineNumbers={showLineNumbers}\n />\n ))}\n </code>\n </pre>\n );\n },\n (prevProps, nextProps) =>\n prevProps.tokenized === nextProps.tokenized &&\n prevProps.showLineNumbers === nextProps.showLineNumbers &&\n prevProps.className === nextProps.className\n);\n\nCodeBlockBody.displayName = \"CodeBlockBody\";\n\nexport const CodeBlockContainer = ({\n className,\n language,\n style,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { language: string }) => (\n <div\n className={cn(\n \"group relative w-full overflow-hidden rounded-md border bg-background text-foreground\",\n className\n )}\n data-language={language}\n style={{\n containIntrinsicSize: \"auto 200px\",\n contentVisibility: \"auto\",\n ...style,\n }}\n {...props}\n />\n);\n\nexport const CodeBlockHeader = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex items-center justify-between border-b bg-muted/80 px-3 py-2 text-muted-foreground text-xs\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockTitle = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockFilename = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn(\"font-mono\", className)} {...props}>\n {children}\n </span>\n);\n\nexport const CodeBlockActions = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"-my-1 -mr-1 flex items-center gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockContent = ({\n code,\n language,\n showLineNumbers = false,\n}: {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n}) => {\n // Memoized raw tokens for immediate display\n const rawTokens = useMemo(() => createRawTokens(code), [code]);\n\n // Synchronous cache lookup — avoids setState in effect for cached results\n const syncTokens = useMemo(\n () => highlightCode(code, language) ?? rawTokens,\n [code, language, rawTokens]\n );\n\n // Async highlighting result (populated after shiki loads)\n const [asyncTokens, setAsyncTokens] = useState<TokenizedCode | null>(null);\n const asyncKeyRef = useRef({ code, language });\n\n // Invalidate stale async tokens synchronously during render\n if (\n asyncKeyRef.current.code !== code ||\n asyncKeyRef.current.language !== language\n ) {\n asyncKeyRef.current = { code, language };\n setAsyncTokens(null);\n }\n\n useEffect(() => {\n let cancelled = false;\n\n highlightCode(code, language, (result) => {\n if (!cancelled) {\n setAsyncTokens(result);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, language]);\n\n const tokenized = asyncTokens ?? syncTokens;\n\n return (\n <div className=\"relative overflow-auto\">\n <CodeBlockBody showLineNumbers={showLineNumbers} tokenized={tokenized} />\n </div>\n );\n};\n\nexport const CodeBlock = ({\n code,\n language,\n showLineNumbers = false,\n className,\n children,\n ...props\n}: CodeBlockProps) => {\n const contextValue = useMemo(() => ({ code }), [code]);\n\n return (\n <CodeBlockContext.Provider value={contextValue}>\n <CodeBlockContainer className={className} language={language} {...props}>\n {children}\n <CodeBlockContent\n code={code}\n language={language}\n showLineNumbers={showLineNumbers}\n />\n </CodeBlockContainer>\n </CodeBlockContext.Provider>\n );\n};\n\nexport type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const CodeBlockCopyButton = ({\n onCopy,\n onError,\n timeout = 2000,\n children,\n className,\n ...props\n}: CodeBlockCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<number>(0);\n const { code } = useContext(CodeBlockContext);\n\n const copyToClipboard = useCallback(async () => {\n if (typeof window === \"undefined\" || !navigator?.clipboard?.writeText) {\n onError?.(new Error(\"Clipboard API not available\"));\n return;\n }\n\n try {\n if (!isCopied) {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n onCopy?.();\n timeoutRef.current = window.setTimeout(\n () => setIsCopied(false),\n timeout\n );\n }\n } catch (error) {\n onError?.(error as Error);\n }\n }, [code, onCopy, onError, timeout, isCopied]);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current);\n },\n []\n );\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button\n className={cn(\"shrink-0\", className)}\n onClick={copyToClipboard}\n size=\"icon\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <Icon size={14} />}\n </Button>\n );\n};\n\nexport type CodeBlockLanguageSelectorProps = ComponentProps<typeof Select>;\n\nexport const CodeBlockLanguageSelector = (\n props: CodeBlockLanguageSelectorProps\n) => <Select {...props} />;\n\nexport type CodeBlockLanguageSelectorTriggerProps = ComponentProps<\n typeof SelectTrigger\n>;\n\nexport const CodeBlockLanguageSelectorTrigger = ({\n className,\n ...props\n}: CodeBlockLanguageSelectorTriggerProps) => (\n <SelectTrigger\n className={cn(\n \"h-7 border-none bg-transparent px-2 text-xs shadow-none\",\n className\n )}\n size=\"sm\"\n {...props}\n />\n);\n\nexport type CodeBlockLanguageSelectorValueProps = ComponentProps<\n typeof SelectValue\n>;\n\nexport const CodeBlockLanguageSelectorValue = (\n props: CodeBlockLanguageSelectorValueProps\n) => <SelectValue {...props} />;\n\nexport type CodeBlockLanguageSelectorContentProps = ComponentProps<\n typeof SelectContent\n>;\n\nexport const CodeBlockLanguageSelectorContent = ({\n align = \"end\",\n ...props\n}: CodeBlockLanguageSelectorContentProps) => (\n <SelectContent align={align} {...props} />\n);\n\nexport type CodeBlockLanguageSelectorItemProps = ComponentProps<\n typeof SelectItem\n>;\n\nexport const CodeBlockLanguageSelectorItem = (\n props: CodeBlockLanguageSelectorItemProps\n) => <SelectItem {...props} />;\n"],"names":["isItalic","fontStyle","isBold","isUnderline","addKeysToTokens","lines","line","lineIdx","token","tokenIdx","TokenSpan","jsx","LINE_NUMBER_CLASSES","cn","LineSpan","keyedLine","showLineNumbers","key","CodeBlockContext","createContext","highlighterCache","tokensCache","subscribers","CACHE_KEY_SLICE_LENGTH","getTokensCacheKey","code","language","start","end","getHighlighter","cached","highlighterPromise","createHighlighter","createRawTokens","highlightCode","callback","tokensCacheKey","highlighter","langToUse","result","tokenized","subs","sub","error","CodeBlockBody","memo","className","preStyle","useMemo","keyedLines","prevProps","nextProps","CodeBlockContainer","style","props","CodeBlockHeader","children","CodeBlockTitle","CodeBlockFilename","CodeBlockActions","CodeBlockContent","rawTokens","syncTokens","asyncTokens","setAsyncTokens","useState","asyncKeyRef","useRef","useEffect","cancelled","CodeBlock","contextValue","jsxs","CodeBlockCopyButton","onCopy","onError","timeout","isCopied","setIsCopied","timeoutRef","useContext","copyToClipboard","useCallback","Icon","CheckIcon","CopyIcon","Button","CodeBlockLanguageSelector","Select","CodeBlockLanguageSelectorTrigger","SelectTrigger","CodeBlockLanguageSelectorValue","SelectValue","CodeBlockLanguageSelectorContent","align","SelectContent","CodeBlockLanguageSelectorItem","SelectItem"],"mappings":"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"}
1
+ {"version":3,"file":"code-block.js","sources":["../../../src/components/ui/code-block.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon } from \"lucide-react\";\nimport {\n createContext,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport type { ComponentProps, CSSProperties, HTMLAttributes } from \"react\";\nimport type { BundledLanguage, ThemedToken } from \"shiki\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { getCodeBlockHighlighter } from \"@/lib/shiki\";\nimport { cn } from \"@/lib/utils\";\n\n\n\n\n// Shiki uses bitflags for font styles: 1=italic, 2=bold, 4=underline\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isItalic = (fontStyle: number | undefined) => fontStyle && fontStyle & 1;\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isBold = (fontStyle: number | undefined) => fontStyle && fontStyle & 2;\nconst isUnderline = (fontStyle: number | undefined) =>\n // oxlint-disable-next-line eslint(no-bitwise)\n fontStyle && fontStyle & 4;\n\n// Transform tokens to include pre-computed keys to avoid noArrayIndexKey lint\ninterface KeyedToken {\n token: ThemedToken;\n key: string;\n}\ninterface KeyedLine {\n tokens: KeyedToken[];\n key: string;\n}\n\nconst addKeysToTokens = (lines: ThemedToken[][]): KeyedLine[] =>\n lines.map((line, lineIdx) => ({\n key: `line-${lineIdx}`,\n tokens: line.map((token, tokenIdx) => ({\n key: `line-${lineIdx}-${tokenIdx}`,\n token,\n })),\n }));\n\n// Token rendering component\nconst TokenSpan = ({ token }: { token: ThemedToken }) => (\n <span\n className=\"dark:!bg-[var(--shiki-dark-bg)] dark:!text-[var(--shiki-dark)]\"\n style={\n {\n backgroundColor: token.bgColor,\n color: token.color,\n fontStyle: isItalic(token.fontStyle) ? \"italic\" : undefined,\n fontWeight: isBold(token.fontStyle) ? \"bold\" : undefined,\n textDecoration: isUnderline(token.fontStyle) ? \"underline\" : undefined,\n ...token.htmlStyle,\n } as CSSProperties\n }\n >\n {token.content}\n </span>\n);\n\n// Line number styles using CSS counters\nconst LINE_NUMBER_CLASSES = cn(\n \"block\",\n \"before:content-[counter(line)]\",\n \"before:inline-block\",\n \"before:[counter-increment:line]\",\n \"before:w-8\",\n \"before:mr-4\",\n \"before:text-right\",\n \"before:text-muted-foreground/50\",\n \"before:font-mono\",\n \"before:select-none\"\n);\n\n// Line rendering component\nconst LineSpan = ({\n keyedLine,\n showLineNumbers,\n}: {\n keyedLine: KeyedLine;\n showLineNumbers: boolean;\n}) => (\n <span className={showLineNumbers ? LINE_NUMBER_CLASSES : \"block\"}>\n {keyedLine.tokens.length === 0\n ? \"\\n\"\n : keyedLine.tokens.map(({ token, key }) => (\n <TokenSpan key={key} token={token} />\n ))}\n </span>\n);\n\n// Types\ntype CodeBlockProps = HTMLAttributes<HTMLDivElement> & {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n};\n\ninterface TokenizedCode {\n tokens: ThemedToken[][];\n fg: string;\n bg: string;\n}\n\ninterface CodeBlockContextType {\n code: string;\n}\n\n// Context\nconst CodeBlockContext = createContext<CodeBlockContextType>({\n code: \"\",\n});\n\n// Maps every github-light/github-dark token color onto a --shiki-* CSS\n// variable backed by the design-token palette (defined in index.tailwind.css\n// for :root and .dark), so code colors follow the active theme and meet\n// WCAG AA contrast on --shiki-bg in both modes.\nconst SHIKI_COLOR_REPLACEMENTS: Record<string, Record<string, string>> = {\n \"github-light\": {\n \"#24292e\": \"var(--shiki-fg)\",\n \"#6a737d\": \"var(--shiki-comment)\",\n \"#586069\": \"var(--shiki-comment)\",\n \"#d73a49\": \"var(--shiki-keyword)\",\n \"#b31d28\": \"var(--shiki-keyword)\",\n \"#005cc5\": \"var(--shiki-constant)\",\n \"#6f42c1\": \"var(--shiki-entity)\",\n \"#22863a\": \"var(--shiki-tag)\",\n \"#032f62\": \"var(--shiki-string)\",\n \"#e36209\": \"var(--shiki-variable)\",\n },\n \"github-dark\": {\n \"#e1e4e8\": \"var(--shiki-fg)\",\n \"#6a737d\": \"var(--shiki-comment)\",\n \"#d1d5da\": \"var(--shiki-comment)\",\n \"#f97583\": \"var(--shiki-keyword)\",\n \"#fdaeb7\": \"var(--shiki-keyword)\",\n \"#79b8ff\": \"var(--shiki-constant)\",\n \"#b392f0\": \"var(--shiki-entity)\",\n \"#85e89d\": \"var(--shiki-tag)\",\n \"#9ecbff\": \"var(--shiki-string)\",\n \"#dbedff\": \"var(--shiki-string)\",\n \"#ffab70\": \"var(--shiki-variable)\",\n },\n};\n\n// Token cache\nconst tokensCache = new Map<string, TokenizedCode>();\n\n// Subscribers for async token updates\nconst subscribers = new Map<string, Set<(result: TokenizedCode) => void>>();\n\nconst CACHE_KEY_SLICE_LENGTH = 100;\n\nconst getTokensCacheKey = (code: string, language: BundledLanguage) => {\n const start = code.slice(0, CACHE_KEY_SLICE_LENGTH);\n const end = code.length > CACHE_KEY_SLICE_LENGTH ? code.slice(-CACHE_KEY_SLICE_LENGTH) : \"\";\n return `${language}:${code.length}:${start}:${end}`;\n};\n\n// Create raw tokens for immediate display while highlighting loads\nconst createRawTokens = (code: string): TokenizedCode => ({\n bg: \"transparent\",\n fg: \"inherit\",\n tokens: code.split(\"\\n\").map((line) =>\n line === \"\"\n ? []\n : [\n {\n color: \"inherit\",\n content: line,\n } as ThemedToken,\n ]\n ),\n});\n\n// Synchronous highlight with callback for async results\nexport const highlightCode = (\n code: string,\n language: BundledLanguage,\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-callbacks)\n callback?: (result: TokenizedCode) => void\n): TokenizedCode | null => {\n const tokensCacheKey = getTokensCacheKey(code, language);\n\n // Return cached result if available\n const cached = tokensCache.get(tokensCacheKey);\n if (cached) {\n return cached;\n }\n\n // Subscribe callback if provided\n if (callback) {\n if (!subscribers.has(tokensCacheKey)) {\n subscribers.set(tokensCacheKey, new Set());\n }\n subscribers.get(tokensCacheKey)?.add(callback);\n }\n\n // Start highlighting in background - fire-and-forget async pattern.\n // The shared slim highlighter (SW-2007) loads shiki/core, the grammar, and\n // the themes through dynamic imports; unsupported languages fall back to\n // plaintext via the resolved `lang`.\n getCodeBlockHighlighter(language)\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then)\n .then(({ highlighter, lang }) => {\n const result = highlighter.codeToTokens(code, {\n colorReplacements: SHIKI_COLOR_REPLACEMENTS,\n lang,\n themes: {\n dark: \"github-dark\",\n light: \"github-light\",\n },\n });\n\n const tokenized: TokenizedCode = {\n bg: result.bg ?? \"transparent\",\n fg: result.fg ?? \"inherit\",\n tokens: result.tokens,\n };\n\n // Cache the result\n tokensCache.set(tokensCacheKey, tokenized);\n\n // Notify all subscribers\n const subs = subscribers.get(tokensCacheKey);\n if (subs) {\n for (const sub of subs) {\n sub(tokenized);\n }\n subscribers.delete(tokensCacheKey);\n }\n })\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then), eslint-plugin-promise(prefer-await-to-callbacks)\n .catch((error) => {\n console.error(\"Failed to highlight code:\", error);\n subscribers.delete(tokensCacheKey);\n });\n\n return null;\n};\n\nconst CodeBlockBody = memo(\n ({\n tokenized,\n showLineNumbers,\n className,\n }: {\n tokenized: TokenizedCode;\n showLineNumbers: boolean;\n className?: string;\n }) => {\n const keyedLines = useMemo(\n () => addKeysToTokens(tokenized.tokens),\n [tokenized.tokens]\n );\n\n return (\n <pre\n className={cn(\n // Shiki's dual-theme codeToTokens() returns \"transparent\"/\"inherit\"\n // for the top-level bg/fg in multi-theme mode — the real per-theme\n // colors only exist per-token (read via CSS vars in TokenSpan).\n // --shiki-bg/--shiki-fg re-resolve under .dark, so no dark: variant\n // is needed here.\n \"!bg-[var(--shiki-bg)] !text-[var(--shiki-fg)] m-0 p-4 text-sm\",\n className\n )}\n >\n <code\n className={cn(\n \"font-mono text-sm\",\n showLineNumbers && \"[counter-increment:line_0] [counter-reset:line]\"\n )}\n >\n {keyedLines.map((keyedLine) => (\n <LineSpan\n key={keyedLine.key}\n keyedLine={keyedLine}\n showLineNumbers={showLineNumbers}\n />\n ))}\n </code>\n </pre>\n );\n },\n (prevProps, nextProps) =>\n prevProps.tokenized === nextProps.tokenized &&\n prevProps.showLineNumbers === nextProps.showLineNumbers &&\n prevProps.className === nextProps.className\n);\n\nCodeBlockBody.displayName = \"CodeBlockBody\";\n\nexport const CodeBlockContainer = ({\n className,\n language,\n style,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { language: string }) => (\n <div\n className={cn(\n \"group relative w-full overflow-hidden rounded-md border bg-background text-foreground\",\n className\n )}\n data-language={language}\n style={{\n containIntrinsicSize: \"auto 200px\",\n contentVisibility: \"auto\",\n ...style,\n }}\n {...props}\n />\n);\n\nexport const CodeBlockHeader = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex items-center justify-between border-b bg-muted/80 px-3 py-2 text-muted-foreground text-xs\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockTitle = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockFilename = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn(\"font-mono\", className)} {...props}>\n {children}\n </span>\n);\n\nexport const CodeBlockActions = ({\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"-my-1 -mr-1 flex items-center gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockContent = ({\n code,\n language,\n showLineNumbers = false,\n}: {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n}) => {\n // Memoized raw tokens for immediate display\n const rawTokens = useMemo(() => createRawTokens(code), [code]);\n\n // Synchronous cache lookup — avoids setState in effect for cached results\n const syncTokens = useMemo(\n () => highlightCode(code, language) ?? rawTokens,\n [code, language, rawTokens]\n );\n\n // Async highlighting result (populated after shiki loads)\n const [asyncTokens, setAsyncTokens] = useState<TokenizedCode | null>(null);\n const asyncKeyRef = useRef({ code, language });\n\n // Invalidate stale async tokens synchronously during render\n if (\n asyncKeyRef.current.code !== code ||\n asyncKeyRef.current.language !== language\n ) {\n asyncKeyRef.current = { code, language };\n setAsyncTokens(null);\n }\n\n useEffect(() => {\n let cancelled = false;\n\n highlightCode(code, language, (result) => {\n if (!cancelled) {\n setAsyncTokens(result);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, language]);\n\n const tokenized = asyncTokens ?? syncTokens;\n\n return (\n <div className=\"relative overflow-auto\" tabIndex={0}>\n <CodeBlockBody showLineNumbers={showLineNumbers} tokenized={tokenized} />\n </div>\n );\n};\n\nexport const CodeBlock = ({\n code,\n language,\n showLineNumbers = false,\n className,\n children,\n ...props\n}: CodeBlockProps) => {\n const contextValue = useMemo(() => ({ code }), [code]);\n\n return (\n <CodeBlockContext.Provider value={contextValue}>\n <CodeBlockContainer className={className} language={language} {...props}>\n {children}\n <CodeBlockContent\n code={code}\n language={language}\n showLineNumbers={showLineNumbers}\n />\n </CodeBlockContainer>\n </CodeBlockContext.Provider>\n );\n};\n\nexport type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const CodeBlockCopyButton = ({\n onCopy,\n onError,\n timeout = 2000,\n children,\n className,\n ...props\n}: CodeBlockCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<number>(0);\n const { code } = useContext(CodeBlockContext);\n\n const copyToClipboard = useCallback(async () => {\n if (typeof window === \"undefined\" || !navigator?.clipboard?.writeText) {\n onError?.(new Error(\"Clipboard API not available\"));\n return;\n }\n\n try {\n if (!isCopied) {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n onCopy?.();\n timeoutRef.current = window.setTimeout(\n () => setIsCopied(false),\n timeout\n );\n }\n } catch (error) {\n onError?.(error as Error);\n }\n }, [code, onCopy, onError, timeout, isCopied]);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current);\n },\n []\n );\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button\n aria-label=\"Copy code\"\n className={cn(\"shrink-0\", className)}\n onClick={copyToClipboard}\n size=\"icon\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <Icon size={14} />}\n </Button>\n );\n};\n\nexport type CodeBlockLanguageSelectorProps = ComponentProps<typeof Select>;\n\nexport const CodeBlockLanguageSelector = (\n props: CodeBlockLanguageSelectorProps\n) => <Select {...props} />;\n\nexport type CodeBlockLanguageSelectorTriggerProps = ComponentProps<\n typeof SelectTrigger\n>;\n\nexport const CodeBlockLanguageSelectorTrigger = ({\n className,\n ...props\n}: CodeBlockLanguageSelectorTriggerProps) => (\n <SelectTrigger\n aria-label=\"Select language\"\n className={cn(\n \"h-7 border-none bg-transparent px-2 text-xs shadow-none\",\n className\n )}\n size=\"sm\"\n {...props}\n />\n);\n\nexport type CodeBlockLanguageSelectorValueProps = ComponentProps<\n typeof SelectValue\n>;\n\nexport const CodeBlockLanguageSelectorValue = (\n props: CodeBlockLanguageSelectorValueProps\n) => <SelectValue {...props} />;\n\nexport type CodeBlockLanguageSelectorContentProps = ComponentProps<\n typeof SelectContent\n>;\n\nexport const CodeBlockLanguageSelectorContent = ({\n align = \"end\",\n ...props\n}: CodeBlockLanguageSelectorContentProps) => (\n <SelectContent align={align} {...props} />\n);\n\nexport type CodeBlockLanguageSelectorItemProps = ComponentProps<\n typeof SelectItem\n>;\n\nexport const CodeBlockLanguageSelectorItem = (\n props: CodeBlockLanguageSelectorItemProps\n) => <SelectItem {...props} />;\n"],"names":["isItalic","fontStyle","isBold","isUnderline","addKeysToTokens","lines","line","lineIdx","token","tokenIdx","TokenSpan","jsx","LINE_NUMBER_CLASSES","cn","LineSpan","keyedLine","showLineNumbers","key","CodeBlockContext","createContext","SHIKI_COLOR_REPLACEMENTS","tokensCache","subscribers","CACHE_KEY_SLICE_LENGTH","getTokensCacheKey","code","language","start","end","createRawTokens","highlightCode","callback","tokensCacheKey","cached","getCodeBlockHighlighter","highlighter","lang","result","tokenized","subs","sub","error","CodeBlockBody","memo","className","keyedLines","useMemo","prevProps","nextProps","CodeBlockContainer","style","props","CodeBlockHeader","children","CodeBlockTitle","CodeBlockFilename","CodeBlockActions","CodeBlockContent","rawTokens","syncTokens","asyncTokens","setAsyncTokens","useState","asyncKeyRef","useRef","useEffect","cancelled","CodeBlock","contextValue","jsxs","CodeBlockCopyButton","onCopy","onError","timeout","isCopied","setIsCopied","timeoutRef","useContext","copyToClipboard","useCallback","Icon","CheckIcon","CopyIcon","Button","CodeBlockLanguageSelector","Select","CodeBlockLanguageSelectorTrigger","SelectTrigger","CodeBlockLanguageSelectorValue","SelectValue","CodeBlockLanguageSelectorContent","align","SelectContent","CodeBlockLanguageSelectorItem","SelectItem"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),k=require("@monaco-editor/react"),h=require("lucide-react"),i=require("react"),m=require("./button.cjs"),o=require("./tooltip.cjs"),M=require("../../hooks/use-code-editor-theme.cjs"),N=require("../../lib/utils.cjs"),R={light:"vs",dark:"vs-dark"},w=({value:l,onChange:p,language:f="python",theme:c,height:x=400,width:j="100%",options:T={},onCopy:n,onLaunch:r,disabled:t=!1})=>{const C=M.useCodeEditorTheme(),y=i.useRef(null),[E,a]=i.useState("Copy"),[S,u]=i.useState("Launch"),d=1e3,g=i.useCallback(s=>{n&&!t&&(n(s),a("Copied"),setTimeout(()=>{a("Copy")},d))},[n,t]),v=i.useCallback(s=>{r&&!t&&(r(s),u("Launched"),setTimeout(()=>{u("Launch")},d))},[r,t]),b=async s=>{y.current=s},q={minimap:{enabled:!1},scrollBeyondLastLine:!1,lineNumbers:"on",padding:{top:12,bottom:12,left:20,right:20},scrollbar:{vertical:"hidden",verticalScrollbarSize:0},readOnly:t,...T};return e.jsxs("div",{className:N.cn("rounded-2xl overflow-hidden relative border",t&&"opacity-60 cursor-not-allowed"),children:[e.jsxs("div",{className:"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]",children:[n&&e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx("div",{className:"w-8 h-8 flex items-center justify-center",children:e.jsx(m.Button,{className:"w-full h-full",variant:"outline",size:"icon-sm",onClick:()=>g(l),disabled:t,children:e.jsx(h.Copy,{})})})}),e.jsx(o.TooltipContent,{side:"bottom",children:E})]}),r&&e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx("div",{className:"w-8 h-8 flex items-center justify-center",children:e.jsx(m.Button,{className:"w-full h-full",variant:"outline",size:"icon-sm",onClick:()=>v(l),disabled:t,children:e.jsx(h.Rocket,{})})})}),e.jsx(o.TooltipContent,{side:"bottom",children:S})]})]}),e.jsx(k,{value:l,onChange:p,language:f,theme:c?R[c]:C.monacoTheme,height:x,width:j,options:q,beforeMount:b})]})};exports.CodeEditor=w;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),k=require("@monaco-editor/react"),h=require("lucide-react"),i=require("react"),m=require("./button.cjs"),o=require("./tooltip.cjs"),M=require("../../hooks/use-code-editor-theme.cjs"),N=require("../../lib/utils.cjs"),R={light:"vs",dark:"vs-dark"},w=({value:r,onChange:p,language:f="python",theme:c,height:x=400,width:j="100%",options:C={},onCopy:n,onLaunch:l,disabled:t=!1})=>{const T=M.useCodeEditorTheme(),y=i.useRef(null),[E,a]=i.useState("Copy"),[S,u]=i.useState("Launch"),d=1e3,g=i.useCallback(s=>{n&&!t&&(n(s),a("Copied"),setTimeout(()=>{a("Copy")},d))},[n,t]),v=i.useCallback(s=>{l&&!t&&(l(s),u("Launched"),setTimeout(()=>{u("Launch")},d))},[l,t]),b=async s=>{y.current=s},q={minimap:{enabled:!1},scrollBeyondLastLine:!1,lineNumbers:"on",padding:{top:12,bottom:12,left:20,right:20},scrollbar:{vertical:"hidden",verticalScrollbarSize:0},readOnly:t,...C};return e.jsxs("div",{className:N.cn("rounded-2xl overflow-hidden relative border",t&&"opacity-60 cursor-not-allowed"),children:[e.jsxs("div",{className:"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]",children:[n&&e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx("div",{className:"w-8 h-8 flex items-center justify-center",children:e.jsx(m.Button,{className:"w-full h-full",variant:"outline",size:"icon-sm",onClick:()=>g(r),disabled:t,"aria-label":"Copy code",children:e.jsx(h.Copy,{})})})}),e.jsx(o.TooltipContent,{side:"bottom",children:E})]}),l&&e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx("div",{className:"w-8 h-8 flex items-center justify-center",children:e.jsx(m.Button,{className:"w-full h-full",variant:"outline",size:"icon-sm",onClick:()=>v(r),disabled:t,"aria-label":"Launch code",children:e.jsx(h.Rocket,{})})})}),e.jsx(o.TooltipContent,{side:"bottom",children:S})]})]}),e.jsx(k,{value:r,onChange:p,language:f,theme:c?R[c]:T.monacoTheme,height:x,width:j,options:q,beforeMount:b})]})};exports.CodeEditor=w;
2
2
  //# sourceMappingURL=code-editor.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor.cjs","sources":["../../../src/components/ui/code-editor.tsx"],"sourcesContent":["import MonacoEditor from \"@monaco-editor/react\";\nimport { Copy, Rocket } from \"lucide-react\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport type { Monaco, OnChange } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useCodeEditorTheme } from \"@/hooks/use-code-editor-theme\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CodeEditorProps {\n value: string;\n onChange: OnChange;\n language?: string;\n theme?: \"light\" | \"dark\";\n height?: string | number;\n width?: string | number;\n options?: Record<string, unknown>;\n label?: string;\n onCopy?: (code: string) => void;\n onLaunch?: (code: string) => void;\n disabled?: boolean;\n}\n\n// Theme mapping for explicit theme prop overrides\nconst THEME_MAP = {\n light: \"vs\" as const,\n dark: \"vs-dark\" as const,\n};\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = \"python\",\n theme: themeProp,\n height = 400,\n width = \"100%\",\n options = {},\n onCopy,\n onLaunch,\n disabled = false,\n}) => {\n const editorTheme = useCodeEditorTheme();\n\n const monacoRef = useRef<Monaco | null>(null);\n const [copyState, setCopyState] = useState<\"Copy\" | \"Copied\">(\"Copy\");\n const [launchState, setLaunchState] = useState<\"Launch\" | \"Launched\">(\n \"Launch\"\n );\n /** Feedback reset delay in milliseconds */\n const FEEDBACK_RESET_DELAY_MS = 1000;\n\n const handleCopy = useCallback(\n (code: string) => {\n if (onCopy && !disabled) {\n onCopy(code);\n setCopyState(\"Copied\");\n setTimeout(() => {\n setCopyState(\"Copy\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onCopy, disabled]\n );\n\n const handleLaunch = useCallback(\n (code: string) => {\n if (onLaunch && !disabled) {\n onLaunch(code);\n setLaunchState(\"Launched\");\n setTimeout(() => {\n setLaunchState(\"Launch\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onLaunch, disabled]\n );\n\n const handleEditorWillMount = async (monaco: Monaco) => {\n monacoRef.current = monaco;\n };\n\n const defaultOptions = {\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: \"on\" as editor.LineNumbersType,\n padding: { top: 12, bottom: 12, left: 20, right: 20 },\n scrollbar: {\n vertical: \"hidden\" as const,\n verticalScrollbarSize: 0,\n },\n readOnly: disabled,\n ...options,\n };\n\n\n\n return (\n <div className={cn(\"rounded-2xl overflow-hidden relative border\", disabled && \"opacity-60 cursor-not-allowed\")}>\n <div className=\"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]\">\n {onCopy && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleCopy(value)}\n disabled={disabled}\n >\n <Copy />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {copyState}\n </TooltipContent>\n </Tooltip>\n )}\n {onLaunch && (\n <Tooltip >\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleLaunch(value)}\n disabled={disabled}\n >\n <Rocket />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {launchState}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n <MonacoEditor\n value={value}\n onChange={onChange}\n language={language}\n theme={themeProp ? THEME_MAP[themeProp] : editorTheme.monacoTheme}\n height={height}\n width={width}\n options={defaultOptions}\n beforeMount={handleEditorWillMount}\n />\n </div>\n );\n};\n\nexport { CodeEditor };\nexport default CodeEditor;\n"],"names":["THEME_MAP","CodeEditor","value","onChange","language","themeProp","height","width","options","onCopy","onLaunch","disabled","editorTheme","useCodeEditorTheme","monacoRef","useRef","copyState","setCopyState","useState","launchState","setLaunchState","FEEDBACK_RESET_DELAY_MS","handleCopy","useCallback","code","handleLaunch","handleEditorWillMount","monaco","defaultOptions","cn","jsxs","Tooltip","jsx","TooltipTrigger","Button","Copy","TooltipContent","Rocket","MonacoEditor"],"mappings":"6UA2BMA,EAAY,CAChB,MAAO,KACP,KAAM,SACR,EAEMC,EAAwC,CAAC,CAC7C,MAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,SACX,MAAOC,EACP,OAAAC,EAAS,IACT,MAAAC,EAAQ,OACR,QAAAC,EAAU,CAAA,EACV,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,EACb,IAAM,CACJ,MAAMC,EAAcC,EAAAA,mBAAA,EAEdC,EAAYC,EAAAA,OAAsB,IAAI,EACtC,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAA4B,MAAM,EAC9D,CAACC,EAAaC,CAAc,EAAIF,EAAAA,SACpC,QAAA,EAGIG,EAA0B,IAE1BC,EAAaC,EAAAA,YAChBC,GAAiB,CACZf,GAAU,CAACE,IACbF,EAAOe,CAAI,EACXP,EAAa,QAAQ,EACrB,WAAW,IAAM,CACfA,EAAa,MAAM,CACrB,EAAGI,CAAuB,EAE9B,EACA,CAACZ,EAAQE,CAAQ,CAAA,EAGbc,EAAeF,EAAAA,YAClBC,GAAiB,CACZd,GAAY,CAACC,IACfD,EAASc,CAAI,EACbJ,EAAe,UAAU,EACzB,WAAW,IAAM,CACfA,EAAe,QAAQ,CACzB,EAAGC,CAAuB,EAE9B,EACA,CAACX,EAAUC,CAAQ,CAAA,EAGfe,EAAwB,MAAOC,GAAmB,CACtDb,EAAU,QAAUa,CACtB,EAEMC,EAAiB,CACrB,QAAS,CAAE,QAAS,EAAA,EACpB,qBAAsB,GACtB,YAAa,KACb,QAAS,CAAE,IAAK,GAAI,OAAQ,GAAI,KAAM,GAAI,MAAO,EAAA,EACjD,UAAW,CACT,SAAU,SACV,sBAAuB,CAAA,EAEzB,SAAUjB,EACV,GAAGH,CAAA,EAKL,cACG,MAAA,CAAI,UAAWqB,EAAAA,GAAG,8CAA+ClB,GAAY,+BAA+B,EAC3G,SAAA,CAAAmB,EAAAA,KAAC,MAAA,CAAI,UAAU,4DACZ,SAAA,CAAArB,UACEsB,UAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAAA,gBAAe,QAAO,GACrB,SAAAD,MAAC,MAAA,CAAI,UAAU,2CACb,SAAAA,EAAAA,IAACE,EAAAA,OAAA,CACC,UAAU,gBACV,QAAQ,UACR,KAAK,UACL,QAAS,IAAMZ,EAAWpB,CAAK,EAC/B,SAAAS,EAEA,eAACwB,EAAAA,KAAA,CAAA,CAAK,CAAA,CAAA,EAEV,CAAA,CACF,EACAH,EAAAA,IAACI,EAAAA,eAAA,CAAe,KAAK,SAClB,SAAApB,CAAA,CACH,CAAA,EACF,EAEDN,UACEqB,UAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAAA,gBAAe,QAAO,GACrB,SAAAD,MAAC,MAAA,CAAI,UAAU,2CACb,SAAAA,EAAAA,IAACE,EAAAA,OAAA,CACC,UAAU,gBACV,QAAQ,UACR,KAAK,UACL,QAAS,IAAMT,EAAavB,CAAK,EACjC,SAAAS,EAEA,eAAC0B,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,EAEZ,CAAA,CACF,EACAL,EAAAA,IAACI,EAAAA,eAAA,CAAe,KAAK,SAClB,SAAAjB,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EAEJ,EACAa,EAAAA,IAACM,EAAA,CACC,MAAApC,EACA,SAAAC,EACA,SAAAC,EACA,MAAOC,EAAYL,EAAUK,CAAS,EAAIO,EAAY,YACtD,OAAAN,EACA,MAAAC,EACA,QAASqB,EACT,YAAaF,CAAA,CAAA,CACf,EACF,CAEJ"}
1
+ {"version":3,"file":"code-editor.cjs","sources":["../../../src/components/ui/code-editor.tsx"],"sourcesContent":["import MonacoEditor from \"@monaco-editor/react\";\nimport { Copy, Rocket } from \"lucide-react\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport type { Monaco, OnChange } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useCodeEditorTheme } from \"@/hooks/use-code-editor-theme\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CodeEditorProps {\n value: string;\n onChange: OnChange;\n language?: string;\n theme?: \"light\" | \"dark\";\n height?: string | number;\n width?: string | number;\n options?: Record<string, unknown>;\n label?: string;\n onCopy?: (code: string) => void;\n onLaunch?: (code: string) => void;\n disabled?: boolean;\n}\n\n// Theme mapping for explicit theme prop overrides\nconst THEME_MAP = {\n light: \"vs\" as const,\n dark: \"vs-dark\" as const,\n};\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = \"python\",\n theme: themeProp,\n height = 400,\n width = \"100%\",\n options = {},\n onCopy,\n onLaunch,\n disabled = false,\n}) => {\n const editorTheme = useCodeEditorTheme();\n\n const monacoRef = useRef<Monaco | null>(null);\n const [copyState, setCopyState] = useState<\"Copy\" | \"Copied\">(\"Copy\");\n const [launchState, setLaunchState] = useState<\"Launch\" | \"Launched\">(\n \"Launch\"\n );\n /** Feedback reset delay in milliseconds */\n const FEEDBACK_RESET_DELAY_MS = 1000;\n\n const handleCopy = useCallback(\n (code: string) => {\n if (onCopy && !disabled) {\n onCopy(code);\n setCopyState(\"Copied\");\n setTimeout(() => {\n setCopyState(\"Copy\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onCopy, disabled]\n );\n\n const handleLaunch = useCallback(\n (code: string) => {\n if (onLaunch && !disabled) {\n onLaunch(code);\n setLaunchState(\"Launched\");\n setTimeout(() => {\n setLaunchState(\"Launch\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onLaunch, disabled]\n );\n\n const handleEditorWillMount = async (monaco: Monaco) => {\n monacoRef.current = monaco;\n };\n\n const defaultOptions = {\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: \"on\" as editor.LineNumbersType,\n padding: { top: 12, bottom: 12, left: 20, right: 20 },\n scrollbar: {\n vertical: \"hidden\" as const,\n verticalScrollbarSize: 0,\n },\n readOnly: disabled,\n ...options,\n };\n\n\n\n return (\n <div className={cn(\"rounded-2xl overflow-hidden relative border\", disabled && \"opacity-60 cursor-not-allowed\")}>\n <div className=\"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]\">\n {onCopy && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleCopy(value)}\n disabled={disabled}\n aria-label=\"Copy code\"\n >\n <Copy />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {copyState}\n </TooltipContent>\n </Tooltip>\n )}\n {onLaunch && (\n <Tooltip >\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleLaunch(value)}\n disabled={disabled}\n aria-label=\"Launch code\"\n >\n <Rocket />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {launchState}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n <MonacoEditor\n value={value}\n onChange={onChange}\n language={language}\n theme={themeProp ? THEME_MAP[themeProp] : editorTheme.monacoTheme}\n height={height}\n width={width}\n options={defaultOptions}\n beforeMount={handleEditorWillMount}\n />\n </div>\n );\n};\n\nexport { CodeEditor };\nexport default CodeEditor;\n"],"names":["THEME_MAP","CodeEditor","value","onChange","language","themeProp","height","width","options","onCopy","onLaunch","disabled","editorTheme","useCodeEditorTheme","monacoRef","useRef","copyState","setCopyState","useState","launchState","setLaunchState","FEEDBACK_RESET_DELAY_MS","handleCopy","useCallback","code","handleLaunch","handleEditorWillMount","monaco","defaultOptions","cn","jsxs","Tooltip","jsx","TooltipTrigger","Button","Copy","TooltipContent","Rocket","MonacoEditor"],"mappings":"6UA2BMA,EAAY,CAChB,MAAO,KACP,KAAM,SACR,EAEMC,EAAwC,CAAC,CAC7C,MAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,SACX,MAAOC,EACP,OAAAC,EAAS,IACT,MAAAC,EAAQ,OACR,QAAAC,EAAU,CAAA,EACV,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,EACb,IAAM,CACJ,MAAMC,EAAcC,EAAAA,mBAAA,EAEdC,EAAYC,EAAAA,OAAsB,IAAI,EACtC,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAA4B,MAAM,EAC9D,CAACC,EAAaC,CAAc,EAAIF,EAAAA,SACpC,QAAA,EAGIG,EAA0B,IAE1BC,EAAaC,EAAAA,YAChBC,GAAiB,CACZf,GAAU,CAACE,IACbF,EAAOe,CAAI,EACXP,EAAa,QAAQ,EACrB,WAAW,IAAM,CACfA,EAAa,MAAM,CACrB,EAAGI,CAAuB,EAE9B,EACA,CAACZ,EAAQE,CAAQ,CAAA,EAGbc,EAAeF,EAAAA,YAClBC,GAAiB,CACZd,GAAY,CAACC,IACfD,EAASc,CAAI,EACbJ,EAAe,UAAU,EACzB,WAAW,IAAM,CACfA,EAAe,QAAQ,CACzB,EAAGC,CAAuB,EAE9B,EACA,CAACX,EAAUC,CAAQ,CAAA,EAGfe,EAAwB,MAAOC,GAAmB,CACtDb,EAAU,QAAUa,CACtB,EAEMC,EAAiB,CACrB,QAAS,CAAE,QAAS,EAAA,EACpB,qBAAsB,GACtB,YAAa,KACb,QAAS,CAAE,IAAK,GAAI,OAAQ,GAAI,KAAM,GAAI,MAAO,EAAA,EACjD,UAAW,CACT,SAAU,SACV,sBAAuB,CAAA,EAEzB,SAAUjB,EACV,GAAGH,CAAA,EAKL,cACG,MAAA,CAAI,UAAWqB,EAAAA,GAAG,8CAA+ClB,GAAY,+BAA+B,EAC3G,SAAA,CAAAmB,EAAAA,KAAC,MAAA,CAAI,UAAU,4DACZ,SAAA,CAAArB,UACEsB,UAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAAA,gBAAe,QAAO,GACrB,SAAAD,MAAC,MAAA,CAAI,UAAU,2CACb,SAAAA,EAAAA,IAACE,EAAAA,OAAA,CACC,UAAU,gBACV,QAAQ,UACR,KAAK,UACL,QAAS,IAAMZ,EAAWpB,CAAK,EAC/B,SAAAS,EACA,aAAW,YAEX,eAACwB,EAAAA,KAAA,CAAA,CAAK,CAAA,CAAA,EAEV,CAAA,CACF,EACAH,EAAAA,IAACI,EAAAA,eAAA,CAAe,KAAK,SAClB,SAAApB,CAAA,CACH,CAAA,EACF,EAEDN,UACEqB,UAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAAA,gBAAe,QAAO,GACrB,SAAAD,MAAC,MAAA,CAAI,UAAU,2CACb,SAAAA,EAAAA,IAACE,EAAAA,OAAA,CACC,UAAU,gBACV,QAAQ,UACR,KAAK,UACL,QAAS,IAAMT,EAAavB,CAAK,EACjC,SAAAS,EACA,aAAW,cAEX,eAAC0B,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,EAEZ,CAAA,CACF,EACAL,EAAAA,IAACI,EAAAA,eAAA,CAAe,KAAK,SAClB,SAAAjB,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EAEJ,EACAa,EAAAA,IAACM,EAAA,CACC,MAAApC,EACA,SAAAC,EACA,SAAAC,EACA,MAAOC,EAAYL,EAAUK,CAAS,EAAIO,EAAY,YACtD,OAAAN,EACA,MAAAC,EACA,QAASqB,EACT,YAAaF,CAAA,CAAA,CACf,EACF,CAEJ"}
@@ -21,25 +21,25 @@ const D = {
21
21
  onLaunch: i,
22
22
  disabled: t = !1
23
23
  }) => {
24
- const x = A(), g = _(null), [N, s] = d("Copy"), [k, a] = d(
24
+ const x = A(), g = _(null), [N, a] = d("Copy"), [b, s] = d(
25
25
  "Launch"
26
- ), m = 1e3, w = h(
26
+ ), m = 1e3, k = h(
27
27
  (o) => {
28
- r && !t && (r(o), s("Copied"), setTimeout(() => {
29
- s("Copy");
28
+ r && !t && (r(o), a("Copied"), setTimeout(() => {
29
+ a("Copy");
30
30
  }, m));
31
31
  },
32
32
  [r, t]
33
- ), M = h(
33
+ ), w = h(
34
34
  (o) => {
35
- i && !t && (i(o), a("Launched"), setTimeout(() => {
36
- a("Launch");
35
+ i && !t && (i(o), s("Launched"), setTimeout(() => {
36
+ s("Launch");
37
37
  }, m));
38
38
  },
39
39
  [i, t]
40
40
  ), L = async (o) => {
41
41
  g.current = o;
42
- }, b = {
42
+ }, M = {
43
43
  minimap: { enabled: !1 },
44
44
  scrollBeyondLastLine: !1,
45
45
  lineNumbers: "on",
@@ -60,8 +60,9 @@ const D = {
60
60
  className: "w-full h-full",
61
61
  variant: "outline",
62
62
  size: "icon-sm",
63
- onClick: () => w(n),
63
+ onClick: () => k(n),
64
64
  disabled: t,
65
+ "aria-label": "Copy code",
65
66
  children: /* @__PURE__ */ e(z, {})
66
67
  }
67
68
  ) }) }),
@@ -74,12 +75,13 @@ const D = {
74
75
  className: "w-full h-full",
75
76
  variant: "outline",
76
77
  size: "icon-sm",
77
- onClick: () => M(n),
78
+ onClick: () => w(n),
78
79
  disabled: t,
80
+ "aria-label": "Launch code",
79
81
  children: /* @__PURE__ */ e(R, {})
80
82
  }
81
83
  ) }) }),
82
- /* @__PURE__ */ e(C, { side: "bottom", children: k })
84
+ /* @__PURE__ */ e(C, { side: "bottom", children: b })
83
85
  ] })
84
86
  ] }),
85
87
  /* @__PURE__ */ e(
@@ -91,7 +93,7 @@ const D = {
91
93
  theme: c ? D[c] : x.monacoTheme,
92
94
  height: T,
93
95
  width: v,
94
- options: b,
96
+ options: M,
95
97
  beforeMount: L
96
98
  }
97
99
  )
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor.js","sources":["../../../src/components/ui/code-editor.tsx"],"sourcesContent":["import MonacoEditor from \"@monaco-editor/react\";\nimport { Copy, Rocket } from \"lucide-react\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport type { Monaco, OnChange } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useCodeEditorTheme } from \"@/hooks/use-code-editor-theme\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CodeEditorProps {\n value: string;\n onChange: OnChange;\n language?: string;\n theme?: \"light\" | \"dark\";\n height?: string | number;\n width?: string | number;\n options?: Record<string, unknown>;\n label?: string;\n onCopy?: (code: string) => void;\n onLaunch?: (code: string) => void;\n disabled?: boolean;\n}\n\n// Theme mapping for explicit theme prop overrides\nconst THEME_MAP = {\n light: \"vs\" as const,\n dark: \"vs-dark\" as const,\n};\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = \"python\",\n theme: themeProp,\n height = 400,\n width = \"100%\",\n options = {},\n onCopy,\n onLaunch,\n disabled = false,\n}) => {\n const editorTheme = useCodeEditorTheme();\n\n const monacoRef = useRef<Monaco | null>(null);\n const [copyState, setCopyState] = useState<\"Copy\" | \"Copied\">(\"Copy\");\n const [launchState, setLaunchState] = useState<\"Launch\" | \"Launched\">(\n \"Launch\"\n );\n /** Feedback reset delay in milliseconds */\n const FEEDBACK_RESET_DELAY_MS = 1000;\n\n const handleCopy = useCallback(\n (code: string) => {\n if (onCopy && !disabled) {\n onCopy(code);\n setCopyState(\"Copied\");\n setTimeout(() => {\n setCopyState(\"Copy\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onCopy, disabled]\n );\n\n const handleLaunch = useCallback(\n (code: string) => {\n if (onLaunch && !disabled) {\n onLaunch(code);\n setLaunchState(\"Launched\");\n setTimeout(() => {\n setLaunchState(\"Launch\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onLaunch, disabled]\n );\n\n const handleEditorWillMount = async (monaco: Monaco) => {\n monacoRef.current = monaco;\n };\n\n const defaultOptions = {\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: \"on\" as editor.LineNumbersType,\n padding: { top: 12, bottom: 12, left: 20, right: 20 },\n scrollbar: {\n vertical: \"hidden\" as const,\n verticalScrollbarSize: 0,\n },\n readOnly: disabled,\n ...options,\n };\n\n\n\n return (\n <div className={cn(\"rounded-2xl overflow-hidden relative border\", disabled && \"opacity-60 cursor-not-allowed\")}>\n <div className=\"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]\">\n {onCopy && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleCopy(value)}\n disabled={disabled}\n >\n <Copy />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {copyState}\n </TooltipContent>\n </Tooltip>\n )}\n {onLaunch && (\n <Tooltip >\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleLaunch(value)}\n disabled={disabled}\n >\n <Rocket />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {launchState}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n <MonacoEditor\n value={value}\n onChange={onChange}\n language={language}\n theme={themeProp ? THEME_MAP[themeProp] : editorTheme.monacoTheme}\n height={height}\n width={width}\n options={defaultOptions}\n beforeMount={handleEditorWillMount}\n />\n </div>\n );\n};\n\nexport { CodeEditor };\nexport default CodeEditor;\n"],"names":["THEME_MAP","CodeEditor","value","onChange","language","themeProp","height","width","options","onCopy","onLaunch","disabled","editorTheme","useCodeEditorTheme","monacoRef","useRef","copyState","setCopyState","useState","launchState","setLaunchState","FEEDBACK_RESET_DELAY_MS","handleCopy","useCallback","code","handleLaunch","handleEditorWillMount","monaco","defaultOptions","cn","jsxs","Tooltip","jsx","TooltipTrigger","Button","Copy","TooltipContent","Rocket","MonacoEditor"],"mappings":"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"}
1
+ {"version":3,"file":"code-editor.js","sources":["../../../src/components/ui/code-editor.tsx"],"sourcesContent":["import MonacoEditor from \"@monaco-editor/react\";\nimport { Copy, Rocket } from \"lucide-react\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport type { Monaco, OnChange } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useCodeEditorTheme } from \"@/hooks/use-code-editor-theme\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CodeEditorProps {\n value: string;\n onChange: OnChange;\n language?: string;\n theme?: \"light\" | \"dark\";\n height?: string | number;\n width?: string | number;\n options?: Record<string, unknown>;\n label?: string;\n onCopy?: (code: string) => void;\n onLaunch?: (code: string) => void;\n disabled?: boolean;\n}\n\n// Theme mapping for explicit theme prop overrides\nconst THEME_MAP = {\n light: \"vs\" as const,\n dark: \"vs-dark\" as const,\n};\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value,\n onChange,\n language = \"python\",\n theme: themeProp,\n height = 400,\n width = \"100%\",\n options = {},\n onCopy,\n onLaunch,\n disabled = false,\n}) => {\n const editorTheme = useCodeEditorTheme();\n\n const monacoRef = useRef<Monaco | null>(null);\n const [copyState, setCopyState] = useState<\"Copy\" | \"Copied\">(\"Copy\");\n const [launchState, setLaunchState] = useState<\"Launch\" | \"Launched\">(\n \"Launch\"\n );\n /** Feedback reset delay in milliseconds */\n const FEEDBACK_RESET_DELAY_MS = 1000;\n\n const handleCopy = useCallback(\n (code: string) => {\n if (onCopy && !disabled) {\n onCopy(code);\n setCopyState(\"Copied\");\n setTimeout(() => {\n setCopyState(\"Copy\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onCopy, disabled]\n );\n\n const handleLaunch = useCallback(\n (code: string) => {\n if (onLaunch && !disabled) {\n onLaunch(code);\n setLaunchState(\"Launched\");\n setTimeout(() => {\n setLaunchState(\"Launch\");\n }, FEEDBACK_RESET_DELAY_MS);\n }\n },\n [onLaunch, disabled]\n );\n\n const handleEditorWillMount = async (monaco: Monaco) => {\n monacoRef.current = monaco;\n };\n\n const defaultOptions = {\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: \"on\" as editor.LineNumbersType,\n padding: { top: 12, bottom: 12, left: 20, right: 20 },\n scrollbar: {\n vertical: \"hidden\" as const,\n verticalScrollbarSize: 0,\n },\n readOnly: disabled,\n ...options,\n };\n\n\n\n return (\n <div className={cn(\"rounded-2xl overflow-hidden relative border\", disabled && \"opacity-60 cursor-not-allowed\")}>\n <div className=\"ml-auto flex gap-2 px-4 py-2 absolute top-0 right-0 z-[1]\">\n {onCopy && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleCopy(value)}\n disabled={disabled}\n aria-label=\"Copy code\"\n >\n <Copy />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {copyState}\n </TooltipContent>\n </Tooltip>\n )}\n {onLaunch && (\n <Tooltip >\n <TooltipTrigger asChild>\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <Button\n className=\"w-full h-full\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => handleLaunch(value)}\n disabled={disabled}\n aria-label=\"Launch code\"\n >\n <Rocket />\n </Button>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {launchState}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n <MonacoEditor\n value={value}\n onChange={onChange}\n language={language}\n theme={themeProp ? THEME_MAP[themeProp] : editorTheme.monacoTheme}\n height={height}\n width={width}\n options={defaultOptions}\n beforeMount={handleEditorWillMount}\n />\n </div>\n );\n};\n\nexport { CodeEditor };\nexport default CodeEditor;\n"],"names":["THEME_MAP","CodeEditor","value","onChange","language","themeProp","height","width","options","onCopy","onLaunch","disabled","editorTheme","useCodeEditorTheme","monacoRef","useRef","copyState","setCopyState","useState","launchState","setLaunchState","FEEDBACK_RESET_DELAY_MS","handleCopy","useCallback","code","handleLaunch","handleEditorWillMount","monaco","defaultOptions","cn","jsxs","Tooltip","jsx","TooltipTrigger","Button","Copy","TooltipContent","Rocket","MonacoEditor"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("@base-ui/react"),b=require("lucide-react"),m=require("react"),p=require("./button.cjs"),i=require("./input-group.cjs"),s=require("../../lib/utils.cjs");function x(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const a in o)if(a!=="default"){const r=Object.getOwnPropertyDescriptor(o,a);Object.defineProperty(e,a,r.get?r:{enumerable:!0,get:()=>o[a]})}}return e.default=o,Object.freeze(e)}const h=x(m),g=n.Combobox.Root;function C({...o}){return t.jsx(n.Combobox.Value,{"data-slot":"combobox-value",...o})}function d({className:o,children:e,...a}){return t.jsxs(n.Combobox.Trigger,{"data-slot":"combobox-trigger",className:s.cn("[&_svg:not([class*='size-'])]:size-4",o),...a,children:[e,t.jsx(b.ChevronDownIcon,{className:"pointer-events-none size-4 text-muted-foreground"})]})}function f({className:o,...e}){return t.jsx(n.Combobox.Clear,{"data-slot":"combobox-clear",render:t.jsx(i.InputGroupButton,{variant:"ghost",size:"icon-xs"}),className:s.cn(o),...e,children:t.jsx(b.XIcon,{className:"pointer-events-none"})})}function v({className:o,children:e,disabled:a=!1,showTrigger:r=!0,showClear:l=!1,...c}){return t.jsxs(i.InputGroup,{className:s.cn("w-auto bg-card",o),children:[t.jsx(n.Combobox.Input,{render:t.jsx(i.InputGroupInput,{disabled:a}),...c}),t.jsxs(i.InputGroupAddon,{align:"inline-end",children:[r&&t.jsx(i.InputGroupButton,{size:"icon-xs",variant:"ghost",asChild:!0,"data-slot":"input-group-button",className:"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",disabled:a,children:t.jsx(d,{})}),l&&t.jsx(f,{disabled:a})]}),e]})}function j({className:o,side:e="bottom",sideOffset:a=6,align:r="start",alignOffset:l=0,anchor:c,...u}){return t.jsx(n.Combobox.Portal,{children:t.jsx(n.Combobox.Positioner,{side:e,sideOffset:a,align:r,alignOffset:l,anchor:c,className:"isolate z-50",children:t.jsx(n.Combobox.Popup,{"data-slot":"combobox-content","data-chips":!!c,className:s.cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",o),...u})})})}function w({className:o,...e}){return t.jsx(n.Combobox.List,{"data-slot":"combobox-list",className:s.cn("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",o),...e})}function y({className:o,children:e,...a}){return t.jsxs(n.Combobox.Item,{"data-slot":"combobox-item",className:s.cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",o),...a,children:[e,t.jsx(n.Combobox.ItemIndicator,{render:t.jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:t.jsx(b.CheckIcon,{className:"pointer-events-none"})})]})}function N({className:o,...e}){return t.jsx(n.Combobox.Group,{"data-slot":"combobox-group",className:s.cn(o),...e})}function I({className:o,...e}){return t.jsx(n.Combobox.GroupLabel,{"data-slot":"combobox-label",className:s.cn("px-2 py-1.5 text-xs text-muted-foreground",o),...e})}function z({...o}){return t.jsx(n.Combobox.Collection,{"data-slot":"combobox-collection",...o})}function G({className:o,...e}){return t.jsx(n.Combobox.Empty,{"data-slot":"combobox-empty",className:s.cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex",o),...e})}function q({className:o,...e}){return t.jsx(n.Combobox.Separator,{"data-slot":"combobox-separator",className:s.cn("-mx-1 my-1 h-px bg-border",o),...e})}function R({className:o,...e}){return t.jsx(n.Combobox.Chips,{"data-slot":"combobox-chips",className:s.cn("group/chips flex min-h-12 flex-wrap items-center gap-1 rounded-md border border-input bg-card bg-clip-padding px-4 py-1 text-sm transition-colors has-[[data-slot=combobox-chip-input]:focus-visible]:border-ring has-[[data-slot=combobox-chip-input]:focus-visible]:shadow-focus has-aria-invalid:border-destructive has-aria-invalid:shadow-focus has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50",o),...e})}function S({className:o,children:e,showRemove:a=!0,...r}){return t.jsxs(n.Combobox.Chip,{"data-slot":"combobox-chip",className:s.cn("flex h-[calc(--spacing(6.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",o),...r,children:[e,a&&t.jsx(n.Combobox.ChipRemove,{render:t.jsx(p.Button,{variant:"ghost",size:"icon-xs"}),className:"-ml-1 opacity-50 hover:opacity-100","data-slot":"combobox-chip-remove",children:t.jsx(b.XIcon,{className:"pointer-events-none"})})]})}function _({className:o,...e}){return t.jsx(n.Combobox.Input,{"data-slot":"combobox-chip-input",className:s.cn("min-w-16 flex-1 outline-none group-has-data-[slot=combobox-chip]/chips:placeholder:text-transparent",o),...e})}function L(){return h.useRef(null)}exports.Combobox=g;exports.ComboboxChip=S;exports.ComboboxChips=R;exports.ComboboxChipsInput=_;exports.ComboboxCollection=z;exports.ComboboxContent=j;exports.ComboboxEmpty=G;exports.ComboboxGroup=N;exports.ComboboxInput=v;exports.ComboboxItem=y;exports.ComboboxLabel=I;exports.ComboboxList=w;exports.ComboboxSeparator=q;exports.ComboboxTrigger=d;exports.ComboboxValue=C;exports.useComboboxAnchor=L;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("@base-ui/react"),b=require("lucide-react"),m=require("react"),p=require("./button.cjs"),i=require("./input-group.cjs"),r=require("../../lib/utils.cjs");function x(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:()=>o[n]})}}return e.default=o,Object.freeze(e)}const h=x(m),g=a.Combobox.Root;function C({...o}){return t.jsx(a.Combobox.Value,{"data-slot":"combobox-value",...o})}function d({className:o,children:e,...n}){return t.jsxs(a.Combobox.Trigger,{"aria-label":"Toggle options","data-slot":"combobox-trigger",className:r.cn("[&_svg:not([class*='size-'])]:size-4",o),...n,children:[e,t.jsx(b.ChevronDownIcon,{className:"pointer-events-none size-4 text-muted-foreground"})]})}function f({className:o,...e}){return t.jsx(a.Combobox.Clear,{"aria-label":"Clear","data-slot":"combobox-clear",render:t.jsx(i.InputGroupButton,{variant:"ghost",size:"icon-xs"}),className:r.cn(o),...e,children:t.jsx(b.XIcon,{className:"pointer-events-none"})})}function v({className:o,children:e,disabled:n=!1,showTrigger:s=!0,showClear:l=!1,...c}){return t.jsxs(i.InputGroup,{className:r.cn("w-auto bg-card",o),children:[t.jsx(a.Combobox.Input,{render:t.jsx(i.InputGroupInput,{disabled:n}),...c}),t.jsxs(i.InputGroupAddon,{align:"inline-end",children:[s&&t.jsx(i.InputGroupButton,{size:"icon-xs",variant:"ghost",asChild:!0,"data-slot":"input-group-button",className:"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",disabled:n,children:t.jsx(d,{})}),l&&t.jsx(f,{disabled:n})]}),e]})}function j({className:o,side:e="bottom",sideOffset:n=6,align:s="start",alignOffset:l=0,anchor:c,...u}){return t.jsx(a.Combobox.Portal,{children:t.jsx(a.Combobox.Positioner,{side:e,sideOffset:n,align:s,alignOffset:l,anchor:c,className:"isolate z-50",children:t.jsx(a.Combobox.Popup,{"data-slot":"combobox-content","data-chips":!!c,className:r.cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-elevation-4 ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",o),...u})})})}function w({className:o,...e}){return t.jsx(a.Combobox.List,{"data-slot":"combobox-list",className:r.cn("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",o),...e})}function y({className:o,children:e,...n}){return t.jsxs(a.Combobox.Item,{"data-slot":"combobox-item",className:r.cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",o),...n,children:[e,t.jsx(a.Combobox.ItemIndicator,{render:t.jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:t.jsx(b.CheckIcon,{className:"pointer-events-none"})})]})}function N({className:o,...e}){return t.jsx(a.Combobox.Group,{"data-slot":"combobox-group",className:r.cn(o),...e})}function I({className:o,...e}){return t.jsx(a.Combobox.GroupLabel,{"data-slot":"combobox-label",className:r.cn("px-2 py-1.5 text-xs text-muted-foreground",o),...e})}function z({...o}){return t.jsx(a.Combobox.Collection,{"data-slot":"combobox-collection",...o})}function G({className:o,...e}){return t.jsx(a.Combobox.Empty,{"data-slot":"combobox-empty",className:r.cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex",o),...e})}function R({className:o,...e}){return t.jsx(a.Combobox.Separator,{"data-slot":"combobox-separator","aria-hidden":"true",className:r.cn("-mx-1 my-1 h-px bg-border",o),...e})}function q({className:o,...e}){return t.jsx(a.Combobox.Chips,{"data-slot":"combobox-chips",className:r.cn("group/chips flex min-h-12 flex-wrap items-center gap-1 rounded-md border border-input bg-card bg-clip-padding px-4 py-1 text-sm transition-colors has-[[data-slot=combobox-chip-input]:focus-visible]:border-ring has-[[data-slot=combobox-chip-input]:focus-visible]:shadow-focus has-aria-invalid:border-destructive has-aria-invalid:shadow-focus has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50",o),...e})}function S({className:o,children:e,showRemove:n=!0,...s}){return t.jsxs(a.Combobox.Chip,{"data-slot":"combobox-chip",className:r.cn("flex h-[calc(--spacing(6.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",o),...s,children:[e,n&&t.jsx(a.Combobox.ChipRemove,{"aria-label":"Remove",render:t.jsx(p.Button,{variant:"ghost",size:"icon-xs"}),className:"-ml-1 opacity-50 hover:opacity-100","data-slot":"combobox-chip-remove",children:t.jsx(b.XIcon,{className:"pointer-events-none"})})]})}function _({className:o,...e}){return t.jsx(a.Combobox.Input,{"data-slot":"combobox-chip-input",className:r.cn("min-w-16 flex-1 outline-none group-has-data-[slot=combobox-chip]/chips:placeholder:text-transparent",o),...e})}function L(){return h.useRef(null)}exports.Combobox=g;exports.ComboboxChip=S;exports.ComboboxChips=q;exports.ComboboxChipsInput=_;exports.ComboboxCollection=z;exports.ComboboxContent=j;exports.ComboboxEmpty=G;exports.ComboboxGroup=N;exports.ComboboxInput=v;exports.ComboboxItem=y;exports.ComboboxLabel=I;exports.ComboboxList=w;exports.ComboboxSeparator=R;exports.ComboboxTrigger=d;exports.ComboboxValue=C;exports.useComboboxAnchor=L;
2
2
  //# sourceMappingURL=combobox.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.cjs","sources":["../../../src/components/ui/combobox.tsx"],"sourcesContent":["\"use client\"\n\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\nimport { ChevronDownIcon, XIcon, CheckIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return <ComboboxPrimitive.Value data-slot=\"combobox-value\" {...props} />\n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n <ComboboxPrimitive.Trigger\n data-slot=\"combobox-trigger\"\n className={cn(\"[&_svg:not([class*='size-'])]:size-4\", className)}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n </ComboboxPrimitive.Trigger>\n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n <ComboboxPrimitive.Clear\n data-slot=\"combobox-clear\"\n render={<InputGroupButton variant=\"ghost\" size=\"icon-xs\" />}\n className={cn(className)}\n {...props}\n >\n <XIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.Clear>\n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n <InputGroup className={cn(\"w-auto bg-card\", className)}>\n <ComboboxPrimitive.Input\n render={<InputGroupInput disabled={disabled} />}\n {...props}\n />\n <InputGroupAddon align=\"inline-end\">\n {showTrigger && (\n <InputGroupButton\n size=\"icon-xs\"\n variant=\"ghost\"\n asChild\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n >\n <ComboboxTrigger />\n </InputGroupButton>\n )}\n {showClear && <ComboboxClear disabled={disabled} />}\n </InputGroupAddon>\n {children}\n </InputGroup>\n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n <ComboboxPrimitive.Portal>\n <ComboboxPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"isolate z-50\"\n >\n <ComboboxPrimitive.Popup\n data-slot=\"combobox-content\"\n data-chips={!!anchor}\n className={cn(\"group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n <ComboboxPrimitive.List\n data-slot=\"combobox-list\"\n className={cn(\n \"no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n <ComboboxPrimitive.Item\n data-slot=\"combobox-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ComboboxPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />\n }\n >\n <CheckIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.ItemIndicator>\n </ComboboxPrimitive.Item>\n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n <ComboboxPrimitive.Group\n data-slot=\"combobox-group\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n <ComboboxPrimitive.GroupLabel\n data-slot=\"combobox-label\"\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n <ComboboxPrimitive.Collection data-slot=\"combobox-collection\" {...props} />\n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n <ComboboxPrimitive.Empty\n data-slot=\"combobox-empty\"\n className={cn(\n \"hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n <ComboboxPrimitive.Separator\n data-slot=\"combobox-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> &\n ComboboxPrimitive.Chips.Props) {\n return (\n <ComboboxPrimitive.Chips\n data-slot=\"combobox-chips\"\n className={cn(\n \"group/chips flex min-h-12 flex-wrap items-center gap-1 rounded-md border border-input bg-card bg-clip-padding px-4 py-1 text-sm transition-colors has-[[data-slot=combobox-chip-input]:focus-visible]:border-ring has-[[data-slot=combobox-chip-input]:focus-visible]:shadow-focus has-aria-invalid:border-destructive has-aria-invalid:shadow-focus has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n <ComboboxPrimitive.Chip\n data-slot=\"combobox-chip\"\n className={cn(\n \"flex h-[calc(--spacing(6.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0\",\n className\n )}\n {...props}\n >\n {children}\n {showRemove && (\n <ComboboxPrimitive.ChipRemove\n render={<Button variant=\"ghost\" size=\"icon-xs\" />}\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n <XIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.ChipRemove>\n )}\n </ComboboxPrimitive.Chip>\n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n <ComboboxPrimitive.Input\n data-slot=\"combobox-chip-input\"\n className={cn(\n \"min-w-16 flex-1 outline-none group-has-data-[slot=combobox-chip]/chips:placeholder:text-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef<HTMLDivElement | null>(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n"],"names":["Combobox","ComboboxPrimitive","ComboboxValue","props","ComboboxTrigger","className","children","jsxs","cn","jsx","ChevronDownIcon","ComboboxClear","InputGroupButton","XIcon","ComboboxInput","disabled","showTrigger","showClear","InputGroup","InputGroupInput","InputGroupAddon","ComboboxContent","side","sideOffset","align","alignOffset","anchor","ComboboxList","ComboboxItem","CheckIcon","ComboboxGroup","ComboboxLabel","ComboboxCollection","ComboboxEmpty","ComboboxSeparator","ComboboxChips","ComboboxChip","showRemove","Button","ComboboxChipsInput","useComboboxAnchor","React"],"mappings":"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"}
1
+ {"version":3,"file":"combobox.cjs","sources":["../../../src/components/ui/combobox.tsx"],"sourcesContent":["\"use client\"\n\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\nimport { ChevronDownIcon, XIcon, CheckIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return <ComboboxPrimitive.Value data-slot=\"combobox-value\" {...props} />\n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n <ComboboxPrimitive.Trigger\n aria-label=\"Toggle options\"\n data-slot=\"combobox-trigger\"\n className={cn(\"[&_svg:not([class*='size-'])]:size-4\", className)}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"pointer-events-none size-4 text-muted-foreground\" />\n </ComboboxPrimitive.Trigger>\n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n <ComboboxPrimitive.Clear\n aria-label=\"Clear\"\n data-slot=\"combobox-clear\"\n render={<InputGroupButton variant=\"ghost\" size=\"icon-xs\" />}\n className={cn(className)}\n {...props}\n >\n <XIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.Clear>\n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n <InputGroup className={cn(\"w-auto bg-card\", className)}>\n <ComboboxPrimitive.Input\n render={<InputGroupInput disabled={disabled} />}\n {...props}\n />\n <InputGroupAddon align=\"inline-end\">\n {showTrigger && (\n <InputGroupButton\n size=\"icon-xs\"\n variant=\"ghost\"\n asChild\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n >\n <ComboboxTrigger />\n </InputGroupButton>\n )}\n {showClear && <ComboboxClear disabled={disabled} />}\n </InputGroupAddon>\n {children}\n </InputGroup>\n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n <ComboboxPrimitive.Portal>\n <ComboboxPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"isolate z-50\"\n >\n <ComboboxPrimitive.Popup\n data-slot=\"combobox-content\"\n data-chips={!!anchor}\n className={cn(\"group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-elevation-4 ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n <ComboboxPrimitive.List\n data-slot=\"combobox-list\"\n className={cn(\n \"no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n <ComboboxPrimitive.Item\n data-slot=\"combobox-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ComboboxPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />\n }\n >\n <CheckIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.ItemIndicator>\n </ComboboxPrimitive.Item>\n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n <ComboboxPrimitive.Group\n data-slot=\"combobox-group\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n <ComboboxPrimitive.GroupLabel\n data-slot=\"combobox-label\"\n className={cn(\"px-2 py-1.5 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n <ComboboxPrimitive.Collection data-slot=\"combobox-collection\" {...props} />\n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n <ComboboxPrimitive.Empty\n data-slot=\"combobox-empty\"\n className={cn(\n \"hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n <ComboboxPrimitive.Separator\n data-slot=\"combobox-separator\"\n aria-hidden=\"true\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> &\n ComboboxPrimitive.Chips.Props) {\n return (\n <ComboboxPrimitive.Chips\n data-slot=\"combobox-chips\"\n className={cn(\n \"group/chips flex min-h-12 flex-wrap items-center gap-1 rounded-md border border-input bg-card bg-clip-padding px-4 py-1 text-sm transition-colors has-[[data-slot=combobox-chip-input]:focus-visible]:border-ring has-[[data-slot=combobox-chip-input]:focus-visible]:shadow-focus has-aria-invalid:border-destructive has-aria-invalid:shadow-focus has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n <ComboboxPrimitive.Chip\n data-slot=\"combobox-chip\"\n className={cn(\n \"flex h-[calc(--spacing(6.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0\",\n className\n )}\n {...props}\n >\n {children}\n {showRemove && (\n <ComboboxPrimitive.ChipRemove\n aria-label=\"Remove\"\n render={<Button variant=\"ghost\" size=\"icon-xs\" />}\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n <XIcon className=\"pointer-events-none\" />\n </ComboboxPrimitive.ChipRemove>\n )}\n </ComboboxPrimitive.Chip>\n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n <ComboboxPrimitive.Input\n data-slot=\"combobox-chip-input\"\n className={cn(\n \"min-w-16 flex-1 outline-none group-has-data-[slot=combobox-chip]/chips:placeholder:text-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef<HTMLDivElement | null>(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n"],"names":["Combobox","ComboboxPrimitive","ComboboxValue","props","ComboboxTrigger","className","children","jsxs","cn","jsx","ChevronDownIcon","ComboboxClear","InputGroupButton","XIcon","ComboboxInput","disabled","showTrigger","showClear","InputGroup","InputGroupInput","InputGroupAddon","ComboboxContent","side","sideOffset","align","alignOffset","anchor","ComboboxList","ComboboxItem","CheckIcon","ComboboxGroup","ComboboxLabel","ComboboxCollection","ComboboxEmpty","ComboboxSeparator","ComboboxChips","ComboboxChip","showRemove","Button","ComboboxChipsInput","useComboboxAnchor","React"],"mappings":"kjBAgBMA,EAAWC,EAAAA,SAAkB,KAEnC,SAASC,EAAc,CAAE,GAAGC,GAAwC,CAClE,aAAQF,EAAAA,SAAkB,MAAlB,CAAwB,YAAU,iBAAkB,GAAGE,EAAO,CACxE,CAEA,SAASC,EAAgB,CACvB,UAAAC,EACA,SAAAC,EACA,GAAGH,CACL,EAAoC,CAClC,OACEI,EAAAA,KAACN,EAAAA,SAAkB,QAAlB,CACC,aAAW,iBACX,YAAU,mBACV,UAAWO,EAAAA,GAAG,uCAAwCH,CAAS,EAC9D,GAAGF,EAEH,SAAA,CAAAG,EACDG,EAAAA,IAACC,EAAAA,gBAAA,CAAgB,UAAU,kDAAA,CAAmD,CAAA,CAAA,CAAA,CAGpF,CAEA,SAASC,EAAc,CAAE,UAAAN,EAAW,GAAGF,GAAwC,CAC7E,OACEM,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,aAAW,QACX,YAAU,iBACV,OAAQQ,EAAAA,IAACG,mBAAA,CAAiB,QAAQ,QAAQ,KAAK,UAAU,EACzD,UAAWJ,EAAAA,GAAGH,CAAS,EACtB,GAAGF,EAEJ,SAAAM,EAAAA,IAACI,EAAAA,MAAA,CAAM,UAAU,qBAAA,CAAsB,CAAA,CAAA,CAG7C,CAEA,SAASC,EAAc,CACrB,UAAAT,EACA,SAAAC,EACA,SAAAS,EAAW,GACX,YAAAC,EAAc,GACd,UAAAC,EAAY,GACZ,GAAGd,CACL,EAGG,CACD,cACGe,EAAAA,WAAA,CAAW,UAAWV,EAAAA,GAAG,iBAAkBH,CAAS,EACnD,SAAA,CAAAI,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,OAAQQ,EAAAA,IAACU,kBAAA,CAAgB,SAAAJ,CAAA,CAAoB,EAC5C,GAAGZ,CAAA,CAAA,EAENI,EAAAA,KAACa,EAAAA,gBAAA,CAAgB,MAAM,aACpB,SAAA,CAAAJ,GACCP,EAAAA,IAACG,EAAAA,iBAAA,CACC,KAAK,UACL,QAAQ,QACR,QAAO,GACP,YAAU,qBACV,UAAU,sFACV,SAAAG,EAEA,eAACX,EAAA,CAAA,CAAgB,CAAA,CAAA,EAGpBa,GAAaR,EAAAA,IAACE,EAAA,CAAc,SAAAI,CAAA,CAAoB,CAAA,EACnD,EACCT,CAAA,EACH,CAEJ,CAEA,SAASe,EAAgB,CACvB,UAAAhB,EACA,KAAAiB,EAAO,SACP,WAAAC,EAAa,EACb,MAAAC,EAAQ,QACR,YAAAC,EAAc,EACd,OAAAC,EACA,GAAGvB,CACL,EAIK,CACH,OACEM,EAAAA,IAACR,EAAAA,SAAkB,OAAlB,CACC,SAAAQ,EAAAA,IAACR,EAAAA,SAAkB,WAAlB,CACC,KAAAqB,EACA,WAAAC,EACA,MAAAC,EACA,YAAAC,EACA,OAAAC,EACA,UAAU,eAEV,SAAAjB,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,YAAU,mBACV,aAAY,CAAC,CAACyB,EACd,UAAWlB,EAAAA,GAAG,m6BAAo6BH,CAAU,EAC37B,GAAGF,CAAA,CAAA,CACN,CAAA,EAEJ,CAEJ,CAEA,SAASwB,EAAa,CAAE,UAAAtB,EAAW,GAAGF,GAAuC,CAC3E,OACEM,EAAAA,IAACR,EAAAA,SAAkB,KAAlB,CACC,YAAU,gBACV,UAAWO,EAAAA,GACT,0KACAH,CAAA,EAED,GAAGF,CAAA,CAAA,CAGV,CAEA,SAASyB,EAAa,CACpB,UAAAvB,EACA,SAAAC,EACA,GAAGH,CACL,EAAiC,CAC/B,OACEI,EAAAA,KAACN,EAAAA,SAAkB,KAAlB,CACC,YAAU,gBACV,UAAWO,EAAAA,GACT,oZACAH,CAAA,EAED,GAAGF,EAEH,SAAA,CAAAG,EACDG,EAAAA,IAACR,EAAAA,SAAkB,cAAlB,CACC,OACEQ,EAAAA,IAAC,OAAA,CAAK,UAAU,8EAAA,CAA+E,EAGjG,SAAAA,EAAAA,IAACoB,EAAAA,UAAA,CAAU,UAAU,qBAAA,CAAsB,CAAA,CAAA,CAC7C,CAAA,CAAA,CAGN,CAEA,SAASC,EAAc,CAAE,UAAAzB,EAAW,GAAGF,GAAwC,CAC7E,OACEM,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,YAAU,iBACV,UAAWO,EAAAA,GAAGH,CAAS,EACtB,GAAGF,CAAA,CAAA,CAGV,CAEA,SAAS4B,EAAc,CACrB,UAAA1B,EACA,GAAGF,CACL,EAAuC,CACrC,OACEM,EAAAA,IAACR,EAAAA,SAAkB,WAAlB,CACC,YAAU,iBACV,UAAWO,EAAAA,GAAG,4CAA6CH,CAAS,EACnE,GAAGF,CAAA,CAAA,CAGV,CAEA,SAAS6B,EAAmB,CAAE,GAAG7B,GAA6C,CAC5E,aACGF,EAAAA,SAAkB,WAAlB,CAA6B,YAAU,sBAAuB,GAAGE,EAAO,CAE7E,CAEA,SAAS8B,EAAc,CAAE,UAAA5B,EAAW,GAAGF,GAAwC,CAC7E,OACEM,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,YAAU,iBACV,UAAWO,EAAAA,GACT,qHACAH,CAAA,EAED,GAAGF,CAAA,CAAA,CAGV,CAEA,SAAS+B,EAAkB,CACzB,UAAA7B,EACA,GAAGF,CACL,EAAsC,CACpC,OACEM,EAAAA,IAACR,EAAAA,SAAkB,UAAlB,CACC,YAAU,qBACV,cAAY,OACZ,UAAWO,EAAAA,GAAG,4BAA6BH,CAAS,EACnD,GAAGF,CAAA,CAAA,CAGV,CAEA,SAASgC,EAAc,CACrB,UAAA9B,EACA,GAAGF,CACL,EACiC,CAC/B,OACEM,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,YAAU,iBACV,UAAWO,EAAAA,GACT,ubACAH,CAAA,EAED,GAAGF,CAAA,CAAA,CAGV,CAEA,SAASiC,EAAa,CACpB,UAAA/B,EACA,SAAAC,EACA,WAAA+B,EAAa,GACb,GAAGlC,CACL,EAEG,CACD,OACEI,EAAAA,KAACN,EAAAA,SAAkB,KAAlB,CACC,YAAU,gBACV,UAAWO,EAAAA,GACT,6RACAH,CAAA,EAED,GAAGF,EAEH,SAAA,CAAAG,EACA+B,GACC5B,EAAAA,IAACR,EAAAA,SAAkB,WAAlB,CACC,aAAW,SACX,OAAQQ,EAAAA,IAAC6B,SAAA,CAAO,QAAQ,QAAQ,KAAK,UAAU,EAC/C,UAAU,qCACV,YAAU,uBAEV,SAAA7B,EAAAA,IAACI,EAAAA,MAAA,CAAM,UAAU,qBAAA,CAAsB,CAAA,CAAA,CACzC,CAAA,CAAA,CAIR,CAEA,SAAS0B,EAAmB,CAC1B,UAAAlC,EACA,GAAGF,CACL,EAAkC,CAChC,OACEM,EAAAA,IAACR,EAAAA,SAAkB,MAAlB,CACC,YAAU,sBACV,UAAWO,EAAAA,GACT,sGACAH,CAAA,EAED,GAAGF,CAAA,CAAA,CAGV,CAEA,SAASqC,GAAoB,CAC3B,OAAOC,EAAM,OAA8B,IAAI,CACjD"}
@@ -1,12 +1,12 @@
1
1
  import { jsxs as s, jsx as t } from "react/jsx-runtime";
2
2
  import { Combobox as a } from "@base-ui/react";
3
- import { XIcon as l, CheckIcon as u, ChevronDownIcon as b } from "lucide-react";
3
+ import { XIcon as d, CheckIcon as u, ChevronDownIcon as b } from "lucide-react";
4
4
  import * as h from "react";
5
5
  import { Button as x } from "./button.js";
6
6
  import { InputGroup as g, InputGroupInput as f, InputGroupAddon as v, InputGroupButton as p } from "./input-group.js";
7
7
  import { cn as n } from "../../lib/utils.js";
8
- const k = a.Root;
9
- function L({ ...o }) {
8
+ const R = a.Root;
9
+ function k({ ...o }) {
10
10
  return /* @__PURE__ */ t(a.Value, { "data-slot": "combobox-value", ...o });
11
11
  }
12
12
  function C({
@@ -17,6 +17,7 @@ function C({
17
17
  return /* @__PURE__ */ s(
18
18
  a.Trigger,
19
19
  {
20
+ "aria-label": "Toggle options",
20
21
  "data-slot": "combobox-trigger",
21
22
  className: n("[&_svg:not([class*='size-'])]:size-4", o),
22
23
  ...r,
@@ -31,28 +32,29 @@ function w({ className: o, ...e }) {
31
32
  return /* @__PURE__ */ t(
32
33
  a.Clear,
33
34
  {
35
+ "aria-label": "Clear",
34
36
  "data-slot": "combobox-clear",
35
37
  render: /* @__PURE__ */ t(p, { variant: "ghost", size: "icon-xs" }),
36
38
  className: n(o),
37
39
  ...e,
38
- children: /* @__PURE__ */ t(l, { className: "pointer-events-none" })
40
+ children: /* @__PURE__ */ t(d, { className: "pointer-events-none" })
39
41
  }
40
42
  );
41
43
  }
42
- function R({
44
+ function L({
43
45
  className: o,
44
46
  children: e,
45
47
  disabled: r = !1,
46
48
  showTrigger: i = !0,
47
- showClear: d = !1,
48
- ...c
49
+ showClear: c = !1,
50
+ ...l
49
51
  }) {
50
52
  return /* @__PURE__ */ s(g, { className: n("w-auto bg-card", o), children: [
51
53
  /* @__PURE__ */ t(
52
54
  a.Input,
53
55
  {
54
56
  render: /* @__PURE__ */ t(f, { disabled: r }),
55
- ...c
57
+ ...l
56
58
  }
57
59
  ),
58
60
  /* @__PURE__ */ s(v, { align: "inline-end", children: [
@@ -68,7 +70,7 @@ function R({
68
70
  children: /* @__PURE__ */ t(C, {})
69
71
  }
70
72
  ),
71
- d && /* @__PURE__ */ t(w, { disabled: r })
73
+ c && /* @__PURE__ */ t(w, { disabled: r })
72
74
  ] }),
73
75
  e
74
76
  ] });
@@ -78,8 +80,8 @@ function _({
78
80
  side: e = "bottom",
79
81
  sideOffset: r = 6,
80
82
  align: i = "start",
81
- alignOffset: d = 0,
82
- anchor: c,
83
+ alignOffset: c = 0,
84
+ anchor: l,
83
85
  ...m
84
86
  }) {
85
87
  return /* @__PURE__ */ t(a.Portal, { children: /* @__PURE__ */ t(
@@ -88,15 +90,15 @@ function _({
88
90
  side: e,
89
91
  sideOffset: r,
90
92
  align: i,
91
- alignOffset: d,
92
- anchor: c,
93
+ alignOffset: c,
94
+ anchor: l,
93
95
  className: "isolate z-50",
94
96
  children: /* @__PURE__ */ t(
95
97
  a.Popup,
96
98
  {
97
99
  "data-slot": "combobox-content",
98
- "data-chips": !!c,
99
- className: n("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", o),
100
+ "data-chips": !!l,
101
+ className: n("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-elevation-4 ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", o),
100
102
  ...m
101
103
  }
102
104
  )
@@ -116,7 +118,7 @@ function P({ className: o, ...e }) {
116
118
  }
117
119
  );
118
120
  }
119
- function A({
121
+ function T({
120
122
  className: o,
121
123
  children: e,
122
124
  ...r
@@ -143,7 +145,7 @@ function A({
143
145
  }
144
146
  );
145
147
  }
146
- function B({ className: o, ...e }) {
148
+ function A({ className: o, ...e }) {
147
149
  return /* @__PURE__ */ t(
148
150
  a.Group,
149
151
  {
@@ -153,7 +155,7 @@ function B({ className: o, ...e }) {
153
155
  }
154
156
  );
155
157
  }
156
- function E({
158
+ function B({
157
159
  className: o,
158
160
  ...e
159
161
  }) {
@@ -166,10 +168,10 @@ function E({
166
168
  }
167
169
  );
168
170
  }
169
- function S({ ...o }) {
171
+ function E({ ...o }) {
170
172
  return /* @__PURE__ */ t(a.Collection, { "data-slot": "combobox-collection", ...o });
171
173
  }
172
- function T({ className: o, ...e }) {
174
+ function S({ className: o, ...e }) {
173
175
  return /* @__PURE__ */ t(
174
176
  a.Empty,
175
177
  {
@@ -190,6 +192,7 @@ function V({
190
192
  a.Separator,
191
193
  {
192
194
  "data-slot": "combobox-separator",
195
+ "aria-hidden": "true",
193
196
  className: n("-mx-1 my-1 h-px bg-border", o),
194
197
  ...e
195
198
  }
@@ -231,10 +234,11 @@ function X({
231
234
  r && /* @__PURE__ */ t(
232
235
  a.ChipRemove,
233
236
  {
237
+ "aria-label": "Remove",
234
238
  render: /* @__PURE__ */ t(x, { variant: "ghost", size: "icon-xs" }),
235
239
  className: "-ml-1 opacity-50 hover:opacity-100",
236
240
  "data-slot": "combobox-chip-remove",
237
- children: /* @__PURE__ */ t(l, { className: "pointer-events-none" })
241
+ children: /* @__PURE__ */ t(d, { className: "pointer-events-none" })
238
242
  }
239
243
  )
240
244
  ]
@@ -261,21 +265,21 @@ function q() {
261
265
  return h.useRef(null);
262
266
  }
263
267
  export {
264
- k as Combobox,
268
+ R as Combobox,
265
269
  X as ComboboxChip,
266
270
  D as ComboboxChips,
267
271
  $ as ComboboxChipsInput,
268
- S as ComboboxCollection,
272
+ E as ComboboxCollection,
269
273
  _ as ComboboxContent,
270
- T as ComboboxEmpty,
271
- B as ComboboxGroup,
272
- R as ComboboxInput,
273
- A as ComboboxItem,
274
- E as ComboboxLabel,
274
+ S as ComboboxEmpty,
275
+ A as ComboboxGroup,
276
+ L as ComboboxInput,
277
+ T as ComboboxItem,
278
+ B as ComboboxLabel,
275
279
  P as ComboboxList,
276
280
  V as ComboboxSeparator,
277
281
  C as ComboboxTrigger,
278
- L as ComboboxValue,
282
+ k as ComboboxValue,
279
283
  q as useComboboxAnchor
280
284
  };
281
285
  //# sourceMappingURL=combobox.js.map