@tetrascience-npm/tetrascience-react-ui 0.7.0-beta.108.1 → 0.7.0-beta.129.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 +7 -3
  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
@@ -0,0 +1,56 @@
1
+ import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
+ import { cva as n } from "class-variance-authority";
3
+ import { cn as c } from "../../../lib/utils.js";
4
+ const d = n(
5
+ "flex items-center h-11 px-3 bg-sidebar border-b border-sidebar-border w-full gap-2 z-40",
6
+ {
7
+ variants: {
8
+ sticky: {
9
+ true: "sticky top-0",
10
+ false: ""
11
+ }
12
+ },
13
+ defaultVariants: { sticky: !0 }
14
+ }
15
+ );
16
+ function b({ left: e, center: r, right: a, sticky: s, className: i, ...l }) {
17
+ return /* @__PURE__ */ o(
18
+ "div",
19
+ {
20
+ "data-slot": "top-bar",
21
+ className: c(d({ sticky: s }), i),
22
+ ...l,
23
+ children: [
24
+ /* @__PURE__ */ t(
25
+ "div",
26
+ {
27
+ "data-slot": "top-bar-left",
28
+ className: "flex items-center gap-2 flex-1 min-w-0",
29
+ children: e
30
+ }
31
+ ),
32
+ r != null && /* @__PURE__ */ t(
33
+ "div",
34
+ {
35
+ "data-slot": "top-bar-center",
36
+ className: "flex items-center gap-2 shrink-0",
37
+ children: r
38
+ }
39
+ ),
40
+ /* @__PURE__ */ t(
41
+ "div",
42
+ {
43
+ "data-slot": "top-bar-right",
44
+ className: "flex items-center gap-2 shrink-0 justify-end",
45
+ children: a
46
+ }
47
+ )
48
+ ]
49
+ }
50
+ );
51
+ }
52
+ export {
53
+ b as TopBar,
54
+ d as topBarVariants
55
+ };
56
+ //# sourceMappingURL=TopBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopBar.js","sources":["../../../../src/components/composed/TopBar/TopBar.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// TopBar — sticky 3-slot header\n// =============================================================================\n\nconst topBarVariants = cva(\n \"flex items-center h-11 px-3 bg-sidebar border-b border-sidebar-border w-full gap-2 z-40\",\n {\n variants: {\n sticky: {\n true: \"sticky top-0\",\n false: \"\",\n },\n },\n defaultVariants: { sticky: true },\n }\n);\n\nexport interface TopBarProps\n extends Omit<React.ComponentProps<\"div\">, \"children\">,\n VariantProps<typeof topBarVariants> {\n /** Left slot — typically a breadcrumb. */\n left?: React.ReactNode;\n /**\n * Center \"context\" slot — e.g. a version/status selector. Only rendered when\n * provided; keeps the left/right columns balanced when present.\n */\n center?: React.ReactNode;\n /** Right slot — actions, help, user menu, etc. */\n right?: React.ReactNode;\n}\n\n/**\n * Sticky application header with three slots — left / center / right.\n *\n * - **left** is typically a breadcrumb, but any node can be slotted in.\n * - **center** is an optional \"context\" slot (e.g. a version/status selector).\n * - **right** holds actions, a help affordance, a `UserMenu`, etc.\n */\nfunction TopBar({ left, center, right, sticky, className, ...props }: TopBarProps) {\n return (\n <div\n data-slot=\"top-bar\"\n className={cn(topBarVariants({ sticky }), className)}\n {...props}\n >\n <div\n data-slot=\"top-bar-left\"\n className=\"flex items-center gap-2 flex-1 min-w-0\"\n >\n {left}\n </div>\n\n {center != null && (\n <div\n data-slot=\"top-bar-center\"\n className=\"flex items-center gap-2 shrink-0\"\n >\n {center}\n </div>\n )}\n\n <div\n data-slot=\"top-bar-right\"\n className=\"flex items-center gap-2 shrink-0 justify-end\"\n >\n {right}\n </div>\n </div>\n );\n}\n\nexport { TopBar, topBarVariants };\n"],"names":["topBarVariants","cva","TopBar","left","center","right","sticky","className","props","jsxs","cn","jsx"],"mappings":";;;AASA,MAAMA,IAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,QAAQ,GAAA;AAAA,EAAK;AAEpC;AAuBA,SAASC,EAAO,EAAE,MAAAC,GAAM,QAAAC,GAAQ,OAAAC,GAAO,QAAAC,GAAQ,WAAAC,GAAW,GAAGC,KAAsB;AACjF,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAGV,EAAe,EAAE,QAAAM,EAAA,CAAQ,GAAGC,CAAS;AAAA,MAClD,GAAGC;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET,UAAAR;AAAA,UAAA;AAAA,QAAA;AAAA,QAGFC,KAAU,QACT,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET,UAAAP;AAAA,UAAA;AAAA,QAAA;AAAA,QAIL,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET,UAAAN;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),v=require("class-variance-authority"),y=require("react"),i=require("../../ui/avatar.cjs"),a=require("../../ui/dropdown-menu.cjs"),N=require("../../../lib/utils.cjs");function w(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const n in r)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>r[n]})}}return t.default=r,Object.freeze(t)}const M=w(y),u=v.cva("flex items-center cursor-pointer bg-transparent border-none text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 rounded-md",{variants:{variant:{avatar:"p-0 hover:opacity-85",detailed:"gap-3 w-full px-1 py-1 text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground"}},defaultVariants:{variant:"avatar"}});function d(r){const t=r.trim().split(/\s+/).filter(Boolean);return t.length===0?"":t.length===1?t[0].substring(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function D({name:r,subtitle:t,avatarSrc:n,initials:o,groups:p=[],variant:c,side:x="bottom",align:g="end",className:f}){const m=o??d(r),b=c==="detailed";return e.jsxs(a.DropdownMenu,{modal:!1,children:[e.jsx(a.DropdownMenuTrigger,{asChild:!0,children:e.jsxs("button",{type:"button","data-slot":"user-menu-trigger","aria-label":`${r} account menu`,className:N.cn(u({variant:c}),f),children:[e.jsxs(i.Avatar,{size:"sm",className:"bg-primary shrink-0",children:[n&&e.jsx(i.AvatarImage,{src:n,alt:r}),e.jsx(i.AvatarFallback,{className:"bg-primary text-primary-foreground group-data-[size=sm]/avatar:text-[10px] font-semibold",children:m})]}),b&&e.jsxs("div",{className:"flex flex-col items-start min-w-0",children:[e.jsx("span",{className:"text-xs font-medium text-foreground truncate",children:r}),t&&e.jsx("span",{className:"text-[10px] text-muted-foreground uppercase tracking-wide truncate",children:t})]})]})}),e.jsxs(a.DropdownMenuContent,{"data-slot":"user-menu-content",side:x,align:g,className:"min-w-[200px]",children:[e.jsxs("div",{className:"flex flex-col px-2 py-1.5",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground truncate",children:r}),t&&e.jsx("span",{className:"text-xs text-muted-foreground truncate",children:t})]}),p.map((h,j)=>e.jsxs(M.Fragment,{children:[e.jsx(a.DropdownMenuSeparator,{}),h.items.map(s=>{const l=s.icon;return e.jsxs(a.DropdownMenuItem,{variant:s.variant,disabled:s.disabled,onSelect:()=>s.onClick?.(),className:"cursor-pointer",children:[l&&e.jsx(l,{className:"w-4 h-4"}),s.label]},s.id)})]},j))]})]})}exports.UserMenu=D;exports.getInitials=d;exports.userMenuTriggerVariants=u;
2
+ //# sourceMappingURL=UserMenu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMenu.cjs","sources":["../../../../src/components/composed/UserMenu/UserMenu.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { type LucideIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UserMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional leading icon */\n icon?: LucideIcon | React.FC<React.SVGProps<SVGSVGElement>>;\n /** Click handler */\n onClick?: () => void;\n /** Disables the item */\n disabled?: boolean;\n /** Visual variant — `destructive` for sign-out / delete actions */\n variant?: \"default\" | \"destructive\";\n}\n\nexport interface UserMenuGroup {\n /** Items in this group; groups are separated by a divider */\n items: UserMenuItem[];\n}\n\nconst userMenuTriggerVariants = cva(\n \"flex items-center cursor-pointer bg-transparent border-none text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 rounded-md\",\n {\n variants: {\n variant: {\n /** Icon-only avatar — for the TopBar right slot or the collapsed rail */\n avatar: \"p-0 hover:opacity-85\",\n /** Avatar + name/subtitle row — for the expanded sidebar footer */\n detailed:\n \"gap-3 w-full px-1 py-1 text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground\",\n },\n },\n defaultVariants: { variant: \"avatar\" },\n }\n);\n\nexport interface UserMenuProps\n extends VariantProps<typeof userMenuTriggerVariants> {\n /** User's full name — used for the menu header and derived initials */\n name: string;\n /** Secondary line shown under the name (e.g. email or role) */\n subtitle?: string;\n /** Avatar image URL; falls back to initials when absent or on load error */\n avatarSrc?: string;\n /** Explicit initials override; otherwise derived from `name` */\n initials?: string;\n /** Menu item groups; each group is separated by a divider */\n groups?: UserMenuGroup[];\n /** Which side of the trigger the dropdown opens on */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Alignment of the dropdown relative to the trigger */\n align?: \"start\" | \"center\" | \"end\";\n /** Additional className for the trigger button */\n className?: string;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/** Derives up to two uppercase initials from a full name. */\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].substring(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n// =============================================================================\n// UserMenu\n// =============================================================================\n\n/**\n * User account affordance — an avatar (initials or image) that opens a dropdown\n * menu. A composition over the `Avatar` + `DropdownMenu` primitives.\n *\n * Focus trap, keyboard navigation, and Esc-to-close are handled by the\n * underlying Radix `DropdownMenu`.\n */\nfunction UserMenu({\n name,\n subtitle,\n avatarSrc,\n initials,\n groups = [],\n variant,\n side = \"bottom\",\n align = \"end\",\n className,\n}: UserMenuProps) {\n const resolvedInitials = initials ?? getInitials(name);\n const isDetailed = variant === \"detailed\";\n\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"user-menu-trigger\"\n aria-label={`${name} account menu`}\n className={cn(userMenuTriggerVariants({ variant }), className)}\n >\n <Avatar size=\"sm\" className=\"bg-primary shrink-0\">\n {avatarSrc && <AvatarImage src={avatarSrc} alt={name} />}\n <AvatarFallback className=\"bg-primary text-primary-foreground group-data-[size=sm]/avatar:text-[10px] font-semibold\">\n {resolvedInitials}\n </AvatarFallback>\n </Avatar>\n {isDetailed && (\n <div className=\"flex flex-col items-start min-w-0\">\n <span className=\"text-xs font-medium text-foreground truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-[10px] text-muted-foreground uppercase tracking-wide truncate\">\n {subtitle}\n </span>\n )}\n </div>\n )}\n </button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n data-slot=\"user-menu-content\"\n side={side}\n align={align}\n className=\"min-w-[200px]\"\n >\n {/* Header: name + subtitle */}\n <div className=\"flex flex-col px-2 py-1.5\">\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs text-muted-foreground truncate\">\n {subtitle}\n </span>\n )}\n </div>\n\n {groups.map((group, groupIndex) => (\n <React.Fragment key={groupIndex}>\n <DropdownMenuSeparator />\n {group.items.map((item) => {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n variant={item.variant}\n disabled={item.disabled}\n onSelect={() => item.onClick?.()}\n className=\"cursor-pointer\"\n >\n {Icon && <Icon className=\"w-4 h-4\" />}\n {item.label}\n </DropdownMenuItem>\n );\n })}\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { UserMenu, getInitials, userMenuTriggerVariants };\n"],"names":["userMenuTriggerVariants","cva","getInitials","name","parts","UserMenu","subtitle","avatarSrc","initials","groups","variant","side","align","className","resolvedInitials","isDetailed","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","cn","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","group","groupIndex","React","DropdownMenuSeparator","item","Icon","DropdownMenuItem"],"mappings":"qjBAsCMA,EAA0BC,EAAAA,IAC9B,yMACA,CACE,SAAU,CACR,QAAS,CAEP,OAAQ,uBAER,SACE,+FAAA,CACJ,EAEF,gBAAiB,CAAE,QAAS,QAAA,CAAS,CAEzC,EA2BA,SAASC,EAAYC,EAAsB,CACzC,MAAMC,EAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO,EACrD,OAAIC,EAAM,SAAW,EAAU,GAC3BA,EAAM,SAAW,EAAUA,EAAM,CAAC,EAAE,UAAU,EAAG,CAAC,EAAE,YAAA,GAChDA,EAAM,CAAC,EAAE,CAAC,EAAIA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAG,YAAA,CACpD,CAaA,SAASC,EAAS,CAChB,KAAAF,EACA,SAAAG,EACA,UAAAC,EACA,SAAAC,EACA,OAAAC,EAAS,CAAA,EACT,QAAAC,EACA,KAAAC,EAAO,SACP,MAAAC,EAAQ,MACR,UAAAC,CACF,EAAkB,CAChB,MAAMC,EAAmBN,GAAYN,EAAYC,CAAI,EAC/CY,EAAaL,IAAY,WAE/B,OACEM,EAAAA,KAACC,EAAAA,aAAA,CAAa,MAAO,GACnB,SAAA,CAAAC,EAAAA,IAACC,EAAAA,oBAAA,CAAoB,QAAO,GAC1B,SAAAH,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,YAAU,oBACV,aAAY,GAAGb,CAAI,gBACnB,UAAWiB,EAAAA,GAAGpB,EAAwB,CAAE,QAAAU,CAAA,CAAS,EAAGG,CAAS,EAE7D,SAAA,CAAAG,EAAAA,KAACK,EAAAA,OAAA,CAAO,KAAK,KAAK,UAAU,sBACzB,SAAA,CAAAd,GAAaW,EAAAA,IAACI,cAAA,CAAY,IAAKf,EAAW,IAAKJ,EAAM,EACtDe,EAAAA,IAACK,EAAAA,eAAA,CAAe,UAAU,2FACvB,SAAAT,CAAA,CACH,CAAA,EACF,EACCC,GACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAU,+CACb,SAAAf,EACH,EACCG,GACCY,EAAAA,IAAC,OAAA,CAAK,UAAU,qEACb,SAAAZ,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,EAGN,EAEAU,EAAAA,KAACQ,EAAAA,oBAAA,CACC,YAAU,oBACV,KAAAb,EACA,MAAAC,EACA,UAAU,gBAGV,SAAA,CAAAI,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAU,iDACb,SAAAf,EACH,EACCG,GACCY,EAAAA,IAAC,OAAA,CAAK,UAAU,yCACb,SAAAZ,CAAA,CACH,CAAA,EAEJ,EAECG,EAAO,IAAI,CAACgB,EAAOC,IAClBV,EAAAA,KAACW,EAAM,SAAN,CACC,SAAA,CAAAT,EAAAA,IAACU,EAAAA,sBAAA,EAAsB,EACtBH,EAAM,MAAM,IAAKI,GAAS,CACzB,MAAMC,EAAOD,EAAK,KAClB,OACEb,EAAAA,KAACe,EAAAA,iBAAA,CAEC,QAASF,EAAK,QACd,SAAUA,EAAK,SACf,SAAU,IAAMA,EAAK,UAAA,EACrB,UAAU,iBAET,SAAA,CAAAC,GAAQZ,EAAAA,IAACY,EAAA,CAAK,UAAU,SAAA,CAAU,EAClCD,EAAK,KAAA,CAAA,EAPDA,EAAK,EAAA,CAUhB,CAAC,CAAA,CAAA,EAhBkBH,CAiBrB,CACD,CAAA,CAAA,CAAA,CACH,EACF,CAEJ"}
@@ -0,0 +1,99 @@
1
+ import { jsxs as t, jsx as r } from "react/jsx-runtime";
2
+ import { cva as h } from "class-variance-authority";
3
+ import * as v from "react";
4
+ import { Avatar as b, AvatarImage as N, AvatarFallback as w } from "../../ui/avatar.js";
5
+ import { DropdownMenu as y, DropdownMenuTrigger as M, DropdownMenuContent as D, DropdownMenuSeparator as C, DropdownMenuItem as I } from "../../ui/dropdown-menu.js";
6
+ import { cn as k } from "../../../lib/utils.js";
7
+ const A = h(
8
+ "flex items-center cursor-pointer bg-transparent border-none text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 rounded-md",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ /** Icon-only avatar — for the TopBar right slot or the collapsed rail */
13
+ avatar: "p-0 hover:opacity-85",
14
+ /** Avatar + name/subtitle row — for the expanded sidebar footer */
15
+ detailed: "gap-3 w-full px-1 py-1 text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground"
16
+ }
17
+ },
18
+ defaultVariants: { variant: "avatar" }
19
+ }
20
+ );
21
+ function U(n) {
22
+ const e = n.trim().split(/\s+/).filter(Boolean);
23
+ return e.length === 0 ? "" : e.length === 1 ? e[0].substring(0, 2).toUpperCase() : (e[0][0] + e[e.length - 1][0]).toUpperCase();
24
+ }
25
+ function B({
26
+ name: n,
27
+ subtitle: e,
28
+ avatarSrc: o,
29
+ initials: l,
30
+ groups: c = [],
31
+ variant: s,
32
+ side: d = "bottom",
33
+ align: u = "end",
34
+ className: m
35
+ }) {
36
+ const p = l ?? U(n), f = s === "detailed";
37
+ return /* @__PURE__ */ t(y, { modal: !1, children: [
38
+ /* @__PURE__ */ r(M, { asChild: !0, children: /* @__PURE__ */ t(
39
+ "button",
40
+ {
41
+ type: "button",
42
+ "data-slot": "user-menu-trigger",
43
+ "aria-label": `${n} account menu`,
44
+ className: k(A({ variant: s }), m),
45
+ children: [
46
+ /* @__PURE__ */ t(b, { size: "sm", className: "bg-primary shrink-0", children: [
47
+ o && /* @__PURE__ */ r(N, { src: o, alt: n }),
48
+ /* @__PURE__ */ r(w, { className: "bg-primary text-primary-foreground group-data-[size=sm]/avatar:text-[10px] font-semibold", children: p })
49
+ ] }),
50
+ f && /* @__PURE__ */ t("div", { className: "flex flex-col items-start min-w-0", children: [
51
+ /* @__PURE__ */ r("span", { className: "text-xs font-medium text-foreground truncate", children: n }),
52
+ e && /* @__PURE__ */ r("span", { className: "text-[10px] text-muted-foreground uppercase tracking-wide truncate", children: e })
53
+ ] })
54
+ ]
55
+ }
56
+ ) }),
57
+ /* @__PURE__ */ t(
58
+ D,
59
+ {
60
+ "data-slot": "user-menu-content",
61
+ side: d,
62
+ align: u,
63
+ className: "min-w-[200px]",
64
+ children: [
65
+ /* @__PURE__ */ t("div", { className: "flex flex-col px-2 py-1.5", children: [
66
+ /* @__PURE__ */ r("span", { className: "text-sm font-semibold text-foreground truncate", children: n }),
67
+ e && /* @__PURE__ */ r("span", { className: "text-xs text-muted-foreground truncate", children: e })
68
+ ] }),
69
+ c.map((g, x) => /* @__PURE__ */ t(v.Fragment, { children: [
70
+ /* @__PURE__ */ r(C, {}),
71
+ g.items.map((a) => {
72
+ const i = a.icon;
73
+ return /* @__PURE__ */ t(
74
+ I,
75
+ {
76
+ variant: a.variant,
77
+ disabled: a.disabled,
78
+ onSelect: () => a.onClick?.(),
79
+ className: "cursor-pointer",
80
+ children: [
81
+ i && /* @__PURE__ */ r(i, { className: "w-4 h-4" }),
82
+ a.label
83
+ ]
84
+ },
85
+ a.id
86
+ );
87
+ })
88
+ ] }, x))
89
+ ]
90
+ }
91
+ )
92
+ ] });
93
+ }
94
+ export {
95
+ B as UserMenu,
96
+ U as getInitials,
97
+ A as userMenuTriggerVariants
98
+ };
99
+ //# sourceMappingURL=UserMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMenu.js","sources":["../../../../src/components/composed/UserMenu/UserMenu.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { type LucideIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UserMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional leading icon */\n icon?: LucideIcon | React.FC<React.SVGProps<SVGSVGElement>>;\n /** Click handler */\n onClick?: () => void;\n /** Disables the item */\n disabled?: boolean;\n /** Visual variant — `destructive` for sign-out / delete actions */\n variant?: \"default\" | \"destructive\";\n}\n\nexport interface UserMenuGroup {\n /** Items in this group; groups are separated by a divider */\n items: UserMenuItem[];\n}\n\nconst userMenuTriggerVariants = cva(\n \"flex items-center cursor-pointer bg-transparent border-none text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 rounded-md\",\n {\n variants: {\n variant: {\n /** Icon-only avatar — for the TopBar right slot or the collapsed rail */\n avatar: \"p-0 hover:opacity-85\",\n /** Avatar + name/subtitle row — for the expanded sidebar footer */\n detailed:\n \"gap-3 w-full px-1 py-1 text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground\",\n },\n },\n defaultVariants: { variant: \"avatar\" },\n }\n);\n\nexport interface UserMenuProps\n extends VariantProps<typeof userMenuTriggerVariants> {\n /** User's full name — used for the menu header and derived initials */\n name: string;\n /** Secondary line shown under the name (e.g. email or role) */\n subtitle?: string;\n /** Avatar image URL; falls back to initials when absent or on load error */\n avatarSrc?: string;\n /** Explicit initials override; otherwise derived from `name` */\n initials?: string;\n /** Menu item groups; each group is separated by a divider */\n groups?: UserMenuGroup[];\n /** Which side of the trigger the dropdown opens on */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Alignment of the dropdown relative to the trigger */\n align?: \"start\" | \"center\" | \"end\";\n /** Additional className for the trigger button */\n className?: string;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/** Derives up to two uppercase initials from a full name. */\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].substring(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n// =============================================================================\n// UserMenu\n// =============================================================================\n\n/**\n * User account affordance — an avatar (initials or image) that opens a dropdown\n * menu. A composition over the `Avatar` + `DropdownMenu` primitives.\n *\n * Focus trap, keyboard navigation, and Esc-to-close are handled by the\n * underlying Radix `DropdownMenu`.\n */\nfunction UserMenu({\n name,\n subtitle,\n avatarSrc,\n initials,\n groups = [],\n variant,\n side = \"bottom\",\n align = \"end\",\n className,\n}: UserMenuProps) {\n const resolvedInitials = initials ?? getInitials(name);\n const isDetailed = variant === \"detailed\";\n\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"user-menu-trigger\"\n aria-label={`${name} account menu`}\n className={cn(userMenuTriggerVariants({ variant }), className)}\n >\n <Avatar size=\"sm\" className=\"bg-primary shrink-0\">\n {avatarSrc && <AvatarImage src={avatarSrc} alt={name} />}\n <AvatarFallback className=\"bg-primary text-primary-foreground group-data-[size=sm]/avatar:text-[10px] font-semibold\">\n {resolvedInitials}\n </AvatarFallback>\n </Avatar>\n {isDetailed && (\n <div className=\"flex flex-col items-start min-w-0\">\n <span className=\"text-xs font-medium text-foreground truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-[10px] text-muted-foreground uppercase tracking-wide truncate\">\n {subtitle}\n </span>\n )}\n </div>\n )}\n </button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent\n data-slot=\"user-menu-content\"\n side={side}\n align={align}\n className=\"min-w-[200px]\"\n >\n {/* Header: name + subtitle */}\n <div className=\"flex flex-col px-2 py-1.5\">\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {name}\n </span>\n {subtitle && (\n <span className=\"text-xs text-muted-foreground truncate\">\n {subtitle}\n </span>\n )}\n </div>\n\n {groups.map((group, groupIndex) => (\n <React.Fragment key={groupIndex}>\n <DropdownMenuSeparator />\n {group.items.map((item) => {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n variant={item.variant}\n disabled={item.disabled}\n onSelect={() => item.onClick?.()}\n className=\"cursor-pointer\"\n >\n {Icon && <Icon className=\"w-4 h-4\" />}\n {item.label}\n </DropdownMenuItem>\n );\n })}\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { UserMenu, getInitials, userMenuTriggerVariants };\n"],"names":["userMenuTriggerVariants","cva","getInitials","name","parts","UserMenu","subtitle","avatarSrc","initials","groups","variant","side","align","className","resolvedInitials","isDetailed","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","cn","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","group","groupIndex","React","DropdownMenuSeparator","item","Icon","DropdownMenuItem"],"mappings":";;;;;;AAsCA,MAAMA,IAA0BC;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA;AAAA,QAEP,QAAQ;AAAA;AAAA,QAER,UACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB,EAAE,SAAS,SAAA;AAAA,EAAS;AAEzC;AA2BA,SAASC,EAAYC,GAAsB;AACzC,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AACrD,SAAIC,EAAM,WAAW,IAAU,KAC3BA,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,YAAA,KAChDA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAA;AACpD;AAaA,SAASC,EAAS;AAAA,EAChB,MAAAF;AAAA,EACA,UAAAG;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS,CAAA;AAAA,EACT,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAAkB;AAChB,QAAMC,IAAmBN,KAAYN,EAAYC,CAAI,GAC/CY,IAAaL,MAAY;AAE/B,SACE,gBAAAM,EAACC,GAAA,EAAa,OAAO,IACnB,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAoB,SAAO,IAC1B,UAAA,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAU;AAAA,QACV,cAAY,GAAGb,CAAI;AAAA,QACnB,WAAWiB,EAAGpB,EAAwB,EAAE,SAAAU,EAAA,CAAS,GAAGG,CAAS;AAAA,QAE7D,UAAA;AAAA,UAAA,gBAAAG,EAACK,GAAA,EAAO,MAAK,MAAK,WAAU,uBACzB,UAAA;AAAA,YAAAd,KAAa,gBAAAW,EAACI,GAAA,EAAY,KAAKf,GAAW,KAAKJ,GAAM;AAAA,YACtD,gBAAAe,EAACK,GAAA,EAAe,WAAU,4FACvB,UAAAT,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UACCC,KACC,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,YAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,gDACb,UAAAf,GACH;AAAA,YACCG,KACC,gBAAAY,EAAC,QAAA,EAAK,WAAU,sEACb,UAAAZ,EAAA,CACH;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,IAEA,gBAAAU;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,MAAAb;AAAA,QACA,OAAAC;AAAA,QACA,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,YAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,kDACb,UAAAf,GACH;AAAA,YACCG,KACC,gBAAAY,EAAC,QAAA,EAAK,WAAU,0CACb,UAAAZ,EAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UAECG,EAAO,IAAI,CAACgB,GAAOC,MAClB,gBAAAV,EAACW,EAAM,UAAN,EACC,UAAA;AAAA,YAAA,gBAAAT,EAACU,GAAA,EAAsB;AAAA,YACtBH,EAAM,MAAM,IAAI,CAACI,MAAS;AACzB,oBAAMC,IAAOD,EAAK;AAClB,qBACE,gBAAAb;AAAA,gBAACe;AAAA,gBAAA;AAAA,kBAEC,SAASF,EAAK;AAAA,kBACd,UAAUA,EAAK;AAAA,kBACf,UAAU,MAAMA,EAAK,UAAA;AAAA,kBACrB,WAAU;AAAA,kBAET,UAAA;AAAA,oBAAAC,KAAQ,gBAAAZ,EAACY,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,oBAClCD,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAPDA,EAAK;AAAA,cAAA;AAAA,YAUhB,CAAC;AAAA,UAAA,EAAA,GAhBkBH,CAiBrB,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react/jsx-runtime"),u=require("react"),n=require("./tdp-url.cjs"),l=u.createContext(null);function p(){const r=u.useContext(l);if(!r)throw new Error("useTdpNavigationContext must be used within a TdpNavigationProvider. Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.");return r}const f=({tdpBaseUrl:r,children:t})=>{const e=u.useMemo(()=>r?r.replace(/\/$/u,""):n.getTdpBaseUrlFromReferrer(),[r]),o=u.useMemo(()=>({tdpBaseUrl:e,getTdpUrl:i=>e?n.buildTdpUrl(e,i):null,navigateToTdp:(i,a)=>{if(!e){console.warn("[TdpNavigation] Cannot navigate: TDP base URL not resolved");return}const d=n.buildTdpUrl(e,i);d&&n.navigateToTdpUrl(d,a)}}),[e]);return T.jsx(l.Provider,{value:o,children:t})};function b(r={}){const{tdpBaseUrl:t}=r,e=u.useMemo(()=>t?t.replace(/\/$/u,""):n.getTdpBaseUrlFromReferrer(),[t]);return u.useMemo(()=>({tdpBaseUrl:e,getTdpUrl:o=>e?n.buildTdpUrl(e,o):null,navigateToTdp:(o,i)=>{if(!e){console.warn("[useTdpNavigation] Cannot navigate: TDP base URL not resolved");return}const a=n.buildTdpUrl(e,o);a&&n.navigateToTdpUrl(a,i)}}),[e])}const U=({path:r,navigationOptions:t={newTab:!0},children:e,onClick:o,className:i,...a})=>{const{getTdpUrl:d,navigateToTdp:v}=p(),c=d(r),g=s=>{s.metaKey||s.ctrlKey||s.shiftKey||(s.preventDefault(),o?.(s),v(r,t))};return T.jsx("a",{href:c??"#",target:t.newTab?"_blank":void 0,rel:t.newTab?"noopener noreferrer":void 0,onClick:g,className:`no-underline cursor-pointer hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${i??""}`,style:{color:"var(--primary)",outlineColor:"var(--border)"},...a,children:e})};exports.TDPLink=U;exports.TdpNavigationContext=l;exports.TdpNavigationProvider=f;exports.useTdpNavigation=b;exports.useTdpNavigationContext=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react/jsx-runtime"),u=require("react"),n=require("./tdp-url.cjs"),l=u.createContext(null);function p(){const r=u.useContext(l);if(!r)throw new Error("useTdpNavigationContext must be used within a TdpNavigationProvider. Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.");return r}const f=({tdpBaseUrl:r,children:t})=>{const e=u.useMemo(()=>r?r.replace(/\/$/u,""):n.getTdpBaseUrlFromReferrer(),[r]),o=u.useMemo(()=>({tdpBaseUrl:e,getTdpUrl:i=>e?n.buildTdpUrl(e,i):null,navigateToTdp:(i,a)=>{if(!e){console.warn("[TdpNavigation] Cannot navigate: TDP base URL not resolved");return}const d=n.buildTdpUrl(e,i);d&&n.navigateToTdpUrl(d,a)}}),[e]);return T.jsx(l.Provider,{value:o,children:t})};function b(r={}){const{tdpBaseUrl:t}=r,e=u.useMemo(()=>t?t.replace(/\/$/u,""):n.getTdpBaseUrlFromReferrer(),[t]);return u.useMemo(()=>({tdpBaseUrl:e,getTdpUrl:o=>e?n.buildTdpUrl(e,o):null,navigateToTdp:(o,i)=>{if(!e){console.warn("[useTdpNavigation] Cannot navigate: TDP base URL not resolved");return}const a=n.buildTdpUrl(e,o);a&&n.navigateToTdpUrl(a,i)}}),[e])}const U=({path:r,navigationOptions:t={newTab:!0},children:e,onClick:o,className:i,...a})=>{const{getTdpUrl:d,navigateToTdp:c}=p(),v=d(r),g=s=>{s.metaKey||s.ctrlKey||s.shiftKey||(s.preventDefault(),o?.(s),c(r,t))};return T.jsx("a",{href:v??"#",target:t.newTab?"_blank":void 0,rel:t.newTab?"noopener noreferrer":void 0,onClick:g,className:`underline underline-offset-2 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${i??""}`,style:{color:"var(--primary)",outlineColor:"var(--border)"},...a,children:e})};exports.TDPLink=U;exports.TdpNavigationContext=l;exports.TdpNavigationProvider=f;exports.useTdpNavigation=b;exports.useTdpNavigationContext=p;
2
2
  //# sourceMappingURL=tdp-link.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tdp-link.cjs","sources":["../../../src/components/composed/tdp-link.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport { buildTdpUrl, getTdpBaseUrlFromReferrer, navigateToTdpUrl } from './tdp-url';\n\nimport type { TdpNavigationOptions } from './tdp-url';\n\nexport interface TdpNavigationContextValue {\n /** The resolved TDP base URL (origin + org path prefix), or null if not resolved */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path. Returns null if base URL is not resolved. */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page. */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\nexport const TdpNavigationContext = createContext<TdpNavigationContextValue | null>(null);\n\n/**\n * Access TDP navigation helpers from the nearest TdpNavigationProvider.\n *\n * @throws Error if used outside a TdpNavigationProvider\n *\n * @example\n * ```tsx\n * const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n * ```\n */\nexport function useTdpNavigationContext(): TdpNavigationContextValue {\n const context = useContext(TdpNavigationContext);\n if (!context) {\n throw new Error(\n 'useTdpNavigationContext must be used within a TdpNavigationProvider. ' +\n 'Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.',\n );\n }\n return context;\n}\n\n/** Props for the TdpNavigationProvider component */\nexport interface TdpNavigationProviderProps {\n /**\n * Explicit TDP base URL override. Skips auto-detection when provided.\n */\n tdpBaseUrl?: string;\n children: React.ReactNode;\n}\n\n/**\n * Provider that resolves the TDP base URL and exposes navigation helpers.\n *\n * Resolution order:\n * 1. Explicit `tdpBaseUrl` prop (if provided)\n * 2. `document.referrer` parsing (production iframe)\n *\n * @example\n * ```tsx\n * <TdpNavigationProvider tdpBaseUrl=\"https://tetrascience.com/my-org\">\n * <App />\n * </TdpNavigationProvider>\n * ```\n */\nexport const TdpNavigationProvider: React.FC<TdpNavigationProviderProps> = ({\n tdpBaseUrl: explicitBaseUrl,\n children,\n}) => {\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) {\n return explicitBaseUrl.replace(/\\/$/u, '');\n }\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n const contextValue = useMemo<TdpNavigationContextValue>(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => {\n if (!tdpBaseUrl) return null;\n return buildTdpUrl(tdpBaseUrl, path);\n },\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[TdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) {\n navigateToTdpUrl(url, options);\n }\n },\n }),\n [tdpBaseUrl],\n );\n\n return <TdpNavigationContext.Provider value={contextValue}>{children}</TdpNavigationContext.Provider>;\n};\n\nexport interface UseTdpNavigationOptions {\n /** Explicit TDP base URL override */\n tdpBaseUrl?: string;\n}\n\nexport interface UseTdpNavigationReturn {\n /** The resolved TDP base URL, or null */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\n/**\n * Standalone hook for TDP navigation (no provider required).\n *\n * For simple use cases where you don't need a TdpNavigationProvider.\n * If multiple components need navigation, prefer the provider approach.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { getTdpUrl, navigateToTdp } = useTdpNavigation({\n * tdpBaseUrl: \"https://tetrascience.com/my-org\",\n * });\n *\n * return (\n * <a href={getTdpUrl(\"/file/abc\") ?? \"#\"} target=\"_blank\" rel=\"noopener noreferrer\">\n * View File\n * </a>\n * );\n * }\n * ```\n */\nexport function useTdpNavigation(options: UseTdpNavigationOptions = {}): UseTdpNavigationReturn {\n const { tdpBaseUrl: explicitBaseUrl } = options;\n\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) return explicitBaseUrl.replace(/\\/$/u, '');\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n return useMemo(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => (tdpBaseUrl ? buildTdpUrl(tdpBaseUrl, path) : null),\n navigateToTdp: (path: string, opts?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[useTdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) navigateToTdpUrl(url, opts);\n },\n }),\n [tdpBaseUrl],\n );\n}\n\n/** Props for the TDPLink component */\nexport interface TDPLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** TDP page path (e.g., \"/file/abc-123\" or use tdpPaths helpers) */\n path: string;\n /** Navigation behavior. Default: { newTab: true } */\n navigationOptions?: TdpNavigationOptions;\n children: React.ReactNode;\n ref?: React.Ref<HTMLAnchorElement>;\n}\n\n/**\n * A link component that navigates to TDP pages.\n *\n * Renders a standard `<a>` tag with the correct href for right-click\n * \"Open in new tab\" support, accessibility, and SEO.\n *\n * Must be used inside a `<TdpNavigationProvider>`.\n *\n * @example\n * ```tsx\n * import { TDPLink, tdpPaths } from '@tetrascience-npm/tetrascience-react-ui';\n *\n * <TDPLink path={tdpPaths.fileDetails(\"abc-123\")}>\n * View File Details\n * </TDPLink>\n *\n * <TDPLink path=\"/search?q=test\" navigationOptions={{ newTab: false }}>\n * Search in TDP (same tab)\n * </TDPLink>\n * ```\n */\nexport const TDPLink: React.FC<TDPLinkProps> = ({\n path,\n navigationOptions = { newTab: true },\n children,\n onClick,\n className,\n ...rest\n}) => {\n const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n const href = getTdpUrl(path);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // Let modifier-key clicks through for native \"open in new tab\" behavior\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n onClick?.(e);\n navigateToTdp(path, navigationOptions);\n };\n\n return (\n <a\n href={href ?? '#'}\n target={navigationOptions.newTab ? '_blank' : undefined}\n rel={navigationOptions.newTab ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n className={`no-underline cursor-pointer hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${className ?? ''}`}\n style={{ color: 'var(--primary)', outlineColor: 'var(--border)' }}\n {...rest}\n >\n {children}\n </a>\n );\n};\n"],"names":["TdpNavigationContext","createContext","useTdpNavigationContext","context","useContext","TdpNavigationProvider","explicitBaseUrl","children","tdpBaseUrl","useMemo","getTdpBaseUrlFromReferrer","contextValue","path","buildTdpUrl","options","url","navigateToTdpUrl","useTdpNavigation","opts","TDPLink","navigationOptions","onClick","className","rest","getTdpUrl","navigateToTdp","href","handleClick","e","jsx"],"mappings":"mKAeaA,EAAuBC,EAAAA,cAAgD,IAAI,EAYjF,SAASC,GAAqD,CACnE,MAAMC,EAAUC,EAAAA,WAAWJ,CAAoB,EAC/C,GAAI,CAACG,EACH,MAAM,IAAI,MACR,wKAAA,EAIJ,OAAOA,CACT,CAyBO,MAAME,EAA8D,CAAC,CAC1E,WAAYC,EACZ,SAAAC,CACF,IAAM,CACJ,MAAMC,EAAaC,EAAAA,QAAQ,IACrBH,EACKA,EAAgB,QAAQ,OAAQ,EAAE,EAEpCI,4BAAA,EACN,CAACJ,CAAe,CAAC,EAEdK,EAAeF,EAAAA,QACnB,KAAO,CACL,WAAAD,EACA,UAAYI,GACLJ,EACEK,EAAAA,YAAYL,EAAYI,CAAI,EADX,KAG1B,cAAe,CAACA,EAAcE,IAAmC,CAC/D,GAAI,CAACN,EAAY,CACf,QAAQ,KAAK,4DAA4D,EACzE,MACF,CACA,MAAMO,EAAMF,EAAAA,YAAYL,EAAYI,CAAI,EACpCG,GACFC,EAAAA,iBAAiBD,EAAKD,CAAO,CAEjC,CAAA,GAEF,CAACN,CAAU,CAAA,EAGb,aAAQR,EAAqB,SAArB,CAA8B,MAAOW,EAAe,SAAAJ,EAAS,CACvE,EAqCO,SAASU,EAAiBH,EAAmC,GAA4B,CAC9F,KAAM,CAAE,WAAYR,CAAA,EAAoBQ,EAElCN,EAAaC,EAAAA,QAAQ,IACrBH,EAAwBA,EAAgB,QAAQ,OAAQ,EAAE,EACvDI,4BAAA,EACN,CAACJ,CAAe,CAAC,EAEpB,OAAOG,EAAAA,QACL,KAAO,CACL,WAAAD,EACA,UAAYI,GAAkBJ,EAAaK,EAAAA,YAAYL,EAAYI,CAAI,EAAI,KAC3E,cAAe,CAACA,EAAcM,IAAgC,CAC5D,GAAI,CAACV,EAAY,CACf,QAAQ,KAAK,+DAA+D,EAC5E,MACF,CACA,MAAMO,EAAMF,EAAAA,YAAYL,EAAYI,CAAI,EACpCG,GAAKC,EAAAA,iBAAiBD,EAAKG,CAAI,CACrC,CAAA,GAEF,CAACV,CAAU,CAAA,CAEf,CAiCO,MAAMW,EAAkC,CAAC,CAC9C,KAAAP,EACA,kBAAAQ,EAAoB,CAAE,OAAQ,EAAA,EAC9B,SAAAb,EACA,QAAAc,EACA,UAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAAE,UAAAC,EAAW,cAAAC,CAAA,EAAkBvB,EAAA,EAC/BwB,EAAOF,EAAUZ,CAAI,EAErBe,EAAeC,GAA2C,CAE1DA,EAAE,SAAWA,EAAE,SAAWA,EAAE,WAIhCA,EAAE,eAAA,EACFP,IAAUO,CAAC,EACXH,EAAcb,EAAMQ,CAAiB,EACvC,EAEA,OACES,EAAAA,IAAC,IAAA,CACC,KAAMH,GAAQ,IACd,OAAQN,EAAkB,OAAS,SAAW,OAC9C,IAAKA,EAAkB,OAAS,sBAAwB,OACxD,QAASO,EACT,UAAW,kIAAkIL,GAAa,EAAE,GAC5J,MAAO,CAAE,MAAO,iBAAkB,aAAc,eAAA,EAC/C,GAAGC,EAEH,SAAAhB,CAAA,CAAA,CAGP"}
1
+ {"version":3,"file":"tdp-link.cjs","sources":["../../../src/components/composed/tdp-link.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport { buildTdpUrl, getTdpBaseUrlFromReferrer, navigateToTdpUrl } from './tdp-url';\n\nimport type { TdpNavigationOptions } from './tdp-url';\n\nexport interface TdpNavigationContextValue {\n /** The resolved TDP base URL (origin + org path prefix), or null if not resolved */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path. Returns null if base URL is not resolved. */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page. */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\nexport const TdpNavigationContext = createContext<TdpNavigationContextValue | null>(null);\n\n/**\n * Access TDP navigation helpers from the nearest TdpNavigationProvider.\n *\n * @throws Error if used outside a TdpNavigationProvider\n *\n * @example\n * ```tsx\n * const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n * ```\n */\nexport function useTdpNavigationContext(): TdpNavigationContextValue {\n const context = useContext(TdpNavigationContext);\n if (!context) {\n throw new Error(\n 'useTdpNavigationContext must be used within a TdpNavigationProvider. ' +\n 'Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.',\n );\n }\n return context;\n}\n\n/** Props for the TdpNavigationProvider component */\nexport interface TdpNavigationProviderProps {\n /**\n * Explicit TDP base URL override. Skips auto-detection when provided.\n */\n tdpBaseUrl?: string;\n children: React.ReactNode;\n}\n\n/**\n * Provider that resolves the TDP base URL and exposes navigation helpers.\n *\n * Resolution order:\n * 1. Explicit `tdpBaseUrl` prop (if provided)\n * 2. `document.referrer` parsing (production iframe)\n *\n * @example\n * ```tsx\n * <TdpNavigationProvider tdpBaseUrl=\"https://tetrascience.com/my-org\">\n * <App />\n * </TdpNavigationProvider>\n * ```\n */\nexport const TdpNavigationProvider: React.FC<TdpNavigationProviderProps> = ({\n tdpBaseUrl: explicitBaseUrl,\n children,\n}) => {\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) {\n return explicitBaseUrl.replace(/\\/$/u, '');\n }\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n const contextValue = useMemo<TdpNavigationContextValue>(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => {\n if (!tdpBaseUrl) return null;\n return buildTdpUrl(tdpBaseUrl, path);\n },\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[TdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) {\n navigateToTdpUrl(url, options);\n }\n },\n }),\n [tdpBaseUrl],\n );\n\n return <TdpNavigationContext.Provider value={contextValue}>{children}</TdpNavigationContext.Provider>;\n};\n\nexport interface UseTdpNavigationOptions {\n /** Explicit TDP base URL override */\n tdpBaseUrl?: string;\n}\n\nexport interface UseTdpNavigationReturn {\n /** The resolved TDP base URL, or null */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\n/**\n * Standalone hook for TDP navigation (no provider required).\n *\n * For simple use cases where you don't need a TdpNavigationProvider.\n * If multiple components need navigation, prefer the provider approach.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { getTdpUrl, navigateToTdp } = useTdpNavigation({\n * tdpBaseUrl: \"https://tetrascience.com/my-org\",\n * });\n *\n * return (\n * <a href={getTdpUrl(\"/file/abc\") ?? \"#\"} target=\"_blank\" rel=\"noopener noreferrer\">\n * View File\n * </a>\n * );\n * }\n * ```\n */\nexport function useTdpNavigation(options: UseTdpNavigationOptions = {}): UseTdpNavigationReturn {\n const { tdpBaseUrl: explicitBaseUrl } = options;\n\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) return explicitBaseUrl.replace(/\\/$/u, '');\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n return useMemo(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => (tdpBaseUrl ? buildTdpUrl(tdpBaseUrl, path) : null),\n navigateToTdp: (path: string, opts?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[useTdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) navigateToTdpUrl(url, opts);\n },\n }),\n [tdpBaseUrl],\n );\n}\n\n/** Props for the TDPLink component */\nexport interface TDPLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** TDP page path (e.g., \"/file/abc-123\" or use tdpPaths helpers) */\n path: string;\n /** Navigation behavior. Default: { newTab: true } */\n navigationOptions?: TdpNavigationOptions;\n children: React.ReactNode;\n ref?: React.Ref<HTMLAnchorElement>;\n}\n\n/**\n * A link component that navigates to TDP pages.\n *\n * Renders a standard `<a>` tag with the correct href for right-click\n * \"Open in new tab\" support, accessibility, and SEO.\n *\n * Must be used inside a `<TdpNavigationProvider>`.\n *\n * @example\n * ```tsx\n * import { TDPLink, tdpPaths } from '@tetrascience-npm/tetrascience-react-ui';\n *\n * <TDPLink path={tdpPaths.fileDetails(\"abc-123\")}>\n * View File Details\n * </TDPLink>\n *\n * <TDPLink path=\"/search?q=test\" navigationOptions={{ newTab: false }}>\n * Search in TDP (same tab)\n * </TDPLink>\n * ```\n */\nexport const TDPLink: React.FC<TDPLinkProps> = ({\n path,\n navigationOptions = { newTab: true },\n children,\n onClick,\n className,\n ...rest\n}) => {\n const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n const href = getTdpUrl(path);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // Let modifier-key clicks through for native \"open in new tab\" behavior\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n onClick?.(e);\n navigateToTdp(path, navigationOptions);\n };\n\n return (\n <a\n href={href ?? '#'}\n target={navigationOptions.newTab ? '_blank' : undefined}\n rel={navigationOptions.newTab ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n className={`underline underline-offset-2 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${className ?? ''}`}\n style={{ color: 'var(--primary)', outlineColor: 'var(--border)' }}\n {...rest}\n >\n {children}\n </a>\n );\n};\n"],"names":["TdpNavigationContext","createContext","useTdpNavigationContext","context","useContext","TdpNavigationProvider","explicitBaseUrl","children","tdpBaseUrl","useMemo","getTdpBaseUrlFromReferrer","contextValue","path","buildTdpUrl","options","url","navigateToTdpUrl","useTdpNavigation","opts","TDPLink","navigationOptions","onClick","className","rest","getTdpUrl","navigateToTdp","href","handleClick","e","jsx"],"mappings":"mKAeaA,EAAuBC,EAAAA,cAAgD,IAAI,EAYjF,SAASC,GAAqD,CACnE,MAAMC,EAAUC,EAAAA,WAAWJ,CAAoB,EAC/C,GAAI,CAACG,EACH,MAAM,IAAI,MACR,wKAAA,EAIJ,OAAOA,CACT,CAyBO,MAAME,EAA8D,CAAC,CAC1E,WAAYC,EACZ,SAAAC,CACF,IAAM,CACJ,MAAMC,EAAaC,EAAAA,QAAQ,IACrBH,EACKA,EAAgB,QAAQ,OAAQ,EAAE,EAEpCI,4BAAA,EACN,CAACJ,CAAe,CAAC,EAEdK,EAAeF,EAAAA,QACnB,KAAO,CACL,WAAAD,EACA,UAAYI,GACLJ,EACEK,EAAAA,YAAYL,EAAYI,CAAI,EADX,KAG1B,cAAe,CAACA,EAAcE,IAAmC,CAC/D,GAAI,CAACN,EAAY,CACf,QAAQ,KAAK,4DAA4D,EACzE,MACF,CACA,MAAMO,EAAMF,EAAAA,YAAYL,EAAYI,CAAI,EACpCG,GACFC,EAAAA,iBAAiBD,EAAKD,CAAO,CAEjC,CAAA,GAEF,CAACN,CAAU,CAAA,EAGb,aAAQR,EAAqB,SAArB,CAA8B,MAAOW,EAAe,SAAAJ,EAAS,CACvE,EAqCO,SAASU,EAAiBH,EAAmC,GAA4B,CAC9F,KAAM,CAAE,WAAYR,CAAA,EAAoBQ,EAElCN,EAAaC,EAAAA,QAAQ,IACrBH,EAAwBA,EAAgB,QAAQ,OAAQ,EAAE,EACvDI,4BAAA,EACN,CAACJ,CAAe,CAAC,EAEpB,OAAOG,EAAAA,QACL,KAAO,CACL,WAAAD,EACA,UAAYI,GAAkBJ,EAAaK,EAAAA,YAAYL,EAAYI,CAAI,EAAI,KAC3E,cAAe,CAACA,EAAcM,IAAgC,CAC5D,GAAI,CAACV,EAAY,CACf,QAAQ,KAAK,+DAA+D,EAC5E,MACF,CACA,MAAMO,EAAMF,EAAAA,YAAYL,EAAYI,CAAI,EACpCG,GAAKC,EAAAA,iBAAiBD,EAAKG,CAAI,CACrC,CAAA,GAEF,CAACV,CAAU,CAAA,CAEf,CAiCO,MAAMW,EAAkC,CAAC,CAC9C,KAAAP,EACA,kBAAAQ,EAAoB,CAAE,OAAQ,EAAA,EAC9B,SAAAb,EACA,QAAAc,EACA,UAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAAE,UAAAC,EAAW,cAAAC,CAAA,EAAkBvB,EAAA,EAC/BwB,EAAOF,EAAUZ,CAAI,EAErBe,EAAeC,GAA2C,CAE1DA,EAAE,SAAWA,EAAE,SAAWA,EAAE,WAIhCA,EAAE,eAAA,EACFP,IAAUO,CAAC,EACXH,EAAcb,EAAMQ,CAAiB,EACvC,EAEA,OACES,EAAAA,IAAC,IAAA,CACC,KAAMH,GAAQ,IACd,OAAQN,EAAkB,OAAS,SAAW,OAC9C,IAAKA,EAAkB,OAAS,sBAAwB,OACxD,QAASO,EACT,UAAW,kIAAkIL,GAAa,EAAE,GAC5J,MAAO,CAAE,MAAO,iBAAkB,aAAc,eAAA,EAC/C,GAAGC,EAEH,SAAAhB,CAAA,CAAA,CAGP"}
@@ -10,7 +10,7 @@ function N() {
10
10
  );
11
11
  return r;
12
12
  }
13
- const w = ({
13
+ const x = ({
14
14
  tdpBaseUrl: r,
15
15
  children: t
16
16
  }) => {
@@ -31,7 +31,7 @@ const w = ({
31
31
  );
32
32
  return /* @__PURE__ */ d(v.Provider, { value: n, children: t });
33
33
  };
34
- function x(r = {}) {
34
+ function h(r = {}) {
35
35
  const { tdpBaseUrl: t } = r, e = s(() => t ? t.replace(/\/$/u, "") : p(), [t]);
36
36
  return s(
37
37
  () => ({
@@ -67,7 +67,7 @@ const P = ({
67
67
  target: t.newTab ? "_blank" : void 0,
68
68
  rel: t.newTab ? "noopener noreferrer" : void 0,
69
69
  onClick: g,
70
- className: `no-underline cursor-pointer hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${o ?? ""}`,
70
+ className: `underline underline-offset-2 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${o ?? ""}`,
71
71
  style: { color: "var(--primary)", outlineColor: "var(--border)" },
72
72
  ...a,
73
73
  children: e
@@ -77,8 +77,8 @@ const P = ({
77
77
  export {
78
78
  P as TDPLink,
79
79
  v as TdpNavigationContext,
80
- w as TdpNavigationProvider,
81
- x as useTdpNavigation,
80
+ x as TdpNavigationProvider,
81
+ h as useTdpNavigation,
82
82
  N as useTdpNavigationContext
83
83
  };
84
84
  //# sourceMappingURL=tdp-link.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tdp-link.js","sources":["../../../src/components/composed/tdp-link.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport { buildTdpUrl, getTdpBaseUrlFromReferrer, navigateToTdpUrl } from './tdp-url';\n\nimport type { TdpNavigationOptions } from './tdp-url';\n\nexport interface TdpNavigationContextValue {\n /** The resolved TDP base URL (origin + org path prefix), or null if not resolved */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path. Returns null if base URL is not resolved. */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page. */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\nexport const TdpNavigationContext = createContext<TdpNavigationContextValue | null>(null);\n\n/**\n * Access TDP navigation helpers from the nearest TdpNavigationProvider.\n *\n * @throws Error if used outside a TdpNavigationProvider\n *\n * @example\n * ```tsx\n * const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n * ```\n */\nexport function useTdpNavigationContext(): TdpNavigationContextValue {\n const context = useContext(TdpNavigationContext);\n if (!context) {\n throw new Error(\n 'useTdpNavigationContext must be used within a TdpNavigationProvider. ' +\n 'Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.',\n );\n }\n return context;\n}\n\n/** Props for the TdpNavigationProvider component */\nexport interface TdpNavigationProviderProps {\n /**\n * Explicit TDP base URL override. Skips auto-detection when provided.\n */\n tdpBaseUrl?: string;\n children: React.ReactNode;\n}\n\n/**\n * Provider that resolves the TDP base URL and exposes navigation helpers.\n *\n * Resolution order:\n * 1. Explicit `tdpBaseUrl` prop (if provided)\n * 2. `document.referrer` parsing (production iframe)\n *\n * @example\n * ```tsx\n * <TdpNavigationProvider tdpBaseUrl=\"https://tetrascience.com/my-org\">\n * <App />\n * </TdpNavigationProvider>\n * ```\n */\nexport const TdpNavigationProvider: React.FC<TdpNavigationProviderProps> = ({\n tdpBaseUrl: explicitBaseUrl,\n children,\n}) => {\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) {\n return explicitBaseUrl.replace(/\\/$/u, '');\n }\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n const contextValue = useMemo<TdpNavigationContextValue>(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => {\n if (!tdpBaseUrl) return null;\n return buildTdpUrl(tdpBaseUrl, path);\n },\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[TdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) {\n navigateToTdpUrl(url, options);\n }\n },\n }),\n [tdpBaseUrl],\n );\n\n return <TdpNavigationContext.Provider value={contextValue}>{children}</TdpNavigationContext.Provider>;\n};\n\nexport interface UseTdpNavigationOptions {\n /** Explicit TDP base URL override */\n tdpBaseUrl?: string;\n}\n\nexport interface UseTdpNavigationReturn {\n /** The resolved TDP base URL, or null */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\n/**\n * Standalone hook for TDP navigation (no provider required).\n *\n * For simple use cases where you don't need a TdpNavigationProvider.\n * If multiple components need navigation, prefer the provider approach.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { getTdpUrl, navigateToTdp } = useTdpNavigation({\n * tdpBaseUrl: \"https://tetrascience.com/my-org\",\n * });\n *\n * return (\n * <a href={getTdpUrl(\"/file/abc\") ?? \"#\"} target=\"_blank\" rel=\"noopener noreferrer\">\n * View File\n * </a>\n * );\n * }\n * ```\n */\nexport function useTdpNavigation(options: UseTdpNavigationOptions = {}): UseTdpNavigationReturn {\n const { tdpBaseUrl: explicitBaseUrl } = options;\n\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) return explicitBaseUrl.replace(/\\/$/u, '');\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n return useMemo(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => (tdpBaseUrl ? buildTdpUrl(tdpBaseUrl, path) : null),\n navigateToTdp: (path: string, opts?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[useTdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) navigateToTdpUrl(url, opts);\n },\n }),\n [tdpBaseUrl],\n );\n}\n\n/** Props for the TDPLink component */\nexport interface TDPLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** TDP page path (e.g., \"/file/abc-123\" or use tdpPaths helpers) */\n path: string;\n /** Navigation behavior. Default: { newTab: true } */\n navigationOptions?: TdpNavigationOptions;\n children: React.ReactNode;\n ref?: React.Ref<HTMLAnchorElement>;\n}\n\n/**\n * A link component that navigates to TDP pages.\n *\n * Renders a standard `<a>` tag with the correct href for right-click\n * \"Open in new tab\" support, accessibility, and SEO.\n *\n * Must be used inside a `<TdpNavigationProvider>`.\n *\n * @example\n * ```tsx\n * import { TDPLink, tdpPaths } from '@tetrascience-npm/tetrascience-react-ui';\n *\n * <TDPLink path={tdpPaths.fileDetails(\"abc-123\")}>\n * View File Details\n * </TDPLink>\n *\n * <TDPLink path=\"/search?q=test\" navigationOptions={{ newTab: false }}>\n * Search in TDP (same tab)\n * </TDPLink>\n * ```\n */\nexport const TDPLink: React.FC<TDPLinkProps> = ({\n path,\n navigationOptions = { newTab: true },\n children,\n onClick,\n className,\n ...rest\n}) => {\n const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n const href = getTdpUrl(path);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // Let modifier-key clicks through for native \"open in new tab\" behavior\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n onClick?.(e);\n navigateToTdp(path, navigationOptions);\n };\n\n return (\n <a\n href={href ?? '#'}\n target={navigationOptions.newTab ? '_blank' : undefined}\n rel={navigationOptions.newTab ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n className={`no-underline cursor-pointer hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${className ?? ''}`}\n style={{ color: 'var(--primary)', outlineColor: 'var(--border)' }}\n {...rest}\n >\n {children}\n </a>\n );\n};\n"],"names":["TdpNavigationContext","createContext","useTdpNavigationContext","context","useContext","TdpNavigationProvider","explicitBaseUrl","children","tdpBaseUrl","useMemo","getTdpBaseUrlFromReferrer","contextValue","path","buildTdpUrl","options","url","navigateToTdpUrl","useTdpNavigation","opts","TDPLink","navigationOptions","onClick","className","rest","getTdpUrl","navigateToTdp","href","handleClick","e","jsx"],"mappings":";;;AAeO,MAAMA,IAAuBC,EAAgD,IAAI;AAYjF,SAASC,IAAqD;AACnE,QAAMC,IAAUC,EAAWJ,CAAoB;AAC/C,MAAI,CAACG;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAOA;AACT;AAyBO,MAAME,IAA8D,CAAC;AAAA,EAC1E,YAAYC;AAAA,EACZ,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAaC,EAAQ,MACrBH,IACKA,EAAgB,QAAQ,QAAQ,EAAE,IAEpCI,EAAA,GACN,CAACJ,CAAe,CAAC,GAEdK,IAAeF;AAAA,IACnB,OAAO;AAAA,MACL,YAAAD;AAAA,MACA,WAAW,CAACI,MACLJ,IACEK,EAAYL,GAAYI,CAAI,IADX;AAAA,MAG1B,eAAe,CAACA,GAAcE,MAAmC;AAC/D,YAAI,CAACN,GAAY;AACf,kBAAQ,KAAK,4DAA4D;AACzE;AAAA,QACF;AACA,cAAMO,IAAMF,EAAYL,GAAYI,CAAI;AACxC,QAAIG,KACFC,EAAiBD,GAAKD,CAAO;AAAA,MAEjC;AAAA,IAAA;AAAA,IAEF,CAACN,CAAU;AAAA,EAAA;AAGb,2BAAQR,EAAqB,UAArB,EAA8B,OAAOW,GAAe,UAAAJ,GAAS;AACvE;AAqCO,SAASU,EAAiBH,IAAmC,IAA4B;AAC9F,QAAM,EAAE,YAAYR,EAAA,IAAoBQ,GAElCN,IAAaC,EAAQ,MACrBH,IAAwBA,EAAgB,QAAQ,QAAQ,EAAE,IACvDI,EAAA,GACN,CAACJ,CAAe,CAAC;AAEpB,SAAOG;AAAA,IACL,OAAO;AAAA,MACL,YAAAD;AAAA,MACA,WAAW,CAACI,MAAkBJ,IAAaK,EAAYL,GAAYI,CAAI,IAAI;AAAA,MAC3E,eAAe,CAACA,GAAcM,MAAgC;AAC5D,YAAI,CAACV,GAAY;AACf,kBAAQ,KAAK,+DAA+D;AAC5E;AAAA,QACF;AACA,cAAMO,IAAMF,EAAYL,GAAYI,CAAI;AACxC,QAAIG,KAAKC,EAAiBD,GAAKG,CAAI;AAAA,MACrC;AAAA,IAAA;AAAA,IAEF,CAACV,CAAU;AAAA,EAAA;AAEf;AAiCO,MAAMW,IAAkC,CAAC;AAAA,EAC9C,MAAAP;AAAA,EACA,mBAAAQ,IAAoB,EAAE,QAAQ,GAAA;AAAA,EAC9B,UAAAb;AAAA,EACA,SAAAc;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,WAAAC,GAAW,eAAAC,EAAA,IAAkBvB,EAAA,GAC/BwB,IAAOF,EAAUZ,CAAI,GAErBe,IAAc,CAACC,MAA2C;AAE9D,IAAIA,EAAE,WAAWA,EAAE,WAAWA,EAAE,aAIhCA,EAAE,eAAA,GACFP,IAAUO,CAAC,GACXH,EAAcb,GAAMQ,CAAiB;AAAA,EACvC;AAEA,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAMH,KAAQ;AAAA,MACd,QAAQN,EAAkB,SAAS,WAAW;AAAA,MAC9C,KAAKA,EAAkB,SAAS,wBAAwB;AAAA,MACxD,SAASO;AAAA,MACT,WAAW,kIAAkIL,KAAa,EAAE;AAAA,MAC5J,OAAO,EAAE,OAAO,kBAAkB,cAAc,gBAAA;AAAA,MAC/C,GAAGC;AAAA,MAEH,UAAAhB;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"tdp-link.js","sources":["../../../src/components/composed/tdp-link.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport { buildTdpUrl, getTdpBaseUrlFromReferrer, navigateToTdpUrl } from './tdp-url';\n\nimport type { TdpNavigationOptions } from './tdp-url';\n\nexport interface TdpNavigationContextValue {\n /** The resolved TDP base URL (origin + org path prefix), or null if not resolved */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path. Returns null if base URL is not resolved. */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page. */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\nexport const TdpNavigationContext = createContext<TdpNavigationContextValue | null>(null);\n\n/**\n * Access TDP navigation helpers from the nearest TdpNavigationProvider.\n *\n * @throws Error if used outside a TdpNavigationProvider\n *\n * @example\n * ```tsx\n * const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n * ```\n */\nexport function useTdpNavigationContext(): TdpNavigationContextValue {\n const context = useContext(TdpNavigationContext);\n if (!context) {\n throw new Error(\n 'useTdpNavigationContext must be used within a TdpNavigationProvider. ' +\n 'Wrap your app with <TdpNavigationProvider> or use the standalone useTdpNavigation() hook instead.',\n );\n }\n return context;\n}\n\n/** Props for the TdpNavigationProvider component */\nexport interface TdpNavigationProviderProps {\n /**\n * Explicit TDP base URL override. Skips auto-detection when provided.\n */\n tdpBaseUrl?: string;\n children: React.ReactNode;\n}\n\n/**\n * Provider that resolves the TDP base URL and exposes navigation helpers.\n *\n * Resolution order:\n * 1. Explicit `tdpBaseUrl` prop (if provided)\n * 2. `document.referrer` parsing (production iframe)\n *\n * @example\n * ```tsx\n * <TdpNavigationProvider tdpBaseUrl=\"https://tetrascience.com/my-org\">\n * <App />\n * </TdpNavigationProvider>\n * ```\n */\nexport const TdpNavigationProvider: React.FC<TdpNavigationProviderProps> = ({\n tdpBaseUrl: explicitBaseUrl,\n children,\n}) => {\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) {\n return explicitBaseUrl.replace(/\\/$/u, '');\n }\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n const contextValue = useMemo<TdpNavigationContextValue>(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => {\n if (!tdpBaseUrl) return null;\n return buildTdpUrl(tdpBaseUrl, path);\n },\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[TdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) {\n navigateToTdpUrl(url, options);\n }\n },\n }),\n [tdpBaseUrl],\n );\n\n return <TdpNavigationContext.Provider value={contextValue}>{children}</TdpNavigationContext.Provider>;\n};\n\nexport interface UseTdpNavigationOptions {\n /** Explicit TDP base URL override */\n tdpBaseUrl?: string;\n}\n\nexport interface UseTdpNavigationReturn {\n /** The resolved TDP base URL, or null */\n tdpBaseUrl: string | null;\n /** Construct a full TDP URL from a path */\n getTdpUrl: (path: string) => string | null;\n /** Navigate to a TDP page */\n navigateToTdp: (path: string, options?: TdpNavigationOptions) => void;\n}\n\n/**\n * Standalone hook for TDP navigation (no provider required).\n *\n * For simple use cases where you don't need a TdpNavigationProvider.\n * If multiple components need navigation, prefer the provider approach.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { getTdpUrl, navigateToTdp } = useTdpNavigation({\n * tdpBaseUrl: \"https://tetrascience.com/my-org\",\n * });\n *\n * return (\n * <a href={getTdpUrl(\"/file/abc\") ?? \"#\"} target=\"_blank\" rel=\"noopener noreferrer\">\n * View File\n * </a>\n * );\n * }\n * ```\n */\nexport function useTdpNavigation(options: UseTdpNavigationOptions = {}): UseTdpNavigationReturn {\n const { tdpBaseUrl: explicitBaseUrl } = options;\n\n const tdpBaseUrl = useMemo(() => {\n if (explicitBaseUrl) return explicitBaseUrl.replace(/\\/$/u, '');\n return getTdpBaseUrlFromReferrer();\n }, [explicitBaseUrl]);\n\n return useMemo(\n () => ({\n tdpBaseUrl,\n getTdpUrl: (path: string) => (tdpBaseUrl ? buildTdpUrl(tdpBaseUrl, path) : null),\n navigateToTdp: (path: string, opts?: TdpNavigationOptions) => {\n if (!tdpBaseUrl) {\n console.warn('[useTdpNavigation] Cannot navigate: TDP base URL not resolved');\n return;\n }\n const url = buildTdpUrl(tdpBaseUrl, path);\n if (url) navigateToTdpUrl(url, opts);\n },\n }),\n [tdpBaseUrl],\n );\n}\n\n/** Props for the TDPLink component */\nexport interface TDPLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** TDP page path (e.g., \"/file/abc-123\" or use tdpPaths helpers) */\n path: string;\n /** Navigation behavior. Default: { newTab: true } */\n navigationOptions?: TdpNavigationOptions;\n children: React.ReactNode;\n ref?: React.Ref<HTMLAnchorElement>;\n}\n\n/**\n * A link component that navigates to TDP pages.\n *\n * Renders a standard `<a>` tag with the correct href for right-click\n * \"Open in new tab\" support, accessibility, and SEO.\n *\n * Must be used inside a `<TdpNavigationProvider>`.\n *\n * @example\n * ```tsx\n * import { TDPLink, tdpPaths } from '@tetrascience-npm/tetrascience-react-ui';\n *\n * <TDPLink path={tdpPaths.fileDetails(\"abc-123\")}>\n * View File Details\n * </TDPLink>\n *\n * <TDPLink path=\"/search?q=test\" navigationOptions={{ newTab: false }}>\n * Search in TDP (same tab)\n * </TDPLink>\n * ```\n */\nexport const TDPLink: React.FC<TDPLinkProps> = ({\n path,\n navigationOptions = { newTab: true },\n children,\n onClick,\n className,\n ...rest\n}) => {\n const { getTdpUrl, navigateToTdp } = useTdpNavigationContext();\n const href = getTdpUrl(path);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // Let modifier-key clicks through for native \"open in new tab\" behavior\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n onClick?.(e);\n navigateToTdp(path, navigationOptions);\n };\n\n return (\n <a\n href={href ?? '#'}\n target={navigationOptions.newTab ? '_blank' : undefined}\n rel={navigationOptions.newTab ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n className={`underline underline-offset-2 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:rounded-[2px] ${className ?? ''}`}\n style={{ color: 'var(--primary)', outlineColor: 'var(--border)' }}\n {...rest}\n >\n {children}\n </a>\n );\n};\n"],"names":["TdpNavigationContext","createContext","useTdpNavigationContext","context","useContext","TdpNavigationProvider","explicitBaseUrl","children","tdpBaseUrl","useMemo","getTdpBaseUrlFromReferrer","contextValue","path","buildTdpUrl","options","url","navigateToTdpUrl","useTdpNavigation","opts","TDPLink","navigationOptions","onClick","className","rest","getTdpUrl","navigateToTdp","href","handleClick","e","jsx"],"mappings":";;;AAeO,MAAMA,IAAuBC,EAAgD,IAAI;AAYjF,SAASC,IAAqD;AACnE,QAAMC,IAAUC,EAAWJ,CAAoB;AAC/C,MAAI,CAACG;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAOA;AACT;AAyBO,MAAME,IAA8D,CAAC;AAAA,EAC1E,YAAYC;AAAA,EACZ,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAaC,EAAQ,MACrBH,IACKA,EAAgB,QAAQ,QAAQ,EAAE,IAEpCI,EAAA,GACN,CAACJ,CAAe,CAAC,GAEdK,IAAeF;AAAA,IACnB,OAAO;AAAA,MACL,YAAAD;AAAA,MACA,WAAW,CAACI,MACLJ,IACEK,EAAYL,GAAYI,CAAI,IADX;AAAA,MAG1B,eAAe,CAACA,GAAcE,MAAmC;AAC/D,YAAI,CAACN,GAAY;AACf,kBAAQ,KAAK,4DAA4D;AACzE;AAAA,QACF;AACA,cAAMO,IAAMF,EAAYL,GAAYI,CAAI;AACxC,QAAIG,KACFC,EAAiBD,GAAKD,CAAO;AAAA,MAEjC;AAAA,IAAA;AAAA,IAEF,CAACN,CAAU;AAAA,EAAA;AAGb,2BAAQR,EAAqB,UAArB,EAA8B,OAAOW,GAAe,UAAAJ,GAAS;AACvE;AAqCO,SAASU,EAAiBH,IAAmC,IAA4B;AAC9F,QAAM,EAAE,YAAYR,EAAA,IAAoBQ,GAElCN,IAAaC,EAAQ,MACrBH,IAAwBA,EAAgB,QAAQ,QAAQ,EAAE,IACvDI,EAAA,GACN,CAACJ,CAAe,CAAC;AAEpB,SAAOG;AAAA,IACL,OAAO;AAAA,MACL,YAAAD;AAAA,MACA,WAAW,CAACI,MAAkBJ,IAAaK,EAAYL,GAAYI,CAAI,IAAI;AAAA,MAC3E,eAAe,CAACA,GAAcM,MAAgC;AAC5D,YAAI,CAACV,GAAY;AACf,kBAAQ,KAAK,+DAA+D;AAC5E;AAAA,QACF;AACA,cAAMO,IAAMF,EAAYL,GAAYI,CAAI;AACxC,QAAIG,KAAKC,EAAiBD,GAAKG,CAAI;AAAA,MACrC;AAAA,IAAA;AAAA,IAEF,CAACV,CAAU;AAAA,EAAA;AAEf;AAiCO,MAAMW,IAAkC,CAAC;AAAA,EAC9C,MAAAP;AAAA,EACA,mBAAAQ,IAAoB,EAAE,QAAQ,GAAA;AAAA,EAC9B,UAAAb;AAAA,EACA,SAAAc;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,WAAAC,GAAW,eAAAC,EAAA,IAAkBvB,EAAA,GAC/BwB,IAAOF,EAAUZ,CAAI,GAErBe,IAAc,CAACC,MAA2C;AAE9D,IAAIA,EAAE,WAAWA,EAAE,WAAWA,EAAE,aAIhCA,EAAE,eAAA,GACFP,IAAUO,CAAC,GACXH,EAAcb,GAAMQ,CAAiB;AAAA,EACvC;AAEA,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAMH,KAAQ;AAAA,MACd,QAAQN,EAAkB,SAAS,WAAW;AAAA,MAC9C,KAAKA,EAAkB,SAAS,wBAAwB;AAAA,MACxD,SAASO;AAAA,MACT,WAAW,kIAAkIL,KAAa,EAAE;AAAA,MAC5J,OAAO,EAAE,OAAO,kBAAkB,cAAc,gBAAA;AAAA,MAC/C,GAAGC;AAAA,MAEH,UAAAhB;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("class-variance-authority"),i=require("../../lib/utils.cjs"),s=a.cva("group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4",{variants:{variant:{default:"bg-card text-card-foreground [&>svg]:text-foreground",destructive:"bg-destructive/10 border-destructive/20 text-destructive [&>svg]:text-destructive",info:"bg-info/10 border-info/20 text-info [&>svg]:text-info",positive:"bg-positive/10 border-positive/20 text-positive [&>svg]:text-positive",warning:"bg-warning/10 border-warning/20 text-warning [&>svg]:text-warning"}},defaultVariants:{variant:"default"}});function o({className:t,variant:e,...n}){return r.jsx("div",{"data-slot":"alert",role:"alert",className:i.cn(s({variant:e}),t),...n})}function l({className:t,...e}){return r.jsx("div",{"data-slot":"alert-title",className:i.cn("flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",t),...e})}function d({className:t,...e}){return r.jsx("div",{"data-slot":"alert-description",className:i.cn("w-full pl-7 text-sm text-balance text-current/80 md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",t),...e})}function u({className:t,...e}){return r.jsx("div",{"data-slot":"alert-action",className:i.cn("absolute top-2 right-2",t),...e})}exports.Alert=o;exports.AlertAction=u;exports.AlertDescription=d;exports.AlertTitle=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),o=require("class-variance-authority"),n=require("../../lib/utils.cjs"),a=o.cva("group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4",{variants:{variant:{default:"bg-card text-card-foreground [&>svg]:text-foreground",destructive:"bg-destructive border-destructive/20 text-destructive-foreground [&>svg]:text-destructive-foreground",info:"bg-info border-info/20 text-info-foreground [&>svg]:text-info-foreground",positive:"bg-positive border-positive/20 text-positive-foreground [&>svg]:text-positive-foreground",warning:"bg-warning border-warning/20 text-warning-foreground [&>svg]:text-warning-foreground"}},defaultVariants:{variant:"default"}});function s({className:t,variant:e,...i}){return r.jsx("div",{"data-slot":"alert",role:"alert",className:n.cn(a({variant:e}),t),...i})}function l({className:t,...e}){return r.jsx("div",{"data-slot":"alert-title",className:n.cn("flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",t),...e})}function d({className:t,...e}){return r.jsx("div",{"data-slot":"alert-description",className:n.cn("w-full pl-7 text-sm text-balance text-current md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",t),...e})}function u({className:t,...e}){return r.jsx("div",{"data-slot":"alert-action",className:n.cn("absolute top-2 right-2",t),...e})}exports.Alert=s;exports.AlertAction=u;exports.AlertDescription=d;exports.AlertTitle=l;
2
2
  //# sourceMappingURL=alert.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.cjs","sources":["../../../src/components/ui/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-card text-card-foreground [&>svg]:text-foreground\",\n destructive:\n \"bg-destructive/10 border-destructive/20 text-destructive [&>svg]:text-destructive\",\n info:\n \"bg-info/10 border-info/20 text-info [&>svg]:text-info\",\n positive:\n \"bg-positive/10 border-positive/20 text-positive [&>svg]:text-positive\",\n warning:\n \"bg-warning/10 border-warning/20 text-warning [&>svg]:text-warning\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"w-full pl-7 text-sm text-balance text-current/80 md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"names":["alertVariants","cva","Alert","className","variant","props","jsx","cn","AlertTitle","AlertDescription","AlertAction"],"mappings":"4LAKMA,EAAgBC,EAAAA,IACpB,8JACA,CACE,SAAU,CACR,QAAS,CACP,QACE,uDACF,YACE,oFACF,KACE,wDACF,SACE,wEACF,QACE,mEAAA,CACJ,EAEF,gBAAiB,CACf,QAAS,SAAA,CACX,CAEJ,EAEA,SAASC,EAAM,CACb,UAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAqE,CACnE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,QACV,KAAK,QACL,UAAWC,EAAAA,GAAGP,EAAc,CAAE,QAAAI,CAAA,CAAS,EAAGD,CAAS,EAClD,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASG,EAAW,CAAE,UAAAL,EAAW,GAAGE,GAAsC,CACxE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,cACV,UAAWC,EAAAA,GACT,8HACAJ,CAAA,EAED,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASI,EAAiB,CACxB,UAAAN,EACA,GAAGE,CACL,EAAgC,CAC9B,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,oBACV,UAAWC,EAAAA,GACT,mKACAJ,CAAA,EAED,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASK,EAAY,CAAE,UAAAP,EAAW,GAAGE,GAAsC,CACzE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,eACV,UAAWC,EAAAA,GAAG,yBAA0BJ,CAAS,EAChD,GAAGE,CAAA,CAAA,CAGV"}
1
+ {"version":3,"file":"alert.cjs","sources":["../../../src/components/ui/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-card text-card-foreground [&>svg]:text-foreground\",\n destructive:\n \"bg-destructive border-destructive/20 text-destructive-foreground [&>svg]:text-destructive-foreground\",\n info:\n \"bg-info border-info/20 text-info-foreground [&>svg]:text-info-foreground\",\n positive:\n \"bg-positive border-positive/20 text-positive-foreground [&>svg]:text-positive-foreground\",\n warning:\n \"bg-warning border-warning/20 text-warning-foreground [&>svg]:text-warning-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"w-full pl-7 text-sm text-balance text-current md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"names":["alertVariants","cva","Alert","className","variant","props","jsx","cn","AlertTitle","AlertDescription","AlertAction"],"mappings":"4LAKMA,EAAgBC,EAAAA,IACpB,8JACA,CACE,SAAU,CACR,QAAS,CACP,QACE,uDACF,YACE,uGACF,KACE,2EACF,SACE,2FACF,QACE,sFAAA,CACJ,EAEF,gBAAiB,CACf,QAAS,SAAA,CACX,CAEJ,EAEA,SAASC,EAAM,CACb,UAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAqE,CACnE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,QACV,KAAK,QACL,UAAWC,EAAAA,GAAGP,EAAc,CAAE,QAAAI,CAAA,CAAS,EAAGD,CAAS,EAClD,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASG,EAAW,CAAE,UAAAL,EAAW,GAAGE,GAAsC,CACxE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,cACV,UAAWC,EAAAA,GACT,8HACAJ,CAAA,EAED,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASI,EAAiB,CACxB,UAAAN,EACA,GAAGE,CACL,EAAgC,CAC9B,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,oBACV,UAAWC,EAAAA,GACT,gKACAJ,CAAA,EAED,GAAGE,CAAA,CAAA,CAGV,CAEA,SAASK,EAAY,CAAE,UAAAP,EAAW,GAAGE,GAAsC,CACzE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,eACV,UAAWC,EAAAA,GAAG,yBAA0BJ,CAAS,EAChD,GAAGE,CAAA,CAAA,CAGV"}
@@ -1,16 +1,16 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
- import { cva as a } from "class-variance-authority";
3
- import { cn as i } from "../../lib/utils.js";
4
- const o = a(
2
+ import { cva as i } from "class-variance-authority";
3
+ import { cn as o } from "../../lib/utils.js";
4
+ const a = i(
5
5
  "group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4",
6
6
  {
7
7
  variants: {
8
8
  variant: {
9
9
  default: "bg-card text-card-foreground [&>svg]:text-foreground",
10
- destructive: "bg-destructive/10 border-destructive/20 text-destructive [&>svg]:text-destructive",
11
- info: "bg-info/10 border-info/20 text-info [&>svg]:text-info",
12
- positive: "bg-positive/10 border-positive/20 text-positive [&>svg]:text-positive",
13
- warning: "bg-warning/10 border-warning/20 text-warning [&>svg]:text-warning"
10
+ destructive: "bg-destructive border-destructive/20 text-destructive-foreground [&>svg]:text-destructive-foreground",
11
+ info: "bg-info border-info/20 text-info-foreground [&>svg]:text-info-foreground",
12
+ positive: "bg-positive border-positive/20 text-positive-foreground [&>svg]:text-positive-foreground",
13
+ warning: "bg-warning border-warning/20 text-warning-foreground [&>svg]:text-warning-foreground"
14
14
  }
15
15
  },
16
16
  defaultVariants: {
@@ -28,7 +28,7 @@ function u({
28
28
  {
29
29
  "data-slot": "alert",
30
30
  role: "alert",
31
- className: i(o({ variant: e }), t),
31
+ className: o(a({ variant: e }), t),
32
32
  ...n
33
33
  }
34
34
  );
@@ -38,7 +38,7 @@ function f({ className: t, ...e }) {
38
38
  "div",
39
39
  {
40
40
  "data-slot": "alert-title",
41
- className: i(
41
+ className: o(
42
42
  "flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
43
43
  t
44
44
  ),
@@ -54,8 +54,8 @@ function g({
54
54
  "div",
55
55
  {
56
56
  "data-slot": "alert-description",
57
- className: i(
58
- "w-full pl-7 text-sm text-balance text-current/80 md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
57
+ className: o(
58
+ "w-full pl-7 text-sm text-balance text-current md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
59
59
  t
60
60
  ),
61
61
  ...e
@@ -67,7 +67,7 @@ function v({ className: t, ...e }) {
67
67
  "div",
68
68
  {
69
69
  "data-slot": "alert-action",
70
- className: i("absolute top-2 right-2", t),
70
+ className: o("absolute top-2 right-2", t),
71
71
  ...e
72
72
  }
73
73
  );
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","sources":["../../../src/components/ui/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-card text-card-foreground [&>svg]:text-foreground\",\n destructive:\n \"bg-destructive/10 border-destructive/20 text-destructive [&>svg]:text-destructive\",\n info:\n \"bg-info/10 border-info/20 text-info [&>svg]:text-info\",\n positive:\n \"bg-positive/10 border-positive/20 text-positive [&>svg]:text-positive\",\n warning:\n \"bg-warning/10 border-warning/20 text-warning [&>svg]:text-warning\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"w-full pl-7 text-sm text-balance text-current/80 md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"names":["alertVariants","cva","Alert","className","variant","props","jsx","cn","AlertTitle","AlertDescription","AlertAction"],"mappings":";;;AAKA,MAAMA,IAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,MACE;AAAA,QACF,UACE;AAAA,QACF,SACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,SAASC,EAAM;AAAA,EACb,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,GAAqE;AACnE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAWC,EAAGP,EAAc,EAAE,SAAAI,EAAA,CAAS,GAAGD,CAAS;AAAA,MAClD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASG,EAAW,EAAE,WAAAL,GAAW,GAAGE,KAAsC;AACxE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASI,EAAiB;AAAA,EACxB,WAAAN;AAAA,EACA,GAAGE;AACL,GAAgC;AAC9B,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASK,EAAY,EAAE,WAAAP,GAAW,GAAGE,KAAsC;AACzE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,0BAA0BJ,CAAS;AAAA,MAChD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"alert.js","sources":["../../../src/components/ui/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative flex w-full flex-wrap items-center gap-3 rounded-lg border px-4 py-3 text-left text-sm [&>svg]:mt-0.5 [&>svg]:shrink-0 [&>svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-card text-card-foreground [&>svg]:text-foreground\",\n destructive:\n \"bg-destructive border-destructive/20 text-destructive-foreground [&>svg]:text-destructive-foreground\",\n info:\n \"bg-info border-info/20 text-info-foreground [&>svg]:text-info-foreground\",\n positive:\n \"bg-positive border-positive/20 text-positive-foreground [&>svg]:text-positive-foreground\",\n warning:\n \"bg-warning border-warning/20 text-warning-foreground [&>svg]:text-warning-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"flex-1 min-w-0 font-medium leading-none tracking-tight [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"w-full pl-7 text-sm text-balance text-current md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"names":["alertVariants","cva","Alert","className","variant","props","jsx","cn","AlertTitle","AlertDescription","AlertAction"],"mappings":";;;AAKA,MAAMA,IAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,MACE;AAAA,QACF,UACE;AAAA,QACF,SACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,SAASC,EAAM;AAAA,EACb,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,GAAqE;AACnE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAWC,EAAGP,EAAc,EAAE,SAAAI,EAAA,CAAS,GAAGD,CAAS;AAAA,MAClD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASG,EAAW,EAAE,WAAAL,GAAW,GAAGE,KAAsC;AACxE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASI,EAAiB;AAAA,EACxB,WAAAN;AAAA,EACA,GAAGE;AACL,GAAgC;AAC9B,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASK,EAAY,EAAE,WAAAP,GAAW,GAAGE,KAAsC;AACzE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,0BAA0BJ,CAAS;AAAA,MAChD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),s=require("class-variance-authority"),d=require("radix-ui"),c=require("../../lib/utils.cjs"),r=s.cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:shadow-focus has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:shadow-focus [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",info:"bg-info/15 text-info focus-visible:border-info dark:bg-info/20 dark:text-info [a]:hover:bg-info/25",destructive:"bg-destructive/15 text-destructive focus-visible:border-destructive dark:bg-destructive/20 dark:text-destructive [a]:hover:bg-destructive/25",positive:"bg-positive/15 text-positive focus-visible:border-positive dark:bg-positive/20 dark:text-positive [a]:hover:bg-positive/25",warning:"bg-warning/15 text-warning focus-visible:border-warning dark:bg-warning/20 dark:text-warning [a]:hover:bg-warning/25",outline:"border-border text-foreground [a]:hover:bg-accent [a]:hover:text-accent-foreground",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function g({className:t,variant:e="default",asChild:i=!1,...a}){const o=i?d.Slot.Root:"span";return n.jsx(o,{"data-slot":"badge","data-variant":e,className:c.cn(r({variant:e}),t),...a})}exports.Badge=g;exports.badgeVariants=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),s=require("class-variance-authority"),d=require("radix-ui"),c=require("../../lib/utils.cjs"),r=s.cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:shadow-focus has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:shadow-focus [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",info:"bg-info text-info-foreground [a]:hover:brightness-90",destructive:"bg-destructive text-destructive-foreground [a]:hover:brightness-90",positive:"bg-positive text-positive-foreground [a]:hover:brightness-90",warning:"bg-warning text-warning-foreground [a]:hover:brightness-90",outline:"border-border text-foreground [a]:hover:bg-accent [a]:hover:text-accent-foreground",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function g({className:t,variant:e="default",asChild:n=!1,...a}){const o=n?d.Slot.Root:"span";return i.jsx(o,{"data-slot":"badge","data-variant":e,className:c.cn(r({variant:e}),t),...a})}exports.Badge=g;exports.badgeVariants=r;
2
2
  //# sourceMappingURL=badge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.cjs","sources":["../../../src/components/ui/badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:shadow-focus has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:shadow-focus [&>svg]:pointer-events-none [&>svg]:size-3!\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n info:\n \"bg-info/15 text-info focus-visible:border-info dark:bg-info/20 dark:text-info [a]:hover:bg-info/25\",\n destructive:\n \"bg-destructive/15 text-destructive focus-visible:border-destructive dark:bg-destructive/20 dark:text-destructive [a]:hover:bg-destructive/25\",\n positive:\n \"bg-positive/15 text-positive focus-visible:border-positive dark:bg-positive/20 dark:text-positive [a]:hover:bg-positive/25\",\n warning:\n \"bg-warning/15 text-warning focus-visible:border-warning dark:bg-warning/20 dark:text-warning [a]:hover:bg-warning/25\",\n outline:\n \"border-border text-foreground [a]:hover:bg-accent [a]:hover:text-accent-foreground\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"],"names":["badgeVariants","cva","Badge","className","variant","asChild","props","Comp","Slot","jsx","cn"],"mappings":"kNAMMA,EAAgBC,EAAAA,IACpB,uaACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,UACE,mEACF,KACE,qGACF,YACE,+IACF,SACE,6HACF,QACE,uHACF,QACE,qFACF,MACE,uEACF,KAAM,iDAAA,CACR,EAEF,gBAAiB,CACf,QAAS,SAAA,CACX,CAEJ,EAEA,SAASC,EAAM,CACb,UAAAC,EACA,QAAAC,EAAW,UACX,QAAAC,EAAU,GACV,GAAGC,CACL,EAC8D,CAC5D,MAAMC,EAAOF,EAAUG,EAAAA,KAAK,KAAO,OAEnC,OACEC,EAAAA,IAACF,EAAA,CACC,YAAU,QACV,eAAcH,EACd,UAAWM,EAAAA,GAAGV,EAAc,CAAE,QAAAI,CAAA,CAAS,EAAGD,CAAS,EAClD,GAAGG,CAAA,CAAA,CAGV"}
1
+ {"version":3,"file":"badge.cjs","sources":["../../../src/components/ui/badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:shadow-focus has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:shadow-focus [&>svg]:pointer-events-none [&>svg]:size-3!\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n info:\n \"bg-info text-info-foreground [a]:hover:brightness-90\",\n destructive:\n \"bg-destructive text-destructive-foreground [a]:hover:brightness-90\",\n positive:\n \"bg-positive text-positive-foreground [a]:hover:brightness-90\",\n warning:\n \"bg-warning text-warning-foreground [a]:hover:brightness-90\",\n outline:\n \"border-border text-foreground [a]:hover:bg-accent [a]:hover:text-accent-foreground\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"],"names":["badgeVariants","cva","Badge","className","variant","asChild","props","Comp","Slot","jsx","cn"],"mappings":"kNAMMA,EAAgBC,EAAAA,IACpB,uaACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,UACE,mEACF,KACE,uDACF,YACE,qEACF,SACE,+DACF,QACE,6DACF,QACE,qFACF,MACE,uEACF,KAAM,iDAAA,CACR,EAEF,gBAAiB,CACf,QAAS,SAAA,CACX,CAEJ,EAEA,SAASC,EAAM,CACb,UAAAC,EACA,QAAAC,EAAW,UACX,QAAAC,EAAU,GACV,GAAGC,CACL,EAC8D,CAC5D,MAAMC,EAAOF,EAAUG,EAAAA,KAAK,KAAO,OAEnC,OACEC,EAAAA,IAACF,EAAA,CACC,YAAU,QACV,eAAcH,EACd,UAAWM,EAAAA,GAAGV,EAAc,CAAE,QAAAI,CAAA,CAAS,EAAGD,CAAS,EAClD,GAAGG,CAAA,CAAA,CAGV"}
@@ -1,18 +1,18 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
- import { cva as n } from "class-variance-authority";
2
+ import { cva as i } from "class-variance-authority";
3
3
  import { Slot as s } from "radix-ui";
4
4
  import { cn as d } from "../../lib/utils.js";
5
- const v = n(
5
+ const g = i(
6
6
  "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:shadow-focus has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:shadow-focus [&>svg]:pointer-events-none [&>svg]:size-3!",
7
7
  {
8
8
  variants: {
9
9
  variant: {
10
10
  default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
11
11
  secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
12
- info: "bg-info/15 text-info focus-visible:border-info dark:bg-info/20 dark:text-info [a]:hover:bg-info/25",
13
- destructive: "bg-destructive/15 text-destructive focus-visible:border-destructive dark:bg-destructive/20 dark:text-destructive [a]:hover:bg-destructive/25",
14
- positive: "bg-positive/15 text-positive focus-visible:border-positive dark:bg-positive/20 dark:text-positive [a]:hover:bg-positive/25",
15
- warning: "bg-warning/15 text-warning focus-visible:border-warning dark:bg-warning/20 dark:text-warning [a]:hover:bg-warning/25",
12
+ info: "bg-info text-info-foreground [a]:hover:brightness-90",
13
+ destructive: "bg-destructive text-destructive-foreground [a]:hover:brightness-90",
14
+ positive: "bg-positive text-positive-foreground [a]:hover:brightness-90",
15
+ warning: "bg-warning text-warning-foreground [a]:hover:brightness-90",
16
16
  outline: "border-border text-foreground [a]:hover:bg-accent [a]:hover:text-accent-foreground",
17
17
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
18
18
  link: "text-primary underline-offset-4 hover:underline"
@@ -23,25 +23,25 @@ const v = n(
23
23
  }
24
24
  }
25
25
  );
26
- function u({
26
+ function b({
27
27
  className: r,
28
28
  variant: e = "default",
29
29
  asChild: t = !1,
30
- ...i
30
+ ...o
31
31
  }) {
32
- const o = t ? s.Root : "span";
32
+ const n = t ? s.Root : "span";
33
33
  return /* @__PURE__ */ a(
34
- o,
34
+ n,
35
35
  {
36
36
  "data-slot": "badge",
37
37
  "data-variant": e,
38
- className: d(v({ variant: e }), r),
39
- ...i
38
+ className: d(g({ variant: e }), r),
39
+ ...o
40
40
  }
41
41
  );
42
42
  }
43
43
  export {
44
- u as Badge,
45
- v as badgeVariants
44
+ b as Badge,
45
+ g as badgeVariants
46
46
  };
47
47
  //# sourceMappingURL=badge.js.map