@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,91 +0,0 @@
|
|
|
1
|
-
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as q } from "react";
|
|
3
|
-
import { s as h } from "./search.es-DoFKg2Hr.mjs";
|
|
4
|
-
import { T as v } from "./text-field-BMDf8j-K.mjs";
|
|
5
|
-
import { c as f } from "./bind-CU-R61T-.mjs";
|
|
6
|
-
import { b as _ } from "./button-Cv7NlYbv.mjs";
|
|
7
|
-
const N = {
|
|
8
|
-
"purpur-search-field": "_purpur-search-field_uhpkq_1",
|
|
9
|
-
"purpur-search-field--has-clear-button": "_purpur-search-field--has-clear-button_uhpkq_4",
|
|
10
|
-
"purpur-search-field--no-gap": "_purpur-search-field--no-gap_uhpkq_13",
|
|
11
|
-
"purpur-search-field__wrapper": "_purpur-search-field__wrapper_uhpkq_17",
|
|
12
|
-
"purpur-search-field__wrapper--gap": "_purpur-search-field__wrapper--gap_uhpkq_20",
|
|
13
|
-
"purpur-search-field__search-icon": "_purpur-search-field__search-icon_uhpkq_24",
|
|
14
|
-
"purpur-search-field__close-icon": "_purpur-search-field__close-icon_uhpkq_24"
|
|
15
|
-
}, w = {
|
|
16
|
-
"purpur-search-field-button": "_purpur-search-field-button_c16yo_1",
|
|
17
|
-
"purpur-search-field-button--icon-only": "_purpur-search-field-button--icon-only_c16yo_1"
|
|
18
|
-
}, F = f.bind(w), d = "purpur-search-field-button", z = ({
|
|
19
|
-
["data-testid"]: a,
|
|
20
|
-
disabled: p,
|
|
21
|
-
iconOnly: o,
|
|
22
|
-
label: e
|
|
23
|
-
}) => {
|
|
24
|
-
const s = {
|
|
25
|
-
className: F(d, {
|
|
26
|
-
[`${d}--icon-only`]: o
|
|
27
|
-
}),
|
|
28
|
-
disabled: p,
|
|
29
|
-
"data-testid": a
|
|
30
|
-
};
|
|
31
|
-
return o ? /* @__PURE__ */ r(_, { ...s, "aria-label": e, iconOnly: !0, size: "sm", type: "submit", variant: "primary", children: /* @__PURE__ */ r(h, { size: "xs" }) }) : /* @__PURE__ */ r(_, { ...s, size: "sm", type: "submit", variant: "primary", children: e });
|
|
32
|
-
}, R = ["button-attached", "no-button"], i = f.bind(N), u = "purpur-search-field", S = q(
|
|
33
|
-
({
|
|
34
|
-
["data-testid"]: a,
|
|
35
|
-
className: p,
|
|
36
|
-
clearButtonAriaLabel: o,
|
|
37
|
-
disabled: e,
|
|
38
|
-
iconOnlySearchButton: s,
|
|
39
|
-
onClear: m,
|
|
40
|
-
onSearch: b,
|
|
41
|
-
searchButtonLabel: y,
|
|
42
|
-
variant: n,
|
|
43
|
-
formRef: $,
|
|
44
|
-
...t
|
|
45
|
-
}, g) => {
|
|
46
|
-
const l = (c) => a ? `${a}-${c}` : void 0, x = (typeof t.value == "number" ? t.value !== void 0 : t.value?.length) && !e && !t.readOnly && !t.loading, k = i(p, u, {
|
|
47
|
-
[`${u}--no-gap`]: n === "button-attached",
|
|
48
|
-
[`${u}--has-clear-button`]: x
|
|
49
|
-
});
|
|
50
|
-
return /* @__PURE__ */ r(
|
|
51
|
-
"form",
|
|
52
|
-
{
|
|
53
|
-
ref: $,
|
|
54
|
-
className: i(`${u}__wrapper`),
|
|
55
|
-
"data-testid": a,
|
|
56
|
-
onSubmit: (c) => {
|
|
57
|
-
c.preventDefault(), b?.(c);
|
|
58
|
-
},
|
|
59
|
-
children: /* @__PURE__ */ r(
|
|
60
|
-
v,
|
|
61
|
-
{
|
|
62
|
-
ref: g,
|
|
63
|
-
className: k,
|
|
64
|
-
clearButtonAriaLabel: o,
|
|
65
|
-
disabled: e,
|
|
66
|
-
onClear: m,
|
|
67
|
-
startAdornment: s ? null : /* @__PURE__ */ r(h, { size: "xs", className: i(`${u}__search-icon`) }, "1"),
|
|
68
|
-
afterField: n !== "no-button" ? /* @__PURE__ */ r(
|
|
69
|
-
z,
|
|
70
|
-
{
|
|
71
|
-
disabled: e,
|
|
72
|
-
iconOnly: s,
|
|
73
|
-
label: y,
|
|
74
|
-
"data-testid": l("button")
|
|
75
|
-
}
|
|
76
|
-
) : null,
|
|
77
|
-
"data-testid": l("text-field"),
|
|
78
|
-
type: "search",
|
|
79
|
-
...t
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
);
|
|
86
|
-
S.displayName = "SearchField";
|
|
87
|
-
export {
|
|
88
|
-
S,
|
|
89
|
-
R as s
|
|
90
|
-
};
|
|
91
|
-
//# sourceMappingURL=search-field-CWqLnqdo.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-field-CWqLnqdo.mjs","sources":["../../../components/search-field/src/search-field-button.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, { type ChangeEvent, type FormEvent, forwardRef, type RefObject } from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\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 SearchFieldProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\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 ...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 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\nSearchField.displayName = \"SearchField\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchField","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","ref","getTestId","name","hasClearButton","classes","e","TextField"],"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,GCpCaK,IAAsB,CAAC,mBAAmB,WAAW,GA2D5Db,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,uBAETW,IAAcC;AAAA,EACzB,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,GAAGf;AAAA,EAAA,GAELgB,MACG;AACH,UAAMC,IAAY,CAACC,MAAkBX,IAAa,GAAGA,CAAU,IAAIW,CAAI,KAAK,QAGtEC,KADJ,OAAOnB,EAAM,SAAU,WAAWA,EAAM,UAAU,SAAYA,EAAM,OAAO,WAC1C,CAACH,KAAY,CAACG,EAAM,YAAY,CAACA,EAAM,SAEpEoB,IAAU7B,EAAGiB,GAAWd,GAAe;AAAA,MAC3C,CAAC,GAAGA,CAAa,UAAU,GAAGoB,MAAY;AAAA,MAC1C,CAAC,GAAGpB,CAAa,oBAAoB,GAAGyB;AAAA,IAAA,CACzC;AAED,WACE,gBAAAhB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKY;AAAA,QACL,WAAWxB,EAAG,GAAGG,CAAa,WAAW;AAAA,QACzC,eAAaa;AAAA,QACb,UAAU,CAACc,MAAkC;AAC3C,UAAAA,EAAE,eAAA,GACFT,IAAWS,CAAC;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAlB;AAAA,UAACmB;AAAA,UAAA;AAAA,YACC,KAAAN;AAAA,YACA,WAAWI;AAAA,YACX,sBAAAX;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,eAAaI,EAAU,QAAQ;AAAA,cAAA;AAAA,YAAA,IAE/B;AAAA,YAEN,eAAaA,EAAU,YAAY;AAAA,YACnC,MAAK;AAAA,YACJ,GAAGjB;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAGN;AACF;AAEAK,EAAY,cAAc;"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { jsx as i, jsxs as u } from "react/jsx-runtime";
|
|
2
|
-
import { useRef as T, forwardRef as k, useId as B, isValidElement as H } from "react";
|
|
3
|
-
import { b as L } from "./button-Cv7NlYbv.mjs";
|
|
4
|
-
import { F as M } from "./field-error-text-CBSX8dGx.mjs";
|
|
5
|
-
import { F as S } from "./field-helper-text-C5ee4SFV.mjs";
|
|
6
|
-
import { r as D } from "./check-circle-filled.es-umBwOv5_.mjs";
|
|
7
|
-
import { r as G } from "./close.es-BPmk2wkU.mjs";
|
|
8
|
-
import { L as J } from "./label-7sJe5-pX.mjs";
|
|
9
|
-
import { a as K } from "./spinner-DRQN6YdK.mjs";
|
|
10
|
-
import { c as Q } from "./bind-CU-R61T-.mjs";
|
|
11
|
-
const U = {
|
|
12
|
-
"purpur-text-field": "_purpur-text-field_1n0q1_1",
|
|
13
|
-
"purpur-text-field__label": "_purpur-text-field__label_1n0q1_7",
|
|
14
|
-
"purpur-text-field__label-text": "_purpur-text-field__label-text_1n0q1_12",
|
|
15
|
-
"purpur-text-field__field-row": "_purpur-text-field__field-row_1n0q1_15",
|
|
16
|
-
"purpur-text-field__frame": "_purpur-text-field__frame_1n0q1_19",
|
|
17
|
-
"purpur-text-field__frame--negative": "_purpur-text-field__frame--negative_1n0q1_26",
|
|
18
|
-
"purpur-text-field__input-container": "_purpur-text-field__input-container_1n0q1_29",
|
|
19
|
-
"purpur-text-field__input-container--disabled": "_purpur-text-field__input-container--disabled_1n0q1_40",
|
|
20
|
-
"purpur-text-field__input-container--readonly": "_purpur-text-field__input-container--readonly_1n0q1_43",
|
|
21
|
-
"purpur-text-field__input-container--has-clear-button": "_purpur-text-field__input-container--has-clear-button_1n0q1_46",
|
|
22
|
-
"purpur-text-field__input-container--end-adornment": "_purpur-text-field__input-container--end-adornment_1n0q1_49",
|
|
23
|
-
"purpur-text-field__input": "_purpur-text-field__input_1n0q1_29",
|
|
24
|
-
"purpur-text-field__input-container--start-adornment": "_purpur-text-field__input-container--start-adornment_1n0q1_55",
|
|
25
|
-
"purpur-text-field__input-container--negative": "_purpur-text-field__input-container--negative_1n0q1_61",
|
|
26
|
-
"purpur-text-field__input--valid": "_purpur-text-field__input--valid_1n0q1_109",
|
|
27
|
-
"purpur-text-field__input--error": "_purpur-text-field__input--error_1n0q1_109",
|
|
28
|
-
"purpur-text-field__input--negative": "_purpur-text-field__input--negative_1n0q1_130",
|
|
29
|
-
"purpur-text-field__adornment-container": "_purpur-text-field__adornment-container_1n0q1_146",
|
|
30
|
-
"purpur-text-field__valid-icon": "_purpur-text-field__valid-icon_1n0q1_151",
|
|
31
|
-
"purpur-text-field__valid-icon--negative": "_purpur-text-field__valid-icon--negative_1n0q1_154"
|
|
32
|
-
}, W = (d) => T(d), _ = Q.bind(U), e = "purpur-text-field", C = k(
|
|
33
|
-
({
|
|
34
|
-
["data-testid"]: d,
|
|
35
|
-
className: I,
|
|
36
|
-
clearButtonAriaLabel: x,
|
|
37
|
-
beforeField: b,
|
|
38
|
-
afterField: v,
|
|
39
|
-
endAdornment: s,
|
|
40
|
-
errorText: l,
|
|
41
|
-
helperText: h,
|
|
42
|
-
hideRequiredAsterisk: R = !1,
|
|
43
|
-
label: $,
|
|
44
|
-
loading: q = !1,
|
|
45
|
-
onClear: y,
|
|
46
|
-
startAdornment: w,
|
|
47
|
-
valid: O = !1,
|
|
48
|
-
negative: n = !1,
|
|
49
|
-
...t
|
|
50
|
-
}, p) => {
|
|
51
|
-
const V = B(), o = t.id ?? V, r = (a) => d ? `${d}-${a}` : void 0, N = O && !l, c = h ? `${o}-helper-text` : void 0, f = [w].filter((a) => !!a), g = (typeof t.value == "number" ? t.value !== void 0 : t.value?.length) && !t.disabled && !t.readOnly && !q && y && x, F = W(null), j = (a) => {
|
|
52
|
-
F.current = a, typeof p == "function" ? p(a) : p && (p.current = a);
|
|
53
|
-
}, E = () => {
|
|
54
|
-
y?.(), F.current?.focus();
|
|
55
|
-
}, m = [
|
|
56
|
-
q && /* @__PURE__ */ i(
|
|
57
|
-
K,
|
|
58
|
-
{
|
|
59
|
-
disabled: t.disabled,
|
|
60
|
-
size: "xs",
|
|
61
|
-
"data-testid": r("spinner"),
|
|
62
|
-
negative: n
|
|
63
|
-
},
|
|
64
|
-
"spinner"
|
|
65
|
-
),
|
|
66
|
-
g && /* @__PURE__ */ i(
|
|
67
|
-
L,
|
|
68
|
-
{
|
|
69
|
-
negative: n,
|
|
70
|
-
variant: "tertiary-purple",
|
|
71
|
-
onClick: E,
|
|
72
|
-
iconOnly: !0,
|
|
73
|
-
"aria-label": x ?? "",
|
|
74
|
-
"data-testid": r("clear-button"),
|
|
75
|
-
tabIndex: -1,
|
|
76
|
-
children: /* @__PURE__ */ i(G, { size: "xs" })
|
|
77
|
-
},
|
|
78
|
-
"clear-button"
|
|
79
|
-
),
|
|
80
|
-
N && /* @__PURE__ */ i(
|
|
81
|
-
D,
|
|
82
|
-
{
|
|
83
|
-
"data-testid": r("valid-icon"),
|
|
84
|
-
className: _(`${e}__valid-icon`, {
|
|
85
|
-
[`${e}__valid-icon--negative`]: n
|
|
86
|
-
})
|
|
87
|
-
},
|
|
88
|
-
"valid-icon"
|
|
89
|
-
)
|
|
90
|
-
].filter((a) => !!a), z = _(`${e}__input-container`, {
|
|
91
|
-
[`${e}__input-container--start-adornment`]: f.length,
|
|
92
|
-
[`${e}__input-container--end-adornment`]: m.length || s,
|
|
93
|
-
[`${e}__input-container--disabled`]: t.disabled,
|
|
94
|
-
[`${e}__input-container--has-clear-button`]: g,
|
|
95
|
-
[`${e}__input-container--readonly`]: t.readOnly && !t.disabled,
|
|
96
|
-
[`${e}__input-container--negative`]: n
|
|
97
|
-
});
|
|
98
|
-
return /* @__PURE__ */ u("div", { className: _(I, e), children: [
|
|
99
|
-
$ && /* @__PURE__ */ u(
|
|
100
|
-
J,
|
|
101
|
-
{
|
|
102
|
-
htmlFor: o,
|
|
103
|
-
className: _(`${e}__label`),
|
|
104
|
-
"data-testid": r("label"),
|
|
105
|
-
disabled: t.disabled,
|
|
106
|
-
negative: n,
|
|
107
|
-
children: [
|
|
108
|
-
t.required && !R && /* @__PURE__ */ i("span", { "aria-hidden": !0, children: "*" }),
|
|
109
|
-
$
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
),
|
|
113
|
-
/* @__PURE__ */ u("div", { className: _(`${e}__field-row`), children: [
|
|
114
|
-
!!b && b,
|
|
115
|
-
/* @__PURE__ */ u("div", { className: z, children: [
|
|
116
|
-
!!f.length && /* @__PURE__ */ i(
|
|
117
|
-
"div",
|
|
118
|
-
{
|
|
119
|
-
"data-testid": r("start-adornments"),
|
|
120
|
-
className: _(`${e}__adornment-container`),
|
|
121
|
-
children: f
|
|
122
|
-
}
|
|
123
|
-
),
|
|
124
|
-
/* @__PURE__ */ i(
|
|
125
|
-
"input",
|
|
126
|
-
{
|
|
127
|
-
...t,
|
|
128
|
-
id: o,
|
|
129
|
-
ref: j,
|
|
130
|
-
"data-testid": r("input"),
|
|
131
|
-
"aria-describedby": t["aria-describedby"] || c,
|
|
132
|
-
"aria-invalid": t["aria-invalid"] || !!l,
|
|
133
|
-
className: _([
|
|
134
|
-
`${e}__input`,
|
|
135
|
-
{
|
|
136
|
-
[`${e}__input--valid`]: N,
|
|
137
|
-
[`${e}__input--error`]: !!l,
|
|
138
|
-
[`${e}__input--negative`]: n
|
|
139
|
-
}
|
|
140
|
-
])
|
|
141
|
-
}
|
|
142
|
-
),
|
|
143
|
-
/* @__PURE__ */ i(
|
|
144
|
-
"div",
|
|
145
|
-
{
|
|
146
|
-
className: _(`${e}__frame`, {
|
|
147
|
-
[`${e}__frame--negative`]: n
|
|
148
|
-
})
|
|
149
|
-
}
|
|
150
|
-
),
|
|
151
|
-
(!!m.length || s) && /* @__PURE__ */ u(
|
|
152
|
-
"div",
|
|
153
|
-
{
|
|
154
|
-
"data-testid": r("end-adornments"),
|
|
155
|
-
className: _(`${e}__adornment-container`),
|
|
156
|
-
children: [
|
|
157
|
-
m,
|
|
158
|
-
s
|
|
159
|
-
]
|
|
160
|
-
}
|
|
161
|
-
)
|
|
162
|
-
] }),
|
|
163
|
-
!!v && v
|
|
164
|
-
] }),
|
|
165
|
-
c && /* @__PURE__ */ i(
|
|
166
|
-
S,
|
|
167
|
-
{
|
|
168
|
-
"data-testid": r("helper-text"),
|
|
169
|
-
id: c,
|
|
170
|
-
negative: n,
|
|
171
|
-
disabled: t.disabled,
|
|
172
|
-
children: h
|
|
173
|
-
}
|
|
174
|
-
),
|
|
175
|
-
l && /* @__PURE__ */ i(M, { "data-testid": r("error-text"), negative: n, children: l })
|
|
176
|
-
] });
|
|
177
|
-
}
|
|
178
|
-
);
|
|
179
|
-
C.displayName = "TextField";
|
|
180
|
-
const _e = (d) => H(d) && d.type.displayName === C.displayName;
|
|
181
|
-
export {
|
|
182
|
-
C as T,
|
|
183
|
-
_e as i
|
|
184
|
-
};
|
|
185
|
-
//# sourceMappingURL=text-field-BMDf8j-K.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text-field-BMDf8j-K.mjs","sources":["../../../components/text-field/src/utils.ts","../../../components/text-field/src/text-field.tsx"],"sourcesContent":["import { type MutableRefObject, useRef } from \"react\";\n\nexport const useMutableRefObject = <T>(value: T): MutableRefObject<T> => {\n return useRef<T>(value) as MutableRefObject<T>;\n};\n","import React, {\n forwardRef,\n type HTMLInputTypeAttribute,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useId,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { FieldErrorText } from \"@purpur/field-error-text\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { IconCheckCircleFilled } from \"@purpur/icon/check-circle-filled\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Label } from \"@purpur/label\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./text-field.module.scss\";\nimport { useMutableRefObject } from \"./utils\";\n\ntype TextFieldBaseProps = {\n /**\n * Use to display e.g. a button before the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n beforeField?: ReactNode;\n /**\n * Use to display e.g. a button after the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n afterField?: ReactNode;\n /**\n * Use to display e.g. an icon at the end inside of the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n endAdornment?: ReactNode;\n /**\n * Use to render error message below the text field. The text field renders with error appearance.\n * */\n errorText?: string;\n /**\n * Use to give context about the field's input. Renders below the field.\n * */\n helperText?: string;\n /**\n * The label of the text field.\n * */\n label?: string;\n /**\n * Use to render a spinner at the end inside of the text field.\n */\n loading?: boolean;\n /**\n * Hide the asterisk for required fields.\n * This is useful when the field is required but the context already indicates that.\n */\n hideRequiredAsterisk?: boolean;\n /**\n * Use to display e.g. an icon at the start inside of the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n startAdornment?: ReactNode;\n /**\n * Use to set the type of the field.\n */\n type?: Extract<\n HTMLInputTypeAttribute,\n \"email\" | \"number\" | \"password\" | \"search\" | \"tel\" | \"text\"\n >;\n /**\n * Use to render text field with valid appearance. A check\n * icon will render at the start inside of the input.\n */\n valid?: boolean;\n negative?: boolean;\n};\n\ntype TextFieldClearProps =\n | {\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n }\n | {\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel?: never;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear?: never;\n };\n\nexport type TextFieldProps = Omit<BaseProps<\"input\">, \"type\"> &\n TextFieldBaseProps &\n TextFieldClearProps;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-text-field\";\n\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n beforeField,\n afterField,\n endAdornment,\n errorText,\n helperText,\n hideRequiredAsterisk = false,\n label,\n loading = false,\n onClear,\n startAdornment,\n valid = false,\n negative = false,\n ...inputProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = inputProps.id ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = valid && !errorText;\n const helperTextId = helperText ? `${inputId}-helper-text` : undefined;\n const startAdornments: ReactNode[] = [startAdornment].filter((adornment) => !!adornment);\n const hasValue =\n typeof inputProps.value === \"number\"\n ? inputProps.value !== undefined\n : inputProps.value?.length;\n const hasClearButton =\n hasValue &&\n !inputProps.disabled &&\n !inputProps.readOnly &&\n !loading &&\n onClear &&\n clearButtonAriaLabel;\n\n const internalRef = useMutableRefObject<HTMLInputElement | null>(null);\n const setRef = (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n const handleClear = () => {\n onClear?.();\n internalRef.current?.focus();\n };\n\n const localEndAdornments: ReactNode[] = [\n loading && (\n <Spinner\n key=\"spinner\"\n disabled={inputProps.disabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n negative={negative}\n />\n ),\n hasClearButton && (\n <Button\n negative={negative}\n key=\"clear-button\"\n variant=\"tertiary-purple\"\n onClick={handleClear}\n iconOnly\n aria-label={clearButtonAriaLabel ?? \"\"}\n data-testid={getTestId(\"clear-button\")}\n tabIndex={-1}\n >\n <IconClose size=\"xs\" />\n </Button>\n ),\n isValid && (\n <IconCheckCircleFilled\n key=\"valid-icon\"\n data-testid={getTestId(\"valid-icon\")}\n className={cx(`${rootClassName}__valid-icon`, {\n [`${rootClassName}__valid-icon--negative`]: negative,\n })}\n />\n ),\n ].filter((adornment) => !!adornment);\n\n const inputContainerClassnames = cx(`${rootClassName}__input-container`, {\n [`${rootClassName}__input-container--start-adornment`]: startAdornments.length,\n [`${rootClassName}__input-container--end-adornment`]:\n localEndAdornments.length || endAdornment,\n [`${rootClassName}__input-container--disabled`]: inputProps.disabled,\n [`${rootClassName}__input-container--has-clear-button`]: hasClearButton,\n [`${rootClassName}__input-container--readonly`]: inputProps.readOnly && !inputProps.disabled,\n [`${rootClassName}__input-container--negative`]: negative,\n });\n\n return (\n <div className={cx(className, rootClassName)}>\n {label && (\n <Label\n htmlFor={inputId}\n className={cx(`${rootClassName}__label`)}\n data-testid={getTestId(\"label\")}\n disabled={inputProps.disabled}\n negative={negative}\n >\n {inputProps.required && !hideRequiredAsterisk && <span aria-hidden>*</span>}\n {label}\n </Label>\n )}\n <div className={cx(`${rootClassName}__field-row`)}>\n {!!beforeField && beforeField}\n <div className={inputContainerClassnames}>\n {!!startAdornments.length && (\n <div\n data-testid={getTestId(\"start-adornments\")}\n className={cx(`${rootClassName}__adornment-container`)}\n >\n {startAdornments}\n </div>\n )}\n <input\n {...inputProps}\n id={inputId}\n ref={setRef}\n data-testid={getTestId(\"input\")}\n aria-describedby={inputProps[\"aria-describedby\"] || helperTextId}\n aria-invalid={inputProps[\"aria-invalid\"] || !!errorText}\n className={cx([\n `${rootClassName}__input`,\n {\n [`${rootClassName}__input--valid`]: isValid,\n [`${rootClassName}__input--error`]: !!errorText,\n [`${rootClassName}__input--negative`]: negative,\n },\n ])}\n />\n <div\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n {(!!localEndAdornments.length || endAdornment) && (\n <div\n data-testid={getTestId(\"end-adornments\")}\n className={cx(`${rootClassName}__adornment-container`)}\n >\n {localEndAdornments}\n {endAdornment}\n </div>\n )}\n </div>\n {!!afterField && afterField}\n </div>\n {helperTextId && (\n <FieldHelperText\n data-testid={getTestId(\"helper-text\")}\n id={helperTextId}\n negative={negative}\n disabled={inputProps.disabled}\n >\n {helperText}\n </FieldHelperText>\n )}\n {errorText && (\n <FieldErrorText data-testid={getTestId(\"error-text\")} negative={negative}>\n {errorText}\n </FieldErrorText>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n\nexport const isTextField = (child?: ReactNode): child is ReactElement<TextFieldProps> =>\n isValidElement<TextFieldProps>(child) &&\n (child.type as any).displayName === TextField.displayName; // eslint-disable-line @typescript-eslint/no-explicit-any\n"],"names":["useMutableRefObject","value","useRef","cx","c","styles","rootClassName","TextField","forwardRef","dataTestId","className","clearButtonAriaLabel","beforeField","afterField","endAdornment","errorText","helperText","hideRequiredAsterisk","label","loading","onClear","startAdornment","valid","negative","inputProps","ref","randomId","useId","inputId","getTestId","name","isValid","helperTextId","startAdornments","adornment","hasClearButton","internalRef","setRef","node","handleClear","localEndAdornments","jsx","Spinner","Button","IconClose","IconCheckCircleFilled","inputContainerClassnames","jsxs","Label","FieldHelperText","FieldErrorText","isTextField","child","isValidElement"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),s=require("react"),k=require("./button-Dqxdc3nC.js"),z=require("./field-error-text-FhQulSV5.js"),H=require("./field-helper-text-DSKO-Tce.js"),B=require("./check-circle-filled.es-5-GXE9l4.js"),M=require("./close.es-VL3lKi1O.js"),S=require("./label-yHK80hhV.js"),D=require("./spinner-tKunS_o-.js"),G=require("./bind-DeUYJ6m9.js"),J={"purpur-text-field":"_purpur-text-field_1n0q1_1","purpur-text-field__label":"_purpur-text-field__label_1n0q1_7","purpur-text-field__label-text":"_purpur-text-field__label-text_1n0q1_12","purpur-text-field__field-row":"_purpur-text-field__field-row_1n0q1_15","purpur-text-field__frame":"_purpur-text-field__frame_1n0q1_19","purpur-text-field__frame--negative":"_purpur-text-field__frame--negative_1n0q1_26","purpur-text-field__input-container":"_purpur-text-field__input-container_1n0q1_29","purpur-text-field__input-container--disabled":"_purpur-text-field__input-container--disabled_1n0q1_40","purpur-text-field__input-container--readonly":"_purpur-text-field__input-container--readonly_1n0q1_43","purpur-text-field__input-container--has-clear-button":"_purpur-text-field__input-container--has-clear-button_1n0q1_46","purpur-text-field__input-container--end-adornment":"_purpur-text-field__input-container--end-adornment_1n0q1_49","purpur-text-field__input":"_purpur-text-field__input_1n0q1_29","purpur-text-field__input-container--start-adornment":"_purpur-text-field__input-container--start-adornment_1n0q1_55","purpur-text-field__input-container--negative":"_purpur-text-field__input-container--negative_1n0q1_61","purpur-text-field__input--valid":"_purpur-text-field__input--valid_1n0q1_109","purpur-text-field__input--error":"_purpur-text-field__input--error_1n0q1_109","purpur-text-field__input--negative":"_purpur-text-field__input--negative_1n0q1_130","purpur-text-field__adornment-container":"_purpur-text-field__adornment-container_1n0q1_146","purpur-text-field__valid-icon":"_purpur-text-field__valid-icon_1n0q1_151","purpur-text-field__valid-icon--negative":"_purpur-text-field__valid-icon--negative_1n0q1_154"},K=d=>s.useRef(d),_=G.c.bind(J),e="purpur-text-field",m=s.forwardRef(({["data-testid"]:d,className:R,clearButtonAriaLabel:b,beforeField:q,afterField:v,endAdornment:p,errorText:l,helperText:h,hideRequiredAsterisk:C=!1,label:$,loading:j=!1,onClear:y,startAdornment:I,valid:T=!1,negative:i=!1,...t},u)=>{const w=s.useId(),c=t.id??w,r=a=>d?`${d}-${a}`:void 0,N=T&&!l,o=h?`${c}-helper-text`:void 0,x=[I].filter(a=>!!a),g=(typeof t.value=="number"?t.value!==void 0:t.value?.length)&&!t.disabled&&!t.readOnly&&!j&&y&&b,F=K(null),E=a=>{F.current=a,typeof u=="function"?u(a):u&&(u.current=a)},O=()=>{y?.(),F.current?.focus()},f=[j&&n.jsx(D.Spinner,{disabled:t.disabled,size:"xs","data-testid":r("spinner"),negative:i},"spinner"),g&&n.jsx(k.Button,{negative:i,variant:"tertiary-purple",onClick:O,iconOnly:!0,"aria-label":b??"","data-testid":r("clear-button"),tabIndex:-1,children:n.jsx(M.r,{size:"xs"})},"clear-button"),N&&n.jsx(B.r,{"data-testid":r("valid-icon"),className:_(`${e}__valid-icon`,{[`${e}__valid-icon--negative`]:i})},"valid-icon")].filter(a=>!!a),V=_(`${e}__input-container`,{[`${e}__input-container--start-adornment`]:x.length,[`${e}__input-container--end-adornment`]:f.length||p,[`${e}__input-container--disabled`]:t.disabled,[`${e}__input-container--has-clear-button`]:g,[`${e}__input-container--readonly`]:t.readOnly&&!t.disabled,[`${e}__input-container--negative`]:i});return n.jsxs("div",{className:_(R,e),children:[$&&n.jsxs(S.Label,{htmlFor:c,className:_(`${e}__label`),"data-testid":r("label"),disabled:t.disabled,negative:i,children:[t.required&&!C&&n.jsx("span",{"aria-hidden":!0,children:"*"}),$]}),n.jsxs("div",{className:_(`${e}__field-row`),children:[!!q&&q,n.jsxs("div",{className:V,children:[!!x.length&&n.jsx("div",{"data-testid":r("start-adornments"),className:_(`${e}__adornment-container`),children:x}),n.jsx("input",{...t,id:c,ref:E,"data-testid":r("input"),"aria-describedby":t["aria-describedby"]||o,"aria-invalid":t["aria-invalid"]||!!l,className:_([`${e}__input`,{[`${e}__input--valid`]:N,[`${e}__input--error`]:!!l,[`${e}__input--negative`]:i}])}),n.jsx("div",{className:_(`${e}__frame`,{[`${e}__frame--negative`]:i})}),(!!f.length||p)&&n.jsxs("div",{"data-testid":r("end-adornments"),className:_(`${e}__adornment-container`),children:[f,p]})]}),!!v&&v]}),o&&n.jsx(H.FieldHelperText,{"data-testid":r("helper-text"),id:o,negative:i,disabled:t.disabled,children:h}),l&&n.jsx(z.FieldErrorText,{"data-testid":r("error-text"),negative:i,children:l})]})});m.displayName="TextField";const L=d=>s.isValidElement(d)&&d.type.displayName===m.displayName;exports.TextField=m;exports.isTextField=L;
|
|
2
|
-
//# sourceMappingURL=text-field-CiLEj0Fq.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text-field-CiLEj0Fq.js","sources":["../../../components/text-field/src/utils.ts","../../../components/text-field/src/text-field.tsx"],"sourcesContent":["import { type MutableRefObject, useRef } from \"react\";\n\nexport const useMutableRefObject = <T>(value: T): MutableRefObject<T> => {\n return useRef<T>(value) as MutableRefObject<T>;\n};\n","import React, {\n forwardRef,\n type HTMLInputTypeAttribute,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useId,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { FieldErrorText } from \"@purpur/field-error-text\";\nimport { FieldHelperText } from \"@purpur/field-helper-text\";\nimport { IconCheckCircleFilled } from \"@purpur/icon/check-circle-filled\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Label } from \"@purpur/label\";\nimport { Spinner } from \"@purpur/spinner\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./text-field.module.scss\";\nimport { useMutableRefObject } from \"./utils\";\n\ntype TextFieldBaseProps = {\n /**\n * Use to display e.g. a button before the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n beforeField?: ReactNode;\n /**\n * Use to display e.g. a button after the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n afterField?: ReactNode;\n /**\n * Use to display e.g. an icon at the end inside of the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n endAdornment?: ReactNode;\n /**\n * Use to render error message below the text field. The text field renders with error appearance.\n * */\n errorText?: string;\n /**\n * Use to give context about the field's input. Renders below the field.\n * */\n helperText?: string;\n /**\n * The label of the text field.\n * */\n label?: string;\n /**\n * Use to render a spinner at the end inside of the text field.\n */\n loading?: boolean;\n /**\n * Hide the asterisk for required fields.\n * This is useful when the field is required but the context already indicates that.\n */\n hideRequiredAsterisk?: boolean;\n /**\n * Use to display e.g. an icon at the start inside of the text field.\n *\n * _NOTE: Should ideally only be used by other purpur components!_\n */\n startAdornment?: ReactNode;\n /**\n * Use to set the type of the field.\n */\n type?: Extract<\n HTMLInputTypeAttribute,\n \"email\" | \"number\" | \"password\" | \"search\" | \"tel\" | \"text\"\n >;\n /**\n * Use to render text field with valid appearance. A check\n * icon will render at the start inside of the input.\n */\n valid?: boolean;\n negative?: boolean;\n};\n\ntype TextFieldClearProps =\n | {\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n }\n | {\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel?: never;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear?: never;\n };\n\nexport type TextFieldProps = Omit<BaseProps<\"input\">, \"type\"> &\n TextFieldBaseProps &\n TextFieldClearProps;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-text-field\";\n\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n beforeField,\n afterField,\n endAdornment,\n errorText,\n helperText,\n hideRequiredAsterisk = false,\n label,\n loading = false,\n onClear,\n startAdornment,\n valid = false,\n negative = false,\n ...inputProps\n },\n ref\n ) => {\n const randomId = useId();\n const inputId = inputProps.id ?? randomId;\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isValid = valid && !errorText;\n const helperTextId = helperText ? `${inputId}-helper-text` : undefined;\n const startAdornments: ReactNode[] = [startAdornment].filter((adornment) => !!adornment);\n const hasValue =\n typeof inputProps.value === \"number\"\n ? inputProps.value !== undefined\n : inputProps.value?.length;\n const hasClearButton =\n hasValue &&\n !inputProps.disabled &&\n !inputProps.readOnly &&\n !loading &&\n onClear &&\n clearButtonAriaLabel;\n\n const internalRef = useMutableRefObject<HTMLInputElement | null>(null);\n const setRef = (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n const handleClear = () => {\n onClear?.();\n internalRef.current?.focus();\n };\n\n const localEndAdornments: ReactNode[] = [\n loading && (\n <Spinner\n key=\"spinner\"\n disabled={inputProps.disabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n negative={negative}\n />\n ),\n hasClearButton && (\n <Button\n negative={negative}\n key=\"clear-button\"\n variant=\"tertiary-purple\"\n onClick={handleClear}\n iconOnly\n aria-label={clearButtonAriaLabel ?? \"\"}\n data-testid={getTestId(\"clear-button\")}\n tabIndex={-1}\n >\n <IconClose size=\"xs\" />\n </Button>\n ),\n isValid && (\n <IconCheckCircleFilled\n key=\"valid-icon\"\n data-testid={getTestId(\"valid-icon\")}\n className={cx(`${rootClassName}__valid-icon`, {\n [`${rootClassName}__valid-icon--negative`]: negative,\n })}\n />\n ),\n ].filter((adornment) => !!adornment);\n\n const inputContainerClassnames = cx(`${rootClassName}__input-container`, {\n [`${rootClassName}__input-container--start-adornment`]: startAdornments.length,\n [`${rootClassName}__input-container--end-adornment`]:\n localEndAdornments.length || endAdornment,\n [`${rootClassName}__input-container--disabled`]: inputProps.disabled,\n [`${rootClassName}__input-container--has-clear-button`]: hasClearButton,\n [`${rootClassName}__input-container--readonly`]: inputProps.readOnly && !inputProps.disabled,\n [`${rootClassName}__input-container--negative`]: negative,\n });\n\n return (\n <div className={cx(className, rootClassName)}>\n {label && (\n <Label\n htmlFor={inputId}\n className={cx(`${rootClassName}__label`)}\n data-testid={getTestId(\"label\")}\n disabled={inputProps.disabled}\n negative={negative}\n >\n {inputProps.required && !hideRequiredAsterisk && <span aria-hidden>*</span>}\n {label}\n </Label>\n )}\n <div className={cx(`${rootClassName}__field-row`)}>\n {!!beforeField && beforeField}\n <div className={inputContainerClassnames}>\n {!!startAdornments.length && (\n <div\n data-testid={getTestId(\"start-adornments\")}\n className={cx(`${rootClassName}__adornment-container`)}\n >\n {startAdornments}\n </div>\n )}\n <input\n {...inputProps}\n id={inputId}\n ref={setRef}\n data-testid={getTestId(\"input\")}\n aria-describedby={inputProps[\"aria-describedby\"] || helperTextId}\n aria-invalid={inputProps[\"aria-invalid\"] || !!errorText}\n className={cx([\n `${rootClassName}__input`,\n {\n [`${rootClassName}__input--valid`]: isValid,\n [`${rootClassName}__input--error`]: !!errorText,\n [`${rootClassName}__input--negative`]: negative,\n },\n ])}\n />\n <div\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n />\n {(!!localEndAdornments.length || endAdornment) && (\n <div\n data-testid={getTestId(\"end-adornments\")}\n className={cx(`${rootClassName}__adornment-container`)}\n >\n {localEndAdornments}\n {endAdornment}\n </div>\n )}\n </div>\n {!!afterField && afterField}\n </div>\n {helperTextId && (\n <FieldHelperText\n data-testid={getTestId(\"helper-text\")}\n id={helperTextId}\n negative={negative}\n disabled={inputProps.disabled}\n >\n {helperText}\n </FieldHelperText>\n )}\n {errorText && (\n <FieldErrorText data-testid={getTestId(\"error-text\")} negative={negative}>\n {errorText}\n </FieldErrorText>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n\nexport const isTextField = (child?: ReactNode): child is ReactElement<TextFieldProps> =>\n isValidElement<TextFieldProps>(child) &&\n (child.type as any).displayName === TextField.displayName; // eslint-disable-line @typescript-eslint/no-explicit-any\n"],"names":["useMutableRefObject","value","useRef","cx","c","styles","rootClassName","TextField","forwardRef","dataTestId","className","clearButtonAriaLabel","beforeField","afterField","endAdornment","errorText","helperText","hideRequiredAsterisk","label","loading","onClear","startAdornment","valid","negative","inputProps","ref","randomId","useId","inputId","getTestId","name","isValid","helperTextId","startAdornments","adornment","hasClearButton","internalRef","setRef","node","handleClear","localEndAdornments","jsx","Spinner","Button","IconClose","IconCheckCircleFilled","inputContainerClassnames","jsxs","Label","FieldHelperText","FieldErrorText","isTextField","child","isValidElement"],"mappings":"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"}
|