@dxos/react-input 0.8.3-staging.0fa589b → 0.8.4-main.03d5cd7b56

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.
@@ -1,13 +1,11 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/ui/primitives/react-input/src/InputMeta.tsx
4
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
3
+ // src/InputMeta.tsx
5
4
  import { Primitive } from "@radix-ui/react-primitive";
6
5
  import { Slot } from "@radix-ui/react-slot";
7
6
  import React2, { forwardRef } from "react";
8
7
 
9
- // packages/ui/primitives/react-input/src/Root.tsx
10
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
+ // src/Root.tsx
11
9
  import { createContextScope } from "@radix-ui/react-context";
12
10
  import React from "react";
13
11
  import { useId } from "@dxos/react-hooks";
@@ -15,200 +13,275 @@ var INPUT_NAME = "Input";
15
13
  var [createInputContext, createInputScope] = createContextScope(INPUT_NAME, []);
16
14
  var [InputProvider, useInputContext] = createInputContext(INPUT_NAME);
17
15
  var InputRoot = ({ __inputScope, id: propsId, descriptionId: propsDescriptionId, errorMessageId: propsErrorMessageId, validationValence = "neutral", children }) => {
18
- var _effect = _useSignals();
19
- try {
20
- const id = useId("input", propsId);
21
- const descriptionId = useId("input__description", propsDescriptionId);
22
- const errorMessageId = useId("input__error-message", propsErrorMessageId);
23
- return /* @__PURE__ */ React.createElement(InputProvider, {
24
- id,
25
- descriptionId,
26
- errorMessageId,
27
- validationValence,
28
- scope: __inputScope
29
- }, children);
30
- } finally {
31
- _effect.f();
32
- }
16
+ const id = useId("input", propsId);
17
+ const descriptionId = useId("input__description", propsDescriptionId);
18
+ const errorMessageId = useId("input__error-message", propsErrorMessageId);
19
+ return /* @__PURE__ */ React.createElement(InputProvider, {
20
+ id,
21
+ descriptionId,
22
+ errorMessageId,
23
+ validationValence,
24
+ scope: __inputScope
25
+ }, children);
33
26
  };
34
27
  InputRoot.displayName = INPUT_NAME;
35
28
 
36
- // packages/ui/primitives/react-input/src/InputMeta.tsx
29
+ // src/InputMeta.tsx
37
30
  var Label = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
38
- var _effect = _useSignals2();
39
- try {
40
- const { id } = useInputContext(INPUT_NAME, __inputScope);
41
- const Root = asChild ? Slot : Primitive.label;
42
- return /* @__PURE__ */ React2.createElement(Root, {
43
- ...props,
44
- htmlFor: id,
45
- ref: forwardedRef
46
- }, children);
47
- } finally {
48
- _effect.f();
49
- }
31
+ const { id } = useInputContext(INPUT_NAME, __inputScope);
32
+ const Comp = asChild ? Slot : Primitive.label;
33
+ return /* @__PURE__ */ React2.createElement(Comp, {
34
+ ...props,
35
+ htmlFor: id,
36
+ ref: forwardedRef
37
+ }, children);
50
38
  });
51
39
  var Description = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
52
- var _effect = _useSignals2();
53
- try {
54
- const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
55
- const Root = asChild ? Slot : Primitive.span;
56
- return /* @__PURE__ */ React2.createElement(Root, {
57
- ...props,
58
- ...validationValence === "error" && {
59
- id: descriptionId
60
- },
61
- ref: forwardedRef
62
- }, children);
63
- } finally {
64
- _effect.f();
65
- }
40
+ const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
41
+ const Comp = asChild ? Slot : Primitive.span;
42
+ return /* @__PURE__ */ React2.createElement(Comp, {
43
+ ...props,
44
+ ...validationValence === "error" && {
45
+ id: descriptionId
46
+ },
47
+ ref: forwardedRef
48
+ }, children);
66
49
  });
67
50
  var ErrorMessage = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
68
- var _effect = _useSignals2();
69
- try {
70
- const { errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
71
- const Root = asChild ? Slot : Primitive.span;
72
- return /* @__PURE__ */ React2.createElement(Root, {
73
- ...props,
74
- id: errorMessageId,
75
- ref: forwardedRef
76
- }, children);
77
- } finally {
78
- _effect.f();
79
- }
51
+ const { errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
52
+ const Comp = asChild ? Slot : Primitive.span;
53
+ return /* @__PURE__ */ React2.createElement(Comp, {
54
+ ...props,
55
+ id: errorMessageId,
56
+ ref: forwardedRef
57
+ }, children);
80
58
  });
81
59
  var Validation = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
82
- var _effect = _useSignals2();
83
- try {
84
- const { __inputScope, asChild, children, ...otherProps } = props;
85
- const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
86
- if (validationValence === "error") {
87
- return /* @__PURE__ */ React2.createElement(ErrorMessage, {
88
- ...props,
89
- ref: forwardedRef
90
- });
91
- } else {
92
- const Root = asChild ? Slot : Primitive.span;
93
- return /* @__PURE__ */ React2.createElement(Root, {
94
- ...otherProps,
95
- ref: forwardedRef
96
- }, children);
97
- }
98
- } finally {
99
- _effect.f();
100
- }
101
- });
102
- var DescriptionAndValidation = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
103
- var _effect = _useSignals2();
104
- try {
105
- const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
106
- const Root = asChild ? Slot : Primitive.p;
107
- return /* @__PURE__ */ React2.createElement(Root, {
60
+ const { __inputScope, asChild, children, ...otherProps } = props;
61
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
62
+ if (validationValence === "error") {
63
+ return /* @__PURE__ */ React2.createElement(ErrorMessage, {
108
64
  ...props,
109
- ...validationValence !== "error" && {
110
- id: descriptionId
111
- },
65
+ ref: forwardedRef
66
+ });
67
+ } else {
68
+ const Comp = asChild ? Slot : Primitive.span;
69
+ return /* @__PURE__ */ React2.createElement(Comp, {
70
+ ...otherProps,
112
71
  ref: forwardedRef
113
72
  }, children);
114
- } finally {
115
- _effect.f();
116
73
  }
117
74
  });
75
+ var DescriptionAndValidation = /* @__PURE__ */ forwardRef(({ __inputScope, asChild, children, ...props }, forwardedRef) => {
76
+ const { descriptionId, validationValence } = useInputContext(INPUT_NAME, __inputScope);
77
+ const Comp = asChild ? Slot : Primitive.p;
78
+ return /* @__PURE__ */ React2.createElement(Comp, {
79
+ ...props,
80
+ ...validationValence !== "error" && {
81
+ id: descriptionId
82
+ },
83
+ ref: forwardedRef
84
+ }, children);
85
+ });
118
86
 
119
- // packages/ui/primitives/react-input/src/PinInput.tsx
120
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
121
- import { CodeInput, getSegmentCssWidth } from "rci";
122
- import React3, { forwardRef as forwardRef2, useCallback } from "react";
87
+ // src/PinInput.tsx
88
+ import React3, { forwardRef as forwardRef2, useCallback, useEffect, useMemo, useState } from "react";
123
89
  import { useForwardedRef, useIsFocused } from "@dxos/react-hooks";
124
- var PinInput = /* @__PURE__ */ forwardRef2(({ __inputScope, segmentClassName, inputClassName, segmentPadding = "8px", segmentHeight = "100%", ...props }, forwardedRef) => {
125
- var _effect = _useSignals3();
126
- try {
127
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
128
- const width = getSegmentCssWidth(segmentPadding);
129
- const inputRef = useForwardedRef(forwardedRef);
130
- const inputFocused = useIsFocused(inputRef);
131
- const renderSegment = useCallback(({ state, index }) => /* @__PURE__ */ React3.createElement("div", {
132
- key: index,
133
- className: segmentClassName?.({
134
- focused: !!(inputFocused && state),
135
- validationValence
136
- }),
137
- "data-state": state,
138
- style: {
139
- width,
140
- height: segmentHeight
90
+ var PinInput = /* @__PURE__ */ forwardRef2(({ __inputScope, className, disabled, segmentClassName, length = 6, pattern, value: controlledValue, onChange, onPaste, ...props }, forwardedRef) => {
91
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
92
+ const inputRef = useForwardedRef(forwardedRef);
93
+ const inputFocused = useIsFocused(inputRef);
94
+ const [internalValue, setInternalValue] = useState("");
95
+ const [cursorPosition, setCursorPosition] = useState(0);
96
+ const value = controlledValue != null ? String(controlledValue) : internalValue;
97
+ const charPattern = useMemo(() => {
98
+ if (!pattern) {
99
+ return void 0;
100
+ }
101
+ try {
102
+ const base = pattern.replace(/[*+?]$|\{\d+,?\d*\}$/g, "");
103
+ return new RegExp(`^${base}$`);
104
+ } catch {
105
+ return void 0;
106
+ }
107
+ }, [
108
+ pattern
109
+ ]);
110
+ const filterValue = useCallback((input) => {
111
+ if (!charPattern) {
112
+ return input;
113
+ }
114
+ return input.split("").filter((char) => charPattern.test(char)).join("");
115
+ }, [
116
+ charPattern
117
+ ]);
118
+ const syncCursor = useCallback(() => {
119
+ const pos = inputRef.current?.selectionStart ?? value.length;
120
+ setCursorPosition(Math.min(pos, value.length));
121
+ }, [
122
+ inputRef,
123
+ value.length
124
+ ]);
125
+ useEffect(() => {
126
+ setCursorPosition((prev) => Math.min(prev, value.length));
127
+ }, [
128
+ value.length
129
+ ]);
130
+ const handleChange = useCallback((event) => {
131
+ const newValue = filterValue(event.target.value).slice(0, length);
132
+ if (controlledValue == null) {
133
+ setInternalValue(newValue);
134
+ }
135
+ setCursorPosition(event.target.selectionStart ?? newValue.length);
136
+ onChange?.(event);
137
+ }, [
138
+ length,
139
+ controlledValue,
140
+ onChange,
141
+ filterValue
142
+ ]);
143
+ const handlePaste = useCallback((event) => {
144
+ onPaste?.(event);
145
+ if (event.defaultPrevented) {
146
+ return;
147
+ }
148
+ event.preventDefault();
149
+ const pasted = filterValue(event.clipboardData.getData("text/plain")).slice(0, length);
150
+ const input = inputRef.current;
151
+ if (!input) {
152
+ return;
153
+ }
154
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set;
155
+ nativeInputValueSetter?.call(input, pasted);
156
+ input.dispatchEvent(new Event("input", {
157
+ bubbles: true
158
+ }));
159
+ }, [
160
+ length,
161
+ inputRef,
162
+ onPaste,
163
+ filterValue
164
+ ]);
165
+ const handleKeyDown = useCallback((event) => {
166
+ if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
167
+ requestAnimationFrame(syncCursor);
168
+ } else if (event.key === "Backspace" && value.length === 0) {
169
+ event.preventDefault();
170
+ } else if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {
171
+ if (charPattern && !charPattern.test(event.key)) {
172
+ event.preventDefault();
173
+ props.onKeyDown?.(event);
174
+ return;
141
175
  }
142
- }), [
143
- segmentClassName,
144
- inputFocused,
145
- validationValence
146
- ]);
147
- return /* @__PURE__ */ React3.createElement(CodeInput, {
148
- padding: "8px",
149
- spacing: "8px",
150
- fontFamily: "",
151
- spellCheck: false,
152
- length: 6,
153
- ...props,
154
- id,
155
- "aria-describedby": descriptionId,
156
- ...validationValence === "error" && {
157
- "aria-invalid": "true",
158
- "aria-errormessage": errorMessageId
176
+ const input = inputRef.current;
177
+ const pos = input?.selectionStart ?? value.length;
178
+ if (pos < value.length && input) {
179
+ event.preventDefault();
180
+ const newValue = value.slice(0, pos) + event.key + value.slice(pos + 1);
181
+ const newPos = Math.min(pos + 1, length);
182
+ if (controlledValue == null) {
183
+ setInternalValue(newValue);
184
+ }
185
+ setCursorPosition(newPos);
186
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set;
187
+ nativeInputValueSetter?.call(input, newValue);
188
+ input.setSelectionRange(newPos, newPos);
189
+ onChange?.({
190
+ target: input,
191
+ currentTarget: input
192
+ });
193
+ }
194
+ }
195
+ props.onKeyDown?.(event);
196
+ }, [
197
+ value,
198
+ length,
199
+ props.onKeyDown,
200
+ syncCursor,
201
+ inputRef,
202
+ charPattern,
203
+ controlledValue,
204
+ onChange
205
+ ]);
206
+ const handleSelect = useCallback(() => {
207
+ syncCursor();
208
+ }, [
209
+ syncCursor
210
+ ]);
211
+ const activeIndex = Math.min(cursorPosition, value.length < length ? value.length : length - 1);
212
+ return /* @__PURE__ */ React3.createElement("div", {
213
+ className: `relative inline-flex items-center gap-2 ${className ?? ""}`
214
+ }, /* @__PURE__ */ React3.createElement("input", {
215
+ ref: inputRef,
216
+ id,
217
+ type: "text",
218
+ value,
219
+ onChange: handleChange,
220
+ onPaste: handlePaste,
221
+ onKeyDown: handleKeyDown,
222
+ onSelect: handleSelect,
223
+ maxLength: length,
224
+ disabled,
225
+ spellCheck: false,
226
+ "aria-describedby": descriptionId,
227
+ ...validationValence === "error" && {
228
+ "aria-invalid": "true",
229
+ "aria-errormessage": errorMessageId
230
+ },
231
+ ...props,
232
+ pattern,
233
+ className: "dx-fullscreen opacity-0",
234
+ style: {
235
+ caretColor: "transparent",
236
+ ...props.style
237
+ }
238
+ }), Array.from({
239
+ length
240
+ }, (_, index) => {
241
+ const char = value[index] || "\xA0";
242
+ const isCursor = !!(inputFocused && index === activeIndex);
243
+ return /* @__PURE__ */ React3.createElement("div", {
244
+ key: index,
245
+ className: segmentClassName,
246
+ ...isCursor && {
247
+ "data-focused": ""
159
248
  },
160
- inputRef,
161
- renderSegment,
162
- className: inputClassName
163
- });
164
- } finally {
165
- _effect.f();
166
- }
249
+ "aria-hidden": "true"
250
+ }, char);
251
+ }));
167
252
  });
168
253
 
169
- // packages/ui/primitives/react-input/src/TextInput.tsx
170
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
254
+ // src/TextInput.tsx
171
255
  import { Primitive as Primitive2 } from "@radix-ui/react-primitive";
172
256
  import React4, { forwardRef as forwardRef3 } from "react";
173
257
  var TextInput = /* @__PURE__ */ forwardRef3(({ __inputScope, ...props }, forwardedRef) => {
174
- var _effect = _useSignals4();
175
- try {
176
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
177
- return /* @__PURE__ */ React4.createElement(Primitive2.input, {
178
- ...props,
179
- id,
180
- "aria-describedby": descriptionId,
181
- ...validationValence === "error" && {
182
- "aria-invalid": "true",
183
- "aria-errormessage": errorMessageId
184
- },
185
- ref: forwardedRef
186
- });
187
- } finally {
188
- _effect.f();
189
- }
258
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
259
+ return /* @__PURE__ */ React4.createElement(Primitive2.input, {
260
+ ...props,
261
+ id,
262
+ "aria-describedby": descriptionId,
263
+ ...validationValence === "error" && {
264
+ "aria-invalid": "true",
265
+ "aria-errormessage": errorMessageId
266
+ },
267
+ ref: forwardedRef
268
+ });
190
269
  });
191
270
 
192
- // packages/ui/primitives/react-input/src/TextArea.tsx
193
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
271
+ // src/TextArea.tsx
194
272
  import React5, { forwardRef as forwardRef4 } from "react";
195
273
  var TextArea = /* @__PURE__ */ forwardRef4(({ __inputScope, ...props }, forwardedRef) => {
196
- var _effect = _useSignals5();
197
- try {
198
- const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
199
- return /* @__PURE__ */ React5.createElement("textarea", {
200
- ...props,
201
- id,
202
- "aria-describedby": descriptionId,
203
- ...validationValence === "error" && {
204
- "aria-invalid": "true",
205
- "aria-errormessage": errorMessageId
206
- },
207
- ref: forwardedRef
208
- });
209
- } finally {
210
- _effect.f();
211
- }
274
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
275
+ return /* @__PURE__ */ React5.createElement("textarea", {
276
+ ...props,
277
+ id,
278
+ "aria-describedby": descriptionId,
279
+ ...validationValence === "error" && {
280
+ "aria-invalid": "true",
281
+ "aria-errormessage": errorMessageId
282
+ },
283
+ ref: forwardedRef
284
+ });
212
285
  });
213
286
  export {
214
287
  Description,
@@ -218,7 +291,6 @@ export {
218
291
  InputRoot,
219
292
  Label,
220
293
  PinInput,
221
- InputRoot as Root,
222
294
  TextArea,
223
295
  TextInput,
224
296
  Validation,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 Root = asChild ? Slot : Primitive.label;\n return (\n <Root {...props} htmlFor={id} ref={forwardedRef}>\n {children}\n </Root>\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 Root = asChild ? Slot : Primitive.span;\n return (\n <Root {...props} {...(validationValence === 'error' && { id: descriptionId })} ref={forwardedRef}>\n {children}\n </Root>\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 Root = asChild ? Slot : Primitive.span;\n return (\n <Root {...props} id={errorMessageId} ref={forwardedRef}>\n {children}\n </Root>\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 Root = asChild ? Slot : Primitive.span;\n return (\n <Root {...otherProps} ref={forwardedRef}>\n {children}\n </Root>\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 Root = asChild ? Slot : Primitive.p;\n return (\n <Root {...props} {...(validationValence !== 'error' && { id: descriptionId })} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\nexport { Label, Validation, Description, DescriptionAndValidation, ErrorMessage };\n\nexport type { LabelProps, ValidationProps, DescriptionProps, DescriptionAndValidationProps, ErrorMessageProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createContextScope, type Scope } 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 { InputRoot, InputRoot as Root, createInputScope, useInputContext, INPUT_NAME };\n\nexport type { Valence, InputRootProps, InputScopedProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CodeInput, getSegmentCssWidth } from 'rci';\nimport React, { type ComponentProps, type ComponentPropsWithRef, forwardRef, useCallback } from 'react';\n\nimport { useForwardedRef, useIsFocused } from '@dxos/react-hooks';\n\nimport { INPUT_NAME, type InputScopedProps, useInputContext, type Valence } from './Root';\n\ntype PinInputProps = Omit<\n ComponentPropsWithRef<typeof CodeInput>,\n 'id' | 'className' | 'inputRef' | 'renderSegment'\n> & {\n inputClassName?: string;\n segmentClassName?: (styleProps: { focused: boolean; validationValence: Valence }) => string;\n segmentPadding?: string;\n segmentHeight?: string;\n};\n\nconst PinInput = forwardRef<HTMLInputElement, PinInputProps>(\n (\n {\n __inputScope,\n segmentClassName,\n inputClassName,\n segmentPadding = '8px',\n segmentHeight = '100%',\n ...props\n }: InputScopedProps<PinInputProps>,\n forwardedRef,\n ) => {\n const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);\n const width = getSegmentCssWidth(segmentPadding);\n const inputRef = useForwardedRef(forwardedRef);\n const inputFocused = useIsFocused(inputRef);\n\n const renderSegment = useCallback<ComponentProps<typeof CodeInput>['renderSegment']>(\n ({ state, index }) => (\n <div\n key={index}\n className={segmentClassName?.({\n focused: !!(inputFocused && state),\n validationValence,\n })}\n data-state={state}\n style={{ width, height: segmentHeight }}\n />\n ),\n [segmentClassName, inputFocused, validationValence],\n );\n\n return (\n <CodeInput\n {...{\n padding: '8px',\n spacing: '8px',\n fontFamily: '',\n spellCheck: false,\n length: 6,\n ...props,\n id,\n 'aria-describedby': descriptionId,\n ...(validationValence === 'error' && {\n 'aria-invalid': 'true' as const,\n 'aria-errormessage': errorMessageId,\n }),\n inputRef,\n renderSegment,\n className: inputClassName,\n }}\n />\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": "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",
6
- "names": ["Primitive", "Slot", "React", "forwardRef", "createContextScope", "React", "useId", "INPUT_NAME", "createInputContext", "createInputScope", "createContextScope", "InputProvider", "useInputContext", "InputRoot", "__inputScope", "id", "propsId", "descriptionId", "propsDescriptionId", "errorMessageId", "propsErrorMessageId", "validationValence", "children", "useId", "scope", "displayName", "Label", "forwardRef", "__inputScope", "asChild", "children", "props", "forwardedRef", "id", "useInputContext", "INPUT_NAME", "Root", "Slot", "Primitive", "label", "React", "htmlFor", "ref", "Description", "descriptionId", "validationValence", "span", "ErrorMessage", "errorMessageId", "Validation", "otherProps", "DescriptionAndValidation", "p", "CodeInput", "getSegmentCssWidth", "React", "forwardRef", "useCallback", "useForwardedRef", "useIsFocused", "PinInput", "forwardRef", "__inputScope", "segmentClassName", "inputClassName", "segmentPadding", "segmentHeight", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "width", "getSegmentCssWidth", "inputRef", "useForwardedRef", "inputFocused", "useIsFocused", "renderSegment", "useCallback", "state", "index", "React", "div", "key", "className", "focused", "data-state", "style", "height", "CodeInput", "padding", "spacing", "fontFamily", "spellCheck", "length", "Primitive", "React", "forwardRef", "TextInput", "forwardRef", "__inputScope", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "React", "Primitive", "input", "ref", "React", "forwardRef", "TextArea", "forwardRef", "__inputScope", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "React", "textarea", "ref"]
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 { Label, Validation, Description, DescriptionAndValidation, ErrorMessage };\n\nexport type { LabelProps, ValidationProps, DescriptionProps, DescriptionAndValidationProps, ErrorMessageProps };\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 { InputRoot, createInputScope, useInputContext, INPUT_NAME };\n\nexport type { Valence, InputRootProps, InputScopedProps };\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;IACAM,KAAKV;EACP,CAAA;AAGN,CAAA;;;ACxBF,OAAOW,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;IACAK,KAAKT;EACP,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", "ref", "React", "forwardRef", "TextArea", "forwardRef", "__inputScope", "props", "forwardedRef", "id", "validationValence", "descriptionId", "errorMessageId", "useInputContext", "INPUT_NAME", "React", "textarea", "ref"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/primitives/react-input/src/Root.tsx":{"bytes":4897,"imports":[{"path":"@preact-signals/safe-react/tracking","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}],"format":"esm"},"packages/ui/primitives/react-input/src/InputMeta.tsx":{"bytes":10829,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"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":"packages/ui/primitives/react-input/src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"packages/ui/primitives/react-input/src/PinInput.tsx":{"bytes":7337,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"rci","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/ui/primitives/react-input/src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"packages/ui/primitives/react-input/src/TextInput.tsx":{"bytes":3432,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/primitives/react-input/src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"packages/ui/primitives/react-input/src/TextArea.tsx":{"bytes":3197,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/primitives/react-input/src/Root.tsx","kind":"import-statement","original":"./Root"}],"format":"esm"},"packages/ui/primitives/react-input/src/index.ts":{"bytes":824,"imports":[{"path":"packages/ui/primitives/react-input/src/InputMeta.tsx","kind":"import-statement","original":"./InputMeta"},{"path":"packages/ui/primitives/react-input/src/Root.tsx","kind":"import-statement","original":"./Root"},{"path":"packages/ui/primitives/react-input/src/PinInput.tsx","kind":"import-statement","original":"./PinInput"},{"path":"packages/ui/primitives/react-input/src/TextInput.tsx","kind":"import-statement","original":"./TextInput"},{"path":"packages/ui/primitives/react-input/src/TextArea.tsx","kind":"import-statement","original":"./TextArea"}],"format":"esm"}},"outputs":{"packages/ui/primitives/react-input/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15059},"packages/ui/primitives/react-input/dist/lib/node-esm/index.mjs":{"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"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":"@preact-signals/safe-react/tracking","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":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"rci","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Description","DescriptionAndValidation","ErrorMessage","INPUT_NAME","InputRoot","Label","PinInput","Root","TextArea","TextInput","Validation","createInputScope","useInputContext"],"entryPoint":"packages/ui/primitives/react-input/src/index.ts","inputs":{"packages/ui/primitives/react-input/src/InputMeta.tsx":{"bytesInOutput":2831},"packages/ui/primitives/react-input/src/Root.tsx":{"bytesInOutput":1050},"packages/ui/primitives/react-input/src/index.ts":{"bytesInOutput":0},"packages/ui/primitives/react-input/src/PinInput.tsx":{"bytesInOutput":1658},"packages/ui/primitives/react-input/src/TextInput.tsx":{"bytesInOutput":789},"packages/ui/primitives/react-input/src/TextArea.tsx":{"bytesInOutput":713}},"bytes":7720}}}
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":3107,"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":2873,"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/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23682},"dist/lib/node-esm/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":610},"src/TextArea.tsx":{"bytesInOutput":534}},"bytes":9969}}}
@@ -1,14 +1,9 @@
1
- import { CodeInput } from 'rci';
2
1
  import React, { type ComponentPropsWithRef } from 'react';
3
- import { type Valence } from './Root';
4
- type PinInputProps = Omit<ComponentPropsWithRef<typeof CodeInput>, 'id' | 'className' | 'inputRef' | 'renderSegment'> & {
5
- inputClassName?: string;
6
- segmentClassName?: (styleProps: {
7
- focused: boolean;
8
- validationValence: Valence;
9
- }) => string;
10
- segmentPadding?: string;
11
- segmentHeight?: string;
2
+ type PinInputProps = Omit<ComponentPropsWithRef<'input'>, 'type' | 'maxLength'> & {
3
+ /** Class name applied to each segment div. */
4
+ segmentClassName?: string;
5
+ /** Number of code segments. */
6
+ length?: number;
12
7
  };
13
8
  declare const PinInput: React.ForwardRefExoticComponent<Omit<PinInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
14
9
  export { PinInput };