@uxf/ui 11.28.4 → 11.30.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/components.d.ts +5 -0
- package/components.js +5 -0
- package/css/colors.css +3 -0
- package/css/dialog.css +16 -0
- package/css/icon.css +10 -5
- package/css/modal-header.css +47 -0
- package/css/text-link.css +18 -3
- package/css/toggle.css +100 -16
- package/datetime-picker-input/datetime-picker-input.d.ts +7 -0
- package/datetime-picker-input/datetime-picker-input.js +4 -1
- package/dialog/theme.d.ts +1 -0
- package/icons-config.js +10 -0
- package/modal/modal.stories.js +7 -1
- package/modal/theme.d.ts +1 -0
- package/modal-header/README.md +23 -0
- package/modal-header/index.d.ts +2 -0
- package/modal-header/index.js +5 -0
- package/modal-header/modal-header.d.ts +10 -0
- package/modal-header/modal-header.js +27 -0
- package/modal-header/modal-header.spec.d.ts +1 -0
- package/modal-header/modal-header.spec.js +9 -0
- package/modal-header/modal-header.stories.d.ts +2 -0
- package/modal-header/modal-header.stories.js +19 -0
- package/package.json +4 -4
- package/readmes.d.ts +1 -0
- package/readmes.js +36 -34
- package/text-link/theme.d.ts +1 -0
- package/toggle/theme.d.ts +5 -0
- package/toggle/toggle.d.ts +2 -1
- package/toggle/toggle.js +3 -3
- package/toggle/toggle.stories.js +1 -0
- package/types/form-control-props.d.ts +3 -1
package/components.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ import * as lozengeStories from "./lozenge/lozenge.stories";
|
|
|
37
37
|
import * as messageStories from "./message/message.stories";
|
|
38
38
|
import * as modalStories from "./modal/modal.stories";
|
|
39
39
|
import * as modalDialogStories from "./modal-dialog/modal-dialog.stories";
|
|
40
|
+
import * as modalHeaderStories from "./modal-header/modal-header.stories";
|
|
40
41
|
import * as multiComboboxStories from "./multi-combobox/multi-combobox.stories";
|
|
41
42
|
import * as multiSelectStories from "./multi-select/multi-select.stories";
|
|
42
43
|
import * as paginationStories from "./pagination/pagination.stories";
|
|
@@ -211,6 +212,10 @@ export declare const components: {
|
|
|
211
212
|
readonly title: "ModalDialog";
|
|
212
213
|
readonly stories: typeof modalDialogStories;
|
|
213
214
|
};
|
|
215
|
+
readonly "modal-header": {
|
|
216
|
+
readonly title: "ModalHeader";
|
|
217
|
+
readonly stories: typeof modalHeaderStories;
|
|
218
|
+
};
|
|
214
219
|
readonly "multi-combobox": {
|
|
215
220
|
readonly title: "MultiCombobox";
|
|
216
221
|
readonly stories: typeof multiComboboxStories;
|
package/components.js
CHANGED
|
@@ -64,6 +64,7 @@ const lozengeStories = __importStar(require("./lozenge/lozenge.stories"));
|
|
|
64
64
|
const messageStories = __importStar(require("./message/message.stories"));
|
|
65
65
|
const modalStories = __importStar(require("./modal/modal.stories"));
|
|
66
66
|
const modalDialogStories = __importStar(require("./modal-dialog/modal-dialog.stories"));
|
|
67
|
+
const modalHeaderStories = __importStar(require("./modal-header/modal-header.stories"));
|
|
67
68
|
const multiComboboxStories = __importStar(require("./multi-combobox/multi-combobox.stories"));
|
|
68
69
|
const multiSelectStories = __importStar(require("./multi-select/multi-select.stories"));
|
|
69
70
|
const paginationStories = __importStar(require("./pagination/pagination.stories"));
|
|
@@ -238,6 +239,10 @@ exports.components = {
|
|
|
238
239
|
title: "ModalDialog",
|
|
239
240
|
stories: modalDialogStories
|
|
240
241
|
},
|
|
242
|
+
"modal-header": {
|
|
243
|
+
title: "ModalHeader",
|
|
244
|
+
stories: modalHeaderStories
|
|
245
|
+
},
|
|
241
246
|
"multi-combobox": {
|
|
242
247
|
title: "MultiCombobox",
|
|
243
248
|
stories: multiComboboxStories
|
package/css/colors.css
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/** base */
|
|
3
3
|
--uxf-color-base-border-inverted: #ffffff1f;
|
|
4
4
|
--uxf-color-base-border-input: #d2d6db;
|
|
5
|
+
--uxf-color-base-border-border: #e5e7eb;
|
|
5
6
|
--uxf-color-base-surface-main: #fff;
|
|
6
7
|
--uxf-color-base-surface-main-hover: #f3f4f6;
|
|
7
8
|
--uxf-color-base-surface-input-disabled: #f3f4f6;
|
|
@@ -36,6 +37,8 @@
|
|
|
36
37
|
--uxf-color-warning-border: #fec84b;
|
|
37
38
|
--uxf-color-warning-surface-default: #dc6803;
|
|
38
39
|
--uxf-color-warning-surface-default-hover: #b54707;
|
|
40
|
+
--uxf-color-warning-surface-muted: #fef0c7;
|
|
41
|
+
--uxf-color-warning-icon-on-muted: #b54707;
|
|
39
42
|
|
|
40
43
|
/** info */
|
|
41
44
|
--uxf-color-info-text: #3e4783;
|
package/css/dialog.css
CHANGED
|
@@ -49,4 +49,20 @@
|
|
|
49
49
|
border-radius: var(--panel-border-radius);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
+
|
|
53
|
+
&--variant-rightDrawer {
|
|
54
|
+
.uxf-dialog__body {
|
|
55
|
+
@screen sm {
|
|
56
|
+
align-items: stretch;
|
|
57
|
+
justify-content: flex-end;
|
|
58
|
+
padding: 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.uxf-dialog__panel {
|
|
63
|
+
@screen sm {
|
|
64
|
+
border-radius: 0;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
52
68
|
}
|
package/css/icon.css
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--uxf-icon-color: initial;
|
|
3
|
+
}
|
|
4
|
+
|
|
1
5
|
.uxf-icon {
|
|
6
|
+
color: var(--uxf-icon-color);
|
|
2
7
|
flex-shrink: 0;
|
|
3
8
|
height: var(--i-h);
|
|
4
9
|
width: var(--i-w);
|
|
@@ -8,22 +13,22 @@
|
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
&--color-default {
|
|
11
|
-
color: var(--uxf-color-base-text-high-emphasis);
|
|
16
|
+
--uxf-icon-color: var(--uxf-color-base-text-high-emphasis);
|
|
12
17
|
}
|
|
13
18
|
|
|
14
19
|
&--color-positive {
|
|
15
|
-
color: var(--uxf-color-positive-text);
|
|
20
|
+
--uxf-icon-color: var(--uxf-color-positive-text);
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
&--color-negative {
|
|
19
|
-
color: var(--uxf-color-negative-text);
|
|
24
|
+
--uxf-icon-color: var(--uxf-color-negative-text);
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
&--color-warning {
|
|
23
|
-
color: var(--uxf-color-warning-text);
|
|
28
|
+
--uxf-icon-color: var(--uxf-color-warning-text);
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
&--color-info {
|
|
27
|
-
color: var(--uxf-color-info-text);
|
|
32
|
+
--uxf-icon-color: var(--uxf-color-info-text);
|
|
28
33
|
}
|
|
29
34
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/** modal header variables */
|
|
3
|
+
--uxf-modal-header-background-color: var(--uxf-color-base-surface-main);
|
|
4
|
+
--uxf-modal-header-border-color: var(--uxf-color-base-border-border);
|
|
5
|
+
--uxf-modal-header-border-width: theme("borderWidth.DEFAULT");
|
|
6
|
+
--uxf-modal-header-description-font-size: theme("fontSize.caption");
|
|
7
|
+
--uxf-modal-header-description-font-weight: theme("fontWeight.normal");
|
|
8
|
+
--uxf-modal-header-description-text-color: var(--uxf-color-base-text-low-emphasis);
|
|
9
|
+
--uxf-modal-header-title-font-size: 18px;
|
|
10
|
+
--uxf-modal-header-title-font-weight: theme("fontWeight.semibold");
|
|
11
|
+
--uxf-modal-header-title-line-height: 1.3333;
|
|
12
|
+
--uxf-modal-header-title-text-color: var(--uxf-color-base-text-high-emphasis);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.uxf-modal-header {
|
|
16
|
+
--uxf-icon-color: var(--uxf-modal-header-title-text-color);
|
|
17
|
+
|
|
18
|
+
background-color: var(--uxf-modal-header-background-color);
|
|
19
|
+
border-bottom: var(--uxf-modal-header-border-width) solid var(--uxf-modal-header-border-color);
|
|
20
|
+
color: var(--uxf-modal-header-title-text-color);
|
|
21
|
+
display: flex;
|
|
22
|
+
font-size: var(--uxf-modal-header-title-font-size);
|
|
23
|
+
font-weight: var(--uxf-modal-header-title-font-weight);
|
|
24
|
+
line-height: var(--uxf-modal-header-title-line-height);
|
|
25
|
+
padding: theme("spacing.3") theme("spacing.2") theme("spacing.3") theme("spacing.4");
|
|
26
|
+
width: 100%;
|
|
27
|
+
|
|
28
|
+
&--has-go-back {
|
|
29
|
+
padding: theme("spacing.3") theme("spacing.2");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&__text-wrapper {
|
|
33
|
+
flex-grow: 1;
|
|
34
|
+
padding: theme("spacing.1");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&__title {
|
|
38
|
+
padding-top: 1px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&__description {
|
|
42
|
+
color: var(--uxf-modal-header-description-text-color);
|
|
43
|
+
font-size: var(--uxf-modal-header-description-font-size);
|
|
44
|
+
font-weight: var(--uxf-modal-header-description-font-weight);
|
|
45
|
+
margin-top: theme("spacing.1");
|
|
46
|
+
}
|
|
47
|
+
}
|
package/css/text-link.css
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
.uxf-text-link {
|
|
2
|
-
@apply
|
|
3
|
-
transition before:absolute
|
|
4
|
-
before:-inset-1 focus-visible:before:rounded-lg focus-visible:before:border-2;
|
|
2
|
+
@apply relative underline outline-none transition before:absolute before:-inset-1 focus-visible:before:rounded-lg focus-visible:before:border-2;
|
|
5
3
|
|
|
6
4
|
:root .dark & {
|
|
7
5
|
@apply text-primary focus-visible:before:border-primary is-hoverable:text-primary-400;
|
|
8
6
|
}
|
|
7
|
+
|
|
8
|
+
&--variant-default {
|
|
9
|
+
color: var(--uxf-color-primary-surface-default);
|
|
10
|
+
|
|
11
|
+
@apply is-hoverable:text-[--uxf-color-primary-surface-default-hover] focus-visible:before:border-[--uxf-color-primary-surface-default];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&--variant-text {
|
|
15
|
+
color: var(--uxf-color-base-text-high-emphasis);
|
|
16
|
+
|
|
17
|
+
@apply is-hoverable:text-[--uxf-color-base-text-low-emphasis] focus-visible:before:border-[--uxf-color-base-text-high-emphasis];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.is-disabled {
|
|
21
|
+
color: var(--uxf-color-base-text-disabled);
|
|
22
|
+
pointer-events: none;
|
|
23
|
+
}
|
|
9
24
|
}
|
package/css/toggle.css
CHANGED
|
@@ -1,59 +1,143 @@
|
|
|
1
1
|
.uxf-toggle {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
--uxf-toggle-selected-color: var(--uxf-color-primary-surface-default);
|
|
3
|
+
|
|
4
|
+
align-items: center;
|
|
5
|
+
background-color: theme("colors.gray.200");
|
|
6
|
+
border-radius: theme("borderRadius.full");
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
flex-shrink: 0;
|
|
9
|
+
outline: none;
|
|
10
|
+
padding: 2px;
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
@apply ring-offset-2 focus-visible:ring-2 focus-visible:ring-[--uxf-toggle-selected-color];
|
|
14
|
+
|
|
15
|
+
&--size-default {
|
|
16
|
+
height: 24px;
|
|
17
|
+
width: 48px;
|
|
18
|
+
|
|
19
|
+
.uxf-toggle__inner {
|
|
20
|
+
height: 20px;
|
|
21
|
+
width: 20px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&:active {
|
|
25
|
+
.uxf-toggle__inner {
|
|
26
|
+
width: 30px;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&--size-sm {
|
|
32
|
+
height: 16px;
|
|
33
|
+
width: 28px;
|
|
34
|
+
|
|
35
|
+
.uxf-toggle__inner {
|
|
36
|
+
height: 12px;
|
|
37
|
+
width: 12px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&:active {
|
|
41
|
+
.uxf-toggle__inner {
|
|
42
|
+
width: 16px;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
4
46
|
|
|
5
47
|
:root .dark & {
|
|
6
|
-
|
|
48
|
+
background-color: theme("colors.gray.400");
|
|
49
|
+
|
|
50
|
+
@apply focus-visible:ring-[--uxf-toggle-background-color] focus-visible:ring-offset-gray-900;
|
|
7
51
|
}
|
|
8
52
|
|
|
9
53
|
&__wrapper {
|
|
10
|
-
|
|
54
|
+
align-items: center;
|
|
55
|
+
display: flex;
|
|
56
|
+
gap: 16px;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
padding: 16px;
|
|
11
59
|
|
|
12
60
|
&--reversed {
|
|
13
|
-
|
|
61
|
+
flex-direction: row-reverse;
|
|
14
62
|
|
|
15
63
|
.uxf-toggle__label {
|
|
16
|
-
|
|
64
|
+
padding-right: 16px;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&--size-sm {
|
|
69
|
+
.uxf-toggle__label {
|
|
70
|
+
font-size: 14px;
|
|
17
71
|
}
|
|
18
72
|
}
|
|
19
73
|
}
|
|
20
74
|
|
|
21
75
|
&__label {
|
|
22
|
-
|
|
76
|
+
color: theme("colors.lightMedium");
|
|
77
|
+
width: 100%;
|
|
23
78
|
|
|
24
79
|
:root .dark & {
|
|
25
|
-
|
|
80
|
+
color: theme("colors.darkMedium");
|
|
26
81
|
}
|
|
27
82
|
}
|
|
28
83
|
|
|
29
84
|
&__inner {
|
|
30
|
-
|
|
85
|
+
background-color: theme("colors.white");
|
|
86
|
+
border-radius: theme("borderRadius.full");
|
|
87
|
+
display: inline-block;
|
|
88
|
+
|
|
89
|
+
@apply transition-all;
|
|
31
90
|
|
|
32
91
|
:root .dark & {
|
|
33
|
-
|
|
92
|
+
background-color: theme("colors.gray.900");
|
|
34
93
|
}
|
|
35
94
|
}
|
|
36
95
|
|
|
37
96
|
&.is-selected {
|
|
38
|
-
|
|
97
|
+
background-color: var(--uxf-toggle-selected-color);
|
|
98
|
+
|
|
99
|
+
&.uxf-toggle--size-default {
|
|
100
|
+
.uxf-toggle__inner {
|
|
101
|
+
transform: translateX(24px);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&:active {
|
|
105
|
+
.uxf-toggle__inner {
|
|
106
|
+
transform: translateX(14px);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&.uxf-toggle--size-sm {
|
|
112
|
+
.uxf-toggle__inner {
|
|
113
|
+
transform: translateX(12px);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&:active {
|
|
117
|
+
.uxf-toggle__inner {
|
|
118
|
+
transform: translateX(8px);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
39
122
|
|
|
40
123
|
:root .dark & {
|
|
41
|
-
|
|
124
|
+
background-color: var(--uxf-toggle-selected-color);
|
|
42
125
|
}
|
|
43
126
|
}
|
|
44
127
|
|
|
45
128
|
&.is-disabled {
|
|
46
|
-
|
|
129
|
+
background-color: theme("colors.gray.100");
|
|
130
|
+
pointer-events: none;
|
|
47
131
|
|
|
48
132
|
:root .dark & {
|
|
49
|
-
|
|
133
|
+
background-color: theme("colors.gray.700");
|
|
50
134
|
}
|
|
51
135
|
|
|
52
136
|
.uxf-toggle__inner {
|
|
53
|
-
|
|
137
|
+
background-color: theme("colors.gray.400");
|
|
54
138
|
|
|
55
139
|
:root .dark & {
|
|
56
|
-
|
|
140
|
+
background-color: theme("colors.gray.500");
|
|
57
141
|
}
|
|
58
142
|
}
|
|
59
143
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { DatetimeString } from "@uxf/core/date";
|
|
1
2
|
import React, { ReactNode } from "react";
|
|
2
3
|
import { InputWithPopoverProps } from "../_input-with-popover";
|
|
4
|
+
import { ControlProps } from "../types";
|
|
3
5
|
export declare const ALLOWED_DATETIME_FORMAT: string[];
|
|
4
6
|
export declare const DISPLAY_DATETIME_FORMAT = "D. M. YYYY H:mm";
|
|
5
7
|
export declare const BOUNDARY_DATE_FORMAT = "YYYY-MM-DD";
|
|
8
|
+
interface DatetimePickerProps extends ControlProps<DatetimeString | null> {
|
|
9
|
+
onClose: () => void;
|
|
10
|
+
}
|
|
6
11
|
export interface DatetimePickerInputProps extends Omit<InputWithPopoverProps<string | null>, "children" | "placeholder" | "triggerElement"> {
|
|
7
12
|
placeholder?: string;
|
|
8
13
|
triggerElement?: ReactNode;
|
|
@@ -10,5 +15,7 @@ export interface DatetimePickerInputProps extends Omit<InputWithPopoverProps<str
|
|
|
10
15
|
maxDate?: string;
|
|
11
16
|
unavailableDates?: Date[];
|
|
12
17
|
bottomContent?: ReactNode;
|
|
18
|
+
CustomDatetimePicker?: (props: DatetimePickerProps) => ReactNode;
|
|
13
19
|
}
|
|
14
20
|
export declare const DatetimePickerInput: React.ForwardRefExoticComponent<DatetimePickerInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
21
|
+
export {};
|
|
@@ -28,6 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.DatetimePickerInput = exports.BOUNDARY_DATE_FORMAT = exports.DISPLAY_DATETIME_FORMAT = exports.ALLOWED_DATETIME_FORMAT = void 0;
|
|
30
30
|
const cx_1 = require("@uxf/core/utils/cx");
|
|
31
|
+
const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
|
|
31
32
|
const dayjs_1 = __importStar(require("dayjs"));
|
|
32
33
|
const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
|
|
33
34
|
const react_1 = __importStar(require("react"));
|
|
@@ -78,6 +79,8 @@ exports.DatetimePickerInput = (0, react_1.forwardRef)((props, ref) => {
|
|
|
78
79
|
const parsedMinDate = getBoundaryDate(props.minDate);
|
|
79
80
|
const parsedMaxDate = getBoundaryDate(props.maxDate);
|
|
80
81
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
81
|
-
react_1.default.createElement(_input_with_popover_1._InputWithPopover, { ...props, className: className, onChange: onInputChange, placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : (0, dayjs_1.default)().format(exports.DISPLAY_DATETIME_FORMAT), ref: ref, value: value, triggerElement: (_b = props.triggerElement) !== null && _b !== void 0 ? _b : react_1.default.createElement(icon_1.Icon, { name: "calendar", size: 20 }) }, ({ close }) => (react_1.default.createElement(
|
|
82
|
+
react_1.default.createElement(_input_with_popover_1._InputWithPopover, { ...props, className: className, onChange: onInputChange, placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : (0, dayjs_1.default)().format(exports.DISPLAY_DATETIME_FORMAT), ref: ref, value: value, triggerElement: (_b = props.triggerElement) !== null && _b !== void 0 ? _b : react_1.default.createElement(icon_1.Icon, { name: "calendar", size: 20 }) }, ({ close }) => (0, is_not_nil_1.isNotNil)(props.CustomDatetimePicker) ? (react_1.default.createElement(props.CustomDatetimePicker, { value: (0, is_not_nil_1.isNotNil)(value)
|
|
83
|
+
? (0, dayjs_1.default)(value).format("YYYY-MM-DD[T]HH:mm:ssZ")
|
|
84
|
+
: null, onChange: onChange, onClose: close })) : (react_1.default.createElement(datetime_picker_1.DatetimePicker, { minDate: parsedMinDate, maxDate: parsedMaxDate, bottomContent: props.bottomContent, closePopoverHandler: close, onChange: onChange, value: props.value, unavailableDates: props.unavailableDates })))));
|
|
82
85
|
});
|
|
83
86
|
exports.DatetimePickerInput.displayName = "UxfUiDatePickerInput";
|
package/dialog/theme.d.ts
CHANGED
package/icons-config.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/** @type {import('@uxf/icons-generator/types').Config['icons']} */
|
|
2
2
|
module.exports = {
|
|
3
|
+
"angle-left": {
|
|
4
|
+
width: 320,
|
|
5
|
+
height: 512,
|
|
6
|
+
data: `<path fill="currentColor" d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/>`,
|
|
7
|
+
},
|
|
3
8
|
"arrow-left": {
|
|
4
9
|
width: 448,
|
|
5
10
|
height: 512,
|
|
@@ -110,6 +115,11 @@ module.exports = {
|
|
|
110
115
|
height: 512,
|
|
111
116
|
data: `<path fill="currentColor" d="M248.4 84.3c1.6-2.7 4.5-4.3 7.6-4.3s6 1.6 7.6 4.3L461.9 410c1.4 2.3 2.1 4.9 2.1 7.5c0 8-6.5 14.5-14.5 14.5H62.5c-8 0-14.5-6.5-14.5-14.5c0-2.7 .7-5.3 2.1-7.5L248.4 84.3zm-41-25L9.1 385c-6 9.8-9.1 21-9.1 32.5C0 452 28 480 62.5 480h387c34.5 0 62.5-28 62.5-62.5c0-11.5-3.2-22.7-9.1-32.5L304.6 59.3C294.3 42.4 275.9 32 256 32s-38.3 10.4-48.6 27.3zM288 368a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-8-184c0-13.3-10.7-24-24-24s-24 10.7-24 24v96c0 13.3 10.7 24 24 24s24-10.7 24-24V184z"/>`,
|
|
112
117
|
},
|
|
118
|
+
"triangle-exclamation-solid": {
|
|
119
|
+
width: 512,
|
|
120
|
+
height: 512,
|
|
121
|
+
data: `<path fill="currentColor" d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/>`,
|
|
122
|
+
},
|
|
113
123
|
user: {
|
|
114
124
|
width: 448,
|
|
115
125
|
height: 512,
|
package/modal/modal.stories.js
CHANGED
|
@@ -54,7 +54,13 @@ function Default() {
|
|
|
54
54
|
react_1.default.createElement("p", { className: "mb-3 text-lg font-bold" }, "Modal - disable backdrop close"),
|
|
55
55
|
react_1.default.createElement(button_1.Button, { isFullWidth: true, onClick: modal_service_1.closeModal }, "Close modal"))),
|
|
56
56
|
disableBackdropClose: true,
|
|
57
|
-
}) }, "Click to open modal - disable backdrop close")
|
|
57
|
+
}) }, "Click to open modal - disable backdrop close"),
|
|
58
|
+
react_1.default.createElement(button_1.Button, { onClick: () => (0, modal_service_1.openModal)({
|
|
59
|
+
children: (react_1.default.createElement("div", { className: "p-4" },
|
|
60
|
+
react_1.default.createElement("p", { className: "mb-3 text-lg font-bold" }, "Modal - variant right drawer"),
|
|
61
|
+
react_1.default.createElement(button_1.Button, { isFullWidth: true, onClick: modal_service_1.closeModal }, "Close modal"))),
|
|
62
|
+
variant: "drawer-right",
|
|
63
|
+
}) }, "Click to open modal - variant right drawer")));
|
|
58
64
|
return (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
|
|
59
65
|
react_1.default.createElement("div", { className: "space-y-2 p-20 lg:w-1/2" }, storyModals)));
|
|
60
66
|
}
|
package/modal/theme.d.ts
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ModalHeader
|
|
2
|
+
|
|
3
|
+
Figma: <a href="https://www.figma.com/design/InhbHrNUhDGbBvRDRonXsD/Vent-UI?node-id=5643-63799">zde</a>
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { ModalHeader } from "@uxf/ui/modal-header";
|
|
9
|
+
|
|
10
|
+
function Example() {
|
|
11
|
+
return (
|
|
12
|
+
<ModalHeader description="View and manage your time off" title="Time of details" onGoBack={() => void null} />
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## CSS dependencies
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
@import url("@uxf/ui/css/button.css");
|
|
21
|
+
@import url("@uxf/ui/css/modal-header.css");
|
|
22
|
+
@import url("@uxf/ui/css/icon.css");
|
|
23
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModalHeader = void 0;
|
|
4
|
+
var modal_header_1 = require("./modal-header");
|
|
5
|
+
Object.defineProperty(exports, "ModalHeader", { enumerable: true, get: function () { return modal_header_1.ModalHeader; } });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React, { ReactNode } from "react";
|
|
2
|
+
export interface ModalHeaderProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
onGoBack?: () => void;
|
|
5
|
+
onClose?: () => void;
|
|
6
|
+
actionsComponent?: ReactNode;
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
description?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare function ModalHeader(props: ModalHeaderProps): React.JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ModalHeader = void 0;
|
|
7
|
+
const show_1 = require("@uxf/core-react/components/show");
|
|
8
|
+
const cx_1 = require("@uxf/core/utils/cx");
|
|
9
|
+
const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
|
|
10
|
+
const react_1 = __importDefault(require("react"));
|
|
11
|
+
const button_1 = require("../button");
|
|
12
|
+
const icon_1 = require("../icon");
|
|
13
|
+
function ModalHeader(props) {
|
|
14
|
+
return (react_1.default.createElement("header", { className: (0, cx_1.cx)("uxf-modal-header", props.onGoBack && "uxf-modal-header--has-go-back") },
|
|
15
|
+
react_1.default.createElement(show_1.Show, { when: (0, is_not_nil_1.isNotNil)(props.onGoBack) },
|
|
16
|
+
react_1.default.createElement(button_1.Button, { onClick: props.onGoBack, size: "sm", variant: "text", isIconButton: true },
|
|
17
|
+
react_1.default.createElement(icon_1.Icon, { name: "angle-left" }))),
|
|
18
|
+
react_1.default.createElement("div", { className: "uxf-modal-header__text-wrapper" },
|
|
19
|
+
react_1.default.createElement("div", { className: "uxf-modal-header__title" }, props.title),
|
|
20
|
+
react_1.default.createElement(show_1.Show, { when: (0, is_not_nil_1.isNotNil)(props.description) },
|
|
21
|
+
react_1.default.createElement("div", { className: "uxf-modal-header__description" }, props.description))),
|
|
22
|
+
props.actionsComponent,
|
|
23
|
+
react_1.default.createElement(show_1.Show, { when: (0, is_not_nil_1.isNotNil)(props.onClose) },
|
|
24
|
+
react_1.default.createElement(button_1.Button, { onClick: props.onClose, size: "sm", variant: "text", isIconButton: true },
|
|
25
|
+
react_1.default.createElement(icon_1.Icon, { name: "xmark" })))));
|
|
26
|
+
}
|
|
27
|
+
exports.ModalHeader = ModalHeader;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const snap_test_1 = require("../utils/snap-test");
|
|
8
|
+
const modal_header_stories_1 = require("./modal-header.stories");
|
|
9
|
+
(0, snap_test_1.snapTest)("render stories", react_1.default.createElement(modal_header_stories_1.Default, null));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Default = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const button_1 = require("../button");
|
|
9
|
+
const icon_1 = require("../icon");
|
|
10
|
+
const modal_header_1 = require("./modal-header");
|
|
11
|
+
function Default() {
|
|
12
|
+
return (react_1.default.createElement("div", { className: "flex max-w-[480px] flex-col gap-4 p-8" },
|
|
13
|
+
react_1.default.createElement(modal_header_1.ModalHeader, { title: "Time of details", onClose: () => void null }),
|
|
14
|
+
react_1.default.createElement(modal_header_1.ModalHeader, { description: "View and manage your time off", title: "Time of details" }),
|
|
15
|
+
react_1.default.createElement(modal_header_1.ModalHeader, { description: "View and manage your time off", onClose: () => void null, onGoBack: () => alert("going back!"), title: "Time of details" }),
|
|
16
|
+
react_1.default.createElement(modal_header_1.ModalHeader, { actionsComponent: react_1.default.createElement(button_1.Button, { onClick: () => alert("action!"), size: "sm", variant: "text", isIconButton: true },
|
|
17
|
+
react_1.default.createElement(icon_1.Icon, { name: "ellipsis-vertical" })), description: "View and manage your time off", onClose: () => void null, onGoBack: () => alert("going back!"), title: "Time of details" })));
|
|
18
|
+
}
|
|
19
|
+
exports.Default = Default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/ui",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.30.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@floating-ui/react": "0.26.9",
|
|
19
19
|
"@headlessui/react": "1.7.14",
|
|
20
|
-
"@uxf/core": "11.
|
|
21
|
-
"@uxf/core-react": "11.
|
|
20
|
+
"@uxf/core": "11.29.0",
|
|
21
|
+
"@uxf/core-react": "11.29.0",
|
|
22
22
|
"@uxf/datepicker": "11.25.0",
|
|
23
|
-
"@uxf/styles": "11.
|
|
23
|
+
"@uxf/styles": "11.29.0",
|
|
24
24
|
"color2k": "2.0.3",
|
|
25
25
|
"dayjs": "1.11.10",
|
|
26
26
|
"jump.js": "1.0.2",
|
package/readmes.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ export declare const readmes: {
|
|
|
40
40
|
readonly message: typeof alertBubbleReadme;
|
|
41
41
|
readonly modal: typeof alertBubbleReadme;
|
|
42
42
|
readonly "modal-dialog": typeof alertBubbleReadme;
|
|
43
|
+
readonly "modal-header": typeof alertBubbleReadme;
|
|
43
44
|
readonly "multi-combobox": typeof alertBubbleReadme;
|
|
44
45
|
readonly "multi-select": typeof alertBubbleReadme;
|
|
45
46
|
readonly pagination: typeof alertBubbleReadme;
|
package/readmes.js
CHANGED
|
@@ -44,23 +44,24 @@ const README_md_36 = __importDefault(require("./lozenge/README.md"));
|
|
|
44
44
|
const README_md_37 = __importDefault(require("./message/README.md"));
|
|
45
45
|
const README_md_38 = __importDefault(require("./modal/README.md"));
|
|
46
46
|
const README_md_39 = __importDefault(require("./modal-dialog/README.md"));
|
|
47
|
-
const README_md_40 = __importDefault(require("./
|
|
48
|
-
const README_md_41 = __importDefault(require("./multi-
|
|
49
|
-
const README_md_42 = __importDefault(require("./
|
|
50
|
-
const README_md_43 = __importDefault(require("./
|
|
51
|
-
const README_md_44 = __importDefault(require("./
|
|
52
|
-
const README_md_45 = __importDefault(require("./radio
|
|
53
|
-
const README_md_46 = __importDefault(require("./
|
|
54
|
-
const README_md_47 = __importDefault(require("./
|
|
55
|
-
const README_md_48 = __importDefault(require("./
|
|
56
|
-
const README_md_49 = __importDefault(require("./
|
|
57
|
-
const README_md_50 = __importDefault(require("./text-
|
|
58
|
-
const README_md_51 = __importDefault(require("./
|
|
59
|
-
const README_md_52 = __importDefault(require("./
|
|
60
|
-
const README_md_53 = __importDefault(require("./time-picker
|
|
61
|
-
const README_md_54 = __importDefault(require("./
|
|
62
|
-
const README_md_55 = __importDefault(require("./
|
|
63
|
-
const README_md_56 = __importDefault(require("./
|
|
47
|
+
const README_md_40 = __importDefault(require("./modal-header/README.md"));
|
|
48
|
+
const README_md_41 = __importDefault(require("./multi-combobox/README.md"));
|
|
49
|
+
const README_md_42 = __importDefault(require("./multi-select/README.md"));
|
|
50
|
+
const README_md_43 = __importDefault(require("./pagination/README.md"));
|
|
51
|
+
const README_md_44 = __importDefault(require("./paper/README.md"));
|
|
52
|
+
const README_md_45 = __importDefault(require("./radio/README.md"));
|
|
53
|
+
const README_md_46 = __importDefault(require("./radio-group/README.md"));
|
|
54
|
+
const README_md_47 = __importDefault(require("./raster-image/README.md"));
|
|
55
|
+
const README_md_48 = __importDefault(require("./select/README.md"));
|
|
56
|
+
const README_md_49 = __importDefault(require("./tabs/README.md"));
|
|
57
|
+
const README_md_50 = __importDefault(require("./text-input/README.md"));
|
|
58
|
+
const README_md_51 = __importDefault(require("./text-link/README.md"));
|
|
59
|
+
const README_md_52 = __importDefault(require("./textarea/README.md"));
|
|
60
|
+
const README_md_53 = __importDefault(require("./time-picker/README.md"));
|
|
61
|
+
const README_md_54 = __importDefault(require("./time-picker-input/README.md"));
|
|
62
|
+
const README_md_55 = __importDefault(require("./toggle/README.md"));
|
|
63
|
+
const README_md_56 = __importDefault(require("./tooltip/README.md"));
|
|
64
|
+
const README_md_57 = __importDefault(require("./typography/README.md"));
|
|
64
65
|
exports.readmes = {
|
|
65
66
|
"alert-bubble": README_md_1.default,
|
|
66
67
|
"avatar": README_md_2.default,
|
|
@@ -101,21 +102,22 @@ exports.readmes = {
|
|
|
101
102
|
"message": README_md_37.default,
|
|
102
103
|
"modal": README_md_38.default,
|
|
103
104
|
"modal-dialog": README_md_39.default,
|
|
104
|
-
"
|
|
105
|
-
"multi-
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"radio
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"text-
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"time-picker
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
105
|
+
"modal-header": README_md_40.default,
|
|
106
|
+
"multi-combobox": README_md_41.default,
|
|
107
|
+
"multi-select": README_md_42.default,
|
|
108
|
+
"pagination": README_md_43.default,
|
|
109
|
+
"paper": README_md_44.default,
|
|
110
|
+
"radio": README_md_45.default,
|
|
111
|
+
"radio-group": README_md_46.default,
|
|
112
|
+
"raster-image": README_md_47.default,
|
|
113
|
+
"select": README_md_48.default,
|
|
114
|
+
"tabs": README_md_49.default,
|
|
115
|
+
"text-input": README_md_50.default,
|
|
116
|
+
"text-link": README_md_51.default,
|
|
117
|
+
"textarea": README_md_52.default,
|
|
118
|
+
"time-picker": README_md_53.default,
|
|
119
|
+
"time-picker-input": README_md_54.default,
|
|
120
|
+
"toggle": README_md_55.default,
|
|
121
|
+
"tooltip": README_md_56.default,
|
|
122
|
+
"typography": README_md_57.default,
|
|
121
123
|
};
|
package/text-link/theme.d.ts
CHANGED
package/toggle/theme.d.ts
CHANGED
package/toggle/toggle.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ToggleVariant } from "@uxf/ui/toggle/theme";
|
|
1
|
+
import { ToggleSize, ToggleVariant } from "@uxf/ui/toggle/theme";
|
|
2
2
|
import React, { CSSProperties, ReactNode } from "react";
|
|
3
3
|
import { FormControlProps } from "../types";
|
|
4
4
|
export interface ToggleProps extends FormControlProps<boolean | undefined> {
|
|
@@ -6,6 +6,7 @@ export interface ToggleProps extends FormControlProps<boolean | undefined> {
|
|
|
6
6
|
hiddenLabel?: boolean;
|
|
7
7
|
id?: string;
|
|
8
8
|
label: ReactNode;
|
|
9
|
+
size?: ToggleSize;
|
|
9
10
|
style?: CSSProperties;
|
|
10
11
|
variant?: ToggleVariant;
|
|
11
12
|
}
|
package/toggle/toggle.js
CHANGED
|
@@ -29,10 +29,10 @@ const classes_1 = require("@uxf/core/constants/classes");
|
|
|
29
29
|
const cx_1 = require("@uxf/core/utils/cx");
|
|
30
30
|
const react_2 = __importStar(require("react"));
|
|
31
31
|
exports.Toggle = (0, react_2.forwardRef)((props, ref) => {
|
|
32
|
-
var _a, _b;
|
|
32
|
+
var _a, _b, _c, _d;
|
|
33
33
|
return (react_2.default.createElement(react_1.Switch.Group, null,
|
|
34
|
-
react_2.default.createElement("div", { className: (0, cx_1.cx)("uxf-toggle__wrapper", `uxf-toggle__wrapper--${(_a = props.variant) !== null && _a !== void 0 ? _a : "default"}`, props.hiddenLabel && "uxf-toggle__wrapper--hiddenLabel", props.className) },
|
|
35
|
-
react_2.default.createElement(react_1.Switch, { checked: props.value, className: (0, cx_1.cx)(props.isDisabled && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID, props.isReadOnly && classes_1.CLASSES.IS_READONLY, props.value && classes_1.CLASSES.IS_SELECTED, "uxf-toggle", `uxf-toggle--${(
|
|
34
|
+
react_2.default.createElement("div", { className: (0, cx_1.cx)("uxf-toggle__wrapper", `uxf-toggle__wrapper--${(_a = props.variant) !== null && _a !== void 0 ? _a : "default"}`, `uxf-toggle__wrapper--size-${(_b = props.size) !== null && _b !== void 0 ? _b : "default"}`, props.hiddenLabel && "uxf-toggle__wrapper--hiddenLabel", props.className) },
|
|
35
|
+
react_2.default.createElement(react_1.Switch, { checked: props.value, className: (0, cx_1.cx)(props.isDisabled && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID, props.isReadOnly && classes_1.CLASSES.IS_READONLY, props.value && classes_1.CLASSES.IS_SELECTED, "uxf-toggle", `uxf-toggle--${(_c = props.variant) !== null && _c !== void 0 ? _c : "default"}`, `uxf-toggle--size-${(_d = props.size) !== null && _d !== void 0 ? _d : "default"}`), disabled: props.isDisabled, id: props.id, name: props.name, onChange: props.onChange, ref: ref, style: props.style },
|
|
36
36
|
react_2.default.createElement("span", { className: "uxf-toggle__inner" })),
|
|
37
37
|
react_2.default.createElement(react_1.Switch.Label, { hidden: props.hiddenLabel, className: "uxf-toggle__label" }, props.label))));
|
|
38
38
|
});
|
package/toggle/toggle.stories.js
CHANGED
|
@@ -36,6 +36,7 @@ function Default() {
|
|
|
36
36
|
const onChange = (0, action_1.action)("onChange", () => setChecked((prev) => !prev));
|
|
37
37
|
const storyToggles = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
38
38
|
react_1.default.createElement(index_1.Toggle, { label: "Opravdu?", onChange: onChange, value: checked, name: "toggle" }),
|
|
39
|
+
react_1.default.createElement(index_1.Toggle, { label: "Opravdu? - size sm", onChange: onChange, value: checked, name: "toggle", size: "sm" }),
|
|
39
40
|
react_1.default.createElement(index_1.Toggle, { label: "Opravdu?", onChange: onChange, value: checked, isDisabled: true, name: "toggle-disabled" }),
|
|
40
41
|
react_1.default.createElement(index_1.Toggle, { label: "Opravdu?", onChange: onChange, value: checked, hiddenLabel: true, name: "toggle-hidden-label" }),
|
|
41
42
|
react_1.default.createElement(index_1.Toggle, { label: "Opravdu? (reversed)", onChange: onChange, value: checked, variant: "reversed", name: "toggle-reversed" })));
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ChangeEvent, FocusEventHandler } from "react";
|
|
2
|
-
export interface
|
|
2
|
+
export interface ControlProps<ValueType, ElementType = HTMLInputElement, RestParams extends unknown[] = []> {
|
|
3
3
|
value: ValueType;
|
|
4
4
|
onChange: (value: ValueType, event?: ChangeEvent<ElementType>, ...args: RestParams) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface FormControlProps<ValueType, ElementType = HTMLInputElement, RestParams extends unknown[] = []> extends ControlProps<ValueType, ElementType, RestParams> {
|
|
5
7
|
onBlur?: FocusEventHandler<ElementType>;
|
|
6
8
|
onFocus?: FocusEventHandler<ElementType>;
|
|
7
9
|
name: string;
|