panelui-native 0.5.3 → 0.7.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.
Files changed (156) hide show
  1. package/README.md +9 -5
  2. package/lib/module/components/accordion/index.js +7 -5
  3. package/lib/module/components/accordion/index.js.map +1 -1
  4. package/lib/module/components/alert/index.js +3 -6
  5. package/lib/module/components/alert/index.js.map +1 -1
  6. package/lib/module/components/bottom-sheet/index.js +67 -3
  7. package/lib/module/components/bottom-sheet/index.js.map +1 -1
  8. package/lib/module/components/button/index.js +36 -1
  9. package/lib/module/components/button/index.js.map +1 -1
  10. package/lib/module/components/empty-state/index.js +4 -5
  11. package/lib/module/components/empty-state/index.js.map +1 -1
  12. package/lib/module/components/inline-select/index.js +171 -46
  13. package/lib/module/components/inline-select/index.js.map +1 -1
  14. package/lib/module/components/input/index.js +28 -5
  15. package/lib/module/components/input/index.js.map +1 -1
  16. package/lib/module/components/input-group/index.js +0 -1
  17. package/lib/module/components/input-group/index.js.map +1 -1
  18. package/lib/module/components/item/index.js +359 -0
  19. package/lib/module/components/item/index.js.map +1 -0
  20. package/lib/module/components/label/index.js +5 -3
  21. package/lib/module/components/label/index.js.map +1 -1
  22. package/lib/module/components/message/index.js +318 -0
  23. package/lib/module/components/message/index.js.map +1 -0
  24. package/lib/module/components/scroll-fade/index.js +204 -0
  25. package/lib/module/components/scroll-fade/index.js.map +1 -0
  26. package/lib/module/components/select/index.js +35 -6
  27. package/lib/module/components/select/index.js.map +1 -1
  28. package/lib/module/components/shimmer/index.js +167 -0
  29. package/lib/module/components/shimmer/index.js.map +1 -0
  30. package/lib/module/components/surface/index.js +65 -0
  31. package/lib/module/components/surface/index.js.map +1 -0
  32. package/lib/module/components/switch/index.js +20 -1
  33. package/lib/module/components/switch/index.js.map +1 -1
  34. package/lib/module/components/toast/index.js +7 -8
  35. package/lib/module/components/toast/index.js.map +1 -1
  36. package/lib/module/components/typography/index.js +3 -3
  37. package/lib/module/hooks/index.js +10 -0
  38. package/lib/module/hooks/index.js.map +1 -0
  39. package/lib/module/hooks/use-breakpoint.js +39 -0
  40. package/lib/module/hooks/use-breakpoint.js.map +1 -0
  41. package/lib/module/hooks/use-copy-to-clipboard.js +60 -0
  42. package/lib/module/hooks/use-copy-to-clipboard.js.map +1 -0
  43. package/lib/module/hooks/use-debounced-value.js +24 -0
  44. package/lib/module/hooks/use-debounced-value.js.map +1 -0
  45. package/lib/module/hooks/use-disclosure.js +43 -0
  46. package/lib/module/hooks/use-disclosure.js.map +1 -0
  47. package/lib/module/hooks/use-keyboard-avoidance.js +120 -0
  48. package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -0
  49. package/lib/module/hooks/use-keyboard.js +36 -0
  50. package/lib/module/hooks/use-keyboard.js.map +1 -0
  51. package/lib/module/hooks/use-previous.js +25 -0
  52. package/lib/module/hooks/use-previous.js.map +1 -0
  53. package/lib/module/icons/index.js +4 -4
  54. package/lib/module/index.js +12 -0
  55. package/lib/module/index.js.map +1 -1
  56. package/lib/module/native/index.js +53 -0
  57. package/lib/module/native/index.js.map +1 -0
  58. package/lib/module/primitives/keyboard-avoider.js +40 -0
  59. package/lib/module/primitives/keyboard-avoider.js.map +1 -0
  60. package/lib/module/providers/panel-ui-provider.js +24 -4
  61. package/lib/module/providers/panel-ui-provider.js.map +1 -1
  62. package/lib/module/theme/use-theme.js +1 -1
  63. package/lib/typescript/src/components/accordion/index.d.ts +7 -5
  64. package/lib/typescript/src/components/accordion/index.d.ts.map +1 -1
  65. package/lib/typescript/src/components/alert/index.d.ts +3 -6
  66. package/lib/typescript/src/components/alert/index.d.ts.map +1 -1
  67. package/lib/typescript/src/components/bottom-sheet/index.d.ts +21 -1
  68. package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
  69. package/lib/typescript/src/components/button/index.d.ts +11 -0
  70. package/lib/typescript/src/components/button/index.d.ts.map +1 -1
  71. package/lib/typescript/src/components/empty-state/index.d.ts +4 -5
  72. package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -1
  73. package/lib/typescript/src/components/inline-select/index.d.ts +29 -6
  74. package/lib/typescript/src/components/inline-select/index.d.ts.map +1 -1
  75. package/lib/typescript/src/components/input/index.d.ts +13 -0
  76. package/lib/typescript/src/components/input/index.d.ts.map +1 -1
  77. package/lib/typescript/src/components/input-group/index.d.ts +0 -1
  78. package/lib/typescript/src/components/input-group/index.d.ts.map +1 -1
  79. package/lib/typescript/src/components/item/index.d.ts +286 -0
  80. package/lib/typescript/src/components/item/index.d.ts.map +1 -0
  81. package/lib/typescript/src/components/label/index.d.ts +5 -3
  82. package/lib/typescript/src/components/label/index.d.ts.map +1 -1
  83. package/lib/typescript/src/components/message/index.d.ts +170 -0
  84. package/lib/typescript/src/components/message/index.d.ts.map +1 -0
  85. package/lib/typescript/src/components/scroll-fade/index.d.ts +47 -0
  86. package/lib/typescript/src/components/scroll-fade/index.d.ts.map +1 -0
  87. package/lib/typescript/src/components/select/index.d.ts +16 -1
  88. package/lib/typescript/src/components/select/index.d.ts.map +1 -1
  89. package/lib/typescript/src/components/shimmer/index.d.ts +60 -0
  90. package/lib/typescript/src/components/shimmer/index.d.ts.map +1 -0
  91. package/lib/typescript/src/components/surface/index.d.ts +30 -0
  92. package/lib/typescript/src/components/surface/index.d.ts.map +1 -0
  93. package/lib/typescript/src/components/switch/index.d.ts +10 -0
  94. package/lib/typescript/src/components/switch/index.d.ts.map +1 -1
  95. package/lib/typescript/src/components/toast/index.d.ts +4 -4
  96. package/lib/typescript/src/components/toast/index.d.ts.map +1 -1
  97. package/lib/typescript/src/hooks/index.d.ts +8 -0
  98. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  99. package/lib/typescript/src/hooks/use-breakpoint.d.ts +32 -0
  100. package/lib/typescript/src/hooks/use-breakpoint.d.ts.map +1 -0
  101. package/lib/typescript/src/hooks/use-copy-to-clipboard.d.ts +28 -0
  102. package/lib/typescript/src/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  103. package/lib/typescript/src/hooks/use-debounced-value.d.ts +13 -0
  104. package/lib/typescript/src/hooks/use-debounced-value.d.ts.map +1 -0
  105. package/lib/typescript/src/hooks/use-disclosure.d.ts +32 -0
  106. package/lib/typescript/src/hooks/use-disclosure.d.ts.map +1 -0
  107. package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts +20 -0
  108. package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -0
  109. package/lib/typescript/src/hooks/use-keyboard.d.ts +20 -0
  110. package/lib/typescript/src/hooks/use-keyboard.d.ts.map +1 -0
  111. package/lib/typescript/src/hooks/use-previous.d.ts +15 -0
  112. package/lib/typescript/src/hooks/use-previous.d.ts.map +1 -0
  113. package/lib/typescript/src/icons/index.d.ts +4 -4
  114. package/lib/typescript/src/index.d.ts +8 -0
  115. package/lib/typescript/src/index.d.ts.map +1 -1
  116. package/lib/typescript/src/native/index.d.ts +35 -0
  117. package/lib/typescript/src/native/index.d.ts.map +1 -0
  118. package/lib/typescript/src/primitives/keyboard-avoider.d.ts +22 -0
  119. package/lib/typescript/src/primitives/keyboard-avoider.d.ts.map +1 -0
  120. package/lib/typescript/src/providers/panel-ui-provider.d.ts +1 -1
  121. package/lib/typescript/src/providers/panel-ui-provider.d.ts.map +1 -1
  122. package/lib/typescript/src/theme/use-theme.d.ts +1 -1
  123. package/package.json +19 -3
  124. package/src/components/accordion/index.tsx +7 -5
  125. package/src/components/alert/index.tsx +3 -6
  126. package/src/components/bottom-sheet/index.tsx +82 -2
  127. package/src/components/button/index.tsx +52 -0
  128. package/src/components/empty-state/index.tsx +4 -5
  129. package/src/components/inline-select/index.tsx +191 -44
  130. package/src/components/input/index.tsx +39 -3
  131. package/src/components/input-group/index.tsx +0 -1
  132. package/src/components/item/index.tsx +387 -0
  133. package/src/components/label/index.tsx +5 -3
  134. package/src/components/message/index.tsx +312 -0
  135. package/src/components/scroll-fade/index.tsx +280 -0
  136. package/src/components/select/index.tsx +54 -9
  137. package/src/components/shimmer/index.tsx +228 -0
  138. package/src/components/surface/index.tsx +64 -0
  139. package/src/components/switch/index.tsx +27 -1
  140. package/src/components/toast/index.tsx +7 -8
  141. package/src/components/typography/index.tsx +3 -3
  142. package/src/hooks/index.ts +24 -0
  143. package/src/hooks/use-breakpoint.ts +52 -0
  144. package/src/hooks/use-copy-to-clipboard.ts +79 -0
  145. package/src/hooks/use-debounced-value.ts +23 -0
  146. package/src/hooks/use-disclosure.ts +57 -0
  147. package/src/hooks/use-keyboard-avoidance.ts +140 -0
  148. package/src/hooks/use-keyboard.ts +43 -0
  149. package/src/hooks/use-previous.ts +24 -0
  150. package/src/icons/index.tsx +4 -4
  151. package/src/index.ts +41 -0
  152. package/src/native/index.ts +79 -0
  153. package/src/primitives/keyboard-avoider.tsx +49 -0
  154. package/src/providers/panel-ui-provider.tsx +30 -9
  155. package/src/theme/use-theme.ts +1 -1
  156. package/theme.css +23 -3
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Message — a chat turn: avatar, bubble, and the metadata around it.
5
+ *
6
+ * The pieces are separate because conversations differ in which ones they
7
+ * need. A support thread wants a sender name and a read receipt; an assistant
8
+ * transcript wants neither, but does want the bubble to carry tool output and
9
+ * actions. Composing them beats a component with a dozen optional props.
10
+ *
11
+ * `align` is the only thing the root decides, and everything downstream reads
12
+ * it from context: which side the row sits on, which way the avatar goes,
13
+ * which corner of the bubble is squared off, and which colour it takes.
14
+ *
15
+ * ```tsx
16
+ * <Message align="end">
17
+ * <Message.Content>
18
+ * <Message.Bubble>
19
+ * <Message.BubbleContent>How can I help?</Message.BubbleContent>
20
+ * </Message.Bubble>
21
+ * </Message.Content>
22
+ * </Message>
23
+ * ```
24
+ */
25
+ import { Children, cloneElement, createContext, forwardRef, isValidElement, useContext } from 'react';
26
+ import { View } from 'react-native';
27
+ import { tv } from 'tailwind-variants';
28
+ import { Text } from "../../primitives/text.js";
29
+ import { cn } from "../../utils/cn.js";
30
+ import { jsx as _jsx } from "react/jsx-runtime";
31
+ const messageVariants = tv({
32
+ slots: {
33
+ root: 'w-full flex-row items-end gap-2',
34
+ avatar: 'shrink-0',
35
+ content: 'max-w-[85%] gap-1',
36
+ header: 'text-xs font-medium text-muted-foreground',
37
+ bubble: 'rounded-2xl px-3.5 py-2.5',
38
+ bubbleContent: 'text-base',
39
+ footer: 'text-xs text-muted-foreground',
40
+ group: 'w-full gap-1'
41
+ },
42
+ variants: {
43
+ align: {
44
+ start: {
45
+ root: 'flex-row justify-start',
46
+ content: 'items-start',
47
+ // A squared corner on the side the message comes from points the
48
+ // bubble back at its sender.
49
+ bubble: 'rounded-bl-md bg-muted',
50
+ bubbleContent: 'text-foreground',
51
+ header: 'text-left',
52
+ footer: 'text-left'
53
+ },
54
+ end: {
55
+ root: 'flex-row-reverse justify-start',
56
+ content: 'items-end',
57
+ bubble: 'rounded-br-md bg-primary',
58
+ bubbleContent: 'text-primary-foreground',
59
+ header: 'text-right',
60
+ footer: 'text-right'
61
+ }
62
+ }
63
+ },
64
+ defaultVariants: {
65
+ align: 'start'
66
+ }
67
+ });
68
+ const MessageContext = /*#__PURE__*/createContext({
69
+ align: 'start',
70
+ stacked: false
71
+ });
72
+
73
+ /** Reads the alignment set by the nearest Message. */
74
+ function useMessageContext() {
75
+ return useContext(MessageContext);
76
+ }
77
+ const GroupContext = /*#__PURE__*/createContext(null);
78
+ const MessageRoot = /*#__PURE__*/forwardRef(({
79
+ className,
80
+ align,
81
+ stacked = false,
82
+ children,
83
+ ...props
84
+ }, ref) => {
85
+ const group = useContext(GroupContext);
86
+ const resolvedAlign = align ?? group?.align ?? 'start';
87
+ const {
88
+ root
89
+ } = messageVariants({
90
+ align: resolvedAlign
91
+ });
92
+ return /*#__PURE__*/_jsx(MessageContext.Provider, {
93
+ value: {
94
+ align: resolvedAlign,
95
+ stacked
96
+ },
97
+ children: /*#__PURE__*/_jsx(View, {
98
+ ref: ref,
99
+ className: root({
100
+ className
101
+ }),
102
+ ...props,
103
+ children: children
104
+ })
105
+ });
106
+ });
107
+ MessageRoot.displayName = 'Message';
108
+ /**
109
+ * Consecutive turns from one sender. Tightens the spacing between them and
110
+ * marks every message after the first as `stacked`, so only the first shows an
111
+ * avatar and the rest stay aligned with it.
112
+ */
113
+ const MessageGroup = /*#__PURE__*/forwardRef(({
114
+ className,
115
+ align = 'start',
116
+ children,
117
+ ...props
118
+ }, ref) => {
119
+ const {
120
+ group
121
+ } = messageVariants({
122
+ align
123
+ });
124
+
125
+ // Every turn after the first is a continuation, so it drops its avatar and
126
+ // sits tight against the one above. A child that sets `stacked` itself
127
+ // wins — grouping is a default, not a rule.
128
+ const stackedChildren = Children.map(children, (child, index) => /*#__PURE__*/isValidElement(child) && child.props.stacked === undefined ? /*#__PURE__*/cloneElement(child, {
129
+ stacked: index > 0
130
+ }) : child);
131
+ return /*#__PURE__*/_jsx(GroupContext.Provider, {
132
+ value: {
133
+ align
134
+ },
135
+ children: /*#__PURE__*/_jsx(View, {
136
+ ref: ref,
137
+ className: group({
138
+ className
139
+ }),
140
+ ...props,
141
+ children: stackedChildren
142
+ })
143
+ });
144
+ });
145
+ MessageGroup.displayName = 'Message.Group';
146
+ /**
147
+ * Slot for the sender's avatar. On a stacked message the slot is rendered but
148
+ * left empty, which keeps the bubbles in a column instead of letting the
149
+ * second one slide under the first one's avatar.
150
+ */
151
+ const MessageAvatar = /*#__PURE__*/forwardRef(({
152
+ className,
153
+ children,
154
+ ...props
155
+ }, ref) => {
156
+ const {
157
+ stacked
158
+ } = useMessageContext();
159
+ const {
160
+ avatar
161
+ } = messageVariants();
162
+ return /*#__PURE__*/_jsx(View, {
163
+ ref: ref,
164
+ className: avatar({
165
+ className
166
+ }),
167
+ ...props,
168
+ children: stacked ? /*#__PURE__*/_jsx(View, {
169
+ className: "opacity-0",
170
+ children: children
171
+ }) : children
172
+ });
173
+ });
174
+ MessageAvatar.displayName = 'Message.Avatar';
175
+ /** Column holding the header, bubble and footer. */
176
+ const MessageContent = /*#__PURE__*/forwardRef(({
177
+ className,
178
+ children,
179
+ ...props
180
+ }, ref) => {
181
+ const {
182
+ align
183
+ } = useMessageContext();
184
+ const {
185
+ content
186
+ } = messageVariants({
187
+ align
188
+ });
189
+ return /*#__PURE__*/_jsx(View, {
190
+ ref: ref,
191
+ className: content({
192
+ className
193
+ }),
194
+ ...props,
195
+ children: children
196
+ });
197
+ });
198
+ MessageContent.displayName = 'Message.Content';
199
+ /** Sender name or timestamp above the bubble. */
200
+ const MessageHeader = /*#__PURE__*/forwardRef(({
201
+ className,
202
+ ...props
203
+ }, ref) => {
204
+ const {
205
+ align
206
+ } = useMessageContext();
207
+ const {
208
+ header
209
+ } = messageVariants({
210
+ align
211
+ });
212
+ return /*#__PURE__*/_jsx(Text, {
213
+ ref: ref,
214
+ size: "xs",
215
+ className: header({
216
+ className
217
+ }),
218
+ ...props
219
+ });
220
+ });
221
+ MessageHeader.displayName = 'Message.Header';
222
+ /** The speech bubble. Takes its colour and squared corner from `align`. */
223
+ const MessageBubble = /*#__PURE__*/forwardRef(({
224
+ className,
225
+ children,
226
+ ...props
227
+ }, ref) => {
228
+ const {
229
+ align
230
+ } = useMessageContext();
231
+ const {
232
+ bubble
233
+ } = messageVariants({
234
+ align
235
+ });
236
+ return /*#__PURE__*/_jsx(View, {
237
+ ref: ref,
238
+ className: bubble({
239
+ className
240
+ }),
241
+ ...props,
242
+ children: children
243
+ });
244
+ });
245
+ MessageBubble.displayName = 'Message.Bubble';
246
+ /** Text inside the bubble, in whichever colour reads against it. */
247
+ const MessageBubbleContent = /*#__PURE__*/forwardRef(({
248
+ className,
249
+ ...props
250
+ }, ref) => {
251
+ const {
252
+ align
253
+ } = useMessageContext();
254
+ const {
255
+ bubbleContent
256
+ } = messageVariants({
257
+ align
258
+ });
259
+ return /*#__PURE__*/_jsx(Text, {
260
+ ref: ref,
261
+ className: bubbleContent({
262
+ className
263
+ }),
264
+ ...props
265
+ });
266
+ });
267
+ MessageBubbleContent.displayName = 'Message.BubbleContent';
268
+ /** Delivery state, timestamp or actions below the bubble. */
269
+ const MessageFooter = /*#__PURE__*/forwardRef(({
270
+ className,
271
+ ...props
272
+ }, ref) => {
273
+ const {
274
+ align
275
+ } = useMessageContext();
276
+ const {
277
+ footer
278
+ } = messageVariants({
279
+ align
280
+ });
281
+ return /*#__PURE__*/_jsx(Text, {
282
+ ref: ref,
283
+ size: "xs",
284
+ className: footer({
285
+ className
286
+ }),
287
+ ...props
288
+ });
289
+ });
290
+ MessageFooter.displayName = 'Message.Footer';
291
+ /** Row of controls under the bubble — copy, retry, feedback. */
292
+ const MessageActions = /*#__PURE__*/forwardRef(({
293
+ className,
294
+ children,
295
+ ...props
296
+ }, ref) => {
297
+ const {
298
+ align
299
+ } = useMessageContext();
300
+ return /*#__PURE__*/_jsx(View, {
301
+ ref: ref,
302
+ className: cn('flex-row items-center gap-1', align === 'end' && 'flex-row-reverse', className),
303
+ ...props,
304
+ children: children
305
+ });
306
+ });
307
+ MessageActions.displayName = 'Message.Actions';
308
+ export const Message = Object.assign(MessageRoot, {
309
+ Group: MessageGroup,
310
+ Avatar: MessageAvatar,
311
+ Content: MessageContent,
312
+ Header: MessageHeader,
313
+ Bubble: MessageBubble,
314
+ BubbleContent: MessageBubbleContent,
315
+ Footer: MessageFooter,
316
+ Actions: MessageActions
317
+ });
318
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Children","cloneElement","createContext","forwardRef","isValidElement","useContext","View","tv","Text","cn","jsx","_jsx","messageVariants","slots","root","avatar","content","header","bubble","bubbleContent","footer","group","variants","align","start","end","defaultVariants","MessageContext","stacked","useMessageContext","GroupContext","MessageRoot","className","children","props","ref","resolvedAlign","Provider","value","displayName","MessageGroup","stackedChildren","map","child","index","undefined","MessageAvatar","MessageContent","MessageHeader","size","MessageBubble","MessageBubbleContent","MessageFooter","MessageActions","Message","Object","assign","Group","Avatar","Content","Header","Bubble","BubbleContent","Footer","Actions"],"sourceRoot":"../../../../src","sources":["components/message/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ScrollFade — fades the edges of a scroll container.
5
+ *
6
+ * Content that runs past a boundary reads better fading out than being cut
7
+ * off, and the fade doubles as an affordance: an edge that is fading is an
8
+ * edge with more content behind it.
9
+ *
10
+ * Scroll position, content size and viewport size are all held in shared
11
+ * values and consumed by `useAnimatedStyle`, so the fades track the scroll on
12
+ * the UI thread without re-rendering React.
13
+ *
14
+ * ```tsx
15
+ * <ScrollFade>
16
+ * <ScrollView horizontal>…</ScrollView>
17
+ * </ScrollFade>
18
+ * ```
19
+ */
20
+ import { Children, isValidElement, useMemo } from 'react';
21
+ import { StyleSheet, View } from 'react-native';
22
+ import { LinearGradient } from 'expo-linear-gradient';
23
+ import Animated, { useAnimatedScrollHandler, useAnimatedStyle, useComposedEventHandler, useDerivedValue, useSharedValue } from 'react-native-reanimated';
24
+ import { useCSSVariable } from 'uniwind';
25
+
26
+ /** Past this many pixels from an edge, that edge's fade is fully shown. */
27
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
28
+ const DEFAULT_FADE_IN_DISTANCE = 24;
29
+ export function ScrollFade({
30
+ className,
31
+ size = 48,
32
+ edges = 'both',
33
+ orientation,
34
+ color,
35
+ fadeInDistance = DEFAULT_FADE_IN_DISTANCE,
36
+ enabled = true,
37
+ children,
38
+ ...props
39
+ }) {
40
+ const offset = useSharedValue(0);
41
+ const contentLength = useSharedValue(0);
42
+ const viewportLength = useSharedValue(0);
43
+ const themeBackground = useCSSVariable('--color-background');
44
+ const fadeColor = color ?? (typeof themeBackground === 'string' ? themeBackground : '#000000');
45
+ const child = Children.only(children);
46
+ const horizontal = orientation !== undefined ? orientation === 'horizontal' : /*#__PURE__*/isValidElement(child) && !!child.props.horizontal;
47
+
48
+ // Reanimated can only drive a scroll handler on an animated component, and
49
+ // `Animated.ScrollView` is not necessarily what was passed in — the child may
50
+ // be a FlatList, a SectionList or a custom scrollable. Keyed on the element
51
+ // *type*, not the element: rebuilding the wrapper would remount the list.
52
+ const childType = /*#__PURE__*/isValidElement(child) ? child.type : null;
53
+ const AnimatedScrollable = useMemo(() => childType ? Animated.createAnimatedComponent(childType) : null, [childType]);
54
+ const scrollHandler = useAnimatedScrollHandler({
55
+ onScroll: event => {
56
+ const {
57
+ contentOffset,
58
+ contentSize,
59
+ layoutMeasurement
60
+ } = event;
61
+ offset.value = horizontal ? contentOffset.x : contentOffset.y;
62
+ contentLength.value = horizontal ? contentSize.width : contentSize.height;
63
+ viewportLength.value = horizontal ? layoutMeasurement.width : layoutMeasurement.height;
64
+ }
65
+ });
66
+
67
+ // A consumer `onScroll` is composed rather than dropped — but because the
68
+ // child is now an animated component it has to be an animated handler too.
69
+ const onScroll = useComposedEventHandler([scrollHandler, child.props.onScroll ?? null]);
70
+
71
+ // Measured up front as well as on scroll, so an end edge with content behind
72
+ // it fades from the first frame rather than waiting for a scroll event.
73
+ const onLayout = event => {
74
+ const {
75
+ width,
76
+ height
77
+ } = event.nativeEvent.layout;
78
+ viewportLength.value = horizontal ? width : height;
79
+ child.props.onLayout?.(event);
80
+ };
81
+ const onContentSizeChange = (width, height) => {
82
+ contentLength.value = horizontal ? width : height;
83
+ child.props.onContentSizeChange?.(width, height);
84
+ };
85
+ const startOpacity = useDerivedValue(() => Math.min(offset.value / fadeInDistance, 1));
86
+ const endOpacity = useDerivedValue(() => {
87
+ // Nothing to fade towards when the content fits inside the viewport.
88
+ const remaining = contentLength.value - viewportLength.value - offset.value;
89
+ return Math.min(Math.max(remaining, 0) / fadeInDistance, 1);
90
+ });
91
+ const scrollable = AnimatedScrollable && /*#__PURE__*/isValidElement(child) ? /*#__PURE__*/_jsx(AnimatedScrollable, {
92
+ ...child.props,
93
+ onScroll: onScroll,
94
+ onLayout: onLayout,
95
+ onContentSizeChange: onContentSizeChange,
96
+ scrollEventThrottle: child.props.scrollEventThrottle ?? 16
97
+ }) : child;
98
+ if (!enabled || edges === 'none') {
99
+ return /*#__PURE__*/_jsx(View, {
100
+ ...props,
101
+ className: className,
102
+ children: scrollable
103
+ });
104
+ }
105
+ return /*#__PURE__*/_jsxs(View, {
106
+ ...props,
107
+ className: className,
108
+ children: [scrollable, edges !== 'end' ? /*#__PURE__*/_jsx(Fade, {
109
+ color: fadeColor,
110
+ size: size,
111
+ horizontal: horizontal,
112
+ opacity: startOpacity,
113
+ edge: "start"
114
+ }) : null, edges !== 'start' ? /*#__PURE__*/_jsx(Fade, {
115
+ color: fadeColor,
116
+ size: size,
117
+ horizontal: horizontal,
118
+ opacity: endOpacity,
119
+ edge: "end"
120
+ }) : null]
121
+ });
122
+ }
123
+ ScrollFade.displayName = 'ScrollFade';
124
+
125
+ /** One edge's gradient, opaque at the edge and clear inwards. */
126
+ function Fade({
127
+ color,
128
+ size,
129
+ horizontal,
130
+ opacity,
131
+ edge
132
+ }) {
133
+ const isStart = edge === 'start';
134
+ const position = horizontal ? {
135
+ top: 0,
136
+ bottom: 0,
137
+ width: size,
138
+ ...(isStart ? {
139
+ left: 0
140
+ } : {
141
+ right: 0
142
+ })
143
+ } : {
144
+ left: 0,
145
+ right: 0,
146
+ height: size,
147
+ ...(isStart ? {
148
+ top: 0
149
+ } : {
150
+ bottom: 0
151
+ })
152
+ };
153
+ const style = useAnimatedStyle(() => ({
154
+ opacity: opacity.value
155
+ }));
156
+
157
+ // The gradient runs from the edge inwards, so its stops are reversed on the
158
+ // end edge.
159
+ const colors = isStart ? [withAlpha(color, 1), withAlpha(color, 0)] : [withAlpha(color, 0), withAlpha(color, 1)];
160
+ return /*#__PURE__*/_jsx(Animated.View, {
161
+ pointerEvents: "none",
162
+ style: [{
163
+ position: 'absolute'
164
+ }, position, style],
165
+ children: /*#__PURE__*/_jsx(LinearGradient, {
166
+ colors: colors,
167
+ start: {
168
+ x: 0,
169
+ y: 0
170
+ },
171
+ end: horizontal ? {
172
+ x: 1,
173
+ y: 0
174
+ } : {
175
+ x: 0,
176
+ y: 1
177
+ },
178
+ style: StyleSheet.absoluteFill
179
+ })
180
+ });
181
+ }
182
+
183
+ /**
184
+ * Gradients need a transparent stop of the *same* colour — `transparent` is
185
+ * black at zero alpha on Android, which shows as a grey smear.
186
+ */
187
+ function withAlpha(color, alpha) {
188
+ if (color.startsWith('#')) {
189
+ const hex = color.slice(1);
190
+ const full = hex.length === 3 ? hex.split('').map(c => c + c).join('') : hex.slice(0, 6);
191
+ const r = parseInt(full.slice(0, 2), 16);
192
+ const g = parseInt(full.slice(2, 4), 16);
193
+ const b = parseInt(full.slice(4, 6), 16);
194
+ if (Number.isNaN(r + g + b)) return color;
195
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
196
+ }
197
+ const channels = color.match(/rgba?\(([^)]+)\)/)?.[1];
198
+ if (channels) {
199
+ const [r, g, b] = channels.split(',').map(part => part.trim());
200
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
201
+ }
202
+ return color;
203
+ }
204
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Children","isValidElement","useMemo","StyleSheet","View","LinearGradient","Animated","useAnimatedScrollHandler","useAnimatedStyle","useComposedEventHandler","useDerivedValue","useSharedValue","useCSSVariable","jsx","_jsx","jsxs","_jsxs","DEFAULT_FADE_IN_DISTANCE","ScrollFade","className","size","edges","orientation","color","fadeInDistance","enabled","children","props","offset","contentLength","viewportLength","themeBackground","fadeColor","child","only","horizontal","undefined","childType","type","AnimatedScrollable","createAnimatedComponent","scrollHandler","onScroll","event","contentOffset","contentSize","layoutMeasurement","value","x","y","width","height","onLayout","nativeEvent","layout","onContentSizeChange","startOpacity","Math","min","endOpacity","remaining","max","scrollable","scrollEventThrottle","Fade","opacity","edge","displayName","isStart","position","top","bottom","left","right","style","colors","withAlpha","pointerEvents","start","end","absoluteFill","alpha","startsWith","hex","slice","full","length","split","map","c","join","r","parseInt","g","b","Number","isNaN","channels","match","part","trim"],"sourceRoot":"../../../../src","sources":["components/scroll-fade/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,7 @@ import { Pressable, ScrollView, View } from 'react-native';
5
5
  import { tv } from 'tailwind-variants';
6
6
  import { useCSSVariable } from 'uniwind';
7
7
  import { CheckIcon, ChevronDownIcon } from "../../icons/index.js";
8
+ import { getNativeUI } from "../../native/index.js";
8
9
  import { Text } from "../../primitives/text.js";
9
10
  import { BottomSheet } from "../bottom-sheet/index.js";
10
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -75,18 +76,25 @@ function SelectRoot({
75
76
  placeholder = 'Select an option',
76
77
  title,
77
78
  disabled,
79
+ native,
80
+ nativeAppearance = 'menu',
78
81
  children
79
82
  }) {
80
83
  const [open, setOpen] = useState(false);
81
- const selectedLabel = useMemo(() => {
82
- let label;
84
+ const nativeUI = native ? getNativeUI() : null;
85
+ const options = useMemo(() => {
86
+ const collected = [];
83
87
  Children.forEach(children, child => {
84
- if (/*#__PURE__*/isValidElement(child) && child.props.value === value) {
85
- label = child.props.label;
88
+ if (/*#__PURE__*/isValidElement(child)) {
89
+ collected.push({
90
+ value: child.props.value,
91
+ label: child.props.label
92
+ });
86
93
  }
87
94
  });
88
- return label;
89
- }, [children, value]);
95
+ return collected;
96
+ }, [children]);
97
+ const selectedLabel = useMemo(() => options.find(option => option.value === value)?.label, [options, value]);
90
98
  const context = useMemo(() => ({
91
99
  value,
92
100
  onSelect: next => {
@@ -102,6 +110,27 @@ function SelectRoot({
102
110
  disabled: !!disabled
103
111
  });
104
112
  const chevronColor = useCSSVariable('--color-muted-foreground');
113
+ if (nativeUI) {
114
+ const {
115
+ Host,
116
+ Picker
117
+ } = nativeUI;
118
+ // The native picker has no empty state, so an unset value shows the first
119
+ // option rather than the placeholder.
120
+ return /*#__PURE__*/_jsx(Host, {
121
+ matchContents: true,
122
+ children: /*#__PURE__*/_jsx(Picker, {
123
+ selectedValue: value ?? options[0]?.value ?? '',
124
+ onValueChange: next => onValueChange(next),
125
+ appearance: nativeAppearance,
126
+ enabled: !disabled,
127
+ children: options.map(option => /*#__PURE__*/_jsx(Picker.Item, {
128
+ label: option.label,
129
+ value: option.value
130
+ }, option.value))
131
+ })
132
+ });
133
+ }
105
134
  return /*#__PURE__*/_jsxs(SelectContext.Provider, {
106
135
  value: context,
107
136
  children: [/*#__PURE__*/_jsxs(Pressable, {
@@ -1 +1 @@
1
- {"version":3,"names":["Children","createContext","isValidElement","useContext","useMemo","useState","Pressable","ScrollView","View","tv","useCSSVariable","CheckIcon","ChevronDownIcon","Text","BottomSheet","jsx","_jsx","jsxs","_jsxs","selectVariants","slots","trigger","triggerLabel","placeholder","item","itemLabel","itemIndicator","variants","selected","true","disabled","SelectContext","SelectItem","value","label","context","Error","checkColor","accessibilityRole","accessibilityState","onPress","onSelect","className","children","size","color","SelectRoot","onValueChange","title","open","setOpen","selectedLabel","forEach","child","props","next","placeholderSlot","chevronColor","Provider","expanded","onOpenChange","Content","weight","bounces","Select","Object","assign","Item"],"sourceRoot":"../../../../src","sources":["components/select/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Children","createContext","isValidElement","useContext","useMemo","useState","Pressable","ScrollView","View","tv","useCSSVariable","CheckIcon","ChevronDownIcon","getNativeUI","Text","BottomSheet","jsx","_jsx","jsxs","_jsxs","selectVariants","slots","trigger","triggerLabel","placeholder","item","itemLabel","itemIndicator","variants","selected","true","disabled","SelectContext","SelectItem","value","label","context","Error","checkColor","accessibilityRole","accessibilityState","onPress","onSelect","className","children","size","color","SelectRoot","onValueChange","title","native","nativeAppearance","open","setOpen","nativeUI","options","collected","forEach","child","push","props","selectedLabel","find","option","next","placeholderSlot","chevronColor","Host","Picker","matchContents","selectedValue","appearance","enabled","map","Item","Provider","expanded","onOpenChange","Content","weight","bounces","Select","Object","assign"],"sourceRoot":"../../../../src","sources":["components/select/index.tsx"],"mappings":"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","ignoreList":[]}