panelui-native 0.66.1 → 0.68.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 (129) hide show
  1. package/README.md +21 -1
  2. package/lib/module/components/area-chart/index.js +18 -1
  3. package/lib/module/components/area-chart/index.js.map +1 -1
  4. package/lib/module/components/bar-chart/index.js +18 -1
  5. package/lib/module/components/bar-chart/index.js.map +1 -1
  6. package/lib/module/components/candlestick-chart/index.js +18 -1
  7. package/lib/module/components/candlestick-chart/index.js.map +1 -1
  8. package/lib/module/components/form/index.js +7 -5
  9. package/lib/module/components/form/index.js.map +1 -1
  10. package/lib/module/components/form/typed-form.js +11 -0
  11. package/lib/module/components/form/typed-form.js.map +1 -0
  12. package/lib/module/components/form/use-form.js +4 -0
  13. package/lib/module/components/form/use-form.js.map +1 -1
  14. package/lib/module/components/heatmap-chart/index.js +27 -1
  15. package/lib/module/components/heatmap-chart/index.js.map +1 -1
  16. package/lib/module/components/line-chart/index.js +18 -1
  17. package/lib/module/components/line-chart/index.js.map +1 -1
  18. package/lib/module/components/message-scroller/index.js +172 -10
  19. package/lib/module/components/message-scroller/index.js.map +1 -1
  20. package/lib/module/components/message-scroller/message-scroller-math.js +23 -0
  21. package/lib/module/components/message-scroller/message-scroller-math.js.map +1 -1
  22. package/lib/module/components/meter/index.js +250 -0
  23. package/lib/module/components/meter/index.js.map +1 -0
  24. package/lib/module/components/meter/meter-scale.js +88 -0
  25. package/lib/module/components/meter/meter-scale.js.map +1 -0
  26. package/lib/module/components/planner/index.js +714 -0
  27. package/lib/module/components/planner/index.js.map +1 -0
  28. package/lib/module/components/planner/planner-entries.js +124 -0
  29. package/lib/module/components/planner/planner-entries.js.map +1 -0
  30. package/lib/module/components/radar-chart/index.js +18 -1
  31. package/lib/module/components/radar-chart/index.js.map +1 -1
  32. package/lib/module/components/scatter-chart/index.js +18 -1
  33. package/lib/module/components/scatter-chart/index.js.map +1 -1
  34. package/lib/module/components/skeleton/index.js +45 -7
  35. package/lib/module/components/skeleton/index.js.map +1 -1
  36. package/lib/module/components/spinner/index.js +63 -14
  37. package/lib/module/components/spinner/index.js.map +1 -1
  38. package/lib/module/components/time-picker/index.js +46 -21
  39. package/lib/module/components/time-picker/index.js.map +1 -1
  40. package/lib/module/components/time-picker/ruler-window.js +25 -0
  41. package/lib/module/components/time-picker/ruler-window.js.map +1 -0
  42. package/lib/module/hooks/breakpoint-contract.js +29 -0
  43. package/lib/module/hooks/breakpoint-contract.js.map +1 -0
  44. package/lib/module/hooks/index.js +1 -1
  45. package/lib/module/hooks/index.js.map +1 -1
  46. package/lib/module/hooks/use-breakpoint.js +46 -1
  47. package/lib/module/hooks/use-breakpoint.js.map +1 -1
  48. package/lib/module/index.js +3 -1
  49. package/lib/module/index.js.map +1 -1
  50. package/lib/module/primitives/chart-accessibility.js +68 -0
  51. package/lib/module/primitives/chart-accessibility.js.map +1 -0
  52. package/lib/typescript/src/components/area-chart/index.d.ts +2 -1
  53. package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
  54. package/lib/typescript/src/components/bar-chart/index.d.ts +2 -1
  55. package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -1
  56. package/lib/typescript/src/components/candlestick-chart/index.d.ts +2 -1
  57. package/lib/typescript/src/components/candlestick-chart/index.d.ts.map +1 -1
  58. package/lib/typescript/src/components/form/index.d.ts +18 -5
  59. package/lib/typescript/src/components/form/index.d.ts.map +1 -1
  60. package/lib/typescript/src/components/form/typed-form.d.ts +7 -0
  61. package/lib/typescript/src/components/form/typed-form.d.ts.map +1 -0
  62. package/lib/typescript/src/components/form/use-form.d.ts +4 -0
  63. package/lib/typescript/src/components/form/use-form.d.ts.map +1 -1
  64. package/lib/typescript/src/components/heatmap-chart/index.d.ts +2 -1
  65. package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
  66. package/lib/typescript/src/components/line-chart/index.d.ts +2 -1
  67. package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
  68. package/lib/typescript/src/components/message-scroller/index.d.ts +30 -2
  69. package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -1
  70. package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts +10 -0
  71. package/lib/typescript/src/components/message-scroller/message-scroller-math.d.ts.map +1 -1
  72. package/lib/typescript/src/components/meter/index.d.ts +270 -0
  73. package/lib/typescript/src/components/meter/index.d.ts.map +1 -0
  74. package/lib/typescript/src/components/meter/meter-scale.d.ts +57 -0
  75. package/lib/typescript/src/components/meter/meter-scale.d.ts.map +1 -0
  76. package/lib/typescript/src/components/planner/index.d.ts +274 -0
  77. package/lib/typescript/src/components/planner/index.d.ts.map +1 -0
  78. package/lib/typescript/src/components/planner/planner-entries.d.ts +75 -0
  79. package/lib/typescript/src/components/planner/planner-entries.d.ts.map +1 -0
  80. package/lib/typescript/src/components/radar-chart/index.d.ts +4 -0
  81. package/lib/typescript/src/components/radar-chart/index.d.ts.map +1 -1
  82. package/lib/typescript/src/components/scatter-chart/index.d.ts +2 -1
  83. package/lib/typescript/src/components/scatter-chart/index.d.ts.map +1 -1
  84. package/lib/typescript/src/components/skeleton/index.d.ts +25 -2
  85. package/lib/typescript/src/components/skeleton/index.d.ts.map +1 -1
  86. package/lib/typescript/src/components/spinner/index.d.ts +25 -2
  87. package/lib/typescript/src/components/spinner/index.d.ts.map +1 -1
  88. package/lib/typescript/src/components/time-picker/index.d.ts +5 -6
  89. package/lib/typescript/src/components/time-picker/index.d.ts.map +1 -1
  90. package/lib/typescript/src/components/time-picker/ruler-window.d.ts +12 -0
  91. package/lib/typescript/src/components/time-picker/ruler-window.d.ts.map +1 -0
  92. package/lib/typescript/src/hooks/breakpoint-contract.d.ts +6 -0
  93. package/lib/typescript/src/hooks/breakpoint-contract.d.ts.map +1 -0
  94. package/lib/typescript/src/hooks/index.d.ts +1 -1
  95. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  96. package/lib/typescript/src/hooks/use-breakpoint.d.ts +22 -0
  97. package/lib/typescript/src/hooks/use-breakpoint.d.ts.map +1 -1
  98. package/lib/typescript/src/index.d.ts +3 -1
  99. package/lib/typescript/src/index.d.ts.map +1 -1
  100. package/lib/typescript/src/primitives/chart-accessibility.d.ts +33 -0
  101. package/lib/typescript/src/primitives/chart-accessibility.d.ts.map +1 -0
  102. package/lib/typescript/types/form-api.type-test.d.ts +2 -0
  103. package/lib/typescript/types/form-api.type-test.d.ts.map +1 -0
  104. package/package.json +28 -2
  105. package/src/components/area-chart/index.tsx +27 -2
  106. package/src/components/bar-chart/index.tsx +27 -2
  107. package/src/components/candlestick-chart/index.tsx +30 -2
  108. package/src/components/form/index.tsx +32 -5
  109. package/src/components/form/typed-form.ts +13 -0
  110. package/src/components/form/use-form.ts +9 -0
  111. package/src/components/heatmap-chart/index.tsx +49 -3
  112. package/src/components/line-chart/index.tsx +27 -2
  113. package/src/components/message-scroller/index.tsx +234 -6
  114. package/src/components/message-scroller/message-scroller-math.ts +38 -0
  115. package/src/components/meter/index.tsx +318 -0
  116. package/src/components/meter/meter-scale.ts +109 -0
  117. package/src/components/planner/index.tsx +886 -0
  118. package/src/components/planner/planner-entries.ts +146 -0
  119. package/src/components/radar-chart/index.tsx +24 -0
  120. package/src/components/scatter-chart/index.tsx +27 -2
  121. package/src/components/skeleton/index.tsx +59 -5
  122. package/src/components/spinner/index.tsx +80 -13
  123. package/src/components/time-picker/index.tsx +57 -29
  124. package/src/components/time-picker/ruler-window.ts +24 -0
  125. package/src/hooks/breakpoint-contract.ts +31 -0
  126. package/src/hooks/index.ts +4 -0
  127. package/src/hooks/use-breakpoint.ts +61 -10
  128. package/src/index.ts +30 -0
  129. package/src/primitives/chart-accessibility.ts +102 -0
@@ -4,5 +4,15 @@ export declare const MESSAGE_SCROLLER_EDGE_THRESHOLD = 24;
4
4
  export declare function distanceFromMessageScrollerTarget(target: MessageScrollerTarget, contentOffsetY: number, contentHeight: number, viewportHeight: number): number;
5
5
  /** Whether the control has enough distance to its target edge to be useful. */
6
6
  export declare function isMessageScrollerTargetVisible(distance: number): boolean;
7
+ export interface MessageScrollerIndexedItem {
8
+ messageId: string;
9
+ scrollAnchor?: boolean;
10
+ }
11
+ /** Index used by initial positioning and id-addressed virtualized jumps. */
12
+ export declare function messageScrollerIndex(items: readonly MessageScrollerIndexedItem[], id: string): number | undefined;
13
+ /** Initial target for a list; `undefined` means use the physical end. */
14
+ export declare function initialMessageScrollerIndex(items: readonly MessageScrollerIndexedItem[], position: 'start' | 'end' | 'last-anchor'): number | undefined;
15
+ /** Anchor at or before the first visible virtualized row. */
16
+ export declare function messageScrollerAnchorAt(items: readonly MessageScrollerIndexedItem[], firstVisibleIndex: number): string | null;
7
17
  export {};
8
18
  //# sourceMappingURL=message-scroller-math.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-scroller-math.d.ts","sourceRoot":"","sources":["../../../../../src/components/message-scroller/message-scroller-math.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAElD,oEAAoE;AACpE,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAMR;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxE"}
1
+ {"version":3,"file":"message-scroller-math.d.ts","sourceRoot":"","sources":["../../../../../src/components/message-scroller/message-scroller-math.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAElD,oEAAoE;AACpE,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAMR;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,0BAA0B,EAAE,EAC5C,EAAE,EAAE,MAAM,GACT,MAAM,GAAG,SAAS,CAGpB;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,0BAA0B,EAAE,EAC5C,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GACxC,MAAM,GAAG,SAAS,CAOpB;AAED,6DAA6D;AAC7D,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,0BAA0B,EAAE,EAC5C,iBAAiB,EAAE,MAAM,GACxB,MAAM,GAAG,IAAI,CAKf"}
@@ -0,0 +1,270 @@
1
+ import { View, type ViewProps } from 'react-native';
2
+ import { type VariantProps } from 'tailwind-variants';
3
+ import { type MeterColor, type MeterThreshold } from './meter-scale.js';
4
+ declare const meterVariants: import("tailwind-variants").TVReturnType<{
5
+ color: {
6
+ primary: {
7
+ track: string;
8
+ indicator: string;
9
+ segment: string;
10
+ };
11
+ success: {
12
+ track: string;
13
+ indicator: string;
14
+ segment: string;
15
+ };
16
+ warning: {
17
+ track: string;
18
+ indicator: string;
19
+ segment: string;
20
+ };
21
+ destructive: {
22
+ track: string;
23
+ indicator: string;
24
+ segment: string;
25
+ };
26
+ info: {
27
+ track: string;
28
+ indicator: string;
29
+ segment: string;
30
+ };
31
+ muted: {
32
+ track: string;
33
+ indicator: string;
34
+ segment: string;
35
+ };
36
+ };
37
+ size: {
38
+ sm: {
39
+ track: string;
40
+ segments: string;
41
+ segment: string;
42
+ };
43
+ md: {
44
+ track: string;
45
+ segments: string;
46
+ segment: string;
47
+ };
48
+ lg: {
49
+ track: string;
50
+ segments: string;
51
+ segment: string;
52
+ };
53
+ };
54
+ }, {
55
+ root: string;
56
+ header: string;
57
+ track: string;
58
+ indicator: string;
59
+ segments: string;
60
+ segment: string;
61
+ }, undefined, {
62
+ color: {
63
+ primary: {
64
+ track: string;
65
+ indicator: string;
66
+ segment: string;
67
+ };
68
+ success: {
69
+ track: string;
70
+ indicator: string;
71
+ segment: string;
72
+ };
73
+ warning: {
74
+ track: string;
75
+ indicator: string;
76
+ segment: string;
77
+ };
78
+ destructive: {
79
+ track: string;
80
+ indicator: string;
81
+ segment: string;
82
+ };
83
+ info: {
84
+ track: string;
85
+ indicator: string;
86
+ segment: string;
87
+ };
88
+ muted: {
89
+ track: string;
90
+ indicator: string;
91
+ segment: string;
92
+ };
93
+ };
94
+ size: {
95
+ sm: {
96
+ track: string;
97
+ segments: string;
98
+ segment: string;
99
+ };
100
+ md: {
101
+ track: string;
102
+ segments: string;
103
+ segment: string;
104
+ };
105
+ lg: {
106
+ track: string;
107
+ segments: string;
108
+ segment: string;
109
+ };
110
+ };
111
+ }, {
112
+ root: string;
113
+ header: string;
114
+ track: string;
115
+ indicator: string;
116
+ segments: string;
117
+ segment: string;
118
+ }, import("tailwind-variants").TVReturnType<{
119
+ color: {
120
+ primary: {
121
+ track: string;
122
+ indicator: string;
123
+ segment: string;
124
+ };
125
+ success: {
126
+ track: string;
127
+ indicator: string;
128
+ segment: string;
129
+ };
130
+ warning: {
131
+ track: string;
132
+ indicator: string;
133
+ segment: string;
134
+ };
135
+ destructive: {
136
+ track: string;
137
+ indicator: string;
138
+ segment: string;
139
+ };
140
+ info: {
141
+ track: string;
142
+ indicator: string;
143
+ segment: string;
144
+ };
145
+ muted: {
146
+ track: string;
147
+ indicator: string;
148
+ segment: string;
149
+ };
150
+ };
151
+ size: {
152
+ sm: {
153
+ track: string;
154
+ segments: string;
155
+ segment: string;
156
+ };
157
+ md: {
158
+ track: string;
159
+ segments: string;
160
+ segment: string;
161
+ };
162
+ lg: {
163
+ track: string;
164
+ segments: string;
165
+ segment: string;
166
+ };
167
+ };
168
+ }, {
169
+ root: string;
170
+ header: string;
171
+ track: string;
172
+ indicator: string;
173
+ segments: string;
174
+ segment: string;
175
+ }, undefined, unknown, unknown, undefined>>;
176
+ type MeterVariantProps = VariantProps<typeof meterVariants>;
177
+ export interface MeterProps extends Omit<ViewProps, 'children'>, MeterVariantProps {
178
+ className?: string;
179
+ /** The measurement, somewhere between `minValue` and `maxValue`. */
180
+ value: number;
181
+ /**
182
+ * The bottom of the scale — the value at which the bar reads as empty.
183
+ * Defaults to `0`.
184
+ */
185
+ minValue?: number;
186
+ /**
187
+ * The top of the scale — the value at which the bar reads as full. Defaults
188
+ * to `100`, so a bare percentage needs neither bound set.
189
+ */
190
+ maxValue?: number;
191
+ /**
192
+ * What is being measured. Also the accessibility label, and a meter without
193
+ * one announces a number with nothing attached to it — "seventy-five
194
+ * percent" of what is not an answer. Pass `accessibilityLabel` instead only
195
+ * where the caption is drawn some other way.
196
+ */
197
+ label?: string;
198
+ /** Draw the value above the track, opposite the label. */
199
+ showValueLabel?: boolean;
200
+ /**
201
+ * Text for the value label. Overrides the formatted value — use it for a
202
+ * word where a number reads worse: `Strong`, `Almost full`.
203
+ *
204
+ * It is spoken whether or not it is drawn, so it can give a screen reader
205
+ * better words than the caption without changing the caption. Pair it with
206
+ * `showValueLabel` to draw it too.
207
+ */
208
+ valueLabel?: string;
209
+ /**
210
+ * How to write the value, through `Intl.NumberFormat`. A `percent` style
211
+ * formats how far up the scale the value sits; every other style formats
212
+ * the value itself, so `{ style: 'unit', unit: 'gigabyte' }` against a
213
+ * `maxValue` of `256` reads `64 GB` rather than a percentage of it. Falls
214
+ * back to a rounded percent when omitted.
215
+ */
216
+ formatOptions?: Intl.NumberFormatOptions;
217
+ /**
218
+ * Points on the scale where the colour changes, each `{ from, color }`. The
219
+ * highest one the reading has reached wins, so the order you list them in
220
+ * does not matter; below all of them the `color` prop applies.
221
+ *
222
+ * This is the difference between a meter and a bar: the colour is a
223
+ * judgement about the reading. Which direction is bad is yours to say —
224
+ * thresholds climbing to `destructive` suit a disk filling up, thresholds
225
+ * falling to it suit a battery running down.
226
+ */
227
+ thresholds?: MeterThreshold[];
228
+ /**
229
+ * Draw the scale as this many discrete blocks instead of one continuous
230
+ * bar. Blocks are all or nothing, which is the point of them: four blocks
231
+ * say "three out of four" where a bar says "about seventy percent", and a
232
+ * password is not seventy percent strong.
233
+ *
234
+ * Any value above the floor lights at least one block, so a reading that
235
+ * is not empty never looks it.
236
+ */
237
+ segments?: number;
238
+ /** Extra classes for the fill, or for a lit segment. */
239
+ indicatorClassName?: string;
240
+ /** Extra classes for the label + value row. */
241
+ headerClassName?: string;
242
+ }
243
+ /**
244
+ * A measurement on a fixed scale: disk used, battery left, a score, a password's
245
+ * strength. The fill is driven on the UI thread, so a value change costs one
246
+ * render and nothing per frame.
247
+ *
248
+ * A meter is not a progress bar. Progress is a task moving towards an end that
249
+ * finishing is the point of; a meter is a reading that happens to sit where it
250
+ * sits, and may go back down. Reach for
251
+ * [Progress](/docs/components/progress) when something is completing.
252
+ *
253
+ * `thresholds` paint the bar by where the reading falls, and `segments` draws
254
+ * the scale as discrete blocks for readings that are counted rather than
255
+ * measured.
256
+ *
257
+ * The value is read against `minValue` / `maxValue`, which default to 0 and
258
+ * 100 — so a percentage needs neither. Set them and the meter speaks in
259
+ * whatever is being measured: bytes, degrees, points. Nothing has to be
260
+ * converted to a percent on the way in, and the screen reader is told the real
261
+ * scale rather than a derived one.
262
+ *
263
+ * React Native has no meter role, so this announces as a progress bar with its
264
+ * value, range and unit attached. That is the closest the platform offers, and
265
+ * it is why `label` matters: the role will not distinguish a reading from a
266
+ * task, and the name is what does.
267
+ */
268
+ export declare const Meter: import("react").ForwardRefExoticComponent<MeterProps & import("react").RefAttributes<View>>;
269
+ export type { MeterColor, MeterThreshold };
270
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/meter/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA0B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAS5E,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAML,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,kBAAe,CAAC;AAQvB,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAoCjB,CAAC;AAEH,KAAK,iBAAiB,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAE5D,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACjC,iBAAiB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACzC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA2BD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,KAAK,6FA8HjB,CAAC;AAIF,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Where a reading sits on a meter's scale, and what colour it has earned.
3
+ *
4
+ * Kept apart from the component because it is the part that can be wrong
5
+ * without looking wrong: a threshold picked in the wrong order, or a segment
6
+ * count that rounds a real reading down to nothing, is a meter that lies
7
+ * quietly. None of it touches React, so it can be tested on its own.
8
+ */
9
+ /** The token a meter can be painted with. */
10
+ export type MeterColor = 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'muted';
11
+ /**
12
+ * A point on the scale, and the colour the meter takes from there upwards.
13
+ *
14
+ * `from` is in the same units as `value` — not a percentage of the range — so
15
+ * a threshold on a 0–8 GB meter is written in gigabytes.
16
+ */
17
+ export interface MeterThreshold {
18
+ /** The value at which this colour takes over. */
19
+ from: number;
20
+ /** What the bar is painted with at or above `from`. */
21
+ color: MeterColor;
22
+ }
23
+ /** `value` held inside the scale, so a stray number cannot escape the track. */
24
+ export declare function clamp(value: number, min: number, max: number): number;
25
+ /**
26
+ * How far up the scale the value sits, 0–1. An empty or inverted range has no
27
+ * meaningful position in it, so it reads as empty rather than dividing by zero.
28
+ */
29
+ export declare function fractionOf(value: number, min: number, max: number): number;
30
+ /**
31
+ * The colour the reading has earned: the highest threshold at or below the
32
+ * value, or the base colour when it has reached none of them.
33
+ *
34
+ * Highest-wins rather than first-wins, so the caller can list thresholds in
35
+ * any order and get the same answer. A rule that depended on the order would
36
+ * make a reordered array a silent behaviour change.
37
+ */
38
+ export declare function colorFor(value: number, base: MeterColor | undefined, thresholds: MeterThreshold[] | undefined): MeterColor | undefined;
39
+ /**
40
+ * How many blocks of a segmented meter are lit.
41
+ *
42
+ * Rounded up, so any reading above the floor lights at least one. Rounding
43
+ * down would leave the whole first block of a four-block meter dark, and "a
44
+ * little" looking like "none" is the reading a meter can least afford to get
45
+ * wrong.
46
+ */
47
+ export declare function litSegments(fraction: number, segments: number): number;
48
+ /**
49
+ * The value caption: an explicit override, an `Intl` rendering, or a rounded
50
+ * percent.
51
+ *
52
+ * A `percent` style is given the fraction, because that is what a percentage
53
+ * of the scale means; every other style is given the value, because a byte
54
+ * count or a score is a quantity and not a proportion.
55
+ */
56
+ export declare function formatValue(value: number, fraction: number, valueLabel?: string, formatOptions?: Intl.NumberFormatOptions): string;
57
+ //# sourceMappingURL=meter-scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter-scale.d.ts","sourceRoot":"","sources":["../../../../../src/components/meter/meter-scale.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,SAAS,GACT,aAAa,GACb,MAAM,GACN,OAAO,CAAC;AAEZ;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAI5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAIjE;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,UAAU,EAAE,cAAc,EAAE,GAAG,SAAS,0BASzC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAG7D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,IAAI,CAAC,mBAAmB,UAazC"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Planner — a month of days, each carrying what falls on it.
3
+ *
4
+ * ```tsx
5
+ * const [month, setMonth] = useState(new Date());
6
+ *
7
+ * <Planner
8
+ * month={month}
9
+ * onMonthChange={setMonth}
10
+ * entries={renewals}
11
+ * categories={[
12
+ * { id: 'monthly', label: 'Monthly' },
13
+ * { id: 'yearly', label: 'Yearly', colorIndex: 4 },
14
+ * ]}
15
+ * >
16
+ * <Planner.Header>
17
+ * <Planner.Title />
18
+ * <Planner.Today />
19
+ * <Planner.Nav />
20
+ * </Planner.Header>
21
+ * <Planner.Grid />
22
+ * <Planner.Legend />
23
+ * <Planner.Details>
24
+ * {(date, entries) => <Text>{entries.length} on {date.toDateString()}</Text>}
25
+ * </Planner.Details>
26
+ * </Planner>
27
+ * ```
28
+ *
29
+ * ## How it differs from Calendar
30
+ *
31
+ * `Calendar` picks a date and answers with one. This shows what is already on
32
+ * the days and answers with the day you asked about — the selection exists to
33
+ * open something, not to be submitted.
34
+ *
35
+ * ## Why it draws its own Frame
36
+ *
37
+ * A month at a glance is a widget: a boundary, a strip along the top carrying
38
+ * the month and the way through it, and a footer that holds still while the
39
+ * middle changes. That is `Frame`, so the root renders one instead of leaving
40
+ * every caller to assemble the same shell. Pass `frame={false}` to drop it,
41
+ * for a planner in a sheet or a card that already draws its own edge.
42
+ *
43
+ * ## Why the grid is always six weeks
44
+ *
45
+ * A month can span five weeks or six. Drawn at its natural height the panel
46
+ * jumps as you page through the year and the days appear to move under your
47
+ * thumb, so the grid is always six rows and the last one is sometimes all
48
+ * next month. `Calendar` fixes its height for the same reason.
49
+ *
50
+ * ## Why a day says more than its date
51
+ *
52
+ * The marker on a day is a coloured dot, and colour is a signal that does not
53
+ * reach everyone looking at it. So the legend prints its label beside every
54
+ * swatch, and a day is spoken as its date, how many entries it carries and
55
+ * which categories they belong to. Neither is decoration: between them they
56
+ * are the whole content of the grid for somebody who cannot see it.
57
+ */
58
+ import { type ReactNode } from 'react';
59
+ import { View, type ViewProps } from 'react-native';
60
+ import { type TextProps } from '../../primitives/text.js';
61
+ import { type CalendarSystem, type DateLocale } from '../../utils/date.js';
62
+ import { type PlannerCountedCategory } from './planner-entries.js';
63
+ /** One thing that falls on a day. */
64
+ export interface PlannerEntry {
65
+ /** Stable across renders; it keys the cell's contents. */
66
+ id: string;
67
+ /** When it falls. The time of day is kept but not read by the grid. */
68
+ date: Date;
69
+ /** Named in the dialog and, through its category, in the day's spoken label. */
70
+ label: string;
71
+ /** Matches a `PlannerCategory` id. Without one the entry is still counted. */
72
+ category?: string;
73
+ /** Drawn in the cell — a brand mark, an avatar, a glyph. */
74
+ icon?: ReactNode;
75
+ }
76
+ /** A group of entries: the key to a colour, and a line in the legend. */
77
+ export interface PlannerCategory {
78
+ id: string;
79
+ /** Printed beside the swatch, and spoken as part of a day that carries it. */
80
+ label: string;
81
+ /**
82
+ * Which `--color-chart-*` token the dot takes, 1 to 5. Categories without
83
+ * one are numbered in the order they are declared.
84
+ */
85
+ colorIndex?: number;
86
+ /** An explicit colour, for a brand that is not the theme's to choose. */
87
+ color?: string;
88
+ }
89
+ export interface PlannerProps extends Omit<ViewProps, 'children'> {
90
+ className?: string;
91
+ /** The month on show. Leave it out for an uncontrolled planner. */
92
+ month?: Date;
93
+ defaultMonth?: Date;
94
+ onMonthChange?: (month: Date) => void;
95
+ /** Everything the planner knows about, in any order and any month. */
96
+ entries?: PlannerEntry[];
97
+ /** The colour key. Declaration order is legend order and palette order. */
98
+ categories?: PlannerCategory[];
99
+ /** The open day. `null` is none. Leave it out for an uncontrolled planner. */
100
+ selected?: Date | null;
101
+ defaultSelected?: Date | null;
102
+ onSelectedChange?: (date: Date | null) => void;
103
+ /** Runs before the selection moves, whether or not `Details` is present. */
104
+ onDayPress?: (date: Date, entries: PlannerEntry[]) => void;
105
+ /** How many entries a cell draws before it counts the rest. Default `2`. */
106
+ entryLimit?: number;
107
+ /** First day of the week, 0 is Sunday. Defaults to the locale's. */
108
+ weekStartsOn?: number | 'auto';
109
+ locale?: DateLocale;
110
+ calendar?: CalendarSystem;
111
+ /** Draw the surrounding `Frame`. Off for a planner in a sheet or a card. */
112
+ frame?: boolean;
113
+ children?: ReactNode;
114
+ }
115
+ export interface PlannerHeaderProps {
116
+ children?: ReactNode;
117
+ }
118
+ /**
119
+ * The strip along the top of the frame. Put `Title`, `Today` and `Nav` in it.
120
+ *
121
+ * The strip has two ends rather than an even spread. What the month *is* —
122
+ * its name, and the way back to today — reads from the leading edge; what
123
+ * *moves* it sits at the trailing edge, under the thumb that reaches for it.
124
+ * Spaced evenly across a full-width strip they read as three unrelated
125
+ * controls instead of a label and a pair of buttons.
126
+ */
127
+ declare function PlannerHeader({ children }: PlannerHeaderProps): import("react").JSX.Element;
128
+ declare namespace PlannerHeader {
129
+ var displayName: string;
130
+ }
131
+ export interface PlannerTitleProps extends Omit<TextProps, 'children'> {
132
+ /** Replaces the month name, for a title that says something else. */
133
+ children?: ReactNode;
134
+ }
135
+ /** The month on show, in the calendar system and locale the grid uses. */
136
+ declare function PlannerTitle({ children, className, ...props }: PlannerTitleProps): import("react").JSX.Element;
137
+ declare namespace PlannerTitle {
138
+ var displayName: string;
139
+ }
140
+ export interface PlannerTodayProps {
141
+ /** Replaces the word on the pill. */
142
+ children?: ReactNode;
143
+ }
144
+ /** Jumps back to the month today is in, and selects nothing. */
145
+ declare function PlannerToday({ children }: PlannerTodayProps): import("react").JSX.Element;
146
+ declare namespace PlannerToday {
147
+ var displayName: string;
148
+ }
149
+ export interface PlannerNavProps {
150
+ className?: string;
151
+ }
152
+ /** Back and forward a month. */
153
+ declare function PlannerNav({ className }: PlannerNavProps): import("react").JSX.Element;
154
+ declare namespace PlannerNav {
155
+ var displayName: string;
156
+ }
157
+ export interface PlannerActionProps {
158
+ children?: ReactNode;
159
+ }
160
+ /** The trailing end of the header strip, for a button of the caller's. */
161
+ declare function PlannerAction({ children }: PlannerActionProps): import("react").JSX.Element;
162
+ declare namespace PlannerAction {
163
+ var displayName: string;
164
+ }
165
+ /** What a custom cell is handed. Everything the default cell draws from. */
166
+ export interface PlannerDayState {
167
+ date: Date;
168
+ entries: PlannerEntry[];
169
+ isToday: boolean;
170
+ isSelected: boolean;
171
+ isInMonth: boolean;
172
+ }
173
+ export type PlannerDayRenderer = (state: PlannerDayState) => ReactNode;
174
+ export interface PlannerGridProps {
175
+ className?: string;
176
+ /** Draws a cell yourself. It is handed the day and what falls on it. */
177
+ renderDay?: PlannerDayRenderer;
178
+ }
179
+ /**
180
+ * The weekday row and the six weeks below it.
181
+ *
182
+ * React Native has no per-cell grid vocabulary — no `gridcell`, no `row` — so
183
+ * a screen reader never hears "row three, column five" and cannot fall back on
184
+ * position for context. Every day therefore carries its own full date, and the
185
+ * weekday headings are hidden rather than read out 42 times over.
186
+ */
187
+ declare function PlannerGrid({ className, renderDay }: PlannerGridProps): import("react").JSX.Element;
188
+ declare namespace PlannerGrid {
189
+ var displayName: string;
190
+ }
191
+ export interface PlannerDayProps {
192
+ date: Date;
193
+ renderDay?: PlannerDayRenderer;
194
+ }
195
+ /** One cell. Pressing it selects the day and opens whatever is bound to it. */
196
+ declare function PlannerDay({ date, renderDay }: PlannerDayProps): import("react").JSX.Element;
197
+ declare namespace PlannerDay {
198
+ var displayName: string;
199
+ }
200
+ export interface PlannerLegendProps {
201
+ className?: string;
202
+ /** Print each category's count for the month beside its label. */
203
+ counts?: boolean;
204
+ /** Sits at the trailing end — a total, a currency, whatever the month adds to. */
205
+ children?: ReactNode;
206
+ }
207
+ /**
208
+ * The key to the dots.
209
+ *
210
+ * It prints the label beside every swatch, because a column of coloured dots
211
+ * with nothing to read them against is a quiz.
212
+ */
213
+ declare function PlannerLegend({ className, counts, children }: PlannerLegendProps): import("react").JSX.Element;
214
+ declare namespace PlannerLegend {
215
+ var displayName: string;
216
+ }
217
+ export interface PlannerSummaryProps extends Omit<TextProps, 'children'> {
218
+ /** Replaces the count, for a total that is money rather than entries. */
219
+ children?: ReactNode;
220
+ }
221
+ /** What the month adds up to. Counts this month only, never the days either side. */
222
+ declare function PlannerSummary({ children, ...props }: PlannerSummaryProps): import("react").JSX.Element;
223
+ declare namespace PlannerSummary {
224
+ var displayName: string;
225
+ }
226
+ export interface PlannerFooterProps {
227
+ className?: string;
228
+ children?: ReactNode;
229
+ }
230
+ /** The strip along the bottom, for tools that act on the month. */
231
+ declare function PlannerFooter({ className, children }: PlannerFooterProps): import("react").JSX.Element;
232
+ declare namespace PlannerFooter {
233
+ var displayName: string;
234
+ }
235
+ export interface PlannerDetailsProps {
236
+ className?: string;
237
+ /** Title above the children. Defaults to the day's full date. */
238
+ title?: ReactNode;
239
+ /**
240
+ * The line under the title. Defaults to how many entries the day carries,
241
+ * so the dialog answers "how much of this is there" before it is read.
242
+ * Pass `null` to drop it.
243
+ */
244
+ description?: ReactNode;
245
+ /** Given the open day and what falls on it. */
246
+ children: (date: Date, entries: PlannerEntry[]) => ReactNode;
247
+ }
248
+ /**
249
+ * A dialog bound to the open day.
250
+ *
251
+ * The planner owns the grid and the binding; what the dialog says is the
252
+ * application's, because the contents of a day are its data and not the
253
+ * component's. Leave it out and `onDayPress` is still called — a planner that
254
+ * pushes a screen instead of opening a dialog wants that and nothing else.
255
+ */
256
+ declare function PlannerDetails({ className, title, description, children }: PlannerDetailsProps): import("react").JSX.Element;
257
+ declare namespace PlannerDetails {
258
+ var displayName: string;
259
+ }
260
+ export declare const Planner: import("react").ForwardRefExoticComponent<PlannerProps & import("react").RefAttributes<View>> & {
261
+ Header: typeof PlannerHeader;
262
+ Title: typeof PlannerTitle;
263
+ Today: typeof PlannerToday;
264
+ Nav: typeof PlannerNav;
265
+ Action: typeof PlannerAction;
266
+ Grid: typeof PlannerGrid;
267
+ Day: typeof PlannerDay;
268
+ Legend: typeof PlannerLegend;
269
+ Summary: typeof PlannerSummary;
270
+ Footer: typeof PlannerFooter;
271
+ Details: typeof PlannerDetails;
272
+ };
273
+ export type { PlannerCountedCategory };
274
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/planner/index.tsx"],"names":[],"mappings":"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"}