@langchain/macaw-components 1.0.0-beta.1 → 1.0.0-beta.6
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/dist/_chunks/{LoadingIndicator-DgtU9aqD.js → LoadingIndicator-CDcArsiM.js} +13 -12
- package/dist/_chunks/LoadingIndicator-CDcArsiM.js.map +1 -0
- package/dist/_chunks/render-attachment-icon-BWBEMxXZ.js +270 -0
- package/dist/_chunks/render-attachment-icon-BWBEMxXZ.js.map +1 -0
- package/dist/catalog.json +527 -408
- package/dist/components/Attachment/Attachment.d.ts +21 -0
- package/dist/components/Attachment/Attachment.js +165 -0
- package/dist/components/Attachment/Attachment.js.map +1 -0
- package/dist/components/Attachment/AttachmentList.d.ts +5 -0
- package/dist/components/Attachment/AttachmentList.js +32 -0
- package/dist/components/Attachment/AttachmentList.js.map +1 -0
- package/dist/components/Attachment/index.d.ts +4 -0
- package/dist/components/Attachment/index.js +3 -0
- package/dist/components/Attachment/render-attachment-icon.d.ts +3 -0
- package/dist/components/Attachment/render-attachment-icon.js +2 -0
- package/dist/components/Avatar/Avatar.js +2 -2
- package/dist/components/Badge/Badge.d.ts +2 -0
- package/dist/components/Badge/Badge.js +12 -1
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Banner/Banner.js +1 -1
- package/dist/components/Button/Button.js +1 -1
- package/dist/components/Button/constants.js +2 -2
- package/dist/components/Button/constants.js.map +1 -1
- package/dist/components/ChartCard/ChartCard.d.ts +1 -4
- package/dist/components/ChartCard/ChartCard.js +2 -2
- package/dist/components/ChartCard/ChartCard.js.map +1 -1
- package/dist/components/ChartCard/ChartCardSkeleton.d.ts +1 -1
- package/dist/components/ChartCard/ChartCardSkeleton.js +37 -0
- package/dist/components/ChartCard/ChartCardSkeleton.js.map +1 -1
- package/dist/components/ChartLegend/ChartLegend.js +2 -2
- package/dist/components/ChartLegend/ChartLegendItemRenderer.js +2 -2
- package/dist/components/ChartLegend/ChartLegendItemRenderer.js.map +1 -1
- package/dist/components/Code/Code.utils.d.ts +3 -2
- package/dist/components/Code/Code.utils.js +7 -3
- package/dist/components/Code/Code.utils.js.map +1 -1
- package/dist/components/Code/CodeLanguageSelect.d.ts +7 -0
- package/dist/components/Code/CodeLanguageSelect.js +29 -0
- package/dist/components/Code/CodeLanguageSelect.js.map +1 -0
- package/dist/components/Code/CodeLite.js +3 -0
- package/dist/components/Code/CodeLite.js.map +1 -1
- package/dist/components/Code/CodeToolbar.d.ts +7 -0
- package/dist/components/Code/CodeToolbar.js +19 -0
- package/dist/components/Code/CodeToolbar.js.map +1 -0
- package/dist/components/Code/codeLanguages.d.ts +7 -0
- package/dist/components/Code/codeLanguages.js +59 -0
- package/dist/components/Code/codeLanguages.js.map +1 -0
- package/dist/components/Code/index.d.ts +15 -2
- package/dist/components/Code/index.js +70 -50
- package/dist/components/Code/index.js.map +1 -1
- package/dist/components/Code/types.d.ts +1 -1
- package/dist/components/Command/Command.d.ts +10 -13
- package/dist/components/Command/Command.js +7 -2
- package/dist/components/Command/Command.js.map +1 -1
- package/dist/components/Command/CommandMenu.d.ts +7 -1
- package/dist/components/Command/CommandMenu.js +17 -9
- package/dist/components/Command/CommandMenu.js.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.d.ts +6 -0
- package/dist/components/ContextMenu/ContextMenu.js +3 -2
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton/CopyButton.js +2 -2
- package/dist/components/Dialog/index.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +11 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +5 -4
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/components/ErrorMessage/ErrorMessage.js +1 -1
- package/dist/components/GroupedTabs/GroupedTabs.d.ts +5 -2
- package/dist/components/GroupedTabs/GroupedTabs.js +33 -26
- package/dist/components/GroupedTabs/GroupedTabs.js.map +1 -1
- package/dist/components/IconButton/IconButton.js +2 -2
- package/dist/components/Input/Input.js +1 -1
- package/dist/components/LineChart/LineChart.d.ts +2 -2
- package/dist/components/LineChart/LineChart.js +3 -1
- package/dist/components/LineChart/LineChart.js.map +1 -1
- package/dist/components/LineChart/LineChart.types.d.ts +16 -0
- package/dist/components/LineChart/LineChartPlot.d.ts +3 -2
- package/dist/components/LineChart/LineChartPlot.js +8 -1
- package/dist/components/LineChart/LineChartPlot.js.map +1 -1
- package/dist/components/LineChart/LineChartVerticalMarkers.d.ts +8 -0
- package/dist/components/LineChart/LineChartVerticalMarkers.js +47 -0
- package/dist/components/LineChart/LineChartVerticalMarkers.js.map +1 -0
- package/dist/components/LineChart/index.d.ts +1 -1
- package/dist/components/Logo/index.js +11 -6
- package/dist/components/Logo/index.js.map +1 -1
- package/dist/components/MetricChart/MetricChart.d.ts +2 -0
- package/dist/components/MetricChart/MetricChart.js +15 -4
- package/dist/components/MetricChart/MetricChart.js.map +1 -1
- package/dist/components/MetricChart/index.d.ts +1 -1
- package/dist/components/Pane/Pane.js +2 -2
- package/dist/components/SankeyChart/AnimatedSankeyLink.d.ts +17 -0
- package/dist/components/SankeyChart/AnimatedSankeyLink.js +44 -0
- package/dist/components/SankeyChart/AnimatedSankeyLink.js.map +1 -0
- package/dist/components/SankeyChart/AnimatedSankeyNode.d.ts +16 -0
- package/dist/components/SankeyChart/AnimatedSankeyNode.js +42 -0
- package/dist/components/SankeyChart/AnimatedSankeyNode.js.map +1 -0
- package/dist/components/SankeyChart/SankeyChart.d.ts +42 -0
- package/dist/components/SankeyChart/SankeyChart.js +185 -0
- package/dist/components/SankeyChart/SankeyChart.js.map +1 -0
- package/dist/components/SankeyChart/SankeyChart.types.d.ts +90 -0
- package/dist/components/SankeyChart/SankeyChart.types.js +0 -0
- package/dist/components/SankeyChart/SankeyChart.utils.d.ts +21 -0
- package/dist/components/SankeyChart/SankeyChart.utils.js +299 -0
- package/dist/components/SankeyChart/SankeyChart.utils.js.map +1 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.d.ts +10 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.js +30 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.js.map +1 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.utils.d.ts +9 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.utils.js +29 -0
- package/dist/components/SankeyChart/SankeyNodeLabel.utils.js.map +1 -0
- package/dist/components/SankeyChart/constants.d.ts +22 -0
- package/dist/components/SankeyChart/constants.js +27 -0
- package/dist/components/SankeyChart/constants.js.map +1 -0
- package/dist/components/SankeyChart/index.d.ts +5 -0
- package/dist/components/SankeyChart/index.js +4 -0
- package/dist/components/Select/Select.js +5 -5
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/SelectPrimitive.d.ts +6 -0
- package/dist/components/Select/SelectPrimitive.js +3 -2
- package/dist/components/Select/SelectPrimitive.js.map +1 -1
- package/dist/components/Slider/Slider.js +10 -3
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/SplitViewPane/SplitViewPane.d.ts +2 -1
- package/dist/components/SplitViewPane/SplitViewPane.js +113 -219
- package/dist/components/SplitViewPane/SplitViewPane.js.map +1 -1
- package/dist/components/SplitViewPane/SplitViewPaneHeader.js +2 -2
- package/dist/components/SplitViewPane/useShowChildren.d.ts +5 -0
- package/dist/components/SplitViewPane/useShowChildren.js +14 -0
- package/dist/components/SplitViewPane/useShowChildren.js.map +1 -0
- package/dist/components/SplitViewPane/useSplitViewPaneResize.d.ts +21 -0
- package/dist/components/SplitViewPane/useSplitViewPaneResize.js +145 -0
- package/dist/components/SplitViewPane/useSplitViewPaneResize.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +4 -3
- package/dist/components/Textarea/Textarea.js +7 -21
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/ThinkingState/LoadingIndicator.d.ts +1 -0
- package/dist/components/ThinkingState/LoadingIndicator.js +1 -1
- package/dist/components/ThinkingState/ThinkingState.d.ts +1 -0
- package/dist/components/ThinkingState/ThinkingState.js +5 -4
- package/dist/components/ThinkingState/ThinkingState.js.map +1 -1
- package/dist/components/ThinkingState/index.js +1 -1
- package/dist/components/Toast/index.js +33 -28
- package/dist/components/Toast/index.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +2 -2
- package/dist/components/Typeahead/Typeahead.js +18 -8
- package/dist/components/Typeahead/Typeahead.js.map +1 -1
- package/dist/components/Typeahead/Typeahead.types.d.ts +2 -0
- package/dist/components/Typeahead/TypeaheadParts.d.ts +3 -1
- package/dist/components/Typeahead/TypeaheadParts.js +7 -6
- package/dist/components/Typeahead/TypeaheadParts.js.map +1 -1
- package/dist/components/Typeahead/TypeaheadView.js +19 -13
- package/dist/components/Typeahead/TypeaheadView.js.map +1 -1
- package/dist/components/Typeahead/useTypeaheadDomSync.d.ts +1 -1
- package/dist/components/Typeahead/useTypeaheadDomSync.js +14 -8
- package/dist/components/Typeahead/useTypeaheadDomSync.js.map +1 -1
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.d.ts +2 -1
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js +10 -9
- package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js.map +1 -1
- package/dist/components/UnsavedChangesDialog.js +2 -2
- package/dist/components/index.d.ts +3 -1
- package/dist/components/index.js +7 -5
- package/dist/components.css +22 -18
- package/dist/hooks/useDebouncedCommit.d.ts +14 -0
- package/dist/hooks/useDebouncedCommit.js +35 -0
- package/dist/hooks/useDebouncedCommit.js.map +1 -0
- package/dist/icons/LongTailPhosphorIcons.js +1 -1
- package/dist/icons/PaddedPhosphorIcons.d.ts +1 -0
- package/dist/icons/PaddedPhosphorIcons.js +4 -2
- package/dist/icons/PaddedPhosphorIcons.js.map +1 -1
- package/dist/icons/WeightedPhosphorIcons.d.ts +1 -0
- package/dist/icons/WeightedPhosphorIcons.js +3 -1
- package/dist/icons/WeightedPhosphorIcons.js.map +1 -1
- package/dist/icons/index.js +3 -3
- package/dist/index.js +7 -5
- package/dist/utilities.css +1 -1
- package/dist/utils/chartColors.d.ts +2 -1
- package/dist/utils/chartColors.js +2 -1
- package/dist/utils/chartColors.js.map +1 -1
- package/dist/utils/componentSizes.d.ts +0 -1
- package/dist/utils/componentSizes.js.map +1 -1
- package/dist/utils/lazy-codemirror-loader.d.ts +0 -2
- package/dist/utils/lazy-codemirror-loader.js +1 -3
- package/dist/utils/lazy-codemirror-loader.js.map +1 -1
- package/docs/DESIGN.md +17 -0
- package/docs/STYLES.md +4 -1
- package/package.json +21 -8
- package/dist/_chunks/LoadingIndicator-DgtU9aqD.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from "../../utils/cn.js";
|
|
2
|
+
import { OPTION_ROW_SIZES } from "../../utils/componentSizes.js";
|
|
2
3
|
import zIndices from "../../utils/zIndices.js";
|
|
3
4
|
import { useZIndex } from "../../utils/useZIndex.js";
|
|
4
5
|
import { ZIndexProvider } from "../../utils/ZIndexContext.js";
|
|
@@ -99,9 +100,9 @@ var SelectLabel = React$1.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
99
100
|
...props
|
|
100
101
|
}));
|
|
101
102
|
SelectLabel.displayName = RadixSelect.Label.displayName;
|
|
102
|
-
var SelectItem = React$1.forwardRef(({ className, children, checkmarkPosition = "left", selectedIndicator = "checkmark", ...props }, ref) => /* @__PURE__ */ jsxs(RadixSelect.Item, {
|
|
103
|
+
var SelectItem = React$1.forwardRef(({ className, children, checkmarkPosition = "left", selectedIndicator = "checkmark", size = "md", ...props }, ref) => /* @__PURE__ */ jsxs(RadixSelect.Item, {
|
|
103
104
|
ref,
|
|
104
|
-
className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1
|
|
105
|
+
className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-space-1 pr-space-2 outline-none focus:bg-elevated-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50", OPTION_ROW_SIZES[size].minHeightClassName, size === "sm" ? "text-xs leading-4" : "text-sm", selectedIndicator === "background" ? "pl-space-2 data-[state=checked]:bg-selected data-[state=checked]:focus:bg-selected-hover" : checkmarkPosition === "left" ? "pl-space-6" : "pl-space-2", className),
|
|
105
106
|
...props,
|
|
106
107
|
children: [selectedIndicator === "checkmark" && /* @__PURE__ */ jsx("span", {
|
|
107
108
|
className: cn("absolute flex h-3.5 w-3.5 items-center justify-center", checkmarkPosition === "left" ? "left-2" : "right-2"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectPrimitive.js","names":[],"sources":["../../../src/components/Select/SelectPrimitive.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as RadixSelect from '@radix-ui/react-select';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\n\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CheckIcon,\n} from '../../icons/PaddedPhosphorIcons';\nimport { cn } from '../../utils/cn';\nimport { useZIndex } from '../../utils/useZIndex';\nimport { ZIndexProvider } from '../../utils/ZIndexContext';\nimport zIndices from '../../utils/zIndices';\n\nexport const SelectRoot: typeof RadixSelect.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 <RadixSelect.Root\n {...props}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={undefined}\n />\n );\n};\n\nexport type SelectTriggerProps = React.ComponentPropsWithoutRef<\n typeof RadixSelect.Trigger\n> & {\n iconClassName?: string;\n};\n\nexport const SelectTrigger = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Trigger>,\n SelectTriggerProps\n>(({ className, children, iconClassName, ...props }, ref) => {\n if (props.asChild) {\n return (\n <RadixSelect.Trigger\n ref={ref}\n className={cn(\n 'flex items-center justify-between gap-space-2 rounded-md border border-default bg-transparent p-1.5 px-2.5 text-sm focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-secondary [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {props.asChild ? children : <span>{children}</span>}\n </RadixSelect.Trigger>\n );\n }\n\n return (\n <RadixSelect.Trigger\n ref={ref}\n className={cn(\n 'flex items-center justify-between gap-space-2 rounded-md border border-default bg-transparent p-1.5 px-2.5 text-sm focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-secondary [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <RadixSelect.Icon asChild>\n <span\n aria-hidden\n className={cn('inline-flex h-4 w-4 text-icon-primary', iconClassName)}\n >\n <CaretDownIcon size=\"100%\" weight=\"regular\" />\n </span>\n </RadixSelect.Icon>\n </RadixSelect.Trigger>\n );\n});\nSelectTrigger.displayName = RadixSelect.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof RadixSelect.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <RadixSelect.ScrollUpButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-space-1',\n className\n )}\n {...props}\n >\n <CaretUpIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = RadixSelect.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof RadixSelect.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <RadixSelect.ScrollDownButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-space-1',\n className\n )}\n {...props}\n >\n <CaretDownIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = RadixSelect.ScrollDownButton.displayName;\n\nexport const SelectContent = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Content>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => {\n const zIndex = useZIndex(zIndices.popover);\n\n return (\n <RadixSelect.Portal>\n <RadixSelect.Content\n ref={ref}\n className={cn(\n 'relative max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-default bg-elevated shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n style={{ zIndex, ...props.style }}\n >\n <ZIndexProvider value={zIndex}>\n <SelectScrollUpButton />\n <RadixSelect.Viewport\n className={cn(\n 'p-space-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </RadixSelect.Viewport>\n <SelectScrollDownButton />\n </ZIndexProvider>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n );\n});\nSelectContent.displayName = RadixSelect.Content.displayName;\n\nexport const SelectLabel = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Label>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Label>\n>(({ className, ...props }, ref) => (\n <RadixSelect.Label\n ref={ref}\n className={cn(\n 'py-1.5 pl-space-6 pr-space-2 text-sm font-semibold',\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = RadixSelect.Label.displayName;\n\nexport const SelectItem = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Item>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Item> & {\n checkmarkPosition?: 'left' | 'right';\n selectedIndicator?: 'checkmark' | 'background';\n }\n>(\n (\n {\n className,\n children,\n checkmarkPosition = 'left',\n selectedIndicator = 'checkmark',\n ...props\n },\n ref\n ) => (\n <RadixSelect.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pr-space-2 text-sm outline-none focus:bg-elevated-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n selectedIndicator === 'background'\n ? 'pl-space-2 data-[state=checked]:bg-selected data-[state=checked]:focus:bg-selected-hover'\n : checkmarkPosition === 'left'\n ? 'pl-space-6'\n : 'pl-space-2',\n className\n )}\n {...props}\n >\n {selectedIndicator === 'checkmark' && (\n <span\n className={cn(\n 'absolute flex h-3.5 w-3.5 items-center justify-center',\n checkmarkPosition === 'left' ? 'left-2' : 'right-2'\n )}\n >\n <RadixSelect.ItemIndicator>\n <CheckIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ItemIndicator>\n </span>\n )}\n\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n )\n);\nSelectItem.displayName = RadixSelect.Item.displayName;\n\nexport const SelectSeparator = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Separator>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Separator>\n>(({ className, ...props }, ref) => (\n <RadixSelect.Separator\n ref={ref}\n className={cn(\n '-mx-space-1 my-space-1 h-px border-b border-subtle',\n className\n )}\n {...props}\n />\n));\nSelectSeparator.displayName = RadixSelect.Separator.displayName;\n\nexport const SelectValue = RadixSelect.Value;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectPrimitive.js","names":[],"sources":["../../../src/components/Select/SelectPrimitive.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as RadixSelect from '@radix-ui/react-select';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\n\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CheckIcon,\n} from '../../icons/PaddedPhosphorIcons';\nimport { cn } from '../../utils/cn';\nimport {\n OPTION_ROW_SIZES,\n type OptionRowSize,\n} from '../../utils/componentSizes';\nimport { useZIndex } from '../../utils/useZIndex';\nimport { ZIndexProvider } from '../../utils/ZIndexContext';\nimport zIndices from '../../utils/zIndices';\n\nexport const SelectRoot: typeof RadixSelect.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 <RadixSelect.Root\n {...props}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={undefined}\n />\n );\n};\n\nexport type SelectTriggerProps = React.ComponentPropsWithoutRef<\n typeof RadixSelect.Trigger\n> & {\n iconClassName?: string;\n};\n\nexport const SelectTrigger = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Trigger>,\n SelectTriggerProps\n>(({ className, children, iconClassName, ...props }, ref) => {\n if (props.asChild) {\n return (\n <RadixSelect.Trigger\n ref={ref}\n className={cn(\n 'flex items-center justify-between gap-space-2 rounded-md border border-default bg-transparent p-1.5 px-2.5 text-sm focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-secondary [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {props.asChild ? children : <span>{children}</span>}\n </RadixSelect.Trigger>\n );\n }\n\n return (\n <RadixSelect.Trigger\n ref={ref}\n className={cn(\n 'flex items-center justify-between gap-space-2 rounded-md border border-default bg-transparent p-1.5 px-2.5 text-sm focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-secondary [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <RadixSelect.Icon asChild>\n <span\n aria-hidden\n className={cn('inline-flex h-4 w-4 text-icon-primary', iconClassName)}\n >\n <CaretDownIcon size=\"100%\" weight=\"regular\" />\n </span>\n </RadixSelect.Icon>\n </RadixSelect.Trigger>\n );\n});\nSelectTrigger.displayName = RadixSelect.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof RadixSelect.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <RadixSelect.ScrollUpButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-space-1',\n className\n )}\n {...props}\n >\n <CaretUpIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = RadixSelect.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof RadixSelect.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <RadixSelect.ScrollDownButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-space-1',\n className\n )}\n {...props}\n >\n <CaretDownIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = RadixSelect.ScrollDownButton.displayName;\n\nexport const SelectContent = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Content>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => {\n const zIndex = useZIndex(zIndices.popover);\n\n return (\n <RadixSelect.Portal>\n <RadixSelect.Content\n ref={ref}\n className={cn(\n 'relative max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-default bg-elevated shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n style={{ zIndex, ...props.style }}\n >\n <ZIndexProvider value={zIndex}>\n <SelectScrollUpButton />\n <RadixSelect.Viewport\n className={cn(\n 'p-space-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </RadixSelect.Viewport>\n <SelectScrollDownButton />\n </ZIndexProvider>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n );\n});\nSelectContent.displayName = RadixSelect.Content.displayName;\n\nexport const SelectLabel = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Label>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Label>\n>(({ className, ...props }, ref) => (\n <RadixSelect.Label\n ref={ref}\n className={cn(\n 'py-1.5 pl-space-6 pr-space-2 text-sm font-semibold',\n className\n )}\n {...props}\n />\n));\nSelectLabel.displayName = RadixSelect.Label.displayName;\n\nexport const SelectItem = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Item>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Item> & {\n checkmarkPosition?: 'left' | 'right';\n selectedIndicator?: 'checkmark' | 'background';\n /**\n * Controls minimum row height and default label typography.\n * Rich or multiline content grows intrinsically.\n */\n size?: OptionRowSize;\n }\n>(\n (\n {\n className,\n children,\n checkmarkPosition = 'left',\n selectedIndicator = 'checkmark',\n size = 'md',\n ...props\n },\n ref\n ) => (\n <RadixSelect.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-space-1 pr-space-2 outline-none focus:bg-elevated-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n OPTION_ROW_SIZES[size].minHeightClassName,\n size === 'sm' ? 'text-xs leading-4' : 'text-sm',\n selectedIndicator === 'background'\n ? 'pl-space-2 data-[state=checked]:bg-selected data-[state=checked]:focus:bg-selected-hover'\n : checkmarkPosition === 'left'\n ? 'pl-space-6'\n : 'pl-space-2',\n className\n )}\n {...props}\n >\n {selectedIndicator === 'checkmark' && (\n <span\n className={cn(\n 'absolute flex h-3.5 w-3.5 items-center justify-center',\n checkmarkPosition === 'left' ? 'left-2' : 'right-2'\n )}\n >\n <RadixSelect.ItemIndicator>\n <CheckIcon aria-hidden size={16} weight=\"regular\" />\n </RadixSelect.ItemIndicator>\n </span>\n )}\n\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n )\n);\nSelectItem.displayName = RadixSelect.Item.displayName;\n\nexport const SelectSeparator = React.forwardRef<\n React.ElementRef<typeof RadixSelect.Separator>,\n React.ComponentPropsWithoutRef<typeof RadixSelect.Separator>\n>(({ className, ...props }, ref) => (\n <RadixSelect.Separator\n ref={ref}\n className={cn(\n '-mx-space-1 my-space-1 h-px border-b border-subtle',\n className\n )}\n {...props}\n />\n));\nSelectSeparator.displayName = RadixSelect.Separator.displayName;\n\nexport const SelectValue = RadixSelect.Value;\n"],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ function fromArray(v, wasArray) {
|
|
|
20
20
|
*/
|
|
21
21
|
var Slider = ({ value, defaultValue, onChange, onChangeCommitted, min = 0, max = 100, step = 1, stepLabels, disabled = false, className, variant = "default", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, "data-testid": testId }) => {
|
|
22
22
|
const isRange = Array.isArray(value ?? defaultValue);
|
|
23
|
+
const thumbValues = toArray(value) ?? toArray(defaultValue) ?? [0];
|
|
24
|
+
const hasMultipleThumbs = thumbValues.length > 1;
|
|
23
25
|
const labeledSteps = stepLabels?.filter((s) => s.label);
|
|
24
26
|
const hasLabels = !!labeledSteps && labeledSteps.length > 0;
|
|
25
27
|
return /* @__PURE__ */ jsxs(SliderPrimitive.Root, {
|
|
@@ -32,15 +34,20 @@ var Slider = ({ value, defaultValue, onChange, onChangeCommitted, min = 0, max =
|
|
|
32
34
|
disabled,
|
|
33
35
|
onValueChange: (v) => onChange?.(fromArray(v, isRange)),
|
|
34
36
|
onValueCommit: (v) => onChangeCommitted?.(fromArray(v, isRange)),
|
|
35
|
-
"aria-label": ariaLabel,
|
|
36
|
-
"aria-labelledby": ariaLabelledby,
|
|
37
37
|
"data-testid": testId,
|
|
38
|
+
role: hasMultipleThumbs ? "group" : void 0,
|
|
39
|
+
"aria-label": hasMultipleThumbs ? ariaLabel : void 0,
|
|
40
|
+
"aria-labelledby": hasMultipleThumbs ? ariaLabelledby : void 0,
|
|
38
41
|
children: [
|
|
39
42
|
/* @__PURE__ */ jsx(SliderPrimitive.Track, {
|
|
40
43
|
className: cn("relative w-full grow overflow-hidden", variant === "thick" ? "mx-2 h-2 rounded-xs bg-surface-level-3" : "h-1.5 rounded-full bg-surface-level-4"),
|
|
41
44
|
children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: cn("absolute h-full", disabled ? "data-[disabled]:bg-brand-subtle" : "bg-control-active") })
|
|
42
45
|
}),
|
|
43
|
-
|
|
46
|
+
thumbValues.map((_, i) => /* @__PURE__ */ jsx(SliderPrimitive.Thumb, {
|
|
47
|
+
...!hasMultipleThumbs && ariaLabel !== void 0 && { "aria-label": ariaLabel },
|
|
48
|
+
"aria-labelledby": hasMultipleThumbs ? void 0 : ariaLabelledby,
|
|
49
|
+
className: cn("block rounded-full border-2 shadow transition", SELECTION_CONTROL_SIZES.sm.className, SELECTION_CONTROL_HIT_AREA_STYLES, "focus-visible:shadow-[0_0_0_4px_var(--bg-brand-subtle)] focus-visible:outline-none", disabled ? "border-muted bg-surface-level-3" : "cursor-pointer border-brand-300 bg-control-thumb hover:border-brand-400 dark:border-brand-500 dark:hover:border-brand-600")
|
|
50
|
+
}, i)),
|
|
44
51
|
hasLabels && /* @__PURE__ */ jsx("div", {
|
|
45
52
|
"aria-hidden": true,
|
|
46
53
|
className: "absolute bottom-2 w-full cursor-pointer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","names":[],"sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import * as SliderPrimitive from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils/cn';\nimport {\n SELECTION_CONTROL_HIT_AREA_STYLES,\n SELECTION_CONTROL_SIZES,\n} from '../../utils/componentSizes';\nimport { Text } from '../Text';\n\nexport interface SliderStepLabel {\n value: number;\n label?: string;\n}\n\nexport interface SliderProps {\n /** Current value. Pass a number for a single thumb, number[] for a range slider. */\n value?: number | number[];\n /** Default value (uncontrolled). */\n defaultValue?: number | number[];\n /** Called continuously as the value changes. */\n onChange?: (value: number | number[]) => void;\n /** Called when the user finishes dragging (mouse/touch up or keyboard interaction ends). */\n onChangeCommitted?: (value: number | number[]) => void;\n min?: number;\n max?: number;\n step?: number;\n stepLabels?: SliderStepLabel[];\n disabled?: boolean;\n className?: string;\n /** Track treatment; `thick` is the meter-weight bar. */\n variant?: 'default' | 'thick';\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'data-testid'?: string;\n}\n\nfunction toArray(v: number | number[] | undefined): number[] | undefined {\n if (v === undefined) return undefined;\n return Array.isArray(v) ? v : [v];\n}\n\nfunction fromArray(v: number[], wasArray: boolean): number | number[] {\n return wasArray ? v : v[0];\n}\n\n/**\n * Slider built on the Radix UI Slider primitive. Supports single-thumb and\n * range (multi-thumb) modes, optional labeled steps, and disabled state.\n *\n * When stepLabels are present, the Root's hit area extends to cover the label\n * row — clicking a label moves the thumb to that X position.\n */\nexport const Slider = ({\n value,\n defaultValue,\n onChange,\n onChangeCommitted,\n min = 0,\n max = 100,\n step = 1,\n stepLabels,\n disabled = false,\n className,\n variant = 'default',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'data-testid': testId,\n}: SliderProps) => {\n const isRange = Array.isArray(value ?? defaultValue);\n const labeledSteps = stepLabels?.filter((s) => s.label);\n const hasLabels = !!labeledSteps && labeledSteps.length > 0;\n\n return (\n <SliderPrimitive.Root\n className={cn(\n 'relative flex w-full touch-none select-none items-center',\n hasLabels && 'pb-7',\n className\n )}\n value={toArray(value)}\n defaultValue={toArray(defaultValue)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onValueChange={(v) => onChange?.(fromArray(v, isRange))}\n onValueCommit={(v) => onChangeCommitted?.(fromArray(v, isRange))}\n
|
|
1
|
+
{"version":3,"file":"Slider.js","names":[],"sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import * as SliderPrimitive from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils/cn';\nimport {\n SELECTION_CONTROL_HIT_AREA_STYLES,\n SELECTION_CONTROL_SIZES,\n} from '../../utils/componentSizes';\nimport { Text } from '../Text';\n\nexport interface SliderStepLabel {\n value: number;\n label?: string;\n}\n\nexport interface SliderProps {\n /** Current value. Pass a number for a single thumb, number[] for a range slider. */\n value?: number | number[];\n /** Default value (uncontrolled). */\n defaultValue?: number | number[];\n /** Called continuously as the value changes. */\n onChange?: (value: number | number[]) => void;\n /** Called when the user finishes dragging (mouse/touch up or keyboard interaction ends). */\n onChangeCommitted?: (value: number | number[]) => void;\n min?: number;\n max?: number;\n step?: number;\n stepLabels?: SliderStepLabel[];\n disabled?: boolean;\n className?: string;\n /** Track treatment; `thick` is the meter-weight bar. */\n variant?: 'default' | 'thick';\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'data-testid'?: string;\n}\n\nfunction toArray(v: number | number[] | undefined): number[] | undefined {\n if (v === undefined) return undefined;\n return Array.isArray(v) ? v : [v];\n}\n\nfunction fromArray(v: number[], wasArray: boolean): number | number[] {\n return wasArray ? v : v[0];\n}\n\n/**\n * Slider built on the Radix UI Slider primitive. Supports single-thumb and\n * range (multi-thumb) modes, optional labeled steps, and disabled state.\n *\n * When stepLabels are present, the Root's hit area extends to cover the label\n * row — clicking a label moves the thumb to that X position.\n */\nexport const Slider = ({\n value,\n defaultValue,\n onChange,\n onChangeCommitted,\n min = 0,\n max = 100,\n step = 1,\n stepLabels,\n disabled = false,\n className,\n variant = 'default',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'data-testid': testId,\n}: SliderProps) => {\n const isRange = Array.isArray(value ?? defaultValue);\n const thumbValues = toArray(value) ?? toArray(defaultValue) ?? [0];\n const hasMultipleThumbs = thumbValues.length > 1;\n const labeledSteps = stepLabels?.filter((s) => s.label);\n const hasLabels = !!labeledSteps && labeledSteps.length > 0;\n\n return (\n <SliderPrimitive.Root\n className={cn(\n 'relative flex w-full touch-none select-none items-center',\n hasLabels && 'pb-7',\n className\n )}\n value={toArray(value)}\n defaultValue={toArray(defaultValue)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onValueChange={(v) => onChange?.(fromArray(v, isRange))}\n onValueCommit={(v) => onChangeCommitted?.(fromArray(v, isRange))}\n data-testid={testId}\n role={hasMultipleThumbs ? 'group' : undefined}\n aria-label={hasMultipleThumbs ? ariaLabel : undefined}\n aria-labelledby={hasMultipleThumbs ? ariaLabelledby : undefined}\n >\n <SliderPrimitive.Track\n className={cn(\n 'relative w-full grow overflow-hidden',\n variant === 'thick'\n ? 'mx-2 h-2 rounded-xs bg-surface-level-3'\n : 'h-1.5 rounded-full bg-surface-level-4'\n )}\n >\n <SliderPrimitive.Range\n className={cn(\n 'absolute h-full',\n disabled ? 'data-[disabled]:bg-brand-subtle' : 'bg-control-active'\n )}\n />\n </SliderPrimitive.Track>\n\n {thumbValues.map((_, i) => (\n <SliderPrimitive.Thumb\n key={i}\n {...(!hasMultipleThumbs &&\n ariaLabel !== undefined && { 'aria-label': ariaLabel })}\n aria-labelledby={hasMultipleThumbs ? undefined : ariaLabelledby}\n className={cn(\n 'block rounded-full border-2 shadow transition',\n SELECTION_CONTROL_SIZES.sm.className,\n SELECTION_CONTROL_HIT_AREA_STYLES,\n 'focus-visible:shadow-[0_0_0_4px_var(--bg-brand-subtle)] focus-visible:outline-none',\n disabled\n ? 'border-muted bg-surface-level-3'\n : 'cursor-pointer border-brand-300 bg-control-thumb hover:border-brand-400 dark:border-brand-500 dark:hover:border-brand-600'\n )}\n />\n ))}\n\n {hasLabels && (\n <div aria-hidden className=\"absolute bottom-2 w-full cursor-pointer\">\n {labeledSteps.map((s) => (\n <Text\n key={s.value}\n as=\"span\"\n variant=\"xs\"\n className=\"absolute -translate-x-1/2 truncate text-secondary\"\n // Left as non-tailwind on purpose for better readability on label positioning\n style={{\n left: `${((s.value - min) / (max - min)) * 100}%`,\n maxWidth: `${100 / labeledSteps.length}%`,\n }}\n >\n {s.label}\n </Text>\n ))}\n </div>\n )}\n </SliderPrimitive.Root>\n );\n};\n"],"mappings":";;;;;;AAoCA,SAAS,QAAQ,GAAwD;CACvE,IAAI,MAAM,KAAA,GAAW,OAAO,KAAA;CAC5B,OAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAClC;AAEA,SAAS,UAAU,GAAa,UAAsC;CACpE,OAAO,WAAW,IAAI,EAAE;AAC1B;;;;;;;;AASA,IAAa,UAAU,EACrB,OACA,cACA,UACA,mBACA,MAAM,GACN,MAAM,KACN,OAAO,GACP,YACA,WAAW,OACX,WACA,UAAU,WACV,cAAc,WACd,mBAAmB,gBACnB,eAAe,aACE;CACjB,MAAM,UAAU,MAAM,QAAQ,SAAS,YAAY;CACnD,MAAM,cAAc,QAAQ,KAAK,KAAK,QAAQ,YAAY,KAAK,CAAC,CAAC;CACjE,MAAM,oBAAoB,YAAY,SAAS;CAC/C,MAAM,eAAe,YAAY,QAAQ,MAAM,EAAE,KAAK;CACtD,MAAM,YAAY,CAAC,CAAC,gBAAgB,aAAa,SAAS;CAE1D,OACE,qBAAC,gBAAgB,MAAjB;EACE,WAAW,GACT,4DACA,aAAa,QACb,SACF;EACA,OAAO,QAAQ,KAAK;EACpB,cAAc,QAAQ,YAAY;EAC7B;EACA;EACC;EACI;EACV,gBAAgB,MAAM,WAAW,UAAU,GAAG,OAAO,CAAC;EACtD,gBAAgB,MAAM,oBAAoB,UAAU,GAAG,OAAO,CAAC;EAC/D,eAAa;EACb,MAAM,oBAAoB,UAAU,KAAA;EACpC,cAAY,oBAAoB,YAAY,KAAA;EAC5C,mBAAiB,oBAAoB,iBAAiB,KAAA;EAjBxD,UAAA;GAmBE,oBAAC,gBAAgB,OAAjB;IACE,WAAW,GACT,wCACA,YAAY,UACR,2CACA,uCACN;IAEA,UAAA,oBAAC,gBAAgB,OAAjB,EACE,WAAW,GACT,mBACA,WAAW,oCAAoC,mBACjD,EACD,CAAA;GACoB,CAAA;GAEtB,YAAY,KAAK,GAAG,MACnB,oBAAC,gBAAgB,OAAjB;IAEE,GAAK,CAAC,qBACJ,cAAc,KAAA,KAAa,EAAE,cAAc,UAAU;IACvD,mBAAiB,oBAAoB,KAAA,IAAY;IACjD,WAAW,GACT,iDACA,wBAAwB,GAAG,WAC3B,mCACA,sFACA,WACI,oCACA,2HACN;GACD,GAbM,CAaN,CACF;GAEA,aACC,oBAAC,OAAD;IAAK,eAAA;IAAY,WAAU;IACxB,UAAA,aAAa,KAAK,MACjB,oBAAC,MAAD;KAEE,IAAG;KACH,SAAQ;KACR,WAAU;KAEV,OAAO;MACL,MAAM,IAAK,EAAE,QAAQ,QAAQ,MAAM,OAAQ,IAAI;MAC/C,UAAU,GAAG,MAAM,aAAa,OAAO;KACzC;KAEC,UAAA,EAAE;IACC,GAXC,EAAE,KAWH,CACP;GACE,CAAA;EAEa;;AAE1B"}
|
|
@@ -14,6 +14,7 @@ export type SplitViewPaneProps = {
|
|
|
14
14
|
open: boolean;
|
|
15
15
|
children: ReactNode;
|
|
16
16
|
className?: string;
|
|
17
|
+
variant?: 'overlay' | 'inline';
|
|
17
18
|
sidePaneId?: string;
|
|
18
19
|
hideArrows?: boolean;
|
|
19
20
|
customHeader?: ReactNode;
|
|
@@ -38,4 +39,4 @@ export type SplitViewPaneProps = {
|
|
|
38
39
|
onNext?: () => void;
|
|
39
40
|
onPrevious?: () => void;
|
|
40
41
|
});
|
|
41
|
-
export declare function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children, title, className, sidePaneId, hideArrows, customHeader, useCustomHeaderSlot, defaultWidthPx, overrideWidthPx, minWidthPx, requireConfirmationOnClose, dismissOnOutsideClick, scrollContainer, headerClassName, }: SplitViewPaneProps): import("react").JSX.Element;
|
|
42
|
+
export declare function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children, title, className, variant, sidePaneId, hideArrows, customHeader, useCustomHeaderSlot, defaultWidthPx, overrideWidthPx, minWidthPx, requireConfirmationOnClose, dismissOnOutsideClick, scrollContainer, headerClassName, }: SplitViewPaneProps): import("react").JSX.Element;
|
|
@@ -6,21 +6,15 @@ import UnsavedChangesDialog from "../UnsavedChangesDialog.js";
|
|
|
6
6
|
import { createPortalSlot } from "../PortalSlot.js";
|
|
7
7
|
import { registerOpenPane } from "./openPaneRegistry.js";
|
|
8
8
|
import { HeaderTitleActionSlot, SplitViewPaneHeader } from "./SplitViewPaneHeader.js";
|
|
9
|
-
import {
|
|
9
|
+
import { useShowChildren } from "./useShowChildren.js";
|
|
10
|
+
import { useSplitViewPaneResize } from "./useSplitViewPaneResize.js";
|
|
11
|
+
import { Fragment, createContext, useCallback, useContext, useEffect, useId, useRef, useState } from "react";
|
|
10
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
13
|
import { useHotkeys } from "react-hotkeys-hook";
|
|
12
14
|
import { Transition, TransitionChild } from "@headlessui/react";
|
|
13
15
|
import * as Portal from "@radix-ui/react-portal";
|
|
14
16
|
//#region packages/components/src/components/SplitViewPane/SplitViewPane.tsx
|
|
15
17
|
var PaneDepth = createContext(0);
|
|
16
|
-
var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
17
|
-
var MINIMUM_LEFT_MARGIN_PX = 100;
|
|
18
|
-
var MINIMUM_PANE_WIDTH_PX = 500;
|
|
19
|
-
var KEYBOARD_RESIZE_STEP_PX = 10;
|
|
20
|
-
var MAX_INITIAL_PANE_WIDTH_PX = 1280;
|
|
21
|
-
var INITIAL_PANE_WIDTH_RATIO = 2 / 3;
|
|
22
|
-
var RESIZE_HANDLE_OUTSET_PX = 8;
|
|
23
|
-
var RESIZE_HANDLE_WIDTH_PX = 20;
|
|
24
18
|
var PANE_TRANSITION_CLASSES = {
|
|
25
19
|
enter: "duration-normal motion-reduce:duration-0",
|
|
26
20
|
enterFrom: "opacity-0",
|
|
@@ -29,152 +23,37 @@ var PANE_TRANSITION_CLASSES = {
|
|
|
29
23
|
leaveFrom: "opacity-100",
|
|
30
24
|
leaveTo: "animate-slide-right opacity-0 motion-reduce:animate-none"
|
|
31
25
|
};
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
function clampLeft(value, width, minPaneWidthPx = MINIMUM_PANE_WIDTH_PX) {
|
|
43
|
-
const maximumLeft = Math.max(0, width - minPaneWidthPx);
|
|
44
|
-
return Math.min(maximumLeft, Math.max(MINIMUM_LEFT_MARGIN_PX, value));
|
|
45
|
-
}
|
|
46
|
-
function defaultLeft(props, width) {
|
|
47
|
-
if (props.sidePaneId != null && typeof window !== "undefined") {
|
|
48
|
-
const value = window.localStorage.getItem(`SidePanelGroup:sizes:${props.sidePaneId}`);
|
|
49
|
-
const pastRatio = Number.parseFloat(value ?? "");
|
|
50
|
-
if (!Number.isNaN(pastRatio)) return clampLeft(width - (width * pastRatio - props.offsetPx), width, props.minWidthPx);
|
|
51
|
-
}
|
|
52
|
-
return clampLeft(width - (Math.min(props.defaultWidthPx ?? MAX_INITIAL_PANE_WIDTH_PX, width * INITIAL_PANE_WIDTH_RATIO) - props.offsetPx), width, props.minWidthPx);
|
|
53
|
-
}
|
|
54
|
-
function useShowChildren({ open, children }) {
|
|
55
|
-
const [showChildren, setShowChildren] = useState(children);
|
|
56
|
-
useIsomorphicLayoutEffect(() => {
|
|
57
|
-
if (open) setShowChildren(children);
|
|
58
|
-
}, [open, children]);
|
|
59
|
-
return showChildren;
|
|
26
|
+
var CustomHeaderSlot = createPortalSlot();
|
|
27
|
+
function PaneShell({ children, showConfirmModal, onDismissConfirm, onDiscard }) {
|
|
28
|
+
return /* @__PURE__ */ jsx(CustomHeaderSlot.Context, { children: /* @__PURE__ */ jsxs(HeaderTitleActionSlot.Context, { children: [children, /* @__PURE__ */ jsx(UnsavedChangesDialog, {
|
|
29
|
+
isOpen: showConfirmModal,
|
|
30
|
+
onClose: onDismissConfirm,
|
|
31
|
+
onDiscard,
|
|
32
|
+
title: "Unsaved Changes",
|
|
33
|
+
description: "You may have unsaved changes. Are you sure you want to exit?",
|
|
34
|
+
discardCopy: "Exit"
|
|
35
|
+
})] }) });
|
|
60
36
|
}
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const [left, setLeft] = useState(MINIMUM_LEFT_MARGIN_PX);
|
|
73
|
-
useIsomorphicLayoutEffect(() => {
|
|
74
|
-
const width = getAvailableWidth();
|
|
75
|
-
setWidth(width);
|
|
76
|
-
setLeft(defaultLeft(initialProps.current, width));
|
|
77
|
-
}, []);
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
if (props.overrideWidthPx) {
|
|
80
|
-
const desiredWidth = props.overrideWidthPx - props.offsetPx;
|
|
81
|
-
setLeft(clampLeft(width - desiredWidth, width, props.minWidthPx));
|
|
82
|
-
}
|
|
83
|
-
}, [
|
|
84
|
-
props.overrideWidthPx,
|
|
85
|
-
props.offsetPx,
|
|
86
|
-
props.minWidthPx,
|
|
87
|
-
width
|
|
88
|
-
]);
|
|
89
|
-
const onMouseDown = useCallback((e) => {
|
|
90
|
-
e.preventDefault();
|
|
91
|
-
resizing.current = true;
|
|
92
|
-
if (target.current) target.current.dataset.resizeHandleActive = "true";
|
|
93
|
-
}, []);
|
|
94
|
-
const onMouseUp = useCallback(() => {
|
|
95
|
-
if (resizing.current) {
|
|
96
|
-
resizing.current = false;
|
|
97
|
-
if (target.current) delete target.current.dataset.resizeHandleActive;
|
|
98
|
-
}
|
|
99
|
-
}, []);
|
|
100
|
-
const doResizeBounded = useCallback((desiredX) => {
|
|
101
|
-
if (container.current) {
|
|
102
|
-
const width = getAvailableWidth(container.current);
|
|
103
|
-
const bounded = clampLeft(desiredX, width, props.minWidthPx);
|
|
104
|
-
if (props.sidePaneId != null && width > 0) {
|
|
105
|
-
const ratio = (width - bounded) / width;
|
|
106
|
-
window.localStorage.setItem(`SidePanelGroup:sizes:${props.sidePaneId}`, ratio.toString());
|
|
107
|
-
}
|
|
108
|
-
container.current.style.left = `${bounded}px`;
|
|
109
|
-
if (target.current) {
|
|
110
|
-
target.current.style.left = `${bounded - RESIZE_HANDLE_OUTSET_PX}px`;
|
|
111
|
-
target.current.setAttribute("aria-valuenow", bounded.toString());
|
|
112
|
-
}
|
|
113
|
-
setLeft(bounded);
|
|
114
|
-
}
|
|
115
|
-
}, [props.sidePaneId, props.minWidthPx]);
|
|
116
|
-
const onMouseMove = useCallback((e) => {
|
|
117
|
-
if (resizing.current && container.current) {
|
|
118
|
-
e.preventDefault();
|
|
119
|
-
doResizeBounded(e.clientX);
|
|
120
|
-
}
|
|
121
|
-
}, [doResizeBounded]);
|
|
122
|
-
const onResize = useCallback(() => {
|
|
123
|
-
setWidth(getAvailableWidth(container.current));
|
|
124
|
-
if (container.current) doResizeBounded(Number.parseFloat(container.current.style.left));
|
|
125
|
-
}, [doResizeBounded]);
|
|
126
|
-
const onKeyDown = (e) => {
|
|
127
|
-
const desiredLeft = e.key === "ArrowLeft" ? left - KEYBOARD_RESIZE_STEP_PX : e.key === "ArrowRight" ? left + KEYBOARD_RESIZE_STEP_PX : e.key === "Home" ? 0 : e.key === "End" ? width : void 0;
|
|
128
|
-
if (desiredLeft === void 0) return;
|
|
129
|
-
e.preventDefault();
|
|
130
|
-
doResizeBounded(desiredLeft);
|
|
131
|
-
};
|
|
132
|
-
useIsomorphicLayoutEffect(() => {
|
|
133
|
-
if (!element) return;
|
|
134
|
-
onResize();
|
|
135
|
-
const observer = new ResizeObserver(onResize);
|
|
136
|
-
observer.observe(element);
|
|
137
|
-
return () => observer.disconnect();
|
|
138
|
-
}, [element, onResize]);
|
|
139
|
-
useEffect(() => {
|
|
140
|
-
window.addEventListener("resize", onResize);
|
|
141
|
-
document.addEventListener("mouseup", onMouseUp);
|
|
142
|
-
document.addEventListener("mousemove", onMouseMove);
|
|
143
|
-
return () => {
|
|
144
|
-
window.removeEventListener("resize", onResize);
|
|
145
|
-
document.removeEventListener("mouseup", onMouseUp);
|
|
146
|
-
document.removeEventListener("mousemove", onMouseMove);
|
|
147
|
-
};
|
|
148
|
-
}, [
|
|
149
|
-
onMouseMove,
|
|
150
|
-
onMouseUp,
|
|
151
|
-
onResize
|
|
152
|
-
]);
|
|
153
|
-
useEffect(() => {
|
|
154
|
-
if (props.open && left !== clampLeft(left, width, props.minWidthPx)) setLeft(defaultLeft(props, width));
|
|
155
|
-
}, [
|
|
156
|
-
props,
|
|
157
|
-
left,
|
|
158
|
-
width
|
|
159
|
-
]);
|
|
160
|
-
return {
|
|
161
|
-
left,
|
|
162
|
-
width,
|
|
163
|
-
onMouseDown,
|
|
164
|
-
onKeyDown,
|
|
165
|
-
target,
|
|
166
|
-
container,
|
|
167
|
-
containerRef
|
|
168
|
-
};
|
|
37
|
+
function PaneBody({ paneZIndex, depth, header, className, children }) {
|
|
38
|
+
return /* @__PURE__ */ jsxs(ZIndexProvider, {
|
|
39
|
+
value: paneZIndex,
|
|
40
|
+
children: [header, /* @__PURE__ */ jsx(PaneDepth.Provider, {
|
|
41
|
+
value: depth + 1,
|
|
42
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
43
|
+
className: cn("flex flex-1 flex-col", className),
|
|
44
|
+
children
|
|
45
|
+
})
|
|
46
|
+
})]
|
|
47
|
+
});
|
|
169
48
|
}
|
|
170
|
-
|
|
171
|
-
function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children, title, className, sidePaneId, hideArrows, customHeader, useCustomHeaderSlot, defaultWidthPx, overrideWidthPx, minWidthPx, requireConfirmationOnClose = false, dismissOnOutsideClick = false, scrollContainer = "outer", headerClassName }) {
|
|
49
|
+
function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children, title, className, variant = "overlay", sidePaneId, hideArrows, customHeader, useCustomHeaderSlot, defaultWidthPx, overrideWidthPx, minWidthPx, requireConfirmationOnClose = false, dismissOnOutsideClick = false, scrollContainer = "outer", headerClassName }) {
|
|
172
50
|
const depth = useContext(PaneDepth);
|
|
173
51
|
const showChildren = useShowChildren({
|
|
174
52
|
children,
|
|
175
53
|
open
|
|
176
54
|
});
|
|
177
|
-
const
|
|
55
|
+
const inline = variant === "inline";
|
|
56
|
+
const { left, width, onMouseDown, onKeyDown, target, container, containerRef } = useSplitViewPaneResize({
|
|
178
57
|
offsetPx: depth * 4.5 * 16,
|
|
179
58
|
sidePaneId,
|
|
180
59
|
defaultWidthPx,
|
|
@@ -188,8 +67,8 @@ function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children,
|
|
|
188
67
|
const paneZIndex = useZIndex(zIndices.pane);
|
|
189
68
|
const paneId = useId();
|
|
190
69
|
const titleId = title && !customHeader && !useCustomHeaderSlot ? `${paneId}-title` : void 0;
|
|
191
|
-
const maximumLeft = Math.max(0, width - (minWidthPx ??
|
|
192
|
-
const minimumLeft = Math.min(
|
|
70
|
+
const maximumLeft = Math.max(0, width - (minWidthPx ?? 500));
|
|
71
|
+
const minimumLeft = Math.min(100, maximumLeft);
|
|
193
72
|
const handleCloseClick = useCallback((e) => {
|
|
194
73
|
if (requireConfirmationOnClose) {
|
|
195
74
|
e?.preventDefault();
|
|
@@ -200,11 +79,12 @@ function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children,
|
|
|
200
79
|
const handleCloseClickRef = useRef(handleCloseClick);
|
|
201
80
|
handleCloseClickRef.current = handleCloseClick;
|
|
202
81
|
useEffect(() => {
|
|
203
|
-
if (!open) return;
|
|
82
|
+
if (!open || inline) return;
|
|
204
83
|
return registerOpenPane(paneId, paneZIndex, container, (event) => handleCloseClickRef.current(event), dismissOnOutsideClick ? (event) => handleCloseClickRef.current(event) : void 0);
|
|
205
84
|
}, [
|
|
206
85
|
container,
|
|
207
86
|
dismissOnOutsideClick,
|
|
87
|
+
inline,
|
|
208
88
|
open,
|
|
209
89
|
paneId,
|
|
210
90
|
paneZIndex
|
|
@@ -222,6 +102,7 @@ function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children,
|
|
|
222
102
|
const renderHeader = () => {
|
|
223
103
|
if (customHeader) return customHeader;
|
|
224
104
|
if (useCustomHeaderSlot) return /* @__PURE__ */ jsx(CustomHeaderSlot.Slot, {});
|
|
105
|
+
if (title == null && onClose == null) return null;
|
|
225
106
|
return /* @__PURE__ */ jsx(SplitViewPaneHeader, {
|
|
226
107
|
title,
|
|
227
108
|
open,
|
|
@@ -234,79 +115,92 @@ function SplitViewPane({ open, onClose, onExpand, onNext, onPrevious, children,
|
|
|
234
115
|
titleId
|
|
235
116
|
});
|
|
236
117
|
};
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
118
|
+
const dismissConfirm = () => setShowConfirmModal(false);
|
|
119
|
+
const discardAndClose = () => {
|
|
120
|
+
setShowConfirmModal(false);
|
|
121
|
+
onCloseRef.current?.();
|
|
122
|
+
};
|
|
123
|
+
return /* @__PURE__ */ jsx(PaneShell, {
|
|
124
|
+
showConfirmModal,
|
|
125
|
+
onDismissConfirm: dismissConfirm,
|
|
126
|
+
onDiscard: discardAndClose,
|
|
127
|
+
children: inline ? /* @__PURE__ */ jsx("div", {
|
|
128
|
+
inert: !open,
|
|
129
|
+
className: cn("grid shrink-0 transition-[grid-template-columns] duration-normal ease-out motion-reduce:transition-none", open ? "grid-cols-[1fr]" : "grid-cols-[0fr]"),
|
|
130
|
+
"data-testid": "split-view-pane",
|
|
131
|
+
role: titleId ? "region" : void 0,
|
|
132
|
+
"aria-labelledby": titleId,
|
|
133
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
134
|
+
className: "flex min-w-0 flex-col overflow-y-auto overflow-x-hidden",
|
|
135
|
+
children: /* @__PURE__ */ jsx(PaneBody, {
|
|
136
|
+
paneZIndex,
|
|
137
|
+
depth,
|
|
138
|
+
header: renderHeader(),
|
|
139
|
+
className,
|
|
140
|
+
children
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
}) : /* @__PURE__ */ jsx(Portal.Root, { children: /* @__PURE__ */ jsx(Transition, {
|
|
144
|
+
show: open,
|
|
145
|
+
as: Fragment,
|
|
146
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
147
|
+
className: "relative",
|
|
148
|
+
style: { zIndex: paneZIndex },
|
|
149
|
+
children: [/* @__PURE__ */ jsx(TransitionChild, {
|
|
150
|
+
as: Fragment,
|
|
151
|
+
...PANE_TRANSITION_CLASSES,
|
|
256
152
|
children: /* @__PURE__ */ jsx("div", {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
153
|
+
ref: containerRef,
|
|
154
|
+
style: {
|
|
155
|
+
left,
|
|
156
|
+
right: `var(--polly-chat-width, 0px)`
|
|
157
|
+
},
|
|
158
|
+
className: cn("fixed inset-0 shadow-lg", !open && "pointer-events-none", scrollContainer === "outer" ? "overflow-y-auto overscroll-y-none" : "overflow-hidden"),
|
|
159
|
+
"data-testid": "split-view-pane",
|
|
160
|
+
role: titleId ? "region" : void 0,
|
|
161
|
+
"aria-labelledby": titleId,
|
|
162
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
163
|
+
className: cn("relative flex flex-col items-stretch bg-elevated", scrollContainer === "outer" ? "min-h-full" : "h-full"),
|
|
164
|
+
children: /* @__PURE__ */ jsx(PaneBody, {
|
|
165
|
+
paneZIndex,
|
|
166
|
+
depth,
|
|
167
|
+
header: renderHeader(),
|
|
168
|
+
className: cn(scrollContainer === "inner" && "min-h-0 overflow-y-auto overscroll-y-none", className),
|
|
169
|
+
children: showChildren
|
|
170
|
+
})
|
|
267
171
|
})
|
|
268
172
|
})
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
...PANE_TRANSITION_CLASSES,
|
|
273
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
274
|
-
ref: target,
|
|
275
|
-
role: "separator",
|
|
276
|
-
"aria-label": "Resize pane",
|
|
277
|
-
"aria-orientation": "vertical",
|
|
278
|
-
"aria-valuemin": minimumLeft,
|
|
279
|
-
"aria-valuemax": maximumLeft,
|
|
280
|
-
"aria-valuenow": left,
|
|
281
|
-
tabIndex: 0,
|
|
282
|
-
"data-split-view-pane-resize-handle": true,
|
|
283
|
-
"data-testid": "split-view-pane-resize-handle",
|
|
284
|
-
className: cn("group fixed inset-y-0 cursor-col-resize focus-visible:outline-none", !open && "pointer-events-none"),
|
|
285
|
-
style: {
|
|
286
|
-
left: left - RESIZE_HANDLE_OUTSET_PX,
|
|
287
|
-
width: RESIZE_HANDLE_WIDTH_PX,
|
|
288
|
-
zIndex: zIndices.resizeHandle
|
|
289
|
-
},
|
|
290
|
-
onMouseDown,
|
|
291
|
-
onKeyDown,
|
|
173
|
+
}), /* @__PURE__ */ jsx(TransitionChild, {
|
|
174
|
+
as: Fragment,
|
|
175
|
+
...PANE_TRANSITION_CLASSES,
|
|
292
176
|
children: /* @__PURE__ */ jsx("div", {
|
|
293
|
-
|
|
294
|
-
|
|
177
|
+
ref: target,
|
|
178
|
+
role: "separator",
|
|
179
|
+
"aria-label": "Resize pane",
|
|
180
|
+
"aria-orientation": "vertical",
|
|
181
|
+
"aria-valuemin": minimumLeft,
|
|
182
|
+
"aria-valuemax": maximumLeft,
|
|
183
|
+
"aria-valuenow": left,
|
|
184
|
+
tabIndex: 0,
|
|
185
|
+
"data-split-view-pane-resize-handle": true,
|
|
186
|
+
"data-testid": "split-view-pane-resize-handle",
|
|
187
|
+
className: cn("group fixed inset-y-0 cursor-col-resize focus-visible:outline-none", !open && "pointer-events-none"),
|
|
188
|
+
style: {
|
|
189
|
+
left: left - 8,
|
|
190
|
+
width: 20,
|
|
191
|
+
zIndex: zIndices.resizeHandle
|
|
192
|
+
},
|
|
193
|
+
onMouseDown,
|
|
194
|
+
onKeyDown,
|
|
195
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
196
|
+
className: "absolute inset-y-0 w-0 border-l border-subtle transition-all duration-normal group-hover:border-l-2 group-focus-visible:border-l-2 group-focus-visible:border-l-brand group-data-[resize-handle-active]:border-l-brand motion-reduce:transition-none",
|
|
197
|
+
style: { left: 8 }
|
|
198
|
+
})
|
|
295
199
|
})
|
|
296
|
-
})
|
|
297
|
-
})
|
|
298
|
-
})
|
|
299
|
-
})
|
|
300
|
-
isOpen: showConfirmModal,
|
|
301
|
-
onClose: () => setShowConfirmModal(false),
|
|
302
|
-
onDiscard: () => {
|
|
303
|
-
setShowConfirmModal(false);
|
|
304
|
-
onCloseRef.current?.();
|
|
305
|
-
},
|
|
306
|
-
title: "Unsaved Changes",
|
|
307
|
-
description: "You may have unsaved changes. Are you sure you want to exit?",
|
|
308
|
-
discardCopy: "Exit"
|
|
309
|
-
})] }) });
|
|
200
|
+
})]
|
|
201
|
+
})
|
|
202
|
+
}) })
|
|
203
|
+
});
|
|
310
204
|
}
|
|
311
205
|
//#endregion
|
|
312
206
|
export { CustomHeaderSlot, HeaderTitleActionSlot, SplitViewPane };
|