panelui-native 0.6.0 → 0.9.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 +1 -1
- package/lib/module/components/accordion/index.js +7 -5
- package/lib/module/components/accordion/index.js.map +1 -1
- package/lib/module/components/alert/index.js +3 -6
- package/lib/module/components/alert/index.js.map +1 -1
- package/lib/module/components/attachment/index.js +219 -0
- package/lib/module/components/attachment/index.js.map +1 -0
- package/lib/module/components/bottom-sheet/index.js +82 -4
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/button/index.js +36 -1
- package/lib/module/components/button/index.js.map +1 -1
- package/lib/module/components/dialog/index.js +6 -2
- package/lib/module/components/dialog/index.js.map +1 -1
- package/lib/module/components/empty-state/index.js +98 -22
- package/lib/module/components/empty-state/index.js.map +1 -1
- package/lib/module/components/inline-select/index.js +171 -46
- package/lib/module/components/inline-select/index.js.map +1 -1
- package/lib/module/components/input/index.js +28 -5
- package/lib/module/components/input/index.js.map +1 -1
- package/lib/module/components/input-group/index.js +0 -1
- package/lib/module/components/input-group/index.js.map +1 -1
- package/lib/module/components/item/index.js +359 -0
- package/lib/module/components/item/index.js.map +1 -0
- package/lib/module/components/label/index.js +5 -3
- package/lib/module/components/label/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +1024 -0
- package/lib/module/components/line-chart/index.js.map +1 -0
- package/lib/module/components/marker/index.js +190 -0
- package/lib/module/components/marker/index.js.map +1 -0
- package/lib/module/components/message/index.js +334 -0
- package/lib/module/components/message/index.js.map +1 -0
- package/lib/module/components/message-scroller/index.js +451 -0
- package/lib/module/components/message-scroller/index.js.map +1 -0
- package/lib/module/components/popover/index.js +500 -0
- package/lib/module/components/popover/index.js.map +1 -0
- package/lib/module/components/radio-group/index.js +104 -16
- package/lib/module/components/radio-group/index.js.map +1 -1
- package/lib/module/components/scroll-fade/index.js +119 -71
- package/lib/module/components/scroll-fade/index.js.map +1 -1
- package/lib/module/components/select/index.js +35 -6
- package/lib/module/components/select/index.js.map +1 -1
- package/lib/module/components/separator/index.js +91 -0
- package/lib/module/components/separator/index.js.map +1 -0
- package/lib/module/components/shimmer/index.js +111 -64
- package/lib/module/components/shimmer/index.js.map +1 -1
- package/lib/module/components/surface/index.js +24 -4
- package/lib/module/components/surface/index.js.map +1 -1
- package/lib/module/components/switch/index.js +20 -1
- package/lib/module/components/switch/index.js.map +1 -1
- package/lib/module/components/toast/index.js +7 -8
- package/lib/module/components/toast/index.js.map +1 -1
- package/lib/module/components/typography/index.js +3 -3
- package/lib/module/hooks/index.js +1 -0
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/use-breakpoint.js +2 -2
- package/lib/module/hooks/use-copy-to-clipboard.js +0 -2
- package/lib/module/hooks/use-copy-to-clipboard.js.map +1 -1
- package/lib/module/hooks/use-keyboard-avoidance.js +120 -0
- package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -0
- package/lib/module/icons/index.js +73 -4
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/index.js +13 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/native/index.js +53 -0
- package/lib/module/native/index.js.map +1 -0
- package/lib/module/primitives/keyboard-avoider.js +40 -0
- package/lib/module/primitives/keyboard-avoider.js.map +1 -0
- package/lib/module/primitives/scrim.js +72 -0
- package/lib/module/primitives/scrim.js.map +1 -0
- package/lib/module/providers/panel-ui-provider.js +24 -4
- package/lib/module/providers/panel-ui-provider.js.map +1 -1
- package/lib/module/theme/use-theme.js +1 -1
- package/lib/typescript/src/components/accordion/index.d.ts +7 -5
- package/lib/typescript/src/components/accordion/index.d.ts.map +1 -1
- package/lib/typescript/src/components/alert/index.d.ts +3 -6
- package/lib/typescript/src/components/alert/index.d.ts.map +1 -1
- package/lib/typescript/src/components/attachment/index.d.ts +93 -0
- package/lib/typescript/src/components/attachment/index.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +27 -2
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/button/index.d.ts +11 -0
- package/lib/typescript/src/components/button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/dialog/index.d.ts +7 -1
- package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/components/empty-state/index.d.ts +156 -7
- package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -1
- package/lib/typescript/src/components/inline-select/index.d.ts +29 -6
- package/lib/typescript/src/components/inline-select/index.d.ts.map +1 -1
- package/lib/typescript/src/components/input/index.d.ts +13 -0
- package/lib/typescript/src/components/input/index.d.ts.map +1 -1
- package/lib/typescript/src/components/input-group/index.d.ts +0 -1
- package/lib/typescript/src/components/input-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/item/index.d.ts +286 -0
- package/lib/typescript/src/components/item/index.d.ts.map +1 -0
- package/lib/typescript/src/components/label/index.d.ts +5 -3
- package/lib/typescript/src/components/label/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts +247 -0
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/marker/index.d.ts +137 -0
- package/lib/typescript/src/components/marker/index.d.ts.map +1 -0
- package/lib/typescript/src/components/message/index.d.ts +177 -0
- package/lib/typescript/src/components/message/index.d.ts.map +1 -0
- package/lib/typescript/src/components/message-scroller/index.d.ts +150 -0
- package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -0
- package/lib/typescript/src/components/popover/index.d.ts +130 -0
- package/lib/typescript/src/components/popover/index.d.ts.map +1 -0
- package/lib/typescript/src/components/radio-group/index.d.ts +32 -0
- package/lib/typescript/src/components/radio-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/scroll-fade/index.d.ts +18 -9
- package/lib/typescript/src/components/scroll-fade/index.d.ts.map +1 -1
- package/lib/typescript/src/components/select/index.d.ts +16 -1
- package/lib/typescript/src/components/select/index.d.ts.map +1 -1
- package/lib/typescript/src/components/separator/index.d.ts +47 -0
- package/lib/typescript/src/components/separator/index.d.ts.map +1 -0
- package/lib/typescript/src/components/shimmer/index.d.ts +38 -20
- package/lib/typescript/src/components/shimmer/index.d.ts.map +1 -1
- package/lib/typescript/src/components/surface/index.d.ts +51 -2
- package/lib/typescript/src/components/surface/index.d.ts.map +1 -1
- package/lib/typescript/src/components/switch/index.d.ts +10 -0
- package/lib/typescript/src/components/switch/index.d.ts.map +1 -1
- package/lib/typescript/src/components/toast/index.d.ts +4 -4
- package/lib/typescript/src/components/toast/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/index.d.ts +1 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-breakpoint.d.ts +2 -2
- package/lib/typescript/src/hooks/use-copy-to-clipboard.d.ts +0 -2
- package/lib/typescript/src/hooks/use-copy-to-clipboard.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts +20 -0
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -0
- package/lib/typescript/src/icons/index.d.ts +10 -4
- package/lib/typescript/src/icons/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +11 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/native/index.d.ts +35 -0
- package/lib/typescript/src/native/index.d.ts.map +1 -0
- package/lib/typescript/src/primitives/keyboard-avoider.d.ts +22 -0
- package/lib/typescript/src/primitives/keyboard-avoider.d.ts.map +1 -0
- package/lib/typescript/src/primitives/scrim.d.ts +21 -0
- package/lib/typescript/src/primitives/scrim.d.ts.map +1 -0
- package/lib/typescript/src/providers/panel-ui-provider.d.ts +1 -1
- package/lib/typescript/src/providers/panel-ui-provider.d.ts.map +1 -1
- package/lib/typescript/src/theme/use-theme.d.ts +1 -1
- package/package.json +16 -3
- package/src/components/accordion/index.tsx +7 -5
- package/src/components/alert/index.tsx +3 -6
- package/src/components/attachment/index.tsx +279 -0
- package/src/components/bottom-sheet/index.tsx +102 -2
- package/src/components/button/index.tsx +52 -0
- package/src/components/dialog/index.tsx +10 -1
- package/src/components/empty-state/index.tsx +64 -19
- package/src/components/inline-select/index.tsx +191 -44
- package/src/components/input/index.tsx +39 -3
- package/src/components/input-group/index.tsx +0 -1
- package/src/components/item/index.tsx +387 -0
- package/src/components/label/index.tsx +5 -3
- package/src/components/line-chart/index.tsx +1224 -0
- package/src/components/marker/index.tsx +194 -0
- package/src/components/message/index.tsx +336 -0
- package/src/components/message-scroller/index.tsx +574 -0
- package/src/components/popover/index.tsx +599 -0
- package/src/components/radio-group/index.tsx +108 -17
- package/src/components/scroll-fade/index.tsx +163 -51
- package/src/components/select/index.tsx +54 -9
- package/src/components/separator/index.tsx +97 -0
- package/src/components/shimmer/index.tsx +151 -58
- package/src/components/surface/index.tsx +32 -5
- package/src/components/switch/index.tsx +27 -1
- package/src/components/toast/index.tsx +7 -8
- package/src/components/typography/index.tsx +3 -3
- package/src/hooks/index.ts +5 -0
- package/src/hooks/use-breakpoint.ts +2 -2
- package/src/hooks/use-copy-to-clipboard.ts +0 -2
- package/src/hooks/use-keyboard-avoidance.ts +140 -0
- package/src/icons/index.tsx +52 -4
- package/src/index.ts +92 -0
- package/src/native/index.ts +79 -0
- package/src/primitives/keyboard-avoider.tsx +49 -0
- package/src/primitives/scrim.tsx +95 -0
- package/src/providers/panel-ui-provider.tsx +30 -9
- package/src/theme/use-theme.ts +1 -1
- package/theme.css +63 -3
|
@@ -1,25 +1,85 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* RadioGroup — one choice from a set.
|
|
5
|
+
*
|
|
6
|
+
* The group owns the value and hands each item its selected state through
|
|
7
|
+
* context, so an item is a thin pressable that reports its own value up and
|
|
8
|
+
* reads selection back down.
|
|
9
|
+
*
|
|
10
|
+
* Two shapes, chosen on the group and inherited by every item: `dot` is the
|
|
11
|
+
* classic label-beside-a-disc row; `card` turns the whole surface into the
|
|
12
|
+
* target — for pickable options where the disc is a confirmation rather than
|
|
13
|
+
* the thing you aim at. The card is the same treatment `Checkbox` offers, so a
|
|
14
|
+
* form mixing single- and multi-select choices reads as one family.
|
|
15
|
+
*
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <RadioGroup value={plan} onValueChange={setPlan} variant="card">
|
|
18
|
+
* <RadioGroup.Item value="pro" label="Pro" description="For growing teams" />
|
|
19
|
+
* <RadioGroup.Item value="max" label="Max" description="Everything, uncapped" />
|
|
20
|
+
* </RadioGroup>
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
import { createContext, forwardRef, useContext, useEffect, useMemo } from 'react';
|
|
4
24
|
import { Pressable, View } from 'react-native';
|
|
5
25
|
import Animated, { useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
26
|
+
import { tv } from 'tailwind-variants';
|
|
6
27
|
import { cn } from "../../utils/cn.js";
|
|
7
28
|
import { Text } from "../../primitives/text.js";
|
|
8
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
30
|
+
const itemVariants = tv({
|
|
31
|
+
slots: {
|
|
32
|
+
row: 'flex-row items-center gap-2.5',
|
|
33
|
+
indicator: 'h-5 w-5 items-center justify-center rounded-full border border-input bg-background',
|
|
34
|
+
label: 'text-sm text-foreground',
|
|
35
|
+
description: 'text-xs text-muted-foreground'
|
|
36
|
+
},
|
|
37
|
+
variants: {
|
|
38
|
+
variant: {
|
|
39
|
+
dot: {},
|
|
40
|
+
card: {
|
|
41
|
+
// The whole surface is the target; the disc moves to the trailing edge
|
|
42
|
+
// as a confirmation of the row, not the affordance for it.
|
|
43
|
+
row: 'w-full items-start justify-between gap-3 rounded-xl border border-border bg-card p-4',
|
|
44
|
+
label: 'text-base font-medium'
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
selected: {
|
|
48
|
+
true: {}
|
|
49
|
+
},
|
|
50
|
+
disabled: {
|
|
51
|
+
true: {
|
|
52
|
+
row: 'opacity-50'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
compoundVariants: [{
|
|
57
|
+
variant: 'card',
|
|
58
|
+
selected: true,
|
|
59
|
+
class: {
|
|
60
|
+
row: 'border-primary bg-accent'
|
|
61
|
+
}
|
|
62
|
+
}],
|
|
63
|
+
defaultVariants: {
|
|
64
|
+
variant: 'dot'
|
|
65
|
+
}
|
|
66
|
+
});
|
|
9
67
|
const RadioGroupContext = /*#__PURE__*/createContext(null);
|
|
10
68
|
const RadioGroupRoot = /*#__PURE__*/forwardRef(({
|
|
11
69
|
className,
|
|
12
70
|
value,
|
|
13
71
|
onValueChange,
|
|
14
72
|
disabled,
|
|
73
|
+
variant = 'dot',
|
|
15
74
|
children,
|
|
16
75
|
...props
|
|
17
76
|
}, ref) => {
|
|
18
77
|
const context = useMemo(() => ({
|
|
19
78
|
value,
|
|
20
79
|
onValueChange,
|
|
21
|
-
disabled
|
|
22
|
-
|
|
80
|
+
disabled,
|
|
81
|
+
variant
|
|
82
|
+
}), [value, onValueChange, disabled, variant]);
|
|
23
83
|
return /*#__PURE__*/_jsx(RadioGroupContext.Provider, {
|
|
24
84
|
value: context,
|
|
25
85
|
children: /*#__PURE__*/_jsx(View, {
|
|
@@ -36,7 +96,9 @@ const RadioGroupItem = /*#__PURE__*/forwardRef(({
|
|
|
36
96
|
className,
|
|
37
97
|
value,
|
|
38
98
|
label,
|
|
99
|
+
description,
|
|
39
100
|
disabled: itemDisabled,
|
|
101
|
+
hideIndicator,
|
|
40
102
|
children
|
|
41
103
|
}, ref) => {
|
|
42
104
|
const context = useContext(RadioGroupContext);
|
|
@@ -45,6 +107,7 @@ const RadioGroupItem = /*#__PURE__*/forwardRef(({
|
|
|
45
107
|
}
|
|
46
108
|
const selected = context.value === value;
|
|
47
109
|
const disabled = itemDisabled || context.disabled;
|
|
110
|
+
const variant = context.variant;
|
|
48
111
|
const progress = useSharedValue(selected ? 1 : 0);
|
|
49
112
|
useEffect(() => {
|
|
50
113
|
progress.value = selected ? withSpring(1, {
|
|
@@ -61,7 +124,39 @@ const RadioGroupItem = /*#__PURE__*/forwardRef(({
|
|
|
61
124
|
scale: progress.value
|
|
62
125
|
}]
|
|
63
126
|
}));
|
|
64
|
-
|
|
127
|
+
const slots = itemVariants({
|
|
128
|
+
variant,
|
|
129
|
+
selected,
|
|
130
|
+
disabled: !!disabled
|
|
131
|
+
});
|
|
132
|
+
const indicator = hideIndicator ? null : /*#__PURE__*/_jsx(View, {
|
|
133
|
+
className: slots.indicator(),
|
|
134
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
135
|
+
style: dotStyle,
|
|
136
|
+
className: "h-2.5 w-2.5 rounded-full bg-primary"
|
|
137
|
+
})
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// The card lays its text out first so the disc sits at the trailing edge;
|
|
141
|
+
// the dot row keeps the classic disc-then-label order.
|
|
142
|
+
const body = variant === 'card' ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
143
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
144
|
+
className: "flex-1 gap-1",
|
|
145
|
+
children: [label ? /*#__PURE__*/_jsx(Text, {
|
|
146
|
+
className: slots.label(),
|
|
147
|
+
children: label
|
|
148
|
+
}) : children, description ? /*#__PURE__*/_jsx(Text, {
|
|
149
|
+
className: slots.description(),
|
|
150
|
+
children: description
|
|
151
|
+
}) : null]
|
|
152
|
+
}), indicator]
|
|
153
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
154
|
+
children: [indicator, label ? /*#__PURE__*/_jsx(Text, {
|
|
155
|
+
className: slots.label(),
|
|
156
|
+
children: label
|
|
157
|
+
}) : children]
|
|
158
|
+
});
|
|
159
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
65
160
|
ref: ref,
|
|
66
161
|
accessibilityRole: "radio",
|
|
67
162
|
accessibilityState: {
|
|
@@ -71,18 +166,11 @@ const RadioGroupItem = /*#__PURE__*/forwardRef(({
|
|
|
71
166
|
accessibilityLabel: label,
|
|
72
167
|
disabled: disabled,
|
|
73
168
|
onPress: () => context.onValueChange(value),
|
|
74
|
-
hitSlop: 8,
|
|
75
|
-
className:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
style: dotStyle,
|
|
80
|
-
className: "h-2.5 w-2.5 rounded-full bg-primary"
|
|
81
|
-
})
|
|
82
|
-
}), label ? /*#__PURE__*/_jsx(Text, {
|
|
83
|
-
className: "text-sm text-foreground",
|
|
84
|
-
children: label
|
|
85
|
-
}) : children]
|
|
169
|
+
hitSlop: variant === 'card' ? undefined : 8,
|
|
170
|
+
className: slots.row({
|
|
171
|
+
className
|
|
172
|
+
}),
|
|
173
|
+
children: body
|
|
86
174
|
});
|
|
87
175
|
});
|
|
88
176
|
RadioGroupItem.displayName = 'RadioGroup.Item';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","forwardRef","useContext","useEffect","useMemo","Pressable","View","Animated","useAnimatedStyle","useSharedValue","withSpring","withTiming","cn","Text","jsx","_jsx","jsxs","_jsxs","RadioGroupContext","RadioGroupRoot","className","value","onValueChange","
|
|
1
|
+
{"version":3,"names":["createContext","forwardRef","useContext","useEffect","useMemo","Pressable","View","Animated","useAnimatedStyle","useSharedValue","withSpring","withTiming","tv","cn","Text","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","itemVariants","slots","row","indicator","label","description","variants","variant","dot","card","selected","true","disabled","compoundVariants","class","defaultVariants","RadioGroupContext","RadioGroupRoot","className","value","onValueChange","children","props","ref","context","Provider","accessibilityRole","displayName","RadioGroupItem","itemDisabled","hideIndicator","Error","progress","damping","stiffness","mass","duration","dotStyle","opacity","transform","scale","style","body","accessibilityState","accessibilityLabel","onPress","hitSlop","undefined","RadioGroup","Object","assign","Item"],"sourceRoot":"../../../../src","sources":["components/radio-group/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* ScrollFade — fades the edges of a scroll container.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* timelines, so the fades are SVG gradients overlaid on each edge, with their
|
|
10
|
-
* opacity following the scroll position.
|
|
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.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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.
|
|
14
13
|
*
|
|
15
14
|
* ```tsx
|
|
16
15
|
* <ScrollFade>
|
|
@@ -18,61 +17,101 @@
|
|
|
18
17
|
* </ScrollFade>
|
|
19
18
|
* ```
|
|
20
19
|
*/
|
|
21
|
-
import { Children,
|
|
22
|
-
import { View } from 'react-native';
|
|
23
|
-
import
|
|
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
24
|
import { useCSSVariable } from 'uniwind';
|
|
25
25
|
|
|
26
26
|
/** Past this many pixels from an edge, that edge's fade is fully shown. */
|
|
27
27
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
28
|
-
const
|
|
28
|
+
const DEFAULT_FADE_IN_DISTANCE = 24;
|
|
29
29
|
export function ScrollFade({
|
|
30
30
|
className,
|
|
31
31
|
size = 48,
|
|
32
32
|
edges = 'both',
|
|
33
|
+
orientation,
|
|
33
34
|
color,
|
|
35
|
+
fadeInDistance = DEFAULT_FADE_IN_DISTANCE,
|
|
36
|
+
enabled = true,
|
|
34
37
|
children,
|
|
35
38
|
...props
|
|
36
39
|
}) {
|
|
37
|
-
const
|
|
38
|
-
const
|
|
40
|
+
const offset = useSharedValue(0);
|
|
41
|
+
const contentLength = useSharedValue(0);
|
|
42
|
+
const viewportLength = useSharedValue(0);
|
|
39
43
|
const themeBackground = useCSSVariable('--color-background');
|
|
40
44
|
const fadeColor = color ?? (typeof themeBackground === 'string' ? themeBackground : '#000000');
|
|
41
45
|
const child = Children.only(children);
|
|
42
|
-
const horizontal = /*#__PURE__*/isValidElement(child)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
+
});
|
|
53
66
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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);
|
|
59
84
|
};
|
|
60
|
-
const
|
|
61
|
-
|
|
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,
|
|
62
96
|
scrollEventThrottle: child.props.scrollEventThrottle ?? 16
|
|
63
97
|
}) : child;
|
|
64
|
-
|
|
65
|
-
|
|
98
|
+
if (!enabled || edges === 'none') {
|
|
99
|
+
return /*#__PURE__*/_jsx(View, {
|
|
100
|
+
...props,
|
|
101
|
+
className: className,
|
|
102
|
+
children: scrollable
|
|
103
|
+
});
|
|
104
|
+
}
|
|
66
105
|
return /*#__PURE__*/_jsxs(View, {
|
|
67
106
|
...props,
|
|
68
107
|
className: className,
|
|
69
|
-
children: [scrollable,
|
|
108
|
+
children: [scrollable, edges !== 'end' ? /*#__PURE__*/_jsx(Fade, {
|
|
70
109
|
color: fadeColor,
|
|
71
110
|
size: size,
|
|
72
111
|
horizontal: horizontal,
|
|
73
112
|
opacity: startOpacity,
|
|
74
113
|
edge: "start"
|
|
75
|
-
}) : null,
|
|
114
|
+
}) : null, edges !== 'start' ? /*#__PURE__*/_jsx(Fade, {
|
|
76
115
|
color: fadeColor,
|
|
77
116
|
size: size,
|
|
78
117
|
horizontal: horizontal,
|
|
@@ -92,7 +131,6 @@ function Fade({
|
|
|
92
131
|
edge
|
|
93
132
|
}) {
|
|
94
133
|
const isStart = edge === 'start';
|
|
95
|
-
const id = `scroll-fade-${edge}-${horizontal ? 'x' : 'y'}`;
|
|
96
134
|
const position = horizontal ? {
|
|
97
135
|
top: 0,
|
|
98
136
|
bottom: 0,
|
|
@@ -112,45 +150,55 @@ function Fade({
|
|
|
112
150
|
bottom: 0
|
|
113
151
|
})
|
|
114
152
|
};
|
|
153
|
+
const style = useAnimatedStyle(() => ({
|
|
154
|
+
opacity: opacity.value
|
|
155
|
+
}));
|
|
115
156
|
|
|
116
|
-
// The gradient runs from the
|
|
157
|
+
// The gradient runs from the edge inwards, so its stops are reversed on the
|
|
117
158
|
// end edge.
|
|
118
|
-
const
|
|
119
|
-
return /*#__PURE__*/_jsx(View, {
|
|
159
|
+
const colors = isStart ? [withAlpha(color, 1), withAlpha(color, 0)] : [withAlpha(color, 0), withAlpha(color, 1)];
|
|
160
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
120
161
|
pointerEvents: "none",
|
|
121
|
-
style: {
|
|
122
|
-
position: 'absolute'
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
stopColor: color,
|
|
139
|
-
stopOpacity: isStart ? 1 : 0
|
|
140
|
-
}), /*#__PURE__*/_jsx(Stop, {
|
|
141
|
-
offset: "1",
|
|
142
|
-
stopColor: color,
|
|
143
|
-
stopOpacity: isStart ? 0 : 1
|
|
144
|
-
})]
|
|
145
|
-
})
|
|
146
|
-
}), /*#__PURE__*/_jsx(Rect, {
|
|
147
|
-
x: "0",
|
|
148
|
-
y: "0",
|
|
149
|
-
width: "100%",
|
|
150
|
-
height: "100%",
|
|
151
|
-
fill: `url(#${id})`
|
|
152
|
-
})]
|
|
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
|
|
153
179
|
})
|
|
154
180
|
});
|
|
155
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
|
+
}
|
|
156
204
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","
|
|
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
|
|
82
|
-
|
|
84
|
+
const nativeUI = native ? getNativeUI() : null;
|
|
85
|
+
const options = useMemo(() => {
|
|
86
|
+
const collected = [];
|
|
83
87
|
Children.forEach(children, child => {
|
|
84
|
-
if (/*#__PURE__*/isValidElement(child)
|
|
85
|
-
|
|
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
|
|
89
|
-
}, [children
|
|
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","
|
|
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":[]}
|