@dxos/react-input 0.10.0 → 0.11.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-input",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Input primitive components for React.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,8 +16,7 @@
16
16
  ".": {
17
17
  "source": "./src/index.ts",
18
18
  "types": "./dist/types/src/index.d.ts",
19
- "browser": "./dist/lib/browser/index.mjs",
20
- "node": "./dist/lib/node-esm/index.mjs"
19
+ "import": "./dist/lib/index.mjs"
21
20
  }
22
21
  },
23
22
  "types": "dist/types/src/index.d.ts",
@@ -31,7 +30,7 @@
31
30
  "@radix-ui/react-primitive": "2.0.2",
32
31
  "@radix-ui/react-slot": "1.1.2",
33
32
  "@radix-ui/react-use-controllable-state": "1.1.0",
34
- "@dxos/react-hooks": "0.10.0"
33
+ "@dxos/react-hooks": "0.11.0"
35
34
  },
36
35
  "devDependencies": {
37
36
  "@types/react": "~19.2.17",
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Scope, createContextScope } from '@radix-ui/react-context';
6
+ import { type PropsWithChildren } from 'react';
7
+
8
+ // Kept out of `Root.tsx`: react-refresh only fast-refreshes a module whose exports are all
9
+ // components, so a context and its hook exported beside them force a full page reload on every edit.
10
+
11
+ export const INPUT_NAME = 'Input';
12
+
13
+ export type Valence = 'success' | 'info' | 'warning' | 'error' | 'neutral';
14
+
15
+ export type InputScopedProps<P> = P & { __inputScope?: Scope };
16
+
17
+ export type InputRootProps = PropsWithChildren<{
18
+ id?: string;
19
+ validationValence?: Valence;
20
+ descriptionId?: string;
21
+ errorMessageId?: string;
22
+ }>;
23
+
24
+ export const [createInputContext, createInputScope] = createContextScope(INPUT_NAME, []);
25
+
26
+ export type InputContextValue = {
27
+ id: string;
28
+ descriptionId: string;
29
+ errorMessageId: string;
30
+ validationValence: Valence;
31
+ };
32
+
33
+ export const [InputProvider, useInputContext] = createInputContext<InputContextValue>(INPUT_NAME);
package/src/InputMeta.tsx CHANGED
@@ -6,7 +6,7 @@ import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
8
8
 
9
- import { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';
9
+ import { INPUT_NAME, type InputScopedProps, useInputContext } from './InputContext';
10
10
 
11
11
  type LabelProps = ComponentPropsWithRef<typeof Primitive.label> & { asChild?: boolean };
12
12
 
package/src/PinInput.tsx CHANGED
@@ -16,7 +16,7 @@ import React, {
16
16
 
17
17
  import { useForwardedRef, useIsFocused } from '@dxos/react-hooks';
18
18
 
19
- import { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';
19
+ import { INPUT_NAME, type InputScopedProps, useInputContext } from './InputContext';
20
20
 
21
21
  type PinInputProps = Omit<ComponentPropsWithRef<'input'>, 'type' | 'maxLength'> & {
22
22
  /** Class name applied to each segment div. */
package/src/Root.tsx CHANGED
@@ -2,34 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type Scope, createContextScope } from '@radix-ui/react-context';
6
- import React, { type PropsWithChildren } from 'react';
5
+ import React from 'react';
7
6
 
8
7
  import { useId } from '@dxos/react-hooks';
9
8
 
10
- const INPUT_NAME = 'Input';
11
-
12
- type Valence = 'success' | 'info' | 'warning' | 'error' | 'neutral';
13
-
14
- type InputScopedProps<P> = P & { __inputScope?: Scope };
15
-
16
- type InputRootProps = PropsWithChildren<{
17
- id?: string;
18
- validationValence?: Valence;
19
- descriptionId?: string;
20
- errorMessageId?: string;
21
- }>;
22
-
23
- const [createInputContext, createInputScope] = createContextScope(INPUT_NAME, []);
24
-
25
- type InputContextValue = {
26
- id: string;
27
- descriptionId: string;
28
- errorMessageId: string;
29
- validationValence: Valence;
30
- };
31
-
32
- const [InputProvider, useInputContext] = createInputContext<InputContextValue>(INPUT_NAME);
9
+ import { INPUT_NAME, InputProvider, type InputRootProps, type InputScopedProps, type Valence } from './InputContext';
33
10
 
34
11
  const InputRoot = ({
35
12
  __inputScope,
@@ -51,6 +28,6 @@ const InputRoot = ({
51
28
 
52
29
  InputRoot.displayName = INPUT_NAME;
53
30
 
54
- export { INPUT_NAME, InputRoot, createInputScope, useInputContext };
31
+ export { InputRoot };
55
32
 
56
33
  export type { InputRootProps, InputScopedProps, Valence };
package/src/TextArea.tsx CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
6
6
 
7
- import { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';
7
+ import { INPUT_NAME, type InputScopedProps, useInputContext } from './InputContext';
8
8
 
9
9
  type TextAreaProps = Omit<ComponentPropsWithRef<'textarea'>, 'id'>;
10
10
 
package/src/TextInput.tsx CHANGED
@@ -5,7 +5,7 @@
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
7
7
 
8
- import { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';
8
+ import { INPUT_NAME, type InputScopedProps, useInputContext } from './InputContext';
9
9
 
10
10
  type TextInputProps = Omit<ComponentPropsWithRef<typeof Primitive.input>, 'id'>;
11
11
 
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  export * from './InputMeta';
6
+ export { INPUT_NAME, type InputScopedProps, createInputScope, useInputContext } from './InputContext';
6
7
  export * from './Root';
7
8
 
8
9
  export * from './PinInput';
@@ -1,298 +0,0 @@
1
- // src/InputMeta.tsx
2
- import { Primitive } from "@radix-ui/react-primitive";
3
- import { Slot } from "@radix-ui/react-slot";
4
- import React2, { forwardRef } from "react";
5
-
6
- // src/Root.tsx
7
- import { createContextScope } from "@radix-ui/react-context";
8
- import React from "react";
9
- import { useId } from "@dxos/react-hooks";
10
- var INPUT_NAME = "Input";
11
- var [createInputContext, createInputScope] = createContextScope(INPUT_NAME, []);
12
- var [InputProvider, useInputContext] = createInputContext(INPUT_NAME);
13
- var InputRoot = ({ __inputScope, id: propsId, descriptionId: propsDescriptionId, errorMessageId: propsErrorMessageId, validationValence = "neutral", children }) => {
14
- const id = useId("input", propsId);
15
- const descriptionId = useId("input__description", propsDescriptionId);
16
- const errorMessageId = useId("input__error-message", propsErrorMessageId);
17
- return /* @__PURE__ */ React.createElement(InputProvider, {
18
- id,
19
- descriptionId,
20
- errorMessageId,
21
- validationValence,
22
- scope: __inputScope
23
- }, children);
24
- };
25
- InputRoot.displayName = INPUT_NAME;
26
-
27
- // src/InputMeta.tsx
28
- var Label = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
29
- const { id } = useInputContext(INPUT_NAME, __inputScope);
30
- const Comp = asChild ? Slot : Primitive.label;
31
- return /* @__PURE__ */ React2.createElement(Comp, {
32
- ...props,
33
- htmlFor: id,
34
- ref: forwardedRef
35
- }, children);
36
- });
37
- var Description = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
38
- const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
39
- const Comp = asChild ? Slot : Primitive.span;
40
- return /* @__PURE__ */ React2.createElement(Comp, {
41
- ...props,
42
- ...validationValence === "error" && {
43
- id: descriptionId
44
- },
45
- ref: forwardedRef
46
- }, children);
47
- });
48
- var ErrorMessage = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
49
- const { errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
50
- const Comp = asChild ? Slot : Primitive.span;
51
- return /* @__PURE__ */ React2.createElement(Comp, {
52
- ...props,
53
- id: errorMessageId,
54
- ref: forwardedRef
55
- }, children);
56
- });
57
- var Validation = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
58
- const { __inputScope, asChild, children, ...otherProps } = props;
59
- const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
60
- if (validationValence === "error") {
61
- return /* @__PURE__ */ React2.createElement(ErrorMessage, {
62
- ...props,
63
- ref: forwardedRef
64
- });
65
- } else {
66
- const Comp = asChild ? Slot : Primitive.span;
67
- return /* @__PURE__ */ React2.createElement(Comp, {
68
- ...otherProps,
69
- ref: forwardedRef
70
- }, children);
71
- }
72
- });
73
- var DescriptionAndValidation = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
74
- const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
75
- const Comp = asChild ? Slot : Primitive.p;
76
- return /* @__PURE__ */ React2.createElement(Comp, {
77
- ...props,
78
- ...validationValence !== "error" && {
79
- id: descriptionId
80
- },
81
- ref: forwardedRef
82
- }, children);
83
- });
84
-
85
- // src/PinInput.tsx
86
- import React3, { forwardRef as forwardRef2, useCallback, useEffect, useMemo, useState } from "react";
87
- import { useForwardedRef, useIsFocused } from "@dxos/react-hooks";
88
- var PinInput = /* @__PURE__ */ forwardRef2(({ __inputScope, className, disabled, segmentClassName, length = 6, pattern, value: controlledValue, onChange, onPaste, ...props }, forwardedRef) => {
89
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
90
- const inputRef = useForwardedRef(forwardedRef);
91
- const inputFocused = useIsFocused(inputRef);
92
- const [internalValue, setInternalValue] = useState("");
93
- const [cursorPosition, setCursorPosition] = useState(0);
94
- const value = controlledValue != null ? String(controlledValue) : internalValue;
95
- const charPattern = useMemo(() => {
96
- if (!pattern) {
97
- return void 0;
98
- }
99
- try {
100
- const base = pattern.replace(/[*+?]$|\{\d+,?\d*\}$/g, "");
101
- return new RegExp(`^${base}$`);
102
- } catch {
103
- return void 0;
104
- }
105
- }, [
106
- pattern
107
- ]);
108
- const filterValue = useCallback((input) => {
109
- if (!charPattern) {
110
- return input;
111
- }
112
- return input.split("").filter((char) => charPattern.test(char)).join("");
113
- }, [
114
- charPattern
115
- ]);
116
- const syncCursor = useCallback(() => {
117
- const pos = inputRef.current?.selectionStart ?? value.length;
118
- setCursorPosition(Math.min(pos, value.length));
119
- }, [
120
- inputRef,
121
- value.length
122
- ]);
123
- useEffect(() => {
124
- setCursorPosition((prev) => Math.min(prev, value.length));
125
- }, [
126
- value.length
127
- ]);
128
- const handleChange = useCallback((event) => {
129
- const newValue = filterValue(event.target.value).slice(0, length);
130
- if (controlledValue == null) {
131
- setInternalValue(newValue);
132
- }
133
- setCursorPosition(event.target.selectionStart ?? newValue.length);
134
- onChange?.(event);
135
- }, [
136
- length,
137
- controlledValue,
138
- onChange,
139
- filterValue
140
- ]);
141
- const handlePaste = useCallback((event) => {
142
- onPaste?.(event);
143
- if (event.defaultPrevented) {
144
- return;
145
- }
146
- event.preventDefault();
147
- const pasted = filterValue(event.clipboardData.getData("text/plain")).slice(0, length);
148
- const input = inputRef.current;
149
- if (!input) {
150
- return;
151
- }
152
- const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set;
153
- nativeInputValueSetter?.call(input, pasted);
154
- input.dispatchEvent(new Event("input", {
155
- bubbles: true
156
- }));
157
- }, [
158
- length,
159
- inputRef,
160
- onPaste,
161
- filterValue
162
- ]);
163
- const handleKeyDown = useCallback((event) => {
164
- if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
165
- requestAnimationFrame(syncCursor);
166
- } else if (event.key === "Backspace" && value.length === 0) {
167
- event.preventDefault();
168
- } else if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {
169
- if (charPattern && !charPattern.test(event.key)) {
170
- event.preventDefault();
171
- props.onKeyDown?.(event);
172
- return;
173
- }
174
- const input = inputRef.current;
175
- const pos = input?.selectionStart ?? value.length;
176
- if (pos < value.length && input) {
177
- event.preventDefault();
178
- const newValue = value.slice(0, pos) + event.key + value.slice(pos + 1);
179
- const newPos = Math.min(pos + 1, length);
180
- if (controlledValue == null) {
181
- setInternalValue(newValue);
182
- }
183
- setCursorPosition(newPos);
184
- const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set;
185
- nativeInputValueSetter?.call(input, newValue);
186
- input.setSelectionRange(newPos, newPos);
187
- onChange?.({
188
- target: input,
189
- currentTarget: input
190
- });
191
- }
192
- }
193
- props.onKeyDown?.(event);
194
- }, [
195
- value,
196
- length,
197
- props.onKeyDown,
198
- syncCursor,
199
- inputRef,
200
- charPattern,
201
- controlledValue,
202
- onChange
203
- ]);
204
- const handleSelect = useCallback(() => {
205
- syncCursor();
206
- }, [
207
- syncCursor
208
- ]);
209
- const activeIndex = Math.min(cursorPosition, value.length < length ? value.length : length - 1);
210
- return /* @__PURE__ */ React3.createElement("div", {
211
- className: `relative inline-flex items-center gap-2 ${className ?? ""}`
212
- }, /* @__PURE__ */ React3.createElement("input", {
213
- ref: inputRef,
214
- id,
215
- type: "text",
216
- value,
217
- onChange: handleChange,
218
- onPaste: handlePaste,
219
- onKeyDown: handleKeyDown,
220
- onSelect: handleSelect,
221
- maxLength: length,
222
- disabled,
223
- spellCheck: false,
224
- "aria-describedby": descriptionId,
225
- ...validationValence === "error" && {
226
- "aria-invalid": "true",
227
- "aria-errormessage": errorMessageId
228
- },
229
- ...props,
230
- pattern,
231
- className: "dx-fullscreen opacity-0",
232
- style: {
233
- caretColor: "transparent",
234
- ...props.style
235
- }
236
- }), Array.from({
237
- length
238
- }, (_, index) => {
239
- const char = value[index] || "\xA0";
240
- const isCursor = !!(inputFocused && index === activeIndex);
241
- return /* @__PURE__ */ React3.createElement("div", {
242
- key: index,
243
- className: segmentClassName,
244
- ...isCursor && {
245
- "data-focused": ""
246
- },
247
- "aria-hidden": "true"
248
- }, char);
249
- }));
250
- });
251
-
252
- // src/TextInput.tsx
253
- import { Primitive as Primitive2 } from "@radix-ui/react-primitive";
254
- import React4, { forwardRef as forwardRef3 } from "react";
255
- var TextInput = /* @__PURE__ */ forwardRef3(({ __inputScope, ...props }, forwardedRef) => {
256
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
257
- return /* @__PURE__ */ React4.createElement(Primitive2.input, {
258
- ...props,
259
- id,
260
- "aria-describedby": descriptionId,
261
- ...validationValence === "error" && {
262
- "aria-invalid": "true",
263
- "aria-errormessage": errorMessageId
264
- },
265
- "ref": forwardedRef
266
- });
267
- });
268
-
269
- // src/TextArea.tsx
270
- import React5, { forwardRef as forwardRef4 } from "react";
271
- var TextArea = /* @__PURE__ */ forwardRef4(({ __inputScope, ...props }, forwardedRef) => {
272
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
273
- return /* @__PURE__ */ React5.createElement("textarea", {
274
- ...props,
275
- id,
276
- "aria-describedby": descriptionId,
277
- ...validationValence === "error" && {
278
- "aria-invalid": "true",
279
- "aria-errormessage": errorMessageId
280
- },
281
- "ref": forwardedRef
282
- });
283
- });
284
- export {
285
- Description,
286
- DescriptionAndValidation,
287
- ErrorMessage,
288
- INPUT_NAME,
289
- InputRoot,
290
- Label,
291
- PinInput,
292
- TextArea,
293
- TextInput,
294
- Validation,
295
- createInputScope,
296
- useInputContext
297
- };
298
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/InputMeta.tsx", "../../../src/Root.tsx", "../../../src/PinInput.tsx", "../../../src/TextInput.tsx", "../../../src/TextArea.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';\n\ntype LabelProps = ComponentPropsWithRef<typeof Primitive.label> & { asChild?: boolean };\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ __inputScope, asChild, children, ...props }: InputScopedProps<LabelProps>, forwardedRef) => {\n const { id } = useInputContext(INPUT_NAME, __inputScope);\n const Comp = asChild ? Slot : Primitive.label;\n return (\n <Comp {...props} htmlFor={id} ref={forwardedRef}>\n {children}\n </Comp>\n );\n },\n);\n\ntype DescriptionProps = Omit<ComponentPropsWithRef<typeof Primitive.span>, 'id'> & { asChild?: boolean };\n\nconst Description = forwardRef<HTMLSpanElement, DescriptionProps>(\n ({ __inputScope, asChild, children, ...props }: InputScopedProps<DescriptionProps>, forwardedRef) => {\n const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);\n const Comp = asChild ? Slot : Primitive.span;\n return (\n <Comp {...props} {...(validationValence === 'error' && { id: descriptionId })} ref={forwardedRef}>\n {children}\n </Comp>\n );\n },\n);\n\ntype ErrorMessageProps = Omit<ComponentPropsWithRef<typeof Primitive.span>, 'id'> & { asChild?: boolean };\n\nconst ErrorMessage = forwardRef<HTMLSpanElement, ErrorMessageProps>(\n ({ __inputScope, asChild, children, ...props }: InputScopedProps<ErrorMessageProps>, forwardedRef) => {\n const { errorMessageId } = useInputContext(INPUT_NAME, __inputScope);\n const Comp = asChild ? Slot : Primitive.span;\n return (\n <Comp {...props} id={errorMessageId} ref={forwardedRef}>\n {children}\n </Comp>\n );\n },\n);\n\ntype ValidationProps = Omit<ComponentPropsWithRef<typeof Primitive.span>, 'id'> & { asChild?: boolean };\n\nconst Validation = forwardRef<HTMLSpanElement, ValidationProps>(\n (props: InputScopedProps<ValidationProps>, forwardedRef) => {\n const { __inputScope, asChild, children, ...otherProps } = props;\n const { validationValence } = useInputContext(INPUT_NAME, __inputScope);\n if (validationValence === 'error') {\n return <ErrorMessage {...props} ref={forwardedRef} />;\n } else {\n const Comp = asChild ? Slot : Primitive.span;\n return (\n <Comp {...otherProps} ref={forwardedRef}>\n {children}\n </Comp>\n );\n }\n },\n);\n\ntype DescriptionAndValidationProps = ComponentPropsWithRef<typeof Primitive.p> & { asChild?: boolean };\n\nconst DescriptionAndValidation = forwardRef<HTMLParagraphElement, DescriptionAndValidationProps>(\n ({ __inputScope, asChild, children, ...props }: InputScopedProps<DescriptionAndValidationProps>, forwardedRef) => {\n const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);\n const Comp = asChild ? Slot : Primitive.p;\n return (\n <Comp {...props} {...(validationValence !== 'error' && { id: descriptionId })} ref={forwardedRef}>\n {children}\n </Comp>\n );\n },\n);\n\nexport { Description, DescriptionAndValidation, ErrorMessage, Label, Validation };\n\nexport type { DescriptionAndValidationProps, DescriptionProps, ErrorMessageProps, LabelProps, ValidationProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Scope, createContextScope } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { useId } from '@dxos/react-hooks';\n\nconst INPUT_NAME = 'Input';\n\ntype Valence = 'success' | 'info' | 'warning' | 'error' | 'neutral';\n\ntype InputScopedProps<P> = P & { __inputScope?: Scope };\n\ntype InputRootProps = PropsWithChildren<{\n id?: string;\n validationValence?: Valence;\n descriptionId?: string;\n errorMessageId?: string;\n}>;\n\nconst [createInputContext, createInputScope] = createContextScope(INPUT_NAME, []);\n\ntype InputContextValue = {\n id: string;\n descriptionId: string;\n errorMessageId: string;\n validationValence: Valence;\n};\n\nconst [InputProvider, useInputContext] = createInputContext<InputContextValue>(INPUT_NAME);\n\nconst InputRoot = ({\n __inputScope,\n id: propsId,\n descriptionId: propsDescriptionId,\n errorMessageId: propsErrorMessageId,\n validationValence = 'neutral',\n children,\n}: InputScopedProps<InputRootProps>) => {\n const id = useId('input', propsId);\n const descriptionId = useId('input__description', propsDescriptionId);\n const errorMessageId = useId('input__error-message', propsErrorMessageId);\n return (\n <InputProvider {...{ id, descriptionId, errorMessageId, validationValence }} scope={__inputScope}>\n {children}\n </InputProvider>\n );\n};\n\nInputRoot.displayName = INPUT_NAME;\n\nexport { INPUT_NAME, InputRoot, createInputScope, useInputContext };\n\nexport type { InputRootProps, InputScopedProps, Valence };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, {\n type ChangeEvent,\n type ClipboardEvent,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { useForwardedRef, useIsFocused } from '@dxos/react-hooks';\n\nimport { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';\n\ntype PinInputProps = Omit<ComponentPropsWithRef<'input'>, 'type' | 'maxLength'> & {\n /** Class name applied to each segment div. */\n segmentClassName?: string;\n /** Number of code segments. */\n length?: number;\n};\n\nconst PinInput = forwardRef<HTMLInputElement, PinInputProps>(\n (\n {\n __inputScope,\n className,\n disabled,\n segmentClassName,\n length = 6,\n pattern,\n value: controlledValue,\n onChange,\n onPaste,\n ...props\n }: InputScopedProps<PinInputProps>,\n forwardedRef,\n ) => {\n const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);\n const inputRef = useForwardedRef(forwardedRef);\n const inputFocused = useIsFocused(inputRef);\n const [internalValue, setInternalValue] = useState('');\n const [cursorPosition, setCursorPosition] = useState(0);\n\n const value = controlledValue != null ? String(controlledValue) : internalValue;\n\n // Derive a per-character filter from the `pattern` prop (e.g., `\\\\d*` → test each char against `\\\\d`).\n const charPattern = useMemo(() => {\n if (!pattern) {\n return undefined;\n }\n try {\n // Strip quantifiers (*, +, {n}) to get the base character class.\n const base = pattern.replace(/[*+?]$|\\{\\d+,?\\d*\\}$/g, '');\n return new RegExp(`^${base}$`);\n } catch {\n return undefined;\n }\n }, [pattern]);\n\n /** Filter a string to only characters matching the pattern. */\n const filterValue = useCallback(\n (input: string) => {\n if (!charPattern) {\n return input;\n }\n return input\n .split('')\n .filter((char) => charPattern.test(char))\n .join('');\n },\n [charPattern],\n );\n\n // Sync cursor position from the hidden input's selection.\n const syncCursor = useCallback(() => {\n const pos = inputRef.current?.selectionStart ?? value.length;\n setCursorPosition(Math.min(pos, value.length));\n }, [inputRef, value.length]);\n\n // Keep cursor in sync after value changes.\n useEffect(() => {\n setCursorPosition((prev) => Math.min(prev, value.length));\n }, [value.length]);\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const newValue = filterValue(event.target.value).slice(0, length);\n if (controlledValue == null) {\n setInternalValue(newValue);\n }\n setCursorPosition(event.target.selectionStart ?? newValue.length);\n onChange?.(event);\n },\n [length, controlledValue, onChange, filterValue],\n );\n\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLInputElement>) => {\n onPaste?.(event);\n if (event.defaultPrevented) {\n return;\n }\n event.preventDefault();\n const pasted = filterValue(event.clipboardData.getData('text/plain')).slice(0, length);\n const input = inputRef.current;\n if (!input) {\n return;\n }\n // Use native setter to trigger React's synthetic onChange.\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n nativeInputValueSetter?.call(input, pasted);\n input.dispatchEvent(new Event('input', { bubbles: true }));\n },\n [length, inputRef, onPaste, filterValue],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n // Let the native input handle cursor movement, then sync.\n requestAnimationFrame(syncCursor);\n } else if (event.key === 'Backspace' && value.length === 0) {\n event.preventDefault();\n } else if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n // Reject characters that don't match the allow pattern.\n if (charPattern && !charPattern.test(event.key)) {\n event.preventDefault();\n props.onKeyDown?.(event);\n return;\n }\n // Overwrite mode: replace character at cursor position instead of inserting.\n const input = inputRef.current;\n const pos = input?.selectionStart ?? value.length;\n if (pos < value.length && input) {\n event.preventDefault();\n const newValue = value.slice(0, pos) + event.key + value.slice(pos + 1);\n const newPos = Math.min(pos + 1, length);\n // Update state and cursor synchronously to avoid flicker.\n if (controlledValue == null) {\n setInternalValue(newValue);\n }\n setCursorPosition(newPos);\n // Sync the native input to match.\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n nativeInputValueSetter?.call(input, newValue);\n input.setSelectionRange(newPos, newPos);\n // Notify consumer via onChange with a synthetic-like event.\n onChange?.({ target: input, currentTarget: input } as ChangeEvent<HTMLInputElement>);\n }\n }\n props.onKeyDown?.(event);\n },\n [value, length, props.onKeyDown, syncCursor, inputRef, charPattern, controlledValue, onChange],\n );\n\n const handleSelect = useCallback(() => {\n syncCursor();\n }, [syncCursor]);\n\n const activeIndex = Math.min(cursorPosition, value.length < length ? value.length : length - 1);\n\n return (\n <div className={`relative inline-flex items-center gap-2 ${className ?? ''}`}>\n <input\n ref={inputRef}\n id={id}\n type='text'\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n maxLength={length}\n disabled={disabled}\n spellCheck={false}\n aria-describedby={descriptionId}\n {...(validationValence === 'error' && {\n 'aria-invalid': 'true' as const,\n 'aria-errormessage': errorMessageId,\n })}\n {...props}\n pattern={pattern}\n className='dx-fullscreen opacity-0'\n style={{\n caretColor: 'transparent',\n ...props.style,\n }}\n />\n {Array.from({ length }, (_, index) => {\n const char = value[index] || '\\u00A0';\n const isCursor = !!(inputFocused && index === activeIndex);\n return (\n <div key={index} className={segmentClassName} {...(isCursor && { 'data-focused': '' })} aria-hidden='true'>\n {char}\n </div>\n );\n })}\n </div>\n );\n },\n);\n\nexport { PinInput };\n\nexport type { PinInputProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Primitive } from '@radix-ui/react-primitive';\nimport React, { type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';\n\ntype TextInputProps = Omit<ComponentPropsWithRef<typeof Primitive.input>, 'id'>;\n\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n ({ __inputScope, ...props }: InputScopedProps<TextInputProps>, forwardedRef) => {\n const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);\n return (\n <Primitive.input\n {...{\n ...props,\n id,\n 'aria-describedby': descriptionId,\n ...(validationValence === 'error' && {\n 'aria-invalid': 'true' as const,\n 'aria-errormessage': errorMessageId,\n }),\n 'ref': forwardedRef,\n }}\n />\n );\n },\n);\n\nexport { TextInput };\n\nexport type { TextInputProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { INPUT_NAME, type InputScopedProps, useInputContext } from './Root';\n\ntype TextAreaProps = Omit<ComponentPropsWithRef<'textarea'>, 'id'>;\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ __inputScope, ...props }: InputScopedProps<TextAreaProps>, forwardedRef) => {\n const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);\n return (\n <textarea\n {...{\n ...props,\n id,\n 'aria-describedby': descriptionId,\n ...(validationValence === 'error' && {\n 'aria-invalid': 'true' as const,\n 'aria-errormessage': errorMessageId,\n }),\n 'ref': forwardedRef,\n }}\n />\n );\n },\n);\n\nexport { TextArea };\n\nexport type { TextAreaProps };\n"],
5
- "mappings": ";AAIA,SAASA,iBAAiB;AAC1B,SAASC,YAAY;AACrB,OAAOC,UAAqCC,kBAAkB;;;ACF9D,SAAqBC,0BAA0B;AAC/C,OAAOC,WAAuC;AAE9C,SAASC,aAAa;AAEtB,IAAMC,aAAa;AAanB,IAAM,CAACC,oBAAoBC,gBAAAA,IAAoBL,mBAAmBG,YAAY,CAAA,CAAE;AAShF,IAAM,CAACG,eAAeC,eAAAA,IAAmBH,mBAAsCD,UAAAA;AAE/E,IAAMK,YAAY,CAAC,EACjBC,cACAC,IAAIC,SACJC,eAAeC,oBACfC,gBAAgBC,qBAChBC,oBAAoB,WACpBC,SAAQ,MACyB;AACjC,QAAMP,KAAKR,MAAM,SAASS,OAAAA;AAC1B,QAAMC,gBAAgBV,MAAM,sBAAsBW,kBAAAA;AAClD,QAAMC,iBAAiBZ,MAAM,wBAAwBa,mBAAAA;AACrD,SACE,sBAAA,cAACT,eAAAA;IAAoBI;IAAIE;IAAeE;IAAgBE;IAAqBE,OAAOT;KACjFQ,QAAAA;AAGP;AAEAT,UAAUW,cAAchB;;;ADvCxB,IAAMiB,QAAQC,2BACZ,CAAC,EAAEC,cAAcC,SAASC,UAAU,GAAGC,MAAAA,GAAuCC,iBAAAA;AAC5E,QAAM,EAAEC,GAAE,IAAKC,gBAAgBC,YAAYP,YAAAA;AAC3C,QAAMQ,OAAOP,UAAUQ,OAAOC,UAAUC;AACxC,SACE,gBAAAC,OAAA,cAACJ,MAAAA;IAAM,GAAGL;IAAOU,SAASR;IAAIS,KAAKV;KAChCF,QAAAA;AAGP,CAAA;AAKF,IAAMa,cAAchB,2BAClB,CAAC,EAAEC,cAAcC,SAASC,UAAU,GAAGC,MAAAA,GAA6CC,iBAAAA;AAClF,QAAM,EAAEY,eAAeC,kBAAiB,IAAKX,gBAAgBC,YAAYP,YAAAA;AACzE,QAAMQ,OAAOP,UAAUQ,OAAOC,UAAUQ;AACxC,SACE,gBAAAN,OAAA,cAACJ,MAAAA;IAAM,GAAGL;IAAQ,GAAIc,sBAAsB,WAAW;MAAEZ,IAAIW;IAAc;IAAIF,KAAKV;KACjFF,QAAAA;AAGP,CAAA;AAKF,IAAMiB,eAAepB,2BACnB,CAAC,EAAEC,cAAcC,SAASC,UAAU,GAAGC,MAAAA,GAA8CC,iBAAAA;AACnF,QAAM,EAAEgB,eAAc,IAAKd,gBAAgBC,YAAYP,YAAAA;AACvD,QAAMQ,OAAOP,UAAUQ,OAAOC,UAAUQ;AACxC,SACE,gBAAAN,OAAA,cAACJ,MAAAA;IAAM,GAAGL;IAAOE,IAAIe;IAAgBN,KAAKV;KACvCF,QAAAA;AAGP,CAAA;AAKF,IAAMmB,aAAatB,2BACjB,CAACI,OAA0CC,iBAAAA;AACzC,QAAM,EAAEJ,cAAcC,SAASC,UAAU,GAAGoB,WAAAA,IAAenB;AAC3D,QAAM,EAAEc,kBAAiB,IAAKX,gBAAgBC,YAAYP,YAAAA;AAC1D,MAAIiB,sBAAsB,SAAS;AACjC,WAAO,gBAAAL,OAAA,cAACO,cAAAA;MAAc,GAAGhB;MAAOW,KAAKV;;EACvC,OAAO;AACL,UAAMI,OAAOP,UAAUQ,OAAOC,UAAUQ;AACxC,WACE,gBAAAN,OAAA,cAACJ,MAAAA;MAAM,GAAGc;MAAYR,KAAKV;OACxBF,QAAAA;EAGP;AACF,CAAA;AAKF,IAAMqB,2BAA2BxB,2BAC/B,CAAC,EAAEC,cAAcC,SAASC,UAAU,GAAGC,MAAAA,GAA0DC,iBAAAA;AAC/F,QAAM,EAAEY,eAAeC,kBAAiB,IAAKX,gBAAgBC,YAAYP,YAAAA;AACzE,QAAMQ,OAAOP,UAAUQ,OAAOC,UAAUc;AACxC,SACE,gBAAAZ,OAAA,cAACJ,MAAAA;IAAM,GAAGL;IAAQ,GAAIc,sBAAsB,WAAW;MAAEZ,IAAIW;IAAc;IAAIF,KAAKV;KACjFF,QAAAA;AAGP,CAAA;;;AE9EF,OAAOuB,UAKLC,cAAAA,aACAC,aACAC,WACAC,SACAC,gBACK;AAEP,SAASC,iBAAiBC,oBAAoB;AAW9C,IAAMC,WAAWC,gBAAAA,YACf,CACE,EACEC,cACAC,WACAC,UACAC,kBACAC,SAAS,GACTC,SACAC,OAAOC,iBACPC,UACAC,SACA,GAAGC,MAAAA,GAELC,iBAAAA;AAEA,QAAM,EAAEC,IAAIC,mBAAmBC,eAAeC,eAAc,IAAKC,gBAAgBC,YAAYjB,YAAAA;AAC7F,QAAMkB,WAAWC,gBAAgBR,YAAAA;AACjC,QAAMS,eAAeC,aAAaH,QAAAA;AAClC,QAAM,CAACI,eAAeC,gBAAAA,IAAoBC,SAAS,EAAA;AACnD,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBF,SAAS,CAAA;AAErD,QAAMlB,QAAQC,mBAAmB,OAAOoB,OAAOpB,eAAAA,IAAmBe;AAGlE,QAAMM,cAAcC,QAAQ,MAAA;AAC1B,QAAI,CAACxB,SAAS;AACZ,aAAOyB;IACT;AACA,QAAI;AAEF,YAAMC,OAAO1B,QAAQ2B,QAAQ,yBAAyB,EAAA;AACtD,aAAO,IAAIC,OAAO,IAAIF,IAAAA,GAAO;IAC/B,QAAQ;AACN,aAAOD;IACT;EACF,GAAG;IAACzB;GAAQ;AAGZ,QAAM6B,cAAcC,YAClB,CAACC,UAAAA;AACC,QAAI,CAACR,aAAa;AAChB,aAAOQ;IACT;AACA,WAAOA,MACJC,MAAM,EAAA,EACNC,OAAO,CAACC,SAASX,YAAYY,KAAKD,IAAAA,CAAAA,EAClCE,KAAK,EAAA;EACV,GACA;IAACb;GAAY;AAIf,QAAMc,aAAaP,YAAY,MAAA;AAC7B,UAAMQ,MAAMzB,SAAS0B,SAASC,kBAAkBvC,MAAMF;AACtDsB,sBAAkBoB,KAAKC,IAAIJ,KAAKrC,MAAMF,MAAM,CAAA;EAC9C,GAAG;IAACc;IAAUZ,MAAMF;GAAO;AAG3B4C,YAAU,MAAA;AACRtB,sBAAkB,CAACuB,SAASH,KAAKC,IAAIE,MAAM3C,MAAMF,MAAM,CAAA;EACzD,GAAG;IAACE,MAAMF;GAAO;AAEjB,QAAM8C,eAAef,YACnB,CAACgB,UAAAA;AACC,UAAMC,WAAWlB,YAAYiB,MAAME,OAAO/C,KAAK,EAAEgD,MAAM,GAAGlD,MAAAA;AAC1D,QAAIG,mBAAmB,MAAM;AAC3BgB,uBAAiB6B,QAAAA;IACnB;AACA1B,sBAAkByB,MAAME,OAAOR,kBAAkBO,SAAShD,MAAM;AAChEI,eAAW2C,KAAAA;EACb,GACA;IAAC/C;IAAQG;IAAiBC;IAAU0B;GAAY;AAGlD,QAAMqB,cAAcpB,YAClB,CAACgB,UAAAA;AACC1C,cAAU0C,KAAAA;AACV,QAAIA,MAAMK,kBAAkB;AAC1B;IACF;AACAL,UAAMM,eAAc;AACpB,UAAMC,SAASxB,YAAYiB,MAAMQ,cAAcC,QAAQ,YAAA,CAAA,EAAeN,MAAM,GAAGlD,MAAAA;AAC/E,UAAMgC,QAAQlB,SAAS0B;AACvB,QAAI,CAACR,OAAO;AACV;IACF;AAEA,UAAMyB,yBAAyBC,OAAOC,yBAAyBC,iBAAiBC,WAAW,OAAA,GAAUC;AACrGL,4BAAwBM,KAAK/B,OAAOsB,MAAAA;AACpCtB,UAAMgC,cAAc,IAAIC,MAAM,SAAS;MAAEC,SAAS;IAAK,CAAA,CAAA;EACzD,GACA;IAAClE;IAAQc;IAAUT;IAASyB;GAAY;AAG1C,QAAMqC,gBAAgBpC,YACpB,CAACgB,UAAAA;AACC,QAAIA,MAAMqB,QAAQ,eAAerB,MAAMqB,QAAQ,cAAc;AAE3DC,4BAAsB/B,UAAAA;IACxB,WAAWS,MAAMqB,QAAQ,eAAelE,MAAMF,WAAW,GAAG;AAC1D+C,YAAMM,eAAc;IACtB,WAAWN,MAAMqB,IAAIpE,WAAW,KAAK,CAAC+C,MAAMuB,WAAW,CAACvB,MAAMwB,WAAW,CAACxB,MAAMyB,QAAQ;AAEtF,UAAIhD,eAAe,CAACA,YAAYY,KAAKW,MAAMqB,GAAG,GAAG;AAC/CrB,cAAMM,eAAc;AACpB/C,cAAMmE,YAAY1B,KAAAA;AAClB;MACF;AAEA,YAAMf,QAAQlB,SAAS0B;AACvB,YAAMD,MAAMP,OAAOS,kBAAkBvC,MAAMF;AAC3C,UAAIuC,MAAMrC,MAAMF,UAAUgC,OAAO;AAC/Be,cAAMM,eAAc;AACpB,cAAML,WAAW9C,MAAMgD,MAAM,GAAGX,GAAAA,IAAOQ,MAAMqB,MAAMlE,MAAMgD,MAAMX,MAAM,CAAA;AACrE,cAAMmC,SAAShC,KAAKC,IAAIJ,MAAM,GAAGvC,MAAAA;AAEjC,YAAIG,mBAAmB,MAAM;AAC3BgB,2BAAiB6B,QAAAA;QACnB;AACA1B,0BAAkBoD,MAAAA;AAElB,cAAMjB,yBAAyBC,OAAOC,yBAAyBC,iBAAiBC,WAAW,OAAA,GAAUC;AACrGL,gCAAwBM,KAAK/B,OAAOgB,QAAAA;AACpChB,cAAM2C,kBAAkBD,QAAQA,MAAAA;AAEhCtE,mBAAW;UAAE6C,QAAQjB;UAAO4C,eAAe5C;QAAM,CAAA;MACnD;IACF;AACA1B,UAAMmE,YAAY1B,KAAAA;EACpB,GACA;IAAC7C;IAAOF;IAAQM,MAAMmE;IAAWnC;IAAYxB;IAAUU;IAAarB;IAAiBC;GAAS;AAGhG,QAAMyE,eAAe9C,YAAY,MAAA;AAC/BO,eAAAA;EACF,GAAG;IAACA;GAAW;AAEf,QAAMwC,cAAcpC,KAAKC,IAAItB,gBAAgBnB,MAAMF,SAASA,SAASE,MAAMF,SAASA,SAAS,CAAA;AAE7F,SACE,gBAAA+E,OAAA,cAACC,OAAAA;IAAInF,WAAW,2CAA2CA,aAAa,EAAA;KACtE,gBAAAkF,OAAA,cAAC/C,SAAAA;IACCiD,KAAKnE;IACLN;IACA0E,MAAK;IACLhF;IACAE,UAAU0C;IACVzC,SAAS8C;IACTsB,WAAWN;IACXgB,UAAUN;IACVO,WAAWpF;IACXF;IACAuF,YAAY;IACZC,oBAAkB5E;IACjB,GAAID,sBAAsB,WAAW;MACpC,gBAAgB;MAChB,qBAAqBE;IACvB;IACC,GAAGL;IACJL;IACAJ,WAAU;IACV0F,OAAO;MACLC,YAAY;MACZ,GAAGlF,MAAMiF;IACX;MAEDE,MAAMC,KAAK;IAAE1F;EAAO,GAAG,CAAC2F,GAAGC,UAAAA;AAC1B,UAAMzD,OAAOjC,MAAM0F,KAAAA,KAAU;AAC7B,UAAMC,WAAW,CAAC,EAAE7E,gBAAgB4E,UAAUd;AAC9C,WACE,gBAAAC,OAAA,cAACC,OAAAA;MAAIZ,KAAKwB;MAAO/F,WAAWE;MAAmB,GAAI8F,YAAY;QAAE,gBAAgB;MAAG;MAAIC,eAAY;OACjG3D,IAAAA;EAGP,CAAA,CAAA;AAGN,CAAA;;;ACzMF,SAAS4D,aAAAA,kBAAiB;AAC1B,OAAOC,UAAqCC,cAAAA,mBAAkB;AAM9D,IAAMC,YAAYC,gBAAAA,YAChB,CAAC,EAAEC,cAAc,GAAGC,MAAAA,GAA2CC,iBAAAA;AAC7D,QAAM,EAAEC,IAAIC,mBAAmBC,eAAeC,eAAc,IAAKC,gBAAgBC,YAAYR,YAAAA;AAC7F,SACE,gBAAAS,OAAA,cAACC,WAAUC,OACL;IACF,GAAGV;IACHE;IACA,oBAAoBE;IACpB,GAAID,sBAAsB,WAAW;MACnC,gBAAgB;MAChB,qBAAqBE;IACvB;IACA,OAAOJ;EACT,CAAA;AAGN,CAAA;;;ACxBF,OAAOU,UAAqCC,cAAAA,mBAAkB;AAM9D,IAAMC,WAAWC,gBAAAA,YACf,CAAC,EAAEC,cAAc,GAAGC,MAAAA,GAA0CC,iBAAAA;AAC5D,QAAM,EAAEC,IAAIC,mBAAmBC,eAAeC,eAAc,IAAKC,gBAAgBC,YAAYR,YAAAA;AAC7F,SACE,gBAAAS,OAAA,cAACC,YACK;IACF,GAAGT;IACHE;IACA,oBAAoBE;IACpB,GAAID,sBAAsB,WAAW;MACnC,gBAAgB;MAChB,qBAAqBE;IACvB;IACA,OAAOJ;EACT,CAAA;AAGN,CAAA;",
6
- "names": ["Primitive", "Slot", "React", "forwardRef", "createContextScope", "React", "useId", "INPUT_NAME", "createInputContext", "createInputScope", "InputProvider", "useInputContext", "InputRoot", "__inputScope", "id", "propsId", "descriptionId", "propsDescriptionId", "errorMessageId", "propsErrorMessageId", "validationValence", "children", "scope", "displayName", "Label", "forwardRef", "__inputScope", "asChild", "children", "props", "forwardedRef", "id", "useInputContext", "INPUT_NAME", "Comp", "Slot", "Primitive", "label", "React", "htmlFor", "ref", "Description", "descriptionId", "validationValence", "span", "ErrorMessage", "errorMessageId", "Validation", "otherProps", "DescriptionAndValidation", "p", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "useState", "useForwardedRef", "useIsFocused", "PinInput", "forwardRef", "__inputScope", "className", "disabled", "segmentClassName", "length", "pattern", "value", "controlledValue", "onChange", "onPaste", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "inputRef", "useForwardedRef", "inputFocused", "useIsFocused", "internalValue", "setInternalValue", "useState", "cursorPosition", "setCursorPosition", "String", "charPattern", "useMemo", "undefined", "base", "replace", "RegExp", "filterValue", "useCallback", "input", "split", "filter", "char", "test", "join", "syncCursor", "pos", "current", "selectionStart", "Math", "min", "useEffect", "prev", "handleChange", "event", "newValue", "target", "slice", "handlePaste", "defaultPrevented", "preventDefault", "pasted", "clipboardData", "getData", "nativeInputValueSetter", "Object", "getOwnPropertyDescriptor", "HTMLInputElement", "prototype", "set", "call", "dispatchEvent", "Event", "bubbles", "handleKeyDown", "key", "requestAnimationFrame", "metaKey", "ctrlKey", "altKey", "onKeyDown", "newPos", "setSelectionRange", "currentTarget", "handleSelect", "activeIndex", "React", "div", "ref", "type", "onSelect", "maxLength", "spellCheck", "aria-describedby", "style", "caretColor", "Array", "from", "_", "index", "isCursor", "aria-hidden", "Primitive", "React", "forwardRef", "TextInput", "forwardRef", "__inputScope", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "React", "Primitive", "input", "React", "forwardRef", "TextArea", "forwardRef", "__inputScope", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "React", "textarea"]
7
- }
@@ -1 +0,0 @@
1
- {"inputs":{"src/Root.tsx":{"bytes":4510,"imports":[{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true}],"format":"esm"},"src/InputMeta.tsx":{"bytes":9992,"imports":[{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"src/PinInput.tsx":{"bytes":23950,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"src/TextInput.tsx":{"bytes":3101,"imports":[{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"src/TextArea.tsx":{"bytes":2867,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"src/index.ts":{"bytes":726,"imports":[{"path":"src/InputMeta.tsx","kind":"import-statement","original":"./InputMeta"},{"path":"src/Root.tsx","kind":"import-statement","original":"./Root"},{"path":"src/PinInput.tsx","kind":"import-statement","original":"./PinInput"},{"path":"src/TextInput.tsx","kind":"import-statement","original":"./TextInput"},{"path":"src/TextArea.tsx","kind":"import-statement","original":"./TextArea"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23668},"dist/lib/browser/index.mjs":{"imports":[{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Description","DescriptionAndValidation","ErrorMessage","INPUT_NAME","InputRoot","Label","PinInput","TextArea","TextInput","Validation","createInputScope","useInputContext"],"entryPoint":"src/index.ts","inputs":{"src/InputMeta.tsx":{"bytesInOutput":2282},"src/Root.tsx":{"bytesInOutput":875},"src/index.ts":{"bytesInOutput":0},"src/PinInput.tsx":{"bytesInOutput":5220},"src/TextInput.tsx":{"bytesInOutput":612},"src/TextArea.tsx":{"bytesInOutput":536}},"bytes":9880}}}