@tetrascience-npm/tetrascience-react-ui 0.7.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -4
- package/dist/ai/attachments.cjs +2 -0
- package/dist/ai/attachments.cjs.map +1 -0
- package/dist/ai/attachments.js +224 -0
- package/dist/ai/attachments.js.map +1 -0
- package/dist/ai/chain-of-thought.cjs +2 -0
- package/dist/ai/chain-of-thought.cjs.map +1 -0
- package/dist/ai/chain-of-thought.js +145 -0
- package/dist/ai/chain-of-thought.js.map +1 -0
- package/dist/ai/confirmation.cjs +2 -0
- package/dist/ai/confirmation.cjs.map +1 -0
- package/dist/ai/confirmation.js +109 -0
- package/dist/ai/confirmation.js.map +1 -0
- package/dist/ai/context.cjs +2 -0
- package/dist/ai/context.cjs.map +1 -0
- package/dist/ai/context.js +267 -0
- package/dist/ai/context.js.map +1 -0
- package/dist/ai/conversation.cjs +4 -0
- package/dist/ai/conversation.cjs.map +1 -0
- package/dist/ai/conversation.js +108 -0
- package/dist/ai/conversation.js.map +1 -0
- package/dist/ai/inline-citation.cjs +2 -0
- package/dist/ai/inline-citation.cjs.map +1 -0
- package/dist/ai/inline-citation.js +182 -0
- package/dist/ai/inline-citation.js.map +1 -0
- package/dist/ai/message.cjs +2 -0
- package/dist/ai/message.cjs.map +1 -0
- package/dist/ai/message.js +237 -0
- package/dist/ai/message.js.map +1 -0
- package/dist/ai/model-selector.cjs +2 -0
- package/dist/ai/model-selector.cjs.map +1 -0
- package/dist/ai/model-selector.js +77 -0
- package/dist/ai/model-selector.js.map +1 -0
- package/dist/ai/prompt-input.cjs +2 -0
- package/dist/ai/prompt-input.cjs.map +1 -0
- package/dist/ai/prompt-input.js +776 -0
- package/dist/ai/prompt-input.js.map +1 -0
- package/dist/ai/queue.cjs +2 -0
- package/dist/ai/queue.cjs.map +1 -0
- package/dist/ai/queue.js +209 -0
- package/dist/ai/queue.js.map +1 -0
- package/dist/ai/reasoning.cjs +2 -0
- package/dist/ai/reasoning.cjs.map +1 -0
- package/dist/ai/reasoning.js +129 -0
- package/dist/ai/reasoning.js.map +1 -0
- package/dist/ai/shimmer.cjs +2 -0
- package/dist/ai/shimmer.cjs.map +1 -0
- package/dist/ai/shimmer.js +49 -0
- package/dist/ai/shimmer.js.map +1 -0
- package/dist/ai/sources.cjs +2 -0
- package/dist/ai/sources.cjs.map +1 -0
- package/dist/ai/sources.js +54 -0
- package/dist/ai/sources.js.map +1 -0
- package/dist/ai/speech-input.cjs +2 -0
- package/dist/ai/speech-input.cjs.map +1 -0
- package/dist/ai/speech-input.js +123 -0
- package/dist/ai/speech-input.js.map +1 -0
- package/dist/ai/stream-status.cjs +2 -0
- package/dist/ai/stream-status.cjs.map +1 -0
- package/dist/ai/stream-status.js +108 -0
- package/dist/ai/stream-status.js.map +1 -0
- package/dist/ai/suggestion.cjs +2 -0
- package/dist/ai/suggestion.cjs.map +1 -0
- package/dist/ai/suggestion.js +38 -0
- package/dist/ai/suggestion.js.map +1 -0
- package/dist/ai/task.cjs +2 -0
- package/dist/ai/task.cjs.map +1 -0
- package/dist/ai/task.js +101 -0
- package/dist/ai/task.js.map +1 -0
- package/dist/ai/tool.cjs +2 -0
- package/dist/ai/tool.cjs.map +1 -0
- package/dist/ai/tool.js +139 -0
- package/dist/ai/tool.js.map +1 -0
- package/dist/charts/AreaPlot.cjs +2 -0
- package/dist/charts/AreaPlot.cjs.map +1 -0
- package/dist/charts/AreaPlot.js +5 -0
- package/dist/charts/AreaPlot.js.map +1 -0
- package/dist/charts/BarChart.cjs +2 -0
- package/dist/charts/BarChart.cjs.map +1 -0
- package/dist/charts/BarChart.js +5 -0
- package/dist/charts/BarChart.js.map +1 -0
- package/dist/charts/BoxPlot.cjs +2 -0
- package/dist/charts/BoxPlot.cjs.map +1 -0
- package/dist/charts/BoxPlot.js +5 -0
- package/dist/charts/BoxPlot.js.map +1 -0
- package/dist/charts/ChartTooltip.cjs +2 -0
- package/dist/charts/ChartTooltip.cjs.map +1 -0
- package/dist/charts/ChartTooltip.js +8 -0
- package/dist/charts/ChartTooltip.js.map +1 -0
- package/dist/charts/Chromatogram.cjs +2 -0
- package/dist/charts/Chromatogram.cjs.map +1 -0
- package/dist/charts/Chromatogram.js +5 -0
- package/dist/charts/Chromatogram.js.map +1 -0
- package/dist/charts/Electropherogram.cjs +2 -0
- package/dist/charts/Electropherogram.cjs.map +1 -0
- package/dist/charts/Electropherogram.js +5 -0
- package/dist/charts/Electropherogram.js.map +1 -0
- package/dist/charts/Histogram.cjs +2 -0
- package/dist/charts/Histogram.cjs.map +1 -0
- package/dist/charts/Histogram.js +5 -0
- package/dist/charts/Histogram.js.map +1 -0
- package/dist/charts/LinePlot.cjs +2 -0
- package/dist/charts/LinePlot.cjs.map +1 -0
- package/dist/charts/LinePlot.js +5 -0
- package/dist/charts/LinePlot.js.map +1 -0
- package/dist/charts/PieChart.cjs +2 -0
- package/dist/charts/PieChart.cjs.map +1 -0
- package/dist/charts/PieChart.js +5 -0
- package/dist/charts/PieChart.js.map +1 -0
- package/dist/charts/PlateMap.cjs +2 -0
- package/dist/charts/PlateMap.cjs.map +1 -0
- package/dist/charts/PlateMap.js +5 -0
- package/dist/charts/PlateMap.js.map +1 -0
- package/dist/charts/ScatterPlot.cjs +2 -0
- package/dist/charts/ScatterPlot.cjs.map +1 -0
- package/dist/charts/ScatterPlot.js +5 -0
- package/dist/charts/ScatterPlot.js.map +1 -0
- package/dist/charts/ScatterPlotInteractive.cjs +2 -0
- package/dist/charts/ScatterPlotInteractive.cjs.map +1 -0
- package/dist/charts/ScatterPlotInteractive.js +14 -0
- package/dist/charts/ScatterPlotInteractive.js.map +1 -0
- package/dist/charts/StackedChromatogram.cjs +2 -0
- package/dist/charts/StackedChromatogram.cjs.map +1 -0
- package/dist/charts/StackedChromatogram.js +7 -0
- package/dist/charts/StackedChromatogram.js.map +1 -0
- package/dist/components/ai/attachments.d.ts +54 -0
- package/dist/components/ai/chain-of-thought.d.ts +56 -0
- package/dist/components/ai/confirmation.d.ts +47 -0
- package/dist/components/ai/context.d.ts +40 -0
- package/dist/components/ai/conversation.d.ts +23 -0
- package/dist/components/ai/inline-citation.d.ts +38 -0
- package/dist/components/ai/message.d.ts +37 -0
- package/dist/components/ai/model-selector.d.ts +36 -0
- package/dist/components/ai/prompt-input.d.ts +158 -0
- package/dist/components/ai/queue.d.ts +72 -0
- package/dist/components/ai/reasoning.d.ts +26 -0
- package/dist/components/ai/shimmer.d.ts +17 -0
- package/dist/components/ai/sources.d.ts +12 -0
- package/dist/components/ai/speech-input.d.ts +54 -0
- package/dist/components/ai/stream-status.d.ts +66 -0
- package/dist/components/ai/streamdown-code-plugin.cjs +2 -0
- package/dist/components/ai/streamdown-code-plugin.cjs.map +1 -0
- package/dist/components/ai/streamdown-code-plugin.d.ts +2 -0
- package/dist/components/ai/streamdown-code-plugin.js +42 -0
- package/dist/components/ai/streamdown-code-plugin.js.map +1 -0
- package/dist/components/ai/streamdown-plugins.cjs +2 -0
- package/dist/components/ai/streamdown-plugins.cjs.map +1 -0
- package/dist/components/ai/streamdown-plugins.d.ts +2 -0
- package/dist/components/ai/streamdown-plugins.js +14 -0
- package/dist/components/ai/streamdown-plugins.js.map +1 -0
- package/dist/components/ai/suggestion.d.ts +9 -0
- package/dist/components/ai/task.d.ts +16 -0
- package/dist/components/ai/tool.d.ts +33 -0
- package/dist/components/ai/use-streamdown-plugins.cjs +2 -0
- package/dist/components/ai/use-streamdown-plugins.cjs.map +1 -0
- package/dist/components/ai/use-streamdown-plugins.d.ts +8 -0
- package/dist/components/ai/use-streamdown-plugins.js +25 -0
- package/dist/components/ai/use-streamdown-plugins.js.map +1 -0
- package/dist/components/charts/AreaPlot/AreaPlot.cjs +2 -0
- package/dist/components/charts/AreaPlot/AreaPlot.cjs.map +1 -0
- package/dist/components/charts/AreaPlot/AreaPlot.d.ts +39 -0
- package/dist/components/charts/AreaPlot/AreaPlot.js +270 -0
- package/dist/components/charts/AreaPlot/AreaPlot.js.map +1 -0
- package/dist/components/charts/AreaPlot/index.d.ts +2 -0
- package/dist/components/charts/BarChart/BarChart.cjs +2 -0
- package/dist/components/charts/BarChart/BarChart.cjs.map +1 -0
- package/dist/components/charts/BarChart/BarChart.d.ts +44 -0
- package/dist/components/charts/BarChart/BarChart.js +219 -0
- package/dist/components/charts/BarChart/BarChart.js.map +1 -0
- package/dist/components/charts/BarChart/index.d.ts +2 -0
- package/dist/components/charts/BoxPlot/BoxPlot.cjs +2 -0
- package/dist/components/charts/BoxPlot/BoxPlot.cjs.map +1 -0
- package/dist/components/charts/BoxPlot/BoxPlot.d.ts +33 -0
- package/dist/components/charts/BoxPlot/BoxPlot.js +208 -0
- package/dist/components/charts/BoxPlot/BoxPlot.js.map +1 -0
- package/dist/components/charts/BoxPlot/index.d.ts +2 -0
- package/dist/components/charts/ChartTooltip/ChartTooltip.cjs +1 -1
- package/dist/components/charts/ChartTooltip/ChartTooltip.cjs.map +1 -1
- package/dist/components/charts/ChartTooltip/ChartTooltip.d.ts +71 -0
- package/dist/components/charts/ChartTooltip/ChartTooltip.js +22 -22
- package/dist/components/charts/ChartTooltip/ChartTooltip.js.map +1 -1
- package/dist/components/charts/ChartTooltip/index.d.ts +2 -0
- package/dist/components/charts/ChartTooltip/lines.d.ts +54 -0
- package/dist/components/charts/Chromatogram/Chromatogram.cjs +1 -1
- package/dist/components/charts/Chromatogram/Chromatogram.cjs.map +1 -1
- package/dist/components/charts/Chromatogram/Chromatogram.d.ts +5 -0
- package/dist/components/charts/Chromatogram/Chromatogram.js +232 -170
- package/dist/components/charts/Chromatogram/Chromatogram.js.map +1 -1
- package/dist/components/charts/Chromatogram/annotations.cjs +2 -0
- package/dist/components/charts/Chromatogram/annotations.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/annotations.d.ts +50 -0
- package/dist/components/charts/Chromatogram/annotations.js +137 -0
- package/dist/components/charts/Chromatogram/annotations.js.map +1 -0
- package/dist/components/charts/Chromatogram/boundaryMarkers.cjs +2 -0
- package/dist/components/charts/Chromatogram/boundaryMarkers.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/boundaryMarkers.d.ts +14 -0
- package/dist/components/charts/Chromatogram/boundaryMarkers.js +34 -0
- package/dist/components/charts/Chromatogram/boundaryMarkers.js.map +1 -0
- package/dist/components/charts/Chromatogram/constants.cjs +2 -0
- package/dist/components/charts/Chromatogram/constants.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/constants.d.ts +46 -0
- package/dist/components/charts/Chromatogram/constants.js +36 -0
- package/dist/components/charts/Chromatogram/constants.js.map +1 -0
- package/dist/components/charts/Chromatogram/dataProcessing.cjs +2 -0
- package/dist/components/charts/Chromatogram/dataProcessing.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/dataProcessing.d.ts +49 -0
- package/dist/components/charts/Chromatogram/dataProcessing.js +90 -0
- package/dist/components/charts/Chromatogram/dataProcessing.js.map +1 -0
- package/dist/components/charts/Chromatogram/index.d.ts +2 -0
- package/dist/components/charts/Chromatogram/peakDetection.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/peakDetection.d.ts +33 -0
- package/dist/components/charts/Chromatogram/peakDetection.js.map +1 -0
- package/dist/components/charts/Chromatogram/plotBuilder.cjs +2 -0
- package/dist/components/charts/Chromatogram/plotBuilder.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/plotBuilder.d.ts +58 -0
- package/dist/components/charts/Chromatogram/plotBuilder.js +216 -0
- package/dist/components/charts/Chromatogram/plotBuilder.js.map +1 -0
- package/dist/components/charts/Chromatogram/regionOverlays.cjs +2 -0
- package/dist/components/charts/Chromatogram/regionOverlays.cjs.map +1 -0
- package/dist/components/charts/Chromatogram/regionOverlays.d.ts +9 -0
- package/dist/components/charts/Chromatogram/regionOverlays.js +26 -0
- package/dist/components/charts/Chromatogram/regionOverlays.js.map +1 -0
- package/dist/components/charts/Chromatogram/types.d.ts +258 -0
- package/dist/components/charts/Electropherogram/Electropherogram.cjs +2 -0
- package/dist/components/charts/Electropherogram/Electropherogram.cjs.map +1 -0
- package/dist/components/charts/Electropherogram/Electropherogram.d.ts +22 -0
- package/dist/components/charts/Electropherogram/Electropherogram.js +180 -0
- package/dist/components/charts/Electropherogram/Electropherogram.js.map +1 -0
- package/dist/components/charts/Electropherogram/index.d.ts +2 -0
- package/dist/components/charts/Histogram/Histogram.cjs +1 -1
- package/dist/components/charts/Histogram/Histogram.cjs.map +1 -1
- package/dist/components/charts/Histogram/Histogram.d.ts +36 -0
- package/dist/components/charts/Histogram/Histogram.js +107 -108
- package/dist/components/charts/Histogram/Histogram.js.map +1 -1
- package/dist/components/charts/Histogram/index.d.ts +2 -0
- package/dist/components/charts/LinePlot/LinePlot.cjs +2 -0
- package/dist/components/charts/LinePlot/LinePlot.cjs.map +1 -0
- package/dist/components/charts/LinePlot/LinePlot.d.ts +45 -0
- package/dist/components/charts/LinePlot/LinePlot.js +224 -0
- package/dist/components/charts/LinePlot/LinePlot.js.map +1 -0
- package/dist/components/charts/LinePlot/index.d.ts +2 -0
- package/dist/components/charts/PieChart/PieChart.cjs +1 -1
- package/dist/components/charts/PieChart/PieChart.cjs.map +1 -1
- package/dist/components/charts/PieChart/PieChart.d.ts +20 -0
- package/dist/components/charts/PieChart/PieChart.js +62 -61
- package/dist/components/charts/PieChart/PieChart.js.map +1 -1
- package/dist/components/charts/PieChart/index.d.ts +2 -0
- package/dist/components/charts/PlateMap/PlateMap.cjs +1 -1
- package/dist/components/charts/PlateMap/PlateMap.cjs.map +1 -1
- package/dist/components/charts/PlateMap/PlateMap.d.ts +29 -0
- package/dist/components/charts/PlateMap/PlateMap.js +246 -242
- package/dist/components/charts/PlateMap/PlateMap.js.map +1 -1
- package/dist/components/charts/PlateMap/constants.d.ts +75 -0
- package/dist/components/charts/PlateMap/index.d.ts +2 -0
- package/dist/components/charts/PlateMap/types.d.ts +322 -0
- package/dist/components/charts/PlateMap/utils.d.ts +133 -0
- package/dist/components/charts/ScatterPlot/ScatterPlot.cjs +2 -0
- package/dist/components/charts/ScatterPlot/ScatterPlot.cjs.map +1 -0
- package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +43 -0
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +252 -0
- package/dist/components/charts/ScatterPlot/ScatterPlot.js.map +1 -0
- package/dist/components/charts/ScatterPlot/index.d.ts +2 -0
- package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs +2 -0
- package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs.map +1 -0
- package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.d.ts +25 -0
- package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js +215 -0
- package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js.map +1 -0
- package/dist/components/charts/ScatterPlotInteractive/constants.cjs +2 -0
- package/dist/components/charts/ScatterPlotInteractive/constants.cjs.map +1 -0
- package/dist/components/charts/ScatterPlotInteractive/constants.d.ts +50 -0
- package/dist/components/charts/ScatterPlotInteractive/constants.js +38 -0
- package/dist/components/charts/ScatterPlotInteractive/constants.js.map +1 -0
- package/dist/components/charts/ScatterPlotInteractive/index.d.ts +3 -0
- package/dist/components/charts/ScatterPlotInteractive/types.d.ts +226 -0
- package/dist/components/charts/ScatterPlotInteractive/utils.cjs +2 -0
- package/dist/components/charts/ScatterPlotInteractive/utils.cjs.map +1 -0
- package/dist/components/charts/ScatterPlotInteractive/utils.d.ts +72 -0
- package/dist/components/charts/ScatterPlotInteractive/utils.js +261 -0
- package/dist/components/charts/ScatterPlotInteractive/utils.js.map +1 -0
- package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs +2 -0
- package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs.map +1 -0
- package/dist/components/charts/StackedChromatogram/StackedChromatogram.d.ts +3 -0
- package/dist/components/charts/StackedChromatogram/StackedChromatogram.js +40 -0
- package/dist/components/charts/StackedChromatogram/StackedChromatogram.js.map +1 -0
- package/dist/components/charts/StackedChromatogram/index.d.ts +3 -0
- package/dist/components/charts/StackedChromatogram/transforms.cjs +2 -0
- package/dist/components/charts/StackedChromatogram/transforms.cjs.map +1 -0
- package/dist/components/charts/StackedChromatogram/transforms.d.ts +9 -0
- package/dist/components/charts/StackedChromatogram/transforms.js +31 -0
- package/dist/components/charts/StackedChromatogram/transforms.js.map +1 -0
- package/dist/components/charts/StackedChromatogram/types.d.ts +26 -0
- package/dist/components/charts/plotly-loader.cjs +2 -0
- package/dist/components/charts/plotly-loader.cjs.map +1 -0
- package/dist/components/charts/plotly-loader.d.ts +29 -0
- package/dist/components/charts/plotly-loader.js +22 -0
- package/dist/components/charts/plotly-loader.js.map +1 -0
- package/dist/components/composed/AssistantLayout/AssistantLayout.cjs +2 -0
- package/dist/components/composed/AssistantLayout/AssistantLayout.cjs.map +1 -0
- package/dist/components/composed/AssistantLayout/AssistantLayout.d.ts +63 -0
- package/dist/components/composed/AssistantLayout/AssistantLayout.js +142 -0
- package/dist/components/composed/AssistantLayout/AssistantLayout.js.map +1 -0
- package/dist/components/composed/AssistantLayout/dockLayout.cjs +2 -0
- package/dist/components/composed/AssistantLayout/dockLayout.cjs.map +1 -0
- package/dist/components/composed/AssistantLayout/dockLayout.d.ts +15 -0
- package/dist/components/composed/AssistantLayout/dockLayout.js +10 -0
- package/dist/components/composed/AssistantLayout/dockLayout.js.map +1 -0
- package/dist/components/composed/AssistantLayout/index.d.ts +3 -0
- package/dist/components/composed/Chat/Chat.cjs +1 -1
- package/dist/components/composed/Chat/Chat.cjs.map +1 -1
- package/dist/components/composed/Chat/Chat.d.ts +35 -0
- package/dist/components/composed/Chat/Chat.js +28 -28
- package/dist/components/composed/Chat/Chat.js.map +1 -1
- package/dist/components/composed/Chat/index.d.ts +2 -0
- package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs +1 -1
- package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
- package/dist/components/composed/ConfirmDialog/ConfirmDialog.d.ts +23 -0
- package/dist/components/composed/ConfirmDialog/ConfirmDialog.js +33 -29
- package/dist/components/composed/ConfirmDialog/ConfirmDialog.js.map +1 -1
- package/dist/components/composed/ConfirmDialog/index.d.ts +1 -0
- package/dist/components/composed/DataAppShell/CollapseButton.cjs +2 -0
- package/dist/components/composed/DataAppShell/CollapseButton.cjs.map +1 -0
- package/dist/components/composed/DataAppShell/CollapseButton.d.ts +23 -0
- package/dist/components/composed/DataAppShell/CollapseButton.js +42 -0
- package/dist/components/composed/DataAppShell/CollapseButton.js.map +1 -0
- package/dist/components/composed/DataAppShell/DataAppShell.cjs +1 -1
- package/dist/components/composed/DataAppShell/DataAppShell.cjs.map +1 -1
- package/dist/components/composed/DataAppShell/DataAppShell.d.ts +88 -0
- package/dist/components/composed/DataAppShell/DataAppShell.js +350 -328
- package/dist/components/composed/DataAppShell/DataAppShell.js.map +1 -1
- package/dist/components/composed/DataAppShell/PrimaryNav.cjs +2 -0
- package/dist/components/composed/DataAppShell/PrimaryNav.cjs.map +1 -0
- package/dist/components/composed/DataAppShell/PrimaryNav.d.ts +64 -0
- package/dist/components/composed/DataAppShell/PrimaryNav.js +268 -0
- package/dist/components/composed/DataAppShell/PrimaryNav.js.map +1 -0
- package/dist/components/composed/DataAppShell/RightPanel.cjs +2 -0
- package/dist/components/composed/DataAppShell/RightPanel.cjs.map +1 -0
- package/dist/components/composed/DataAppShell/RightPanel.d.ts +95 -0
- package/dist/components/composed/DataAppShell/RightPanel.js +282 -0
- package/dist/components/composed/DataAppShell/RightPanel.js.map +1 -0
- package/dist/components/composed/DataAppShell/SecondaryNav.cjs +2 -0
- package/dist/components/composed/DataAppShell/SecondaryNav.cjs.map +1 -0
- package/dist/components/composed/DataAppShell/SecondaryNav.d.ts +63 -0
- package/dist/components/composed/DataAppShell/SecondaryNav.js +364 -0
- package/dist/components/composed/DataAppShell/SecondaryNav.js.map +1 -0
- package/dist/components/composed/DataAppShell/ShellContext.cjs +2 -0
- package/dist/components/composed/DataAppShell/ShellContext.cjs.map +1 -0
- package/dist/components/composed/DataAppShell/ShellContext.d.ts +20 -0
- package/dist/components/composed/DataAppShell/ShellContext.js +23 -0
- package/dist/components/composed/DataAppShell/ShellContext.js.map +1 -0
- package/dist/components/composed/DataAppShell/index.d.ts +12 -0
- package/dist/components/composed/EmptyState/EmptyState.d.ts +12 -0
- package/dist/components/composed/EmptyState/index.d.ts +2 -0
- package/dist/components/composed/FormPatterns/FormSection.cjs +1 -1
- package/dist/components/composed/FormPatterns/FormSection.cjs.map +1 -1
- package/dist/components/composed/FormPatterns/FormSection.d.ts +7 -0
- package/dist/components/composed/FormPatterns/FormSection.js +2 -2
- package/dist/components/composed/FormPatterns/index.d.ts +1 -0
- package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs +2 -0
- package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs.map +1 -0
- package/dist/components/composed/MoleculeStructure/MoleculeStructure.d.ts +43 -0
- package/dist/components/composed/MoleculeStructure/MoleculeStructure.js +87 -0
- package/dist/components/composed/MoleculeStructure/MoleculeStructure.js.map +1 -0
- package/dist/components/composed/MoleculeStructure/index.d.ts +3 -0
- package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs +2 -0
- package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs.map +1 -0
- package/dist/components/composed/MoleculeStructure/rdkit-loader.d.ts +104 -0
- package/dist/components/composed/MoleculeStructure/rdkit-loader.js +89 -0
- package/dist/components/composed/MoleculeStructure/rdkit-loader.js.map +1 -0
- package/dist/components/composed/MoleculeStructure/use-rdkit.cjs +2 -0
- package/dist/components/composed/MoleculeStructure/use-rdkit.cjs.map +1 -0
- package/dist/components/composed/MoleculeStructure/use-rdkit.d.ts +29 -0
- package/dist/components/composed/MoleculeStructure/use-rdkit.js +19 -0
- package/dist/components/composed/MoleculeStructure/use-rdkit.js.map +1 -0
- package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.d.ts +12 -0
- package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js +21 -21
- package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.d.ts +22 -0
- package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js +34 -34
- package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapEditor.d.ts +106 -0
- package/dist/components/composed/PlateMapEditor/PlateMapEditor.js +2 -2
- package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapForm.d.ts +30 -0
- package/dist/components/composed/PlateMapEditor/PlateMapForm.js +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapGrid.d.ts +64 -0
- package/dist/components/composed/PlateMapEditor/PlateMapGrid.js +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapManifest.d.ts +29 -0
- package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.d.ts +19 -0
- package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js +11 -11
- package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlatePaintGrid.d.ts +73 -0
- package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js +1 -1
- package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/PlateZoomControl.d.ts +12 -0
- package/dist/components/composed/PlateMapEditor/PlateZoomControl.js +2 -2
- package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/TemplateIOPanel.d.ts +13 -0
- package/dist/components/composed/PlateMapEditor/TemplateIOPanel.js +4 -4
- package/dist/components/composed/PlateMapEditor/WellLegend.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/WellLegend.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/WellLegend.d.ts +21 -0
- package/dist/components/composed/PlateMapEditor/WellLegend.js +24 -12
- package/dist/components/composed/PlateMapEditor/WellLegend.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/WellManifestTable.d.ts +46 -0
- package/dist/components/composed/PlateMapEditor/WellManifestTable.js +10 -10
- package/dist/components/composed/PlateMapEditor/WellManifestTable.js.map +1 -1
- package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs +1 -1
- package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs.map +1 -1
- package/dist/components/composed/PlateMapEditor/WellMetadataForm.d.ts +17 -0
- package/dist/components/composed/PlateMapEditor/WellMetadataForm.js +7 -7
- package/dist/components/composed/PlateMapEditor/autoFill.d.ts +26 -0
- package/dist/components/composed/PlateMapEditor/csvPlateTriage.d.ts +4 -0
- package/dist/components/composed/PlateMapEditor/helpers.d.ts +2 -0
- package/dist/components/composed/PlateMapEditor/index.d.ts +31 -0
- package/dist/components/composed/PlateMapEditor/types.d.ts +137 -0
- package/dist/components/composed/PlateMapEditor/wellGrid.d.ts +12 -0
- package/dist/components/composed/ProcessFlow/ProcessFlow.d.ts +32 -0
- package/dist/components/composed/ProcessFlow/ProcessFlow.utils.d.ts +86 -0
- package/dist/components/composed/ProcessFlow/index.d.ts +1 -0
- package/dist/components/composed/RichListItem/RichListItem.cjs +1 -1
- package/dist/components/composed/RichListItem/RichListItem.cjs.map +1 -1
- package/dist/components/composed/RichListItem/RichListItem.d.ts +22 -0
- package/dist/components/composed/RichListItem/RichListItem.js +2 -2
- package/dist/components/composed/RichListItem/index.d.ts +2 -0
- package/dist/components/composed/StatCard/StatCard.cjs +1 -1
- package/dist/components/composed/StatCard/StatCard.cjs.map +1 -1
- package/dist/components/composed/StatCard/StatCard.d.ts +11 -0
- package/dist/components/composed/StatCard/StatCard.js +1 -1
- package/dist/components/composed/StatCard/index.d.ts +1 -0
- package/dist/components/composed/TdpSearch/TdpSearch.cjs +1 -1
- package/dist/components/composed/TdpSearch/TdpSearch.cjs.map +1 -1
- package/dist/components/composed/TdpSearch/TdpSearch.d.ts +21 -0
- package/dist/components/composed/TdpSearch/TdpSearch.js +14 -13
- package/dist/components/composed/TdpSearch/TdpSearch.mocks.d.ts +5 -0
- package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs.map +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultFilters.d.ts +3 -0
- package/dist/components/composed/TdpSearch/components/DefaultFilters.js +4 -4
- package/dist/components/composed/TdpSearch/components/DefaultFilters.js.map +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultResults.cjs +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultResults.cjs.map +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultResults.d.ts +3 -0
- package/dist/components/composed/TdpSearch/components/DefaultResults.js +2 -2
- package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs.map +1 -1
- package/dist/components/composed/TdpSearch/components/DefaultSearchBar.d.ts +3 -0
- package/dist/components/composed/TdpSearch/components/DefaultSearchBar.js +2 -2
- package/dist/components/composed/TdpSearch/constants.d.ts +3 -0
- package/dist/components/composed/TdpSearch/hooks/useSearch.d.ts +2 -0
- package/dist/components/composed/TdpSearch/hooks/useTdpCredentials.d.ts +14 -0
- package/dist/components/composed/TdpSearch/index.d.ts +3 -0
- package/dist/components/composed/TdpSearch/types.d.ts +128 -0
- package/dist/components/composed/TdpSearch/utils.d.ts +3 -0
- package/dist/components/composed/TopBar/TopBar.cjs +2 -0
- package/dist/components/composed/TopBar/TopBar.cjs.map +1 -0
- package/dist/components/composed/TopBar/TopBar.d.ts +25 -0
- package/dist/components/composed/TopBar/TopBar.js +56 -0
- package/dist/components/composed/TopBar/TopBar.js.map +1 -0
- package/dist/components/composed/TopBar/index.d.ts +2 -0
- package/dist/components/composed/UserMenu/UserMenu.cjs +2 -0
- package/dist/components/composed/UserMenu/UserMenu.cjs.map +1 -0
- package/dist/components/composed/UserMenu/UserMenu.d.ts +53 -0
- package/dist/components/composed/UserMenu/UserMenu.js +99 -0
- package/dist/components/composed/UserMenu/UserMenu.js.map +1 -0
- package/dist/components/composed/UserMenu/index.d.ts +2 -0
- package/dist/components/composed/tdp-link.d.ts +110 -0
- package/dist/components/composed/tdp-url.d.ts +68 -0
- package/dist/components/ui/accordion.d.ts +7 -0
- package/dist/components/ui/alert-dialog.d.ts +18 -0
- package/dist/components/ui/alert.d.ts +10 -0
- package/dist/components/ui/aspect-ratio.d.ts +3 -0
- package/dist/components/ui/avatar.d.ts +11 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/components/ui/banner.d.ts +19 -0
- package/dist/components/ui/breadcrumb.d.ts +11 -0
- package/dist/components/ui/button-group.d.ts +11 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/calendar.d.ts +10 -0
- package/dist/components/ui/card.d.ts +11 -0
- package/dist/components/ui/carousel.d.ts +28 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/code-block.d.ts +45 -0
- package/dist/components/ui/code-editor.d.ts +18 -0
- package/dist/components/ui/collapsible.d.ts +5 -0
- package/dist/components/ui/combobox.d.ts +24 -0
- package/dist/components/ui/command.d.ts +18 -0
- package/dist/components/ui/context-menu.d.ts +31 -0
- package/dist/components/ui/data-table/data-table-column-toggle.cjs +1 -1
- package/dist/components/ui/data-table/data-table-column-toggle.cjs.map +1 -1
- package/dist/components/ui/data-table/data-table-column-toggle.d.ts +6 -0
- package/dist/components/ui/data-table/data-table-column-toggle.js +71 -63
- package/dist/components/ui/data-table/data-table-column-toggle.js.map +1 -1
- package/dist/components/ui/data-table/data-table-filter.cjs +1 -1
- package/dist/components/ui/data-table/data-table-filter.cjs.map +1 -1
- package/dist/components/ui/data-table/data-table-filter.d.ts +9 -0
- package/dist/components/ui/data-table/data-table-filter.js +26 -25
- package/dist/components/ui/data-table/data-table-filter.js.map +1 -1
- package/dist/components/ui/data-table/data-table-group.cjs +1 -1
- package/dist/components/ui/data-table/data-table-group.cjs.map +1 -1
- package/dist/components/ui/data-table/data-table-group.d.ts +9 -0
- package/dist/components/ui/data-table/data-table-group.js +18 -17
- package/dist/components/ui/data-table/data-table-group.js.map +1 -1
- package/dist/components/ui/data-table/data-table-pagination.cjs +1 -1
- package/dist/components/ui/data-table/data-table-pagination.cjs.map +1 -1
- package/dist/components/ui/data-table/data-table-pagination.d.ts +7 -0
- package/dist/components/ui/data-table/data-table-pagination.js +16 -16
- package/dist/components/ui/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/ui/data-table/data-table.cjs +1 -1
- package/dist/components/ui/data-table/data-table.cjs.map +1 -1
- package/dist/components/ui/data-table/data-table.d.ts +82 -0
- package/dist/components/ui/data-table/data-table.js +191 -190
- package/dist/components/ui/data-table/data-table.js.map +1 -1
- package/dist/components/ui/data-table/index.d.ts +5 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dropdown-menu.d.ts +29 -0
- package/dist/components/ui/field.d.ts +24 -0
- package/dist/components/ui/hover-card.d.ts +6 -0
- package/dist/components/ui/input-group.d.ts +16 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/item.d.ts +23 -0
- package/dist/components/ui/kbd.d.ts +3 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/menubar.d.ts +30 -0
- package/dist/components/ui/navigation-menu.d.ts +14 -0
- package/dist/components/ui/popover.d.ts +7 -0
- package/dist/components/ui/progress.d.ts +4 -0
- package/dist/components/ui/radio-group.d.ts +5 -0
- package/dist/components/ui/resizable.d.ts +25 -0
- package/dist/components/ui/scroll-area.d.ts +5 -0
- package/dist/components/ui/select.d.ts +15 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/sheet.d.ts +14 -0
- package/dist/components/ui/sidebar.d.ts +69 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/slider.d.ts +4 -0
- package/dist/components/ui/snippet.d.ts +18 -0
- package/dist/components/ui/sonner.d.ts +3 -0
- package/dist/components/ui/spinner.d.ts +6 -0
- package/dist/components/ui/switch.d.ts +6 -0
- package/dist/components/ui/table.d.ts +22 -0
- package/dist/components/ui/tabs.d.ts +11 -0
- package/dist/components/ui/tetra-molecule-icon.d.ts +11 -0
- package/dist/components/ui/tetrascience-icon.d.ts +7 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/toggle-group.d.ts +10 -0
- package/dist/components/ui/toggle.d.ts +9 -0
- package/dist/components/ui/tooltip.d.ts +7 -0
- package/dist/composed/AssistantLayout.cjs +2 -0
- package/dist/composed/AssistantLayout.cjs.map +1 -0
- package/dist/composed/AssistantLayout.js +10 -0
- package/dist/composed/AssistantLayout.js.map +1 -0
- package/dist/composed/Chat.cjs +2 -0
- package/dist/composed/Chat.cjs.map +1 -0
- package/dist/composed/Chat.js +5 -0
- package/dist/composed/Chat.js.map +1 -0
- package/dist/composed/ConfirmDialog.cjs +2 -0
- package/dist/composed/ConfirmDialog.cjs.map +1 -0
- package/dist/composed/ConfirmDialog.js +5 -0
- package/dist/composed/ConfirmDialog.js.map +1 -0
- package/dist/composed/DataAppShell.cjs +2 -0
- package/dist/composed/DataAppShell.cjs.map +1 -0
- package/dist/composed/DataAppShell.js +22 -0
- package/dist/composed/DataAppShell.js.map +1 -0
- package/dist/composed/EmptyState.cjs +2 -0
- package/dist/composed/EmptyState.cjs.map +1 -0
- package/dist/composed/EmptyState.js +5 -0
- package/dist/composed/EmptyState.js.map +1 -0
- package/dist/composed/FormPatterns.cjs +2 -0
- package/dist/composed/FormPatterns.cjs.map +1 -0
- package/dist/composed/FormPatterns.js +5 -0
- package/dist/composed/FormPatterns.js.map +1 -0
- package/dist/composed/MoleculeStructure.cjs +2 -0
- package/dist/composed/MoleculeStructure.cjs.map +1 -0
- package/dist/composed/MoleculeStructure.js +11 -0
- package/dist/composed/MoleculeStructure.js.map +1 -0
- package/dist/composed/PlateMapEditor.cjs +2 -0
- package/dist/composed/PlateMapEditor.cjs.map +1 -0
- package/dist/composed/PlateMapEditor.js +45 -0
- package/dist/composed/PlateMapEditor.js.map +1 -0
- package/dist/composed/ProcessFlow.cjs +2 -0
- package/dist/composed/ProcessFlow.cjs.map +1 -0
- package/dist/composed/ProcessFlow.js +7 -0
- package/dist/composed/ProcessFlow.js.map +1 -0
- package/dist/composed/RichListItem.cjs +2 -0
- package/dist/composed/RichListItem.cjs.map +1 -0
- package/dist/composed/RichListItem.js +6 -0
- package/dist/composed/RichListItem.js.map +1 -0
- package/dist/composed/StatCard.cjs +2 -0
- package/dist/composed/StatCard.cjs.map +1 -0
- package/dist/composed/StatCard.js +5 -0
- package/dist/composed/StatCard.js.map +1 -0
- package/dist/composed/TdpSearch.cjs +2 -0
- package/dist/composed/TdpSearch.cjs.map +1 -0
- package/dist/composed/TdpSearch.js +8 -0
- package/dist/composed/TdpSearch.js.map +1 -0
- package/dist/composed/TopBar.cjs +2 -0
- package/dist/composed/TopBar.cjs.map +1 -0
- package/dist/composed/TopBar.js +6 -0
- package/dist/composed/TopBar.js.map +1 -0
- package/dist/composed/UserMenu.cjs +2 -0
- package/dist/composed/UserMenu.cjs.map +1 -0
- package/dist/composed/UserMenu.js +7 -0
- package/dist/composed/UserMenu.js.map +1 -0
- package/dist/composed/tdp-link.cjs +2 -0
- package/dist/composed/tdp-link.cjs.map +1 -0
- package/dist/composed/tdp-link.js +84 -0
- package/dist/composed/tdp-link.js.map +1 -0
- package/dist/composed/tdp-url.cjs.map +1 -0
- package/dist/composed/tdp-url.js.map +1 -0
- package/dist/hooks/use-code-editor-theme.d.ts +34 -0
- package/dist/hooks/use-element-size.d.ts +25 -0
- package/dist/hooks/use-is-dark.d.ts +12 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-plotly-theme.cjs +1 -1
- package/dist/hooks/use-plotly-theme.cjs.map +1 -1
- package/dist/hooks/use-plotly-theme.d.ts +49 -0
- package/dist/hooks/use-plotly-theme.js +4 -3
- package/dist/hooks/use-plotly-theme.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +102 -4404
- package/dist/index.js +698 -659
- package/dist/index.js.map +1 -1
- package/dist/index.tailwind.css +1 -1
- package/dist/jest-setup.cjs +4 -0
- package/dist/jest-setup.cjs.map +1 -0
- package/dist/jest-setup.d.ts +106 -0
- package/dist/jest-setup.js +218 -0
- package/dist/jest-setup.js.map +1 -0
- package/dist/lib/shiki.cjs +2 -0
- package/dist/lib/shiki.cjs.map +1 -0
- package/dist/lib/shiki.d.ts +32 -0
- package/dist/lib/shiki.js +72 -0
- package/dist/lib/shiki.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/server/auth/JwtTokenManager.cjs +1 -1
- package/dist/server/auth/JwtTokenManager.cjs.map +1 -1
- package/dist/server/auth/JwtTokenManager.d.ts +113 -0
- package/dist/server/auth/JwtTokenManager.js +44 -21
- package/dist/server/auth/JwtTokenManager.js.map +1 -1
- package/dist/server/auth/index.d.ts +5 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/providers/AthenaProvider.cjs +1 -1
- package/dist/server/providers/AthenaProvider.cjs.map +1 -1
- package/dist/server/providers/AthenaProvider.d.ts +75 -0
- package/dist/server/providers/DatabricksProvider.cjs +1 -1
- package/dist/server/providers/DatabricksProvider.cjs.map +1 -1
- package/dist/server/providers/DatabricksProvider.d.ts +38 -0
- package/dist/server/providers/SnowflakeProvider.cjs +1 -1
- package/dist/server/providers/SnowflakeProvider.cjs.map +1 -1
- package/dist/server/providers/SnowflakeProvider.d.ts +36 -0
- package/dist/server/providers/buildProvider.d.ts +39 -0
- package/dist/server/providers/entries/athena.d.ts +24 -0
- package/dist/server/providers/entries/databricks.d.ts +25 -0
- package/dist/server/providers/entries/snowflake.d.ts +25 -0
- package/dist/server/providers/exceptions.d.ts +36 -0
- package/dist/server/providers/getProviderConfigurations.d.ts +45 -0
- package/dist/server/providers/index.d.ts +31 -0
- package/dist/server/providers/providerDiscovery.d.ts +81 -0
- package/dist/server/providers/types.d.ts +145 -0
- package/dist/server/search/TdpSearchManager.d.ts +40 -0
- package/dist/server/search/index.d.ts +5 -0
- package/dist/server.d.ts +17 -540
- package/dist/ui/accordion.cjs +2 -0
- package/dist/ui/accordion.cjs.map +1 -0
- package/dist/ui/accordion.js +83 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/alert-dialog.cjs +2 -0
- package/dist/ui/alert-dialog.cjs.map +1 -0
- package/dist/ui/alert-dialog.js +181 -0
- package/dist/ui/alert-dialog.js.map +1 -0
- package/dist/ui/alert.cjs +2 -0
- package/dist/ui/alert.cjs.map +1 -0
- package/dist/ui/alert.js +81 -0
- package/dist/ui/alert.js.map +1 -0
- package/dist/ui/aspect-ratio.cjs.map +1 -0
- package/dist/ui/aspect-ratio.js.map +1 -0
- package/dist/ui/avatar.cjs +2 -0
- package/dist/ui/avatar.cjs.map +1 -0
- package/dist/ui/avatar.js +107 -0
- package/dist/ui/avatar.js.map +1 -0
- package/dist/ui/badge.cjs +2 -0
- package/dist/ui/badge.cjs.map +1 -0
- package/dist/ui/badge.js +47 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/banner.cjs +2 -0
- package/dist/ui/banner.cjs.map +1 -0
- package/dist/ui/banner.js +80 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/breadcrumb.cjs +2 -0
- package/dist/ui/breadcrumb.cjs.map +1 -0
- package/dist/ui/breadcrumb.js +118 -0
- package/dist/ui/breadcrumb.js.map +1 -0
- package/dist/ui/button-group.cjs +2 -0
- package/dist/ui/button-group.cjs.map +1 -0
- package/dist/ui/button-group.js +77 -0
- package/dist/ui/button-group.js.map +1 -0
- package/dist/ui/button.cjs +2 -0
- package/dist/ui/button.cjs.map +1 -0
- package/dist/ui/button.js +57 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/calendar.cjs +2 -0
- package/dist/ui/calendar.cjs.map +1 -0
- package/dist/ui/calendar.js +174 -0
- package/dist/ui/calendar.js.map +1 -0
- package/dist/ui/card.cjs +2 -0
- package/dist/ui/card.cjs.map +1 -0
- package/dist/ui/card.js +102 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/carousel.cjs +2 -0
- package/dist/ui/carousel.cjs.map +1 -0
- package/dist/ui/carousel.js +179 -0
- package/dist/ui/carousel.js.map +1 -0
- package/dist/ui/checkbox.cjs +2 -0
- package/dist/ui/checkbox.cjs.map +1 -0
- package/dist/ui/checkbox.js +35 -0
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/code-block.cjs +4 -0
- package/dist/ui/code-block.cjs.map +1 -0
- package/dist/ui/code-block.js +324 -0
- package/dist/ui/code-block.js.map +1 -0
- package/dist/ui/code-editor.cjs +2 -0
- package/dist/ui/code-editor.cjs.map +1 -0
- package/dist/ui/code-editor.js +106 -0
- package/dist/ui/code-editor.js.map +1 -0
- package/dist/ui/collapsible.cjs.map +1 -0
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/ui/combobox.cjs +2 -0
- package/dist/ui/combobox.cjs.map +1 -0
- package/dist/ui/combobox.js +285 -0
- package/dist/ui/combobox.js.map +1 -0
- package/dist/ui/command.cjs +2 -0
- package/dist/ui/command.cjs.map +1 -0
- package/dist/ui/command.js +178 -0
- package/dist/ui/command.js.map +1 -0
- package/dist/ui/context-menu.cjs +2 -0
- package/dist/ui/context-menu.cjs.map +1 -0
- package/dist/ui/context-menu.js +236 -0
- package/dist/ui/context-menu.js.map +1 -0
- package/dist/ui/data-table.cjs +2 -0
- package/dist/ui/data-table.cjs.map +1 -0
- package/dist/ui/data-table.js +16 -0
- package/dist/ui/data-table.js.map +1 -0
- package/dist/ui/dialog.cjs +2 -0
- package/dist/ui/dialog.cjs.map +1 -0
- package/dist/ui/dialog.js +165 -0
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/dropdown-menu.cjs +2 -0
- package/dist/ui/dropdown-menu.cjs.map +1 -0
- package/dist/ui/dropdown-menu.js +260 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/field.cjs +2 -0
- package/dist/ui/field.cjs.map +1 -0
- package/dist/ui/field.js +210 -0
- package/dist/ui/field.js.map +1 -0
- package/dist/ui/hover-card.cjs +2 -0
- package/dist/ui/hover-card.cjs.map +1 -0
- package/dist/ui/hover-card.js +39 -0
- package/dist/ui/hover-card.js.map +1 -0
- package/dist/ui/input-group.cjs +2 -0
- package/dist/ui/input-group.cjs.map +1 -0
- package/dist/ui/input-group.js +145 -0
- package/dist/ui/input-group.js.map +1 -0
- package/dist/ui/input.cjs +2 -0
- package/dist/ui/input.cjs.map +1 -0
- package/dist/ui/input.js +20 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/item.cjs +2 -0
- package/dist/ui/item.cjs.map +1 -0
- package/dist/ui/item.js +199 -0
- package/dist/ui/item.js.map +1 -0
- package/dist/ui/kbd.cjs +2 -0
- package/dist/ui/kbd.cjs.map +1 -0
- package/dist/ui/kbd.js +30 -0
- package/dist/ui/kbd.js.map +1 -0
- package/dist/ui/label.cjs +2 -0
- package/dist/ui/label.cjs.map +1 -0
- package/dist/ui/label.js +23 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/menubar.cjs +2 -0
- package/dist/ui/menubar.cjs.map +1 -0
- package/dist/ui/menubar.js +256 -0
- package/dist/ui/menubar.js.map +1 -0
- package/dist/ui/navigation-menu.cjs +2 -0
- package/dist/ui/navigation-menu.cjs.map +1 -0
- package/dist/ui/navigation-menu.js +164 -0
- package/dist/ui/navigation-menu.js.map +1 -0
- package/dist/ui/popover.cjs +2 -0
- package/dist/ui/popover.cjs.map +1 -0
- package/dist/ui/popover.js +45 -0
- package/dist/ui/popover.js.map +1 -0
- package/dist/ui/radio-group.cjs +2 -0
- package/dist/ui/radio-group.cjs.map +1 -0
- package/dist/ui/radio-group.js +45 -0
- package/dist/ui/radio-group.js.map +1 -0
- package/dist/ui/resizable.cjs +2 -0
- package/dist/ui/resizable.cjs.map +1 -0
- package/dist/ui/resizable.js +58 -0
- package/dist/ui/resizable.js.map +1 -0
- package/dist/ui/scroll-area.cjs +2 -0
- package/dist/ui/scroll-area.cjs.map +1 -0
- package/dist/ui/scroll-area.js +61 -0
- package/dist/ui/scroll-area.js.map +1 -0
- package/dist/ui/select.cjs +2 -0
- package/dist/ui/select.cjs.map +1 -0
- package/dist/ui/select.js +184 -0
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/separator.cjs +2 -0
- package/dist/ui/separator.cjs.map +1 -0
- package/dist/ui/separator.js +27 -0
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/sheet.cjs +2 -0
- package/dist/ui/sheet.cjs.map +1 -0
- package/dist/ui/sheet.js +137 -0
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/sidebar.cjs +2 -0
- package/dist/ui/sidebar.cjs.map +1 -0
- package/dist/ui/sidebar.js +579 -0
- package/dist/ui/sidebar.js.map +1 -0
- package/dist/ui/skeleton.cjs +2 -0
- package/dist/ui/skeleton.cjs.map +1 -0
- package/dist/ui/skeleton.js +24 -0
- package/dist/ui/skeleton.js.map +1 -0
- package/dist/ui/slider.cjs +2 -0
- package/dist/ui/slider.cjs.map +1 -0
- package/dist/ui/slider.js +61 -0
- package/dist/ui/slider.js.map +1 -0
- package/dist/ui/sonner.cjs +2 -0
- package/dist/ui/sonner.cjs.map +1 -0
- package/dist/ui/sonner.js +52 -0
- package/dist/ui/sonner.js.map +1 -0
- package/dist/ui/spinner.cjs +2 -0
- package/dist/ui/spinner.cjs.map +1 -0
- package/dist/ui/spinner.js +39 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/switch.cjs +2 -0
- package/dist/ui/switch.cjs.map +1 -0
- package/dist/ui/switch.js +32 -0
- package/dist/ui/switch.js.map +1 -0
- package/dist/ui/table.cjs +2 -0
- package/dist/ui/table.cjs.map +1 -0
- package/dist/ui/table.js +153 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tabs.cjs +2 -0
- package/dist/ui/tabs.cjs.map +1 -0
- package/dist/ui/tabs.js +92 -0
- package/dist/ui/tabs.js.map +1 -0
- package/dist/ui/tetra-molecule-icon.cjs +2 -0
- package/dist/ui/tetra-molecule-icon.cjs.map +1 -0
- package/dist/ui/tetra-molecule-icon.js +50 -0
- package/dist/ui/tetra-molecule-icon.js.map +1 -0
- package/dist/ui/tetrascience-icon.cjs +2 -0
- package/dist/ui/tetrascience-icon.cjs.map +1 -0
- package/dist/ui/tetrascience-icon.js +47 -0
- package/dist/ui/tetrascience-icon.js.map +1 -0
- package/dist/ui/textarea.cjs +2 -0
- package/dist/ui/textarea.cjs.map +1 -0
- package/dist/ui/textarea.js +19 -0
- package/dist/ui/textarea.js.map +1 -0
- package/dist/ui/toggle-group.cjs +2 -0
- package/dist/ui/toggle-group.cjs.map +1 -0
- package/dist/ui/toggle-group.js +81 -0
- package/dist/ui/toggle-group.js.map +1 -0
- package/dist/ui/toggle.cjs +2 -0
- package/dist/ui/toggle.cjs.map +1 -0
- package/dist/ui/toggle.js +44 -0
- package/dist/ui/toggle.js.map +1 -0
- package/dist/ui/tooltip.cjs +2 -0
- package/dist/ui/tooltip.cjs.map +1 -0
- package/dist/ui/tooltip.js +56 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/utils/colors.d.ts +50 -0
- package/package.json +137 -24
- package/dist/athena.d.ts +0 -167
- package/dist/components/ai/attachments.cjs +0 -2
- package/dist/components/ai/attachments.cjs.map +0 -1
- package/dist/components/ai/attachments.js +0 -224
- package/dist/components/ai/attachments.js.map +0 -1
- package/dist/components/ai/chain-of-thought.cjs +0 -2
- package/dist/components/ai/chain-of-thought.cjs.map +0 -1
- package/dist/components/ai/chain-of-thought.js +0 -145
- package/dist/components/ai/chain-of-thought.js.map +0 -1
- package/dist/components/ai/confirmation.cjs +0 -2
- package/dist/components/ai/confirmation.cjs.map +0 -1
- package/dist/components/ai/confirmation.js +0 -109
- package/dist/components/ai/confirmation.js.map +0 -1
- package/dist/components/ai/context.cjs +0 -2
- package/dist/components/ai/context.cjs.map +0 -1
- package/dist/components/ai/context.js +0 -266
- package/dist/components/ai/context.js.map +0 -1
- package/dist/components/ai/conversation.cjs +0 -4
- package/dist/components/ai/conversation.cjs.map +0 -1
- package/dist/components/ai/conversation.js +0 -108
- package/dist/components/ai/conversation.js.map +0 -1
- package/dist/components/ai/inline-citation.cjs +0 -2
- package/dist/components/ai/inline-citation.cjs.map +0 -1
- package/dist/components/ai/inline-citation.js +0 -182
- package/dist/components/ai/inline-citation.js.map +0 -1
- package/dist/components/ai/message.cjs +0 -2
- package/dist/components/ai/message.cjs.map +0 -1
- package/dist/components/ai/message.js +0 -237
- package/dist/components/ai/message.js.map +0 -1
- package/dist/components/ai/model-selector.cjs +0 -2
- package/dist/components/ai/model-selector.cjs.map +0 -1
- package/dist/components/ai/model-selector.js +0 -77
- package/dist/components/ai/model-selector.js.map +0 -1
- package/dist/components/ai/prompt-input.cjs +0 -2
- package/dist/components/ai/prompt-input.cjs.map +0 -1
- package/dist/components/ai/prompt-input.js +0 -774
- package/dist/components/ai/prompt-input.js.map +0 -1
- package/dist/components/ai/queue.cjs +0 -2
- package/dist/components/ai/queue.cjs.map +0 -1
- package/dist/components/ai/queue.js +0 -209
- package/dist/components/ai/queue.js.map +0 -1
- package/dist/components/ai/reasoning.cjs +0 -2
- package/dist/components/ai/reasoning.cjs.map +0 -1
- package/dist/components/ai/reasoning.js +0 -129
- package/dist/components/ai/reasoning.js.map +0 -1
- package/dist/components/ai/shimmer.cjs +0 -2
- package/dist/components/ai/shimmer.cjs.map +0 -1
- package/dist/components/ai/shimmer.js +0 -49
- package/dist/components/ai/shimmer.js.map +0 -1
- package/dist/components/ai/sources.cjs +0 -2
- package/dist/components/ai/sources.cjs.map +0 -1
- package/dist/components/ai/sources.js +0 -54
- package/dist/components/ai/sources.js.map +0 -1
- package/dist/components/ai/speech-input.cjs +0 -2
- package/dist/components/ai/speech-input.cjs.map +0 -1
- package/dist/components/ai/speech-input.js +0 -123
- package/dist/components/ai/speech-input.js.map +0 -1
- package/dist/components/ai/stream-status.cjs +0 -2
- package/dist/components/ai/stream-status.cjs.map +0 -1
- package/dist/components/ai/stream-status.js +0 -106
- package/dist/components/ai/stream-status.js.map +0 -1
- package/dist/components/ai/suggestion.cjs +0 -2
- package/dist/components/ai/suggestion.cjs.map +0 -1
- package/dist/components/ai/suggestion.js +0 -38
- package/dist/components/ai/suggestion.js.map +0 -1
- package/dist/components/ai/task.cjs +0 -2
- package/dist/components/ai/task.cjs.map +0 -1
- package/dist/components/ai/task.js +0 -94
- package/dist/components/ai/task.js.map +0 -1
- package/dist/components/ai/tool.cjs +0 -2
- package/dist/components/ai/tool.cjs.map +0 -1
- package/dist/components/ai/tool.js +0 -143
- package/dist/components/ai/tool.js.map +0 -1
- package/dist/components/charts/AreaGraph/AreaGraph.cjs +0 -2
- package/dist/components/charts/AreaGraph/AreaGraph.cjs.map +0 -1
- package/dist/components/charts/AreaGraph/AreaGraph.js +0 -271
- package/dist/components/charts/AreaGraph/AreaGraph.js.map +0 -1
- package/dist/components/charts/BarGraph/BarGraph.cjs +0 -2
- package/dist/components/charts/BarGraph/BarGraph.cjs.map +0 -1
- package/dist/components/charts/BarGraph/BarGraph.js +0 -220
- package/dist/components/charts/BarGraph/BarGraph.js.map +0 -1
- package/dist/components/charts/Boxplot/Boxplot.cjs +0 -2
- package/dist/components/charts/Boxplot/Boxplot.cjs.map +0 -1
- package/dist/components/charts/Boxplot/Boxplot.js +0 -209
- package/dist/components/charts/Boxplot/Boxplot.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs +0 -2
- package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/ChromatogramChart.js +0 -227
- package/dist/components/charts/ChromatogramChart/ChromatogramChart.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/annotations.cjs +0 -2
- package/dist/components/charts/ChromatogramChart/annotations.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/annotations.js +0 -73
- package/dist/components/charts/ChromatogramChart/annotations.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/boundaryMarkers.cjs +0 -2
- package/dist/components/charts/ChromatogramChart/boundaryMarkers.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/boundaryMarkers.js +0 -34
- package/dist/components/charts/ChromatogramChart/boundaryMarkers.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/constants.cjs +0 -2
- package/dist/components/charts/ChromatogramChart/constants.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/constants.js +0 -30
- package/dist/components/charts/ChromatogramChart/constants.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/dataProcessing.cjs +0 -2
- package/dist/components/charts/ChromatogramChart/dataProcessing.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/dataProcessing.js +0 -79
- package/dist/components/charts/ChromatogramChart/dataProcessing.js.map +0 -1
- package/dist/components/charts/ChromatogramChart/peakDetection.cjs.map +0 -1
- package/dist/components/charts/ChromatogramChart/peakDetection.js.map +0 -1
- package/dist/components/charts/DotPlot/DotPlot.cjs +0 -2
- package/dist/components/charts/DotPlot/DotPlot.cjs.map +0 -1
- package/dist/components/charts/DotPlot/DotPlot.js +0 -208
- package/dist/components/charts/DotPlot/DotPlot.js.map +0 -1
- package/dist/components/charts/Heatmap/Heatmap.cjs +0 -2
- package/dist/components/charts/Heatmap/Heatmap.cjs.map +0 -1
- package/dist/components/charts/Heatmap/Heatmap.js +0 -67
- package/dist/components/charts/Heatmap/Heatmap.js.map +0 -1
- package/dist/components/charts/LineGraph/LineGraph.cjs +0 -2
- package/dist/components/charts/LineGraph/LineGraph.cjs.map +0 -1
- package/dist/components/charts/LineGraph/LineGraph.js +0 -225
- package/dist/components/charts/LineGraph/LineGraph.js.map +0 -1
- package/dist/components/charts/ScatterGraph/ScatterGraph.cjs +0 -2
- package/dist/components/charts/ScatterGraph/ScatterGraph.cjs.map +0 -1
- package/dist/components/charts/ScatterGraph/ScatterGraph.js +0 -234
- package/dist/components/charts/ScatterGraph/ScatterGraph.js.map +0 -1
- package/dist/components/composed/tdp-link.cjs +0 -2
- package/dist/components/composed/tdp-link.cjs.map +0 -1
- package/dist/components/composed/tdp-link.js +0 -84
- package/dist/components/composed/tdp-link.js.map +0 -1
- package/dist/components/composed/tdp-url.cjs.map +0 -1
- package/dist/components/composed/tdp-url.js.map +0 -1
- package/dist/components/ui/accordion.cjs +0 -2
- package/dist/components/ui/accordion.cjs.map +0 -1
- package/dist/components/ui/accordion.js +0 -83
- package/dist/components/ui/accordion.js.map +0 -1
- package/dist/components/ui/alert-dialog.cjs +0 -2
- package/dist/components/ui/alert-dialog.cjs.map +0 -1
- package/dist/components/ui/alert-dialog.js +0 -181
- package/dist/components/ui/alert-dialog.js.map +0 -1
- package/dist/components/ui/alert.cjs +0 -2
- package/dist/components/ui/alert.cjs.map +0 -1
- package/dist/components/ui/alert.js +0 -81
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/aspect-ratio.cjs.map +0 -1
- package/dist/components/ui/aspect-ratio.js.map +0 -1
- package/dist/components/ui/avatar.cjs +0 -2
- package/dist/components/ui/avatar.cjs.map +0 -1
- package/dist/components/ui/avatar.js +0 -107
- package/dist/components/ui/avatar.js.map +0 -1
- package/dist/components/ui/badge.cjs +0 -2
- package/dist/components/ui/badge.cjs.map +0 -1
- package/dist/components/ui/badge.js +0 -47
- package/dist/components/ui/badge.js.map +0 -1
- package/dist/components/ui/banner.cjs +0 -2
- package/dist/components/ui/banner.cjs.map +0 -1
- package/dist/components/ui/banner.js +0 -80
- package/dist/components/ui/banner.js.map +0 -1
- package/dist/components/ui/breadcrumb.cjs +0 -2
- package/dist/components/ui/breadcrumb.cjs.map +0 -1
- package/dist/components/ui/breadcrumb.js +0 -118
- package/dist/components/ui/breadcrumb.js.map +0 -1
- package/dist/components/ui/button-group.cjs +0 -2
- package/dist/components/ui/button-group.cjs.map +0 -1
- package/dist/components/ui/button-group.js +0 -77
- package/dist/components/ui/button-group.js.map +0 -1
- package/dist/components/ui/button.cjs +0 -2
- package/dist/components/ui/button.cjs.map +0 -1
- package/dist/components/ui/button.js +0 -57
- package/dist/components/ui/button.js.map +0 -1
- package/dist/components/ui/calendar.cjs +0 -2
- package/dist/components/ui/calendar.cjs.map +0 -1
- package/dist/components/ui/calendar.js +0 -174
- package/dist/components/ui/calendar.js.map +0 -1
- package/dist/components/ui/card.cjs +0 -2
- package/dist/components/ui/card.cjs.map +0 -1
- package/dist/components/ui/card.js +0 -102
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/carousel.cjs +0 -2
- package/dist/components/ui/carousel.cjs.map +0 -1
- package/dist/components/ui/carousel.js +0 -179
- package/dist/components/ui/carousel.js.map +0 -1
- package/dist/components/ui/checkbox.cjs +0 -2
- package/dist/components/ui/checkbox.cjs.map +0 -1
- package/dist/components/ui/checkbox.js +0 -35
- package/dist/components/ui/checkbox.js.map +0 -1
- package/dist/components/ui/code-block.cjs +0 -4
- package/dist/components/ui/code-block.cjs.map +0 -1
- package/dist/components/ui/code-block.js +0 -306
- package/dist/components/ui/code-block.js.map +0 -1
- package/dist/components/ui/code-editor.cjs +0 -2
- package/dist/components/ui/code-editor.cjs.map +0 -1
- package/dist/components/ui/code-editor.js +0 -103
- package/dist/components/ui/code-editor.js.map +0 -1
- package/dist/components/ui/collapsible.cjs.map +0 -1
- package/dist/components/ui/collapsible.js.map +0 -1
- package/dist/components/ui/combobox.cjs +0 -2
- package/dist/components/ui/combobox.cjs.map +0 -1
- package/dist/components/ui/combobox.js +0 -281
- package/dist/components/ui/combobox.js.map +0 -1
- package/dist/components/ui/command.cjs +0 -2
- package/dist/components/ui/command.cjs.map +0 -1
- package/dist/components/ui/command.js +0 -174
- package/dist/components/ui/command.js.map +0 -1
- package/dist/components/ui/context-menu.cjs +0 -2
- package/dist/components/ui/context-menu.cjs.map +0 -1
- package/dist/components/ui/context-menu.js +0 -236
- package/dist/components/ui/context-menu.js.map +0 -1
- package/dist/components/ui/dialog.cjs +0 -2
- package/dist/components/ui/dialog.cjs.map +0 -1
- package/dist/components/ui/dialog.js +0 -165
- package/dist/components/ui/dialog.js.map +0 -1
- package/dist/components/ui/drawer.cjs +0 -2
- package/dist/components/ui/drawer.cjs.map +0 -1
- package/dist/components/ui/drawer.js +0 -125
- package/dist/components/ui/drawer.js.map +0 -1
- package/dist/components/ui/dropdown-menu.cjs +0 -2
- package/dist/components/ui/dropdown-menu.cjs.map +0 -1
- package/dist/components/ui/dropdown-menu.js +0 -252
- package/dist/components/ui/dropdown-menu.js.map +0 -1
- package/dist/components/ui/field.cjs +0 -2
- package/dist/components/ui/field.cjs.map +0 -1
- package/dist/components/ui/field.js +0 -210
- package/dist/components/ui/field.js.map +0 -1
- package/dist/components/ui/hover-card.cjs +0 -2
- package/dist/components/ui/hover-card.cjs.map +0 -1
- package/dist/components/ui/hover-card.js +0 -39
- package/dist/components/ui/hover-card.js.map +0 -1
- package/dist/components/ui/input-group.cjs +0 -2
- package/dist/components/ui/input-group.cjs.map +0 -1
- package/dist/components/ui/input-group.js +0 -145
- package/dist/components/ui/input-group.js.map +0 -1
- package/dist/components/ui/input-otp.cjs +0 -2
- package/dist/components/ui/input-otp.cjs.map +0 -1
- package/dist/components/ui/input-otp.js +0 -82
- package/dist/components/ui/input-otp.js.map +0 -1
- package/dist/components/ui/input.cjs +0 -2
- package/dist/components/ui/input.cjs.map +0 -1
- package/dist/components/ui/input.js +0 -20
- package/dist/components/ui/input.js.map +0 -1
- package/dist/components/ui/item.cjs +0 -2
- package/dist/components/ui/item.cjs.map +0 -1
- package/dist/components/ui/item.js +0 -191
- package/dist/components/ui/item.js.map +0 -1
- package/dist/components/ui/kbd.cjs +0 -2
- package/dist/components/ui/kbd.cjs.map +0 -1
- package/dist/components/ui/kbd.js +0 -30
- package/dist/components/ui/kbd.js.map +0 -1
- package/dist/components/ui/label.cjs +0 -2
- package/dist/components/ui/label.cjs.map +0 -1
- package/dist/components/ui/label.js +0 -23
- package/dist/components/ui/label.js.map +0 -1
- package/dist/components/ui/menubar.cjs +0 -2
- package/dist/components/ui/menubar.cjs.map +0 -1
- package/dist/components/ui/menubar.js +0 -256
- package/dist/components/ui/menubar.js.map +0 -1
- package/dist/components/ui/navigation-menu.cjs +0 -2
- package/dist/components/ui/navigation-menu.cjs.map +0 -1
- package/dist/components/ui/navigation-menu.js +0 -164
- package/dist/components/ui/navigation-menu.js.map +0 -1
- package/dist/components/ui/popover.cjs +0 -2
- package/dist/components/ui/popover.cjs.map +0 -1
- package/dist/components/ui/popover.js +0 -45
- package/dist/components/ui/popover.js.map +0 -1
- package/dist/components/ui/radio-group.cjs +0 -2
- package/dist/components/ui/radio-group.cjs.map +0 -1
- package/dist/components/ui/radio-group.js +0 -45
- package/dist/components/ui/radio-group.js.map +0 -1
- package/dist/components/ui/resizable.cjs +0 -2
- package/dist/components/ui/resizable.cjs.map +0 -1
- package/dist/components/ui/resizable.js +0 -58
- package/dist/components/ui/resizable.js.map +0 -1
- package/dist/components/ui/scroll-area.cjs +0 -2
- package/dist/components/ui/scroll-area.cjs.map +0 -1
- package/dist/components/ui/scroll-area.js +0 -60
- package/dist/components/ui/scroll-area.js.map +0 -1
- package/dist/components/ui/select.cjs +0 -2
- package/dist/components/ui/select.cjs.map +0 -1
- package/dist/components/ui/select.js +0 -184
- package/dist/components/ui/select.js.map +0 -1
- package/dist/components/ui/separator.cjs +0 -2
- package/dist/components/ui/separator.cjs.map +0 -1
- package/dist/components/ui/separator.js +0 -27
- package/dist/components/ui/separator.js.map +0 -1
- package/dist/components/ui/sheet.cjs +0 -2
- package/dist/components/ui/sheet.cjs.map +0 -1
- package/dist/components/ui/sheet.js +0 -137
- package/dist/components/ui/sheet.js.map +0 -1
- package/dist/components/ui/sidebar.cjs +0 -2
- package/dist/components/ui/sidebar.cjs.map +0 -1
- package/dist/components/ui/sidebar.js +0 -579
- package/dist/components/ui/sidebar.js.map +0 -1
- package/dist/components/ui/skeleton.cjs +0 -2
- package/dist/components/ui/skeleton.cjs.map +0 -1
- package/dist/components/ui/skeleton.js +0 -24
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/slider.cjs +0 -2
- package/dist/components/ui/slider.cjs.map +0 -1
- package/dist/components/ui/slider.js +0 -60
- package/dist/components/ui/slider.js.map +0 -1
- package/dist/components/ui/sonner.cjs +0 -2
- package/dist/components/ui/sonner.cjs.map +0 -1
- package/dist/components/ui/sonner.js +0 -37
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/spinner.cjs +0 -2
- package/dist/components/ui/spinner.cjs.map +0 -1
- package/dist/components/ui/spinner.js +0 -39
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/switch.cjs +0 -2
- package/dist/components/ui/switch.cjs.map +0 -1
- package/dist/components/ui/switch.js +0 -32
- package/dist/components/ui/switch.js.map +0 -1
- package/dist/components/ui/table.cjs +0 -2
- package/dist/components/ui/table.cjs.map +0 -1
- package/dist/components/ui/table.js +0 -152
- package/dist/components/ui/table.js.map +0 -1
- package/dist/components/ui/tabs.cjs +0 -2
- package/dist/components/ui/tabs.cjs.map +0 -1
- package/dist/components/ui/tabs.js +0 -92
- package/dist/components/ui/tabs.js.map +0 -1
- package/dist/components/ui/tetrascience-icon.cjs +0 -2
- package/dist/components/ui/tetrascience-icon.cjs.map +0 -1
- package/dist/components/ui/tetrascience-icon.js +0 -46
- package/dist/components/ui/tetrascience-icon.js.map +0 -1
- package/dist/components/ui/textarea.cjs +0 -2
- package/dist/components/ui/textarea.cjs.map +0 -1
- package/dist/components/ui/textarea.js +0 -19
- package/dist/components/ui/textarea.js.map +0 -1
- package/dist/components/ui/toggle-group.cjs +0 -2
- package/dist/components/ui/toggle-group.cjs.map +0 -1
- package/dist/components/ui/toggle-group.js +0 -77
- package/dist/components/ui/toggle-group.js.map +0 -1
- package/dist/components/ui/toggle.cjs +0 -2
- package/dist/components/ui/toggle.cjs.map +0 -1
- package/dist/components/ui/toggle.js +0 -44
- package/dist/components/ui/toggle.js.map +0 -1
- package/dist/components/ui/tooltip.cjs +0 -2
- package/dist/components/ui/tooltip.cjs.map +0 -1
- package/dist/components/ui/tooltip.js +0 -56
- package/dist/components/ui/tooltip.js.map +0 -1
- package/dist/databricks.d.ts +0 -129
- package/dist/providers/athena.d.ts +0 -9
- package/dist/providers/databricks.d.ts +0 -9
- package/dist/providers/snowflake.d.ts +0 -9
- package/dist/snowflake.d.ts +0 -125
- /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.cjs +0 -0
- /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.js +0 -0
- /package/dist/{components/composed → composed}/tdp-url.cjs +0 -0
- /package/dist/{components/composed → composed}/tdp-url.js +0 -0
- /package/dist/{components/ui → ui}/aspect-ratio.cjs +0 -0
- /package/dist/{components/ui → ui}/aspect-ratio.js +0 -0
- /package/dist/{components/ui → ui}/collapsible.cjs +0 -0
- /package/dist/{components/ui → ui}/collapsible.js +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),R=require("lucide-react"),S=require("react"),q=require("./rdkit-loader.cjs"),D=require("./use-rdkit.cjs"),N=require("../../../ui/skeleton.cjs"),_=require("../../../hooks/use-is-dark.cjs"),z=require("../../../lib/utils.cjs");function I(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const c=I(S),h=300;function M(e){return e.replace(/width=(['"])[^'"]*\1/,"width='100%'").replace(/height=(['"])[^'"]*\1/,"height='100%'")}function O({smiles:e,label:t,dark:r,alt:u,drawOptions:d,loadingContent:j,errorContent:k,onError:f,className:x,...p}){const{rdkit:a,status:s}=D.useRDKit(),v=_.useIsDark(),g=r??v,l=u??t??e,m=c.useRef(f);c.useEffect(()=>{m.current=f});const i=c.useMemo(()=>{if(!a)return null;const b=q.moleculeToSvg(a,e,{width:h,height:h,dark:g,legend:t,drawOptions:d});return b===null?null:M(b)},[a,e,g,t,d]),o=s==="ready"&&i===null,y=s==="error"||o;return c.useEffect(()=>{o&&m.current?.(e)},[o,e]),n.jsxs("div",{"data-slot":"molecule-structure",className:z.cn("relative flex items-center justify-center",x),title:l,"aria-busy":s==="loading",...p,children:[s==="loading"&&(j??n.jsx(N.Skeleton,{role:"img","aria-label":`Loading structure: ${l}`,className:"size-full rounded-md"})),y&&(k??n.jsxs("div",{role:"img","aria-label":`Unable to render structure: ${l}`,className:"flex size-full flex-col items-center justify-center gap-1 rounded-md border border-dashed border-border p-2 text-center text-muted-foreground",children:[n.jsx(R.AlertTriangleIcon,{className:"size-4 shrink-0","aria-hidden":!0}),n.jsx("span",{className:"text-2xs leading-tight break-all",children:"Invalid structure"})]})),s==="ready"&&i!==null&&n.jsx("div",{role:"img","aria-label":l,className:"size-full [&>svg]:size-full",dangerouslySetInnerHTML:{__html:i}})]})}exports.MoleculeStructure=O;
|
|
2
|
+
//# sourceMappingURL=MoleculeStructure.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculeStructure.cjs","sources":["../../../../src/components/composed/MoleculeStructure/MoleculeStructure.tsx"],"sourcesContent":["import { AlertTriangleIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { moleculeToSvg } from \"./rdkit-loader\"\nimport { useRDKit } from \"./use-rdkit\"\n\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useIsDark } from \"@/hooks/use-is-dark\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface MoleculeStructureProps\n extends Omit<React.ComponentProps<\"div\">, \"children\" | \"onError\"> {\n /** SMILES string to render as a 2D structure. */\n smiles: string\n /** Optional caption drawn beneath the structure by RDKit. */\n label?: string\n /**\n * Force dark/light drawing colours. Defaults to following the active theme\n * (the `.dark` class on the document root).\n */\n dark?: boolean\n /**\n * Accessible label for the structure. Defaults to the SMILES string.\n * Rendered as the SVG group's `aria-label` and the wrapper's title.\n */\n alt?: string\n /**\n * Extra RDKit MolDraw2D options. Pass a stable (memoised or module-level)\n * reference — a new object each render re-parses the SMILES through RDKit.\n */\n drawOptions?: Record<string, unknown>\n /** Rendered while the WASM module and structure are being prepared. */\n loadingContent?: React.ReactNode\n /** Rendered when the SMILES is invalid or RDKit fails to load. */\n errorContent?: React.ReactNode\n /** Called once when the SMILES cannot be parsed into a valid molecule. */\n onError?: (smiles: string) => void\n}\n\n/**\n * Internal draw resolution. The structure is vector and scales to fill the\n * wrapper (see {@link makeResponsive}); a square viewBox keeps it centred in\n * containers of any shape without distortion.\n */\nconst DRAW_SIZE = 300\n\n/** Make an RDKit SVG fluid: fill the wrapper and scale with its aspect ratio. */\nfunction makeResponsive(svg: string): string {\n return svg\n .replace(/width=(['\"])[^'\"]*\\1/, `width='100%'`)\n .replace(/height=(['\"])[^'\"]*\\1/, `height='100%'`)\n}\n\n/**\n * Core cheminformatics primitive: render a 2D chemical structure from a SMILES\n * string. RDKit's WASM module is loaded lazily on first mount (see\n * {@link loadRDKit}), so pages that never render a molecule pay nothing for it.\n *\n * The output is a vector SVG that fills this component's box — size it with\n * `className` (e.g. `className=\"size-32\"`). Invalid SMILES render a fallback\n * rather than throwing.\n *\n * @example\n * ```tsx\n * <MoleculeStructure smiles=\"CC(=O)Oc1ccccc1C(=O)O\" className=\"size-40\" />\n * ```\n */\nexport function MoleculeStructure({\n smiles,\n label,\n dark,\n alt,\n drawOptions,\n loadingContent,\n errorContent,\n onError,\n className,\n ...props\n}: MoleculeStructureProps) {\n const { rdkit, status } = useRDKit()\n const isDark = useIsDark()\n const useDark = dark ?? isDark\n\n const accessibleName = alt ?? label ?? smiles\n const onErrorRef = React.useRef(onError)\n React.useEffect(() => {\n onErrorRef.current = onError\n })\n\n // Kept pure: the memo only computes the SVG (or null on a parse failure) and\n // never has side effects, so a render React discards (concurrent / offscreen)\n // can't fire onError.\n const svg = React.useMemo(() => {\n if (!rdkit) return null\n const drawn = moleculeToSvg(rdkit, smiles, {\n width: DRAW_SIZE,\n height: DRAW_SIZE,\n dark: useDark,\n legend: label,\n drawOptions,\n })\n return drawn === null ? null : makeResponsive(drawn)\n }, [rdkit, smiles, useDark, label, drawOptions])\n\n const parseFailed = status === \"ready\" && svg === null\n const failed = status === \"error\" || parseFailed\n\n // Report a parse failure as an effect keyed on the outcome, so onError fires\n // once per bad input rather than on every (possibly discarded) render.\n React.useEffect(() => {\n if (parseFailed) onErrorRef.current?.(smiles)\n }, [parseFailed, smiles])\n\n return (\n <div\n data-slot=\"molecule-structure\"\n className={cn(\"relative flex items-center justify-center\", className)}\n title={accessibleName}\n aria-busy={status === \"loading\"}\n {...props}\n >\n {status === \"loading\" &&\n (loadingContent ?? (\n <Skeleton\n role=\"img\"\n aria-label={`Loading structure: ${accessibleName}`}\n className=\"size-full rounded-md\"\n />\n ))}\n\n {failed &&\n (errorContent ?? (\n <div\n role=\"img\"\n aria-label={`Unable to render structure: ${accessibleName}`}\n className=\"flex size-full flex-col items-center justify-center gap-1 rounded-md border border-dashed border-border p-2 text-center text-muted-foreground\"\n >\n <AlertTriangleIcon className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"text-2xs leading-tight break-all\">\n Invalid structure\n </span>\n </div>\n ))}\n\n {status === \"ready\" && svg !== null && (\n <div\n // RDKit emits the SVG markup itself; the SMILES is only ever parsed\n // into a molecule, never echoed into the DOM. The consumer-supplied\n // `label` is drawn by RDKit as vector glyph paths (not live text), so\n // it can't carry markup into the DOM either — this is trusted.\n role=\"img\"\n aria-label={accessibleName}\n className=\"size-full [&>svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </div>\n )\n}\n"],"names":["DRAW_SIZE","makeResponsive","svg","MoleculeStructure","smiles","label","dark","alt","drawOptions","loadingContent","errorContent","onError","className","props","rdkit","status","useRDKit","isDark","useIsDark","useDark","accessibleName","onErrorRef","React","drawn","moleculeToSvg","parseFailed","failed","jsxs","cn","jsx","Skeleton","AlertTriangleIcon"],"mappings":"+mBA4CMA,EAAY,IAGlB,SAASC,EAAeC,EAAqB,CAC3C,OAAOA,EACJ,QAAQ,uBAAwB,cAAc,EAC9C,QAAQ,wBAAyB,eAAe,CACrD,CAgBO,SAASC,EAAkB,CAChC,OAAAC,EACA,MAAAC,EACA,KAAAC,EACA,IAAAC,EACA,YAAAC,EACA,eAAAC,EACA,aAAAC,EACA,QAAAC,EACA,UAAAC,EACA,GAAGC,CACL,EAA2B,CACzB,KAAM,CAAE,MAAAC,EAAO,OAAAC,CAAA,EAAWC,WAAA,EACpBC,EAASC,EAAAA,UAAA,EACTC,EAAUb,GAAQW,EAElBG,EAAiBb,GAAOF,GAASD,EACjCiB,EAAaC,EAAM,OAAOX,CAAO,EACvCW,EAAM,UAAU,IAAM,CACpBD,EAAW,QAAUV,CACvB,CAAC,EAKD,MAAMT,EAAMoB,EAAM,QAAQ,IAAM,CAC9B,GAAI,CAACR,EAAO,OAAO,KACnB,MAAMS,EAAQC,EAAAA,cAAcV,EAAOV,EAAQ,CACzC,MAAOJ,EACP,OAAQA,EACR,KAAMmB,EACN,OAAQd,EACR,YAAAG,CAAA,CACD,EACD,OAAOe,IAAU,KAAO,KAAOtB,EAAesB,CAAK,CACrD,EAAG,CAACT,EAAOV,EAAQe,EAASd,EAAOG,CAAW,CAAC,EAEzCiB,EAAcV,IAAW,SAAWb,IAAQ,KAC5CwB,EAASX,IAAW,SAAWU,EAIrCH,OAAAA,EAAM,UAAU,IAAM,CAChBG,GAAaJ,EAAW,UAAUjB,CAAM,CAC9C,EAAG,CAACqB,EAAarB,CAAM,CAAC,EAGtBuB,EAAAA,KAAC,MAAA,CACC,YAAU,qBACV,UAAWC,EAAAA,GAAG,4CAA6ChB,CAAS,EACpE,MAAOQ,EACP,YAAWL,IAAW,UACrB,GAAGF,EAEH,SAAA,CAAAE,IAAW,YACTN,GACCoB,EAAAA,IAACC,EAAAA,SAAA,CACC,KAAK,MACL,aAAY,sBAAsBV,CAAc,GAChD,UAAU,sBAAA,CAAA,GAIfM,IACEhB,GACCiB,EAAAA,KAAC,MAAA,CACC,KAAK,MACL,aAAY,+BAA+BP,CAAc,GACzD,UAAU,gJAEV,SAAA,CAAAS,EAAAA,IAACE,EAAAA,kBAAA,CAAkB,UAAU,kBAAkB,cAAW,GAAC,EAC3DF,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,mBAAA,CAEnD,CAAA,CAAA,CAAA,GAILd,IAAW,SAAWb,IAAQ,MAC7B2B,EAAAA,IAAC,MAAA,CAKC,KAAK,MACL,aAAYT,EACZ,UAAU,8BACV,wBAAyB,CAAE,OAAQlB,CAAA,CAAI,CAAA,CACzC,CAAA,CAAA,CAIR"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface MoleculeStructureProps extends Omit<React.ComponentProps<"div">, "children" | "onError"> {
|
|
3
|
+
/** SMILES string to render as a 2D structure. */
|
|
4
|
+
smiles: string;
|
|
5
|
+
/** Optional caption drawn beneath the structure by RDKit. */
|
|
6
|
+
label?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Force dark/light drawing colours. Defaults to following the active theme
|
|
9
|
+
* (the `.dark` class on the document root).
|
|
10
|
+
*/
|
|
11
|
+
dark?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Accessible label for the structure. Defaults to the SMILES string.
|
|
14
|
+
* Rendered as the SVG group's `aria-label` and the wrapper's title.
|
|
15
|
+
*/
|
|
16
|
+
alt?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Extra RDKit MolDraw2D options. Pass a stable (memoised or module-level)
|
|
19
|
+
* reference — a new object each render re-parses the SMILES through RDKit.
|
|
20
|
+
*/
|
|
21
|
+
drawOptions?: Record<string, unknown>;
|
|
22
|
+
/** Rendered while the WASM module and structure are being prepared. */
|
|
23
|
+
loadingContent?: React.ReactNode;
|
|
24
|
+
/** Rendered when the SMILES is invalid or RDKit fails to load. */
|
|
25
|
+
errorContent?: React.ReactNode;
|
|
26
|
+
/** Called once when the SMILES cannot be parsed into a valid molecule. */
|
|
27
|
+
onError?: (smiles: string) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Core cheminformatics primitive: render a 2D chemical structure from a SMILES
|
|
31
|
+
* string. RDKit's WASM module is loaded lazily on first mount (see
|
|
32
|
+
* {@link loadRDKit}), so pages that never render a molecule pay nothing for it.
|
|
33
|
+
*
|
|
34
|
+
* The output is a vector SVG that fills this component's box — size it with
|
|
35
|
+
* `className` (e.g. `className="size-32"`). Invalid SMILES render a fallback
|
|
36
|
+
* rather than throwing.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* <MoleculeStructure smiles="CC(=O)Oc1ccccc1C(=O)O" className="size-40" />
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function MoleculeStructure({ smiles, label, dark, alt, drawOptions, loadingContent, errorContent, onError, className, ...props }: MoleculeStructureProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsxs as g, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { AlertTriangleIcon as z } from "lucide-react";
|
|
3
|
+
import * as a from "react";
|
|
4
|
+
import { moleculeToSvg as D } from "./rdkit-loader.js";
|
|
5
|
+
import { useRDKit as I } from "./use-rdkit.js";
|
|
6
|
+
import { Skeleton as S } from "../../../ui/skeleton.js";
|
|
7
|
+
import { useIsDark as j } from "../../../hooks/use-is-dark.js";
|
|
8
|
+
import { cn as w } from "../../../lib/utils.js";
|
|
9
|
+
const h = 300;
|
|
10
|
+
function E(e) {
|
|
11
|
+
return e.replace(/width=(['"])[^'"]*\1/, "width='100%'").replace(/height=(['"])[^'"]*\1/, "height='100%'");
|
|
12
|
+
}
|
|
13
|
+
function H({
|
|
14
|
+
smiles: e,
|
|
15
|
+
label: n,
|
|
16
|
+
dark: p,
|
|
17
|
+
alt: x,
|
|
18
|
+
drawOptions: u,
|
|
19
|
+
loadingContent: b,
|
|
20
|
+
errorContent: k,
|
|
21
|
+
onError: c,
|
|
22
|
+
className: v,
|
|
23
|
+
...N
|
|
24
|
+
}) {
|
|
25
|
+
const { rdkit: o, status: r } = I(), y = j(), d = p ?? y, t = x ?? n ?? e, m = a.useRef(c);
|
|
26
|
+
a.useEffect(() => {
|
|
27
|
+
m.current = c;
|
|
28
|
+
});
|
|
29
|
+
const s = a.useMemo(() => {
|
|
30
|
+
if (!o) return null;
|
|
31
|
+
const f = D(o, e, {
|
|
32
|
+
width: h,
|
|
33
|
+
height: h,
|
|
34
|
+
dark: d,
|
|
35
|
+
legend: n,
|
|
36
|
+
drawOptions: u
|
|
37
|
+
});
|
|
38
|
+
return f === null ? null : E(f);
|
|
39
|
+
}, [o, e, d, n, u]), i = r === "ready" && s === null, R = r === "error" || i;
|
|
40
|
+
return a.useEffect(() => {
|
|
41
|
+
i && m.current?.(e);
|
|
42
|
+
}, [i, e]), /* @__PURE__ */ g(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
"data-slot": "molecule-structure",
|
|
46
|
+
className: w("relative flex items-center justify-center", v),
|
|
47
|
+
title: t,
|
|
48
|
+
"aria-busy": r === "loading",
|
|
49
|
+
...N,
|
|
50
|
+
children: [
|
|
51
|
+
r === "loading" && (b ?? /* @__PURE__ */ l(
|
|
52
|
+
S,
|
|
53
|
+
{
|
|
54
|
+
role: "img",
|
|
55
|
+
"aria-label": `Loading structure: ${t}`,
|
|
56
|
+
className: "size-full rounded-md"
|
|
57
|
+
}
|
|
58
|
+
)),
|
|
59
|
+
R && (k ?? /* @__PURE__ */ g(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
role: "img",
|
|
63
|
+
"aria-label": `Unable to render structure: ${t}`,
|
|
64
|
+
className: "flex size-full flex-col items-center justify-center gap-1 rounded-md border border-dashed border-border p-2 text-center text-muted-foreground",
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ l(z, { className: "size-4 shrink-0", "aria-hidden": !0 }),
|
|
67
|
+
/* @__PURE__ */ l("span", { className: "text-2xs leading-tight break-all", children: "Invalid structure" })
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
)),
|
|
71
|
+
r === "ready" && s !== null && /* @__PURE__ */ l(
|
|
72
|
+
"div",
|
|
73
|
+
{
|
|
74
|
+
role: "img",
|
|
75
|
+
"aria-label": t,
|
|
76
|
+
className: "size-full [&>svg]:size-full",
|
|
77
|
+
dangerouslySetInnerHTML: { __html: s }
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
H as MoleculeStructure
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=MoleculeStructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculeStructure.js","sources":["../../../../src/components/composed/MoleculeStructure/MoleculeStructure.tsx"],"sourcesContent":["import { AlertTriangleIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { moleculeToSvg } from \"./rdkit-loader\"\nimport { useRDKit } from \"./use-rdkit\"\n\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useIsDark } from \"@/hooks/use-is-dark\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface MoleculeStructureProps\n extends Omit<React.ComponentProps<\"div\">, \"children\" | \"onError\"> {\n /** SMILES string to render as a 2D structure. */\n smiles: string\n /** Optional caption drawn beneath the structure by RDKit. */\n label?: string\n /**\n * Force dark/light drawing colours. Defaults to following the active theme\n * (the `.dark` class on the document root).\n */\n dark?: boolean\n /**\n * Accessible label for the structure. Defaults to the SMILES string.\n * Rendered as the SVG group's `aria-label` and the wrapper's title.\n */\n alt?: string\n /**\n * Extra RDKit MolDraw2D options. Pass a stable (memoised or module-level)\n * reference — a new object each render re-parses the SMILES through RDKit.\n */\n drawOptions?: Record<string, unknown>\n /** Rendered while the WASM module and structure are being prepared. */\n loadingContent?: React.ReactNode\n /** Rendered when the SMILES is invalid or RDKit fails to load. */\n errorContent?: React.ReactNode\n /** Called once when the SMILES cannot be parsed into a valid molecule. */\n onError?: (smiles: string) => void\n}\n\n/**\n * Internal draw resolution. The structure is vector and scales to fill the\n * wrapper (see {@link makeResponsive}); a square viewBox keeps it centred in\n * containers of any shape without distortion.\n */\nconst DRAW_SIZE = 300\n\n/** Make an RDKit SVG fluid: fill the wrapper and scale with its aspect ratio. */\nfunction makeResponsive(svg: string): string {\n return svg\n .replace(/width=(['\"])[^'\"]*\\1/, `width='100%'`)\n .replace(/height=(['\"])[^'\"]*\\1/, `height='100%'`)\n}\n\n/**\n * Core cheminformatics primitive: render a 2D chemical structure from a SMILES\n * string. RDKit's WASM module is loaded lazily on first mount (see\n * {@link loadRDKit}), so pages that never render a molecule pay nothing for it.\n *\n * The output is a vector SVG that fills this component's box — size it with\n * `className` (e.g. `className=\"size-32\"`). Invalid SMILES render a fallback\n * rather than throwing.\n *\n * @example\n * ```tsx\n * <MoleculeStructure smiles=\"CC(=O)Oc1ccccc1C(=O)O\" className=\"size-40\" />\n * ```\n */\nexport function MoleculeStructure({\n smiles,\n label,\n dark,\n alt,\n drawOptions,\n loadingContent,\n errorContent,\n onError,\n className,\n ...props\n}: MoleculeStructureProps) {\n const { rdkit, status } = useRDKit()\n const isDark = useIsDark()\n const useDark = dark ?? isDark\n\n const accessibleName = alt ?? label ?? smiles\n const onErrorRef = React.useRef(onError)\n React.useEffect(() => {\n onErrorRef.current = onError\n })\n\n // Kept pure: the memo only computes the SVG (or null on a parse failure) and\n // never has side effects, so a render React discards (concurrent / offscreen)\n // can't fire onError.\n const svg = React.useMemo(() => {\n if (!rdkit) return null\n const drawn = moleculeToSvg(rdkit, smiles, {\n width: DRAW_SIZE,\n height: DRAW_SIZE,\n dark: useDark,\n legend: label,\n drawOptions,\n })\n return drawn === null ? null : makeResponsive(drawn)\n }, [rdkit, smiles, useDark, label, drawOptions])\n\n const parseFailed = status === \"ready\" && svg === null\n const failed = status === \"error\" || parseFailed\n\n // Report a parse failure as an effect keyed on the outcome, so onError fires\n // once per bad input rather than on every (possibly discarded) render.\n React.useEffect(() => {\n if (parseFailed) onErrorRef.current?.(smiles)\n }, [parseFailed, smiles])\n\n return (\n <div\n data-slot=\"molecule-structure\"\n className={cn(\"relative flex items-center justify-center\", className)}\n title={accessibleName}\n aria-busy={status === \"loading\"}\n {...props}\n >\n {status === \"loading\" &&\n (loadingContent ?? (\n <Skeleton\n role=\"img\"\n aria-label={`Loading structure: ${accessibleName}`}\n className=\"size-full rounded-md\"\n />\n ))}\n\n {failed &&\n (errorContent ?? (\n <div\n role=\"img\"\n aria-label={`Unable to render structure: ${accessibleName}`}\n className=\"flex size-full flex-col items-center justify-center gap-1 rounded-md border border-dashed border-border p-2 text-center text-muted-foreground\"\n >\n <AlertTriangleIcon className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"text-2xs leading-tight break-all\">\n Invalid structure\n </span>\n </div>\n ))}\n\n {status === \"ready\" && svg !== null && (\n <div\n // RDKit emits the SVG markup itself; the SMILES is only ever parsed\n // into a molecule, never echoed into the DOM. The consumer-supplied\n // `label` is drawn by RDKit as vector glyph paths (not live text), so\n // it can't carry markup into the DOM either — this is trusted.\n role=\"img\"\n aria-label={accessibleName}\n className=\"size-full [&>svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </div>\n )\n}\n"],"names":["DRAW_SIZE","makeResponsive","svg","MoleculeStructure","smiles","label","dark","alt","drawOptions","loadingContent","errorContent","onError","className","props","rdkit","status","useRDKit","isDark","useIsDark","useDark","accessibleName","onErrorRef","React","drawn","moleculeToSvg","parseFailed","failed","jsxs","cn","jsx","Skeleton","AlertTriangleIcon"],"mappings":";;;;;;;;AA4CA,MAAMA,IAAY;AAGlB,SAASC,EAAeC,GAAqB;AAC3C,SAAOA,EACJ,QAAQ,wBAAwB,cAAc,EAC9C,QAAQ,yBAAyB,eAAe;AACrD;AAgBO,SAASC,EAAkB;AAAA,EAChC,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAA2B;AACzB,QAAM,EAAE,OAAAC,GAAO,QAAAC,EAAA,IAAWC,EAAA,GACpBC,IAASC,EAAA,GACTC,IAAUb,KAAQW,GAElBG,IAAiBb,KAAOF,KAASD,GACjCiB,IAAaC,EAAM,OAAOX,CAAO;AACvC,EAAAW,EAAM,UAAU,MAAM;AACpB,IAAAD,EAAW,UAAUV;AAAA,EACvB,CAAC;AAKD,QAAMT,IAAMoB,EAAM,QAAQ,MAAM;AAC9B,QAAI,CAACR,EAAO,QAAO;AACnB,UAAMS,IAAQC,EAAcV,GAAOV,GAAQ;AAAA,MACzC,OAAOJ;AAAA,MACP,QAAQA;AAAA,MACR,MAAMmB;AAAA,MACN,QAAQd;AAAA,MACR,aAAAG;AAAA,IAAA,CACD;AACD,WAAOe,MAAU,OAAO,OAAOtB,EAAesB,CAAK;AAAA,EACrD,GAAG,CAACT,GAAOV,GAAQe,GAASd,GAAOG,CAAW,CAAC,GAEzCiB,IAAcV,MAAW,WAAWb,MAAQ,MAC5CwB,IAASX,MAAW,WAAWU;AAIrC,SAAAH,EAAM,UAAU,MAAM;AACpB,IAAIG,KAAaJ,EAAW,UAAUjB,CAAM;AAAA,EAC9C,GAAG,CAACqB,GAAarB,CAAM,CAAC,GAGtB,gBAAAuB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,6CAA6ChB,CAAS;AAAA,MACpE,OAAOQ;AAAA,MACP,aAAWL,MAAW;AAAA,MACrB,GAAGF;AAAA,MAEH,UAAA;AAAA,QAAAE,MAAW,cACTN,KACC,gBAAAoB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAY,sBAAsBV,CAAc;AAAA,YAChD,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAIfM,MACEhB,KACC,gBAAAiB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAY,+BAA+BP,CAAc;AAAA,YACzD,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAAS,EAACE,GAAA,EAAkB,WAAU,mBAAkB,eAAW,IAAC;AAAA,cAC3D,gBAAAF,EAAC,QAAA,EAAK,WAAU,oCAAmC,UAAA,oBAAA,CAEnD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAILd,MAAW,WAAWb,MAAQ,QAC7B,gBAAA2B;AAAA,UAAC;AAAA,UAAA;AAAA,YAKC,MAAK;AAAA,YACL,cAAYT;AAAA,YACZ,WAAU;AAAA,YACV,yBAAyB,EAAE,QAAQlB,EAAA;AAAA,UAAI;AAAA,QAAA;AAAA,MACzC;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { MoleculeStructure, type MoleculeStructureProps } from './MoleculeStructure';
|
|
2
|
+
export { useRDKit, type RDKitStatus, type UseRDKitResult } from './use-rdkit';
|
|
3
|
+
export { loadRDKit, configureRDKit, moleculeToSvg, type RDKitLoaderConfig, type MoleculeSvgOptions, } from './rdkit-loader';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function g(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const o={};function m(e){r||Object.assign(o,e)}let r=null;async function b(){const e=await Promise.resolve().then(()=>g(require("@rdkit/rdkit")));return e.default??e}function p(){return o.instance?Promise.resolve(o.instance):r||(r=(async()=>{if(typeof window>"u"||typeof document>"u")throw new Error("RDKit can only be loaded in a browser environment");let e;try{e=await(o.importFactory??b)()}catch(t){const n=t instanceof Error?` (${t.message})`:"";throw new Error(`Failed to load @rdkit/rdkit${n}. Install it as a dependency to render molecule structures: \`yarn add @rdkit/rdkit\`.`)}return e({...o.wasmSrc?{locateFile:()=>o.wasmSrc}:{},print:t=>console.debug("[RDKit]",t),printErr:t=>console.debug("[RDKit]",t)})})(),r.catch(()=>{r=null}),r)}function y(e,t,n={}){const{width:i=250,height:s=200,dark:u=!1,legend:a,drawOptions:d}=n,c=e.get_mol(t);if(!c)return null;try{if(!c.is_valid())return null;const f={width:i,height:s,backgroundColour:[0,0,0,0],...a?{legend:a}:{},...u?{atomColourPalette:O}:{},...d};return c.get_svg_with_highlights(JSON.stringify(f)).replace(/^\s*<\?xml[^>]*\?>\s*/i,"")}finally{c.delete()}}const l=255;function w(e){return[parseInt(e.slice(1,3),16)/l,parseInt(e.slice(3,5),16)/l,parseInt(e.slice(5,7),16)/l]}const D={"-1":"#e5e5e5",6:"#e5e5e5",7:"#75a1ff",8:"#ff7575",9:"#8ceb99",15:"#ff9e59",16:"#f2cc59",17:"#8ceb99",35:"#e69e73",53:"#c499f2"},O=Object.fromEntries(Object.entries(D).map(([e,t])=>[e,w(t)]));exports.configureRDKit=m;exports.loadRDKit=p;exports.moleculeToSvg=y;
|
|
2
|
+
//# sourceMappingURL=rdkit-loader.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdkit-loader.cjs","sources":["../../../../src/components/composed/MoleculeStructure/rdkit-loader.ts"],"sourcesContent":["import type { RDKitModule } from \"@rdkit/rdkit\"\n\n/**\n * Loader for the RDKit.js WebAssembly module.\n *\n * RDKit ships a ~6.6 MB `.wasm` blob, so it must never be part of the main\n * bundle. It is loaded lazily, once per page, the first time a molecule\n * actually needs rendering.\n *\n * **Air-gapped by default, no CDN.** The loader dynamically imports the\n * `@rdkit/rdkit` package the consumer has installed — nothing is fetched from a\n * public CDN. Molecule rendering is opt-in: `@rdkit/rdkit` is an optional\n * peer dependency, so a consumer that never renders a structure needn't install\n * it, and one that does simply adds it to their own dependencies.\n *\n * **Bundled apps should set `wasmSrc`.** Without it, RDKit resolves\n * `RDKit_minimal.wasm` relative to the glue script, which a bundler (Vite,\n * webpack, …) usually does not emit next to the output — so the fetch 404s at\n * runtime and the first molecule silently fails to load. Copy the WASM into a\n * served path (or resolve it via your bundler, e.g. Vite's `?url`) and pass it\n * to {@link configureRDKit} once at startup. Alternatively hand the loader a\n * module you initialised yourself (`instance`).\n *\n * @see https://www.rdkitjs.com\n */\n\n/** The `initRDKitModule` factory exported by `@rdkit/rdkit`. */\ntype RDKitFactory = (options?: {\n locateFile?: () => string\n print?: (msg: string) => void\n printErr?: (msg: string) => void\n}) => Promise<RDKitModule>\n\n/** Options controlling how the RDKit module is located and loaded. */\nexport interface RDKitLoaderConfig {\n /**\n * URL of the `RDKit_minimal.wasm` binary, passed to RDKit as `locateFile`.\n * Set this when your bundler doesn't serve the WASM next to the glue script\n * (e.g. copy it into your app's public dir and point here). When omitted,\n * RDKit's own default resolution is used.\n */\n wasmSrc?: string\n /**\n * A module already initialised by the consumer (e.g. shared with other parts\n * of the app). When provided, no import or network work is done.\n */\n instance?: RDKitModule\n /**\n * Override how the `initRDKitModule` factory is obtained. Defaults to\n * `import(\"@rdkit/rdkit\")`. Provide this only for unusual setups (custom\n * bundler resolution, a vendored copy, etc.).\n */\n importFactory?: () => Promise<RDKitFactory>\n}\n\nconst defaultConfig: RDKitLoaderConfig = {}\n\n/**\n * Set process-wide defaults for how RDKit is loaded. Call once, before the\n * first molecule renders — typically at app startup. Later calls are ignored\n * once loading has begun.\n *\n * Bundled apps should set `wasmSrc` — see the module doc above for why.\n *\n * @example\n * ```ts\n * // Serve the WASM yourself (e.g. copied into /public) — no CDN, air-gapped.\n * configureRDKit({ wasmSrc: \"/assets/RDKit_minimal.wasm\" })\n * // …or resolve it from the installed package via your bundler (Vite):\n * import wasmSrc from \"@rdkit/rdkit/dist/RDKit_minimal.wasm?url\"\n * configureRDKit({ wasmSrc })\n * ```\n */\nexport function configureRDKit(config: RDKitLoaderConfig): void {\n if (loadPromise) return\n Object.assign(defaultConfig, config)\n}\n\nlet loadPromise: Promise<RDKitModule> | null = null\n\n/** Dynamically import the installed `@rdkit/rdkit` and return its factory. */\nasync function importRDKitFactory(): Promise<RDKitFactory> {\n const mod = (await import(\"@rdkit/rdkit\")) as unknown as {\n default?: RDKitFactory\n } & RDKitFactory\n // The package exports the factory as both `module.exports` and `.default`.\n return mod.default ?? (mod as RDKitFactory)\n}\n\n/**\n * Load and initialise the RDKit module, memoised so the WASM is fetched and\n * compiled only once per page. Safe to call from many components concurrently;\n * they all await the same promise.\n *\n * @throws if run outside a browser, if `@rdkit/rdkit` isn't installed, or if\n * the WASM cannot be loaded.\n */\nexport function loadRDKit(): Promise<RDKitModule> {\n if (defaultConfig.instance) {\n return Promise.resolve(defaultConfig.instance)\n }\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n throw new Error(\"RDKit can only be loaded in a browser environment\")\n }\n\n let initRDKitModule: RDKitFactory\n try {\n initRDKitModule = await (defaultConfig.importFactory ?? importRDKitFactory)()\n } catch (cause) {\n const detail = cause instanceof Error ? ` (${cause.message})` : \"\"\n throw new Error(\n `Failed to load @rdkit/rdkit${detail}. Install it as a dependency to ` +\n \"render molecule structures: `yarn add @rdkit/rdkit`.\",\n )\n }\n\n // RDKit is an Emscripten module: its C++ stdout/stderr (including the noisy\n // \"SMILES Parse Error\" it emits for invalid input we handle gracefully)\n // flow through `print`/`printErr`, which default to console.log/error.\n // Route them to console.debug so a bad SMILES never spams the host app's\n // console — invalid input is surfaced through the renderer's fallback UI.\n return initRDKitModule({\n ...(defaultConfig.wasmSrc\n ? { locateFile: () => defaultConfig.wasmSrc as string }\n : {}),\n print: (msg: string) => console.debug(\"[RDKit]\", msg),\n printErr: (msg: string) => console.debug(\"[RDKit]\", msg),\n })\n })()\n\n // Let a failed attempt be retried on the next call rather than caching the\n // rejection forever.\n loadPromise.catch(() => {\n loadPromise = null\n })\n\n return loadPromise\n}\n\n/** Drawing options for {@link moleculeToSvg}. */\nexport interface MoleculeSvgOptions {\n /** Rendered width in pixels. @default 250 */\n width?: number\n /** Rendered height in pixels. @default 200 */\n height?: number\n /** Lighten carbons/bonds so the structure is legible on dark surfaces. */\n dark?: boolean\n /** Optional caption drawn beneath the structure by RDKit. */\n legend?: string\n /**\n * Extra RDKit MolDraw2D options, merged last. See\n * https://www.rdkitjs.com/#drawing-molecules-all-options\n */\n drawOptions?: Record<string, unknown>\n}\n\n/**\n * Render a SMILES string to an SVG string using an initialised RDKit module.\n * Returns `null` when the SMILES cannot be parsed. Frees the underlying C++\n * molecule before returning, so callers never need to.\n *\n * Synchronous by design so it can feed render callbacks that must return a\n * string (e.g. the interactive scatter's `tooltip.content`) — load RDKit ahead\n * of time with {@link loadRDKit} or {@link useRDKit}, then call this.\n */\nexport function moleculeToSvg(\n rdkit: RDKitModule,\n smiles: string,\n options: MoleculeSvgOptions = {},\n): string | null {\n const { width = 250, height = 200, dark = false, legend, drawOptions } = options\n\n const mol = rdkit.get_mol(smiles)\n if (!mol) return null\n\n try {\n if (!mol.is_valid()) return null\n\n const details: Record<string, unknown> = {\n width,\n height,\n // Transparent background so the structure sits on the kit's surface\n // tokens in both light and dark mode.\n backgroundColour: [0, 0, 0, 0],\n ...(legend ? { legend } : {}),\n ...(dark ? { atomColourPalette: DARK_ATOM_PALETTE } : {}),\n ...drawOptions,\n }\n\n // RDKit prefixes an XML prolog (`<?xml …?>`) which is invalid inside inline\n // HTML; strip it so the SVG embeds cleanly whether injected via\n // dangerouslySetInnerHTML or dropped into a chart tooltip string.\n return mol\n .get_svg_with_highlights(JSON.stringify(details))\n .replace(/^\\s*<\\?xml[^>]*\\?>\\s*/i, \"\")\n } finally {\n mol.delete()\n }\n}\n\nconst RGB_MAX = 255\n\n/** Parse a `#rrggbb` string into RDKit's 0–1 RGB triple. */\nfunction hexToRgb01(hex: string): [number, number, number] {\n return [\n parseInt(hex.slice(1, 3), 16) / RGB_MAX,\n parseInt(hex.slice(3, 5), 16) / RGB_MAX,\n parseInt(hex.slice(5, 7), 16) / RGB_MAX,\n ]\n}\n\n/**\n * Atom colours for dark surfaces. RDKit's stock CPK palette (dark blue N, etc.)\n * is too dim on a dark background, so carbons/default are lightened and the\n * common heteroatoms shifted to brighter, higher-contrast hues. Keys are atomic\n * numbers; `-1` is the default for anything unlisted.\n */\nconst DARK_ATOM_HEX: Record<string, string> = {\n \"-1\": \"#e5e5e5\", // default (carbon skeleton)\n \"6\": \"#e5e5e5\", // C\n \"7\": \"#75a1ff\", // N — soft blue (was hard-to-read dark blue)\n \"8\": \"#ff7575\", // O — soft red\n \"9\": \"#8ceb99\", // F\n \"15\": \"#ff9e59\", // P\n \"16\": \"#f2cc59\", // S\n \"17\": \"#8ceb99\", // Cl\n \"35\": \"#e69e73\", // Br\n \"53\": \"#c499f2\", // I\n}\n\nconst DARK_ATOM_PALETTE = Object.fromEntries(\n Object.entries(DARK_ATOM_HEX).map(([key, hex]) => [key, hexToRgb01(hex)]),\n) as Record<string, [number, number, number]>\n"],"names":["defaultConfig","configureRDKit","config","loadPromise","importRDKitFactory","mod","_interopNamespaceDefault","loadRDKit","initRDKitModule","cause","detail","msg","moleculeToSvg","rdkit","smiles","options","width","height","dark","legend","drawOptions","mol","details","DARK_ATOM_PALETTE","RGB_MAX","hexToRgb01","hex","DARK_ATOM_HEX","key"],"mappings":"6VAuDA,MAAMA,EAAmC,CAAA,EAkBlC,SAASC,EAAeC,EAAiC,CAC1DC,GACJ,OAAO,OAAOH,EAAeE,CAAM,CACrC,CAEA,IAAIC,EAA2C,KAG/C,eAAeC,GAA4C,CACzD,MAAMC,EAAO,MAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,QAAO,cAAc,CAAA,CAAA,EAIxC,OAAOD,EAAI,SAAYA,CACzB,CAUO,SAASE,GAAkC,CAChD,OAAIP,EAAc,SACT,QAAQ,QAAQA,EAAc,QAAQ,EAE3CG,IAEJA,GAAe,SAAY,CACzB,GAAI,OAAO,OAAW,KAAe,OAAO,SAAa,IACvD,MAAM,IAAI,MAAM,mDAAmD,EAGrE,IAAIK,EACJ,GAAI,CACFA,EAAkB,MAAOR,EAAc,eAAiBI,GAAA,CAC1D,OAASK,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQ,KAAKA,EAAM,OAAO,IAAM,GAChE,MAAM,IAAI,MACR,8BAA8BC,CAAM,wFAAA,CAGxC,CAOA,OAAOF,EAAgB,CACrB,GAAIR,EAAc,QACd,CAAE,WAAY,IAAMA,EAAc,OAAA,EAClC,CAAA,EACJ,MAAQW,GAAgB,QAAQ,MAAM,UAAWA,CAAG,EACpD,SAAWA,GAAgB,QAAQ,MAAM,UAAWA,CAAG,CAAA,CACxD,CACH,GAAA,EAIAR,EAAY,MAAM,IAAM,CACtBA,EAAc,IAChB,CAAC,EAEMA,EACT,CA4BO,SAASS,EACdC,EACAC,EACAC,EAA8B,CAAA,EACf,CACf,KAAM,CAAE,MAAAC,EAAQ,IAAK,OAAAC,EAAS,IAAK,KAAAC,EAAO,GAAO,OAAAC,EAAQ,YAAAC,CAAA,EAAgBL,EAEnEM,EAAMR,EAAM,QAAQC,CAAM,EAChC,GAAI,CAACO,EAAK,OAAO,KAEjB,GAAI,CACF,GAAI,CAACA,EAAI,SAAA,EAAY,OAAO,KAE5B,MAAMC,EAAmC,CACvC,MAAAN,EACA,OAAAC,EAGA,iBAAkB,CAAC,EAAG,EAAG,EAAG,CAAC,EAC7B,GAAIE,EAAS,CAAE,OAAAA,CAAA,EAAW,CAAA,EAC1B,GAAID,EAAO,CAAE,kBAAmBK,CAAA,EAAsB,CAAA,EACtD,GAAGH,CAAA,EAML,OAAOC,EACJ,wBAAwB,KAAK,UAAUC,CAAO,CAAC,EAC/C,QAAQ,yBAA0B,EAAE,CACzC,QAAA,CACED,EAAI,OAAA,CACN,CACF,CAEA,MAAMG,EAAU,IAGhB,SAASC,EAAWC,EAAuC,CACzD,MAAO,CACL,SAASA,EAAI,MAAM,EAAG,CAAC,EAAG,EAAE,EAAIF,EAChC,SAASE,EAAI,MAAM,EAAG,CAAC,EAAG,EAAE,EAAIF,EAChC,SAASE,EAAI,MAAM,EAAG,CAAC,EAAG,EAAE,EAAIF,CAAA,CAEpC,CAQA,MAAMG,EAAwC,CAC5C,KAAM,UACN,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,SACR,EAEMJ,EAAoB,OAAO,YAC/B,OAAO,QAAQI,CAAa,EAAE,IAAI,CAAC,CAACC,EAAKF,CAAG,IAAM,CAACE,EAAKH,EAAWC,CAAG,CAAC,CAAC,CAC1E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { RDKitModule } from '@rdkit/rdkit';
|
|
2
|
+
/**
|
|
3
|
+
* Loader for the RDKit.js WebAssembly module.
|
|
4
|
+
*
|
|
5
|
+
* RDKit ships a ~6.6 MB `.wasm` blob, so it must never be part of the main
|
|
6
|
+
* bundle. It is loaded lazily, once per page, the first time a molecule
|
|
7
|
+
* actually needs rendering.
|
|
8
|
+
*
|
|
9
|
+
* **Air-gapped by default, no CDN.** The loader dynamically imports the
|
|
10
|
+
* `@rdkit/rdkit` package the consumer has installed — nothing is fetched from a
|
|
11
|
+
* public CDN. Molecule rendering is opt-in: `@rdkit/rdkit` is an optional
|
|
12
|
+
* peer dependency, so a consumer that never renders a structure needn't install
|
|
13
|
+
* it, and one that does simply adds it to their own dependencies.
|
|
14
|
+
*
|
|
15
|
+
* **Bundled apps should set `wasmSrc`.** Without it, RDKit resolves
|
|
16
|
+
* `RDKit_minimal.wasm` relative to the glue script, which a bundler (Vite,
|
|
17
|
+
* webpack, …) usually does not emit next to the output — so the fetch 404s at
|
|
18
|
+
* runtime and the first molecule silently fails to load. Copy the WASM into a
|
|
19
|
+
* served path (or resolve it via your bundler, e.g. Vite's `?url`) and pass it
|
|
20
|
+
* to {@link configureRDKit} once at startup. Alternatively hand the loader a
|
|
21
|
+
* module you initialised yourself (`instance`).
|
|
22
|
+
*
|
|
23
|
+
* @see https://www.rdkitjs.com
|
|
24
|
+
*/
|
|
25
|
+
/** The `initRDKitModule` factory exported by `@rdkit/rdkit`. */
|
|
26
|
+
type RDKitFactory = (options?: {
|
|
27
|
+
locateFile?: () => string;
|
|
28
|
+
print?: (msg: string) => void;
|
|
29
|
+
printErr?: (msg: string) => void;
|
|
30
|
+
}) => Promise<RDKitModule>;
|
|
31
|
+
/** Options controlling how the RDKit module is located and loaded. */
|
|
32
|
+
export interface RDKitLoaderConfig {
|
|
33
|
+
/**
|
|
34
|
+
* URL of the `RDKit_minimal.wasm` binary, passed to RDKit as `locateFile`.
|
|
35
|
+
* Set this when your bundler doesn't serve the WASM next to the glue script
|
|
36
|
+
* (e.g. copy it into your app's public dir and point here). When omitted,
|
|
37
|
+
* RDKit's own default resolution is used.
|
|
38
|
+
*/
|
|
39
|
+
wasmSrc?: string;
|
|
40
|
+
/**
|
|
41
|
+
* A module already initialised by the consumer (e.g. shared with other parts
|
|
42
|
+
* of the app). When provided, no import or network work is done.
|
|
43
|
+
*/
|
|
44
|
+
instance?: RDKitModule;
|
|
45
|
+
/**
|
|
46
|
+
* Override how the `initRDKitModule` factory is obtained. Defaults to
|
|
47
|
+
* `import("@rdkit/rdkit")`. Provide this only for unusual setups (custom
|
|
48
|
+
* bundler resolution, a vendored copy, etc.).
|
|
49
|
+
*/
|
|
50
|
+
importFactory?: () => Promise<RDKitFactory>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Set process-wide defaults for how RDKit is loaded. Call once, before the
|
|
54
|
+
* first molecule renders — typically at app startup. Later calls are ignored
|
|
55
|
+
* once loading has begun.
|
|
56
|
+
*
|
|
57
|
+
* Bundled apps should set `wasmSrc` — see the module doc above for why.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* // Serve the WASM yourself (e.g. copied into /public) — no CDN, air-gapped.
|
|
62
|
+
* configureRDKit({ wasmSrc: "/assets/RDKit_minimal.wasm" })
|
|
63
|
+
* // …or resolve it from the installed package via your bundler (Vite):
|
|
64
|
+
* import wasmSrc from "@rdkit/rdkit/dist/RDKit_minimal.wasm?url"
|
|
65
|
+
* configureRDKit({ wasmSrc })
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function configureRDKit(config: RDKitLoaderConfig): void;
|
|
69
|
+
/**
|
|
70
|
+
* Load and initialise the RDKit module, memoised so the WASM is fetched and
|
|
71
|
+
* compiled only once per page. Safe to call from many components concurrently;
|
|
72
|
+
* they all await the same promise.
|
|
73
|
+
*
|
|
74
|
+
* @throws if run outside a browser, if `@rdkit/rdkit` isn't installed, or if
|
|
75
|
+
* the WASM cannot be loaded.
|
|
76
|
+
*/
|
|
77
|
+
export declare function loadRDKit(): Promise<RDKitModule>;
|
|
78
|
+
/** Drawing options for {@link moleculeToSvg}. */
|
|
79
|
+
export interface MoleculeSvgOptions {
|
|
80
|
+
/** Rendered width in pixels. @default 250 */
|
|
81
|
+
width?: number;
|
|
82
|
+
/** Rendered height in pixels. @default 200 */
|
|
83
|
+
height?: number;
|
|
84
|
+
/** Lighten carbons/bonds so the structure is legible on dark surfaces. */
|
|
85
|
+
dark?: boolean;
|
|
86
|
+
/** Optional caption drawn beneath the structure by RDKit. */
|
|
87
|
+
legend?: string;
|
|
88
|
+
/**
|
|
89
|
+
* Extra RDKit MolDraw2D options, merged last. See
|
|
90
|
+
* https://www.rdkitjs.com/#drawing-molecules-all-options
|
|
91
|
+
*/
|
|
92
|
+
drawOptions?: Record<string, unknown>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Render a SMILES string to an SVG string using an initialised RDKit module.
|
|
96
|
+
* Returns `null` when the SMILES cannot be parsed. Frees the underlying C++
|
|
97
|
+
* molecule before returning, so callers never need to.
|
|
98
|
+
*
|
|
99
|
+
* Synchronous by design so it can feed render callbacks that must return a
|
|
100
|
+
* string (e.g. the interactive scatter's `tooltip.content`) — load RDKit ahead
|
|
101
|
+
* of time with {@link loadRDKit} or {@link useRDKit}, then call this.
|
|
102
|
+
*/
|
|
103
|
+
export declare function moleculeToSvg(rdkit: RDKitModule, smiles: string, options?: MoleculeSvgOptions): string | null;
|
|
104
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const r = {};
|
|
2
|
+
function y(e) {
|
|
3
|
+
n || Object.assign(r, e);
|
|
4
|
+
}
|
|
5
|
+
let n = null;
|
|
6
|
+
async function m() {
|
|
7
|
+
const e = await import("@rdkit/rdkit");
|
|
8
|
+
return e.default ?? e;
|
|
9
|
+
}
|
|
10
|
+
function b() {
|
|
11
|
+
return r.instance ? Promise.resolve(r.instance) : n || (n = (async () => {
|
|
12
|
+
if (typeof window > "u" || typeof document > "u")
|
|
13
|
+
throw new Error("RDKit can only be loaded in a browser environment");
|
|
14
|
+
let e;
|
|
15
|
+
try {
|
|
16
|
+
e = await (r.importFactory ?? m)();
|
|
17
|
+
} catch (t) {
|
|
18
|
+
const o = t instanceof Error ? ` (${t.message})` : "";
|
|
19
|
+
throw new Error(
|
|
20
|
+
`Failed to load @rdkit/rdkit${o}. Install it as a dependency to render molecule structures: \`yarn add @rdkit/rdkit\`.`
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return e({
|
|
24
|
+
...r.wasmSrc ? { locateFile: () => r.wasmSrc } : {},
|
|
25
|
+
print: (t) => console.debug("[RDKit]", t),
|
|
26
|
+
printErr: (t) => console.debug("[RDKit]", t)
|
|
27
|
+
});
|
|
28
|
+
})(), n.catch(() => {
|
|
29
|
+
n = null;
|
|
30
|
+
}), n);
|
|
31
|
+
}
|
|
32
|
+
function R(e, t, o = {}) {
|
|
33
|
+
const { width: l = 250, height: s = 200, dark: d = !1, legend: a, drawOptions: u } = o, i = e.get_mol(t);
|
|
34
|
+
if (!i) return null;
|
|
35
|
+
try {
|
|
36
|
+
if (!i.is_valid()) return null;
|
|
37
|
+
const f = {
|
|
38
|
+
width: l,
|
|
39
|
+
height: s,
|
|
40
|
+
// Transparent background so the structure sits on the kit's surface
|
|
41
|
+
// tokens in both light and dark mode.
|
|
42
|
+
backgroundColour: [0, 0, 0, 0],
|
|
43
|
+
...a ? { legend: a } : {},
|
|
44
|
+
...d ? { atomColourPalette: w } : {},
|
|
45
|
+
...u
|
|
46
|
+
};
|
|
47
|
+
return i.get_svg_with_highlights(JSON.stringify(f)).replace(/^\s*<\?xml[^>]*\?>\s*/i, "");
|
|
48
|
+
} finally {
|
|
49
|
+
i.delete();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const c = 255;
|
|
53
|
+
function g(e) {
|
|
54
|
+
return [
|
|
55
|
+
parseInt(e.slice(1, 3), 16) / c,
|
|
56
|
+
parseInt(e.slice(3, 5), 16) / c,
|
|
57
|
+
parseInt(e.slice(5, 7), 16) / c
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
const p = {
|
|
61
|
+
"-1": "#e5e5e5",
|
|
62
|
+
// default (carbon skeleton)
|
|
63
|
+
6: "#e5e5e5",
|
|
64
|
+
// C
|
|
65
|
+
7: "#75a1ff",
|
|
66
|
+
// N — soft blue (was hard-to-read dark blue)
|
|
67
|
+
8: "#ff7575",
|
|
68
|
+
// O — soft red
|
|
69
|
+
9: "#8ceb99",
|
|
70
|
+
// F
|
|
71
|
+
15: "#ff9e59",
|
|
72
|
+
// P
|
|
73
|
+
16: "#f2cc59",
|
|
74
|
+
// S
|
|
75
|
+
17: "#8ceb99",
|
|
76
|
+
// Cl
|
|
77
|
+
35: "#e69e73",
|
|
78
|
+
// Br
|
|
79
|
+
53: "#c499f2"
|
|
80
|
+
// I
|
|
81
|
+
}, w = Object.fromEntries(
|
|
82
|
+
Object.entries(p).map(([e, t]) => [e, g(t)])
|
|
83
|
+
);
|
|
84
|
+
export {
|
|
85
|
+
y as configureRDKit,
|
|
86
|
+
b as loadRDKit,
|
|
87
|
+
R as moleculeToSvg
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=rdkit-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdkit-loader.js","sources":["../../../../src/components/composed/MoleculeStructure/rdkit-loader.ts"],"sourcesContent":["import type { RDKitModule } from \"@rdkit/rdkit\"\n\n/**\n * Loader for the RDKit.js WebAssembly module.\n *\n * RDKit ships a ~6.6 MB `.wasm` blob, so it must never be part of the main\n * bundle. It is loaded lazily, once per page, the first time a molecule\n * actually needs rendering.\n *\n * **Air-gapped by default, no CDN.** The loader dynamically imports the\n * `@rdkit/rdkit` package the consumer has installed — nothing is fetched from a\n * public CDN. Molecule rendering is opt-in: `@rdkit/rdkit` is an optional\n * peer dependency, so a consumer that never renders a structure needn't install\n * it, and one that does simply adds it to their own dependencies.\n *\n * **Bundled apps should set `wasmSrc`.** Without it, RDKit resolves\n * `RDKit_minimal.wasm` relative to the glue script, which a bundler (Vite,\n * webpack, …) usually does not emit next to the output — so the fetch 404s at\n * runtime and the first molecule silently fails to load. Copy the WASM into a\n * served path (or resolve it via your bundler, e.g. Vite's `?url`) and pass it\n * to {@link configureRDKit} once at startup. Alternatively hand the loader a\n * module you initialised yourself (`instance`).\n *\n * @see https://www.rdkitjs.com\n */\n\n/** The `initRDKitModule` factory exported by `@rdkit/rdkit`. */\ntype RDKitFactory = (options?: {\n locateFile?: () => string\n print?: (msg: string) => void\n printErr?: (msg: string) => void\n}) => Promise<RDKitModule>\n\n/** Options controlling how the RDKit module is located and loaded. */\nexport interface RDKitLoaderConfig {\n /**\n * URL of the `RDKit_minimal.wasm` binary, passed to RDKit as `locateFile`.\n * Set this when your bundler doesn't serve the WASM next to the glue script\n * (e.g. copy it into your app's public dir and point here). When omitted,\n * RDKit's own default resolution is used.\n */\n wasmSrc?: string\n /**\n * A module already initialised by the consumer (e.g. shared with other parts\n * of the app). When provided, no import or network work is done.\n */\n instance?: RDKitModule\n /**\n * Override how the `initRDKitModule` factory is obtained. Defaults to\n * `import(\"@rdkit/rdkit\")`. Provide this only for unusual setups (custom\n * bundler resolution, a vendored copy, etc.).\n */\n importFactory?: () => Promise<RDKitFactory>\n}\n\nconst defaultConfig: RDKitLoaderConfig = {}\n\n/**\n * Set process-wide defaults for how RDKit is loaded. Call once, before the\n * first molecule renders — typically at app startup. Later calls are ignored\n * once loading has begun.\n *\n * Bundled apps should set `wasmSrc` — see the module doc above for why.\n *\n * @example\n * ```ts\n * // Serve the WASM yourself (e.g. copied into /public) — no CDN, air-gapped.\n * configureRDKit({ wasmSrc: \"/assets/RDKit_minimal.wasm\" })\n * // …or resolve it from the installed package via your bundler (Vite):\n * import wasmSrc from \"@rdkit/rdkit/dist/RDKit_minimal.wasm?url\"\n * configureRDKit({ wasmSrc })\n * ```\n */\nexport function configureRDKit(config: RDKitLoaderConfig): void {\n if (loadPromise) return\n Object.assign(defaultConfig, config)\n}\n\nlet loadPromise: Promise<RDKitModule> | null = null\n\n/** Dynamically import the installed `@rdkit/rdkit` and return its factory. */\nasync function importRDKitFactory(): Promise<RDKitFactory> {\n const mod = (await import(\"@rdkit/rdkit\")) as unknown as {\n default?: RDKitFactory\n } & RDKitFactory\n // The package exports the factory as both `module.exports` and `.default`.\n return mod.default ?? (mod as RDKitFactory)\n}\n\n/**\n * Load and initialise the RDKit module, memoised so the WASM is fetched and\n * compiled only once per page. Safe to call from many components concurrently;\n * they all await the same promise.\n *\n * @throws if run outside a browser, if `@rdkit/rdkit` isn't installed, or if\n * the WASM cannot be loaded.\n */\nexport function loadRDKit(): Promise<RDKitModule> {\n if (defaultConfig.instance) {\n return Promise.resolve(defaultConfig.instance)\n }\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n throw new Error(\"RDKit can only be loaded in a browser environment\")\n }\n\n let initRDKitModule: RDKitFactory\n try {\n initRDKitModule = await (defaultConfig.importFactory ?? importRDKitFactory)()\n } catch (cause) {\n const detail = cause instanceof Error ? ` (${cause.message})` : \"\"\n throw new Error(\n `Failed to load @rdkit/rdkit${detail}. Install it as a dependency to ` +\n \"render molecule structures: `yarn add @rdkit/rdkit`.\",\n )\n }\n\n // RDKit is an Emscripten module: its C++ stdout/stderr (including the noisy\n // \"SMILES Parse Error\" it emits for invalid input we handle gracefully)\n // flow through `print`/`printErr`, which default to console.log/error.\n // Route them to console.debug so a bad SMILES never spams the host app's\n // console — invalid input is surfaced through the renderer's fallback UI.\n return initRDKitModule({\n ...(defaultConfig.wasmSrc\n ? { locateFile: () => defaultConfig.wasmSrc as string }\n : {}),\n print: (msg: string) => console.debug(\"[RDKit]\", msg),\n printErr: (msg: string) => console.debug(\"[RDKit]\", msg),\n })\n })()\n\n // Let a failed attempt be retried on the next call rather than caching the\n // rejection forever.\n loadPromise.catch(() => {\n loadPromise = null\n })\n\n return loadPromise\n}\n\n/** Drawing options for {@link moleculeToSvg}. */\nexport interface MoleculeSvgOptions {\n /** Rendered width in pixels. @default 250 */\n width?: number\n /** Rendered height in pixels. @default 200 */\n height?: number\n /** Lighten carbons/bonds so the structure is legible on dark surfaces. */\n dark?: boolean\n /** Optional caption drawn beneath the structure by RDKit. */\n legend?: string\n /**\n * Extra RDKit MolDraw2D options, merged last. See\n * https://www.rdkitjs.com/#drawing-molecules-all-options\n */\n drawOptions?: Record<string, unknown>\n}\n\n/**\n * Render a SMILES string to an SVG string using an initialised RDKit module.\n * Returns `null` when the SMILES cannot be parsed. Frees the underlying C++\n * molecule before returning, so callers never need to.\n *\n * Synchronous by design so it can feed render callbacks that must return a\n * string (e.g. the interactive scatter's `tooltip.content`) — load RDKit ahead\n * of time with {@link loadRDKit} or {@link useRDKit}, then call this.\n */\nexport function moleculeToSvg(\n rdkit: RDKitModule,\n smiles: string,\n options: MoleculeSvgOptions = {},\n): string | null {\n const { width = 250, height = 200, dark = false, legend, drawOptions } = options\n\n const mol = rdkit.get_mol(smiles)\n if (!mol) return null\n\n try {\n if (!mol.is_valid()) return null\n\n const details: Record<string, unknown> = {\n width,\n height,\n // Transparent background so the structure sits on the kit's surface\n // tokens in both light and dark mode.\n backgroundColour: [0, 0, 0, 0],\n ...(legend ? { legend } : {}),\n ...(dark ? { atomColourPalette: DARK_ATOM_PALETTE } : {}),\n ...drawOptions,\n }\n\n // RDKit prefixes an XML prolog (`<?xml …?>`) which is invalid inside inline\n // HTML; strip it so the SVG embeds cleanly whether injected via\n // dangerouslySetInnerHTML or dropped into a chart tooltip string.\n return mol\n .get_svg_with_highlights(JSON.stringify(details))\n .replace(/^\\s*<\\?xml[^>]*\\?>\\s*/i, \"\")\n } finally {\n mol.delete()\n }\n}\n\nconst RGB_MAX = 255\n\n/** Parse a `#rrggbb` string into RDKit's 0–1 RGB triple. */\nfunction hexToRgb01(hex: string): [number, number, number] {\n return [\n parseInt(hex.slice(1, 3), 16) / RGB_MAX,\n parseInt(hex.slice(3, 5), 16) / RGB_MAX,\n parseInt(hex.slice(5, 7), 16) / RGB_MAX,\n ]\n}\n\n/**\n * Atom colours for dark surfaces. RDKit's stock CPK palette (dark blue N, etc.)\n * is too dim on a dark background, so carbons/default are lightened and the\n * common heteroatoms shifted to brighter, higher-contrast hues. Keys are atomic\n * numbers; `-1` is the default for anything unlisted.\n */\nconst DARK_ATOM_HEX: Record<string, string> = {\n \"-1\": \"#e5e5e5\", // default (carbon skeleton)\n \"6\": \"#e5e5e5\", // C\n \"7\": \"#75a1ff\", // N — soft blue (was hard-to-read dark blue)\n \"8\": \"#ff7575\", // O — soft red\n \"9\": \"#8ceb99\", // F\n \"15\": \"#ff9e59\", // P\n \"16\": \"#f2cc59\", // S\n \"17\": \"#8ceb99\", // Cl\n \"35\": \"#e69e73\", // Br\n \"53\": \"#c499f2\", // I\n}\n\nconst DARK_ATOM_PALETTE = Object.fromEntries(\n Object.entries(DARK_ATOM_HEX).map(([key, hex]) => [key, hexToRgb01(hex)]),\n) as Record<string, [number, number, number]>\n"],"names":["defaultConfig","configureRDKit","config","loadPromise","importRDKitFactory","mod","loadRDKit","initRDKitModule","cause","detail","msg","moleculeToSvg","rdkit","smiles","options","width","height","dark","legend","drawOptions","mol","details","DARK_ATOM_PALETTE","RGB_MAX","hexToRgb01","hex","DARK_ATOM_HEX","key"],"mappings":"AAuDA,MAAMA,IAAmC,CAAA;AAkBlC,SAASC,EAAeC,GAAiC;AAC9D,EAAIC,KACJ,OAAO,OAAOH,GAAeE,CAAM;AACrC;AAEA,IAAIC,IAA2C;AAG/C,eAAeC,IAA4C;AACzD,QAAMC,IAAO,MAAM,OAAO,cAAc;AAIxC,SAAOA,EAAI,WAAYA;AACzB;AAUO,SAASC,IAAkC;AAChD,SAAIN,EAAc,WACT,QAAQ,QAAQA,EAAc,QAAQ,IAE3CG,MAEJA,KAAe,YAAY;AACzB,QAAI,OAAO,SAAW,OAAe,OAAO,WAAa;AACvD,YAAM,IAAI,MAAM,mDAAmD;AAGrE,QAAII;AACJ,QAAI;AACF,MAAAA,IAAkB,OAAOP,EAAc,iBAAiBI,GAAA;AAAA,IAC1D,SAASI,GAAO;AACd,YAAMC,IAASD,aAAiB,QAAQ,KAAKA,EAAM,OAAO,MAAM;AAChE,YAAM,IAAI;AAAA,QACR,8BAA8BC,CAAM;AAAA,MAAA;AAAA,IAGxC;AAOA,WAAOF,EAAgB;AAAA,MACrB,GAAIP,EAAc,UACd,EAAE,YAAY,MAAMA,EAAc,QAAA,IAClC,CAAA;AAAA,MACJ,OAAO,CAACU,MAAgB,QAAQ,MAAM,WAAWA,CAAG;AAAA,MACpD,UAAU,CAACA,MAAgB,QAAQ,MAAM,WAAWA,CAAG;AAAA,IAAA,CACxD;AAAA,EACH,GAAA,GAIAP,EAAY,MAAM,MAAM;AACtB,IAAAA,IAAc;AAAA,EAChB,CAAC,GAEMA;AACT;AA4BO,SAASQ,EACdC,GACAC,GACAC,IAA8B,CAAA,GACf;AACf,QAAM,EAAE,OAAAC,IAAQ,KAAK,QAAAC,IAAS,KAAK,MAAAC,IAAO,IAAO,QAAAC,GAAQ,aAAAC,EAAA,IAAgBL,GAEnEM,IAAMR,EAAM,QAAQC,CAAM;AAChC,MAAI,CAACO,EAAK,QAAO;AAEjB,MAAI;AACF,QAAI,CAACA,EAAI,SAAA,EAAY,QAAO;AAE5B,UAAMC,IAAmC;AAAA,MACvC,OAAAN;AAAA,MACA,QAAAC;AAAA;AAAA;AAAA,MAGA,kBAAkB,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MAC7B,GAAIE,IAAS,EAAE,QAAAA,EAAA,IAAW,CAAA;AAAA,MAC1B,GAAID,IAAO,EAAE,mBAAmBK,EAAA,IAAsB,CAAA;AAAA,MACtD,GAAGH;AAAA,IAAA;AAML,WAAOC,EACJ,wBAAwB,KAAK,UAAUC,CAAO,CAAC,EAC/C,QAAQ,0BAA0B,EAAE;AAAA,EACzC,UAAA;AACE,IAAAD,EAAI,OAAA;AAAA,EACN;AACF;AAEA,MAAMG,IAAU;AAGhB,SAASC,EAAWC,GAAuC;AACzD,SAAO;AAAA,IACL,SAASA,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAIF;AAAA,IAChC,SAASE,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAIF;AAAA,IAChC,SAASE,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAIF;AAAA,EAAA;AAEpC;AAQA,MAAMG,IAAwC;AAAA,EAC5C,MAAM;AAAA;AAAA,EACN,GAAK;AAAA;AAAA,EACL,GAAK;AAAA;AAAA,EACL,GAAK;AAAA;AAAA,EACL,GAAK;AAAA;AAAA,EACL,IAAM;AAAA;AAAA,EACN,IAAM;AAAA;AAAA,EACN,IAAM;AAAA;AAAA,EACN,IAAM;AAAA;AAAA,EACN,IAAM;AAAA;AACR,GAEMJ,IAAoB,OAAO;AAAA,EAC/B,OAAO,QAAQI,CAAa,EAAE,IAAI,CAAC,CAACC,GAAKF,CAAG,MAAM,CAACE,GAAKH,EAAWC,CAAG,CAAC,CAAC;AAC1E;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),c=require("./rdkit-loader.cjs");function l(){const[o,s]=e.useState(null),[u,n]=e.useState("loading"),[i,a]=e.useState(null);return e.useEffect(()=>{let r=!1;return c.loadRDKit().then(t=>{r||(s(t),n("ready"))}).catch(t=>{r||(a(t instanceof Error?t:new Error(String(t))),n("error"))}),()=>{r=!0}},[]),{rdkit:o,status:u,error:i}}exports.useRDKit=l;
|
|
2
|
+
//# sourceMappingURL=use-rdkit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-rdkit.cjs","sources":["../../../../src/components/composed/MoleculeStructure/use-rdkit.ts"],"sourcesContent":["import { useEffect, useState } from \"react\"\n\nimport { loadRDKit } from \"./rdkit-loader\"\n\nimport type { RDKitModule } from \"@rdkit/rdkit\"\n\n/** Lifecycle of the lazily-loaded RDKit module. */\nexport type RDKitStatus = \"loading\" | \"ready\" | \"error\"\n\nexport interface UseRDKitResult {\n /** The initialised module, or `null` until it is ready. */\n rdkit: RDKitModule | null\n status: RDKitStatus\n /** The load failure, if `status` is `\"error\"`. */\n error: Error | null\n}\n\n/**\n * Lazily load the RDKit WASM module and track its status. The module is a\n * page-wide singleton, so mounting many molecule components triggers only one\n * download.\n *\n * Use this when you need RDKit available synchronously inside a callback — for\n * example feeding the interactive scatter's `tooltip.content`, which must\n * return a string. For a single structure, prefer the `MoleculeStructure`\n * component, which wraps this hook.\n *\n * @example\n * ```tsx\n * const { rdkit, status } = useRDKit()\n * // ...\n * content: (point) =>\n * rdkit ? moleculeToSvg(rdkit, point.meta.smiles) ?? \"\" : \"Loading…\"\n * ```\n */\nexport function useRDKit(): UseRDKitResult {\n const [rdkit, setRdkit] = useState<RDKitModule | null>(null)\n const [status, setStatus] = useState<RDKitStatus>(\"loading\")\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n let cancelled = false\n\n loadRDKit()\n .then((module) => {\n if (cancelled) return\n setRdkit(module)\n setStatus(\"ready\")\n })\n .catch((cause: unknown) => {\n if (cancelled) return\n setError(cause instanceof Error ? cause : new Error(String(cause)))\n setStatus(\"error\")\n })\n\n return () => {\n cancelled = true\n }\n }, [])\n\n return { rdkit, status, error }\n}\n"],"names":["useRDKit","rdkit","setRdkit","useState","status","setStatus","error","setError","useEffect","cancelled","loadRDKit","module","cause"],"mappings":"yIAmCO,SAASA,GAA2B,CACzC,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EACrD,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAsB,SAAS,EACrD,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAuB,IAAI,EAErDK,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAY,GAEhBC,OAAAA,YAAA,EACG,KAAMC,GAAW,CACZF,IACJP,EAASS,CAAM,EACfN,EAAU,OAAO,EACnB,CAAC,EACA,MAAOO,GAAmB,CACrBH,IACJF,EAASK,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,CAAC,EAClEP,EAAU,OAAO,EACnB,CAAC,EAEI,IAAM,CACXI,EAAY,EACd,CACF,EAAG,CAAA,CAAE,EAEE,CAAE,MAAAR,EAAO,OAAAG,EAAQ,MAAAE,CAAA,CAC1B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RDKitModule } from '@rdkit/rdkit';
|
|
2
|
+
/** Lifecycle of the lazily-loaded RDKit module. */
|
|
3
|
+
export type RDKitStatus = "loading" | "ready" | "error";
|
|
4
|
+
export interface UseRDKitResult {
|
|
5
|
+
/** The initialised module, or `null` until it is ready. */
|
|
6
|
+
rdkit: RDKitModule | null;
|
|
7
|
+
status: RDKitStatus;
|
|
8
|
+
/** The load failure, if `status` is `"error"`. */
|
|
9
|
+
error: Error | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Lazily load the RDKit WASM module and track its status. The module is a
|
|
13
|
+
* page-wide singleton, so mounting many molecule components triggers only one
|
|
14
|
+
* download.
|
|
15
|
+
*
|
|
16
|
+
* Use this when you need RDKit available synchronously inside a callback — for
|
|
17
|
+
* example feeding the interactive scatter's `tooltip.content`, which must
|
|
18
|
+
* return a string. For a single structure, prefer the `MoleculeStructure`
|
|
19
|
+
* component, which wraps this hook.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const { rdkit, status } = useRDKit()
|
|
24
|
+
* // ...
|
|
25
|
+
* content: (point) =>
|
|
26
|
+
* rdkit ? moleculeToSvg(rdkit, point.meta.smiles) ?? "" : "Loading…"
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function useRDKit(): UseRDKitResult;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useState as e, useEffect as f } from "react";
|
|
2
|
+
import { loadRDKit as a } from "./rdkit-loader.js";
|
|
3
|
+
function m() {
|
|
4
|
+
const [o, i] = e(null), [s, n] = e("loading"), [u, l] = e(null);
|
|
5
|
+
return f(() => {
|
|
6
|
+
let t = !1;
|
|
7
|
+
return a().then((r) => {
|
|
8
|
+
t || (i(r), n("ready"));
|
|
9
|
+
}).catch((r) => {
|
|
10
|
+
t || (l(r instanceof Error ? r : new Error(String(r))), n("error"));
|
|
11
|
+
}), () => {
|
|
12
|
+
t = !0;
|
|
13
|
+
};
|
|
14
|
+
}, []), { rdkit: o, status: s, error: u };
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
m as useRDKit
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=use-rdkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-rdkit.js","sources":["../../../../src/components/composed/MoleculeStructure/use-rdkit.ts"],"sourcesContent":["import { useEffect, useState } from \"react\"\n\nimport { loadRDKit } from \"./rdkit-loader\"\n\nimport type { RDKitModule } from \"@rdkit/rdkit\"\n\n/** Lifecycle of the lazily-loaded RDKit module. */\nexport type RDKitStatus = \"loading\" | \"ready\" | \"error\"\n\nexport interface UseRDKitResult {\n /** The initialised module, or `null` until it is ready. */\n rdkit: RDKitModule | null\n status: RDKitStatus\n /** The load failure, if `status` is `\"error\"`. */\n error: Error | null\n}\n\n/**\n * Lazily load the RDKit WASM module and track its status. The module is a\n * page-wide singleton, so mounting many molecule components triggers only one\n * download.\n *\n * Use this when you need RDKit available synchronously inside a callback — for\n * example feeding the interactive scatter's `tooltip.content`, which must\n * return a string. For a single structure, prefer the `MoleculeStructure`\n * component, which wraps this hook.\n *\n * @example\n * ```tsx\n * const { rdkit, status } = useRDKit()\n * // ...\n * content: (point) =>\n * rdkit ? moleculeToSvg(rdkit, point.meta.smiles) ?? \"\" : \"Loading…\"\n * ```\n */\nexport function useRDKit(): UseRDKitResult {\n const [rdkit, setRdkit] = useState<RDKitModule | null>(null)\n const [status, setStatus] = useState<RDKitStatus>(\"loading\")\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n let cancelled = false\n\n loadRDKit()\n .then((module) => {\n if (cancelled) return\n setRdkit(module)\n setStatus(\"ready\")\n })\n .catch((cause: unknown) => {\n if (cancelled) return\n setError(cause instanceof Error ? cause : new Error(String(cause)))\n setStatus(\"error\")\n })\n\n return () => {\n cancelled = true\n }\n }, [])\n\n return { rdkit, status, error }\n}\n"],"names":["useRDKit","rdkit","setRdkit","useState","status","setStatus","error","setError","useEffect","cancelled","loadRDKit","module","cause"],"mappings":";;AAmCO,SAASA,IAA2B;AACzC,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAA6B,IAAI,GACrD,CAACC,GAAQC,CAAS,IAAIF,EAAsB,SAAS,GACrD,CAACG,GAAOC,CAAQ,IAAIJ,EAAuB,IAAI;AAErD,SAAAK,EAAU,MAAM;AACd,QAAIC,IAAY;AAEhB,WAAAC,EAAA,EACG,KAAK,CAACC,MAAW;AAChB,MAAIF,MACJP,EAASS,CAAM,GACfN,EAAU,OAAO;AAAA,IACnB,CAAC,EACA,MAAM,CAACO,MAAmB;AACzB,MAAIH,MACJF,EAASK,aAAiB,QAAQA,IAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,CAAC,GAClEP,EAAU,OAAO;AAAA,IACnB,CAAC,GAEI,MAAM;AACX,MAAAI,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAA,CAAE,GAEE,EAAE,OAAAR,GAAO,QAAAG,GAAQ,OAAAE,EAAA;AAC1B;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("lucide-react"),u=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("lucide-react"),u=require("../../../ui/button.cjs"),w=require("../../../ui/input.cjs"),h=require("../../../ui/popover.cjs"),l=require("../../../ui/select.cjs"),z=require("../../../lib/utils.cjs"),F={contains:"contains",equals:"equals",not_equals:"not equals",starts_with:"starts with",ends_with:"ends with",is_empty:"is empty",is_not_empty:"is not empty"},P=["is_empty","is_not_empty"],f=["contains","equals","not_equals","starts_with","ends_with","is_empty","is_not_empty"];function R(n,d){const a=d?.[0]??"contains";return{id:crypto.randomUUID(),columnId:n,operator:a,value:""}}function O({columns:n,columnLabel:d,filters:a,onFiltersChange:i,triggerLabel:m="Filter",className:g}){const _=t=>d?.(t)??t,v=n[0],y=v?.columnId??"",C=()=>i([...a,R(y,v?.operators)]),I=t=>i(a.filter(c=>c.id!==t)),p=(t,c)=>i(a.map(r=>r.id===t?{...r,...c}:r)),N=()=>i([]),o=a.length;return e.jsxs(h.Popover,{children:[e.jsx(h.PopoverTrigger,{asChild:!0,children:e.jsxs(u.Button,{type:"button",variant:"outline",size:"sm","data-slot":"manifest-filter",className:z.cn(g),"aria-label":o>0?`${m} (${o} active)`:m,children:[e.jsx(x.ListFilterIcon,{className:"size-3.5"}),m,o>0?e.jsx("span",{className:"flex size-4 items-center justify-center rounded-full bg-primary text-[10px] font-medium text-primary-foreground",children:o}):null]})}),e.jsx(h.PopoverContent,{align:"end",className:"min-w-80","aria-label":"Filter conditions",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[a.map(t=>{const r=n.find(s=>s.columnId===t.columnId)?.operators??f,S=P.includes(t.operator);return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(l.Select,{value:t.columnId,onValueChange:s=>{const j=n.find(q=>q.columnId===s)?.operators??f,b=j.includes(t.operator)?t.operator:j[0]??"contains";p(t.id,{columnId:s,operator:b,value:""})},children:[e.jsx(l.SelectTrigger,{"aria-label":"Filter column",size:"sm",className:"w-36",children:e.jsx(l.SelectValue,{})}),e.jsx(l.SelectContent,{children:n.map(s=>e.jsx(l.SelectItem,{value:s.columnId,children:s.label??_(s.columnId)},s.columnId))})]}),e.jsxs(l.Select,{value:t.operator,onValueChange:s=>p(t.id,{operator:s,value:""}),children:[e.jsx(l.SelectTrigger,{"aria-label":"Filter operator",size:"sm",className:"w-32",children:e.jsx(l.SelectValue,{})}),e.jsx(l.SelectContent,{children:r.map(s=>e.jsx(l.SelectItem,{value:s,children:F[s]},s))})]}),S?e.jsx("div",{className:"h-8 w-40","aria-hidden":!0}):e.jsx(w.Input,{className:"w-40",placeholder:"Value…",value:t.value,onChange:s=>p(t.id,{value:s.target.value})}),e.jsx(u.Button,{type:"button",variant:"ghost",size:"icon",className:"size-8 shrink-0 text-muted-foreground hover:text-foreground",onClick:()=>I(t.id),"aria-label":"Remove filter",children:e.jsx(x.XIcon,{className:"size-3.5"})})]},t.id)}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(u.Button,{type:"button",variant:"outline",size:"sm",onClick:C,disabled:n.length===0,children:[e.jsx(x.PlusIcon,{className:"size-3.5"}),"Add filter"]}),a.length>0?e.jsx(u.Button,{type:"button",variant:"ghost",size:"sm",className:"text-muted-foreground",onClick:N,children:"Clear all"}):null]})]})})]})}exports.ManifestFilterPopover=O;
|
|
2
2
|
//# sourceMappingURL=ManifestFilterPopover.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManifestFilterPopover.cjs","sources":["../../../../src/components/composed/PlateMapEditor/ManifestFilterPopover.tsx"],"sourcesContent":["import { ListFilterIcon, PlusIcon, XIcon } from \"lucide-react\";\n\nimport type { FilterColumnConfig, FilterCondition, FilterOperator } from \"@/components/ui/data-table/data-table\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";\nimport { cn } from \"@/lib/utils\";\n\nconst OPERATOR_LABELS: Record<FilterOperator, string> = {\n contains: \"contains\",\n equals: \"equals\",\n not_equals: \"not equals\",\n starts_with: \"starts with\",\n ends_with: \"ends with\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n};\n\nconst VALUE_FREE_OPERATORS: FilterOperator[] = [\"is_empty\", \"is_not_empty\"];\n\nconst DEFAULT_OPERATORS: FilterOperator[] = [\n \"contains\",\n \"equals\",\n \"not_equals\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n];\n\nfunction makeCondition(columnId: string, allowedOperators?: FilterOperator[]): FilterCondition {\n const operator = allowedOperators?.[0] ?? \"contains\";\n return { id: crypto.randomUUID(), columnId, operator, value: \"\" };\n}\n\nexport interface ManifestFilterPopoverProps {\n /** Filterable columns. Operator subsets can be specified per column. */\n columns: FilterColumnConfig[];\n /** Column id → display label resolver. */\n columnLabel?: (columnId: string) => string;\n filters: FilterCondition[];\n onFiltersChange: (next: FilterCondition[]) => void;\n triggerLabel?: string;\n className?: string;\n}\n\nexport function ManifestFilterPopover({\n columns,\n columnLabel,\n filters,\n onFiltersChange,\n triggerLabel = \"Filter\",\n className,\n}: ManifestFilterPopoverProps) {\n const labelFor = (columnId: string): string => columnLabel?.(columnId) ?? columnId;\n const firstColumn = columns[0];\n const firstColumnId = firstColumn?.columnId ?? \"\";\n\n const addFilter = () => onFiltersChange([...filters, makeCondition(firstColumnId, firstColumn?.operators)]);\n const removeFilter = (id: string) => onFiltersChange(filters.filter((cond) => cond.id !== id));\n const updateFilter = (id: string, patch: Partial<FilterCondition>) =>\n onFiltersChange(filters.map((cond) => (cond.id === id ? { ...cond, ...patch } : cond)));\n const clearAll = () => onFiltersChange([]);\n\n const activeCount = filters.length;\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n data-slot=\"manifest-filter\"\n className={cn(className)}\n aria-label={activeCount > 0 ? `${triggerLabel} (${activeCount} active)` : triggerLabel}\n >\n <ListFilterIcon className=\"size-3.5\" />\n {triggerLabel}\n {activeCount > 0 ? (\n <span className=\"flex size-4 items-center justify-center rounded-full bg-primary text-[10px] font-medium text-primary-foreground\">\n {activeCount}\n </span>\n ) : null}\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"end\" className=\"min-w-80\">\n <div className=\"flex flex-col gap-2\">\n {filters.map((condition) => {\n const colConfig = columns.find((c) => c.columnId === condition.columnId);\n const operators = colConfig?.operators ?? DEFAULT_OPERATORS;\n const isValueFree = VALUE_FREE_OPERATORS.includes(condition.operator);\n return (\n <div key={condition.id} className=\"flex items-center gap-2\">\n <Select\n value={condition.columnId}\n onValueChange={(value) => {\n const nextConfig = columns.find((c) => c.columnId === value);\n const nextOperators = nextConfig?.operators ?? DEFAULT_OPERATORS;\n const nextOperator = nextOperators.includes(condition.operator)\n ? condition.operator\n : (nextOperators[0] ?? \"contains\");\n updateFilter(condition.id, { columnId: value, operator: nextOperator, value: \"\" });\n }}\n >\n <SelectTrigger size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {columns.map((c) => (\n <SelectItem key={c.columnId} value={c.columnId}>\n {c.label ?? labelFor(c.columnId)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={condition.operator}\n onValueChange={(value) =>\n updateFilter(condition.id, { operator: value as FilterOperator, value: \"\" })\n }\n >\n <SelectTrigger size=\"sm\" className=\"w-32\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op} value={op}>\n {OPERATOR_LABELS[op]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {isValueFree ? (\n <div className=\"h-8 w-40\" aria-hidden />\n ) : (\n <Input\n className=\"w-40\"\n placeholder=\"Value…\"\n value={condition.value}\n onChange={(event) => updateFilter(condition.id, { value: event.target.value })}\n />\n )}\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => removeFilter(condition.id)}\n aria-label=\"Remove filter\"\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n </div>\n );\n })}\n\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={addFilter}\n disabled={columns.length === 0}\n >\n <PlusIcon className=\"size-3.5\" />\n Add filter\n </Button>\n {filters.length > 0 ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-muted-foreground\"\n onClick={clearAll}\n >\n Clear all\n </Button>\n ) : null}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"names":["OPERATOR_LABELS","VALUE_FREE_OPERATORS","DEFAULT_OPERATORS","makeCondition","columnId","allowedOperators","operator","ManifestFilterPopover","columns","columnLabel","filters","onFiltersChange","triggerLabel","className","labelFor","firstColumn","firstColumnId","addFilter","removeFilter","id","cond","updateFilter","patch","clearAll","activeCount","Popover","jsx","PopoverTrigger","jsxs","Button","cn","ListFilterIcon","PopoverContent","condition","operators","c","isValueFree","Select","value","nextOperators","nextOperator","SelectTrigger","SelectValue","SelectContent","SelectItem","op","Input","event","XIcon","PlusIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ManifestFilterPopover.cjs","sources":["../../../../src/components/composed/PlateMapEditor/ManifestFilterPopover.tsx"],"sourcesContent":["import { ListFilterIcon, PlusIcon, XIcon } from \"lucide-react\";\n\nimport type { FilterColumnConfig, FilterCondition, FilterOperator } from \"@/components/ui/data-table/data-table\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";\nimport { cn } from \"@/lib/utils\";\n\nconst OPERATOR_LABELS: Record<FilterOperator, string> = {\n contains: \"contains\",\n equals: \"equals\",\n not_equals: \"not equals\",\n starts_with: \"starts with\",\n ends_with: \"ends with\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n};\n\nconst VALUE_FREE_OPERATORS: FilterOperator[] = [\"is_empty\", \"is_not_empty\"];\n\nconst DEFAULT_OPERATORS: FilterOperator[] = [\n \"contains\",\n \"equals\",\n \"not_equals\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n];\n\nfunction makeCondition(columnId: string, allowedOperators?: FilterOperator[]): FilterCondition {\n const operator = allowedOperators?.[0] ?? \"contains\";\n return { id: crypto.randomUUID(), columnId, operator, value: \"\" };\n}\n\nexport interface ManifestFilterPopoverProps {\n /** Filterable columns. Operator subsets can be specified per column. */\n columns: FilterColumnConfig[];\n /** Column id → display label resolver. */\n columnLabel?: (columnId: string) => string;\n filters: FilterCondition[];\n onFiltersChange: (next: FilterCondition[]) => void;\n triggerLabel?: string;\n className?: string;\n}\n\nexport function ManifestFilterPopover({\n columns,\n columnLabel,\n filters,\n onFiltersChange,\n triggerLabel = \"Filter\",\n className,\n}: ManifestFilterPopoverProps) {\n const labelFor = (columnId: string): string => columnLabel?.(columnId) ?? columnId;\n const firstColumn = columns[0];\n const firstColumnId = firstColumn?.columnId ?? \"\";\n\n const addFilter = () => onFiltersChange([...filters, makeCondition(firstColumnId, firstColumn?.operators)]);\n const removeFilter = (id: string) => onFiltersChange(filters.filter((cond) => cond.id !== id));\n const updateFilter = (id: string, patch: Partial<FilterCondition>) =>\n onFiltersChange(filters.map((cond) => (cond.id === id ? { ...cond, ...patch } : cond)));\n const clearAll = () => onFiltersChange([]);\n\n const activeCount = filters.length;\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n data-slot=\"manifest-filter\"\n className={cn(className)}\n aria-label={activeCount > 0 ? `${triggerLabel} (${activeCount} active)` : triggerLabel}\n >\n <ListFilterIcon className=\"size-3.5\" />\n {triggerLabel}\n {activeCount > 0 ? (\n <span className=\"flex size-4 items-center justify-center rounded-full bg-primary text-[10px] font-medium text-primary-foreground\">\n {activeCount}\n </span>\n ) : null}\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"end\" className=\"min-w-80\" aria-label=\"Filter conditions\">\n <div className=\"flex flex-col gap-2\">\n {filters.map((condition) => {\n const colConfig = columns.find((c) => c.columnId === condition.columnId);\n const operators = colConfig?.operators ?? DEFAULT_OPERATORS;\n const isValueFree = VALUE_FREE_OPERATORS.includes(condition.operator);\n return (\n <div key={condition.id} className=\"flex items-center gap-2\">\n <Select\n value={condition.columnId}\n onValueChange={(value) => {\n const nextConfig = columns.find((c) => c.columnId === value);\n const nextOperators = nextConfig?.operators ?? DEFAULT_OPERATORS;\n const nextOperator = nextOperators.includes(condition.operator)\n ? condition.operator\n : (nextOperators[0] ?? \"contains\");\n updateFilter(condition.id, { columnId: value, operator: nextOperator, value: \"\" });\n }}\n >\n <SelectTrigger aria-label=\"Filter column\" size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {columns.map((c) => (\n <SelectItem key={c.columnId} value={c.columnId}>\n {c.label ?? labelFor(c.columnId)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={condition.operator}\n onValueChange={(value) =>\n updateFilter(condition.id, { operator: value as FilterOperator, value: \"\" })\n }\n >\n <SelectTrigger aria-label=\"Filter operator\" size=\"sm\" className=\"w-32\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op} value={op}>\n {OPERATOR_LABELS[op]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {isValueFree ? (\n <div className=\"h-8 w-40\" aria-hidden />\n ) : (\n <Input\n className=\"w-40\"\n placeholder=\"Value…\"\n value={condition.value}\n onChange={(event) => updateFilter(condition.id, { value: event.target.value })}\n />\n )}\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={() => removeFilter(condition.id)}\n aria-label=\"Remove filter\"\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n </div>\n );\n })}\n\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={addFilter}\n disabled={columns.length === 0}\n >\n <PlusIcon className=\"size-3.5\" />\n Add filter\n </Button>\n {filters.length > 0 ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-muted-foreground\"\n onClick={clearAll}\n >\n Clear all\n </Button>\n ) : null}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"names":["OPERATOR_LABELS","VALUE_FREE_OPERATORS","DEFAULT_OPERATORS","makeCondition","columnId","allowedOperators","operator","ManifestFilterPopover","columns","columnLabel","filters","onFiltersChange","triggerLabel","className","labelFor","firstColumn","firstColumnId","addFilter","removeFilter","id","cond","updateFilter","patch","clearAll","activeCount","Popover","jsx","PopoverTrigger","jsxs","Button","cn","ListFilterIcon","PopoverContent","condition","operators","c","isValueFree","Select","value","nextOperators","nextOperator","SelectTrigger","SelectValue","SelectContent","SelectItem","op","Input","event","XIcon","PlusIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FilterColumnConfig, FilterCondition } from '../../ui/data-table/data-table';
|
|
2
|
+
export interface ManifestFilterPopoverProps {
|
|
3
|
+
/** Filterable columns. Operator subsets can be specified per column. */
|
|
4
|
+
columns: FilterColumnConfig[];
|
|
5
|
+
/** Column id → display label resolver. */
|
|
6
|
+
columnLabel?: (columnId: string) => string;
|
|
7
|
+
filters: FilterCondition[];
|
|
8
|
+
onFiltersChange: (next: FilterCondition[]) => void;
|
|
9
|
+
triggerLabel?: string;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function ManifestFilterPopover({ columns, columnLabel, filters, onFiltersChange, triggerLabel, className, }: ManifestFilterPopoverProps): import("react/jsx-runtime").JSX.Element;
|