@kanso-labs/react-native-kanso-ui 0.9.0 → 0.10.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 (196) hide show
  1. package/README.md +4 -3
  2. package/dist/autocomplete/index.js +15 -1
  3. package/dist/autocomplete/index.js.map +1 -1
  4. package/dist/button/group.d.ts +5 -0
  5. package/dist/button/group.js +115 -0
  6. package/dist/button/group.js.map +1 -0
  7. package/dist/button/index.d.ts +4 -1
  8. package/dist/button/index.js +44 -22
  9. package/dist/button/index.js.map +1 -1
  10. package/dist/button/slots.js +2 -1
  11. package/dist/button/slots.js.map +1 -1
  12. package/dist/calendar/index.js +351 -182
  13. package/dist/calendar/index.js.map +1 -1
  14. package/dist/calendar/styles.js +33 -2
  15. package/dist/calendar/styles.js.map +1 -1
  16. package/dist/carousel/arrangement.d.ts +5 -0
  17. package/dist/carousel/arrangement.js +123 -0
  18. package/dist/carousel/arrangement.js.map +1 -0
  19. package/dist/chequer/index.js +95 -0
  20. package/dist/chequer/index.js.map +1 -0
  21. package/dist/collection/index.d.ts +157 -0
  22. package/dist/collection/index.js +1331 -0
  23. package/dist/collection/index.js.map +1 -0
  24. package/dist/color-thumb/index.js +56 -0
  25. package/dist/color-thumb/index.js.map +1 -0
  26. package/dist/components/button/index.d.ts +4 -2
  27. package/dist/components/button/index.js +227 -188
  28. package/dist/components/button/index.js.map +1 -1
  29. package/dist/components/button-group/index.d.ts +87 -0
  30. package/dist/components/button-group/index.js +275 -0
  31. package/dist/components/button-group/index.js.map +1 -0
  32. package/dist/components/calendar/index.d.ts +11 -3
  33. package/dist/components/calendar/index.js +60 -45
  34. package/dist/components/calendar/index.js.map +1 -1
  35. package/dist/components/carousel/index.d.ts +72 -0
  36. package/dist/components/carousel/index.js +496 -0
  37. package/dist/components/carousel/index.js.map +1 -0
  38. package/dist/components/checkbox-group/index.d.ts +3 -4
  39. package/dist/components/checkbox-group/index.js +1 -1
  40. package/dist/components/checkbox-group/index.js.map +1 -1
  41. package/dist/components/color-area/index.d.ts +85 -0
  42. package/dist/components/color-area/index.js +630 -0
  43. package/dist/components/color-area/index.js.map +1 -0
  44. package/dist/components/color-field/index.d.ts +144 -0
  45. package/dist/components/color-field/index.js +516 -0
  46. package/dist/components/color-field/index.js.map +1 -0
  47. package/dist/components/color-picker/index.d.ts +74 -0
  48. package/dist/components/color-picker/index.js +317 -0
  49. package/dist/components/color-picker/index.js.map +1 -0
  50. package/dist/components/color-slider/index.d.ts +82 -0
  51. package/dist/components/color-slider/index.js +456 -0
  52. package/dist/components/color-slider/index.js.map +1 -0
  53. package/dist/components/color-swatch/index.d.ts +46 -0
  54. package/dist/components/color-swatch/index.js +127 -0
  55. package/dist/components/color-swatch/index.js.map +1 -0
  56. package/dist/components/color-swatch-picker/index.d.ts +81 -0
  57. package/dist/components/color-swatch-picker/index.js +287 -0
  58. package/dist/components/color-swatch-picker/index.js.map +1 -0
  59. package/dist/components/color-wheel/index.d.ts +71 -0
  60. package/dist/components/color-wheel/index.js +407 -0
  61. package/dist/components/color-wheel/index.js.map +1 -0
  62. package/dist/components/combo-box/index.d.ts +193 -0
  63. package/dist/components/combo-box/index.js +616 -0
  64. package/dist/components/combo-box/index.js.map +1 -0
  65. package/dist/components/date-field/index.d.ts +120 -0
  66. package/dist/components/date-field/index.js +111 -0
  67. package/dist/components/date-field/index.js.map +1 -0
  68. package/dist/components/date-picker/index.d.ts +130 -0
  69. package/dist/components/date-picker/index.js +310 -0
  70. package/dist/components/date-picker/index.js.map +1 -0
  71. package/dist/components/date-range-picker/index.d.ts +139 -0
  72. package/dist/components/date-range-picker/index.js +421 -0
  73. package/dist/components/date-range-picker/index.js.map +1 -0
  74. package/dist/components/disclosure/index.d.ts +94 -0
  75. package/dist/components/disclosure/index.js +365 -0
  76. package/dist/components/disclosure/index.js.map +1 -0
  77. package/dist/components/disclosure-group/index.d.ts +61 -0
  78. package/dist/components/disclosure-group/index.js +100 -0
  79. package/dist/components/disclosure-group/index.js.map +1 -0
  80. package/dist/components/drop-zone/index.d.ts +113 -0
  81. package/dist/components/drop-zone/index.js +304 -0
  82. package/dist/components/drop-zone/index.js.map +1 -0
  83. package/dist/components/fab/index.d.ts +1 -1
  84. package/dist/components/fab/index.js +91 -76
  85. package/dist/components/fab/index.js.map +1 -1
  86. package/dist/components/form/index.d.ts +3 -2
  87. package/dist/components/form/index.js.map +1 -1
  88. package/dist/components/icon-button/index.d.ts +4 -2
  89. package/dist/components/icon-button/index.js +204 -171
  90. package/dist/components/icon-button/index.js.map +1 -1
  91. package/dist/components/list/index.d.ts +15 -158
  92. package/dist/components/list/index.js +21 -1047
  93. package/dist/components/list/index.js.map +1 -1
  94. package/dist/components/list-box/index.d.ts +73 -0
  95. package/dist/components/list-box/index.js +82 -0
  96. package/dist/components/list-box/index.js.map +1 -0
  97. package/dist/components/loading-indicator/index.d.ts +32 -0
  98. package/dist/components/loading-indicator/index.js +174 -0
  99. package/dist/components/loading-indicator/index.js.map +1 -0
  100. package/dist/components/navigation-tree/index.d.ts +117 -0
  101. package/dist/components/navigation-tree/index.js +135 -0
  102. package/dist/components/navigation-tree/index.js.map +1 -0
  103. package/dist/components/number-field/index.js +132 -143
  104. package/dist/components/number-field/index.js.map +1 -1
  105. package/dist/components/range-calendar/index.d.ts +69 -0
  106. package/dist/components/range-calendar/index.js +144 -0
  107. package/dist/components/range-calendar/index.js.map +1 -0
  108. package/dist/components/search-view/index.d.ts +78 -0
  109. package/dist/components/search-view/index.js +570 -0
  110. package/dist/components/search-view/index.js.map +1 -0
  111. package/dist/components/select/index.d.ts +152 -0
  112. package/dist/components/select/index.js +419 -0
  113. package/dist/components/select/index.js.map +1 -0
  114. package/dist/components/slider/index.d.ts +111 -0
  115. package/dist/components/slider/index.js +673 -0
  116. package/dist/components/slider/index.js.map +1 -0
  117. package/dist/components/split-button/index.d.ts +77 -0
  118. package/dist/components/split-button/index.js +354 -0
  119. package/dist/components/split-button/index.js.map +1 -0
  120. package/dist/components/tabs/index.d.ts +196 -0
  121. package/dist/components/tabs/index.js +1137 -0
  122. package/dist/components/tabs/index.js.map +1 -0
  123. package/dist/components/time-field/index.d.ts +43 -0
  124. package/dist/components/time-field/index.js +107 -0
  125. package/dist/components/time-field/index.js.map +1 -0
  126. package/dist/components/time-picker/index.d.ts +65 -0
  127. package/dist/components/time-picker/index.js +1168 -0
  128. package/dist/components/time-picker/index.js.map +1 -0
  129. package/dist/components/tooltip/index.d.ts +101 -0
  130. package/dist/components/tooltip/index.js +223 -0
  131. package/dist/components/tooltip/index.js.map +1 -0
  132. package/dist/components/tree/index.d.ts +112 -0
  133. package/dist/components/tree/index.js +157 -0
  134. package/dist/components/tree/index.js.map +1 -0
  135. package/dist/disclosure/chevron.js +75 -0
  136. package/dist/disclosure/chevron.js.map +1 -0
  137. package/dist/disclosure/index.js +7 -0
  138. package/dist/disclosure/index.js.map +1 -0
  139. package/dist/drop/index.d.ts +54 -0
  140. package/dist/drop/index.js +161 -0
  141. package/dist/drop/index.js.map +1 -0
  142. package/dist/field/chevron.js +74 -0
  143. package/dist/field/chevron.js.map +1 -0
  144. package/dist/field/index.d.ts +2 -1
  145. package/dist/field/index.js +310 -154
  146. package/dist/field/index.js.map +1 -1
  147. package/dist/field/styles.js +9 -0
  148. package/dist/field/styles.js.map +1 -1
  149. package/dist/files/index.d.ts +18 -0
  150. package/dist/files/index.js +107 -0
  151. package/dist/files/index.js.map +1 -0
  152. package/dist/form/index.d.ts +5 -2
  153. package/dist/form/index.js +64 -85
  154. package/dist/form/index.js.map +1 -1
  155. package/dist/glyphs/index.js +92 -1
  156. package/dist/glyphs/index.js.map +1 -1
  157. package/dist/i18n/index.js +20 -1
  158. package/dist/i18n/index.js.map +1 -1
  159. package/dist/i18n/messages.js +1394 -34
  160. package/dist/i18n/messages.js.map +1 -1
  161. package/dist/index.d.ts +35 -3
  162. package/dist/index.js +34 -3
  163. package/dist/indicator/paths.js +23 -1
  164. package/dist/indicator/paths.js.map +1 -1
  165. package/dist/modal/index.js +92 -77
  166. package/dist/modal/index.js.map +1 -1
  167. package/dist/number/keyboard.js +16 -0
  168. package/dist/number/keyboard.js.map +1 -0
  169. package/dist/overlay/anchored.js +68 -38
  170. package/dist/overlay/anchored.js.map +1 -1
  171. package/dist/overlay/keyboard.js +57 -0
  172. package/dist/overlay/keyboard.js.map +1 -0
  173. package/dist/overlay/panel.js +173 -19
  174. package/dist/overlay/panel.js.map +1 -1
  175. package/dist/overlay/placement.js +13 -1
  176. package/dist/overlay/placement.js.map +1 -1
  177. package/dist/picker/index.js +322 -0
  178. package/dist/picker/index.js.map +1 -0
  179. package/dist/press/index.d.ts +2 -0
  180. package/dist/press/index.js +102 -100
  181. package/dist/press/index.js.map +1 -1
  182. package/dist/row/index.js +77 -69
  183. package/dist/row/index.js.map +1 -1
  184. package/dist/row/styles.js +13 -2
  185. package/dist/row/styles.js.map +1 -1
  186. package/dist/segments/field.js +277 -0
  187. package/dist/segments/field.js.map +1 -0
  188. package/dist/segments/index.js +574 -0
  189. package/dist/segments/index.js.map +1 -0
  190. package/dist/segments/styles.js +24 -0
  191. package/dist/segments/styles.js.map +1 -0
  192. package/dist/slider/index.js +145 -0
  193. package/dist/slider/index.js.map +1 -0
  194. package/dist/swatch/index.js +56 -0
  195. package/dist/swatch/index.js.map +1 -0
  196. package/package.json +11 -2
@@ -0,0 +1,574 @@
1
+ import { useTheme } from "../theme/scope.js";
2
+ import { composeStyles } from "../theme/styles.js";
3
+ import { useTypeRole } from "../typography/roles.js";
4
+ import { startsWithIn } from "../autocomplete/index.js";
5
+ import { messagesFor } from "../i18n/index.js";
6
+ import { FieldSegments, descriptionOf } from "../field/index.js";
7
+ import { NumberParser } from "../number/parser.js";
8
+ import { segmentStylesOf } from "./styles.js";
9
+ import { c } from "react/compiler-runtime";
10
+ import { I18nManager, Platform, Pressable, StyleSheet, Text, TextInput } from "react-native";
11
+ import { createElement, useEffect, useEffectEvent, useId, useImperativeHandle, useRef, useState } from "react";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ import { CalendarDate, DateFormatter, toCalendar } from "@internationalized/date";
14
+ //#region src/segments/index.tsx
15
+ const ADJUSTABLE = [{ name: "increment" }, { name: "decrement" }];
16
+ const INVISIBLE = /[\s\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/gu;
17
+ const SENTINEL = " ";
18
+ const AFTER_SENTINEL = {
19
+ end: 1,
20
+ start: 1
21
+ };
22
+ const NUMERIC = /* @__PURE__ */ new Set([
23
+ "day",
24
+ "hour",
25
+ "minute",
26
+ "month",
27
+ "second",
28
+ "year"
29
+ ]);
30
+ const styles = StyleSheet.create({
31
+ input: {
32
+ height: 1,
33
+ opacity: 0,
34
+ position: "absolute",
35
+ start: 0,
36
+ top: 0,
37
+ width: 1
38
+ },
39
+ notDrawn: { display: "none" }
40
+ });
41
+ function actionOf(line, segment) {
42
+ return (event) => {
43
+ const { actionName } = event.nativeEvent;
44
+ if (actionName === "increment" || actionName === "decrement") stepKey(line, segment, actionName);
45
+ };
46
+ }
47
+ function arrivedIn({ inside, onFocus }) {
48
+ if (!inside.current) {
49
+ inside.current = true;
50
+ onFocus?.();
51
+ }
52
+ }
53
+ function changedOf(line) {
54
+ return (text) => {
55
+ const segment = line.state.segments.find((each) => each.type === line.active);
56
+ if (segment === void 0) return;
57
+ if (text.length < 1) {
58
+ eraseKey(line, segment);
59
+ return;
60
+ }
61
+ const point = text.replace(SENTINEL, "").codePointAt(0);
62
+ if (point !== void 0) typeKey(line, segment, String.fromCodePoint(point));
63
+ };
64
+ }
65
+ function commonPrefixLength(texts) {
66
+ const sorted = texts.toSorted();
67
+ const first = sorted.at(0) ?? "";
68
+ const last = sorted.at(-1) ?? "";
69
+ let length = 0;
70
+ while (length < first.length && first[length] === last[length]) length++;
71
+ return length;
72
+ }
73
+ /**
74
+ * A date or a time's segments, inside a field's box, from React Stately's
75
+ * date field state: each part of the value typed or stepped on its own, the
76
+ * one being typed drawn as a filled shape and the empty ones in their
77
+ * placeholders, muted.
78
+ */
79
+ function DateSegments(t0) {
80
+ const $ = c(18);
81
+ let onActiveChange;
82
+ let props;
83
+ let ref;
84
+ if ($[0] !== t0) {
85
+ ({onActiveChange, ref, ...props} = t0);
86
+ $[0] = t0;
87
+ $[1] = onActiveChange;
88
+ $[2] = props;
89
+ $[3] = ref;
90
+ } else {
91
+ onActiveChange = $[1];
92
+ props = $[2];
93
+ ref = $[3];
94
+ }
95
+ const [active, setActive] = useState(null);
96
+ const entered = useRef("");
97
+ const inside = useRef(false);
98
+ const input = useRef(null);
99
+ let t1;
100
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
101
+ t1 = /* @__PURE__ */ new Map();
102
+ $[4] = t1;
103
+ } else t1 = $[4];
104
+ const nodes = useRef(t1);
105
+ const { drawing, state } = props;
106
+ let t2;
107
+ if ($[5] !== onActiveChange) {
108
+ t2 = (type) => {
109
+ onActiveChange?.(type);
110
+ };
111
+ $[5] = onActiveChange;
112
+ $[6] = t2;
113
+ } else t2 = $[6];
114
+ const reportActive = useEffectEvent(t2);
115
+ let t3;
116
+ if ($[7] !== active || $[8] !== reportActive) {
117
+ t3 = () => {
118
+ reportActive(active);
119
+ };
120
+ $[7] = active;
121
+ $[8] = reportActive;
122
+ $[9] = t3;
123
+ } else t3 = $[9];
124
+ let t4;
125
+ if ($[10] !== active) {
126
+ t4 = [active];
127
+ $[10] = active;
128
+ $[11] = t4;
129
+ } else t4 = $[11];
130
+ useEffect(t3, t4);
131
+ let t5;
132
+ if ($[12] !== drawing || $[13] !== state) {
133
+ t5 = () => ({
134
+ focus: () => {
135
+ const first = state.segments.find((segment) => typedInto(drawing, segment));
136
+ if (!inside.current && first !== void 0) focusTo({
137
+ entered,
138
+ input,
139
+ nodes,
140
+ setActive,
141
+ state
142
+ }, first.type);
143
+ },
144
+ focusLast: () => {
145
+ const last = state.segments.findLast((segment_0) => typedInto(drawing, segment_0));
146
+ if (last !== void 0) focusTo({
147
+ entered,
148
+ input,
149
+ nodes,
150
+ setActive,
151
+ state
152
+ }, last.type);
153
+ },
154
+ focusOn: (type_0, keyboard) => {
155
+ focusTo({
156
+ entered,
157
+ input,
158
+ nodes,
159
+ setActive,
160
+ state
161
+ }, type_0, keyboard);
162
+ }
163
+ });
164
+ $[12] = drawing;
165
+ $[13] = state;
166
+ $[14] = t5;
167
+ } else t5 = $[14];
168
+ useImperativeHandle(ref, t5);
169
+ let t6;
170
+ if ($[15] !== active || $[16] !== props) {
171
+ t6 = /* @__PURE__ */ jsx(SegmentLine, {
172
+ ...props,
173
+ active,
174
+ entered,
175
+ input,
176
+ inside,
177
+ nodes,
178
+ setActive
179
+ });
180
+ $[15] = active;
181
+ $[16] = props;
182
+ $[17] = t6;
183
+ } else t6 = $[17];
184
+ return t6;
185
+ }
186
+ function dayPeriodsOf(locale) {
187
+ const formatter = new DateFormatter(locale, {
188
+ hour: "numeric",
189
+ hour12: true
190
+ });
191
+ const periodAt = (hours) => {
192
+ const date = /* @__PURE__ */ new Date();
193
+ date.setHours(hours);
194
+ return formatter.formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
195
+ };
196
+ return [periodAt(0), periodAt(12)];
197
+ }
198
+ function drawn(drawing, segment) {
199
+ if (drawing === void 0) return true;
200
+ return segment.type === "literal" ? segment.text.replaceAll(INVISIBLE, "") !== "" : drawing.parts.has(segment.type);
201
+ }
202
+ function edited({ onEdit }, changed) {
203
+ if (changed) onEdit?.();
204
+ }
205
+ function eraseFrom(state, segment, locale, entered, moves) {
206
+ if (state.isDisabled || state.isReadOnly) return false;
207
+ if (segment.text === segment.placeholder) moves.previous();
208
+ const parser = new NumberParser(locale, { maximumFractionDigits: 0 });
209
+ if (parser.isValidPartialNumber(segment.text) && !segment.isPlaceholder) {
210
+ const shortened = segment.text.slice(0, -1);
211
+ const parsed = parser.parse(shortened);
212
+ const kept = parsed === 0 ? "" : shortened;
213
+ if (kept === "") state.clearSegment(segment.type);
214
+ else state.setSegment(segment.type, parsed);
215
+ entered.current = kept;
216
+ return true;
217
+ }
218
+ if (segment.type === "dayPeriod" || segment.type === "era") {
219
+ state.clearSegment(segment.type);
220
+ return true;
221
+ }
222
+ return false;
223
+ }
224
+ function eraseKey(line, segment) {
225
+ edited(line, eraseFrom(line.state, segment, line.locale, line.entered, movesFrom(line, segment.type)));
226
+ }
227
+ function erasOf(calendar, locale) {
228
+ const formatter = new DateFormatter(locale, {
229
+ era: "narrow",
230
+ timeZone: "UTC",
231
+ year: "numeric"
232
+ });
233
+ const first = toCalendar(new CalendarDate(1, 1, 1), calendar);
234
+ const eras = calendar.getEras().map((era) => {
235
+ const date = first.set({
236
+ day: 1,
237
+ era,
238
+ month: 1,
239
+ year: 1
240
+ }).toDate("UTC");
241
+ return {
242
+ era,
243
+ formatted: formatter.formatToParts(date).find((part) => part.type === "era")?.value ?? era
244
+ };
245
+ });
246
+ const prefix = commonPrefixLength(eras.map((era) => era.formatted));
247
+ return eras.map(({ era, formatted }) => ({
248
+ era,
249
+ formatted: formatted.slice(prefix)
250
+ }));
251
+ }
252
+ function focusTo({ entered, input, nodes, setActive, state }, type, keyboard = true) {
253
+ entered.current = "";
254
+ if (Platform.OS === "web") {
255
+ nodes.current.get(type)?.focus();
256
+ return;
257
+ }
258
+ if (!keyboard) {
259
+ setActive(type);
260
+ input.current?.blur();
261
+ return;
262
+ }
263
+ if (state.isReadOnly) return;
264
+ setActive(type);
265
+ input.current?.focus();
266
+ }
267
+ function hidesEra(state, era) {
268
+ return state.calendar.identifier === "gregory" && era !== "BC";
269
+ }
270
+ function inputFocusedOf(line) {
271
+ return () => {
272
+ const first = line.state.segments.find((segment) => typedInto(line.drawing, segment))?.type ?? null;
273
+ line.setActive((current) => current ?? first);
274
+ arrivedIn(line);
275
+ };
276
+ }
277
+ function inputOf({ input }) {
278
+ return (node) => {
279
+ input.current = node;
280
+ };
281
+ }
282
+ function leftOf({ entered, inside, onBlur, setActive, state }) {
283
+ return () => {
284
+ inside.current = false;
285
+ entered.current = "";
286
+ setActive(null);
287
+ state.confirmPlaceholder();
288
+ onBlur?.();
289
+ };
290
+ }
291
+ function movesFrom(line, type) {
292
+ const editable = line.state.segments.filter((segment) => typedInto(line.drawing, segment));
293
+ const at = editable.findIndex((segment) => segment.type === type);
294
+ const to = (index, beyond) => () => {
295
+ const segment = index < 0 ? void 0 : editable.at(index);
296
+ if (segment === void 0) beyond?.();
297
+ else focusTo(line, segment.type);
298
+ };
299
+ return {
300
+ away: to(at > 0 ? at - 1 : at + 1),
301
+ next: to(at + 1, line.onPastEnd),
302
+ previous: to(at - 1, line.onBeforeStart)
303
+ };
304
+ }
305
+ function nameOf(type) {
306
+ return type === "literal" ? "day" : type;
307
+ }
308
+ function nodeOf({ nodes }, type) {
309
+ return (node) => {
310
+ if (node === null) return;
311
+ nodes.current.set(type, node);
312
+ return () => {
313
+ nodes.current.delete(type);
314
+ };
315
+ };
316
+ }
317
+ function pressOf(line, type) {
318
+ return () => {
319
+ focusTo(line, type, line.drawing?.raisesKeyboard ?? true);
320
+ };
321
+ }
322
+ function relatedTargetOf(event) {
323
+ return typeof event === "object" && event !== null && "relatedTarget" in event ? event.relatedTarget : void 0;
324
+ }
325
+ function SegmentLine(line) {
326
+ const $ = c(15);
327
+ const { active, described, drawing, isInvalid, label, locale, state } = line;
328
+ const id = useId();
329
+ const theme = useTheme();
330
+ const own = segmentStylesOf(theme);
331
+ const role = useTypeRole("bodyLarge");
332
+ const words = messagesFor(locale).segments;
333
+ let t0;
334
+ if ($[0] !== drawing || $[1] !== state.segments) {
335
+ let t1;
336
+ if ($[3] !== drawing) {
337
+ t1 = (segment) => typedInto(drawing, segment);
338
+ $[3] = drawing;
339
+ $[4] = t1;
340
+ } else t1 = $[4];
341
+ t0 = state.segments.find(t1);
342
+ $[0] = drawing;
343
+ $[1] = state.segments;
344
+ $[2] = t0;
345
+ } else t0 = $[2];
346
+ const first = t0;
347
+ const value = line.holding ?? valueOf(state, words);
348
+ const valueId = `${id}-value`;
349
+ const parts = value === "" ? described : [{
350
+ id: valueId,
351
+ text: value
352
+ }, ...described];
353
+ const canEdit = !state.isDisabled && !state.isReadOnly;
354
+ const T0 = FieldSegments;
355
+ const t1 = state.segments.map((segment_0, index) => {
356
+ if (!drawn(drawing, segment_0)) return null;
357
+ if (!segment_0.isEditable) return /* @__PURE__ */ jsx(Text, {
358
+ "aria-hidden": segment_0.type === "literal",
359
+ style: drawing === void 0 ? composeStyles(role, segment_0.type === "literal" ? void 0 : own.segment, state.isDisabled ? own.textDisabled : segment_0.type === "literal" ? own.textMuted : own.text) : drawing.literal,
360
+ children: segment_0.text
361
+ }, `${segment_0.type}-${index}`);
362
+ const focused = segment_0.type === active;
363
+ const describes = isInvalid || segment_0.type === first?.type;
364
+ return /* @__PURE__ */ createElement(Pressable, {
365
+ ...Platform.OS === "web" ? webPropsOf(line, segment_0) : void 0,
366
+ ...describes ? descriptionOf(parts) : void 0,
367
+ ...webStateOf(isInvalid, state),
368
+ accessibilityActions: canEdit ? ADJUSTABLE : void 0,
369
+ accessibilityRole: Platform.OS === "web" ? void 0 : "adjustable",
370
+ "aria-disabled": state.isDisabled,
371
+ "aria-label": `${words[nameOf(segment_0.type)]}, ${label}`,
372
+ "aria-valuemax": segment_0.maxValue,
373
+ "aria-valuemin": segment_0.minValue,
374
+ "aria-valuenow": segment_0.value ?? void 0,
375
+ "aria-valuetext": valueTextOf(segment_0, state, locale, words.empty),
376
+ disabled: state.isDisabled,
377
+ key: segment_0.type,
378
+ onAccessibilityAction: actionOf(line, segment_0),
379
+ onPress: Platform.OS === "web" ? void 0 : pressOf(line, segment_0.type),
380
+ ref: nodeOf(line, segment_0.type),
381
+ role: Platform.OS === "web" ? "spinbutton" : void 0,
382
+ style: drawing === void 0 ? composeStyles(own.segment, focused ? own.segmentFocused : void 0) : drawing.box(segment_0.type, focused)
383
+ }, /* @__PURE__ */ jsx(Text, {
384
+ style: drawing === void 0 ? composeStyles(role, textStyleOf(own, segment_0, focused, state.isDisabled)) : drawing.text(segment_0.type, focused),
385
+ children: segment_0.text
386
+ }));
387
+ });
388
+ let t2;
389
+ if ($[5] !== active || $[6] !== canEdit || $[7] !== line || $[8] !== value || $[9] !== valueId) {
390
+ t2 = Platform.OS === "web" ? value === "" ? null : /* @__PURE__ */ jsx(Text, {
391
+ id: valueId,
392
+ style: styles.notDrawn,
393
+ children: value
394
+ }) : /* @__PURE__ */ jsx(TextInput, {
395
+ "aria-hidden": true,
396
+ autoCapitalize: "none",
397
+ autoComplete: "off",
398
+ autoCorrect: false,
399
+ caretHidden: true,
400
+ contextMenuHidden: true,
401
+ editable: canEdit,
402
+ importantForAutofill: "no",
403
+ keyboardType: active === null || NUMERIC.has(active) ? "number-pad" : "default",
404
+ onBlur: leftOf(line),
405
+ onChangeText: changedOf(line),
406
+ onFocus: inputFocusedOf(line),
407
+ ref: inputOf(line),
408
+ selection: AFTER_SENTINEL,
409
+ spellCheck: false,
410
+ style: styles.input,
411
+ value: SENTINEL
412
+ });
413
+ $[5] = active;
414
+ $[6] = canEdit;
415
+ $[7] = line;
416
+ $[8] = value;
417
+ $[9] = valueId;
418
+ $[10] = t2;
419
+ } else t2 = $[10];
420
+ let t3;
421
+ if ($[11] !== T0 || $[12] !== t1 || $[13] !== t2) {
422
+ t3 = /* @__PURE__ */ jsxs(T0, { children: [t1, t2] });
423
+ $[11] = T0;
424
+ $[12] = t1;
425
+ $[13] = t2;
426
+ $[14] = t3;
427
+ } else t3 = $[14];
428
+ return t3;
429
+ }
430
+ function stepBy(state, segment, by, entered) {
431
+ if (state.isDisabled || state.isReadOnly) return false;
432
+ entered.current = "";
433
+ state[by](segment.type);
434
+ return true;
435
+ }
436
+ function stepKey(line, segment, by) {
437
+ const changed = stepBy(line.state, segment, by, line.entered);
438
+ if (changed && segment.type === "era" && line.active === "era" && hidesEra(line.state, "AD")) movesFrom(line, "era").away();
439
+ edited(line, changed);
440
+ }
441
+ function textStyleOf(own, segment, focused, isDisabled) {
442
+ if (isDisabled) return own.textDisabled;
443
+ if (focused) return own.textFocused;
444
+ return segment.isPlaceholder ? own.textMuted : own.text;
445
+ }
446
+ function typedInto(drawing, segment) {
447
+ return segment.isEditable && drawn(drawing, segment);
448
+ }
449
+ function typeInto(state, segment, key, locale, entered, moves) {
450
+ if (state.isDisabled || state.isReadOnly) return false;
451
+ const startsWith = startsWithIn(locale);
452
+ switch (segment.type) {
453
+ case "day":
454
+ case "hour":
455
+ case "minute":
456
+ case "month":
457
+ case "second":
458
+ case "year": {
459
+ const parser = new NumberParser(locale, { maximumFractionDigits: 0 });
460
+ const typed = entered.current + key;
461
+ if (!parser.isValidPartialNumber(typed)) return false;
462
+ const number = parser.parse(typed);
463
+ if (Number.isNaN(number)) return false;
464
+ const { maxValue } = segment;
465
+ const over = maxValue !== void 0 && number > maxValue;
466
+ state.setSegment(segment.type, over ? parser.parse(key) : number);
467
+ if (maxValue !== void 0 && (Number(`${number}0`) > maxValue || typed.length >= String(maxValue).length)) {
468
+ entered.current = "";
469
+ moves.next();
470
+ } else entered.current = typed;
471
+ return true;
472
+ }
473
+ case "dayPeriod": {
474
+ const [am, pm] = dayPeriodsOf(locale);
475
+ if (startsWith(am, key)) state.setSegment("dayPeriod", 0);
476
+ else if (startsWith(pm, key)) state.setSegment("dayPeriod", 1);
477
+ else return false;
478
+ moves.next();
479
+ return true;
480
+ }
481
+ case "era": {
482
+ const matched = erasOf(state.calendar, locale).find((era) => startsWith(era.formatted, key));
483
+ if (matched === void 0) return false;
484
+ state.setSegment("era", matched.era);
485
+ if (hidesEra(state, matched.era)) moves.away();
486
+ else moves.next();
487
+ return true;
488
+ }
489
+ }
490
+ return false;
491
+ }
492
+ function typeKey(line, segment, key) {
493
+ edited(line, typeInto(line.state, segment, key, line.locale, line.entered, movesFrom(line, segment.type)));
494
+ }
495
+ function valueOf(state, words) {
496
+ if (state.value === null) return "";
497
+ const written = state.formatValue({ month: "long" });
498
+ return state.maxGranularity === "hour" ? words.selectedTime.replace("{time}", written) : words.selectedDate.replace("{date}", written);
499
+ }
500
+ function valueTextOf(segment, state, locale, empty) {
501
+ if (segment.isPlaceholder) return empty;
502
+ const { hour12, timeZone } = state.dateFormatter.resolvedOptions();
503
+ if (segment.type === "month") {
504
+ const month = new DateFormatter(locale, {
505
+ month: "long",
506
+ timeZone
507
+ }).format(state.dateValue);
508
+ return month === segment.text ? month : `${segment.text} – ${month}`;
509
+ }
510
+ if (segment.type === "hour") return new DateFormatter(locale, {
511
+ hour: "numeric",
512
+ hour12,
513
+ timeZone
514
+ }).format(state.dateValue);
515
+ return segment.text;
516
+ }
517
+ function webPropsOf(line, segment) {
518
+ const moves = movesFrom(line, segment.type);
519
+ const step = (by) => () => {
520
+ stepKey(line, segment, by);
521
+ };
522
+ const erase = () => {
523
+ eraseKey(line, segment);
524
+ };
525
+ const keys = /* @__PURE__ */ new Map([
526
+ ["ArrowDown", step("decrement")],
527
+ ["ArrowLeft", I18nManager.isRTL ? moves.next : moves.previous],
528
+ ["ArrowRight", I18nManager.isRTL ? moves.previous : moves.next],
529
+ ["ArrowUp", step("increment")],
530
+ ["Backspace", erase],
531
+ ["Delete", erase],
532
+ ["End", step("incrementToMax")],
533
+ ["Home", step("decrementToMin")],
534
+ ["PageDown", step("decrementPage")],
535
+ ["PageUp", step("incrementPage")]
536
+ ]);
537
+ return {
538
+ onBlur: (event) => {
539
+ const to = relatedTargetOf(event.nativeEvent);
540
+ if (![...line.nodes.current.values()].some((node) => node === to)) leftOf(line)();
541
+ },
542
+ onFocus: () => {
543
+ line.entered.current = "";
544
+ line.setActive(segment.type);
545
+ arrivedIn(line);
546
+ },
547
+ onKeyDown: (event) => {
548
+ const { altKey, ctrlKey, key, metaKey } = event.nativeEvent;
549
+ const handler = keys.get(key);
550
+ if (handler !== void 0) {
551
+ event.preventDefault();
552
+ handler();
553
+ return;
554
+ }
555
+ const point = key.codePointAt(0);
556
+ if (point !== void 0 && String.fromCodePoint(point) === key && !altKey && !ctrlKey && !metaKey) {
557
+ event.preventDefault();
558
+ typeKey(line, segment, key);
559
+ }
560
+ }
561
+ };
562
+ }
563
+ function webStateOf(isInvalid, state) {
564
+ if (Platform.OS !== "web") return;
565
+ return {
566
+ ...isInvalid ? { "aria-invalid": true } : void 0,
567
+ ...state.isReadOnly ? { "aria-readonly": true } : void 0,
568
+ ...state.isRequired ? { "aria-required": true } : void 0
569
+ };
570
+ }
571
+ //#endregion
572
+ export { DateSegments };
573
+
574
+ //# sourceMappingURL=index.js.map