@taiv/ui 1.12.0 → 1.13.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/assets/assets.d.ts +5 -0
- package/dist/assets/assets.d.ts.map +1 -0
- package/dist/assets/assets.js +18 -0
- package/dist/assets/icons.d.ts +6 -0
- package/dist/assets/icons.d.ts.map +1 -0
- package/dist/assets/icons.js +57 -0
- package/dist/components/Info/Modals/Modal/Modal.stories.d.ts +7 -0
- package/dist/components/Info/Modals/Modal/Modal.stories.d.ts.map +1 -0
- package/dist/components/Info/Modals/Modal/Modal.stories.js +61 -0
- package/dist/components/Info/Modals/Modals.stories.d.ts +16 -0
- package/dist/components/Info/Modals/Modals.stories.d.ts.map +1 -0
- package/dist/components/Info/Modals/Modals.stories.js +101 -0
- package/dist/components/Info/Notifications/Notifications.stories.d.ts +10 -0
- package/dist/components/Info/Notifications/Notifications.stories.d.ts.map +1 -0
- package/dist/components/Info/Notifications/Notifications.stories.js +106 -0
- package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts +1 -0
- package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/Button/Button.stories.js +50 -44
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts +7 -0
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts.map +1 -0
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.js +78 -0
- package/dist/components/Layout/Box/Box.d.ts +1 -3
- package/dist/components/Layout/Box/Box.d.ts.map +1 -1
- package/dist/components/Layout/Box/Box.js +2 -2
- package/dist/components/Layout/Box/Box.stories.d.ts +1 -2
- package/dist/components/Layout/Box/Box.stories.d.ts.map +1 -1
- package/dist/components/Layout/Box/Box.stories.js +27 -98
- package/dist/components/Layout/Card/Card.d.ts +1 -1
- package/dist/components/Layout/Card/Card.d.ts.map +1 -1
- package/dist/components/Layout/Card/Card.js +2 -2
- package/dist/components/Layout/Card/Card.stories.d.ts +10 -0
- package/dist/components/Layout/Card/Card.stories.d.ts.map +1 -0
- package/dist/components/Layout/Card/Card.stories.js +91 -0
- package/dist/components/Layout/Center/Center.d.ts +2 -3
- package/dist/components/Layout/Center/Center.d.ts.map +1 -1
- package/dist/components/Layout/Center/Center.js +2 -2
- package/dist/components/Layout/Center/Center.stories.d.ts +8 -0
- package/dist/components/Layout/Center/Center.stories.d.ts.map +1 -0
- package/dist/components/Layout/Center/Center.stories.js +69 -0
- package/dist/components/Layout/Divider/Divider.stories.d.ts +7 -0
- package/dist/components/Layout/Divider/Divider.stories.d.ts.map +1 -0
- package/dist/components/Layout/Divider/Divider.stories.js +67 -0
- package/dist/components/Layout/Frame/Frame.stories.d.ts +8 -0
- package/dist/components/Layout/Frame/Frame.stories.d.ts.map +1 -0
- package/dist/components/Layout/Frame/Frame.stories.js +77 -0
- package/dist/components/Layout/Grid/Grid.stories.d.ts +8 -0
- package/dist/components/Layout/Grid/Grid.stories.d.ts.map +1 -0
- package/dist/components/Layout/Grid/Grid.stories.js +71 -0
- package/dist/components/Layout/Group/Group.stories.d.ts +10 -0
- package/dist/components/Layout/Group/Group.stories.d.ts.map +1 -0
- package/dist/components/Layout/Group/Group.stories.js +113 -0
- package/dist/components/Layout/Loader/Loader.stories.d.ts +10 -0
- package/dist/components/Layout/Loader/Loader.stories.d.ts.map +1 -0
- package/dist/components/Layout/Loader/Loader.stories.js +67 -0
- package/dist/components/Layout/SectionCard/SectionCard.d.ts +3 -5
- package/dist/components/Layout/SectionCard/SectionCard.d.ts.map +1 -1
- package/dist/components/Layout/SectionCard/SectionCard.js +3 -8
- package/dist/components/Layout/SectionCard/SectionCard.stories.d.ts +9 -0
- package/dist/components/Layout/SectionCard/SectionCard.stories.d.ts.map +1 -0
- package/dist/components/Layout/SectionCard/SectionCard.stories.js +98 -0
- package/dist/components/Layout/Stack/Stack.stories.d.ts +1 -2
- package/dist/components/Layout/Stack/Stack.stories.d.ts.map +1 -1
- package/dist/components/Layout/Stack/Stack.stories.js +46 -66
- package/dist/components/Layout/Tabs/Tabs.d.ts +2 -4
- package/dist/components/Layout/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Layout/Tabs/Tabs.js +2 -2
- package/dist/components/Layout/Tabs/Tabs.stories.d.ts +9 -0
- package/dist/components/Layout/Tabs/Tabs.stories.d.ts.map +1 -0
- package/dist/components/Layout/Tabs/Tabs.stories.js +140 -0
- package/dist/components/Misc/IconBadge/IconBadge.stories.d.ts +7 -0
- package/dist/components/Misc/IconBadge/IconBadge.stories.d.ts.map +1 -0
- package/dist/components/Misc/IconBadge/IconBadge.stories.js +48 -0
- package/dist/components/Typography/Formula/Formula.js +2 -2
- package/dist/components/Typography/Formula/Formula.stories.d.ts +10 -0
- package/dist/components/Typography/Formula/Formula.stories.d.ts.map +1 -0
- package/dist/components/Typography/Formula/Formula.stories.js +85 -0
- package/dist/components/Typography/Fraction/Fraction.d.ts.map +1 -1
- package/dist/components/Typography/Fraction/Fraction.stories.d.ts +9 -0
- package/dist/components/Typography/Fraction/Fraction.stories.d.ts.map +1 -0
- package/dist/components/Typography/Fraction/Fraction.stories.js +86 -0
- package/dist/components/Typography/Text/Text.d.ts.map +1 -1
- package/dist/components/Typography/Text/Text.js +6 -0
- package/dist/components/Typography/Text/Text.stories.d.ts +10 -0
- package/dist/components/Typography/Text/Text.stories.d.ts.map +1 -0
- package/dist/components/Typography/Text/Text.stories.js +101 -0
- package/dist/components/Typography/Title/Title.stories.d.ts +9 -0
- package/dist/components/Typography/Title/Title.stories.d.ts.map +1 -0
- package/dist/components/Typography/Title/Title.stories.js +98 -0
- package/dist/constants/colors.d.ts +1 -0
- package/dist/constants/colors.d.ts.map +1 -1
- package/dist/constants/colors.js +1 -0
- package/dist/docs/AIGeneratedBanner.d.ts +2 -0
- package/dist/docs/AIGeneratedBanner.d.ts.map +1 -0
- package/dist/docs/AIGeneratedBanner.js +5 -0
- package/dist/docs/design/Colors.stories.d.ts +7 -0
- package/dist/docs/design/Colors.stories.d.ts.map +1 -0
- package/dist/docs/design/Colors.stories.js +28 -0
- package/dist/docs/hooks/Copy.stories.d.ts +6 -0
- package/dist/docs/hooks/Copy.stories.d.ts.map +1 -0
- package/dist/docs/hooks/Copy.stories.js +61 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/assets/assets.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,KAAK;;;GASjB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import taivIconBlack from './brand/taiv-icon-black.svg';
|
|
2
|
+
import taivIconDark from './brand/taiv-icon-dark.svg';
|
|
3
|
+
import taivIconWhite from './brand/taiv-icon-white.svg';
|
|
4
|
+
import taivLogoBlack from './brand/taiv-logo-black.svg';
|
|
5
|
+
import taivLogoDark from './brand/taiv-logo-dark.svg';
|
|
6
|
+
import taivLogoOld from './brand/taiv-logo-old.svg';
|
|
7
|
+
import taivLogoPurple from './brand/taiv-logo-purple.svg';
|
|
8
|
+
import taivLogoWhite from './brand/taiv-logo-white.svg';
|
|
9
|
+
export const brand = [
|
|
10
|
+
{ src: taivIconBlack, filename: 'taiv-icon-black.svg' },
|
|
11
|
+
{ src: taivIconDark, filename: 'taiv-icon-dark.svg' },
|
|
12
|
+
{ src: taivIconWhite, filename: 'taiv-icon-white.svg' },
|
|
13
|
+
{ src: taivLogoBlack, filename: 'taiv-logo-black.svg' },
|
|
14
|
+
{ src: taivLogoDark, filename: 'taiv-logo-dark.svg' },
|
|
15
|
+
{ src: taivLogoOld, filename: 'taiv-logo-old.svg' },
|
|
16
|
+
{ src: taivLogoPurple, filename: 'taiv-logo-purple.svg' },
|
|
17
|
+
{ src: taivLogoWhite, filename: 'taiv-logo-white.svg' },
|
|
18
|
+
];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const actions: (string | import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>)[][];
|
|
2
|
+
export declare const controls: (string | import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>)[][];
|
|
3
|
+
export declare const feedback: (string | import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>)[][];
|
|
4
|
+
export declare const navigation: string[][];
|
|
5
|
+
export declare const icons: (string | import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>)[][];
|
|
6
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/assets/icons.ts"],"names":[],"mappings":"AAuBE,eAAO,MAAM,OAAO,kJAerB,CAAC;AAEF,eAAO,MAAM,QAAQ,kJAYpB,CAAC;AAEA,eAAO,MAAM,QAAQ,kJAWpB,CAAC;AAEF,eAAO,MAAM,UAAU,YAYtB,CAAC;AAEF,eAAO,MAAM,KAAK,kJAAwD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { IconArrowDown, IconArrowUp, IconCodeVariablePlus, IconCaretDownFilled, IconCaretUpFilled, IconCircleFilled, IconDeviceTv, IconEdit, IconHistory, IconPlus, IconRefresh, IconReload, IconSwitchHorizontal, IconTerminal2, IconTransfer, IconTrash, IconVolume, IconVolume2, IconVolume3, } from '@tabler/icons-react';
|
|
2
|
+
import { colors } from '../constants/colors';
|
|
3
|
+
export const actions = [
|
|
4
|
+
[IconPlus, 'Add'],
|
|
5
|
+
[IconTrash, 'Delete'],
|
|
6
|
+
[IconEdit, 'Edit'],
|
|
7
|
+
[IconRefresh, 'Refresh'],
|
|
8
|
+
[IconReload, 'Reboot Device'],
|
|
9
|
+
[IconHistory, 'Reset Factory Settings'],
|
|
10
|
+
[IconTerminal2, 'Dashboard Shell'],
|
|
11
|
+
[IconSwitchHorizontal, 'Swap Device'],
|
|
12
|
+
[IconTransfer, 'Swap Device'],
|
|
13
|
+
[IconDeviceTv, 'Device Peripherals'],
|
|
14
|
+
['fas fa-plus', 'Add'],
|
|
15
|
+
['fas fa-trash-alt', 'Delete'],
|
|
16
|
+
['fas fa-upload', 'Upload'],
|
|
17
|
+
['fas fa-power-off', 'Power On/Off'],
|
|
18
|
+
];
|
|
19
|
+
export const controls = [
|
|
20
|
+
[IconArrowDown, 'Sort Ascending'],
|
|
21
|
+
[IconArrowUp, 'Sort Descending'],
|
|
22
|
+
[IconCaretDownFilled, 'Expand'],
|
|
23
|
+
[IconCaretUpFilled, 'Collapse'],
|
|
24
|
+
[IconVolume3, 'Volume Muted'],
|
|
25
|
+
[IconVolume2, 'Volume Low'],
|
|
26
|
+
[IconVolume, 'Volume High'],
|
|
27
|
+
['fas fa-search', 'Search'],
|
|
28
|
+
['fas fa-chevron-right', 'Next'],
|
|
29
|
+
['fas fa-chevron-left', 'Previous'],
|
|
30
|
+
['fa fa-times', 'Close'],
|
|
31
|
+
];
|
|
32
|
+
export const feedback = [
|
|
33
|
+
[IconCircleFilled, colors.success[200], 'Status Online'],
|
|
34
|
+
[IconCircleFilled, colors.error[200], 'Status Offline'],
|
|
35
|
+
['fas fa-info-circle', colors.primary[300], 'Info'],
|
|
36
|
+
['fas fa-circle-question', colors.primary[300], 'Help'],
|
|
37
|
+
['fas fa-check-circle', colors.success[200], 'Success'],
|
|
38
|
+
['fas fa-exclamation-triangle', colors.warning[200], 'Warning'],
|
|
39
|
+
['fas fa-exclamation-circle', colors.error[200], 'Error'],
|
|
40
|
+
['fas fa-trash-can', colors.error[200], 'Delete'],
|
|
41
|
+
['fas fa-copy', colors.primary[300], 'Copy to Clipboard'],
|
|
42
|
+
[IconCodeVariablePlus, 'Add Device'],
|
|
43
|
+
];
|
|
44
|
+
export const navigation = [
|
|
45
|
+
['fas fa-desktop', 'TV Control/Devices'],
|
|
46
|
+
['fas fa-cog', 'Settings'],
|
|
47
|
+
['fas fa-image', 'Content'],
|
|
48
|
+
['fas fa-random', 'Playlists'],
|
|
49
|
+
['fas fa-calendar', 'Schedule'],
|
|
50
|
+
['fas fa-dollar-sign', 'Payouts'],
|
|
51
|
+
['fa fa-ban', 'Ad Preferences'],
|
|
52
|
+
['fas fa-object-group', 'Device Groups'],
|
|
53
|
+
['fas fa-lock', 'Super Admin'],
|
|
54
|
+
['fas fa-external-link-square-alt', 'Open External Link'],
|
|
55
|
+
['fas fa-sign-out-alt', 'Sign Out'],
|
|
56
|
+
];
|
|
57
|
+
export const icons = [...actions, ...controls, ...feedback, ...navigation];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { Modal } from './Modal';
|
|
3
|
+
declare const meta: Meta<typeof Modal>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
//# sourceMappingURL=Modal.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Info/Modals/Modal/Modal.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAMhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,CAoC5B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAenC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Modal } from './Modal';
|
|
4
|
+
import { Text } from '../../../Typography/Text/Text';
|
|
5
|
+
import { Button } from '../../../Inputs/Buttons/Button/Button';
|
|
6
|
+
import { IconEdit, IconTrash } from '@tabler/icons-react';
|
|
7
|
+
import taivLogo from '../../../../assets/brand/taiv-logo-dark.svg';
|
|
8
|
+
const meta = {
|
|
9
|
+
title: 'Components/Info/Modals/Modal',
|
|
10
|
+
component: Modal,
|
|
11
|
+
parameters: {
|
|
12
|
+
layout: 'centered',
|
|
13
|
+
},
|
|
14
|
+
argTypes: {
|
|
15
|
+
title: {
|
|
16
|
+
control: { type: 'text' },
|
|
17
|
+
description: 'Modal title',
|
|
18
|
+
table: { type: { summary: 'string' } },
|
|
19
|
+
},
|
|
20
|
+
subtitle: {
|
|
21
|
+
control: { type: 'text' },
|
|
22
|
+
description: 'Optional subtitle below the title',
|
|
23
|
+
table: { type: { summary: 'string' } },
|
|
24
|
+
},
|
|
25
|
+
width: {
|
|
26
|
+
control: { type: 'text' },
|
|
27
|
+
description: 'Custom width override',
|
|
28
|
+
table: {
|
|
29
|
+
type: { summary: 'string | number' },
|
|
30
|
+
defaultValue: { summary: "'40rem'" },
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
children: { control: false, description: 'Modal content', table: { type: { summary: 'ReactNode' } } },
|
|
34
|
+
opened: { control: false, description: 'Controls the state of the modal', table: { type: { summary: 'boolean' } } },
|
|
35
|
+
onClose: { control: false, description: 'Callback function when the modal is closed', table: { type: { summary: '() => void' } } },
|
|
36
|
+
icon: { control: { type: 'select' },
|
|
37
|
+
options: ['Edit', 'Trash', 'TaivLogo'],
|
|
38
|
+
mapping: {
|
|
39
|
+
Edit: _jsx(IconEdit, {}),
|
|
40
|
+
Trash: _jsx(IconTrash, {}),
|
|
41
|
+
TaivLogo: _jsx("img", { src: taivLogo, width: 64, height: 64, alt: "Taiv Logo" }),
|
|
42
|
+
}, description: 'Custom icon or image to display at the top of the modal', table: { type: { summary: 'ReactNode' } } },
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export default meta;
|
|
46
|
+
const ModalWithState = ({ title, subtitle, children, width, icon }) => {
|
|
47
|
+
const [opened, setOpened] = useState(false);
|
|
48
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setOpened(true), children: "Open Modal" }), _jsx(Modal, { opened: opened, onClose: () => setOpened(false), title: title, subtitle: subtitle, width: width, icon: icon, children: children })] }));
|
|
49
|
+
};
|
|
50
|
+
export const Default = {
|
|
51
|
+
render: (args) => (_jsx(ModalWithState, { ...args, children: _jsx(Text, { children: "This is the modal content area where you can place any React components." }) })),
|
|
52
|
+
args: {
|
|
53
|
+
title: 'Modal Title',
|
|
54
|
+
subtitle: 'Optional subtitle text',
|
|
55
|
+
children: undefined,
|
|
56
|
+
opened: undefined,
|
|
57
|
+
onClose: undefined,
|
|
58
|
+
icon: undefined,
|
|
59
|
+
width: undefined,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { modalVariants } from './variants';
|
|
3
|
+
interface ModalHookArgs {
|
|
4
|
+
variant: keyof typeof modalVariants;
|
|
5
|
+
title: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
declare const meta: Meta<ModalHookArgs>;
|
|
9
|
+
export default meta;
|
|
10
|
+
type Story = StoryObj<ModalHookArgs>;
|
|
11
|
+
export declare const Default: Story;
|
|
12
|
+
export declare const InfoVariants: Story;
|
|
13
|
+
export declare const ConfirmationDefault: Story;
|
|
14
|
+
export declare const ConfirmationVariants: Story;
|
|
15
|
+
export declare const FormModalDemo: Story;
|
|
16
|
+
//# sourceMappingURL=Modals.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modals.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Info/Modals/Modals.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAU5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,OAAO,aAAa,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,aAAa,CA+B7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAoBrC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAeF,eAAO,MAAM,YAAY,EAAE,KAE1B,CAAC;AAsBF,eAAO,MAAM,mBAAmB,EAAE,KAOjC,CAAC;AAeF,eAAO,MAAM,oBAAoB,EAAE,KAElC,CAAC;AA8BF,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Group } from '../../Layout/Group/Group';
|
|
4
|
+
import { Stack } from '../../Layout/Stack/Stack';
|
|
5
|
+
import { Button } from '../../Inputs/Buttons/Button/Button';
|
|
6
|
+
import { useInfoModal } from '../../../hooks/useInfoModal';
|
|
7
|
+
import { useConfirmationModal } from '../../../hooks/useConfirmationModal';
|
|
8
|
+
import { FormModal } from './FormModal/FormModal';
|
|
9
|
+
import { TextInput } from '../../Inputs/TextInputs/TextInput/TextInput';
|
|
10
|
+
import { Title } from '../../Typography/Title/Title';
|
|
11
|
+
import { modalVariants } from './variants';
|
|
12
|
+
const meta = {
|
|
13
|
+
title: 'Hooks/Modals',
|
|
14
|
+
tags: ['!dev'],
|
|
15
|
+
parameters: {
|
|
16
|
+
layout: 'centered',
|
|
17
|
+
},
|
|
18
|
+
argTypes: {
|
|
19
|
+
variant: {
|
|
20
|
+
control: { type: 'select' },
|
|
21
|
+
options: Object.keys(modalVariants),
|
|
22
|
+
description: 'Preset modal style',
|
|
23
|
+
table: {
|
|
24
|
+
type: { summary: "'confirm' | 'info' | 'success' | 'error' | 'warning' | 'cancel'" },
|
|
25
|
+
defaultValue: { summary: "'info'" },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
title: {
|
|
29
|
+
control: { type: 'text' },
|
|
30
|
+
description: 'Optional title override',
|
|
31
|
+
table: {
|
|
32
|
+
type: { summary: 'string' },
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
message: {
|
|
36
|
+
control: { type: 'text' },
|
|
37
|
+
description: 'Optional message override',
|
|
38
|
+
table: {
|
|
39
|
+
type: { summary: 'string' },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export default meta;
|
|
45
|
+
const DefaultDemo = (args) => {
|
|
46
|
+
const { show } = useInfoModal();
|
|
47
|
+
return (_jsx(Button, { onClick: () => show({
|
|
48
|
+
variant: args.variant,
|
|
49
|
+
title: args.title || undefined,
|
|
50
|
+
message: args.message || undefined,
|
|
51
|
+
}), children: "Show Info Modal" }));
|
|
52
|
+
};
|
|
53
|
+
export const Default = {
|
|
54
|
+
args: {
|
|
55
|
+
variant: 'info',
|
|
56
|
+
message: undefined,
|
|
57
|
+
title: undefined,
|
|
58
|
+
},
|
|
59
|
+
render: (args) => _jsx(DefaultDemo, { ...args }),
|
|
60
|
+
};
|
|
61
|
+
const InfoVariantsDemo = () => {
|
|
62
|
+
const { show } = useInfoModal();
|
|
63
|
+
return (_jsxs(Group, { gap: "0.5rem", children: [_jsx(Button, { variant: "primary", onClick: () => show({ variant: 'info' }), children: "Info" }), _jsx(Button, { variant: "success", onClick: () => show({ variant: 'success' }), children: "Success" }), _jsx(Button, { variant: "cancel", onClick: () => show({ variant: 'error' }), children: "Error" }), _jsx(Button, { variant: "warning", onClick: () => show({ variant: 'warning' }), children: "Warning" })] }));
|
|
64
|
+
};
|
|
65
|
+
export const InfoVariants = {
|
|
66
|
+
render: () => _jsx(InfoVariantsDemo, {}),
|
|
67
|
+
};
|
|
68
|
+
const ConfirmationDefaultDemo = (args) => {
|
|
69
|
+
const { show } = useConfirmationModal();
|
|
70
|
+
return (_jsx(Button, { onClick: () => show({
|
|
71
|
+
variant: args.variant,
|
|
72
|
+
title: args.title || undefined,
|
|
73
|
+
message: args.message || undefined,
|
|
74
|
+
onConfirm: () => console.log('Confirmed'),
|
|
75
|
+
onCancel: () => console.log('Cancelled'),
|
|
76
|
+
}), children: "Show Confirmation Modal" }));
|
|
77
|
+
};
|
|
78
|
+
export const ConfirmationDefault = {
|
|
79
|
+
args: {
|
|
80
|
+
variant: 'confirm',
|
|
81
|
+
title: undefined,
|
|
82
|
+
message: undefined,
|
|
83
|
+
},
|
|
84
|
+
render: (args) => _jsx(ConfirmationDefaultDemo, { ...args }),
|
|
85
|
+
};
|
|
86
|
+
const ConfirmationVariantsDemo = () => {
|
|
87
|
+
const { show } = useConfirmationModal();
|
|
88
|
+
return (_jsxs(Group, { gap: "0.5rem", children: [_jsx(Button, { variant: "primary", onClick: () => show({ variant: 'confirm', onConfirm: () => console.log('confirmed') }), children: "Confirm" }), _jsx(Button, { variant: "cancel", onClick: () => show({ variant: 'cancel', onConfirm: () => console.log('confirmed') }), children: "Cancel" }), _jsx(Button, { variant: "warning", onClick: () => show({ variant: 'warning', onConfirm: () => console.log('confirmed') }), children: "Warning" }), _jsx(Button, { variant: "success", onClick: () => show({ variant: 'success', onConfirm: () => console.log('confirmed') }), children: "Success" })] }));
|
|
89
|
+
};
|
|
90
|
+
export const ConfirmationVariants = {
|
|
91
|
+
render: () => _jsx(ConfirmationVariantsDemo, {}),
|
|
92
|
+
};
|
|
93
|
+
const FormModalExample = () => {
|
|
94
|
+
const [opened, setOpened] = useState(false);
|
|
95
|
+
const [name, setName] = useState('');
|
|
96
|
+
const [email, setEmail] = useState('');
|
|
97
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setOpened(true), children: "Add User" }), _jsx(FormModal, { opened: opened, onClose: () => setOpened(false), onCancel: () => setOpened(false), onConfirm: () => setOpened(false), modalVariant: "info", confirmLabel: "Submit", confirmButtonDisabled: name.trim().length === 0, children: _jsxs(Stack, { gap: "1rem", align: "center", children: [_jsx(Title, { variant: "cardSubheader", align: "center", children: "Fill out the user information below." }), _jsx(TextInput, { label: "Name", placeholder: "Enter a name", value: name, onChange: (e) => setName(e.target.value) }), _jsx(TextInput, { label: "Email", placeholder: "Enter an email", value: email, onChange: (e) => setEmail(e.target.value) })] }) })] }));
|
|
98
|
+
};
|
|
99
|
+
export const FormModalDemo = {
|
|
100
|
+
render: () => _jsx(FormModalExample, {}),
|
|
101
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { NotificationProvider } from './NotificationProvider/NotificationProvider';
|
|
3
|
+
declare const meta: Meta<typeof NotificationProvider>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Variants: Story;
|
|
8
|
+
export declare const GenericError: Story;
|
|
9
|
+
export declare const AsyncNotifications: Story;
|
|
10
|
+
//# sourceMappingURL=Notifications.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notifications.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Info/Notifications/Notifications.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAKnF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,oBAAoB,CAuC3C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAqBnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAgBF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAQF,eAAO,MAAM,YAAY,EAAE,KAE1B,CAAC;AAyCF,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { NotificationProvider } from './NotificationProvider/NotificationProvider';
|
|
4
|
+
import { Group } from '../../Layout/Group/Group';
|
|
5
|
+
import { Button } from '../../Inputs/Buttons/Button/Button';
|
|
6
|
+
import { useNotifications } from '../../../hooks/useNotifications';
|
|
7
|
+
const meta = {
|
|
8
|
+
title: 'Hooks/Notifications',
|
|
9
|
+
tags: ['!dev'],
|
|
10
|
+
component: NotificationProvider,
|
|
11
|
+
parameters: {
|
|
12
|
+
layout: 'centered',
|
|
13
|
+
},
|
|
14
|
+
argTypes: {
|
|
15
|
+
variant: {
|
|
16
|
+
control: { type: 'select' },
|
|
17
|
+
options: ['success', 'error', 'warning', 'info', 'copy'],
|
|
18
|
+
description: 'Visual style and icon of the notification',
|
|
19
|
+
table: {
|
|
20
|
+
type: { summary: "'success' | 'error' | 'warning' | 'info' | 'copy'" },
|
|
21
|
+
defaultValue: { summary: "'info'" },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
message: {
|
|
25
|
+
control: { type: 'text' },
|
|
26
|
+
description: 'Notification body text',
|
|
27
|
+
table: {
|
|
28
|
+
type: { summary: 'string' },
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
title: {
|
|
32
|
+
control: { type: 'text' },
|
|
33
|
+
description: 'Optional title override (defaults to variant title)',
|
|
34
|
+
table: {
|
|
35
|
+
type: { summary: 'string' },
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
id: {
|
|
39
|
+
control: { type: 'text' },
|
|
40
|
+
description: 'Optional unique ID for tracking or hiding',
|
|
41
|
+
table: {
|
|
42
|
+
type: { summary: 'string' },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
export default meta;
|
|
48
|
+
const DefaultDemo = (args) => {
|
|
49
|
+
const { show } = useNotifications();
|
|
50
|
+
return (_jsx(Button, { onClick: () => show({
|
|
51
|
+
variant: args.variant,
|
|
52
|
+
message: args.message,
|
|
53
|
+
title: args.title || undefined,
|
|
54
|
+
id: args.id || undefined,
|
|
55
|
+
}), children: "Show Notification" }));
|
|
56
|
+
};
|
|
57
|
+
export const Default = {
|
|
58
|
+
args: {
|
|
59
|
+
variant: 'info',
|
|
60
|
+
message: 'Operation completed successfully!',
|
|
61
|
+
title: undefined,
|
|
62
|
+
id: undefined,
|
|
63
|
+
},
|
|
64
|
+
render: (args) => _jsx(DefaultDemo, { ...args }),
|
|
65
|
+
};
|
|
66
|
+
const VariantsDemo = () => {
|
|
67
|
+
const { show } = useNotifications();
|
|
68
|
+
return (_jsxs(Group, { gap: "0.5rem", children: [_jsx(Button, { variant: "success", onClick: () => show({ variant: 'success', message: 'Operation completed successfully!' }), children: "Success" }), _jsx(Button, { variant: "cancel", onClick: () => show({ variant: 'error', message: 'Something went wrong!' }), children: "Error" }), _jsx(Button, { variant: "warning", onClick: () => show({ variant: 'warning', message: 'Please review your input' }), children: "Warning" }), _jsx(Button, { variant: "primary", onClick: () => show({ variant: 'info', message: 'Here is some useful information' }), children: "Info" }), _jsx(Button, { variant: "secondary", onClick: () => show({ variant: 'copy', message: 'Copied to clipboard!' }), children: "Copy" })] }));
|
|
69
|
+
};
|
|
70
|
+
export const Variants = {
|
|
71
|
+
render: () => _jsx(VariantsDemo, {}),
|
|
72
|
+
};
|
|
73
|
+
const GenericErrorDemo = () => {
|
|
74
|
+
const { showError } = useNotifications();
|
|
75
|
+
return _jsx(Button, { variant: "cancel", onClick: showError, children: "Show Generic Error" });
|
|
76
|
+
};
|
|
77
|
+
export const GenericError = {
|
|
78
|
+
render: () => _jsx(GenericErrorDemo, {}),
|
|
79
|
+
};
|
|
80
|
+
const AsyncDemo = () => {
|
|
81
|
+
const { show, showLoading, showError, hide } = useNotifications();
|
|
82
|
+
const [isLoadingSuccess, setIsLoadingSuccess] = useState(false);
|
|
83
|
+
const [isLoadingFailure, setIsLoadingFailure] = useState(false);
|
|
84
|
+
const handleSuccess = () => {
|
|
85
|
+
setIsLoadingSuccess(true);
|
|
86
|
+
const id = showLoading({ message: 'Processing your request...' });
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
hide(id);
|
|
89
|
+
show({ variant: 'success', message: 'Operation completed!' });
|
|
90
|
+
setIsLoadingSuccess(false);
|
|
91
|
+
}, 3000);
|
|
92
|
+
};
|
|
93
|
+
const handleFailure = () => {
|
|
94
|
+
setIsLoadingFailure(true);
|
|
95
|
+
const id = showLoading({ message: 'Processing your request...' });
|
|
96
|
+
setTimeout(() => {
|
|
97
|
+
hide(id);
|
|
98
|
+
showError();
|
|
99
|
+
setIsLoadingFailure(false);
|
|
100
|
+
}, 3000);
|
|
101
|
+
};
|
|
102
|
+
return (_jsxs(Group, { gap: "0.5rem", children: [_jsx(Button, { variant: "success", onClick: handleSuccess, loading: isLoadingSuccess, children: isLoadingSuccess ? 'Processing...' : 'Async Success' }), _jsx(Button, { variant: "cancel", onClick: handleFailure, loading: isLoadingFailure, children: isLoadingFailure ? 'Processing...' : 'Async Failure' })] }));
|
|
103
|
+
};
|
|
104
|
+
export const AsyncNotifications = {
|
|
105
|
+
render: () => _jsx(AsyncDemo, {}),
|
|
106
|
+
};
|
|
@@ -7,5 +7,6 @@ export declare const Default: Story;
|
|
|
7
7
|
export declare const Variants: Story;
|
|
8
8
|
export declare const Sizes: Story;
|
|
9
9
|
export declare const States: Story;
|
|
10
|
+
export declare const TogglingButtons: Story;
|
|
10
11
|
export declare const CustomStyles: Story;
|
|
11
12
|
//# sourceMappingURL=Button.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Inputs/Buttons/Button/Button.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Inputs/Buttons/Button/Button.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAyH7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAQpB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAgC1B,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { Button } from './Button';
|
|
3
4
|
import { Group } from '../../../Layout/Group/Group';
|
|
5
|
+
import { IconPlus, IconEdit, IconTrash, IconDeviceFloppy } from '@tabler/icons-react';
|
|
4
6
|
const meta = {
|
|
5
7
|
title: 'Components/Inputs/Buttons/Button',
|
|
6
8
|
component: Button,
|
|
@@ -47,15 +49,29 @@ const meta = {
|
|
|
47
49
|
},
|
|
48
50
|
},
|
|
49
51
|
leftIcon: {
|
|
50
|
-
control: { type: '
|
|
51
|
-
|
|
52
|
+
control: { type: 'select' },
|
|
53
|
+
options: ['Plus', 'Edit', 'Trash', 'Save'],
|
|
54
|
+
mapping: {
|
|
55
|
+
Plus: _jsx(IconPlus, { size: 16 }),
|
|
56
|
+
Edit: _jsx(IconEdit, { size: 16 }),
|
|
57
|
+
Trash: _jsx(IconTrash, { size: 16 }),
|
|
58
|
+
Save: _jsx(IconDeviceFloppy, { size: 16 }),
|
|
59
|
+
},
|
|
60
|
+
description: 'Adds icon before button label - you can import any icon',
|
|
52
61
|
table: {
|
|
53
62
|
type: { summary: 'ReactNode' },
|
|
54
63
|
},
|
|
55
64
|
},
|
|
56
65
|
rightIcon: {
|
|
57
|
-
control: { type: '
|
|
58
|
-
|
|
66
|
+
control: { type: 'select' },
|
|
67
|
+
options: ['Plus', 'Edit', 'Trash', 'Save'],
|
|
68
|
+
mapping: {
|
|
69
|
+
Plus: _jsx(IconPlus, { size: 16 }),
|
|
70
|
+
Edit: _jsx(IconEdit, { size: 16 }),
|
|
71
|
+
Trash: _jsx(IconTrash, { size: 16 }),
|
|
72
|
+
Save: _jsx(IconDeviceFloppy, { size: 16 }),
|
|
73
|
+
},
|
|
74
|
+
description: 'Adds icon after button label - you can import any icon',
|
|
59
75
|
table: {
|
|
60
76
|
type: { summary: 'ReactNode' },
|
|
61
77
|
},
|
|
@@ -90,6 +106,14 @@ const meta = {
|
|
|
90
106
|
type: { summary: '() => void' },
|
|
91
107
|
},
|
|
92
108
|
},
|
|
109
|
+
toggled: {
|
|
110
|
+
control: { type: 'boolean' },
|
|
111
|
+
description: 'Toggles the button state',
|
|
112
|
+
table: {
|
|
113
|
+
type: { summary: 'boolean' },
|
|
114
|
+
defaultValue: { summary: 'false' },
|
|
115
|
+
}
|
|
116
|
+
},
|
|
93
117
|
shadow: {
|
|
94
118
|
control: { type: 'boolean' },
|
|
95
119
|
description: 'Adds shadow to the button',
|
|
@@ -110,9 +134,10 @@ export const Default = {
|
|
|
110
134
|
loading: false,
|
|
111
135
|
fullWidth: false,
|
|
112
136
|
shadow: false,
|
|
137
|
+
toggled: false,
|
|
113
138
|
leftIcon: undefined,
|
|
114
139
|
rightIcon: undefined,
|
|
115
|
-
styles:
|
|
140
|
+
styles: undefined,
|
|
116
141
|
onClick: () => { },
|
|
117
142
|
},
|
|
118
143
|
};
|
|
@@ -123,29 +148,27 @@ export const Sizes = {
|
|
|
123
148
|
render: () => (_jsxs(Group, { gap: "1.6rem", children: [_jsx(Button, { size: "sm", children: "Small" }), _jsx(Button, { size: "md", children: "Medium" }), _jsx(Button, { size: "lg", children: "Large" })] })),
|
|
124
149
|
};
|
|
125
150
|
export const States = {
|
|
126
|
-
render: () => (_jsxs(Group, { gap: "1.6rem", children: [_jsx(Button, { children: "Normal" }), _jsx(Button, { disabled: true, children: "Disabled" }), _jsx(Button, { loading: true, children: "Loading" })
|
|
151
|
+
render: () => (_jsxs(Group, { gap: "1.6rem", children: [_jsx(Button, { children: "Normal" }), _jsx(Button, { disabled: true, children: "Disabled" }), _jsx(Button, { loading: true, children: "Loading" })] })),
|
|
152
|
+
};
|
|
153
|
+
export const TogglingButtons = {
|
|
154
|
+
render: () => {
|
|
155
|
+
const [toggled, setToggled] = useState(false);
|
|
156
|
+
return (_jsx(Group, { gap: "1.6rem", children: _jsx(Button, { toggled: toggled, onClick: () => setToggled(!toggled), children: toggled ? 'On' : 'Off' }) }));
|
|
157
|
+
},
|
|
127
158
|
};
|
|
128
159
|
export const CustomStyles = {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
color: 'white',
|
|
142
|
-
border: '2px solid white',
|
|
143
|
-
'&:hover': {
|
|
144
|
-
background: 'white',
|
|
145
|
-
color: 'black',
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
}, children: "Custom Border" })] })),
|
|
160
|
+
args: {
|
|
161
|
+
children: 'Custom Button',
|
|
162
|
+
styles: {
|
|
163
|
+
root: {
|
|
164
|
+
borderRadius: '20px',
|
|
165
|
+
background: 'linear-gradient(45deg, #ff6b6b, #ee5a24)',
|
|
166
|
+
'&:hover': {
|
|
167
|
+
background: 'linear-gradient(45deg, #ee5a24, #ff6b6b)',
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
149
172
|
parameters: {
|
|
150
173
|
docs: {
|
|
151
174
|
source: {
|
|
@@ -160,24 +183,7 @@ export const CustomStyles = {
|
|
|
160
183
|
},
|
|
161
184
|
}}
|
|
162
185
|
>
|
|
163
|
-
|
|
164
|
-
</Button>
|
|
165
|
-
|
|
166
|
-
<Button
|
|
167
|
-
styles={{
|
|
168
|
-
root: {
|
|
169
|
-
borderRadius: '0px',
|
|
170
|
-
background: 'black',
|
|
171
|
-
color: 'white',
|
|
172
|
-
border: '2px solid white',
|
|
173
|
-
'&:hover': {
|
|
174
|
-
background: 'white',
|
|
175
|
-
color: 'black',
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
}}
|
|
179
|
-
>
|
|
180
|
-
Custom Border
|
|
186
|
+
Custom Button
|
|
181
187
|
</Button>`,
|
|
182
188
|
},
|
|
183
189
|
},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { AutoGrid } from './AutoGrid';
|
|
3
|
+
declare const meta: Meta<typeof AutoGrid>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
//# sourceMappingURL=AutoGrid.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoGrid.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/AutoGrid/AutoGrid.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKtC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAqD/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAkBnC,eAAO,MAAM,OAAO,EAAE,KAoBrB,CAAC"}
|