@aivenio/aquarium 1.0.0 → 1.2.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/_variables.scss +20 -2
- package/dist/_variables_timescale.scss +20 -2
- package/dist/atoms.cjs +4881 -657
- package/dist/atoms.mjs +4873 -656
- package/dist/src/common/Alert/Alert.d.ts +1 -1
- package/dist/src/common/Alert/Alert.js +3 -3
- package/dist/src/common/Banner/Banner.d.ts +5 -1
- package/dist/src/common/Banner/Banner.js +10 -5
- package/dist/src/common/DataList/DataList.d.ts +24 -0
- package/dist/src/common/DataList/DataList.js +54 -0
- package/dist/src/common/DropdownMenu/DropdownMenu.d.ts +10 -3
- package/dist/src/common/DropdownMenu/DropdownMenu.js +14 -2
- package/dist/src/common/Modal/Modal.js +3 -3
- package/dist/src/common/Table/Table.d.ts +8 -3
- package/dist/src/common/Table/Table.js +20 -10
- package/dist/src/common/Timeline/Timeline.d.ts +18 -0
- package/dist/src/common/Timeline/Timeline.js +43 -0
- package/dist/src/common/Typography/Typography.d.ts +2 -1
- package/dist/src/common/Typography/Typography.js +15 -3
- package/dist/src/components/Alert/Alert.js +2 -2
- package/dist/src/components/Banner/Banner.d.ts +3 -1
- package/dist/src/components/Banner/Banner.js +3 -3
- package/dist/src/components/Box/Box.d.ts +5 -1
- package/dist/src/components/Box/Box.js +6 -2
- package/dist/src/components/Carousel/Carousel.d.ts +16 -0
- package/dist/src/components/Carousel/Carousel.js +89 -0
- package/dist/src/components/Chip/Chip.d.ts +1 -0
- package/dist/src/components/Chip/Chip.js +2 -2
- package/dist/src/components/DataList/DataList.d.ts +13 -0
- package/dist/src/components/DataList/DataList.js +24 -0
- package/dist/src/components/DataTable/DataTable.d.ts +5 -89
- package/dist/src/components/DataTable/DataTable.js +13 -28
- package/dist/src/components/Dialog/Dialog.js +35 -12
- package/dist/src/components/Dropdown/Dropdown.js +1 -1
- package/dist/src/components/DropdownMenu/DropdownMenu.d.ts +15 -1
- package/dist/src/components/DropdownMenu/DropdownMenu.js +26 -13
- package/dist/src/components/DropdownMenu/utils.d.ts +4 -0
- package/dist/src/components/DropdownMenu/utils.js +20 -0
- package/dist/src/components/Modal/Modal.js +16 -8
- package/dist/src/components/Section/Section.d.ts +4 -0
- package/dist/src/components/Section/Section.js +14 -13
- package/dist/src/components/Skeleton/Skeleton.d.ts +7 -2
- package/dist/src/components/Skeleton/Skeleton.js +5 -4
- package/dist/src/components/Table/Table.js +2 -2
- package/dist/src/components/Template/Template.d.ts +23 -0
- package/dist/src/components/Template/Template.js +23 -0
- package/dist/src/components/Timeline/Timeline.d.ts +27 -0
- package/dist/src/components/Timeline/Timeline.js +41 -0
- package/dist/src/components/index.d.ts +8 -1
- package/dist/src/components/index.js +9 -2
- package/dist/src/utils/Blueprint.d.ts +7 -0
- package/dist/src/utils/Blueprint.js +31 -0
- package/dist/src/utils/table/types.d.ts +129 -0
- package/dist/src/utils/table/types.js +6 -0
- package/dist/src/utils/table/useScrollTarget.d.ts +2 -0
- package/dist/src/utils/table/useScrollTarget.js +16 -0
- package/dist/src/{common/Table/Table.utils.d.ts → utils/table/useTableSelect.d.ts} +0 -3
- package/dist/src/utils/table/useTableSelect.js +27 -0
- package/dist/src/utils/table/useTableSort.d.ts +2 -0
- package/dist/src/utils/table/useTableSort.js +19 -0
- package/dist/styles.css +102 -26
- package/dist/styles_timescaledb.css +102 -26
- package/dist/system.cjs +3188 -2173
- package/dist/system.mjs +3182 -2173
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/types/ActionType.d.ts +2 -0
- package/dist/types/tailwindGenerated.d.ts +1 -1
- package/dist/types/utils.d.ts +3 -0
- package/package.json +3 -3
- package/dist/src/common/Table/Table.utils.js +0 -41
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import type { ActionType } from '../../../types/ActionType';
|
3
|
-
import type { BannerLayoutType } from '../../../src/common/Banner/Banner';
|
3
|
+
import type { BannerLayoutType, BannerVariantType } from '../../../src/common/Banner/Banner';
|
4
4
|
declare type ImageBanner = {
|
5
5
|
/**
|
6
6
|
* Optional image src that will be displayed on the right side of banner.
|
@@ -27,6 +27,8 @@ export declare type BannerProps = {
|
|
27
27
|
description: string;
|
28
28
|
/** Banner layout. */
|
29
29
|
layout?: BannerLayoutType;
|
30
|
+
/** Banner variant. */
|
31
|
+
variant?: BannerVariantType;
|
30
32
|
/** Optional action for banner. */
|
31
33
|
action?: ActionType;
|
32
34
|
/** If `onDismiss()` callback is provided, alert will be rendered with close icon.
|
@@ -8,10 +8,10 @@ import cross from '../../../src/icons/cross';
|
|
8
8
|
const BannerImageSkeleton = () => React.createElement(Skeleton, { width: 225, className: tw('h-full') });
|
9
9
|
const createBanner = (displayName, opts = {}) => {
|
10
10
|
const BannerComponent = (props) => {
|
11
|
-
const { title, description, layout: layoutProp, action, onDismiss } = props;
|
11
|
+
const { title, description, layout: layoutProp, action, onDismiss, variant = 'default' } = props;
|
12
12
|
const layout = opts.isOneLineBanner ? 'horizontal' : layoutProp || 'vertical';
|
13
13
|
const isDismissable = onDismiss !== undefined;
|
14
|
-
return (React.createElement(BannerBase, { layout: layout },
|
14
|
+
return (React.createElement(BannerBase, { layout: layout, variant: variant },
|
15
15
|
React.createElement(BannerBase.ContentContainer, { layout: layout },
|
16
16
|
React.createElement(BannerBase.Title, { layout: layout, titleVariant: opts.isOneLineBanner ? 'secondary' : 'primary' }, title),
|
17
17
|
React.createElement(BannerBase.Description, { flexGrow: isDismissable ? false : true }, description),
|
@@ -42,4 +42,4 @@ const OneLineBannerBase = createBanner('OneLineBanner', {
|
|
42
42
|
});
|
43
43
|
// type test = React.ComponentProps<typeof OneLineBannerBase>;
|
44
44
|
export const OneLineBanner = OneLineBannerBase;
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvQmFubmVyL0Jhbm5lci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQWlEcEMsTUFBTSxtQkFBbUIsR0FBYSxHQUFHLEVBQUUsQ0FBQyxvQkFBQyxRQUFRLElBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFJLENBQUM7QUFFOUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFtQixFQUFFLE9BQXNCLEVBQUUsRUFBRSxFQUFFO0lBQ3JFLE1BQU0sZUFBZSxHQUEwQixDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2pHLE1BQU0sTUFBTSxHQUFxQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUM7UUFDaEcsTUFBTSxhQUFhLEdBQUcsU0FBUyxLQUFLLFNBQVMsQ0FBQztRQUU5QyxPQUFPLENBQ0wsb0JBQUMsVUFBVSxJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU87WUFDMUMsb0JBQUMsVUFBVSxDQUFDLGdCQUFnQixJQUFDLE1BQU0sRUFBRSxNQUFNO2dCQUN6QyxvQkFBQyxVQUFVLENBQUMsS0FBSyxJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUMzRixLQUFLLENBQ1c7Z0JBQ25CLG9CQUFDLFVBQVUsQ0FBQyxXQUFXLElBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUcsV0FBVyxDQUEwQjtnQkFDckcsTUFBTSxJQUFJLENBQ1Qsb0JBQUMsVUFBVSxDQUFDLE9BQU8sSUFBQyxNQUFNLEVBQUUsTUFBTTtvQkFDaEMsb0JBQUMsV0FBVyxrQkFBQyxLQUFLLFVBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FDeEMsTUFBTSxDQUFDLElBQUksQ0FDQSxDQUNLLENBQ3RCLENBQzJCO1lBQzdCLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUMzRixvQkFBQyxVQUFVLENBQUMsY0FBYyxRQUN2QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNiLDZCQUNFLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFDbkIsU0FBUyxFQUFFLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUM3QyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUM3RCxDQUNILENBQUMsQ0FBQyxDQUFDLENBQ0Ysb0JBQUMsbUJBQW1CLE9BQUcsQ0FDeEIsQ0FDeUIsQ0FDN0I7WUFDQSxhQUFhLElBQUksQ0FDaEIsb0JBQUMsVUFBVSxDQUFDLGdCQUFnQixJQUFDLE1BQU0sRUFBRSxNQUFNO2dCQUN6QyxvQkFBQyxVQUFVLElBQUMsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsR0FBSSxDQUNuRCxDQUMvQixDQUNVLENBQ2QsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUNGLGVBQWUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQzFDLE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU3QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxlQUFlLEVBQUU7SUFDdEQsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxpQkFFNUIsQ0FBQyJ9
|
@@ -11,14 +11,18 @@ declare type Props = {
|
|
11
11
|
justifyContent?: React.CSSProperties['justifyContent'];
|
12
12
|
alignContent?: React.CSSProperties['alignContent'];
|
13
13
|
alignItems?: React.CSSProperties['alignItems'];
|
14
|
+
alignSelf?: React.CSSProperties['alignSelf'];
|
14
15
|
flexDirection?: React.CSSProperties['flexDirection'];
|
15
16
|
flexWrap?: React.CSSProperties['flexWrap'];
|
17
|
+
grow?: React.CSSProperties['flexGrow'];
|
18
|
+
shrink?: React.CSSProperties['flexShrink'];
|
19
|
+
flex?: React.CSSProperties['flex'];
|
16
20
|
gap?: keyof typeof twTheme['gap'];
|
17
21
|
colGap?: keyof typeof twTheme['gap'];
|
18
22
|
rowGap?: keyof typeof twTheme['gap'];
|
19
23
|
};
|
20
24
|
export declare type BoxProps<C extends React.ElementType> = TailwindifyProps<Props> & ElementProps<C> & Props;
|
21
|
-
export declare const Box: <C extends React.ElementType<any>>({ style, color, borderColor, borderRadius, borderWidth, justifyContent, alignContent, alignItems, flexDirection, flexWrap, display, padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginX, marginY, marginTop, marginRight, marginBottom, marginLeft, backgroundColor, width, height, maxWidth, maxHeight, minWidth, minHeight, gap, colGap, rowGap, ...rest }: BoxProps<C>) => JSX.Element;
|
25
|
+
export declare const Box: <C extends React.ElementType<any>>({ style, color, borderColor, borderRadius, borderWidth, justifyContent, alignContent, alignItems, alignSelf, flexDirection, flexWrap, flex, grow, shrink, display, padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginX, marginY, marginTop, marginRight, marginBottom, marginLeft, backgroundColor, width, height, maxWidth, maxHeight, minWidth, minHeight, gap, colGap, rowGap, ...rest }: BoxProps<C>) => JSX.Element;
|
22
26
|
export declare const BorderBox: React.ComponentType<{
|
23
27
|
className?: string | undefined;
|
24
28
|
style?: React.CSSProperties | undefined;
|
@@ -16,7 +16,7 @@ import isUndefined from 'lodash/isUndefined';
|
|
16
16
|
import twTheme from '../../../tailwind.theme.json';
|
17
17
|
import { createSimpleComponent } from '../../../src/utils/createComponent';
|
18
18
|
export const Box = (_a) => {
|
19
|
-
var { style, color, borderColor, borderRadius, borderWidth, justifyContent, alignContent, alignItems, flexDirection, flexWrap, display, padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginX, marginY, marginTop, marginRight, marginBottom, marginLeft, backgroundColor, width, height, maxWidth, maxHeight, minWidth, minHeight, gap, colGap, rowGap } = _a, rest = __rest(_a, ["style", "color", "borderColor", "borderRadius", "borderWidth", "justifyContent", "alignContent", "alignItems", "flexDirection", "flexWrap", "display", "padding", "paddingX", "paddingY", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "margin", "marginX", "marginY", "marginTop", "marginRight", "marginBottom", "marginLeft", "backgroundColor", "width", "height", "maxWidth", "maxHeight", "minWidth", "minHeight", "gap", "colGap", "rowGap"]);
|
19
|
+
var { style, color, borderColor, borderRadius, borderWidth, justifyContent, alignContent, alignItems, alignSelf, flexDirection, flexWrap, flex, grow, shrink, display, padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginX, marginY, marginTop, marginRight, marginBottom, marginLeft, backgroundColor, width, height, maxWidth, maxHeight, minWidth, minHeight, gap, colGap, rowGap } = _a, rest = __rest(_a, ["style", "color", "borderColor", "borderRadius", "borderWidth", "justifyContent", "alignContent", "alignItems", "alignSelf", "flexDirection", "flexWrap", "flex", "grow", "shrink", "display", "padding", "paddingX", "paddingY", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "margin", "marginX", "marginY", "marginTop", "marginRight", "marginBottom", "marginLeft", "backgroundColor", "width", "height", "maxWidth", "maxHeight", "minWidth", "minHeight", "gap", "colGap", "rowGap"]);
|
20
20
|
const styles = useStyle({
|
21
21
|
padding,
|
22
22
|
display,
|
@@ -27,6 +27,7 @@ export const Box = (_a) => {
|
|
27
27
|
justifyContent,
|
28
28
|
alignContent,
|
29
29
|
alignItems,
|
30
|
+
alignSelf,
|
30
31
|
flexDirection,
|
31
32
|
flexWrap,
|
32
33
|
paddingTop: isUndefined(paddingY) ? paddingTop : paddingY,
|
@@ -45,6 +46,9 @@ export const Box = (_a) => {
|
|
45
46
|
maxHeight,
|
46
47
|
minWidth,
|
47
48
|
minHeight,
|
49
|
+
flexGrow: grow,
|
50
|
+
flexShrink: shrink,
|
51
|
+
flex,
|
48
52
|
gap,
|
49
53
|
columnGap: colGap,
|
50
54
|
rowGap,
|
@@ -52,4 +56,4 @@ export const Box = (_a) => {
|
|
52
56
|
return React.createElement(Element, Object.assign({ style: Object.assign(Object.assign({}, styles), style) }, rest));
|
53
57
|
};
|
54
58
|
export const BorderBox = createSimpleComponent(Box, { className: 'rounded border', borderColor: 'grey-10' }, 'BorderBox');
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvQm94L0JveC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUF3QmxFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUE4QixFQXlDbkMsRUFBZSxFQUFFO1FBekNrQixFQUMvQyxLQUFLLEVBQ0wsS0FBSyxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxFQUNYLGNBQWMsRUFDZCxZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsRUFDVCxhQUFhLEVBQ2IsUUFBUSxFQUNSLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLEVBQ1AsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osVUFBVSxFQUNWLGVBQWUsRUFDZixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sT0FFTSxFQURULElBQUksY0F4Q3dDLDZlQXlDaEQsQ0FEUTtJQUVQLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN0QixPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7UUFDTCxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BFLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLFlBQVk7UUFDWixVQUFVO1FBQ1YsU0FBUztRQUNULGFBQWE7UUFDYixRQUFRO1FBQ1IsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ3pELFlBQVksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUM3RCxhQUFhLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDL0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQzNELE1BQU07UUFDTixTQUFTLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDckQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ3pELFlBQVksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTztRQUMzRCxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDdkQsZUFBZTtRQUNmLEtBQUs7UUFDTCxNQUFNO1FBQ04sUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsSUFBSTtRQUNKLEdBQUc7UUFDSCxTQUFTLEVBQUUsTUFBTTtRQUNqQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsT0FBTyxvQkFBQyxPQUFPLGtCQUFDLEtBQUssa0NBQU8sTUFBTSxHQUFLLEtBQUssS0FBUSxJQUFJLEVBQUksQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQzVDLEdBQUcsRUFDSCxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQ3ZELFdBQVcsQ0FDWixDQUFDIn0=
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
export declare type CarouselProps = {
|
3
|
+
/**
|
4
|
+
* Currently active page number for controlled mode.
|
5
|
+
*/
|
6
|
+
currentPage?: number;
|
7
|
+
/**
|
8
|
+
* Change callback for the currently active page number for controlled mode.
|
9
|
+
*/
|
10
|
+
onPageChange?: (pageNumber: number) => void;
|
11
|
+
/**
|
12
|
+
* Initial active page number for uncontrolled mode.
|
13
|
+
*/
|
14
|
+
defaultPage?: number;
|
15
|
+
};
|
16
|
+
export declare const Carousel: React.FC<CarouselProps>;
|
@@ -0,0 +1,89 @@
|
|
1
|
+
import React, { useRef, useLayoutEffect, useState, useEffect } from 'react';
|
2
|
+
import { tw } from '../../../src/utils/tailwind';
|
3
|
+
import { IconButton } from '../../../src/components/Button/Button';
|
4
|
+
import { Typography } from '../../../src/components/Typography/Typography';
|
5
|
+
import chevronLeft from '../../../src/icons/chevronLeft';
|
6
|
+
import chevronRight from '../../../src/icons/chevronRight';
|
7
|
+
import { Flexbox } from '../../../src/components/Flexbox/Flexbox';
|
8
|
+
export const Carousel = ({ defaultPage = 1, currentPage: currentPageProp, onPageChange, children, }) => {
|
9
|
+
const containerRef = useRef(null);
|
10
|
+
const scrollbarContainerRef = useRef(null);
|
11
|
+
const items = React.Children.toArray(children);
|
12
|
+
const [width, setWidth] = useState(0);
|
13
|
+
const [isUpdating, setIsUpdating] = useState(false); // waiting for activePage update scrollTo to be done first (controlled mode)
|
14
|
+
const [currentPage, setCurrentPage] = useState(currentPageProp !== null && currentPageProp !== void 0 ? currentPageProp : defaultPage);
|
15
|
+
useLayoutEffect(() => {
|
16
|
+
const updateContainerWidth = () => {
|
17
|
+
var _a;
|
18
|
+
const containerWidth = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width;
|
19
|
+
if (containerWidth !== undefined && width !== containerWidth) {
|
20
|
+
setWidth(containerWidth);
|
21
|
+
}
|
22
|
+
};
|
23
|
+
updateContainerWidth();
|
24
|
+
window.addEventListener('resize', updateContainerWidth); // update width when user resizes window's size
|
25
|
+
return () => {
|
26
|
+
window.removeEventListener('resize', updateContainerWidth);
|
27
|
+
};
|
28
|
+
}, [containerRef.current]);
|
29
|
+
// case: controlled mode
|
30
|
+
if (typeof currentPageProp === 'number' && currentPageProp !== currentPage && onPageChange && width !== 0) {
|
31
|
+
setCurrentPage(currentPageProp);
|
32
|
+
}
|
33
|
+
useEffect(() => {
|
34
|
+
var _a, _b;
|
35
|
+
if (width === 0) {
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
const currentPageX = (currentPage - 1) * width;
|
39
|
+
if (((_a = scrollbarContainerRef.current) === null || _a === void 0 ? void 0 : _a.scrollLeft) !== currentPageX) {
|
40
|
+
setIsUpdating(true); // this will prevent scroll event listener to work when we are updating scrollTo() programatically which are 1) when clicking on next/back button 2) when scroll based on "currentPageProp" changes. Since when we set scrollTo() programatically, it also triggers scroll event listener at the same time.
|
41
|
+
(_b = scrollbarContainerRef.current) === null || _b === void 0 ? void 0 : _b.scrollTo({ left: currentPageX, behavior: 'smooth' });
|
42
|
+
}
|
43
|
+
}, [currentPage, scrollbarContainerRef.current]);
|
44
|
+
const handleNavigationClick = (direction) => {
|
45
|
+
const nextItem = currentPage + (direction === 'left' ? -1 : 1);
|
46
|
+
// case: uncontrolled mode
|
47
|
+
!onPageChange && setCurrentPage(nextItem);
|
48
|
+
// case: controlled mode
|
49
|
+
onPageChange && onPageChange(nextItem);
|
50
|
+
};
|
51
|
+
const handleScroll = () => {
|
52
|
+
var _a, _b;
|
53
|
+
const currentPageX = (currentPage - 1) * width;
|
54
|
+
// when currentPageProp is updated, as controlled mode, we programatically scroll it by scrollTo() which will also trigger the scroll event and this "handleScroll" callback will also be triggered.
|
55
|
+
// Due to the above reason, while the previous scroll isn't done yet, "scrollLeft" here might be different than the targeted x position of the previous scroll action
|
56
|
+
// for example we pass `currentPageProp=4` and then update it to `currentPageProp=2`, it will have to scroll from 4 back to 2 which will also pass 3. So in the UI, it will show like 4->2, then 4->3, and then 3->2 which causes UI glitch.
|
57
|
+
// but this will have no problem if user navigates through `handleNavigationClick` since it is only -1/+1 item at a time.
|
58
|
+
// to fix the above issue, we will not trigger any action in this callback if "isUpdating === true"
|
59
|
+
// this should be inside a scroll event handle since it is checking when scrolling to x destination is done.
|
60
|
+
// once it arrives to "x" as expected when "currentPage" changes. Resume everything back, so defult scroll event works as usual.
|
61
|
+
if (isUpdating && ((_a = scrollbarContainerRef.current) === null || _a === void 0 ? void 0 : _a.scrollLeft) === currentPageX) {
|
62
|
+
setIsUpdating(false);
|
63
|
+
}
|
64
|
+
const scrollBarX = (_b = scrollbarContainerRef.current) === null || _b === void 0 ? void 0 : _b.scrollLeft;
|
65
|
+
if (typeof scrollBarX === 'number' && scrollBarX % width === 0 && currentPageX !== scrollBarX && !isUpdating) {
|
66
|
+
const newPage = scrollBarX / width + 1;
|
67
|
+
// case: uncontrolled mode
|
68
|
+
!onPageChange && setCurrentPage(newPage);
|
69
|
+
// case: controlled mode
|
70
|
+
onPageChange && onPageChange(newPage);
|
71
|
+
}
|
72
|
+
};
|
73
|
+
return items.length > 0 ? (React.createElement("div", { className: tw('w-full flex flex-col'), ref: containerRef },
|
74
|
+
containerRef !== null && (React.createElement("ul", { ref: scrollbarContainerRef, tabIndex: 0, onScroll: handleScroll,
|
75
|
+
// use items-strech here, so that every carousel items are the same height in case there are some items that taller than others
|
76
|
+
className: tw('grid items-stretch grid-flow-col overflow-x-scroll scroll-smooth snap-x snap-mandatory scrollbar-hide focus-visible:outline-0 focus-visible:ring-1 focus-visible:ring-info-70') }, width !== 0 &&
|
77
|
+
React.Children.map(children, (child, index) => (React.createElement(CarouselItem, { key: index, width: width, ariaHidden: index + 1 === currentPage ? undefined : true }, child))))),
|
78
|
+
React.createElement(Flexbox, { direction: "row", justifyContent: "flex-end", alignItems: "center" },
|
79
|
+
React.createElement(IconButton, { "aria-label": "Previous", onClick: () => handleNavigationClick('left'), icon: chevronLeft, disabled: currentPage === 1 }),
|
80
|
+
React.createElement(Typography.Caption, null, `${currentPage}/${React.Children.count(children)}`),
|
81
|
+
React.createElement(IconButton, { "aria-label": "Next", onClick: () => handleNavigationClick('right'), icon: chevronRight, disabled: currentPage === items.length })))) : null;
|
82
|
+
};
|
83
|
+
const CarouselItem = ({ width, children, ariaHidden }) => {
|
84
|
+
return (
|
85
|
+
// let height to be auto
|
86
|
+
// if a carousel item doesn't fit the width of the container nicely, it will be aligned center within the container
|
87
|
+
React.createElement("li", { style: { width }, "aria-hidden": ariaHidden, className: tw('flex justify-center snap-start') }, children));
|
88
|
+
};
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9DYXJvdXNlbC9DYXJvdXNlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBbUJ6RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTRCLENBQUMsRUFDaEQsV0FBVyxHQUFHLENBQUMsRUFDZixXQUFXLEVBQUUsZUFBZSxFQUM1QixZQUFZLEVBQ1osUUFBUSxHQUNULEVBQUUsRUFBRTtJQUNILE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQW1CLElBQUksQ0FBQyxDQUFDO0lBQzdELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEVBQTRFO0lBQ2pJLE1BQU0sQ0FBQyxXQUFXLEVBQUUs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
|
@@ -46,7 +46,7 @@ export const Chip = (_a) => {
|
|
46
46
|
onClose && (React.createElement(InlineIcon, { role: "button", "aria-hidden": false, icon: crossIcon, className: tw({ 'cursor-pointer': onClose !== undefined }), onClick: () => onClose === null || onClose === void 0 ? void 0 : onClose() })),
|
47
47
|
locked && React.createElement(InlineIcon, { icon: lockIcon })));
|
48
48
|
};
|
49
|
-
const ChipSkeleton = ({ dense = false }) => (React.createElement(Skeleton, { width:
|
49
|
+
const ChipSkeleton = ({ dense = false, width = dense ? 34 : 56 }) => (React.createElement(Skeleton, { width: width, height: dense ? 20 : 28 }));
|
50
50
|
Chip.Skeleton = ChipSkeleton;
|
51
51
|
export const StatusChip = React.forwardRef((_a, ref) => {
|
52
52
|
var { UNSAFE_icon: icon, text, dense = false, status } = _a, rest = __rest(_a, ["UNSAFE_icon", "text", "dense", "status"]);
|
@@ -60,4 +60,4 @@ export const ChipContainer = ({ dense, children }) => (React.createElement("div"
|
|
60
60
|
}) }, React.Children.map(children, (child) => isComponentType(child, Chip) || isComponentType(child, StatusChip)
|
61
61
|
? React.cloneElement(child, { dense })
|
62
62
|
: undefined)));
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0NoaXAvQ2hpcC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFNUQsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEMsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQXVDOUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFNBQXFCLFNBQVMsRUFBVSxFQUFFO0lBQ3JFLFFBQVEsTUFBTSxFQUFFO1FBQ2QsS0FBSyxNQUFNO1lBQ1QsT0FBTyxFQUFFLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV2QyxLQUFLLFNBQVM7WUFDWixPQUFPLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRWhELEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFekMsS0FBSyxTQUFTO1lBQ1osT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUU3QyxLQUFLLFNBQVMsQ0FBQztRQUNmO1lBQ0UsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUN2QztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZ0UsQ0FBQyxFQVFqRixFQUFFLEVBQUU7UUFSNkUsRUFDaEYsSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEdBQUcsS0FBSyxFQUNiLE1BQU0sR0FBRyxLQUFLLEVBQ2QsS0FBSyxFQUNMLE9BQU8sT0FFUixFQURJLElBQUksY0FQeUUsdURBUWpGLENBRFE7SUFDSCxPQUFBLENBQ0osb0JBQUMsUUFBUSxDQUFDLFNBQVMsa0JBQ2pCLEtBQUssRUFBRSxLQUFLLEVBQ1osU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNaLHdCQUF3QixFQUFFLENBQUMsTUFBTTtZQUNqQyx3QkFBd0IsRUFBRSxNQUFNO1NBQ2pDLENBQUMsSUFDRSxJQUFJO1FBRVAsSUFBSSxJQUFJLG9CQUFDLFVBQVUsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJO1FBQ2xDLElBQUk7UUFDSixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksb0JBQUMsU0FBUyxJQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFJO1FBQy9GLE9BQU8sSUFBSSxDQUNWLG9CQUFDLFVBQVUsSUFDVCxJQUFJLEVBQUMsUUFBUSxpQkFDQSxLQUFLLEVBQ2xCLElBQUksRUFBRSxTQUFTLEVBQ2YsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxFQUFJLEdBQzFCLENBQ0g7UUFDQSxNQUFNLElBQUksb0JBQUMsVUFBVSxJQUFDLElBQUksRUFBRSxRQUFRLEdBQUksQ0FDdEIsQ0FDdEIsQ0FBQTtDQUFBLENBQUM7QUFPRixNQUFNLFlBQVksR0FBNEIsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDNUYsb0JBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUksQ0FDcEQsQ0FBQztBQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBaUI3QixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FDeEMsQ0FBQyxFQUEyRCxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQXBFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxNQUFNLE9BQVcsRUFBTixJQUFJLGNBQXpELDBDQUEyRCxDQUFGO0lBQVksT0FBQSxDQUNwRSxvQkFBQyxRQUFRLENBQUMsU0FBUyxrQkFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQU0sSUFBSSxJQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDekYsSUFBSSxJQUFJLG9CQUFDLFVBQVUsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJO1FBQ2xDLElBQUksQ0FDYyxDQUN0QixDQUFBO0NBQUEsQ0FDRixDQUFDO0FBY0YsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUNsRiw2QkFDRSxTQUFTLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixFQUFFO1FBQ2pDLFNBQVMsRUFBRSxDQUFDLEtBQUs7UUFDakIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDMUIsQ0FBQyxJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3RDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7SUFDaEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUNHLENBQ1AsQ0FBQyJ9
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { DataTableRow, DataListColumn } from '../../../src/utils/table/types';
|
3
|
+
export declare type DataListProps<R extends DataTableRow> = {
|
4
|
+
/**
|
5
|
+
* Array of column definitions that correspond to the data rows.
|
6
|
+
*/
|
7
|
+
columns: Array<DataListColumn<R>>;
|
8
|
+
/**
|
9
|
+
* Array of data rows to be displayed.
|
10
|
+
*/
|
11
|
+
rows: R[];
|
12
|
+
};
|
13
|
+
export declare const DataList: <R extends DataTableRow>({ columns, rows }: DataListProps<R>) => JSX.Element;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { toSortDirection, cellProps } from '../../../src/utils/table/types';
|
3
|
+
import { DataList as DataListBase } from '../../../src/common/DataList/DataList';
|
4
|
+
import { Item } from '../../../src/common/Table/Table';
|
5
|
+
import { StatusChip } from '../../../src/components/Chip/Chip';
|
6
|
+
import { Template } from '../../../src/components/Template/Template';
|
7
|
+
import { SecondaryButton } from '../../../src/components/Button/Button';
|
8
|
+
import { renameProperty } from '../../../src/utils/object';
|
9
|
+
import orderBy from 'lodash/orderBy';
|
10
|
+
import { List } from '../../../src/components';
|
11
|
+
import { useTableSort } from '../../../src/utils/table/useTableSort';
|
12
|
+
export const DataList = ({ columns, rows }) => {
|
13
|
+
const [sort, updateSort] = useTableSort();
|
14
|
+
const sortedRows = orderBy(rows, [sort === null || sort === void 0 ? void 0 : sort.key], [toSortDirection(sort === null || sort === void 0 ? void 0 : sort.direction)]);
|
15
|
+
const templateColumns = columns.map((column) => { var _a; return (_a = column.width) !== null && _a !== void 0 ? _a : 'auto'; });
|
16
|
+
return (React.createElement(Template, { columns: templateColumns },
|
17
|
+
columns.map((column) => (column.type === 'text' || column.type === 'number') && column.sortable ? (React.createElement(DataListBase.SortCell, Object.assign({ direction: sort && sort.key === column.field ? sort.direction : 'none', onClick: () => updateSort(column.field) }, cellProps(column)), column.headerName)) : (React.createElement(DataListBase.HeadCell, Object.assign({}, cellProps(column)), column.headerName))),
|
18
|
+
React.createElement(List, { items: sortedRows, renderItem: (row, index) => (React.createElement(DataListBase.Row, { key: row.id },
|
19
|
+
React.createElement(List, { items: columns, renderItem: (column) => column.type === 'status' ? (React.createElement(DataListBase.Cell, Object.assign({}, cellProps(column)),
|
20
|
+
React.createElement(StatusChip, Object.assign({ dense: true }, column.status(row, index, sortedRows))))) : column.type === 'action' ? (React.createElement(DataListBase.Cell, Object.assign({}, cellProps(column)),
|
21
|
+
React.createElement(SecondaryButton, Object.assign({ dense: true }, renameProperty('text', 'children', column.action(row, index, sortedRows)))))) : column.type === 'custom' ? (React.createElement(DataListBase.Cell, Object.assign({}, cellProps(column)), column.UNSAFE_render(row, index, sortedRows))) : column.type === 'item' ? (React.createElement(DataListBase.Cell, null,
|
22
|
+
React.createElement(Item, Object.assign({}, column.item(row, index, sortedRows))))) : (React.createElement(DataListBase.Cell, Object.assign({}, cellProps(column)), column.formatter ? column.formatter(row[column.field], row, index, sortedRows) : row[column.field])) }))) })));
|
23
|
+
};
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YUxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9EYXRhTGlzdC9EYXRhTGlzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBZ0MsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLElBQUksWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBYzVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUF5QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQW9CLEVBQWUsRUFBRTtJQUNuRyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLFlBQVksRUFBSyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFNBQVMsQ0FBQyxDQUFDLENBQVEsQ0FBQztJ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
|
@@ -1,93 +1,15 @@
|
|
1
|
-
|
1
|
+
/// <reference types="react" />
|
2
2
|
import { TableProps } from '../../../src/components/Table/Table';
|
3
|
-
import {
|
4
|
-
|
5
|
-
import { ActionType } from '../../../types/ActionType';
|
6
|
-
declare type Column = {
|
7
|
-
/**
|
8
|
-
* Display name for the column.
|
9
|
-
*/
|
10
|
-
headerName: string;
|
11
|
-
/**
|
12
|
-
* Width of the column. Number for pixels and string for percentages
|
13
|
-
*/
|
14
|
-
width?: number | `${number}%`;
|
15
|
-
};
|
16
|
-
declare type TextColumn<T> = Column & {
|
17
|
-
/**
|
18
|
-
* Name of the property field that this column represents in the data rows.
|
19
|
-
*/
|
20
|
-
field: keyof T & (string | number);
|
21
|
-
/**
|
22
|
-
* When true, user will be able to sort data rows by clicking this column header.
|
23
|
-
*/
|
24
|
-
sortable?: boolean;
|
25
|
-
};
|
26
|
-
declare type NumberColumn<T> = Column & {
|
27
|
-
/**
|
28
|
-
* Type of the column.
|
29
|
-
*/
|
30
|
-
type: 'number';
|
31
|
-
/**
|
32
|
-
* Name of the property field that this column represents in the data rows.
|
33
|
-
*/
|
34
|
-
field: keyof T & (string | number);
|
35
|
-
/**
|
36
|
-
* When true, user will be able to sort data rows by clicking this column header.
|
37
|
-
*/
|
38
|
-
sortable?: boolean;
|
39
|
-
};
|
40
|
-
declare type ActionColumn<T> = Column & {
|
41
|
-
/**
|
42
|
-
* Type of the column.
|
43
|
-
*/
|
44
|
-
type: 'action';
|
45
|
-
/**
|
46
|
-
* Callback function that resolves to Button props.
|
47
|
-
*/
|
48
|
-
action: (row: T, index: number, rows: T[]) => ActionType;
|
49
|
-
};
|
50
|
-
declare type CustomColumn<T> = Column & {
|
51
|
-
/**
|
52
|
-
* Type of the column.
|
53
|
-
*/
|
54
|
-
type: 'custom';
|
55
|
-
/**
|
56
|
-
* Unsafe render method. Consider consulting the designer instead of using this.
|
57
|
-
* Using render callback will also disallow sorting on that column.
|
58
|
-
*/
|
59
|
-
UNSAFE_render: (row: T, index: number, rows: T[]) => React.ReactNode;
|
60
|
-
};
|
61
|
-
declare type StatusColumn<T> = Column & {
|
62
|
-
/**
|
63
|
-
* Type of the column.
|
64
|
-
*/
|
65
|
-
type: 'status';
|
66
|
-
/**
|
67
|
-
* Callback function that resolves to StatusChip props
|
68
|
-
*/
|
69
|
-
status: (row: T, index: number, rows: T[]) => {
|
70
|
-
status: ChipStatus;
|
71
|
-
text: string | number;
|
72
|
-
};
|
73
|
-
};
|
74
|
-
export declare type DataTableColumn<T extends DataTableRow> = TextColumn<T> | CustomColumn<T> | StatusColumn<T> | NumberColumn<T> | ActionColumn<T>;
|
75
|
-
export declare type DataTableRow = Record<string, any> & {
|
76
|
-
/**
|
77
|
-
* Assigned ID for each data row.
|
78
|
-
* Used as a key. Use something unqiue derived from the data, not index.
|
79
|
-
*/
|
80
|
-
id: string | number;
|
81
|
-
};
|
82
|
-
export declare type DataTableProps<T extends DataTableRow> = {
|
3
|
+
import { DataTableRow, DataTableColumn } from '../../../src/utils/table/types';
|
4
|
+
export declare type DataTableProps<R extends DataTableRow> = {
|
83
5
|
/**
|
84
6
|
* Array of column definitions that correspond to the data rows.
|
85
7
|
*/
|
86
|
-
columns: Array<DataTableColumn<
|
8
|
+
columns: Array<DataTableColumn<R>>;
|
87
9
|
/**
|
88
10
|
* Array of data rows to be displayed.
|
89
11
|
*/
|
90
|
-
rows:
|
12
|
+
rows: R[];
|
91
13
|
/**
|
92
14
|
* When true, sets column whitespace to nowrap. Defaults to false.
|
93
15
|
* Use when you dont want text to wrap due to 100% width column for example.
|
@@ -98,10 +20,4 @@ export declare type DataTableProps<T extends DataTableRow> = {
|
|
98
20
|
*/
|
99
21
|
layout?: 'auto' | 'fixed';
|
100
22
|
} & Pick<TableProps, 'ariaLabel' | 'onNext' | 'onPrev'>;
|
101
|
-
declare type Sort<T extends DataTableRow> = {
|
102
|
-
key: keyof T;
|
103
|
-
direction: SortDirection;
|
104
|
-
};
|
105
|
-
export declare const useTableSort: <T extends DataTableRow>() => [Sort<T> | undefined, (field: keyof T) => void];
|
106
23
|
export declare const DataTable: <T extends DataTableRow>({ columns, rows, noWrap, layout, ...rest }: DataTableProps<T>) => JSX.Element;
|
107
|
-
export {};
|
@@ -12,46 +12,31 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
12
12
|
import React from 'react';
|
13
13
|
import { tw } from '../../../src/utils/tailwind';
|
14
14
|
import { Table } from '../../../src/components/Table/Table';
|
15
|
+
import { Item } from '../../../src/common/Table/Table';
|
15
16
|
import { StatusChip } from '../../../src/components/Chip/Chip';
|
16
17
|
import { SecondaryButton } from '../../../src/components/Button/Button';
|
17
18
|
import { renameProperty } from '../../../src/utils/object';
|
18
19
|
import orderBy from 'lodash/orderBy';
|
19
20
|
import { List } from '../../../src/components';
|
20
|
-
|
21
|
-
|
22
|
-
const isNumberColumn = (column) => column.type === 'number';
|
23
|
-
const isStatusColumn = (column) => column.type === 'status';
|
24
|
-
const isActionColumn = (column) => column.type === 'action';
|
25
|
-
export const useTableSort = () => {
|
26
|
-
const [sort, setSort] = React.useState();
|
27
|
-
const handleSortClick = (field) => {
|
28
|
-
if ((sort === null || sort === void 0 ? void 0 : sort.key) === field) {
|
29
|
-
if (sort.direction === 'ascending') {
|
30
|
-
setSort({ key: field, direction: 'descending' });
|
31
|
-
}
|
32
|
-
else {
|
33
|
-
setSort(undefined);
|
34
|
-
}
|
35
|
-
}
|
36
|
-
else {
|
37
|
-
setSort({ key: field, direction: 'ascending' });
|
38
|
-
}
|
39
|
-
};
|
40
|
-
return [sort, handleSortClick];
|
41
|
-
};
|
21
|
+
import { toSortDirection, cellProps } from '../../../src/utils/table/types';
|
22
|
+
import { useTableSort } from '../../../src/utils/table/useTableSort';
|
42
23
|
export const DataTable = (_a) => {
|
43
24
|
var { columns, rows, noWrap = false, layout = 'auto' } = _a, rest = __rest(_a, ["columns", "rows", "noWrap", "layout"]);
|
44
25
|
const [sort, updateSort] = useTableSort();
|
26
|
+
const sortedRows = orderBy(rows, [sort === null || sort === void 0 ? void 0 : sort.key], [toSortDirection(sort === null || sort === void 0 ? void 0 : sort.direction)]);
|
45
27
|
return (React.createElement(Table, Object.assign({}, rest, { className: tw({
|
46
28
|
'whitespace-nowrap': noWrap,
|
47
29
|
'table-auto': layout === 'auto',
|
48
30
|
'table-fixed': layout === 'fixed',
|
49
31
|
}) }),
|
50
|
-
React.createElement(Table.Head, null, columns.map((column) =>
|
32
|
+
React.createElement(Table.Head, null, columns.map((column) => (column.type === 'text' || column.type === 'number') && column.sortable ? (React.createElement(Table.SortCell, Object.assign({ direction: sort && sort.key === column.field ? sort.direction : 'none', onClick: () => updateSort(column.field), style: { width: column.width } }, cellProps(column)), column.headerName)) : (React.createElement(Table.Cell, Object.assign({}, cellProps(column), { style: { width: column.width } }), column.headerName)))),
|
51
33
|
React.createElement(Table.Body, null,
|
52
|
-
React.createElement(List, { items:
|
53
|
-
React.createElement(List, { items: columns, renderItem: (column
|
54
|
-
React.createElement(StatusChip, Object.assign({ dense: true }, column.status(row, index,
|
55
|
-
React.createElement(SecondaryButton, Object.assign({ dense: true }, renameProperty('text', 'children', column.action(row, index,
|
34
|
+
React.createElement(List, { items: sortedRows, renderItem: (row, index) => (React.createElement(Table.Row, { key: row.id },
|
35
|
+
React.createElement(List, { items: columns, renderItem: (column) => column.type === 'status' ? (React.createElement(Table.Cell, Object.assign({}, cellProps(column)),
|
36
|
+
React.createElement(StatusChip, Object.assign({ dense: true }, column.status(row, index, sortedRows))))) : column.type === 'action' ? (React.createElement(Table.Cell, Object.assign({}, cellProps(column)),
|
37
|
+
React.createElement(SecondaryButton, Object.assign({ dense: true }, renameProperty('text', 'children', column.action(row, index, sortedRows)))))) : column.type === 'custom' ? (React.createElement(Table.Cell, Object.assign({}, cellProps(column)), column.UNSAFE_render(row, index, sortedRows))) : column.type === 'item' ? (React.createElement(Table.Cell, Object.assign({}, cellProps(column)),
|
38
|
+
React.createElement(Item, Object.assign({}, column.item(row, index, sortedRows))))) : (React.createElement(Table.Cell, Object.assign({}, cellProps(column)), column.formatter
|
39
|
+
? column.formatter(row[column.field], row, index, sortedRows)
|
40
|
+
: row[column.field])) }))) }))));
|
56
41
|
};
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRGF0YVRhYmxlL0RhdGFUYWJsZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBaUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQXlCNUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQXlCLEVBTTlCLEVBQWUsRUFBRTtRQU5hLEVBQ2hELE9BQU8sRUFDUCxJQUFJLEVBQ0osTUFBTSxHQUFHLEtBQUssRUFDZCxNQUFNLEdBQUcsTUFBTSxPQUVHLEVBRGYsSUFBSSxjQUx5Qyx1Q0FNakQsQ0FEUTtJQUVQLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsWUFBWSxFQUFLLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFH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
|
@@ -1,18 +1,41 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import omit from 'lodash/omit';
|
3
|
+
import { Overlay, useModalOverlay } from '@react-aria/overlays';
|
4
|
+
import { useDialog } from '@react-aria/dialog';
|
5
|
+
import { FocusScope } from '@react-aria/focus';
|
6
|
+
import { useId } from '@react-aria/utils';
|
7
|
+
import { useOverlayTriggerState } from '@react-stately/overlays';
|
3
8
|
import { GhostButton, SecondaryButton } from '../../../src/components/Button/Button';
|
4
9
|
import { Icon } from '../../../src/components/Icon/Icon';
|
5
10
|
import { Modal } from '../../../src/common/Modal/Modal';
|
6
11
|
import { DIALOG_ICONS_AND_COLORS } from '../../../src/common/Dialog/Dialog';
|
7
|
-
export const Dialog = ({ title, type = 'confirmation', open, children, primaryAction, secondaryAction, }) =>
|
8
|
-
React.
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
export const Dialog = ({ title, type = 'confirmation', open, children, primaryAction, secondaryAction, }) => {
|
13
|
+
const ref = React.useRef(null);
|
14
|
+
const state = useOverlayTriggerState({ isOpen: open });
|
15
|
+
const { modalProps, underlayProps } = useModalOverlay({ isDismissable: false }, state, ref);
|
16
|
+
const labelledBy = useId();
|
17
|
+
const describedBy = useId();
|
18
|
+
// useDialog() also returns 'titleProps', but it doesn't work correctly
|
19
|
+
// in this case because the title id is set to null after the second render.
|
20
|
+
// The problem (most likely) is somewhere in this component which causes
|
21
|
+
// it render twice when it is opened and that causes the useSlotId() hook
|
22
|
+
// in react-aria to think that the title is not rendered correctly.
|
23
|
+
const { dialogProps } = useDialog({ 'role': 'alertdialog', 'aria-labelledby': labelledBy, 'aria-describedby': describedBy }, ref);
|
24
|
+
if (!open) {
|
25
|
+
return null;
|
26
|
+
}
|
27
|
+
return (React.createElement(Overlay, null,
|
28
|
+
React.createElement(Modal, { open: open },
|
29
|
+
React.createElement(Modal.BackDrop, Object.assign({}, underlayProps)),
|
30
|
+
React.createElement(FocusScope, { contain: true, restoreFocus: true, autoFocus: true },
|
31
|
+
React.createElement(Modal.Dialog, Object.assign({ ref: ref, size: "sm" }, modalProps, dialogProps),
|
32
|
+
React.createElement(Modal.Header, null,
|
33
|
+
React.createElement(Icon, { icon: DIALOG_ICONS_AND_COLORS[type].icon, color: DIALOG_ICONS_AND_COLORS[type].color, fontSize: 20 }),
|
34
|
+
React.createElement(Modal.Title, { id: labelledBy, variant: "body-large", color: DIALOG_ICONS_AND_COLORS[type].color }, title)),
|
35
|
+
React.createElement(Modal.Body, { id: describedBy }, children),
|
36
|
+
React.createElement(Modal.Footer, null,
|
37
|
+
React.createElement(Modal.Actions, null,
|
38
|
+
secondaryAction && (React.createElement(GhostButton, Object.assign({ key: secondaryAction.text }, omit(secondaryAction, 'text')), secondaryAction.text)),
|
39
|
+
React.createElement(SecondaryButton, Object.assign({ key: primaryAction.text }, omit(primaryAction, 'text')), primaryAction.text))))))));
|
40
|
+
};
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQWMsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQXNCL0UsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUEwQixDQUFDLEVBQzVDLEtBQUssRUFDTCxJQUFJLEdBQUcsY0FBYyxFQUNyQixJQUFJLEVBQ0osUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEdBQ2hCLEVBQUUsRUFBRTtJQUNILE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxlQUFlLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQzNCLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQzVCLHVFQUF1RTtJQUN2RSw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLHlFQUF5RTtJQUN6RSxtRUFBbUU7SUFDbkUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FDL0IsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsRUFDekYsR0FBRyxDQUNKLENBQUM7SUFFRixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sQ0FDTCxvQkFBQyxPQUFPO1FBQ04sb0JBQUMsS0FBSyxJQUFDLElBQUksRUFBRSxJQUFJO1lBQ2Ysb0JBQUMsS0FBSyxDQUFDLFFBQVEsb0JBQUssYUFBYSxFQUFJO1lBQ3JDLG9CQUFDLFVBQVUsSUFBQyxPQUFPLFFBQUMsWUFBWSxRQUFDLFNBQVM7Z0JBQ3hDLG9CQUFDLEtBQUssQ0FBQyxNQUFNLGtCQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLElBQUksSUFBSyxVQUFVLEVBQU0sV0FBVztvQkFLL0Qsb0JBQUMsS0FBSyxDQUFDLE1BQU07d0JBQ1gsb0JBQUMsSUFBSSxJQUNILElBQUksRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQ3hDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQzFDLFFBQVEsRUFBRSxFQUFFLEdBQ1o7d0JBQ0Ysb0JBQUMsS0FBSyxDQUFDLEtBQUssSUFBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFDekYsS0FBSyxDQUNNLENBQ0Q7b0JBQ2Ysb0JBQUMsS0FBSyxDQUFDLElBQUksSUFBQyxFQUFFLEVBQUUsV0FBVyxJQUFHLFFBQVEsQ0FBYztvQkFDcEQsb0JBQUMsS0FBSyxDQUFDLE1BQU07d0JBQ1gsb0JBQUMsS0FBSyxDQUFDLE9BQU87NEJBQ1gsZUFBZSxJQUFJLENBQ2xCLG9CQUFDLFdBQVcsa0JBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxJQUFJLElBQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsR0FDdEUsZUFBZSxDQUFDLElBQUksQ0FDVCxDQUNmOzRCQUNELG9CQUFDLGVBQWUsa0JBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLElBQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsR0FDdEUsYUFBYSxDQUFDLElBQUksQ0FDSCxDQUNKLENBQ0gsQ0FDRixDQUNKLENBQ1AsQ0FDQSxDQUNYLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|