panelui-native 0.53.0 → 0.56.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/README.md +4 -1
- package/lib/module/components/combobox/index.js +61 -7
- package/lib/module/components/combobox/index.js.map +1 -1
- package/lib/module/components/hex-chart/index.js +765 -0
- package/lib/module/components/hex-chart/index.js.map +1 -0
- package/lib/module/components/sortable/index.js +74 -12
- package/lib/module/components/sortable/index.js.map +1 -1
- package/lib/module/components/steps/index.js +95 -12
- package/lib/module/components/steps/index.js.map +1 -1
- package/lib/module/components/tag-input/index.js +435 -0
- package/lib/module/components/tag-input/index.js.map +1 -0
- package/lib/module/components/tour/index.js +661 -0
- package/lib/module/components/tour/index.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/chart.js +209 -0
- package/lib/module/utils/chart.js.map +1 -1
- package/lib/typescript/src/components/combobox/index.d.ts.map +1 -1
- package/lib/typescript/src/components/hex-chart/index.d.ts +277 -0
- package/lib/typescript/src/components/hex-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/sortable/index.d.ts.map +1 -1
- package/lib/typescript/src/components/steps/index.d.ts +19 -0
- package/lib/typescript/src/components/steps/index.d.ts.map +1 -1
- package/lib/typescript/src/components/tag-input/index.d.ts +240 -0
- package/lib/typescript/src/components/tag-input/index.d.ts.map +1 -0
- package/lib/typescript/src/components/tour/index.d.ts +168 -0
- package/lib/typescript/src/components/tour/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/chart.d.ts +98 -0
- package/lib/typescript/src/utils/chart.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/combobox/index.tsx +65 -12
- package/src/components/hex-chart/index.tsx +1009 -0
- package/src/components/sortable/index.tsx +72 -16
- package/src/components/steps/index.tsx +103 -8
- package/src/components/tag-input/index.tsx +619 -0
- package/src/components/tour/index.tsx +933 -0
- package/src/index.ts +30 -0
- package/src/utils/chart.ts +236 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TagInput — a field whose value is a list of tokens rather than a string.
|
|
5
|
+
*
|
|
6
|
+
* The value is whatever gets typed. That is the whole distinction from a
|
|
7
|
+
* `Combobox` in `multiple` mode: a Combobox picks from a set of options you
|
|
8
|
+
* supply, so it needs a list, a filter and a surface to float that list on. A
|
|
9
|
+
* tag field has no options and no list — labels on a task, recipients on a
|
|
10
|
+
* message, keywords on a post — so it carries none of that machinery and never
|
|
11
|
+
* opens a portal.
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <TagInput
|
|
15
|
+
* label="Topics"
|
|
16
|
+
* defaultValue={['expo', 'reanimated']}
|
|
17
|
+
* placeholder="Add a topic"
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* ## Three ways a tag gets committed
|
|
22
|
+
*
|
|
23
|
+
* Return commits what has been typed. So does any of `delimiters` — a comma by
|
|
24
|
+
* default — which is what makes pasting `design, research, ops` land as three
|
|
25
|
+
* tags instead of one long one. And `blurBehavior` decides what a field that
|
|
26
|
+
* loses focus mid-word does with the leftover.
|
|
27
|
+
*
|
|
28
|
+
* ## Backspace asks first
|
|
29
|
+
*
|
|
30
|
+
* Backspace on an empty field marks the last tag rather than taking it: the
|
|
31
|
+
* tag turns destructive, and a second backspace removes it. A held backspace
|
|
32
|
+
* repeats, and a field that deleted on the first one would empty itself in the
|
|
33
|
+
* time it takes to notice — the mark is the beat that lets you stop.
|
|
34
|
+
*/
|
|
35
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
36
|
+
import { Pressable, TextInput, View } from 'react-native';
|
|
37
|
+
import Animated, { FadeIn, FadeOut, LinearTransition, interpolateColor, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
38
|
+
import { tv } from 'tailwind-variants';
|
|
39
|
+
import { useCSSVariable } from 'uniwind';
|
|
40
|
+
import { XIcon } from "../../icons/index.js";
|
|
41
|
+
import { Text } from "../../primitives/text.js";
|
|
42
|
+
import { selectionTick } from "../../utils/haptics.js";
|
|
43
|
+
import { Chip } from "../chip/index.js";
|
|
44
|
+
import { Label } from "../label/index.js";
|
|
45
|
+
|
|
46
|
+
/** Matches Input and Combobox, so the three read as the same control focused. */
|
|
47
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
48
|
+
const FOCUS_DURATION = 150;
|
|
49
|
+
/** Long enough to see a tag arrive or leave, short enough not to queue up. */
|
|
50
|
+
const ENTER_DURATION = 140;
|
|
51
|
+
const EXIT_DURATION = 120;
|
|
52
|
+
const REFLOW_DURATION = 180;
|
|
53
|
+
const tagInputVariants = tv({
|
|
54
|
+
slots: {
|
|
55
|
+
container: 'w-full gap-1.5',
|
|
56
|
+
/*
|
|
57
|
+
* The border colour is animated between the resting and focused tokens, so
|
|
58
|
+
* it is deliberately absent from the class. `flex-wrap` is the load-bearing
|
|
59
|
+
* part: a tag field grows down, because the alternative is a row that
|
|
60
|
+
* scrolls sideways and hides the tags you just added.
|
|
61
|
+
*/
|
|
62
|
+
field: 'w-full flex-row flex-wrap items-center rounded-lg border',
|
|
63
|
+
/*
|
|
64
|
+
* A length rather than a `text-*` step, for the reason Input gives: a step
|
|
65
|
+
* sets a size and a line height together, and the extra leading lands above
|
|
66
|
+
* the glyphs, so in a box of fixed height the text sits below the tags it
|
|
67
|
+
* is supposed to be level with.
|
|
68
|
+
*/
|
|
69
|
+
input: 'min-w-24 flex-1 py-0 font-normal text-foreground',
|
|
70
|
+
clear: 'items-center justify-center rounded-full',
|
|
71
|
+
description: 'text-sm text-muted-foreground',
|
|
72
|
+
error: 'text-sm text-destructive',
|
|
73
|
+
count: 'text-xs text-muted-foreground'
|
|
74
|
+
},
|
|
75
|
+
variants: {
|
|
76
|
+
variant: {
|
|
77
|
+
outline: {
|
|
78
|
+
field: 'bg-background'
|
|
79
|
+
},
|
|
80
|
+
filled: {
|
|
81
|
+
field: 'bg-muted'
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
size: {
|
|
85
|
+
sm: {
|
|
86
|
+
field: 'gap-1 px-2.5 py-1.5',
|
|
87
|
+
input: 'h-7 text-[14px]',
|
|
88
|
+
clear: 'h-5 w-5'
|
|
89
|
+
},
|
|
90
|
+
md: {
|
|
91
|
+
field: 'gap-1.5 px-3 py-2',
|
|
92
|
+
input: 'h-8 text-[16px]',
|
|
93
|
+
clear: 'h-6 w-6'
|
|
94
|
+
},
|
|
95
|
+
lg: {
|
|
96
|
+
field: 'gap-2 px-3.5 py-2.5',
|
|
97
|
+
input: 'h-10 text-[16px]',
|
|
98
|
+
clear: 'h-7 w-7'
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
disabled: {
|
|
102
|
+
true: {
|
|
103
|
+
field: 'opacity-[0.64]'
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
defaultVariants: {
|
|
108
|
+
variant: 'outline',
|
|
109
|
+
size: 'md'
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
/** A tag sits inside the field, so it is a step smaller than the field is. */
|
|
113
|
+
const CHIP_SIZE = {
|
|
114
|
+
sm: 'sm',
|
|
115
|
+
md: 'sm',
|
|
116
|
+
lg: 'md'
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/** Why a tag was turned away, for a caller that wants to say so. */
|
|
120
|
+
|
|
121
|
+
/** What a field that loses focus mid-word does with the leftover text. */
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Splitting without a regex, so a delimiter never has to be escaped — `.` and
|
|
125
|
+
* `|` are ordinary characters to someone listing the separators they use.
|
|
126
|
+
*/
|
|
127
|
+
function splitOn(text, delimiters) {
|
|
128
|
+
let parts = [text];
|
|
129
|
+
for (const delimiter of delimiters) {
|
|
130
|
+
if (!delimiter) continue;
|
|
131
|
+
parts = parts.flatMap(part => part.split(delimiter));
|
|
132
|
+
}
|
|
133
|
+
return parts;
|
|
134
|
+
}
|
|
135
|
+
export const TagInput = /*#__PURE__*/forwardRef(({
|
|
136
|
+
className,
|
|
137
|
+
containerClassName,
|
|
138
|
+
value,
|
|
139
|
+
defaultValue,
|
|
140
|
+
onValueChange,
|
|
141
|
+
inputValue,
|
|
142
|
+
onInputValueChange,
|
|
143
|
+
label,
|
|
144
|
+
description,
|
|
145
|
+
errorMessage,
|
|
146
|
+
isRequired,
|
|
147
|
+
disabled = false,
|
|
148
|
+
readOnly = false,
|
|
149
|
+
max,
|
|
150
|
+
allowOverflow = false,
|
|
151
|
+
allowDuplicates = false,
|
|
152
|
+
delimiters = [','],
|
|
153
|
+
blurBehavior = 'add',
|
|
154
|
+
validate,
|
|
155
|
+
onReject,
|
|
156
|
+
chipVariant = 'default',
|
|
157
|
+
renderTag,
|
|
158
|
+
clearable = false,
|
|
159
|
+
showCount = false,
|
|
160
|
+
haptics = false,
|
|
161
|
+
variant,
|
|
162
|
+
size = 'md',
|
|
163
|
+
placeholder,
|
|
164
|
+
onFocus,
|
|
165
|
+
onBlur,
|
|
166
|
+
onKeyPress,
|
|
167
|
+
onSubmitEditing,
|
|
168
|
+
accessibilityLabel,
|
|
169
|
+
...props
|
|
170
|
+
}, ref) => {
|
|
171
|
+
const inputRef = useRef(null);
|
|
172
|
+
useImperativeHandle(ref, () => inputRef.current);
|
|
173
|
+
const [ownTags, setOwnTags] = useState(defaultValue ?? []);
|
|
174
|
+
const tags = value ?? ownTags;
|
|
175
|
+
const [ownText, setOwnText] = useState('');
|
|
176
|
+
const text = inputValue ?? ownText;
|
|
177
|
+
const [focused, setFocused] = useState(false);
|
|
178
|
+
/*
|
|
179
|
+
* Which tag a second backspace would take. An index rather than the tag
|
|
180
|
+
* itself, because with `allowDuplicates` two tags can read the same and
|
|
181
|
+
* marking "the last one" has to mean the last one.
|
|
182
|
+
*/
|
|
183
|
+
const [marked, setMarked] = useState(null);
|
|
184
|
+
const overflowing = max !== undefined && tags.length > max;
|
|
185
|
+
const invalid = !!errorMessage || overflowing;
|
|
186
|
+
const interactive = !disabled && !readOnly;
|
|
187
|
+
|
|
188
|
+
// The list can be emptied from outside, which would leave the mark pointing
|
|
189
|
+
// past the end of it — and a stale mark is a tag deleted by a backspace
|
|
190
|
+
// meant for the one that used to be there.
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (marked !== null && marked >= tags.length) setMarked(null);
|
|
193
|
+
}, [marked, tags.length]);
|
|
194
|
+
const setText = useCallback(next => {
|
|
195
|
+
if (inputValue === undefined) setOwnText(next);
|
|
196
|
+
onInputValueChange?.(next);
|
|
197
|
+
}, [inputValue, onInputValueChange]);
|
|
198
|
+
const commit = useCallback(next => {
|
|
199
|
+
if (value === undefined) setOwnTags(next);
|
|
200
|
+
onValueChange?.(next);
|
|
201
|
+
}, [value, onValueChange]);
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Adds every candidate that survives the rules, in order, and reports the
|
|
205
|
+
* ones that do not. Returns whether anything was actually taken, which is
|
|
206
|
+
* what tells the caller whether the draft text has been consumed.
|
|
207
|
+
*/
|
|
208
|
+
const addTags = useCallback(candidates => {
|
|
209
|
+
const incoming = candidates.map(entry => entry.trim()).filter(entry => entry.length > 0);
|
|
210
|
+
if (incoming.length === 0) return false;
|
|
211
|
+
const next = [...tags];
|
|
212
|
+
let added = false;
|
|
213
|
+
for (const tag of incoming) {
|
|
214
|
+
if (!allowDuplicates && next.includes(tag)) {
|
|
215
|
+
onReject?.(tag, 'duplicate');
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (max !== undefined && next.length >= max && !allowOverflow) {
|
|
219
|
+
onReject?.(tag, 'max');
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (validate && !validate(tag, next)) {
|
|
223
|
+
onReject?.(tag, 'invalid');
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
next.push(tag);
|
|
227
|
+
added = true;
|
|
228
|
+
}
|
|
229
|
+
if (!added) return false;
|
|
230
|
+
if (haptics) selectionTick();
|
|
231
|
+
commit(next);
|
|
232
|
+
return true;
|
|
233
|
+
}, [tags, allowDuplicates, max, allowOverflow, validate, onReject, haptics, commit]);
|
|
234
|
+
const removeAt = useCallback(index => {
|
|
235
|
+
if (index < 0 || index >= tags.length) return;
|
|
236
|
+
if (haptics) selectionTick();
|
|
237
|
+
commit(tags.filter((_, position) => position !== index));
|
|
238
|
+
}, [tags, haptics, commit]);
|
|
239
|
+
const handleChangeText = useCallback(next => {
|
|
240
|
+
// Any typing at all takes the mark off: the backspace that would have
|
|
241
|
+
// removed a tag has been overtaken by a new word.
|
|
242
|
+
setMarked(null);
|
|
243
|
+
if (delimiters.length > 0 && delimiters.some(entry => next.includes(entry))) {
|
|
244
|
+
const parts = splitOn(next, delimiters);
|
|
245
|
+
// The last piece is what comes *after* the final delimiter — still
|
|
246
|
+
// being typed, so it stays in the field rather than becoming a tag.
|
|
247
|
+
const trailing = parts.pop() ?? '';
|
|
248
|
+
addTags(parts);
|
|
249
|
+
setText(trailing);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
setText(next);
|
|
253
|
+
}, [delimiters, addTags, setText]);
|
|
254
|
+
const handleSubmit = useCallback(event => {
|
|
255
|
+
if (addTags([text])) setText('');
|
|
256
|
+
onSubmitEditing?.(event);
|
|
257
|
+
}, [addTags, text, setText, onSubmitEditing]);
|
|
258
|
+
const handleKeyPress = useCallback(event => {
|
|
259
|
+
onKeyPress?.(event);
|
|
260
|
+
if (event.nativeEvent.key !== 'Backspace') {
|
|
261
|
+
setMarked(null);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// There is still a character in front of the cursor: backspace means
|
|
265
|
+
// what it always means, and the tags are none of its business.
|
|
266
|
+
if (text.length > 0 || tags.length === 0) return;
|
|
267
|
+
if (marked !== null && marked < tags.length) {
|
|
268
|
+
removeAt(marked);
|
|
269
|
+
setMarked(null);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
setMarked(tags.length - 1);
|
|
273
|
+
}, [onKeyPress, text.length, tags.length, marked, removeAt]);
|
|
274
|
+
const handleFocus = useCallback(event => {
|
|
275
|
+
setFocused(true);
|
|
276
|
+
onFocus?.(event);
|
|
277
|
+
}, [onFocus]);
|
|
278
|
+
const handleBlur = useCallback(event => {
|
|
279
|
+
setFocused(false);
|
|
280
|
+
setMarked(null);
|
|
281
|
+
if (blurBehavior === 'clear') {
|
|
282
|
+
setText('');
|
|
283
|
+
} else if (blurBehavior === 'add') {
|
|
284
|
+
// Only cleared when it was taken. Text that was refused stays in the
|
|
285
|
+
// field, because a word that vanishes on blur looks like it was
|
|
286
|
+
// accepted and a rejected tag has to remain visible to be fixed.
|
|
287
|
+
if (addTags([text])) setText('');
|
|
288
|
+
}
|
|
289
|
+
onBlur?.(event);
|
|
290
|
+
}, [blurBehavior, setText, addTags, text, onBlur]);
|
|
291
|
+
const focusField = useCallback(() => {
|
|
292
|
+
inputRef.current?.focus();
|
|
293
|
+
}, []);
|
|
294
|
+
const clear = useCallback(() => {
|
|
295
|
+
setText('');
|
|
296
|
+
setMarked(null);
|
|
297
|
+
commit([]);
|
|
298
|
+
inputRef.current?.focus();
|
|
299
|
+
}, [setText, commit]);
|
|
300
|
+
const slots = tagInputVariants({
|
|
301
|
+
variant,
|
|
302
|
+
size,
|
|
303
|
+
disabled
|
|
304
|
+
});
|
|
305
|
+
const placeholderColor = useCSSVariable('--color-muted-foreground');
|
|
306
|
+
const restColor = useCSSVariable('--color-input');
|
|
307
|
+
const focusColor = useCSSVariable('--color-ring');
|
|
308
|
+
const errorColor = useCSSVariable('--color-destructive');
|
|
309
|
+
const mutedColor = typeof placeholderColor === 'string' ? placeholderColor : '#737373';
|
|
310
|
+
|
|
311
|
+
/*
|
|
312
|
+
* One 0..1 value rather than a class per state: Uniwind can only swap a
|
|
313
|
+
* class wholesale, which is the snap this is here to avoid, and a shared
|
|
314
|
+
* value crosses between the two colours on the UI thread without a
|
|
315
|
+
* re-render for every frame of it.
|
|
316
|
+
*/
|
|
317
|
+
const focus = useSharedValue(0);
|
|
318
|
+
useEffect(() => {
|
|
319
|
+
focus.value = withTiming(focused ? 1 : 0, {
|
|
320
|
+
duration: FOCUS_DURATION
|
|
321
|
+
});
|
|
322
|
+
}, [focused, focus]);
|
|
323
|
+
const resting = typeof restColor === 'string' ? restColor : '#e5e5e5';
|
|
324
|
+
const active = invalid ? typeof errorColor === 'string' ? errorColor : '#ef4444' : typeof focusColor === 'string' ? focusColor : '#a3a3a3';
|
|
325
|
+
// An invalid field is tinted at rest too — the error is a fact about the
|
|
326
|
+
// value, not about whether the field happens to be focused.
|
|
327
|
+
const idle = invalid ? active : resting;
|
|
328
|
+
const borderStyle = useAnimatedStyle(() => ({
|
|
329
|
+
borderColor: interpolateColor(focus.value, [0, 1], [idle, active])
|
|
330
|
+
}));
|
|
331
|
+
const hasContent = tags.length > 0 || text.length > 0;
|
|
332
|
+
const fieldLabel = accessibilityLabel ?? label ?? placeholder;
|
|
333
|
+
const countLine = useMemo(() => {
|
|
334
|
+
if (!showCount || max === undefined) return null;
|
|
335
|
+
return `${tags.length} / ${max}`;
|
|
336
|
+
}, [showCount, max, tags.length]);
|
|
337
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
338
|
+
className: slots.container({
|
|
339
|
+
className: containerClassName
|
|
340
|
+
}),
|
|
341
|
+
children: [label ? /*#__PURE__*/_jsx(Label, {
|
|
342
|
+
isRequired: isRequired,
|
|
343
|
+
isInvalid: invalid,
|
|
344
|
+
isDisabled: disabled,
|
|
345
|
+
children: label
|
|
346
|
+
}) : null, /*#__PURE__*/_jsx(Pressable, {
|
|
347
|
+
onPress: focusField,
|
|
348
|
+
disabled: !interactive
|
|
349
|
+
// The box is a way to reach the input, not a control of its own — the
|
|
350
|
+
// input below it already carries the label and the state.
|
|
351
|
+
,
|
|
352
|
+
accessible: false,
|
|
353
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
354
|
+
style: borderStyle,
|
|
355
|
+
className: slots.field({
|
|
356
|
+
className
|
|
357
|
+
}),
|
|
358
|
+
children: [tags.map((tag, index) => /*#__PURE__*/_jsx(Animated.View, {
|
|
359
|
+
entering: FadeIn.duration(ENTER_DURATION),
|
|
360
|
+
exiting: FadeOut.duration(EXIT_DURATION),
|
|
361
|
+
layout: LinearTransition.duration(REFLOW_DURATION),
|
|
362
|
+
children: renderTag ? renderTag(tag, index) : /*#__PURE__*/_jsx(Chip, {
|
|
363
|
+
size: CHIP_SIZE[size]
|
|
364
|
+
// The marked tag turns destructive rather than growing an
|
|
365
|
+
// outline: it is about to be deleted, and that is the one
|
|
366
|
+
// colour in the theme that already means exactly that.
|
|
367
|
+
,
|
|
368
|
+
variant: marked === index ? 'destructive' : chipVariant,
|
|
369
|
+
onClose: interactive ? () => removeAt(index) : undefined,
|
|
370
|
+
closeLabel: `Remove ${tag}`,
|
|
371
|
+
haptics: haptics,
|
|
372
|
+
children: tag
|
|
373
|
+
})
|
|
374
|
+
}, `${tag}-${index}`)), readOnly ? null : /*#__PURE__*/_jsx(TextInput, {
|
|
375
|
+
ref: inputRef,
|
|
376
|
+
value: text,
|
|
377
|
+
onChangeText: handleChangeText,
|
|
378
|
+
onFocus: handleFocus,
|
|
379
|
+
onBlur: handleBlur,
|
|
380
|
+
onKeyPress: handleKeyPress,
|
|
381
|
+
onSubmitEditing: handleSubmit,
|
|
382
|
+
editable: !disabled
|
|
383
|
+
// Return commits a tag and the field stays open for the next
|
|
384
|
+
// one — dismissing the keyboard after every tag would make
|
|
385
|
+
// adding three of them three separate visits to the field.
|
|
386
|
+
,
|
|
387
|
+
submitBehavior: "submit",
|
|
388
|
+
returnKeyType: "done"
|
|
389
|
+
// Android lays a single-line input's text against the top of
|
|
390
|
+
// its box unless told otherwise; iOS centres it. Without this
|
|
391
|
+
// the text sits above the tags on one platform and level with
|
|
392
|
+
// them on the other.
|
|
393
|
+
,
|
|
394
|
+
textAlignVertical: "center",
|
|
395
|
+
placeholder: tags.length > 0 ? undefined : placeholder,
|
|
396
|
+
placeholderTextColor: mutedColor,
|
|
397
|
+
autoCapitalize: "none",
|
|
398
|
+
autoCorrect: false,
|
|
399
|
+
autoComplete: "off",
|
|
400
|
+
accessibilityLabel: fieldLabel,
|
|
401
|
+
accessibilityState: {
|
|
402
|
+
disabled
|
|
403
|
+
},
|
|
404
|
+
"aria-required": isRequired,
|
|
405
|
+
"aria-invalid": invalid,
|
|
406
|
+
className: slots.input(),
|
|
407
|
+
...props
|
|
408
|
+
}), clearable && hasContent && interactive ? /*#__PURE__*/_jsx(Pressable, {
|
|
409
|
+
accessibilityRole: "button",
|
|
410
|
+
accessibilityLabel: "Clear all tags",
|
|
411
|
+
hitSlop: 8,
|
|
412
|
+
onPress: clear,
|
|
413
|
+
className: slots.clear(),
|
|
414
|
+
children: /*#__PURE__*/_jsx(XIcon, {
|
|
415
|
+
size: 16,
|
|
416
|
+
color: mutedColor
|
|
417
|
+
})
|
|
418
|
+
}) : null]
|
|
419
|
+
})
|
|
420
|
+
}), errorMessage ? /*#__PURE__*/_jsx(Text, {
|
|
421
|
+
className: slots.error(),
|
|
422
|
+
children: errorMessage
|
|
423
|
+
}) : description ? /*#__PURE__*/_jsx(Text, {
|
|
424
|
+
className: slots.description(),
|
|
425
|
+
children: description
|
|
426
|
+
}) : null, countLine ? /*#__PURE__*/_jsx(Text, {
|
|
427
|
+
className: slots.count({
|
|
428
|
+
className: overflowing ? 'text-destructive' : undefined
|
|
429
|
+
}),
|
|
430
|
+
children: countLine
|
|
431
|
+
}) : null]
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
TagInput.displayName = 'TagInput';
|
|
435
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","Pressable","TextInput","View","Animated","FadeIn","FadeOut","LinearTransition","interpolateColor","useAnimatedStyle","useSharedValue","withTiming","tv","useCSSVariable","XIcon","Text","selectionTick","Chip","Label","jsx","_jsx","jsxs","_jsxs","FOCUS_DURATION","ENTER_DURATION","EXIT_DURATION","REFLOW_DURATION","tagInputVariants","slots","container","field","input","clear","description","error","count","variants","variant","outline","filled","size","sm","md","lg","disabled","true","defaultVariants","CHIP_SIZE","splitOn","text","delimiters","parts","delimiter","flatMap","part","split","TagInput","className","containerClassName","value","defaultValue","onValueChange","inputValue","onInputValueChange","label","errorMessage","isRequired","readOnly","max","allowOverflow","allowDuplicates","blurBehavior","validate","onReject","chipVariant","renderTag","clearable","showCount","haptics","placeholder","onFocus","onBlur","onKeyPress","onSubmitEditing","accessibilityLabel","props","ref","inputRef","current","ownTags","setOwnTags","tags","ownText","setOwnText","focused","setFocused","marked","setMarked","overflowing","undefined","length","invalid","interactive","setText","next","commit","addTags","candidates","incoming","map","entry","trim","filter","added","tag","includes","push","removeAt","index","_","position","handleChangeText","some","trailing","pop","handleSubmit","event","handleKeyPress","nativeEvent","key","handleFocus","handleBlur","focusField","focus","placeholderColor","restColor","focusColor","errorColor","mutedColor","duration","resting","active","idle","borderStyle","borderColor","hasContent","fieldLabel","countLine","children","isInvalid","isDisabled","onPress","accessible","style","entering","exiting","layout","onClose","closeLabel","onChangeText","editable","submitBehavior","returnKeyType","textAlignVertical","placeholderTextColor","autoCapitalize","autoCorrect","autoComplete","accessibilityState","accessibilityRole","hitSlop","color","displayName"],"sourceRoot":"../../../../src","sources":["components/tag-input/index.tsx"],"mappings":"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","ignoreList":[]}
|