panelui-native 0.81.0 → 0.83.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 (73) hide show
  1. package/lib/module/components/bottom-sheet/index.js +189 -21
  2. package/lib/module/components/bottom-sheet/index.js.map +1 -1
  3. package/lib/module/components/button/index.js +13 -0
  4. package/lib/module/components/button/index.js.map +1 -1
  5. package/lib/module/components/button-group/index.js +3 -0
  6. package/lib/module/components/button-group/index.js.map +1 -1
  7. package/lib/module/components/image-generation/dot-field.js +267 -0
  8. package/lib/module/components/image-generation/dot-field.js.map +1 -0
  9. package/lib/module/components/image-generation/index.js +459 -0
  10. package/lib/module/components/image-generation/index.js.map +1 -0
  11. package/lib/module/components/kpi/index.js +2 -4
  12. package/lib/module/components/kpi/index.js.map +1 -1
  13. package/lib/module/components/menu/index.js +8 -16
  14. package/lib/module/components/menu/index.js.map +1 -1
  15. package/lib/module/components/panelside/index.js +340 -33
  16. package/lib/module/components/panelside/index.js.map +1 -1
  17. package/lib/module/components/select/index.js +127 -23
  18. package/lib/module/components/select/index.js.map +1 -1
  19. package/lib/module/components/slide-button/index.js +610 -0
  20. package/lib/module/components/slide-button/index.js.map +1 -0
  21. package/lib/module/components/slide-button/slide-button-track.js +98 -0
  22. package/lib/module/components/slide-button/slide-button-track.js.map +1 -0
  23. package/lib/module/icons/index.js +553 -1934
  24. package/lib/module/icons/index.js.map +1 -1
  25. package/lib/module/index.js +3 -1
  26. package/lib/module/index.js.map +1 -1
  27. package/lib/module/native/index.js +24 -0
  28. package/lib/module/native/index.js.map +1 -1
  29. package/lib/module/primitives/portal.js +15 -1
  30. package/lib/module/primitives/portal.js.map +1 -1
  31. package/lib/typescript/src/components/bottom-sheet/index.d.ts +17 -1
  32. package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
  33. package/lib/typescript/src/components/button/index.d.ts +12 -0
  34. package/lib/typescript/src/components/button/index.d.ts.map +1 -1
  35. package/lib/typescript/src/components/button-group/index.d.ts +9 -0
  36. package/lib/typescript/src/components/button-group/index.d.ts.map +1 -1
  37. package/lib/typescript/src/components/image-generation/dot-field.d.ts +96 -0
  38. package/lib/typescript/src/components/image-generation/dot-field.d.ts.map +1 -0
  39. package/lib/typescript/src/components/image-generation/index.d.ts +134 -0
  40. package/lib/typescript/src/components/image-generation/index.d.ts.map +1 -0
  41. package/lib/typescript/src/components/kpi/index.d.ts.map +1 -1
  42. package/lib/typescript/src/components/menu/index.d.ts.map +1 -1
  43. package/lib/typescript/src/components/panelside/index.d.ts +194 -10
  44. package/lib/typescript/src/components/panelside/index.d.ts.map +1 -1
  45. package/lib/typescript/src/components/select/index.d.ts +75 -2
  46. package/lib/typescript/src/components/select/index.d.ts.map +1 -1
  47. package/lib/typescript/src/components/slide-button/index.d.ts +317 -0
  48. package/lib/typescript/src/components/slide-button/index.d.ts.map +1 -0
  49. package/lib/typescript/src/components/slide-button/slide-button-track.d.ts +70 -0
  50. package/lib/typescript/src/components/slide-button/slide-button-track.d.ts.map +1 -0
  51. package/lib/typescript/src/icons/index.d.ts +136 -189
  52. package/lib/typescript/src/icons/index.d.ts.map +1 -1
  53. package/lib/typescript/src/index.d.ts +4 -2
  54. package/lib/typescript/src/index.d.ts.map +1 -1
  55. package/lib/typescript/src/native/index.d.ts +26 -0
  56. package/lib/typescript/src/native/index.d.ts.map +1 -1
  57. package/lib/typescript/src/primitives/portal.d.ts.map +1 -1
  58. package/package.json +3 -2
  59. package/src/components/bottom-sheet/index.tsx +223 -20
  60. package/src/components/button/index.tsx +10 -2
  61. package/src/components/button-group/index.tsx +1 -0
  62. package/src/components/image-generation/dot-field.ts +282 -0
  63. package/src/components/image-generation/index.tsx +537 -0
  64. package/src/components/kpi/index.tsx +2 -4
  65. package/src/components/menu/index.tsx +10 -15
  66. package/src/components/panelside/index.tsx +498 -33
  67. package/src/components/select/index.tsx +158 -31
  68. package/src/components/slide-button/index.tsx +681 -0
  69. package/src/components/slide-button/slide-button-track.ts +100 -0
  70. package/src/icons/index.tsx +338 -1327
  71. package/src/index.ts +28 -0
  72. package/src/native/index.ts +45 -0
  73. package/src/primitives/portal.tsx +15 -1
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The dot field's drawing, kept out of the component so it can be checked
5
+ * without a renderer — the same split `progress-button-hold` uses.
6
+ *
7
+ * ## Nothing is built while it is running
8
+ *
9
+ * The field is hundreds of dots and it is on screen for as long as a model
10
+ * takes to answer, on a page that may be showing several at once. So every
11
+ * frame it will ever draw is built when the box is measured, and playing it is
12
+ * handing react-native-svg a string that already exists.
13
+ *
14
+ * Two earlier versions did this the obvious ways and both stalled a page of
15
+ * them on scroll: one rebuilt every dot as a path string on every frame, the
16
+ * other clipped a moving shape of light to a path with hundreds of subpaths in
17
+ * it, which is re-rasterized every time the view is drawn.
18
+ */
19
+
20
+ /** Points between one dot and the next. */
21
+ export const DOT_GAP = 10;
22
+
23
+ /** The dot's radius where the light is not, and where it is strongest. */
24
+ export const DOT_RADIUS = 1;
25
+ export const DOT_LIT_RADIUS = 1.9;
26
+
27
+ /** How visible the resting grid is, under everything. */
28
+ export const DOT_REST_OPACITY = 0.16;
29
+
30
+ /**
31
+ * How visible the lit dots are, together.
32
+ *
33
+ * "Together" is the operative word: they are drawn as two layers fading into
34
+ * one another, and this is what the pair composites to, not what either one
35
+ * carries. {@link crossfadeAlphas} is what holds that true.
36
+ */
37
+ export const LIT_OPACITY = 0.9;
38
+
39
+ /** How many still frames one loop is drawn as. */
40
+ export const FRAMES = 24;
41
+
42
+ /**
43
+ * The most dots the field will draw, whatever box it is given.
44
+ *
45
+ * The grid opens up rather than the count running away: a full-width field on
46
+ * a tablet gets the same picture drawn coarser, which costs the same and looks
47
+ * the same at arm's length.
48
+ */
49
+ const MAX_DOTS = 700;
50
+
51
+ /** How the light moves through the field. */
52
+
53
+ /** The gap this box is drawn at, opened up if the grid would be too dense. */
54
+ export function gapFor(width, height) {
55
+ if (width <= 0 || height <= 0) return DOT_GAP;
56
+ const cells = (width / DOT_GAP + 1) * (height / DOT_GAP + 1);
57
+ return cells > MAX_DOTS ? DOT_GAP * Math.sqrt(cells / MAX_DOTS) : DOT_GAP;
58
+ }
59
+
60
+ /** A circle as an SVG subpath, which is two half arcs. */
61
+ function circle(x, y, r) {
62
+ const d = (r * 2).toFixed(2);
63
+ return `M${(x - r).toFixed(2)},${y.toFixed(2)}a${r},${r} 0 1,0 ${d},0a${r},${r} 0 1,0 -${d},0`;
64
+ }
65
+
66
+ /**
67
+ * Every dot's anchor, in reading order.
68
+ *
69
+ * Laid out inside the box by the widest a dot can be drawn, and counted with
70
+ * `floor` rather than `ceil`, so no part of any dot falls outside it.
71
+ *
72
+ * Counted with `ceil` the grid overhangs by up to half a gap on every side.
73
+ * That is invisible while the light stays near the middle and obvious the
74
+ * moment it reaches an edge — which the scanning band does by design, and a
75
+ * short wide box does simply by being short. The dots then draw outside the
76
+ * card, which looks like the animation has escaped it.
77
+ *
78
+ * The row and column are still centred in whatever is left over, because laid
79
+ * out from the origin the field ends with a strip of nothing down one edge.
80
+ */
81
+ function anchors(width, height) {
82
+ const gap = gapFor(width, height);
83
+ const margin = DOT_LIT_RADIUS;
84
+ const innerWidth = Math.max(0, width - margin * 2);
85
+ const innerHeight = Math.max(0, height - margin * 2);
86
+ const columns = Math.floor(innerWidth / gap) + 1;
87
+ const rows = Math.floor(innerHeight / gap) + 1;
88
+ const offsetX = margin + (innerWidth - (columns - 1) * gap) / 2;
89
+ const offsetY = margin + (innerHeight - (rows - 1) * gap) / 2;
90
+ const out = [];
91
+ for (let row = 0; row < rows; row += 1) {
92
+ for (let column = 0; column < columns; column += 1) {
93
+ out.push([offsetX + column * gap, offsetY + row * gap]);
94
+ }
95
+ }
96
+ return out;
97
+ }
98
+
99
+ /** The resting grid as one path. Drawn once, under the light. */
100
+ export function gridPath(width, height) {
101
+ if (width <= 0 || height <= 0) return '';
102
+ let path = '';
103
+ for (const [x, y] of anchors(width, height)) path += circle(x, y, DOT_RADIUS);
104
+ return path;
105
+ }
106
+
107
+ /** How many dots {@link gridPath} would draw for a box. */
108
+ export function dotCount(width, height) {
109
+ if (width <= 0 || height <= 0) return 0;
110
+ return anchors(width, height).length;
111
+ }
112
+
113
+ /**
114
+ * How strongly a dot at `distance` from the light is lit.
115
+ *
116
+ * Smoothstep rather than a linear ramp: linear gives the light a hard rim,
117
+ * because the eye finds the discontinuity in the first derivative. This one
118
+ * arrives and leaves at zero slope, so the light has no edge.
119
+ */
120
+ export function influenceAt(distance, radius) {
121
+ if (radius <= 0) return 0;
122
+ const proximity = Math.max(0, 1 - distance / radius);
123
+ return proximity * proximity * (3 - 2 * proximity);
124
+ }
125
+
126
+ /**
127
+ * Where the light is at a phase of the loop, and how wide it reaches.
128
+ *
129
+ * `drift` wanders around the middle on a figure-eight: one horizontal pass to
130
+ * two vertical, so the path arrives back where it started and the loop has no
131
+ * seam in it. The amplitudes are small because a light that reaches the corners
132
+ * stops reading as one source.
133
+ *
134
+ * The two frequencies used not to divide into each other, on the reasoning that
135
+ * a path which never closes is one the eye cannot learn. It closes anyway —
136
+ * every animation here restarts at the end of its period — so all that bought
137
+ * was a jump of four normal steps, once a pass. A figure-eight is not a shape
138
+ * anybody follows over four seconds of soft light on a dot grid.
139
+ *
140
+ * `pulse` is a ring leaving the centre, and has expanded past the last dot
141
+ * before it restarts, so it fades out rather than snapping back. `scan` crosses
142
+ * as a band, which is the same maths with the light infinitely tall.
143
+ */
144
+ function lightAt(animation, phase, width, height) {
145
+ const short = Math.min(width, height);
146
+ const turn = phase * Math.PI * 2;
147
+ if (animation === 'pulse') {
148
+ const reach = Math.sqrt(width * width + height * height) / 2;
149
+ return {
150
+ x: width / 2,
151
+ y: height / 2,
152
+ radius: short * 0.3,
153
+ ring: phase * reach
154
+ };
155
+ }
156
+ if (animation === 'scan') {
157
+ // A band: infinitely tall, so only the horizontal distance counts.
158
+ //
159
+ // It starts and ends half a band clear of the edges rather than a whole
160
+ // one — far enough to ramp in and out, near enough that some of it is
161
+ // always on the field. Travelling fully off, the loop spends several
162
+ // frames drawing nothing at all, which reads as the component having
163
+ // stopped rather than as a band that has passed.
164
+ const radius = width * 0.28;
165
+ return {
166
+ x: -radius * 0.5 + phase * (width + radius),
167
+ y: Number.NaN,
168
+ radius,
169
+ ring: 0
170
+ };
171
+ }
172
+ return {
173
+ x: width / 2 + Math.sin(turn) * width * 0.26,
174
+ y: height / 2 + Math.cos(turn * 2) * height * 0.22,
175
+ radius: short * 0.42,
176
+ ring: 0
177
+ };
178
+ }
179
+
180
+ /**
181
+ * The lit dots at one phase of the loop, as a path.
182
+ *
183
+ * Only the dots the light actually reaches are in it — the rest are already
184
+ * drawn by the resting grid underneath, so this is a fraction of the field
185
+ * rather than all of it.
186
+ *
187
+ * `points` is the same grid {@link anchors} would build, passed in by a caller
188
+ * that is about to ask for every frame of a loop. Building it here instead cost
189
+ * a fresh array of several hundred pairs per frame, to arrive at the identical
190
+ * grid twenty-four times over.
191
+ */
192
+ export function litPath(width, height, phase, animation = 'drift', points) {
193
+ if (width <= 0 || height <= 0) return '';
194
+ const light = lightAt(animation, phase, width, height);
195
+ let path = '';
196
+ for (const [x, y] of points ?? anchors(width, height)) {
197
+ const deltaX = x - light.x;
198
+ const deltaY = Number.isNaN(light.y) ? 0 : y - light.y;
199
+ const distance = Math.abs(Math.sqrt(deltaX * deltaX + deltaY * deltaY) - light.ring);
200
+ const influence = influenceAt(distance, light.radius);
201
+ if (influence <= 0.02) continue;
202
+ path += circle(x, y, DOT_RADIUS + influence * (DOT_LIT_RADIUS - DOT_RADIUS));
203
+ }
204
+ return path;
205
+ }
206
+
207
+ /**
208
+ * Every frame of the loop, built once.
209
+ *
210
+ * A still frame the light is somewhere legible in is also what a paused or
211
+ * reduced-motion field shows, so there is no separate code path for holding it.
212
+ */
213
+ export function litFrames(width, height, animation = 'drift') {
214
+ const points = width > 0 && height > 0 ? anchors(width, height) : [];
215
+ return Array.from({
216
+ length: FRAMES
217
+ }, (_unused, index) => litPath(width, height, index / FRAMES, animation, points));
218
+ }
219
+
220
+ /** One pass of the loop, in milliseconds, per animation. */
221
+ export const PERIOD = {
222
+ drift: 4200,
223
+ pulse: 2200,
224
+ scan: 1900
225
+ };
226
+
227
+ /** Which frame a moment falls on. */
228
+ export function frameAt(time, animation) {
229
+ 'worklet';
230
+
231
+ const phase = time % PERIOD[animation] / PERIOD[animation];
232
+ return Math.min(FRAMES - 1, Math.floor(phase * FRAMES));
233
+ }
234
+
235
+ /**
236
+ * Where a moment falls in the loop, as a frame index with its fraction kept.
237
+ *
238
+ * {@link frameAt} rounds this down, and rounding it down is what made the field
239
+ * a flipbook: twenty-four pictures spread over the period, which on the slowest
240
+ * animation is a new one every 175ms however fast the screen refreshes. The
241
+ * fraction is what the two layers cross-fade on, so the light moves at the rate
242
+ * the display can draw rather than the rate the frames were built at.
243
+ */
244
+ export function framePhase(time, animation) {
245
+ 'worklet';
246
+
247
+ return time % PERIOD[animation] / PERIOD[animation] * FRAMES;
248
+ }
249
+
250
+ /**
251
+ * What the outgoing and incoming layers are worth, a fraction `t` of the way
252
+ * from one frame to the next.
253
+ *
254
+ * Not `[1 - t, t]`. The layers are drawn over one another, so a dot lit in both
255
+ * of them composites to `1 - (1-a)(1-b)`, and two half-strength copies of it
256
+ * come to 0.70 rather than 0.90 — the field dips a fifth in the middle of every
257
+ * step, which six steps a second turns into a flicker. So only the outgoing
258
+ * layer ramps, and the incoming one is solved for: whatever leaves the pair at
259
+ * {@link LIT_OPACITY} the whole way across.
260
+ */
261
+ export function crossfadeAlphas(t) {
262
+ 'worklet';
263
+
264
+ const out = LIT_OPACITY * (1 - t);
265
+ return [out, 1 - (1 - LIT_OPACITY) / (1 - out)];
266
+ }
267
+ //# sourceMappingURL=dot-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DOT_GAP","DOT_RADIUS","DOT_LIT_RADIUS","DOT_REST_OPACITY","LIT_OPACITY","FRAMES","MAX_DOTS","gapFor","width","height","cells","Math","sqrt","circle","x","y","r","d","toFixed","anchors","gap","margin","innerWidth","max","innerHeight","columns","floor","rows","offsetX","offsetY","out","row","column","push","gridPath","path","dotCount","length","influenceAt","distance","radius","proximity","lightAt","animation","phase","short","min","turn","PI","reach","ring","Number","NaN","sin","cos","litPath","points","light","deltaX","deltaY","isNaN","abs","influence","litFrames","Array","from","_unused","index","PERIOD","drift","pulse","scan","frameAt","time","framePhase","crossfadeAlphas","t"],"sourceRoot":"../../../../src","sources":["components/image-generation/dot-field.ts"],"mappings":"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","ignoreList":[]}