@clickhouse/click-ui 0.15.0-canary.gb7ea9f53.0 → 0.15.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/dist/cjs/click-ui.css +16 -0
- package/dist/cjs/components/Dropdown/index.cjs +2 -1
- package/dist/cjs/components/Dropdown/index.cjs.map +1 -1
- package/dist/cjs/components/Table/Table.css +16 -0
- package/dist/cjs/components/Table/index.cjs +78 -47
- package/dist/cjs/components/Table/index.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/index.cjs +14 -3
- package/dist/cjs/components/Tooltip/index.cjs.map +1 -1
- package/dist/esm/click-ui.css +16 -0
- package/dist/esm/components/Dropdown/index.js +2 -1
- package/dist/esm/components/Dropdown/index.js.map +1 -1
- package/dist/esm/components/Table/Table.css +16 -0
- package/dist/esm/components/Table/index.js +78 -47
- package/dist/esm/components/Table/index.js.map +1 -1
- package/dist/esm/components/Tooltip/index.js +14 -3
- package/dist/esm/components/Tooltip/index.js.map +1 -1
- package/dist/types/components/Table/Table.d.ts +1 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +1 -4
- package/package.json +1 -1
package/dist/cjs/click-ui.css
CHANGED
|
@@ -10591,7 +10591,23 @@ body {
|
|
|
10591
10591
|
}
|
|
10592
10592
|
|
|
10593
10593
|
.table__header-content_interactive__7lV67 {
|
|
10594
|
+
width: 100%;
|
|
10595
|
+
margin: 0;
|
|
10596
|
+
padding: 0;
|
|
10597
|
+
border: 0;
|
|
10598
|
+
background: none;
|
|
10599
|
+
color: inherit;
|
|
10600
|
+
font: inherit;
|
|
10601
|
+
letter-spacing: inherit;
|
|
10602
|
+
text-align: inherit;
|
|
10603
|
+
text-transform: inherit;
|
|
10594
10604
|
cursor: pointer;
|
|
10605
|
+
word-spacing: inherit;
|
|
10606
|
+
}
|
|
10607
|
+
|
|
10608
|
+
.table__header-content_interactive__7lV67:focus-visible {
|
|
10609
|
+
outline: 2px solid var(--click-global-color-outline-default);
|
|
10610
|
+
outline-offset: 2px;
|
|
10595
10611
|
}
|
|
10596
10612
|
|
|
10597
10613
|
.table__resizer__m6w0b {
|
|
@@ -36,6 +36,7 @@ function _interopNamespace(e) {
|
|
|
36
36
|
|
|
37
37
|
const DropdownMenu__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu);
|
|
38
38
|
|
|
39
|
+
const COLLISION_PADDING = 8;
|
|
39
40
|
const Dropdown = (props) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Root, { ...props });
|
|
40
41
|
const _DropdownMenuItem = ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
41
42
|
GenericMenu.GenericMenuItem,
|
|
@@ -116,7 +117,7 @@ const DropdownContent = ({
|
|
|
116
117
|
sideOffset: 4,
|
|
117
118
|
loop: true,
|
|
118
119
|
avoidCollisions: responsivePositioning,
|
|
119
|
-
collisionPadding: responsivePositioning ?
|
|
120
|
+
collisionPadding: responsivePositioning ? COLLISION_PADDING : void 0,
|
|
120
121
|
...inputModalityProps,
|
|
121
122
|
children: [
|
|
122
123
|
showArrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { Slottable } from '@radix-ui/react-slot';\nimport {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ForwardedRef,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { Arrow, GenericMenuItem, GenericMenuPanel } from '@/components/GenericMenu';\nimport { cn } from '@/lib/cva';\nimport { useInputModality } from '@/hooks/internal';\nimport Popover_Arrow from '@/components/Assets/Icons/Popover-Arrow';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport type { IconWrapperProps } from '@/components/IconWrapper';\nimport { Icon } from '@/components/Icon';\nimport type { IconName } from '@/components/Icon';\nimport type { HorizontalDirection } from '@/types';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport type { ArrowProps, DropdownItemProps } from './Dropdown.types';\nimport styles from './Dropdown.module.css';\n\nexport const Dropdown = (props: DropdownMenu.DropdownMenuProps) => (\n <DropdownMenu.Root {...props} />\n);\n\ntype DropdownMenuItemComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuItem<T>>\n) => ReactNode;\n\nconst _DropdownMenuItem = <T extends ElementType = 'div'>(\n { className, ...props }: ComponentProps<typeof GenericMenuItem<T>>,\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuItem\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuItem>)}\n className={cn(styles['dropdown-menu-item'], className)}\n />\n);\n\nconst DropdownMenuItem: DropdownMenuItemComponent = forwardRef(_DropdownMenuItem);\n\n// `sub` alone discriminates the two shapes of Trigger and Content. The label\n// fields live separately so only the sub-trigger accepts them — Content spreads\n// what it does not read straight onto the Radix element, i.e. into the DOM.\ninterface SubDiscriminant {\n sub?: true;\n}\n\ninterface SubTriggerFields {\n icon?: IconName;\n iconDir?: HorizontalDirection;\n /**\n * Positions the tooltip shown when the label is truncated. Defaults to\n * `side: 'right'` so the tooltip does not cover the items above it.\n */\n tooltipProps?: IconWrapperProps['tooltipProps'];\n}\n\ninterface MainDropdownProps {\n sub?: never;\n}\n\ntype DropdownSubTriggerProps = DropdownMenu.DropdownMenuSubTriggerProps &\n SubDiscriminant &\n SubTriggerFields;\ntype DropdownTriggerProps = DropdownMenu.DropdownMenuTriggerProps & MainDropdownProps;\n\nconst DropdownTrigger = ({\n sub,\n children,\n ...props\n}: DropdownSubTriggerProps | DropdownTriggerProps) => {\n if (sub) {\n const { icon, iconDir, tooltipProps, ...menuProps } =\n props as DropdownSubTriggerProps;\n return (\n <DropdownMenuItem\n as={DropdownMenu.SubTrigger}\n {...menuProps}\n >\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n tooltipProps={{ side: 'right', ...tooltipProps }}\n >\n {children}\n </IconWrapper>\n <Icon name=\"chevron-right\" />\n </DropdownMenuItem>\n );\n }\n\n const { className, ...triggerProps } = props as DropdownTriggerProps;\n return (\n <DropdownMenu.Trigger\n asChild\n {...triggerProps}\n className={cn(styles['dropdown-trigger'], className)}\n >\n <div>{children}</div>\n </DropdownMenu.Trigger>\n );\n};\n\nDropdownTrigger.displayName = 'DropdownTrigger';\nDropdown.Trigger = DropdownTrigger;\n\ninterface StyledDropdownContentProps extends DropdownMenu.DropdownMenuContentProps {\n children?: ReactNode;\n container?: HTMLElement | null;\n responsivePositioning?: boolean;\n}\n\ninterface StyledDropdownSubContentProps extends DropdownMenu.DropdownMenuSubContentProps {\n children?: ReactNode;\n container?: HTMLElement | null;\n responsivePositioning?: boolean;\n}\n\ntype DropdownContentProps = StyledDropdownContentProps & SubDiscriminant & ArrowProps;\ntype DropdownSubContentProps = StyledDropdownSubContentProps &\n MainDropdownProps &\n ArrowProps;\n\ntype DropdownMenuContentComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuPanel<T>>\n) => ReactNode;\n\nconst _DropdownMenuContent = <T extends ElementType = 'div'>(\n { className, ...props }: ComponentProps<typeof GenericMenuPanel<T>>,\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuPanel\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuPanel>)}\n className={cn(styles['dropdown-menu-content'], className)}\n />\n);\n\nconst DropdownMenuContent: DropdownMenuContentComponent =\n forwardRef(_DropdownMenuContent);\n\nconst DropdownContent = ({\n sub,\n children,\n container,\n showArrow,\n responsivePositioning = true,\n ...props\n}: DropdownContentProps | DropdownSubContentProps) => {\n const ContentElement = sub ? DropdownMenu.SubContent : DropdownMenu.Content;\n const inputModalityProps = useInputModality();\n const portalContainer = useResolvedPortalContainer(container);\n\n return (\n <DropdownMenu.Portal container={portalContainer}>\n <DropdownMenuContent\n {...props}\n type=\"dropdown-menu\"\n showArrow={showArrow}\n as={ContentElement}\n sideOffset={4}\n loop\n avoidCollisions={responsivePositioning}\n collisionPadding={responsivePositioning ? 100 : undefined}\n {...inputModalityProps}\n >\n {showArrow && (\n <Arrow\n asChild\n as={DropdownMenu.Arrow}\n width={20}\n height={10}\n >\n <Popover_Arrow />\n </Arrow>\n )}\n {children}\n </DropdownMenuContent>\n </DropdownMenu.Portal>\n );\n};\n\nDropdownContent.displayName = 'DropdownContent';\nDropdown.Content = DropdownContent;\n\nconst DropdownGroup = ({ className, ...props }: DropdownMenu.DropdownMenuGroupProps) => {\n return (\n <DropdownMenu.Group\n {...props}\n className={cn(styles['dropdown-group'], className)}\n />\n );\n};\n\nDropdownGroup.displayName = 'DropdownGroup';\nDropdown.Group = DropdownGroup;\n\n// DropdownMenu.Sub renders no DOM node, so it takes only Radix's sub-menu props.\nconst DropdownSub = (props: DropdownMenu.DropdownMenuSubProps) => {\n return <DropdownMenu.Sub {...props} />;\n};\n\nDropdownSub.displayName = 'DropdownSub';\nDropdown.Sub = DropdownSub;\n\nconst DropdownItem = forwardRef<HTMLElement, DropdownItemProps>(\n ({ icon, iconDir, type = 'default', tooltipProps, ...props }, ref) => {\n const renderLabel = (label: ReactNode) => (\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n tooltipProps={{ side: 'right', ...tooltipProps }}\n >\n {label}\n </IconWrapper>\n );\n\n return (\n <DropdownMenuItem\n ref={ref as ForwardedRef<HTMLDivElement>}\n as={DropdownMenu.Item}\n type={type}\n {...props}\n >\n <Slottable child={props.children}>{renderLabel}</Slottable>\n </DropdownMenuItem>\n );\n }\n);\n\nDropdownItem.displayName = 'DropdownItem';\nDropdown.Item = DropdownItem;\n\nexport default Dropdown;\n"],"names":["jsx","DropdownMenu","GenericMenuItem","cn","styles","forwardRef","jsxs","IconWrapper","Icon","GenericMenuPanel","useInputModality","useResolvedPortalContainer","Arrow","Popover_Arrow","Slottable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { Slottable } from '@radix-ui/react-slot';\nimport {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ForwardedRef,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { Arrow, GenericMenuItem, GenericMenuPanel } from '@/components/GenericMenu';\nimport { cn } from '@/lib/cva';\nimport { useInputModality } from '@/hooks/internal';\nimport Popover_Arrow from '@/components/Assets/Icons/Popover-Arrow';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport type { IconWrapperProps } from '@/components/IconWrapper';\nimport { Icon } from '@/components/Icon';\nimport type { IconName } from '@/components/Icon';\nimport type { HorizontalDirection } from '@/types';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport type { ArrowProps, DropdownItemProps } from './Dropdown.types';\nimport styles from './Dropdown.module.css';\n\n// Radix takes the padding as a number of pixels, so it cannot come from a CSS token.\nconst COLLISION_PADDING = 8;\n\nexport const Dropdown = (props: DropdownMenu.DropdownMenuProps) => (\n <DropdownMenu.Root {...props} />\n);\n\ntype DropdownMenuItemComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuItem<T>>\n) => ReactNode;\n\nconst _DropdownMenuItem = <T extends ElementType = 'div'>(\n { className, ...props }: ComponentProps<typeof GenericMenuItem<T>>,\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuItem\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuItem>)}\n className={cn(styles['dropdown-menu-item'], className)}\n />\n);\n\nconst DropdownMenuItem: DropdownMenuItemComponent = forwardRef(_DropdownMenuItem);\n\n// `sub` alone discriminates the two shapes of Trigger and Content. The label\n// fields live separately so only the sub-trigger accepts them — Content spreads\n// what it does not read straight onto the Radix element, i.e. into the DOM.\ninterface SubDiscriminant {\n sub?: true;\n}\n\ninterface SubTriggerFields {\n icon?: IconName;\n iconDir?: HorizontalDirection;\n /**\n * Positions the tooltip shown when the label is truncated. Defaults to\n * `side: 'right'` so the tooltip does not cover the items above it.\n */\n tooltipProps?: IconWrapperProps['tooltipProps'];\n}\n\ninterface MainDropdownProps {\n sub?: never;\n}\n\ntype DropdownSubTriggerProps = DropdownMenu.DropdownMenuSubTriggerProps &\n SubDiscriminant &\n SubTriggerFields;\ntype DropdownTriggerProps = DropdownMenu.DropdownMenuTriggerProps & MainDropdownProps;\n\nconst DropdownTrigger = ({\n sub,\n children,\n ...props\n}: DropdownSubTriggerProps | DropdownTriggerProps) => {\n if (sub) {\n const { icon, iconDir, tooltipProps, ...menuProps } =\n props as DropdownSubTriggerProps;\n return (\n <DropdownMenuItem\n as={DropdownMenu.SubTrigger}\n {...menuProps}\n >\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n tooltipProps={{ side: 'right', ...tooltipProps }}\n >\n {children}\n </IconWrapper>\n <Icon name=\"chevron-right\" />\n </DropdownMenuItem>\n );\n }\n\n const { className, ...triggerProps } = props as DropdownTriggerProps;\n return (\n <DropdownMenu.Trigger\n asChild\n {...triggerProps}\n className={cn(styles['dropdown-trigger'], className)}\n >\n <div>{children}</div>\n </DropdownMenu.Trigger>\n );\n};\n\nDropdownTrigger.displayName = 'DropdownTrigger';\nDropdown.Trigger = DropdownTrigger;\n\ninterface StyledDropdownContentProps extends DropdownMenu.DropdownMenuContentProps {\n children?: ReactNode;\n container?: HTMLElement | null;\n responsivePositioning?: boolean;\n}\n\ninterface StyledDropdownSubContentProps extends DropdownMenu.DropdownMenuSubContentProps {\n children?: ReactNode;\n container?: HTMLElement | null;\n responsivePositioning?: boolean;\n}\n\ntype DropdownContentProps = StyledDropdownContentProps & SubDiscriminant & ArrowProps;\ntype DropdownSubContentProps = StyledDropdownSubContentProps &\n MainDropdownProps &\n ArrowProps;\n\ntype DropdownMenuContentComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuPanel<T>>\n) => ReactNode;\n\nconst _DropdownMenuContent = <T extends ElementType = 'div'>(\n { className, ...props }: ComponentProps<typeof GenericMenuPanel<T>>,\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuPanel\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuPanel>)}\n className={cn(styles['dropdown-menu-content'], className)}\n />\n);\n\nconst DropdownMenuContent: DropdownMenuContentComponent =\n forwardRef(_DropdownMenuContent);\n\nconst DropdownContent = ({\n sub,\n children,\n container,\n showArrow,\n responsivePositioning = true,\n ...props\n}: DropdownContentProps | DropdownSubContentProps) => {\n const ContentElement = sub ? DropdownMenu.SubContent : DropdownMenu.Content;\n const inputModalityProps = useInputModality();\n const portalContainer = useResolvedPortalContainer(container);\n\n return (\n <DropdownMenu.Portal container={portalContainer}>\n <DropdownMenuContent\n {...props}\n type=\"dropdown-menu\"\n showArrow={showArrow}\n as={ContentElement}\n sideOffset={4}\n loop\n avoidCollisions={responsivePositioning}\n collisionPadding={responsivePositioning ? COLLISION_PADDING : undefined}\n {...inputModalityProps}\n >\n {showArrow && (\n <Arrow\n asChild\n as={DropdownMenu.Arrow}\n width={20}\n height={10}\n >\n <Popover_Arrow />\n </Arrow>\n )}\n {children}\n </DropdownMenuContent>\n </DropdownMenu.Portal>\n );\n};\n\nDropdownContent.displayName = 'DropdownContent';\nDropdown.Content = DropdownContent;\n\nconst DropdownGroup = ({ className, ...props }: DropdownMenu.DropdownMenuGroupProps) => {\n return (\n <DropdownMenu.Group\n {...props}\n className={cn(styles['dropdown-group'], className)}\n />\n );\n};\n\nDropdownGroup.displayName = 'DropdownGroup';\nDropdown.Group = DropdownGroup;\n\n// DropdownMenu.Sub renders no DOM node, so it takes only Radix's sub-menu props.\nconst DropdownSub = (props: DropdownMenu.DropdownMenuSubProps) => {\n return <DropdownMenu.Sub {...props} />;\n};\n\nDropdownSub.displayName = 'DropdownSub';\nDropdown.Sub = DropdownSub;\n\nconst DropdownItem = forwardRef<HTMLElement, DropdownItemProps>(\n ({ icon, iconDir, type = 'default', tooltipProps, ...props }, ref) => {\n const renderLabel = (label: ReactNode) => (\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n tooltipProps={{ side: 'right', ...tooltipProps }}\n >\n {label}\n </IconWrapper>\n );\n\n return (\n <DropdownMenuItem\n ref={ref as ForwardedRef<HTMLDivElement>}\n as={DropdownMenu.Item}\n type={type}\n {...props}\n >\n <Slottable child={props.children}>{renderLabel}</Slottable>\n </DropdownMenuItem>\n );\n }\n);\n\nDropdownItem.displayName = 'DropdownItem';\nDropdown.Item = DropdownItem;\n\nexport default Dropdown;\n"],"names":["jsx","DropdownMenu","GenericMenuItem","cn","styles","forwardRef","jsxs","IconWrapper","Icon","GenericMenuPanel","useInputModality","useResolvedPortalContainer","Arrow","Popover_Arrow","Slottable"],"mappings":"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"}
|
|
@@ -82,7 +82,23 @@
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
.table__header-content_interactive__7lV67 {
|
|
85
|
+
width: 100%;
|
|
86
|
+
margin: 0;
|
|
87
|
+
padding: 0;
|
|
88
|
+
border: 0;
|
|
89
|
+
background: none;
|
|
90
|
+
color: inherit;
|
|
91
|
+
font: inherit;
|
|
92
|
+
letter-spacing: inherit;
|
|
93
|
+
text-align: inherit;
|
|
94
|
+
text-transform: inherit;
|
|
85
95
|
cursor: pointer;
|
|
96
|
+
word-spacing: inherit;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.table__header-content_interactive__7lV67:focus-visible {
|
|
100
|
+
outline: 2px solid var(--click-global-color-outline-default);
|
|
101
|
+
outline-offset: 2px;
|
|
86
102
|
}
|
|
87
103
|
|
|
88
104
|
.table__resizer__m6w0b {
|
|
@@ -15,6 +15,7 @@ const Text = require('../Text/index.cjs');
|
|
|
15
15
|
const EllipsisContent = require('../EllipsisContent/index.cjs');
|
|
16
16
|
const classVarianceAuthority = require('class-variance-authority');
|
|
17
17
|
|
|
18
|
+
const MIN_COLUMN_WIDTH = 120;
|
|
18
19
|
const headerVariants = classVarianceAuthority.cva(Table_module.default.table__header, {
|
|
19
20
|
variants: {
|
|
20
21
|
size: {
|
|
@@ -50,8 +51,12 @@ const TableHeader = ({
|
|
|
50
51
|
showResizer,
|
|
51
52
|
onResizeStart,
|
|
52
53
|
onKeyboardResize,
|
|
54
|
+
columnWidth,
|
|
55
|
+
nextColumnWidth,
|
|
53
56
|
overflowMode,
|
|
54
57
|
className,
|
|
58
|
+
"aria-label": ariaLabel,
|
|
59
|
+
"aria-labelledby": ariaLabelledBy,
|
|
55
60
|
...props
|
|
56
61
|
}) => {
|
|
57
62
|
if (overflowMode === "wrap" && resizable) {
|
|
@@ -91,42 +96,56 @@ const TableHeader = ({
|
|
|
91
96
|
break;
|
|
92
97
|
}
|
|
93
98
|
};
|
|
99
|
+
const ariaSort = isSorted && isSortable ? sortDir === "asc" ? "ascending" : "descending" : void 0;
|
|
100
|
+
const isMeasured = columnWidth !== void 0;
|
|
101
|
+
const maxColumnWidth = isMeasured && nextColumnWidth !== void 0 ? Math.round(columnWidth + nextColumnWidth - MIN_COLUMN_WIDTH) : void 0;
|
|
102
|
+
const headerContentClassName = cva.cn(
|
|
103
|
+
Table_module.default["table__header-content"],
|
|
104
|
+
isInteractive && Table_module.default["table__header-content_interactive"]
|
|
105
|
+
);
|
|
106
|
+
const headerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
107
|
+
isSorted && isSortable && sortPosition == "start" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
108
|
+
Icon.Icon,
|
|
109
|
+
{
|
|
110
|
+
name: "arrow-down",
|
|
111
|
+
size: "sm",
|
|
112
|
+
"aria-hidden": "true",
|
|
113
|
+
className: cva.cn(sortIconVariants({ dir: sortDir }))
|
|
114
|
+
}
|
|
115
|
+
),
|
|
116
|
+
label,
|
|
117
|
+
isSorted && isSortable && sortPosition == "end" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
Icon.Icon,
|
|
119
|
+
{
|
|
120
|
+
name: "arrow-down",
|
|
121
|
+
size: "sm",
|
|
122
|
+
"aria-hidden": "true",
|
|
123
|
+
className: cva.cn(sortIconVariants({ dir: sortDir }))
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
] });
|
|
94
127
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
95
128
|
"th",
|
|
96
129
|
{
|
|
130
|
+
"aria-sort": ariaSort,
|
|
131
|
+
"aria-label": ariaLabel,
|
|
132
|
+
"aria-labelledby": ariaLabelledBy,
|
|
97
133
|
...props,
|
|
98
134
|
className: cva.cn(headerVariants({ size, resizable }), className),
|
|
99
135
|
children: [
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.
|
|
101
|
-
"
|
|
136
|
+
isInteractive ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
137
|
+
"button",
|
|
102
138
|
{
|
|
139
|
+
type: "button",
|
|
103
140
|
onClick: onHeaderClick,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
children: [
|
|
109
|
-
isSorted && isSortable && sortPosition == "start" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
110
|
-
Icon.Icon,
|
|
111
|
-
{
|
|
112
|
-
name: "arrow-down",
|
|
113
|
-
size: "sm",
|
|
114
|
-
className: cva.cn(sortIconVariants({ dir: sortDir }))
|
|
115
|
-
}
|
|
116
|
-
),
|
|
117
|
-
label,
|
|
118
|
-
isSorted && isSortable && sortPosition == "end" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
-
Icon.Icon,
|
|
120
|
-
{
|
|
121
|
-
name: "arrow-down",
|
|
122
|
-
size: "sm",
|
|
123
|
-
className: cva.cn(sortIconVariants({ dir: sortDir }))
|
|
124
|
-
}
|
|
125
|
-
)
|
|
126
|
-
]
|
|
141
|
+
"aria-label": ariaLabel,
|
|
142
|
+
"aria-labelledby": ariaLabelledBy,
|
|
143
|
+
className: headerContentClassName,
|
|
144
|
+
children: headerContent
|
|
127
145
|
}
|
|
128
|
-
),
|
|
129
|
-
showResizer &&
|
|
146
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headerContentClassName, children: headerContent }),
|
|
147
|
+
showResizer && // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- a focusable separator is a widget (WAI-ARIA 1.2 window splitter); jsx-a11y models it as static
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
130
149
|
"div",
|
|
131
150
|
{
|
|
132
151
|
ref: resizerRef,
|
|
@@ -134,7 +153,11 @@ const TableHeader = ({
|
|
|
134
153
|
role: "separator",
|
|
135
154
|
"aria-orientation": "vertical",
|
|
136
155
|
"aria-label": `Resize ${typeof label === "string" ? label : "column"}`,
|
|
137
|
-
|
|
156
|
+
"aria-valuenow": isMeasured ? Math.round(columnWidth) : void 0,
|
|
157
|
+
"aria-valuemin": MIN_COLUMN_WIDTH,
|
|
158
|
+
"aria-valuemax": maxColumnWidth,
|
|
159
|
+
"aria-valuetext": isMeasured ? `${Math.round(columnWidth)} pixels` : void 0,
|
|
160
|
+
tabIndex: isMeasured ? 0 : void 0,
|
|
138
161
|
onKeyDown: onResizerKeyDown,
|
|
139
162
|
className: cva.cn(Table_module.default.table__resizer)
|
|
140
163
|
}
|
|
@@ -155,13 +178,14 @@ const Thead = ({
|
|
|
155
178
|
resizableColumns,
|
|
156
179
|
onResizeStart,
|
|
157
180
|
theadRef,
|
|
158
|
-
onKeyboardResize
|
|
181
|
+
onKeyboardResize,
|
|
182
|
+
columnWidths
|
|
159
183
|
}) => {
|
|
160
|
-
const onSort = (header, headerIndex) => () => {
|
|
161
|
-
if (
|
|
184
|
+
const onSort = typeof onSortProp === "function" ? (header, headerIndex) => () => {
|
|
185
|
+
if (header.isSortable) {
|
|
162
186
|
onSortProp(header.sortDir === "asc" ? "desc" : "asc", header, headerIndex);
|
|
163
187
|
}
|
|
164
|
-
};
|
|
188
|
+
} : void 0;
|
|
165
189
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
166
190
|
"thead",
|
|
167
191
|
{
|
|
@@ -183,19 +207,26 @@ const Thead = ({
|
|
|
183
207
|
)
|
|
184
208
|
}
|
|
185
209
|
),
|
|
186
|
-
headers.map((headerProps, index) =>
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
210
|
+
headers.map((headerProps, index) => {
|
|
211
|
+
const headerLabel = typeof headerProps.label === "string" ? headerProps.label : `__index_${index}`;
|
|
212
|
+
const nextHeader = headers[index + 1];
|
|
213
|
+
const nextHeaderLabel = typeof nextHeader?.label === "string" ? nextHeader.label : `__index_${index + 1}`;
|
|
214
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
215
|
+
TableHeader,
|
|
216
|
+
{
|
|
217
|
+
onSort: onSort?.(headerProps, index),
|
|
218
|
+
size,
|
|
219
|
+
resizable: resizableColumns,
|
|
220
|
+
showResizer: resizableColumns && index < headers.length - 1,
|
|
221
|
+
onResizeStart: onResizeStart?.(index),
|
|
222
|
+
onKeyboardResize: onKeyboardResize?.(index),
|
|
223
|
+
columnWidth: columnWidths?.get(headerLabel),
|
|
224
|
+
nextColumnWidth: nextHeader ? columnWidths?.get(nextHeaderLabel) : void 0,
|
|
225
|
+
...headerProps
|
|
226
|
+
},
|
|
227
|
+
`table-header-${index}`
|
|
228
|
+
);
|
|
229
|
+
}),
|
|
199
230
|
actionsList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
200
231
|
"th",
|
|
201
232
|
{
|
|
@@ -409,7 +440,6 @@ const CustomTableRow = ({
|
|
|
409
440
|
}
|
|
410
441
|
) });
|
|
411
442
|
};
|
|
412
|
-
const MIN_COLUMN_WIDTH = 120;
|
|
413
443
|
const Table = react.forwardRef(
|
|
414
444
|
({
|
|
415
445
|
headers,
|
|
@@ -649,7 +679,8 @@ const Table = react.forwardRef(
|
|
|
649
679
|
resizableColumns,
|
|
650
680
|
onResizeStart: resizableColumns ? handleResizeStart : void 0,
|
|
651
681
|
theadRef,
|
|
652
|
-
onKeyboardResize: resizableColumns ? onKeyboardResize : void 0
|
|
682
|
+
onKeyboardResize: resizableColumns ? onKeyboardResize : void 0,
|
|
683
|
+
columnWidths: resizableColumns ? columnWidths : void 0
|
|
653
684
|
}
|
|
654
685
|
),
|
|
655
686
|
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { className: cva.cn(Table_module.default.table__tbody), children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n CSSProperties,\n FC,\n HTMLAttributes,\n MouseEvent,\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from 'react';\n\nimport { CheckedState } from '@radix-ui/react-checkbox';\n\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Text } from '@/components/Text';\nimport { HorizontalDirection } from '@/types';\nimport { EllipsisContent } from '@/components/EllipsisContent';\nimport { Checkbox, CheckboxProps } from '@/components/Checkbox';\nimport { MiddleTruncator } from '@/components/MiddleTruncator';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Table.module.css';\n\ntype SortDir = 'asc' | 'desc';\ntype SortFn = (sortDir: SortDir, header: TableColumnConfigProps, index: number) => void;\ntype TableSize = 'sm' | 'md';\n\n// wrap: text breaks into multiple lines\n// truncated: text cuts at end with an ellipsis (...)\n// truncate-middle: text cuts in middle, shows start and end\ntype OverflowMode = 'truncated' | 'truncate-middle' | 'wrap';\n\nexport interface TableColumnConfigProps extends HTMLAttributes<HTMLTableCellElement> {\n label: ReactNode;\n isSortable?: boolean;\n sortDir?: SortDir;\n sortPosition?: HorizontalDirection;\n width?: string;\n overflowMode?: OverflowMode;\n resizable?: boolean;\n}\n\n// TODO: Delete `TableHeaderType` (deprecation warn at v0.0.251-test.67)\n/** @deprecated The TableHeaderType field have been deprecated to favour TableColumnConfigProps */\nexport type TableHeaderType = TableColumnConfigProps;\n\nconst headerVariants = cva(styles.table__header, {\n variants: {\n size: {\n sm: styles.table__header_size_sm,\n md: styles.table__header_size_md,\n },\n resizable: {\n true: styles.table__header_resizable,\n false: '',\n },\n },\n defaultVariants: {\n resizable: false,\n },\n});\n\nconst sortIconVariants = cva(styles['table__sort-icon'], {\n variants: {\n dir: {\n asc: styles['table__sort-icon_dir_asc'],\n desc: styles['table__sort-icon_dir_desc'],\n },\n },\n});\n\ntype OnKeyboardResizerDirection = 'left' | 'right';\n\ninterface TableHeaderProps extends Omit<TableColumnConfigProps, 'width'> {\n onSort?: () => void;\n size: TableSize;\n showResizer?: boolean;\n onResizeStart?: (e: MouseEvent) => void;\n onKeyboardResize?: (\n e: React.KeyboardEvent,\n direction: OnKeyboardResizerDirection\n ) => void;\n}\n\nconst TableHeader = ({\n label,\n sortDir,\n sortPosition = 'end',\n isSortable,\n onSort,\n onClick,\n size,\n resizable,\n showResizer,\n onResizeStart,\n onKeyboardResize,\n overflowMode,\n className,\n ...props\n}: TableHeaderProps) => {\n if (overflowMode === 'wrap' && resizable) {\n console.warn(\n '\"Wrap\" overflow mode doesn\\'t work well with resizable table columns. Consider using truncation instead, please!'\n );\n }\n\n const isSorted = typeof sortDir === 'string';\n const isInteractive = Boolean(\n typeof onClick === 'function' || (isSortable && typeof onSort === 'function')\n );\n const resizerRef = useRef<HTMLDivElement>(null);\n\n const onHeaderClick = (e: MouseEvent<HTMLTableCellElement>): void => {\n if (typeof onClick === 'function') {\n onClick(e);\n }\n if (typeof onSort === 'function') {\n onSort();\n }\n };\n\n const onResizerKeyDown = (e: React.KeyboardEvent) => {\n if (!onKeyboardResize) {\n return;\n }\n\n if (['ArrowLeft', 'ArrowRight'].includes(e.key)) {\n e.preventDefault();\n }\n\n switch (e.key) {\n case 'ArrowLeft':\n onKeyboardResize(e, 'left');\n break;\n case 'ArrowRight':\n onKeyboardResize(e, 'right');\n break;\n case 'Escape':\n resizerRef.current?.blur();\n break;\n }\n };\n\n return (\n <th\n {...props}\n className={cn(headerVariants({ size, resizable }), className)}\n >\n <div\n onClick={onHeaderClick}\n className={cn(\n styles['table__header-content'],\n isInteractive && styles['table__header-content_interactive']\n )}\n >\n {isSorted && isSortable && sortPosition == 'start' && (\n <Icon\n name=\"arrow-down\"\n size=\"sm\"\n className={cn(sortIconVariants({ dir: sortDir }))}\n />\n )}\n {label}\n {isSorted && isSortable && sortPosition == 'end' && (\n <Icon\n name=\"arrow-down\"\n size=\"sm\"\n className={cn(sortIconVariants({ dir: sortDir }))}\n />\n )}\n </div>\n {showResizer && (\n <div\n ref={resizerRef}\n onMouseDown={onResizeStart}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${typeof label === 'string' ? label : 'column'}`}\n tabIndex={0}\n onKeyDown={onResizerKeyDown}\n className={cn(styles.table__resizer)}\n />\n )}\n </th>\n );\n};\ninterface TheadProps {\n headers: TableColumnConfigProps[];\n isSelectable?: boolean;\n onSelectAll?: (selectedValues: SelectReturnValue[]) => void;\n actionsList: string[];\n onSort?: SortFn;\n size: TableSize;\n rows: TableRowType[];\n selectedIds: (number | string)[];\n resizableColumns?: boolean;\n onResizeStart?: (columnIndex: number) => (e: MouseEvent) => void;\n onKeyboardResize?: (\n columnIndex: number\n ) => (e: React.KeyboardEvent, direction: OnKeyboardResizerDirection) => void;\n theadRef?: RefObject<HTMLTableSectionElement>;\n}\n\nconst Thead = ({\n headers,\n isSelectable,\n onSelectAll,\n actionsList,\n onSort: onSortProp,\n size,\n rows,\n selectedIds,\n resizableColumns,\n onResizeStart,\n theadRef,\n onKeyboardResize,\n}: TheadProps) => {\n const onSort = (header: TableColumnConfigProps, headerIndex: number) => () => {\n if (typeof onSortProp === 'function' && header.isSortable) {\n onSortProp(header.sortDir === 'asc' ? 'desc' : 'asc', header, headerIndex);\n }\n };\n return (\n <thead\n ref={theadRef}\n className={cn(styles.table__thead)}\n >\n <tr>\n {isSelectable && (\n <th\n aria-label=\"Select column\"\n className={cn(headerVariants({ size }))}\n >\n <SelectAllCheckbox\n onCheckedChange={onSelectAll}\n rows={rows}\n selectedIds={selectedIds}\n />\n </th>\n )}\n {headers.map((headerProps, index) => (\n <TableHeader\n key={`table-header-${index}`}\n onSort={onSort(headerProps, index)}\n size={size}\n resizable={resizableColumns}\n showResizer={resizableColumns && index < headers.length - 1}\n onResizeStart={onResizeStart?.(index)}\n onKeyboardResize={onKeyboardResize?.(index)}\n {...headerProps}\n />\n ))}\n {actionsList.length > 0 && (\n <th\n aria-label=\"Actions\"\n className={cn(headerVariants({ size }))}\n />\n )}\n </tr>\n </thead>\n );\n};\n\ninterface ColgroupProps {\n headers: TableColumnConfigProps[];\n isSelectable?: boolean;\n actionsList: string[];\n resizableColumns?: boolean;\n columnWidths?: Map<string, number> | null;\n}\n\nconst Colgroup = ({\n headers,\n isSelectable,\n actionsList,\n resizableColumns,\n columnWidths,\n}: ColgroupProps) => (\n <colgroup className={cn(styles.table__colgroup)}>\n {isSelectable && <col width={48} />}\n {headers.map((headerProps, index) => {\n const headerLabel =\n typeof headerProps.label === 'string' ? headerProps.label : `__index_${index}`;\n const widthFromMap = columnWidths?.get(headerLabel);\n return (\n <col\n key={`header-col-${index}`}\n width={\n resizableColumns && widthFromMap && index < headers.length - 1\n ? `${widthFromMap}px`\n : headerProps.width\n }\n />\n );\n })}\n {actionsList.length > 0 && <col width={(actionsList.length + 1) * 32 + 10} />}\n </colgroup>\n);\n\nconst rowVariants = cva(styles.table__row, {\n variants: {\n isSelectable: {\n true: styles.table__row_selectable,\n false: '',\n },\n isActive: {\n true: styles.table__row_active,\n false: '',\n },\n isDisabled: {\n true: styles.table__row_disabled,\n false: '',\n },\n showActions: {\n true: styles['table__row_show-actions'],\n false: '',\n },\n },\n defaultVariants: {\n isSelectable: false,\n isActive: false,\n isDisabled: false,\n showActions: false,\n },\n});\n\nconst cellVariants = cva(styles.table__data, {\n variants: {\n size: {\n sm: styles.table__data_size_sm,\n md: styles.table__data_size_md,\n },\n },\n});\n\nconst selectDataVariants = cva(styles['table__select-data'], {\n variants: {\n size: {\n sm: styles['table__select-data_size_sm'],\n md: styles['table__select-data_size_md'],\n },\n },\n});\n\nconst actionsCellVariants = cva(styles['table__actions-cell'], {\n variants: {\n size: {\n sm: styles['table__actions-cell_size_sm'],\n md: styles['table__actions-cell_size_md'],\n },\n },\n});\n\ninterface TableCellType extends HTMLAttributes<HTMLTableCellElement> {\n label: ReactNode;\n overflowMode?: OverflowMode;\n}\nexport interface TableRowType extends Omit<\n HTMLAttributes<HTMLTableRowElement>,\n 'onSelect' | 'id'\n> {\n id: string | number;\n items: TableCellType[];\n isDisabled?: boolean;\n isDeleted?: boolean;\n isActive?: boolean;\n /** only works with <Table isSelectable={true} /> */\n isIndeterminate?: boolean;\n}\n\nexport type MobileLayoutProp = 'list' | 'scroll';\n\ninterface CommonTableProps extends Omit<\n HTMLAttributes<HTMLTableElement>,\n 'children' | 'onSelect'\n> {\n headers: TableColumnConfigProps[];\n rows: TableRowType[];\n onDelete?: (item: TableRowType, index: number) => void;\n onEdit?: (item: TableRowType, index: number) => void;\n onSort?: SortFn;\n loading?: boolean;\n noDataMessage?: ReactNode;\n size?: TableSize;\n showHeader?: boolean;\n rowHeight?: string;\n resizableColumns?: boolean;\n mobileLayout?: MobileLayoutProp;\n}\n\ntype SelectReturnValue = {\n index: number;\n item: TableRowType;\n};\n\ninterface SelectionType {\n isSelectable?: boolean;\n selectedIds?: (number | string)[];\n onSelect?: (selectedValues: SelectReturnValue[]) => void;\n}\n\ninterface NoSelectionType {\n isSelectable?: never;\n selectedIds?: never;\n onSelect?: never;\n}\n\nexport type TableProps = CommonTableProps & (SelectionType | NoSelectionType);\n\ninterface TableBodyRowProps extends Omit<TableRowType, 'id'> {\n headers: TableColumnConfigProps[];\n onSelect: (checked: boolean) => void;\n isSelectable?: boolean;\n isSelected: boolean;\n onDelete?: () => void;\n onEdit?: () => void;\n actionsList: string[];\n size: TableSize;\n rowHeight?: string;\n}\n\nconst TableBodyRow = ({\n headers,\n items,\n onSelect,\n isSelectable,\n isSelected,\n isIndeterminate,\n onDelete,\n onEdit,\n isDeleted,\n isActive,\n isDisabled,\n size,\n actionsList,\n rowHeight,\n className,\n style,\n ...rowProps\n}: TableBodyRowProps) => {\n const isDeletable = typeof onDelete === 'function';\n const isEditable = typeof onEdit === 'function';\n const rowStyle = useMemo(\n () =>\n ({\n ...(rowHeight ? { '--table-row-height': rowHeight } : {}),\n ...style,\n }) as CSSProperties,\n [rowHeight, style]\n );\n return (\n <tr\n style={rowStyle}\n {...rowProps}\n className={cn(\n rowVariants({\n isSelectable,\n isActive,\n isDisabled: isDeleted || isDisabled,\n showActions: isDeletable || isEditable,\n }),\n className\n )}\n >\n {isSelectable && (\n <td className={cn(selectDataVariants({ size }))}>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : isSelected}\n onCheckedChange={onSelect}\n disabled={isDisabled || isDeleted}\n />\n </td>\n )}\n {items.map(\n ({ label, overflowMode, className: cellClassName, ...cellProps }, cellIndex) => (\n <td\n key={`table-cell-${cellIndex}`}\n {...cellProps}\n className={cn(cellVariants({ size }), cellClassName)}\n >\n {headers[cellIndex] && (\n <div className={cn(styles['table__mobile-header'])}>\n {headers[cellIndex].label}\n </div>\n )}\n <Cell\n label={label}\n overflowMode={overflowMode ?? headers[cellIndex]?.overflowMode}\n />\n </td>\n )\n )}\n {actionsList.length > 0 && (\n <td className={cn(actionsCellVariants({ size }))}>\n <div className={cn(styles.table__actions)}>\n {actionsList.includes('editAction') && (\n <IconButton\n type=\"ghost\"\n htmlType=\"button\"\n disabled={isDisabled || isDeleted || !isEditable}\n icon=\"pencil\"\n onClick={onEdit}\n data-testid=\"table-row-edit\"\n className={cn(styles['table__edit-button'])}\n />\n )}\n {actionsList.includes('deleteAction') && (\n <IconButton\n disabled={isDisabled || !isDeletable}\n type=\"ghost\"\n htmlType=\"button\"\n icon=\"cross\"\n onClick={onDelete}\n data-testid=\"table-row-delete\"\n className={cn(\n styles['table__close-button'],\n isDeleted && styles['table__close-button_deleted']\n )}\n />\n )}\n </div>\n </td>\n )}\n </tr>\n );\n};\n\nconst LoadingData = () => {\n return (\n <>\n <Icon\n name=\"loading-animated\"\n size=\"sm\"\n />\n <Text size=\"sm\">Loading data</Text>\n </>\n );\n};\ninterface CustomTableRowProps {\n loading?: boolean;\n noDataMessage?: ReactNode;\n colSpan: number;\n size: TableSize;\n}\nconst CustomTableRow = ({\n loading,\n noDataMessage,\n colSpan,\n size,\n}: CustomTableRowProps) => {\n return (\n <tr className={cn(rowVariants({}))}>\n <td\n colSpan={colSpan}\n className={cn(cellVariants({ size }), styles['table__spanned-data'])}\n >\n <div className={cn(styles['table__custom-message'])}>\n {loading ? <LoadingData /> : (noDataMessage ?? 'No Data available')}\n </div>\n </td>\n </tr>\n );\n};\ninterface ResizeState {\n isResizing: boolean;\n columnLabel: string | null;\n nextColumnLabel: string | null;\n startX: number;\n startWidth: number;\n nextStartWidth: number;\n}\n\n// TODO: What is an acceptable minimum column width?\nconst MIN_COLUMN_WIDTH = 120;\n\nconst Table = forwardRef<HTMLTableElement, TableProps>(\n (\n {\n headers,\n rows,\n isSelectable,\n selectedIds = [],\n onSelect,\n onDelete,\n onEdit,\n onSort,\n loading,\n noDataMessage,\n size = 'sm',\n showHeader = true,\n rowHeight,\n resizableColumns,\n mobileLayout = 'list',\n className,\n ...props\n },\n ref\n ) => {\n const isDeletable = typeof onDelete === 'function';\n const isEditable = typeof onEdit === 'function';\n\n const [columnWidths, setColumnWidths] = useState<Map<string, number> | null>(null);\n const theadRef = useRef<HTMLTableSectionElement>(null);\n\n useLayoutEffect(() => {\n if (!resizableColumns || columnWidths !== null || !theadRef.current) {\n return;\n }\n\n const headerCells = theadRef.current.querySelectorAll('th');\n const widths = new Map<string, number>();\n\n // Skip select column (index 0 if isSelectable) and actions column (last if present)\n const startIndex = isSelectable ? 1 : 0;\n const endIndex = headerCells.length - (isDeletable || isEditable ? 1 : 0);\n\n let headerIndex = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const header = headers[headerIndex];\n if (header) {\n const key =\n typeof header.label === 'string' ? header.label : `__index_${headerIndex}`;\n widths.set(key, headerCells[i].getBoundingClientRect().width);\n }\n headerIndex++;\n }\n\n if (widths.size === headers.length) {\n setColumnWidths(widths);\n }\n }, [resizableColumns, columnWidths, isSelectable, isDeletable, isEditable]);\n\n const headerKey = useMemo(\n () =>\n headers\n .map((h, i) => (typeof h.label === 'string' ? h.label : `__index_${i}`))\n .join(','),\n [headers]\n );\n useEffect(() => {\n setColumnWidths(null);\n }, [headerKey]);\n\n const resizeStateRef = useRef<ResizeState>({\n isResizing: false,\n columnLabel: null,\n nextColumnLabel: null,\n startX: 0,\n startWidth: 0,\n nextStartWidth: 0,\n });\n\n const onMouseMove = useCallback((e: globalThis.MouseEvent) => {\n if (!resizeStateRef.current.isResizing) {\n return;\n }\n\n const { columnLabel, nextColumnLabel, startX, startWidth, nextStartWidth } =\n resizeStateRef.current;\n\n if (!columnLabel || !nextColumnLabel) {\n return;\n }\n\n const diff = e.clientX - startX;\n const newWidth = startWidth + diff;\n const newNextWidth = nextStartWidth - diff;\n\n if (Number.isNaN(newWidth) || Number.isNaN(newNextWidth)) {\n console.warn('Unexpected computed values for resize width', {\n newWidth,\n newNextWidth,\n });\n return;\n }\n\n if (newWidth >= MIN_COLUMN_WIDTH && newNextWidth >= MIN_COLUMN_WIDTH) {\n setColumnWidths(prev => {\n if (!prev) {\n return prev;\n }\n const updated = new Map(prev);\n updated.set(columnLabel, newWidth);\n updated.set(nextColumnLabel, newNextWidth);\n return updated;\n });\n }\n }, []);\n\n const onMouseUp = useCallback(() => {\n resizeStateRef.current.isResizing = false;\n }, []);\n\n useEffect(() => {\n if (!resizableColumns) {\n return;\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, [resizableColumns, onMouseMove, onMouseUp]);\n\n const handleResizeStart = useCallback(\n (columnIndex: number) => (e: MouseEvent) => {\n e.preventDefault();\n\n if (!columnWidths) {\n return;\n }\n\n const currentHeader = headers[columnIndex];\n const nextHeader = headers[columnIndex + 1];\n\n if (!currentHeader || !nextHeader) {\n return;\n }\n\n const currentLabel =\n typeof currentHeader.label === 'string'\n ? currentHeader.label\n : `__index_${columnIndex}`;\n const nextLabel =\n typeof nextHeader.label === 'string'\n ? nextHeader.label\n : `__index_${columnIndex + 1}`;\n\n const startWidth = columnWidths.get(currentLabel);\n const nextStartWidth = columnWidths.get(nextLabel);\n\n if (startWidth === undefined || nextStartWidth === undefined) {\n return;\n }\n\n resizeStateRef.current = {\n isResizing: true,\n columnLabel: currentLabel,\n nextColumnLabel: nextLabel,\n startX: e.clientX,\n startWidth,\n nextStartWidth,\n };\n },\n [headers, columnWidths]\n );\n\n const onRowSelect =\n (id: number | string) =>\n (checked: boolean): void => {\n if (typeof onSelect == 'function') {\n const selectedItems = rows.flatMap((row, index) => {\n if (\n (id === row.id && checked) ||\n (selectedIds.includes(row.id) && id !== row.id)\n ) {\n return {\n item: row,\n index,\n };\n }\n\n return [];\n });\n onSelect(selectedItems);\n }\n };\n const hasRows = rows.length > 0;\n const actionsList: string[] = [];\n if (isDeletable) {\n actionsList.push('deleteAction');\n }\n if (isEditable) {\n actionsList.push('editAction');\n }\n\n const onKeyboardResize = useCallback(\n (columnIndex: number) =>\n (_e: React.KeyboardEvent, direction: OnKeyboardResizerDirection) => {\n if (!columnWidths) {\n return;\n }\n\n const currentHeader = headers[columnIndex];\n const nextHeader = headers[columnIndex + 1];\n\n if (!currentHeader || !nextHeader) {\n return;\n }\n\n const currentLabel =\n typeof currentHeader.label === 'string'\n ? currentHeader.label\n : `__index_${columnIndex}`;\n const nextLabel =\n typeof nextHeader.label === 'string'\n ? nextHeader.label\n : `__index_${columnIndex + 1}`;\n\n const increment = 2;\n const multiplier = direction === 'right' ? 1 : -1;\n const diff = increment * multiplier;\n\n const currentWidth = columnWidths.get(currentLabel);\n const nextWidth = columnWidths.get(nextLabel);\n\n if (currentWidth === undefined || nextWidth === undefined) {\n return;\n }\n\n const newWidth = currentWidth + diff;\n const newNextWidth = nextWidth - diff;\n const shouldUpdateColumnWidth =\n newWidth >= MIN_COLUMN_WIDTH && newNextWidth >= MIN_COLUMN_WIDTH;\n\n if (!shouldUpdateColumnWidth) {\n return;\n }\n\n setColumnWidths(prev => {\n if (!prev) {\n return prev;\n }\n const updated = new Map(prev);\n updated.set(currentLabel, newWidth);\n updated.set(nextLabel, newNextWidth);\n return updated;\n });\n },\n [columnWidths, headers]\n );\n\n return (\n <div\n data-mobile-layout={mobileLayout}\n className={cn(styles.table)}\n >\n {hasRows && showHeader && (\n <div className={cn(styles['table__mobile-actions'])}>\n {isSelectable && (\n <SelectAllCheckbox\n label=\"Select All\"\n onCheckedChange={onSelect}\n rows={rows}\n selectedIds={selectedIds}\n />\n )}\n </div>\n )}\n <div className={cn(styles.table__wrapper)}>\n <table\n ref={ref}\n {...props}\n className={cn(styles['table__table'], className)}\n >\n <Colgroup\n headers={headers}\n isSelectable={isSelectable}\n actionsList={actionsList}\n resizableColumns={resizableColumns}\n columnWidths={resizableColumns ? columnWidths : undefined}\n />\n {showHeader && (\n <Thead\n headers={headers}\n isSelectable={isSelectable}\n onSelectAll={onSelect}\n actionsList={actionsList}\n onSort={onSort}\n size={size}\n rows={rows}\n selectedIds={selectedIds}\n resizableColumns={resizableColumns}\n onResizeStart={resizableColumns ? handleResizeStart : undefined}\n theadRef={theadRef}\n onKeyboardResize={resizableColumns ? onKeyboardResize : undefined}\n />\n )}\n <tbody className={cn(styles.table__tbody)}>\n {(loading || !hasRows) && (\n <CustomTableRow\n colSpan={\n headers.length +\n (isEditable || isDeletable ? 1 : 0) +\n (isSelectable ? 1 : 0)\n }\n loading={loading}\n noDataMessage={noDataMessage}\n size={size}\n />\n )}\n {rows.map(({ id, ...rowProps }, rowIndex) => (\n <TableBodyRow\n key={`table-body-row-${rowIndex}`}\n headers={headers}\n isSelectable={isSelectable}\n isSelected={selectedIds?.includes(id)}\n onSelect={onRowSelect(id)}\n actionsList={actionsList}\n onDelete={\n isDeletable\n ? () =>\n onDelete(\n { id, ...rowProps, isDeleted: !rowProps.isDeleted },\n rowIndex\n )\n : undefined\n }\n onEdit={\n isEditable ? () => onEdit({ id, ...rowProps }, rowIndex) : undefined\n }\n size={size}\n rowHeight={rowHeight}\n {...rowProps}\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n);\n\ninterface SelectAllCheckboxProps extends Omit<CheckboxProps, 'onCheckedChange'> {\n onCheckedChange?: (selectedValues: SelectReturnValue[]) => void;\n selectedIds: (number | string)[];\n rows: TableRowType[];\n}\n\nconst SelectAllCheckbox: FC<SelectAllCheckboxProps> = ({\n rows,\n selectedIds,\n onCheckedChange,\n ...checkboxProps\n}) => {\n const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n const { checked, disabled } = useMemo(() => {\n let areAllChecked = true;\n let maybeIndeterminate: CheckedState = false;\n let disabled = true;\n\n for (const row of rows) {\n if (row.isDisabled || row.isDeleted) {\n continue;\n } else {\n disabled = false;\n }\n\n if (selectedIdSet.has(row.id)) {\n maybeIndeterminate = 'indeterminate';\n } else {\n areAllChecked = false;\n }\n }\n\n return {\n checked: disabled ? false : areAllChecked || maybeIndeterminate,\n disabled,\n };\n }, [rows, selectedIdSet]);\n\n const handleCheckedChange = (checked: boolean) => {\n if (typeof onCheckedChange !== 'function') {\n return;\n }\n\n // disabled items should not change their selected state because of user interaction\n\n const newSelectedRows = rows.reduce((acc: SelectReturnValue[], row, index) => {\n const isDisabled = row.isDisabled || row.isDeleted;\n\n const shouldBeSelected = checked\n ? !isDisabled || selectedIdSet.has(row.id)\n : isDisabled && selectedIdSet.has(row.id);\n\n if (shouldBeSelected) {\n acc.push({\n item: row,\n index,\n });\n }\n\n return acc;\n }, []);\n\n onCheckedChange(newSelectedRows);\n };\n\n return (\n <Checkbox\n checked={checked}\n disabled={disabled}\n onCheckedChange={handleCheckedChange}\n {...checkboxProps}\n />\n );\n};\n\nconst Cell = ({\n label,\n overflowMode = 'truncated',\n}: {\n label: ReactNode;\n overflowMode?: OverflowMode;\n}) => {\n const isText = typeof label === 'string';\n\n if (!isText) {\n return <>{label}</>;\n }\n\n if (overflowMode === 'truncate-middle') {\n return <MiddleTruncator text={label} />;\n }\n\n if (overflowMode === 'wrap') {\n return <span className={cn(styles['table__text-wrapped'])}>{label}</span>;\n }\n\n return <EllipsisContent component=\"div\">{label}</EllipsisContent>;\n};\n\nexport { Table };\n"],"names":["cva","styles","useRef","jsxs","cn","jsx","Icon","useMemo","Checkbox","IconButton","Fragment","Text","forwardRef","useState","useLayoutEffect","useEffect","useCallback","disabled","checked","MiddleTruncator","EllipsisContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n CSSProperties,\n FC,\n HTMLAttributes,\n MouseEvent,\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from 'react';\n\nimport { CheckedState } from '@radix-ui/react-checkbox';\n\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Text } from '@/components/Text';\nimport { HorizontalDirection } from '@/types';\nimport { EllipsisContent } from '@/components/EllipsisContent';\nimport { Checkbox, CheckboxProps } from '@/components/Checkbox';\nimport { MiddleTruncator } from '@/components/MiddleTruncator';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Table.module.css';\n\ntype SortDir = 'asc' | 'desc';\ntype SortFn = (sortDir: SortDir, header: TableColumnConfigProps, index: number) => void;\ntype TableSize = 'sm' | 'md';\n\n// wrap: text breaks into multiple lines\n// truncated: text cuts at end with an ellipsis (...)\n// truncate-middle: text cuts in middle, shows start and end\ntype OverflowMode = 'truncated' | 'truncate-middle' | 'wrap';\n\nconst MIN_COLUMN_WIDTH = 120;\n\nexport interface TableColumnConfigProps extends HTMLAttributes<HTMLTableCellElement> {\n /** Rendered inside a `<button>` when the column is sortable or has `onClick`, so it must not contain interactive content. */\n label: ReactNode;\n isSortable?: boolean;\n sortDir?: SortDir;\n sortPosition?: HorizontalDirection;\n width?: string;\n overflowMode?: OverflowMode;\n resizable?: boolean;\n}\n\n// TODO: Delete `TableHeaderType` (deprecation warn at v0.0.251-test.67)\n/** @deprecated The TableHeaderType field have been deprecated to favour TableColumnConfigProps */\nexport type TableHeaderType = TableColumnConfigProps;\n\nconst headerVariants = cva(styles.table__header, {\n variants: {\n size: {\n sm: styles.table__header_size_sm,\n md: styles.table__header_size_md,\n },\n resizable: {\n true: styles.table__header_resizable,\n false: '',\n },\n },\n defaultVariants: {\n resizable: false,\n },\n});\n\nconst sortIconVariants = cva(styles['table__sort-icon'], {\n variants: {\n dir: {\n asc: styles['table__sort-icon_dir_asc'],\n desc: styles['table__sort-icon_dir_desc'],\n },\n },\n});\n\ntype OnKeyboardResizerDirection = 'left' | 'right';\n\ninterface TableHeaderProps extends Omit<TableColumnConfigProps, 'width'> {\n onSort?: () => void;\n size: TableSize;\n showResizer?: boolean;\n onResizeStart?: (e: MouseEvent) => void;\n onKeyboardResize?: (\n e: React.KeyboardEvent,\n direction: OnKeyboardResizerDirection\n ) => void;\n columnWidth?: number;\n nextColumnWidth?: number;\n}\n\nconst TableHeader = ({\n label,\n sortDir,\n sortPosition = 'end',\n isSortable,\n onSort,\n onClick,\n size,\n resizable,\n showResizer,\n onResizeStart,\n onKeyboardResize,\n columnWidth,\n nextColumnWidth,\n overflowMode,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: TableHeaderProps) => {\n if (overflowMode === 'wrap' && resizable) {\n console.warn(\n '\"Wrap\" overflow mode doesn\\'t work well with resizable table columns. Consider using truncation instead, please!'\n );\n }\n\n const isSorted = typeof sortDir === 'string';\n const isInteractive = Boolean(\n typeof onClick === 'function' || (isSortable && typeof onSort === 'function')\n );\n const resizerRef = useRef<HTMLDivElement>(null);\n\n const onHeaderClick = (\n e: MouseEvent<HTMLButtonElement & HTMLTableCellElement>\n ): void => {\n if (typeof onClick === 'function') {\n onClick(e);\n }\n if (typeof onSort === 'function') {\n onSort();\n }\n };\n\n const onResizerKeyDown = (e: React.KeyboardEvent) => {\n if (!onKeyboardResize) {\n return;\n }\n\n if (['ArrowLeft', 'ArrowRight'].includes(e.key)) {\n e.preventDefault();\n }\n\n switch (e.key) {\n case 'ArrowLeft':\n onKeyboardResize(e, 'left');\n break;\n case 'ArrowRight':\n onKeyboardResize(e, 'right');\n break;\n case 'Escape':\n resizerRef.current?.blur();\n break;\n }\n };\n\n const ariaSort =\n isSorted && isSortable ? (sortDir === 'asc' ? 'ascending' : 'descending') : undefined;\n const isMeasured = columnWidth !== undefined;\n const maxColumnWidth =\n isMeasured && nextColumnWidth !== undefined\n ? Math.round(columnWidth + nextColumnWidth - MIN_COLUMN_WIDTH)\n : undefined;\n const headerContentClassName = cn(\n styles['table__header-content'],\n isInteractive && styles['table__header-content_interactive']\n );\n const headerContent = (\n <>\n {isSorted && isSortable && sortPosition == 'start' && (\n <Icon\n name=\"arrow-down\"\n size=\"sm\"\n aria-hidden=\"true\"\n className={cn(sortIconVariants({ dir: sortDir }))}\n />\n )}\n {label}\n {isSorted && isSortable && sortPosition == 'end' && (\n <Icon\n name=\"arrow-down\"\n size=\"sm\"\n aria-hidden=\"true\"\n className={cn(sortIconVariants({ dir: sortDir }))}\n />\n )}\n </>\n );\n\n return (\n <th\n aria-sort={ariaSort}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n {...props}\n className={cn(headerVariants({ size, resizable }), className)}\n >\n {isInteractive ? (\n <button\n type=\"button\"\n onClick={onHeaderClick}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={headerContentClassName}\n >\n {headerContent}\n </button>\n ) : (\n <div className={headerContentClassName}>{headerContent}</div>\n )}\n {showResizer && (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- a focusable separator is a widget (WAI-ARIA 1.2 window splitter); jsx-a11y models it as static\n <div\n ref={resizerRef}\n onMouseDown={onResizeStart}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${typeof label === 'string' ? label : 'column'}`}\n aria-valuenow={isMeasured ? Math.round(columnWidth) : undefined}\n aria-valuemin={MIN_COLUMN_WIDTH}\n aria-valuemax={maxColumnWidth}\n aria-valuetext={isMeasured ? `${Math.round(columnWidth)} pixels` : undefined}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- focusable separator, see above\n tabIndex={isMeasured ? 0 : undefined}\n onKeyDown={onResizerKeyDown}\n className={cn(styles.table__resizer)}\n />\n )}\n </th>\n );\n};\ninterface TheadProps {\n headers: TableColumnConfigProps[];\n isSelectable?: boolean;\n onSelectAll?: (selectedValues: SelectReturnValue[]) => void;\n actionsList: string[];\n onSort?: SortFn;\n size: TableSize;\n rows: TableRowType[];\n selectedIds: (number | string)[];\n resizableColumns?: boolean;\n onResizeStart?: (columnIndex: number) => (e: MouseEvent) => void;\n onKeyboardResize?: (\n columnIndex: number\n ) => (e: React.KeyboardEvent, direction: OnKeyboardResizerDirection) => void;\n theadRef?: RefObject<HTMLTableSectionElement>;\n columnWidths?: Map<string, number> | null;\n}\n\nconst Thead = ({\n headers,\n isSelectable,\n onSelectAll,\n actionsList,\n onSort: onSortProp,\n size,\n rows,\n selectedIds,\n resizableColumns,\n onResizeStart,\n theadRef,\n onKeyboardResize,\n columnWidths,\n}: TheadProps) => {\n const onSort =\n typeof onSortProp === 'function'\n ? (header: TableColumnConfigProps, headerIndex: number) => () => {\n if (header.isSortable) {\n onSortProp(header.sortDir === 'asc' ? 'desc' : 'asc', header, headerIndex);\n }\n }\n : undefined;\n return (\n <thead\n ref={theadRef}\n className={cn(styles.table__thead)}\n >\n <tr>\n {isSelectable && (\n <th\n aria-label=\"Select column\"\n className={cn(headerVariants({ size }))}\n >\n <SelectAllCheckbox\n onCheckedChange={onSelectAll}\n rows={rows}\n selectedIds={selectedIds}\n />\n </th>\n )}\n {headers.map((headerProps, index) => {\n const headerLabel =\n typeof headerProps.label === 'string'\n ? headerProps.label\n : `__index_${index}`;\n const nextHeader = headers[index + 1];\n const nextHeaderLabel =\n typeof nextHeader?.label === 'string'\n ? nextHeader.label\n : `__index_${index + 1}`;\n return (\n <TableHeader\n key={`table-header-${index}`}\n onSort={onSort?.(headerProps, index)}\n size={size}\n resizable={resizableColumns}\n showResizer={resizableColumns && index < headers.length - 1}\n onResizeStart={onResizeStart?.(index)}\n onKeyboardResize={onKeyboardResize?.(index)}\n columnWidth={columnWidths?.get(headerLabel)}\n nextColumnWidth={\n nextHeader ? columnWidths?.get(nextHeaderLabel) : undefined\n }\n {...headerProps}\n />\n );\n })}\n {actionsList.length > 0 && (\n <th\n aria-label=\"Actions\"\n className={cn(headerVariants({ size }))}\n />\n )}\n </tr>\n </thead>\n );\n};\n\ninterface ColgroupProps {\n headers: TableColumnConfigProps[];\n isSelectable?: boolean;\n actionsList: string[];\n resizableColumns?: boolean;\n columnWidths?: Map<string, number> | null;\n}\n\nconst Colgroup = ({\n headers,\n isSelectable,\n actionsList,\n resizableColumns,\n columnWidths,\n}: ColgroupProps) => (\n <colgroup className={cn(styles.table__colgroup)}>\n {isSelectable && <col width={48} />}\n {headers.map((headerProps, index) => {\n const headerLabel =\n typeof headerProps.label === 'string' ? headerProps.label : `__index_${index}`;\n const widthFromMap = columnWidths?.get(headerLabel);\n return (\n <col\n key={`header-col-${index}`}\n width={\n resizableColumns && widthFromMap && index < headers.length - 1\n ? `${widthFromMap}px`\n : headerProps.width\n }\n />\n );\n })}\n {actionsList.length > 0 && <col width={(actionsList.length + 1) * 32 + 10} />}\n </colgroup>\n);\n\nconst rowVariants = cva(styles.table__row, {\n variants: {\n isSelectable: {\n true: styles.table__row_selectable,\n false: '',\n },\n isActive: {\n true: styles.table__row_active,\n false: '',\n },\n isDisabled: {\n true: styles.table__row_disabled,\n false: '',\n },\n showActions: {\n true: styles['table__row_show-actions'],\n false: '',\n },\n },\n defaultVariants: {\n isSelectable: false,\n isActive: false,\n isDisabled: false,\n showActions: false,\n },\n});\n\nconst cellVariants = cva(styles.table__data, {\n variants: {\n size: {\n sm: styles.table__data_size_sm,\n md: styles.table__data_size_md,\n },\n },\n});\n\nconst selectDataVariants = cva(styles['table__select-data'], {\n variants: {\n size: {\n sm: styles['table__select-data_size_sm'],\n md: styles['table__select-data_size_md'],\n },\n },\n});\n\nconst actionsCellVariants = cva(styles['table__actions-cell'], {\n variants: {\n size: {\n sm: styles['table__actions-cell_size_sm'],\n md: styles['table__actions-cell_size_md'],\n },\n },\n});\n\ninterface TableCellType extends HTMLAttributes<HTMLTableCellElement> {\n label: ReactNode;\n overflowMode?: OverflowMode;\n}\nexport interface TableRowType extends Omit<\n HTMLAttributes<HTMLTableRowElement>,\n 'onSelect' | 'id'\n> {\n id: string | number;\n items: TableCellType[];\n isDisabled?: boolean;\n isDeleted?: boolean;\n isActive?: boolean;\n /** only works with <Table isSelectable={true} /> */\n isIndeterminate?: boolean;\n}\n\nexport type MobileLayoutProp = 'list' | 'scroll';\n\ninterface CommonTableProps extends Omit<\n HTMLAttributes<HTMLTableElement>,\n 'children' | 'onSelect'\n> {\n headers: TableColumnConfigProps[];\n rows: TableRowType[];\n onDelete?: (item: TableRowType, index: number) => void;\n onEdit?: (item: TableRowType, index: number) => void;\n onSort?: SortFn;\n loading?: boolean;\n noDataMessage?: ReactNode;\n size?: TableSize;\n showHeader?: boolean;\n rowHeight?: string;\n resizableColumns?: boolean;\n mobileLayout?: MobileLayoutProp;\n}\n\ntype SelectReturnValue = {\n index: number;\n item: TableRowType;\n};\n\ninterface SelectionType {\n isSelectable?: boolean;\n selectedIds?: (number | string)[];\n onSelect?: (selectedValues: SelectReturnValue[]) => void;\n}\n\ninterface NoSelectionType {\n isSelectable?: never;\n selectedIds?: never;\n onSelect?: never;\n}\n\nexport type TableProps = CommonTableProps & (SelectionType | NoSelectionType);\n\ninterface TableBodyRowProps extends Omit<TableRowType, 'id'> {\n headers: TableColumnConfigProps[];\n onSelect: (checked: boolean) => void;\n isSelectable?: boolean;\n isSelected: boolean;\n onDelete?: () => void;\n onEdit?: () => void;\n actionsList: string[];\n size: TableSize;\n rowHeight?: string;\n}\n\nconst TableBodyRow = ({\n headers,\n items,\n onSelect,\n isSelectable,\n isSelected,\n isIndeterminate,\n onDelete,\n onEdit,\n isDeleted,\n isActive,\n isDisabled,\n size,\n actionsList,\n rowHeight,\n className,\n style,\n ...rowProps\n}: TableBodyRowProps) => {\n const isDeletable = typeof onDelete === 'function';\n const isEditable = typeof onEdit === 'function';\n const rowStyle = useMemo(\n () =>\n ({\n ...(rowHeight ? { '--table-row-height': rowHeight } : {}),\n ...style,\n }) as CSSProperties,\n [rowHeight, style]\n );\n return (\n <tr\n style={rowStyle}\n {...rowProps}\n className={cn(\n rowVariants({\n isSelectable,\n isActive,\n isDisabled: isDeleted || isDisabled,\n showActions: isDeletable || isEditable,\n }),\n className\n )}\n >\n {isSelectable && (\n <td className={cn(selectDataVariants({ size }))}>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : isSelected}\n onCheckedChange={onSelect}\n disabled={isDisabled || isDeleted}\n />\n </td>\n )}\n {items.map(\n ({ label, overflowMode, className: cellClassName, ...cellProps }, cellIndex) => (\n <td\n key={`table-cell-${cellIndex}`}\n {...cellProps}\n className={cn(cellVariants({ size }), cellClassName)}\n >\n {headers[cellIndex] && (\n <div className={cn(styles['table__mobile-header'])}>\n {headers[cellIndex].label}\n </div>\n )}\n <Cell\n label={label}\n overflowMode={overflowMode ?? headers[cellIndex]?.overflowMode}\n />\n </td>\n )\n )}\n {actionsList.length > 0 && (\n <td className={cn(actionsCellVariants({ size }))}>\n <div className={cn(styles.table__actions)}>\n {actionsList.includes('editAction') && (\n <IconButton\n type=\"ghost\"\n htmlType=\"button\"\n disabled={isDisabled || isDeleted || !isEditable}\n icon=\"pencil\"\n onClick={onEdit}\n data-testid=\"table-row-edit\"\n className={cn(styles['table__edit-button'])}\n />\n )}\n {actionsList.includes('deleteAction') && (\n <IconButton\n disabled={isDisabled || !isDeletable}\n type=\"ghost\"\n htmlType=\"button\"\n icon=\"cross\"\n onClick={onDelete}\n data-testid=\"table-row-delete\"\n className={cn(\n styles['table__close-button'],\n isDeleted && styles['table__close-button_deleted']\n )}\n />\n )}\n </div>\n </td>\n )}\n </tr>\n );\n};\n\nconst LoadingData = () => {\n return (\n <>\n <Icon\n name=\"loading-animated\"\n size=\"sm\"\n />\n <Text size=\"sm\">Loading data</Text>\n </>\n );\n};\ninterface CustomTableRowProps {\n loading?: boolean;\n noDataMessage?: ReactNode;\n colSpan: number;\n size: TableSize;\n}\nconst CustomTableRow = ({\n loading,\n noDataMessage,\n colSpan,\n size,\n}: CustomTableRowProps) => {\n return (\n <tr className={cn(rowVariants({}))}>\n <td\n colSpan={colSpan}\n className={cn(cellVariants({ size }), styles['table__spanned-data'])}\n >\n <div className={cn(styles['table__custom-message'])}>\n {loading ? <LoadingData /> : (noDataMessage ?? 'No Data available')}\n </div>\n </td>\n </tr>\n );\n};\ninterface ResizeState {\n isResizing: boolean;\n columnLabel: string | null;\n nextColumnLabel: string | null;\n startX: number;\n startWidth: number;\n nextStartWidth: number;\n}\n\nconst Table = forwardRef<HTMLTableElement, TableProps>(\n (\n {\n headers,\n rows,\n isSelectable,\n selectedIds = [],\n onSelect,\n onDelete,\n onEdit,\n onSort,\n loading,\n noDataMessage,\n size = 'sm',\n showHeader = true,\n rowHeight,\n resizableColumns,\n mobileLayout = 'list',\n className,\n ...props\n },\n ref\n ) => {\n const isDeletable = typeof onDelete === 'function';\n const isEditable = typeof onEdit === 'function';\n\n const [columnWidths, setColumnWidths] = useState<Map<string, number> | null>(null);\n const theadRef = useRef<HTMLTableSectionElement>(null);\n\n useLayoutEffect(() => {\n if (!resizableColumns || columnWidths !== null || !theadRef.current) {\n return;\n }\n\n const headerCells = theadRef.current.querySelectorAll('th');\n const widths = new Map<string, number>();\n\n // Skip select column (index 0 if isSelectable) and actions column (last if present)\n const startIndex = isSelectable ? 1 : 0;\n const endIndex = headerCells.length - (isDeletable || isEditable ? 1 : 0);\n\n let headerIndex = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const header = headers[headerIndex];\n if (header) {\n const key =\n typeof header.label === 'string' ? header.label : `__index_${headerIndex}`;\n widths.set(key, headerCells[i].getBoundingClientRect().width);\n }\n headerIndex++;\n }\n\n if (widths.size === headers.length) {\n setColumnWidths(widths);\n }\n }, [resizableColumns, columnWidths, isSelectable, isDeletable, isEditable]);\n\n const headerKey = useMemo(\n () =>\n headers\n .map((h, i) => (typeof h.label === 'string' ? h.label : `__index_${i}`))\n .join(','),\n [headers]\n );\n useEffect(() => {\n setColumnWidths(null);\n }, [headerKey]);\n\n const resizeStateRef = useRef<ResizeState>({\n isResizing: false,\n columnLabel: null,\n nextColumnLabel: null,\n startX: 0,\n startWidth: 0,\n nextStartWidth: 0,\n });\n\n const onMouseMove = useCallback((e: globalThis.MouseEvent) => {\n if (!resizeStateRef.current.isResizing) {\n return;\n }\n\n const { columnLabel, nextColumnLabel, startX, startWidth, nextStartWidth } =\n resizeStateRef.current;\n\n if (!columnLabel || !nextColumnLabel) {\n return;\n }\n\n const diff = e.clientX - startX;\n const newWidth = startWidth + diff;\n const newNextWidth = nextStartWidth - diff;\n\n if (Number.isNaN(newWidth) || Number.isNaN(newNextWidth)) {\n console.warn('Unexpected computed values for resize width', {\n newWidth,\n newNextWidth,\n });\n return;\n }\n\n if (newWidth >= MIN_COLUMN_WIDTH && newNextWidth >= MIN_COLUMN_WIDTH) {\n setColumnWidths(prev => {\n if (!prev) {\n return prev;\n }\n const updated = new Map(prev);\n updated.set(columnLabel, newWidth);\n updated.set(nextColumnLabel, newNextWidth);\n return updated;\n });\n }\n }, []);\n\n const onMouseUp = useCallback(() => {\n resizeStateRef.current.isResizing = false;\n }, []);\n\n useEffect(() => {\n if (!resizableColumns) {\n return;\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, [resizableColumns, onMouseMove, onMouseUp]);\n\n const handleResizeStart = useCallback(\n (columnIndex: number) => (e: MouseEvent) => {\n e.preventDefault();\n\n if (!columnWidths) {\n return;\n }\n\n const currentHeader = headers[columnIndex];\n const nextHeader = headers[columnIndex + 1];\n\n if (!currentHeader || !nextHeader) {\n return;\n }\n\n const currentLabel =\n typeof currentHeader.label === 'string'\n ? currentHeader.label\n : `__index_${columnIndex}`;\n const nextLabel =\n typeof nextHeader.label === 'string'\n ? nextHeader.label\n : `__index_${columnIndex + 1}`;\n\n const startWidth = columnWidths.get(currentLabel);\n const nextStartWidth = columnWidths.get(nextLabel);\n\n if (startWidth === undefined || nextStartWidth === undefined) {\n return;\n }\n\n resizeStateRef.current = {\n isResizing: true,\n columnLabel: currentLabel,\n nextColumnLabel: nextLabel,\n startX: e.clientX,\n startWidth,\n nextStartWidth,\n };\n },\n [headers, columnWidths]\n );\n\n const onRowSelect =\n (id: number | string) =>\n (checked: boolean): void => {\n if (typeof onSelect == 'function') {\n const selectedItems = rows.flatMap((row, index) => {\n if (\n (id === row.id && checked) ||\n (selectedIds.includes(row.id) && id !== row.id)\n ) {\n return {\n item: row,\n index,\n };\n }\n\n return [];\n });\n onSelect(selectedItems);\n }\n };\n const hasRows = rows.length > 0;\n const actionsList: string[] = [];\n if (isDeletable) {\n actionsList.push('deleteAction');\n }\n if (isEditable) {\n actionsList.push('editAction');\n }\n\n const onKeyboardResize = useCallback(\n (columnIndex: number) =>\n (_e: React.KeyboardEvent, direction: OnKeyboardResizerDirection) => {\n if (!columnWidths) {\n return;\n }\n\n const currentHeader = headers[columnIndex];\n const nextHeader = headers[columnIndex + 1];\n\n if (!currentHeader || !nextHeader) {\n return;\n }\n\n const currentLabel =\n typeof currentHeader.label === 'string'\n ? currentHeader.label\n : `__index_${columnIndex}`;\n const nextLabel =\n typeof nextHeader.label === 'string'\n ? nextHeader.label\n : `__index_${columnIndex + 1}`;\n\n const increment = 2;\n const multiplier = direction === 'right' ? 1 : -1;\n const diff = increment * multiplier;\n\n const currentWidth = columnWidths.get(currentLabel);\n const nextWidth = columnWidths.get(nextLabel);\n\n if (currentWidth === undefined || nextWidth === undefined) {\n return;\n }\n\n const newWidth = currentWidth + diff;\n const newNextWidth = nextWidth - diff;\n const shouldUpdateColumnWidth =\n newWidth >= MIN_COLUMN_WIDTH && newNextWidth >= MIN_COLUMN_WIDTH;\n\n if (!shouldUpdateColumnWidth) {\n return;\n }\n\n setColumnWidths(prev => {\n if (!prev) {\n return prev;\n }\n const updated = new Map(prev);\n updated.set(currentLabel, newWidth);\n updated.set(nextLabel, newNextWidth);\n return updated;\n });\n },\n [columnWidths, headers]\n );\n\n return (\n <div\n data-mobile-layout={mobileLayout}\n className={cn(styles.table)}\n >\n {hasRows && showHeader && (\n <div className={cn(styles['table__mobile-actions'])}>\n {isSelectable && (\n <SelectAllCheckbox\n label=\"Select All\"\n onCheckedChange={onSelect}\n rows={rows}\n selectedIds={selectedIds}\n />\n )}\n </div>\n )}\n <div className={cn(styles.table__wrapper)}>\n <table\n ref={ref}\n {...props}\n className={cn(styles['table__table'], className)}\n >\n <Colgroup\n headers={headers}\n isSelectable={isSelectable}\n actionsList={actionsList}\n resizableColumns={resizableColumns}\n columnWidths={resizableColumns ? columnWidths : undefined}\n />\n {showHeader && (\n <Thead\n headers={headers}\n isSelectable={isSelectable}\n onSelectAll={onSelect}\n actionsList={actionsList}\n onSort={onSort}\n size={size}\n rows={rows}\n selectedIds={selectedIds}\n resizableColumns={resizableColumns}\n onResizeStart={resizableColumns ? handleResizeStart : undefined}\n theadRef={theadRef}\n onKeyboardResize={resizableColumns ? onKeyboardResize : undefined}\n columnWidths={resizableColumns ? columnWidths : undefined}\n />\n )}\n <tbody className={cn(styles.table__tbody)}>\n {(loading || !hasRows) && (\n <CustomTableRow\n colSpan={\n headers.length +\n (isEditable || isDeletable ? 1 : 0) +\n (isSelectable ? 1 : 0)\n }\n loading={loading}\n noDataMessage={noDataMessage}\n size={size}\n />\n )}\n {rows.map(({ id, ...rowProps }, rowIndex) => (\n <TableBodyRow\n key={`table-body-row-${rowIndex}`}\n headers={headers}\n isSelectable={isSelectable}\n isSelected={selectedIds?.includes(id)}\n onSelect={onRowSelect(id)}\n actionsList={actionsList}\n onDelete={\n isDeletable\n ? () =>\n onDelete(\n { id, ...rowProps, isDeleted: !rowProps.isDeleted },\n rowIndex\n )\n : undefined\n }\n onEdit={\n isEditable ? () => onEdit({ id, ...rowProps }, rowIndex) : undefined\n }\n size={size}\n rowHeight={rowHeight}\n {...rowProps}\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n);\n\ninterface SelectAllCheckboxProps extends Omit<CheckboxProps, 'onCheckedChange'> {\n onCheckedChange?: (selectedValues: SelectReturnValue[]) => void;\n selectedIds: (number | string)[];\n rows: TableRowType[];\n}\n\nconst SelectAllCheckbox: FC<SelectAllCheckboxProps> = ({\n rows,\n selectedIds,\n onCheckedChange,\n ...checkboxProps\n}) => {\n const selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n const { checked, disabled } = useMemo(() => {\n let areAllChecked = true;\n let maybeIndeterminate: CheckedState = false;\n let disabled = true;\n\n for (const row of rows) {\n if (row.isDisabled || row.isDeleted) {\n continue;\n } else {\n disabled = false;\n }\n\n if (selectedIdSet.has(row.id)) {\n maybeIndeterminate = 'indeterminate';\n } else {\n areAllChecked = false;\n }\n }\n\n return {\n checked: disabled ? false : areAllChecked || maybeIndeterminate,\n disabled,\n };\n }, [rows, selectedIdSet]);\n\n const handleCheckedChange = (checked: boolean) => {\n if (typeof onCheckedChange !== 'function') {\n return;\n }\n\n // disabled items should not change their selected state because of user interaction\n\n const newSelectedRows = rows.reduce((acc: SelectReturnValue[], row, index) => {\n const isDisabled = row.isDisabled || row.isDeleted;\n\n const shouldBeSelected = checked\n ? !isDisabled || selectedIdSet.has(row.id)\n : isDisabled && selectedIdSet.has(row.id);\n\n if (shouldBeSelected) {\n acc.push({\n item: row,\n index,\n });\n }\n\n return acc;\n }, []);\n\n onCheckedChange(newSelectedRows);\n };\n\n return (\n <Checkbox\n checked={checked}\n disabled={disabled}\n onCheckedChange={handleCheckedChange}\n {...checkboxProps}\n />\n );\n};\n\nconst Cell = ({\n label,\n overflowMode = 'truncated',\n}: {\n label: ReactNode;\n overflowMode?: OverflowMode;\n}) => {\n const isText = typeof label === 'string';\n\n if (!isText) {\n return <>{label}</>;\n }\n\n if (overflowMode === 'truncate-middle') {\n return <MiddleTruncator text={label} />;\n }\n\n if (overflowMode === 'wrap') {\n return <span className={cn(styles['table__text-wrapped'])}>{label}</span>;\n }\n\n return <EllipsisContent component=\"div\">{label}</EllipsisContent>;\n};\n\nexport { Table };\n"],"names":["cva","styles","useRef","cn","jsxs","Fragment","jsx","Icon","useMemo","Checkbox","IconButton","Text","forwardRef","useState","useLayoutEffect","useEffect","useCallback","disabled","checked","MiddleTruncator","EllipsisContent"],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
|
|
6
6
|
const jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
const RadixTooltip = require('@radix-ui/react-tooltip');
|
|
8
|
+
const reactSlot = require('@radix-ui/react-slot');
|
|
9
|
+
const react = require('react');
|
|
8
10
|
const cva = require('../../lib/cva.cjs');
|
|
9
11
|
const PortalContext = require('../../providers/PortalContext.cjs');
|
|
10
12
|
const Tooltip_module = require('./Tooltip.module.css.cjs');
|
|
@@ -39,9 +41,18 @@ const Tooltip = ({ children, open, disabled, ...props }) => {
|
|
|
39
41
|
}
|
|
40
42
|
);
|
|
41
43
|
};
|
|
42
|
-
const TooltipTrigger = (
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
const TooltipTrigger = react.forwardRef(
|
|
45
|
+
({ asChild, children, ...props }, ref) => {
|
|
46
|
+
return /* @__PURE__ */ jsxRuntime.jsx(RadixTooltip__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
47
|
+
reactSlot.Slot,
|
|
48
|
+
{
|
|
49
|
+
ref,
|
|
50
|
+
...props,
|
|
51
|
+
children: asChild ? children : /* @__PURE__ */ jsxRuntime.jsx("div", { children })
|
|
52
|
+
}
|
|
53
|
+
) });
|
|
54
|
+
}
|
|
55
|
+
);
|
|
45
56
|
TooltipTrigger.displayName = "TooltipTrigger";
|
|
46
57
|
Tooltip.Trigger = TooltipTrigger;
|
|
47
58
|
const TooltipContent = ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { CSSProperties } from 'react';\nimport { cn } from '@/lib/cva';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport { TooltipContentProps, TooltipProps, TooltipTriggerProps } from './Tooltip.types';\nimport styles from './Tooltip.module.css';\n\nexport const Tooltip = ({ children, open, disabled, ...props }: TooltipProps) => {\n return (\n <RadixTooltip.Root\n open={disabled ? false : open}\n {...props}\n >\n {children}\n </RadixTooltip.Root>\n );\n};\n\nconst TooltipTrigger = ({ asChild, children, ...props }
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { Slot } from '@radix-ui/react-slot';\nimport { CSSProperties, forwardRef } from 'react';\nimport { cn } from '@/lib/cva';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport { TooltipContentProps, TooltipProps, TooltipTriggerProps } from './Tooltip.types';\nimport styles from './Tooltip.module.css';\n\nexport const Tooltip = ({ children, open, disabled, ...props }: TooltipProps) => {\n return (\n <RadixTooltip.Root\n open={disabled ? false : open}\n {...props}\n >\n {children}\n </RadixTooltip.Root>\n );\n};\n\nconst TooltipTrigger = forwardRef<HTMLElement, TooltipTriggerProps>(\n ({ asChild, children, ...props }, ref) => {\n return (\n <RadixTooltip.Trigger asChild>\n <Slot\n ref={ref}\n {...props}\n >\n {asChild ? children : <div>{children}</div>}\n </Slot>\n </RadixTooltip.Trigger>\n );\n }\n);\nTooltipTrigger.displayName = 'TooltipTrigger';\nTooltip.Trigger = TooltipTrigger;\n\nconst TooltipContent = ({\n showArrow,\n children,\n sideOffset = 6,\n maxWidth,\n className,\n style,\n container,\n ...props\n}: TooltipContentProps) => {\n const portalContainer = useResolvedPortalContainer(container);\n\n return (\n <RadixTooltip.Portal container={portalContainer}>\n <RadixTooltip.Content\n sideOffset={sideOffset}\n style={\n {\n ...(maxWidth ? { '--tooltip-max-width': maxWidth } : {}),\n ...style,\n } as CSSProperties\n }\n {...props}\n className={cn(styles.content, className)}\n >\n {showArrow && (\n <RadixTooltip.Arrow\n className={styles.arrow}\n width={20}\n height={8}\n />\n )}\n {children}\n </RadixTooltip.Content>\n </RadixTooltip.Portal>\n );\n};\nTooltipContent.displayName = 'TooltipContent';\nTooltip.Content = TooltipContent;\n"],"names":["jsx","RadixTooltip","forwardRef","Slot","useResolvedPortalContainer","jsxs","cn","styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,OAAA,GAAU,CAAC,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,GAAG,OAAM,KAAoB;AAC/E,EAAA,uBACEA,cAAA;AAAA,IAACC,uBAAA,CAAa,IAAA;AAAA,IAAb;AAAA,MACC,IAAA,EAAM,WAAW,KAAA,GAAQ,IAAA;AAAA,MACxB,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEA,MAAM,cAAA,GAAiBC,gBAAA;AAAA,EACrB,CAAC,EAAE,OAAA,EAAS,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACxC,IAAA,uBACEF,cAAA,CAACC,uBAAA,CAAa,OAAA,EAAb,EAAqB,SAAO,IAAA,EAC3B,QAAA,kBAAAD,cAAA;AAAA,MAACG,cAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,OAAA,GAAU,QAAA,mBAAWH,cAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAS;AAAA;AAAA,KACvC,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,OAAA,CAAQ,OAAA,GAAU,cAAA;AAElB,MAAM,iBAAiB,CAAC;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA2B;AACzB,EAAA,MAAM,eAAA,GAAkBI,yCAA2B,SAAS,CAAA;AAE5D,EAAA,uBACEJ,cAAA,CAACC,uBAAA,CAAa,MAAA,EAAb,EAAoB,WAAW,eAAA,EAC9B,QAAA,kBAAAI,eAAA;AAAA,IAACJ,uBAAA,CAAa,OAAA;AAAA,IAAb;AAAA,MACC,UAAA;AAAA,MACA,KAAA,EACE;AAAA,QACE,GAAI,QAAA,GAAW,EAAE,qBAAA,EAAuB,QAAA,KAAa,EAAC;AAAA,QACtD,GAAG;AAAA,OACL;AAAA,MAED,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWK,MAAA,CAAGC,sBAAA,CAAO,OAAA,EAAS,SAAS,CAAA;AAAA,MAEtC,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCP,cAAA;AAAA,UAACC,uBAAA,CAAa,KAAA;AAAA,UAAb;AAAA,YACC,WAAWM,sBAAA,CAAO,KAAA;AAAA,YAClB,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AAAA,SACV;AAAA,QAED;AAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,OAAA,CAAQ,OAAA,GAAU,cAAA;;"}
|