@uxf/ui 11.0.0-beta.21 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/_file-input-base/file-input-base.d.ts +1 -0
  2. package/_file-input-base/file-input-base.js +9 -7
  3. package/_select-base/_select-base.d.ts +1 -0
  4. package/_select-base/_select-base.js +14 -5
  5. package/avatar-file-input/avatar-file-input.d.ts +10 -2
  6. package/avatar-file-input/avatar-file-input.js +27 -11
  7. package/calendar/calendar-day-cell.js +5 -2
  8. package/calendar/utils/get-class-names-from-flags.d.ts +2 -0
  9. package/calendar/utils/get-class-names-from-flags.js +10 -0
  10. package/checkbox-input/checkbox-input.d.ts +1 -0
  11. package/checkbox-input/checkbox-input.js +8 -3
  12. package/combobox/combobox.js +2 -1
  13. package/create-component-preview-page/ui-components.d.ts +15 -0
  14. package/create-component-preview-page/ui-components.js +15 -0
  15. package/create-component-preview-page/ui-readmes.js +68 -62
  16. package/css/avatar-file-input.css +97 -67
  17. package/css/checkbox-input.css +9 -1
  18. package/date-picker/date-picker.d.ts +7 -4
  19. package/date-picker/date-picker.js +3 -2
  20. package/date-picker/date-picker.stories.js +38 -1
  21. package/date-picker-input/date-picker-input.d.ts +8 -3
  22. package/date-picker-input/date-picker-input.js +9 -7
  23. package/date-picker-input/date-picker-input.stories.js +2 -1
  24. package/date-range-picker/date-range-picker.d.ts +4 -1
  25. package/date-range-picker/date-range-picker.js +1 -0
  26. package/date-range-picker-input/README.md +9 -1
  27. package/date-range-picker-input/date-range-picker-input.d.ts +4 -1
  28. package/date-range-picker-input/date-range-picker-input.js +1 -1
  29. package/dropzone/dropzone-input.d.ts +1 -0
  30. package/dropzone/dropzone-input.js +11 -5
  31. package/dropzone/dropzone-list.d.ts +1 -0
  32. package/dropzone/dropzone-list.js +2 -2
  33. package/file-input/file-input.d.ts +2 -2
  34. package/file-input/file-input.js +11 -2
  35. package/image-gallery/README.md +8 -0
  36. package/message/README.md +25 -1
  37. package/multi-combobox/_multi-combobox-base.js +26 -4
  38. package/package.json +4 -4
  39. package/radio-group/radio-group.d.ts +1 -1
  40. package/tabs/tabs.d.ts +1 -0
  41. package/tabs/tabs.js +2 -1
  42. package/utils/validator/validator-exceptions.d.ts +3 -0
  43. package/utils/validator/validator-exceptions.js +7 -0
@@ -6,6 +6,7 @@ export interface FileInputBaseProps extends FormControlProps<FileResponse | null
6
6
  className?: string;
7
7
  form?: string;
8
8
  id?: string;
9
+ maxFileSize?: number;
9
10
  onUploadError?: (err: unknown) => void;
10
11
  onUploadFile: (file: File) => Promise<FileResponse>;
11
12
  }
@@ -25,21 +25,23 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports._FileInputBase = void 0;
27
27
  const react_1 = __importStar(require("react"));
28
+ const validator_exceptions_1 = require("../utils/validator/validator-exceptions");
28
29
  exports._FileInputBase = (0, react_1.forwardRef)((props, ref) => {
29
30
  const onChange = async (e) => {
30
- var _a;
31
- if (e.target.files) {
31
+ var _a, _b;
32
+ if ((_a = e.target.files) === null || _a === void 0 ? void 0 : _a.length) {
32
33
  try {
33
- const response = await props.onUploadFile(e.target.files[0]);
34
+ const file = e.target.files[0];
35
+ if (props.maxFileSize && file.size > props.maxFileSize) {
36
+ throw validator_exceptions_1.ValidatorExceptions.MaxFileSize;
37
+ }
38
+ const response = await props.onUploadFile(file);
34
39
  await props.onChange(response, e);
35
40
  }
36
41
  catch (err) {
37
- (_a = props.onUploadError) === null || _a === void 0 ? void 0 : _a.call(props, err);
42
+ (_b = props.onUploadError) === null || _b === void 0 ? void 0 : _b.call(props, err);
38
43
  }
39
44
  }
40
- else {
41
- props.onChange(null, e);
42
- }
43
45
  };
44
46
  return (react_1.default.createElement("input", { accept: props.accept, "aria-invalid": props.isInvalid, "aria-describedby": props["aria-describedby"], className: props.className, disabled: props.isDisabled, form: props.form, id: props.id, name: props.name, onBlur: props.onBlur, onChange: onChange, onFocus: props.onFocus, readOnly: props.isReadOnly, ref: ref, required: props.isRequired, tabIndex: props.isDisabled ? -1 : undefined, type: "file" }));
45
47
  });
@@ -28,6 +28,7 @@ export interface SelectBaseProps<Value, Option> extends FormControlProps<Value |
28
28
  id?: string;
29
29
  keyExtractor?: (option: Option) => string | number;
30
30
  label: ReactNode;
31
+ onOptionsUnmount?: () => void;
31
32
  options?: Option[];
32
33
  placeholder?: string;
33
34
  renderOption?: (option: Option, isSelected: boolean) => ReactNode;
@@ -27,6 +27,7 @@ exports._SelectBase = void 0;
27
27
  const react_1 = require("@floating-ui/react");
28
28
  const classes_1 = require("@uxf/core/constants/classes");
29
29
  const useInputFocus_1 = require("@uxf/core/hooks/useInputFocus");
30
+ const useOnUnmount_1 = require("@uxf/core/hooks/useOnUnmount");
30
31
  const composeRefs_1 = require("@uxf/core/utils/composeRefs");
31
32
  const cx_1 = require("@uxf/core/utils/cx");
32
33
  const use_dropdown_1 = require("@uxf/ui/hooks/use-dropdown");
@@ -34,6 +35,11 @@ const icon_1 = require("@uxf/ui/icon");
34
35
  const input_1 = require("@uxf/ui/input");
35
36
  const label_1 = require("@uxf/ui/label");
36
37
  const react_2 = __importStar(require("react"));
38
+ const Option = (props) => {
39
+ const HUIComponent = props.HUIComponent;
40
+ return (react_2.default.createElement(HUIComponent.Option, { className: (optionState) => (0, cx_1.cx)("uxf-dropdown__item", optionState.active && classes_1.CLASSES.IS_ACTIVE, optionState.disabled && classes_1.CLASSES.IS_DISABLED, optionState.selected && classes_1.CLASSES.IS_SELECTED), value: props.option }, (optionState) => { var _a, _b; return (_b = (_a = props.renderOption) === null || _a === void 0 ? void 0 : _a.call(props, props.option, optionState.selected)) !== null && _b !== void 0 ? _b : props.option.label; }));
41
+ };
42
+ Option.displayName = "UxfUiSelectBaseOption";
37
43
  function isHUICombobox(HUIComponent) {
38
44
  return typeof HUIComponent.Input !== "undefined";
39
45
  }
@@ -53,13 +59,16 @@ const InputArrow = (props) => {
53
59
  const Options = (props) => {
54
60
  var _a, _b;
55
61
  const HUIComponent = props.HUIComponent;
62
+ (0, useOnUnmount_1.useOnUnmount)(() => {
63
+ var _a;
64
+ (_a = props.onUnmount) === null || _a === void 0 ? void 0 : _a.call(props);
65
+ });
56
66
  return (react_2.default.createElement(HUIComponent.Options, { className: (0, cx_1.cx)("uxf-dropdown uxf-select-base__options", `uxf-dropdown--size-${(_a = props.size) !== null && _a !== void 0 ? _a : "default"}`, `uxf-dropdown--variant-${(_b = props.variant) !== null && _b !== void 0 ? _b : "default"}`, props.matchWidth
57
67
  ? "uxf-select-base__options--match-width"
58
68
  : "uxf-select-base__options--not-match-width", props.placement === "bottom" && "uxf-dropdown--bottom", props.placement === "top" && "uxf-dropdown--top", props.className), ref: props.forwardRef, static: true, style: props.style }, props.options && props.options.length > 0 ? (props.options.map((option) => {
59
- var _a;
60
- const optionKey = (_a = props.keyExtractor) === null || _a === void 0 ? void 0 : _a.call(props, option);
61
- const _option = option;
62
- return (react_2.default.createElement(HUIComponent.Option, { disabled: _option.disabled, className: (optionState) => (0, cx_1.cx)("uxf-dropdown__item", optionState.active && classes_1.CLASSES.IS_ACTIVE, optionState.disabled && classes_1.CLASSES.IS_DISABLED, optionState.selected && classes_1.CLASSES.IS_SELECTED), key: optionKey !== null && optionKey !== void 0 ? optionKey : _option.id, value: option }, (optionState) => { var _a, _b; return (_b = (_a = props.renderOption) === null || _a === void 0 ? void 0 : _a.call(props, option, optionState.selected)) !== null && _b !== void 0 ? _b : option.label; }));
69
+ var _a, _b;
70
+ const optionKey = (_b = (_a = props.keyExtractor) === null || _a === void 0 ? void 0 : _a.call(props, option)) !== null && _b !== void 0 ? _b : option.id;
71
+ return (react_2.default.createElement(Option, { HUIComponent: HUIComponent, key: optionKey, option: option, renderOption: props.renderOption }));
63
72
  })) : (react_2.default.createElement("div", { className: "uxf-dropdown__empty-wrapper" }, props.emptyMessage))));
64
73
  };
65
74
  Options.displayName = "UxfUiSelectBaseOptions";
@@ -91,7 +100,7 @@ const _SelectBase = (props) => {
91
100
  react_2.default.createElement(InputArrow, { iconName: props.iconName, open: renderProps.open }))) : (react_2.default.createElement(InputArrow, { iconName: props.iconName, open: renderProps.open }))),
92
101
  props.rightAddon && react_2.default.createElement(input_1.Input.RightAddon, null, props.rightAddon)),
93
102
  renderProps.open && (react_2.default.createElement(react_1.FloatingPortal, null,
94
- react_2.default.createElement(Options, { HUIComponent: HUIComponent, className: props.dropdownClassName, emptyMessage: props.emptyMessage, forwardRef: dropdown.refs.setFloating, keyExtractor: props.keyExtractor, matchWidth: props.dropdownMatchesInputWidth, options: props.options, placement: dropdown.placement, renderOption: props.renderOption, size: props.size, style: dropdown.floatingStyles, variant: props.variant }))),
103
+ react_2.default.createElement(Options, { HUIComponent: HUIComponent, className: props.dropdownClassName, emptyMessage: props.emptyMessage, forwardRef: dropdown.refs.setFloating, keyExtractor: props.keyExtractor, matchWidth: props.dropdownMatchesInputWidth, onUnmount: props.onOptionsUnmount, options: props.options, placement: dropdown.placement, renderOption: props.renderOption, size: props.size, style: dropdown.floatingStyles, variant: props.variant }))),
95
104
  props.helperText && (react_2.default.createElement("div", { className: (0, cx_1.cx)("uxf-helper-text", props.isInvalid && classes_1.CLASSES.IS_INVALID), id: errorId }, props.helperText)))))));
96
105
  };
97
106
  exports._SelectBase = _SelectBase;
@@ -1,10 +1,18 @@
1
- import React, { ReactNode } from "react";
1
+ import React, { MouseEventHandler, ReactNode } from "react";
2
2
  import { FileInputBaseProps } from "../_file-input-base";
3
+ import { IconName } from "../icon/types";
3
4
  import { AvatarFileInputVariant } from "./theme";
4
5
  export interface AvatarFileInputProps extends FileInputBaseProps {
6
+ customControls?: (args: {
7
+ onSelectFile: MouseEventHandler;
8
+ onRemoveFile: MouseEventHandler;
9
+ }) => ReactNode;
5
10
  helperText?: ReactNode;
11
+ hiddenLabel?: boolean;
12
+ icon?: IconName;
6
13
  label?: ReactNode;
7
- changeFileLabel?: ReactNode;
14
+ removeFileLabel?: ReactNode;
15
+ selectFileLabel?: ReactNode;
8
16
  variant?: AvatarFileInputVariant;
9
17
  }
10
18
  export declare const AvatarFileInput: React.ForwardRefExoticComponent<AvatarFileInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -26,28 +26,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.AvatarFileInput = void 0;
27
27
  const classes_1 = require("@uxf/core/constants/classes");
28
28
  const useInputFocus_1 = require("@uxf/core/hooks/useInputFocus");
29
+ const composeRefs_1 = require("@uxf/core/utils/composeRefs");
29
30
  const cx_1 = require("@uxf/core/utils/cx");
30
31
  const file_1 = require("@uxf/core/utils/file");
31
32
  const react_1 = __importStar(require("react"));
32
33
  const _file_input_base_1 = require("../_file-input-base");
33
34
  const avatar_1 = require("../avatar");
35
+ const button_1 = require("../button");
36
+ const form_component_1 = require("../form-component");
34
37
  const icon_1 = require("../icon");
35
38
  exports.AvatarFileInput = (0, react_1.forwardRef)((props, ref) => {
36
- var _a, _b;
39
+ var _a, _b, _c, _d, _e, _f;
37
40
  const generatedId = (0, react_1.useId)();
38
41
  const id = props.id || generatedId;
39
42
  const innerRef = (0, react_1.useRef)(null);
40
43
  const input = (0, useInputFocus_1.useInputFocus)(innerRef, props.onBlur, props.onFocus);
41
44
  const errorId = props.isInvalid && props.id ? `${props.id}--errormessage` : undefined;
42
- const stateClassNames = (0, cx_1.cx)(input.focused && classes_1.CLASSES.IS_FOCUSED, (props.isDisabled || props.isReadOnly) && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID);
43
- const label = props.value && props.changeFileLabel ? props.changeFileLabel : props.label;
44
- return (react_1.default.createElement("div", { className: `uxf-avatar-file-input uxf-avatar-file-input--variant-${(_a = props.variant) !== null && _a !== void 0 ? _a : "default"} ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}` },
45
- react_1.default.createElement("div", { className: "uxf-avatar-file-input__label-wrapper" },
46
- props.value ? (react_1.default.createElement(avatar_1.Avatar, { className: (0, cx_1.cx)("uxf-avatar-file-input__image", stateClassNames), src: (0, file_1.getFileUrl)(props.value) })) : (react_1.default.createElement("label", { className: (0, cx_1.cx)("uxf-avatar-file-input__label", stateClassNames), htmlFor: id, tabIndex: 0 },
47
- react_1.default.createElement(icon_1.Icon, { className: (0, cx_1.cx)("uxf-avatar-file-input__label-icon", stateClassNames), name: "cloud", size: 28 }))),
48
- (props.label && typeof props.label === "string") ||
49
- (props.value && props.changeFileLabel && typeof props.changeFileLabel === "string") ? (react_1.default.createElement("label", { className: (0, cx_1.cx)("uxf-avatar-file-input__label-text", stateClassNames), htmlFor: id, tabIndex: 0 }, label)) : (label)),
50
- react_1.default.createElement(_file_input_base_1._FileInputBase, { accept: props.accept, "aria-describedby": errorId, "aria-invalid": props.isInvalid, className: "uxf-avatar-file-input__input", form: props.form, id: id, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, name: props.name, onBlur: input.onBlur, onChange: props.onChange, onFocus: input.onFocus, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, ref: ref, value: props.value }),
51
- props.helperText && (react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-helper-text", errorId && classes_1.CLASSES.IS_INVALID), id: errorId }, props.helperText))));
45
+ const stateClassName = (0, cx_1.cx)(((_a = props.isFocused) !== null && _a !== void 0 ? _a : input.focused) && classes_1.CLASSES.IS_FOCUSED, props.isDisabled && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID, props.isReadOnly && classes_1.CLASSES.IS_READONLY, props.isRequired && classes_1.CLASSES.IS_REQUIRED);
46
+ const rootClassName = (0, cx_1.cx)(`uxf-avatar-file-input uxf-avatar-file-input--variant-${(_b = props.variant) !== null && _b !== void 0 ? _b : "default"}`, stateClassName, props.className);
47
+ const onSelectFile = () => { var _a; return (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.click(); };
48
+ const onRemoveFile = () => {
49
+ props.onChange(null);
50
+ // this ensures that the file input is cleared on remove, so that the same file can be selected again
51
+ const inputNode = innerRef.current;
52
+ if (inputNode) {
53
+ inputNode.value = "";
54
+ }
55
+ };
56
+ return (react_1.default.createElement(form_component_1.FormComponent, { className: rootClassName, errorId: props.id, helperText: props.helperText, hiddenLabel: props.hiddenLabel, inputId: id, label: props.label },
57
+ react_1.default.createElement("div", { className: "uxf-avatar-file-input__inner-wrapper" },
58
+ react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-avatar-file-input__input", stateClassName), onClick: onSelectFile },
59
+ react_1.default.createElement(_file_input_base_1._FileInputBase, { accept: (_c = props.accept) !== null && _c !== void 0 ? _c : "image/*", "aria-describedby": errorId, "aria-invalid": props.isInvalid, className: "uxf-avatar-file-input__input-element", form: props.form, id: id, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, maxFileSize: props.maxFileSize, name: props.name, onBlur: input.onBlur, onFocus: input.onFocus, onChange: props.onChange, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, ref: (0, composeRefs_1.composeRefs)(innerRef, ref), value: props.value }),
60
+ props.value ? (react_1.default.createElement(avatar_1.Avatar, { className: "uxf-avatar-file-input__input-avatar", src: (0, file_1.getFileUrl)(props.value) })) : (react_1.default.createElement("div", { className: "uxf-avatar-file-input__input-empty" },
61
+ react_1.default.createElement(icon_1.Icon, { className: "uxf-avatar-file-input__input-empty-icon", name: (_d = props.icon) !== null && _d !== void 0 ? _d : "cloud" })))),
62
+ react_1.default.createElement("div", { className: "uxf-avatar-file-input__controls" }, props.customControls ? (props.customControls({
63
+ onSelectFile,
64
+ onRemoveFile,
65
+ })) : (react_1.default.createElement("div", { className: "uxf-avatar-file-input__controls-buttons" },
66
+ react_1.default.createElement(button_1.Button, { className: "uxf-avatar-file-input__controls-button uxf-avatar-file-input__controls-button--select", disabled: props.isDisabled, onClick: onSelectFile, size: "sm", variant: "white" }, (_e = props.selectFileLabel) !== null && _e !== void 0 ? _e : "Upload image"),
67
+ !!props.value && !props.isDisabled && (react_1.default.createElement(button_1.Button, { className: "uxf-avatar-file-input__controls-button uxf-avatar-file-input__controls-button--remove", color: "error", disabled: props.isDisabled, onClick: onRemoveFile, size: "sm", variant: "white" }, (_f = props.removeFileLabel) !== null && _f !== void 0 ? _f : "Remove avatar"))))))));
52
68
  });
53
69
  exports.AvatarFileInput.displayName = "UxfUiAvatarFileInput";
@@ -30,11 +30,13 @@ const composeRefs_1 = require("@uxf/core/utils/composeRefs");
30
30
  const cx_1 = require("@uxf/core/utils/cx");
31
31
  const use_day_1 = require("@uxf/datepicker/hooks/use-day");
32
32
  const react_1 = __importStar(require("react"));
33
+ const get_class_names_from_flags_1 = require("./utils/get-class-names-from-flags");
33
34
  exports.CalendarDayCell = (0, react_1.memo)((props) => {
34
35
  const dayCellRef = (0, react_1.useRef)(null);
35
36
  const innerRef = (0, react_1.useRef)(null);
36
- const { disabledDate, isHovered, isSelected, isInsideRange, isToday, isWithinHoverRange, onClick, onKeyDown, onMouseEnter, tabIndex, } = (0, use_day_1.useDay)({
37
+ const { disabledDate, flags, isFirstDisabled, isHovered, isInsideRange, isLastDisabled, isSelected, isToday, isWithinHoverRange, onClick, onKeyDown, onMouseEnter, tabIndex, } = (0, use_day_1.useDay)({
37
38
  date: props.day.date,
39
+ datesConfig: props.datePickerProps.datesConfig,
38
40
  focusedDate: props.datePickerProps.focusedDate,
39
41
  isDateBlocked: props.datePickerProps.isDateBlocked,
40
42
  isDateFocused: props.datePickerProps.isDateFocused,
@@ -46,6 +48,7 @@ exports.CalendarDayCell = (0, react_1.memo)((props) => {
46
48
  onDateSelect: props.datePickerProps.onDateSelect,
47
49
  dayRef: dayCellRef,
48
50
  preventScroll: props.datePickerProps.preventScroll,
51
+ unavailableDates: props.datePickerProps.unavailableDates,
49
52
  });
50
53
  (0, useOnMount_1.useOnMount)(() => {
51
54
  const node = innerRef.current;
@@ -56,7 +59,7 @@ exports.CalendarDayCell = (0, react_1.memo)((props) => {
56
59
  if (!props.day.dayLabel) {
57
60
  return react_1.default.createElement("div", null);
58
61
  }
59
- return (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-calendar__cell uxf-calendar__cell-day", disabledDate && classes_1.CLASSES.IS_DISABLED, isToday && "uxf-calendar__cell--today", isSelected && "uxf-calendar__cell--selected", isInsideRange && "uxf-calendar__cell--inside-range", isWithinHoverRange && "uxf-calendar__cell--is-within-hover-range", isHovered && "uxf-calendar__cell--is-hovered", !props.day.currentMonth && "uxf-calendar__cell--not-current-month"), ref: disabledDate ? undefined : (0, composeRefs_1.composeRefs)(dayCellRef, innerRef), onClick: onClick, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, tabIndex: tabIndex, type: "button" },
62
+ return (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-calendar__cell uxf-calendar__cell-day", isFirstDisabled && props.day.currentMonth && "is-disabled-start", isLastDisabled && props.day.currentMonth && "is-disabled-end", disabledDate && classes_1.CLASSES.IS_DISABLED, isToday && "uxf-calendar__cell--today", isSelected && "uxf-calendar__cell--selected", isInsideRange && "uxf-calendar__cell--inside-range", isWithinHoverRange && "uxf-calendar__cell--is-within-hover-range", isHovered && "uxf-calendar__cell--is-hovered", !props.day.currentMonth && "uxf-calendar__cell--not-current-month", (0, get_class_names_from_flags_1.getClassNamesFromFlags)(flags)), ref: disabledDate ? undefined : (0, composeRefs_1.composeRefs)(dayCellRef, innerRef), onClick: onClick, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, tabIndex: tabIndex, type: "button" },
60
63
  react_1.default.createElement("span", { className: "uxf-calendar__cell__inner" }, props.day.dayLabel)));
61
64
  });
62
65
  exports.CalendarDayCell.displayName = "UxfUiCalendarDayCell";
@@ -0,0 +1,2 @@
1
+ import { Flag } from "@uxf/datepicker/utils/types";
2
+ export declare const getClassNamesFromFlags: (flags: Flag[]) => string[];
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClassNamesFromFlags = void 0;
4
+ const getClassNamesFromFlags = (flags) => flags.reduce((acc, curr) => [
5
+ ...acc,
6
+ curr.flag,
7
+ ...(curr.isFirst ? [`${curr.flag}--first`] : []),
8
+ ...(curr.isLast ? [`${curr.flag}--last`] : []),
9
+ ], []);
10
+ exports.getClassNamesFromFlags = getClassNamesFromFlags;
@@ -8,5 +8,6 @@ export interface CheckboxInputProps extends FormControlProps<boolean | undefined
8
8
  label: ReactNode;
9
9
  size?: CheckboxSize;
10
10
  style?: CSSProperties;
11
+ helperText?: ReactNode;
11
12
  }
12
13
  export declare const CheckboxInput: React.ForwardRefExoticComponent<CheckboxInputProps & React.RefAttributes<HTMLDivElement>>;
@@ -28,10 +28,15 @@ const react_1 = require("@headlessui/react");
28
28
  const react_2 = __importStar(require("react"));
29
29
  const checkbox_1 = require("../checkbox");
30
30
  exports.CheckboxInput = (0, react_2.forwardRef)((props, ref) => {
31
- var _a;
31
+ var _a, _b;
32
+ const generatedId = (0, react_2.useId)();
33
+ const id = (_a = props.id) !== null && _a !== void 0 ? _a : generatedId;
34
+ const errorId = props.isInvalid ? `${id}--error-message` : undefined;
32
35
  return (react_2.default.createElement(react_1.Switch.Group, null,
33
- react_2.default.createElement("div", { className: `uxf-checkbox-input__wrapper ${(_a = props.className) !== null && _a !== void 0 ? _a : ""}` },
36
+ react_2.default.createElement("div", { className: `uxf-checkbox-input__wrapper ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}` },
34
37
  react_2.default.createElement(react_1.Switch, { as: react_2.Fragment, checked: props.value, name: props.name, onChange: props.onChange }, ({ checked }) => (react_2.default.createElement(checkbox_1.Checkbox, { className: "uxf-checkbox-input", id: props.id, indeterminate: props.indeterminate, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, onChange: props.onChange, ref: ref, size: props.size, style: props.style, value: checked }))),
35
- react_2.default.createElement(react_1.Switch.Label, { className: "uxf-checkbox-input__label" }, props.label))));
38
+ react_2.default.createElement(react_1.Switch.Label, { className: "uxf-checkbox-input__label" },
39
+ react_2.default.createElement("span", { className: "uxf-checkbox-input__label--text" }, props.label),
40
+ react_2.default.createElement("span", { id: errorId, className: "uxf-checkbox-input__label--subtitle" }, props.helperText)))));
36
41
  });
37
42
  exports.CheckboxInput.displayName = "UxfUiCheckboxInput";
@@ -38,11 +38,12 @@ const Combobox = (props) => {
38
38
  const emptyMessage = query.length === 0
39
39
  ? (_b = props.noQueryMessage) !== null && _b !== void 0 ? _b : "Pro zobrazení možností začněte psát"
40
40
  : (_c = props.notFoundMessage) !== null && _c !== void 0 ? _c : "Nic nenalezeno";
41
+ const clearQuery = () => setQuery("");
41
42
  const onChange = (v) => props.onChange(v);
42
43
  const onInputChange = (event) => setQuery(event.target.value);
43
44
  const displayValue = (item) => { var _a; return (_a = item === null || item === void 0 ? void 0 : item.label) !== null && _a !== void 0 ? _a : ""; };
44
45
  const selectedOption = (_d = props.value) !== null && _d !== void 0 ? _d : null;
45
- return (react_2.default.createElement(_select_base_1._SelectBase, { HUIComponent: react_1.Combobox, className: props.className, customInputElementDisplayName: react_1.Combobox.Input.displayName, dropdownClassName: props.dropdownClassName, dropdownMatchesInputWidth: props.dropdownMatchesInputWidth, dropdownPlacement: props.dropdownPlacement, dropdownStrategy: props.dropdownStrategy, emptyMessage: emptyMessage, forwardRef: props.forwardRef, helperText: props.helperText, hiddenLabel: props.hiddenLabel, iconName: props.iconName, id: props.id, isClearable: props.isClearable, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, keyExtractor: props.keyExtractor, label: props.label, leftAddon: props.leftAddon, leftElement: props.leftElement, name: props.name, onBlur: props.onBlur, onChange: onChange, onFocus: props.onFocus, options: filteredData, placeholder: props.placeholder, renderOption: props.renderOption, rightAddon: props.rightAddon, rightElement: props.rightElement, size: props.size, value: selectedOption, variant: props.variant },
46
+ return (react_2.default.createElement(_select_base_1._SelectBase, { HUIComponent: react_1.Combobox, className: props.className, customInputElementDisplayName: react_1.Combobox.Input.displayName, dropdownClassName: props.dropdownClassName, dropdownMatchesInputWidth: props.dropdownMatchesInputWidth, dropdownPlacement: props.dropdownPlacement, dropdownStrategy: props.dropdownStrategy, emptyMessage: emptyMessage, forwardRef: props.forwardRef, helperText: props.helperText, hiddenLabel: props.hiddenLabel, iconName: props.iconName, id: props.id, isClearable: props.isClearable, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, keyExtractor: props.keyExtractor, label: props.label, leftAddon: props.leftAddon, leftElement: props.leftElement, name: props.name, onBlur: props.onBlur, onChange: onChange, onFocus: props.onFocus, onOptionsUnmount: clearQuery, options: filteredData, placeholder: props.placeholder, renderOption: props.renderOption, rightAddon: props.rightAddon, rightElement: props.rightElement, size: props.size, value: selectedOption, variant: props.variant },
46
47
  react_2.default.createElement(react_1.Combobox.Input, { autoComplete: "off", className: "uxf-input__element", displayValue: displayValue, onBlur: props.onBlur, onChange: onInputChange, placeholder: props.placeholder, type: "text" })));
47
48
  };
48
49
  exports.Combobox = Combobox;
@@ -14,6 +14,7 @@ import * as ColorRadioStories from "@uxf/ui/color-radio/color-radio.stories";
14
14
  import * as ComboboxStories from "@uxf/ui/combobox/combobox.stories";
15
15
  import * as DatePickerInputStories from "@uxf/ui/date-picker-input/date-picker-input.stories";
16
16
  import * as DatePickerStories from "@uxf/ui/date-picker/date-picker.stories";
17
+ import * as DateRangePickerInputStories from "@uxf/ui/date-range-picker-input/date-range-picker-input.stories";
17
18
  import * as DatetimePickerInputStories from "@uxf/ui/datetime-picker-input/datetime-picker-input.stories";
18
19
  import * as DatetimePickerStories from "@uxf/ui/datetime-picker/datetime-picker.stories";
19
20
  import * as DropdownStories from "@uxf/ui/dropdown/dropdown.stories";
@@ -27,6 +28,7 @@ import * as InputStories from "@uxf/ui/input/input.stories";
27
28
  import * as LabelStories from "@uxf/ui/label/label.stories";
28
29
  import * as ListItemStories from "@uxf/ui/list-item/list-item.stories";
29
30
  import * as LoaderStories from "@uxf/ui/loader/loader.stories";
31
+ import * as MessageStories from "@uxf/ui/message/message.stories";
30
32
  import * as ModalStories from "@uxf/ui/modal/modal.stories";
31
33
  import * as MultiComboboxStories from "@uxf/ui/multi-combobox/multi-combobox.stories";
32
34
  import * as MultiSelectStories from "@uxf/ui/multi-select/multi-select.stories";
@@ -45,6 +47,7 @@ import * as TimePickerStories from "@uxf/ui/time-picker/time-picker-input.storie
45
47
  import * as ToggleStories from "@uxf/ui/toggle/toggle.stories";
46
48
  import * as TooltipStories from "@uxf/ui/tooltip/tooltip.stories";
47
49
  import * as TypographyStories from "@uxf/ui/typography/typography.stories";
50
+ import * as ImageGalleryStories from "../image-gallery/image-gallery.stories";
48
51
  export declare const uiComponents: {
49
52
  readonly avatar: {
50
53
  readonly title: "Avatar";
@@ -110,6 +113,10 @@ export declare const uiComponents: {
110
113
  readonly title: "DatePickerInput";
111
114
  readonly stories: typeof DatePickerInputStories;
112
115
  };
116
+ readonly "date-range-picker-input": {
117
+ readonly title: "DateRangePickerInput";
118
+ readonly stories: typeof DateRangePickerInputStories;
119
+ };
113
120
  readonly "datetime-picker": {
114
121
  readonly title: "DatetimePicker";
115
122
  readonly stories: typeof DatetimePickerStories;
@@ -146,6 +153,10 @@ export declare const uiComponents: {
146
153
  readonly title: "Icon";
147
154
  readonly stories: typeof IconStories;
148
155
  };
156
+ readonly "image-gallery": {
157
+ readonly title: "ImageGallery";
158
+ readonly stories: typeof ImageGalleryStories;
159
+ };
149
160
  readonly input: {
150
161
  readonly title: "Input";
151
162
  readonly stories: typeof InputStories;
@@ -162,6 +173,10 @@ export declare const uiComponents: {
162
173
  readonly title: "Loader";
163
174
  readonly stories: typeof LoaderStories;
164
175
  };
176
+ readonly message: {
177
+ readonly title: "Message";
178
+ readonly stories: typeof MessageStories;
179
+ };
165
180
  readonly modal: {
166
181
  readonly title: "Modal";
167
182
  readonly stories: typeof ModalStories;
@@ -40,6 +40,7 @@ const ColorRadioStories = __importStar(require("@uxf/ui/color-radio/color-radio.
40
40
  const ComboboxStories = __importStar(require("@uxf/ui/combobox/combobox.stories"));
41
41
  const DatePickerInputStories = __importStar(require("@uxf/ui/date-picker-input/date-picker-input.stories"));
42
42
  const DatePickerStories = __importStar(require("@uxf/ui/date-picker/date-picker.stories"));
43
+ const DateRangePickerInputStories = __importStar(require("@uxf/ui/date-range-picker-input/date-range-picker-input.stories"));
43
44
  const DatetimePickerInputStories = __importStar(require("@uxf/ui/datetime-picker-input/datetime-picker-input.stories"));
44
45
  const DatetimePickerStories = __importStar(require("@uxf/ui/datetime-picker/datetime-picker.stories"));
45
46
  const DropdownStories = __importStar(require("@uxf/ui/dropdown/dropdown.stories"));
@@ -53,6 +54,7 @@ const InputStories = __importStar(require("@uxf/ui/input/input.stories"));
53
54
  const LabelStories = __importStar(require("@uxf/ui/label/label.stories"));
54
55
  const ListItemStories = __importStar(require("@uxf/ui/list-item/list-item.stories"));
55
56
  const LoaderStories = __importStar(require("@uxf/ui/loader/loader.stories"));
57
+ const MessageStories = __importStar(require("@uxf/ui/message/message.stories"));
56
58
  const ModalStories = __importStar(require("@uxf/ui/modal/modal.stories"));
57
59
  const MultiComboboxStories = __importStar(require("@uxf/ui/multi-combobox/multi-combobox.stories"));
58
60
  const MultiSelectStories = __importStar(require("@uxf/ui/multi-select/multi-select.stories"));
@@ -71,6 +73,7 @@ const TimePickerStories = __importStar(require("@uxf/ui/time-picker/time-picker-
71
73
  const ToggleStories = __importStar(require("@uxf/ui/toggle/toggle.stories"));
72
74
  const TooltipStories = __importStar(require("@uxf/ui/tooltip/tooltip.stories"));
73
75
  const TypographyStories = __importStar(require("@uxf/ui/typography/typography.stories"));
76
+ const ImageGalleryStories = __importStar(require("../image-gallery/image-gallery.stories"));
74
77
  exports.uiComponents = {
75
78
  avatar: {
76
79
  title: "Avatar",
@@ -136,6 +139,10 @@ exports.uiComponents = {
136
139
  title: "DatePickerInput",
137
140
  stories: DatePickerInputStories,
138
141
  },
142
+ "date-range-picker-input": {
143
+ title: "DateRangePickerInput",
144
+ stories: DateRangePickerInputStories,
145
+ },
139
146
  "datetime-picker": {
140
147
  title: "DatetimePicker",
141
148
  stories: DatetimePickerStories,
@@ -172,6 +179,10 @@ exports.uiComponents = {
172
179
  title: "Icon",
173
180
  stories: IconStories,
174
181
  },
182
+ "image-gallery": {
183
+ title: "ImageGallery",
184
+ stories: ImageGalleryStories,
185
+ },
175
186
  input: {
176
187
  title: "Input",
177
188
  stories: InputStories,
@@ -188,6 +199,10 @@ exports.uiComponents = {
188
199
  title: "Loader",
189
200
  stories: LoaderStories,
190
201
  },
202
+ message: {
203
+ title: "Message",
204
+ stories: MessageStories,
205
+ },
191
206
  modal: {
192
207
  title: "Modal",
193
208
  stories: ModalStories,
@@ -20,37 +20,40 @@ const README_md_13 = __importDefault(require("@uxf/ui/color-radio/README.md"));
20
20
  const README_md_14 = __importDefault(require("@uxf/ui/combobox/README.md"));
21
21
  const README_md_15 = __importDefault(require("@uxf/ui/date-picker-input/README.md"));
22
22
  const README_md_16 = __importDefault(require("@uxf/ui/date-picker/README.md"));
23
- const README_md_17 = __importDefault(require("@uxf/ui/datetime-picker-input/README.md"));
24
- const README_md_18 = __importDefault(require("@uxf/ui/datetime-picker/README.md"));
25
- const README_md_19 = __importDefault(require("@uxf/ui/dropdown/README.md"));
26
- const README_md_20 = __importDefault(require("@uxf/ui/dropzone/README.md"));
27
- const README_md_21 = __importDefault(require("@uxf/ui/error-message/README.md"));
28
- const README_md_22 = __importDefault(require("@uxf/ui/file-input/README.md"));
29
- const README_md_23 = __importDefault(require("@uxf/ui/flash-messages/README.md"));
30
- const README_md_24 = __importDefault(require("@uxf/ui/form-component/README.md"));
31
- const README_md_25 = __importDefault(require("@uxf/ui/icon/README.md"));
32
- const README_md_26 = __importDefault(require("@uxf/ui/input/README.md"));
33
- const README_md_27 = __importDefault(require("@uxf/ui/label/README.md"));
34
- const README_md_28 = __importDefault(require("@uxf/ui/list-item/README.md"));
35
- const README_md_29 = __importDefault(require("@uxf/ui/loader/README.md"));
36
- const README_md_30 = __importDefault(require("@uxf/ui/modal/README.md"));
37
- const README_md_31 = __importDefault(require("@uxf/ui/multi-combobox/README.md"));
38
- const README_md_32 = __importDefault(require("@uxf/ui/multi-select/README.md"));
39
- const README_md_33 = __importDefault(require("@uxf/ui/pagination/README.md"));
40
- const README_md_34 = __importDefault(require("@uxf/ui/paper/README.md"));
41
- const README_md_35 = __importDefault(require("@uxf/ui/radio-group/README.md"));
42
- const README_md_36 = __importDefault(require("@uxf/ui/radio/README.md"));
43
- const README_md_37 = __importDefault(require("@uxf/ui/raster-image/README.md"));
44
- const README_md_38 = __importDefault(require("@uxf/ui/select/README.md"));
45
- const README_md_39 = __importDefault(require("@uxf/ui/tabs/README.md"));
46
- const README_md_40 = __importDefault(require("@uxf/ui/text-input/README.md"));
47
- const README_md_41 = __importDefault(require("@uxf/ui/text-link/README.md"));
48
- const README_md_42 = __importDefault(require("@uxf/ui/textarea/README.md"));
49
- const README_md_43 = __importDefault(require("@uxf/ui/time-picker-input/README.md"));
50
- const README_md_44 = __importDefault(require("@uxf/ui/time-picker/README.md"));
51
- const README_md_45 = __importDefault(require("@uxf/ui/toggle/README.md"));
52
- const README_md_46 = __importDefault(require("@uxf/ui/tooltip/README.md"));
53
- const README_md_47 = __importDefault(require("@uxf/ui/typography/README.md"));
23
+ const README_md_17 = __importDefault(require("@uxf/ui/date-range-picker-input/README.md"));
24
+ const README_md_18 = __importDefault(require("@uxf/ui/datetime-picker-input/README.md"));
25
+ const README_md_19 = __importDefault(require("@uxf/ui/datetime-picker/README.md"));
26
+ const README_md_20 = __importDefault(require("@uxf/ui/dropdown/README.md"));
27
+ const README_md_21 = __importDefault(require("@uxf/ui/dropzone/README.md"));
28
+ const README_md_22 = __importDefault(require("@uxf/ui/error-message/README.md"));
29
+ const README_md_23 = __importDefault(require("@uxf/ui/file-input/README.md"));
30
+ const README_md_24 = __importDefault(require("@uxf/ui/flash-messages/README.md"));
31
+ const README_md_25 = __importDefault(require("@uxf/ui/form-component/README.md"));
32
+ const README_md_26 = __importDefault(require("@uxf/ui/icon/README.md"));
33
+ const README_md_27 = __importDefault(require("@uxf/ui/image-gallery/README.md"));
34
+ const README_md_28 = __importDefault(require("@uxf/ui/input/README.md"));
35
+ const README_md_29 = __importDefault(require("@uxf/ui/label/README.md"));
36
+ const README_md_30 = __importDefault(require("@uxf/ui/list-item/README.md"));
37
+ const README_md_31 = __importDefault(require("@uxf/ui/loader/README.md"));
38
+ const README_md_32 = __importDefault(require("@uxf/ui/message/README.md"));
39
+ const README_md_33 = __importDefault(require("@uxf/ui/modal/README.md"));
40
+ const README_md_34 = __importDefault(require("@uxf/ui/multi-combobox/README.md"));
41
+ const README_md_35 = __importDefault(require("@uxf/ui/multi-select/README.md"));
42
+ const README_md_36 = __importDefault(require("@uxf/ui/pagination/README.md"));
43
+ const README_md_37 = __importDefault(require("@uxf/ui/paper/README.md"));
44
+ const README_md_38 = __importDefault(require("@uxf/ui/radio-group/README.md"));
45
+ const README_md_39 = __importDefault(require("@uxf/ui/radio/README.md"));
46
+ const README_md_40 = __importDefault(require("@uxf/ui/raster-image/README.md"));
47
+ const README_md_41 = __importDefault(require("@uxf/ui/select/README.md"));
48
+ const README_md_42 = __importDefault(require("@uxf/ui/tabs/README.md"));
49
+ const README_md_43 = __importDefault(require("@uxf/ui/text-input/README.md"));
50
+ const README_md_44 = __importDefault(require("@uxf/ui/text-link/README.md"));
51
+ const README_md_45 = __importDefault(require("@uxf/ui/textarea/README.md"));
52
+ const README_md_46 = __importDefault(require("@uxf/ui/time-picker-input/README.md"));
53
+ const README_md_47 = __importDefault(require("@uxf/ui/time-picker/README.md"));
54
+ const README_md_48 = __importDefault(require("@uxf/ui/toggle/README.md"));
55
+ const README_md_49 = __importDefault(require("@uxf/ui/tooltip/README.md"));
56
+ const README_md_50 = __importDefault(require("@uxf/ui/typography/README.md"));
54
57
  exports.uiReadmes = {
55
58
  avatar: README_md_2.default,
56
59
  "avatar-file-input": README_md_1.default,
@@ -68,35 +71,38 @@ exports.uiReadmes = {
68
71
  combobox: README_md_14.default,
69
72
  "date-picker": README_md_16.default,
70
73
  "date-picker-input": README_md_15.default,
71
- "datetime-picker": README_md_18.default,
72
- "datetime-picker-input": README_md_17.default,
73
- dropdown: README_md_19.default,
74
- dropzone: README_md_20.default,
75
- "error-message": README_md_21.default,
76
- "file-input": README_md_22.default,
77
- "flash-messages": README_md_23.default,
78
- "form-component": README_md_24.default,
79
- icon: README_md_25.default,
80
- input: README_md_26.default,
81
- label: README_md_27.default,
82
- "list-item": README_md_28.default,
83
- loader: README_md_29.default,
84
- modal: README_md_30.default,
85
- "multi-combobox": README_md_31.default,
86
- "multi-select": README_md_32.default,
87
- pagination: README_md_33.default,
88
- paper: README_md_34.default,
89
- radio: README_md_36.default,
90
- "radio-group": README_md_35.default,
91
- "raster-image": README_md_37.default,
92
- select: README_md_38.default,
93
- tabs: README_md_39.default,
94
- "text-input": README_md_40.default,
95
- "text-link": README_md_41.default,
96
- textarea: README_md_42.default,
97
- "time-picker": README_md_44.default,
98
- "time-picker-input": README_md_43.default,
99
- toggle: README_md_45.default,
100
- tooltip: README_md_46.default,
101
- typography: README_md_47.default,
74
+ "date-range-picker-input": README_md_17.default,
75
+ "datetime-picker": README_md_19.default,
76
+ "datetime-picker-input": README_md_18.default,
77
+ dropdown: README_md_20.default,
78
+ dropzone: README_md_21.default,
79
+ "error-message": README_md_22.default,
80
+ "file-input": README_md_23.default,
81
+ "flash-messages": README_md_24.default,
82
+ "form-component": README_md_25.default,
83
+ icon: README_md_26.default,
84
+ "image-gallery": README_md_27.default,
85
+ input: README_md_28.default,
86
+ label: README_md_29.default,
87
+ "list-item": README_md_30.default,
88
+ loader: README_md_31.default,
89
+ message: README_md_32.default,
90
+ modal: README_md_33.default,
91
+ "multi-combobox": README_md_34.default,
92
+ "multi-select": README_md_35.default,
93
+ pagination: README_md_36.default,
94
+ paper: README_md_37.default,
95
+ radio: README_md_39.default,
96
+ "radio-group": README_md_38.default,
97
+ "raster-image": README_md_40.default,
98
+ select: README_md_41.default,
99
+ tabs: README_md_42.default,
100
+ "text-input": README_md_43.default,
101
+ "text-link": README_md_44.default,
102
+ textarea: README_md_45.default,
103
+ "time-picker": README_md_47.default,
104
+ "time-picker-input": README_md_46.default,
105
+ toggle: README_md_48.default,
106
+ tooltip: README_md_49.default,
107
+ typography: README_md_50.default,
102
108
  };