@xaui/native 0.9.1-alpha.24 → 0.9.1-alpha.26

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.
Files changed (45) hide show
  1. package/dist/chunk-3LKGVKQY.cjs +145 -0
  2. package/dist/chunk-5OXZIZRZ.cjs +72 -0
  3. package/dist/{chunk-LIQTGAI7.cjs → chunk-BULNTP5N.cjs} +6 -7
  4. package/dist/{chunk-J4QE34AU.js → chunk-I6UCYAO2.js} +20 -21
  5. package/dist/{chunk-P2XA4DV7.cjs → chunk-JCKVYYZO.cjs} +86 -14
  6. package/dist/{chunk-GBPWTFTU.cjs → chunk-OHEHPQLC.cjs} +10 -1
  7. package/dist/{chunk-MRYLLKML.js → chunk-PQHC65AG.js} +15 -15
  8. package/dist/chunk-TR2TGPDQ.js +72 -0
  9. package/dist/{chunk-GG2WWCBK.js → chunk-TZG3DERP.js} +10 -1
  10. package/dist/{chunk-6RO26ORT.js → chunk-V2FQN6ZK.js} +85 -13
  11. package/dist/chunk-WEMZ4VMC.js +145 -0
  12. package/dist/{chunk-EWBBDVTM.cjs → chunk-WVCAFORA.cjs} +15 -15
  13. package/dist/components/alert/index.cjs +1 -1
  14. package/dist/components/alert/index.js +1 -1
  15. package/dist/components/button/index.cjs +3 -3
  16. package/dist/components/button/index.js +2 -2
  17. package/dist/components/chip/index.cjs +3 -3
  18. package/dist/components/chip/index.js +2 -2
  19. package/dist/components/input/index.cjs +12 -2
  20. package/dist/components/input/index.d.cts +109 -117
  21. package/dist/components/input/index.d.ts +109 -117
  22. package/dist/components/input/index.js +11 -1
  23. package/dist/components/input-group/index.cjs +26 -0
  24. package/dist/components/input-group/index.d.cts +270 -0
  25. package/dist/components/input-group/index.d.ts +270 -0
  26. package/dist/components/input-group/index.js +26 -0
  27. package/dist/components/input-otp/index.cjs +2 -2
  28. package/dist/components/input-otp/index.js +1 -1
  29. package/dist/components/text-area/index.cjs +13 -0
  30. package/dist/components/text-area/index.d.cts +73 -0
  31. package/dist/components/text-area/index.d.ts +73 -0
  32. package/dist/components/text-area/index.js +13 -0
  33. package/dist/index.cjs +44 -10
  34. package/dist/index.d.cts +4 -1
  35. package/dist/index.d.ts +4 -1
  36. package/dist/index.js +49 -15
  37. package/dist/input.type-BUMDlzL9.d.cts +167 -0
  38. package/dist/input.type-D2qgi03E.d.ts +167 -0
  39. package/dist/system/index.cjs +2 -2
  40. package/dist/system/index.js +5 -5
  41. package/dist/theme/index.cjs +2 -2
  42. package/dist/theme/index.js +1 -1
  43. package/package.json +21 -1
  44. package/dist/{chunk-4J26FA6O.js → chunk-3WISQT22.js} +3 -3
  45. package/dist/{chunk-AV5LMFS3.cjs → chunk-I7G77Q65.cjs} +2 -2
@@ -0,0 +1,270 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import * as react_native from 'react-native';
4
+ import { StyleProp, ViewStyle, ViewProps, View, TextInput } from 'react-native';
5
+ import { V as ViewStyleProps, T as TextStyleProps } from '../../style-props.type-CfnoGEP7.cjs';
6
+ import { b as IconProps } from '../../icon.type-CF4KiMKl.cjs';
7
+ import { I as InputFieldProps } from '../../input.type-BUMDlzL9.cjs';
8
+ import '../../theme.type-C2gNHpEx.cjs';
9
+
10
+ type InputGroupOwnProps = {
11
+ style?: StyleProp<ViewStyle>;
12
+ children?: ReactNode;
13
+ };
14
+ /**
15
+ * R14 — the wrapper `View`'s own props, plus every `ViewStyle` key it does not claim.
16
+ *
17
+ * **There is no `variant`, no `size`, no `color` and no `isDisabled` here.** They are the
18
+ * `Input`'s, and an `InputGroup` is one row inside it: a second `size` on this root would
19
+ * be a second answer to a question the field has already answered.
20
+ */
21
+ type InputGroupProps = InputGroupOwnProps & Omit<ViewProps, keyof InputGroupOwnProps> & Omit<ViewStyleProps, keyof InputGroupOwnProps | keyof ViewProps> & {
22
+ /** R12 — merge into the single child instead of rendering a `View`. */
23
+ asChild?: boolean;
24
+ };
25
+ type InputGroupDecoratorOwnProps = {
26
+ /**
27
+ * The decorator stops taking touches and disappears from the accessibility tree, so a
28
+ * tap on the glyph focuses the field under it and a screen reader announces the field
29
+ * rather than a mark it cannot act on.
30
+ *
31
+ * Leave it off whenever the decorator holds something to press — a reveal toggle, a
32
+ * clear button — which is the whole reason it is a prop and not the default.
33
+ *
34
+ * @default false
35
+ */
36
+ isDecorative?: boolean;
37
+ style?: StyleProp<ViewStyle>;
38
+ children?: ReactNode;
39
+ };
40
+ type InputGroupDecoratorProps = InputGroupDecoratorOwnProps & Omit<ViewProps, keyof InputGroupDecoratorOwnProps> & Omit<ViewStyleProps, keyof InputGroupDecoratorOwnProps | keyof ViewProps>;
41
+ type InputGroupPrefixProps = InputGroupDecoratorProps;
42
+ type InputGroupSuffixProps = InputGroupDecoratorProps;
43
+ /** Which edge a decorator is pinned to, and therefore which width it reports. */
44
+ type InputGroupSide = 'prefix' | 'suffix';
45
+ /**
46
+ * Everything `Input.Field` accepts. It **is** that field — the same `TextInput`, the same
47
+ * focus plumbing, the same styles — with the padding the two decorators measured.
48
+ */
49
+ type InputGroupFieldProps = InputFieldProps;
50
+ /** Everything `Icon` accepts. `size` and `color` fall back to the field's own. */
51
+ type InputGroupIconProps = IconProps;
52
+ /**
53
+ * R5 — but the only thing here that is not already resolved on the `Input`'s context: two
54
+ * widths nobody can know before layout.
55
+ *
56
+ * A decorator is out of flow, so it cannot push the text aside the way a sibling in a row
57
+ * would; the field clears it by padding instead, and the padding is the decorator's own
58
+ * measured width. That is the same shape `TextArea` uses for `rows` — a raw number the
59
+ * slot turns into a style, outside the cache.
60
+ */
61
+ type InputGroupContextValue = {
62
+ /** `0` while the decorator is absent, and until its first layout. */
63
+ prefixWidth: number;
64
+ suffixWidth: number;
65
+ setPrefixWidth: (width: number) => void;
66
+ setSuffixWidth: (width: number) => void;
67
+ };
68
+
69
+ /**
70
+ * A glyph that takes the field's scale and the placeholder's colour without being told
71
+ * either:
72
+ *
73
+ * ```tsx
74
+ * <InputGroup.Prefix isDecorative>
75
+ * <InputGroup.Icon as={MailIcon} />
76
+ * </InputGroup.Prefix>
77
+ * ```
78
+ *
79
+ * The size comes from the `Input`'s own `size` — one step above the field's type, as on
80
+ * the `Button` and the `Chip`, because a 16pt glyph beside 16pt of text reads as the
81
+ * smaller of the two. The colour is the theme's `fieldPlaceholder`: a mark in a field is
82
+ * decoration for the text, not text. An explicit `size` or `color` still wins, which is
83
+ * what `Icon` promises everywhere else in the library — and it is the answer for a tinted
84
+ * `primary` field, where the fill is the caller's colour and the placeholder grey is no
85
+ * longer readable over it.
86
+ *
87
+ * It is not one of HeroUI's three parts: theirs colour the glyph at the call site. This is
88
+ * the same slot `Button`, `Chip` and `Alert` all have, and it exists so that a form does
89
+ * not carry a hard-coded `#888` on every field.
90
+ */
91
+ declare function InputGroupIcon({ size, color, ...rest }: InputGroupIconProps): react.JSX.Element;
92
+ declare namespace InputGroupIcon {
93
+ var displayName: string;
94
+ }
95
+
96
+ /**
97
+ * A field with something beside it — a glyph, a unit, a reveal toggle.
98
+ *
99
+ * ```tsx
100
+ * <Input>
101
+ * <Input.Label>Mot de passe</Input.Label>
102
+ * <InputGroup>
103
+ * <InputGroup.Prefix isDecorative>
104
+ * <InputGroup.Icon as={LockIcon} />
105
+ * </InputGroup.Prefix>
106
+ * <InputGroup.Field secureTextEntry value={password} onChangeText={setPassword} />
107
+ * <InputGroup.Suffix>
108
+ * <Pressable onPress={toggle} hitSlop={20}>
109
+ * <InputGroup.Icon as={EyeIcon} />
110
+ * </Pressable>
111
+ * </InputGroup.Suffix>
112
+ * </InputGroup>
113
+ * <Input.Description>Douze caractères au moins.</Input.Description>
114
+ * </Input>
115
+ * ```
116
+ *
117
+ * **It goes inside an `Input`, and it replaces nothing but the field.** The column, the
118
+ * label, the hint, the error, the four variants, the `size`, the `radius`, the tint, the
119
+ * focus and `isInvalid` are all still the `Input`'s — this root is one row of that column,
120
+ * and it owns exactly one thing: how wide the two decorators turned out to be.
121
+ *
122
+ * That is why the box is still the `TextInput` itself. A wrapper carrying the border, the
123
+ * fill and the radius would be a second thing to keep in step with `Input`, and the day
124
+ * one of them gained a shadow the other would not have it. The decorators are laid **over**
125
+ * the field instead, out of flow, and the field clears them with padding.
126
+ *
127
+ * It works under `TextArea` too — the same context, the same field — though a decorator
128
+ * centred over six lines of text is rarely what a multiline field wants.
129
+ */
130
+ declare const InputGroupRoot: react.ForwardRefExoticComponent<{
131
+ style?: react_native.StyleProp<react_native.ViewStyle>;
132
+ children?: react.ReactNode;
133
+ } & Omit<react_native.ViewProps, keyof {
134
+ style?: react_native.StyleProp<react_native.ViewStyle>;
135
+ children?: react.ReactNode;
136
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction"> & {
137
+ asChild?: boolean;
138
+ } & react.RefAttributes<View>>;
139
+
140
+ /**
141
+ * The `TextInput` itself — `Input.Field` with the room the two decorators need.
142
+ *
143
+ * ```tsx
144
+ * <InputGroup.Field value={query} onChangeText={setQuery} placeholder="Rechercher…" />
145
+ * ```
146
+ *
147
+ * It renders the `Input`'s field rather than a second `TextInput`, so the focus plumbing,
148
+ * the placeholder colour, the label association, `isInvalid` and `isDisabled` are the ones
149
+ * already written, and every `TextInput` prop is written here for the same reason it is
150
+ * there.
151
+ *
152
+ * The padding is arithmetic rather than a token, the way `TextArea`'s height is: a
153
+ * decorator's width is not knowable before layout, so it measures itself and this turns
154
+ * the two numbers into `paddingStart` and `paddingEnd`. They land **after** the recipe's
155
+ * own `paddingHorizontal`, which is what makes them win, and before the caller's `style`,
156
+ * which still has the last word.
157
+ */
158
+ declare const InputGroupField: react.ForwardRefExoticComponent<Omit<react_native.TextInputProps, "editable"> & Omit<TextStyleProps, keyof react_native.TextInputProps> & react.RefAttributes<TextInput>>;
159
+
160
+ /**
161
+ * What sits before the text — a search glyph, a currency, a country code.
162
+ *
163
+ * ```tsx
164
+ * <InputGroup>
165
+ * <InputGroup.Prefix isDecorative>
166
+ * <InputGroup.Icon as={SearchIcon} />
167
+ * </InputGroup.Prefix>
168
+ * <InputGroup.Field placeholder="Rechercher…" />
169
+ * </InputGroup>
170
+ * ```
171
+ *
172
+ * It is pinned to the **leading** edge and inset by the field's own padding, so the glyph
173
+ * starts where the text would have. The field then clears it by the width it measured —
174
+ * which is what lets a `+33` prefix and a 16pt mark both sit right, without either one
175
+ * being told a number.
176
+ *
177
+ * Add `isDecorative` whenever it holds nothing to press. Leave it off for a control.
178
+ */
179
+ declare const InputGroupPrefix: react.ForwardRefExoticComponent<{
180
+ isDecorative?: boolean;
181
+ style?: react_native.StyleProp<react_native.ViewStyle>;
182
+ children?: react.ReactNode;
183
+ } & Omit<react_native.ViewProps, keyof {
184
+ isDecorative?: boolean;
185
+ style?: react_native.StyleProp<react_native.ViewStyle>;
186
+ children?: react.ReactNode;
187
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<View>>;
188
+
189
+ /**
190
+ * What sits after the text — a reveal toggle, a clear button, a unit, a counter.
191
+ *
192
+ * ```tsx
193
+ * <InputGroup>
194
+ * <InputGroup.Field secureTextEntry value={password} onChangeText={setPassword} />
195
+ * <InputGroup.Suffix>
196
+ * <Pressable onPress={toggle} hitSlop={20}>
197
+ * <InputGroup.Icon as={isVisible ? EyeOffIcon : EyeIcon} />
198
+ * </Pressable>
199
+ * </InputGroup.Suffix>
200
+ * </InputGroup>
201
+ * ```
202
+ *
203
+ * The trailing edge is where a suffix is most often a **control**, which is why
204
+ * `isDecorative` is off by default: a decorator that swallowed its own taps would be a
205
+ * reveal toggle you cannot press.
206
+ *
207
+ * The library ships no button for it. A suffix holds whatever you put in it, and
208
+ * `Pressable` with a `hitSlop` is the thing to put there — a 16pt glyph is not a touch
209
+ * target on its own.
210
+ */
211
+ declare const InputGroupSuffix: react.ForwardRefExoticComponent<{
212
+ isDecorative?: boolean;
213
+ style?: react_native.StyleProp<react_native.ViewStyle>;
214
+ children?: react.ReactNode;
215
+ } & Omit<react_native.ViewProps, keyof {
216
+ isDecorative?: boolean;
217
+ style?: react_native.StyleProp<react_native.ViewStyle>;
218
+ children?: react.ReactNode;
219
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<View>>;
220
+
221
+ declare const useInputGroup: () => InputGroupContextValue;
222
+
223
+ /**
224
+ * The room a decorator asks the field to leave it, from the width it measured.
225
+ *
226
+ * `start` and `end`, never `left` and `right` (R13): the prefix is the leading edge in
227
+ * both directions of writing, and RTL mirrors the logical property and only it.
228
+ *
229
+ * It returns `undefined` rather than an object of two `undefined`s when there is nothing
230
+ * to clear, so a group with no decorator adds no entry to the field's style array — and
231
+ * the `useMemo` around it keeps the same reference until a width actually changes.
232
+ */
233
+ declare function decoratorPadding(prefixWidth: number, suffixWidth: number): ViewStyle | undefined;
234
+
235
+ /**
236
+ * The four parts of a decorated field. The label, the hint and the error are **not** here:
237
+ * they are the `Input`'s, and an `InputGroup` lives inside one.
238
+ */
239
+ declare const InputGroup: react.ForwardRefExoticComponent<{
240
+ style?: react_native.StyleProp<react_native.ViewStyle>;
241
+ children?: react.ReactNode;
242
+ } & Omit<react_native.ViewProps, keyof {
243
+ style?: react_native.StyleProp<react_native.ViewStyle>;
244
+ children?: react.ReactNode;
245
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction"> & {
246
+ asChild?: boolean;
247
+ } & react.RefAttributes<react_native.View>> & {
248
+ Prefix: react.ForwardRefExoticComponent<{
249
+ isDecorative?: boolean;
250
+ style?: react_native.StyleProp<react_native.ViewStyle>;
251
+ children?: react.ReactNode;
252
+ } & Omit<react_native.ViewProps, keyof {
253
+ isDecorative?: boolean;
254
+ style?: react_native.StyleProp<react_native.ViewStyle>;
255
+ children?: react.ReactNode;
256
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<react_native.View>>;
257
+ Field: react.ForwardRefExoticComponent<Omit<react_native.TextInputProps, "editable"> & Omit<TextStyleProps, keyof react_native.TextInputProps> & react.RefAttributes<react_native.TextInput>>;
258
+ Suffix: react.ForwardRefExoticComponent<{
259
+ isDecorative?: boolean;
260
+ style?: react_native.StyleProp<react_native.ViewStyle>;
261
+ children?: react.ReactNode;
262
+ } & Omit<react_native.ViewProps, keyof {
263
+ isDecorative?: boolean;
264
+ style?: react_native.StyleProp<react_native.ViewStyle>;
265
+ children?: react.ReactNode;
266
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<react_native.View>>;
267
+ Icon: typeof InputGroupIcon;
268
+ };
269
+
270
+ export { InputGroup, type InputGroupContextValue, InputGroupField, type InputGroupFieldProps, InputGroupIcon, type InputGroupIconProps, InputGroupPrefix, type InputGroupPrefixProps, type InputGroupProps, InputGroupRoot, type InputGroupSide, InputGroupSuffix, type InputGroupSuffixProps, decoratorPadding, useInputGroup };
@@ -0,0 +1,270 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import * as react_native from 'react-native';
4
+ import { StyleProp, ViewStyle, ViewProps, View, TextInput } from 'react-native';
5
+ import { V as ViewStyleProps, T as TextStyleProps } from '../../style-props.type-CfnoGEP7.js';
6
+ import { b as IconProps } from '../../icon.type-Dq4_qePa.js';
7
+ import { I as InputFieldProps } from '../../input.type-D2qgi03E.js';
8
+ import '../../theme.type-C2gNHpEx.js';
9
+
10
+ type InputGroupOwnProps = {
11
+ style?: StyleProp<ViewStyle>;
12
+ children?: ReactNode;
13
+ };
14
+ /**
15
+ * R14 — the wrapper `View`'s own props, plus every `ViewStyle` key it does not claim.
16
+ *
17
+ * **There is no `variant`, no `size`, no `color` and no `isDisabled` here.** They are the
18
+ * `Input`'s, and an `InputGroup` is one row inside it: a second `size` on this root would
19
+ * be a second answer to a question the field has already answered.
20
+ */
21
+ type InputGroupProps = InputGroupOwnProps & Omit<ViewProps, keyof InputGroupOwnProps> & Omit<ViewStyleProps, keyof InputGroupOwnProps | keyof ViewProps> & {
22
+ /** R12 — merge into the single child instead of rendering a `View`. */
23
+ asChild?: boolean;
24
+ };
25
+ type InputGroupDecoratorOwnProps = {
26
+ /**
27
+ * The decorator stops taking touches and disappears from the accessibility tree, so a
28
+ * tap on the glyph focuses the field under it and a screen reader announces the field
29
+ * rather than a mark it cannot act on.
30
+ *
31
+ * Leave it off whenever the decorator holds something to press — a reveal toggle, a
32
+ * clear button — which is the whole reason it is a prop and not the default.
33
+ *
34
+ * @default false
35
+ */
36
+ isDecorative?: boolean;
37
+ style?: StyleProp<ViewStyle>;
38
+ children?: ReactNode;
39
+ };
40
+ type InputGroupDecoratorProps = InputGroupDecoratorOwnProps & Omit<ViewProps, keyof InputGroupDecoratorOwnProps> & Omit<ViewStyleProps, keyof InputGroupDecoratorOwnProps | keyof ViewProps>;
41
+ type InputGroupPrefixProps = InputGroupDecoratorProps;
42
+ type InputGroupSuffixProps = InputGroupDecoratorProps;
43
+ /** Which edge a decorator is pinned to, and therefore which width it reports. */
44
+ type InputGroupSide = 'prefix' | 'suffix';
45
+ /**
46
+ * Everything `Input.Field` accepts. It **is** that field — the same `TextInput`, the same
47
+ * focus plumbing, the same styles — with the padding the two decorators measured.
48
+ */
49
+ type InputGroupFieldProps = InputFieldProps;
50
+ /** Everything `Icon` accepts. `size` and `color` fall back to the field's own. */
51
+ type InputGroupIconProps = IconProps;
52
+ /**
53
+ * R5 — but the only thing here that is not already resolved on the `Input`'s context: two
54
+ * widths nobody can know before layout.
55
+ *
56
+ * A decorator is out of flow, so it cannot push the text aside the way a sibling in a row
57
+ * would; the field clears it by padding instead, and the padding is the decorator's own
58
+ * measured width. That is the same shape `TextArea` uses for `rows` — a raw number the
59
+ * slot turns into a style, outside the cache.
60
+ */
61
+ type InputGroupContextValue = {
62
+ /** `0` while the decorator is absent, and until its first layout. */
63
+ prefixWidth: number;
64
+ suffixWidth: number;
65
+ setPrefixWidth: (width: number) => void;
66
+ setSuffixWidth: (width: number) => void;
67
+ };
68
+
69
+ /**
70
+ * A glyph that takes the field's scale and the placeholder's colour without being told
71
+ * either:
72
+ *
73
+ * ```tsx
74
+ * <InputGroup.Prefix isDecorative>
75
+ * <InputGroup.Icon as={MailIcon} />
76
+ * </InputGroup.Prefix>
77
+ * ```
78
+ *
79
+ * The size comes from the `Input`'s own `size` — one step above the field's type, as on
80
+ * the `Button` and the `Chip`, because a 16pt glyph beside 16pt of text reads as the
81
+ * smaller of the two. The colour is the theme's `fieldPlaceholder`: a mark in a field is
82
+ * decoration for the text, not text. An explicit `size` or `color` still wins, which is
83
+ * what `Icon` promises everywhere else in the library — and it is the answer for a tinted
84
+ * `primary` field, where the fill is the caller's colour and the placeholder grey is no
85
+ * longer readable over it.
86
+ *
87
+ * It is not one of HeroUI's three parts: theirs colour the glyph at the call site. This is
88
+ * the same slot `Button`, `Chip` and `Alert` all have, and it exists so that a form does
89
+ * not carry a hard-coded `#888` on every field.
90
+ */
91
+ declare function InputGroupIcon({ size, color, ...rest }: InputGroupIconProps): react.JSX.Element;
92
+ declare namespace InputGroupIcon {
93
+ var displayName: string;
94
+ }
95
+
96
+ /**
97
+ * A field with something beside it — a glyph, a unit, a reveal toggle.
98
+ *
99
+ * ```tsx
100
+ * <Input>
101
+ * <Input.Label>Mot de passe</Input.Label>
102
+ * <InputGroup>
103
+ * <InputGroup.Prefix isDecorative>
104
+ * <InputGroup.Icon as={LockIcon} />
105
+ * </InputGroup.Prefix>
106
+ * <InputGroup.Field secureTextEntry value={password} onChangeText={setPassword} />
107
+ * <InputGroup.Suffix>
108
+ * <Pressable onPress={toggle} hitSlop={20}>
109
+ * <InputGroup.Icon as={EyeIcon} />
110
+ * </Pressable>
111
+ * </InputGroup.Suffix>
112
+ * </InputGroup>
113
+ * <Input.Description>Douze caractères au moins.</Input.Description>
114
+ * </Input>
115
+ * ```
116
+ *
117
+ * **It goes inside an `Input`, and it replaces nothing but the field.** The column, the
118
+ * label, the hint, the error, the four variants, the `size`, the `radius`, the tint, the
119
+ * focus and `isInvalid` are all still the `Input`'s — this root is one row of that column,
120
+ * and it owns exactly one thing: how wide the two decorators turned out to be.
121
+ *
122
+ * That is why the box is still the `TextInput` itself. A wrapper carrying the border, the
123
+ * fill and the radius would be a second thing to keep in step with `Input`, and the day
124
+ * one of them gained a shadow the other would not have it. The decorators are laid **over**
125
+ * the field instead, out of flow, and the field clears them with padding.
126
+ *
127
+ * It works under `TextArea` too — the same context, the same field — though a decorator
128
+ * centred over six lines of text is rarely what a multiline field wants.
129
+ */
130
+ declare const InputGroupRoot: react.ForwardRefExoticComponent<{
131
+ style?: react_native.StyleProp<react_native.ViewStyle>;
132
+ children?: react.ReactNode;
133
+ } & Omit<react_native.ViewProps, keyof {
134
+ style?: react_native.StyleProp<react_native.ViewStyle>;
135
+ children?: react.ReactNode;
136
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction"> & {
137
+ asChild?: boolean;
138
+ } & react.RefAttributes<View>>;
139
+
140
+ /**
141
+ * The `TextInput` itself — `Input.Field` with the room the two decorators need.
142
+ *
143
+ * ```tsx
144
+ * <InputGroup.Field value={query} onChangeText={setQuery} placeholder="Rechercher…" />
145
+ * ```
146
+ *
147
+ * It renders the `Input`'s field rather than a second `TextInput`, so the focus plumbing,
148
+ * the placeholder colour, the label association, `isInvalid` and `isDisabled` are the ones
149
+ * already written, and every `TextInput` prop is written here for the same reason it is
150
+ * there.
151
+ *
152
+ * The padding is arithmetic rather than a token, the way `TextArea`'s height is: a
153
+ * decorator's width is not knowable before layout, so it measures itself and this turns
154
+ * the two numbers into `paddingStart` and `paddingEnd`. They land **after** the recipe's
155
+ * own `paddingHorizontal`, which is what makes them win, and before the caller's `style`,
156
+ * which still has the last word.
157
+ */
158
+ declare const InputGroupField: react.ForwardRefExoticComponent<Omit<react_native.TextInputProps, "editable"> & Omit<TextStyleProps, keyof react_native.TextInputProps> & react.RefAttributes<TextInput>>;
159
+
160
+ /**
161
+ * What sits before the text — a search glyph, a currency, a country code.
162
+ *
163
+ * ```tsx
164
+ * <InputGroup>
165
+ * <InputGroup.Prefix isDecorative>
166
+ * <InputGroup.Icon as={SearchIcon} />
167
+ * </InputGroup.Prefix>
168
+ * <InputGroup.Field placeholder="Rechercher…" />
169
+ * </InputGroup>
170
+ * ```
171
+ *
172
+ * It is pinned to the **leading** edge and inset by the field's own padding, so the glyph
173
+ * starts where the text would have. The field then clears it by the width it measured —
174
+ * which is what lets a `+33` prefix and a 16pt mark both sit right, without either one
175
+ * being told a number.
176
+ *
177
+ * Add `isDecorative` whenever it holds nothing to press. Leave it off for a control.
178
+ */
179
+ declare const InputGroupPrefix: react.ForwardRefExoticComponent<{
180
+ isDecorative?: boolean;
181
+ style?: react_native.StyleProp<react_native.ViewStyle>;
182
+ children?: react.ReactNode;
183
+ } & Omit<react_native.ViewProps, keyof {
184
+ isDecorative?: boolean;
185
+ style?: react_native.StyleProp<react_native.ViewStyle>;
186
+ children?: react.ReactNode;
187
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<View>>;
188
+
189
+ /**
190
+ * What sits after the text — a reveal toggle, a clear button, a unit, a counter.
191
+ *
192
+ * ```tsx
193
+ * <InputGroup>
194
+ * <InputGroup.Field secureTextEntry value={password} onChangeText={setPassword} />
195
+ * <InputGroup.Suffix>
196
+ * <Pressable onPress={toggle} hitSlop={20}>
197
+ * <InputGroup.Icon as={isVisible ? EyeOffIcon : EyeIcon} />
198
+ * </Pressable>
199
+ * </InputGroup.Suffix>
200
+ * </InputGroup>
201
+ * ```
202
+ *
203
+ * The trailing edge is where a suffix is most often a **control**, which is why
204
+ * `isDecorative` is off by default: a decorator that swallowed its own taps would be a
205
+ * reveal toggle you cannot press.
206
+ *
207
+ * The library ships no button for it. A suffix holds whatever you put in it, and
208
+ * `Pressable` with a `hitSlop` is the thing to put there — a 16pt glyph is not a touch
209
+ * target on its own.
210
+ */
211
+ declare const InputGroupSuffix: react.ForwardRefExoticComponent<{
212
+ isDecorative?: boolean;
213
+ style?: react_native.StyleProp<react_native.ViewStyle>;
214
+ children?: react.ReactNode;
215
+ } & Omit<react_native.ViewProps, keyof {
216
+ isDecorative?: boolean;
217
+ style?: react_native.StyleProp<react_native.ViewStyle>;
218
+ children?: react.ReactNode;
219
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<View>>;
220
+
221
+ declare const useInputGroup: () => InputGroupContextValue;
222
+
223
+ /**
224
+ * The room a decorator asks the field to leave it, from the width it measured.
225
+ *
226
+ * `start` and `end`, never `left` and `right` (R13): the prefix is the leading edge in
227
+ * both directions of writing, and RTL mirrors the logical property and only it.
228
+ *
229
+ * It returns `undefined` rather than an object of two `undefined`s when there is nothing
230
+ * to clear, so a group with no decorator adds no entry to the field's style array — and
231
+ * the `useMemo` around it keeps the same reference until a width actually changes.
232
+ */
233
+ declare function decoratorPadding(prefixWidth: number, suffixWidth: number): ViewStyle | undefined;
234
+
235
+ /**
236
+ * The four parts of a decorated field. The label, the hint and the error are **not** here:
237
+ * they are the `Input`'s, and an `InputGroup` lives inside one.
238
+ */
239
+ declare const InputGroup: react.ForwardRefExoticComponent<{
240
+ style?: react_native.StyleProp<react_native.ViewStyle>;
241
+ children?: react.ReactNode;
242
+ } & Omit<react_native.ViewProps, keyof {
243
+ style?: react_native.StyleProp<react_native.ViewStyle>;
244
+ children?: react.ReactNode;
245
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction"> & {
246
+ asChild?: boolean;
247
+ } & react.RefAttributes<react_native.View>> & {
248
+ Prefix: react.ForwardRefExoticComponent<{
249
+ isDecorative?: boolean;
250
+ style?: react_native.StyleProp<react_native.ViewStyle>;
251
+ children?: react.ReactNode;
252
+ } & Omit<react_native.ViewProps, keyof {
253
+ isDecorative?: boolean;
254
+ style?: react_native.StyleProp<react_native.ViewStyle>;
255
+ children?: react.ReactNode;
256
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<react_native.View>>;
257
+ Field: react.ForwardRefExoticComponent<Omit<react_native.TextInputProps, "editable"> & Omit<TextStyleProps, keyof react_native.TextInputProps> & react.RefAttributes<react_native.TextInput>>;
258
+ Suffix: react.ForwardRefExoticComponent<{
259
+ isDecorative?: boolean;
260
+ style?: react_native.StyleProp<react_native.ViewStyle>;
261
+ children?: react.ReactNode;
262
+ } & Omit<react_native.ViewProps, keyof {
263
+ isDecorative?: boolean;
264
+ style?: react_native.StyleProp<react_native.ViewStyle>;
265
+ children?: react.ReactNode;
266
+ }> & Omit<ViewStyleProps, "pointerEvents" | "style" | "children" | "hitSlop" | "id" | "needsOffscreenAlphaCompositing" | "onLayout" | "removeClippedSubviews" | "testID" | "nativeID" | "collapsable" | "collapsableChildren" | "onBlur" | "onFocus" | "renderToHardwareTextureAndroid" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "aria-label" | "accessibilityRole" | "accessibilityState" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "accessibilityHint" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "onAccessibilityAction" | "importantForAccessibility" | "aria-hidden" | "aria-modal" | "role" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "screenReaderFocusable" | "accessibilityElementsHidden" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors" | "accessibilityLanguage" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "accessibilityRespondsToUserInteraction" | "isDecorative"> & react.RefAttributes<react_native.View>>;
267
+ Icon: typeof InputGroupIcon;
268
+ };
269
+
270
+ export { InputGroup, type InputGroupContextValue, InputGroupField, type InputGroupFieldProps, InputGroupIcon, type InputGroupIconProps, InputGroupPrefix, type InputGroupPrefixProps, type InputGroupProps, InputGroupRoot, type InputGroupSide, InputGroupSuffix, type InputGroupSuffixProps, decoratorPadding, useInputGroup };
@@ -0,0 +1,26 @@
1
+ import {
2
+ InputGroup,
3
+ InputGroupField,
4
+ InputGroupIcon,
5
+ InputGroupPrefix,
6
+ InputGroupRoot,
7
+ InputGroupSuffix,
8
+ decoratorPadding,
9
+ useInputGroup
10
+ } from "../../chunk-WEMZ4VMC.js";
11
+ import "../../chunk-ICR42HHG.js";
12
+ import "../../chunk-V2FQN6ZK.js";
13
+ import "../../chunk-3JATAB7S.js";
14
+ import "../../chunk-PMO62QK4.js";
15
+ import "../../chunk-A3EGFI6T.js";
16
+ import "../../chunk-GGW42MY4.js";
17
+ export {
18
+ InputGroup,
19
+ InputGroupField,
20
+ InputGroupIcon,
21
+ InputGroupPrefix,
22
+ InputGroupRoot,
23
+ InputGroupSuffix,
24
+ decoratorPadding,
25
+ useInputGroup
26
+ };
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- var _chunkLIQTGAI7cjs = require('../../chunk-LIQTGAI7.cjs');
11
+ var _chunkBULNTP5Ncjs = require('../../chunk-BULNTP5N.cjs');
12
12
  require('../../chunk-EJQCQPET.cjs');
13
13
  require('../../chunk-YXVKQMCK.cjs');
14
14
  require('../../chunk-HUZ4AUM2.cjs');
@@ -24,4 +24,4 @@ require('../../chunk-MC7SY2QH.cjs');
24
24
 
25
25
 
26
26
 
27
- exports.InputOTP = _chunkLIQTGAI7cjs.InputOTP; exports.OTP_ALPHANUMERIC = _chunkLIQTGAI7cjs.OTP_ALPHANUMERIC; exports.OTP_DIGITS = _chunkLIQTGAI7cjs.OTP_DIGITS; exports.OTP_LETTERS = _chunkLIQTGAI7cjs.OTP_LETTERS; exports.buildSlots = _chunkLIQTGAI7cjs.buildSlots; exports.extractPastedCode = _chunkLIQTGAI7cjs.extractPastedCode; exports.inputOTPRecipe = _chunkLIQTGAI7cjs.inputOTPRecipe; exports.useInputOTP = _chunkLIQTGAI7cjs.useInputOTP; exports.useInputOTPBox = _chunkLIQTGAI7cjs.useInputOTPBox;
27
+ exports.InputOTP = _chunkBULNTP5Ncjs.InputOTP; exports.OTP_ALPHANUMERIC = _chunkBULNTP5Ncjs.OTP_ALPHANUMERIC; exports.OTP_DIGITS = _chunkBULNTP5Ncjs.OTP_DIGITS; exports.OTP_LETTERS = _chunkBULNTP5Ncjs.OTP_LETTERS; exports.buildSlots = _chunkBULNTP5Ncjs.buildSlots; exports.extractPastedCode = _chunkBULNTP5Ncjs.extractPastedCode; exports.inputOTPRecipe = _chunkBULNTP5Ncjs.inputOTPRecipe; exports.useInputOTP = _chunkBULNTP5Ncjs.useInputOTP; exports.useInputOTPBox = _chunkBULNTP5Ncjs.useInputOTPBox;