@uxf/ui 11.32.0 → 11.33.2

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.
@@ -5,14 +5,12 @@ import { NextLink } from "./next-link";
5
5
  export type ButtonVariant = keyof ButtonVariants;
6
6
  export type ButtonSize = keyof ButtonSizes;
7
7
  export type ButtonColor = keyof ButtonColors;
8
- export interface ButtonProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "type">, Omit<UseAnchorProps, "disabled" | "loading"> {
8
+ export interface ButtonProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "type">, UseAnchorProps {
9
9
  as?: NextLink | "a";
10
10
  color?: ButtonColor;
11
11
  isFullWidth?: boolean;
12
12
  isIconButton?: boolean;
13
13
  size?: ButtonSize;
14
14
  variant?: ButtonVariant;
15
- isLoading?: boolean;
16
- isDisabled?: boolean;
17
15
  }
18
16
  export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLAnchorElement>>;
package/button/button.js CHANGED
@@ -33,8 +33,8 @@ exports.Button = (0, react_1.forwardRef)((props, ref) => {
33
33
  const Component = as;
34
34
  const anchorProps = (0, use_anchor_props_1.useAnchorProps)({
35
35
  ...restProps,
36
- disabled: isDisabled,
37
- loading: isLoading,
36
+ isDisabled,
37
+ isLoading,
38
38
  className: (0, cx_1.cx)("uxf-button", `uxf-button--color-${color !== null && color !== void 0 ? color : "default"}`, `uxf-button--size-${size !== null && size !== void 0 ? size : "default"}`, `uxf-button--variant-${variant !== null && variant !== void 0 ? variant : "default"}`, isDisabled && "uxf-button--is-disabled", isLoading && "uxf-button--is-loading", isIconButton && "uxf-button--icon-button", isFullWidth && "uxf-button--full-width", className),
39
39
  });
40
40
  return (react_1.default.createElement(Component, { ref: ref, ...anchorProps }, typeof props.children === "string" ? (react_1.default.createElement("span", { className: "uxf-button__text" }, props.children)) : (props.children)));
@@ -29,7 +29,10 @@ const button_1 = require("@uxf/ui/button");
29
29
  const icon_1 = require("@uxf/ui/icon");
30
30
  const storybook_config_1 = require("@uxf/ui/utils/storybook-config");
31
31
  const react_1 = __importStar(require("react"));
32
+ const toggle_1 = require("../toggle");
32
33
  function Basic() {
34
+ const [isDisabled, setIsDisabled] = (0, react_1.useState)(false);
35
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
33
36
  const config = (0, storybook_config_1.useStorybookConfig)("Button");
34
37
  // eslint-disable-next-line no-console
35
38
  const onClick = console.log;
@@ -37,7 +40,9 @@ function Basic() {
37
40
  const gridTemplateColumns = `repeat(${gridColumnsCount}, 180px)`;
38
41
  return (react_1.default.createElement("div", { className: "p-4" },
39
42
  react_1.default.createElement("div", { className: "grid gap-3 p-4", style: { gridTemplateColumns } },
40
- react_1.default.createElement("div", null),
43
+ react_1.default.createElement("div", null,
44
+ react_1.default.createElement(toggle_1.Toggle, { className: "p-0", label: "Disabled", name: "is-disabled", onChange: (value) => setIsDisabled(Boolean(value)), size: "sm", value: isDisabled }),
45
+ react_1.default.createElement(toggle_1.Toggle, { className: "p-0 pt-2", label: "Loading", name: "is-loading", onChange: (value) => setIsLoading(Boolean(value)), size: "sm", value: isLoading })),
41
46
  config.variants.map((variant) => (react_1.default.createElement("div", { className: "border-b border-blue-500 pb-2 text-center text-xs text-gray-400", key: variant, style: { gridColumn: "span 4" } },
42
47
  "variant=",
43
48
  variant))),
@@ -51,8 +56,8 @@ function Basic() {
51
56
  "color=",
52
57
  color),
53
58
  config.variants.map((variant) => (react_1.default.createElement(react_1.Fragment, { key: variant }, config.sizes.map((size) => (react_1.default.createElement("div", { className: "flex items-center justify-center gap-2", key: `${size}${color}${variant}` },
54
- react_1.default.createElement(button_1.Button, { color: color, onClick: onClick, size: size, variant: variant }, "Button"),
55
- react_1.default.createElement(button_1.Button, { color: color, isIconButton: true, onClick: onClick, size: size, variant: variant },
59
+ react_1.default.createElement(button_1.Button, { color: color, isDisabled: isDisabled, isLoading: isLoading, onClick: onClick, size: size, variant: variant }, "Button"),
60
+ react_1.default.createElement(button_1.Button, { color: color, isDisabled: isDisabled, isIconButton: true, isLoading: isLoading, onClick: onClick, size: size, variant: variant },
56
61
  react_1.default.createElement(icon_1.Icon, { name: "triangle-exclamation" }))))))))))))));
57
62
  }
58
63
  function Default() {
@@ -9,6 +9,7 @@ export type SingleButtonProps = Omit<ButtonProps, "children"> & {
9
9
  export interface ButtonListProps {
10
10
  buttons: SingleButtonProps[];
11
11
  className?: string;
12
+ classNameDropdown?: string;
12
13
  openButton?: SingleButtonProps;
13
14
  visibleButtonsCount: number;
14
15
  color?: ButtonProps["color"];
@@ -39,7 +39,7 @@ const MenuButton = (0, react_3.forwardRef)((props, ref) => {
39
39
  const { variant, color, isIconButton, isFullWidth, size, icon, label, className, ...restProps } = props;
40
40
  const anchorProps = (0, use_anchor_props_1.useAnchorProps)({
41
41
  ...restProps,
42
- className: (0, cx_1.cx)("uxf-button-list__menu-button", className),
42
+ className: (0, cx_1.cx)("uxf-button-list__menu-button", `uxf-button-list__menu-button--color-${color}`, `uxf-button-list__menu-button--variant-${variant}`, className),
43
43
  });
44
44
  return (react_3.default.createElement("a", { ref: ref, ...anchorProps },
45
45
  icon && react_3.default.createElement(icon_1.Icon, { className: "uxf-button-list__menu-button-icon", name: icon }),
@@ -73,9 +73,9 @@ const ButtonList = (props) => {
73
73
  openButtonIcon && (react_3.default.createElement(icon_1.Icon, { className: "uxf-button-list__open-button-icon", name: openButtonIcon })),
74
74
  openButtonLabel && (react_3.default.createElement("span", { className: "uxf-button-list__open-button-label" }, openButtonLabel))),
75
75
  open && (react_3.default.createElement(react_1.FloatingPortal, null,
76
- react_3.default.createElement(react_2.Menu.Items, { className: "uxf-button-list__menu-items", ref: dropdown.refs.setFloating, style: dropdown.floatingStyles }, restButtons.map((button, index) => {
76
+ react_3.default.createElement(react_2.Menu.Items, { className: (0, cx_1.cx)("uxf-button-list__menu-items", props.classNameDropdown), ref: dropdown.refs.setFloating, style: dropdown.floatingStyles }, restButtons.map((button, index) => {
77
77
  var _a, _b, _c;
78
- return (react_3.default.createElement(react_2.Menu.Item, { key: index },
78
+ return (react_3.default.createElement(react_2.Menu.Item, { disabled: button.isDisabled, key: index },
79
79
  react_3.default.createElement(MenuButton, { ...button, color: (_a = button.color) !== null && _a !== void 0 ? _a : props.color, size: (_b = button.size) !== null && _b !== void 0 ? _b : props.size, variant: (_c = button.variant) !== null && _c !== void 0 ? _c : props.variant })));
80
80
  }))))));
81
81
  }))));
@@ -15,7 +15,7 @@ function Default() {
15
15
  const component = (react_1.default.createElement(react_1.default.Fragment, null,
16
16
  react_1.default.createElement(index_1.ButtonList, { buttons: [
17
17
  { label: "First item" },
18
- { label: "Second item" },
18
+ { label: "Second item", color: "negative" },
19
19
  { label: "Third item" },
20
20
  { label: "Fourth item", isDisabled: true },
21
21
  { label: "Fifth item" },
@@ -1,17 +1,33 @@
1
1
  .uxf-button-list {
2
- @apply flex items-center space-x-2;
2
+ align-items: center;
3
+ display: flex;
4
+ gap: theme("spacing.2");
3
5
 
4
6
  &__menu {
5
- @apply relative;
6
-
7
7
  display: flex;
8
+ position: relative;
8
9
  }
9
10
 
10
11
  &__menu-items {
11
- @apply z-dropdown absolute right-0 mt-2 w-40 divide-y divide-gray-100 rounded-md bg-white shadow-lg ring-1 ring-black/5 focus:outline-none;
12
+ background-color: theme("colors.white");
13
+ border-radius: theme("borderRadius.md");
14
+ margin-top: theme("spacing.2");
15
+ overflow: auto;
16
+ position: absolute;
17
+ right: 0;
18
+ width: theme("width.40");
19
+ z-index: theme("zIndex.dropdown");
20
+
21
+ &:focus-visible {
22
+ outline: none;
23
+ }
24
+
25
+ @apply divide-y divide-gray-100 shadow-lg ring-1 ring-black/5;
12
26
 
13
27
  :root .dark & {
14
- @apply divide-gray-700 bg-gray-900 ring-white/10;
28
+ background-color: theme("colors.gray.900");
29
+
30
+ @apply divide-gray-700 ring-white/10;
15
31
  }
16
32
  }
17
33
 
@@ -24,25 +40,41 @@
24
40
  }
25
41
 
26
42
  &__menu-button {
27
- @apply is-hoverable:hover:cursor-pointer flex space-x-3 px-3 py-2 text-sm text-black hover:text-gray-800;
43
+ color: theme("colors.lightHigh");
44
+ display: flex;
45
+ gap: theme("spacing.3");
46
+ padding: theme("spacing.2") theme("spacing.3");
47
+
48
+ @apply is-hoverable:cursor-pointer is-hoverable:opacity-75 text-sm transition-opacity;
28
49
 
29
50
  :root .dark & {
30
- @apply text-white hover:text-gray-200;
51
+ color: theme("colors.darkHigh");
31
52
  }
32
53
 
33
54
  &-icon {
34
- @apply text-lightMedium w-3;
55
+ color: theme("colors.lightMedium");
56
+ width: theme("width.3");
35
57
 
36
58
  :root .dark & {
37
- @apply text-darkMedium;
59
+ color: theme("colors.darkMedium");
38
60
  }
39
61
  }
40
62
 
41
63
  &.is-disabled {
42
- @apply text-lightLow;
64
+ color: theme("colors.lightLow");
43
65
 
44
66
  :root .dark & {
45
- @apply text-darkLow;
67
+ color: theme("colors.darkLow");
68
+ }
69
+ }
70
+
71
+ &--color {
72
+ &-negative {
73
+ color: theme("colors.red.500");
74
+
75
+ .uxf-button-list__menu-button-icon {
76
+ color: theme("colors.red.500");
77
+ }
46
78
  }
47
79
  }
48
80
  }
package/css/colors.css CHANGED
@@ -5,6 +5,7 @@
5
5
  --uxf-color-base-border-border: #e5e7eb;
6
6
  --uxf-color-base-surface-main: #fff;
7
7
  --uxf-color-base-surface-main-hover: #f3f4f6;
8
+ --uxf-color-base-surface-background: #f9fafb;
8
9
  --uxf-color-base-surface-input-disabled: #f3f4f6;
9
10
  --uxf-color-base-surface-disabled: #d2d6db;
10
11
  --uxf-color-base-surface-inverted-main: #ffffff14;
@@ -50,8 +51,10 @@
50
51
  /** base */
51
52
  --uxf-color-base-border-inverted: #3842501f;
52
53
  --uxf-color-base-border-input: #384250;
54
+ --uxf-color-base-border-border: #e5e7eb1f;
53
55
  --uxf-color-base-surface-main: #111927;
54
56
  --uxf-color-base-surface-main-hover: #1f2a37;
57
+ --uxf-color-base-surface-background: #1f2a37;
55
58
  --uxf-color-base-surface-input-disabled: #4d5761;
56
59
  --uxf-color-base-surface-disabled: #d2d6db;
57
60
  --uxf-color-base-surface-inverted-main: #20293914;
@@ -84,6 +87,8 @@
84
87
  --uxf-color-warning-border: #dc6803;
85
88
  --uxf-color-warning-surface-default: #fdb022;
86
89
  --uxf-color-warning-surface-default-hover: #fec84b;
90
+ --uxf-color-warning-surface-muted: #93370c;
91
+ --uxf-color-warning-icon-on-muted: #fec84b;
87
92
 
88
93
  /** info */
89
94
  --uxf-color-info-text: #b3b8db;
package/css/dialog.css CHANGED
@@ -61,6 +61,7 @@
61
61
 
62
62
  .uxf-dialog__panel {
63
63
  @screen sm {
64
+ border-left: theme("borderWidth.DEFAULT") solid var(--uxf-color-base-border-border);
64
65
  border-radius: 0;
65
66
  }
66
67
  }
@@ -1,18 +1,18 @@
1
1
  :root {
2
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
3
  --uxf-modal-header-border-width: theme("borderWidth.DEFAULT");
6
4
  --uxf-modal-header-description-font-size: theme("fontSize.caption");
7
5
  --uxf-modal-header-description-font-weight: theme("fontWeight.normal");
8
- --uxf-modal-header-description-text-color: var(--uxf-color-base-text-low-emphasis);
9
6
  --uxf-modal-header-title-font-size: 18px;
10
7
  --uxf-modal-header-title-font-weight: theme("fontWeight.semibold");
11
8
  --uxf-modal-header-title-line-height: 1.3333;
12
- --uxf-modal-header-title-text-color: var(--uxf-color-base-text-high-emphasis);
13
9
  }
14
10
 
15
11
  .uxf-modal-header {
12
+ --uxf-modal-header-background-color: var(--uxf-color-base-surface-main);
13
+ --uxf-modal-header-border-color: var(--uxf-color-base-border-border);
14
+ --uxf-modal-header-description-text-color: var(--uxf-color-base-text-low-emphasis);
15
+ --uxf-modal-header-title-text-color: var(--uxf-color-base-text-high-emphasis);
16
16
  --uxf-icon-color: var(--uxf-modal-header-title-text-color);
17
17
 
18
18
  background-color: var(--uxf-modal-header-background-color);
@@ -3,10 +3,10 @@ import { CSSProperties, FC, PropsWithChildren, ReactNode } from "react";
3
3
  import { DateRangePickerValueType } from "./types";
4
4
  export interface DateRangePickerProps {
5
5
  bottomContent?: ReactNode;
6
- closePopoverHandler: () => void;
7
6
  datesConfig?: DatesConfig[];
8
7
  numberOfMonths?: number;
9
8
  onChange: (data: DateRangePickerValueType) => void;
9
+ onClosePopover: () => void;
10
10
  selectedDates: DateRangePickerValueType;
11
11
  style?: CSSProperties;
12
12
  /** @deprecated */
@@ -24,6 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.Default = Default;
27
+ const noop_1 = require("@uxf/core/utils/noop");
27
28
  const react_1 = __importStar(require("react"));
28
29
  const action_1 = require("../utils/action");
29
30
  const date_range_picker_1 = require("./date-range-picker");
@@ -34,6 +35,6 @@ exports.default = {
34
35
  function Default() {
35
36
  const [value, setValue] = (0, react_1.useState)(null);
36
37
  const onChange = (0, action_1.action)("onChange", setValue);
37
- const testDatePickers = react_1.default.createElement(date_range_picker_1.DateRangePicker, { closePopoverHandler: close, onChange: onChange, selectedDates: value });
38
+ const testDatePickers = react_1.default.createElement(date_range_picker_1.DateRangePicker, { onChange: onChange, onClosePopover: noop_1.noop, selectedDates: value });
38
39
  return react_1.default.createElement("div", { className: "max-w-screen-sm space-y-4 rounded p-8" }, testDatePickers);
39
40
  }
@@ -57,6 +57,6 @@ exports.DateRangePickerInput = (0, react_1.forwardRef)((props, ref) => {
57
57
  const selectedDates = props.value
58
58
  ? { from: parsedFrom.isValid() ? parsedFrom.toDate() : null, to: parsedTo.isValid() ? parsedTo.toDate() : null }
59
59
  : null;
60
- return (react_1.default.createElement(_input_with_popover_1._InputWithPopover, { ...restProps, placeholder: props.placeholder || "Vyberte datum...", ref: ref, triggerElement: (_a = props.triggerElement) !== null && _a !== void 0 ? _a : react_1.default.createElement(icon_1.Icon, { name: "calendar", size: 20 }), value: (_b = props.value) !== null && _b !== void 0 ? _b : "" }, ({ close }) => (react_1.default.createElement(date_range_picker_1.DateRangePicker, { bottomContent: props.bottomContent, closePopoverHandler: close, datesConfig: props.datesConfig, numberOfMonths: numberOfMonths, onChange: onDatePickerChange, selectedDates: selectedDates, style: props.style, unavailableDates: props.unavailableDates }))));
60
+ return (react_1.default.createElement(_input_with_popover_1._InputWithPopover, { ...restProps, placeholder: props.placeholder || "Vyberte datum...", ref: ref, triggerElement: (_a = props.triggerElement) !== null && _a !== void 0 ? _a : react_1.default.createElement(icon_1.Icon, { name: "calendar", size: 20 }), value: (_b = props.value) !== null && _b !== void 0 ? _b : "" }, ({ close }) => (react_1.default.createElement(date_range_picker_1.DateRangePicker, { bottomContent: props.bottomContent, datesConfig: props.datesConfig, numberOfMonths: numberOfMonths, onChange: onDatePickerChange, onClosePopover: close, selectedDates: selectedDates, style: props.style, unavailableDates: props.unavailableDates }))));
61
61
  });
62
62
  exports.DateRangePickerInput.displayName = "UxfUiDatePickerInput";
package/message/README.md CHANGED
@@ -5,6 +5,7 @@ Use component [ModalDialog](/docs/ui/modal-dialog) and method [openModal()](/doc
5
5
  ## CSS dependencies
6
6
 
7
7
  ```css
8
+ @import url("@uxf/ui/alert-bubble/alert-bubble.css");
8
9
  @import url("@uxf/ui/message/message.css");
9
10
  @import url("@uxf/ui/dialog/dialog.css");
10
11
  @import url("@uxf/ui/button/button.css");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/ui",
3
- "version": "11.32.0",
3
+ "version": "11.33.2",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -18,7 +18,7 @@
18
18
  "@floating-ui/react": "0.26.23",
19
19
  "@headlessui/react": "1.7.14",
20
20
  "@uxf/core": "11.32.0",
21
- "@uxf/core-react": "11.32.0",
21
+ "@uxf/core-react": "11.33.0",
22
22
  "@uxf/datepicker": "11.32.0",
23
23
  "@uxf/styles": "11.32.0",
24
24
  "color2k": "2.0.3",
@@ -1,7 +1,7 @@
1
1
  import { OnTimeChangeType, TimeType } from "@uxf/datepicker/hooks/use-time-picker";
2
2
  import { FC } from "react";
3
3
  export interface TimePickerProps {
4
- closePopoverHandler?: () => void;
4
+ onClosePopover?: () => void;
5
5
  onChange: (data: OnTimeChangeType) => void;
6
6
  preventScroll?: boolean;
7
7
  selectedTime: TimeType | null;
@@ -24,6 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.Default = Default;
27
+ const noop_1 = require("@uxf/core/utils/noop");
27
28
  const react_1 = __importStar(require("react"));
28
29
  const action_1 = require("../utils/action");
29
30
  const time_picker_1 = require("./time-picker");
@@ -34,7 +35,6 @@ exports.default = {
34
35
  function Default() {
35
36
  const [value, setValue] = (0, react_1.useState)(null);
36
37
  const onChange = (0, action_1.action)("onChange", setValue);
37
- const onClose = () => null;
38
- const testTimePickers = react_1.default.createElement(time_picker_1.TimePicker, { closePopoverHandler: onClose, onChange: onChange, selectedTime: value });
38
+ const testTimePickers = react_1.default.createElement(time_picker_1.TimePicker, { onChange: onChange, onClosePopover: noop_1.noop, selectedTime: value });
39
39
  return react_1.default.createElement("div", { className: "max-w-screen-sm space-y-4 rounded p-8" }, testTimePickers);
40
40
  }
@@ -77,6 +77,6 @@ exports.TimePickerInput = (0, react_1.forwardRef)((props, ref) => {
77
77
  }, [onChange]);
78
78
  const value = getValue(props.value);
79
79
  const selectedTime = getSelectedTime(props.value);
80
- return (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_TIME_FORMAT), ref: ref, triggerElement: (_b = props.triggerElement) !== null && _b !== void 0 ? _b : react_1.default.createElement(icon_1.Icon, { name: "clock", size: 20 }), value: value }, ({ close }) => (0, is_not_nil_1.isNotNil)(props.CustomTimePicker) ? (react_1.default.createElement(props.CustomTimePicker, { onChange: props.onChange, onClose: close, value: (0, is_time_string_1.isTimeString)(props.value) ? props.value : null })) : (react_1.default.createElement(time_picker_1.TimePicker, { closePopoverHandler: close, onChange: onTimePickerChange, preventScroll: true, selectedTime: selectedTime }))));
80
+ return (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_TIME_FORMAT), ref: ref, triggerElement: (_b = props.triggerElement) !== null && _b !== void 0 ? _b : react_1.default.createElement(icon_1.Icon, { name: "clock", size: 20 }), value: value }, ({ close }) => (0, is_not_nil_1.isNotNil)(props.CustomTimePicker) ? (react_1.default.createElement(props.CustomTimePicker, { onChange: props.onChange, onClose: close, value: (0, is_time_string_1.isTimeString)(props.value) ? props.value : null })) : (react_1.default.createElement(time_picker_1.TimePicker, { onChange: onTimePickerChange, onClosePopover: close, preventScroll: true, selectedTime: selectedTime }))));
81
81
  });
82
82
  exports.TimePickerInput.displayName = "UxfUiTimePickerInput";