panelui-native 0.34.0 → 0.35.2
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 +2 -1
- package/lib/module/components/progress/index.js +64 -24
- package/lib/module/components/progress/index.js.map +1 -1
- package/lib/module/components/swipe/index.js +537 -0
- package/lib/module/components/swipe/index.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/components/progress/index.d.ts +25 -4
- package/lib/typescript/src/components/progress/index.d.ts.map +1 -1
- package/lib/typescript/src/components/swipe/index.d.ts +206 -0
- package/lib/typescript/src/components/swipe/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/progress/index.tsx +93 -25
- package/src/components/swipe/index.tsx +687 -0
- package/src/index.ts +9 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# PanelUI — React Native UI components for Expo, styled with Tailwind CSS
|
|
2
2
|
|
|
3
3
|
**PanelUI** (`panelui-native`) is an accessible, high-performance React Native component
|
|
4
|
-
library for Expo apps.
|
|
4
|
+
library for Expo apps. 76 typed components — buttons, bottom sheets, dialogs, selects,
|
|
5
5
|
toasts, forms — styled with Tailwind CSS v4 and animated on the UI thread with Reanimated.
|
|
6
6
|
Zero native code, so it runs in Expo Go.
|
|
7
7
|
|
|
@@ -222,6 +222,7 @@ you are done. Unstyled text on a white screen means the styles are not reaching
|
|
|
222
222
|
| `Spinner` | Indeterminate loading indicator |
|
|
223
223
|
| `Steps` | Stepper for multi-step flows |
|
|
224
224
|
| `Surface` | Elevated container with a variant ladder |
|
|
225
|
+
| `Swipe` | A row that slides aside to reveal the things you can do to it |
|
|
225
226
|
| `Switch` | Animated on/off toggle |
|
|
226
227
|
| `Table` | Rows and columns that stay lined up, with sortable headers |
|
|
227
228
|
| `Tabs` | Segmented navigation with an animated indicator |
|
|
@@ -62,25 +62,41 @@ const progressVariants = tv({
|
|
|
62
62
|
size: 'md'
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (value
|
|
69
|
-
if (value > 100) return 100;
|
|
65
|
+
/** `value` held inside the range, so a stray number cannot escape the track. */
|
|
66
|
+
function clamp(value, min, max) {
|
|
67
|
+
if (!(value > min)) return min;
|
|
68
|
+
if (value > max) return max;
|
|
70
69
|
return value;
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
/**
|
|
74
|
-
|
|
72
|
+
/**
|
|
73
|
+
* How far along the bar is, 0–1. An empty or inverted range has no meaningful
|
|
74
|
+
* position in it, so it reads as empty rather than dividing by zero.
|
|
75
|
+
*/
|
|
76
|
+
function fractionOf(value, min, max) {
|
|
77
|
+
const span = max - min;
|
|
78
|
+
if (!(span > 0)) return 0;
|
|
79
|
+
return clamp((value - min) / span, 0, 1);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The right-hand caption: an explicit override, an `Intl` rendering, or a
|
|
84
|
+
* rounded percent.
|
|
85
|
+
*
|
|
86
|
+
* A `percent` style is given the fraction, because that is what a percentage
|
|
87
|
+
* of the range means; every other style is given the value, because a currency
|
|
88
|
+
* or a byte count is a quantity and not a proportion.
|
|
89
|
+
*/
|
|
90
|
+
function formatValue(value, fraction, valueLabel, formatOptions) {
|
|
75
91
|
if (valueLabel != null) return valueLabel;
|
|
76
92
|
if (formatOptions) {
|
|
77
93
|
try {
|
|
78
|
-
return new Intl.NumberFormat(undefined, formatOptions).format(
|
|
94
|
+
return new Intl.NumberFormat(undefined, formatOptions).format(formatOptions.style === 'percent' ? fraction : value);
|
|
79
95
|
} catch {
|
|
80
96
|
// Some engines ship a partial Intl; fall through to the plain percent.
|
|
81
97
|
}
|
|
82
98
|
}
|
|
83
|
-
return `${Math.round(
|
|
99
|
+
return `${Math.round(fraction * 100)}%`;
|
|
84
100
|
}
|
|
85
101
|
|
|
86
102
|
/**
|
|
@@ -90,12 +106,20 @@ function formatValue(value, valueLabel, formatOptions) {
|
|
|
90
106
|
*
|
|
91
107
|
* Pass `label` or `showValueLabel` to caption the bar with a header row; the
|
|
92
108
|
* bare track renders when neither is set, so existing call sites are untouched.
|
|
109
|
+
*
|
|
110
|
+
* The value is read against `minValue` / `maxValue`, which default to 0 and
|
|
111
|
+
* 100 — so a percentage needs neither. Set them and the bar speaks in whatever
|
|
112
|
+
* the work is actually counted in: bytes uploaded, seats filled, points
|
|
113
|
+
* scored. Nothing has to be converted to a percent on the way in, and the
|
|
114
|
+
* screen reader is told the real range rather than a derived one.
|
|
93
115
|
*/
|
|
94
116
|
export const Progress = /*#__PURE__*/forwardRef(({
|
|
95
117
|
className,
|
|
96
118
|
indicatorClassName,
|
|
97
119
|
headerClassName,
|
|
98
120
|
value = 0,
|
|
121
|
+
minValue = 0,
|
|
122
|
+
maxValue = 100,
|
|
99
123
|
indeterminate = false,
|
|
100
124
|
label,
|
|
101
125
|
showValueLabel = false,
|
|
@@ -113,20 +137,32 @@ export const Progress = /*#__PURE__*/forwardRef(({
|
|
|
113
137
|
// Yoga mirrors the track; the bar sliding along it is a transform, so it
|
|
114
138
|
// has to be turned around itself.
|
|
115
139
|
const sign = useDirectionSign();
|
|
116
|
-
const
|
|
140
|
+
const target = fractionOf(value, minValue, maxValue);
|
|
141
|
+
const progress = useSharedValue(target);
|
|
117
142
|
const slide = useSharedValue(0);
|
|
118
|
-
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* The loop is tied to `indeterminate` alone. Restarting it whenever the
|
|
146
|
+
* value moved used to leave `withRepeat` cycling from wherever the bar had
|
|
147
|
+
* got to, so a bar that kept receiving values while looping ended up
|
|
148
|
+
* sweeping a shrinking sliver of the track instead of crossing it.
|
|
149
|
+
*/
|
|
119
150
|
useEffect(() => {
|
|
120
|
-
if (indeterminate)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
151
|
+
if (!indeterminate) return undefined;
|
|
152
|
+
slide.value = 0;
|
|
153
|
+
slide.value = withRepeat(withTiming(1, {
|
|
154
|
+
duration: 1100,
|
|
155
|
+
easing: Easing.inOut(Easing.ease)
|
|
156
|
+
}), -1, false);
|
|
157
|
+
return () => cancelAnimation(slide);
|
|
158
|
+
}, [indeterminate, slide]);
|
|
159
|
+
|
|
160
|
+
// The fill follows the value, and picks up from wherever the loop left it
|
|
161
|
+
// when a bar stops being indeterminate mid-flight.
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
if (indeterminate) return;
|
|
127
164
|
progress.value = withSpring(target, SPRING);
|
|
128
|
-
|
|
129
|
-
}, [indeterminate, target, progress, slide]);
|
|
165
|
+
}, [indeterminate, target, progress]);
|
|
130
166
|
const onLayout = event => {
|
|
131
167
|
trackWidth.value = event.nativeEvent.layout.width;
|
|
132
168
|
};
|
|
@@ -148,14 +184,18 @@ export const Progress = /*#__PURE__*/forwardRef(({
|
|
|
148
184
|
// The value label is meaningless while looping, so it is dropped there.
|
|
149
185
|
const showValue = showValueLabel && !indeterminate;
|
|
150
186
|
const hasHeader = label != null || showValue;
|
|
187
|
+
const spoken = formatValue(clamp(value, minValue, maxValue), target, valueLabel, formatOptions);
|
|
151
188
|
const track = /*#__PURE__*/_jsx(View, {
|
|
152
189
|
ref: ref,
|
|
153
190
|
accessibilityRole: "progressbar",
|
|
154
191
|
accessibilityLabel: label,
|
|
155
192
|
accessibilityValue: indeterminate ? undefined : {
|
|
156
|
-
min:
|
|
157
|
-
max:
|
|
158
|
-
now: clamp(value)
|
|
193
|
+
min: minValue,
|
|
194
|
+
max: maxValue,
|
|
195
|
+
now: clamp(value, minValue, maxValue),
|
|
196
|
+
// Without this the range is read as a bare number. `text` is
|
|
197
|
+
// what carries the unit — the percent sign, the currency.
|
|
198
|
+
text: spoken
|
|
159
199
|
},
|
|
160
200
|
className: slots.track({
|
|
161
201
|
className
|
|
@@ -185,7 +225,7 @@ export const Progress = /*#__PURE__*/forwardRef(({
|
|
|
185
225
|
size: "sm",
|
|
186
226
|
muted: true,
|
|
187
227
|
className: cn(label == null && 'ms-auto'),
|
|
188
|
-
children:
|
|
228
|
+
children: spoken
|
|
189
229
|
}) : null]
|
|
190
230
|
}), track]
|
|
191
231
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useEffect","View","Animated","Easing","cancelAnimation","interpolate","useAnimatedStyle","useSharedValue","withRepeat","withSpring","withTiming","tv","useDirectionSign","Text","cn","jsx","_jsx","jsxs","_jsxs","SPRING","damping","stiffness","mass","INDETERMINATE_WIDTH","progressVariants","slots","root","header","track","indicator","variants","color","primary","success","warning","destructive","info","size","sm","md","lg","defaultVariants","clamp","value","formatValue","valueLabel","formatOptions","Intl","NumberFormat","undefined","format","Math","round","Progress","className","indicatorClassName","headerClassName","indeterminate","label","showValueLabel","props","ref","trackWidth","sign","
|
|
1
|
+
{"version":3,"names":["forwardRef","useEffect","View","Animated","Easing","cancelAnimation","interpolate","useAnimatedStyle","useSharedValue","withRepeat","withSpring","withTiming","tv","useDirectionSign","Text","cn","jsx","_jsx","jsxs","_jsxs","SPRING","damping","stiffness","mass","INDETERMINATE_WIDTH","progressVariants","slots","root","header","track","indicator","variants","color","primary","success","warning","destructive","info","size","sm","md","lg","defaultVariants","clamp","value","min","max","fractionOf","span","formatValue","fraction","valueLabel","formatOptions","Intl","NumberFormat","undefined","format","style","Math","round","Progress","className","indicatorClassName","headerClassName","minValue","maxValue","indeterminate","label","showValueLabel","props","ref","trackWidth","sign","target","progress","slide","duration","easing","inOut","ease","onLayout","event","nativeEvent","layout","width","determinateStyle","indeterminateStyle","barWidth","transform","translateX","showValue","hasHeader","spoken","accessibilityRole","accessibilityLabel","accessibilityValue","now","text","children","weight","numberOfLines","muted","displayName"],"sourceRoot":"../../../../src","sources":["components/progress/index.tsx"],"mappings":"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","ignoreList":[]}
|