panelui-native 0.86.1 → 0.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/lib/module/components/animated-badge/index.js +451 -0
- package/lib/module/components/animated-badge/index.js.map +1 -0
- package/lib/module/components/bottom-sheet/index.js +17 -6
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/bubble-chart/index.js +1782 -0
- package/lib/module/components/bubble-chart/index.js.map +1 -0
- package/lib/module/components/feedback-dialog/index.js +474 -0
- package/lib/module/components/feedback-dialog/index.js.map +1 -0
- package/lib/module/components/pyramid-chart/index.js +1143 -0
- package/lib/module/components/pyramid-chart/index.js.map +1 -0
- package/lib/module/components/scroll-blur/index.js +363 -0
- package/lib/module/components/scroll-blur/index.js.map +1 -0
- package/lib/module/components/scroll-canvas/index.js +2 -0
- package/lib/module/components/scroll-canvas/index.js.map +1 -1
- package/lib/module/components/scroll-text/index.js +3 -0
- package/lib/module/components/scroll-text/index.js.map +1 -1
- package/lib/module/components/search-bar/index.js +753 -25
- package/lib/module/components/search-bar/index.js.map +1 -1
- package/lib/module/hooks/use-keyboard-avoidance.js +21 -1
- package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -1
- package/lib/module/hooks/use-reveal-progress.js +21 -1
- package/lib/module/hooks/use-reveal-progress.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/chart.js +24 -0
- package/lib/module/utils/chart.js.map +1 -1
- package/lib/typescript/src/components/animated-badge/index.d.ts +224 -0
- package/lib/typescript/src/components/animated-badge/index.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +1 -15
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bubble-chart/index.d.ts +481 -0
- package/lib/typescript/src/components/bubble-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/feedback-dialog/index.d.ts +156 -0
- package/lib/typescript/src/components/feedback-dialog/index.d.ts.map +1 -0
- package/lib/typescript/src/components/pyramid-chart/index.d.ts +328 -0
- package/lib/typescript/src/components/pyramid-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/scroll-blur/index.d.ts +113 -0
- package/lib/typescript/src/components/scroll-blur/index.d.ts.map +1 -0
- package/lib/typescript/src/components/scroll-canvas/index.d.ts.map +1 -1
- package/lib/typescript/src/components/search-bar/index.d.ts +350 -6
- package/lib/typescript/src/components/search-bar/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-reveal-progress.d.ts +6 -27
- package/lib/typescript/src/hooks/use-reveal-progress.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +6 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/chart.d.ts +14 -0
- package/lib/typescript/src/utils/chart.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/animated-badge/index.tsx +513 -0
- package/src/components/bottom-sheet/index.tsx +23 -8
- package/src/components/bubble-chart/index.tsx +2145 -0
- package/src/components/feedback-dialog/index.tsx +557 -0
- package/src/components/pyramid-chart/index.tsx +1360 -0
- package/src/components/scroll-blur/index.tsx +466 -0
- package/src/components/scroll-canvas/index.tsx +2 -1
- package/src/components/scroll-text/index.tsx +3 -3
- package/src/components/search-bar/index.tsx +933 -45
- package/src/hooks/use-keyboard-avoidance.ts +24 -1
- package/src/hooks/use-reveal-progress.ts +30 -1
- package/src/index.ts +72 -1
- package/src/utils/chart.ts +27 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AnimatedBadge — a status pill whose icon and label roll over when the status
|
|
3
|
+
* changes.
|
|
4
|
+
*
|
|
5
|
+
* A badge that swaps its word between one frame and the next is a badge people
|
|
6
|
+
* miss. The status is the smallest thing on the screen and usually not the
|
|
7
|
+
* thing being looked at, so a change with no movement in it registers as
|
|
8
|
+
* having always said that. Rolling the old glyph out and the new one in is
|
|
9
|
+
* what makes the change itself visible.
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <AnimatedBadge status="loading">Deploying</AnimatedBadge>
|
|
13
|
+
* <AnimatedBadge status="success">Live</AnimatedBadge>
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* ## The roll, and the width
|
|
17
|
+
*
|
|
18
|
+
* The outgoing glyph rises out of the pill and fades; the incoming one comes
|
|
19
|
+
* up from below and settles on a spring, with a slight rotation and scale so
|
|
20
|
+
* it reads as turning over rather than sliding. Both are clipped to the pill,
|
|
21
|
+
* which is what keeps the movement inside the badge instead of over whatever
|
|
22
|
+
* it sits beside.
|
|
23
|
+
*
|
|
24
|
+
* The pill's width springs to the new word rather than jumping, because a
|
|
25
|
+
* badge in a row of them shoves its neighbours as it changes and a jump does
|
|
26
|
+
* that in one frame. Everything runs on the UI thread.
|
|
27
|
+
*
|
|
28
|
+
* ## Which change counts as a change
|
|
29
|
+
*
|
|
30
|
+
* The label is keyed on what it says, so `"Queued"` to `"Building"` rolls and
|
|
31
|
+
* a re-render with the same word does not. Where the label is an element
|
|
32
|
+
* rather than a string, or where two different states share a word, pass
|
|
33
|
+
* `contentKey` — the badge cannot tell those apart on its own, and without a
|
|
34
|
+
* key it either animates on every render or never.
|
|
35
|
+
*
|
|
36
|
+
* ## Reduced motion
|
|
37
|
+
*
|
|
38
|
+
* With the preference on, every part of this is skipped: the glyph and the
|
|
39
|
+
* label cut over, the pill resizes immediately, and the pulse does not run.
|
|
40
|
+
* The badge still says what it says, which is the part that mattered.
|
|
41
|
+
*/
|
|
42
|
+
import { type ReactNode } from 'react';
|
|
43
|
+
import { View, type ViewProps } from 'react-native';
|
|
44
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
45
|
+
export type AnimatedBadgeStatus = 'neutral' | 'info' | 'success' | 'warning' | 'danger' | 'loading';
|
|
46
|
+
export type AnimatedBadgeSize = 'sm' | 'md';
|
|
47
|
+
declare const animatedBadgeVariants: import("tailwind-variants").TVReturnType<{
|
|
48
|
+
status: {
|
|
49
|
+
neutral: {
|
|
50
|
+
root: string;
|
|
51
|
+
label: string;
|
|
52
|
+
pulse: string;
|
|
53
|
+
};
|
|
54
|
+
info: {
|
|
55
|
+
root: string;
|
|
56
|
+
label: string;
|
|
57
|
+
pulse: string;
|
|
58
|
+
};
|
|
59
|
+
success: {
|
|
60
|
+
root: string;
|
|
61
|
+
label: string;
|
|
62
|
+
pulse: string;
|
|
63
|
+
};
|
|
64
|
+
warning: {
|
|
65
|
+
root: string;
|
|
66
|
+
label: string;
|
|
67
|
+
pulse: string;
|
|
68
|
+
};
|
|
69
|
+
danger: {
|
|
70
|
+
root: string;
|
|
71
|
+
label: string;
|
|
72
|
+
pulse: string;
|
|
73
|
+
};
|
|
74
|
+
loading: {
|
|
75
|
+
root: string;
|
|
76
|
+
label: string;
|
|
77
|
+
pulse: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
size: {
|
|
81
|
+
sm: {
|
|
82
|
+
root: string;
|
|
83
|
+
label: string;
|
|
84
|
+
};
|
|
85
|
+
md: {
|
|
86
|
+
root: string;
|
|
87
|
+
label: string;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
}, {
|
|
91
|
+
root: string;
|
|
92
|
+
label: string;
|
|
93
|
+
/** The pulse's fill, behind the content and inside the same clip. */
|
|
94
|
+
pulse: string;
|
|
95
|
+
/** One clipped column per rolling element, so the two move independently. */
|
|
96
|
+
slot: string;
|
|
97
|
+
}, undefined, {
|
|
98
|
+
status: {
|
|
99
|
+
neutral: {
|
|
100
|
+
root: string;
|
|
101
|
+
label: string;
|
|
102
|
+
pulse: string;
|
|
103
|
+
};
|
|
104
|
+
info: {
|
|
105
|
+
root: string;
|
|
106
|
+
label: string;
|
|
107
|
+
pulse: string;
|
|
108
|
+
};
|
|
109
|
+
success: {
|
|
110
|
+
root: string;
|
|
111
|
+
label: string;
|
|
112
|
+
pulse: string;
|
|
113
|
+
};
|
|
114
|
+
warning: {
|
|
115
|
+
root: string;
|
|
116
|
+
label: string;
|
|
117
|
+
pulse: string;
|
|
118
|
+
};
|
|
119
|
+
danger: {
|
|
120
|
+
root: string;
|
|
121
|
+
label: string;
|
|
122
|
+
pulse: string;
|
|
123
|
+
};
|
|
124
|
+
loading: {
|
|
125
|
+
root: string;
|
|
126
|
+
label: string;
|
|
127
|
+
pulse: string;
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
size: {
|
|
131
|
+
sm: {
|
|
132
|
+
root: string;
|
|
133
|
+
label: string;
|
|
134
|
+
};
|
|
135
|
+
md: {
|
|
136
|
+
root: string;
|
|
137
|
+
label: string;
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
}, {
|
|
141
|
+
root: string;
|
|
142
|
+
label: string;
|
|
143
|
+
/** The pulse's fill, behind the content and inside the same clip. */
|
|
144
|
+
pulse: string;
|
|
145
|
+
/** One clipped column per rolling element, so the two move independently. */
|
|
146
|
+
slot: string;
|
|
147
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
148
|
+
status: {
|
|
149
|
+
neutral: {
|
|
150
|
+
root: string;
|
|
151
|
+
label: string;
|
|
152
|
+
pulse: string;
|
|
153
|
+
};
|
|
154
|
+
info: {
|
|
155
|
+
root: string;
|
|
156
|
+
label: string;
|
|
157
|
+
pulse: string;
|
|
158
|
+
};
|
|
159
|
+
success: {
|
|
160
|
+
root: string;
|
|
161
|
+
label: string;
|
|
162
|
+
pulse: string;
|
|
163
|
+
};
|
|
164
|
+
warning: {
|
|
165
|
+
root: string;
|
|
166
|
+
label: string;
|
|
167
|
+
pulse: string;
|
|
168
|
+
};
|
|
169
|
+
danger: {
|
|
170
|
+
root: string;
|
|
171
|
+
label: string;
|
|
172
|
+
pulse: string;
|
|
173
|
+
};
|
|
174
|
+
loading: {
|
|
175
|
+
root: string;
|
|
176
|
+
label: string;
|
|
177
|
+
pulse: string;
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
size: {
|
|
181
|
+
sm: {
|
|
182
|
+
root: string;
|
|
183
|
+
label: string;
|
|
184
|
+
};
|
|
185
|
+
md: {
|
|
186
|
+
root: string;
|
|
187
|
+
label: string;
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
}, {
|
|
191
|
+
root: string;
|
|
192
|
+
label: string;
|
|
193
|
+
/** The pulse's fill, behind the content and inside the same clip. */
|
|
194
|
+
pulse: string;
|
|
195
|
+
/** One clipped column per rolling element, so the two move independently. */
|
|
196
|
+
slot: string;
|
|
197
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
198
|
+
export interface AnimatedBadgeProps extends ViewProps, VariantProps<typeof animatedBadgeVariants> {
|
|
199
|
+
status?: AnimatedBadgeStatus;
|
|
200
|
+
size?: AnimatedBadgeSize;
|
|
201
|
+
/** The word. Changing it rolls the old one out and the new one in. */
|
|
202
|
+
children?: ReactNode;
|
|
203
|
+
/** A glyph of your own, in place of the status's. */
|
|
204
|
+
icon?: ReactNode;
|
|
205
|
+
/** Whether a glyph is drawn at all. */
|
|
206
|
+
showIcon?: boolean;
|
|
207
|
+
/**
|
|
208
|
+
* A slow swell behind the content, for a status that is still happening.
|
|
209
|
+
* On by default while `status` is `loading`, and off otherwise — pass it
|
|
210
|
+
* explicitly for a state of your own that is also still running.
|
|
211
|
+
*/
|
|
212
|
+
pulse?: boolean;
|
|
213
|
+
/**
|
|
214
|
+
* What counts as a change, when the label cannot say. The label is keyed on
|
|
215
|
+
* its own text, so this is only needed where it is an element rather than a
|
|
216
|
+
* string, or where two states share a word.
|
|
217
|
+
*/
|
|
218
|
+
contentKey?: string | number;
|
|
219
|
+
className?: string;
|
|
220
|
+
labelClassName?: string;
|
|
221
|
+
}
|
|
222
|
+
export declare const AnimatedBadge: import("react").ForwardRefExoticComponent<AnimatedBadgeProps & import("react").RefAttributes<View>>;
|
|
223
|
+
export {};
|
|
224
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/animated-badge/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAapD,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAqB1D,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAevB,qEAAqE;;IAErE,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAF7E,qEAAqE;;IAErE,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAF7E,qEAAqE;;IAErE,6EAA6E;;2CA6C/E,CAAC;AA8BH,MAAM,WAAW,kBACf,SAAQ,SAAS,EACf,YAAY,CAAC,OAAO,qBAAqB,CAAC;IAC5C,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qDAAqD;IACrD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,qGA+IzB,CAAC"}
|
|
@@ -146,20 +146,6 @@ export interface BottomSheetBodyProps extends Omit<ComponentProps<typeof Animate
|
|
|
146
146
|
className?: string;
|
|
147
147
|
children?: ReactNode;
|
|
148
148
|
}
|
|
149
|
-
/**
|
|
150
|
-
* The scrolling part of a sized sheet.
|
|
151
|
-
*
|
|
152
|
-
* A plain `ScrollView` works here too, but only one of the two gestures can
|
|
153
|
-
* win a given drag and neither knows about the other, so the list and the
|
|
154
|
-
* sheet fight over every downward swipe. This one reports where it is
|
|
155
|
-
* scrolled to, which is what lets the sheet hold off until the list has run
|
|
156
|
-
* out — pull down on a list at its top and the sheet comes with you, pull
|
|
157
|
-
* down anywhere else and the list scrolls.
|
|
158
|
-
*/
|
|
159
|
-
declare function BottomSheetBody({ className, children, onScroll, ...props }: BottomSheetBodyProps): import("react").JSX.Element;
|
|
160
|
-
declare namespace BottomSheetBody {
|
|
161
|
-
var displayName: string;
|
|
162
|
-
}
|
|
163
149
|
export interface BottomSheetFooterProps extends ViewProps {
|
|
164
150
|
className?: string;
|
|
165
151
|
children?: ReactNode;
|
|
@@ -177,7 +163,7 @@ export declare const BottomSheet: typeof BottomSheetRoot & {
|
|
|
177
163
|
Trigger: typeof BottomSheetTrigger;
|
|
178
164
|
Content: typeof BottomSheetContent;
|
|
179
165
|
Header: typeof BottomSheetHeader;
|
|
180
|
-
Body:
|
|
166
|
+
Body: import("react").ForwardRefExoticComponent<BottomSheetBodyProps & import("react").RefAttributes<never>>;
|
|
181
167
|
Footer: typeof BottomSheetFooter;
|
|
182
168
|
};
|
|
183
169
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/bottom-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/bottom-sheet/index.tsx"],"names":[],"mappings":"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"}
|