@phpsoftbox/react-softbox 0.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/LICENSE +21 -0
- package/README.md +271 -0
- package/dist/components/Alert/Alert.d.ts +11 -0
- package/dist/components/Alert/Alert.js +15 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Alert/Alert.module.css +73 -0
- package/dist/components/Badge/Badge.d.ts +8 -0
- package/dist/components/Badge/Badge.js +15 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/Badge.module.css +47 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +24 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.js +15 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.module.css +55 -0
- package/dist/components/Button/Button.d.ts +10 -0
- package/dist/components/Button/Button.js +37 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/Button.module.css +130 -0
- package/dist/components/Card/Card.d.ts +15 -0
- package/dist/components/Card/Card.js +26 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/Card.module.css +55 -0
- package/dist/components/CollapseButton/CollapseButton.d.ts +9 -0
- package/dist/components/CollapseButton/CollapseButton.js +11 -0
- package/dist/components/CollapseButton/CollapseButton.js.map +1 -0
- package/dist/components/CollapseButton/CollapseButton.module.css +57 -0
- package/dist/components/Drawer/Drawer.d.ts +19 -0
- package/dist/components/Drawer/Drawer.js +42 -0
- package/dist/components/Drawer/Drawer.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.css +104 -0
- package/dist/components/Flex/Flex.module.css +11 -0
- package/dist/components/Flex/Row.d.ts +9 -0
- package/dist/components/Flex/Row.js +14 -0
- package/dist/components/Flex/Row.js.map +1 -0
- package/dist/components/Flex/Stack.d.ts +8 -0
- package/dist/components/Flex/Stack.js +13 -0
- package/dist/components/Flex/Stack.js.map +1 -0
- package/dist/components/Grid/Grid.d.ts +11 -0
- package/dist/components/Grid/Grid.js +16 -0
- package/dist/components/Grid/Grid.js.map +1 -0
- package/dist/components/Grid/Grid.module.css +32 -0
- package/dist/components/Input/DatePicker.d.ts +6 -0
- package/dist/components/Input/DatePicker.js +6 -0
- package/dist/components/Input/DatePicker.js.map +1 -0
- package/dist/components/Input/DateRangePicker.d.ts +16 -0
- package/dist/components/Input/DateRangePicker.js +16 -0
- package/dist/components/Input/DateRangePicker.js.map +1 -0
- package/dist/components/Input/Field.d.ts +5 -0
- package/dist/components/Input/Field.js +25 -0
- package/dist/components/Input/Field.js.map +1 -0
- package/dist/components/Input/FloatLabel/FloatLabel.d.ts +9 -0
- package/dist/components/Input/FloatLabel/FloatLabel.js +22 -0
- package/dist/components/Input/FloatLabel/FloatLabel.js.map +1 -0
- package/dist/components/Input/FloatLabel/FloatLabel.module.css +41 -0
- package/dist/components/Input/FormField/FormField.d.ts +29 -0
- package/dist/components/Input/FormField/FormField.js +60 -0
- package/dist/components/Input/FormField/FormField.js.map +1 -0
- package/dist/components/Input/FormField/FormField.module.css +30 -0
- package/dist/components/Input/Input.d.ts +59 -0
- package/dist/components/Input/Input.js +34 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/Input.module.css +31 -0
- package/dist/components/Input/InputGroup.d.ts +11 -0
- package/dist/components/Input/InputGroup.js +25 -0
- package/dist/components/Input/InputGroup.js.map +1 -0
- package/dist/components/Input/InputGroup.module.css +38 -0
- package/dist/components/Input/MaskedInput.d.ts +9 -0
- package/dist/components/Input/MaskedInput.js +82 -0
- package/dist/components/Input/MaskedInput.js.map +1 -0
- package/dist/components/Input/NumberInput.d.ts +10 -0
- package/dist/components/Input/NumberInput.js +44 -0
- package/dist/components/Input/NumberInput.js.map +1 -0
- package/dist/components/Input/Radio/Radio.d.ts +7 -0
- package/dist/components/Input/Radio/Radio.js +9 -0
- package/dist/components/Input/Radio/Radio.js.map +1 -0
- package/dist/components/Input/Radio/Radio.module.css +83 -0
- package/dist/components/Input/Select/Select.d.ts +38 -0
- package/dist/components/Input/Select/Select.js +200 -0
- package/dist/components/Input/Select/Select.js.map +1 -0
- package/dist/components/Input/Select/Select.module.css +194 -0
- package/dist/components/Input/Switch/Switch.d.ts +6 -0
- package/dist/components/Input/Switch/Switch.js +9 -0
- package/dist/components/Input/Switch/Switch.js.map +1 -0
- package/dist/components/Input/Switch/Switch.module.css +62 -0
- package/dist/components/Input/Textarea/Textarea.d.ts +6 -0
- package/dist/components/Input/Textarea/Textarea.js +21 -0
- package/dist/components/Input/Textarea/Textarea.js.map +1 -0
- package/dist/components/Input/Textarea/Textarea.module.css +39 -0
- package/dist/components/Input/TimePicker.d.ts +4 -0
- package/dist/components/Input/TimePicker.js +6 -0
- package/dist/components/Input/TimePicker.js.map +1 -0
- package/dist/components/Menu/Dropdown.d.ts +13 -0
- package/dist/components/Menu/Dropdown.js +58 -0
- package/dist/components/Menu/Dropdown.js.map +1 -0
- package/dist/components/Menu/Menu.d.ts +31 -0
- package/dist/components/Menu/Menu.js +161 -0
- package/dist/components/Menu/Menu.js.map +1 -0
- package/dist/components/Menu/Menu.module.css +240 -0
- package/dist/components/Modal/Modal.d.ts +12 -0
- package/dist/components/Modal/Modal.js +31 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/Modal.module.css +90 -0
- package/dist/components/Notifier/Notifier.d.ts +17 -0
- package/dist/components/Notifier/Notifier.js +210 -0
- package/dist/components/Notifier/Notifier.js.map +1 -0
- package/dist/components/Notifier/Notifier.module.css +182 -0
- package/dist/components/Pagination/Pagination.d.ts +28 -0
- package/dist/components/Pagination/Pagination.js +70 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/Pagination.module.css +93 -0
- package/dist/components/Progress/Progress.d.ts +16 -0
- package/dist/components/Progress/Progress.js +32 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/Progress/Progress.module.css +110 -0
- package/dist/components/Tabs/Tabs.d.ts +20 -0
- package/dist/components/Tabs/Tabs.js +115 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/Tabs.module.css +101 -0
- package/dist/components/Typography/Heading.d.ts +13 -0
- package/dist/components/Typography/Heading.js +38 -0
- package/dist/components/Typography/Heading.js.map +1 -0
- package/dist/components/Typography/Text.d.ts +20 -0
- package/dist/components/Typography/Text.js +43 -0
- package/dist/components/Typography/Text.js.map +1 -0
- package/dist/components/Typography/Typography.module.css +132 -0
- package/dist/foundations/index.css +3 -0
- package/dist/foundations/layout.css +78 -0
- package/dist/foundations/tokens.css +236 -0
- package/dist/foundations/typography.css +49 -0
- package/dist/hooks/useDropdownPosition.d.ts +14 -0
- package/dist/hooks/useDropdownPosition.js +61 -0
- package/dist/hooks/useDropdownPosition.js.map +1 -0
- package/dist/hooks/useMediaQuery.d.ts +1 -0
- package/dist/hooks/useMediaQuery.js +33 -0
- package/dist/hooks/useMediaQuery.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/theme.d.ts +12 -0
- package/dist/theme.js +133 -0
- package/dist/theme.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/README.md +40 -0
- package/docs/breadcrumbs.md +47 -0
- package/docs/card.md +18 -0
- package/docs/feedback.md +38 -0
- package/docs/forms.md +166 -0
- package/docs/layout.md +39 -0
- package/docs/navigation.md +80 -0
- package/docs/overlays.md +31 -0
- package/docs/pagination.md +50 -0
- package/docs/progress.md +18 -0
- package/docs/tabs.md +34 -0
- package/docs/theme.md +49 -0
- package/docs/typography.md +26 -0
- package/package.json +49 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
.button {
|
|
2
|
+
border: 1px solid var(--btn-border, rgba(30, 51, 85, 0.6));
|
|
3
|
+
cursor: pointer;
|
|
4
|
+
font-weight: 600;
|
|
5
|
+
padding: 12px 18px;
|
|
6
|
+
border-radius: var(--radius-sm);
|
|
7
|
+
background: var(--btn-bg, rgba(15, 30, 51, 0.9));
|
|
8
|
+
color: var(--btn-color, var(--color-text));
|
|
9
|
+
box-shadow: var(--btn-shadow, none);
|
|
10
|
+
transition: transform 0.15s ease, box-shadow 0.2s ease, background 0.2s ease, border-color 0.2s ease,
|
|
11
|
+
color 0.2s ease;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.button:focus-visible {
|
|
15
|
+
outline: none;
|
|
16
|
+
box-shadow: 0 0 0 3px rgba(20, 201, 214, 0.3);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.button:hover:not(:disabled) {
|
|
20
|
+
background: var(--btn-bg-hover, var(--btn-bg));
|
|
21
|
+
box-shadow: var(--btn-shadow-hover, var(--btn-shadow, none));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.button:active:not(:disabled) {
|
|
25
|
+
transform: translateY(1px);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.button:disabled {
|
|
29
|
+
opacity: 0.6;
|
|
30
|
+
cursor: not-allowed;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.solid {
|
|
34
|
+
transform: translateY(0);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.solid:hover:not(:disabled) {
|
|
38
|
+
transform: translateY(-1px);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.outline,
|
|
42
|
+
.ghost {
|
|
43
|
+
background: transparent;
|
|
44
|
+
color: var(--btn-accent, var(--color-teal));
|
|
45
|
+
border-color: var(--btn-accent, var(--color-teal));
|
|
46
|
+
box-shadow: none;
|
|
47
|
+
--btn-bg-hover: var(--btn-accent-soft, rgba(20, 201, 214, 0.12));
|
|
48
|
+
--btn-shadow-hover: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.ghost {
|
|
52
|
+
border-color: transparent;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.outline:hover:not(:disabled),
|
|
56
|
+
.ghost:hover:not(:disabled) {
|
|
57
|
+
background: var(--btn-accent-soft, rgba(20, 201, 214, 0.12));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.variantDefault {
|
|
61
|
+
--btn-accent: var(--btn-default-accent, rgba(158, 178, 204, 0.9));
|
|
62
|
+
--btn-accent-soft: var(--btn-default-soft, rgba(30, 51, 85, 0.35));
|
|
63
|
+
--btn-bg: linear-gradient(135deg, var(--btn-default-start, #2a3750), var(--btn-default-end, #1b263c));
|
|
64
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-default-start-hover, #31415c), var(--btn-default-end-hover, #212d44));
|
|
65
|
+
--btn-border: var(--btn-default-border, rgba(30, 51, 85, 0.6));
|
|
66
|
+
--btn-color: var(--color-on-solid, var(--color-text));
|
|
67
|
+
--btn-shadow: 0 10px 24px rgba(10, 20, 35, 0.2);
|
|
68
|
+
--btn-shadow-hover: 0 14px 30px rgba(10, 20, 35, 0.28);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.variantPrimary {
|
|
72
|
+
--btn-accent: var(--btn-primary-accent, rgba(20, 201, 214, 0.9));
|
|
73
|
+
--btn-accent-soft: var(--btn-primary-soft, rgba(20, 201, 214, 0.18));
|
|
74
|
+
--btn-bg: linear-gradient(135deg, var(--btn-primary-start, #14c9d6), var(--btn-primary-end, #1e63e9));
|
|
75
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-primary-start-hover, #18d1de), var(--btn-primary-end-hover, #2a74ff));
|
|
76
|
+
--btn-border: var(--btn-primary-accent, rgba(20, 201, 214, 0.5));
|
|
77
|
+
--btn-color: var(--color-on-solid, #06201c);
|
|
78
|
+
--btn-shadow: 0 12px 30px rgba(20, 201, 214, 0.3);
|
|
79
|
+
--btn-shadow-hover: 0 16px 36px rgba(20, 201, 214, 0.4);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.variantInfo {
|
|
83
|
+
--btn-accent: var(--btn-info-accent, rgba(30, 99, 233, 0.9));
|
|
84
|
+
--btn-accent-soft: var(--btn-info-soft, rgba(30, 99, 233, 0.18));
|
|
85
|
+
--btn-bg: linear-gradient(135deg, var(--btn-info-start, #4f7bff), var(--btn-info-end, #2e5be6));
|
|
86
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-info-start-hover, #5b86ff), var(--btn-info-end-hover, #3263f0));
|
|
87
|
+
--btn-border: var(--btn-info-accent, rgba(30, 99, 233, 0.5));
|
|
88
|
+
--btn-color: var(--color-on-solid, #f0f6ff);
|
|
89
|
+
--btn-shadow: 0 12px 30px rgba(30, 99, 233, 0.3);
|
|
90
|
+
--btn-shadow-hover: 0 16px 36px rgba(30, 99, 233, 0.4);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.variantSuccess {
|
|
94
|
+
--btn-accent: var(--btn-success-accent, rgba(79, 230, 163, 0.9));
|
|
95
|
+
--btn-accent-soft: var(--btn-success-soft, rgba(79, 230, 163, 0.16));
|
|
96
|
+
--btn-bg: linear-gradient(135deg, var(--btn-success-start, #35d092), var(--btn-success-end, #1faf75));
|
|
97
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-success-start-hover, #3bd99b), var(--btn-success-end-hover, #21b87d));
|
|
98
|
+
--btn-border: var(--btn-success-accent, rgba(79, 230, 163, 0.5));
|
|
99
|
+
--btn-color: var(--color-on-solid, #06201c);
|
|
100
|
+
--btn-shadow: 0 12px 30px rgba(79, 230, 163, 0.28);
|
|
101
|
+
--btn-shadow-hover: 0 16px 36px rgba(79, 230, 163, 0.36);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.variantWarning {
|
|
105
|
+
--btn-accent: var(--btn-warning-accent, rgba(246, 200, 106, 0.95));
|
|
106
|
+
--btn-accent-soft: var(--btn-warning-soft, rgba(246, 200, 106, 0.2));
|
|
107
|
+
--btn-bg: linear-gradient(135deg, var(--btn-warning-start, #ffd166), var(--btn-warning-end, #f4a62a));
|
|
108
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-warning-start-hover, #ffd87d), var(--btn-warning-end-hover, #f7b13f));
|
|
109
|
+
--btn-border: var(--btn-warning-accent, rgba(246, 200, 106, 0.6));
|
|
110
|
+
--btn-color: var(--color-on-solid, #2b1b00);
|
|
111
|
+
--btn-shadow: 0 12px 30px rgba(246, 200, 106, 0.28);
|
|
112
|
+
--btn-shadow-hover: 0 16px 36px rgba(246, 200, 106, 0.36);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.variantDanger {
|
|
116
|
+
--btn-accent: var(--btn-danger-accent, rgba(255, 107, 107, 0.95));
|
|
117
|
+
--btn-accent-soft: var(--btn-danger-soft, rgba(255, 107, 107, 0.2));
|
|
118
|
+
--btn-bg: linear-gradient(135deg, var(--btn-danger-start, #ff8f8f), var(--btn-danger-end, #ff5b5b));
|
|
119
|
+
--btn-bg-hover: linear-gradient(135deg, var(--btn-danger-start-hover, #ff9a9a), var(--btn-danger-end-hover, #ff6868));
|
|
120
|
+
--btn-border: var(--btn-danger-accent, rgba(255, 107, 107, 0.6));
|
|
121
|
+
--btn-color: var(--color-on-solid, #2b0b0b);
|
|
122
|
+
--btn-shadow: 0 12px 30px rgba(255, 107, 107, 0.28);
|
|
123
|
+
--btn-shadow-hover: 0 16px 36px rgba(255, 107, 107, 0.36);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@media (prefers-reduced-motion: reduce) {
|
|
127
|
+
.button {
|
|
128
|
+
transition: none;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type CardProps = React.HTMLAttributes<HTMLDivElement>;
|
|
3
|
+
type CardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
title?: React.ReactNode;
|
|
5
|
+
subtitle?: React.ReactNode;
|
|
6
|
+
right?: React.ReactNode;
|
|
7
|
+
};
|
|
8
|
+
type CardSectionProps = React.HTMLAttributes<HTMLDivElement>;
|
|
9
|
+
type CardComponent = React.FC<CardProps> & {
|
|
10
|
+
Header: React.FC<CardHeaderProps>;
|
|
11
|
+
Body: React.FC<CardSectionProps>;
|
|
12
|
+
Footer: React.FC<CardSectionProps>;
|
|
13
|
+
};
|
|
14
|
+
declare const Card: CardComponent;
|
|
15
|
+
export default Card;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import styles from './Card.module.css';
|
|
3
|
+
function CardBase({ className, ...props }) {
|
|
4
|
+
const classes = [styles.card, className].filter(Boolean).join(' ');
|
|
5
|
+
return _jsx("section", { className: classes, ...props });
|
|
6
|
+
}
|
|
7
|
+
function CardHeader({ title, subtitle, right, className, children, ...props }) {
|
|
8
|
+
const classes = [styles.header, className].filter(Boolean).join(' ');
|
|
9
|
+
const left = children ?? (_jsxs(_Fragment, { children: [title ? _jsx("h3", { className: styles.title, children: title }) : null, subtitle ? _jsx("p", { className: styles.subtitle, children: subtitle }) : null] }));
|
|
10
|
+
return (_jsxs("div", { className: classes, ...props, children: [_jsx("div", { className: styles.headerMain, children: left }), right ? _jsx("div", { className: styles.headerAside, children: right }) : null] }));
|
|
11
|
+
}
|
|
12
|
+
function CardBody({ className, ...props }) {
|
|
13
|
+
const classes = [styles.body, className].filter(Boolean).join(' ');
|
|
14
|
+
return _jsx("div", { className: classes, ...props });
|
|
15
|
+
}
|
|
16
|
+
function CardFooter({ className, ...props }) {
|
|
17
|
+
const classes = [styles.footer, className].filter(Boolean).join(' ');
|
|
18
|
+
return _jsx("div", { className: classes, ...props });
|
|
19
|
+
}
|
|
20
|
+
const Card = Object.assign(CardBase, {
|
|
21
|
+
Header: CardHeader,
|
|
22
|
+
Body: CardBody,
|
|
23
|
+
Footer: CardFooter,
|
|
24
|
+
});
|
|
25
|
+
export default Card;
|
|
26
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/Card/Card.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAkBvC,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAClD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,kBAAS,SAAS,EAAE,OAAO,KAAM,KAAK,GAAI,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAmB;IAC5F,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,QAAQ,IAAI,CACvB,8BACG,KAAK,CAAC,CAAC,CAAC,aAAI,SAAS,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAM,CAAC,CAAC,CAAC,IAAI,EACxD,QAAQ,CAAC,CAAC,CAAC,YAAG,SAAS,EAAE,MAAM,CAAC,QAAQ,YAAG,QAAQ,GAAK,CAAC,CAAC,CAAC,IAAI,IAC/D,CACJ,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,KAAM,KAAK,aAChC,cAAK,SAAS,EAAE,MAAM,CAAC,UAAU,YAAG,IAAI,GAAO,EAC9C,KAAK,CAAC,CAAC,CAAC,cAAK,SAAS,EAAE,MAAM,CAAC,WAAW,YAAG,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,IAC7D,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IACzD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,cAAK,SAAS,EAAE,OAAO,KAAM,KAAK,GAAI,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,cAAK,SAAS,EAAE,OAAO,KAAM,KAAK,GAAI,CAAC;AAChD,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,UAAU;CACnB,CAAkB,CAAC;AAEpB,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.card {
|
|
2
|
+
background: var(--surface-card);
|
|
3
|
+
border: 1px solid var(--color-line);
|
|
4
|
+
border-radius: var(--radius-lg);
|
|
5
|
+
padding: var(--spacing-7);
|
|
6
|
+
box-shadow: var(--shadow-soft);
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: var(--spacing-4);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.header {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: flex-start;
|
|
15
|
+
justify-content: space-between;
|
|
16
|
+
gap: var(--spacing-4);
|
|
17
|
+
flex-wrap: wrap;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.headerMain {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: var(--spacing-1);
|
|
24
|
+
min-width: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.headerAside {
|
|
28
|
+
display: inline-flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: var(--spacing-2);
|
|
31
|
+
margin-left: auto;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.title {
|
|
35
|
+
margin: 0;
|
|
36
|
+
font-size: 18px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.subtitle {
|
|
40
|
+
margin: 0;
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
color: var(--color-muted);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.body {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
gap: var(--spacing-4);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.footer {
|
|
52
|
+
display: flex;
|
|
53
|
+
justify-content: flex-end;
|
|
54
|
+
gap: var(--spacing-3);
|
|
55
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const CollapseButton: React.ForwardRefExoticComponent<Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
3
|
+
targetId: string;
|
|
4
|
+
open: boolean;
|
|
5
|
+
label?: React.ReactNode;
|
|
6
|
+
variant?: "burger" | "chevron";
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
9
|
+
export default CollapseButton;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styles from './CollapseButton.module.css';
|
|
4
|
+
const CollapseButton = React.forwardRef(({ targetId, open, label, variant = 'chevron', className, children, ...props }, ref) => {
|
|
5
|
+
const classes = [styles.button, styles[variant], className].filter(Boolean).join(' ');
|
|
6
|
+
const content = children ?? label;
|
|
7
|
+
return (_jsxs("button", { ref: ref, type: "button", className: classes, "aria-controls": targetId, "aria-expanded": open, ...props, children: [_jsx("span", { className: styles.icon, "aria-hidden": "true" }), content ? _jsx("span", { className: styles.label, children: content }) : null] }));
|
|
8
|
+
});
|
|
9
|
+
CollapseButton.displayName = 'CollapseButton';
|
|
10
|
+
export default CollapseButton;
|
|
11
|
+
//# sourceMappingURL=CollapseButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapseButton.js","sourceRoot":"","sources":["../../../src/components/CollapseButton/CollapseButton.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAUjD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CACrC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrF,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,QAAQ,IAAI,KAAK,CAAC;IAElC,OAAO,CACL,kBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,OAAO,mBACH,QAAQ,mBACR,IAAI,KACf,KAAK,aAET,eAAM,SAAS,EAAE,MAAM,CAAC,IAAI,iBAAc,MAAM,GAAG,EAClD,OAAO,CAAC,CAAC,CAAC,eAAM,SAAS,EAAE,MAAM,CAAC,KAAK,YAAG,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC1D,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC;AAE9C,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
.button {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 8px;
|
|
5
|
+
border: 1px solid rgba(30, 99, 233, 0.3);
|
|
6
|
+
background: var(--surface-control);
|
|
7
|
+
color: var(--color-text);
|
|
8
|
+
padding: 8px 12px;
|
|
9
|
+
border-radius: 999px;
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.label {
|
|
14
|
+
font-size: 12px;
|
|
15
|
+
letter-spacing: 0.08em;
|
|
16
|
+
text-transform: uppercase;
|
|
17
|
+
color: var(--color-muted);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.icon {
|
|
21
|
+
width: 18px;
|
|
22
|
+
height: 2px;
|
|
23
|
+
background: currentColor;
|
|
24
|
+
display: inline-block;
|
|
25
|
+
position: relative;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.burger .icon::before,
|
|
29
|
+
.burger .icon::after {
|
|
30
|
+
content: "";
|
|
31
|
+
position: absolute;
|
|
32
|
+
left: 0;
|
|
33
|
+
width: 18px;
|
|
34
|
+
height: 2px;
|
|
35
|
+
background: currentColor;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.burger .icon::before {
|
|
39
|
+
top: -6px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.burger .icon::after {
|
|
43
|
+
top: 6px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.chevron .icon {
|
|
47
|
+
width: 10px;
|
|
48
|
+
height: 10px;
|
|
49
|
+
background: transparent;
|
|
50
|
+
border-right: 2px solid currentColor;
|
|
51
|
+
border-bottom: 2px solid currentColor;
|
|
52
|
+
transform: rotate(45deg);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.chevron[aria-expanded="true"] .icon {
|
|
56
|
+
transform: rotate(225deg);
|
|
57
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
open: boolean;
|
|
4
|
+
title?: string;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
footer?: React.ReactNode;
|
|
7
|
+
position?: 'left' | 'right';
|
|
8
|
+
width?: number | string;
|
|
9
|
+
closeOnBackdrop?: boolean;
|
|
10
|
+
id?: string;
|
|
11
|
+
mode?: 'overlay' | 'inline';
|
|
12
|
+
className?: string;
|
|
13
|
+
overlayClassName?: string;
|
|
14
|
+
showHeader?: boolean;
|
|
15
|
+
showClose?: boolean;
|
|
16
|
+
onClose?: () => void;
|
|
17
|
+
};
|
|
18
|
+
export default function Drawer({ open, title, children, footer, position, width, closeOnBackdrop, id, mode, className, overlayClassName, showHeader, showClose, onClose, }: Props): import("react/jsx-runtime").JSX.Element | null;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import styles from './Drawer.module.css';
|
|
5
|
+
export default function Drawer({ open, title, children, footer, position = 'right', width = 360, closeOnBackdrop = true, id, mode = 'overlay', className, overlayClassName, showHeader = true, showClose = true, onClose, }) {
|
|
6
|
+
const shouldRenderHeader = showHeader || showClose;
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
if (!open || mode === 'inline') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const handleKeyDown = (event) => {
|
|
12
|
+
if (event.key === 'Escape') {
|
|
13
|
+
onClose?.();
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
17
|
+
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
18
|
+
}, [open, onClose]);
|
|
19
|
+
if (!open) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const handleBackdropClick = (event) => {
|
|
23
|
+
if (!closeOnBackdrop) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (event.target === event.currentTarget) {
|
|
27
|
+
onClose?.();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const inlineStyle = {
|
|
31
|
+
width: typeof width === 'number' ? `${width}px` : width,
|
|
32
|
+
};
|
|
33
|
+
const panelClasses = [styles.panel, styles[position], mode === 'inline' ? styles.inline : null, className]
|
|
34
|
+
.filter(Boolean)
|
|
35
|
+
.join(' ');
|
|
36
|
+
const panel = (_jsxs("aside", { className: panelClasses, style: inlineStyle, id: id, role: mode === 'inline' ? 'complementary' : 'dialog', "aria-modal": mode === 'inline' ? undefined : 'true', "aria-label": mode === 'inline' && title ? title : undefined, children: [shouldRenderHeader ? (_jsxs("header", { className: styles.header, children: [title ? _jsx("h3", { children: title }) : _jsx("span", {}), showClose ? (_jsx("button", { type: "button", className: styles.close, onClick: onClose, "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", children: "\u00D7" })) : null] })) : null, _jsx("div", { className: styles.body, children: children }), footer ? _jsx("footer", { className: styles.footer, children: footer }) : null] }));
|
|
37
|
+
if (mode === 'inline') {
|
|
38
|
+
return panel;
|
|
39
|
+
}
|
|
40
|
+
return createPortal(_jsx("div", { className: [styles.overlay, overlayClassName].filter(Boolean).join(' '), onMouseDown: handleBackdropClick, children: panel }), document.body);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/components/Drawer/Drawer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAmBzC,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,OAAO,EAClB,KAAK,GAAG,GAAG,EACX,eAAe,GAAG,IAAI,EACtB,EAAE,EACF,IAAI,GAAG,SAAS,EAChB,SAAS,EACT,gBAAgB,EAChB,UAAU,GAAG,IAAI,EACjB,SAAS,GAAG,IAAI,EAChB,OAAO,GACD;IACN,MAAM,kBAAkB,GAAG,UAAU,IAAI,SAAS,CAAC;IAEnD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,EAAE,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,mBAAmB,GAAG,CAAC,KAAuC,EAAE,EAAE;QACtE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACzC,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAwB;QACvC,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK;KACxD,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC;SACvG,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,CACZ,iBACE,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,WAAW,EAClB,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,gBACxC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBACtC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,aAEzD,kBAAkB,CAAC,CAAC,CAAC,CACpB,kBAAQ,SAAS,EAAE,MAAM,CAAC,MAAM,aAC7B,KAAK,CAAC,CAAC,CAAC,uBAAK,KAAK,GAAM,CAAC,CAAC,CAAC,gBAAQ,EACnC,SAAS,CAAC,CAAC,CAAC,CACX,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,gBAAa,4CAAS,uBAE5E,CACV,CAAC,CAAC,CAAC,IAAI,IACD,CACV,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAE,MAAM,CAAC,IAAI,YAAG,QAAQ,GAAO,EAC5C,MAAM,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAE,MAAM,CAAC,MAAM,YAAG,MAAM,GAAU,CAAC,CAAC,CAAC,IAAI,IAC9D,CACT,CAAC;IAEF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,YAAY,CACjB,cAAK,SAAS,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,mBAAmB,YAC3G,KAAK,GACF,EACN,QAAQ,CAAC,IAAI,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
.overlay {
|
|
2
|
+
position: fixed;
|
|
3
|
+
inset: 0;
|
|
4
|
+
background: var(--overlay);
|
|
5
|
+
display: flex;
|
|
6
|
+
justify-content: flex-end;
|
|
7
|
+
z-index: 45;
|
|
8
|
+
animation: overlay-fade-in 0.2s ease;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.panel {
|
|
12
|
+
height: 100%;
|
|
13
|
+
background: var(--surface-panel);
|
|
14
|
+
border-left: 1px solid var(--color-line);
|
|
15
|
+
box-shadow: var(--shadow-soft);
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
padding: var(--spacing-6);
|
|
19
|
+
gap: var(--spacing-4);
|
|
20
|
+
animation: drawer-slide-in-right 0.24s ease;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.inline {
|
|
24
|
+
animation: none;
|
|
25
|
+
box-shadow: none;
|
|
26
|
+
position: sticky;
|
|
27
|
+
top: 0;
|
|
28
|
+
height: 100vh;
|
|
29
|
+
overflow: visible;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.left {
|
|
33
|
+
margin-right: auto;
|
|
34
|
+
border-left: none;
|
|
35
|
+
border-right: 1px solid var(--color-line);
|
|
36
|
+
animation-name: drawer-slide-in-left;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.header {
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: space-between;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.header h3 {
|
|
46
|
+
margin: 0;
|
|
47
|
+
font-size: 18px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.close {
|
|
51
|
+
border: none;
|
|
52
|
+
background: transparent;
|
|
53
|
+
color: var(--color-muted);
|
|
54
|
+
font-size: 24px;
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.body {
|
|
59
|
+
flex: 1;
|
|
60
|
+
color: var(--color-muted);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.footer {
|
|
64
|
+
display: flex;
|
|
65
|
+
justify-content: flex-end;
|
|
66
|
+
gap: var(--spacing-3);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@keyframes overlay-fade-in {
|
|
70
|
+
from {
|
|
71
|
+
opacity: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
to {
|
|
75
|
+
opacity: 1;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@keyframes drawer-slide-in-right {
|
|
80
|
+
from {
|
|
81
|
+
transform: translateX(12%);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
to {
|
|
85
|
+
transform: translateX(0);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@keyframes drawer-slide-in-left {
|
|
90
|
+
from {
|
|
91
|
+
transform: translateX(-12%);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
to {
|
|
95
|
+
transform: translateX(0);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@media (prefers-reduced-motion: reduce) {
|
|
100
|
+
.overlay,
|
|
101
|
+
.panel {
|
|
102
|
+
animation: none;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = React.HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
gap?: number | string;
|
|
4
|
+
align?: React.CSSProperties['alignItems'];
|
|
5
|
+
justify?: React.CSSProperties['justifyContent'];
|
|
6
|
+
wrap?: React.CSSProperties['flexWrap'];
|
|
7
|
+
};
|
|
8
|
+
export default function Row({ gap, align, justify, wrap, className, style, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import styles from './Flex.module.css';
|
|
3
|
+
export default function Row({ gap = '16px', align = 'center', justify = 'flex-start', wrap = 'nowrap', className, style, ...props }) {
|
|
4
|
+
const classes = [styles.row, className].filter(Boolean).join(' ');
|
|
5
|
+
const inlineStyle = {
|
|
6
|
+
...style,
|
|
7
|
+
alignItems: align,
|
|
8
|
+
justifyContent: justify,
|
|
9
|
+
flexWrap: wrap,
|
|
10
|
+
['--ui-gap']: typeof gap === 'number' ? `${gap}px` : gap,
|
|
11
|
+
};
|
|
12
|
+
return _jsx("div", { className: classes, style: inlineStyle, ...props });
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=Row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Row.js","sourceRoot":"","sources":["../../../src/components/Flex/Row.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AASvC,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,OAAO,GAAG,YAAY,EAAE,IAAI,GAAG,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAS;IACxI,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,WAAW,GAAwB;QACvC,GAAG,KAAK;QACR,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,OAAO;QACvB,QAAQ,EAAE,IAAI;QACd,CAAC,UAAoB,CAAC,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG;KACnE,CAAC;IAEF,OAAO,cAAK,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = React.HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
gap?: number | string;
|
|
4
|
+
align?: React.CSSProperties['alignItems'];
|
|
5
|
+
justify?: React.CSSProperties['justifyContent'];
|
|
6
|
+
};
|
|
7
|
+
export default function Stack({ gap, align, justify, className, style, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import styles from './Flex.module.css';
|
|
3
|
+
export default function Stack({ gap = '16px', align = 'stretch', justify = 'flex-start', className, style, ...props }) {
|
|
4
|
+
const classes = [styles.stack, className].filter(Boolean).join(' ');
|
|
5
|
+
const inlineStyle = {
|
|
6
|
+
...style,
|
|
7
|
+
alignItems: align,
|
|
8
|
+
justifyContent: justify,
|
|
9
|
+
['--ui-gap']: typeof gap === 'number' ? `${gap}px` : gap,
|
|
10
|
+
};
|
|
11
|
+
return _jsx("div", { className: classes, style: inlineStyle, ...props });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/components/Flex/Stack.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAQvC,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAS;IAC1H,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,WAAW,GAAwB;QACvC,GAAG,KAAK;QACR,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,OAAO;QACvB,CAAC,UAAoB,CAAC,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG;KACnE,CAAC;IAEF,OAAO,cAAK,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = React.HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
columns?: number;
|
|
4
|
+
columnsLg?: number;
|
|
5
|
+
columnsMd?: number;
|
|
6
|
+
columnsSm?: number;
|
|
7
|
+
gap?: number | string;
|
|
8
|
+
minWidth?: number | string;
|
|
9
|
+
};
|
|
10
|
+
export default function Grid({ columns, columnsLg, columnsMd, columnsSm, gap, minWidth, className, style, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import styles from './Grid.module.css';
|
|
3
|
+
export default function Grid({ columns = 12, columnsLg, columnsMd, columnsSm, gap = '24px', minWidth = '0', className, style, ...props }) {
|
|
4
|
+
const classes = [styles.grid, className].filter(Boolean).join(' ');
|
|
5
|
+
const inlineStyle = {
|
|
6
|
+
...style,
|
|
7
|
+
['--ui-grid-columns']: String(columns),
|
|
8
|
+
['--ui-grid-columns-lg']: columnsLg ? String(columnsLg) : undefined,
|
|
9
|
+
['--ui-grid-columns-md']: columnsMd ? String(columnsMd) : undefined,
|
|
10
|
+
['--ui-grid-columns-sm']: columnsSm ? String(columnsSm) : undefined,
|
|
11
|
+
['--ui-grid-gap']: typeof gap === 'number' ? `${gap}px` : gap,
|
|
12
|
+
['--ui-grid-min']: typeof minWidth === 'number' ? `${minWidth}px` : minWidth,
|
|
13
|
+
};
|
|
14
|
+
return _jsx("div", { className: classes, style: inlineStyle, ...props });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../../src/components/Grid/Grid.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAWvC,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,OAAO,GAAG,EAAE,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,GAAG,GAAG,MAAM,EACZ,QAAQ,GAAG,GAAG,EACd,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACF;IACN,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,WAAW,GAAwB;QACvC,GAAG,KAAK;QACR,CAAC,mBAA6B,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;QAChD,CAAC,sBAAgC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,CAAC,sBAAgC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,CAAC,sBAAgC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,CAAC,eAAyB,CAAC,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG;QACvE,CAAC,eAAyB,CAAC,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ;KACvF,CAAC;IAEF,OAAO,cAAK,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
.grid {
|
|
2
|
+
display: grid;
|
|
3
|
+
gap: var(--ui-grid-gap, 24px);
|
|
4
|
+
grid-template-columns: repeat(var(--ui-grid-columns, 12), minmax(var(--ui-grid-min, 0), 1fr));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
@media (max-width: 1280px) {
|
|
8
|
+
.grid {
|
|
9
|
+
grid-template-columns: repeat(
|
|
10
|
+
var(--ui-grid-columns-lg, var(--ui-grid-columns, 12)),
|
|
11
|
+
minmax(var(--ui-grid-min, 0), 1fr)
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@media (max-width: 1024px) {
|
|
17
|
+
.grid {
|
|
18
|
+
grid-template-columns: repeat(
|
|
19
|
+
var(--ui-grid-columns-md, var(--ui-grid-columns, 12)),
|
|
20
|
+
minmax(var(--ui-grid-min, 0), 1fr)
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (max-width: 720px) {
|
|
26
|
+
.grid {
|
|
27
|
+
grid-template-columns: repeat(
|
|
28
|
+
var(--ui-grid-columns-sm, var(--ui-grid-columns-md, var(--ui-grid-columns, 12))),
|
|
29
|
+
minmax(var(--ui-grid-min, 0), 1fr)
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import InputField from './Field';
|
|
3
|
+
export default function DatePicker({ withTime = false, ...props }) {
|
|
4
|
+
return _jsx(InputField, { ...props, type: withTime ? 'datetime-local' : 'date' });
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=DatePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../../src/components/Input/DatePicker.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,SAAS,CAAC;AAMjC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,KAAK,EAAS;IACtE,OAAO,KAAC,UAAU,OAAK,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAI,CAAC;AAC/E,CAAC"}
|