@aivenio/aquarium 4.0.1 → 4.1.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/atoms.cjs +324 -167
- package/dist/atoms.mjs +331 -166
- package/dist/src/atoms/DropdownMenu/DropdownMenu.d.ts +149 -28
- package/dist/src/atoms/DropdownMenu/DropdownMenu.js +60 -32
- package/dist/src/atoms/Filter/Filter.d.ts +39 -0
- package/dist/src/atoms/Filter/Filter.js +127 -0
- package/dist/src/atoms/index.d.ts +1 -0
- package/dist/src/atoms/index.js +2 -1
- package/dist/src/atoms/utils/index.d.ts +2 -2
- package/dist/src/atoms/utils/index.js +2 -2
- package/dist/src/molecules/Card/Card.d.ts +7 -3
- package/dist/src/molecules/Card/Card.js +6 -5
- package/dist/src/molecules/DataList/DataList.js +16 -3
- package/dist/src/molecules/DataList/DataListGroup.js +16 -3
- package/dist/src/molecules/DropdownMenu/DropdownMenu.d.ts +14 -14
- package/dist/src/molecules/DropdownMenu/DropdownMenu.js +46 -171
- package/dist/src/molecules/DropdownMenu/SearchField.d.ts +5 -0
- package/dist/src/molecules/DropdownMenu/SearchField.js +13 -0
- package/dist/src/molecules/Popover/Popover.js +2 -1
- package/dist/styles.css +62 -9
- package/dist/system.cjs +763 -922
- package/dist/system.mjs +675 -819
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/types/tailwindGenerated.d.ts +1 -1
- package/package.json +1 -1
@@ -1,43 +1,164 @@
|
|
1
1
|
import React, { type DOMAttributes } from 'react';
|
2
|
+
import { type MenuItemProps as AriaMenuItemProps, type MenuProps as AriaMenuProps, type MenuSectionProps as AriaMenuSectionProps } from 'react-aria-components';
|
2
3
|
import type { Icon } from '../../../types/IconProps';
|
3
4
|
type DivAttributes = React.HTMLAttributes<HTMLDivElement>;
|
4
|
-
|
5
|
+
export declare const dropdownMenuStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, "bg-popover-content w-full flex flex-col overflow-x-hidden typography-small text-default", import("tailwind-variants/dist/config").TVConfig<unknown, {} | {}>, {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, "bg-popover-content w-full flex flex-col overflow-x-hidden typography-small text-default", import("tailwind-variants/dist/config").TVConfig<unknown, {} | {}>, unknown, unknown, undefined>>;
|
6
|
+
type DropdownMenuProps<T extends object> = Omit<AriaMenuProps<T>, 'className'> & {
|
7
|
+
className?: string;
|
5
8
|
minHeight?: React.CSSProperties['minHeight'];
|
6
9
|
maxHeight?: React.CSSProperties['maxHeight'];
|
7
10
|
minWidth?: React.CSSProperties['minWidth'];
|
8
11
|
maxWidth?: React.CSSProperties['maxWidth'];
|
9
12
|
};
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
EmptyStateContainer:
|
13
|
+
export declare const DropdownMenu: {
|
14
|
+
<T extends object>({ minHeight, maxHeight, minWidth, maxWidth, className, children, ...props }: DropdownMenuProps<T>): React.JSX.Element;
|
15
|
+
ContentContainer: React.FC<{
|
16
|
+
children?: React.ReactNode | undefined;
|
17
|
+
}>;
|
18
|
+
Group: ({ className, title, titleProps, children, ...props }: GroupProps) => React.JSX.Element;
|
19
|
+
Item: ({ kind, className, icon, description, showNotification, disabled, ...props }: MenuItemProps) => React.JSX.Element;
|
20
|
+
EmptyStateContainer: React.FC<DivAttributes>;
|
18
21
|
};
|
19
|
-
export declare const
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
export declare const dropdownMenuGroupStyles: import("tailwind-variants").TVReturnType<{
|
23
|
+
[key: string]: {
|
24
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
25
|
+
base?: import("tailwind-merge").ClassNameValue;
|
26
|
+
title?: import("tailwind-merge").ClassNameValue;
|
27
|
+
};
|
28
|
+
};
|
29
|
+
} | {
|
30
|
+
[x: string]: {
|
31
|
+
[x: string]: import("tailwind-merge").ClassNameValue | {
|
32
|
+
base?: import("tailwind-merge").ClassNameValue;
|
33
|
+
title?: import("tailwind-merge").ClassNameValue;
|
34
|
+
};
|
35
|
+
};
|
36
|
+
} | {}, {
|
37
|
+
base: string[];
|
38
|
+
title: string;
|
39
|
+
}, undefined, import("tailwind-variants/dist/config").TVConfig<unknown, {
|
40
|
+
[key: string]: {
|
41
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
42
|
+
base?: import("tailwind-merge").ClassNameValue;
|
43
|
+
title?: import("tailwind-merge").ClassNameValue;
|
44
|
+
};
|
45
|
+
};
|
46
|
+
} | {}>, {
|
47
|
+
[key: string]: {
|
48
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
49
|
+
base?: import("tailwind-merge").ClassNameValue;
|
50
|
+
title?: import("tailwind-merge").ClassNameValue;
|
51
|
+
};
|
52
|
+
};
|
53
|
+
} | {}, {
|
54
|
+
base: string[];
|
55
|
+
title: string;
|
56
|
+
}, import("tailwind-variants").TVReturnType<unknown, {
|
57
|
+
base: string[];
|
58
|
+
title: string;
|
59
|
+
}, undefined, import("tailwind-variants/dist/config").TVConfig<unknown, {
|
60
|
+
[key: string]: {
|
61
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
62
|
+
base?: import("tailwind-merge").ClassNameValue;
|
63
|
+
title?: import("tailwind-merge").ClassNameValue;
|
64
|
+
};
|
65
|
+
};
|
66
|
+
} | {}>, unknown, unknown, undefined>>;
|
67
|
+
type GroupProps = Omit<AriaMenuSectionProps<object>, 'items'> & {
|
68
|
+
title?: React.ReactNode;
|
24
69
|
titleProps?: DOMAttributes<HTMLElement>;
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
70
|
+
};
|
71
|
+
export declare const dropdownMenuItemStyles: import("tailwind-variants").TVReturnType<{
|
72
|
+
isDisabled: {
|
73
|
+
true: string;
|
74
|
+
};
|
75
|
+
isFocused: {
|
76
|
+
true: string;
|
77
|
+
};
|
78
|
+
kind: {
|
79
|
+
action: string;
|
80
|
+
danger: string;
|
81
|
+
default: string;
|
82
|
+
};
|
83
|
+
}, undefined, "group flex items-center gap-x-3 p-3 outline-none cursor-pointer", import("tailwind-variants/dist/config").TVConfig<{
|
84
|
+
isDisabled: {
|
85
|
+
true: string;
|
86
|
+
};
|
87
|
+
isFocused: {
|
88
|
+
true: string;
|
89
|
+
};
|
90
|
+
kind: {
|
91
|
+
action: string;
|
92
|
+
danger: string;
|
93
|
+
default: string;
|
94
|
+
};
|
95
|
+
}, {
|
96
|
+
isDisabled: {
|
97
|
+
true: string;
|
98
|
+
};
|
99
|
+
isFocused: {
|
100
|
+
true: string;
|
101
|
+
};
|
102
|
+
kind: {
|
103
|
+
action: string;
|
104
|
+
danger: string;
|
105
|
+
default: string;
|
106
|
+
};
|
107
|
+
}>, {
|
108
|
+
isDisabled: {
|
109
|
+
true: string;
|
110
|
+
};
|
111
|
+
isFocused: {
|
112
|
+
true: string;
|
113
|
+
};
|
114
|
+
kind: {
|
115
|
+
action: string;
|
116
|
+
danger: string;
|
117
|
+
default: string;
|
118
|
+
};
|
119
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
120
|
+
isDisabled: {
|
121
|
+
true: string;
|
122
|
+
};
|
123
|
+
isFocused: {
|
124
|
+
true: string;
|
125
|
+
};
|
126
|
+
kind: {
|
127
|
+
action: string;
|
128
|
+
danger: string;
|
129
|
+
default: string;
|
130
|
+
};
|
131
|
+
}, undefined, "group flex items-center gap-x-3 p-3 outline-none cursor-pointer", import("tailwind-variants/dist/config").TVConfig<{
|
132
|
+
isDisabled: {
|
133
|
+
true: string;
|
134
|
+
};
|
135
|
+
isFocused: {
|
136
|
+
true: string;
|
137
|
+
};
|
138
|
+
kind: {
|
139
|
+
action: string;
|
140
|
+
danger: string;
|
141
|
+
default: string;
|
142
|
+
};
|
143
|
+
}, {
|
144
|
+
isDisabled: {
|
145
|
+
true: string;
|
146
|
+
};
|
147
|
+
isFocused: {
|
148
|
+
true: string;
|
149
|
+
};
|
150
|
+
kind: {
|
151
|
+
action: string;
|
152
|
+
danger: string;
|
153
|
+
default: string;
|
154
|
+
};
|
155
|
+
}>, unknown, unknown, undefined>>;
|
156
|
+
type MenuItemProps = Omit<AriaMenuItemProps, 'className'> & {
|
157
|
+
kind?: 'action' | 'danger' | 'default';
|
158
|
+
className?: string;
|
159
|
+
description?: React.ReactNode;
|
31
160
|
disabled?: boolean;
|
32
161
|
icon?: Icon;
|
33
162
|
showNotification?: boolean;
|
34
|
-
} & React.RefAttributes<HTMLLIElement>>;
|
35
|
-
type MenuItemDescription = DivAttributes & {
|
36
|
-
disabled?: boolean;
|
37
|
-
children: React.ReactNode;
|
38
163
|
};
|
39
|
-
declare const Description: React.FC<MenuItemDescription>;
|
40
|
-
type MenuSeparatorProps = React.HTMLAttributes<HTMLLIElement>;
|
41
|
-
declare const Separator: React.FC<MenuSeparatorProps>;
|
42
|
-
declare const EmptyStateContainer: React.FC<DivAttributes>;
|
43
164
|
export {};
|
@@ -10,55 +10,83 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
10
10
|
return t;
|
11
11
|
};
|
12
12
|
import React from 'react';
|
13
|
+
import { Collection as AriaCollection, composeRenderProps, Header as AriaHeader, Menu as AriaMenu, MenuItem as AriaMenuItem, MenuSection as AriaMenuSection, } from 'react-aria-components';
|
14
|
+
import { tv } from 'tailwind-variants';
|
13
15
|
import { Badge } from '../../../src/molecules/Badge/Badge';
|
14
16
|
import { InlineIcon } from '../../../src/molecules/Icon/Icon';
|
15
17
|
import { Typography } from '../../../src/molecules/Typography/Typography';
|
16
18
|
import { classNames, tw } from '../../../src/utils/tailwind';
|
17
19
|
import tick from '../../../src/icons/tick';
|
18
|
-
export const
|
19
|
-
|
20
|
-
return (React.createElement("div", Object.assign({ ref: ref, style: { minHeight, maxHeight, minWidth, maxWidth }, className: classNames(className, 'Aquarium-DropdownMenu.Menu bg-popover-content w-full flex flex-col overflow-x-hidden typography-small text-default') }, props), children));
|
20
|
+
export const dropdownMenuStyles = tv({
|
21
|
+
base: 'bg-popover-content w-full flex flex-col overflow-x-hidden typography-small text-default',
|
21
22
|
});
|
23
|
+
// Create the component using forwardRef and cast it to the component type
|
24
|
+
export const DropdownMenu = (_a) => {
|
25
|
+
var { minHeight, maxHeight = '100%', minWidth = '125px', maxWidth, className, children } = _a, props = __rest(_a, ["minHeight", "maxHeight", "minWidth", "maxWidth", "className", "children"]);
|
26
|
+
return (React.createElement(AriaMenu, Object.assign({ style: { minHeight, maxHeight, minWidth, maxWidth }, className: dropdownMenuStyles({ className: ['Aquarium-DropdownMenu', className] }) }, props), children));
|
27
|
+
};
|
22
28
|
const ContentContainer = ({ children }) => (React.createElement("div", { className: tw('p-3 overflow-y-auto overflow-x-hidden') }, children));
|
23
29
|
DropdownMenu.ContentContainer = ContentContainer;
|
24
|
-
const
|
25
|
-
|
26
|
-
|
30
|
+
export const dropdownMenuGroupStyles = tv({
|
31
|
+
slots: {
|
32
|
+
base: [
|
33
|
+
'[&:not(:first-child)]:before:content-[""] [&:not(:first-child)]:before:block',
|
34
|
+
'[&:not(:first-child)]:before:h-[1px] [&:not(:first-child)]:before:bg-default [&:not(:first-child)]:before:m-3',
|
35
|
+
],
|
36
|
+
title: 'p-3 text-inactive uppercase cursor-default typography-caption',
|
37
|
+
},
|
27
38
|
});
|
28
|
-
|
29
|
-
const Group = React.forwardRef((_a, ref) => {
|
39
|
+
const Group = (_a) => {
|
30
40
|
var { className, title, titleProps, children } = _a, props = __rest(_a, ["className", "title", "titleProps", "children"]);
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
const styles = dropdownMenuGroupStyles();
|
42
|
+
return (React.createElement(AriaMenuSection, Object.assign({ className: styles.base({ className: 'Aquarium-DropdownMenu.Group' }) }, props),
|
43
|
+
title && (React.createElement(AriaHeader, Object.assign({ className: styles.title() }, titleProps), title)),
|
44
|
+
React.createElement(AriaCollection, null, children)));
|
45
|
+
};
|
35
46
|
DropdownMenu.Group = Group;
|
36
|
-
const
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
'
|
41
|
-
|
42
|
-
|
43
|
-
'
|
44
|
-
}
|
47
|
+
export const dropdownMenuItemStyles = tv({
|
48
|
+
base: 'group flex items-center gap-x-3 p-3 outline-none cursor-pointer',
|
49
|
+
variants: {
|
50
|
+
isDisabled: {
|
51
|
+
true: 'text-inactive cursor-not-allowed',
|
52
|
+
},
|
53
|
+
isFocused: {
|
54
|
+
true: 'bg-muted',
|
55
|
+
},
|
56
|
+
kind: {
|
57
|
+
action: '',
|
58
|
+
danger: '',
|
59
|
+
default: '',
|
60
|
+
},
|
61
|
+
},
|
62
|
+
compoundVariants: [
|
63
|
+
{
|
64
|
+
kind: 'action',
|
65
|
+
disabled: false,
|
66
|
+
className: 'text-primary-intense',
|
67
|
+
},
|
68
|
+
{
|
69
|
+
kind: 'danger',
|
70
|
+
disabled: false,
|
71
|
+
className: 'text-danger-default',
|
72
|
+
},
|
73
|
+
],
|
74
|
+
});
|
75
|
+
const Item = (_a) => {
|
76
|
+
var { kind = 'default', className, icon, description, showNotification = false, disabled } = _a, props = __rest(_a, ["kind", "className", "icon", "description", "showNotification", "disabled"]);
|
77
|
+
return (React.createElement(AriaMenuItem, Object.assign({ className: (values) => dropdownMenuItemStyles(Object.assign(Object.assign({}, values), { kind, className: ['Aquarium-DropdownMenu.Item', className] })), isDisabled: disabled }, props), composeRenderProps(props.children, (children, { selectionMode, isSelected, isDisabled }) => (React.createElement(React.Fragment, null,
|
45
78
|
icon && showNotification && (React.createElement(Badge.Notification, null,
|
46
79
|
React.createElement(InlineIcon, { icon: icon }))),
|
47
80
|
icon && !showNotification && React.createElement(InlineIcon, { icon: icon }),
|
48
|
-
React.createElement("span", { className: tw('grow') },
|
49
|
-
|
50
|
-
})
|
51
|
-
|
52
|
-
const Description = ({ disabled, children }) => (React.createElement(Typography.Caption, { color: disabled ? 'inactive' : 'muted' }, children));
|
53
|
-
DropdownMenu.Description = Description;
|
54
|
-
const Separator = (_a) => {
|
55
|
-
var { className } = _a, props = __rest(_a, ["className"]);
|
56
|
-
return React.createElement("li", Object.assign({}, props, { className: classNames(className, tw('m-3 block bg-default h-[1px]')) }));
|
81
|
+
React.createElement("span", { className: tw('grow') },
|
82
|
+
children,
|
83
|
+
description && (React.createElement(Typography.Caption, { color: isDisabled ? 'inactive' : 'muted' }, description))),
|
84
|
+
selectionMode !== 'none' && isSelected && React.createElement(InlineIcon, { icon: tick }))))));
|
57
85
|
};
|
58
|
-
DropdownMenu.
|
86
|
+
DropdownMenu.Item = Item;
|
59
87
|
const EmptyStateContainer = (_a) => {
|
60
88
|
var { className, children } = _a, props = __rest(_a, ["className", "children"]);
|
61
89
|
return (React.createElement("div", Object.assign({ className: classNames(tw('border border-dashed border-default p-3'), className) }, props), children));
|
62
90
|
};
|
63
91
|
DropdownMenu.EmptyStateContainer = EmptyStateContainer;
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcGRvd25NZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F0b21zL0Ryb3Bkb3duTWVudS9Ecm9wZG93bk1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUE2QixNQUFNLE9BQU8sQ0FBQztBQUNsRCxPQUFPLEVBQ0wsVUFBVSxJQUFJLGNBQWMsRUFDNUIsa0JBQWtCLEVBQ2xCLE1BQU0sSUFBSSxVQUFVLEVBQ3BCLElBQUksSUFBSSxRQUFRLEVBQ2hCLFFBQVEsSUFBSSxZQUFZLEVBR3hCLFdBQVcsSUFBSSxlQUFlLEdBRS9CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFNbEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ25DLElBQUksRUFBRSx5RkFBeUY7Q0FDaEcsQ0FBQyxDQUFDO0FBVUgsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFtQixFQVF4QixFQUFFLEVBQUU7UUFSb0IsRUFDN0MsU0FBUyxFQUNULFNBQVMsR0FBRyxNQUFNLEVBQ2xCLFFBQVEsR0FBRyxPQUFPLEVBQ2xCLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxPQUVhLEVBRGxCLEtBQUssY0FQcUMsMkVBUTlDLENBRFM7SUFFUixPQUFPLENBQ0wsb0JBQUMsUUFBUSxrQkFDUCxLQUFL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
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { type BadgeProps } from '../../../src/molecules/Badge/Badge';
|
3
|
+
import { type IconProps } from '../../../src/molecules/Icon/Icon';
|
4
|
+
type FilterTriggerProps = {
|
5
|
+
labelText: string;
|
6
|
+
icon: IconProps['icon'];
|
7
|
+
/**
|
8
|
+
* Indicates whether the filter trigger is in an error state.
|
9
|
+
*/
|
10
|
+
error?: boolean;
|
11
|
+
/**
|
12
|
+
* onClear handler triggered when the clear button is clicked.
|
13
|
+
* Should be used to reset the controlled filter value passed in via `value` prop.
|
14
|
+
*/
|
15
|
+
onClear?: () => void;
|
16
|
+
/**
|
17
|
+
* onClick handler triggered when the FilterTrigger is clicked.
|
18
|
+
* Useful when using <FilterTrigger> with controlled components like <Drawer>, <Modal>, or <Dialog>,
|
19
|
+
* allowing the open function to be passed via the onClick prop.
|
20
|
+
*/
|
21
|
+
onClick?: () => void;
|
22
|
+
} & ({
|
23
|
+
/**
|
24
|
+
* The value of the filter trigger, which will be displayed when the filter is applied.
|
25
|
+
*/
|
26
|
+
value?: string | null | undefined;
|
27
|
+
badge?: never;
|
28
|
+
} | {
|
29
|
+
value?: never;
|
30
|
+
/**
|
31
|
+
* Use the `badge` prop when displaying more than 5 filters side by side.
|
32
|
+
* In this case, no value will be displayed within the filter trigger.
|
33
|
+
*/
|
34
|
+
badge?: BadgeProps['value'];
|
35
|
+
});
|
36
|
+
declare const Filter: React.FC & {
|
37
|
+
Trigger: React.FC<FilterTriggerProps>;
|
38
|
+
};
|
39
|
+
export { Filter };
|
@@ -0,0 +1,127 @@
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
2
|
+
var t = {};
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
4
|
+
t[p] = s[p];
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
8
|
+
t[p[i]] = s[p[i]];
|
9
|
+
}
|
10
|
+
return t;
|
11
|
+
};
|
12
|
+
import React from 'react';
|
13
|
+
import { Button as AriaButton, DatePickerStateContext as AriaDatePickerStateContext, DateRangePickerStateContext as AriaDateRangePickerStateContext, Group as AriaGroup, } from 'react-aria-components';
|
14
|
+
import { tv } from 'tailwind-variants';
|
15
|
+
import { Badge } from '../../../src/molecules/Badge/Badge';
|
16
|
+
import { Box } from '../../../src/molecules/Box/Box';
|
17
|
+
import { InlineIcon } from '../../../src/molecules/Icon/Icon';
|
18
|
+
import { Typography } from '../../../src/molecules/Typography/Typography';
|
19
|
+
import { tw } from '../../../src/utils/tailwind';
|
20
|
+
import crossIcon from '../../../src/icons/cross';
|
21
|
+
const DATE_FORMAT_OPTIONS = {
|
22
|
+
locale: 'en-GB',
|
23
|
+
options: { day: 'numeric', month: 'numeric', year: 'numeric' },
|
24
|
+
};
|
25
|
+
const filterWrapper = tv({
|
26
|
+
base: 'rounded-full inline-flex items-center pressed:border-info-default justify-between outline-0 outline-none border border-dashed border-default text-default bg-transparent',
|
27
|
+
variants: {
|
28
|
+
isHovered: {
|
29
|
+
true: 'hover:bg-muted',
|
30
|
+
},
|
31
|
+
isFocusWithin: {
|
32
|
+
true: 'border-solid border-info-default',
|
33
|
+
},
|
34
|
+
isInvalid: {
|
35
|
+
true: 'border-solid border-danger-default',
|
36
|
+
},
|
37
|
+
hasValue: {
|
38
|
+
true: 'border-solid',
|
39
|
+
},
|
40
|
+
},
|
41
|
+
});
|
42
|
+
const FilterTrigger = (_a) => {
|
43
|
+
var { labelText, icon, badge, onClear, onClick, value,
|
44
|
+
// children,
|
45
|
+
error = false } = _a, props = __rest(_a, ["labelText", "icon", "badge", "onClear", "onClick", "value", "error"]);
|
46
|
+
/**
|
47
|
+
* Date Picker Integration Logic
|
48
|
+
* ----------------------------
|
49
|
+
* This block handles the integration with DatePicker/DateTimePicker/DateRangePicker/DateTimeRangePicker components.
|
50
|
+
* It accesses the state and clear functionality when the Filter is used within
|
51
|
+
* either a DatePicker or DateRangePicker context.
|
52
|
+
*/
|
53
|
+
const ariaDatePickerState = React.useContext(AriaDatePickerStateContext);
|
54
|
+
const ariaDateRangePickerState = React.useContext(AriaDateRangePickerStateContext);
|
55
|
+
const isUsedInsideDatePicker = !!(ariaDatePickerState === null || ariaDatePickerState === void 0 ? void 0 : ariaDatePickerState.value);
|
56
|
+
const isUsedInsideDateRangePicker = !!(ariaDateRangePickerState === null || ariaDateRangePickerState === void 0 ? void 0 : ariaDateRangePickerState.value.start) && !!ariaDateRangePickerState.value.end;
|
57
|
+
const onClearDatePickerRelated = () => {
|
58
|
+
if (isUsedInsideDatePicker) {
|
59
|
+
ariaDatePickerState.setValue(null);
|
60
|
+
}
|
61
|
+
else if (isUsedInsideDateRangePicker) {
|
62
|
+
ariaDateRangePickerState.setValue(null);
|
63
|
+
}
|
64
|
+
};
|
65
|
+
// End Date Picker Integration Logic
|
66
|
+
const hasValue = !!value || isUsedInsideDatePicker || isUsedInsideDateRangePicker;
|
67
|
+
const showClearButton = (!!onClear && !!value) || isUsedInsideDatePicker || isUsedInsideDateRangePicker;
|
68
|
+
return (React.createElement(AriaGroup, Object.assign({}, props, { isInvalid: error, className: (renderProps) => filterWrapper(Object.assign(Object.assign({}, renderProps), { hasValue: hasValue || !!badge })) }),
|
69
|
+
React.createElement(React.Fragment, null,
|
70
|
+
React.createElement(AriaButton, { onPress: () => {
|
71
|
+
onClick && onClick();
|
72
|
+
}, className: tw('outline-0 outline-none flex items-center py-3 cursor-pointer', {
|
73
|
+
'pl-4 pr-[6px]': showClearButton, // keep padding right the same as padding left of <FilterClearButton>
|
74
|
+
'px-4': !showClearButton,
|
75
|
+
}) },
|
76
|
+
React.createElement("div", { className: tw('flex items-center gap-3 divide-x divide-grey-20') },
|
77
|
+
React.createElement("div", { className: tw('flex items-center gap-3') },
|
78
|
+
React.createElement("div", { className: tw('flex items-center gap-2') },
|
79
|
+
React.createElement(InlineIcon, { icon: icon }),
|
80
|
+
React.createElement(Typography.Small, null, labelText)),
|
81
|
+
badge && (React.createElement(Typography, { color: "primary-active", className: tw('flex items-center') },
|
82
|
+
React.createElement(Badge, { dense: true, value: badge })))),
|
83
|
+
hasValue && (React.createElement("div", { className: "pl-3" },
|
84
|
+
React.createElement(Typography.Small, { className: tw('truncate max-w-[233px]'), color: error ? 'danger-intense' : 'primary-active' },
|
85
|
+
value,
|
86
|
+
isUsedInsideDatePicker && React.createElement(DateDisplay, { state: ariaDatePickerState }),
|
87
|
+
isUsedInsideDateRangePicker && React.createElement(DateDisplay, { state: ariaDateRangePickerState })))))),
|
88
|
+
showClearButton && (React.createElement(FilterClearButton, { onClear: () => {
|
89
|
+
onClearDatePickerRelated();
|
90
|
+
onClear === null || onClear === void 0 ? void 0 : onClear();
|
91
|
+
} })))));
|
92
|
+
};
|
93
|
+
const isDateRangePickerState = (state) => {
|
94
|
+
return 'value' in state && state.value !== null && 'start' in state.value;
|
95
|
+
};
|
96
|
+
const DateDisplay = ({ state }) => {
|
97
|
+
var _a, _b;
|
98
|
+
const primary = isDateRangePickerState(state)
|
99
|
+
? (_a = state.formatValue(DATE_FORMAT_OPTIONS.locale, DATE_FORMAT_OPTIONS.options)) === null || _a === void 0 ? void 0 : _a.start
|
100
|
+
: state.formatValue(DATE_FORMAT_OPTIONS.locale, DATE_FORMAT_OPTIONS.options);
|
101
|
+
const secondary = isDateRangePickerState(state)
|
102
|
+
? (_b = state.formatValue(DATE_FORMAT_OPTIONS.locale, DATE_FORMAT_OPTIONS.options)) === null || _b === void 0 ? void 0 : _b.end
|
103
|
+
: undefined;
|
104
|
+
return (React.createElement(Box.Flex, { gap: "2" },
|
105
|
+
React.createElement("span", null, primary),
|
106
|
+
secondary && (React.createElement(React.Fragment, null,
|
107
|
+
React.createElement("span", { "aria-hidden": true, className: tw('text-muted') }, "-"),
|
108
|
+
React.createElement("span", null, secondary)))));
|
109
|
+
};
|
110
|
+
const FilterClearButton = ({ onClear }) => (
|
111
|
+
// using a native HTML <button> here instead of <Button slot={null} /> from react-aria because react-aria <DialogTrigger> doesn't support it as a child. If we used <Button slot={null}>, the popover would open simultaneously with the clear callback, which is unintended behavior. Interestingly, this issue doesn't occur in react-aria's <DatePicker>, but for consistency and to avoid conflicts here, we're sticking with a plain button.
|
112
|
+
React.createElement("button", { "aria-label": "Clear filter", onClick: (e) => {
|
113
|
+
e.preventDefault();
|
114
|
+
e.stopPropagation();
|
115
|
+
// Focus the previous button before clearing, since clicking the clear button removes the clear button itself from the DOM and causes focus to be lost.
|
116
|
+
const previousButton = e.currentTarget.previousElementSibling;
|
117
|
+
if (previousButton instanceof HTMLElement) {
|
118
|
+
previousButton.focus();
|
119
|
+
}
|
120
|
+
onClear();
|
121
|
+
}, className: tw('py-[10px] pl-[6px] pr-4 inline-flex items-center hover:bg-default focus:bg-default outline-0 outline-none rounded-r-full') },
|
122
|
+
React.createElement(InlineIcon, { icon: crossIcon })));
|
123
|
+
const Filter = () => null;
|
124
|
+
FilterTrigger.displayName = 'Filter.Trigger';
|
125
|
+
Filter.Trigger = FilterTrigger;
|
126
|
+
export { Filter };
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F0b21zL0ZpbHRlci9GaWx0ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFDTCxNQUFNLElBQUksVUFBVSxFQUNwQixzQkFBc0IsSUFBSSwwQkFBMEIsRUFDcEQsMkJBQTJCLElBQUksK0JBQStCLEVBQzlELEtBQUssSUFBSSxTQUFTLEdBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVDLE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUl4QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLE1BQU0sRUFBRSxPQUFPO0lBQ2YsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Q0FDdEQsQ0FBQztBQUVYLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEVBQUUsMEtBQTBLO0lBQ2hMLFFBQVEsRUFBRTtRQUNSLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxnQkFBZ0I7U0FDdkI7UUFDRCxhQUFhLEVBQUU7WUFDYixJQUFJLEVBQUUsa0NBQWtDO1NBQ3pDO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxF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
|
@@ -7,6 +7,7 @@ export * from './Chip/Chip';
|
|
7
7
|
export * from './DataList/DataList';
|
8
8
|
export * from './Dialog/Dialog';
|
9
9
|
export * from './DropdownMenu/DropdownMenu';
|
10
|
+
export * from './Filter/Filter';
|
10
11
|
export * from './InputGroup/InputGroup';
|
11
12
|
export * from './LineClamp/LineClamp';
|
12
13
|
export * from './Link/Link';
|
package/dist/src/atoms/index.js
CHANGED
@@ -7,6 +7,7 @@ export * from './Chip/Chip';
|
|
7
7
|
export * from './DataList/DataList';
|
8
8
|
export * from './Dialog/Dialog';
|
9
9
|
export * from './DropdownMenu/DropdownMenu';
|
10
|
+
export * from './Filter/Filter';
|
10
11
|
export * from './InputGroup/InputGroup';
|
11
12
|
export * from './LineClamp/LineClamp';
|
12
13
|
export * from './Link/Link';
|
@@ -25,4 +26,4 @@ export * from './Table/Table';
|
|
25
26
|
export * from './Toast/Toast';
|
26
27
|
export * from './Typography/Typography';
|
27
28
|
export * from './VisuallyHidden/VisuallyHidden';
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUNBQWlDLENBQUMifQ==
|
@@ -48,7 +48,7 @@ export declare const fieldGroup: import("tailwind-variants").TVReturnType<{
|
|
48
48
|
isDisabled: {
|
49
49
|
true: string;
|
50
50
|
};
|
51
|
-
}, undefined, "group flex items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden", import("tailwind-variants/dist/config").TVConfig<{
|
51
|
+
}, undefined, "group flex gap-3 items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden", import("tailwind-variants/dist/config").TVConfig<{
|
52
52
|
isReadOnly: {
|
53
53
|
true: string;
|
54
54
|
};
|
@@ -104,7 +104,7 @@ export declare const fieldGroup: import("tailwind-variants").TVReturnType<{
|
|
104
104
|
isDisabled: {
|
105
105
|
true: string;
|
106
106
|
};
|
107
|
-
}, undefined, "group flex items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden", import("tailwind-variants/dist/config").TVConfig<{
|
107
|
+
}, undefined, "group flex gap-3 items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden", import("tailwind-variants/dist/config").TVConfig<{
|
108
108
|
isReadOnly: {
|
109
109
|
true: string;
|
110
110
|
};
|
@@ -26,7 +26,7 @@ const fieldBorder = tv({
|
|
26
26
|
},
|
27
27
|
});
|
28
28
|
export const fieldGroup = tv({
|
29
|
-
base: 'group flex items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden',
|
29
|
+
base: 'group flex gap-3 items-center bg-transparent border rounded-sm typography-small text-default px-3 py-3 overflow-hidden',
|
30
30
|
variants: fieldBorder.variants,
|
31
31
|
});
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXRvbXMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDMUIsSUFBSSxFQUFFLGtEQUFrRDtJQUN4RCxRQUFRLEVBQUU7UUFDUixjQUFjLEVBQUU7WUFDZCxLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsV0FBVztTQUNsQjtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLFFBQVEsRUFBRTtRQUNSLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxrQkFBa0I7U0FDekI7UUFDRCxhQUFhLEVBQUU7WUFDYixLQUFLLEVBQUUscUNBQXFDO1lBQzVDLElBQUksRUFBRSxxQkFBcUI7U0FDNUI7UUFDRCxTQUFTLEVBQUU7WUFDVCxJQUFJLEVBQUUsdUJBQXVCO1NBQzlCO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLDZDQUE2QztTQUNwRDtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUMzQixJQUFJLEVBQUUsd0hBQXdIO0lBQzlILFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUTtDQUMvQixDQUFDLENBQUMifQ==
|
@@ -1,19 +1,23 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { type ChipProps, type StatusChipProps } from '../../../src/molecules/Chip/Chip';
|
2
3
|
import { Card as CardBase } from '../../../src/atoms/Card/Card';
|
3
4
|
import { CompactCard } from './Compact';
|
4
5
|
import { CardGroup } from './Group';
|
5
6
|
import type { ActionableCard, ClickableCard, IconCard, ImageCard } from './types';
|
6
7
|
import type { Lines } from '../../../src/atoms/LineClamp/LineClamp';
|
7
|
-
import type { Either } from '../../../types/utils';
|
8
|
+
import type { Either, RequiredBy } from '../../../types/utils';
|
8
9
|
export type CardProps = Either<ClickableCard, ActionableCard> & Either<ImageCard, IconCard> & {
|
9
10
|
/** Short and concise card title as a string. If a custom title is needed, check out the custom title story in our storybook. */
|
10
11
|
title: React.ReactElement<React.ComponentProps<typeof CardBase.Title>> | string;
|
11
12
|
/** When provided, title will be clamped if needed. */
|
12
13
|
clampTitle?: Lines;
|
13
14
|
/**
|
14
|
-
* Optional list
|
15
|
+
* Optional list to render chips above the card title. You can pass in bare
|
16
|
+
* strings to render regular chips, or exact props to render either regular
|
17
|
+
* or status chips. `dense` props are not supported as the chips are always
|
18
|
+
* rendered using the dense variant.
|
15
19
|
*/
|
16
|
-
chips?: string
|
20
|
+
chips?: Array<Omit<ChipProps, 'dense'> | RequiredBy<Omit<StatusChipProps, 'dense'>, 'status'> | string>;
|
17
21
|
/**
|
18
22
|
* Optional full-width for a card.
|
19
23
|
*/
|