@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 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 text-primary focus-visible:before:border-primary is-hoverable:text-primary-400 relative underline outline-none
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
- @apply focus-visible:ring-primary relative inline-flex h-6 w-12 shrink-0 items-center rounded-full bg-gray-200 p-0.5
3
- outline-none ring-offset-2 focus-visible:ring-2 [&>*]:active:w-[30px];
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
- @apply focus-visible:ring-primary bg-gray-400 focus-visible:ring-offset-gray-900;
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
- @apply flex items-center justify-between space-x-4 p-4;
54
+ align-items: center;
55
+ display: flex;
56
+ gap: 16px;
57
+ justify-content: space-between;
58
+ padding: 16px;
11
59
 
12
60
  &--reversed {
13
- @apply flex-row-reverse space-x-0;
61
+ flex-direction: row-reverse;
14
62
 
15
63
  .uxf-toggle__label {
16
- @apply pr-4;
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
- @apply text-lightMedium w-full;
76
+ color: theme("colors.lightMedium");
77
+ width: 100%;
23
78
 
24
79
  :root .dark & {
25
- @apply text-darkMedium;
80
+ color: theme("colors.darkMedium");
26
81
  }
27
82
  }
28
83
 
29
84
  &__inner {
30
- @apply inline-block h-5 w-5 transform rounded-full bg-white bg-white transition-all;
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
- @apply bg-gray-900;
92
+ background-color: theme("colors.gray.900");
34
93
  }
35
94
  }
36
95
 
37
96
  &.is-selected {
38
- @apply bg-primary [&>*]:translate-x-6 [&>*]:active:translate-x-[14px];
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
- @apply bg-primary;
124
+ background-color: var(--uxf-toggle-selected-color);
42
125
  }
43
126
  }
44
127
 
45
128
  &.is-disabled {
46
- @apply pointer-events-none bg-gray-100;
129
+ background-color: theme("colors.gray.100");
130
+ pointer-events: none;
47
131
 
48
132
  :root .dark & {
49
- @apply bg-gray-700;
133
+ background-color: theme("colors.gray.700");
50
134
  }
51
135
 
52
136
  .uxf-toggle__inner {
53
- @apply bg-gray-400;
137
+ background-color: theme("colors.gray.400");
54
138
 
55
139
  :root .dark & {
56
- @apply bg-gray-500;
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(datetime_picker_1.DatetimePicker, { minDate: parsedMinDate, maxDate: parsedMaxDate, bottomContent: props.bottomContent, closePopoverHandler: close, onChange: onChange, value: props.value, unavailableDates: props.unavailableDates })))));
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
@@ -1,4 +1,5 @@
1
1
  export interface DialogVariants {
2
2
  default: true;
3
+ "drawer-right": true;
3
4
  }
4
5
  export type DialogVariant = keyof DialogVariants;
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,
@@ -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
@@ -8,5 +8,6 @@ export interface ModalWidths {
8
8
  export type ModalWidth = keyof ModalWidths;
9
9
  export interface ModalVariants {
10
10
  default: true;
11
+ "drawer-right": true;
11
12
  }
12
13
  export type ModalVariant = keyof ModalVariants;
@@ -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,2 @@
1
+ export { ModalHeader } from "./modal-header";
2
+ export type { ModalHeaderProps } from "./modal-header";
@@ -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,2 @@
1
+ import React from "react";
2
+ export declare function Default(): React.JSX.Element;
@@ -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.28.4",
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.22.0",
21
- "@uxf/core-react": "11.22.0",
20
+ "@uxf/core": "11.29.0",
21
+ "@uxf/core-react": "11.29.0",
22
22
  "@uxf/datepicker": "11.25.0",
23
- "@uxf/styles": "11.22.0",
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("./multi-combobox/README.md"));
48
- const README_md_41 = __importDefault(require("./multi-select/README.md"));
49
- const README_md_42 = __importDefault(require("./pagination/README.md"));
50
- const README_md_43 = __importDefault(require("./paper/README.md"));
51
- const README_md_44 = __importDefault(require("./radio/README.md"));
52
- const README_md_45 = __importDefault(require("./radio-group/README.md"));
53
- const README_md_46 = __importDefault(require("./raster-image/README.md"));
54
- const README_md_47 = __importDefault(require("./select/README.md"));
55
- const README_md_48 = __importDefault(require("./tabs/README.md"));
56
- const README_md_49 = __importDefault(require("./text-input/README.md"));
57
- const README_md_50 = __importDefault(require("./text-link/README.md"));
58
- const README_md_51 = __importDefault(require("./textarea/README.md"));
59
- const README_md_52 = __importDefault(require("./time-picker/README.md"));
60
- const README_md_53 = __importDefault(require("./time-picker-input/README.md"));
61
- const README_md_54 = __importDefault(require("./toggle/README.md"));
62
- const README_md_55 = __importDefault(require("./tooltip/README.md"));
63
- const README_md_56 = __importDefault(require("./typography/README.md"));
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
- "multi-combobox": README_md_40.default,
105
- "multi-select": README_md_41.default,
106
- "pagination": README_md_42.default,
107
- "paper": README_md_43.default,
108
- "radio": README_md_44.default,
109
- "radio-group": README_md_45.default,
110
- "raster-image": README_md_46.default,
111
- "select": README_md_47.default,
112
- "tabs": README_md_48.default,
113
- "text-input": README_md_49.default,
114
- "text-link": README_md_50.default,
115
- "textarea": README_md_51.default,
116
- "time-picker": README_md_52.default,
117
- "time-picker-input": README_md_53.default,
118
- "toggle": README_md_54.default,
119
- "tooltip": README_md_55.default,
120
- "typography": README_md_56.default,
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
  };
@@ -1,3 +1,4 @@
1
1
  export interface TextLinkVariants {
2
2
  default: true;
3
+ text: true;
3
4
  }
package/toggle/theme.d.ts CHANGED
@@ -3,3 +3,8 @@ export interface ToggleVariants {
3
3
  reversed: true;
4
4
  }
5
5
  export type ToggleVariant = keyof ToggleVariants;
6
+ export interface ToggleSizes {
7
+ sm: true;
8
+ default: true;
9
+ }
10
+ export type ToggleSize = keyof ToggleSizes;
@@ -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--${(_b = props.variant) !== null && _b !== void 0 ? _b : "default"}`), disabled: props.isDisabled, id: props.id, name: props.name, onChange: props.onChange, ref: ref, style: props.style },
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
  });
@@ -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 FormControlProps<ValueType, ElementType = HTMLInputElement, RestParams extends unknown[] = []> {
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;