@hitachivantara/uikit-react-core 5.50.1 → 5.51.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.
@@ -12,8 +12,8 @@ const focusableElementFinder = require("../utils/focusableElementFinder.cjs");
12
12
  const DropDownMenu_styles = require("./DropDownMenu.styles.cjs");
13
13
  const BaseDropdown = require("../BaseDropdown/BaseDropdown.cjs");
14
14
  const Button = require("../Button/Button.cjs");
15
- const Panel = require("../Panel/Panel.cjs");
16
15
  const List = require("../List/List.cjs");
16
+ const Panel = require("../Panel/Panel.cjs");
17
17
  const HvDropDownMenu = (props) => {
18
18
  const {
19
19
  id: idProp,
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const useOption = require("@mui/base/useOption");
6
+ const utils = require("@mui/material/utils");
7
+ const useDefaultProps = require("../hooks/useDefaultProps.cjs");
8
+ const generic = require("../types/generic.cjs");
9
+ const classes = require("../utils/classes.cjs");
10
+ const focusUtils = require("../utils/focusUtils.cjs");
11
+ const ListItem = require("../ListContainer/ListItem/ListItem.cjs");
12
+ const { staticClasses, useClasses } = classes.createClasses("HvOption", {
13
+ root: {},
14
+ highlighted: {
15
+ ...focusUtils.outlineStyles
16
+ }
17
+ });
18
+ const HvOption = generic.fixedForwardRef(function HvOption2(props, ref) {
19
+ const {
20
+ classes: classesProp,
21
+ className,
22
+ disabled = false,
23
+ label,
24
+ value,
25
+ children,
26
+ ...others
27
+ } = useDefaultProps.useDefaultProps("HvOption", props);
28
+ const { classes: classes2, cx } = useClasses(classesProp);
29
+ const optionRef = React.useRef(null);
30
+ const rootRef = utils.useForkRef(optionRef, ref);
31
+ const computedLabel = label ?? (typeof children === "string" ? children : optionRef.current?.textContent?.trim());
32
+ const { getRootProps, selected, highlighted } = useOption.useOption({
33
+ disabled,
34
+ label: computedLabel,
35
+ rootRef,
36
+ value
37
+ });
38
+ return /* @__PURE__ */ jsxRuntime.jsx(
39
+ ListItem.HvListItem,
40
+ {
41
+ ref,
42
+ selected,
43
+ className: cx(classes2.root, className, {
44
+ [classes2.highlighted]: highlighted
45
+ }),
46
+ ...getRootProps(),
47
+ ...others,
48
+ children
49
+ }
50
+ );
51
+ });
52
+ exports.HvOption = HvOption;
53
+ exports.optionClasses = staticClasses;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Option.cjs","sources":["../../../src/Select/Option.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { useOption } from \"@mui/base/useOption\";\nimport { OptionOwnProps } from \"@mui/base/Option\";\nimport { useForkRef } from \"@mui/material/utils\";\n\nimport { HvListItem, HvListItemProps } from \"../ListContainer\";\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { fixedForwardRef } from \"../types/generic\";\nimport { ExtractNames, createClasses } from \"../utils/classes\";\nimport { outlineStyles } from \"../utils/focusUtils\";\n\nconst { staticClasses, useClasses } = createClasses(\"HvOption\", {\n root: {},\n highlighted: {\n ...outlineStyles,\n },\n});\n\nexport { staticClasses as optionClasses };\n\nexport type HvOptionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvOptionProps<OptionValue extends {}>\n extends Omit<HvListItemProps, \"value\" | \"disabled\">,\n Pick<OptionOwnProps<OptionValue>, \"disabled\" | \"label\" | \"value\"> {\n classes?: HvOptionClasses;\n}\n\nexport const HvOption = fixedForwardRef(function HvOption<\n OptionValue extends {}\n>(props: HvOptionProps<OptionValue>, ref: React.Ref<HTMLLIElement>) {\n const {\n classes: classesProp,\n className,\n disabled = false,\n label,\n value,\n children,\n ...others\n } = useDefaultProps(\"HvOption\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const optionRef = useRef<HTMLElement>(null);\n const rootRef = useForkRef(optionRef, ref);\n\n const computedLabel =\n label ??\n (typeof children === \"string\"\n ? children\n : optionRef.current?.textContent?.trim());\n\n const { getRootProps, selected, highlighted } = useOption({\n disabled,\n label: computedLabel,\n rootRef,\n value,\n });\n\n return (\n <HvListItem\n ref={ref}\n selected={selected}\n className={cx(classes.root, className, {\n [classes.highlighted]: highlighted,\n })}\n {...getRootProps()}\n {...others}\n >\n {children}\n </HvListItem>\n );\n});\n"],"names":["createClasses","outlineStyles","fixedForwardRef","HvOption","useDefaultProps","classes","useRef","useForkRef","useOption","jsx","HvListItem"],"mappings":";;;;;;;;;;;AAWA,MAAM,EAAE,eAAe,eAAeA,QAAAA,cAAc,YAAY;AAAA,EAC9D,MAAM,CAAC;AAAA,EACP,aAAa;AAAA,IACX,GAAGC,WAAA;AAAA,EACL;AACF,CAAC;AAYM,MAAM,WAAWC,QAAAA,gBAAgB,SAASC,UAE/C,OAAmC,KAA+B;AAC5D,QAAA;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,IACDC,gBAAgB,gBAAA,YAAY,KAAK;AACrC,QAAM,EAAE,SAAAC,UAAS,GAAG,IAAI,WAAW,WAAW;AAExC,QAAA,YAAYC,aAAoB,IAAI;AACpC,QAAA,UAAUC,MAAAA,WAAW,WAAW,GAAG;AAEnC,QAAA,gBACJ,UACC,OAAO,aAAa,WACjB,WACA,UAAU,SAAS,aAAa,KAAK;AAE3C,QAAM,EAAE,cAAc,UAAU,YAAA,IAAgBC,UAAAA,UAAU;AAAA,IACxD;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EAAA,CACD;AAGC,SAAAC,2BAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAGL,SAAQ,MAAM,WAAW;AAAA,QACrC,CAACA,SAAQ,WAAW,GAAG;AAAA,MAAA,CACxB;AAAA,MACA,GAAG,aAAa;AAAA,MAChB,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;;;"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const OptionGroup = require("@mui/base/OptionGroup");
6
+ const uikitStyles = require("@hitachivantara/uikit-styles");
7
+ const classes = require("../utils/classes.cjs");
8
+ const useDefaultProps = require("../hooks/useDefaultProps.cjs");
9
+ const { staticClasses, useClasses } = classes.createClasses("HvOptionGroup", {
10
+ root: {
11
+ listStyle: "none",
12
+ ...uikitStyles.theme.typography.label
13
+ }
14
+ });
15
+ const HvOptionGroup = React.forwardRef(
16
+ (props, ref) => {
17
+ const {
18
+ className,
19
+ classes: classesProp,
20
+ ...others
21
+ } = useDefaultProps.useDefaultProps("HvOptionGroup", props);
22
+ const { classes: classes2, cx } = useClasses(classesProp);
23
+ return /* @__PURE__ */ jsxRuntime.jsx(
24
+ OptionGroup.OptionGroup,
25
+ {
26
+ ref,
27
+ className: cx(classes2.root, className),
28
+ ...others
29
+ }
30
+ );
31
+ }
32
+ );
33
+ exports.HvOptionGroup = HvOptionGroup;
34
+ exports.optionGroupClasses = staticClasses;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionGroup.cjs","sources":["../../../src/Select/OptionGroup.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { OptionGroup, OptionGroupProps } from \"@mui/base/OptionGroup\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { ExtractNames, createClasses } from \"../utils/classes\";\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\n\nconst { staticClasses, useClasses } = createClasses(\"HvOptionGroup\", {\n root: {\n listStyle: \"none\",\n ...theme.typography.label,\n },\n});\n\nexport { staticClasses as optionGroupClasses };\n\nexport type HvOptionGroupClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvOptionGroupProps extends OptionGroupProps {\n classes?: HvOptionGroupClasses;\n}\n\nexport const HvOptionGroup = forwardRef<HTMLLIElement, HvOptionGroupProps>(\n (props, ref) => {\n const {\n className,\n classes: classesProp,\n ...others\n } = useDefaultProps(\"HvOptionGroup\", props);\n const { classes, cx } = useClasses(classesProp);\n\n return (\n <OptionGroup\n ref={ref}\n className={cx(classes.root, className)}\n {...others}\n />\n );\n }\n);\n"],"names":["createClasses","theme","forwardRef","useDefaultProps","classes","jsx","OptionGroup"],"mappings":";;;;;;;;AAOA,MAAM,EAAE,eAAe,eAAeA,QAAAA,cAAc,iBAAiB;AAAA,EACnE,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,GAAGC,YAAAA,MAAM,WAAW;AAAA,EACtB;AACF,CAAC;AAUM,MAAM,gBAAgBC,MAAA;AAAA,EAC3B,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT,GAAG;AAAA,IAAA,IACDC,gBAAgB,gBAAA,iBAAiB,KAAK;AAC1C,UAAM,EAAE,SAAAC,UAAS,GAAG,IAAI,WAAW,WAAW;AAG5C,WAAAC,2BAAA;AAAA,MAACC,YAAA;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAGF,SAAQ,MAAM,SAAS;AAAA,QACpC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;;;"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const clsx = require("clsx");
6
+ const useSelect = require("@mui/base/useSelect");
7
+ const utils = require("@mui/material/utils");
8
+ const Popper = require("@mui/base/Popper");
9
+ const generic = require("../types/generic.cjs");
10
+ const useDefaultProps = require("../hooks/useDefaultProps.cjs");
11
+ const Select_styles = require("./Select.styles.cjs");
12
+ const setId = require("../utils/setId.cjs");
13
+ const useUniqueId = require("../hooks/useUniqueId.cjs");
14
+ const SelectButton = require("./SelectButton.cjs");
15
+ const Panel = require("../Panel/Panel.cjs");
16
+ const FormElement = require("../Forms/FormElement/FormElement.cjs");
17
+ const Label = require("../Forms/Label/Label.cjs");
18
+ const InfoMessage = require("../Forms/InfoMessage/InfoMessage.cjs");
19
+ const ListContainer = require("../ListContainer/ListContainer.cjs");
20
+ const WarningText = require("../Forms/WarningText/WarningText.cjs");
21
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
22
+ const clsx__default = /* @__PURE__ */ _interopDefault(clsx);
23
+ function defaultRenderValue(options) {
24
+ if (Array.isArray(options)) {
25
+ if (options.length === 0)
26
+ return null;
27
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: options.map((o) => o.label).join(", ") });
28
+ }
29
+ return options?.label ?? null;
30
+ }
31
+ const mergeIds = (...ids) => clsx__default.default(ids) || void 0;
32
+ const HvSelect = generic.fixedForwardRef(function HvSelect2(props, ref) {
33
+ const {
34
+ children,
35
+ classes: classesProp,
36
+ className,
37
+ id: idProp,
38
+ name,
39
+ required,
40
+ disabled: disabledProp,
41
+ readOnly,
42
+ label,
43
+ open: openProp,
44
+ defaultOpen,
45
+ multiple,
46
+ autoComplete,
47
+ options: optionsProp,
48
+ variableWidth,
49
+ value: valueProp,
50
+ defaultValue,
51
+ placeholder,
52
+ "aria-label": ariaLabel,
53
+ "aria-labelledby": ariaLabelledBy,
54
+ description,
55
+ "aria-describedby": ariaDescribedBy,
56
+ status,
57
+ statusMessage,
58
+ "aria-errormessage": ariaErrorMessage,
59
+ getSerializedValue,
60
+ onClick,
61
+ onChange,
62
+ onOpenChange,
63
+ ...others
64
+ } = useDefaultProps.useDefaultProps("HvSelect", props);
65
+ const { classes, cx } = Select_styles.useClasses(classesProp);
66
+ const [placement, setPlacement] = React.useState("bottom-start");
67
+ const buttonRef = React.useRef(null);
68
+ const handleButtonRef = utils.useForkRef(ref, buttonRef);
69
+ const {
70
+ contextValue,
71
+ disabled,
72
+ getButtonProps,
73
+ getListboxProps,
74
+ getHiddenInputProps,
75
+ getOptionMetadata,
76
+ value,
77
+ open
78
+ } = useSelect.useSelect({
79
+ componentName: "HvSelect",
80
+ name,
81
+ required,
82
+ disabled: disabledProp,
83
+ multiple,
84
+ open: openProp,
85
+ defaultOpen,
86
+ value: valueProp,
87
+ defaultValue,
88
+ options: optionsProp,
89
+ buttonRef: handleButtonRef,
90
+ getSerializedValue,
91
+ onChange,
92
+ onOpenChange: handleOpenChange
93
+ });
94
+ const id = useUniqueId.useUniqueId(idProp);
95
+ const labelId = useUniqueId.useUniqueId(setId.setId(idProp, "label"));
96
+ const descriptionId = useUniqueId.useUniqueId(setId.setId(idProp, "description"));
97
+ const errorMessageId = useUniqueId.useUniqueId(setId.setId(idProp, "error"));
98
+ const [validationMessage] = utils.useControlled({
99
+ name: "HvSelect.statusMessage",
100
+ controlled: statusMessage,
101
+ default: "Required"
102
+ });
103
+ const [validationState, setValidationState] = utils.useControlled({
104
+ name: "HvSelect.status",
105
+ controlled: status,
106
+ default: "standBy"
107
+ });
108
+ function handleOpenChange(newOpen) {
109
+ if (!newOpen) {
110
+ const hasValue = multiple ? value.length > 0 : !!value;
111
+ setValidationState(required && !hasValue ? "invalid" : "valid");
112
+ }
113
+ onOpenChange?.(newOpen);
114
+ }
115
+ const canShowError = ariaErrorMessage == null && (status !== void 0 && statusMessage !== void 0 || status === void 0 && required);
116
+ const isInvalid = validationState === "invalid";
117
+ const actualValue = multiple ? value.map((v) => getOptionMetadata(v)).filter((v) => v !== void 0) : getOptionMetadata(value) ?? null;
118
+ const isOpen = open && !!children;
119
+ return /* @__PURE__ */ jsxRuntime.jsxs(
120
+ FormElement.HvFormElement,
121
+ {
122
+ name,
123
+ required,
124
+ disabled,
125
+ readOnly,
126
+ status: validationState,
127
+ className: cx(classes.root, className, {
128
+ [classes.disabled]: disabled,
129
+ [classes.readOnly]: readOnly
130
+ }),
131
+ ...others,
132
+ children: [
133
+ (label || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.labelContainer, children: [
134
+ label && /* @__PURE__ */ jsxRuntime.jsx(
135
+ Label.HvLabel,
136
+ {
137
+ id: labelId,
138
+ htmlFor: id,
139
+ label,
140
+ className: classes.label
141
+ }
142
+ ),
143
+ description && /* @__PURE__ */ jsxRuntime.jsx(InfoMessage.HvInfoMessage, { id: descriptionId, className: classes.description, children: description })
144
+ ] }),
145
+ /* @__PURE__ */ jsxRuntime.jsx(
146
+ SelectButton.HvSelectButton,
147
+ {
148
+ id,
149
+ open: isOpen,
150
+ disabled,
151
+ readOnly,
152
+ className: cx(classes.select, {
153
+ [classes.invalid]: validationState === "invalid"
154
+ }),
155
+ placement,
156
+ "aria-label": ariaLabel,
157
+ "aria-labelledby": mergeIds(label && labelId, ariaLabelledBy),
158
+ "aria-invalid": isInvalid ? true : void 0,
159
+ "aria-errormessage": errorMessageId,
160
+ "aria-describedby": mergeIds(
161
+ description && descriptionId,
162
+ ariaDescribedBy
163
+ ),
164
+ ...getButtonProps(),
165
+ children: defaultRenderValue(actualValue) ?? placeholder
166
+ }
167
+ ),
168
+ /* @__PURE__ */ jsxRuntime.jsx(
169
+ Popper.Popper,
170
+ {
171
+ open: isOpen,
172
+ keepMounted: true,
173
+ disablePortal: true,
174
+ anchorEl: buttonRef.current,
175
+ className: classes.popper,
176
+ placement,
177
+ modifiers: [
178
+ {
179
+ enabled: true,
180
+ phase: "main",
181
+ fn: ({ state }) => setPlacement(state.placement)
182
+ }
183
+ ],
184
+ children: /* @__PURE__ */ jsxRuntime.jsx(
185
+ Panel.HvPanel,
186
+ {
187
+ style: {
188
+ width: variableWidth ? "auto" : (buttonRef.current?.clientWidth || 0) + 2
189
+ },
190
+ className: cx(classes.panel, className, {
191
+ [classes.panelOpenedUp]: placement.includes("top"),
192
+ [classes.panelOpenedDown]: placement.includes("bottom")
193
+ }),
194
+ children: /* @__PURE__ */ jsxRuntime.jsx(useSelect.SelectProvider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(ListContainer.HvListContainer, { condensed: true, selectable: true, ...getListboxProps(), children }) })
195
+ }
196
+ )
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsxRuntime.jsx("input", { ...getHiddenInputProps(), autoComplete }),
200
+ canShowError && /* @__PURE__ */ jsxRuntime.jsx(
201
+ WarningText.HvWarningText,
202
+ {
203
+ id: errorMessageId,
204
+ disableBorder: true,
205
+ className: classes.error,
206
+ children: validationMessage
207
+ }
208
+ )
209
+ ]
210
+ }
211
+ );
212
+ });
213
+ exports.selectClasses = Select_styles.staticClasses;
214
+ exports.HvSelect = HvSelect;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.cjs","sources":["../../../src/Select/Select.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useRef, useState } from \"react\";\nimport type { Placement } from \"@popperjs/core\";\nimport clsx from \"clsx\";\n\nimport {\n SelectProvider,\n UseSelectParameters,\n useSelect,\n} from \"@mui/base/useSelect\";\nimport { useControlled, useForkRef } from \"@mui/material/utils\";\nimport { Popper } from \"@mui/base/Popper\";\nimport { SelectOption } from \"@mui/base/useOption\";\n\nimport {\n HvFormElement,\n HvFormElementProps,\n HvFormStatus,\n HvInfoMessage,\n HvLabel,\n HvWarningText,\n} from \"../Forms\";\nimport { ExtractNames } from \"../utils/classes\";\nimport { fixedForwardRef } from \"../types/generic\";\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { staticClasses, useClasses } from \"./Select.styles\";\nimport { setId } from \"../utils/setId\";\nimport { useUniqueId } from \"../hooks/useUniqueId\";\nimport { HvPanel } from \"../Panel\";\nimport { HvListContainer } from \"../ListContainer\";\nimport { HvSelectButton } from \"./SelectButton\";\n\nfunction defaultRenderValue<Value>(\n options: SelectOption<Value> | SelectOption<Value>[] | null\n) {\n if (Array.isArray(options)) {\n if (options.length === 0) return null;\n return <>{options.map((o) => o.label).join(\", \")}</>;\n }\n\n return options?.label ?? null;\n}\n\nconst mergeIds = (...ids: clsx.ClassValue[]) => clsx(ids) || undefined;\n\nexport { staticClasses as selectClasses };\n\nexport type HvSelectClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvSelectProps<\n OptionValue extends {},\n Multiple extends boolean = false\n> extends Omit<HvFormElementProps, \"value\" | \"defaultValue\" | \"onChange\">,\n Pick<\n UseSelectParameters<OptionValue, Multiple>,\n | \"name\"\n | \"required\"\n | \"disabled\"\n | \"multiple\"\n | \"open\"\n | \"defaultOpen\"\n | \"value\"\n | \"defaultValue\"\n | \"buttonRef\"\n | \"options\"\n | \"getSerializedValue\"\n | \"onChange\"\n | \"onOpenChange\"\n > {\n classes?: HvSelectClasses;\n placeholder?: React.ReactNode;\n autoComplete?: string;\n /** Whether the width of the select panel can vary independently. */\n variableWidth?: boolean;\n}\n\n/**\n * The `HvSelect` component is a form control element that allows selection from a list of options.\n *\n * It aims to be aligned with the native HTML `<select>` and `<option>` APIs and be easily integrated with forms.\n *\n * @example\n * <HvSelect name=\"pets\">\n * <HvOption value=\"dog\">Dog</HvOption>\n * <HvOption value=\"cat\">Cat</HvOption>\n * </HvSelect>\n * */\nexport const HvSelect = fixedForwardRef(function HvSelect<\n OptionValue extends {},\n Multiple extends boolean\n>(\n props: HvSelectProps<OptionValue, Multiple>,\n ref: React.Ref<HTMLButtonElement>\n) {\n const {\n children,\n classes: classesProp,\n className,\n id: idProp,\n name,\n required,\n disabled: disabledProp,\n readOnly,\n label,\n open: openProp,\n defaultOpen,\n multiple,\n autoComplete,\n options: optionsProp,\n variableWidth,\n value: valueProp,\n defaultValue,\n placeholder,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n status,\n statusMessage,\n \"aria-errormessage\": ariaErrorMessage,\n getSerializedValue,\n onClick,\n onChange,\n onOpenChange,\n ...others\n } = useDefaultProps(\"HvSelect\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const [placement, setPlacement] = useState<Placement>(\"bottom-start\");\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const handleButtonRef = useForkRef(ref, buttonRef);\n\n const {\n contextValue,\n disabled,\n getButtonProps,\n getListboxProps,\n getHiddenInputProps,\n getOptionMetadata,\n value,\n open,\n } = useSelect<OptionValue, Multiple>({\n componentName: \"HvSelect\",\n name,\n required,\n disabled: disabledProp,\n multiple,\n open: openProp,\n defaultOpen,\n value: valueProp,\n defaultValue,\n options: optionsProp,\n buttonRef: handleButtonRef,\n getSerializedValue,\n onChange,\n onOpenChange: handleOpenChange,\n });\n\n const id = useUniqueId(idProp);\n const labelId = useUniqueId(setId(idProp, \"label\"));\n const descriptionId = useUniqueId(setId(idProp, \"description\"));\n const errorMessageId = useUniqueId(setId(idProp, \"error\"));\n\n const [validationMessage] = useControlled({\n name: \"HvSelect.statusMessage\",\n controlled: statusMessage,\n default: \"Required\",\n });\n const [validationState, setValidationState] = useControlled<HvFormStatus>({\n name: \"HvSelect.status\",\n controlled: status,\n default: \"standBy\",\n });\n\n function handleOpenChange(newOpen: boolean) {\n if (!newOpen) {\n const hasValue = multiple ? (value as OptionValue[]).length > 0 : !!value;\n setValidationState(required && !hasValue ? \"invalid\" : \"valid\");\n }\n onOpenChange?.(newOpen);\n }\n\n // the error message area will only be created if:\n // - an external element that provides an error message isn't identified via aria-errormessage AND\n // - both status and statusMessage properties are being controlled OR\n // - status is uncontrolled and required is true\n const canShowError =\n ariaErrorMessage == null &&\n ((status !== undefined && statusMessage !== undefined) ||\n (status === undefined && required));\n\n const isInvalid = validationState === \"invalid\";\n\n const actualValue = multiple\n ? (value as OptionValue[])\n .map((v) => getOptionMetadata(v))\n .filter((v): v is SelectOption<OptionValue> => v !== undefined)\n : getOptionMetadata(value as OptionValue) ?? null;\n\n const isOpen = open && !!children;\n\n return (\n <HvFormElement\n name={name}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n className={cx(classes.root, className, {\n [classes.disabled]: disabled,\n [classes.readOnly]: readOnly,\n })}\n {...others}\n >\n {(label || description) && (\n <div className={classes.labelContainer}>\n {label && (\n <HvLabel\n id={labelId}\n htmlFor={id}\n label={label}\n className={classes.label}\n />\n )}\n {description && (\n <HvInfoMessage id={descriptionId} className={classes.description}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n <HvSelectButton\n id={id}\n open={isOpen}\n disabled={disabled}\n readOnly={readOnly}\n className={cx(classes.select, {\n [classes.invalid]: validationState === \"invalid\",\n })}\n placement={placement}\n aria-label={ariaLabel}\n aria-labelledby={mergeIds(label && labelId, ariaLabelledBy)}\n aria-invalid={isInvalid ? true : undefined}\n aria-errormessage={errorMessageId}\n aria-describedby={mergeIds(\n description && descriptionId,\n ariaDescribedBy\n )}\n {...getButtonProps()}\n >\n {defaultRenderValue(actualValue) ?? placeholder}\n </HvSelectButton>\n <Popper\n open={isOpen}\n keepMounted\n disablePortal\n anchorEl={buttonRef.current}\n className={classes.popper}\n placement={placement}\n modifiers={[\n {\n enabled: true,\n phase: \"main\",\n fn: ({ state }) => setPlacement(state.placement),\n },\n ]}\n >\n <HvPanel\n style={{\n width: variableWidth\n ? \"auto\"\n : (buttonRef.current?.clientWidth || 0) + 2,\n }}\n className={cx(classes.panel, className, {\n [classes.panelOpenedUp]: placement.includes(\"top\"),\n [classes.panelOpenedDown]: placement.includes(\"bottom\"),\n })}\n >\n <SelectProvider value={contextValue}>\n <HvListContainer condensed selectable {...getListboxProps()}>\n {children}\n </HvListContainer>\n </SelectProvider>\n </HvPanel>\n </Popper>\n\n <input {...getHiddenInputProps()} autoComplete={autoComplete} />\n\n {canShowError && (\n <HvWarningText\n id={errorMessageId}\n disableBorder\n className={classes.error}\n >\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n});\n"],"names":["jsx","Fragment","clsx","fixedForwardRef","HvSelect","useDefaultProps","useClasses","useState","useRef","useForkRef","useSelect","useUniqueId","setId","useControlled","jsxs","HvFormElement","HvLabel","HvInfoMessage","HvSelectButton","Popper","HvPanel","SelectProvider","HvListContainer","HvWarningText"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const uikitStyles = require("@hitachivantara/uikit-styles");
4
+ const classes = require("../utils/classes.cjs");
5
+ const { staticClasses, useClasses } = classes.createClasses("HvSelect", {
6
+ root: {
7
+ position: "relative",
8
+ "&$disabled,&$readOnly": {
9
+ pointerEvents: "none"
10
+ }
11
+ },
12
+ disabled: {},
13
+ readOnly: {},
14
+ invalid: {
15
+ border: `1px solid ${uikitStyles.theme.colors.negative}`
16
+ },
17
+ labelContainer: {
18
+ display: "flex",
19
+ alignItems: "flex-start"
20
+ },
21
+ label: {
22
+ display: "block",
23
+ paddingBottom: 6
24
+ },
25
+ description: {},
26
+ select: {},
27
+ popper: {
28
+ zIndex: uikitStyles.theme.zIndices.popover
29
+ },
30
+ panel: {
31
+ border: `1px solid ${uikitStyles.theme.colors.secondary}`,
32
+ marginTop: -1,
33
+ marginBottom: -1
34
+ },
35
+ panelOpenedUp: {
36
+ borderRadius: `${uikitStyles.theme.radii.base} ${uikitStyles.theme.radii.base} 0 0`
37
+ },
38
+ panelOpenedDown: {
39
+ borderRadius: `0 0 ${uikitStyles.theme.radii.base} ${uikitStyles.theme.radii.base}`
40
+ },
41
+ error: {}
42
+ });
43
+ exports.staticClasses = staticClasses;
44
+ exports.useClasses = useClasses;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.styles.cjs","sources":["../../../src/Select/Select.styles.ts"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../utils/classes\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvSelect\", {\n root: {\n position: \"relative\",\n \"&$disabled,&$readOnly\": {\n pointerEvents: \"none\",\n },\n },\n disabled: {},\n readOnly: {},\n invalid: {\n border: `1px solid ${theme.colors.negative}`,\n },\n labelContainer: {\n display: \"flex\",\n alignItems: \"flex-start\",\n },\n label: {\n display: \"block\",\n paddingBottom: 6,\n },\n description: {},\n select: {},\n popper: {\n zIndex: theme.zIndices.popover,\n },\n panel: {\n border: `1px solid ${theme.colors.secondary}`,\n marginTop: -1,\n marginBottom: -1,\n },\n panelOpenedUp: {\n borderRadius: `${theme.radii.base} ${theme.radii.base} 0 0`,\n },\n panelOpenedDown: {\n borderRadius: `0 0 ${theme.radii.base} ${theme.radii.base}`,\n },\n error: {},\n});\n"],"names":["createClasses","theme"],"mappings":";;;;AAIO,MAAM,EAAE,eAAe,eAAeA,QAAAA,cAAc,YAAY;AAAA,EACrE,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,yBAAyB;AAAA,MACvB,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,UAAU,CAAC;AAAA,EACX,UAAU,CAAC;AAAA,EACX,SAAS;AAAA,IACP,QAAQ,aAAaC,YAAM,MAAA,OAAO,QAAQ;AAAA,EAC5C;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,aAAa,CAAC;AAAA,EACd,QAAQ,CAAC;AAAA,EACT,QAAQ;AAAA,IACN,QAAQA,YAAAA,MAAM,SAAS;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,aAAaA,YAAM,MAAA,OAAO,SAAS;AAAA,IAC3C,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,cAAc,GAAGA,YAAM,MAAA,MAAM,IAAI,IAAIA,kBAAM,MAAM,IAAI;AAAA,EACvD;AAAA,EACA,iBAAiB;AAAA,IACf,cAAc,OAAOA,YAAAA,MAAM,MAAM,IAAI,IAAIA,YAAA,MAAM,MAAM,IAAI;AAAA,EAC3D;AAAA,EACA,OAAO,CAAC;AACV,CAAC;;;"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
6
+ const uikitStyles = require("@hitachivantara/uikit-styles");
7
+ const useDefaultProps = require("../hooks/useDefaultProps.cjs");
8
+ const classes = require("../utils/classes.cjs");
9
+ const Button = require("../Button/Button.cjs");
10
+ const { staticClasses, useClasses } = classes.createClasses("HvSelectButton", {
11
+ root: {
12
+ width: "100%",
13
+ minWidth: "unset",
14
+ userSelect: "none",
15
+ position: "relative",
16
+ paddingLeft: uikitStyles.theme.space.xs,
17
+ justifyContent: "flex-start"
18
+ },
19
+ disabled: {},
20
+ readOnly: {
21
+ userSelect: "text",
22
+ backgroundColor: uikitStyles.theme.colors.atmo2
23
+ },
24
+ open: {
25
+ backgroundColor: uikitStyles.theme.colors.atmo1
26
+ },
27
+ openUp: {
28
+ borderRadius: `0px 0px ${uikitStyles.theme.radii.base} ${uikitStyles.theme.radii.base}`
29
+ },
30
+ openDown: {
31
+ borderRadius: `${uikitStyles.theme.radii.base} ${uikitStyles.theme.radii.base} 0px 0px`
32
+ },
33
+ selection: {
34
+ color: "inherit",
35
+ flex: 1,
36
+ textAlign: "start",
37
+ overflow: "clip visible",
38
+ textOverflow: "ellipsis",
39
+ whiteSpace: "nowrap"
40
+ },
41
+ placeholder: {},
42
+ arrowContainer: {
43
+ marginRight: uikitStyles.theme.spacing(-2)
44
+ },
45
+ arrow: {
46
+ transition: "rotate 0.2s ease"
47
+ }
48
+ });
49
+ const HvSelectButton = React.forwardRef((props, ref) => {
50
+ const {
51
+ classes: classesProp,
52
+ className,
53
+ open,
54
+ placement = "bottom",
55
+ disabled,
56
+ readOnly,
57
+ children,
58
+ adornment,
59
+ ...others
60
+ } = useDefaultProps.useDefaultProps("HvSelectButton", props);
61
+ const { classes: classes2, cx } = useClasses(classesProp);
62
+ const endIcon = adornment ?? /* @__PURE__ */ jsxRuntime.jsx(
63
+ uikitReactIcons.DropDownXS,
64
+ {
65
+ iconSize: "XS",
66
+ style: { rotate: open ? "180deg" : void 0 },
67
+ className: classes2.arrow
68
+ }
69
+ );
70
+ return /* @__PURE__ */ jsxRuntime.jsx(
71
+ Button.HvButton,
72
+ {
73
+ ref,
74
+ variant: "secondarySubtle",
75
+ disabled: disabled || readOnly,
76
+ className: cx(classes2.root, className, {
77
+ [classes2.open]: open,
78
+ [classes2.openUp]: open && placement.includes("top"),
79
+ [classes2.openDown]: open && placement.includes("bottom"),
80
+ [classes2.disabled]: disabled,
81
+ [classes2.readOnly]: readOnly
82
+ }),
83
+ classes: { endIcon: classes2.arrowContainer },
84
+ endIcon,
85
+ ...others,
86
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes2.selection, children: children && typeof children === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes2.placeholder, children }) : children })
87
+ }
88
+ );
89
+ });
90
+ exports.HvSelectButton = HvSelectButton;
91
+ exports.staticClasses = staticClasses;
92
+ exports.useClasses = useClasses;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectButton.cjs","sources":["../../../src/Select/SelectButton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { Placement } from \"@popperjs/core\";\nimport { DropDownXS } from \"@hitachivantara/uikit-react-icons\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { ExtractNames, createClasses } from \"../utils/classes\";\nimport { HvButton } from \"../Button\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvSelectButton\", {\n root: {\n width: \"100%\",\n minWidth: \"unset\",\n userSelect: \"none\",\n position: \"relative\",\n paddingLeft: theme.space.xs,\n justifyContent: \"flex-start\",\n },\n disabled: {},\n readOnly: {\n userSelect: \"text\",\n backgroundColor: theme.colors.atmo2,\n },\n open: {\n backgroundColor: theme.colors.atmo1,\n },\n openUp: {\n borderRadius: `0px 0px ${theme.radii.base} ${theme.radii.base}`,\n },\n openDown: {\n borderRadius: `${theme.radii.base} ${theme.radii.base} 0px 0px`,\n },\n\n selection: {\n color: \"inherit\",\n flex: 1,\n textAlign: \"start\",\n\n overflow: \"clip visible\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n placeholder: {},\n arrowContainer: {\n marginRight: theme.spacing(-2),\n },\n arrow: {\n transition: \"rotate 0.2s ease\",\n },\n});\n\nexport type HvSelectButtonClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvSelectButtonProps\n extends React.HTMLAttributes<HTMLButtonElement> {\n readOnly?: boolean;\n open?: boolean;\n disabled?: boolean;\n placement?: Placement;\n adornment?: React.ReactNode;\n classes?: HvSelectButtonClasses;\n}\n\n/**\n * HvSelect internal header button component\n */\nexport const HvSelectButton = forwardRef<\n HTMLButtonElement,\n HvSelectButtonProps\n>((props, ref) => {\n const {\n classes: classesProp,\n className,\n open,\n placement = \"bottom\",\n disabled,\n readOnly,\n children,\n adornment,\n ...others\n } = useDefaultProps(\"HvSelectButton\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const endIcon = adornment ?? (\n <DropDownXS\n iconSize=\"XS\"\n style={{ rotate: open ? \"180deg\" : undefined }}\n className={classes.arrow}\n />\n );\n\n return (\n <HvButton\n ref={ref}\n variant=\"secondarySubtle\"\n disabled={disabled || readOnly}\n className={cx(classes.root, className, {\n [classes.open]: open,\n [classes.openUp]: open && placement.includes(\"top\"),\n [classes.openDown]: open && placement.includes(\"bottom\"),\n [classes.disabled]: disabled,\n [classes.readOnly]: readOnly,\n })}\n classes={{ endIcon: classes.arrowContainer }}\n endIcon={endIcon}\n {...others}\n >\n <div className={classes.selection}>\n {children && typeof children === \"string\" ? (\n <div className={classes.placeholder}>{children}</div>\n ) : (\n children\n )}\n </div>\n </HvButton>\n );\n});\n"],"names":["createClasses","theme","forwardRef","useDefaultProps","classes","jsx","DropDownXS","HvButton"],"mappings":";;;;;;;;;AASO,MAAM,EAAE,eAAe,eAAeA,QAAAA,cAAc,kBAAkB;AAAA,EAC3E,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,aAAaC,YAAAA,MAAM,MAAM;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU,CAAC;AAAA,EACX,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,iBAAiBA,YAAAA,MAAM,OAAO;AAAA,EAChC;AAAA,EACA,MAAM;AAAA,IACJ,iBAAiBA,YAAAA,MAAM,OAAO;AAAA,EAChC;AAAA,EACA,QAAQ;AAAA,IACN,cAAc,WAAWA,YAAAA,MAAM,MAAM,IAAI,IAAIA,YAAA,MAAM,MAAM,IAAI;AAAA,EAC/D;AAAA,EACA,UAAU;AAAA,IACR,cAAc,GAAGA,YAAM,MAAA,MAAM,IAAI,IAAIA,kBAAM,MAAM,IAAI;AAAA,EACvD;AAAA,EAEA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAW;AAAA,IAEX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,aAAa,CAAC;AAAA,EACd,gBAAgB;AAAA,IACd,aAAaA,YAAM,MAAA,QAAQ,EAAE;AAAA,EAC/B;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,EACd;AACF,CAAC;AAiBM,MAAM,iBAAiBC,MAAA,WAG5B,CAAC,OAAO,QAAQ;AACV,QAAA;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,IACDC,gBAAgB,gBAAA,kBAAkB,KAAK;AAC3C,QAAM,EAAE,SAAAC,UAAS,GAAG,IAAI,WAAW,WAAW;AAE9C,QAAM,UAAU,aACdC,2BAAA;AAAA,IAACC,gBAAA;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,OAAO,EAAE,QAAQ,OAAO,WAAW,OAAU;AAAA,MAC7C,WAAWF,SAAQ;AAAA,IAAA;AAAA,EAAA;AAKrB,SAAAC,2BAAA;AAAA,IAACE,OAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,UAAU,YAAY;AAAA,MACtB,WAAW,GAAGH,SAAQ,MAAM,WAAW;AAAA,QACrC,CAACA,SAAQ,IAAI,GAAG;AAAA,QAChB,CAACA,SAAQ,MAAM,GAAG,QAAQ,UAAU,SAAS,KAAK;AAAA,QAClD,CAACA,SAAQ,QAAQ,GAAG,QAAQ,UAAU,SAAS,QAAQ;AAAA,QACvD,CAACA,SAAQ,QAAQ,GAAG;AAAA,QACpB,CAACA,SAAQ,QAAQ,GAAG;AAAA,MAAA,CACrB;AAAA,MACD,SAAS,EAAE,SAASA,SAAQ,eAAe;AAAA,MAC3C;AAAA,MACC,GAAG;AAAA,MAEJ,yCAAC,OAAI,EAAA,WAAWA,SAAQ,WACrB,sBAAY,OAAO,aAAa,WAC/BC,2BAAA,IAAC,SAAI,WAAWD,SAAQ,aAAc,SAAA,CAAS,IAE/C,UAEJ;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;;;;"}
@@ -62,6 +62,10 @@ const InfoMessage_styles = require("./Forms/InfoMessage/InfoMessage.styles.cjs")
62
62
  const InfoMessage = require("./Forms/InfoMessage/InfoMessage.cjs");
63
63
  const WarningText_styles = require("./Forms/WarningText/WarningText.styles.cjs");
64
64
  const WarningText = require("./Forms/WarningText/WarningText.cjs");
65
+ const Select_styles = require("./Select/Select.styles.cjs");
66
+ const Select = require("./Select/Select.cjs");
67
+ const Option = require("./Select/Option.cjs");
68
+ const OptionGroup = require("./Select/OptionGroup.cjs");
65
69
  const SelectionList_styles = require("./SelectionList/SelectionList.styles.cjs");
66
70
  const SelectionList = require("./SelectionList/SelectionList.cjs");
67
71
  const Suggestions_styles = require("./Forms/Suggestions/Suggestions.styles.cjs");
@@ -405,6 +409,12 @@ exports.infoMessageClasses = InfoMessage_styles.staticClasses;
405
409
  exports.HvInfoMessage = InfoMessage.HvInfoMessage;
406
410
  exports.warningTextClasses = WarningText_styles.staticClasses;
407
411
  exports.HvWarningText = WarningText.HvWarningText;
412
+ exports.selectClasses = Select_styles.staticClasses;
413
+ exports.HvSelect = Select.HvSelect;
414
+ exports.HvOption = Option.HvOption;
415
+ exports.optionClasses = Option.optionClasses;
416
+ exports.HvOptionGroup = OptionGroup.HvOptionGroup;
417
+ exports.optionGroupClasses = OptionGroup.optionGroupClasses;
408
418
  exports.selectionListClasses = SelectionList_styles.staticClasses;
409
419
  exports.HvSelectionList = SelectionList.HvSelectionList;
410
420
  exports.suggestionsClasses = Suggestions_styles.staticClasses;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -11,8 +11,8 @@ import { useClasses } from "./DropDownMenu.styles.js";
11
11
  import { staticClasses } from "./DropDownMenu.styles.js";
12
12
  import { HvBaseDropdown } from "../BaseDropdown/BaseDropdown.js";
13
13
  import { HvButton } from "../Button/Button.js";
14
- import { HvPanel } from "../Panel/Panel.js";
15
14
  import { HvList } from "../List/List.js";
15
+ import { HvPanel } from "../Panel/Panel.js";
16
16
  const HvDropDownMenu = (props) => {
17
17
  const {
18
18
  id: idProp,
@@ -0,0 +1,53 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { useRef } from "react";
3
+ import { useOption } from "@mui/base/useOption";
4
+ import { useForkRef } from "@mui/material/utils";
5
+ import { useDefaultProps } from "../hooks/useDefaultProps.js";
6
+ import { fixedForwardRef } from "../types/generic.js";
7
+ import { createClasses } from "../utils/classes.js";
8
+ import { outlineStyles } from "../utils/focusUtils.js";
9
+ import { HvListItem } from "../ListContainer/ListItem/ListItem.js";
10
+ const { staticClasses, useClasses } = createClasses("HvOption", {
11
+ root: {},
12
+ highlighted: {
13
+ ...outlineStyles
14
+ }
15
+ });
16
+ const HvOption = fixedForwardRef(function HvOption2(props, ref) {
17
+ const {
18
+ classes: classesProp,
19
+ className,
20
+ disabled = false,
21
+ label,
22
+ value,
23
+ children,
24
+ ...others
25
+ } = useDefaultProps("HvOption", props);
26
+ const { classes, cx } = useClasses(classesProp);
27
+ const optionRef = useRef(null);
28
+ const rootRef = useForkRef(optionRef, ref);
29
+ const computedLabel = label ?? (typeof children === "string" ? children : optionRef.current?.textContent?.trim());
30
+ const { getRootProps, selected, highlighted } = useOption({
31
+ disabled,
32
+ label: computedLabel,
33
+ rootRef,
34
+ value
35
+ });
36
+ return /* @__PURE__ */ jsx(
37
+ HvListItem,
38
+ {
39
+ ref,
40
+ selected,
41
+ className: cx(classes.root, className, {
42
+ [classes.highlighted]: highlighted
43
+ }),
44
+ ...getRootProps(),
45
+ ...others,
46
+ children
47
+ }
48
+ );
49
+ });
50
+ export {
51
+ HvOption,
52
+ staticClasses as optionClasses
53
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Option.js","sources":["../../../src/Select/Option.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { useOption } from \"@mui/base/useOption\";\nimport { OptionOwnProps } from \"@mui/base/Option\";\nimport { useForkRef } from \"@mui/material/utils\";\n\nimport { HvListItem, HvListItemProps } from \"../ListContainer\";\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { fixedForwardRef } from \"../types/generic\";\nimport { ExtractNames, createClasses } from \"../utils/classes\";\nimport { outlineStyles } from \"../utils/focusUtils\";\n\nconst { staticClasses, useClasses } = createClasses(\"HvOption\", {\n root: {},\n highlighted: {\n ...outlineStyles,\n },\n});\n\nexport { staticClasses as optionClasses };\n\nexport type HvOptionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvOptionProps<OptionValue extends {}>\n extends Omit<HvListItemProps, \"value\" | \"disabled\">,\n Pick<OptionOwnProps<OptionValue>, \"disabled\" | \"label\" | \"value\"> {\n classes?: HvOptionClasses;\n}\n\nexport const HvOption = fixedForwardRef(function HvOption<\n OptionValue extends {}\n>(props: HvOptionProps<OptionValue>, ref: React.Ref<HTMLLIElement>) {\n const {\n classes: classesProp,\n className,\n disabled = false,\n label,\n value,\n children,\n ...others\n } = useDefaultProps(\"HvOption\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const optionRef = useRef<HTMLElement>(null);\n const rootRef = useForkRef(optionRef, ref);\n\n const computedLabel =\n label ??\n (typeof children === \"string\"\n ? children\n : optionRef.current?.textContent?.trim());\n\n const { getRootProps, selected, highlighted } = useOption({\n disabled,\n label: computedLabel,\n rootRef,\n value,\n });\n\n return (\n <HvListItem\n ref={ref}\n selected={selected}\n className={cx(classes.root, className, {\n [classes.highlighted]: highlighted,\n })}\n {...getRootProps()}\n {...others}\n >\n {children}\n </HvListItem>\n );\n});\n"],"names":["HvOption"],"mappings":";;;;;;;;;AAWA,MAAM,EAAE,eAAe,eAAe,cAAc,YAAY;AAAA,EAC9D,MAAM,CAAC;AAAA,EACP,aAAa;AAAA,IACX,GAAG;AAAA,EACL;AACF,CAAC;AAYM,MAAM,WAAW,gBAAgB,SAASA,UAE/C,OAAmC,KAA+B;AAC5D,QAAA;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,IACD,gBAAgB,YAAY,KAAK;AACrC,QAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAExC,QAAA,YAAY,OAAoB,IAAI;AACpC,QAAA,UAAU,WAAW,WAAW,GAAG;AAEnC,QAAA,gBACJ,UACC,OAAO,aAAa,WACjB,WACA,UAAU,SAAS,aAAa,KAAK;AAE3C,QAAM,EAAE,cAAc,UAAU,YAAA,IAAgB,UAAU;AAAA,IACxD;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EAAA,CACD;AAGC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAG,QAAQ,MAAM,WAAW;AAAA,QACrC,CAAC,QAAQ,WAAW,GAAG;AAAA,MAAA,CACxB;AAAA,MACA,GAAG,aAAa;AAAA,MAChB,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
@@ -0,0 +1,34 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { OptionGroup } from "@mui/base/OptionGroup";
4
+ import { theme } from "@hitachivantara/uikit-styles";
5
+ import { createClasses } from "../utils/classes.js";
6
+ import { useDefaultProps } from "../hooks/useDefaultProps.js";
7
+ const { staticClasses, useClasses } = createClasses("HvOptionGroup", {
8
+ root: {
9
+ listStyle: "none",
10
+ ...theme.typography.label
11
+ }
12
+ });
13
+ const HvOptionGroup = forwardRef(
14
+ (props, ref) => {
15
+ const {
16
+ className,
17
+ classes: classesProp,
18
+ ...others
19
+ } = useDefaultProps("HvOptionGroup", props);
20
+ const { classes, cx } = useClasses(classesProp);
21
+ return /* @__PURE__ */ jsx(
22
+ OptionGroup,
23
+ {
24
+ ref,
25
+ className: cx(classes.root, className),
26
+ ...others
27
+ }
28
+ );
29
+ }
30
+ );
31
+ export {
32
+ HvOptionGroup,
33
+ staticClasses as optionGroupClasses
34
+ };