@multiplatform.one/forms 7.63.3 → 7.64.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 (186) hide show
  1. package/dist/cjs/AdaptivePopup/index.cjs +3 -5
  2. package/dist/cjs/AdaptivePopup/index.native.js +3 -5
  3. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  4. package/dist/cjs/Button/index.cjs +1 -0
  5. package/dist/cjs/Button/index.native.js +1 -0
  6. package/dist/cjs/Button/index.native.js.map +1 -1
  7. package/dist/cjs/fields/ColorPicker/SystemColorField.cjs +106 -0
  8. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js +110 -0
  9. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -0
  10. package/dist/cjs/fields/ColorPicker/index.cjs +36 -4
  11. package/dist/cjs/fields/ColorPicker/index.native.js +36 -6
  12. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  13. package/dist/cjs/fields/ColorPicker/systemColorWell.cjs +30 -0
  14. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.cjs +30 -0
  15. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js +33 -0
  16. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -0
  17. package/dist/cjs/fields/ColorPicker/systemColorWell.native.js +111 -0
  18. package/dist/cjs/fields/ColorPicker/systemColorWell.native.js.map +1 -0
  19. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +27 -0
  20. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +31 -0
  21. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  22. package/dist/cjs/fields/DatePicker/catalog.cjs +30 -1
  23. package/dist/cjs/fields/DatePicker/catalog.native.js +32 -1
  24. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  25. package/dist/cjs/fields/DatePicker/parts.cjs +17 -6
  26. package/dist/cjs/fields/DatePicker/parts.native.js +17 -6
  27. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  28. package/dist/cjs/fields/TimePicker/catalog.cjs +24 -0
  29. package/dist/cjs/fields/TimePicker/catalog.native.js +28 -0
  30. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  31. package/dist/cjs/fields/TimePicker/parts.cjs +20 -8
  32. package/dist/cjs/fields/TimePicker/parts.native.js +20 -8
  33. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  34. package/dist/cjs/shared/focusManagement.cjs +1 -5
  35. package/dist/cjs/shared/focusManagement.native.js +1 -5
  36. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  37. package/dist/cjs/shared/touchWebPicker.cjs +136 -0
  38. package/dist/cjs/shared/touchWebPicker.native.js +154 -0
  39. package/dist/cjs/shared/touchWebPicker.native.js.map +1 -0
  40. package/dist/esm/AdaptivePopup/index.mjs +4 -6
  41. package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
  42. package/dist/esm/AdaptivePopup/index.native.js +4 -6
  43. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  44. package/dist/esm/Button/index.mjs +2 -1
  45. package/dist/esm/Button/index.mjs.map +1 -1
  46. package/dist/esm/Button/index.native.js +2 -1
  47. package/dist/esm/Button/index.native.js.map +1 -1
  48. package/dist/esm/fields/ColorPicker/SystemColorField.mjs +81 -0
  49. package/dist/esm/fields/ColorPicker/SystemColorField.mjs.map +1 -0
  50. package/dist/esm/fields/ColorPicker/SystemColorField.native.js +82 -0
  51. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -0
  52. package/dist/esm/fields/ColorPicker/index.mjs +36 -4
  53. package/dist/esm/fields/ColorPicker/index.mjs.map +1 -1
  54. package/dist/esm/fields/ColorPicker/index.native.js +36 -6
  55. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  56. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.mjs +5 -0
  57. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.mjs.map +1 -0
  58. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js +5 -0
  59. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -0
  60. package/dist/esm/fields/ColorPicker/systemColorWell.mjs +5 -0
  61. package/dist/esm/fields/ColorPicker/systemColorWell.mjs.map +1 -0
  62. package/dist/esm/fields/ColorPicker/systemColorWell.native.js +77 -0
  63. package/dist/esm/fields/ColorPicker/systemColorWell.native.js.map +1 -0
  64. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +27 -0
  65. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  66. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +31 -0
  67. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  68. package/dist/esm/fields/DatePicker/catalog.mjs +30 -1
  69. package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
  70. package/dist/esm/fields/DatePicker/catalog.native.js +32 -1
  71. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  72. package/dist/esm/fields/DatePicker/parts.mjs +17 -6
  73. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  74. package/dist/esm/fields/DatePicker/parts.native.js +17 -6
  75. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  76. package/dist/esm/fields/TimePicker/catalog.mjs +24 -0
  77. package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
  78. package/dist/esm/fields/TimePicker/catalog.native.js +28 -0
  79. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  80. package/dist/esm/fields/TimePicker/parts.mjs +20 -8
  81. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  82. package/dist/esm/fields/TimePicker/parts.native.js +20 -8
  83. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  84. package/dist/esm/shared/focusManagement.mjs +2 -6
  85. package/dist/esm/shared/focusManagement.mjs.map +1 -1
  86. package/dist/esm/shared/focusManagement.native.js +2 -6
  87. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  88. package/dist/esm/shared/touchWebPicker.mjs +105 -0
  89. package/dist/esm/shared/touchWebPicker.mjs.map +1 -0
  90. package/dist/esm/shared/touchWebPicker.native.js +120 -0
  91. package/dist/esm/shared/touchWebPicker.native.js.map +1 -0
  92. package/dist/jsx/AdaptivePopup/index.mjs +4 -6
  93. package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
  94. package/dist/jsx/AdaptivePopup/index.native.js +3 -5
  95. package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
  96. package/dist/jsx/Button/index.mjs +2 -1
  97. package/dist/jsx/Button/index.mjs.map +1 -1
  98. package/dist/jsx/Button/index.native.js +1 -0
  99. package/dist/jsx/Button/index.native.js.map +1 -1
  100. package/dist/jsx/fields/ColorPicker/SystemColorField.mjs +81 -0
  101. package/dist/jsx/fields/ColorPicker/SystemColorField.mjs.map +1 -0
  102. package/dist/jsx/fields/ColorPicker/SystemColorField.native.js +110 -0
  103. package/dist/jsx/fields/ColorPicker/SystemColorField.native.js.map +1 -0
  104. package/dist/jsx/fields/ColorPicker/index.mjs +36 -4
  105. package/dist/jsx/fields/ColorPicker/index.mjs.map +1 -1
  106. package/dist/jsx/fields/ColorPicker/index.native.js +36 -6
  107. package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
  108. package/dist/jsx/fields/ColorPicker/systemColorWell.gnome.mjs +5 -0
  109. package/dist/jsx/fields/ColorPicker/systemColorWell.gnome.mjs.map +1 -0
  110. package/dist/jsx/fields/ColorPicker/systemColorWell.gnome.native.js +33 -0
  111. package/dist/jsx/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -0
  112. package/dist/jsx/fields/ColorPicker/systemColorWell.mjs +5 -0
  113. package/dist/jsx/fields/ColorPicker/systemColorWell.mjs.map +1 -0
  114. package/dist/jsx/fields/ColorPicker/systemColorWell.native.js +111 -0
  115. package/dist/jsx/fields/ColorPicker/systemColorWell.native.js.map +1 -0
  116. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +27 -0
  117. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  118. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +31 -0
  119. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  120. package/dist/jsx/fields/DatePicker/catalog.mjs +30 -1
  121. package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
  122. package/dist/jsx/fields/DatePicker/catalog.native.js +32 -1
  123. package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
  124. package/dist/jsx/fields/DatePicker/parts.mjs +17 -6
  125. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  126. package/dist/jsx/fields/DatePicker/parts.native.js +17 -6
  127. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  128. package/dist/jsx/fields/TimePicker/catalog.mjs +24 -0
  129. package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
  130. package/dist/jsx/fields/TimePicker/catalog.native.js +28 -0
  131. package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
  132. package/dist/jsx/fields/TimePicker/parts.mjs +20 -8
  133. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  134. package/dist/jsx/fields/TimePicker/parts.native.js +20 -8
  135. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  136. package/dist/jsx/shared/focusManagement.mjs +2 -6
  137. package/dist/jsx/shared/focusManagement.mjs.map +1 -1
  138. package/dist/jsx/shared/focusManagement.native.js +1 -5
  139. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  140. package/dist/jsx/shared/touchWebPicker.mjs +105 -0
  141. package/dist/jsx/shared/touchWebPicker.mjs.map +1 -0
  142. package/dist/jsx/shared/touchWebPicker.native.js +154 -0
  143. package/dist/jsx/shared/touchWebPicker.native.js.map +1 -0
  144. package/package.json +13 -8
  145. package/src/AdaptivePopup/index.tsx +4 -3
  146. package/src/Button/index.tsx +4 -0
  147. package/src/fields/ColorPicker/SystemColorField.tsx +101 -0
  148. package/src/fields/ColorPicker/index.tsx +48 -13
  149. package/src/fields/ColorPicker/systemColorWell.gnome.ts +7 -0
  150. package/src/fields/ColorPicker/systemColorWell.native.spec.tsx +266 -0
  151. package/src/fields/ColorPicker/systemColorWell.native.tsx +144 -0
  152. package/src/fields/ColorPicker/systemColorWell.ts +21 -0
  153. package/src/fields/DatePicker/DatePicker.stories.tsx +27 -1
  154. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +45 -1
  155. package/src/fields/DatePicker/catalog.tsx +48 -8
  156. package/src/fields/DatePicker/parts.tsx +19 -4
  157. package/src/fields/DatePicker/touchWeb.spec.tsx +245 -0
  158. package/src/fields/TimePicker/catalog.tsx +33 -0
  159. package/src/fields/TimePicker/parts.tsx +19 -6
  160. package/src/overlayGround.spec.ts +50 -0
  161. package/src/shared/focusManagement.ts +7 -3
  162. package/src/shared/touchWebPicker.spec.ts +98 -0
  163. package/src/shared/touchWebPicker.tsx +158 -0
  164. package/types/AdaptivePopup/index.d.ts.map +1 -1
  165. package/types/Button/index.d.ts.map +1 -1
  166. package/types/fields/ColorPicker/SystemColorField.d.ts +22 -0
  167. package/types/fields/ColorPicker/SystemColorField.d.ts.map +1 -0
  168. package/types/fields/ColorPicker/index.d.ts.map +1 -1
  169. package/types/fields/ColorPicker/systemColorWell.d.ts +18 -0
  170. package/types/fields/ColorPicker/systemColorWell.d.ts.map +1 -0
  171. package/types/fields/ColorPicker/systemColorWell.gnome.d.ts +5 -0
  172. package/types/fields/ColorPicker/systemColorWell.gnome.d.ts.map +1 -0
  173. package/types/fields/ColorPicker/systemColorWell.native.d.ts +55 -0
  174. package/types/fields/ColorPicker/systemColorWell.native.d.ts.map +1 -0
  175. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +1 -1
  176. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  177. package/types/fields/DatePicker/catalog.d.ts.map +1 -1
  178. package/types/fields/DatePicker/parts.d.ts +6 -1
  179. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  180. package/types/fields/RadioGroup/index.d.ts +2 -2
  181. package/types/fields/TimePicker/catalog.d.ts.map +1 -1
  182. package/types/fields/TimePicker/parts.d.ts +3 -1
  183. package/types/fields/TimePicker/parts.d.ts.map +1 -1
  184. package/types/shared/focusManagement.d.ts.map +1 -1
  185. package/types/shared/touchWebPicker.d.ts +40 -0
  186. package/types/shared/touchWebPicker.d.ts.map +1 -0
@@ -14,6 +14,12 @@ import {
14
14
  useResolvedValidators,
15
15
  } from "../../shared/utils";
16
16
  import type { AnyFormApi } from "../../types";
17
+ import {
18
+ fromTimeInputValue,
19
+ toTimeInputValue,
20
+ TouchWebPickerInput,
21
+ useCoarsePointer,
22
+ } from "../../shared/touchWebPicker";
17
23
  import {
18
24
  TimePanel,
19
25
  TimePickerClearButton,
@@ -87,6 +93,7 @@ export function TimePicker({
87
93
  id: idProp,
88
94
  });
89
95
  const resolvedValidators = useResolvedValidators(required, validators, label, name);
96
+ const touchWeb = useCoarsePointer();
90
97
  const [open, setOpen] = useState(false);
91
98
  const [internalValue, setInternalValue] = useState<string>(() => valueProp ?? defaultValue ?? "");
92
99
  useEffect(() => {
@@ -167,6 +174,32 @@ export function TimePicker({
167
174
  if (readOnly) {
168
175
  return renderTrigger(triggerValue, hasError, undefined, true);
169
176
  }
177
+ if (touchWeb) {
178
+ return (
179
+ <TimePickerInputTrigger
180
+ value={triggerValue}
181
+ placeholder={placeholder}
182
+ disabled={disabled}
183
+ clockIcon={clockIcon}
184
+ onOpen={() => {}}
185
+ onClear={() => handleClear(fieldChange)}
186
+ touchInput={
187
+ <TouchWebPickerInput
188
+ kind="time"
189
+ id={id}
190
+ value={toTimeInputValue(fieldValue ?? value, showSeconds)}
191
+ showSeconds={showSeconds}
192
+ disabled={disabled}
193
+ required={required}
194
+ invalid={hasError}
195
+ aria-label={label ? undefined : t("Time")}
196
+ onValue={(next) => handleChange(fromTimeInputValue(next, showSeconds), fieldChange)}
197
+ onBlur={blurHandler}
198
+ />
199
+ }
200
+ />
201
+ );
202
+ }
170
203
  return (
171
204
  <FloatingPanel
172
205
  open={open}
@@ -124,6 +124,8 @@ interface TimePickerInputTriggerProps {
124
124
  "aria-readonly"?: boolean;
125
125
  /** FZ-7853: same shell, no clear action, nothing opens. */
126
126
  readOnly?: boolean;
127
+ /** Touch web (LC-266): the browser's time input, laid over the box; it owns tap, focus and name. */
128
+ touchInput?: ReactNode;
127
129
  }
128
130
 
129
131
  export function TimePickerInputTrigger({
@@ -139,8 +141,9 @@ export function TimePickerInputTrigger({
139
141
  "aria-invalid": ariaInvalid,
140
142
  "aria-readonly": ariaReadonly,
141
143
  readOnly,
144
+ touchInput,
142
145
  }: TimePickerInputTriggerProps) {
143
- const interactive = !disabled && !readOnly;
146
+ const interactive = !disabled && !readOnly && !touchInput;
144
147
  return (
145
148
  <View
146
149
  flexDirection="row"
@@ -160,6 +163,7 @@ export function TimePickerInputTrigger({
160
163
  onPress={isWeb && interactive ? onOpen : undefined}
161
164
  {...(disabled ? { opacity: 0.5, pointerEvents: "none" as const } : undefined)}
162
165
  >
166
+ {touchInput}
163
167
  <InputParts.Section data-testid="time-picker-glyph">
164
168
  <InputParts.Icon adornment="leading" color={formCommonColors.muted}>
165
169
  {clockIcon ?? <ClockIcon />}
@@ -169,15 +173,17 @@ export function TimePickerInputTrigger({
169
173
  <InputParts.Area
170
174
  readOnly
171
175
  {...(readOnly ? undefined : { pointerEvents: "none" as const })}
172
- id={id}
176
+ id={touchInput ? undefined : id}
173
177
  value={value}
174
178
  placeholder={placeholder}
175
179
  disabled={disabled}
176
180
  color={formCommonColors.text}
177
181
  placeholderTextColor={formCommonColors.muted}
178
- aria-label={ariaLabel}
179
- aria-required={ariaRequired}
180
- aria-invalid={ariaInvalid}
182
+ tabIndex={touchInput ? -1 : undefined}
183
+ aria-hidden={touchInput ? true : undefined}
184
+ aria-label={touchInput ? undefined : ariaLabel}
185
+ aria-required={touchInput ? undefined : ariaRequired}
186
+ aria-invalid={touchInput ? undefined : ariaInvalid}
181
187
  aria-readonly={readOnly || ariaReadonly || undefined}
182
188
  onKeyPress={
183
189
  !interactive
@@ -198,7 +204,14 @@ export function TimePickerInputTrigger({
198
204
  </InputParts.Section>
199
205
  {value && isWeb && !readOnly ? (
200
206
  <InputParts.Section>
201
- <TimePickerClearButton onClear={onClear} disabled={disabled} />
207
+ {touchInput ? (
208
+ // Above the touch input, so Clear stays reachable on the box.
209
+ <View zIndex={2}>
210
+ <TimePickerClearButton onClear={onClear} disabled={disabled} />
211
+ </View>
212
+ ) : (
213
+ <TimePickerClearButton onClear={onClear} disabled={disabled} />
214
+ )}
202
215
  </InputParts.Section>
203
216
  ) : null}
204
217
  </InputParts.Box>
@@ -25,6 +25,8 @@ import { formControlColors, formSelectedColors, formSwitchColors } from "./share
25
25
 
26
26
  /** The card's floor: the console's "a plain Button on an overlay's ground" asks the same. */
27
27
  const plateFloor = 1.1;
28
+ /** Round 2: a dark overlay edge is absent, or a hairline at most this much white. */
29
+ const edgeAlphaCeiling = 0.08;
28
30
 
29
31
  type RawThemes = Record<string, Record<string, { val: string } | string>>;
30
32
  const themes = createDefaultThemeConfig().tamagui.themes as unknown as RawThemes;
@@ -105,6 +107,16 @@ describe("FZ-7944: a control on an overlay has a plate distinct from the overlay
105
107
  describe.each(darkCases)("$label", (c) => {
106
108
  const ground = groundOf(c);
107
109
 
110
+ it("the overlay frame draws no light edge: elevation is the lighter fill and the shadow", () => {
111
+ const { elevatedSurface } = resolveKnobs(c.knobs, undefined, "dark").knobProps;
112
+ const edge = String(elevatedSurface.borderColor);
113
+ const alpha = /^(?:rgba|hsla)\(.*,\s*([\d.]+)\s*\)$/.exec(edge)?.[1];
114
+ expect(
115
+ edge === "transparent" || (alpha !== undefined && Number(alpha) <= edgeAlphaCeiling),
116
+ `${c.label} edge ${edge}`,
117
+ ).toBe(true);
118
+ });
119
+
108
120
  it("a tinted Button's rest, hover and press each clear the plate floor on the ground", () => {
109
121
  if (c.knobs.fillStyle === "outlined") return;
110
122
  const paint = controlTierPaint("tinted", true, true);
@@ -179,3 +191,41 @@ describe("FZ-7944: every frame that paints the elevated ground marks its subtree
179
191
  for (const tag of resets) expect(tag).toMatch(/\belevated\b/);
180
192
  });
181
193
  });
194
+
195
+ describe("FZ-7944 round 2, LC-71: the keyboard ring is the accent, never white", () => {
196
+ // A solid accent sub-theme keeps the on-fill ring for content inside the
197
+ // fill (FZ-7715); a Button on the page takes its ring from the parent scope.
198
+ const cases = [...presetCases, ...hueCases].filter((c) => !c.scope.endsWith("_accent"));
199
+ const ownInkHues = ["blue", "red", "green", "yellow", "orange", "pink", "purple"];
200
+
201
+ function channels(color: string): number[] {
202
+ const hex = themePackage.normalizeToHex(color);
203
+ if (!hex) throw new Error(`unparseable ring ${color}`);
204
+ return [1, 3, 5].map((index) => Number.parseInt(hex.slice(index, index + 2), 16));
205
+ }
206
+
207
+ it.each(cases)("$label", ({ scope }) => {
208
+ for (const component of [undefined, "Button"]) {
209
+ const ring = resolve(scope, "$outlineColor", component);
210
+ const rgb = channels(ring);
211
+ expect(
212
+ Math.max(...rgb) - Math.min(...rgb),
213
+ `${scope} ${component ?? ""} ring ${ring}`,
214
+ ).toBeGreaterThanOrEqual(24);
215
+ expect(
216
+ ratio(ring, resolve(scope, "$color1")),
217
+ `${scope} ring on its page`,
218
+ ).toBeGreaterThanOrEqual(3);
219
+ }
220
+ });
221
+
222
+ it("a colour scope rings in its own accent ink, any other scope in the root's", () => {
223
+ for (const { scope, scheme } of cases.filter((c) => c.scope === c.label)) {
224
+ const hue = scope.split("_")[1] ?? "";
225
+ const expected = ownInkHues.includes(hue)
226
+ ? resolve(scope, "$accentColor")
227
+ : resolve(scheme, "$outlineColor");
228
+ expect(resolve(scope, "$outlineColor"), scope).toBe(expected);
229
+ }
230
+ });
231
+ });
@@ -36,7 +36,12 @@
36
36
 
37
37
  import { useEffect, useRef, type RefObject } from "react";
38
38
  import { isWeb, useDialogContext } from "tamagui";
39
- import { wasKeyboardFocus, useResolvedKnobs, motionHideDelayMs } from "@multiplatform.one/theme";
39
+ import {
40
+ focusOnOpen,
41
+ wasKeyboardFocus,
42
+ useResolvedKnobs,
43
+ motionHideDelayMs,
44
+ } from "@multiplatform.one/theme";
40
45
  import { useRestoreRetries } from "./restoreRetries";
41
46
 
42
47
  const FOCUSABLE =
@@ -152,8 +157,7 @@ export function useSheetModalFocus(
152
157
  const focusIn = () => {
153
158
  if (!canUseDom()) return;
154
159
  if (frame.contains(document.activeElement)) return;
155
- const first = frame.querySelector<HTMLElement>(FOCUSABLE);
156
- (first ?? frame).focus({ preventScroll: true, focusVisible: false } as FocusOptions);
160
+ focusOnOpen(frame.querySelector<HTMLElement>(FOCUSABLE), frame);
157
161
  };
158
162
  // Both frames are tracked: cancelling only the outer one leaves the inner
159
163
  // callback live once the outer has already run.
@@ -0,0 +1,98 @@
1
+ /**
2
+ * FZ-8114 value contract for the touch-web picker inputs, across timezones.
3
+ * The browser speaks timezone-naive strings; the MPO calendar speaks local
4
+ * Dates. Each zone below must map one onto the other without a day or hour
5
+ * shift. The negative control (the UTC-instant formulation) has to FAIL in
6
+ * some zone, so a host that stopped honouring TZ cannot pass this vacuously.
7
+ */
8
+ import { formatCalendarDate } from "@multiplatform.one/theme";
9
+ import { describe, expect, it } from "vitest";
10
+ import {
11
+ fromNativeDateValue,
12
+ fromTimeInputValue,
13
+ toDateInputValue,
14
+ toDatetimeLocalValue,
15
+ toTimeInputValue,
16
+ } from "./touchWebPicker";
17
+
18
+ const zones = [
19
+ "UTC",
20
+ "America/Los_Angeles",
21
+ "America/St_Johns",
22
+ "Asia/Kolkata",
23
+ "Pacific/Kiritimati",
24
+ ] as const;
25
+
26
+ function inZone<T>(timeZone: string, read: () => T): T {
27
+ const previous = process.env.TZ;
28
+ process.env.TZ = timeZone;
29
+ try {
30
+ return read();
31
+ } finally {
32
+ if (previous === undefined) delete process.env.TZ;
33
+ else process.env.TZ = previous;
34
+ }
35
+ }
36
+
37
+ describe("touch-web picker values (FZ-8114)", () => {
38
+ it("the zones really differ on this host", () => {
39
+ const offsets = new Set(
40
+ zones.map((zone) => inZone(zone, () => new Date(2026, 2, 5).getTimezoneOffset())),
41
+ );
42
+ expect(offsets.size).toBe(zones.length);
43
+ });
44
+
45
+ for (const zone of zones) {
46
+ describe(zone, () => {
47
+ it("date: the calendar's local midnight and the input string round-trip", () => {
48
+ inZone(zone, () => {
49
+ const picked = new Date(2026, 2, 5);
50
+ expect(toDateInputValue(picked)).toBe("2026-03-05");
51
+ const back = fromNativeDateValue("2026-03-05");
52
+ expect(back?.getTime()).toBe(picked.getTime());
53
+ expect(formatCalendarDate(back, "date")).toBe("2026-03-05");
54
+ });
55
+ });
56
+
57
+ it("datetime: the local wall clock and the datetime-local string round-trip", () => {
58
+ inZone(zone, () => {
59
+ const picked = new Date(2026, 7, 15, 23, 45, 30);
60
+ expect(toDatetimeLocalValue(picked, false)).toBe("2026-08-15T23:45");
61
+ expect(toDatetimeLocalValue(picked, true)).toBe("2026-08-15T23:45:30");
62
+ const back = fromNativeDateValue("2026-08-15T23:45");
63
+ expect(back?.getTime()).toBe(new Date(2026, 7, 15, 23, 45, 0).getTime());
64
+ expect(formatCalendarDate(back, "datetime")).toBe("2026-08-15 23:45:00");
65
+ const withSeconds = fromNativeDateValue("2026-08-15T23:45:30");
66
+ expect(withSeconds?.getTime()).toBe(picked.getTime());
67
+ });
68
+ });
69
+ });
70
+ }
71
+
72
+ it("negative control: the UTC instant names the wrong day in some zone", () => {
73
+ const wrong = zones.filter((zone) =>
74
+ inZone(zone, () => new Date(2026, 7, 15).toISOString().slice(0, 10) !== "2026-08-15"),
75
+ );
76
+ expect(wrong.length).toBeGreaterThan(0);
77
+ });
78
+
79
+ it("empty and unparseable input clears", () => {
80
+ expect(toDateInputValue(null)).toBe("");
81
+ expect(toDatetimeLocalValue(undefined, true)).toBe("");
82
+ expect(fromNativeDateValue("")).toBeNull();
83
+ expect(fromNativeDateValue("2026-13-45")).toBeNull();
84
+ });
85
+
86
+ it("time: the input string normalises to the string TimePicker's wheels emit", () => {
87
+ expect(fromTimeInputValue("14:30", false)).toBe("14:30");
88
+ expect(fromTimeInputValue("14:30", true)).toBe("14:30:00");
89
+ expect(fromTimeInputValue("14:30:15", false)).toBe("14:30");
90
+ expect(fromTimeInputValue("14:30:15.250", true)).toBe("14:30:15");
91
+ expect(fromTimeInputValue("9:05", false)).toBe("09:05");
92
+ expect(fromTimeInputValue("", false)).toBe("");
93
+ expect(fromTimeInputValue("25:00", false)).toBe("");
94
+ expect(toTimeInputValue("08:00:00", false)).toBe("08:00");
95
+ expect(toTimeInputValue("08:00", true)).toBe("08:00:00");
96
+ expect(toTimeInputValue(undefined, false)).toBe("");
97
+ });
98
+ });
@@ -0,0 +1,158 @@
1
+ import { formatCalendarDate, parseCalendarDate } from "@multiplatform.one/theme";
2
+ import { type CSSProperties, useSyncExternalStore } from "react";
3
+ import { isWeb } from "tamagui";
4
+
5
+ /**
6
+ * LC-266 on touch web (FZ-8114): a coarse primary pointer gets the browser's
7
+ * own picker (`input type=date|time|datetime-local`), laid transparently over
8
+ * the MPO box. iOS Safari opens its picker only for a real tap on the input,
9
+ * so the input has to be what the finger hits.
10
+ */
11
+
12
+ export type TouchWebPickerKind = "date" | "time" | "datetime-local";
13
+
14
+ const coarsePointerQuery = "(pointer: coarse)";
15
+
16
+ function coarsePointerList(): MediaQueryList | null {
17
+ if (!isWeb || typeof window === "undefined" || typeof window.matchMedia !== "function") {
18
+ return null;
19
+ }
20
+ return window.matchMedia(coarsePointerQuery);
21
+ }
22
+
23
+ function subscribeCoarsePointer(onChange: () => void): () => void {
24
+ const list = coarsePointerList();
25
+ if (!list) return () => {};
26
+ if (typeof list.addEventListener === "function") {
27
+ list.addEventListener("change", onChange);
28
+ return () => list.removeEventListener("change", onChange);
29
+ }
30
+ list.addListener?.(onChange);
31
+ return () => list.removeListener?.(onChange);
32
+ }
33
+
34
+ function readCoarsePointer(): boolean {
35
+ return coarsePointerList()?.matches ?? false;
36
+ }
37
+
38
+ /**
39
+ * Primary pointer only: a touch laptop driven by its trackpad reports `fine`
40
+ * and keeps the keyboard field. SSR and hydration read `false`.
41
+ */
42
+ export function useCoarsePointer(): boolean {
43
+ return useSyncExternalStore(subscribeCoarsePointer, readCoarsePointer, () => false);
44
+ }
45
+
46
+ export function toDateInputValue(value: Date | null | undefined): string {
47
+ return value ? formatCalendarDate(value, "date") : "";
48
+ }
49
+
50
+ export function toDatetimeLocalValue(value: Date | null | undefined, showSeconds: boolean): string {
51
+ if (!value) return "";
52
+ const wire = formatCalendarDate(value, "datetime").replace(" ", "T");
53
+ return showSeconds ? wire : wire.slice(0, 16);
54
+ }
55
+
56
+ /**
57
+ * The browser's string is timezone-naive, so it is read onto LOCAL parts:
58
+ * the same Date the MPO calendar builds for that day or wall clock.
59
+ */
60
+ export function fromNativeDateValue(value: string): Date | null {
61
+ return parseCalendarDate(value);
62
+ }
63
+
64
+ const nativeTimePattern = /^([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d)(?:\.\d+)?)?$/;
65
+
66
+ /** Browsers drop `:00` seconds or add milliseconds; both normalise to TimePicker's string. */
67
+ export function fromTimeInputValue(value: string, showSeconds: boolean): string {
68
+ const match = value
69
+ .trim()
70
+ .replace(/^(\d):/, "0$1:")
71
+ .match(nativeTimePattern);
72
+ if (!match) return "";
73
+ const base = `${match[1]}:${match[2]}`;
74
+ return showSeconds ? `${base}:${match[3] ?? "00"}` : base;
75
+ }
76
+
77
+ export function toTimeInputValue(value: string | null | undefined, showSeconds: boolean): string {
78
+ return fromTimeInputValue(value ?? "", showSeconds);
79
+ }
80
+
81
+ const overlayStyle: CSSProperties = {
82
+ position: "absolute",
83
+ top: 0,
84
+ left: 0,
85
+ width: "100%",
86
+ height: "100%",
87
+ margin: 0,
88
+ padding: 0,
89
+ border: 0,
90
+ opacity: 0,
91
+ // iOS Safari zooms the page into a focused input under 16px.
92
+ fontSize: 16,
93
+ cursor: "pointer",
94
+ zIndex: 1,
95
+ WebkitAppearance: "none",
96
+ appearance: "none",
97
+ };
98
+
99
+ export interface TouchWebPickerInputProps {
100
+ kind: TouchWebPickerKind;
101
+ value: string;
102
+ onValue: (value: string) => void;
103
+ onBlur?: () => void;
104
+ id?: string;
105
+ min?: string;
106
+ max?: string;
107
+ showSeconds?: boolean;
108
+ disabled?: boolean;
109
+ required?: boolean;
110
+ invalid?: boolean;
111
+ "aria-label"?: string;
112
+ "aria-describedby"?: string;
113
+ }
114
+
115
+ /** FieldLayout's label targets `id`, so the input carries the field's name. */
116
+ export function TouchWebPickerInput({
117
+ kind,
118
+ value,
119
+ onValue,
120
+ onBlur,
121
+ id,
122
+ min,
123
+ max,
124
+ showSeconds,
125
+ disabled,
126
+ required,
127
+ invalid,
128
+ "aria-label": ariaLabel,
129
+ "aria-describedby": ariaDescribedBy,
130
+ }: TouchWebPickerInputProps) {
131
+ return (
132
+ <input
133
+ type={kind}
134
+ id={id}
135
+ value={value}
136
+ min={min || undefined}
137
+ max={max || undefined}
138
+ step={showSeconds ? 1 : undefined}
139
+ disabled={disabled}
140
+ required={required}
141
+ aria-label={ariaLabel}
142
+ aria-describedby={ariaDescribedBy}
143
+ aria-invalid={invalid || undefined}
144
+ data-testid="touch-web-picker"
145
+ style={overlayStyle}
146
+ onChange={(event) => onValue(event.currentTarget.value)}
147
+ onBlur={onBlur}
148
+ onClick={(event) => {
149
+ // Chrome with a touch screen in desktop mode draws editable segments
150
+ // and opens nothing for a tap; showPicker opens the dialog. It throws
151
+ // when the picker is already up, which is harmless.
152
+ try {
153
+ (event.currentTarget as HTMLInputElement & { showPicker?: () => void }).showPicker?.();
154
+ } catch {}
155
+ }}
156
+ />
157
+ );
158
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AdaptivePopup/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA0Bf,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,uCAAuC;IACvC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;IAChD;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoBD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,yBAAyB,CAK5B;AAyFD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAW,EACX,IAAe,EACf,eAAsB,EACtB,MAAM,EACN,QAAQ,GACT,EAAE,kBAAkB,2CAkSpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AdaptivePopup/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA2Bf,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,uCAAuC;IACvC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;IAChD;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoBD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,yBAAyB,CAK5B;AAyFD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAW,EACX,IAAe,EACf,eAAsB,EACtB,MAAM,EACN,QAAQ,GACT,EAAE,kBAAkB,2CAkSpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Button/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Button/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ComponentType, type ReactNode } from "react";
2
+ import type { SystemColorWellProps } from "./systemColorWell";
3
+ export interface SystemColorFieldProps {
4
+ Well: ComponentType<SystemColorWellProps>;
5
+ /** The MPO trigger row: swatch, hex and clear button. */
6
+ trigger: ReactNode;
7
+ selectedColor: string;
8
+ alpha: number;
9
+ showAlpha: boolean;
10
+ presetColors: string[];
11
+ disabled?: boolean;
12
+ a11yLabel?: string;
13
+ onPick: (hex: string, alpha?: number) => void;
14
+ onSelectPreset: (hex: string) => void;
15
+ }
16
+ /**
17
+ * LC-266 on iOS: the field opens the system colour picker; the theme swatches
18
+ * stay one tap away in a row under it, because the system picker cannot show
19
+ * them. With a value, the trailing clear button stays outside the well.
20
+ */
21
+ export declare function SystemColorField({ Well, trigger, selectedColor, alpha, showAlpha, presetColors, disabled, a11yLabel, onPick, onSelectPreset, }: SystemColorFieldProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=SystemColorField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemColorField.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/SystemColorField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAMrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC1C,yDAAyD;IACzD,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,GACf,EAAE,qBAAqB,2CA6DvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,OAAO,EAAE,KAAK,cAAc,EAAqD,MAAM,OAAO,CAAC;AAU/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAyBlE,KAAK,UAAU,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAEzD,MAAM,MAAM,gBAAgB,CAC1B,WAAW,GAAG,OAAO,EACrB,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAC3D,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,IACzE,IAAI,CACN,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAG1E,UAAU,GAAG,OAAO,GAAG,UAAU,CAClC,GACC,OAAO,CACL,IAAI,CACF,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAC/E,UAAU,CACX,CACF,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC,CAAC;IAChE,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAolBJ,wBAAgB,WAAW,CACzB,WAAW,EACX,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,EACnC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAC3E,KAAK,EAAE,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,2CAqMpF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,OAAO,EAAE,KAAK,cAAc,EAAqD,MAAM,OAAO,CAAC;AAU/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA2BlE,KAAK,UAAU,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAEzD,MAAM,MAAM,gBAAgB,CAC1B,WAAW,GAAG,OAAO,EACrB,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAC3D,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,IACzE,IAAI,CACN,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAG1E,UAAU,GAAG,OAAO,GAAG,UAAU,CAClC,GACC,OAAO,CACL,IAAI,CACF,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAC/E,UAAU,CACX,CACF,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC,CAAC;IAChE,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAqnBJ,wBAAgB,WAAW,CACzB,WAAW,EACX,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,EACnC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAC3E,KAAK,EAAE,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,2CAqMpF"}
@@ -0,0 +1,18 @@
1
+ import type { ComponentType } from "react";
2
+ import type { StyleProp, ViewStyle } from "react-native";
3
+ export interface SystemColorWellProps {
4
+ /** `#RRGGBB`, or `#RRGGBBAA` with opacity; empty for no colour. */
5
+ selection: string;
6
+ supportsOpacity: boolean;
7
+ /** Spoken name; the visible label stays the field's. */
8
+ label: string;
9
+ colorScheme: "light" | "dark";
10
+ /** The area the well covers, in points. */
11
+ width: number;
12
+ height: number;
13
+ onSelectionChange: (hex: string) => void;
14
+ style?: StyleProp<ViewStyle>;
15
+ }
16
+ /** Web: the MPO picker is the platform form (LC-266). */
17
+ export declare function useSystemColorWell(): ComponentType<SystemColorWellProps> | null;
18
+ //# sourceMappingURL=systemColorWell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemColorWell.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/systemColorWell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,aAAa,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAE/E"}
@@ -0,0 +1,5 @@
1
+ import type { ComponentType } from "react";
2
+ import type { SystemColorWellProps } from "./systemColorWell";
3
+ /** GNOME: the MPO picker is the platform form (LC-266). */
4
+ export declare function useSystemColorWell(): ComponentType<SystemColorWellProps> | null;
5
+ //# sourceMappingURL=systemColorWell.gnome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemColorWell.gnome.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/systemColorWell.gnome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,aAAa,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAE/E"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * LC-266: on iOS the Color field opens the system colour picker
3
+ * (UIColorPickerViewController) through @expo/ui's SwiftUI ColorPicker.
4
+ *
5
+ * @expo/ui is native code, so an OTA can carry this JS to a binary built
6
+ * without it. `requireOptionalNativeModule("ExpoUI")` answers null there and
7
+ * the field keeps the MPO picker. The probe runs before `@expo/ui` is
8
+ * required: its views call `requireNativeView` at module load, which throws
9
+ * on a binary that lacks them.
10
+ */
11
+ import type { ComponentType, ReactNode } from "react";
12
+ import type { SystemColorWellProps } from "./systemColorWell";
13
+ export type { SystemColorWellProps } from "./systemColorWell";
14
+ export declare const expoUiNativeModule = "ExpoUI";
15
+ /**
16
+ * The SwiftUI well is a 28pt circle and only the well opens the picker, so it
17
+ * is drawn nearly transparent and scaled past the field's bounds: the whole
18
+ * field becomes the well's hit area while the MPO swatch and hex stay visible.
19
+ * Below 0.01 alpha UIKit stops hit-testing a view.
20
+ */
21
+ export declare const wellPoints = 28;
22
+ export declare const wellOpacity = 0.02;
23
+ export declare function wellScale(width: number, height: number): number;
24
+ type Modifier = unknown;
25
+ export interface SwiftUiColorModule {
26
+ Host: ComponentType<{
27
+ children?: ReactNode;
28
+ colorScheme?: "light" | "dark";
29
+ style?: SystemColorWellProps["style"];
30
+ }>;
31
+ ColorPicker: ComponentType<{
32
+ selection: string | null;
33
+ label?: string;
34
+ supportsOpacity?: boolean;
35
+ onSelectionChange?: (value: string) => void;
36
+ modifiers?: Modifier[];
37
+ }>;
38
+ }
39
+ export interface SwiftUiModifiers {
40
+ labelsHidden: () => Modifier;
41
+ scaleEffect: (scale: number) => Modifier;
42
+ opacity: (value: number) => Modifier;
43
+ }
44
+ export interface SystemColorWellSources {
45
+ core: () => {
46
+ requireOptionalNativeModule?: (name: string) => unknown;
47
+ };
48
+ ui: () => Partial<SwiftUiColorModule>;
49
+ modifiers: () => Partial<SwiftUiModifiers>;
50
+ }
51
+ export declare function makeSystemColorWell(ui: SwiftUiColorModule, modifiers: SwiftUiModifiers): ComponentType<SystemColorWellProps>;
52
+ /** The system colour well, or null when this platform or binary cannot draw it. */
53
+ export declare function resolveSystemColorWell(sources: SystemColorWellSources, os: string): ComponentType<SystemColorWellProps> | null;
54
+ export declare function useSystemColorWell(): ComponentType<SystemColorWellProps> | null;
55
+ //# sourceMappingURL=systemColorWell.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemColorWell.native.d.ts","sourceRoot":"","sources":["../../../src/fields/ColorPicker/systemColorWell.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,KAAK,QAAQ,GAAG,OAAO,CAAC;AAExB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;QAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAC/B,KAAK,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,WAAW,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,QAAQ,CAAC;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM;QAAE,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;IACxE,EAAE,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5C;AA8BD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,gBAAgB,GAC1B,aAAa,CAAC,oBAAoB,CAAC,CA2BrC;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,GACT,aAAa,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAY5C;AAID,wBAAgB,kBAAkB,IAAI,aAAa,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAG/E"}
@@ -4,7 +4,7 @@ import type { FormFieldProps } from "../../fieldLayout";
4
4
  import { Input as InputParts } from "../../InputParts";
5
5
  import type { FieldComponentProps, Validator } from "../../types";
6
6
  type TimeFormat = "12h" | "24h";
7
- export type DatetimePickerProps<TParentData = any, TName extends DeepKeys<TParentData> = any, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = Omit<FormFieldProps<TParentData, TName, TFieldValidator, TFormValidator, TData>, "children" | "field"> & Partial<Omit<FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>, "children">> & {
7
+ export type DatetimePickerProps<TParentData = any, TName extends DeepKeys<TParentData> = any, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = Omit<FormFieldProps<TParentData, TName, TFieldValidator, TFormValidator, TData>, "children" | "field" | "onChange"> & Partial<Omit<FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>, "children">> & {
8
8
  readOnly?: boolean;
9
9
  placeholder?: string;
10
10
  minDate?: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimePicker.catalog.d.ts","sourceRoot":"","sources":["../../../src/fields/DatePicker/DatetimePicker.catalog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,KAAK,cAAc,EAAqD,MAAM,OAAO,CAAC;AAe/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAqBlE,KAAK,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhC,MAAM,MAAM,mBAAmB,CAC7B,WAAW,GAAG,GAAG,EACjB,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,EACzC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,IACzE,IAAI,CACN,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAC1E,UAAU,GAAG,OAAO,CACrB,GACC,OAAO,CACL,IAAI,CACF,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAC/E,UAAU,CACX,CACF,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC,CAAC;IAC5F,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAmQJ,wBAAgB,cAAc,CAC5B,WAAW,EACX,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,EACnC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAC3E,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,2CAkPvF"}
1
+ {"version":3,"file":"DatetimePicker.catalog.d.ts","sourceRoot":"","sources":["../../../src/fields/DatePicker/DatetimePicker.catalog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,KAAK,cAAc,EAAqD,MAAM,OAAO,CAAC;AAe/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA2BlE,KAAK,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhC,MAAM,MAAM,mBAAmB,CAC7B,WAAW,GAAG,GAAG,EACjB,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,EACzC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,IACzE,IAAI,CACN,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAG1E,UAAU,GAAG,OAAO,GAAG,UAAU,CAClC,GACC,OAAO,CACL,IAAI,CACF,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,EAC/E,UAAU,CACX,CACF,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC,CAAC;IAC5F,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAmQJ,wBAAgB,cAAc,CAC5B,WAAW,EACX,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,EACnC,eAAe,SAAS,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACjG,cAAc,SAAS,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9E,KAAK,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAC3E,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,2CAsRvF"}