paris 0.24.0 → 0.25.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.md +50 -0
- package/README.md +2 -2
- package/dist/stories/accordion/Accordion.module.scss.js +1 -1
- package/dist/stories/accordionselect/{AccordionSelect.module.css → AccordionSelect.css} +3 -0
- package/dist/stories/accordionselect/AccordionSelect.d.ts +15 -14
- package/dist/stories/accordionselect/AccordionSelect.js +8 -3
- package/dist/stories/accordionselect/AccordionSelect.js.map +1 -1
- package/dist/stories/accordionselect/AccordionSelect.module.scss.js +1 -1
- package/dist/stories/avatar/Avatar.module.scss.js +1 -1
- package/dist/stories/button/{Button.module.css → Button.css} +17 -0
- package/dist/stories/button/Button.js +2 -1
- package/dist/stories/button/Button.js.map +1 -1
- package/dist/stories/button/Button.module.scss.js +6 -2
- package/dist/stories/button/Button.module.scss.js.map +1 -1
- package/dist/stories/callout/Callout.module.scss.js +1 -1
- package/dist/stories/card/Card.module.scss.js +1 -1
- package/dist/stories/cardbutton/{CardButton.module.css → CardButton.css} +1 -1
- package/dist/stories/cardbutton/CardButton.d.ts +9 -1
- package/dist/stories/cardbutton/CardButton.js +5 -2
- package/dist/stories/cardbutton/CardButton.js.map +1 -1
- package/dist/stories/cardbutton/CardButton.module.scss.js +1 -1
- package/dist/stories/checkbox/{Checkbox.module.css → Checkbox.css} +14 -0
- package/dist/stories/checkbox/Checkbox.d.ts +30 -2
- package/dist/stories/checkbox/Checkbox.js +91 -83
- package/dist/stories/checkbox/Checkbox.js.map +1 -1
- package/dist/stories/checkbox/Checkbox.module.scss.js +1 -1
- package/dist/stories/codeinput/CodeInput.d.ts +1 -2
- package/dist/stories/codeinput/CodeInput.js +100 -93
- package/dist/stories/codeinput/CodeInput.js.map +1 -1
- package/dist/stories/codeinput/CodeInput.module.scss.js +1 -1
- package/dist/stories/combobox/Combobox.d.ts +9 -4
- package/dist/stories/combobox/Combobox.js +13 -2
- package/dist/stories/combobox/Combobox.js.map +1 -1
- package/dist/stories/dialog/Dialog.module.scss.js +1 -1
- package/dist/stories/drawer/Drawer.d.ts +9 -0
- package/dist/stories/drawer/Drawer.js +11 -0
- package/dist/stories/drawer/Drawer.js.map +1 -1
- package/dist/stories/drawer/Drawer.module.scss.js +1 -1
- package/dist/stories/field/Field.js +6 -6
- package/dist/stories/field/Field.js.map +1 -1
- package/dist/stories/informationaltooltip/InformationalTooltip.module.scss.js +1 -1
- package/dist/stories/input/Input.d.ts +39 -2
- package/dist/stories/input/Input.js.map +1 -1
- package/dist/stories/input/Input.module.scss.js +1 -1
- package/dist/stories/markdown/Markdown.module.scss.js +1 -1
- package/dist/stories/markdowneditor/FixedToolbar.module.scss.js +1 -1
- package/dist/stories/markdowneditor/FloatingToolbar.module.scss.js +1 -1
- package/dist/stories/markdowneditor/LinkPopover.module.scss.js +1 -1
- package/dist/stories/markdowneditor/MarkdownEditor.d.ts +10 -2
- package/dist/stories/markdowneditor/MarkdownEditor.js +5 -4
- package/dist/stories/markdowneditor/MarkdownEditor.js.map +1 -1
- package/dist/stories/markdowneditor/MarkdownEditor.module.scss.js +1 -1
- package/dist/stories/markdowneditor/ToolbarButton.module.scss.js +1 -1
- package/dist/stories/menu/{Menu.module.css → Menu.css} +3 -0
- package/dist/stories/menu/Menu.d.ts +5 -2
- package/dist/stories/menu/Menu.js +4 -10
- package/dist/stories/menu/Menu.js.map +1 -1
- package/dist/stories/menu/Menu.module.scss.js +1 -1
- package/dist/stories/popover/Popover.module.scss.js +1 -1
- package/dist/stories/select/{Select.module.css → Select.css} +3 -0
- package/dist/stories/select/Select.d.ts +19 -14
- package/dist/stories/select/Select.js +249 -240
- package/dist/stories/select/Select.js.map +1 -1
- package/dist/stories/select/Select.module.scss.js +1 -1
- package/dist/stories/styledlink/StyledLink.module.scss.js +1 -1
- package/dist/stories/table/Table.module.scss.js +1 -1
- package/dist/stories/tabs/Tabs.d.ts +10 -4
- package/dist/stories/tabs/Tabs.js +1 -3
- package/dist/stories/tabs/Tabs.js.map +1 -1
- package/dist/stories/tabs/Tabs.module.scss.js +1 -1
- package/dist/stories/tag/Tag.module.scss.js +1 -1
- package/dist/stories/text/Text.module.scss.js +1 -1
- package/dist/stories/text/Typography.module.css.js +1 -1
- package/dist/stories/tilt/Tilt.module.scss.js +1 -1
- package/dist/stories/toast/Toast.module.scss.js +1 -1
- package/dist/stories/utility/TextWhenString.d.ts +3 -3
- package/dist/stories/utility/TextWhenString.js +2 -3
- package/dist/stories/utility/TextWhenString.js.map +1 -1
- package/dist/styles.css +41 -1
- package/package.json +2 -2
- /package/dist/stories/accordion/{Accordion.module.css → Accordion.css} +0 -0
- /package/dist/stories/avatar/{Avatar.module.css → Avatar.css} +0 -0
- /package/dist/stories/callout/{Callout.module.css → Callout.css} +0 -0
- /package/dist/stories/card/{Card.module.css → Card.css} +0 -0
- /package/dist/stories/codeinput/{CodeInput.module.css → CodeInput.css} +0 -0
- /package/dist/stories/dialog/{Dialog.module.css → Dialog.css} +0 -0
- /package/dist/stories/drawer/{Drawer.module.css → Drawer.css} +0 -0
- /package/dist/stories/informationaltooltip/{InformationalTooltip.module.css → InformationalTooltip.css} +0 -0
- /package/dist/stories/input/{Input.module.css → Input.css} +0 -0
- /package/dist/stories/markdown/{Markdown.module.css → Markdown.css} +0 -0
- /package/dist/stories/markdowneditor/{FixedToolbar.module.css → FixedToolbar.css} +0 -0
- /package/dist/stories/markdowneditor/{FloatingToolbar.module.css → FloatingToolbar.css} +0 -0
- /package/dist/stories/markdowneditor/{LinkPopover.module.css → LinkPopover.css} +0 -0
- /package/dist/stories/markdowneditor/{MarkdownEditor.module.css → MarkdownEditor.css} +0 -0
- /package/dist/stories/markdowneditor/{ToolbarButton.module.css → ToolbarButton.css} +0 -0
- /package/dist/stories/popover/{Popover.module.css → Popover.css} +0 -0
- /package/dist/stories/styledlink/{StyledLink.module.css → StyledLink.css} +0 -0
- /package/dist/stories/table/{Table.module.css → Table.css} +0 -0
- /package/dist/stories/tabs/{Tabs.module.css → Tabs.css} +0 -0
- /package/dist/stories/tag/{Tag.module.css → Tag.css} +0 -0
- /package/dist/stories/text/{Text.module.css → Text.css} +0 -0
- /package/dist/stories/text/{Typography.module.css → Typography.css} +0 -0
- /package/dist/stories/tilt/{Tilt.module.css → Tilt.css} +0 -0
- /package/dist/stories/toast/{Toast.module.css → Toast.css} +0 -0
|
@@ -1,105 +1,112 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
|
-
import { useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
import { forwardRef, useRef, useCallback, useEffect } from 'react';
|
|
5
5
|
import styles from './CodeInput.module.scss.js';
|
|
6
6
|
|
|
7
|
-
const CodeInput = (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
event.
|
|
57
|
-
|
|
58
|
-
chars[index]
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
7
|
+
const CodeInput = forwardRef(
|
|
8
|
+
({
|
|
9
|
+
value,
|
|
10
|
+
onChange,
|
|
11
|
+
onComplete,
|
|
12
|
+
length = 6,
|
|
13
|
+
status = "default",
|
|
14
|
+
disabled = false,
|
|
15
|
+
loading = false,
|
|
16
|
+
autoFocus = false,
|
|
17
|
+
"aria-label": ariaLabel = "Verification code"
|
|
18
|
+
}, ref) => {
|
|
19
|
+
const inputsRef = useRef([]);
|
|
20
|
+
const digits = value.split("").slice(0, length);
|
|
21
|
+
const focusAt = useCallback(
|
|
22
|
+
(index) => {
|
|
23
|
+
const clamped = Math.max(0, Math.min(index, length - 1));
|
|
24
|
+
const input = inputsRef.current[clamped];
|
|
25
|
+
input?.focus();
|
|
26
|
+
input?.select();
|
|
27
|
+
},
|
|
28
|
+
[length]
|
|
29
|
+
);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (autoFocus) focusAt(0);
|
|
32
|
+
}, [autoFocus, focusAt]);
|
|
33
|
+
const emit = useCallback(
|
|
34
|
+
(next) => {
|
|
35
|
+
const sliced = next.slice(0, length);
|
|
36
|
+
onChange(sliced);
|
|
37
|
+
if (sliced.length === length) onComplete?.(sliced);
|
|
38
|
+
},
|
|
39
|
+
[length, onChange, onComplete]
|
|
40
|
+
);
|
|
41
|
+
const handleChange = (index) => (event) => {
|
|
42
|
+
const typed = event.target.value.replace(/\D/g, "");
|
|
43
|
+
if (!typed) return;
|
|
44
|
+
const chars = value.split("");
|
|
45
|
+
let cursor = index;
|
|
46
|
+
for (const char of typed) {
|
|
47
|
+
if (cursor >= length) break;
|
|
48
|
+
chars[cursor] = char;
|
|
49
|
+
cursor += 1;
|
|
50
|
+
}
|
|
51
|
+
emit(chars.join(""));
|
|
52
|
+
focusAt(cursor);
|
|
53
|
+
};
|
|
54
|
+
const handleKeyDown = (index) => (event) => {
|
|
55
|
+
const chars = value.split("");
|
|
56
|
+
if (event.key === "Backspace") {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
if (chars[index]) {
|
|
59
|
+
chars[index] = "";
|
|
60
|
+
emit(chars.join(""));
|
|
61
|
+
} else if (index > 0) {
|
|
62
|
+
chars[index - 1] = "";
|
|
63
|
+
emit(chars.join(""));
|
|
64
|
+
focusAt(index - 1);
|
|
65
|
+
}
|
|
66
|
+
} else if (event.key === "ArrowLeft") {
|
|
67
|
+
event.preventDefault();
|
|
63
68
|
focusAt(index - 1);
|
|
69
|
+
} else if (event.key === "ArrowRight") {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
focusAt(index + 1);
|
|
64
72
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
focusAt(index - 1);
|
|
68
|
-
} else if (event.key === "ArrowRight") {
|
|
73
|
+
};
|
|
74
|
+
const handlePaste = (event) => {
|
|
69
75
|
event.preventDefault();
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
76
|
+
const pasted = event.clipboardData.getData("text").replace(/\D/g, "").slice(0, length);
|
|
77
|
+
if (!pasted) return;
|
|
78
|
+
emit(pasted);
|
|
79
|
+
focusAt(pasted.length);
|
|
80
|
+
};
|
|
81
|
+
return /* @__PURE__ */ jsx("div", { className: clsx(styles.container, loading && styles.loading), role: "group", "aria-label": ariaLabel, children: Array.from({ length }).map((_, index) => /* @__PURE__ */ jsx(
|
|
82
|
+
"input",
|
|
83
|
+
{
|
|
84
|
+
ref: (element) => {
|
|
85
|
+
inputsRef.current[index] = element;
|
|
86
|
+
if (index === 0) {
|
|
87
|
+
if (typeof ref === "function") ref(element);
|
|
88
|
+
else if (ref) ref.current = element;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
className: clsx(styles.segment, status === "error" && styles.error),
|
|
92
|
+
type: "text",
|
|
93
|
+
inputMode: "numeric",
|
|
94
|
+
autoComplete: index === 0 ? "one-time-code" : "off",
|
|
95
|
+
maxLength: 1,
|
|
96
|
+
disabled,
|
|
97
|
+
readOnly: loading,
|
|
98
|
+
value: digits[index] ?? "",
|
|
99
|
+
"aria-label": `Digit ${index + 1}`,
|
|
100
|
+
onChange: handleChange(index),
|
|
101
|
+
onKeyDown: handleKeyDown(index),
|
|
102
|
+
onPaste: handlePaste,
|
|
103
|
+
onFocus: (event) => event.target.select()
|
|
85
104
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
disabled,
|
|
92
|
-
readOnly: loading,
|
|
93
|
-
value: digits[index] ?? "",
|
|
94
|
-
"aria-label": `Digit ${index + 1}`,
|
|
95
|
-
onChange: handleChange(index),
|
|
96
|
-
onKeyDown: handleKeyDown(index),
|
|
97
|
-
onPaste: handlePaste,
|
|
98
|
-
onFocus: (event) => event.target.select()
|
|
99
|
-
},
|
|
100
|
-
index
|
|
101
|
-
)) });
|
|
102
|
-
};
|
|
105
|
+
index
|
|
106
|
+
)) });
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
CodeInput.displayName = "CodeInput";
|
|
103
110
|
|
|
104
111
|
export { CodeInput };
|
|
105
112
|
//# sourceMappingURL=CodeInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeInput.js","sources":["../../../src/stories/codeinput/CodeInput.tsx"],"sourcesContent":["'use client';\n\nimport { clsx } from 'clsx';\nimport type { ChangeEvent, ClipboardEvent, FC, KeyboardEvent } from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport styles from './CodeInput.module.scss';\n\nexport type CodeInputProps = {\n /** The current code value. Controlled — pass the digits entered so far. */\n value: string;\n /** Called with the new value whenever a segment changes. */\n onChange: (value: string) => void;\n /** Called once the final segment is filled (i.e. `value.length === length`). */\n onComplete?: (value: string) => void;\n /**\n * Number of digit segments.\n * @default 6\n */\n length?: number;\n /**\n * Visual status of the segments.\n * @default 'default'\n */\n status?: 'default' | 'error';\n /** Disables all segments. */\n disabled?: boolean;\n /**\n * Locks the input and plays a validating animation (a right-to-left fill, then a glare that\n * sweeps across the segments). Use while a submitted code is being verified.\n */\n loading?: boolean;\n /** Focus the first segment on mount. */\n autoFocus?: boolean;\n /**\n * Accessible label for the group of segments.\n * @default 'Verification code'\n */\n 'aria-label'?: string;\n};\n\n/**\n * A segmented numeric code input — `length` single-digit cells with auto-advance, paste-to-fill,\n * backspace-retreat, and arrow-key navigation. Intended for one-time PIN / SMS verification codes.\n *\n * <hr />\n *\n * To use this component, import it as follows:\n *\n * ```js\n * import { CodeInput } from 'paris/codeinput';\n * ```\n * @constructor\n */\nexport const CodeInput: FC<CodeInputProps> = ({\n value,\n onChange,\n onComplete,\n length = 6,\n status = 'default',\n disabled = false,\n loading = false,\n autoFocus = false,\n 'aria-label': ariaLabel = 'Verification code',\n}) => {\n const inputsRef = useRef<Array<HTMLInputElement | null>>([]);\n const digits = value.split('').slice(0, length);\n\n const focusAt = useCallback(\n (index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1));\n const input = inputsRef.current[clamped];\n input?.focus();\n input?.select();\n },\n [length],\n );\n\n useEffect(() => {\n if (autoFocus) focusAt(0);\n }, [autoFocus, focusAt]);\n\n const emit = useCallback(\n (next: string) => {\n const sliced = next.slice(0, length);\n onChange(sliced);\n if (sliced.length === length) onComplete?.(sliced);\n },\n [length, onChange, onComplete],\n );\n\n const handleChange = (index: number) => (event: ChangeEvent<HTMLInputElement>) => {\n const typed = event.target.value.replace(/\\D/g, '');\n if (!typed) return;\n const chars = value.split('');\n let cursor = index;\n for (const char of typed) {\n if (cursor >= length) break;\n chars[cursor] = char;\n cursor += 1;\n }\n emit(chars.join(''));\n focusAt(cursor);\n };\n\n const handleKeyDown = (index: number) => (event: KeyboardEvent<HTMLInputElement>) => {\n const chars = value.split('');\n if (event.key === 'Backspace') {\n event.preventDefault();\n if (chars[index]) {\n chars[index] = '';\n emit(chars.join(''));\n } else if (index > 0) {\n chars[index - 1] = '';\n emit(chars.join(''));\n focusAt(index - 1);\n }\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n focusAt(index - 1);\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n if (!pasted) return;\n emit(pasted);\n focusAt(pasted.length);\n };\n\n return (\n <div className={clsx(styles.container, loading && styles.loading)} role=\"group\" aria-label={ariaLabel}>\n {Array.from({ length }).map((_, index) => (\n <input\n // biome-ignore lint/suspicious/noArrayIndexKey: fixed-length positional code segments are stable\n key={index}\n ref={(element) => {\n inputsRef.current[index] = element;\n }}\n className={clsx(styles.segment, status === 'error' && styles.error)}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={index === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n disabled={disabled}\n readOnly={loading}\n value={digits[index] ?? ''}\n aria-label={`Digit ${index + 1}`}\n onChange={handleChange(index)}\n onKeyDown={handleKeyDown(index)}\n onPaste={handlePaste}\n onFocus={(event) => event.target.select()}\n />\n ))}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeInput.js","sources":["../../../src/stories/codeinput/CodeInput.tsx"],"sourcesContent":["'use client';\n\nimport { clsx } from 'clsx';\nimport type { ChangeEvent, ClipboardEvent, KeyboardEvent } from 'react';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\nimport styles from './CodeInput.module.scss';\n\nexport type CodeInputProps = {\n /** The current code value. Controlled — pass the digits entered so far. */\n value: string;\n /** Called with the new value whenever a segment changes. */\n onChange: (value: string) => void;\n /** Called once the final segment is filled (i.e. `value.length === length`). */\n onComplete?: (value: string) => void;\n /**\n * Number of digit segments.\n * @default 6\n */\n length?: number;\n /**\n * Visual status of the segments.\n * @default 'default'\n */\n status?: 'default' | 'error';\n /** Disables all segments. */\n disabled?: boolean;\n /**\n * Locks the input and plays a validating animation (a right-to-left fill, then a glare that\n * sweeps across the segments). Use while a submitted code is being verified.\n */\n loading?: boolean;\n /** Focus the first segment on mount. */\n autoFocus?: boolean;\n /**\n * Accessible label for the group of segments.\n * @default 'Verification code'\n */\n 'aria-label'?: string;\n};\n\n/**\n * A segmented numeric code input — `length` single-digit cells with auto-advance, paste-to-fill,\n * backspace-retreat, and arrow-key navigation. Intended for one-time PIN / SMS verification codes.\n *\n * <hr />\n *\n * To use this component, import it as follows:\n *\n * ```js\n * import { CodeInput } from 'paris/codeinput';\n * ```\n * @constructor\n */\nexport const CodeInput = forwardRef<HTMLInputElement, CodeInputProps>(\n (\n {\n value,\n onChange,\n onComplete,\n length = 6,\n status = 'default',\n disabled = false,\n loading = false,\n autoFocus = false,\n 'aria-label': ariaLabel = 'Verification code',\n },\n ref,\n ) => {\n const inputsRef = useRef<Array<HTMLInputElement | null>>([]);\n const digits = value.split('').slice(0, length);\n\n const focusAt = useCallback(\n (index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1));\n const input = inputsRef.current[clamped];\n input?.focus();\n input?.select();\n },\n [length],\n );\n\n useEffect(() => {\n if (autoFocus) focusAt(0);\n }, [autoFocus, focusAt]);\n\n const emit = useCallback(\n (next: string) => {\n const sliced = next.slice(0, length);\n onChange(sliced);\n if (sliced.length === length) onComplete?.(sliced);\n },\n [length, onChange, onComplete],\n );\n\n const handleChange = (index: number) => (event: ChangeEvent<HTMLInputElement>) => {\n const typed = event.target.value.replace(/\\D/g, '');\n if (!typed) return;\n const chars = value.split('');\n let cursor = index;\n for (const char of typed) {\n if (cursor >= length) break;\n chars[cursor] = char;\n cursor += 1;\n }\n emit(chars.join(''));\n focusAt(cursor);\n };\n\n const handleKeyDown = (index: number) => (event: KeyboardEvent<HTMLInputElement>) => {\n const chars = value.split('');\n if (event.key === 'Backspace') {\n event.preventDefault();\n if (chars[index]) {\n chars[index] = '';\n emit(chars.join(''));\n } else if (index > 0) {\n chars[index - 1] = '';\n emit(chars.join(''));\n focusAt(index - 1);\n }\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n focusAt(index - 1);\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n if (!pasted) return;\n emit(pasted);\n focusAt(pasted.length);\n };\n\n return (\n <div className={clsx(styles.container, loading && styles.loading)} role=\"group\" aria-label={ariaLabel}>\n {Array.from({ length }).map((_, index) => (\n <input\n // biome-ignore lint/suspicious/noArrayIndexKey: fixed-length positional code segments are stable\n key={index}\n ref={(element) => {\n inputsRef.current[index] = element;\n // Forward the first cell so form libraries can focus the code input by ref.\n if (index === 0) {\n if (typeof ref === 'function') ref(element);\n else if (ref) ref.current = element;\n }\n }}\n className={clsx(styles.segment, status === 'error' && styles.error)}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={index === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n disabled={disabled}\n readOnly={loading}\n value={digits[index] ?? ''}\n aria-label={`Digit ${index + 1}`}\n onChange={handleChange(index)}\n onKeyDown={handleKeyDown(index)}\n onPaste={handlePaste}\n onFocus={(event) => event.target.select()}\n />\n ))}\n </div>\n );\n },\n);\n\nCodeInput.displayName = 'CodeInput';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode, Ref } from 'react';
|
|
2
2
|
import { ButtonProps } from '../button';
|
|
3
3
|
import { FieldProps } from '../field';
|
|
4
4
|
import { InputProps } from '../input';
|
|
5
5
|
import { TextProps } from '../text';
|
|
6
|
-
export type Option<T extends Record<string,
|
|
6
|
+
export type Option<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
7
7
|
id: string;
|
|
8
8
|
node: ReactNode;
|
|
9
9
|
metadata?: T;
|
|
@@ -12,7 +12,7 @@ export type Option<T extends Record<string, any> = Record<string, any>> = {
|
|
|
12
12
|
node: string;
|
|
13
13
|
metadata?: T;
|
|
14
14
|
};
|
|
15
|
-
export type ComboboxProps<T extends Record<string,
|
|
15
|
+
export type ComboboxProps<T extends Record<string, unknown>> = {
|
|
16
16
|
/**
|
|
17
17
|
* The {@link Option}s to render in the select box.
|
|
18
18
|
*
|
|
@@ -105,6 +105,11 @@ export type ComboboxProps<T extends Record<string, any>> = {
|
|
|
105
105
|
endEnhancerContainer?: ComponentPropsWithoutRef<'div'>;
|
|
106
106
|
clearButton?: ButtonProps;
|
|
107
107
|
};
|
|
108
|
+
/**
|
|
109
|
+
* Ref forwarded to the underlying combobox `<input>` element. Lets form libraries (e.g.
|
|
110
|
+
* react-hook-form's `field.ref` / `setFocus`) focus the combobox when its field is invalid.
|
|
111
|
+
*/
|
|
112
|
+
ref?: Ref<HTMLInputElement>;
|
|
108
113
|
} & Omit<InputProps, 'type' | 'overrides'>;
|
|
109
114
|
/**
|
|
110
115
|
* A Combobox component is used to render a searchable select.
|
|
@@ -122,4 +127,4 @@ export type ComboboxProps<T extends Record<string, any>> = {
|
|
|
122
127
|
* ```
|
|
123
128
|
* @constructor
|
|
124
129
|
*/
|
|
125
|
-
export declare function Combobox<T extends Record<string,
|
|
130
|
+
export declare function Combobox<T extends Record<string, unknown> = Record<string, unknown>>({ options, value, defaultValue, onChange, label, status, hideLabel, description, hideDescription, descriptionPosition, placeholder, startEnhancer, endEnhancer, disabled, onInputChange, allowCustomValue, showCustomValueOption, customValueString, customValueToOption, onOpenChange, hideClearButton, maxHeight, hasOptionBorder, hideOptionsInitially, overrides, ref, }: ComboboxProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,7 +4,7 @@ import { faClose } from '@fortawesome/free-solid-svg-icons';
|
|
|
4
4
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
5
5
|
import { Combobox as Combobox$1, ComboboxButton, ComboboxInput, ComboboxOptions, ComboboxOption } from '@headlessui/react';
|
|
6
6
|
import { clsx } from 'clsx';
|
|
7
|
-
import { useId, useState, useRef, useCallback, useLayoutEffect, useMemo } from 'react';
|
|
7
|
+
import { useId, useState, useRef, useCallback, useEffect, useLayoutEffect, useMemo } from 'react';
|
|
8
8
|
import { OpenChangeEffect } from '../../helpers/OpenChangeEffect.js';
|
|
9
9
|
import { MemoizedEnhancer } from '../../helpers/renderEnhancer.js';
|
|
10
10
|
import { useControllableState } from '../../helpers/useControllableState.js';
|
|
@@ -42,7 +42,8 @@ function Combobox({
|
|
|
42
42
|
maxHeight = 320,
|
|
43
43
|
hasOptionBorder = false,
|
|
44
44
|
hideOptionsInitially = false,
|
|
45
|
-
overrides
|
|
45
|
+
overrides,
|
|
46
|
+
ref
|
|
46
47
|
}) {
|
|
47
48
|
const inputID = useId();
|
|
48
49
|
const [resolvedValue, setResolvedValue] = useControllableState({
|
|
@@ -60,6 +61,16 @@ function Combobox({
|
|
|
60
61
|
const inputRef = useCallback((node) => {
|
|
61
62
|
inputElRef.current = node;
|
|
62
63
|
}, []);
|
|
64
|
+
const showInput = !(resolvedValue?.node && typeof resolvedValue.node !== "string");
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!ref) return;
|
|
67
|
+
const target = showInput ? inputElRef.current : containerElRef.current;
|
|
68
|
+
if (typeof ref === "function") {
|
|
69
|
+
ref(target);
|
|
70
|
+
} else {
|
|
71
|
+
ref.current = target;
|
|
72
|
+
}
|
|
73
|
+
}, [ref, showInput]);
|
|
63
74
|
useLayoutEffect(() => {
|
|
64
75
|
if (containerElRef.current && inputElRef.current) {
|
|
65
76
|
const containerLeft = containerElRef.current.getBoundingClientRect().left;
|