panelui-native 0.71.0 → 0.73.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 +2 -1
- package/lib/module/components/accordion/index.js +10 -4
- package/lib/module/components/accordion/index.js.map +1 -1
- package/lib/module/components/area-chart/index.js +1 -0
- package/lib/module/components/area-chart/index.js.map +1 -1
- package/lib/module/components/breadcrumb/index.js +2 -1
- package/lib/module/components/breadcrumb/index.js.map +1 -1
- package/lib/module/components/button/index.js +7 -5
- package/lib/module/components/button/index.js.map +1 -1
- package/lib/module/components/carousel/index.js +1 -1
- package/lib/module/components/carousel/index.js.map +1 -1
- package/lib/module/components/chip/index.js +2 -2
- package/lib/module/components/chip/index.js.map +1 -1
- package/lib/module/components/code-block/index.js.map +1 -1
- package/lib/module/components/collapsible/index.js +5 -1
- package/lib/module/components/collapsible/index.js.map +1 -1
- package/lib/module/components/color-picker/index.js.map +1 -1
- package/lib/module/components/fab/index.js +7 -6
- package/lib/module/components/fab/index.js.map +1 -1
- package/lib/module/components/flow/index.js +1 -1
- package/lib/module/components/flow/index.js.map +1 -1
- package/lib/module/components/frame/index.js +2 -2
- package/lib/module/components/frame/index.js.map +1 -1
- package/lib/module/components/grid-item/index.js +2 -2
- package/lib/module/components/grid-item/index.js.map +1 -1
- package/lib/module/components/heatmap-chart/index.js +1 -0
- package/lib/module/components/heatmap-chart/index.js.map +1 -1
- package/lib/module/components/hex-chart/index.js +1 -0
- package/lib/module/components/hex-chart/index.js.map +1 -1
- package/lib/module/components/input-group/index.js +7 -2
- package/lib/module/components/input-group/index.js.map +1 -1
- package/lib/module/components/item/index.js +2 -2
- package/lib/module/components/item/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +1 -0
- package/lib/module/components/line-chart/index.js.map +1 -1
- package/lib/module/components/marker/index.js +2 -2
- package/lib/module/components/marker/index.js.map +1 -1
- package/lib/module/components/marquee/index.js +9 -12
- package/lib/module/components/marquee/index.js.map +1 -1
- package/lib/module/components/marquee/marquee-math.js +39 -0
- package/lib/module/components/marquee/marquee-math.js.map +1 -0
- package/lib/module/components/menu/index.js +11 -3
- package/lib/module/components/menu/index.js.map +1 -1
- package/lib/module/components/pagination/index.js +27 -11
- package/lib/module/components/pagination/index.js.map +1 -1
- package/lib/module/components/panelside/index.js +7 -2
- package/lib/module/components/panelside/index.js.map +1 -1
- package/lib/module/components/planner/index.js +26 -5
- package/lib/module/components/planner/index.js.map +1 -1
- package/lib/module/components/plot/index.js +105 -42
- package/lib/module/components/plot/index.js.map +1 -1
- package/lib/module/components/post/index.js +4 -4
- package/lib/module/components/post/index.js.map +1 -1
- package/lib/module/components/search-bar/index.js +331 -0
- package/lib/module/components/search-bar/index.js.map +1 -0
- package/lib/module/components/table/index.js +3 -4
- package/lib/module/components/table/index.js.map +1 -1
- package/lib/module/components/timeline/index.js +288 -39
- package/lib/module/components/timeline/index.js.map +1 -1
- package/lib/module/components/toggle-button/index.js +1 -1
- package/lib/module/components/toggle-button/index.js.map +1 -1
- package/lib/module/components/tree/index.js +13 -8
- package/lib/module/components/tree/index.js.map +1 -1
- package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/chart.js +50 -7
- package/lib/module/utils/chart.js.map +1 -1
- package/lib/typescript/src/components/accordion/index.d.ts +2 -2
- package/lib/typescript/src/components/accordion/index.d.ts.map +1 -1
- package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/breadcrumb/index.d.ts.map +1 -1
- package/lib/typescript/src/components/button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/code-block/index.d.ts +3 -3
- package/lib/typescript/src/components/code-block/index.d.ts.map +1 -1
- package/lib/typescript/src/components/collapsible/index.d.ts +2 -2
- package/lib/typescript/src/components/collapsible/index.d.ts.map +1 -1
- package/lib/typescript/src/components/color-picker/index.d.ts.map +1 -1
- package/lib/typescript/src/components/fab/index.d.ts +4 -2
- package/lib/typescript/src/components/fab/index.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/input-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/marquee/index.d.ts +1 -1
- package/lib/typescript/src/components/marquee/index.d.ts.map +1 -1
- package/lib/typescript/src/components/marquee/marquee-math.d.ts +21 -0
- package/lib/typescript/src/components/marquee/marquee-math.d.ts.map +1 -0
- package/lib/typescript/src/components/menu/index.d.ts +1 -1
- package/lib/typescript/src/components/menu/index.d.ts.map +1 -1
- package/lib/typescript/src/components/pagination/index.d.ts.map +1 -1
- package/lib/typescript/src/components/panelside/index.d.ts +1 -1
- package/lib/typescript/src/components/panelside/index.d.ts.map +1 -1
- package/lib/typescript/src/components/plan/index.d.ts +2 -2
- package/lib/typescript/src/components/planner/index.d.ts.map +1 -1
- package/lib/typescript/src/components/plot/index.d.ts +59 -5
- package/lib/typescript/src/components/plot/index.d.ts.map +1 -1
- package/lib/typescript/src/components/search-bar/index.d.ts +216 -0
- package/lib/typescript/src/components/search-bar/index.d.ts.map +1 -0
- package/lib/typescript/src/components/timeline/index.d.ts +35 -2
- package/lib/typescript/src/components/timeline/index.d.ts.map +1 -1
- package/lib/typescript/src/components/tree/index.d.ts +3 -4
- package/lib/typescript/src/components/tree/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts +2 -2
- package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/chart.d.ts +28 -3
- package/lib/typescript/src/utils/chart.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/accordion/index.tsx +17 -7
- package/src/components/area-chart/index.tsx +8 -0
- package/src/components/breadcrumb/index.tsx +2 -1
- package/src/components/button/index.tsx +3 -2
- package/src/components/carousel/index.tsx +1 -1
- package/src/components/chip/index.tsx +2 -2
- package/src/components/code-block/index.tsx +3 -3
- package/src/components/collapsible/index.tsx +13 -4
- package/src/components/color-picker/index.tsx +3 -2
- package/src/components/fab/index.tsx +21 -11
- package/src/components/flow/index.tsx +1 -1
- package/src/components/frame/index.tsx +2 -2
- package/src/components/grid-item/index.tsx +2 -2
- package/src/components/heatmap-chart/index.tsx +7 -1
- package/src/components/hex-chart/index.tsx +7 -1
- package/src/components/input-group/index.tsx +7 -2
- package/src/components/item/index.tsx +2 -2
- package/src/components/line-chart/index.tsx +9 -0
- package/src/components/marker/index.tsx +2 -2
- package/src/components/marquee/index.tsx +14 -12
- package/src/components/marquee/marquee-math.ts +37 -0
- package/src/components/menu/index.tsx +11 -3
- package/src/components/pagination/index.tsx +26 -13
- package/src/components/panelside/index.tsx +7 -2
- package/src/components/plan/index.tsx +2 -2
- package/src/components/planner/index.tsx +20 -5
- package/src/components/plot/index.tsx +183 -39
- package/src/components/post/index.tsx +4 -4
- package/src/components/search-bar/index.tsx +436 -0
- package/src/components/table/index.tsx +2 -2
- package/src/components/timeline/index.tsx +335 -39
- package/src/components/toggle-button/index.tsx +1 -1
- package/src/components/tree/index.tsx +17 -12
- package/src/hooks/use-keyboard-avoidance.ts +7 -2
- package/src/index.ts +2 -0
- package/src/utils/chart.ts +66 -7
package/src/utils/chart.ts
CHANGED
|
@@ -264,6 +264,50 @@ export function yOf(value: number, plot: Plot, min: number, max: number): number
|
|
|
264
264
|
return plot.top + plot.height - ((value - min) / span) * plot.height;
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Widens a domain out to round numbers.
|
|
269
|
+
*
|
|
270
|
+
* An axis derived from the data ends wherever the data happened to end, so it
|
|
271
|
+
* gets labelled 34,650 — a number that is true and that nobody was looking for.
|
|
272
|
+
* Rounding the ends out to a step of 1, 2 or 5 times a power of ten gives the
|
|
273
|
+
* axis labels somebody can actually read a value off, and it can only ever add
|
|
274
|
+
* room, never crop.
|
|
275
|
+
*
|
|
276
|
+
* Zero survives: any step divides it, so a baseline pinned there stays there.
|
|
277
|
+
*/
|
|
278
|
+
export function niceDomain(
|
|
279
|
+
min: number,
|
|
280
|
+
max: number,
|
|
281
|
+
ticks = 5
|
|
282
|
+
): [number, number] {
|
|
283
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || max <= min) {
|
|
284
|
+
return [min, max];
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const rough = (max - min) / Math.max(1, ticks);
|
|
288
|
+
const magnitude = 10 ** Math.floor(Math.log10(rough));
|
|
289
|
+
const error = rough / magnitude;
|
|
290
|
+
|
|
291
|
+
/*
|
|
292
|
+
* 1, 2, 5 or 10 times the magnitude — the steps a reader can divide in their
|
|
293
|
+
* head. The thresholds are geometric means rather than the steps themselves,
|
|
294
|
+
* so each candidate wins over the span it is genuinely closest to. Rounding at
|
|
295
|
+
* the steps instead pushes anything above 5 up to a full decade, which turns a
|
|
296
|
+
* top of 31,500 into an axis ending at 40,000 and hands a quarter of the plot
|
|
297
|
+
* to empty space.
|
|
298
|
+
*/
|
|
299
|
+
const step =
|
|
300
|
+
(error >= Math.sqrt(50)
|
|
301
|
+
? 10
|
|
302
|
+
: error >= Math.sqrt(10)
|
|
303
|
+
? 5
|
|
304
|
+
: error >= Math.sqrt(2)
|
|
305
|
+
? 2
|
|
306
|
+
: 1) * magnitude;
|
|
307
|
+
|
|
308
|
+
return [Math.floor(min / step) * step, Math.ceil(max / step) * step];
|
|
309
|
+
}
|
|
310
|
+
|
|
267
311
|
/**
|
|
268
312
|
* A value's x on a *measured* axis, with `min` at the left edge and `max` at
|
|
269
313
|
* the right.
|
|
@@ -356,7 +400,16 @@ export function runsOf(
|
|
|
356
400
|
min: number,
|
|
357
401
|
max: number,
|
|
358
402
|
/** Baselines to stack each point on top of, for a stacked area. */
|
|
359
|
-
baselines?: number[]
|
|
403
|
+
baselines?: number[],
|
|
404
|
+
/**
|
|
405
|
+
* Place points at band centres rather than spreading them edge to edge.
|
|
406
|
+
*
|
|
407
|
+
* A line drawn over columns has to agree with them about where a row sits,
|
|
408
|
+
* and a column owns a slice of the axis rather than a position on it. Spread
|
|
409
|
+
* evenly, the first point lands half a slice left of the bar it describes and
|
|
410
|
+
* every point after it is wrong by the same amount.
|
|
411
|
+
*/
|
|
412
|
+
banded?: boolean
|
|
360
413
|
): ChartPoint[][] {
|
|
361
414
|
'worklet';
|
|
362
415
|
const runs: ChartPoint[][] = [];
|
|
@@ -370,7 +423,8 @@ export function runsOf(
|
|
|
370
423
|
continue;
|
|
371
424
|
}
|
|
372
425
|
const stacked = value + (baselines?.[i] ?? 0);
|
|
373
|
-
|
|
426
|
+
const x = banded ? bandOf(i, values.length, plot) : xOf(i, values.length, plot);
|
|
427
|
+
run.push({ x, y: yOf(stacked, plot, min, max) });
|
|
374
428
|
}
|
|
375
429
|
if (run.length) runs.push(run);
|
|
376
430
|
return runs;
|
|
@@ -404,7 +458,9 @@ export function linePath(
|
|
|
404
458
|
max: number,
|
|
405
459
|
curve: ChartCurve,
|
|
406
460
|
loading: boolean,
|
|
407
|
-
baselines?: number[]
|
|
461
|
+
baselines?: number[],
|
|
462
|
+
/** Place points at band centres, for a line drawn over columns. */
|
|
463
|
+
banded?: boolean
|
|
408
464
|
): string {
|
|
409
465
|
'worklet';
|
|
410
466
|
if (loading || plot.width <= 0) {
|
|
@@ -413,7 +469,7 @@ export function linePath(
|
|
|
413
469
|
const y = plot.top + plot.height / 2;
|
|
414
470
|
return `M${plot.left},${y} L${plot.left + plot.width},${y}`;
|
|
415
471
|
}
|
|
416
|
-
return runsOf(values, plot, min, max, baselines)
|
|
472
|
+
return runsOf(values, plot, min, max, baselines, banded)
|
|
417
473
|
.map((run) => segment(run, curve))
|
|
418
474
|
.join(' ');
|
|
419
475
|
}
|
|
@@ -433,13 +489,15 @@ export function areaPath(
|
|
|
433
489
|
max: number,
|
|
434
490
|
curve: ChartCurve,
|
|
435
491
|
loading: boolean,
|
|
436
|
-
baselines?: number[]
|
|
492
|
+
baselines?: number[],
|
|
493
|
+
/** Place points at band centres, for an area drawn against columns. */
|
|
494
|
+
banded?: boolean
|
|
437
495
|
): string {
|
|
438
496
|
'worklet';
|
|
439
497
|
if (loading || plot.width <= 0) return '';
|
|
440
498
|
|
|
441
499
|
const bottom = plot.top + plot.height;
|
|
442
|
-
const runs = runsOf(values, plot, min, max, baselines);
|
|
500
|
+
const runs = runsOf(values, plot, min, max, baselines, banded);
|
|
443
501
|
|
|
444
502
|
if (!baselines) {
|
|
445
503
|
return runs
|
|
@@ -460,7 +518,8 @@ export function areaPath(
|
|
|
460
518
|
plot,
|
|
461
519
|
min,
|
|
462
520
|
max,
|
|
463
|
-
baselines
|
|
521
|
+
baselines,
|
|
522
|
+
banded
|
|
464
523
|
);
|
|
465
524
|
|
|
466
525
|
return runs
|