@uxf/ui 1.0.0-beta.143 → 1.0.0-beta.145

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.
@@ -33,15 +33,23 @@ const react_2 = require("@floating-ui/react");
33
33
  const composeRefs_1 = require("@uxf/core/utils/composeRefs");
34
34
  const form_control_1 = require("../form-control");
35
35
  const react_3 = require("@headlessui/react");
36
- const forwardRef_1 = require("@uxf/core/utils/forwardRef");
37
- exports._InputWithPopover = (0, forwardRef_1.forwardRef)("UxfUiInputWithPopover", (props, ref) => {
36
+ function useErrorProps(error, id, isInvalid) {
37
+ const errorId = isInvalid ? `${id}--error-message` : undefined;
38
+ return {
39
+ errorId,
40
+ ariaDescribedby: errorId,
41
+ ariaErrormessage: error && errorId ? `${errorId}--error-message` : undefined,
42
+ ariaInvalid: !!error,
43
+ };
44
+ }
45
+ exports._InputWithPopover = (0, react_1.forwardRef)((props, ref) => {
38
46
  var _a, _b;
39
47
  const generatedId = (0, react_1.useId)();
40
48
  const id = (_a = props.id) !== null && _a !== void 0 ? _a : generatedId;
41
49
  const innerRef = (0, react_1.useRef)(null);
42
50
  const input = (0, useInputFocus_1.useInputFocus)(innerRef, props.onBlur, props.onFocus);
43
- const errorId = props.isInvalid ? `${id}--error-message` : undefined;
44
- const rootClassName = (0, cx_1.cx)("uxf-iwp", ((_b = props.isFocused) !== null && _b !== void 0 ? _b : 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);
51
+ const error = useErrorProps(props.error, id, props.isInvalid);
52
+ const rootClassName = (0, cx_1.cx)("uxf-iwp", ((_b = props.isFocused) !== null && _b !== void 0 ? _b : 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, props.className);
45
53
  const floatingPopover = (0, react_2.useFloating)({
46
54
  placement: "bottom",
47
55
  middleware: [
@@ -66,16 +74,19 @@ exports._InputWithPopover = (0, forwardRef_1.forwardRef)("UxfUiInputWithPopover"
66
74
  });
67
75
  const stableRef = (0, react_1.useMemo)(() => (0, composeRefs_1.composeRefs)(ref, floatingPopover.reference), [ref, floatingPopover.reference]);
68
76
  const onChange = () => props.onChange;
69
- return (react_1.default.createElement(form_control_1.FormControl, { className: rootClassName, errorId: errorId, form: props.form, helperText: props.helperText, hiddenLabel: props.hiddenLabel, inputId: id, isRequired: props.isRequired, label: props.label },
77
+ const isInteractive = !props.isDisabled && !props.isReadOnly;
78
+ const showRemoveButton = !!(props.value && isInteractive && props.isClearable);
79
+ return (react_1.default.createElement(form_control_1.FormControl, { className: rootClassName, errorId: error.errorId, form: props.form, helperText: props.helperText, hiddenLabel: props.hiddenLabel, inputId: id, isRequired: props.isRequired, label: props.label },
70
80
  react_1.default.createElement(react_3.Popover, { className: "uxf-iwp__popover" },
71
81
  react_1.default.createElement(react_3.Popover.Button, { as: input_1.Input, inputFocus: input, size: props.size, variant: props.variant, ref: stableRef },
72
82
  props.leftAddon && react_1.default.createElement(input_1.Input.LeftAddon, null, props.leftAddon),
73
83
  props.leftElement && react_1.default.createElement(input_1.Input.LeftElement, null, props.leftElement),
74
- react_1.default.createElement(input_1.Input.Element, { "aria-describedby": errorId, "aria-errormessage": props.error && errorId ? `${errorId}__error-message` : undefined, "aria-invalid": !!props.error, "aria-live": "polite", autoComplete: "off", form: props.form, id: id, inputMode: "none", isDisabled: props.isDisabled, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, name: props.name, onChange: onChange, placeholder: props.placeholder, ref: (0, composeRefs_1.composeRefs)(innerRef, ref), value: props.value }),
75
- react_1.default.createElement(input_1.Input.RightElement, null,
76
- props.value && !props.isDisabled && !props.isReadOnly && props.isClearable && (react_1.default.createElement(input_1.Input.RemoveButton, { onChange: props.onChange })),
77
- props.rightElement),
84
+ react_1.default.createElement(input_1.Input.Element, { "aria-describedby": error.ariaDescribedby, "aria-errormessage": error.ariaErrormessage, "aria-invalid": error.ariaInvalid, "aria-live": "polite", autoComplete: "off", form: props.form, id: id, inputMode: "none", isDisabled: props.isDisabled, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, name: props.name, onChange: onChange, placeholder: props.placeholder, ref: (0, composeRefs_1.composeRefs)(innerRef, ref), value: props.value }),
85
+ (showRemoveButton || props.rightElement) && (react_1.default.createElement(input_1.Input.RightElement, null,
86
+ showRemoveButton && react_1.default.createElement(input_1.Input.RemoveButton, { onChange: props.onChange }),
87
+ props.rightElement)),
78
88
  props.rightAddon && react_1.default.createElement(input_1.Input.RightAddon, null, props.rightAddon)),
79
- !props.isDisabled && !props.isReadOnly && (react_1.default.createElement(react_3.Transition, { as: react_1.Fragment, enter: "uxf-iwp__popover-panel--enter", enterFrom: "uxf-iwp__popover-panel--enter-from", enterTo: "uxf-iwp__popover-panel--enter-to", leave: "uxf-iwp__popover-panel--leave", leaveFrom: "uxf-iwp__popover-panel--leave-from", leaveTo: "uxf-iwp__popover-panel--leave-to" },
89
+ isInteractive && (react_1.default.createElement(react_3.Transition, { as: react_1.Fragment, enter: "uxf-iwp__popover-panel--enter", enterFrom: "uxf-iwp__popover-panel--enter-from", enterTo: "uxf-iwp__popover-panel--enter-to", leave: "uxf-iwp__popover-panel--leave", leaveFrom: "uxf-iwp__popover-panel--leave-from", leaveTo: "uxf-iwp__popover-panel--leave-to" },
80
90
  react_1.default.createElement(react_3.Popover.Panel, { className: "uxf-iwp__popover-panel", ref: floatingPopover.floating, static: true }, props.children))))));
81
91
  });
92
+ exports._InputWithPopover.displayName = "UxfUiInputWithPopover";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/ui",
3
- "version": "1.0.0-beta.143",
3
+ "version": "1.0.0-beta.145",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"