@tetrascience-npm/tetrascience-react-ui 0.7.0-beta.129.1 → 0.7.0-beta.131.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 (1042) hide show
  1. package/README.md +49 -0
  2. package/dist/ai/attachments.cjs +2 -0
  3. package/dist/ai/attachments.cjs.map +1 -0
  4. package/dist/ai/attachments.js +224 -0
  5. package/dist/ai/attachments.js.map +1 -0
  6. package/dist/ai/chain-of-thought.cjs +2 -0
  7. package/dist/ai/chain-of-thought.cjs.map +1 -0
  8. package/dist/ai/chain-of-thought.js +145 -0
  9. package/dist/ai/chain-of-thought.js.map +1 -0
  10. package/dist/ai/confirmation.cjs +2 -0
  11. package/dist/ai/confirmation.cjs.map +1 -0
  12. package/dist/ai/confirmation.js +109 -0
  13. package/dist/ai/confirmation.js.map +1 -0
  14. package/dist/ai/context.cjs +2 -0
  15. package/dist/ai/context.cjs.map +1 -0
  16. package/dist/ai/context.js +267 -0
  17. package/dist/ai/context.js.map +1 -0
  18. package/dist/ai/conversation.cjs +4 -0
  19. package/dist/ai/conversation.cjs.map +1 -0
  20. package/dist/ai/conversation.js +108 -0
  21. package/dist/ai/conversation.js.map +1 -0
  22. package/dist/ai/inline-citation.cjs +2 -0
  23. package/dist/ai/inline-citation.cjs.map +1 -0
  24. package/dist/ai/inline-citation.js +182 -0
  25. package/dist/ai/inline-citation.js.map +1 -0
  26. package/dist/ai/message.cjs +2 -0
  27. package/dist/ai/message.cjs.map +1 -0
  28. package/dist/ai/message.js +237 -0
  29. package/dist/ai/message.js.map +1 -0
  30. package/dist/ai/model-selector.cjs +2 -0
  31. package/dist/ai/model-selector.cjs.map +1 -0
  32. package/dist/ai/model-selector.js +77 -0
  33. package/dist/ai/model-selector.js.map +1 -0
  34. package/dist/ai/prompt-input.cjs +2 -0
  35. package/dist/ai/prompt-input.cjs.map +1 -0
  36. package/dist/ai/prompt-input.js +776 -0
  37. package/dist/ai/prompt-input.js.map +1 -0
  38. package/dist/ai/queue.cjs +2 -0
  39. package/dist/ai/queue.cjs.map +1 -0
  40. package/dist/ai/queue.js +209 -0
  41. package/dist/ai/queue.js.map +1 -0
  42. package/dist/ai/reasoning.cjs +2 -0
  43. package/dist/ai/reasoning.cjs.map +1 -0
  44. package/dist/ai/reasoning.js +129 -0
  45. package/dist/ai/reasoning.js.map +1 -0
  46. package/dist/ai/shimmer.cjs +2 -0
  47. package/dist/ai/shimmer.cjs.map +1 -0
  48. package/dist/ai/shimmer.js +49 -0
  49. package/dist/ai/shimmer.js.map +1 -0
  50. package/dist/ai/sources.cjs +2 -0
  51. package/dist/ai/sources.cjs.map +1 -0
  52. package/dist/ai/sources.js +54 -0
  53. package/dist/ai/sources.js.map +1 -0
  54. package/dist/ai/speech-input.cjs +2 -0
  55. package/dist/ai/speech-input.cjs.map +1 -0
  56. package/dist/ai/speech-input.js +123 -0
  57. package/dist/ai/speech-input.js.map +1 -0
  58. package/dist/ai/stream-status.cjs +2 -0
  59. package/dist/ai/stream-status.cjs.map +1 -0
  60. package/dist/ai/stream-status.js +108 -0
  61. package/dist/ai/stream-status.js.map +1 -0
  62. package/dist/ai/suggestion.cjs +2 -0
  63. package/dist/ai/suggestion.cjs.map +1 -0
  64. package/dist/ai/suggestion.js +38 -0
  65. package/dist/ai/suggestion.js.map +1 -0
  66. package/dist/ai/task.cjs +2 -0
  67. package/dist/ai/task.cjs.map +1 -0
  68. package/dist/ai/task.js +101 -0
  69. package/dist/ai/task.js.map +1 -0
  70. package/dist/ai/tool.cjs +2 -0
  71. package/dist/ai/tool.cjs.map +1 -0
  72. package/dist/ai/tool.js +139 -0
  73. package/dist/ai/tool.js.map +1 -0
  74. package/dist/charts/AreaPlot.cjs +2 -0
  75. package/dist/charts/AreaPlot.cjs.map +1 -0
  76. package/dist/charts/AreaPlot.js +5 -0
  77. package/dist/charts/AreaPlot.js.map +1 -0
  78. package/dist/charts/BarChart.cjs +2 -0
  79. package/dist/charts/BarChart.cjs.map +1 -0
  80. package/dist/charts/BarChart.js +5 -0
  81. package/dist/charts/BarChart.js.map +1 -0
  82. package/dist/charts/BoxPlot.cjs +2 -0
  83. package/dist/charts/BoxPlot.cjs.map +1 -0
  84. package/dist/charts/BoxPlot.js +5 -0
  85. package/dist/charts/BoxPlot.js.map +1 -0
  86. package/dist/charts/ChartTooltip.cjs +2 -0
  87. package/dist/charts/ChartTooltip.cjs.map +1 -0
  88. package/dist/charts/ChartTooltip.js +8 -0
  89. package/dist/charts/ChartTooltip.js.map +1 -0
  90. package/dist/charts/Chromatogram.cjs +2 -0
  91. package/dist/charts/Chromatogram.cjs.map +1 -0
  92. package/dist/charts/Chromatogram.js +5 -0
  93. package/dist/charts/Chromatogram.js.map +1 -0
  94. package/dist/charts/Electropherogram.cjs +2 -0
  95. package/dist/charts/Electropherogram.cjs.map +1 -0
  96. package/dist/charts/Electropherogram.js +5 -0
  97. package/dist/charts/Electropherogram.js.map +1 -0
  98. package/dist/charts/Histogram.cjs +2 -0
  99. package/dist/charts/Histogram.cjs.map +1 -0
  100. package/dist/charts/Histogram.js +5 -0
  101. package/dist/charts/Histogram.js.map +1 -0
  102. package/dist/charts/LinePlot.cjs +2 -0
  103. package/dist/charts/LinePlot.cjs.map +1 -0
  104. package/dist/charts/LinePlot.js +5 -0
  105. package/dist/charts/LinePlot.js.map +1 -0
  106. package/dist/charts/PieChart.cjs +2 -0
  107. package/dist/charts/PieChart.cjs.map +1 -0
  108. package/dist/charts/PieChart.js +5 -0
  109. package/dist/charts/PieChart.js.map +1 -0
  110. package/dist/charts/PlateMap.cjs +2 -0
  111. package/dist/charts/PlateMap.cjs.map +1 -0
  112. package/dist/charts/PlateMap.js +5 -0
  113. package/dist/charts/PlateMap.js.map +1 -0
  114. package/dist/charts/ScatterPlot.cjs +2 -0
  115. package/dist/charts/ScatterPlot.cjs.map +1 -0
  116. package/dist/charts/ScatterPlot.js +5 -0
  117. package/dist/charts/ScatterPlot.js.map +1 -0
  118. package/dist/charts/ScatterPlotInteractive.cjs +2 -0
  119. package/dist/charts/ScatterPlotInteractive.cjs.map +1 -0
  120. package/dist/charts/ScatterPlotInteractive.js +14 -0
  121. package/dist/charts/ScatterPlotInteractive.js.map +1 -0
  122. package/dist/charts/StackedChromatogram.cjs +2 -0
  123. package/dist/charts/StackedChromatogram.cjs.map +1 -0
  124. package/dist/charts/StackedChromatogram.js +7 -0
  125. package/dist/charts/StackedChromatogram.js.map +1 -0
  126. package/dist/components/ai/attachments.d.ts +54 -0
  127. package/dist/components/ai/chain-of-thought.d.ts +56 -0
  128. package/dist/components/ai/confirmation.d.ts +47 -0
  129. package/dist/components/ai/context.d.ts +40 -0
  130. package/dist/components/ai/conversation.d.ts +23 -0
  131. package/dist/components/ai/inline-citation.d.ts +38 -0
  132. package/dist/components/ai/message.d.ts +37 -0
  133. package/dist/components/ai/model-selector.d.ts +36 -0
  134. package/dist/components/ai/prompt-input.d.ts +158 -0
  135. package/dist/components/ai/queue.d.ts +72 -0
  136. package/dist/components/ai/reasoning.d.ts +26 -0
  137. package/dist/components/ai/shimmer.d.ts +17 -0
  138. package/dist/components/ai/sources.d.ts +12 -0
  139. package/dist/components/ai/speech-input.d.ts +54 -0
  140. package/dist/components/ai/stream-status.d.ts +66 -0
  141. package/dist/components/ai/streamdown-code-plugin.d.ts +2 -0
  142. package/dist/components/ai/streamdown-plugins.d.ts +2 -0
  143. package/dist/components/ai/suggestion.d.ts +9 -0
  144. package/dist/components/ai/task.d.ts +16 -0
  145. package/dist/components/ai/tool.d.ts +33 -0
  146. package/dist/components/ai/use-streamdown-plugins.d.ts +8 -0
  147. package/dist/components/charts/AreaPlot/AreaPlot.cjs +1 -1
  148. package/dist/components/charts/AreaPlot/AreaPlot.d.ts +39 -0
  149. package/dist/components/charts/AreaPlot/index.d.ts +2 -0
  150. package/dist/components/charts/BarChart/BarChart.cjs +1 -1
  151. package/dist/components/charts/BarChart/BarChart.d.ts +44 -0
  152. package/dist/components/charts/BarChart/index.d.ts +2 -0
  153. package/dist/components/charts/BoxPlot/BoxPlot.cjs +1 -1
  154. package/dist/components/charts/BoxPlot/BoxPlot.d.ts +33 -0
  155. package/dist/components/charts/BoxPlot/index.d.ts +2 -0
  156. package/dist/components/charts/ChartTooltip/ChartTooltip.d.ts +71 -0
  157. package/dist/components/charts/ChartTooltip/index.d.ts +2 -0
  158. package/dist/components/charts/ChartTooltip/lines.d.ts +54 -0
  159. package/dist/components/charts/Chromatogram/Chromatogram.d.ts +5 -0
  160. package/dist/components/charts/Chromatogram/annotations.cjs +1 -1
  161. package/dist/components/charts/Chromatogram/annotations.d.ts +50 -0
  162. package/dist/components/charts/Chromatogram/boundaryMarkers.cjs +1 -1
  163. package/dist/components/charts/Chromatogram/boundaryMarkers.d.ts +14 -0
  164. package/dist/components/charts/Chromatogram/constants.d.ts +46 -0
  165. package/dist/components/charts/Chromatogram/dataProcessing.d.ts +49 -0
  166. package/dist/components/charts/Chromatogram/index.d.ts +2 -0
  167. package/dist/components/charts/Chromatogram/peakDetection.d.ts +33 -0
  168. package/dist/components/charts/Chromatogram/plotBuilder.d.ts +58 -0
  169. package/dist/components/charts/Chromatogram/regionOverlays.cjs +1 -1
  170. package/dist/components/charts/Chromatogram/regionOverlays.d.ts +9 -0
  171. package/dist/components/charts/Chromatogram/types.d.ts +258 -0
  172. package/dist/components/charts/Electropherogram/Electropherogram.cjs +1 -1
  173. package/dist/components/charts/Electropherogram/Electropherogram.d.ts +22 -0
  174. package/dist/components/charts/Electropherogram/index.d.ts +2 -0
  175. package/dist/components/charts/Histogram/Histogram.cjs +1 -1
  176. package/dist/components/charts/Histogram/Histogram.d.ts +36 -0
  177. package/dist/components/charts/Histogram/index.d.ts +2 -0
  178. package/dist/components/charts/LinePlot/LinePlot.cjs +1 -1
  179. package/dist/components/charts/LinePlot/LinePlot.d.ts +45 -0
  180. package/dist/components/charts/LinePlot/index.d.ts +2 -0
  181. package/dist/components/charts/PieChart/PieChart.d.ts +20 -0
  182. package/dist/components/charts/PieChart/index.d.ts +2 -0
  183. package/dist/components/charts/PlateMap/PlateMap.cjs +1 -1
  184. package/dist/components/charts/PlateMap/PlateMap.cjs.map +1 -1
  185. package/dist/components/charts/PlateMap/PlateMap.d.ts +29 -0
  186. package/dist/components/charts/PlateMap/PlateMap.js +1 -1
  187. package/dist/components/charts/PlateMap/constants.d.ts +75 -0
  188. package/dist/components/charts/PlateMap/index.d.ts +2 -0
  189. package/dist/components/charts/PlateMap/types.d.ts +322 -0
  190. package/dist/components/charts/PlateMap/utils.d.ts +133 -0
  191. package/dist/components/charts/ScatterPlot/ScatterPlot.cjs +1 -1
  192. package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +43 -0
  193. package/dist/components/charts/ScatterPlot/index.d.ts +2 -0
  194. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.d.ts +25 -0
  195. package/dist/components/charts/ScatterPlotInteractive/constants.d.ts +50 -0
  196. package/dist/components/charts/ScatterPlotInteractive/index.d.ts +3 -0
  197. package/dist/components/charts/ScatterPlotInteractive/types.d.ts +226 -0
  198. package/dist/components/charts/ScatterPlotInteractive/utils.d.ts +72 -0
  199. package/dist/components/charts/StackedChromatogram/StackedChromatogram.d.ts +3 -0
  200. package/dist/components/charts/StackedChromatogram/index.d.ts +3 -0
  201. package/dist/components/charts/StackedChromatogram/transforms.d.ts +9 -0
  202. package/dist/components/charts/StackedChromatogram/types.d.ts +26 -0
  203. package/dist/components/charts/plotly-loader.cjs +1 -1
  204. package/dist/components/charts/plotly-loader.cjs.map +1 -1
  205. package/dist/components/charts/plotly-loader.d.ts +29 -0
  206. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs +1 -1
  207. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs.map +1 -1
  208. package/dist/components/composed/AssistantLayout/AssistantLayout.d.ts +63 -0
  209. package/dist/components/composed/AssistantLayout/AssistantLayout.js +2 -2
  210. package/dist/components/composed/AssistantLayout/dockLayout.d.ts +15 -0
  211. package/dist/components/composed/AssistantLayout/index.d.ts +3 -0
  212. package/dist/components/composed/Chat/Chat.cjs +1 -1
  213. package/dist/components/composed/Chat/Chat.cjs.map +1 -1
  214. package/dist/components/composed/Chat/Chat.d.ts +35 -0
  215. package/dist/components/composed/Chat/Chat.js +7 -7
  216. package/dist/components/composed/Chat/index.d.ts +2 -0
  217. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs +1 -1
  218. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  219. package/dist/components/composed/ConfirmDialog/ConfirmDialog.d.ts +23 -0
  220. package/dist/components/composed/ConfirmDialog/ConfirmDialog.js +4 -4
  221. package/dist/components/composed/ConfirmDialog/index.d.ts +1 -0
  222. package/dist/components/composed/DataAppShell/CollapseButton.cjs +1 -1
  223. package/dist/components/composed/DataAppShell/CollapseButton.cjs.map +1 -1
  224. package/dist/components/composed/DataAppShell/CollapseButton.d.ts +23 -0
  225. package/dist/components/composed/DataAppShell/CollapseButton.js +2 -2
  226. package/dist/components/composed/DataAppShell/DataAppShell.cjs +1 -1
  227. package/dist/components/composed/DataAppShell/DataAppShell.cjs.map +1 -1
  228. package/dist/components/composed/DataAppShell/DataAppShell.d.ts +88 -0
  229. package/dist/components/composed/DataAppShell/DataAppShell.js +5 -5
  230. package/dist/components/composed/DataAppShell/PrimaryNav.cjs +1 -1
  231. package/dist/components/composed/DataAppShell/PrimaryNav.cjs.map +1 -1
  232. package/dist/components/composed/DataAppShell/PrimaryNav.d.ts +64 -0
  233. package/dist/components/composed/DataAppShell/PrimaryNav.js +2 -2
  234. package/dist/components/composed/DataAppShell/RightPanel.cjs +1 -1
  235. package/dist/components/composed/DataAppShell/RightPanel.cjs.map +1 -1
  236. package/dist/components/composed/DataAppShell/RightPanel.d.ts +95 -0
  237. package/dist/components/composed/DataAppShell/RightPanel.js +2 -2
  238. package/dist/components/composed/DataAppShell/SecondaryNav.cjs +1 -1
  239. package/dist/components/composed/DataAppShell/SecondaryNav.cjs.map +1 -1
  240. package/dist/components/composed/DataAppShell/SecondaryNav.d.ts +63 -0
  241. package/dist/components/composed/DataAppShell/SecondaryNav.js +3 -3
  242. package/dist/components/composed/DataAppShell/ShellContext.d.ts +20 -0
  243. package/dist/components/composed/DataAppShell/index.d.ts +12 -0
  244. package/dist/components/composed/EmptyState/EmptyState.d.ts +12 -0
  245. package/dist/components/composed/EmptyState/index.d.ts +2 -0
  246. package/dist/components/composed/FormPatterns/FormSection.cjs +1 -1
  247. package/dist/components/composed/FormPatterns/FormSection.cjs.map +1 -1
  248. package/dist/components/composed/FormPatterns/FormSection.d.ts +7 -0
  249. package/dist/components/composed/FormPatterns/FormSection.js +2 -2
  250. package/dist/components/composed/FormPatterns/index.d.ts +1 -0
  251. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs +1 -1
  252. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs.map +1 -1
  253. package/dist/components/composed/MoleculeStructure/MoleculeStructure.d.ts +43 -0
  254. package/dist/components/composed/MoleculeStructure/MoleculeStructure.js +1 -1
  255. package/dist/components/composed/MoleculeStructure/index.d.ts +3 -0
  256. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs +1 -1
  257. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs.map +1 -1
  258. package/dist/components/composed/MoleculeStructure/rdkit-loader.d.ts +104 -0
  259. package/dist/components/composed/MoleculeStructure/use-rdkit.d.ts +29 -0
  260. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs +1 -1
  261. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs.map +1 -1
  262. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.d.ts +12 -0
  263. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js +4 -4
  264. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs +1 -1
  265. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs.map +1 -1
  266. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.d.ts +22 -0
  267. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js +2 -2
  268. package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs +1 -1
  269. package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs.map +1 -1
  270. package/dist/components/composed/PlateMapEditor/PlateMapEditor.d.ts +106 -0
  271. package/dist/components/composed/PlateMapEditor/PlateMapEditor.js +2 -2
  272. package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs +1 -1
  273. package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs.map +1 -1
  274. package/dist/components/composed/PlateMapEditor/PlateMapForm.d.ts +30 -0
  275. package/dist/components/composed/PlateMapEditor/PlateMapForm.js +1 -1
  276. package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs +1 -1
  277. package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs.map +1 -1
  278. package/dist/components/composed/PlateMapEditor/PlateMapGrid.d.ts +64 -0
  279. package/dist/components/composed/PlateMapEditor/PlateMapGrid.js +1 -1
  280. package/dist/components/composed/PlateMapEditor/PlateMapManifest.d.ts +29 -0
  281. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs +1 -1
  282. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs.map +1 -1
  283. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.d.ts +19 -0
  284. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js +4 -4
  285. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.d.ts +73 -0
  286. package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs +1 -1
  287. package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs.map +1 -1
  288. package/dist/components/composed/PlateMapEditor/PlateZoomControl.d.ts +12 -0
  289. package/dist/components/composed/PlateMapEditor/PlateZoomControl.js +2 -2
  290. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs +1 -1
  291. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs.map +1 -1
  292. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.d.ts +13 -0
  293. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.js +4 -4
  294. package/dist/components/composed/PlateMapEditor/WellLegend.cjs +1 -1
  295. package/dist/components/composed/PlateMapEditor/WellLegend.cjs.map +1 -1
  296. package/dist/components/composed/PlateMapEditor/WellLegend.d.ts +21 -0
  297. package/dist/components/composed/PlateMapEditor/WellLegend.js +2 -2
  298. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs +1 -1
  299. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs.map +1 -1
  300. package/dist/components/composed/PlateMapEditor/WellManifestTable.d.ts +46 -0
  301. package/dist/components/composed/PlateMapEditor/WellManifestTable.js +9 -9
  302. package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs +1 -1
  303. package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs.map +1 -1
  304. package/dist/components/composed/PlateMapEditor/WellMetadataForm.d.ts +17 -0
  305. package/dist/components/composed/PlateMapEditor/WellMetadataForm.js +7 -7
  306. package/dist/components/composed/PlateMapEditor/autoFill.d.ts +26 -0
  307. package/dist/components/composed/PlateMapEditor/csvPlateTriage.d.ts +4 -0
  308. package/dist/components/composed/PlateMapEditor/helpers.d.ts +2 -0
  309. package/dist/components/composed/PlateMapEditor/index.d.ts +31 -0
  310. package/dist/components/composed/PlateMapEditor/types.d.ts +137 -0
  311. package/dist/components/composed/PlateMapEditor/wellGrid.d.ts +12 -0
  312. package/dist/components/composed/ProcessFlow/ProcessFlow.d.ts +32 -0
  313. package/dist/components/composed/ProcessFlow/ProcessFlow.utils.d.ts +86 -0
  314. package/dist/components/composed/ProcessFlow/index.d.ts +1 -0
  315. package/dist/components/composed/RichListItem/RichListItem.cjs +1 -1
  316. package/dist/components/composed/RichListItem/RichListItem.cjs.map +1 -1
  317. package/dist/components/composed/RichListItem/RichListItem.d.ts +22 -0
  318. package/dist/components/composed/RichListItem/RichListItem.js +2 -2
  319. package/dist/components/composed/RichListItem/index.d.ts +2 -0
  320. package/dist/components/composed/StatCard/StatCard.cjs +1 -1
  321. package/dist/components/composed/StatCard/StatCard.cjs.map +1 -1
  322. package/dist/components/composed/StatCard/StatCard.d.ts +11 -0
  323. package/dist/components/composed/StatCard/StatCard.js +1 -1
  324. package/dist/components/composed/StatCard/index.d.ts +1 -0
  325. package/dist/components/composed/TdpSearch/TdpSearch.cjs +1 -1
  326. package/dist/components/composed/TdpSearch/TdpSearch.cjs.map +1 -1
  327. package/dist/components/composed/TdpSearch/TdpSearch.d.ts +21 -0
  328. package/dist/components/composed/TdpSearch/TdpSearch.js +14 -13
  329. package/dist/components/composed/TdpSearch/TdpSearch.mocks.d.ts +5 -0
  330. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs +1 -1
  331. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs.map +1 -1
  332. package/dist/components/composed/TdpSearch/components/DefaultFilters.d.ts +3 -0
  333. package/dist/components/composed/TdpSearch/components/DefaultFilters.js +1 -1
  334. package/dist/components/composed/TdpSearch/components/DefaultResults.cjs +1 -1
  335. package/dist/components/composed/TdpSearch/components/DefaultResults.cjs.map +1 -1
  336. package/dist/components/composed/TdpSearch/components/DefaultResults.d.ts +3 -0
  337. package/dist/components/composed/TdpSearch/components/DefaultResults.js +2 -2
  338. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs +1 -1
  339. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs.map +1 -1
  340. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.d.ts +3 -0
  341. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.js +2 -2
  342. package/dist/components/composed/TdpSearch/constants.d.ts +3 -0
  343. package/dist/components/composed/TdpSearch/hooks/useSearch.d.ts +2 -0
  344. package/dist/components/composed/TdpSearch/hooks/useTdpCredentials.d.ts +14 -0
  345. package/dist/components/composed/TdpSearch/index.d.ts +3 -0
  346. package/dist/components/composed/TdpSearch/types.d.ts +128 -0
  347. package/dist/components/composed/TdpSearch/utils.d.ts +3 -0
  348. package/dist/components/composed/TopBar/TopBar.d.ts +25 -0
  349. package/dist/components/composed/TopBar/index.d.ts +2 -0
  350. package/dist/components/composed/UserMenu/UserMenu.cjs +1 -1
  351. package/dist/components/composed/UserMenu/UserMenu.cjs.map +1 -1
  352. package/dist/components/composed/UserMenu/UserMenu.d.ts +53 -0
  353. package/dist/components/composed/UserMenu/UserMenu.js +2 -2
  354. package/dist/components/composed/UserMenu/index.d.ts +2 -0
  355. package/dist/components/composed/tdp-link.d.ts +110 -0
  356. package/dist/components/composed/tdp-url.d.ts +68 -0
  357. package/dist/components/ui/accordion.d.ts +7 -0
  358. package/dist/components/ui/alert-dialog.d.ts +18 -0
  359. package/dist/components/ui/alert.d.ts +10 -0
  360. package/dist/components/ui/aspect-ratio.d.ts +3 -0
  361. package/dist/components/ui/avatar.d.ts +11 -0
  362. package/dist/components/ui/badge.d.ts +9 -0
  363. package/dist/components/ui/banner.d.ts +19 -0
  364. package/dist/components/ui/breadcrumb.d.ts +11 -0
  365. package/dist/components/ui/button-group.d.ts +11 -0
  366. package/dist/components/ui/button.d.ts +10 -0
  367. package/dist/components/ui/calendar.d.ts +10 -0
  368. package/dist/components/ui/card.d.ts +11 -0
  369. package/dist/components/ui/carousel.d.ts +28 -0
  370. package/dist/components/ui/checkbox.d.ts +4 -0
  371. package/dist/components/ui/code-block.d.ts +45 -0
  372. package/dist/components/ui/code-editor.d.ts +18 -0
  373. package/dist/components/ui/collapsible.d.ts +5 -0
  374. package/dist/components/ui/combobox.d.ts +24 -0
  375. package/dist/components/ui/command.d.ts +18 -0
  376. package/dist/components/ui/context-menu.d.ts +31 -0
  377. package/dist/components/ui/data-table/data-table-column-toggle.cjs +1 -1
  378. package/dist/components/ui/data-table/data-table-column-toggle.cjs.map +1 -1
  379. package/dist/components/ui/data-table/data-table-column-toggle.d.ts +6 -0
  380. package/dist/components/ui/data-table/data-table-column-toggle.js +1 -1
  381. package/dist/components/ui/data-table/data-table-filter.cjs +1 -1
  382. package/dist/components/ui/data-table/data-table-filter.cjs.map +1 -1
  383. package/dist/components/ui/data-table/data-table-filter.d.ts +9 -0
  384. package/dist/components/ui/data-table/data-table-filter.js +3 -3
  385. package/dist/components/ui/data-table/data-table-group.cjs +1 -1
  386. package/dist/components/ui/data-table/data-table-group.cjs.map +1 -1
  387. package/dist/components/ui/data-table/data-table-group.d.ts +9 -0
  388. package/dist/components/ui/data-table/data-table-group.js +2 -2
  389. package/dist/components/ui/data-table/data-table-pagination.cjs +1 -1
  390. package/dist/components/ui/data-table/data-table-pagination.cjs.map +1 -1
  391. package/dist/components/ui/data-table/data-table-pagination.d.ts +7 -0
  392. package/dist/components/ui/data-table/data-table-pagination.js +2 -2
  393. package/dist/components/ui/data-table/data-table.cjs +1 -1
  394. package/dist/components/ui/data-table/data-table.cjs.map +1 -1
  395. package/dist/components/ui/data-table/data-table.d.ts +82 -0
  396. package/dist/components/ui/data-table/data-table.js +1 -1
  397. package/dist/components/ui/data-table/index.d.ts +5 -0
  398. package/dist/components/ui/dialog.d.ts +18 -0
  399. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  400. package/dist/components/ui/field.d.ts +24 -0
  401. package/dist/components/ui/hover-card.d.ts +6 -0
  402. package/dist/components/ui/input-group.d.ts +16 -0
  403. package/dist/components/ui/input.d.ts +3 -0
  404. package/dist/components/ui/item.d.ts +23 -0
  405. package/dist/components/ui/kbd.d.ts +3 -0
  406. package/dist/components/ui/label.d.ts +4 -0
  407. package/dist/components/ui/menubar.d.ts +30 -0
  408. package/dist/components/ui/navigation-menu.d.ts +14 -0
  409. package/dist/components/ui/popover.d.ts +7 -0
  410. package/dist/components/ui/progress.d.ts +4 -0
  411. package/dist/components/ui/radio-group.d.ts +5 -0
  412. package/dist/components/ui/resizable.d.ts +25 -0
  413. package/dist/components/ui/scroll-area.d.ts +5 -0
  414. package/dist/components/ui/select.d.ts +15 -0
  415. package/dist/components/ui/separator.d.ts +4 -0
  416. package/dist/components/ui/sheet.d.ts +14 -0
  417. package/dist/components/ui/sidebar.d.ts +69 -0
  418. package/dist/components/ui/skeleton.d.ts +2 -0
  419. package/dist/components/ui/slider.d.ts +4 -0
  420. package/dist/components/ui/snippet.d.ts +18 -0
  421. package/dist/components/ui/sonner.d.ts +3 -0
  422. package/dist/components/ui/spinner.d.ts +6 -0
  423. package/dist/components/ui/switch.d.ts +6 -0
  424. package/dist/components/ui/table.d.ts +22 -0
  425. package/dist/components/ui/tabs.d.ts +11 -0
  426. package/dist/components/ui/tetra-molecule-icon.d.ts +11 -0
  427. package/dist/components/ui/tetrascience-icon.d.ts +7 -0
  428. package/dist/components/ui/textarea.d.ts +3 -0
  429. package/dist/components/ui/toggle-group.d.ts +10 -0
  430. package/dist/components/ui/toggle.d.ts +9 -0
  431. package/dist/components/ui/tooltip.d.ts +7 -0
  432. package/dist/composed/AssistantLayout.cjs +2 -0
  433. package/dist/composed/AssistantLayout.cjs.map +1 -0
  434. package/dist/composed/AssistantLayout.js +10 -0
  435. package/dist/composed/AssistantLayout.js.map +1 -0
  436. package/dist/composed/Chat.cjs +2 -0
  437. package/dist/composed/Chat.cjs.map +1 -0
  438. package/dist/composed/Chat.js +5 -0
  439. package/dist/composed/Chat.js.map +1 -0
  440. package/dist/composed/ConfirmDialog.cjs +2 -0
  441. package/dist/composed/ConfirmDialog.cjs.map +1 -0
  442. package/dist/composed/ConfirmDialog.js +5 -0
  443. package/dist/composed/ConfirmDialog.js.map +1 -0
  444. package/dist/composed/DataAppShell.cjs +2 -0
  445. package/dist/composed/DataAppShell.cjs.map +1 -0
  446. package/dist/composed/DataAppShell.js +22 -0
  447. package/dist/composed/DataAppShell.js.map +1 -0
  448. package/dist/composed/EmptyState.cjs +2 -0
  449. package/dist/composed/EmptyState.cjs.map +1 -0
  450. package/dist/composed/EmptyState.js +5 -0
  451. package/dist/composed/EmptyState.js.map +1 -0
  452. package/dist/composed/FormPatterns.cjs +2 -0
  453. package/dist/composed/FormPatterns.cjs.map +1 -0
  454. package/dist/composed/FormPatterns.js +5 -0
  455. package/dist/composed/FormPatterns.js.map +1 -0
  456. package/dist/composed/MoleculeStructure.cjs +2 -0
  457. package/dist/composed/MoleculeStructure.cjs.map +1 -0
  458. package/dist/composed/MoleculeStructure.js +11 -0
  459. package/dist/composed/MoleculeStructure.js.map +1 -0
  460. package/dist/composed/PlateMapEditor.cjs +2 -0
  461. package/dist/composed/PlateMapEditor.cjs.map +1 -0
  462. package/dist/composed/PlateMapEditor.js +45 -0
  463. package/dist/composed/PlateMapEditor.js.map +1 -0
  464. package/dist/composed/ProcessFlow.cjs +2 -0
  465. package/dist/composed/ProcessFlow.cjs.map +1 -0
  466. package/dist/composed/ProcessFlow.js +7 -0
  467. package/dist/composed/ProcessFlow.js.map +1 -0
  468. package/dist/composed/RichListItem.cjs +2 -0
  469. package/dist/composed/RichListItem.cjs.map +1 -0
  470. package/dist/composed/RichListItem.js +6 -0
  471. package/dist/composed/RichListItem.js.map +1 -0
  472. package/dist/composed/StatCard.cjs +2 -0
  473. package/dist/composed/StatCard.cjs.map +1 -0
  474. package/dist/composed/StatCard.js +5 -0
  475. package/dist/composed/StatCard.js.map +1 -0
  476. package/dist/composed/TdpSearch.cjs +2 -0
  477. package/dist/composed/TdpSearch.cjs.map +1 -0
  478. package/dist/composed/TdpSearch.js +8 -0
  479. package/dist/composed/TdpSearch.js.map +1 -0
  480. package/dist/composed/TopBar.cjs +2 -0
  481. package/dist/composed/TopBar.cjs.map +1 -0
  482. package/dist/composed/TopBar.js +6 -0
  483. package/dist/composed/TopBar.js.map +1 -0
  484. package/dist/composed/UserMenu.cjs +2 -0
  485. package/dist/composed/UserMenu.cjs.map +1 -0
  486. package/dist/composed/UserMenu.js +7 -0
  487. package/dist/composed/UserMenu.js.map +1 -0
  488. package/dist/composed/tdp-link.cjs +2 -0
  489. package/dist/composed/tdp-link.cjs.map +1 -0
  490. package/dist/composed/tdp-link.js.map +1 -0
  491. package/dist/composed/tdp-url.cjs.map +1 -0
  492. package/dist/composed/tdp-url.js.map +1 -0
  493. package/dist/hooks/use-code-editor-theme.d.ts +34 -0
  494. package/dist/hooks/use-element-size.d.ts +25 -0
  495. package/dist/hooks/use-is-dark.d.ts +12 -0
  496. package/dist/hooks/use-mobile.d.ts +1 -0
  497. package/dist/hooks/use-plotly-theme.d.ts +49 -0
  498. package/dist/index.cjs +1 -1
  499. package/dist/index.css +1 -1
  500. package/dist/index.d.ts +102 -5448
  501. package/dist/index.js +72 -72
  502. package/dist/jest-setup.cjs +4 -0
  503. package/dist/jest-setup.cjs.map +1 -0
  504. package/dist/jest-setup.d.ts +106 -0
  505. package/dist/jest-setup.js +218 -0
  506. package/dist/jest-setup.js.map +1 -0
  507. package/dist/lib/shiki.cjs +1 -1
  508. package/dist/lib/shiki.cjs.map +1 -1
  509. package/dist/lib/shiki.d.ts +32 -0
  510. package/dist/lib/utils.d.ts +2 -0
  511. package/dist/server/auth/JwtTokenManager.cjs +1 -1
  512. package/dist/server/auth/JwtTokenManager.cjs.map +1 -1
  513. package/dist/server/auth/JwtTokenManager.d.ts +113 -0
  514. package/dist/server/auth/JwtTokenManager.js +44 -21
  515. package/dist/server/auth/JwtTokenManager.js.map +1 -1
  516. package/dist/server/auth/index.d.ts +5 -0
  517. package/dist/server/index.d.ts +8 -0
  518. package/dist/server/providers/AthenaProvider.cjs +1 -1
  519. package/dist/server/providers/AthenaProvider.cjs.map +1 -1
  520. package/dist/server/providers/AthenaProvider.d.ts +75 -0
  521. package/dist/server/providers/DatabricksProvider.cjs +1 -1
  522. package/dist/server/providers/DatabricksProvider.cjs.map +1 -1
  523. package/dist/server/providers/DatabricksProvider.d.ts +38 -0
  524. package/dist/server/providers/SnowflakeProvider.cjs +1 -1
  525. package/dist/server/providers/SnowflakeProvider.cjs.map +1 -1
  526. package/dist/server/providers/SnowflakeProvider.d.ts +36 -0
  527. package/dist/server/providers/buildProvider.d.ts +39 -0
  528. package/dist/server/providers/entries/athena.d.ts +24 -0
  529. package/dist/server/providers/entries/databricks.d.ts +25 -0
  530. package/dist/server/providers/entries/snowflake.d.ts +25 -0
  531. package/dist/server/providers/exceptions.d.ts +36 -0
  532. package/dist/server/providers/getProviderConfigurations.d.ts +45 -0
  533. package/dist/server/providers/index.d.ts +31 -0
  534. package/dist/server/providers/providerDiscovery.d.ts +81 -0
  535. package/dist/server/providers/types.d.ts +145 -0
  536. package/dist/server/search/TdpSearchManager.d.ts +40 -0
  537. package/dist/server/search/index.d.ts +5 -0
  538. package/dist/server.d.ts +17 -540
  539. package/dist/ui/accordion.cjs +2 -0
  540. package/dist/ui/accordion.cjs.map +1 -0
  541. package/dist/ui/accordion.js +83 -0
  542. package/dist/ui/accordion.js.map +1 -0
  543. package/dist/ui/alert-dialog.cjs +2 -0
  544. package/dist/ui/alert-dialog.cjs.map +1 -0
  545. package/dist/ui/alert-dialog.js +181 -0
  546. package/dist/ui/alert-dialog.js.map +1 -0
  547. package/dist/ui/alert.cjs +2 -0
  548. package/dist/ui/alert.cjs.map +1 -0
  549. package/dist/ui/alert.js +81 -0
  550. package/dist/ui/alert.js.map +1 -0
  551. package/dist/ui/aspect-ratio.cjs.map +1 -0
  552. package/dist/ui/aspect-ratio.js.map +1 -0
  553. package/dist/ui/avatar.cjs +2 -0
  554. package/dist/ui/avatar.cjs.map +1 -0
  555. package/dist/ui/avatar.js +107 -0
  556. package/dist/ui/avatar.js.map +1 -0
  557. package/dist/ui/badge.cjs +2 -0
  558. package/dist/ui/badge.cjs.map +1 -0
  559. package/dist/ui/badge.js +47 -0
  560. package/dist/ui/badge.js.map +1 -0
  561. package/dist/ui/banner.cjs +2 -0
  562. package/dist/ui/banner.cjs.map +1 -0
  563. package/dist/ui/banner.js +80 -0
  564. package/dist/ui/banner.js.map +1 -0
  565. package/dist/ui/breadcrumb.cjs +2 -0
  566. package/dist/ui/breadcrumb.cjs.map +1 -0
  567. package/dist/ui/breadcrumb.js +118 -0
  568. package/dist/ui/breadcrumb.js.map +1 -0
  569. package/dist/ui/button-group.cjs +2 -0
  570. package/dist/ui/button-group.cjs.map +1 -0
  571. package/dist/ui/button-group.js +77 -0
  572. package/dist/ui/button-group.js.map +1 -0
  573. package/dist/ui/button.cjs +2 -0
  574. package/dist/ui/button.cjs.map +1 -0
  575. package/dist/ui/button.js +57 -0
  576. package/dist/ui/button.js.map +1 -0
  577. package/dist/ui/calendar.cjs +2 -0
  578. package/dist/ui/calendar.cjs.map +1 -0
  579. package/dist/ui/calendar.js +174 -0
  580. package/dist/ui/calendar.js.map +1 -0
  581. package/dist/ui/card.cjs +2 -0
  582. package/dist/ui/card.cjs.map +1 -0
  583. package/dist/ui/card.js +102 -0
  584. package/dist/ui/card.js.map +1 -0
  585. package/dist/ui/carousel.cjs +2 -0
  586. package/dist/ui/carousel.cjs.map +1 -0
  587. package/dist/ui/carousel.js +179 -0
  588. package/dist/ui/carousel.js.map +1 -0
  589. package/dist/ui/checkbox.cjs +2 -0
  590. package/dist/ui/checkbox.cjs.map +1 -0
  591. package/dist/ui/checkbox.js +35 -0
  592. package/dist/ui/checkbox.js.map +1 -0
  593. package/dist/ui/code-block.cjs +4 -0
  594. package/dist/ui/code-block.cjs.map +1 -0
  595. package/dist/ui/code-block.js +324 -0
  596. package/dist/ui/code-block.js.map +1 -0
  597. package/dist/ui/code-editor.cjs +2 -0
  598. package/dist/ui/code-editor.cjs.map +1 -0
  599. package/dist/ui/code-editor.js +106 -0
  600. package/dist/ui/code-editor.js.map +1 -0
  601. package/dist/ui/collapsible.cjs.map +1 -0
  602. package/dist/ui/collapsible.js.map +1 -0
  603. package/dist/ui/combobox.cjs +2 -0
  604. package/dist/ui/combobox.cjs.map +1 -0
  605. package/dist/ui/combobox.js +285 -0
  606. package/dist/ui/combobox.js.map +1 -0
  607. package/dist/ui/command.cjs +2 -0
  608. package/dist/ui/command.cjs.map +1 -0
  609. package/dist/ui/command.js +178 -0
  610. package/dist/ui/command.js.map +1 -0
  611. package/dist/ui/context-menu.cjs +2 -0
  612. package/dist/ui/context-menu.cjs.map +1 -0
  613. package/dist/ui/context-menu.js +236 -0
  614. package/dist/ui/context-menu.js.map +1 -0
  615. package/dist/ui/data-table.cjs +2 -0
  616. package/dist/ui/data-table.cjs.map +1 -0
  617. package/dist/ui/data-table.js +16 -0
  618. package/dist/ui/data-table.js.map +1 -0
  619. package/dist/ui/dialog.cjs +2 -0
  620. package/dist/ui/dialog.cjs.map +1 -0
  621. package/dist/ui/dialog.js +165 -0
  622. package/dist/ui/dialog.js.map +1 -0
  623. package/dist/ui/dropdown-menu.cjs +2 -0
  624. package/dist/ui/dropdown-menu.cjs.map +1 -0
  625. package/dist/ui/dropdown-menu.js +260 -0
  626. package/dist/ui/dropdown-menu.js.map +1 -0
  627. package/dist/ui/field.cjs +2 -0
  628. package/dist/ui/field.cjs.map +1 -0
  629. package/dist/ui/field.js +210 -0
  630. package/dist/ui/field.js.map +1 -0
  631. package/dist/ui/hover-card.cjs +2 -0
  632. package/dist/ui/hover-card.cjs.map +1 -0
  633. package/dist/ui/hover-card.js +39 -0
  634. package/dist/ui/hover-card.js.map +1 -0
  635. package/dist/ui/input-group.cjs +2 -0
  636. package/dist/ui/input-group.cjs.map +1 -0
  637. package/dist/ui/input-group.js +145 -0
  638. package/dist/ui/input-group.js.map +1 -0
  639. package/dist/ui/input.cjs +2 -0
  640. package/dist/ui/input.cjs.map +1 -0
  641. package/dist/ui/input.js +20 -0
  642. package/dist/ui/input.js.map +1 -0
  643. package/dist/ui/item.cjs +2 -0
  644. package/dist/ui/item.cjs.map +1 -0
  645. package/dist/ui/item.js +199 -0
  646. package/dist/ui/item.js.map +1 -0
  647. package/dist/ui/kbd.cjs +2 -0
  648. package/dist/ui/kbd.cjs.map +1 -0
  649. package/dist/ui/kbd.js +30 -0
  650. package/dist/ui/kbd.js.map +1 -0
  651. package/dist/ui/label.cjs +2 -0
  652. package/dist/ui/label.cjs.map +1 -0
  653. package/dist/ui/label.js +23 -0
  654. package/dist/ui/label.js.map +1 -0
  655. package/dist/ui/menubar.cjs +2 -0
  656. package/dist/ui/menubar.cjs.map +1 -0
  657. package/dist/ui/menubar.js +256 -0
  658. package/dist/ui/menubar.js.map +1 -0
  659. package/dist/ui/navigation-menu.cjs +2 -0
  660. package/dist/ui/navigation-menu.cjs.map +1 -0
  661. package/dist/ui/navigation-menu.js +164 -0
  662. package/dist/ui/navigation-menu.js.map +1 -0
  663. package/dist/ui/popover.cjs +2 -0
  664. package/dist/ui/popover.cjs.map +1 -0
  665. package/dist/ui/popover.js +45 -0
  666. package/dist/ui/popover.js.map +1 -0
  667. package/dist/ui/radio-group.cjs +2 -0
  668. package/dist/ui/radio-group.cjs.map +1 -0
  669. package/dist/ui/radio-group.js +45 -0
  670. package/dist/ui/radio-group.js.map +1 -0
  671. package/dist/ui/resizable.cjs +2 -0
  672. package/dist/ui/resizable.cjs.map +1 -0
  673. package/dist/ui/resizable.js +58 -0
  674. package/dist/ui/resizable.js.map +1 -0
  675. package/dist/ui/scroll-area.cjs +2 -0
  676. package/dist/ui/scroll-area.cjs.map +1 -0
  677. package/dist/ui/scroll-area.js +61 -0
  678. package/dist/ui/scroll-area.js.map +1 -0
  679. package/dist/ui/select.cjs +2 -0
  680. package/dist/ui/select.cjs.map +1 -0
  681. package/dist/ui/select.js +184 -0
  682. package/dist/ui/select.js.map +1 -0
  683. package/dist/ui/separator.cjs +2 -0
  684. package/dist/ui/separator.cjs.map +1 -0
  685. package/dist/ui/separator.js +27 -0
  686. package/dist/ui/separator.js.map +1 -0
  687. package/dist/ui/sheet.cjs +2 -0
  688. package/dist/ui/sheet.cjs.map +1 -0
  689. package/dist/ui/sheet.js +137 -0
  690. package/dist/ui/sheet.js.map +1 -0
  691. package/dist/ui/sidebar.cjs +2 -0
  692. package/dist/ui/sidebar.cjs.map +1 -0
  693. package/dist/ui/sidebar.js +579 -0
  694. package/dist/ui/sidebar.js.map +1 -0
  695. package/dist/ui/skeleton.cjs +2 -0
  696. package/dist/ui/skeleton.cjs.map +1 -0
  697. package/dist/ui/skeleton.js +24 -0
  698. package/dist/ui/skeleton.js.map +1 -0
  699. package/dist/ui/slider.cjs +2 -0
  700. package/dist/ui/slider.cjs.map +1 -0
  701. package/dist/ui/slider.js +61 -0
  702. package/dist/ui/slider.js.map +1 -0
  703. package/dist/ui/sonner.cjs +2 -0
  704. package/dist/ui/sonner.cjs.map +1 -0
  705. package/dist/ui/sonner.js +52 -0
  706. package/dist/ui/sonner.js.map +1 -0
  707. package/dist/ui/spinner.cjs +2 -0
  708. package/dist/ui/spinner.cjs.map +1 -0
  709. package/dist/ui/spinner.js +39 -0
  710. package/dist/ui/spinner.js.map +1 -0
  711. package/dist/ui/switch.cjs +2 -0
  712. package/dist/ui/switch.cjs.map +1 -0
  713. package/dist/ui/switch.js +32 -0
  714. package/dist/ui/switch.js.map +1 -0
  715. package/dist/ui/table.cjs +2 -0
  716. package/dist/ui/table.cjs.map +1 -0
  717. package/dist/ui/table.js +153 -0
  718. package/dist/ui/table.js.map +1 -0
  719. package/dist/ui/tabs.cjs +2 -0
  720. package/dist/ui/tabs.cjs.map +1 -0
  721. package/dist/ui/tabs.js +92 -0
  722. package/dist/ui/tabs.js.map +1 -0
  723. package/dist/ui/tetra-molecule-icon.cjs +2 -0
  724. package/dist/ui/tetra-molecule-icon.cjs.map +1 -0
  725. package/dist/ui/tetra-molecule-icon.js +50 -0
  726. package/dist/ui/tetra-molecule-icon.js.map +1 -0
  727. package/dist/ui/tetrascience-icon.cjs +2 -0
  728. package/dist/ui/tetrascience-icon.cjs.map +1 -0
  729. package/dist/ui/tetrascience-icon.js +47 -0
  730. package/dist/ui/tetrascience-icon.js.map +1 -0
  731. package/dist/ui/textarea.cjs +2 -0
  732. package/dist/ui/textarea.cjs.map +1 -0
  733. package/dist/ui/textarea.js +19 -0
  734. package/dist/ui/textarea.js.map +1 -0
  735. package/dist/ui/toggle-group.cjs +2 -0
  736. package/dist/ui/toggle-group.cjs.map +1 -0
  737. package/dist/ui/toggle-group.js +81 -0
  738. package/dist/ui/toggle-group.js.map +1 -0
  739. package/dist/ui/toggle.cjs +2 -0
  740. package/dist/ui/toggle.cjs.map +1 -0
  741. package/dist/ui/toggle.js +44 -0
  742. package/dist/ui/toggle.js.map +1 -0
  743. package/dist/ui/tooltip.cjs +2 -0
  744. package/dist/ui/tooltip.cjs.map +1 -0
  745. package/dist/ui/tooltip.js +56 -0
  746. package/dist/ui/tooltip.js.map +1 -0
  747. package/dist/utils/colors.d.ts +50 -0
  748. package/package.json +113 -10
  749. package/dist/athena.d.ts +0 -167
  750. package/dist/components/ai/attachments.cjs +0 -2
  751. package/dist/components/ai/attachments.cjs.map +0 -1
  752. package/dist/components/ai/attachments.js +0 -224
  753. package/dist/components/ai/attachments.js.map +0 -1
  754. package/dist/components/ai/chain-of-thought.cjs +0 -2
  755. package/dist/components/ai/chain-of-thought.cjs.map +0 -1
  756. package/dist/components/ai/chain-of-thought.js +0 -145
  757. package/dist/components/ai/chain-of-thought.js.map +0 -1
  758. package/dist/components/ai/confirmation.cjs +0 -2
  759. package/dist/components/ai/confirmation.cjs.map +0 -1
  760. package/dist/components/ai/confirmation.js +0 -109
  761. package/dist/components/ai/confirmation.js.map +0 -1
  762. package/dist/components/ai/context.cjs +0 -2
  763. package/dist/components/ai/context.cjs.map +0 -1
  764. package/dist/components/ai/context.js +0 -267
  765. package/dist/components/ai/context.js.map +0 -1
  766. package/dist/components/ai/conversation.cjs +0 -4
  767. package/dist/components/ai/conversation.cjs.map +0 -1
  768. package/dist/components/ai/conversation.js +0 -108
  769. package/dist/components/ai/conversation.js.map +0 -1
  770. package/dist/components/ai/inline-citation.cjs +0 -2
  771. package/dist/components/ai/inline-citation.cjs.map +0 -1
  772. package/dist/components/ai/inline-citation.js +0 -182
  773. package/dist/components/ai/inline-citation.js.map +0 -1
  774. package/dist/components/ai/message.cjs +0 -2
  775. package/dist/components/ai/message.cjs.map +0 -1
  776. package/dist/components/ai/message.js +0 -237
  777. package/dist/components/ai/message.js.map +0 -1
  778. package/dist/components/ai/model-selector.cjs +0 -2
  779. package/dist/components/ai/model-selector.cjs.map +0 -1
  780. package/dist/components/ai/model-selector.js +0 -77
  781. package/dist/components/ai/model-selector.js.map +0 -1
  782. package/dist/components/ai/prompt-input.cjs +0 -2
  783. package/dist/components/ai/prompt-input.cjs.map +0 -1
  784. package/dist/components/ai/prompt-input.js +0 -776
  785. package/dist/components/ai/prompt-input.js.map +0 -1
  786. package/dist/components/ai/queue.cjs +0 -2
  787. package/dist/components/ai/queue.cjs.map +0 -1
  788. package/dist/components/ai/queue.js +0 -209
  789. package/dist/components/ai/queue.js.map +0 -1
  790. package/dist/components/ai/reasoning.cjs +0 -2
  791. package/dist/components/ai/reasoning.cjs.map +0 -1
  792. package/dist/components/ai/reasoning.js +0 -129
  793. package/dist/components/ai/reasoning.js.map +0 -1
  794. package/dist/components/ai/shimmer.cjs +0 -2
  795. package/dist/components/ai/shimmer.cjs.map +0 -1
  796. package/dist/components/ai/shimmer.js +0 -49
  797. package/dist/components/ai/shimmer.js.map +0 -1
  798. package/dist/components/ai/sources.cjs +0 -2
  799. package/dist/components/ai/sources.cjs.map +0 -1
  800. package/dist/components/ai/sources.js +0 -54
  801. package/dist/components/ai/sources.js.map +0 -1
  802. package/dist/components/ai/speech-input.cjs +0 -2
  803. package/dist/components/ai/speech-input.cjs.map +0 -1
  804. package/dist/components/ai/speech-input.js +0 -123
  805. package/dist/components/ai/speech-input.js.map +0 -1
  806. package/dist/components/ai/stream-status.cjs +0 -2
  807. package/dist/components/ai/stream-status.cjs.map +0 -1
  808. package/dist/components/ai/stream-status.js +0 -108
  809. package/dist/components/ai/stream-status.js.map +0 -1
  810. package/dist/components/ai/suggestion.cjs +0 -2
  811. package/dist/components/ai/suggestion.cjs.map +0 -1
  812. package/dist/components/ai/suggestion.js +0 -38
  813. package/dist/components/ai/suggestion.js.map +0 -1
  814. package/dist/components/ai/task.cjs +0 -2
  815. package/dist/components/ai/task.cjs.map +0 -1
  816. package/dist/components/ai/task.js +0 -101
  817. package/dist/components/ai/task.js.map +0 -1
  818. package/dist/components/ai/tool.cjs +0 -2
  819. package/dist/components/ai/tool.cjs.map +0 -1
  820. package/dist/components/ai/tool.js +0 -139
  821. package/dist/components/ai/tool.js.map +0 -1
  822. package/dist/components/composed/tdp-link.cjs +0 -2
  823. package/dist/components/composed/tdp-link.cjs.map +0 -1
  824. package/dist/components/composed/tdp-link.js.map +0 -1
  825. package/dist/components/composed/tdp-url.cjs.map +0 -1
  826. package/dist/components/composed/tdp-url.js.map +0 -1
  827. package/dist/components/ui/accordion.cjs +0 -2
  828. package/dist/components/ui/accordion.cjs.map +0 -1
  829. package/dist/components/ui/accordion.js +0 -83
  830. package/dist/components/ui/accordion.js.map +0 -1
  831. package/dist/components/ui/alert-dialog.cjs +0 -2
  832. package/dist/components/ui/alert-dialog.cjs.map +0 -1
  833. package/dist/components/ui/alert-dialog.js +0 -181
  834. package/dist/components/ui/alert-dialog.js.map +0 -1
  835. package/dist/components/ui/alert.cjs +0 -2
  836. package/dist/components/ui/alert.cjs.map +0 -1
  837. package/dist/components/ui/alert.js +0 -81
  838. package/dist/components/ui/alert.js.map +0 -1
  839. package/dist/components/ui/aspect-ratio.cjs.map +0 -1
  840. package/dist/components/ui/aspect-ratio.js.map +0 -1
  841. package/dist/components/ui/avatar.cjs +0 -2
  842. package/dist/components/ui/avatar.cjs.map +0 -1
  843. package/dist/components/ui/avatar.js +0 -107
  844. package/dist/components/ui/avatar.js.map +0 -1
  845. package/dist/components/ui/badge.cjs +0 -2
  846. package/dist/components/ui/badge.cjs.map +0 -1
  847. package/dist/components/ui/badge.js +0 -47
  848. package/dist/components/ui/badge.js.map +0 -1
  849. package/dist/components/ui/banner.cjs +0 -2
  850. package/dist/components/ui/banner.cjs.map +0 -1
  851. package/dist/components/ui/banner.js +0 -80
  852. package/dist/components/ui/banner.js.map +0 -1
  853. package/dist/components/ui/breadcrumb.cjs +0 -2
  854. package/dist/components/ui/breadcrumb.cjs.map +0 -1
  855. package/dist/components/ui/breadcrumb.js +0 -118
  856. package/dist/components/ui/breadcrumb.js.map +0 -1
  857. package/dist/components/ui/button-group.cjs +0 -2
  858. package/dist/components/ui/button-group.cjs.map +0 -1
  859. package/dist/components/ui/button-group.js +0 -77
  860. package/dist/components/ui/button-group.js.map +0 -1
  861. package/dist/components/ui/button.cjs +0 -2
  862. package/dist/components/ui/button.cjs.map +0 -1
  863. package/dist/components/ui/button.js +0 -57
  864. package/dist/components/ui/button.js.map +0 -1
  865. package/dist/components/ui/calendar.cjs +0 -2
  866. package/dist/components/ui/calendar.cjs.map +0 -1
  867. package/dist/components/ui/calendar.js +0 -174
  868. package/dist/components/ui/calendar.js.map +0 -1
  869. package/dist/components/ui/card.cjs +0 -2
  870. package/dist/components/ui/card.cjs.map +0 -1
  871. package/dist/components/ui/card.js +0 -102
  872. package/dist/components/ui/card.js.map +0 -1
  873. package/dist/components/ui/carousel.cjs +0 -2
  874. package/dist/components/ui/carousel.cjs.map +0 -1
  875. package/dist/components/ui/carousel.js +0 -179
  876. package/dist/components/ui/carousel.js.map +0 -1
  877. package/dist/components/ui/checkbox.cjs +0 -2
  878. package/dist/components/ui/checkbox.cjs.map +0 -1
  879. package/dist/components/ui/checkbox.js +0 -35
  880. package/dist/components/ui/checkbox.js.map +0 -1
  881. package/dist/components/ui/code-block.cjs +0 -4
  882. package/dist/components/ui/code-block.cjs.map +0 -1
  883. package/dist/components/ui/code-block.js +0 -324
  884. package/dist/components/ui/code-block.js.map +0 -1
  885. package/dist/components/ui/code-editor.cjs +0 -2
  886. package/dist/components/ui/code-editor.cjs.map +0 -1
  887. package/dist/components/ui/code-editor.js +0 -105
  888. package/dist/components/ui/code-editor.js.map +0 -1
  889. package/dist/components/ui/collapsible.cjs.map +0 -1
  890. package/dist/components/ui/collapsible.js.map +0 -1
  891. package/dist/components/ui/combobox.cjs +0 -2
  892. package/dist/components/ui/combobox.cjs.map +0 -1
  893. package/dist/components/ui/combobox.js +0 -285
  894. package/dist/components/ui/combobox.js.map +0 -1
  895. package/dist/components/ui/command.cjs +0 -2
  896. package/dist/components/ui/command.cjs.map +0 -1
  897. package/dist/components/ui/command.js +0 -178
  898. package/dist/components/ui/command.js.map +0 -1
  899. package/dist/components/ui/context-menu.cjs +0 -2
  900. package/dist/components/ui/context-menu.cjs.map +0 -1
  901. package/dist/components/ui/context-menu.js +0 -236
  902. package/dist/components/ui/context-menu.js.map +0 -1
  903. package/dist/components/ui/dialog.cjs +0 -2
  904. package/dist/components/ui/dialog.cjs.map +0 -1
  905. package/dist/components/ui/dialog.js +0 -165
  906. package/dist/components/ui/dialog.js.map +0 -1
  907. package/dist/components/ui/dropdown-menu.cjs +0 -2
  908. package/dist/components/ui/dropdown-menu.cjs.map +0 -1
  909. package/dist/components/ui/dropdown-menu.js +0 -260
  910. package/dist/components/ui/dropdown-menu.js.map +0 -1
  911. package/dist/components/ui/field.cjs +0 -2
  912. package/dist/components/ui/field.cjs.map +0 -1
  913. package/dist/components/ui/field.js +0 -210
  914. package/dist/components/ui/field.js.map +0 -1
  915. package/dist/components/ui/hover-card.cjs +0 -2
  916. package/dist/components/ui/hover-card.cjs.map +0 -1
  917. package/dist/components/ui/hover-card.js +0 -39
  918. package/dist/components/ui/hover-card.js.map +0 -1
  919. package/dist/components/ui/input-group.cjs +0 -2
  920. package/dist/components/ui/input-group.cjs.map +0 -1
  921. package/dist/components/ui/input-group.js +0 -145
  922. package/dist/components/ui/input-group.js.map +0 -1
  923. package/dist/components/ui/input.cjs +0 -2
  924. package/dist/components/ui/input.cjs.map +0 -1
  925. package/dist/components/ui/input.js +0 -20
  926. package/dist/components/ui/input.js.map +0 -1
  927. package/dist/components/ui/item.cjs +0 -2
  928. package/dist/components/ui/item.cjs.map +0 -1
  929. package/dist/components/ui/item.js +0 -199
  930. package/dist/components/ui/item.js.map +0 -1
  931. package/dist/components/ui/kbd.cjs +0 -2
  932. package/dist/components/ui/kbd.cjs.map +0 -1
  933. package/dist/components/ui/kbd.js +0 -30
  934. package/dist/components/ui/kbd.js.map +0 -1
  935. package/dist/components/ui/label.cjs +0 -2
  936. package/dist/components/ui/label.cjs.map +0 -1
  937. package/dist/components/ui/label.js +0 -23
  938. package/dist/components/ui/label.js.map +0 -1
  939. package/dist/components/ui/menubar.cjs +0 -2
  940. package/dist/components/ui/menubar.cjs.map +0 -1
  941. package/dist/components/ui/menubar.js +0 -256
  942. package/dist/components/ui/menubar.js.map +0 -1
  943. package/dist/components/ui/navigation-menu.cjs +0 -2
  944. package/dist/components/ui/navigation-menu.cjs.map +0 -1
  945. package/dist/components/ui/navigation-menu.js +0 -164
  946. package/dist/components/ui/navigation-menu.js.map +0 -1
  947. package/dist/components/ui/popover.cjs +0 -2
  948. package/dist/components/ui/popover.cjs.map +0 -1
  949. package/dist/components/ui/popover.js +0 -45
  950. package/dist/components/ui/popover.js.map +0 -1
  951. package/dist/components/ui/radio-group.cjs +0 -2
  952. package/dist/components/ui/radio-group.cjs.map +0 -1
  953. package/dist/components/ui/radio-group.js +0 -45
  954. package/dist/components/ui/radio-group.js.map +0 -1
  955. package/dist/components/ui/resizable.cjs +0 -2
  956. package/dist/components/ui/resizable.cjs.map +0 -1
  957. package/dist/components/ui/resizable.js +0 -58
  958. package/dist/components/ui/resizable.js.map +0 -1
  959. package/dist/components/ui/scroll-area.cjs +0 -2
  960. package/dist/components/ui/scroll-area.cjs.map +0 -1
  961. package/dist/components/ui/scroll-area.js +0 -61
  962. package/dist/components/ui/scroll-area.js.map +0 -1
  963. package/dist/components/ui/select.cjs +0 -2
  964. package/dist/components/ui/select.cjs.map +0 -1
  965. package/dist/components/ui/select.js +0 -184
  966. package/dist/components/ui/select.js.map +0 -1
  967. package/dist/components/ui/separator.cjs +0 -2
  968. package/dist/components/ui/separator.cjs.map +0 -1
  969. package/dist/components/ui/separator.js +0 -27
  970. package/dist/components/ui/separator.js.map +0 -1
  971. package/dist/components/ui/sheet.cjs +0 -2
  972. package/dist/components/ui/sheet.cjs.map +0 -1
  973. package/dist/components/ui/sheet.js +0 -137
  974. package/dist/components/ui/sheet.js.map +0 -1
  975. package/dist/components/ui/sidebar.cjs +0 -2
  976. package/dist/components/ui/sidebar.cjs.map +0 -1
  977. package/dist/components/ui/sidebar.js +0 -579
  978. package/dist/components/ui/sidebar.js.map +0 -1
  979. package/dist/components/ui/skeleton.cjs +0 -2
  980. package/dist/components/ui/skeleton.cjs.map +0 -1
  981. package/dist/components/ui/skeleton.js +0 -24
  982. package/dist/components/ui/skeleton.js.map +0 -1
  983. package/dist/components/ui/slider.cjs +0 -2
  984. package/dist/components/ui/slider.cjs.map +0 -1
  985. package/dist/components/ui/slider.js +0 -61
  986. package/dist/components/ui/slider.js.map +0 -1
  987. package/dist/components/ui/sonner.cjs +0 -2
  988. package/dist/components/ui/sonner.cjs.map +0 -1
  989. package/dist/components/ui/sonner.js +0 -52
  990. package/dist/components/ui/sonner.js.map +0 -1
  991. package/dist/components/ui/spinner.cjs +0 -2
  992. package/dist/components/ui/spinner.cjs.map +0 -1
  993. package/dist/components/ui/spinner.js +0 -39
  994. package/dist/components/ui/spinner.js.map +0 -1
  995. package/dist/components/ui/switch.cjs +0 -2
  996. package/dist/components/ui/switch.cjs.map +0 -1
  997. package/dist/components/ui/switch.js +0 -32
  998. package/dist/components/ui/switch.js.map +0 -1
  999. package/dist/components/ui/table.cjs +0 -2
  1000. package/dist/components/ui/table.cjs.map +0 -1
  1001. package/dist/components/ui/table.js +0 -153
  1002. package/dist/components/ui/table.js.map +0 -1
  1003. package/dist/components/ui/tabs.cjs +0 -2
  1004. package/dist/components/ui/tabs.cjs.map +0 -1
  1005. package/dist/components/ui/tabs.js +0 -92
  1006. package/dist/components/ui/tabs.js.map +0 -1
  1007. package/dist/components/ui/tetra-molecule-icon.cjs +0 -2
  1008. package/dist/components/ui/tetra-molecule-icon.cjs.map +0 -1
  1009. package/dist/components/ui/tetra-molecule-icon.js +0 -49
  1010. package/dist/components/ui/tetra-molecule-icon.js.map +0 -1
  1011. package/dist/components/ui/tetrascience-icon.cjs +0 -2
  1012. package/dist/components/ui/tetrascience-icon.cjs.map +0 -1
  1013. package/dist/components/ui/tetrascience-icon.js +0 -46
  1014. package/dist/components/ui/tetrascience-icon.js.map +0 -1
  1015. package/dist/components/ui/textarea.cjs +0 -2
  1016. package/dist/components/ui/textarea.cjs.map +0 -1
  1017. package/dist/components/ui/textarea.js +0 -19
  1018. package/dist/components/ui/textarea.js.map +0 -1
  1019. package/dist/components/ui/toggle-group.cjs +0 -2
  1020. package/dist/components/ui/toggle-group.cjs.map +0 -1
  1021. package/dist/components/ui/toggle-group.js +0 -81
  1022. package/dist/components/ui/toggle-group.js.map +0 -1
  1023. package/dist/components/ui/toggle.cjs +0 -2
  1024. package/dist/components/ui/toggle.cjs.map +0 -1
  1025. package/dist/components/ui/toggle.js +0 -44
  1026. package/dist/components/ui/toggle.js.map +0 -1
  1027. package/dist/components/ui/tooltip.cjs +0 -2
  1028. package/dist/components/ui/tooltip.cjs.map +0 -1
  1029. package/dist/components/ui/tooltip.js +0 -56
  1030. package/dist/components/ui/tooltip.js.map +0 -1
  1031. package/dist/databricks.d.ts +0 -129
  1032. package/dist/providers/athena.d.ts +0 -9
  1033. package/dist/providers/databricks.d.ts +0 -9
  1034. package/dist/providers/snowflake.d.ts +0 -9
  1035. package/dist/snowflake.d.ts +0 -125
  1036. /package/dist/{components/composed → composed}/tdp-link.js +0 -0
  1037. /package/dist/{components/composed → composed}/tdp-url.cjs +0 -0
  1038. /package/dist/{components/composed → composed}/tdp-url.js +0 -0
  1039. /package/dist/{components/ui → ui}/aspect-ratio.cjs +0 -0
  1040. /package/dist/{components/ui → ui}/aspect-ratio.js +0 -0
  1041. /package/dist/{components/ui → ui}/collapsible.cjs +0 -0
  1042. /package/dist/{components/ui → ui}/collapsible.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.cjs","sources":["../../../../src/components/composed/Chat/Chat.tsx"],"sourcesContent":["import { CopyIcon, GlobeIcon, RefreshCcwIcon } from \"lucide-react\"\nimport { useCallback, useId, useState } from \"react\"\n\nimport {\n Conversation,\n ConversationContent,\n ConversationEmptyState,\n ConversationScrollButton,\n} from \"@/components/ai/conversation\"\nimport {\n Message,\n MessageAction,\n MessageActions,\n MessageBranch,\n MessageBranchContent,\n MessageBranchNext,\n MessageBranchPage,\n MessageBranchPrevious,\n MessageBranchSelector,\n MessageContent,\n MessageResponse,\n MessageToolbar,\n} from \"@/components/ai/message\"\nimport {\n PromptInput,\n PromptInputBody,\n PromptInputButton,\n PromptInputFooter,\n PromptInputSelect,\n PromptInputSelectContent,\n PromptInputSelectItem,\n PromptInputSelectTrigger,\n PromptInputSelectValue,\n PromptInputSubmit,\n PromptInputTextarea,\n PromptInputTools,\n type PromptInputMessage,\n} from \"@/components/ai/prompt-input\"\nimport { Reasoning, ReasoningContent, ReasoningTrigger } from \"@/components/ai/reasoning\"\nimport { Source, Sources, SourcesContent, SourcesTrigger } from \"@/components/ai/sources\"\nimport { StreamStatus } from \"@/components/ai/stream-status\"\nimport { Suggestion, Suggestions } from \"@/components/ai/suggestion\"\nimport { cn } from \"@/lib/utils\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ChatSource {\n href: string\n title: string\n}\n\nexport interface ChatMessage {\n id: string\n role: \"user\" | \"assistant\"\n content: string\n /** Displayed in a collapsible Reasoning panel above the message content. */\n reasoning?: string\n /** Web sources used to produce this message. */\n sources?: ChatSource[]\n /** Multiple alternative responses (for branching). When provided, the\n * array should include `content` as one of its items. */\n branches?: string[]\n}\n\nexport interface ChatModel {\n id: string\n name: string\n}\n\nexport interface ChatProps {\n /** Initial messages to pre-populate the conversation. */\n initialMessages?: ChatMessage[]\n /** Available models shown in the model-selector dropdown. */\n models?: ChatModel[]\n /** Initial model id. Defaults to the first model in `models`. */\n defaultModel?: string\n /** Suggestion chips shown when the conversation is empty. */\n suggestions?: string[]\n /** Called when the user submits a message. The returned string (if any)\n * will be appended as the assistant's reply. Defaults to a no-op. */\n onSend?: (message: string, model: string) => Promise<string | undefined> | string | undefined\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Default values\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MODELS: ChatModel[] = [\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet\" },\n { id: \"claude-opus-4-7\", name: \"Claude Opus\" },\n]\n\nconst DEFAULT_SUGGESTIONS = [\n \"Explain quantum entanglement simply\",\n \"Write a Python script to rename files\",\n \"Summarise the latest AI research trends\",\n \"What is the difference between TCP and UDP?\",\n]\n\nlet _idCounter = 0\nconst nextId = () => {\n _idCounter += 1\n return `chat-msg-${_idCounter}`\n}\n\nconst STREAM_STATUS_LINGER_MS = 3000\n\n// ---------------------------------------------------------------------------\n// Chat component\n// ---------------------------------------------------------------------------\n\nexport const Chat = ({\n initialMessages = [],\n models = DEFAULT_MODELS,\n defaultModel,\n suggestions = DEFAULT_SUGGESTIONS,\n onSend,\n className,\n}: ChatProps) => {\n const labelId = useId()\n const [messages, setMessages] = useState<ChatMessage[]>(initialMessages)\n const [text, setText] = useState(\"\")\n const [model, setModel] = useState(defaultModel ?? models[0]?.id ?? \"\")\n const [webSearch, setWebSearch] = useState(false)\n const [status, setStatus] = useState<\"ready\" | \"streaming\">(\"ready\")\n const [streamStart, setStreamStart] = useState<Date | undefined>()\n\n const handleSubmit = useCallback(\n async (_msg: PromptInputMessage) => {\n const trimmed = text.trim()\n if (!trimmed || status === \"streaming\") return\n\n const userMsg: ChatMessage = {\n id: nextId(),\n role: \"user\",\n content: trimmed,\n }\n setMessages((prev) => [...prev, userMsg])\n setText(\"\")\n setStatus(\"streaming\")\n setStreamStart(new Date())\n\n try {\n const reply = await onSend?.(trimmed, model)\n const assistantMsg: ChatMessage = {\n id: nextId(),\n role: \"assistant\",\n content: reply ?? \"I received your message.\",\n }\n setMessages((prev) => [...prev, assistantMsg])\n } finally {\n setStatus(\"ready\")\n // Keep streamStart briefly so the bubble-confirm ripple can play out\n setTimeout(() => setStreamStart(undefined), STREAM_STATUS_LINGER_MS)\n }\n },\n [text, status, model, onSend],\n )\n\n const handleSuggestion = useCallback((suggestion: string) => {\n setText(suggestion)\n }, [])\n\n const handleCopy = useCallback((content: string) => {\n navigator.clipboard.writeText(content).catch(() => {})\n }, [])\n\n const handleRetry = useCallback((id: string) => {\n setMessages((prev) => {\n const idx = prev.findIndex((m) => m.id === id)\n if (idx === -1) return prev\n return prev.slice(0, idx)\n })\n }, [])\n\n return (\n <div className={cn(\"mx-auto flex h-full w-full max-w-[980px] flex-col\", className)}>\n {/* Conversation */}\n <Conversation className=\"flex-1\">\n <ConversationContent>\n {messages.length === 0 ? (\n <ConversationEmptyState\n description=\"Send a message or pick a suggestion below to start.\"\n title=\"Start a conversation\"\n />\n ) : null}\n\n {messages.map((msg, index) => (\n <div className=\"space-y-1\" key={msg.id}>\n {/* Branch wrapper — renders alt responses side-by-side when branches exist */}\n {msg.role === \"assistant\" && msg.branches && msg.branches.length > 1 ? (\n <MessageBranch>\n <MessageBranchContent>\n {msg.branches.map((branch, i) => (\n <AssistantMessage\n key={i}\n content={branch}\n id={msg.id}\n onCopy={handleCopy}\n onRetry={handleRetry}\n reasoning={i === 0 ? msg.reasoning : undefined}\n sources={i === 0 ? msg.sources : undefined}\n />\n ))}\n </MessageBranchContent>\n <MessageToolbar>\n <MessageBranchSelector>\n <MessageBranchPrevious />\n <MessageBranchPage />\n <MessageBranchNext />\n </MessageBranchSelector>\n </MessageToolbar>\n </MessageBranch>\n ) : msg.role === \"assistant\" ? (\n <>\n <AssistantMessage\n content={msg.content}\n id={msg.id}\n onCopy={handleCopy}\n onRetry={handleRetry}\n reasoning={msg.reasoning}\n sources={msg.sources}\n />\n </>\n ) : (\n <Message from=\"user\">\n <MessageContent>\n <MessageResponse>{msg.content}</MessageResponse>\n </MessageContent>\n </Message>\n )}\n\n {index === messages.length - 1 && streamStart && (\n <div className=\"mt-3\">\n <StreamStatus\n iconVariant=\"loader-circle\"\n isStreaming={status === \"streaming\"}\n startTime={streamStart}\n />\n </div>\n )}\n </div>\n ))}\n </ConversationContent>\n <ConversationScrollButton />\n </Conversation>\n\n {/* Suggestions — only shown when conversation is empty */}\n {messages.length === 0 && suggestions.length > 0 && (\n <div className=\"px-4 pb-2\">\n <Suggestions>\n {suggestions.map((s) => (\n <Suggestion key={s} onClick={handleSuggestion} suggestion={s} />\n ))}\n </Suggestions>\n </div>\n )}\n\n {/* Prompt input */}\n <div className=\"px-4 pt-3 pb-4\">\n <PromptInput onSubmit={handleSubmit}>\n <PromptInputBody>\n <PromptInputTextarea\n aria-labelledby={labelId}\n onChange={(e) => setText(e.target.value)}\n placeholder=\"Ask anything...\"\n value={text}\n />\n </PromptInputBody>\n <PromptInputFooter>\n <PromptInputTools>\n {/* Model selector */}\n {models.length > 1 && (\n <PromptInputSelect onValueChange={setModel} value={model}>\n <PromptInputSelectTrigger aria-label=\"Select model\">\n <PromptInputSelectValue />\n </PromptInputSelectTrigger>\n <PromptInputSelectContent>\n {models.map((m) => (\n <PromptInputSelectItem key={m.id} value={m.id}>\n {m.name}\n </PromptInputSelectItem>\n ))}\n </PromptInputSelectContent>\n </PromptInputSelect>\n )}\n\n {/* Web search toggle */}\n <PromptInputButton\n onClick={() => setWebSearch((v) => !v)}\n tooltip={{ content: \"Search the web\" }}\n variant={webSearch ? \"default\" : \"ghost\"}\n >\n <GlobeIcon size={16} />\n <span>Search</span>\n </PromptInputButton>\n </PromptInputTools>\n\n <PromptInputSubmit disabled={!text.trim()} status={status} />\n </PromptInputFooter>\n </PromptInput>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Internal sub-component for assistant messages\n// ---------------------------------------------------------------------------\n\ninterface AssistantMessageProps {\n id: string\n content: string\n reasoning?: string\n sources?: ChatSource[]\n onCopy: (content: string) => void\n onRetry: (id: string) => void\n}\n\nconst AssistantMessage = ({ id, content, reasoning, sources, onCopy, onRetry }: AssistantMessageProps) => (\n <div className=\"space-y-2\">\n {reasoning && (\n <Reasoning>\n <ReasoningTrigger />\n <ReasoningContent>{reasoning}</ReasoningContent>\n </Reasoning>\n )}\n\n <Message from=\"assistant\">\n <MessageContent>\n <MessageResponse>{content}</MessageResponse>\n </MessageContent>\n </Message>\n\n {sources && sources.length > 0 && (\n <Sources>\n <SourcesTrigger count={sources.length} />\n <SourcesContent>\n {sources.map((s) => (\n <Source href={s.href} key={s.href} title={s.title} />\n ))}\n </SourcesContent>\n </Sources>\n )}\n\n <MessageActions>\n <MessageAction label=\"Copy\" onClick={() => onCopy(content)}>\n <CopyIcon className=\"size-3\" />\n </MessageAction>\n <MessageAction label=\"Retry\" onClick={() => onRetry(id)}>\n <RefreshCcwIcon className=\"size-3\" />\n </MessageAction>\n </MessageActions>\n </div>\n)\n"],"names":["DEFAULT_MODELS","DEFAULT_SUGGESTIONS","_idCounter","nextId","STREAM_STATUS_LINGER_MS","Chat","initialMessages","models","defaultModel","suggestions","onSend","className","labelId","useId","messages","setMessages","useState","text","setText","model","setModel","webSearch","setWebSearch","status","setStatus","streamStart","setStreamStart","handleSubmit","useCallback","_msg","trimmed","userMsg","prev","reply","assistantMsg","handleSuggestion","suggestion","handleCopy","content","handleRetry","id","idx","m","cn","jsxs","Conversation","ConversationContent","jsx","ConversationEmptyState","msg","index","MessageBranch","MessageBranchContent","branch","i","AssistantMessage","MessageToolbar","MessageBranchSelector","MessageBranchPrevious","MessageBranchPage","MessageBranchNext","Fragment","Message","MessageContent","MessageResponse","StreamStatus","ConversationScrollButton","Suggestions","Suggestion","PromptInput","PromptInputBody","PromptInputTextarea","e","PromptInputFooter","PromptInputTools","PromptInputSelect","PromptInputSelectTrigger","PromptInputSelectValue","PromptInputSelectContent","PromptInputSelectItem","PromptInputButton","v","GlobeIcon","PromptInputSubmit","reasoning","sources","onCopy","onRetry","Reasoning","ReasoningTrigger","ReasoningContent","Sources","SourcesTrigger","SourcesContent","s","Source","MessageActions","MessageAction","CopyIcon","RefreshCcwIcon"],"mappings":"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"}
1
+ {"version":3,"file":"Chat.cjs","sources":["../../../../src/components/composed/Chat/Chat.tsx"],"sourcesContent":["import { CopyIcon, GlobeIcon, RefreshCcwIcon } from \"lucide-react\"\nimport { useCallback, useId, useState } from \"react\"\n\nimport {\n Conversation,\n ConversationContent,\n ConversationEmptyState,\n ConversationScrollButton,\n} from \"@/components/ai/conversation\"\nimport {\n Message,\n MessageAction,\n MessageActions,\n MessageBranch,\n MessageBranchContent,\n MessageBranchNext,\n MessageBranchPage,\n MessageBranchPrevious,\n MessageBranchSelector,\n MessageContent,\n MessageResponse,\n MessageToolbar,\n} from \"@/components/ai/message\"\nimport {\n PromptInput,\n PromptInputBody,\n PromptInputButton,\n PromptInputFooter,\n PromptInputSelect,\n PromptInputSelectContent,\n PromptInputSelectItem,\n PromptInputSelectTrigger,\n PromptInputSelectValue,\n PromptInputSubmit,\n PromptInputTextarea,\n PromptInputTools,\n type PromptInputMessage,\n} from \"@/components/ai/prompt-input\"\nimport { Reasoning, ReasoningContent, ReasoningTrigger } from \"@/components/ai/reasoning\"\nimport { Source, Sources, SourcesContent, SourcesTrigger } from \"@/components/ai/sources\"\nimport { StreamStatus } from \"@/components/ai/stream-status\"\nimport { Suggestion, Suggestions } from \"@/components/ai/suggestion\"\nimport { cn } from \"@/lib/utils\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ChatSource {\n href: string\n title: string\n}\n\nexport interface ChatMessage {\n id: string\n role: \"user\" | \"assistant\"\n content: string\n /** Displayed in a collapsible Reasoning panel above the message content. */\n reasoning?: string\n /** Web sources used to produce this message. */\n sources?: ChatSource[]\n /** Multiple alternative responses (for branching). When provided, the\n * array should include `content` as one of its items. */\n branches?: string[]\n}\n\nexport interface ChatModel {\n id: string\n name: string\n}\n\nexport interface ChatProps {\n /** Initial messages to pre-populate the conversation. */\n initialMessages?: ChatMessage[]\n /** Available models shown in the model-selector dropdown. */\n models?: ChatModel[]\n /** Initial model id. Defaults to the first model in `models`. */\n defaultModel?: string\n /** Suggestion chips shown when the conversation is empty. */\n suggestions?: string[]\n /** Called when the user submits a message. The returned string (if any)\n * will be appended as the assistant's reply. Defaults to a no-op. */\n onSend?: (message: string, model: string) => Promise<string | undefined> | string | undefined\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Default values\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MODELS: ChatModel[] = [\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet\" },\n { id: \"claude-opus-4-7\", name: \"Claude Opus\" },\n]\n\nconst DEFAULT_SUGGESTIONS = [\n \"Explain quantum entanglement simply\",\n \"Write a Python script to rename files\",\n \"Summarise the latest AI research trends\",\n \"What is the difference between TCP and UDP?\",\n]\n\nlet _idCounter = 0\nconst nextId = () => {\n _idCounter += 1\n return `chat-msg-${_idCounter}`\n}\n\nconst STREAM_STATUS_LINGER_MS = 3000\n\n// ---------------------------------------------------------------------------\n// Chat component\n// ---------------------------------------------------------------------------\n\nexport const Chat = ({\n initialMessages = [],\n models = DEFAULT_MODELS,\n defaultModel,\n suggestions = DEFAULT_SUGGESTIONS,\n onSend,\n className,\n}: ChatProps) => {\n const labelId = useId()\n const [messages, setMessages] = useState<ChatMessage[]>(initialMessages)\n const [text, setText] = useState(\"\")\n const [model, setModel] = useState(defaultModel ?? models[0]?.id ?? \"\")\n const [webSearch, setWebSearch] = useState(false)\n const [status, setStatus] = useState<\"ready\" | \"streaming\">(\"ready\")\n const [streamStart, setStreamStart] = useState<Date | undefined>()\n\n const handleSubmit = useCallback(\n async (_msg: PromptInputMessage) => {\n const trimmed = text.trim()\n if (!trimmed || status === \"streaming\") return\n\n const userMsg: ChatMessage = {\n id: nextId(),\n role: \"user\",\n content: trimmed,\n }\n setMessages((prev) => [...prev, userMsg])\n setText(\"\")\n setStatus(\"streaming\")\n setStreamStart(new Date())\n\n try {\n const reply = await onSend?.(trimmed, model)\n const assistantMsg: ChatMessage = {\n id: nextId(),\n role: \"assistant\",\n content: reply ?? \"I received your message.\",\n }\n setMessages((prev) => [...prev, assistantMsg])\n } finally {\n setStatus(\"ready\")\n // Keep streamStart briefly so the bubble-confirm ripple can play out\n setTimeout(() => setStreamStart(undefined), STREAM_STATUS_LINGER_MS)\n }\n },\n [text, status, model, onSend],\n )\n\n const handleSuggestion = useCallback((suggestion: string) => {\n setText(suggestion)\n }, [])\n\n const handleCopy = useCallback((content: string) => {\n navigator.clipboard.writeText(content).catch(() => {})\n }, [])\n\n const handleRetry = useCallback((id: string) => {\n setMessages((prev) => {\n const idx = prev.findIndex((m) => m.id === id)\n if (idx === -1) return prev\n return prev.slice(0, idx)\n })\n }, [])\n\n return (\n <div className={cn(\"mx-auto flex h-full w-full max-w-[980px] flex-col\", className)}>\n {/* Conversation */}\n <Conversation className=\"flex-1\">\n <ConversationContent>\n {messages.length === 0 ? (\n <ConversationEmptyState\n description=\"Send a message or pick a suggestion below to start.\"\n title=\"Start a conversation\"\n />\n ) : null}\n\n {messages.map((msg, index) => (\n <div className=\"space-y-1\" key={msg.id}>\n {/* Branch wrapper — renders alt responses side-by-side when branches exist */}\n {msg.role === \"assistant\" && msg.branches && msg.branches.length > 1 ? (\n <MessageBranch>\n <MessageBranchContent>\n {msg.branches.map((branch, i) => (\n <AssistantMessage\n key={i}\n content={branch}\n id={msg.id}\n onCopy={handleCopy}\n onRetry={handleRetry}\n reasoning={i === 0 ? msg.reasoning : undefined}\n sources={i === 0 ? msg.sources : undefined}\n />\n ))}\n </MessageBranchContent>\n <MessageToolbar>\n <MessageBranchSelector>\n <MessageBranchPrevious />\n <MessageBranchPage />\n <MessageBranchNext />\n </MessageBranchSelector>\n </MessageToolbar>\n </MessageBranch>\n ) : msg.role === \"assistant\" ? (\n <>\n <AssistantMessage\n content={msg.content}\n id={msg.id}\n onCopy={handleCopy}\n onRetry={handleRetry}\n reasoning={msg.reasoning}\n sources={msg.sources}\n />\n </>\n ) : (\n <Message from=\"user\">\n <MessageContent>\n <MessageResponse>{msg.content}</MessageResponse>\n </MessageContent>\n </Message>\n )}\n\n {index === messages.length - 1 && streamStart && (\n <div className=\"mt-3\">\n <StreamStatus\n iconVariant=\"loader-circle\"\n isStreaming={status === \"streaming\"}\n startTime={streamStart}\n />\n </div>\n )}\n </div>\n ))}\n </ConversationContent>\n <ConversationScrollButton />\n </Conversation>\n\n {/* Suggestions — only shown when conversation is empty */}\n {messages.length === 0 && suggestions.length > 0 && (\n <div className=\"px-4 pb-2\">\n <Suggestions>\n {suggestions.map((s) => (\n <Suggestion key={s} onClick={handleSuggestion} suggestion={s} />\n ))}\n </Suggestions>\n </div>\n )}\n\n {/* Prompt input */}\n <div className=\"px-4 pt-3 pb-4\">\n <PromptInput onSubmit={handleSubmit}>\n <PromptInputBody>\n <PromptInputTextarea\n aria-labelledby={labelId}\n onChange={(e) => setText(e.target.value)}\n placeholder=\"Ask anything...\"\n value={text}\n />\n </PromptInputBody>\n <PromptInputFooter>\n <PromptInputTools>\n {/* Model selector */}\n {models.length > 1 && (\n <PromptInputSelect onValueChange={setModel} value={model}>\n <PromptInputSelectTrigger aria-label=\"Select model\">\n <PromptInputSelectValue />\n </PromptInputSelectTrigger>\n <PromptInputSelectContent>\n {models.map((m) => (\n <PromptInputSelectItem key={m.id} value={m.id}>\n {m.name}\n </PromptInputSelectItem>\n ))}\n </PromptInputSelectContent>\n </PromptInputSelect>\n )}\n\n {/* Web search toggle */}\n <PromptInputButton\n onClick={() => setWebSearch((v) => !v)}\n tooltip={{ content: \"Search the web\" }}\n variant={webSearch ? \"default\" : \"ghost\"}\n >\n <GlobeIcon size={16} />\n <span>Search</span>\n </PromptInputButton>\n </PromptInputTools>\n\n <PromptInputSubmit disabled={!text.trim()} status={status} />\n </PromptInputFooter>\n </PromptInput>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Internal sub-component for assistant messages\n// ---------------------------------------------------------------------------\n\ninterface AssistantMessageProps {\n id: string\n content: string\n reasoning?: string\n sources?: ChatSource[]\n onCopy: (content: string) => void\n onRetry: (id: string) => void\n}\n\nconst AssistantMessage = ({ id, content, reasoning, sources, onCopy, onRetry }: AssistantMessageProps) => (\n <div className=\"space-y-2\">\n {reasoning && (\n <Reasoning>\n <ReasoningTrigger />\n <ReasoningContent>{reasoning}</ReasoningContent>\n </Reasoning>\n )}\n\n <Message from=\"assistant\">\n <MessageContent>\n <MessageResponse>{content}</MessageResponse>\n </MessageContent>\n </Message>\n\n {sources && sources.length > 0 && (\n <Sources>\n <SourcesTrigger count={sources.length} />\n <SourcesContent>\n {sources.map((s) => (\n <Source href={s.href} key={s.href} title={s.title} />\n ))}\n </SourcesContent>\n </Sources>\n )}\n\n <MessageActions>\n <MessageAction label=\"Copy\" onClick={() => onCopy(content)}>\n <CopyIcon className=\"size-3\" />\n </MessageAction>\n <MessageAction label=\"Retry\" onClick={() => onRetry(id)}>\n <RefreshCcwIcon className=\"size-3\" />\n </MessageAction>\n </MessageActions>\n </div>\n)\n"],"names":["DEFAULT_MODELS","DEFAULT_SUGGESTIONS","_idCounter","nextId","STREAM_STATUS_LINGER_MS","Chat","initialMessages","models","defaultModel","suggestions","onSend","className","labelId","useId","messages","setMessages","useState","text","setText","model","setModel","webSearch","setWebSearch","status","setStatus","streamStart","setStreamStart","handleSubmit","useCallback","_msg","trimmed","userMsg","prev","reply","assistantMsg","handleSuggestion","suggestion","handleCopy","content","handleRetry","id","idx","m","cn","jsxs","Conversation","ConversationContent","jsx","ConversationEmptyState","msg","index","MessageBranch","MessageBranchContent","branch","AssistantMessage","MessageToolbar","MessageBranchSelector","MessageBranchPrevious","MessageBranchPage","MessageBranchNext","Fragment","Message","MessageContent","MessageResponse","StreamStatus","ConversationScrollButton","Suggestions","Suggestion","PromptInput","PromptInputBody","PromptInputTextarea","e","PromptInputFooter","PromptInputTools","PromptInputSelect","PromptInputSelectTrigger","PromptInputSelectValue","PromptInputSelectContent","PromptInputSelectItem","PromptInputButton","v","GlobeIcon","PromptInputSubmit","reasoning","sources","onCopy","onRetry","Reasoning","ReasoningTrigger","ReasoningContent","Sources","SourcesTrigger","SourcesContent","s","Source","MessageActions","MessageAction","CopyIcon","RefreshCcwIcon"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface ChatSource {
2
+ href: string;
3
+ title: string;
4
+ }
5
+ export interface ChatMessage {
6
+ id: string;
7
+ role: "user" | "assistant";
8
+ content: string;
9
+ /** Displayed in a collapsible Reasoning panel above the message content. */
10
+ reasoning?: string;
11
+ /** Web sources used to produce this message. */
12
+ sources?: ChatSource[];
13
+ /** Multiple alternative responses (for branching). When provided, the
14
+ * array should include `content` as one of its items. */
15
+ branches?: string[];
16
+ }
17
+ export interface ChatModel {
18
+ id: string;
19
+ name: string;
20
+ }
21
+ export interface ChatProps {
22
+ /** Initial messages to pre-populate the conversation. */
23
+ initialMessages?: ChatMessage[];
24
+ /** Available models shown in the model-selector dropdown. */
25
+ models?: ChatModel[];
26
+ /** Initial model id. Defaults to the first model in `models`. */
27
+ defaultModel?: string;
28
+ /** Suggestion chips shown when the conversation is empty. */
29
+ suggestions?: string[];
30
+ /** Called when the user submits a message. The returned string (if any)
31
+ * will be appended as the assistant's reply. Defaults to a no-op. */
32
+ onSend?: (message: string, model: string) => Promise<string | undefined> | string | undefined;
33
+ className?: string;
34
+ }
35
+ export declare const Chat: ({ initialMessages, models, defaultModel, suggestions, onSend, className, }: ChatProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,13 +1,13 @@
1
1
  import { jsxs as n, jsx as e, Fragment as z } from "react/jsx-runtime";
2
2
  import { GlobeIcon as O, CopyIcon as V, RefreshCcwIcon as W } from "lucide-react";
3
3
  import { useId as j, useState as c, useCallback as g } from "react";
4
- import { Conversation as q, ConversationContent as $, ConversationEmptyState as H, ConversationScrollButton as J } from "../../ai/conversation.js";
5
- import { MessageBranch as K, MessageBranchContent as Q, MessageToolbar as X, MessageBranchSelector as Y, MessageBranchPrevious as Z, MessageBranchPage as ee, MessageBranchNext as te, Message as A, MessageContent as B, MessageResponse as E, MessageActions as ne, MessageAction as T } from "../../ai/message.js";
6
- import { PromptInput as re, PromptInputBody as ae, PromptInputTextarea as oe, PromptInputFooter as se, PromptInputTools as ie, PromptInputSelect as ce, PromptInputSelectTrigger as le, PromptInputSelectValue as de, PromptInputSelectContent as he, PromptInputSelectItem as me, PromptInputButton as pe, PromptInputSubmit as ue } from "../../ai/prompt-input.js";
7
- import { Reasoning as ge, ReasoningTrigger as Se, ReasoningContent as fe } from "../../ai/reasoning.js";
8
- import { Sources as Ce, SourcesTrigger as be, SourcesContent as ye, Source as Ie } from "../../ai/sources.js";
9
- import { StreamStatus as ve } from "../../ai/stream-status.js";
10
- import { Suggestions as xe, Suggestion as Me } from "../../ai/suggestion.js";
4
+ import { Conversation as q, ConversationContent as $, ConversationEmptyState as H, ConversationScrollButton as J } from "../../../ai/conversation.js";
5
+ import { MessageBranch as K, MessageBranchContent as Q, MessageToolbar as X, MessageBranchSelector as Y, MessageBranchPrevious as Z, MessageBranchPage as ee, MessageBranchNext as te, Message as A, MessageContent as B, MessageResponse as E, MessageActions as ne, MessageAction as T } from "../../../ai/message.js";
6
+ import { PromptInput as re, PromptInputBody as ae, PromptInputTextarea as oe, PromptInputFooter as se, PromptInputTools as ie, PromptInputSelect as ce, PromptInputSelectTrigger as le, PromptInputSelectValue as de, PromptInputSelectContent as he, PromptInputSelectItem as me, PromptInputButton as pe, PromptInputSubmit as ue } from "../../../ai/prompt-input.js";
7
+ import { Reasoning as ge, ReasoningTrigger as Se, ReasoningContent as fe } from "../../../ai/reasoning.js";
8
+ import { Sources as Ce, SourcesTrigger as be, SourcesContent as ye, Source as Ie } from "../../../ai/sources.js";
9
+ import { StreamStatus as ve } from "../../../ai/stream-status.js";
10
+ import { Suggestions as xe, Suggestion as Me } from "../../../ai/suggestion.js";
11
11
  import { cn as Pe } from "../../../lib/utils.js";
12
12
  const Te = [
13
13
  { id: "claude-sonnet-4-6", name: "Claude Sonnet" },
@@ -0,0 +1,2 @@
1
+ export { Chat } from './Chat';
2
+ export type { ChatMessage, ChatModel, ChatProps, ChatSource } from './Chat';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("../../ui/banner.cjs"),o=require("../../ui/button.cjs"),i=require("../../ui/dialog.cjs"),g=require("../../ui/spinner.cjs");function D({title:l,description:n,variant:r="default",confirmLabel:a="Confirm",cancelLabel:c="Cancel",onConfirm:d,onCancel:u,open:j,onOpenChange:h,trigger:s,loading:t=!1}){return e.jsxs(i.Dialog,{open:j,onOpenChange:h,children:[s&&e.jsx(i.DialogTrigger,{asChild:!0,children:s}),e.jsxs(i.DialogContent,{children:[e.jsxs(i.DialogHeader,{children:[e.jsx(i.DialogTitle,{children:l}),n&&e.jsx(i.DialogDescription,{children:n})]}),r==="destructive"&&e.jsx(x.Banner,{variant:"destructive",description:"This action cannot be undone.",className:"rounded-md"}),e.jsxs(i.DialogFooter,{children:[e.jsx(i.DialogClose,{asChild:!0,children:e.jsx(o.Button,{variant:"outline",onClick:u,children:c})}),e.jsxs(o.Button,{variant:r==="destructive"?"destructive":"default",disabled:t,onClick:d,children:[t&&e.jsx(g.Spinner,{size:"sm",className:"mr-2"}),a]})]})]})]})}exports.ConfirmDialog=D;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("../../../ui/banner.cjs"),o=require("../../../ui/button.cjs"),i=require("../../../ui/dialog.cjs"),g=require("../../../ui/spinner.cjs");function D({title:l,description:n,variant:r="default",confirmLabel:a="Confirm",cancelLabel:c="Cancel",onConfirm:u,onCancel:d,open:j,onOpenChange:h,trigger:s,loading:t=!1}){return e.jsxs(i.Dialog,{open:j,onOpenChange:h,children:[s&&e.jsx(i.DialogTrigger,{asChild:!0,children:s}),e.jsxs(i.DialogContent,{children:[e.jsxs(i.DialogHeader,{children:[e.jsx(i.DialogTitle,{children:l}),n&&e.jsx(i.DialogDescription,{children:n})]}),r==="destructive"&&e.jsx(x.Banner,{variant:"destructive",description:"This action cannot be undone.",className:"rounded-md"}),e.jsxs(i.DialogFooter,{children:[e.jsx(i.DialogClose,{asChild:!0,children:e.jsx(o.Button,{variant:"outline",onClick:d,children:c})}),e.jsxs(o.Button,{variant:r==="destructive"?"destructive":"default",disabled:t,onClick:u,children:[t&&e.jsx(g.Spinner,{size:"sm",className:"mr-2"}),a]})]})]})]})}exports.ConfirmDialog=D;
2
2
  //# sourceMappingURL=ConfirmDialog.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialog.cjs","sources":["../../../../src/components/composed/ConfirmDialog/ConfirmDialog.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Banner } from \"@/components/ui/banner\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Spinner } from \"@/components/ui/spinner\"\n\ninterface ConfirmDialogBaseProps {\n title: string\n description?: string\n variant?: \"default\" | \"destructive\"\n confirmLabel?: string\n cancelLabel?: string\n onConfirm?: () => void\n onCancel?: () => void\n trigger?: React.ReactElement\n loading?: boolean\n}\n\ntype ConfirmDialogControlledProps = ConfirmDialogBaseProps & {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\ntype ConfirmDialogUncontrolledProps = ConfirmDialogBaseProps & {\n open?: never\n onOpenChange?: never\n}\n\nexport type ConfirmDialogProps =\n | ConfirmDialogControlledProps\n | ConfirmDialogUncontrolledProps\n\nexport function ConfirmDialog({\n title,\n description,\n variant = \"default\",\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n onCancel,\n open,\n onOpenChange,\n trigger,\n loading = false,\n}: ConfirmDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && (\n <DialogDescription>{description}</DialogDescription>\n )}\n </DialogHeader>\n {variant === \"destructive\" && (\n <Banner\n variant=\"destructive\"\n description=\"This action cannot be undone.\"\n className=\"rounded-md\"\n />\n )}\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n </DialogClose>\n <Button\n variant={variant === \"destructive\" ? \"destructive\" : \"default\"}\n disabled={loading}\n onClick={onConfirm}\n >\n {loading && <Spinner size=\"sm\" className=\"mr-2\" />}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n"],"names":["ConfirmDialog","title","description","variant","confirmLabel","cancelLabel","onConfirm","onCancel","open","onOpenChange","trigger","loading","jsxs","Dialog","jsx","DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","Banner","DialogFooter","DialogClose","Button","Spinner"],"mappings":"0PA0CO,SAASA,EAAc,CAC5B,MAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,UACV,aAAAC,EAAe,UACf,YAAAC,EAAc,SACd,UAAAC,EACA,SAAAC,EACA,KAAAC,EACA,aAAAC,EACA,QAAAC,EACA,QAAAC,EAAU,EACZ,EAAuB,CACrB,OACEC,EAAAA,KAACC,EAAAA,OAAA,CAAO,KAAAL,EAAY,aAAAC,EACjB,SAAA,CAAAC,GAAWI,EAAAA,IAACC,gBAAA,CAAc,QAAO,GAAE,SAAAL,EAAQ,SAC3CM,EAAAA,cAAA,CACC,SAAA,CAAAJ,OAACK,EAAAA,aAAA,CACC,SAAA,CAAAH,EAAAA,IAACI,EAAAA,aAAa,SAAAjB,CAAA,CAAM,EACnBC,GACCY,EAAAA,IAACK,EAAAA,kBAAA,CAAmB,SAAAjB,CAAA,CAAY,CAAA,EAEpC,EACCC,IAAY,eACXW,EAAAA,IAACM,EAAAA,OAAA,CACC,QAAQ,cACR,YAAY,gCACZ,UAAU,YAAA,CAAA,SAGbC,EAAAA,aAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,YAAA,CAAY,QAAO,GAClB,SAAAR,EAAAA,IAACS,EAAAA,OAAA,CAAO,QAAQ,UAAU,QAAShB,EAChC,SAAAF,CAAA,CACH,EACF,EACAO,EAAAA,KAACW,EAAAA,OAAA,CACC,QAASpB,IAAY,cAAgB,cAAgB,UACrD,SAAUQ,EACV,QAASL,EAER,SAAA,CAAAK,GAAWG,EAAAA,IAACU,UAAA,CAAQ,KAAK,KAAK,UAAU,OAAO,EAC/CpB,CAAA,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"ConfirmDialog.cjs","sources":["../../../../src/components/composed/ConfirmDialog/ConfirmDialog.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Banner } from \"@/components/ui/banner\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Spinner } from \"@/components/ui/spinner\"\n\ninterface ConfirmDialogBaseProps {\n title: string\n description?: string\n variant?: \"default\" | \"destructive\"\n confirmLabel?: string\n cancelLabel?: string\n onConfirm?: () => void\n onCancel?: () => void\n trigger?: React.ReactElement\n loading?: boolean\n}\n\ntype ConfirmDialogControlledProps = ConfirmDialogBaseProps & {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\ntype ConfirmDialogUncontrolledProps = ConfirmDialogBaseProps & {\n open?: never\n onOpenChange?: never\n}\n\nexport type ConfirmDialogProps =\n | ConfirmDialogControlledProps\n | ConfirmDialogUncontrolledProps\n\nexport function ConfirmDialog({\n title,\n description,\n variant = \"default\",\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n onCancel,\n open,\n onOpenChange,\n trigger,\n loading = false,\n}: ConfirmDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && (\n <DialogDescription>{description}</DialogDescription>\n )}\n </DialogHeader>\n {variant === \"destructive\" && (\n <Banner\n variant=\"destructive\"\n description=\"This action cannot be undone.\"\n className=\"rounded-md\"\n />\n )}\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n </DialogClose>\n <Button\n variant={variant === \"destructive\" ? \"destructive\" : \"default\"}\n disabled={loading}\n onClick={onConfirm}\n >\n {loading && <Spinner size=\"sm\" className=\"mr-2\" />}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n"],"names":["ConfirmDialog","title","description","variant","confirmLabel","cancelLabel","onConfirm","onCancel","open","onOpenChange","trigger","loading","jsxs","Dialog","jsx","DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","Banner","DialogFooter","DialogClose","Button","Spinner"],"mappings":"sQA0CO,SAASA,EAAc,CAC5B,MAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,UACV,aAAAC,EAAe,UACf,YAAAC,EAAc,SACd,UAAAC,EACA,SAAAC,EACA,KAAAC,EACA,aAAAC,EACA,QAAAC,EACA,QAAAC,EAAU,EACZ,EAAuB,CACrB,OACEC,EAAAA,KAACC,EAAAA,OAAA,CAAO,KAAAL,EAAY,aAAAC,EACjB,SAAA,CAAAC,GAAWI,EAAAA,IAACC,gBAAA,CAAc,QAAO,GAAE,SAAAL,EAAQ,SAC3CM,EAAAA,cAAA,CACC,SAAA,CAAAJ,OAACK,EAAAA,aAAA,CACC,SAAA,CAAAH,EAAAA,IAACI,EAAAA,aAAa,SAAAjB,CAAA,CAAM,EACnBC,GACCY,EAAAA,IAACK,EAAAA,kBAAA,CAAmB,SAAAjB,CAAA,CAAY,CAAA,EAEpC,EACCC,IAAY,eACXW,EAAAA,IAACM,EAAAA,OAAA,CACC,QAAQ,cACR,YAAY,gCACZ,UAAU,YAAA,CAAA,SAGbC,EAAAA,aAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,YAAA,CAAY,QAAO,GAClB,SAAAR,EAAAA,IAACS,EAAAA,OAAA,CAAO,QAAQ,UAAU,QAAShB,EAChC,SAAAF,CAAA,CACH,EACF,EACAO,EAAAA,KAACW,EAAAA,OAAA,CACC,QAASpB,IAAY,cAAgB,cAAgB,UACrD,SAAUQ,EACV,QAASL,EAER,SAAA,CAAAK,GAAWG,EAAAA,IAACU,UAAA,CAAQ,KAAK,KAAK,UAAU,OAAO,EAC/CpB,CAAA,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -0,0 +1,23 @@
1
+ import * as React from "react";
2
+ interface ConfirmDialogBaseProps {
3
+ title: string;
4
+ description?: string;
5
+ variant?: "default" | "destructive";
6
+ confirmLabel?: string;
7
+ cancelLabel?: string;
8
+ onConfirm?: () => void;
9
+ onCancel?: () => void;
10
+ trigger?: React.ReactElement;
11
+ loading?: boolean;
12
+ }
13
+ type ConfirmDialogControlledProps = ConfirmDialogBaseProps & {
14
+ open: boolean;
15
+ onOpenChange: (open: boolean) => void;
16
+ };
17
+ type ConfirmDialogUncontrolledProps = ConfirmDialogBaseProps & {
18
+ open?: never;
19
+ onOpenChange?: never;
20
+ };
21
+ export type ConfirmDialogProps = ConfirmDialogControlledProps | ConfirmDialogUncontrolledProps;
22
+ export declare function ConfirmDialog({ title, description, variant, confirmLabel, cancelLabel, onConfirm, onCancel, open, onOpenChange, trigger, loading, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
@@ -1,8 +1,8 @@
1
1
  import { jsxs as e, jsx as i } from "react/jsx-runtime";
2
- import { Banner as f } from "../../ui/banner.js";
3
- import { Button as t } from "../../ui/button.js";
4
- import { Dialog as D, DialogTrigger as C, DialogContent as g, DialogHeader as p, DialogTitle as v, DialogDescription as x, DialogFooter as T, DialogClose as b } from "../../ui/dialog.js";
5
- import { Spinner as j } from "../../ui/spinner.js";
2
+ import { Banner as f } from "../../../ui/banner.js";
3
+ import { Button as t } from "../../../ui/button.js";
4
+ import { Dialog as D, DialogTrigger as C, DialogContent as g, DialogHeader as p, DialogTitle as v, DialogDescription as x, DialogFooter as T, DialogClose as b } from "../../../ui/dialog.js";
5
+ import { Spinner as j } from "../../../ui/spinner.js";
6
6
  function H({
7
7
  title: a,
8
8
  description: r,
@@ -0,0 +1 @@
1
+ export * from './ConfirmDialog';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("lucide-react"),u=require("../../ui/button.cjs"),o=require("../../ui/tooltip.cjs"),h=require("../../../lib/utils.cjs"),d={left:t.ChevronLeft,right:t.ChevronRight,up:t.ChevronUp,down:t.ChevronDown};function p({direction:n,label:r,tooltipSide:i="right",className:l,...s}){const a=d[n],c=h.cn("w-5 h-5 shrink-0 text-muted-foreground hover:text-primary hover:border-primary",l);return e.jsx(o.TooltipProvider,{children:e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx(u.Button,{"data-slot":"data-app-shell-collapse-button",variant:"outline",size:"icon",...s,className:c,"aria-label":r,children:e.jsx(a,{className:"w-3.5 h-3.5"})})}),e.jsx(o.TooltipContent,{side:i,children:r})]})})}exports.ShellCollapseButton=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("lucide-react"),c=require("../../../ui/button.cjs"),o=require("../../../ui/tooltip.cjs"),h=require("../../../lib/utils.cjs"),d={left:t.ChevronLeft,right:t.ChevronRight,up:t.ChevronUp,down:t.ChevronDown};function p({direction:i,label:r,tooltipSide:n="right",className:l,...s}){const u=d[i],a=h.cn("w-5 h-5 shrink-0 text-muted-foreground hover:text-primary hover:border-primary",l);return e.jsx(o.TooltipProvider,{children:e.jsxs(o.Tooltip,{children:[e.jsx(o.TooltipTrigger,{asChild:!0,children:e.jsx(c.Button,{"data-slot":"data-app-shell-collapse-button",variant:"outline",size:"icon",...s,className:a,"aria-label":r,children:e.jsx(u,{className:"w-3.5 h-3.5"})})}),e.jsx(o.TooltipContent,{side:n,children:r})]})})}exports.ShellCollapseButton=p;
2
2
  //# sourceMappingURL=CollapseButton.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollapseButton.cjs","sources":["../../../../src/components/composed/DataAppShell/CollapseButton.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { cn } from \"@/lib/utils\";\n\nconst CHEVRONS = {\n left: ChevronLeft,\n right: ChevronRight,\n up: ChevronUp,\n down: ChevronDown,\n} as const;\n\nexport interface ShellCollapseButtonProps extends Omit<React.ComponentProps<typeof Button>, \"children\"> {\n /** Chevron direction the button points at. */\n direction: keyof typeof CHEVRONS;\n /** Accessible name + tooltip text (e.g. \"Collapse navigation\"). */\n label: string;\n /** Tooltip side. Defaults to `right` (rail/sidebar placements). */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\n/**\n * The shell's shared collapse/expand affordance — a small outlined square with\n * a chevron, placed in a zone's header row when expanded and at the top of the\n * collapsed rail. One component so every zone's trigger looks identical.\n */\nfunction ShellCollapseButton({\n direction,\n label,\n tooltipSide = \"right\",\n className,\n ...props\n}: ShellCollapseButtonProps) {\n const Chevron = CHEVRONS[direction];\n // cn() so consumer classes properly override the base (tailwind-merge)\n const mergedClassName = cn(\n \"w-5 h-5 shrink-0 text-muted-foreground hover:text-primary hover:border-primary\",\n className,\n );\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n data-slot=\"data-app-shell-collapse-button\"\n variant=\"outline\"\n size=\"icon\"\n {...props}\n className={mergedClassName}\n aria-label={label}\n >\n <Chevron className=\"w-3.5 h-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side={tooltipSide}>{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport { ShellCollapseButton };\n"],"names":["CHEVRONS","ChevronLeft","ChevronRight","ChevronUp","ChevronDown","ShellCollapseButton","direction","label","tooltipSide","className","props","Chevron","mergedClassName","cn","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","Button","TooltipContent"],"mappings":"sPASMA,EAAW,CACf,KAAMC,EAAAA,YACN,MAAOC,EAAAA,aACP,GAAIC,EAAAA,UACJ,KAAMC,EAAAA,WACR,EAgBA,SAASC,EAAoB,CAC3B,UAAAC,EACA,MAAAC,EACA,YAAAC,EAAc,QACd,UAAAC,EACA,GAAGC,CACL,EAA6B,CAC3B,MAAMC,EAAUX,EAASM,CAAS,EAE5BM,EAAkBC,EAAAA,GACtB,iFACAJ,CAAA,EAEF,OACEK,EAAAA,IAACC,EAAAA,gBAAA,CACC,SAAAC,EAAAA,KAACC,EAAAA,QAAA,CACC,SAAA,CAAAH,EAAAA,IAACI,EAAAA,eAAA,CAAe,QAAO,GACrB,SAAAJ,EAAAA,IAACK,EAAAA,OAAA,CACC,YAAU,iCACV,QAAQ,UACR,KAAK,OACJ,GAAGT,EACJ,UAAWE,EACX,aAAYL,EAEZ,SAAAO,EAAAA,IAACH,EAAA,CAAQ,UAAU,aAAA,CAAc,CAAA,CAAA,EAErC,EACAG,EAAAA,IAACM,EAAAA,eAAA,CAAe,KAAMZ,EAAc,SAAAD,CAAA,CAAM,CAAA,CAAA,CAC5C,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"CollapseButton.cjs","sources":["../../../../src/components/composed/DataAppShell/CollapseButton.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { cn } from \"@/lib/utils\";\n\nconst CHEVRONS = {\n left: ChevronLeft,\n right: ChevronRight,\n up: ChevronUp,\n down: ChevronDown,\n} as const;\n\nexport interface ShellCollapseButtonProps extends Omit<React.ComponentProps<typeof Button>, \"children\"> {\n /** Chevron direction the button points at. */\n direction: keyof typeof CHEVRONS;\n /** Accessible name + tooltip text (e.g. \"Collapse navigation\"). */\n label: string;\n /** Tooltip side. Defaults to `right` (rail/sidebar placements). */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\n/**\n * The shell's shared collapse/expand affordance — a small outlined square with\n * a chevron, placed in a zone's header row when expanded and at the top of the\n * collapsed rail. One component so every zone's trigger looks identical.\n */\nfunction ShellCollapseButton({\n direction,\n label,\n tooltipSide = \"right\",\n className,\n ...props\n}: ShellCollapseButtonProps) {\n const Chevron = CHEVRONS[direction];\n // cn() so consumer classes properly override the base (tailwind-merge)\n const mergedClassName = cn(\n \"w-5 h-5 shrink-0 text-muted-foreground hover:text-primary hover:border-primary\",\n className,\n );\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n data-slot=\"data-app-shell-collapse-button\"\n variant=\"outline\"\n size=\"icon\"\n {...props}\n className={mergedClassName}\n aria-label={label}\n >\n <Chevron className=\"w-3.5 h-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side={tooltipSide}>{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport { ShellCollapseButton };\n"],"names":["CHEVRONS","ChevronLeft","ChevronRight","ChevronUp","ChevronDown","ShellCollapseButton","direction","label","tooltipSide","className","props","Chevron","mergedClassName","cn","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","Button","TooltipContent"],"mappings":"4PASMA,EAAW,CACf,KAAMC,EAAAA,YACN,MAAOC,EAAAA,aACP,GAAIC,EAAAA,UACJ,KAAMC,EAAAA,WACR,EAgBA,SAASC,EAAoB,CAC3B,UAAAC,EACA,MAAAC,EACA,YAAAC,EAAc,QACd,UAAAC,EACA,GAAGC,CACL,EAA6B,CAC3B,MAAMC,EAAUX,EAASM,CAAS,EAE5BM,EAAkBC,EAAAA,GACtB,iFACAJ,CAAA,EAEF,OACEK,EAAAA,IAACC,EAAAA,gBAAA,CACC,SAAAC,EAAAA,KAACC,EAAAA,QAAA,CACC,SAAA,CAAAH,EAAAA,IAACI,EAAAA,eAAA,CAAe,QAAO,GACrB,SAAAJ,EAAAA,IAACK,EAAAA,OAAA,CACC,YAAU,iCACV,QAAQ,UACR,KAAK,OACJ,GAAGT,EACJ,UAAWE,EACX,aAAYL,EAEZ,SAAAO,EAAAA,IAACH,EAAA,CAAQ,UAAU,aAAA,CAAc,CAAA,CAAA,EAErC,EACAG,EAAAA,IAACM,EAAAA,eAAA,CAAe,KAAMZ,EAAc,SAAAD,CAAA,CAAM,CAAA,CAAA,CAC5C,CAAA,CACF,CAEJ"}
@@ -0,0 +1,23 @@
1
+ import { Button } from '../../ui/button';
2
+ import * as React from "react";
3
+ declare const CHEVRONS: {
4
+ readonly left: React.ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
5
+ readonly right: React.ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
6
+ readonly up: React.ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
7
+ readonly down: React.ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
8
+ };
9
+ export interface ShellCollapseButtonProps extends Omit<React.ComponentProps<typeof Button>, "children"> {
10
+ /** Chevron direction the button points at. */
11
+ direction: keyof typeof CHEVRONS;
12
+ /** Accessible name + tooltip text (e.g. "Collapse navigation"). */
13
+ label: string;
14
+ /** Tooltip side. Defaults to `right` (rail/sidebar placements). */
15
+ tooltipSide?: "top" | "right" | "bottom" | "left";
16
+ }
17
+ /**
18
+ * The shell's shared collapse/expand affordance — a small outlined square with
19
+ * a chevron, placed in a zone's header row when expanded and at the top of the
20
+ * collapsed rail. One component so every zone's trigger looks identical.
21
+ */
22
+ declare function ShellCollapseButton({ direction, label, tooltipSide, className, ...props }: ShellCollapseButtonProps): import("react/jsx-runtime").JSX.Element;
23
+ export { ShellCollapseButton };
@@ -1,7 +1,7 @@
1
1
  import { jsx as o, jsxs as a } from "react/jsx-runtime";
2
2
  import { ChevronDown as s, ChevronUp as p, ChevronRight as m, ChevronLeft as d } from "lucide-react";
3
- import { Button as c } from "../../ui/button.js";
4
- import { TooltipProvider as u, Tooltip as C, TooltipTrigger as f, TooltipContent as v } from "../../ui/tooltip.js";
3
+ import { Button as c } from "../../../ui/button.js";
4
+ import { TooltipProvider as u, Tooltip as C, TooltipTrigger as f, TooltipContent as v } from "../../../ui/tooltip.js";
5
5
  import { cn as g } from "../../../lib/utils.js";
6
6
  const x = {
7
7
  left: d,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),S=require("lucide-react"),re=require("react"),E=require("./CollapseButton.cjs"),y=require("./PrimaryNav.cjs"),se=require("./ShellContext.cjs"),te=require("../tdp-link.cjs"),ne=require("../TopBar/TopBar.cjs"),h=require("../../ui/breadcrumb.cjs"),I=require("../../ui/button.cjs"),f=require("../../ui/dropdown-menu.cjs"),j=require("../../ui/sheet.cjs"),T=require("../../../lib/utils.cjs");function le(r){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const s in r)if(s!=="default"){const t=Object.getOwnPropertyDescriptor(r,s);Object.defineProperty(a,s,t.get?t:{enumerable:!0,get:()=>r[s]})}}return a.default=r,Object.freeze(a)}const c=le(re);function v({appName:r,appFullName:a,appIcon:s,version:t,onAppNameClick:n,backToPlatformPath:l,onBackToPlatform:u,compact:o,menuSide:d="right"}){return e.jsxs(f.DropdownMenu,{modal:!1,children:[e.jsx(f.DropdownMenuTrigger,{asChild:!0,children:e.jsxs("button",{type:"button",className:T.cn("cursor-pointer bg-transparent border-none p-0",!o&&"flex items-center gap-3 w-full text-left"),children:[e.jsx("span",{className:T.cn("flex items-center justify-center rounded-lg bg-sidebar-accent border border-sidebar-border font-bold text-foreground shrink-0 w-8 h-8 text-[10px]"),children:s??r}),!o&&e.jsx("span",{className:"text-sm font-semibold text-foreground truncate leading-snug",children:a??r})]})}),e.jsxs(f.DropdownMenuContent,{side:d,align:"start",className:"min-w-[220px]",children:[e.jsxs(f.DropdownMenuItem,{className:"gap-3 px-3 py-2.5",onSelect:()=>n?.(),children:[e.jsx("div",{className:"w-8 h-8 rounded-lg bg-sidebar-accent border border-sidebar-border flex items-center justify-center shrink-0",children:e.jsx("span",{className:"text-[10px] font-bold text-foreground",children:s??r})}),e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground truncate",children:a??r}),t&&e.jsx("span",{className:"text-[10px] text-muted-foreground/70 font-mono leading-none mt-0.5",children:t})]})]}),e.jsx(f.DropdownMenuSeparator,{}),e.jsx(f.DropdownMenuItem,{className:"gap-2.5 p-0",asChild:!0,children:l?e.jsxs(te.TDPLink,{path:l,navigationOptions:{newTab:!1},className:"flex items-center gap-2.5 w-full px-2 py-1.5 !no-underline hover:!no-underline",children:[e.jsx(S.ArrowLeft,{className:"w-4 h-4 text-muted-foreground"}),"Back to TDP Platform"]}):e.jsxs("button",{type:"button",className:"flex items-center gap-2.5 w-full px-2 py-1.5 bg-transparent border-none cursor-pointer",onClick:u,children:[e.jsx(S.ArrowLeft,{className:"w-4 h-4 text-muted-foreground"}),"Back to TDP Platform"]})})]})]})}function G({appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d,compact:m,onAfterNavClick:x}){return e.jsx(y.DataAppShellPrimaryNav,{variant:m?"rail":"sidebar","aria-label":"Application navigation",navGroups:n,onSelect:()=>x?.(),header:e.jsx(v,{appName:r,appFullName:a,appIcon:s,version:t,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,compact:m}),user:d,className:"h-full w-full"})}function ie(r){return e.jsx("div",{"data-slot":"data-app-sidebar-rail",className:"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(G,{compact:!0,...r})})}function oe({collapsed:r,onCollapsedChange:a,...s}){const{appName:t,appFullName:n,appIcon:l,version:u,onAppNameClick:o,backToPlatformPath:d,onBackToPlatform:m}=s,x={appName:t,appFullName:n,appIcon:l,version:u,onAppNameClick:o,backToPlatformPath:d,onBackToPlatform:m};return r?e.jsx("div",{"data-slot":"data-app-sidebar-rail","data-collapsed":"true",className:"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(y.DataAppShellPrimaryNav,{variant:"rail","aria-label":"Application navigation",navGroups:s.navGroups,header:e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(v,{...x,compact:!0}),e.jsx(E.ShellCollapseButton,{direction:"right",label:"Expand navigation",onClick:()=>a(!1)})]}),user:s.userMenu,className:"h-full w-full"})}):e.jsx("div",{"data-slot":"data-app-sidebar","data-collapsed":"false",className:"hidden md:flex w-[220px] flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(y.DataAppShellPrimaryNav,{variant:"sidebar","aria-label":"Application navigation",navGroups:s.navGroups,header:e.jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx(v,{...x,compact:!1})}),e.jsx(E.ShellCollapseButton,{direction:"left",label:"Collapse navigation",onClick:()=>a(!0)})]}),user:s.userMenu,className:"h-full w-full"})})}function de({items:r}){return e.jsx(h.Breadcrumb,{className:"min-w-0",children:e.jsx(h.BreadcrumbList,{className:"flex-nowrap min-w-0",children:r.map((a,s)=>{const t=s===r.length-1,n=!t&&(!!a.href||!!a.onClick),l=t?"min-w-0":"shrink-0";return e.jsxs(c.Fragment,{children:[s>0&&e.jsx(h.BreadcrumbSeparator,{className:"shrink-0",children:"/"}),e.jsx(h.BreadcrumbItem,{className:l,children:t?e.jsx(h.BreadcrumbPage,{className:"truncate",children:a.label}):n&&a.href?e.jsx(h.BreadcrumbLink,{href:a.href,className:"whitespace-nowrap",children:a.label}):n&&a.onClick?e.jsx("button",{type:"button",className:"text-sm text-primary hover:underline cursor-pointer bg-transparent border-none p-0 font-normal whitespace-nowrap",onClick:a.onClick,children:a.label}):e.jsx("span",{className:"text-sm text-muted-foreground whitespace-nowrap",children:a.label})})]},`${a.label}-${s}`)})})})}function ce({breadcrumbs:r=[],headerLeft:a,headerCenter:s,headerActions:t,mobileTrigger:n}){return e.jsx(ne.TopBar,{"data-slot":"data-app-top-nav",left:e.jsxs(e.Fragment,{children:[n&&e.jsx("div",{className:"shrink-0",children:n}),e.jsx(de,{items:r}),a!=null&&e.jsx("div",{className:"shrink-0",children:a})]}),center:s,right:t})}function ue({appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d,breadcrumbs:m=[],headerLeft:x,headerCenter:H,headerActions:F,navVariant:b="vertical",primaryNav:$="rail",sidebarPanel:_,secondaryBar:R,rightPanel:J,showNavRail:K=!0,showTopBar:Q=!0,collapsed:g,defaultCollapsed:U=!1,onCollapsedChange:w,hideNavOnCollapse:C=!1,autoCollapse:A="(max-width: 1023px)",children:W,className:X}){const[Y,O]=c.useState(!1),[Z,D]=c.useState(U),p=g??Z,P=c.useRef(p);P.current=p;const N=c.useRef(!1),B=c.useCallback(i=>{N.current=!1,g===void 0&&D(i),w?.(i)},[g,w]),M=c.useRef(i=>{});M.current=i=>{i&&!P.current?(g===void 0&&D(!0),w?.(!0),N.current=!0):!i&&N.current&&(N.current=!1,g===void 0&&D(!1),w?.(!1))},c.useEffect(()=>{if(A===!1||b!=="vertical")return;const i=window.matchMedia(A);M.current(i.matches);const z=ae=>M.current(ae.matches);return i.addEventListener("change",z),()=>i.removeEventListener("change",z)},[A,b]);const k={appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d},q=b==="vertical",L=q&&$==="sidebar",V=!K||C&&p&&!L,ee=q?"grid h-screen w-full overflow-hidden [grid-template-columns:auto_auto_minmax(0,1fr)] [grid-template-rows:auto_auto_minmax(0,1fr)] [grid-template-areas:'nav_top_top'_'nav_sub_sub'_'nav_side_body']":"grid h-screen w-full overflow-hidden [grid-template-columns:auto_minmax(0,1fr)] [grid-template-rows:auto_auto_auto_minmax(0,1fr)] [grid-template-areas:'pnav_pnav'_'top_top'_'sub_sub'_'side_body']";return e.jsx(se.DataAppShellProvider,{value:{navVariant:b,collapsed:p,setCollapsed:B,hideNavOnCollapse:C},children:e.jsx(j.Sheet,{open:Y,onOpenChange:O,children:e.jsxs("div",{"data-slot":"data-app-shell","data-nav-variant":b,"data-collapsed":p||void 0,className:T.cn(ee,X),children:[!V&&(q?e.jsx("div",{className:"[grid-area:nav] min-h-0",children:L?e.jsx(oe,{collapsed:p,onCollapsedChange:B,...k}):e.jsx(ie,{...k})}):e.jsx("div",{className:"[grid-area:pnav] hidden md:block border-b border-sidebar-border bg-sidebar px-3 py-1.5",children:e.jsx(y.DataAppShellPrimaryNav,{variant:"top","aria-label":"Application navigation",navGroups:n,header:e.jsx(v,{...k,compact:!0,menuSide:"bottom"}),user:d})})),C&&p&&!_&&e.jsx(I.Button,{"data-slot":"data-app-shell-expand-fab",variant:"outline",size:"icon-sm","aria-label":"Expand navigation",className:"absolute left-2 top-2 z-50 shadow-elevation-2",onClick:()=>B(!1),children:e.jsx(S.ChevronRight,{className:"w-4 h-4"})}),e.jsxs(j.SheetContent,{side:"left",showCloseButton:!1,className:"p-0 bg-sidebar border-r border-sidebar-border data-[side=left]:w-[220px] data-[side=left]:sm:w-[220px] data-[side=left]:sm:max-w-[220px] flex flex-col",children:[e.jsx(j.SheetTitle,{className:"sr-only",children:"Navigation"}),e.jsx(j.SheetDescription,{className:"sr-only",children:"Application navigation menu"}),e.jsx(G,{compact:!1,onAfterNavClick:()=>O(!1),...k})]}),_&&e.jsx("div",{className:"[grid-area:side] min-h-0 flex",children:_}),Q&&e.jsx("div",{className:"[grid-area:top] min-w-0",children:e.jsx(ce,{breadcrumbs:m,headerLeft:x,headerCenter:H,headerActions:F,mobileTrigger:e.jsx(j.SheetTrigger,{asChild:!0,children:e.jsx(I.Button,{variant:"ghost",size:"icon","aria-label":"Open navigation menu",className:"md:hidden w-7 h-7 shrink-0 text-muted-foreground",children:e.jsx(S.Menu,{className:"w-4 h-4"})})})})}),R&&e.jsx("div",{className:"[grid-area:sub] min-w-0",children:R}),e.jsxs("div",{className:"[grid-area:body] relative flex min-h-0 min-w-0 overflow-hidden",children:[e.jsx("main",{"data-slot":"data-app-shell-content",className:"flex-1 min-w-0 overflow-auto bg-background",children:W}),J]})]})})})}exports.AppHeaderMenu=v;exports.DataAppShell=ue;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),_=require("lucide-react"),re=require("react"),E=require("./CollapseButton.cjs"),S=require("./PrimaryNav.cjs"),se=require("./ShellContext.cjs"),te=require("../../../composed/tdp-link.cjs"),ne=require("../TopBar/TopBar.cjs"),h=require("../../../ui/breadcrumb.cjs"),I=require("../../../ui/button.cjs"),f=require("../../../ui/dropdown-menu.cjs"),j=require("../../../ui/sheet.cjs"),T=require("../../../lib/utils.cjs");function le(r){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const s in r)if(s!=="default"){const t=Object.getOwnPropertyDescriptor(r,s);Object.defineProperty(a,s,t.get?t:{enumerable:!0,get:()=>r[s]})}}return a.default=r,Object.freeze(a)}const c=le(re);function v({appName:r,appFullName:a,appIcon:s,version:t,onAppNameClick:n,backToPlatformPath:l,onBackToPlatform:u,compact:o,menuSide:d="right"}){return e.jsxs(f.DropdownMenu,{modal:!1,children:[e.jsx(f.DropdownMenuTrigger,{asChild:!0,children:e.jsxs("button",{type:"button",className:T.cn("cursor-pointer bg-transparent border-none p-0",!o&&"flex items-center gap-3 w-full text-left"),children:[e.jsx("span",{className:T.cn("flex items-center justify-center rounded-lg bg-sidebar-accent border border-sidebar-border font-bold text-foreground shrink-0 w-8 h-8 text-[10px]"),children:s??r}),!o&&e.jsx("span",{className:"text-sm font-semibold text-foreground truncate leading-snug",children:a??r})]})}),e.jsxs(f.DropdownMenuContent,{side:d,align:"start",className:"min-w-[220px]",children:[e.jsxs(f.DropdownMenuItem,{className:"gap-3 px-3 py-2.5",onSelect:()=>n?.(),children:[e.jsx("div",{className:"w-8 h-8 rounded-lg bg-sidebar-accent border border-sidebar-border flex items-center justify-center shrink-0",children:e.jsx("span",{className:"text-[10px] font-bold text-foreground",children:s??r})}),e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground truncate",children:a??r}),t&&e.jsx("span",{className:"text-[10px] text-muted-foreground/70 font-mono leading-none mt-0.5",children:t})]})]}),e.jsx(f.DropdownMenuSeparator,{}),e.jsx(f.DropdownMenuItem,{className:"gap-2.5 p-0",asChild:!0,children:l?e.jsxs(te.TDPLink,{path:l,navigationOptions:{newTab:!1},className:"flex items-center gap-2.5 w-full px-2 py-1.5 !no-underline hover:!no-underline",children:[e.jsx(_.ArrowLeft,{className:"w-4 h-4 text-muted-foreground"}),"Back to TDP Platform"]}):e.jsxs("button",{type:"button",className:"flex items-center gap-2.5 w-full px-2 py-1.5 bg-transparent border-none cursor-pointer",onClick:u,children:[e.jsx(_.ArrowLeft,{className:"w-4 h-4 text-muted-foreground"}),"Back to TDP Platform"]})})]})]})}function G({appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d,compact:m,onAfterNavClick:x}){return e.jsx(S.DataAppShellPrimaryNav,{variant:m?"rail":"sidebar","aria-label":"Application navigation",navGroups:n,onSelect:()=>x?.(),header:e.jsx(v,{appName:r,appFullName:a,appIcon:s,version:t,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,compact:m}),user:d,className:"h-full w-full"})}function ie(r){return e.jsx("div",{"data-slot":"data-app-sidebar-rail",className:"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(G,{compact:!0,...r})})}function oe({collapsed:r,onCollapsedChange:a,...s}){const{appName:t,appFullName:n,appIcon:l,version:u,onAppNameClick:o,backToPlatformPath:d,onBackToPlatform:m}=s,x={appName:t,appFullName:n,appIcon:l,version:u,onAppNameClick:o,backToPlatformPath:d,onBackToPlatform:m};return r?e.jsx("div",{"data-slot":"data-app-sidebar-rail","data-collapsed":"true",className:"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(S.DataAppShellPrimaryNav,{variant:"rail","aria-label":"Application navigation",navGroups:s.navGroups,header:e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(v,{...x,compact:!0}),e.jsx(E.ShellCollapseButton,{direction:"right",label:"Expand navigation",onClick:()=>a(!1)})]}),user:s.userMenu,className:"h-full w-full"})}):e.jsx("div",{"data-slot":"data-app-sidebar","data-collapsed":"false",className:"hidden md:flex w-[220px] flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50",children:e.jsx(S.DataAppShellPrimaryNav,{variant:"sidebar","aria-label":"Application navigation",navGroups:s.navGroups,header:e.jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx(v,{...x,compact:!1})}),e.jsx(E.ShellCollapseButton,{direction:"left",label:"Collapse navigation",onClick:()=>a(!0)})]}),user:s.userMenu,className:"h-full w-full"})})}function de({items:r}){return e.jsx(h.Breadcrumb,{className:"min-w-0",children:e.jsx(h.BreadcrumbList,{className:"flex-nowrap min-w-0",children:r.map((a,s)=>{const t=s===r.length-1,n=!t&&(!!a.href||!!a.onClick),l=t?"min-w-0":"shrink-0";return e.jsxs(c.Fragment,{children:[s>0&&e.jsx(h.BreadcrumbSeparator,{className:"shrink-0",children:"/"}),e.jsx(h.BreadcrumbItem,{className:l,children:t?e.jsx(h.BreadcrumbPage,{className:"truncate",children:a.label}):n&&a.href?e.jsx(h.BreadcrumbLink,{href:a.href,className:"whitespace-nowrap",children:a.label}):n&&a.onClick?e.jsx("button",{type:"button",className:"text-sm text-primary hover:underline cursor-pointer bg-transparent border-none p-0 font-normal whitespace-nowrap",onClick:a.onClick,children:a.label}):e.jsx("span",{className:"text-sm text-muted-foreground whitespace-nowrap",children:a.label})})]},`${a.label}-${s}`)})})})}function ce({breadcrumbs:r=[],headerLeft:a,headerCenter:s,headerActions:t,mobileTrigger:n}){return e.jsx(ne.TopBar,{"data-slot":"data-app-top-nav",left:e.jsxs(e.Fragment,{children:[n&&e.jsx("div",{className:"shrink-0",children:n}),e.jsx(de,{items:r}),a!=null&&e.jsx("div",{className:"shrink-0",children:a})]}),center:s,right:t})}function ue({appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d,breadcrumbs:m=[],headerLeft:x,headerCenter:H,headerActions:F,navVariant:b="vertical",primaryNav:$="rail",sidebarPanel:y,secondaryBar:R,rightPanel:J,showNavRail:K=!0,showTopBar:Q=!0,collapsed:g,defaultCollapsed:U=!1,onCollapsedChange:w,hideNavOnCollapse:C=!1,autoCollapse:A="(max-width: 1023px)",children:W,className:X}){const[Y,O]=c.useState(!1),[Z,D]=c.useState(U),p=g??Z,P=c.useRef(p);P.current=p;const N=c.useRef(!1),B=c.useCallback(i=>{N.current=!1,g===void 0&&D(i),w?.(i)},[g,w]),M=c.useRef(i=>{});M.current=i=>{i&&!P.current?(g===void 0&&D(!0),w?.(!0),N.current=!0):!i&&N.current&&(N.current=!1,g===void 0&&D(!1),w?.(!1))},c.useEffect(()=>{if(A===!1||b!=="vertical")return;const i=window.matchMedia(A);M.current(i.matches);const z=ae=>M.current(ae.matches);return i.addEventListener("change",z),()=>i.removeEventListener("change",z)},[A,b]);const k={appName:r,appFullName:a,appIcon:s,version:t,navGroups:n,onAppNameClick:l,backToPlatformPath:u,onBackToPlatform:o,userMenu:d},q=b==="vertical",L=q&&$==="sidebar",V=!K||C&&p&&!L,ee=q?"grid h-screen w-full overflow-hidden [grid-template-columns:auto_auto_minmax(0,1fr)] [grid-template-rows:auto_auto_minmax(0,1fr)] [grid-template-areas:'nav_top_top'_'nav_sub_sub'_'nav_side_body']":"grid h-screen w-full overflow-hidden [grid-template-columns:auto_minmax(0,1fr)] [grid-template-rows:auto_auto_auto_minmax(0,1fr)] [grid-template-areas:'pnav_pnav'_'top_top'_'sub_sub'_'side_body']";return e.jsx(se.DataAppShellProvider,{value:{navVariant:b,collapsed:p,setCollapsed:B,hideNavOnCollapse:C},children:e.jsx(j.Sheet,{open:Y,onOpenChange:O,children:e.jsxs("div",{"data-slot":"data-app-shell","data-nav-variant":b,"data-collapsed":p||void 0,className:T.cn(ee,X),children:[!V&&(q?e.jsx("div",{className:"[grid-area:nav] min-h-0",children:L?e.jsx(oe,{collapsed:p,onCollapsedChange:B,...k}):e.jsx(ie,{...k})}):e.jsx("div",{className:"[grid-area:pnav] hidden md:block border-b border-sidebar-border bg-sidebar px-3 py-1.5",children:e.jsx(S.DataAppShellPrimaryNav,{variant:"top","aria-label":"Application navigation",navGroups:n,header:e.jsx(v,{...k,compact:!0,menuSide:"bottom"}),user:d})})),C&&p&&!y&&e.jsx(I.Button,{"data-slot":"data-app-shell-expand-fab",variant:"outline",size:"icon-sm","aria-label":"Expand navigation",className:"absolute left-2 top-2 z-50 shadow-elevation-2",onClick:()=>B(!1),children:e.jsx(_.ChevronRight,{className:"w-4 h-4"})}),e.jsxs(j.SheetContent,{side:"left",showCloseButton:!1,className:"p-0 bg-sidebar border-r border-sidebar-border data-[side=left]:w-[220px] data-[side=left]:sm:w-[220px] data-[side=left]:sm:max-w-[220px] flex flex-col",children:[e.jsx(j.SheetTitle,{className:"sr-only",children:"Navigation"}),e.jsx(j.SheetDescription,{className:"sr-only",children:"Application navigation menu"}),e.jsx(G,{compact:!1,onAfterNavClick:()=>O(!1),...k})]}),y&&e.jsx("div",{className:"[grid-area:side] min-h-0 flex",children:y}),Q&&e.jsx("div",{className:"[grid-area:top] min-w-0",children:e.jsx(ce,{breadcrumbs:m,headerLeft:x,headerCenter:H,headerActions:F,mobileTrigger:e.jsx(j.SheetTrigger,{asChild:!0,children:e.jsx(I.Button,{variant:"ghost",size:"icon","aria-label":"Open navigation menu",className:"md:hidden w-7 h-7 shrink-0 text-muted-foreground",children:e.jsx(_.Menu,{className:"w-4 h-4"})})})})}),R&&e.jsx("div",{className:"[grid-area:sub] min-w-0",children:R}),e.jsxs("div",{className:"[grid-area:body] relative flex min-h-0 min-w-0 overflow-hidden",children:[e.jsx("main",{"data-slot":"data-app-shell-content",className:"flex-1 min-w-0 overflow-auto bg-background",children:W}),J]})]})})})}exports.AppHeaderMenu=v;exports.DataAppShell=ue;
2
2
  //# sourceMappingURL=DataAppShell.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataAppShell.cjs","sources":["../../../../src/components/composed/DataAppShell/DataAppShell.tsx"],"sourcesContent":["import { ArrowLeft, ChevronRight, Menu } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { ShellCollapseButton } from \"./CollapseButton\";\nimport { DataAppShellPrimaryNav } from \"./PrimaryNav\";\nimport { DataAppShellProvider, type DataAppShellNavVariant } from \"./ShellContext\";\n\nimport type { NavGroup } from \"./PrimaryNav\";\n\nimport { TDPLink } from \"@/components/composed/tdp-link\";\nimport { TopBar } from \"@/components/composed/TopBar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetTitle,\n SheetTrigger,\n} from \"@/components/ui/sheet\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\n// Nav item types live with the nav engine — re-exported here for back-compat.\nexport type { NavPage, NavGroup } from \"./PrimaryNav\";\n\nexport interface BreadcrumbItemConfig {\n /** Display label */\n label: string;\n /** If provided, renders as a link */\n href?: string;\n /** Click handler (used when no href is provided) */\n onClick?: () => void;\n}\n\nexport interface DataAppShellProps {\n // -- Sidebar --\n /** Application name/abbreviation shown in the logo button */\n appName: string;\n /** Full application name shown in the app dropdown and mobile nav header */\n appFullName?: string;\n /** Custom icon element shown in the logo area */\n appIcon?: React.ReactNode;\n /** Optional version string shown below the app name/icon in the sidebar header */\n version?: string;\n /** Navigation groups; each group contains one or more pages */\n navGroups: NavGroup[];\n /** Callback when the app name / icon is clicked in the dropdown */\n onAppNameClick?: () => void;\n /** TDP path to navigate to when \"Back to TDP Platform\" is clicked (uses TDPLink — requires TdpNavigationProvider) */\n backToPlatformPath?: string;\n /** Fallback callback when \"Back to TDP Platform\" is clicked and no backToPlatformPath is set */\n onBackToPlatform?: () => void;\n /** Slot rendered at the bottom of the sidebar (e.g. user avatar + menu) */\n userMenu?: React.ReactNode;\n\n // -- Top nav --\n /** Breadcrumb items from root to current page */\n breadcrumbs?: BreadcrumbItemConfig[];\n /** Slot rendered after the breadcrumbs in the top bar's left group\n * (e.g. a collapsed horizontal workflow's step dropdown) */\n headerLeft?: React.ReactNode;\n /** Center \"context\" slot in the top bar (e.g. a version / status selector) */\n headerCenter?: React.ReactNode;\n /** Slot for right-side actions in the top nav (e.g. data count pills, next button) */\n headerActions?: React.ReactNode;\n\n // -- Shell zones --\n /** Primary nav axis — `vertical` (sidebar/rail, default) or `horizontal` (top nav row) */\n navVariant?: DataAppShellNavVariant;\n /**\n * Vertical primary nav presentation:\n * - `rail` (default) — permanent 48px icon-only rail.\n * - `sidebar` — collapsible 220px sidebar with labels; its brand-row chevron\n * collapses it to an icon rail (with an expand chevron under the logo),\n * driven by the shell's `collapsed` state.\n */\n primaryNav?: \"rail\" | \"sidebar\";\n /** Slot rendered between the primary nav and the content (e.g. a vertical `DataAppShellSecondaryNav`) */\n sidebarPanel?: React.ReactNode;\n /** Full-width zone between the top bar and the content row (e.g. a horizontal `DataAppShellSecondaryNav`) */\n secondaryBar?: React.ReactNode;\n /** Slot rendered after the content (e.g. a DataAppShellRightPanel) — its FAB anchors to the content row */\n rightPanel?: React.ReactNode;\n /** Show the primary nav zone. Set false to hide it entirely. */\n showNavRail?: boolean; // default true\n /** Show the top bar zone. Set false to hide it entirely. */\n showTopBar?: boolean; // default true\n\n // -- Collapse (vertical nav only) --\n /** Controlled collapse state — drives the secondary zone (via ShellContext)\n * and, with `hideNavOnCollapse`, the primary rail */\n collapsed?: boolean;\n /** Uncontrolled initial collapse state */\n defaultCollapsed?: boolean;\n /** Called whenever the shell collapse state flips */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Collapsing also hides the primary rail, leaving one icon rail (the secondary\n * nav) with an expand affordance — or a floating expand button if there is none. */\n hideNavOnCollapse?: boolean;\n /** Media query that auto-collapses the shell while it matches.\n * Pass `false` to disable. Defaults to `\"(max-width: 1023px)\"`. */\n autoCollapse?: string | false;\n\n /** Main content area */\n children: React.ReactNode;\n /** Additional className for the root container */\n className?: string;\n}\n\n// =============================================================================\n// Sidebar shared body (used by desktop rail + mobile Sheet)\n// =============================================================================\n\ninterface SidebarBodyProps\n extends Pick<\n DataAppShellProps,\n | \"appName\"\n | \"appFullName\"\n | \"appIcon\"\n | \"version\"\n | \"navGroups\"\n | \"onAppNameClick\"\n | \"backToPlatformPath\"\n | \"onBackToPlatform\"\n | \"userMenu\"\n > {\n /**\n * compact=true → narrow icon rail (48px): icon-only nav buttons, tooltips on hover\n * compact=false → expanded mobile sheet (220px): icon + label side-by-side rows\n */\n compact: boolean;\n /** Called after a nav page item is clicked — used by mobile sheet to close itself */\n onAfterNavClick?: () => void;\n}\n\n// =============================================================================\n// App header menu — logo/name button opening the app dropdown\n// =============================================================================\n\ninterface AppHeaderMenuProps\n extends Pick<\n DataAppShellProps,\n | \"appName\"\n | \"appFullName\"\n | \"appIcon\"\n | \"version\"\n | \"onAppNameClick\"\n | \"backToPlatformPath\"\n | \"onBackToPlatform\"\n > {\n /** compact=true → icon-only trigger (rail); compact=false → icon + name row */\n compact: boolean;\n /** Which side of the trigger the dropdown opens on — `right` beside a rail, `bottom` under a top bar */\n menuSide?: \"right\" | \"bottom\";\n}\n\nfunction AppHeaderMenu({\n appName,\n appFullName,\n appIcon,\n version,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n compact,\n menuSide = \"right\",\n}: AppHeaderMenuProps) {\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"cursor-pointer bg-transparent border-none p-0\",\n !compact && \"flex items-center gap-3 w-full text-left\"\n )}\n >\n {/* Icon */}\n <span\n className={cn(\n \"flex items-center justify-center rounded-lg bg-sidebar-accent border border-sidebar-border font-bold text-foreground shrink-0 w-8 h-8 text-[10px]\"\n )}\n >\n {appIcon ?? appName}\n </span>\n\n {/* Name (expanded only — no version here) */}\n {!compact && (\n <span className=\"text-sm font-semibold text-foreground truncate leading-snug\">\n {appFullName ?? appName}\n </span>\n )}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side={menuSide} align=\"start\" className=\"min-w-[220px]\">\n <DropdownMenuItem\n className=\"gap-3 px-3 py-2.5\"\n onSelect={() => onAppNameClick?.()}\n >\n <div className=\"w-8 h-8 rounded-lg bg-sidebar-accent border border-sidebar-border flex items-center justify-center shrink-0\">\n <span className=\"text-[10px] font-bold text-foreground\">\n {appIcon ?? appName}\n </span>\n </div>\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {appFullName ?? appName}\n </span>\n {version && (\n <span className=\"text-[10px] text-muted-foreground/70 font-mono leading-none mt-0.5\">\n {version}\n </span>\n )}\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"gap-2.5 p-0\" asChild>\n {backToPlatformPath ? (\n <TDPLink\n path={backToPlatformPath}\n navigationOptions={{ newTab: false }}\n className=\"flex items-center gap-2.5 w-full px-2 py-1.5 !no-underline hover:!no-underline\"\n >\n <ArrowLeft className=\"w-4 h-4 text-muted-foreground\" />\n Back to TDP Platform\n </TDPLink>\n ) : (\n <button\n type=\"button\"\n className=\"flex items-center gap-2.5 w-full px-2 py-1.5 bg-transparent border-none cursor-pointer\"\n onClick={onBackToPlatform}\n >\n <ArrowLeft className=\"w-4 h-4 text-muted-foreground\" />\n Back to TDP Platform\n </button>\n )}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n// =============================================================================\n// Sidebar shared body — the PrimaryNav engine with the app header + user slots\n// =============================================================================\n\nfunction SidebarBody({\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n compact,\n onAfterNavClick,\n}: SidebarBodyProps) {\n return (\n <DataAppShellPrimaryNav\n variant={compact ? \"rail\" : \"sidebar\"}\n aria-label=\"Application navigation\"\n navGroups={navGroups}\n onSelect={() => onAfterNavClick?.()}\n header={\n <AppHeaderMenu\n appName={appName}\n appFullName={appFullName}\n appIcon={appIcon}\n version={version}\n onAppNameClick={onAppNameClick}\n backToPlatformPath={backToPlatformPath}\n onBackToPlatform={onBackToPlatform}\n compact={compact}\n />\n }\n user={userMenu}\n className=\"h-full w-full\"\n />\n );\n}\n\n// =============================================================================\n// Icon rail sidebar (desktop only — hidden on mobile)\n// =============================================================================\n\nfunction IconRailSidebar(props: Omit<SidebarBodyProps, \"compact\" | \"onAfterNavClick\">) {\n return (\n <div\n data-slot=\"data-app-sidebar-rail\"\n className=\"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <SidebarBody compact {...props} />\n </div>\n );\n}\n\n// =============================================================================\n// Collapsible primary sidebar (desktop only — hidden on mobile). Expanded, it\n// shows the app name, labelled nav, and a collapse chevron in the brand row;\n// collapsed, it becomes an icon rail with the expand chevron directly under\n// the logo (mirrors the SW-2118 playground).\n// =============================================================================\n\ninterface PrimarySidebarProps extends Omit<SidebarBodyProps, \"compact\" | \"onAfterNavClick\"> {\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nfunction PrimarySidebar({ collapsed, onCollapsedChange, ...sidebarProps }: PrimarySidebarProps) {\n const { appName, appFullName, appIcon, version, onAppNameClick, backToPlatformPath, onBackToPlatform } =\n sidebarProps;\n const headerMenuProps = {\n appName,\n appFullName,\n appIcon,\n version,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n };\n\n if (collapsed) {\n return (\n <div\n data-slot=\"data-app-sidebar-rail\"\n data-collapsed=\"true\"\n className=\"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <DataAppShellPrimaryNav\n variant=\"rail\"\n aria-label=\"Application navigation\"\n navGroups={sidebarProps.navGroups}\n header={\n <div className=\"flex flex-col items-center gap-2\">\n <AppHeaderMenu {...headerMenuProps} compact />\n <ShellCollapseButton\n direction=\"right\"\n label=\"Expand navigation\"\n onClick={() => onCollapsedChange(false)}\n />\n </div>\n }\n user={sidebarProps.userMenu}\n className=\"h-full w-full\"\n />\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"data-app-sidebar\"\n data-collapsed=\"false\"\n className=\"hidden md:flex w-[220px] flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <DataAppShellPrimaryNav\n variant=\"sidebar\"\n aria-label=\"Application navigation\"\n navGroups={sidebarProps.navGroups}\n header={\n <div className=\"flex items-center gap-2 w-full min-w-0\">\n <div className=\"flex-1 min-w-0\">\n <AppHeaderMenu {...headerMenuProps} compact={false} />\n </div>\n <ShellCollapseButton\n direction=\"left\"\n label=\"Collapse navigation\"\n onClick={() => onCollapsedChange(true)}\n />\n </div>\n }\n user={sidebarProps.userMenu}\n className=\"h-full w-full\"\n />\n </div>\n );\n}\n\n// =============================================================================\n// Breadcrumb trail — rendered from the shell's breadcrumb config\n// =============================================================================\n\nfunction TopNavBreadcrumb({ items }: { items: BreadcrumbItemConfig[] }) {\n return (\n // min-w-0 lets the trail shrink inside the top bar's flex-1 left group;\n // flex-nowrap keeps it one line instead of Breadcrumb's default wrap\n // (which, combined with a squeezed left group, wrapped mid-trail and\n // pushed the rest of the top bar around — SW-2118).\n <Breadcrumb className=\"min-w-0\">\n <BreadcrumbList className=\"flex-nowrap min-w-0\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isClickable = !isLast && (!!item.href || !!item.onClick);\n // Only the current (last) crumb truncates — earlier crumbs keep\n // their natural width so the trail reads left-to-right.\n const itemClassName = isLast ? \"min-w-0\" : \"shrink-0\";\n return (\n <React.Fragment key={`${item.label}-${index}`}>\n {index > 0 && <BreadcrumbSeparator className=\"shrink-0\">/</BreadcrumbSeparator>}\n <BreadcrumbItem className={itemClassName}>\n {isLast ? (\n <BreadcrumbPage className=\"truncate\">{item.label}</BreadcrumbPage>\n ) : isClickable && item.href ? (\n <BreadcrumbLink href={item.href} className=\"whitespace-nowrap\">\n {item.label}\n </BreadcrumbLink>\n ) : isClickable && item.onClick ? (\n <button\n type=\"button\"\n className=\"text-sm text-primary hover:underline cursor-pointer bg-transparent border-none p-0 font-normal whitespace-nowrap\"\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ) : (\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {item.label}\n </span>\n )}\n </BreadcrumbItem>\n </React.Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n\n// =============================================================================\n// Top nav — maps shell props onto the reusable TopBar (left/center/right)\n// =============================================================================\n\nfunction TopNav({\n breadcrumbs = [],\n headerLeft,\n headerCenter,\n headerActions,\n mobileTrigger,\n}: {\n breadcrumbs?: BreadcrumbItemConfig[];\n headerLeft?: React.ReactNode;\n headerCenter?: React.ReactNode;\n headerActions?: React.ReactNode;\n mobileTrigger?: React.ReactNode;\n}) {\n return (\n <TopBar\n data-slot=\"data-app-top-nav\"\n left={\n <>\n {/* Mobile hamburger (hidden on md+). shrink-0 — only the\n breadcrumb trail gives up width when the left group is tight. */}\n {mobileTrigger && <div className=\"shrink-0\">{mobileTrigger}</div>}\n <TopNavBreadcrumb items={breadcrumbs} />\n {headerLeft != null && <div className=\"shrink-0\">{headerLeft}</div>}\n </>\n }\n center={headerCenter}\n right={headerActions}\n />\n );\n}\n\n// =============================================================================\n// DataAppShell\n// =============================================================================\n\nfunction DataAppShell({\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n breadcrumbs = [],\n headerLeft,\n headerCenter,\n headerActions,\n navVariant = \"vertical\",\n primaryNav = \"rail\",\n sidebarPanel,\n secondaryBar,\n rightPanel,\n showNavRail = true,\n showTopBar = true,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n hideNavOnCollapse = false,\n autoCollapse = \"(max-width: 1023px)\",\n children,\n className,\n}: DataAppShellProps) {\n const [mobileNavOpen, setMobileNavOpen] = React.useState(false);\n\n // ── Single collapse toggle (controlled/uncontrolled) ───────────────────────\n const [internalCollapsed, setInternalCollapsed] = React.useState(defaultCollapsed);\n const collapsed = collapsedProp ?? internalCollapsed;\n const collapsedRef = React.useRef(collapsed);\n collapsedRef.current = collapsed;\n // Set when the media query (not the user) collapsed the shell, so leaving\n // the breakpoint restores the expanded state without fighting manual toggles.\n const autoCollapsedRef = React.useRef(false);\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n autoCollapsedRef.current = false;\n if (collapsedProp === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [collapsedProp, onCollapsedChange],\n );\n\n // ── Responsive auto-collapse below the breakpoint ───────────────────────────\n // The media-query handler lives in a ref so the subscription survives\n // re-renders without re-running for every collapse/callback change.\n const applyAutoCollapseRef = React.useRef((matches: boolean) => void matches);\n applyAutoCollapseRef.current = (matches: boolean) => {\n if (matches && !collapsedRef.current) {\n if (collapsedProp === undefined) setInternalCollapsed(true);\n onCollapsedChange?.(true);\n autoCollapsedRef.current = true;\n } else if (!matches && autoCollapsedRef.current) {\n autoCollapsedRef.current = false;\n if (collapsedProp === undefined) setInternalCollapsed(false);\n onCollapsedChange?.(false);\n }\n };\n\n React.useEffect(() => {\n if (autoCollapse === false || navVariant !== \"vertical\") return;\n const mql = window.matchMedia(autoCollapse);\n applyAutoCollapseRef.current(mql.matches);\n const onChange = (e: MediaQueryListEvent) => applyAutoCollapseRef.current(e.matches);\n mql.addEventListener(\"change\", onChange);\n return () => mql.removeEventListener(\"change\", onChange);\n }, [autoCollapse, navVariant]);\n\n const sidebarProps = {\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n };\n\n const isVertical = navVariant === \"vertical\";\n // A collapsible sidebar renders its own collapsed rail, so it is never\n // hidden by collapse. hideNavOnCollapse only removes the permanent icon rail.\n const isCollapsibleSidebar = isVertical && primaryNav === \"sidebar\";\n const navHidden =\n !showNavRail || (hideNavOnCollapse && collapsed && !isCollapsibleSidebar);\n\n // CSS-grid template areas per navVariant — the shell knows zones, never\n // domain concepts. Zones absent from the tree simply collapse their track.\n // The secondary (side) zone starts below the top bar / secondary bar, so\n // breadcrumbs span the full width beside the primary nav.\n const gridClass = isVertical\n ? \"grid h-screen w-full overflow-hidden [grid-template-columns:auto_auto_minmax(0,1fr)] [grid-template-rows:auto_auto_minmax(0,1fr)] [grid-template-areas:'nav_top_top'_'nav_sub_sub'_'nav_side_body']\"\n : \"grid h-screen w-full overflow-hidden [grid-template-columns:auto_minmax(0,1fr)] [grid-template-rows:auto_auto_auto_minmax(0,1fr)] [grid-template-areas:'pnav_pnav'_'top_top'_'sub_sub'_'side_body']\";\n\n return (\n <DataAppShellProvider value={{ navVariant, collapsed, setCollapsed, hideNavOnCollapse }}>\n <Sheet open={mobileNavOpen} onOpenChange={setMobileNavOpen}>\n <div\n data-slot=\"data-app-shell\"\n data-nav-variant={navVariant}\n data-collapsed={collapsed || undefined}\n className={cn(gridClass, className)}\n >\n {/* Primary nav zone */}\n {!navHidden &&\n (isVertical ? (\n <div className=\"[grid-area:nav] min-h-0\">\n {isCollapsibleSidebar ? (\n <PrimarySidebar\n collapsed={collapsed}\n onCollapsedChange={setCollapsed}\n {...sidebarProps}\n />\n ) : (\n <IconRailSidebar {...sidebarProps} />\n )}\n </div>\n ) : (\n <div className=\"[grid-area:pnav] hidden md:block border-b border-sidebar-border bg-sidebar px-3 py-1.5\">\n <DataAppShellPrimaryNav\n variant=\"top\"\n aria-label=\"Application navigation\"\n navGroups={navGroups}\n header={<AppHeaderMenu {...sidebarProps} compact menuSide=\"bottom\" />}\n user={userMenu}\n />\n </div>\n ))}\n\n {/* Floating expand affordance — hideNavOnCollapse with no secondary rail */}\n {hideNavOnCollapse && collapsed && !sidebarPanel && (\n <Button\n data-slot=\"data-app-shell-expand-fab\"\n variant=\"outline\"\n size=\"icon-sm\"\n aria-label=\"Expand navigation\"\n className=\"absolute left-2 top-2 z-50 shadow-elevation-2\"\n onClick={() => setCollapsed(false)}\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n )}\n\n {/* Mobile sidebar Sheet */}\n <SheetContent\n side=\"left\"\n showCloseButton={false}\n className=\"p-0 bg-sidebar border-r border-sidebar-border data-[side=left]:w-[220px] data-[side=left]:sm:w-[220px] data-[side=left]:sm:max-w-[220px] flex flex-col\"\n >\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Application navigation menu\n </SheetDescription>\n <SidebarBody\n compact={false}\n onAfterNavClick={() => setMobileNavOpen(false)}\n {...sidebarProps}\n />\n </SheetContent>\n\n {/* Secondary (side) zone — e.g. a vertical DataAppShellSecondaryNav */}\n {sidebarPanel && <div className=\"[grid-area:side] min-h-0 flex\">{sidebarPanel}</div>}\n\n {/* Top bar zone */}\n {showTopBar && (\n <div className=\"[grid-area:top] min-w-0\">\n <TopNav\n breadcrumbs={breadcrumbs}\n headerLeft={headerLeft}\n headerCenter={headerCenter}\n headerActions={headerActions}\n mobileTrigger={\n <SheetTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Open navigation menu\"\n className=\"md:hidden w-7 h-7 shrink-0 text-muted-foreground\"\n >\n <Menu className=\"w-4 h-4\" />\n </Button>\n </SheetTrigger>\n }\n />\n </div>\n )}\n\n {/* Secondary bar zone — e.g. a horizontal DataAppShellSecondaryNav */}\n {secondaryBar && <div className=\"[grid-area:sub] min-w-0\">{secondaryBar}</div>}\n\n {/* Body zone: content + right panel. relative — anchors the right\n panel's floating FAB trigger */}\n <div className=\"[grid-area:body] relative flex min-h-0 min-w-0 overflow-hidden\">\n <main\n data-slot=\"data-app-shell-content\"\n className=\"flex-1 min-w-0 overflow-auto bg-background\"\n >\n {children}\n </main>\n\n {/* Right panel slot (e.g. DataAppShellRightPanel) */}\n {rightPanel}\n </div>\n </div>\n </Sheet>\n </DataAppShellProvider>\n );\n}\n\nexport default DataAppShell;\nexport { AppHeaderMenu, DataAppShell };\n"],"names":["AppHeaderMenu","appName","appFullName","appIcon","version","onAppNameClick","backToPlatformPath","onBackToPlatform","compact","menuSide","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","TDPLink","ArrowLeft","SidebarBody","navGroups","userMenu","onAfterNavClick","DataAppShellPrimaryNav","IconRailSidebar","props","PrimarySidebar","collapsed","onCollapsedChange","sidebarProps","headerMenuProps","ShellCollapseButton","TopNavBreadcrumb","items","Breadcrumb","BreadcrumbList","item","index","isLast","isClickable","itemClassName","React","BreadcrumbSeparator","BreadcrumbItem","BreadcrumbPage","BreadcrumbLink","TopNav","breadcrumbs","headerLeft","headerCenter","headerActions","mobileTrigger","TopBar","Fragment","DataAppShell","navVariant","primaryNav","sidebarPanel","secondaryBar","rightPanel","showNavRail","showTopBar","collapsedProp","defaultCollapsed","hideNavOnCollapse","autoCollapse","children","className","mobileNavOpen","setMobileNavOpen","internalCollapsed","setInternalCollapsed","collapsedRef","autoCollapsedRef","setCollapsed","next","applyAutoCollapseRef","matches","mql","onChange","e","isVertical","isCollapsibleSidebar","navHidden","gridClass","DataAppShellProvider","Sheet","Button","ChevronRight","SheetContent","SheetTitle","SheetDescription","SheetTrigger","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"DataAppShell.cjs","sources":["../../../../src/components/composed/DataAppShell/DataAppShell.tsx"],"sourcesContent":["import { ArrowLeft, ChevronRight, Menu } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { ShellCollapseButton } from \"./CollapseButton\";\nimport { DataAppShellPrimaryNav } from \"./PrimaryNav\";\nimport { DataAppShellProvider, type DataAppShellNavVariant } from \"./ShellContext\";\n\nimport type { NavGroup } from \"./PrimaryNav\";\n\nimport { TDPLink } from \"@/components/composed/tdp-link\";\nimport { TopBar } from \"@/components/composed/TopBar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetTitle,\n SheetTrigger,\n} from \"@/components/ui/sheet\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\n// Nav item types live with the nav engine — re-exported here for back-compat.\nexport type { NavPage, NavGroup } from \"./PrimaryNav\";\n\nexport interface BreadcrumbItemConfig {\n /** Display label */\n label: string;\n /** If provided, renders as a link */\n href?: string;\n /** Click handler (used when no href is provided) */\n onClick?: () => void;\n}\n\nexport interface DataAppShellProps {\n // -- Sidebar --\n /** Application name/abbreviation shown in the logo button */\n appName: string;\n /** Full application name shown in the app dropdown and mobile nav header */\n appFullName?: string;\n /** Custom icon element shown in the logo area */\n appIcon?: React.ReactNode;\n /** Optional version string shown below the app name/icon in the sidebar header */\n version?: string;\n /** Navigation groups; each group contains one or more pages */\n navGroups: NavGroup[];\n /** Callback when the app name / icon is clicked in the dropdown */\n onAppNameClick?: () => void;\n /** TDP path to navigate to when \"Back to TDP Platform\" is clicked (uses TDPLink — requires TdpNavigationProvider) */\n backToPlatformPath?: string;\n /** Fallback callback when \"Back to TDP Platform\" is clicked and no backToPlatformPath is set */\n onBackToPlatform?: () => void;\n /** Slot rendered at the bottom of the sidebar (e.g. user avatar + menu) */\n userMenu?: React.ReactNode;\n\n // -- Top nav --\n /** Breadcrumb items from root to current page */\n breadcrumbs?: BreadcrumbItemConfig[];\n /** Slot rendered after the breadcrumbs in the top bar's left group\n * (e.g. a collapsed horizontal workflow's step dropdown) */\n headerLeft?: React.ReactNode;\n /** Center \"context\" slot in the top bar (e.g. a version / status selector) */\n headerCenter?: React.ReactNode;\n /** Slot for right-side actions in the top nav (e.g. data count pills, next button) */\n headerActions?: React.ReactNode;\n\n // -- Shell zones --\n /** Primary nav axis — `vertical` (sidebar/rail, default) or `horizontal` (top nav row) */\n navVariant?: DataAppShellNavVariant;\n /**\n * Vertical primary nav presentation:\n * - `rail` (default) — permanent 48px icon-only rail.\n * - `sidebar` — collapsible 220px sidebar with labels; its brand-row chevron\n * collapses it to an icon rail (with an expand chevron under the logo),\n * driven by the shell's `collapsed` state.\n */\n primaryNav?: \"rail\" | \"sidebar\";\n /** Slot rendered between the primary nav and the content (e.g. a vertical `DataAppShellSecondaryNav`) */\n sidebarPanel?: React.ReactNode;\n /** Full-width zone between the top bar and the content row (e.g. a horizontal `DataAppShellSecondaryNav`) */\n secondaryBar?: React.ReactNode;\n /** Slot rendered after the content (e.g. a DataAppShellRightPanel) — its FAB anchors to the content row */\n rightPanel?: React.ReactNode;\n /** Show the primary nav zone. Set false to hide it entirely. */\n showNavRail?: boolean; // default true\n /** Show the top bar zone. Set false to hide it entirely. */\n showTopBar?: boolean; // default true\n\n // -- Collapse (vertical nav only) --\n /** Controlled collapse state — drives the secondary zone (via ShellContext)\n * and, with `hideNavOnCollapse`, the primary rail */\n collapsed?: boolean;\n /** Uncontrolled initial collapse state */\n defaultCollapsed?: boolean;\n /** Called whenever the shell collapse state flips */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Collapsing also hides the primary rail, leaving one icon rail (the secondary\n * nav) with an expand affordance — or a floating expand button if there is none. */\n hideNavOnCollapse?: boolean;\n /** Media query that auto-collapses the shell while it matches.\n * Pass `false` to disable. Defaults to `\"(max-width: 1023px)\"`. */\n autoCollapse?: string | false;\n\n /** Main content area */\n children: React.ReactNode;\n /** Additional className for the root container */\n className?: string;\n}\n\n// =============================================================================\n// Sidebar shared body (used by desktop rail + mobile Sheet)\n// =============================================================================\n\ninterface SidebarBodyProps\n extends Pick<\n DataAppShellProps,\n | \"appName\"\n | \"appFullName\"\n | \"appIcon\"\n | \"version\"\n | \"navGroups\"\n | \"onAppNameClick\"\n | \"backToPlatformPath\"\n | \"onBackToPlatform\"\n | \"userMenu\"\n > {\n /**\n * compact=true → narrow icon rail (48px): icon-only nav buttons, tooltips on hover\n * compact=false → expanded mobile sheet (220px): icon + label side-by-side rows\n */\n compact: boolean;\n /** Called after a nav page item is clicked — used by mobile sheet to close itself */\n onAfterNavClick?: () => void;\n}\n\n// =============================================================================\n// App header menu — logo/name button opening the app dropdown\n// =============================================================================\n\ninterface AppHeaderMenuProps\n extends Pick<\n DataAppShellProps,\n | \"appName\"\n | \"appFullName\"\n | \"appIcon\"\n | \"version\"\n | \"onAppNameClick\"\n | \"backToPlatformPath\"\n | \"onBackToPlatform\"\n > {\n /** compact=true → icon-only trigger (rail); compact=false → icon + name row */\n compact: boolean;\n /** Which side of the trigger the dropdown opens on — `right` beside a rail, `bottom` under a top bar */\n menuSide?: \"right\" | \"bottom\";\n}\n\nfunction AppHeaderMenu({\n appName,\n appFullName,\n appIcon,\n version,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n compact,\n menuSide = \"right\",\n}: AppHeaderMenuProps) {\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"cursor-pointer bg-transparent border-none p-0\",\n !compact && \"flex items-center gap-3 w-full text-left\"\n )}\n >\n {/* Icon */}\n <span\n className={cn(\n \"flex items-center justify-center rounded-lg bg-sidebar-accent border border-sidebar-border font-bold text-foreground shrink-0 w-8 h-8 text-[10px]\"\n )}\n >\n {appIcon ?? appName}\n </span>\n\n {/* Name (expanded only — no version here) */}\n {!compact && (\n <span className=\"text-sm font-semibold text-foreground truncate leading-snug\">\n {appFullName ?? appName}\n </span>\n )}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side={menuSide} align=\"start\" className=\"min-w-[220px]\">\n <DropdownMenuItem\n className=\"gap-3 px-3 py-2.5\"\n onSelect={() => onAppNameClick?.()}\n >\n <div className=\"w-8 h-8 rounded-lg bg-sidebar-accent border border-sidebar-border flex items-center justify-center shrink-0\">\n <span className=\"text-[10px] font-bold text-foreground\">\n {appIcon ?? appName}\n </span>\n </div>\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {appFullName ?? appName}\n </span>\n {version && (\n <span className=\"text-[10px] text-muted-foreground/70 font-mono leading-none mt-0.5\">\n {version}\n </span>\n )}\n </div>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"gap-2.5 p-0\" asChild>\n {backToPlatformPath ? (\n <TDPLink\n path={backToPlatformPath}\n navigationOptions={{ newTab: false }}\n className=\"flex items-center gap-2.5 w-full px-2 py-1.5 !no-underline hover:!no-underline\"\n >\n <ArrowLeft className=\"w-4 h-4 text-muted-foreground\" />\n Back to TDP Platform\n </TDPLink>\n ) : (\n <button\n type=\"button\"\n className=\"flex items-center gap-2.5 w-full px-2 py-1.5 bg-transparent border-none cursor-pointer\"\n onClick={onBackToPlatform}\n >\n <ArrowLeft className=\"w-4 h-4 text-muted-foreground\" />\n Back to TDP Platform\n </button>\n )}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n// =============================================================================\n// Sidebar shared body — the PrimaryNav engine with the app header + user slots\n// =============================================================================\n\nfunction SidebarBody({\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n compact,\n onAfterNavClick,\n}: SidebarBodyProps) {\n return (\n <DataAppShellPrimaryNav\n variant={compact ? \"rail\" : \"sidebar\"}\n aria-label=\"Application navigation\"\n navGroups={navGroups}\n onSelect={() => onAfterNavClick?.()}\n header={\n <AppHeaderMenu\n appName={appName}\n appFullName={appFullName}\n appIcon={appIcon}\n version={version}\n onAppNameClick={onAppNameClick}\n backToPlatformPath={backToPlatformPath}\n onBackToPlatform={onBackToPlatform}\n compact={compact}\n />\n }\n user={userMenu}\n className=\"h-full w-full\"\n />\n );\n}\n\n// =============================================================================\n// Icon rail sidebar (desktop only — hidden on mobile)\n// =============================================================================\n\nfunction IconRailSidebar(props: Omit<SidebarBodyProps, \"compact\" | \"onAfterNavClick\">) {\n return (\n <div\n data-slot=\"data-app-sidebar-rail\"\n className=\"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <SidebarBody compact {...props} />\n </div>\n );\n}\n\n// =============================================================================\n// Collapsible primary sidebar (desktop only — hidden on mobile). Expanded, it\n// shows the app name, labelled nav, and a collapse chevron in the brand row;\n// collapsed, it becomes an icon rail with the expand chevron directly under\n// the logo (mirrors the SW-2118 playground).\n// =============================================================================\n\ninterface PrimarySidebarProps extends Omit<SidebarBodyProps, \"compact\" | \"onAfterNavClick\"> {\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nfunction PrimarySidebar({ collapsed, onCollapsedChange, ...sidebarProps }: PrimarySidebarProps) {\n const { appName, appFullName, appIcon, version, onAppNameClick, backToPlatformPath, onBackToPlatform } =\n sidebarProps;\n const headerMenuProps = {\n appName,\n appFullName,\n appIcon,\n version,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n };\n\n if (collapsed) {\n return (\n <div\n data-slot=\"data-app-sidebar-rail\"\n data-collapsed=\"true\"\n className=\"hidden md:flex w-12 flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <DataAppShellPrimaryNav\n variant=\"rail\"\n aria-label=\"Application navigation\"\n navGroups={sidebarProps.navGroups}\n header={\n <div className=\"flex flex-col items-center gap-2\">\n <AppHeaderMenu {...headerMenuProps} compact />\n <ShellCollapseButton\n direction=\"right\"\n label=\"Expand navigation\"\n onClick={() => onCollapsedChange(false)}\n />\n </div>\n }\n user={sidebarProps.userMenu}\n className=\"h-full w-full\"\n />\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"data-app-sidebar\"\n data-collapsed=\"false\"\n className=\"hidden md:flex w-[220px] flex-col shrink-0 bg-sidebar border-r border-sidebar-border h-full z-50\"\n >\n <DataAppShellPrimaryNav\n variant=\"sidebar\"\n aria-label=\"Application navigation\"\n navGroups={sidebarProps.navGroups}\n header={\n <div className=\"flex items-center gap-2 w-full min-w-0\">\n <div className=\"flex-1 min-w-0\">\n <AppHeaderMenu {...headerMenuProps} compact={false} />\n </div>\n <ShellCollapseButton\n direction=\"left\"\n label=\"Collapse navigation\"\n onClick={() => onCollapsedChange(true)}\n />\n </div>\n }\n user={sidebarProps.userMenu}\n className=\"h-full w-full\"\n />\n </div>\n );\n}\n\n// =============================================================================\n// Breadcrumb trail — rendered from the shell's breadcrumb config\n// =============================================================================\n\nfunction TopNavBreadcrumb({ items }: { items: BreadcrumbItemConfig[] }) {\n return (\n // min-w-0 lets the trail shrink inside the top bar's flex-1 left group;\n // flex-nowrap keeps it one line instead of Breadcrumb's default wrap\n // (which, combined with a squeezed left group, wrapped mid-trail and\n // pushed the rest of the top bar around — SW-2118).\n <Breadcrumb className=\"min-w-0\">\n <BreadcrumbList className=\"flex-nowrap min-w-0\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isClickable = !isLast && (!!item.href || !!item.onClick);\n // Only the current (last) crumb truncates — earlier crumbs keep\n // their natural width so the trail reads left-to-right.\n const itemClassName = isLast ? \"min-w-0\" : \"shrink-0\";\n return (\n <React.Fragment key={`${item.label}-${index}`}>\n {index > 0 && <BreadcrumbSeparator className=\"shrink-0\">/</BreadcrumbSeparator>}\n <BreadcrumbItem className={itemClassName}>\n {isLast ? (\n <BreadcrumbPage className=\"truncate\">{item.label}</BreadcrumbPage>\n ) : isClickable && item.href ? (\n <BreadcrumbLink href={item.href} className=\"whitespace-nowrap\">\n {item.label}\n </BreadcrumbLink>\n ) : isClickable && item.onClick ? (\n <button\n type=\"button\"\n className=\"text-sm text-primary hover:underline cursor-pointer bg-transparent border-none p-0 font-normal whitespace-nowrap\"\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ) : (\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {item.label}\n </span>\n )}\n </BreadcrumbItem>\n </React.Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n\n// =============================================================================\n// Top nav — maps shell props onto the reusable TopBar (left/center/right)\n// =============================================================================\n\nfunction TopNav({\n breadcrumbs = [],\n headerLeft,\n headerCenter,\n headerActions,\n mobileTrigger,\n}: {\n breadcrumbs?: BreadcrumbItemConfig[];\n headerLeft?: React.ReactNode;\n headerCenter?: React.ReactNode;\n headerActions?: React.ReactNode;\n mobileTrigger?: React.ReactNode;\n}) {\n return (\n <TopBar\n data-slot=\"data-app-top-nav\"\n left={\n <>\n {/* Mobile hamburger (hidden on md+). shrink-0 — only the\n breadcrumb trail gives up width when the left group is tight. */}\n {mobileTrigger && <div className=\"shrink-0\">{mobileTrigger}</div>}\n <TopNavBreadcrumb items={breadcrumbs} />\n {headerLeft != null && <div className=\"shrink-0\">{headerLeft}</div>}\n </>\n }\n center={headerCenter}\n right={headerActions}\n />\n );\n}\n\n// =============================================================================\n// DataAppShell\n// =============================================================================\n\nfunction DataAppShell({\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n breadcrumbs = [],\n headerLeft,\n headerCenter,\n headerActions,\n navVariant = \"vertical\",\n primaryNav = \"rail\",\n sidebarPanel,\n secondaryBar,\n rightPanel,\n showNavRail = true,\n showTopBar = true,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n hideNavOnCollapse = false,\n autoCollapse = \"(max-width: 1023px)\",\n children,\n className,\n}: DataAppShellProps) {\n const [mobileNavOpen, setMobileNavOpen] = React.useState(false);\n\n // ── Single collapse toggle (controlled/uncontrolled) ───────────────────────\n const [internalCollapsed, setInternalCollapsed] = React.useState(defaultCollapsed);\n const collapsed = collapsedProp ?? internalCollapsed;\n const collapsedRef = React.useRef(collapsed);\n collapsedRef.current = collapsed;\n // Set when the media query (not the user) collapsed the shell, so leaving\n // the breakpoint restores the expanded state without fighting manual toggles.\n const autoCollapsedRef = React.useRef(false);\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n autoCollapsedRef.current = false;\n if (collapsedProp === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [collapsedProp, onCollapsedChange],\n );\n\n // ── Responsive auto-collapse below the breakpoint ───────────────────────────\n // The media-query handler lives in a ref so the subscription survives\n // re-renders without re-running for every collapse/callback change.\n const applyAutoCollapseRef = React.useRef((matches: boolean) => void matches);\n applyAutoCollapseRef.current = (matches: boolean) => {\n if (matches && !collapsedRef.current) {\n if (collapsedProp === undefined) setInternalCollapsed(true);\n onCollapsedChange?.(true);\n autoCollapsedRef.current = true;\n } else if (!matches && autoCollapsedRef.current) {\n autoCollapsedRef.current = false;\n if (collapsedProp === undefined) setInternalCollapsed(false);\n onCollapsedChange?.(false);\n }\n };\n\n React.useEffect(() => {\n if (autoCollapse === false || navVariant !== \"vertical\") return;\n const mql = window.matchMedia(autoCollapse);\n applyAutoCollapseRef.current(mql.matches);\n const onChange = (e: MediaQueryListEvent) => applyAutoCollapseRef.current(e.matches);\n mql.addEventListener(\"change\", onChange);\n return () => mql.removeEventListener(\"change\", onChange);\n }, [autoCollapse, navVariant]);\n\n const sidebarProps = {\n appName,\n appFullName,\n appIcon,\n version,\n navGroups,\n onAppNameClick,\n backToPlatformPath,\n onBackToPlatform,\n userMenu,\n };\n\n const isVertical = navVariant === \"vertical\";\n // A collapsible sidebar renders its own collapsed rail, so it is never\n // hidden by collapse. hideNavOnCollapse only removes the permanent icon rail.\n const isCollapsibleSidebar = isVertical && primaryNav === \"sidebar\";\n const navHidden =\n !showNavRail || (hideNavOnCollapse && collapsed && !isCollapsibleSidebar);\n\n // CSS-grid template areas per navVariant — the shell knows zones, never\n // domain concepts. Zones absent from the tree simply collapse their track.\n // The secondary (side) zone starts below the top bar / secondary bar, so\n // breadcrumbs span the full width beside the primary nav.\n const gridClass = isVertical\n ? \"grid h-screen w-full overflow-hidden [grid-template-columns:auto_auto_minmax(0,1fr)] [grid-template-rows:auto_auto_minmax(0,1fr)] [grid-template-areas:'nav_top_top'_'nav_sub_sub'_'nav_side_body']\"\n : \"grid h-screen w-full overflow-hidden [grid-template-columns:auto_minmax(0,1fr)] [grid-template-rows:auto_auto_auto_minmax(0,1fr)] [grid-template-areas:'pnav_pnav'_'top_top'_'sub_sub'_'side_body']\";\n\n return (\n <DataAppShellProvider value={{ navVariant, collapsed, setCollapsed, hideNavOnCollapse }}>\n <Sheet open={mobileNavOpen} onOpenChange={setMobileNavOpen}>\n <div\n data-slot=\"data-app-shell\"\n data-nav-variant={navVariant}\n data-collapsed={collapsed || undefined}\n className={cn(gridClass, className)}\n >\n {/* Primary nav zone */}\n {!navHidden &&\n (isVertical ? (\n <div className=\"[grid-area:nav] min-h-0\">\n {isCollapsibleSidebar ? (\n <PrimarySidebar\n collapsed={collapsed}\n onCollapsedChange={setCollapsed}\n {...sidebarProps}\n />\n ) : (\n <IconRailSidebar {...sidebarProps} />\n )}\n </div>\n ) : (\n <div className=\"[grid-area:pnav] hidden md:block border-b border-sidebar-border bg-sidebar px-3 py-1.5\">\n <DataAppShellPrimaryNav\n variant=\"top\"\n aria-label=\"Application navigation\"\n navGroups={navGroups}\n header={<AppHeaderMenu {...sidebarProps} compact menuSide=\"bottom\" />}\n user={userMenu}\n />\n </div>\n ))}\n\n {/* Floating expand affordance — hideNavOnCollapse with no secondary rail */}\n {hideNavOnCollapse && collapsed && !sidebarPanel && (\n <Button\n data-slot=\"data-app-shell-expand-fab\"\n variant=\"outline\"\n size=\"icon-sm\"\n aria-label=\"Expand navigation\"\n className=\"absolute left-2 top-2 z-50 shadow-elevation-2\"\n onClick={() => setCollapsed(false)}\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n )}\n\n {/* Mobile sidebar Sheet */}\n <SheetContent\n side=\"left\"\n showCloseButton={false}\n className=\"p-0 bg-sidebar border-r border-sidebar-border data-[side=left]:w-[220px] data-[side=left]:sm:w-[220px] data-[side=left]:sm:max-w-[220px] flex flex-col\"\n >\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Application navigation menu\n </SheetDescription>\n <SidebarBody\n compact={false}\n onAfterNavClick={() => setMobileNavOpen(false)}\n {...sidebarProps}\n />\n </SheetContent>\n\n {/* Secondary (side) zone — e.g. a vertical DataAppShellSecondaryNav */}\n {sidebarPanel && <div className=\"[grid-area:side] min-h-0 flex\">{sidebarPanel}</div>}\n\n {/* Top bar zone */}\n {showTopBar && (\n <div className=\"[grid-area:top] min-w-0\">\n <TopNav\n breadcrumbs={breadcrumbs}\n headerLeft={headerLeft}\n headerCenter={headerCenter}\n headerActions={headerActions}\n mobileTrigger={\n <SheetTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Open navigation menu\"\n className=\"md:hidden w-7 h-7 shrink-0 text-muted-foreground\"\n >\n <Menu className=\"w-4 h-4\" />\n </Button>\n </SheetTrigger>\n }\n />\n </div>\n )}\n\n {/* Secondary bar zone — e.g. a horizontal DataAppShellSecondaryNav */}\n {secondaryBar && <div className=\"[grid-area:sub] min-w-0\">{secondaryBar}</div>}\n\n {/* Body zone: content + right panel. relative — anchors the right\n panel's floating FAB trigger */}\n <div className=\"[grid-area:body] relative flex min-h-0 min-w-0 overflow-hidden\">\n <main\n data-slot=\"data-app-shell-content\"\n className=\"flex-1 min-w-0 overflow-auto bg-background\"\n >\n {children}\n </main>\n\n {/* Right panel slot (e.g. DataAppShellRightPanel) */}\n {rightPanel}\n </div>\n </div>\n </Sheet>\n </DataAppShellProvider>\n );\n}\n\nexport default DataAppShell;\nexport { AppHeaderMenu, DataAppShell };\n"],"names":["AppHeaderMenu","appName","appFullName","appIcon","version","onAppNameClick","backToPlatformPath","onBackToPlatform","compact","menuSide","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","TDPLink","ArrowLeft","SidebarBody","navGroups","userMenu","onAfterNavClick","DataAppShellPrimaryNav","IconRailSidebar","props","PrimarySidebar","collapsed","onCollapsedChange","sidebarProps","headerMenuProps","ShellCollapseButton","TopNavBreadcrumb","items","Breadcrumb","BreadcrumbList","item","index","isLast","isClickable","itemClassName","React","BreadcrumbSeparator","BreadcrumbItem","BreadcrumbPage","BreadcrumbLink","TopNav","breadcrumbs","headerLeft","headerCenter","headerActions","mobileTrigger","TopBar","Fragment","DataAppShell","navVariant","primaryNav","sidebarPanel","secondaryBar","rightPanel","showNavRail","showTopBar","collapsedProp","defaultCollapsed","hideNavOnCollapse","autoCollapse","children","className","mobileNavOpen","setMobileNavOpen","internalCollapsed","setInternalCollapsed","collapsedRef","autoCollapsedRef","setCollapsed","next","applyAutoCollapseRef","matches","mql","onChange","e","isVertical","isCollapsibleSidebar","navHidden","gridClass","DataAppShellProvider","Sheet","Button","ChevronRight","SheetContent","SheetTitle","SheetDescription","SheetTrigger","Menu"],"mappings":"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"}