@langchain/macaw-components 1.0.0-beta.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/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/_chunks/ErrorState-CmPX01HV.js +13361 -0
- package/dist/_chunks/ErrorState-CmPX01HV.js.map +1 -0
- package/dist/_chunks/LoadingIndicator-DgtU9aqD.js +80 -0
- package/dist/_chunks/LoadingIndicator-DgtU9aqD.js.map +1 -0
- package/dist/base.css +305 -0
- package/dist/catalog.json +1675 -0
- package/dist/components/Avatar/Avatar.d.ts +28 -0
- package/dist/components/Avatar/Avatar.js +47 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +2 -0
- package/dist/components/Avatar/index.js +2 -0
- package/dist/components/Badge/Badge.d.ts +25 -0
- package/dist/components/Badge/Badge.js +82 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/index.d.ts +2 -0
- package/dist/components/Badge/index.js +2 -0
- package/dist/components/Banner/Banner.d.ts +15 -0
- package/dist/components/Banner/Banner.js +102 -0
- package/dist/components/Banner/Banner.js.map +1 -0
- package/dist/components/Banner/index.d.ts +2 -0
- package/dist/components/Banner/index.js +2 -0
- package/dist/components/BarChart/AnimatedBar.d.ts +20 -0
- package/dist/components/BarChart/AnimatedBar.js +65 -0
- package/dist/components/BarChart/AnimatedBar.js.map +1 -0
- package/dist/components/BarChart/BarChart.d.ts +25 -0
- package/dist/components/BarChart/BarChart.js +248 -0
- package/dist/components/BarChart/BarChart.js.map +1 -0
- package/dist/components/BarChart/BarChart.types.d.ts +239 -0
- package/dist/components/BarChart/BarChart.types.js +0 -0
- package/dist/components/BarChart/BarChart.utils.d.ts +51 -0
- package/dist/components/BarChart/BarChart.utils.js +215 -0
- package/dist/components/BarChart/BarChart.utils.js.map +1 -0
- package/dist/components/BarChart/BarChartAxes.d.ts +22 -0
- package/dist/components/BarChart/BarChartAxes.js +144 -0
- package/dist/components/BarChart/BarChartAxes.js.map +1 -0
- package/dist/components/BarChart/BarChartGuides.d.ts +22 -0
- package/dist/components/BarChart/BarChartGuides.js +83 -0
- package/dist/components/BarChart/BarChartGuides.js.map +1 -0
- package/dist/components/BarChart/BarChartPlot.d.ts +40 -0
- package/dist/components/BarChart/BarChartPlot.js +262 -0
- package/dist/components/BarChart/BarChartPlot.js.map +1 -0
- package/dist/components/BarChart/constants.d.ts +21 -0
- package/dist/components/BarChart/constants.js +26 -0
- package/dist/components/BarChart/constants.js.map +1 -0
- package/dist/components/BarChart/index.d.ts +3 -0
- package/dist/components/BarChart/index.js +3 -0
- package/dist/components/Button/Button.d.ts +36 -0
- package/dist/components/Button/Button.js +99 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/constants.d.ts +26 -0
- package/dist/components/Button/constants.js +31 -0
- package/dist/components/Button/constants.js.map +1 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Button/index.js +2 -0
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +30 -0
- package/dist/components/ButtonGroup/ButtonGroup.js +26 -0
- package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/dist/components/ButtonGroup/index.d.ts +2 -0
- package/dist/components/ButtonGroup/index.js +2 -0
- package/dist/components/Card/Card.d.ts +10 -0
- package/dist/components/Card/Card.js +23 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/index.d.ts +2 -0
- package/dist/components/Card/index.js +2 -0
- package/dist/components/ChartCard/ChartCard.d.ts +53 -0
- package/dist/components/ChartCard/ChartCard.js +172 -0
- package/dist/components/ChartCard/ChartCard.js.map +1 -0
- package/dist/components/ChartCard/ChartCardSkeleton.d.ts +7 -0
- package/dist/components/ChartCard/ChartCardSkeleton.js +61 -0
- package/dist/components/ChartCard/ChartCardSkeleton.js.map +1 -0
- package/dist/components/ChartCard/index.d.ts +4 -0
- package/dist/components/ChartCard/index.js +3 -0
- package/dist/components/ChartLegend/ChartLegend.d.ts +19 -0
- package/dist/components/ChartLegend/ChartLegend.js +195 -0
- package/dist/components/ChartLegend/ChartLegend.js.map +1 -0
- package/dist/components/ChartLegend/ChartLegendItemRenderer.d.ts +14 -0
- package/dist/components/ChartLegend/ChartLegendItemRenderer.js +90 -0
- package/dist/components/ChartLegend/ChartLegendItemRenderer.js.map +1 -0
- package/dist/components/ChartLegend/index.d.ts +3 -0
- package/dist/components/ChartLegend/index.js +3 -0
- package/dist/components/ChartLegend/useChartLegendActiveItem.d.ts +7 -0
- package/dist/components/ChartLegend/useChartLegendActiveItem.js +35 -0
- package/dist/components/ChartLegend/useChartLegendActiveItem.js.map +1 -0
- package/dist/components/ChartLegend/utils.d.ts +20 -0
- package/dist/components/ChartLegend/utils.js +33 -0
- package/dist/components/ChartLegend/utils.js.map +1 -0
- package/dist/components/ChartTooltip/ChartTooltip.d.ts +23 -0
- package/dist/components/ChartTooltip/ChartTooltip.js +83 -0
- package/dist/components/ChartTooltip/ChartTooltip.js.map +1 -0
- package/dist/components/ChartTooltip/index.d.ts +2 -0
- package/dist/components/ChartTooltip/index.js +2 -0
- package/dist/components/Checkbox/Checkbox.d.ts +58 -0
- package/dist/components/Checkbox/Checkbox.js +50 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/constants.d.ts +28 -0
- package/dist/components/Checkbox/constants.js +57 -0
- package/dist/components/Checkbox/constants.js.map +1 -0
- package/dist/components/Checkbox/getCheckedState.d.ts +6 -0
- package/dist/components/Checkbox/getCheckedState.js +14 -0
- package/dist/components/Checkbox/getCheckedState.js.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.js +3 -0
- package/dist/components/CircularProgress/CircularProgress.d.ts +54 -0
- package/dist/components/CircularProgress/CircularProgress.js +85 -0
- package/dist/components/CircularProgress/CircularProgress.js.map +1 -0
- package/dist/components/CircularProgress/index.d.ts +2 -0
- package/dist/components/CircularProgress/index.js +2 -0
- package/dist/components/Code/Code.utils.d.ts +24 -0
- package/dist/components/Code/Code.utils.js +160 -0
- package/dist/components/Code/Code.utils.js.map +1 -0
- package/dist/components/Code/CodeLite.d.ts +19 -0
- package/dist/components/Code/CodeLite.js +146 -0
- package/dist/components/Code/CodeLite.js.map +1 -0
- package/dist/components/Code/CodeLite.utils.d.ts +24 -0
- package/dist/components/Code/CodeLite.utils.js +273 -0
- package/dist/components/Code/CodeLite.utils.js.map +1 -0
- package/dist/components/Code/ImageReplacerExtension.d.ts +9 -0
- package/dist/components/Code/ImageReplacerExtension.js +227 -0
- package/dist/components/Code/ImageReplacerExtension.js.map +1 -0
- package/dist/components/Code/JsonHighlighterExtension.d.ts +4 -0
- package/dist/components/Code/JsonHighlighterExtension.js +172 -0
- package/dist/components/Code/JsonHighlighterExtension.js.map +1 -0
- package/dist/components/Code/constants.d.ts +6 -0
- package/dist/components/Code/constants.js +11 -0
- package/dist/components/Code/constants.js.map +1 -0
- package/dist/components/Code/index.d.ts +30 -0
- package/dist/components/Code/index.js +140 -0
- package/dist/components/Code/index.js.map +1 -0
- package/dist/components/Code/languages/json.d.ts +1 -0
- package/dist/components/Code/languages/json.js +7 -0
- package/dist/components/Code/languages/json.js.map +1 -0
- package/dist/components/Code/languages/languages.d.ts +7 -0
- package/dist/components/Code/languages/languages.js +12 -0
- package/dist/components/Code/languages/languages.js.map +1 -0
- package/dist/components/Code/languages/python.d.ts +1 -0
- package/dist/components/Code/languages/python.js +7 -0
- package/dist/components/Code/languages/python.js.map +1 -0
- package/dist/components/Code/languages/shell.d.ts +7 -0
- package/dist/components/Code/languages/shell.js +241 -0
- package/dist/components/Code/languages/shell.js.map +1 -0
- package/dist/components/Code/languages/typescript.d.ts +1 -0
- package/dist/components/Code/languages/typescript.js +7 -0
- package/dist/components/Code/languages/typescript.js.map +1 -0
- package/dist/components/Code/languages/yaml.d.ts +2 -0
- package/dist/components/Code/languages/yaml.js +44 -0
- package/dist/components/Code/languages/yaml.js.map +1 -0
- package/dist/components/Code/types.d.ts +8 -0
- package/dist/components/Code/types.js +0 -0
- package/dist/components/Code/utils.d.ts +4 -0
- package/dist/components/Code/utils.js +27 -0
- package/dist/components/Code/utils.js.map +1 -0
- package/dist/components/Command/Command.d.ts +78 -0
- package/dist/components/Command/Command.js +78 -0
- package/dist/components/Command/Command.js.map +1 -0
- package/dist/components/Command/CommandMenu.d.ts +65 -0
- package/dist/components/Command/CommandMenu.js +101 -0
- package/dist/components/Command/CommandMenu.js.map +1 -0
- package/dist/components/Command/index.d.ts +4 -0
- package/dist/components/Command/index.js +3 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +9 -0
- package/dist/components/ContextMenu/ContextMenu.js +43 -0
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/components/ContextMenu/index.d.ts +1 -0
- package/dist/components/ContextMenu/index.js +2 -0
- package/dist/components/CopyButton/CopyButton.d.ts +24 -0
- package/dist/components/CopyButton/CopyButton.js +121 -0
- package/dist/components/CopyButton/CopyButton.js.map +1 -0
- package/dist/components/CopyButton/copyToClipboard.d.ts +1 -0
- package/dist/components/CopyButton/copyToClipboard.js +29 -0
- package/dist/components/CopyButton/copyToClipboard.js.map +1 -0
- package/dist/components/CopyButton/index.d.ts +4 -0
- package/dist/components/CopyButton/index.js +4 -0
- package/dist/components/CopyButton/useCopy.d.ts +10 -0
- package/dist/components/CopyButton/useCopy.js +46 -0
- package/dist/components/CopyButton/useCopy.js.map +1 -0
- package/dist/components/Dialog/index.d.ts +49 -0
- package/dist/components/Dialog/index.js +130 -0
- package/dist/components/Dialog/index.js.map +1 -0
- package/dist/components/Divider/Divider.d.ts +9 -0
- package/dist/components/Divider/Divider.js +27 -0
- package/dist/components/Divider/Divider.js.map +1 -0
- package/dist/components/Divider/index.d.ts +2 -0
- package/dist/components/Divider/index.js +2 -0
- package/dist/components/DonutChart/DonutChart.d.ts +101 -0
- package/dist/components/DonutChart/DonutChart.js +197 -0
- package/dist/components/DonutChart/DonutChart.js.map +1 -0
- package/dist/components/DonutChart/DonutChart.utils.d.ts +38 -0
- package/dist/components/DonutChart/DonutChart.utils.js +93 -0
- package/dist/components/DonutChart/DonutChart.utils.js.map +1 -0
- package/dist/components/DonutChart/constants.d.ts +7 -0
- package/dist/components/DonutChart/constants.js +12 -0
- package/dist/components/DonutChart/constants.js.map +1 -0
- package/dist/components/DonutChart/index.d.ts +4 -0
- package/dist/components/DonutChart/index.js +4 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +24 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +149 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/DropdownMenu/index.d.ts +1 -0
- package/dist/components/DropdownMenu/index.js +2 -0
- package/dist/components/EmptyState/EmptyState.d.ts +26 -0
- package/dist/components/EmptyState/EmptyState.js +85 -0
- package/dist/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/components/EmptyState/index.d.ts +2 -0
- package/dist/components/EmptyState/index.js +2 -0
- package/dist/components/ErrorBoundary.d.ts +35 -0
- package/dist/components/ErrorBoundary.js +41 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/ErrorMessage/ErrorMessage.d.ts +17 -0
- package/dist/components/ErrorMessage/ErrorMessage.js +146 -0
- package/dist/components/ErrorMessage/ErrorMessage.js.map +1 -0
- package/dist/components/ErrorMessage/index.d.ts +2 -0
- package/dist/components/ErrorMessage/index.js +2 -0
- package/dist/components/ErrorState/ErrorState.d.ts +23 -0
- package/dist/components/ErrorState/ErrorState.js +2 -0
- package/dist/components/ErrorState/index.d.ts +2 -0
- package/dist/components/ErrorState/index.js +2 -0
- package/dist/components/GroupedTabs/GroupedTabs.d.ts +31 -0
- package/dist/components/GroupedTabs/GroupedTabs.js +92 -0
- package/dist/components/GroupedTabs/GroupedTabs.js.map +1 -0
- package/dist/components/GroupedTabs/index.d.ts +2 -0
- package/dist/components/GroupedTabs/index.js +2 -0
- package/dist/components/HoverCard.d.ts +4 -0
- package/dist/components/HoverCard.js +34 -0
- package/dist/components/HoverCard.js.map +1 -0
- package/dist/components/Icon/Icon.d.ts +25 -0
- package/dist/components/Icon/Icon.js +57 -0
- package/dist/components/Icon/Icon.js.map +1 -0
- package/dist/components/Icon/index.d.ts +2 -0
- package/dist/components/Icon/index.js +2 -0
- package/dist/components/IconButton/IconButton.d.ts +35 -0
- package/dist/components/IconButton/IconButton.js +73 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/IconButton/index.d.ts +2 -0
- package/dist/components/IconButton/index.js +2 -0
- package/dist/components/Input/Input.d.ts +72 -0
- package/dist/components/Input/Input.js +221 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/index.d.ts +2 -0
- package/dist/components/Input/index.js +2 -0
- package/dist/components/Input/inputStyles.d.ts +28 -0
- package/dist/components/Input/inputStyles.js +45 -0
- package/dist/components/Input/inputStyles.js.map +1 -0
- package/dist/components/Kbd/Kbd.d.ts +15 -0
- package/dist/components/Kbd/Kbd.js +30 -0
- package/dist/components/Kbd/Kbd.js.map +1 -0
- package/dist/components/Kbd/index.d.ts +2 -0
- package/dist/components/Kbd/index.js +2 -0
- package/dist/components/LineChart/LineChart.d.ts +8 -0
- package/dist/components/LineChart/LineChart.js +194 -0
- package/dist/components/LineChart/LineChart.js.map +1 -0
- package/dist/components/LineChart/LineChart.types.d.ts +138 -0
- package/dist/components/LineChart/LineChart.types.js +0 -0
- package/dist/components/LineChart/LineChart.utils.d.ts +29 -0
- package/dist/components/LineChart/LineChart.utils.js +123 -0
- package/dist/components/LineChart/LineChart.utils.js.map +1 -0
- package/dist/components/LineChart/LineChartPlot.d.ts +43 -0
- package/dist/components/LineChart/LineChartPlot.js +306 -0
- package/dist/components/LineChart/LineChartPlot.js.map +1 -0
- package/dist/components/LineChart/constants.d.ts +3 -0
- package/dist/components/LineChart/constants.js +8 -0
- package/dist/components/LineChart/constants.js.map +1 -0
- package/dist/components/LineChart/index.d.ts +2 -0
- package/dist/components/LineChart/index.js +2 -0
- package/dist/components/LinearProgress/LinearProgress.d.ts +16 -0
- package/dist/components/LinearProgress/LinearProgress.js +42 -0
- package/dist/components/LinearProgress/LinearProgress.js.map +1 -0
- package/dist/components/LinearProgress/index.d.ts +2 -0
- package/dist/components/LinearProgress/index.js +2 -0
- package/dist/components/Link/Link.d.ts +30 -0
- package/dist/components/Link/Link.js +51 -0
- package/dist/components/Link/Link.js.map +1 -0
- package/dist/components/Link/index.d.ts +2 -0
- package/dist/components/Link/index.js +2 -0
- package/dist/components/Logo/index.d.ts +17 -0
- package/dist/components/Logo/index.js +705 -0
- package/dist/components/Logo/index.js.map +1 -0
- package/dist/components/MetricChart/MetricChart.d.ts +9 -0
- package/dist/components/MetricChart/MetricChart.js +42 -0
- package/dist/components/MetricChart/MetricChart.js.map +1 -0
- package/dist/components/MetricChart/formatters.d.ts +18 -0
- package/dist/components/MetricChart/formatters.js +34 -0
- package/dist/components/MetricChart/formatters.js.map +1 -0
- package/dist/components/MetricChart/index.d.ts +4 -0
- package/dist/components/MetricChart/index.js +3 -0
- package/dist/components/Pane/Pane.d.ts +29 -0
- package/dist/components/Pane/Pane.js +171 -0
- package/dist/components/Pane/Pane.js.map +1 -0
- package/dist/components/Pane/Pane.utils.d.ts +10 -0
- package/dist/components/Pane/Pane.utils.js +7 -0
- package/dist/components/Pane/Pane.utils.js.map +1 -0
- package/dist/components/Pane/index.d.ts +3 -0
- package/dist/components/Pane/index.js +3 -0
- package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.d.ts +9 -0
- package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js +76 -0
- package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js.map +1 -0
- package/dist/components/PlainTextEditor/index.d.ts +18 -0
- package/dist/components/PlainTextEditor/index.js +71 -0
- package/dist/components/PlainTextEditor/index.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts +13 -0
- package/dist/components/Popover/Popover.js +48 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/constants.d.ts +1 -0
- package/dist/components/Popover/constants.js +6 -0
- package/dist/components/Popover/constants.js.map +1 -0
- package/dist/components/Popover/index.d.ts +1 -0
- package/dist/components/Popover/index.js +2 -0
- package/dist/components/PortalSlot.d.ts +11 -0
- package/dist/components/PortalSlot.js +41 -0
- package/dist/components/PortalSlot.js.map +1 -0
- package/dist/components/ProgressBar/ProgressBar.d.ts +38 -0
- package/dist/components/ProgressBar/ProgressBar.js +82 -0
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
- package/dist/components/ProgressBar/index.d.ts +2 -0
- package/dist/components/ProgressBar/index.js +2 -0
- package/dist/components/RadioButton/RadioButton.d.ts +62 -0
- package/dist/components/RadioButton/RadioButton.js +38 -0
- package/dist/components/RadioButton/RadioButton.js.map +1 -0
- package/dist/components/RadioButton/constants.d.ts +30 -0
- package/dist/components/RadioButton/constants.js +55 -0
- package/dist/components/RadioButton/constants.js.map +1 -0
- package/dist/components/RadioButton/index.d.ts +2 -0
- package/dist/components/RadioButton/index.js +2 -0
- package/dist/components/RadioCard/RadioCard.d.ts +26 -0
- package/dist/components/RadioCard/RadioCard.js +43 -0
- package/dist/components/RadioCard/RadioCard.js.map +1 -0
- package/dist/components/RadioCard/index.d.ts +2 -0
- package/dist/components/RadioCard/index.js +2 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +5 -0
- package/dist/components/RadioGroup/RadioGroup.js +17 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroupItem.d.ts +5 -0
- package/dist/components/RadioGroup/RadioGroupItem.js +22 -0
- package/dist/components/RadioGroup/RadioGroupItem.js.map +1 -0
- package/dist/components/RadioGroup/index.d.ts +4 -0
- package/dist/components/RadioGroup/index.js +3 -0
- package/dist/components/Select/Select.d.ts +84 -0
- package/dist/components/Select/Select.js +120 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Select/SelectPrimitive.d.ts +17 -0
- package/dist/components/Select/SelectPrimitive.js +126 -0
- package/dist/components/Select/SelectPrimitive.js.map +1 -0
- package/dist/components/Select/index.d.ts +4 -0
- package/dist/components/Select/index.js +3 -0
- package/dist/components/Skeleton/Skeleton.d.ts +13 -0
- package/dist/components/Skeleton/Skeleton.js +25 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Skeleton/index.d.ts +1 -0
- package/dist/components/Skeleton/index.js +2 -0
- package/dist/components/Slider/Slider.d.ts +33 -0
- package/dist/components/Slider/Slider.js +64 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Slider/index.d.ts +2 -0
- package/dist/components/Slider/index.js +2 -0
- package/dist/components/SparkLineChart/SparkLineChart.d.ts +14 -0
- package/dist/components/SparkLineChart/SparkLineChart.js +112 -0
- package/dist/components/SparkLineChart/SparkLineChart.js.map +1 -0
- package/dist/components/SparkLineChart/index.d.ts +2 -0
- package/dist/components/SparkLineChart/index.js +2 -0
- package/dist/components/Spinner/Spinner.d.ts +12 -0
- package/dist/components/Spinner/Spinner.js +33 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/index.d.ts +1 -0
- package/dist/components/Spinner/index.js +2 -0
- package/dist/components/SplitViewPane/SplitViewPane.d.ts +41 -0
- package/dist/components/SplitViewPane/SplitViewPane.js +314 -0
- package/dist/components/SplitViewPane/SplitViewPane.js.map +1 -0
- package/dist/components/SplitViewPane/SplitViewPaneHeader.d.ts +22 -0
- package/dist/components/SplitViewPane/SplitViewPaneHeader.js +105 -0
- package/dist/components/SplitViewPane/SplitViewPaneHeader.js.map +1 -0
- package/dist/components/SplitViewPane/index.d.ts +2 -0
- package/dist/components/SplitViewPane/index.js +3 -0
- package/dist/components/SplitViewPane/openPaneRegistry.d.ts +2 -0
- package/dist/components/SplitViewPane/openPaneRegistry.js +49 -0
- package/dist/components/SplitViewPane/openPaneRegistry.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +35 -0
- package/dist/components/Switch/Switch.js +65 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch/index.js +2 -0
- package/dist/components/Tabs/index.d.ts +27 -0
- package/dist/components/Tabs/index.js +45 -0
- package/dist/components/Tabs/index.js.map +1 -0
- package/dist/components/Text/Text.d.ts +13 -0
- package/dist/components/Text/Text.js +58 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Text/index.d.ts +2 -0
- package/dist/components/Text/index.js +2 -0
- package/dist/components/TextVirtualizer.d.ts +8 -0
- package/dist/components/TextVirtualizer.js +53 -0
- package/dist/components/TextVirtualizer.js.map +1 -0
- package/dist/components/TextWithLinks.d.ts +6 -0
- package/dist/components/TextWithLinks.js +61 -0
- package/dist/components/TextWithLinks.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +47 -0
- package/dist/components/Textarea/Textarea.js +150 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Textarea/index.d.ts +2 -0
- package/dist/components/Textarea/index.js +2 -0
- package/dist/components/ThinkingState/LoadingIndicator.d.ts +19 -0
- package/dist/components/ThinkingState/LoadingIndicator.js +2 -0
- package/dist/components/ThinkingState/NOTICE +25 -0
- package/dist/components/ThinkingState/ThinkingState.d.ts +21 -0
- package/dist/components/ThinkingState/ThinkingState.js +42 -0
- package/dist/components/ThinkingState/ThinkingState.js.map +1 -0
- package/dist/components/ThinkingState/ThinkingStateTimer.d.ts +9 -0
- package/dist/components/ThinkingState/ThinkingStateTimer.js +43 -0
- package/dist/components/ThinkingState/ThinkingStateTimer.js.map +1 -0
- package/dist/components/ThinkingState/index.d.ts +4 -0
- package/dist/components/ThinkingState/index.js +3 -0
- package/dist/components/Toast/ToastContext.d.ts +5 -0
- package/dist/components/Toast/ToastContext.js +9 -0
- package/dist/components/Toast/ToastContext.js.map +1 -0
- package/dist/components/Toast/index.d.ts +13 -0
- package/dist/components/Toast/index.js +166 -0
- package/dist/components/Toast/index.js.map +1 -0
- package/dist/components/Toast/useToast.d.ts +3 -0
- package/dist/components/Toast/useToast.js +11 -0
- package/dist/components/Toast/useToast.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +19 -0
- package/dist/components/Tooltip/Tooltip.js +57 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/index.d.ts +3 -0
- package/dist/components/Tooltip/index.js +3 -0
- package/dist/components/TopList/TopList.d.ts +3 -0
- package/dist/components/TopList/TopList.js +186 -0
- package/dist/components/TopList/TopList.js.map +1 -0
- package/dist/components/TopList/TopList.types.d.ts +34 -0
- package/dist/components/TopList/TopList.types.js +0 -0
- package/dist/components/TopList/TopList.utils.d.ts +3 -0
- package/dist/components/TopList/TopList.utils.js +16 -0
- package/dist/components/TopList/TopList.utils.js.map +1 -0
- package/dist/components/TopList/index.d.ts +2 -0
- package/dist/components/TopList/index.js +2 -0
- package/dist/components/Typeahead/Typeahead.d.ts +5 -0
- package/dist/components/Typeahead/Typeahead.js +305 -0
- package/dist/components/Typeahead/Typeahead.js.map +1 -0
- package/dist/components/Typeahead/Typeahead.types.d.ts +99 -0
- package/dist/components/Typeahead/Typeahead.types.js +0 -0
- package/dist/components/Typeahead/Typeahead.utils.d.ts +25 -0
- package/dist/components/Typeahead/Typeahead.utils.js +73 -0
- package/dist/components/Typeahead/Typeahead.utils.js.map +1 -0
- package/dist/components/Typeahead/TypeaheadParts.d.ts +25 -0
- package/dist/components/Typeahead/TypeaheadParts.js +109 -0
- package/dist/components/Typeahead/TypeaheadParts.js.map +1 -0
- package/dist/components/Typeahead/TypeaheadView.d.ts +81 -0
- package/dist/components/Typeahead/TypeaheadView.js +228 -0
- package/dist/components/Typeahead/TypeaheadView.js.map +1 -0
- package/dist/components/Typeahead/index.d.ts +2 -0
- package/dist/components/Typeahead/index.js +2 -0
- package/dist/components/Typeahead/useTypeaheadDomSync.d.ts +15 -0
- package/dist/components/Typeahead/useTypeaheadDomSync.js +43 -0
- package/dist/components/Typeahead/useTypeaheadDomSync.js.map +1 -0
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.d.ts +11 -0
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js +32 -0
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js.map +1 -0
- package/dist/components/UnsavedChangesDialog.d.ts +14 -0
- package/dist/components/UnsavedChangesDialog.js +67 -0
- package/dist/components/UnsavedChangesDialog.js.map +1 -0
- package/dist/components/index.d.ts +58 -0
- package/dist/components/index.js +35 -0
- package/dist/components.css +102 -0
- package/dist/contexts/ErrorReporterContext.d.ts +6 -0
- package/dist/contexts/ErrorReporterContext.js +7 -0
- package/dist/contexts/ErrorReporterContext.js.map +1 -0
- package/dist/hooks/AppThemeProvider.d.ts +8 -0
- package/dist/hooks/AppThemeProvider.js +52 -0
- package/dist/hooks/AppThemeProvider.js.map +1 -0
- package/dist/hooks/useColorScheme.d.ts +20 -0
- package/dist/hooks/useColorScheme.js +50 -0
- package/dist/hooks/useColorScheme.js.map +1 -0
- package/dist/icons/LongTailPhosphorIcons.d.ts +51 -0
- package/dist/icons/LongTailPhosphorIcons.js +102 -0
- package/dist/icons/LongTailPhosphorIcons.js.map +1 -0
- package/dist/icons/PaddedPhosphorIcons.d.ts +17 -0
- package/dist/icons/PaddedPhosphorIcons.js +55 -0
- package/dist/icons/PaddedPhosphorIcons.js.map +1 -0
- package/dist/icons/WeightedPhosphorIcons.d.ts +45 -0
- package/dist/icons/WeightedPhosphorIcons.js +96 -0
- package/dist/icons/WeightedPhosphorIcons.js.map +1 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +4 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +36 -0
- package/dist/styles.css +10 -0
- package/dist/utilities.css +2 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/index.d.ts +7 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/index.js +15 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/index.js.map +1 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.d.ts +4 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js +10 -0
- package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js.map +1 -0
- package/dist/utils/ZIndexContext.d.ts +5 -0
- package/dist/utils/ZIndexContext.js +13 -0
- package/dist/utils/ZIndexContext.js.map +1 -0
- package/dist/utils/animation.d.ts +37 -0
- package/dist/utils/animation.js +42 -0
- package/dist/utils/animation.js.map +1 -0
- package/dist/utils/chartAxisLayout.d.ts +6 -0
- package/dist/utils/chartAxisLayout.js +8 -0
- package/dist/utils/chartAxisLayout.js.map +1 -0
- package/dist/utils/chartColors.d.ts +38 -0
- package/dist/utils/chartColors.js +78 -0
- package/dist/utils/chartColors.js.map +1 -0
- package/dist/utils/chartConstants.d.ts +10 -0
- package/dist/utils/chartConstants.js +15 -0
- package/dist/utils/chartConstants.js.map +1 -0
- package/dist/utils/chartValues.d.ts +2 -0
- package/dist/utils/chartValues.js +36 -0
- package/dist/utils/chartValues.js.map +1 -0
- package/dist/utils/clamp.d.ts +2 -0
- package/dist/utils/clamp.js +7 -0
- package/dist/utils/clamp.js.map +1 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.js +191 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/componentSizes.d.ts +104 -0
- package/dist/utils/componentSizes.js +104 -0
- package/dist/utils/componentSizes.js.map +1 -0
- package/dist/utils/controlIconSizes.d.ts +10 -0
- package/dist/utils/controlIconSizes.js +32 -0
- package/dist/utils/controlIconSizes.js.map +1 -0
- package/dist/utils/csp-nonce.d.ts +11 -0
- package/dist/utils/csp-nonce.js +17 -0
- package/dist/utils/csp-nonce.js.map +1 -0
- package/dist/utils/get-closest-scroll-parent.d.ts +1 -0
- package/dist/utils/get-closest-scroll-parent.js +16 -0
- package/dist/utils/get-closest-scroll-parent.js.map +1 -0
- package/dist/utils/get-color-by-string.d.ts +1 -0
- package/dist/utils/get-color-by-string.js +10 -0
- package/dist/utils/get-color-by-string.js.map +1 -0
- package/dist/utils/getYAxisLeftMargin.d.ts +10 -0
- package/dist/utils/getYAxisLeftMargin.js +20 -0
- package/dist/utils/getYAxisLeftMargin.js.map +1 -0
- package/dist/utils/icon-types.d.ts +8 -0
- package/dist/utils/icon-types.js +0 -0
- package/dist/utils/lazy-codemirror-loader.d.ts +70 -0
- package/dist/utils/lazy-codemirror-loader.js +79 -0
- package/dist/utils/lazy-codemirror-loader.js.map +1 -0
- package/dist/utils/merge-refs.d.ts +2 -0
- package/dist/utils/merge-refs.js +13 -0
- package/dist/utils/merge-refs.js.map +1 -0
- package/dist/utils/parseTextLinks.d.ts +7 -0
- package/dist/utils/parseTextLinks.js +46 -0
- package/dist/utils/parseTextLinks.js.map +1 -0
- package/dist/utils/prettify-error-payload.d.ts +7 -0
- package/dist/utils/prettify-error-payload.js +188 -0
- package/dist/utils/prettify-error-payload.js.map +1 -0
- package/dist/utils/spacing.d.ts +30 -0
- package/dist/utils/spacing.js +34 -0
- package/dist/utils/spacing.js.map +1 -0
- package/dist/utils/useCodeMirror.d.ts +7 -0
- package/dist/utils/useCodeMirror.js +28 -0
- package/dist/utils/useCodeMirror.js.map +1 -0
- package/dist/utils/useZIndex.d.ts +52 -0
- package/dist/utils/useZIndex.js +62 -0
- package/dist/utils/useZIndex.js.map +1 -0
- package/dist/utils/zIndices.d.ts +42 -0
- package/dist/utils/zIndices.js +46 -0
- package/dist/utils/zIndices.js.map +1 -0
- package/docs/DESIGN.md +134 -0
- package/docs/STYLES.md +568 -0
- package/package.json +619 -0
- package/tailwind.preset.cjs +738 -0
- package/tailwind.preset.d.cts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","names":[],"sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\n\nimport { cn } from '../../utils/cn';\nimport { useZIndex } from '../../utils/useZIndex';\nimport { ZIndexProvider } from '../../utils/ZIndexContext';\nimport zIndices from '../../utils/zIndices';\n\nexport const DropdownMenu: typeof DropdownMenuPrimitive.Root = (props) => {\n const [open = false, onOpenChange] = useControllableState({\n prop: props.open,\n defaultProp: props.defaultOpen ?? false,\n onChange: props.onOpenChange,\n });\n\n return (\n <DropdownMenuPrimitive.Root\n {...props}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={undefined}\n />\n );\n};\n\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuLabel = DropdownMenuPrimitive.Label;\n\n/**\n * Stops clicks outside an open dropdown from reaching elements underneath it\n * (e.g. a table row's `onClick`) without covering the viewport, so scrolling\n * the content behind the menu keeps working natively.\n *\n * React delegates `onClick` at the root in the bubble phase, so a capture-phase\n * `click` listener on `document` runs first and can stop the event before it\n * gets there. pointerdown is left alone so Radix's outside-dismiss keeps\n * working; the wheel listener is passive so native scroll is never interrupted,\n * it just also dismisses the menu (an open menu jitters as Radix repositions it\n * to follow its trigger while scrolling).\n *\n * \"Inside\" is any element with `role=\"menu\"` in its ancestry — Radix gives that\n * role to both the content and its submenus (which portal out separately), so\n * clicks and scrolls inside a submenu are correctly treated as inside.\n */\nconst OutsideClickGuard = () => {\n const cleanupTimerRef =\n React.useRef<ReturnType<typeof setTimeout>>(undefined);\n const pointerDownOutsideRef = React.useRef(false);\n\n React.useLayoutEffect(() => {\n clearTimeout(cleanupTimerRef.current);\n pointerDownOutsideRef.current = false;\n\n const isOutside = (target: EventTarget | null) =>\n !(target instanceof Element) || !target.closest('[role=\"menu\"]');\n\n // Observe (don't block) outside pointerdowns: Radix dismisses on them, so\n // this tells us the trailing click needs absorbing on cleanup.\n const onPointerDown = (event: PointerEvent) => {\n if (isOutside(event.target)) pointerDownOutsideRef.current = true;\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n\n // Block clicks that land outside the menu from reaching the content beneath.\n const onClick = (event: MouseEvent) => {\n if (isOutside(event.target)) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n document.addEventListener('click', onClick, true);\n\n // Dismiss on scroll of the content behind the menu: an anchored menu that\n // stays open jitters as Radix repositions it to chase its trigger. Passive,\n // so the wheel still scrolls the content natively on the same gesture.\n // Scrolling inside the menu (e.g. a details panel) leaves it open.\n const onWheel = (event: WheelEvent) => {\n if (isOutside(event.target)) {\n document.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Escape', bubbles: true })\n );\n }\n };\n document.addEventListener('wheel', onWheel, { passive: true });\n\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true);\n document.removeEventListener('click', onClick, true);\n document.removeEventListener('wheel', onWheel);\n\n // Radix dismisses on the outside pointerdown and unmounts this guard\n // before the trailing click fires, so absorb that one click here. Only\n // for pointer dismissals — Escape / item selection have no trailing\n // outside click, and absorbing an unrelated later click would be wrong.\n if (!pointerDownOutsideRef.current) return;\n\n const absorb = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const opts = { capture: true, once: true } as const;\n document.addEventListener('pointerup', absorb, opts);\n document.addEventListener('mouseup', absorb, opts);\n document.addEventListener('click', absorb, opts);\n\n cleanupTimerRef.current = setTimeout(() => {\n if (typeof document === 'undefined') return;\n document.removeEventListener('pointerup', absorb, { capture: true });\n document.removeEventListener('mouseup', absorb, { capture: true });\n document.removeEventListener('click', absorb, { capture: true });\n }, 300);\n };\n }, []);\n\n return null;\n};\n\nexport const DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & {\n /**\n * When true, stops clicks outside the open menu from reaching elements\n * underneath (e.g. table rows), while leaving scrolling of that content\n * intact. Radix's outside-click dismiss still works normally.\n */\n preventClickThrough?: boolean;\n }\n>(\n (\n { className, sideOffset = 4, children, preventClickThrough, ...props },\n ref\n ) => {\n const zIndex = useZIndex(zIndices.popover);\n\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'min-w-[8rem] overflow-hidden rounded-md border border-subtle bg-popover p-space-1 shadow-lg',\n className\n )}\n {...props}\n style={{ zIndex, ...props.style }}\n >\n {preventClickThrough && <OutsideClickGuard />}\n <ZIndexProvider value={zIndex}>{children}</ZIndexProvider>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n );\n }\n);\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nexport const DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'text-md flex cursor-pointer select-none items-center rounded-sm px-space-2 py-1.5 outline-none transition-colors focus:bg-surface-level-2 data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-space-6',\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nexport const DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('my-space-1 h-px bg-surface-level-2', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nexport const DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'text-md flex cursor-pointer select-none items-center rounded-sm px-space-2 py-1.5 outline-none transition-colors focus:bg-surface-level-2 data-[state=open]:bg-surface-level-2',\n inset && 'pl-space-6',\n className\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nexport const DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, children, ...props }, ref) => {\n const zIndex = useZIndex(zIndices.popover);\n\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'min-w-[8rem] overflow-hidden rounded-md border border-subtle bg-popover p-space-1 shadow-lg',\n className\n )}\n style={{ zIndex }}\n {...props}\n >\n <ZIndexProvider value={zIndex}>{children}</ZIndexProvider>\n </DropdownMenuPrimitive.SubContent>\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from './DropdownMenu.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./DropdownMenu.js";
|
|
2
|
+
export { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { IconComponent, IconProps } from '../Icon/index.js';
|
|
2
|
+
type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
type EmptyStateVariant = 'neutral' | 'brand';
|
|
4
|
+
interface EmptyStateProps {
|
|
5
|
+
/** Icon rendered above the title. Defaults to a search icon. */
|
|
6
|
+
icon?: IconComponent;
|
|
7
|
+
/** Phosphor weight used to render the icon. */
|
|
8
|
+
iconWeight?: IconProps['weight'];
|
|
9
|
+
/** Primary heading. */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Supporting copy below the title. */
|
|
12
|
+
description?: React.ReactNode;
|
|
13
|
+
/** Action node (e.g. a create button) rendered in the footer row. */
|
|
14
|
+
action?: React.ReactNode;
|
|
15
|
+
/** Controls the icon's semantic color treatment. */
|
|
16
|
+
variant?: EmptyStateVariant;
|
|
17
|
+
/** When set, renders a "Learn more" link to this docs URL in the footer row. */
|
|
18
|
+
docsLink?: string;
|
|
19
|
+
/** Extra classes for the outer container. */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Controls the typography, icon, spacing, and text-block width. */
|
|
22
|
+
size?: EmptyStateSize;
|
|
23
|
+
}
|
|
24
|
+
declare const EmptyState: import("react").ForwardRefExoticComponent<EmptyStateProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
25
|
+
export { EmptyState };
|
|
26
|
+
export type { EmptyStateProps, EmptyStateSize, EmptyStateVariant };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn.js";
|
|
2
|
+
import { Text } from "../Text/Text.js";
|
|
3
|
+
import { Icon } from "../Icon/Icon.js";
|
|
4
|
+
import { Link } from "../Link/Link.js";
|
|
5
|
+
import { forwardRef } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { MagnifyingGlassIcon } from "@phosphor-icons/react/dist/ssr/MagnifyingGlass";
|
|
8
|
+
//#region packages/components/src/components/EmptyState/EmptyState.tsx
|
|
9
|
+
var sizeStyles = {
|
|
10
|
+
sm: {
|
|
11
|
+
container: "min-h-0 gap-space-3 py-space-3",
|
|
12
|
+
iconSize: "lg",
|
|
13
|
+
content: "max-w-xs gap-space-1",
|
|
14
|
+
titleVariant: "md",
|
|
15
|
+
titleWeight: "semibold",
|
|
16
|
+
descriptionVariant: "sm",
|
|
17
|
+
footer: "gap-space-3",
|
|
18
|
+
linkVariant: "sm"
|
|
19
|
+
},
|
|
20
|
+
md: {
|
|
21
|
+
container: "min-h-[13.5rem] gap-space-4 py-space-4",
|
|
22
|
+
iconSize: "xl",
|
|
23
|
+
content: "max-w-xs gap-space-2",
|
|
24
|
+
titleVariant: "h3",
|
|
25
|
+
descriptionVariant: "body",
|
|
26
|
+
footer: "gap-space-4",
|
|
27
|
+
linkVariant: "body"
|
|
28
|
+
},
|
|
29
|
+
lg: {
|
|
30
|
+
container: "min-h-[13.5rem] gap-space-4 py-space-5",
|
|
31
|
+
iconSize: "xl",
|
|
32
|
+
content: "max-w-md gap-space-3",
|
|
33
|
+
titleVariant: "h2",
|
|
34
|
+
descriptionVariant: "body",
|
|
35
|
+
footer: "gap-space-4",
|
|
36
|
+
linkVariant: "body"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var EmptyState = forwardRef(({ icon, iconWeight, title, description, action, variant = "neutral", docsLink, className, size = "md" }, ref) => {
|
|
40
|
+
const styles = sizeStyles[size];
|
|
41
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
42
|
+
ref,
|
|
43
|
+
className: cn("flex flex-col items-center justify-center", styles.container, className),
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx(Icon, {
|
|
46
|
+
icon: icon ?? MagnifyingGlassIcon,
|
|
47
|
+
weight: iconWeight,
|
|
48
|
+
color: variant,
|
|
49
|
+
rounded: true,
|
|
50
|
+
size: styles.iconSize,
|
|
51
|
+
className: variant === "neutral" ? "bg-surface-level-2" : void 0
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ jsxs("div", {
|
|
54
|
+
className: cn("flex flex-col", styles.content),
|
|
55
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
56
|
+
as: "h3",
|
|
57
|
+
variant: styles.titleVariant,
|
|
58
|
+
weight: styles.titleWeight,
|
|
59
|
+
className: "text-center",
|
|
60
|
+
children: title
|
|
61
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
62
|
+
variant: styles.descriptionVariant,
|
|
63
|
+
color: "tertiary",
|
|
64
|
+
className: "text-center",
|
|
65
|
+
children: description
|
|
66
|
+
})]
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ jsxs("div", {
|
|
69
|
+
className: cn("flex items-center", styles.footer),
|
|
70
|
+
children: [action, docsLink && /* @__PURE__ */ jsx(Link, {
|
|
71
|
+
href: docsLink,
|
|
72
|
+
target: "_blank",
|
|
73
|
+
rel: "noopener noreferrer",
|
|
74
|
+
variant: styles.linkVariant,
|
|
75
|
+
children: "Learn more"
|
|
76
|
+
})]
|
|
77
|
+
})
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
EmptyState.displayName = "EmptyState";
|
|
82
|
+
//#endregion
|
|
83
|
+
export { EmptyState };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","names":[],"sources":["../../../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import { forwardRef } from 'react';\n\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react/dist/ssr/MagnifyingGlass';\n\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport type { IconComponent, IconProps } from '../Icon';\nimport { Link } from '../Link';\nimport { Text } from '../Text';\nimport type { TextProps } from '../Text';\n\ntype EmptyStateSize = 'sm' | 'md' | 'lg';\ntype EmptyStateVariant = 'neutral' | 'brand';\n\ninterface EmptyStateSizeStyles {\n container: string;\n iconSize: NonNullable<IconProps['size']>;\n content: string;\n titleVariant: NonNullable<TextProps['variant']>;\n titleWeight?: TextProps['weight'];\n descriptionVariant: NonNullable<TextProps['variant']>;\n footer: string;\n linkVariant: NonNullable<TextProps['variant']>;\n}\n\nconst sizeStyles: Record<EmptyStateSize, EmptyStateSizeStyles> = {\n sm: {\n container: 'min-h-0 gap-space-3 py-space-3',\n iconSize: 'lg',\n content: 'max-w-xs gap-space-1',\n titleVariant: 'md',\n titleWeight: 'semibold',\n descriptionVariant: 'sm',\n footer: 'gap-space-3',\n linkVariant: 'sm',\n },\n md: {\n container: 'min-h-[13.5rem] gap-space-4 py-space-4',\n iconSize: 'xl',\n content: 'max-w-xs gap-space-2',\n titleVariant: 'h3',\n descriptionVariant: 'body',\n footer: 'gap-space-4',\n linkVariant: 'body',\n },\n lg: {\n container: 'min-h-[13.5rem] gap-space-4 py-space-5',\n iconSize: 'xl',\n content: 'max-w-md gap-space-3',\n titleVariant: 'h2',\n descriptionVariant: 'body',\n footer: 'gap-space-4',\n linkVariant: 'body',\n },\n};\n\ninterface EmptyStateProps {\n /** Icon rendered above the title. Defaults to a search icon. */\n icon?: IconComponent;\n /** Phosphor weight used to render the icon. */\n iconWeight?: IconProps['weight'];\n /** Primary heading. */\n title?: string;\n /** Supporting copy below the title. */\n description?: React.ReactNode;\n /** Action node (e.g. a create button) rendered in the footer row. */\n action?: React.ReactNode;\n /** Controls the icon's semantic color treatment. */\n variant?: EmptyStateVariant;\n /** When set, renders a \"Learn more\" link to this docs URL in the footer row. */\n docsLink?: string;\n /** Extra classes for the outer container. */\n className?: string;\n /** Controls the typography, icon, spacing, and text-block width. */\n size?: EmptyStateSize;\n}\n\nconst EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n icon,\n iconWeight,\n title,\n description,\n action,\n variant = 'neutral',\n docsLink,\n className,\n size = 'md',\n },\n ref\n ) => {\n const styles = sizeStyles[size];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-center',\n styles.container,\n className\n )}\n >\n <Icon\n icon={icon ?? MagnifyingGlassIcon}\n weight={iconWeight}\n color={variant}\n rounded\n size={styles.iconSize}\n className={variant === 'neutral' ? 'bg-surface-level-2' : undefined}\n />\n <div className={cn('flex flex-col', styles.content)}>\n <Text\n as=\"h3\"\n variant={styles.titleVariant}\n weight={styles.titleWeight}\n className=\"text-center\"\n >\n {title}\n </Text>\n <Text\n variant={styles.descriptionVariant}\n color=\"tertiary\"\n className=\"text-center\"\n >\n {description}\n </Text>\n </div>\n <div className={cn('flex items-center', styles.footer)}>\n {action}\n {docsLink && (\n <Link\n href={docsLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant={styles.linkVariant}\n >\n Learn more\n </Link>\n )}\n </div>\n </div>\n );\n }\n);\n\nEmptyState.displayName = 'EmptyState';\n\nexport { EmptyState };\nexport type { EmptyStateProps, EmptyStateSize, EmptyStateVariant };\n"],"mappings":";;;;;;;;AAyBA,IAAM,aAA2D;CAC/D,IAAI;EACF,WAAW;EACX,UAAU;EACV,SAAS;EACT,cAAc;EACd,aAAa;EACb,oBAAoB;EACpB,QAAQ;EACR,aAAa;CACf;CACA,IAAI;EACF,WAAW;EACX,UAAU;EACV,SAAS;EACT,cAAc;EACd,oBAAoB;EACpB,QAAQ;EACR,aAAa;CACf;CACA,IAAI;EACF,WAAW;EACX,UAAU;EACV,SAAS;EACT,cAAc;EACd,oBAAoB;EACpB,QAAQ;EACR,aAAa;CACf;AACF;AAuBA,IAAM,aAAa,YAEf,EACE,MACA,YACA,OACA,aACA,QACA,UAAU,WACV,UACA,WACA,OAAO,QAET,QACG;CACH,MAAM,SAAS,WAAW;CAE1B,OACE,qBAAC,OAAD;EACO;EACL,WAAW,GACT,6CACA,OAAO,WACP,SACF;EANF,UAAA;GAQE,oBAAC,MAAD;IACE,MAAM,QAAQ;IACd,QAAQ;IACR,OAAO;IACP,SAAA;IACA,MAAM,OAAO;IACb,WAAW,YAAY,YAAY,uBAAuB,KAAA;GAC3D,CAAA;GACD,qBAAC,OAAD;IAAK,WAAW,GAAG,iBAAiB,OAAO,OAAO;IAAlD,UAAA,CACE,oBAAC,MAAD;KACE,IAAG;KACH,SAAS,OAAO;KAChB,QAAQ,OAAO;KACf,WAAU;KAET,UAAA;IACG,CAAA,GACN,oBAAC,MAAD;KACE,SAAS,OAAO;KAChB,OAAM;KACN,WAAU;KAET,UAAA;IACG,CAAA,CACH;;GACL,qBAAC,OAAD;IAAK,WAAW,GAAG,qBAAqB,OAAO,MAAM;IAArD,UAAA,CACG,QACA,YACC,oBAAC,MAAD;KACE,MAAM;KACN,QAAO;KACP,KAAI;KACJ,SAAS,OAAO;KACjB,UAAA;IAEK,CAAA,CAEL;;EACF;;AAET,CACF;AAEA,WAAW,cAAc"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ContextType, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
import { Component } from 'react';
|
|
3
|
+
import { ErrorReporterContext } from '../contexts/ErrorReporterContext.js';
|
|
4
|
+
interface ErrorBoundaryProps {
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
fallback?: (error: Error, retry: () => void) => ReactNode;
|
|
7
|
+
/** When this value changes, any caught error is automatically cleared. */
|
|
8
|
+
resetKey?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, {
|
|
11
|
+
error: Error | null;
|
|
12
|
+
prevResetKey?: unknown;
|
|
13
|
+
}> {
|
|
14
|
+
static contextType: import("react").Context<import("../contexts/ErrorReporterContext.js").ErrorReporter | undefined>;
|
|
15
|
+
context: ContextType<typeof ErrorReporterContext>;
|
|
16
|
+
constructor(props: ErrorBoundaryProps);
|
|
17
|
+
static getDerivedStateFromError(error: Error): {
|
|
18
|
+
error: Error;
|
|
19
|
+
};
|
|
20
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
21
|
+
static getDerivedStateFromProps(props: {
|
|
22
|
+
resetKey?: unknown;
|
|
23
|
+
}, state: {
|
|
24
|
+
error: Error | null;
|
|
25
|
+
prevResetKey?: unknown;
|
|
26
|
+
}): {
|
|
27
|
+
error: null;
|
|
28
|
+
prevResetKey: unknown;
|
|
29
|
+
} | {
|
|
30
|
+
prevResetKey: unknown;
|
|
31
|
+
error?: undefined;
|
|
32
|
+
} | null;
|
|
33
|
+
render(): ReactNode;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ErrorReporterContext } from "../contexts/ErrorReporterContext.js";
|
|
2
|
+
import { Component } from "react";
|
|
3
|
+
//#region packages/components/src/components/ErrorBoundary.tsx
|
|
4
|
+
var ErrorBoundary = class extends Component {
|
|
5
|
+
static contextType = ErrorReporterContext;
|
|
6
|
+
constructor(props) {
|
|
7
|
+
super(props);
|
|
8
|
+
this.state = {
|
|
9
|
+
error: null,
|
|
10
|
+
prevResetKey: props.resetKey
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static getDerivedStateFromError(error) {
|
|
14
|
+
return { error };
|
|
15
|
+
}
|
|
16
|
+
componentDidCatch(error, errorInfo) {
|
|
17
|
+
const context = {
|
|
18
|
+
source: "react-error-boundary",
|
|
19
|
+
componentStack: errorInfo.componentStack,
|
|
20
|
+
route: typeof window === "undefined" ? void 0 : window.location.pathname
|
|
21
|
+
};
|
|
22
|
+
if (this.context) this.context(error, errorInfo, { ux_impact: "blocking" });
|
|
23
|
+
else console.error("ErrorBoundary caught", error, context);
|
|
24
|
+
}
|
|
25
|
+
static getDerivedStateFromProps(props, state) {
|
|
26
|
+
if (state.error && props.resetKey !== state.prevResetKey) return {
|
|
27
|
+
error: null,
|
|
28
|
+
prevResetKey: props.resetKey
|
|
29
|
+
};
|
|
30
|
+
if (props.resetKey !== state.prevResetKey) return { prevResetKey: props.resetKey };
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
render() {
|
|
34
|
+
if (this.state.error) return this.props.fallback?.(this.state.error, () => this.setState(() => ({ error: null })));
|
|
35
|
+
return this.props.children;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { ErrorBoundary };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../src/components/ErrorBoundary.tsx"],"sourcesContent":["import type { ContextType, ErrorInfo, ReactNode } from 'react';\nimport { Component } from 'react';\n\nimport { ErrorReporterContext } from '../contexts/ErrorReporterContext';\n\ninterface ErrorBoundaryProps {\n children?: ReactNode;\n fallback?: (error: Error, retry: () => void) => ReactNode;\n /** When this value changes, any caught error is automatically cleared. */\n resetKey?: unknown;\n}\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n { error: Error | null; prevResetKey?: unknown }\n> {\n static contextType = ErrorReporterContext;\n\n declare context: ContextType<typeof ErrorReporterContext>;\n\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null, prevResetKey: props.resetKey };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n const context = {\n source: 'react-error-boundary',\n componentStack: errorInfo.componentStack,\n route:\n typeof window === 'undefined' ? undefined : window.location.pathname,\n };\n\n if (this.context) {\n this.context(error, errorInfo, { ux_impact: 'blocking' });\n } else {\n console.error('ErrorBoundary caught', error, context);\n }\n }\n\n static getDerivedStateFromProps(\n props: { resetKey?: unknown },\n state: { error: Error | null; prevResetKey?: unknown }\n ) {\n if (state.error && props.resetKey !== state.prevResetKey) {\n return { error: null, prevResetKey: props.resetKey };\n }\n if (props.resetKey !== state.prevResetKey) {\n return { prevResetKey: props.resetKey };\n }\n return null;\n }\n\n render() {\n if (this.state.error) {\n return this.props.fallback?.(this.state.error, () =>\n this.setState(() => ({ error: null }))\n );\n }\n\n return this.props.children;\n }\n}\n"],"mappings":";;;AAYA,IAAa,gBAAb,cAAmC,UAGjC;CACA,OAAO,cAAc;CAIrB,YAAY,OAA2B;EACrC,MAAM,KAAK;EACX,KAAK,QAAQ;GAAE,OAAO;GAAM,cAAc,MAAM;EAAS;CAC3D;CAEA,OAAO,yBAAyB,OAAc;EAC5C,OAAO,EAAE,MAAM;CACjB;CAEA,kBAAkB,OAAc,WAAsB;EACpD,MAAM,UAAU;GACd,QAAQ;GACR,gBAAgB,UAAU;GAC1B,OACE,OAAO,WAAW,cAAc,KAAA,IAAY,OAAO,SAAS;EAChE;EAEA,IAAI,KAAK,SACP,KAAK,QAAQ,OAAO,WAAW,EAAE,WAAW,WAAW,CAAC;OAExD,QAAQ,MAAM,wBAAwB,OAAO,OAAO;CAExD;CAEA,OAAO,yBACL,OACA,OACA;EACA,IAAI,MAAM,SAAS,MAAM,aAAa,MAAM,cAC1C,OAAO;GAAE,OAAO;GAAM,cAAc,MAAM;EAAS;EAErD,IAAI,MAAM,aAAa,MAAM,cAC3B,OAAO,EAAE,cAAc,MAAM,SAAS;EAExC,OAAO;CACT;CAEA,SAAS;EACP,IAAI,KAAK,MAAM,OACb,OAAO,KAAK,MAAM,WAAW,KAAK,MAAM,aACtC,KAAK,gBAAgB,EAAE,OAAO,KAAK,EAAE,CACvC;EAGF,OAAO,KAAK,MAAM;CACpB;AACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IconComponent } from '../Icon/index.js';
|
|
2
|
+
export interface ErrorMessageProps {
|
|
3
|
+
message: React.ReactNode;
|
|
4
|
+
title?: React.ReactNode;
|
|
5
|
+
details?: React.ReactNode;
|
|
6
|
+
defaultExpanded?: boolean;
|
|
7
|
+
expanded?: boolean;
|
|
8
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
9
|
+
copyable?: boolean;
|
|
10
|
+
icon?: IconComponent;
|
|
11
|
+
size?: 'sm' | 'md';
|
|
12
|
+
className?: string;
|
|
13
|
+
prettify?: boolean;
|
|
14
|
+
onClose?: () => void;
|
|
15
|
+
}
|
|
16
|
+
declare function ErrorMessage({ message, title, details, defaultExpanded, expanded: controlledExpanded, onExpandedChange, copyable, icon, size, className, prettify, onClose, }: ErrorMessageProps): import("react").JSX.Element | null;
|
|
17
|
+
export { ErrorMessage };
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn.js";
|
|
2
|
+
import { Text } from "../Text/Text.js";
|
|
3
|
+
import { CaretRightIcon, XCloseIcon } from "../../icons/PaddedPhosphorIcons.js";
|
|
4
|
+
import { Icon } from "../Icon/Icon.js";
|
|
5
|
+
import { IconButton } from "../IconButton/IconButton.js";
|
|
6
|
+
import { CopyIconButton } from "../CopyButton/CopyButton.js";
|
|
7
|
+
import { prettifyErrorPayload } from "../../utils/prettify-error-payload.js";
|
|
8
|
+
import { useId, useLayoutEffect, useRef, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { ExclamationMarkIcon } from "@phosphor-icons/react/dist/ssr/ExclamationMark";
|
|
11
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
12
|
+
//#region packages/components/src/components/ErrorMessage/ErrorMessage.tsx
|
|
13
|
+
var sizeStyles = {
|
|
14
|
+
sm: {
|
|
15
|
+
container: "gap-space-1 pl-1.5 pr-space-1 py-0.5",
|
|
16
|
+
textVariant: "xs"
|
|
17
|
+
},
|
|
18
|
+
md: {
|
|
19
|
+
container: "gap-space-2 pl-2.5 pr-space-2 py-space-1",
|
|
20
|
+
textVariant: "sm"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function nodeToText(node) {
|
|
24
|
+
if (node == null || typeof node === "boolean") return "";
|
|
25
|
+
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
26
|
+
if (Array.isArray(node)) return node.map(nodeToText).join("");
|
|
27
|
+
if (typeof node === "object" && "props" in node && node.props && typeof node.props === "object" && "children" in node.props) return nodeToText(node.props.children);
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
function ErrorMessage({ message, title, details, defaultExpanded = false, expanded: controlledExpanded, onExpandedChange, copyable = true, icon, size = "sm", className, prettify = true, onClose }) {
|
|
31
|
+
const styles = sizeStyles[size];
|
|
32
|
+
const displayMessage = prettify && typeof message === "string" ? prettifyErrorPayload(message) : message;
|
|
33
|
+
const [expanded = false, setExpanded] = useControllableState({
|
|
34
|
+
prop: controlledExpanded,
|
|
35
|
+
defaultProp: defaultExpanded,
|
|
36
|
+
onChange: onExpandedChange
|
|
37
|
+
});
|
|
38
|
+
const messageRef = useRef(null);
|
|
39
|
+
const [messageOverflows, setMessageOverflows] = useState(false);
|
|
40
|
+
useLayoutEffect(() => {
|
|
41
|
+
const el = messageRef.current;
|
|
42
|
+
if (el == null) return;
|
|
43
|
+
function recompute() {
|
|
44
|
+
const node = messageRef.current;
|
|
45
|
+
if (node == null) return;
|
|
46
|
+
setMessageOverflows(node.scrollWidth > node.clientWidth);
|
|
47
|
+
}
|
|
48
|
+
recompute();
|
|
49
|
+
const observer = new ResizeObserver(recompute);
|
|
50
|
+
observer.observe(el);
|
|
51
|
+
return () => observer.disconnect();
|
|
52
|
+
}, [displayMessage, size]);
|
|
53
|
+
const toggleExpanded = () => setExpanded(!expanded);
|
|
54
|
+
const copyText = [nodeToText(displayMessage), nodeToText(details)].filter(Boolean).join("\n\n");
|
|
55
|
+
const hasMessage = displayMessage != null && displayMessage !== false && displayMessage !== "";
|
|
56
|
+
const titleNode = title != null && title !== false && title !== "" ? title : "Error";
|
|
57
|
+
const hasDetails = details != null && details !== false && details !== "";
|
|
58
|
+
const messageIsMultiline = typeof displayMessage === "string" && displayMessage.includes("\n");
|
|
59
|
+
const canExpand = hasDetails || messageOverflows || messageIsMultiline || expanded;
|
|
60
|
+
const showCopy = copyable && copyText.length > 0;
|
|
61
|
+
const expandableAreaId = useId();
|
|
62
|
+
const expandLabel = expanded ? "Collapse" : hasDetails ? "Show error details" : "Show full error message";
|
|
63
|
+
if (!hasMessage) return null;
|
|
64
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
65
|
+
role: "alert",
|
|
66
|
+
className: cn("w-full rounded-sm bg-error", styles.container, className),
|
|
67
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
68
|
+
className: "flex w-full items-center gap-space-2",
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ jsx("span", {
|
|
71
|
+
"aria-hidden": "true",
|
|
72
|
+
className: "shrink-0",
|
|
73
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
74
|
+
icon: icon ?? ExclamationMarkIcon,
|
|
75
|
+
color: "error",
|
|
76
|
+
size: "xs",
|
|
77
|
+
rounded: true,
|
|
78
|
+
weight: icon == null ? "regular" : void 0
|
|
79
|
+
})
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ jsxs("div", {
|
|
82
|
+
className: cn("flex min-w-0 flex-1 flex-row gap-space-1"),
|
|
83
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
84
|
+
variant: styles.textVariant,
|
|
85
|
+
weight: "medium",
|
|
86
|
+
className: cn("flex shrink-0 items-center whitespace-nowrap leading-4 text-error-secondary dark:text-error-tertiary"),
|
|
87
|
+
children: titleNode
|
|
88
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
89
|
+
ref: messageRef,
|
|
90
|
+
"aria-hidden": expanded,
|
|
91
|
+
variant: styles.textVariant,
|
|
92
|
+
className: cn("min-w-0 truncate whitespace-nowrap leading-4 text-error-secondary dark:text-error-primary", expanded && "pointer-events-none h-0"),
|
|
93
|
+
children: displayMessage
|
|
94
|
+
})]
|
|
95
|
+
}),
|
|
96
|
+
(showCopy || canExpand || onClose) && /* @__PURE__ */ jsxs("div", {
|
|
97
|
+
className: cn("flex shrink-0 items-center"),
|
|
98
|
+
children: [
|
|
99
|
+
showCopy && /* @__PURE__ */ jsx(CopyIconButton, {
|
|
100
|
+
copy: copyText,
|
|
101
|
+
copyText: "Copy error",
|
|
102
|
+
size: "xs",
|
|
103
|
+
variant: "plain",
|
|
104
|
+
color: "secondary"
|
|
105
|
+
}),
|
|
106
|
+
canExpand && /* @__PURE__ */ jsx(IconButton, {
|
|
107
|
+
icon: CaretRightIcon,
|
|
108
|
+
label: expandLabel,
|
|
109
|
+
"aria-expanded": expanded,
|
|
110
|
+
"aria-controls": expandableAreaId,
|
|
111
|
+
variant: "plain",
|
|
112
|
+
color: "secondary",
|
|
113
|
+
size: "xs",
|
|
114
|
+
onClick: toggleExpanded,
|
|
115
|
+
iconClassName: cn("transition-transform", expanded && "rotate-90")
|
|
116
|
+
}),
|
|
117
|
+
onClose && /* @__PURE__ */ jsx(IconButton, {
|
|
118
|
+
icon: XCloseIcon,
|
|
119
|
+
label: "Dismiss",
|
|
120
|
+
variant: "plain",
|
|
121
|
+
color: "secondary",
|
|
122
|
+
size: "xs",
|
|
123
|
+
onClick: onClose
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}), expanded && /* @__PURE__ */ jsxs("div", {
|
|
129
|
+
id: expandableAreaId,
|
|
130
|
+
className: cn("flex flex-col gap-space-1 pb-space-1 pl-space-5 pr-space-1"),
|
|
131
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
132
|
+
variant: styles.textVariant,
|
|
133
|
+
className: cn("min-w-0 whitespace-pre-wrap break-words leading-4 text-error-secondary dark:text-error-primary"),
|
|
134
|
+
children: displayMessage
|
|
135
|
+
}), hasDetails && /* @__PURE__ */ jsx(Text, {
|
|
136
|
+
variant: styles.textVariant,
|
|
137
|
+
className: "whitespace-pre-wrap break-words font-light text-error-tertiary",
|
|
138
|
+
children: details
|
|
139
|
+
})]
|
|
140
|
+
})]
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
export { ErrorMessage };
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=ErrorMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorMessage.js","names":[],"sources":["../../../src/components/ErrorMessage/ErrorMessage.tsx"],"sourcesContent":["import { useId, useLayoutEffect, useRef, useState } from 'react';\n\nimport { ExclamationMarkIcon } from '@phosphor-icons/react/dist/ssr/ExclamationMark';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\n\nimport { CaretRightIcon, XCloseIcon } from '../../icons/PaddedPhosphorIcons';\nimport { cn } from '../../utils/cn';\nimport { prettifyErrorPayload } from '../../utils/prettify-error-payload';\nimport { CopyIconButton } from '../CopyButton';\nimport { Icon } from '../Icon';\nimport type { IconComponent } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport { Text } from '../Text';\n\nexport interface ErrorMessageProps {\n message: React.ReactNode;\n title?: React.ReactNode;\n details?: React.ReactNode;\n defaultExpanded?: boolean;\n expanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n copyable?: boolean;\n icon?: IconComponent;\n size?: 'sm' | 'md';\n className?: string;\n prettify?: boolean;\n onClose?: () => void;\n}\n\nconst sizeStyles = {\n sm: {\n container: 'gap-space-1 pl-1.5 pr-space-1 py-0.5',\n\n textVariant: 'xs',\n },\n md: {\n container: 'gap-space-2 pl-2.5 pr-space-2 py-space-1',\n textVariant: 'sm',\n },\n} as const;\n\nfunction nodeToText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(nodeToText).join('');\n if (\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n return nodeToText((node.props as { children: React.ReactNode }).children);\n }\n return '';\n}\n\nfunction ErrorMessage({\n message,\n title,\n details,\n defaultExpanded = false,\n expanded: controlledExpanded,\n onExpandedChange,\n copyable = true,\n icon,\n size = 'sm',\n className,\n prettify = true,\n onClose,\n}: ErrorMessageProps) {\n const styles = sizeStyles[size];\n const displayMessage =\n prettify && typeof message === 'string'\n ? prettifyErrorPayload(message)\n : message;\n const [expanded = false, setExpanded] = useControllableState({\n prop: controlledExpanded,\n defaultProp: defaultExpanded,\n onChange: onExpandedChange,\n });\n\n const messageRef = useRef<HTMLElement>(null);\n const [messageOverflows, setMessageOverflows] = useState(false);\n useLayoutEffect(() => {\n const el = messageRef.current;\n if (el == null) return;\n\n function recompute() {\n const node = messageRef.current;\n if (node == null) return;\n setMessageOverflows(node.scrollWidth > node.clientWidth);\n }\n\n recompute();\n const observer = new ResizeObserver(recompute);\n observer.observe(el);\n return () => observer.disconnect();\n }, [displayMessage, size]);\n const toggleExpanded = () => setExpanded(!expanded);\n\n const copyText = [nodeToText(displayMessage), nodeToText(details)]\n .filter(Boolean)\n .join('\\n\\n');\n\n const hasMessage =\n displayMessage != null && displayMessage !== false && displayMessage !== '';\n const hasTitle = title != null && title !== false && title !== '';\n const titleNode = hasTitle ? title : 'Error';\n const hasDetails = details != null && details !== false && details !== '';\n const messageIsMultiline =\n typeof displayMessage === 'string' && displayMessage.includes('\\n');\n const canExpand =\n hasDetails || messageOverflows || messageIsMultiline || expanded;\n const showCopy = copyable && copyText.length > 0;\n\n const expandableAreaId = useId();\n const expandLabel = expanded\n ? 'Collapse'\n : hasDetails\n ? 'Show error details'\n : 'Show full error message';\n\n if (!hasMessage) return null;\n\n return (\n <div\n role=\"alert\"\n className={cn('w-full rounded-sm bg-error', styles.container, className)}\n >\n <div className=\"flex w-full items-center gap-space-2\">\n <span aria-hidden=\"true\" className=\"shrink-0\">\n <Icon\n icon={icon ?? ExclamationMarkIcon}\n color=\"error\"\n size=\"xs\"\n rounded\n weight={icon == null ? 'regular' : undefined}\n />\n </span>\n <div className={cn('flex min-w-0 flex-1 flex-row gap-space-1')}>\n <Text\n variant={styles.textVariant}\n weight=\"medium\"\n className={cn(\n 'flex shrink-0 items-center whitespace-nowrap leading-4 text-error-secondary dark:text-error-tertiary'\n )}\n >\n {titleNode}\n </Text>\n <Text\n ref={messageRef}\n aria-hidden={expanded}\n variant={styles.textVariant}\n className={cn(\n 'min-w-0 truncate whitespace-nowrap leading-4 text-error-secondary dark:text-error-primary',\n expanded && 'pointer-events-none h-0'\n )}\n >\n {displayMessage}\n </Text>\n </div>\n {(showCopy || canExpand || onClose) && (\n <div className={cn('flex shrink-0 items-center')}>\n {showCopy && (\n <CopyIconButton\n copy={copyText}\n copyText=\"Copy error\"\n size=\"xs\"\n variant=\"plain\"\n color=\"secondary\"\n />\n )}\n {canExpand && (\n <IconButton\n icon={CaretRightIcon}\n label={expandLabel}\n aria-expanded={expanded}\n aria-controls={expandableAreaId}\n variant=\"plain\"\n color=\"secondary\"\n size=\"xs\"\n onClick={toggleExpanded}\n iconClassName={cn(\n 'transition-transform',\n expanded && 'rotate-90'\n )}\n />\n )}\n {onClose && (\n <IconButton\n icon={XCloseIcon}\n label=\"Dismiss\"\n variant=\"plain\"\n color=\"secondary\"\n size=\"xs\"\n onClick={onClose}\n />\n )}\n </div>\n )}\n </div>\n {expanded && (\n <div\n id={expandableAreaId}\n className={cn(\n 'flex flex-col gap-space-1 pb-space-1 pl-space-5 pr-space-1'\n )}\n >\n <Text\n variant={styles.textVariant}\n className={cn(\n 'min-w-0 whitespace-pre-wrap break-words leading-4 text-error-secondary dark:text-error-primary'\n )}\n >\n {displayMessage}\n </Text>\n {hasDetails && (\n <Text\n variant={styles.textVariant}\n className=\"whitespace-pre-wrap break-words font-light text-error-tertiary\"\n >\n {details}\n </Text>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { ErrorMessage };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
interface ErrorStateProps {
|
|
3
|
+
/** Primary heading. */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Supporting copy below the title. */
|
|
6
|
+
message?: string;
|
|
7
|
+
/** When `404`, renders the illustrated not-found background. */
|
|
8
|
+
status?: number | null;
|
|
9
|
+
/** URL for the default back button (ignored when `action` is set). */
|
|
10
|
+
backTo?: string;
|
|
11
|
+
/** Label for the default back button. Defaults to `'Return to home'`. */
|
|
12
|
+
backLabel?: string;
|
|
13
|
+
/** Custom action node rendered in place of the default back button. */
|
|
14
|
+
action?: ReactNode;
|
|
15
|
+
/** Extra classes for the outer container. */
|
|
16
|
+
className?: string;
|
|
17
|
+
/** Extra classes for the inner content wrapper (e.g. to override top padding). */
|
|
18
|
+
contentClassName?: string;
|
|
19
|
+
/** Suppress the animated wave under the 404 illustration. */
|
|
20
|
+
withoutOverlay?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function ErrorState({ title, message, status, backTo, backLabel, action, className, contentClassName, withoutOverlay, }: ErrorStateProps): import("react").JSX.Element;
|
|
23
|
+
export type { ErrorStateProps };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { IconComponent, IconWeight } from '../../utils/icon-types.js';
|
|
3
|
+
import type { TooltipProps } from '../Tooltip/index.js';
|
|
4
|
+
export interface GroupedTabOption<T> {
|
|
5
|
+
display?: ReactNode | ((isActive: boolean) => ReactNode);
|
|
6
|
+
value: T;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
tooltip?: string | ReactNode;
|
|
9
|
+
tooltipProps?: Omit<TooltipProps, 'children' | 'title'>;
|
|
10
|
+
icon?: IconComponent;
|
|
11
|
+
iconWeight?: IconWeight;
|
|
12
|
+
leftDecorator?: ReactNode;
|
|
13
|
+
rightDecorator?: ReactNode;
|
|
14
|
+
className?: string;
|
|
15
|
+
size?: 'xs' | 'sm' | 'md';
|
|
16
|
+
textClassName?: string;
|
|
17
|
+
'aria-label'?: string;
|
|
18
|
+
}
|
|
19
|
+
export type GroupedTabsProps<T extends string | number> = {
|
|
20
|
+
value: T;
|
|
21
|
+
onChange: (value: T) => void;
|
|
22
|
+
options: readonly GroupedTabOption<T>[];
|
|
23
|
+
className?: string;
|
|
24
|
+
size?: 'xs' | 'sm' | 'md';
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
tooltip?: string | ReactNode;
|
|
27
|
+
selectionClassName?: string;
|
|
28
|
+
/** Optional class for the indicator (e.g. to override top/height for custom margins) */
|
|
29
|
+
indicatorClassName?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare const GroupedTabs: <T extends string | number>({ value, onChange, options, className, size, disabled, tooltip, selectionClassName, indicatorClassName, }: GroupedTabsProps<T>) => import("react").JSX.Element;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn.js";
|
|
2
|
+
import { Text } from "../Text/Text.js";
|
|
3
|
+
import { Tooltip } from "../Tooltip/Tooltip.js";
|
|
4
|
+
import { useEffect, useRef, useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region packages/components/src/components/GroupedTabs/GroupedTabs.tsx
|
|
7
|
+
var GroupedTabs = ({ value, onChange, options, className, size = "sm", disabled, tooltip, selectionClassName, indicatorClassName }) => {
|
|
8
|
+
const containerRef = useRef(null);
|
|
9
|
+
const buttonRefs = useRef([]);
|
|
10
|
+
const [clipState, setClipState] = useState({
|
|
11
|
+
path: "",
|
|
12
|
+
isFirst: true,
|
|
13
|
+
animate: false
|
|
14
|
+
});
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const container = containerRef.current;
|
|
17
|
+
const activeIndex = options.findIndex((option) => option.value === value);
|
|
18
|
+
const activeButton = buttonRefs.current[activeIndex];
|
|
19
|
+
if (activeButton && container) {
|
|
20
|
+
const containerRect = container.getBoundingClientRect();
|
|
21
|
+
const buttonRect = activeButton.getBoundingClientRect();
|
|
22
|
+
const roundValue = size === "xs" ? "1px" : size === "sm" ? "2px" : "4px";
|
|
23
|
+
const top = buttonRect.top - containerRect.top - container.clientTop;
|
|
24
|
+
const bottom = containerRect.bottom - buttonRect.bottom - container.clientTop;
|
|
25
|
+
const left = buttonRect.left - containerRect.left - container.clientLeft;
|
|
26
|
+
const right = containerRect.right - buttonRect.right - container.clientLeft;
|
|
27
|
+
setClipState((prev) => ({
|
|
28
|
+
path: `inset(${top}px ${right}px ${bottom}px ${left}px round ${roundValue})`,
|
|
29
|
+
isFirst: false,
|
|
30
|
+
animate: !prev.isFirst
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
}, [
|
|
34
|
+
size,
|
|
35
|
+
value,
|
|
36
|
+
options
|
|
37
|
+
]);
|
|
38
|
+
const isActive = (option) => option.value === value;
|
|
39
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
40
|
+
title: tooltip,
|
|
41
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
42
|
+
ref: containerRef,
|
|
43
|
+
className: cn("relative flex w-fit border border-subtle bg-surface-level-1 p-0.5 dark:border-muted", size === "xs" ? "gap-px" : "gap-0.5", size === "xs" ? "rounded-[2px]" : size === "sm" ? "rounded-[3px]" : "rounded-sm", className),
|
|
44
|
+
children: [clipState.path && /* @__PURE__ */ jsx("div", {
|
|
45
|
+
"aria-hidden": true,
|
|
46
|
+
className: cn("pointer-events-none absolute inset-0 bg-surface-level-4", selectionClassName, indicatorClassName),
|
|
47
|
+
style: {
|
|
48
|
+
clipPath: clipState.path,
|
|
49
|
+
transition: clipState.animate ? "clip-path 0.25s ease-out, background-color 0.25s ease-out" : "none"
|
|
50
|
+
}
|
|
51
|
+
}), options.map((option, idx) => /* @__PURE__ */ jsx(Tooltip, {
|
|
52
|
+
title: option.tooltip,
|
|
53
|
+
...option.tooltipProps,
|
|
54
|
+
children: /* @__PURE__ */ jsxs("button", {
|
|
55
|
+
ref: (el) => {
|
|
56
|
+
buttonRefs.current[idx] = el;
|
|
57
|
+
},
|
|
58
|
+
type: "button",
|
|
59
|
+
"aria-label": option["aria-label"],
|
|
60
|
+
onClick: () => onChange(option.value),
|
|
61
|
+
disabled: option.disabled || disabled,
|
|
62
|
+
className: cn("relative flex items-center gap-space-1", "transition-colors duration-fast", {
|
|
63
|
+
"rounded-xs px-space-1 py-px": size === "xs",
|
|
64
|
+
"rounded-xs px-space-2 py-0.5": size === "sm",
|
|
65
|
+
"rounded-sm px-space-2 py-space-1": size === "md"
|
|
66
|
+
}, {
|
|
67
|
+
"text-primary": isActive(option),
|
|
68
|
+
"text-secondary hover:bg-surface-level-1-hover": !isActive(option)
|
|
69
|
+
}, (option.disabled || disabled) && "text-disabled hover:bg-transparent", option.className),
|
|
70
|
+
children: [
|
|
71
|
+
option.icon && /* @__PURE__ */ jsx(option.icon, {
|
|
72
|
+
"aria-hidden": true,
|
|
73
|
+
className: size === "xs" ? "size-3" : "size-4",
|
|
74
|
+
weight: option.iconWeight
|
|
75
|
+
}),
|
|
76
|
+
option.leftDecorator,
|
|
77
|
+
option.display && (typeof option.display === "function" ? option.display(isActive(option)) : /* @__PURE__ */ jsx(Text, {
|
|
78
|
+
variant: size === "xs" ? "xs" : "sm",
|
|
79
|
+
className: cn("font-medium", option.textClassName),
|
|
80
|
+
children: option.display
|
|
81
|
+
})),
|
|
82
|
+
option.rightDecorator
|
|
83
|
+
]
|
|
84
|
+
})
|
|
85
|
+
}, option.value))]
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
export { GroupedTabs };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=GroupedTabs.js.map
|