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.
Files changed (146) hide show
  1. package/README.md +2 -1
  2. package/lib/module/components/accordion/index.js +10 -4
  3. package/lib/module/components/accordion/index.js.map +1 -1
  4. package/lib/module/components/area-chart/index.js +1 -0
  5. package/lib/module/components/area-chart/index.js.map +1 -1
  6. package/lib/module/components/breadcrumb/index.js +2 -1
  7. package/lib/module/components/breadcrumb/index.js.map +1 -1
  8. package/lib/module/components/button/index.js +7 -5
  9. package/lib/module/components/button/index.js.map +1 -1
  10. package/lib/module/components/carousel/index.js +1 -1
  11. package/lib/module/components/carousel/index.js.map +1 -1
  12. package/lib/module/components/chip/index.js +2 -2
  13. package/lib/module/components/chip/index.js.map +1 -1
  14. package/lib/module/components/code-block/index.js.map +1 -1
  15. package/lib/module/components/collapsible/index.js +5 -1
  16. package/lib/module/components/collapsible/index.js.map +1 -1
  17. package/lib/module/components/color-picker/index.js.map +1 -1
  18. package/lib/module/components/fab/index.js +7 -6
  19. package/lib/module/components/fab/index.js.map +1 -1
  20. package/lib/module/components/flow/index.js +1 -1
  21. package/lib/module/components/flow/index.js.map +1 -1
  22. package/lib/module/components/frame/index.js +2 -2
  23. package/lib/module/components/frame/index.js.map +1 -1
  24. package/lib/module/components/grid-item/index.js +2 -2
  25. package/lib/module/components/grid-item/index.js.map +1 -1
  26. package/lib/module/components/heatmap-chart/index.js +1 -0
  27. package/lib/module/components/heatmap-chart/index.js.map +1 -1
  28. package/lib/module/components/hex-chart/index.js +1 -0
  29. package/lib/module/components/hex-chart/index.js.map +1 -1
  30. package/lib/module/components/input-group/index.js +7 -2
  31. package/lib/module/components/input-group/index.js.map +1 -1
  32. package/lib/module/components/item/index.js +2 -2
  33. package/lib/module/components/item/index.js.map +1 -1
  34. package/lib/module/components/line-chart/index.js +1 -0
  35. package/lib/module/components/line-chart/index.js.map +1 -1
  36. package/lib/module/components/marker/index.js +2 -2
  37. package/lib/module/components/marker/index.js.map +1 -1
  38. package/lib/module/components/marquee/index.js +9 -12
  39. package/lib/module/components/marquee/index.js.map +1 -1
  40. package/lib/module/components/marquee/marquee-math.js +39 -0
  41. package/lib/module/components/marquee/marquee-math.js.map +1 -0
  42. package/lib/module/components/menu/index.js +11 -3
  43. package/lib/module/components/menu/index.js.map +1 -1
  44. package/lib/module/components/pagination/index.js +27 -11
  45. package/lib/module/components/pagination/index.js.map +1 -1
  46. package/lib/module/components/panelside/index.js +7 -2
  47. package/lib/module/components/panelside/index.js.map +1 -1
  48. package/lib/module/components/planner/index.js +26 -5
  49. package/lib/module/components/planner/index.js.map +1 -1
  50. package/lib/module/components/plot/index.js +105 -42
  51. package/lib/module/components/plot/index.js.map +1 -1
  52. package/lib/module/components/post/index.js +4 -4
  53. package/lib/module/components/post/index.js.map +1 -1
  54. package/lib/module/components/search-bar/index.js +331 -0
  55. package/lib/module/components/search-bar/index.js.map +1 -0
  56. package/lib/module/components/table/index.js +3 -4
  57. package/lib/module/components/table/index.js.map +1 -1
  58. package/lib/module/components/timeline/index.js +288 -39
  59. package/lib/module/components/timeline/index.js.map +1 -1
  60. package/lib/module/components/toggle-button/index.js +1 -1
  61. package/lib/module/components/toggle-button/index.js.map +1 -1
  62. package/lib/module/components/tree/index.js +13 -8
  63. package/lib/module/components/tree/index.js.map +1 -1
  64. package/lib/module/hooks/use-keyboard-avoidance.js.map +1 -1
  65. package/lib/module/index.js +1 -0
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/utils/chart.js +50 -7
  68. package/lib/module/utils/chart.js.map +1 -1
  69. package/lib/typescript/src/components/accordion/index.d.ts +2 -2
  70. package/lib/typescript/src/components/accordion/index.d.ts.map +1 -1
  71. package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
  72. package/lib/typescript/src/components/breadcrumb/index.d.ts.map +1 -1
  73. package/lib/typescript/src/components/button/index.d.ts.map +1 -1
  74. package/lib/typescript/src/components/code-block/index.d.ts +3 -3
  75. package/lib/typescript/src/components/code-block/index.d.ts.map +1 -1
  76. package/lib/typescript/src/components/collapsible/index.d.ts +2 -2
  77. package/lib/typescript/src/components/collapsible/index.d.ts.map +1 -1
  78. package/lib/typescript/src/components/color-picker/index.d.ts.map +1 -1
  79. package/lib/typescript/src/components/fab/index.d.ts +4 -2
  80. package/lib/typescript/src/components/fab/index.d.ts.map +1 -1
  81. package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
  82. package/lib/typescript/src/components/hex-chart/index.d.ts.map +1 -1
  83. package/lib/typescript/src/components/input-group/index.d.ts.map +1 -1
  84. package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
  85. package/lib/typescript/src/components/marquee/index.d.ts +1 -1
  86. package/lib/typescript/src/components/marquee/index.d.ts.map +1 -1
  87. package/lib/typescript/src/components/marquee/marquee-math.d.ts +21 -0
  88. package/lib/typescript/src/components/marquee/marquee-math.d.ts.map +1 -0
  89. package/lib/typescript/src/components/menu/index.d.ts +1 -1
  90. package/lib/typescript/src/components/menu/index.d.ts.map +1 -1
  91. package/lib/typescript/src/components/pagination/index.d.ts.map +1 -1
  92. package/lib/typescript/src/components/panelside/index.d.ts +1 -1
  93. package/lib/typescript/src/components/panelside/index.d.ts.map +1 -1
  94. package/lib/typescript/src/components/plan/index.d.ts +2 -2
  95. package/lib/typescript/src/components/planner/index.d.ts.map +1 -1
  96. package/lib/typescript/src/components/plot/index.d.ts +59 -5
  97. package/lib/typescript/src/components/plot/index.d.ts.map +1 -1
  98. package/lib/typescript/src/components/search-bar/index.d.ts +216 -0
  99. package/lib/typescript/src/components/search-bar/index.d.ts.map +1 -0
  100. package/lib/typescript/src/components/timeline/index.d.ts +35 -2
  101. package/lib/typescript/src/components/timeline/index.d.ts.map +1 -1
  102. package/lib/typescript/src/components/tree/index.d.ts +3 -4
  103. package/lib/typescript/src/components/tree/index.d.ts.map +1 -1
  104. package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts +2 -2
  105. package/lib/typescript/src/hooks/use-keyboard-avoidance.d.ts.map +1 -1
  106. package/lib/typescript/src/index.d.ts +2 -1
  107. package/lib/typescript/src/index.d.ts.map +1 -1
  108. package/lib/typescript/src/utils/chart.d.ts +28 -3
  109. package/lib/typescript/src/utils/chart.d.ts.map +1 -1
  110. package/package.json +1 -1
  111. package/src/components/accordion/index.tsx +17 -7
  112. package/src/components/area-chart/index.tsx +8 -0
  113. package/src/components/breadcrumb/index.tsx +2 -1
  114. package/src/components/button/index.tsx +3 -2
  115. package/src/components/carousel/index.tsx +1 -1
  116. package/src/components/chip/index.tsx +2 -2
  117. package/src/components/code-block/index.tsx +3 -3
  118. package/src/components/collapsible/index.tsx +13 -4
  119. package/src/components/color-picker/index.tsx +3 -2
  120. package/src/components/fab/index.tsx +21 -11
  121. package/src/components/flow/index.tsx +1 -1
  122. package/src/components/frame/index.tsx +2 -2
  123. package/src/components/grid-item/index.tsx +2 -2
  124. package/src/components/heatmap-chart/index.tsx +7 -1
  125. package/src/components/hex-chart/index.tsx +7 -1
  126. package/src/components/input-group/index.tsx +7 -2
  127. package/src/components/item/index.tsx +2 -2
  128. package/src/components/line-chart/index.tsx +9 -0
  129. package/src/components/marker/index.tsx +2 -2
  130. package/src/components/marquee/index.tsx +14 -12
  131. package/src/components/marquee/marquee-math.ts +37 -0
  132. package/src/components/menu/index.tsx +11 -3
  133. package/src/components/pagination/index.tsx +26 -13
  134. package/src/components/panelside/index.tsx +7 -2
  135. package/src/components/plan/index.tsx +2 -2
  136. package/src/components/planner/index.tsx +20 -5
  137. package/src/components/plot/index.tsx +183 -39
  138. package/src/components/post/index.tsx +4 -4
  139. package/src/components/search-bar/index.tsx +436 -0
  140. package/src/components/table/index.tsx +2 -2
  141. package/src/components/timeline/index.tsx +335 -39
  142. package/src/components/toggle-button/index.tsx +1 -1
  143. package/src/components/tree/index.tsx +17 -12
  144. package/src/hooks/use-keyboard-avoidance.ts +7 -2
  145. package/src/index.ts +2 -0
  146. package/src/utils/chart.ts +66 -7
@@ -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
- run.push({ x: xOf(i, values.length, plot), y: yOf(stacked, plot, min, max) });
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