@purpur/library 9.0.10 → 9.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.
- package/CHANGELOG.json +33 -0
- package/CHANGELOG.md +15 -1
- package/dist/LICENSE.txt +45 -24
- package/dist/{autocomplete-Dy8YL7Mo.js → autocomplete-B421J7CS.js} +2 -2
- package/dist/{autocomplete-Dy8YL7Mo.js.map → autocomplete-B421J7CS.js.map} +1 -1
- package/dist/{autocomplete-Dn503hFM.mjs → autocomplete-B8L-dTmF.mjs} +3 -3
- package/dist/{autocomplete-Dn503hFM.mjs.map → autocomplete-B8L-dTmF.mjs.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/chat-field-CxOqk0-9.js +2 -0
- package/dist/chat-field-CxOqk0-9.js.map +1 -0
- package/dist/chat-field-yK-TwW0D.mjs +149 -0
- package/dist/chat-field-yK-TwW0D.mjs.map +1 -0
- package/dist/chat-field.cjs.js +2 -0
- package/dist/chat-field.cjs.js.map +1 -0
- package/dist/chat-field.es.js +5 -0
- package/dist/chat-field.es.js.map +1 -0
- package/dist/components/autocomplete/src/autocomplete.d.ts.map +1 -1
- package/dist/components/chat-field/src/chat-field.d.ts +71 -0
- package/dist/components/chat-field/src/chat-field.d.ts.map +1 -0
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group-item.d.ts.map +1 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +6 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-combobox.d.ts +34 -0
- package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -0
- package/dist/components/dropdown/src/dropdown-select.d.ts +34 -0
- package/dist/components/dropdown/src/dropdown-select.d.ts.map +1 -0
- package/dist/components/dropdown/src/dropdown-shared.d.ts +51 -0
- package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -0
- package/dist/components/dropdown/src/dropdown.d.ts +6 -0
- package/dist/components/dropdown/src/dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/src/dropdown.types.d.ts +94 -0
- package/dist/components/dropdown/src/dropdown.types.d.ts.map +1 -0
- package/dist/components/dropdown/src/useDropdown.d.ts +38 -0
- package/dist/components/dropdown/src/useDropdown.d.ts.map +1 -0
- package/dist/components/dropdown/src/useDropdownFilter.d.ts +9 -0
- package/dist/components/dropdown/src/useDropdownFilter.d.ts.map +1 -0
- package/dist/components/dropdown/src/useDropdownHighlight.d.ts +19 -0
- package/dist/components/dropdown/src/useDropdownHighlight.d.ts.map +1 -0
- package/dist/components/dropdown/src/useDropdownInput.d.ts +12 -0
- package/dist/components/dropdown/src/useDropdownInput.d.ts.map +1 -0
- package/dist/components/dropdown/src/useOnClickOutside.d.ts +2 -0
- package/dist/components/dropdown/src/useOnClickOutside.d.ts.map +1 -0
- package/dist/components/listbox/src/listbox-item.d.ts +2 -0
- package/dist/components/listbox/src/listbox-item.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field-autocomplete.d.ts +73 -0
- package/dist/components/search-field/src/search-field-autocomplete.d.ts.map +1 -0
- package/dist/components/search-field/src/search-field-base.d.ts +97 -0
- package/dist/components/search-field/src/search-field-base.d.ts.map +1 -0
- package/dist/components/search-field/src/search-field.d.ts +123 -41
- package/dist/components/search-field/src/search-field.d.ts.map +1 -1
- package/dist/components/text-field/src/text-field-ai.d.ts +669 -0
- package/dist/components/text-field/src/text-field-ai.d.ts.map +1 -0
- package/dist/components/text-field/src/text-field-base.d.ts +671 -0
- package/dist/components/text-field/src/text-field-base.d.ts.map +1 -0
- package/dist/components/text-field/src/text-field.d.ts +42 -4
- package/dist/components/text-field/src/text-field.d.ts.map +1 -1
- package/dist/components-metadata.js +29 -1
- package/dist/{date-field-DACXrowI.mjs → date-field-4tYMPw89.mjs} +2 -2
- package/dist/{date-field-DACXrowI.mjs.map → date-field-4tYMPw89.mjs.map} +1 -1
- package/dist/{date-field-Z3LKO4b7.js → date-field-B7ipm5sH.js} +2 -2
- package/dist/{date-field-Z3LKO4b7.js.map → date-field-B7ipm5sH.js.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-5Gr_cEqA.js → date-picker-B8L1Hm8r.js} +2 -2
- package/dist/{date-picker-5Gr_cEqA.js.map → date-picker-B8L1Hm8r.js.map} +1 -1
- package/dist/{date-picker-CdVUA8NC.mjs → date-picker-Bp_XpoOF.mjs} +2 -2
- package/dist/{date-picker-CdVUA8NC.mjs.map → date-picker-Bp_XpoOF.mjs.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/dismissable-chip-group-Cd23yjBa.js +2 -0
- package/dist/dismissable-chip-group-Cd23yjBa.js.map +1 -0
- package/dist/dismissable-chip-group-D-gD93ON.mjs +89 -0
- package/dist/dismissable-chip-group-D-gD93ON.mjs.map +1 -0
- package/dist/dismissable-chip-group.cjs.js +1 -1
- package/dist/dismissable-chip-group.es.js +5 -2
- package/dist/dropdown-BC6evqyq.js +2 -0
- package/dist/dropdown-BC6evqyq.js.map +1 -0
- package/dist/dropdown-C-Ze4gvG.mjs +771 -0
- package/dist/dropdown-C-Ze4gvG.mjs.map +1 -0
- package/dist/dropdown.cjs.js +2 -0
- package/dist/dropdown.cjs.js.map +1 -0
- package/dist/dropdown.es.js +6 -0
- package/dist/dropdown.es.js.map +1 -0
- package/dist/libraries/library/src/chat-field.d.ts +6 -0
- package/dist/libraries/library/src/chat-field.d.ts.map +1 -0
- package/dist/libraries/library/src/dropdown.d.ts +6 -0
- package/dist/libraries/library/src/dropdown.d.ts.map +1 -0
- package/dist/libraries/library/src/library.d.ts +2 -0
- package/dist/libraries/library/src/library.d.ts.map +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +601 -591
- package/dist/library.es.js.map +1 -1
- package/dist/listbox-COBHLRtB.js +2 -0
- package/dist/listbox-COBHLRtB.js.map +1 -0
- package/dist/listbox-DG4KmQP_.mjs +66 -0
- package/dist/listbox-DG4KmQP_.mjs.map +1 -0
- package/dist/listbox.cjs.js +1 -1
- package/dist/listbox.es.js +1 -1
- package/dist/purpur.css +1 -1
- package/dist/{quantity-selector-w10wKMmT.mjs → quantity-selector-CsR6KTG3.mjs} +2 -2
- package/dist/{quantity-selector-w10wKMmT.mjs.map → quantity-selector-CsR6KTG3.mjs.map} +1 -1
- package/dist/{quantity-selector-D28He6R8.js → quantity-selector-DWDg4aFO.js} +2 -2
- package/dist/{quantity-selector-D28He6R8.js.map → quantity-selector-DWDg4aFO.js.map} +1 -1
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/search-field-Caj2dKLn.mjs +151 -0
- package/dist/search-field-Caj2dKLn.mjs.map +1 -0
- package/dist/search-field-DAktzYb0.js +2 -0
- package/dist/search-field-DAktzYb0.js.map +1 -0
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +3 -2
- package/dist/{table-YR-bpfU0.mjs → table-DXYHrKI7.mjs} +2 -2
- package/dist/{table-YR-bpfU0.mjs.map → table-DXYHrKI7.mjs.map} +1 -1
- package/dist/{table-CJijBJsy.js → table-x3SDCR-z.js} +2 -2
- package/dist/{table-CJijBJsy.js.map → table-x3SDCR-z.js.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/text-field-BQYzwIrG.mjs +322 -0
- package/dist/text-field-BQYzwIrG.mjs.map +1 -0
- package/dist/text-field-BwxGMWds.js +2 -0
- package/dist/text-field-BwxGMWds.js.map +1 -0
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +4 -3
- package/dist/use-autocomplete.es-BHDgQLae.js +2 -0
- package/dist/use-autocomplete.es-BHDgQLae.js.map +1 -0
- package/dist/use-autocomplete.es-CVv3z8t6.mjs +142 -0
- package/dist/use-autocomplete.es-CVv3z8t6.mjs.map +1 -0
- package/package.json +25 -23
- package/src/aliases.ts +8 -0
- package/src/chat-field.ts +6 -0
- package/src/dropdown.ts +6 -0
- package/src/entries.js +2 -0
- package/src/library.ts +4 -0
- package/dist/dismissable-chip-group-CnziecOt.js +0 -2
- package/dist/dismissable-chip-group-CnziecOt.js.map +0 -1
- package/dist/dismissable-chip-group-ZCYOt1sB.mjs +0 -79
- package/dist/dismissable-chip-group-ZCYOt1sB.mjs.map +0 -1
- package/dist/listbox-BmjBtIv8.js +0 -2
- package/dist/listbox-BmjBtIv8.js.map +0 -1
- package/dist/listbox-oDeP8FvH.mjs +0 -65
- package/dist/listbox-oDeP8FvH.mjs.map +0 -1
- package/dist/search-field-CNpJp3Tg.js +0 -2
- package/dist/search-field-CNpJp3Tg.js.map +0 -1
- package/dist/search-field-CWqLnqdo.mjs +0 -91
- package/dist/search-field-CWqLnqdo.mjs.map +0 -1
- package/dist/text-field-BMDf8j-K.mjs +0 -185
- package/dist/text-field-BMDf8j-K.mjs.map +0 -1
- package/dist/text-field-CiLEj0Fq.js +0 -2
- package/dist/text-field-CiLEj0Fq.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as a, jsxs as X, Fragment as J } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as K, useState as S, useEffect as B } from "react";
|
|
3
3
|
import { a as L } from "./spinner-DRQN6YdK.mjs";
|
|
4
|
-
import { T as Y } from "./text-field-
|
|
4
|
+
import { T as Y } from "./text-field-BQYzwIrG.mjs";
|
|
5
5
|
import { c as j } from "./bind-CU-R61T-.mjs";
|
|
6
6
|
import { b as G } from "./button-Cv7NlYbv.mjs";
|
|
7
7
|
import { b as k } from "./icon-DNHpBTHs-JfI8WyiR.mjs";
|
|
@@ -173,4 +173,4 @@ export {
|
|
|
173
173
|
dt as a,
|
|
174
174
|
_t as q
|
|
175
175
|
};
|
|
176
|
-
//# sourceMappingURL=quantity-selector-
|
|
176
|
+
//# sourceMappingURL=quantity-selector-CsR6KTG3.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quantity-selector-w10wKMmT.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quantity-selector-CsR6KTG3.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-
|
|
2
|
-
//# sourceMappingURL=quantity-selector-
|
|
1
|
+
"use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-BwxGMWds.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-Dqxdc3nC.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=u=>n.jsx(V.b,{...u,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=u=>n.jsx(V.b,{...u,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),b="purpur-quantity-selector-button",tt=({["data-testid"]:u,disabled:m,hasGap:e,variant:f,buttonType:r,onClick:o})=>{const h=T(b,{[`${b}--gap-left`]:e&&r==="decrement",[`${b}--gap-right`]:e&&r==="increment",[`${b}--no-gap-left`]:!e&&r==="decrement",[`${b}--no-gap-right`]:!e&&r==="increment"});return n.jsx(K.Button,{"data-testid":u,className:h,size:"sm",type:"submit",variant:f,onClick:()=>o(r),iconOnly:!0,disabled:m,tabIndex:-1,children:r==="increment"?n.jsx(F,{size:"xs"}):n.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],nt=["primary","secondary"],s="purpur-quantity-selector",R=_.forwardRef(({["data-testid"]:u,className:m,variant:e,buttonVariant:f,onChange:r,value:o,defaultValue:h,fullWidth:x,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=_.useState(h??0),[w,j]=_.useState(O),a=o!==void 0,l=a?o:w,S=t=>u?`${u}-${t}`:void 0,i=k||v,g=Math.max(E??0,0),q=H??Number.MAX_SAFE_INTEGER,p=l===q,d=l===g;_.useEffect(()=>{a&&$(o)},[o,a]),_.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,r]);const A=B(m,s,{[`${s}--no-gap`]:e==="attached"&&!i&&!d&&!p,[`${s}--no-gap-disabled-left`]:e==="attached"&&!i&&!p&&d,[`${s}--no-gap-disabled-right`]:e==="attached"&&!i&&!d&&p,[`${s}--no-gap-disabled`]:e==="attached"&&(i||p&&d),[`${s}--full-width`]:x,[`${s}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const y=+t.target.value;y<g||y>q||(a||j(y),r(y))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),r(c))},N=t=>{const c=t==="increment"&&p||t==="decrement"&&d;return n.jsx(tt,{"data-testid":S("button-"+t),variant:f,buttonType:t,hasGap:e==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=n.jsxs(n.Fragment,{children:[v&&n.jsx("div",{className:B(`${s}__spinner`,{[`${s}__spinner--full-width`]:x,[`${s}__spinner--separated`]:!x&&e==="separated"}),children:n.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return n.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":u,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:g,max:q,role:"spinbutton","aria-valuenow":l,"aria-valuemax":q,"aria-valuemin":g,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=nt;exports.quantitySelectorVariants=et;
|
|
2
|
+
//# sourceMappingURL=quantity-selector-DWDg4aFO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quantity-selector-D28He6R8.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"spCAEMA,EAAI,CACR,KAAM,QACN,IAAK,6MACL,SAAU,CAAC,OAAO,EAClB,SAAU,SACZ,EAAGC,EAAKC,GAAsBC,MAAEC,EAAAA,EAAG,CAAE,GAAGF,EAAG,IAAKF,EAAG,EACnDC,EAAE,YAAc,YCNhB,MAAMA,EAAI,CACR,KAAM,OACN,IAAK,qQACL,SAAU,CAAC,MAAM,EACjB,SAAU,SACZ,EAAGI,EAAKH,GAAsBC,MAAEG,EAAAA,EAAG,CAAE,GAAGJ,EAAG,IAAKD,EAAG,EACnDI,EAAE,YAAc,wfCYVE,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,kCAETC,GAAyB,CAAC,CACrC,CAAC,eAAgBC,EACjB,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,QAAAC,CACF,IAAmC,CACjC,MAAMC,EAAUX,EAAGG,EAAe,CAChC,CAAC,GAAGA,CAAa,YAAY,EAAGI,GAAUE,IAAe,YACzD,CAAC,GAAGN,CAAa,aAAa,EAAGI,GAAUE,IAAe,YAC1D,CAAC,GAAGN,CAAa,eAAe,EAAG,CAACI,GAAUE,IAAe,YAC7D,CAAC,GAAGN,CAAa,gBAAgB,EAAG,CAACI,GAAUE,IAAe,WAAA,CAC/D,EAED,OACEG,EAAAA,IAACC,EAAAA,OAAA,CACC,cAAaR,EACb,UAAWM,EACX,KAAK,KACL,KAAK,SACL,QAAAH,EACA,QAAS,IAAME,EAAQD,CAAU,EACjC,SAAU,GACV,SAAAH,EACA,SAAU,GAET,SAAAG,IAAe,YAAcG,EAAAA,IAACE,EAAA,CAAS,KAAK,KAAK,EAAKF,EAAAA,IAACG,EAAA,CAAU,KAAK,IAAA,CAAK,CAAA,CAAA,CAGlF,EC5CMf,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXc,GAA2B,CAAC,WAAY,WAAW,EACnDC,GAAiC,CAAC,UAAW,WAAW,EAyB/Dd,EAAgB,2BAETe,EAAmBC,EAAAA,WAC9B,CACE,CACE,CAAC,eAAgBC,EACjB,UAAAC,EACA,QAAAb,EACA,cAAAc,EACA,SAAAC,EACA,MAAOC,EACP,aAAAC,EACA,UAAAC,EACA,SAAApB,EACA,QAAAqB,EACA,SAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAmBC,CAAoB,EAAIC,EAAAA,SAASX,GAAgB,CAAC,EACtE,CAACY,EAAgBC,CAAiB,EAAIF,EAAAA,SAASF,CAAiB,EAChEK,EAAef,IAAoB,OACnCgB,EAAQD,EAAef,EAAkBa,EAEzCI,EAAaC,GAAkBtB,EAAa,GAAGA,CAAU,IAAIsB,CAAI,GAAK,OACtEC,EAAarC,GAAYqB,EACzBiB,EAAM,KAAK,IAAIhB,GAAY,EAAG,CAAC,EAC/BiB,EAAMhB,GAAY,OAAO,iBACzBiB,EAAoBN,IAAUK,EAC9BE,EAAoBP,IAAUI,EAEpCI,EAAAA,UAAU,IAAM,CACVT,GACFJ,EAAqBX,CAAe,CAExC,EAAG,CAACA,EAAiBe,CAAY,CAAC,EAElCS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACT,EAAc,CACjB,MAAMU,EAAQ,WAAW,IAAM,CAC7Bd,EAAqBE,CAAc,CACrC,EAAG,GAAG,EAEN,MAAO,IAAM,aAAaY,CAAK,CACjC,CAEF,EAAG,CAACZ,EAAgBE,EAAchB,CAAQ,CAAC,EAE3C,MAAMZ,EAAUX,EAAGqB,EAAWlB,EAAe,CAC3C,CAAC,GAAGA,CAAa,UAAU,EACzBK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqB,CAACD,EAClE,CAAC,GAAG3C,CAAa,wBAAwB,EACvCK,IAAY,YAAc,CAACmC,GAAc,CAACG,GAAqBC,EACjE,CAAC,GAAG5C,CAAa,yBAAyB,EACxCK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqBD,EACjE,CAAC,GAAG3C,CAAa,mBAAmB,EAClCK,IAAY,aAAemC,GAAeG,GAAqBC,GACjE,CAAC,GAAG5C,CAAa,cAAc,EAAGuB,EAClC,CAAC,GAAGvB,CAAa,WAAW,EAAGwB,CAAA,CAChC,EAEKuB,EAAkBxD,GAAqC,CAE3D,GAAI,CADiB,WACH,KAAKA,EAAE,OAAO,KAAK,EACnC,OAEF,MAAMyD,EAAM,CAACzD,EAAE,OAAO,MAClByD,EAAMP,GAAOO,EAAMN,IAIlBN,GACHD,EAAkBa,CAAG,EAEvB5B,EAAS4B,CAAG,EACd,EAEMC,EAAiBC,GAA8C,CACnE,MAAMC,EAAgBD,IAAmB,YAAcb,EAAQ,EAAIA,EAAQ,EACvEc,EAAgB,IAIff,GACHD,EAAkBgB,CAAa,EAEjC/B,EAAS+B,CAAa,EACxB,EAEMC,EAAoBF,GAA8C,CACtE,MAAMG,EACHH,IAAmB,aAAeP,GAClCO,IAAmB,aAAeN,EACrC,OACEnC,EAAAA,IAACR,GAAA,CACC,cAAaqC,EAAU,UAAYY,CAAc,EACjD,QAAS/B,EACT,WAAY+B,EACZ,OAAQ7C,IAAY,YACpB,QAAS4C,EACT,SAAUT,GAAca,EACxB,aAAYH,IAAmB,YAActB,EAAqBD,CAAA,CAAA,CAGxE,EAEM2B,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAhC,GACCf,EAAAA,IAAC,MAAA,CACC,UAAWZ,EAAG,GAAGG,CAAa,YAAa,CACzC,CAAC,GAAGA,CAAa,uBAAuB,EAAGuB,EAC3C,CAAC,GAAGvB,CAAa,sBAAsB,EAAG,CAACuB,GAAalB,IAAY,WAAA,CACrE,EAED,SAAAI,EAAAA,IAACgD,EAAAA,QAAA,CAEC,SAAUjB,EACV,KAAK,KACL,cAAaF,EAAU,SAAS,CAAA,EAH5B,SAAA,CAIN,CAAA,EAGHc,EAAiB,WAAW,CAAA,EAC/B,EAGF,OACE3C,EAAAA,IAACiD,EAAAA,UAAA,CACC,MAAArB,EACA,KAAK,SACL,IAAAP,EACA,UAAWtB,EACX,cAAaS,EACb,SAAU8B,EACV,YAAAO,EACA,WAAYF,EAAiB,WAAW,EACxC,SAAUZ,EACV,IAAAC,EACA,IAAAC,EACA,KAAK,aACL,gBAAeL,EACf,gBAAeK,EACf,gBAAeD,EACd,GAAGZ,CAAA,CAAA,CAGV,CACF,EAEAd,EAAiB,YAAc"}
|
|
1
|
+
{"version":3,"file":"quantity-selector-DWDg4aFO.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-DWDg4aFO.js");exports.QuantitySelector=t.QuantitySelector;exports.quantitySelectorButtonVariants=t.quantitySelectorButtonVariants;exports.quantitySelectorVariants=t.quantitySelectorVariants;
|
|
2
2
|
//# sourceMappingURL=quantity-selector.cjs.js.map
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as r, jsxs as B } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as x, useId as R } from "react";
|
|
3
|
+
import { L as N } from "./listbox-DG4KmQP_.mjs";
|
|
4
|
+
import { e as A } from "./use-autocomplete.es-CVv3z8t6.mjs";
|
|
5
|
+
import { c as $ } from "./bind-CU-R61T-.mjs";
|
|
6
|
+
import { s as I } from "./search.es-DoFKg2Hr.mjs";
|
|
7
|
+
import { T as V } from "./text-field-BQYzwIrG.mjs";
|
|
8
|
+
import { b as S } from "./button-Cv7NlYbv.mjs";
|
|
9
|
+
const F = {
|
|
10
|
+
"purpur-search-field": "_purpur-search-field_18zr1_1",
|
|
11
|
+
"purpur-search-field--has-clear-button": "_purpur-search-field--has-clear-button_18zr1_4",
|
|
12
|
+
"purpur-search-field--no-gap": "_purpur-search-field--no-gap_18zr1_13",
|
|
13
|
+
"purpur-search-field__wrapper": "_purpur-search-field__wrapper_18zr1_17",
|
|
14
|
+
"purpur-search-field__wrapper--gap": "_purpur-search-field__wrapper--gap_18zr1_20",
|
|
15
|
+
"purpur-search-field__search-icon": "_purpur-search-field__search-icon_18zr1_24",
|
|
16
|
+
"purpur-search-field__close-icon": "_purpur-search-field__close-icon_18zr1_24",
|
|
17
|
+
"purpur-search-field__autocomplete-root": "_purpur-search-field__autocomplete-root_18zr1_27",
|
|
18
|
+
"purpur-search-field__listbox": "_purpur-search-field__listbox_18zr1_31"
|
|
19
|
+
}, j = {
|
|
20
|
+
"purpur-search-field-button": "_purpur-search-field-button_c16yo_1",
|
|
21
|
+
"purpur-search-field-button--icon-only": "_purpur-search-field-button--icon-only_c16yo_1"
|
|
22
|
+
}, k = $.bind(j), v = "purpur-search-field-button", D = ({
|
|
23
|
+
["data-testid"]: e,
|
|
24
|
+
disabled: s,
|
|
25
|
+
iconOnly: u,
|
|
26
|
+
label: o
|
|
27
|
+
}) => {
|
|
28
|
+
const c = {
|
|
29
|
+
className: k(v, {
|
|
30
|
+
[`${v}--icon-only`]: u
|
|
31
|
+
}),
|
|
32
|
+
disabled: s,
|
|
33
|
+
"data-testid": e
|
|
34
|
+
};
|
|
35
|
+
return u ? /* @__PURE__ */ r(S, { ...c, "aria-label": o, iconOnly: !0, size: "sm", type: "submit", variant: "primary", children: /* @__PURE__ */ r(I, { size: "xs" }) }) : /* @__PURE__ */ r(S, { ...c, size: "sm", type: "submit", variant: "primary", children: o });
|
|
36
|
+
}, U = ["button-attached", "no-button"], y = $.bind(F), d = "purpur-search-field", g = x(
|
|
37
|
+
({
|
|
38
|
+
["data-testid"]: e,
|
|
39
|
+
className: s,
|
|
40
|
+
clearButtonAriaLabel: u,
|
|
41
|
+
disabled: o,
|
|
42
|
+
iconOnlySearchButton: c,
|
|
43
|
+
onClear: i,
|
|
44
|
+
onSearch: l,
|
|
45
|
+
searchButtonLabel: f,
|
|
46
|
+
variant: p,
|
|
47
|
+
formRef: t,
|
|
48
|
+
wrapperStyle: m,
|
|
49
|
+
...n
|
|
50
|
+
}, a) => {
|
|
51
|
+
const _ = (h) => e ? `${e}-${h}` : void 0, b = (typeof n.value == "number" ? n.value !== void 0 : n.value?.length) && !o && !n.readOnly && !n.loading, L = y(s, d, {
|
|
52
|
+
[`${d}--no-gap`]: p === "button-attached",
|
|
53
|
+
[`${d}--has-clear-button`]: b
|
|
54
|
+
});
|
|
55
|
+
return /* @__PURE__ */ r(
|
|
56
|
+
"form",
|
|
57
|
+
{
|
|
58
|
+
ref: t,
|
|
59
|
+
className: y(`${d}__wrapper`),
|
|
60
|
+
"data-testid": e,
|
|
61
|
+
style: m,
|
|
62
|
+
onSubmit: (h) => {
|
|
63
|
+
h.preventDefault(), l?.(h);
|
|
64
|
+
},
|
|
65
|
+
children: /* @__PURE__ */ r(
|
|
66
|
+
V,
|
|
67
|
+
{
|
|
68
|
+
ref: a,
|
|
69
|
+
className: L,
|
|
70
|
+
clearButtonAriaLabel: u,
|
|
71
|
+
disabled: o,
|
|
72
|
+
onClear: i,
|
|
73
|
+
startAdornment: c ? null : /* @__PURE__ */ r(I, { size: "xs", className: y(`${d}__search-icon`) }, "1"),
|
|
74
|
+
afterField: p !== "no-button" ? /* @__PURE__ */ r(
|
|
75
|
+
D,
|
|
76
|
+
{
|
|
77
|
+
disabled: o,
|
|
78
|
+
iconOnly: c,
|
|
79
|
+
label: f,
|
|
80
|
+
"data-testid": _("button")
|
|
81
|
+
}
|
|
82
|
+
) : null,
|
|
83
|
+
"data-testid": _("text-field"),
|
|
84
|
+
type: "search",
|
|
85
|
+
...n
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
g.displayName = "SearchFieldBase";
|
|
93
|
+
const w = $.bind(F), C = "purpur-search-field", O = x(
|
|
94
|
+
({
|
|
95
|
+
suggestions: e,
|
|
96
|
+
suggestionsLabel: s,
|
|
97
|
+
onSelectSuggestion: u,
|
|
98
|
+
openSuggestionsOnFocus: o,
|
|
99
|
+
suggestionsMaxHeight: c,
|
|
100
|
+
...i
|
|
101
|
+
}, l) => {
|
|
102
|
+
const f = R(), p = i.id ?? f, t = A({
|
|
103
|
+
id: p,
|
|
104
|
+
options: e,
|
|
105
|
+
listboxLabel: s,
|
|
106
|
+
disabled: i.disabled,
|
|
107
|
+
readOnly: i.readOnly,
|
|
108
|
+
openOnFocus: o,
|
|
109
|
+
listboxMaxHeight: c,
|
|
110
|
+
onSelect: u,
|
|
111
|
+
"data-testid": i["data-testid"]
|
|
112
|
+
}), m = (a) => {
|
|
113
|
+
t.inputRef.current = a, typeof l == "function" ? l(a) : l && (l.current = a);
|
|
114
|
+
}, n = (a) => {
|
|
115
|
+
i.onChange?.(a), t.isOpen || t.openListbox();
|
|
116
|
+
};
|
|
117
|
+
return /* @__PURE__ */ B(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
ref: t.rootRef,
|
|
121
|
+
className: w(`${C}__autocomplete-root`),
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ r(
|
|
124
|
+
g,
|
|
125
|
+
{
|
|
126
|
+
ref: m,
|
|
127
|
+
...i,
|
|
128
|
+
onChange: n,
|
|
129
|
+
id: p,
|
|
130
|
+
wrapperStyle: t.anchorStyle,
|
|
131
|
+
...t.inputProps
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
t.isOpen && /* @__PURE__ */ r(N, { ...t.listboxProps, className: w(`${C}__listbox`), children: e.map((a, _) => {
|
|
135
|
+
const { key: z, ...b } = t.getListboxItemProps(a, _);
|
|
136
|
+
return /* @__PURE__ */ r(N.Item, { ...b, children: a.label }, z);
|
|
137
|
+
}) })
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
O.displayName = "SearchFieldAutocomplete";
|
|
144
|
+
const H = x((e, s) => e.suggestions ? /* @__PURE__ */ r(O, { ref: s, ...e }) : /* @__PURE__ */ r(g, { ref: s, ...e }));
|
|
145
|
+
H.displayName = "SearchField";
|
|
146
|
+
export {
|
|
147
|
+
H as S,
|
|
148
|
+
O as a,
|
|
149
|
+
U as s
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=search-field-Caj2dKLn.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-field-Caj2dKLn.mjs","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field-base.tsx","../../../components/search-field/src/search-field-autocomplete.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, {\n type ChangeEvent,\n type CSSProperties,\n type FormEvent,\n forwardRef,\n type RefObject,\n} from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport { type AutocompleteOption } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldBaseProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\" | \"variant\">;\n\ntype SearchFieldBaseInternalProps = SearchFieldBaseProps & {\n wrapperStyle?: CSSProperties;\n};\n\ntype SearchFieldAutocompleteSharedProps = {\n /**\n * Called when the user selects a suggestion.\n */\n onSelectSuggestion?: (option: AutocompleteOption) => void;\n /**\n * Open the suggestions listbox when the input receives focus.\n */\n openSuggestionsOnFocus?: boolean;\n /**\n * Maximum height of the suggestions listbox. A number is interpreted as px.\n */\n suggestionsMaxHeight?: string | number;\n};\n\ntype SearchFieldWithoutAutocomplete = SearchFieldAutocompleteSharedProps & {\n suggestions?: never;\n suggestionsLabel?: never;\n};\n\ntype SearchFieldWithAutocomplete = SearchFieldAutocompleteSharedProps & {\n /**\n * The list of suggestions to display in a listbox below the field.\n * No filtering is applied — pass the already-correct (pre-filtered) list.\n * If autocomplete should stay enabled while there are temporarily no matches,\n * pass an empty array instead of `undefined` or `null`. Changing this prop\n * from an absent value to an array switches between the regular and\n * autocomplete variants, which causes a re-render, drops input focus, and\n * hides the listbox.\n */\n suggestions: AutocompleteOption[];\n /**\n * Accessible label for the suggestions listbox.\n */\n suggestionsLabel: string;\n};\n\nexport type SearchFieldAutocompleteEnhancements =\n | SearchFieldWithoutAutocomplete\n | SearchFieldWithAutocomplete;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchFieldBase = forwardRef<HTMLInputElement, SearchFieldBaseInternalProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n wrapperStyle,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchFieldBase.displayName = \"SearchFieldBase\";\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { type AutocompleteOption, useAutocomplete } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n} from \"./search-field-base\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport type SearchFieldAutocompleteProps = SearchFieldBaseProps &\n Extract<SearchFieldAutocompleteEnhancements, { suggestions: AutocompleteOption[] }>;\n\nexport const SearchFieldAutocomplete = forwardRef<HTMLInputElement, SearchFieldAutocompleteProps>(\n (\n {\n suggestions,\n suggestionsLabel,\n onSelectSuggestion,\n openSuggestionsOnFocus,\n suggestionsMaxHeight,\n ...searchFieldProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = (searchFieldProps.id as string | undefined) ?? randomId;\n\n const autocomplete = useAutocomplete({\n id: inputId,\n options: suggestions,\n listboxLabel: suggestionsLabel,\n disabled: searchFieldProps.disabled,\n readOnly: searchFieldProps.readOnly,\n openOnFocus: openSuggestionsOnFocus,\n listboxMaxHeight: suggestionsMaxHeight,\n onSelect: onSelectSuggestion,\n [\"data-testid\"]: searchFieldProps[\"data-testid\"],\n });\n\n const setInputRef = (node: HTMLInputElement | null) => {\n (autocomplete.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n searchFieldProps.onChange?.(event);\n if (!autocomplete.isOpen) {\n autocomplete.openListbox();\n }\n };\n\n return (\n <div\n ref={autocomplete.rootRef as React.RefObject<HTMLDivElement>}\n className={cx(`${rootClassName}__autocomplete-root`)}\n >\n <SearchFieldBase\n ref={setInputRef}\n {...searchFieldProps}\n onChange={handleInputChange}\n id={inputId}\n wrapperStyle={autocomplete.anchorStyle}\n {...autocomplete.inputProps}\n />\n {autocomplete.isOpen && (\n <Listbox {...autocomplete.listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {suggestions.map((option, index) => {\n const { key, ...listboxItemProps } = autocomplete.getListboxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {option.label}\n </Listbox.Item>\n );\n })}\n </Listbox>\n )}\n </div>\n );\n }\n);\n\nSearchFieldAutocomplete.displayName = \"SearchFieldAutocomplete\";\n","import React, { forwardRef } from \"react\";\n\nimport { SearchFieldAutocomplete } from \"./search-field-autocomplete\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n searchFieldVariants,\n} from \"./search-field-base\";\n\nexport { searchFieldVariants };\n\nexport type SearchFieldProps = SearchFieldBaseProps & SearchFieldAutocompleteEnhancements;\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>((props, ref) => {\n if (props.suggestions) {\n return <SearchFieldAutocomplete ref={ref} {...props} />;\n }\n\n return <SearchFieldBase ref={ref} {...props} />;\n});\n\nSearchField.displayName = \"SearchField\";\n\nexport {\n SearchFieldAutocomplete,\n type SearchFieldAutocompleteProps,\n} from \"./search-field-autocomplete\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchFieldBase","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","wrapperStyle","ref","getTestId","name","hasClearButton","classes","e","TextField","SearchFieldAutocomplete","suggestions","suggestionsLabel","onSelectSuggestion","openSuggestionsOnFocus","suggestionsMaxHeight","searchFieldProps","randomId","useId","inputId","autocomplete","useAutocomplete","setInputRef","node","handleInputChange","event","jsxs","Listbox","option","index","key","listboxItemProps","SearchField"],"mappings":";;;;;;;;;;;;;;;;;;;;;GAcMA,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,8BAETC,IAAoB,CAAC;AAAA,EAChC,CAAC,gBAAgBC;AAAA,EACjB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AACF,MAAa;AACX,QAAMC,IAAQ;AAAA,IACZ,WAAWT,EAAGG,GAAe;AAAA,MAC3B,CAAC,GAAGA,CAAa,aAAa,GAAGI;AAAA,IAAA,CAClC;AAAA,IACD,UAAAD;AAAA,IACC,eAAgBD;AAAA,EAAA;AAGnB,SAAIE,sBAECG,GAAA,EAAQ,GAAGD,GAAO,cAAYD,GAAO,UAAQ,IAAC,MAAK,MAAK,MAAK,UAAS,SAAQ,WAC7E,4BAACG,GAAA,EAAW,MAAK,MAAK,GACxB,IAKF,gBAAAC,EAACF,GAAA,EAAQ,GAAGD,GAAO,MAAK,MAAK,MAAK,UAAS,SAAQ,WAChD,UAAAD,EAAA,CACH;AAEJ,GC7BaK,IAAsB,CAAC,mBAAmB,WAAW,GAwG5Db,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,uBAETW,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,CAAC,gBAAgBC;AAAA,IACjB,WAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,UAAAZ;AAAA,IACA,sBAAAa;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,GAAGhB;AAAA,EAAA,GAELiB,MACG;AACH,UAAMC,IAAY,CAACC,MAAkBZ,IAAa,GAAGA,CAAU,IAAIY,CAAI,KAAK,QAGtEC,KADJ,OAAOpB,EAAM,SAAU,WAAWA,EAAM,UAAU,SAAYA,EAAM,OAAO,WAC1C,CAACH,KAAY,CAACG,EAAM,YAAY,CAACA,EAAM,SAEpEqB,IAAU9B,EAAGiB,GAAWd,GAAe;AAAA,MAC3C,CAAC,GAAGA,CAAa,UAAU,GAAGoB,MAAY;AAAA,MAC1C,CAAC,GAAGpB,CAAa,oBAAoB,GAAG0B;AAAA,IAAA,CACzC;AAED,WACE,gBAAAjB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKY;AAAA,QACL,WAAWxB,EAAG,GAAGG,CAAa,WAAW;AAAA,QACzC,eAAaa;AAAA,QACb,OAAOS;AAAA,QACP,UAAU,CAACM,MAAkC;AAC3C,UAAAA,EAAE,eAAA,GACFV,IAAWU,CAAC;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAnB;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,KAAAN;AAAA,YACA,WAAWI;AAAA,YACX,sBAAAZ;AAAA,YACA,UAAAZ;AAAA,YACA,SAAAc;AAAA,YACA,gBACGD,IAEG,OADF,gBAAAP,EAACD,KAAW,MAAK,MAAK,WAAWX,EAAG,GAAGG,CAAa,eAAe,EAAA,GAAO,GAAI;AAAA,YAGlF,YACEoB,MAAY,cACV,gBAAAX;AAAA,cAACR;AAAA,cAAA;AAAA,gBACC,UAAAE;AAAA,gBACA,UAAUa;AAAA,gBACV,OAAOG;AAAA,gBACP,eAAaK,EAAU,QAAQ;AAAA,cAAA;AAAA,YAAA,IAE/B;AAAA,YAEN,eAAaA,EAAU,YAAY;AAAA,YACnC,MAAK;AAAA,YACJ,GAAGlB;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAGN;AACF;AAEAK,EAAgB,cAAc;ACnL9B,MAAMd,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,uBAKT8B,IAA0BlB;AAAA,EACrC,CACE;AAAA,IACE,aAAAmB;AAAA,IACA,kBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELb,MACG;AACH,UAAMc,IAAWC,EAAA,GACXC,IAAWH,EAAiB,MAA6BC,GAEzDG,IAAeC,EAAgB;AAAA,MACnC,IAAIF;AAAA,MACJ,SAASR;AAAA,MACT,cAAcC;AAAA,MACd,UAAUI,EAAiB;AAAA,MAC3B,UAAUA,EAAiB;AAAA,MAC3B,aAAaF;AAAA,MACb,kBAAkBC;AAAA,MAClB,UAAUF;AAAA,MACT,eAAgBG,EAAiB,aAAa;AAAA,IAAA,CAChD,GAEKM,IAAc,CAACC,MAAkC;AACpD,MAAAH,EAAa,SAA6D,UAAUG,GACjF,OAAOpB,KAAQ,aAAYA,EAAIoB,CAAI,IAC9BpB,MAAMA,EAAwD,UAAUoB;AAAA,IACnF,GAEMC,IAAgE,CAACC,MAAU;AAC/E,MAAAT,EAAiB,WAAWS,CAAK,GAC5BL,EAAa,UAChBA,EAAa,YAAA;AAAA,IAEjB;AAEA,WACE,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKN,EAAa;AAAA,QAClB,WAAW3C,EAAG,GAAGG,CAAa,qBAAqB;AAAA,QAEnD,UAAA;AAAA,UAAA,gBAAAS;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,KAAK+B;AAAA,cACJ,GAAGN;AAAA,cACJ,UAAUQ;AAAA,cACV,IAAIL;AAAA,cACJ,cAAcC,EAAa;AAAA,cAC1B,GAAGA,EAAa;AAAA,YAAA;AAAA,UAAA;AAAA,UAElBA,EAAa,UACZ,gBAAA/B,EAACsC,GAAA,EAAS,GAAGP,EAAa,cAAc,WAAW3C,EAAG,GAAGG,CAAa,WAAW,GAC9E,YAAY,IAAI,CAACgD,GAAQC,MAAU;AAClC,kBAAM,EAAE,KAAAC,GAAK,GAAGC,EAAA,IAAqBX,EAAa,oBAAoBQ,GAAQC,CAAK;AAEnF,mBACE,gBAAAxC,EAACsC,EAAQ,MAAR,EAAwB,GAAGI,GACzB,UAAAH,EAAO,SADSE,CAEnB;AAAA,UAEJ,CAAC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEApB,EAAwB,cAAc;AC3E/B,MAAMsB,IAAcxC,EAA+C,CAACN,GAAOiB,MAC5EjB,EAAM,cACD,gBAAAG,EAACqB,GAAA,EAAwB,KAAAP,GAAW,GAAGjB,EAAA,CAAO,IAGhD,gBAAAG,EAACE,GAAA,EAAgB,KAAAY,GAAW,GAAGjB,EAAA,CAAO,CAC9C;AAED8C,EAAY,cAAc;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),f=require("react"),N=require("./listbox-COBHLRtB.js"),O=require("./use-autocomplete.es-BHDgQLae.js"),j=require("./bind-DeUYJ6m9.js"),v=require("./search.es-Cg2amJSR.js"),A=require("./text-field-BwxGMWds.js"),S=require("./button-Dqxdc3nC.js"),R={"purpur-search-field":"_purpur-search-field_18zr1_1","purpur-search-field--has-clear-button":"_purpur-search-field--has-clear-button_18zr1_4","purpur-search-field--no-gap":"_purpur-search-field--no-gap_18zr1_13","purpur-search-field__wrapper":"_purpur-search-field__wrapper_18zr1_17","purpur-search-field__wrapper--gap":"_purpur-search-field__wrapper--gap_18zr1_20","purpur-search-field__search-icon":"_purpur-search-field__search-icon_18zr1_24","purpur-search-field__close-icon":"_purpur-search-field__close-icon_18zr1_24","purpur-search-field__autocomplete-root":"_purpur-search-field__autocomplete-root_18zr1_27","purpur-search-field__listbox":"_purpur-search-field__listbox_18zr1_31"},B={"purpur-search-field-button":"_purpur-search-field-button_c16yo_1","purpur-search-field-button--icon-only":"_purpur-search-field-button--icon-only_c16yo_1"},L=j.c.bind(B),F="purpur-search-field-button",V=({["data-testid"]:t,disabled:a,iconOnly:u,label:o})=>{const i={className:L(F,{[`${F}--icon-only`]:u}),disabled:a,"data-testid":t};return u?e.jsx(S.Button,{...i,"aria-label":o,iconOnly:!0,size:"sm",type:"submit",variant:"primary",children:e.jsx(v.s,{size:"xs"})}):e.jsx(S.Button,{...i,size:"sm",type:"submit",variant:"primary",children:o})},k=["button-attached","no-button"],y=j.c.bind(R),d="purpur-search-field",$=f.forwardRef(({["data-testid"]:t,className:a,clearButtonAriaLabel:u,disabled:o,iconOnlySearchButton:i,onClear:c,onSearch:l,searchButtonLabel:b,variant:p,formRef:r,wrapperStyle:m,...n},s)=>{const _=h=>t?`${t}-${h}`:void 0,x=(typeof n.value=="number"?n.value!==void 0:n.value?.length)&&!o&&!n.readOnly&&!n.loading,I=y(a,d,{[`${d}--no-gap`]:p==="button-attached",[`${d}--has-clear-button`]:x});return e.jsx("form",{ref:r,className:y(`${d}__wrapper`),"data-testid":t,style:m,onSubmit:h=>{h.preventDefault(),l?.(h)},children:e.jsx(A.TextField,{ref:s,className:I,clearButtonAriaLabel:u,disabled:o,onClear:c,startAdornment:i?null:e.jsx(v.s,{size:"xs",className:y(`${d}__search-icon`)},"1"),afterField:p!=="no-button"?e.jsx(V,{disabled:o,iconOnly:i,label:b,"data-testid":_("button")}):null,"data-testid":_("text-field"),type:"search",...n})})});$.displayName="SearchFieldBase";const w=j.c.bind(R),q="purpur-search-field",g=f.forwardRef(({suggestions:t,suggestionsLabel:a,onSelectSuggestion:u,openSuggestionsOnFocus:o,suggestionsMaxHeight:i,...c},l)=>{const b=f.useId(),p=c.id??b,r=O.ee({id:p,options:t,listboxLabel:a,disabled:c.disabled,readOnly:c.readOnly,openOnFocus:o,listboxMaxHeight:i,onSelect:u,"data-testid":c["data-testid"]}),m=s=>{r.inputRef.current=s,typeof l=="function"?l(s):l&&(l.current=s)},n=s=>{c.onChange?.(s),r.isOpen||r.openListbox()};return e.jsxs("div",{ref:r.rootRef,className:w(`${q}__autocomplete-root`),children:[e.jsx($,{ref:m,...c,onChange:n,id:p,wrapperStyle:r.anchorStyle,...r.inputProps}),r.isOpen&&e.jsx(N.Listbox,{...r.listboxProps,className:w(`${q}__listbox`),children:t.map((s,_)=>{const{key:z,...x}=r.getListboxItemProps(s,_);return e.jsx(N.Listbox.Item,{...x,children:s.label},z)})})]})});g.displayName="SearchFieldAutocomplete";const C=f.forwardRef((t,a)=>t.suggestions?e.jsx(g,{ref:a,...t}):e.jsx($,{ref:a,...t}));C.displayName="SearchField";exports.SearchField=C;exports.SearchFieldAutocomplete=g;exports.searchFieldVariants=k;
|
|
2
|
+
//# sourceMappingURL=search-field-DAktzYb0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-field-DAktzYb0.js","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field-base.tsx","../../../components/search-field/src/search-field-autocomplete.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, {\n type ChangeEvent,\n type CSSProperties,\n type FormEvent,\n forwardRef,\n type RefObject,\n} from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport { type AutocompleteOption } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldBaseProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\" | \"variant\">;\n\ntype SearchFieldBaseInternalProps = SearchFieldBaseProps & {\n wrapperStyle?: CSSProperties;\n};\n\ntype SearchFieldAutocompleteSharedProps = {\n /**\n * Called when the user selects a suggestion.\n */\n onSelectSuggestion?: (option: AutocompleteOption) => void;\n /**\n * Open the suggestions listbox when the input receives focus.\n */\n openSuggestionsOnFocus?: boolean;\n /**\n * Maximum height of the suggestions listbox. A number is interpreted as px.\n */\n suggestionsMaxHeight?: string | number;\n};\n\ntype SearchFieldWithoutAutocomplete = SearchFieldAutocompleteSharedProps & {\n suggestions?: never;\n suggestionsLabel?: never;\n};\n\ntype SearchFieldWithAutocomplete = SearchFieldAutocompleteSharedProps & {\n /**\n * The list of suggestions to display in a listbox below the field.\n * No filtering is applied — pass the already-correct (pre-filtered) list.\n * If autocomplete should stay enabled while there are temporarily no matches,\n * pass an empty array instead of `undefined` or `null`. Changing this prop\n * from an absent value to an array switches between the regular and\n * autocomplete variants, which causes a re-render, drops input focus, and\n * hides the listbox.\n */\n suggestions: AutocompleteOption[];\n /**\n * Accessible label for the suggestions listbox.\n */\n suggestionsLabel: string;\n};\n\nexport type SearchFieldAutocompleteEnhancements =\n | SearchFieldWithoutAutocomplete\n | SearchFieldWithAutocomplete;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchFieldBase = forwardRef<HTMLInputElement, SearchFieldBaseInternalProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n wrapperStyle,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n style={wrapperStyle}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchFieldBase.displayName = \"SearchFieldBase\";\n","import React, { forwardRef, useId } from \"react\";\nimport { Listbox } from \"@purpur/listbox\";\nimport { type AutocompleteOption, useAutocomplete } from \"@purpur/use-autocomplete\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n} from \"./search-field-base\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport type SearchFieldAutocompleteProps = SearchFieldBaseProps &\n Extract<SearchFieldAutocompleteEnhancements, { suggestions: AutocompleteOption[] }>;\n\nexport const SearchFieldAutocomplete = forwardRef<HTMLInputElement, SearchFieldAutocompleteProps>(\n (\n {\n suggestions,\n suggestionsLabel,\n onSelectSuggestion,\n openSuggestionsOnFocus,\n suggestionsMaxHeight,\n ...searchFieldProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = (searchFieldProps.id as string | undefined) ?? randomId;\n\n const autocomplete = useAutocomplete({\n id: inputId,\n options: suggestions,\n listboxLabel: suggestionsLabel,\n disabled: searchFieldProps.disabled,\n readOnly: searchFieldProps.readOnly,\n openOnFocus: openSuggestionsOnFocus,\n listboxMaxHeight: suggestionsMaxHeight,\n onSelect: onSelectSuggestion,\n [\"data-testid\"]: searchFieldProps[\"data-testid\"],\n });\n\n const setInputRef = (node: HTMLInputElement | null) => {\n (autocomplete.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n searchFieldProps.onChange?.(event);\n if (!autocomplete.isOpen) {\n autocomplete.openListbox();\n }\n };\n\n return (\n <div\n ref={autocomplete.rootRef as React.RefObject<HTMLDivElement>}\n className={cx(`${rootClassName}__autocomplete-root`)}\n >\n <SearchFieldBase\n ref={setInputRef}\n {...searchFieldProps}\n onChange={handleInputChange}\n id={inputId}\n wrapperStyle={autocomplete.anchorStyle}\n {...autocomplete.inputProps}\n />\n {autocomplete.isOpen && (\n <Listbox {...autocomplete.listboxProps} className={cx(`${rootClassName}__listbox`)}>\n {suggestions.map((option, index) => {\n const { key, ...listboxItemProps } = autocomplete.getListboxItemProps(option, index);\n\n return (\n <Listbox.Item key={key} {...listboxItemProps}>\n {option.label}\n </Listbox.Item>\n );\n })}\n </Listbox>\n )}\n </div>\n );\n }\n);\n\nSearchFieldAutocomplete.displayName = \"SearchFieldAutocomplete\";\n","import React, { forwardRef } from \"react\";\n\nimport { SearchFieldAutocomplete } from \"./search-field-autocomplete\";\nimport {\n type SearchFieldAutocompleteEnhancements,\n SearchFieldBase,\n type SearchFieldBaseProps,\n searchFieldVariants,\n} from \"./search-field-base\";\n\nexport { searchFieldVariants };\n\nexport type SearchFieldProps = SearchFieldBaseProps & SearchFieldAutocompleteEnhancements;\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>((props, ref) => {\n if (props.suggestions) {\n return <SearchFieldAutocomplete ref={ref} {...props} />;\n }\n\n return <SearchFieldBase ref={ref} {...props} />;\n});\n\nSearchField.displayName = \"SearchField\";\n\nexport {\n SearchFieldAutocomplete,\n type SearchFieldAutocompleteProps,\n} from \"./search-field-autocomplete\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchFieldBase","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","wrapperStyle","ref","getTestId","name","hasClearButton","classes","e","TextField","SearchFieldAutocomplete","suggestions","suggestionsLabel","onSelectSuggestion","openSuggestionsOnFocus","suggestionsMaxHeight","searchFieldProps","randomId","useId","inputId","autocomplete","useAutocomplete","setInputRef","node","handleInputChange","event","jsxs","Listbox","option","index","key","listboxItemProps","SearchField"],"mappings":"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"}
|
package/dist/search-field.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-DAktzYb0.js");exports.SearchField=e.SearchField;exports.SearchFieldAutocomplete=e.SearchFieldAutocomplete;exports.searchFieldVariants=e.searchFieldVariants;
|
|
2
2
|
//# sourceMappingURL=search-field.cjs.js.map
|
package/dist/search-field.es.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { S as r, s } from "./search-field-
|
|
1
|
+
import { S as r, a as s, s as c } from "./search-field-Caj2dKLn.mjs";
|
|
2
2
|
export {
|
|
3
3
|
r as SearchField,
|
|
4
|
-
s as
|
|
4
|
+
s as SearchFieldAutocomplete,
|
|
5
|
+
c as searchFieldVariants
|
|
5
6
|
};
|
|
6
7
|
//# sourceMappingURL=search-field.es.js.map
|
|
@@ -10,7 +10,7 @@ import { b as De } from "./icon-DNHpBTHs-JfI8WyiR.mjs";
|
|
|
10
10
|
import { s as Ci } from "./search.es-DoFKg2Hr.mjs";
|
|
11
11
|
import { P as be } from "./paragraph-Ci50OF1u.mjs";
|
|
12
12
|
import { S as Si } from "./select-BEmu_fh9.mjs";
|
|
13
|
-
import { T as Ri } from "./text-field-
|
|
13
|
+
import { T as Ri } from "./text-field-BQYzwIrG.mjs";
|
|
14
14
|
import { b as ur } from "./tooltip-BHsVKFJ3.mjs";
|
|
15
15
|
import { V as co } from "./visually-hidden-BYFkJEp1.mjs";
|
|
16
16
|
import { a as yi } from "./badge-DalD-yqG.mjs";
|
|
@@ -7440,4 +7440,4 @@ export {
|
|
|
7440
7440
|
Gu as T,
|
|
7441
7441
|
fc as c
|
|
7442
7442
|
};
|
|
7443
|
-
//# sourceMappingURL=table-
|
|
7443
|
+
//# sourceMappingURL=table-DXYHrKI7.mjs.map
|