panelui-native 0.62.0 → 0.65.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 +5 -0
- package/lib/module/components/area-chart/index.js +14 -4
- package/lib/module/components/area-chart/index.js.map +1 -1
- package/lib/module/components/badge/index.js +1 -1
- package/lib/module/components/badge/index.js.map +1 -1
- package/lib/module/components/bar-chart/index.js +53 -6
- package/lib/module/components/bar-chart/index.js.map +1 -1
- package/lib/module/components/bottom-sheet/index.js +2 -2
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/button/index.js +19 -9
- package/lib/module/components/button/index.js.map +1 -1
- package/lib/module/components/candlestick-chart/index.js +14 -4
- package/lib/module/components/candlestick-chart/index.js.map +1 -1
- package/lib/module/components/card/index.js +26 -1
- package/lib/module/components/card/index.js.map +1 -1
- package/lib/module/components/carousel/index.js +28 -14
- package/lib/module/components/carousel/index.js.map +1 -1
- package/lib/module/components/checkbox/index.js +2 -3
- package/lib/module/components/checkbox/index.js.map +1 -1
- package/lib/module/components/dialog/index.js +51 -5
- package/lib/module/components/dialog/index.js.map +1 -1
- package/lib/module/components/drawer/index.js +2 -2
- package/lib/module/components/drawer/index.js.map +1 -1
- package/lib/module/components/fab/index.js +4 -3
- package/lib/module/components/fab/index.js.map +1 -1
- package/lib/module/components/field/index.js +41 -6
- package/lib/module/components/field/index.js.map +1 -1
- package/lib/module/components/flow/flow-accessibility.js +84 -0
- package/lib/module/components/flow/flow-accessibility.js.map +1 -0
- package/lib/module/components/flow/index.js +100 -39
- package/lib/module/components/flow/index.js.map +1 -1
- package/lib/module/components/form/use-form.js +93 -66
- package/lib/module/components/form/use-form.js.map +1 -1
- package/lib/module/components/heatmap-chart/index.js +2 -2
- package/lib/module/components/heatmap-chart/index.js.map +1 -1
- package/lib/module/components/hex-chart/index.js +4 -4
- package/lib/module/components/hex-chart/index.js.map +1 -1
- package/lib/module/components/kpi/index.js +3 -1
- package/lib/module/components/kpi/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +17 -7
- package/lib/module/components/line-chart/index.js.map +1 -1
- package/lib/module/components/map/index.js +71 -8
- package/lib/module/components/map/index.js.map +1 -1
- package/lib/module/components/map/map-accessibility.js +20 -0
- package/lib/module/components/map/map-accessibility.js.map +1 -0
- package/lib/module/components/map/maplibre.js.map +1 -1
- package/lib/module/components/menu/index.js +4 -1
- package/lib/module/components/menu/index.js.map +1 -1
- package/lib/module/components/number-input/index.js +1 -23
- package/lib/module/components/number-input/index.js.map +1 -1
- package/lib/module/components/number-input/number-input-math.js +44 -0
- package/lib/module/components/number-input/number-input-math.js.map +1 -0
- package/lib/module/components/pie-chart/index.js +2 -2
- package/lib/module/components/pie-chart/index.js.map +1 -1
- package/lib/module/components/plot/index.js +1329 -0
- package/lib/module/components/plot/index.js.map +1 -0
- package/lib/module/components/polar-area-chart/index.js +2 -2
- package/lib/module/components/polar-area-chart/index.js.map +1 -1
- package/lib/module/components/radar-chart/index.js +14 -4
- package/lib/module/components/radar-chart/index.js.map +1 -1
- package/lib/module/components/radio-group/index.js +1 -2
- package/lib/module/components/radio-group/index.js.map +1 -1
- package/lib/module/components/ring-chart/index.js +2 -2
- package/lib/module/components/ring-chart/index.js.map +1 -1
- package/lib/module/components/section-rail/index.js +120 -15
- package/lib/module/components/section-rail/index.js.map +1 -1
- package/lib/module/components/selection-mode/index.js +129 -18
- package/lib/module/components/selection-mode/index.js.map +1 -1
- package/lib/module/components/sortable/index.js +20 -60
- package/lib/module/components/sortable/index.js.map +1 -1
- package/lib/module/components/sortable/reorder.js +63 -0
- package/lib/module/components/sortable/reorder.js.map +1 -0
- package/lib/module/components/swipe/index.js +4 -4
- package/lib/module/components/swipe/index.js.map +1 -1
- package/lib/module/components/switch/index.js +36 -3
- package/lib/module/components/switch/index.js.map +1 -1
- package/lib/module/components/time-picker/accessibility.js +21 -0
- package/lib/module/components/time-picker/accessibility.js.map +1 -0
- package/lib/module/components/time-picker/index.js +34 -8
- package/lib/module/components/time-picker/index.js.map +1 -1
- package/lib/module/components/waterfall-chart/index.js +1325 -0
- package/lib/module/components/waterfall-chart/index.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/primitives/modal-isolation-store.js +29 -0
- package/lib/module/primitives/modal-isolation-store.js.map +1 -0
- package/lib/module/primitives/portal.js +36 -4
- package/lib/module/primitives/portal.js.map +1 -1
- package/lib/module/providers/panel-ui-provider.js +27 -6
- package/lib/module/providers/panel-ui-provider.js.map +1 -1
- package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/badge/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/candlestick-chart/index.d.ts +6 -3
- package/lib/typescript/src/components/candlestick-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/card/index.d.ts +48 -1
- package/lib/typescript/src/components/card/index.d.ts.map +1 -1
- package/lib/typescript/src/components/carousel/index.d.ts +1 -1
- package/lib/typescript/src/components/carousel/index.d.ts.map +1 -1
- package/lib/typescript/src/components/checkbox/index.d.ts.map +1 -1
- package/lib/typescript/src/components/dialog/index.d.ts +47 -2
- package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/components/fab/index.d.ts.map +1 -1
- package/lib/typescript/src/components/field/index.d.ts +8 -1
- package/lib/typescript/src/components/field/index.d.ts.map +1 -1
- package/lib/typescript/src/components/flow/flow-accessibility.d.ts +49 -0
- package/lib/typescript/src/components/flow/flow-accessibility.d.ts.map +1 -0
- package/lib/typescript/src/components/flow/index.d.ts +14 -2
- package/lib/typescript/src/components/flow/index.d.ts.map +1 -1
- package/lib/typescript/src/components/form/use-form.d.ts.map +1 -1
- package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/hex-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/kpi/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/map/index.d.ts +13 -5
- package/lib/typescript/src/components/map/index.d.ts.map +1 -1
- package/lib/typescript/src/components/map/map-accessibility.d.ts +19 -0
- package/lib/typescript/src/components/map/map-accessibility.d.ts.map +1 -0
- package/lib/typescript/src/components/map/maplibre.d.ts +2 -0
- package/lib/typescript/src/components/map/maplibre.d.ts.map +1 -1
- package/lib/typescript/src/components/menu/index.d.ts.map +1 -1
- package/lib/typescript/src/components/number-input/index.d.ts.map +1 -1
- package/lib/typescript/src/components/number-input/number-input-math.d.ts +9 -0
- package/lib/typescript/src/components/number-input/number-input-math.d.ts.map +1 -0
- package/lib/typescript/src/components/plot/index.d.ts +471 -0
- package/lib/typescript/src/components/plot/index.d.ts.map +1 -0
- package/lib/typescript/src/components/radar-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/radio-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/section-rail/index.d.ts +8 -1
- package/lib/typescript/src/components/section-rail/index.d.ts.map +1 -1
- package/lib/typescript/src/components/selection-mode/index.d.ts +82 -6
- package/lib/typescript/src/components/selection-mode/index.d.ts.map +1 -1
- package/lib/typescript/src/components/sortable/index.d.ts.map +1 -1
- package/lib/typescript/src/components/sortable/reorder.d.ts +14 -0
- package/lib/typescript/src/components/sortable/reorder.d.ts.map +1 -0
- package/lib/typescript/src/components/swipe/index.d.ts.map +1 -1
- package/lib/typescript/src/components/switch/index.d.ts +3 -3
- package/lib/typescript/src/components/switch/index.d.ts.map +1 -1
- package/lib/typescript/src/components/time-picker/accessibility.d.ts +10 -0
- package/lib/typescript/src/components/time-picker/accessibility.d.ts.map +1 -0
- package/lib/typescript/src/components/time-picker/index.d.ts.map +1 -1
- package/lib/typescript/src/components/waterfall-chart/index.d.ts +379 -0
- package/lib/typescript/src/components/waterfall-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/modal-isolation-store.d.ts +10 -0
- package/lib/typescript/src/primitives/modal-isolation-store.d.ts.map +1 -0
- package/lib/typescript/src/primitives/portal.d.ts +6 -0
- package/lib/typescript/src/primitives/portal.d.ts.map +1 -1
- package/lib/typescript/src/providers/panel-ui-provider.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/components/area-chart/index.tsx +14 -4
- package/src/components/badge/index.tsx +4 -1
- package/src/components/bar-chart/index.tsx +54 -7
- package/src/components/bottom-sheet/index.tsx +3 -3
- package/src/components/button/index.tsx +15 -21
- package/src/components/candlestick-chart/index.tsx +20 -7
- package/src/components/card/index.tsx +32 -7
- package/src/components/carousel/index.tsx +42 -20
- package/src/components/checkbox/index.tsx +1 -2
- package/src/components/dialog/index.tsx +58 -5
- package/src/components/drawer/index.tsx +3 -3
- package/src/components/fab/index.tsx +8 -12
- package/src/components/field/index.tsx +52 -10
- package/src/components/flow/flow-accessibility.ts +109 -0
- package/src/components/flow/index.tsx +162 -50
- package/src/components/form/use-form.ts +101 -65
- package/src/components/heatmap-chart/index.tsx +2 -3
- package/src/components/hex-chart/index.tsx +4 -5
- package/src/components/kpi/index.tsx +3 -1
- package/src/components/line-chart/index.tsx +17 -6
- package/src/components/map/index.tsx +110 -7
- package/src/components/map/map-accessibility.ts +41 -0
- package/src/components/map/maplibre.ts +2 -0
- package/src/components/menu/index.tsx +4 -1
- package/src/components/number-input/index.tsx +1 -26
- package/src/components/number-input/number-input-math.ts +50 -0
- package/src/components/pie-chart/index.tsx +2 -2
- package/src/components/plot/index.tsx +1565 -0
- package/src/components/polar-area-chart/index.tsx +2 -2
- package/src/components/radar-chart/index.tsx +14 -4
- package/src/components/radio-group/index.tsx +1 -2
- package/src/components/ring-chart/index.tsx +2 -2
- package/src/components/section-rail/index.tsx +133 -14
- package/src/components/selection-mode/index.tsx +163 -26
- package/src/components/sortable/index.tsx +27 -69
- package/src/components/sortable/reorder.ts +88 -0
- package/src/components/swipe/index.tsx +7 -4
- package/src/components/switch/index.tsx +42 -6
- package/src/components/time-picker/accessibility.ts +24 -0
- package/src/components/time-picker/index.tsx +48 -2
- package/src/components/waterfall-chart/index.tsx +1589 -0
- package/src/index.ts +69 -0
- package/src/primitives/modal-isolation-store.ts +31 -0
- package/src/primitives/portal.tsx +34 -4
- package/src/providers/panel-ui-provider.tsx +41 -9
- package/theme.css +54 -3
|
@@ -34,6 +34,7 @@ import { AnimatedPressable } from '../../primitives/animated-pressable';
|
|
|
34
34
|
import { Text } from '../../primitives/text';
|
|
35
35
|
import { selectionTick } from '../../utils/haptics';
|
|
36
36
|
import { Label } from '../label';
|
|
37
|
+
import { normalize, precisionOf } from './number-input-math';
|
|
37
38
|
|
|
38
39
|
/** Wait before a held button starts repeating — a tap must not trip it. */
|
|
39
40
|
const REPEAT_DELAY = 400;
|
|
@@ -156,32 +157,6 @@ export interface NumberInputProps
|
|
|
156
157
|
haptics?: boolean;
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
/** Decimals implied by `step`, so display and math round to the same place. */
|
|
160
|
-
function precisionOf(step: number): number {
|
|
161
|
-
if (!isFinite(step)) return 0;
|
|
162
|
-
const s = String(step);
|
|
163
|
-
const dot = s.indexOf('.');
|
|
164
|
-
return dot === -1 ? 0 : s.length - dot - 1;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function clamp(value: number, min: number, max: number): number {
|
|
168
|
-
return Math.min(Math.max(value, min), max);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Snaps to the nearest step from a finite base (or 0 when `min` is open), then
|
|
173
|
-
* rounds to the step's precision so 0.1 + 0.2 does not drift to 0.30000004.
|
|
174
|
-
*/
|
|
175
|
-
function normalize(value: number, min: number, max: number, step: number): number {
|
|
176
|
-
const base = isFinite(min) ? min : 0;
|
|
177
|
-
const snapped = isFinite(step) && step > 0
|
|
178
|
-
? Math.round((value - base) / step) * step + base
|
|
179
|
-
: value;
|
|
180
|
-
const p = precisionOf(step);
|
|
181
|
-
const factor = 10 ** p;
|
|
182
|
-
return clamp(Math.round(snapped * factor) / factor, min, max);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
160
|
/**
|
|
186
161
|
* A number stepped by buttons or typed by hand, reconciled to one clamped,
|
|
187
162
|
* step-snapped value. See the file header for why it keeps both affordances.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** JavaScript numbers carry about fifteen reliable decimal digits. */
|
|
2
|
+
const MAX_DECIMAL_PRECISION = 15;
|
|
3
|
+
|
|
4
|
+
/** Decimals `step` implies, before the reliable-digits ceiling is applied. */
|
|
5
|
+
function requestedPrecision(step: number): number {
|
|
6
|
+
if (!Number.isFinite(step)) return 0;
|
|
7
|
+
|
|
8
|
+
const [coefficient = '', exponentText] = Math.abs(step).toString().toLowerCase().split('e');
|
|
9
|
+
const decimals = coefficient.split('.')[1]?.length ?? 0;
|
|
10
|
+
const exponent = exponentText === undefined ? 0 : Number(exponentText);
|
|
11
|
+
|
|
12
|
+
return Math.max(0, decimals - exponent);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Decimals implied by `step`, including numbers written with an exponent. */
|
|
16
|
+
export function precisionOf(step: number): number {
|
|
17
|
+
return Math.min(MAX_DECIMAL_PRECISION, requestedPrecision(step));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function clamp(value: number, min: number, max: number): number {
|
|
21
|
+
return Math.min(Math.max(value, min), max);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Snaps to the nearest step from a finite base, then clears binary drift at
|
|
26
|
+
* the step's decimal precision.
|
|
27
|
+
*/
|
|
28
|
+
export function normalize(value: number, min: number, max: number, step: number): number {
|
|
29
|
+
const base = Number.isFinite(min) ? min : 0;
|
|
30
|
+
const offset = (value - base) / step;
|
|
31
|
+
const snapped =
|
|
32
|
+
Number.isFinite(step) && step > 0 && Number.isFinite(offset)
|
|
33
|
+
? Math.round(offset) * step + base
|
|
34
|
+
: value;
|
|
35
|
+
|
|
36
|
+
// A step finer than the reliable-digit ceiling cannot be tidied at its own
|
|
37
|
+
// precision: rounding at the ceiling instead lands on zero and takes the
|
|
38
|
+
// value with it. The snap already placed it on the step, so leave it there.
|
|
39
|
+
if (requestedPrecision(step) > MAX_DECIMAL_PRECISION) return clamp(snapped, min, max);
|
|
40
|
+
|
|
41
|
+
const precision = precisionOf(step);
|
|
42
|
+
const factor = 10 ** precision;
|
|
43
|
+
const scaled = snapped * factor;
|
|
44
|
+
// Keep the established rounding path while it is safe. toFixed avoids
|
|
45
|
+
// turning a finite large value into Infinity when scaling would overflow.
|
|
46
|
+
const rounded = Number.isFinite(scaled)
|
|
47
|
+
? Math.round(scaled) / factor
|
|
48
|
+
: Number(snapped.toFixed(precision));
|
|
49
|
+
return clamp(rounded, min, max);
|
|
50
|
+
}
|
|
@@ -206,7 +206,7 @@ const PieChartRoot = forwardRef<PieChartHandle, PieChartProps>(function PieChart
|
|
|
206
206
|
endAngle = 360,
|
|
207
207
|
padAngle = 0,
|
|
208
208
|
minAngle = 0,
|
|
209
|
-
animationDuration =
|
|
209
|
+
animationDuration = 620,
|
|
210
210
|
status = 'ready',
|
|
211
211
|
activeIndex: activeIndexProp,
|
|
212
212
|
onActiveIndexChange,
|
|
@@ -290,7 +290,7 @@ const PieChartRoot = forwardRef<PieChartHandle, PieChartProps>(function PieChart
|
|
|
290
290
|
reveal.value = 0;
|
|
291
291
|
reveal.value = withTiming(1, {
|
|
292
292
|
duration: animationDuration,
|
|
293
|
-
easing: Easing.
|
|
293
|
+
easing: Easing.out(Easing.cubic),
|
|
294
294
|
});
|
|
295
295
|
},
|
|
296
296
|
[reducedMotion, animationDuration, reveal]
|