@multiplatform.one/forms 7.73.0 → 7.75.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 (248) hide show
  1. package/dist/cjs/Button/IconButtonGroup.cjs +32 -0
  2. package/dist/cjs/Button/IconButtonGroup.native.js +32 -0
  3. package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
  4. package/dist/cjs/Button/glass.cjs +4 -1
  5. package/dist/cjs/Button/index.cjs +71 -18
  6. package/dist/cjs/Button/index.native.js +81 -20
  7. package/dist/cjs/Button/index.native.js.map +1 -1
  8. package/dist/cjs/Button/webGlass.cjs +62 -0
  9. package/dist/cjs/Button/webGlass.native.js +68 -0
  10. package/dist/cjs/Button/webGlass.native.js.map +1 -0
  11. package/dist/cjs/fields/FileUpload/index.cjs +8 -3
  12. package/dist/cjs/fields/FileUpload/index.native.js +8 -3
  13. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  14. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  15. package/dist/esm/Button/IconButtonGroup.mjs +32 -0
  16. package/dist/esm/Button/IconButtonGroup.mjs.map +1 -1
  17. package/dist/esm/Button/IconButtonGroup.native.js +32 -0
  18. package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
  19. package/dist/esm/Button/circleGlyph.native.js.map +1 -1
  20. package/dist/esm/Button/glass.mjs +4 -2
  21. package/dist/esm/Button/glass.mjs.map +1 -1
  22. package/dist/esm/Button/iconButtonGroupContext.mjs.map +1 -1
  23. package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
  24. package/dist/esm/Button/index.mjs +72 -20
  25. package/dist/esm/Button/index.mjs.map +1 -1
  26. package/dist/esm/Button/index.native.js +82 -22
  27. package/dist/esm/Button/index.native.js.map +1 -1
  28. package/dist/esm/Button/mediaPlate.native.js.map +1 -1
  29. package/dist/esm/Button/webGlass.mjs +36 -0
  30. package/dist/esm/Button/webGlass.mjs.map +1 -0
  31. package/dist/esm/Button/webGlass.native.js +39 -0
  32. package/dist/esm/Button/webGlass.native.js.map +1 -0
  33. package/dist/esm/Chip/index.native.js.map +1 -1
  34. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  35. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  36. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  37. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  38. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  39. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  40. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  41. package/dist/esm/ErrorSummary.native.js.map +1 -1
  42. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  43. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  44. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  45. package/dist/esm/FieldGroup.native.js.map +1 -1
  46. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
  47. package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
  48. package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
  49. package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
  50. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
  51. package/dist/esm/FloatingPanel/iconEcho.native.js.map +1 -1
  52. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  53. package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
  54. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
  55. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  56. package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
  57. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
  58. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  59. package/dist/esm/Form/index.native.js.map +1 -1
  60. package/dist/esm/Form/submissionController.native.js.map +1 -1
  61. package/dist/esm/Form/validateOn.native.js.map +1 -1
  62. package/dist/esm/FormGrid.native.js.map +1 -1
  63. package/dist/esm/FormSection.native.js.map +1 -1
  64. package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
  65. package/dist/esm/InputParts/index.native.js.map +1 -1
  66. package/dist/esm/Label/index.native.js.map +1 -1
  67. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  68. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  69. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  70. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  71. package/dist/esm/Skeleton/index.native.js.map +1 -1
  72. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  73. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  74. package/dist/esm/Table/index.native.js.map +1 -1
  75. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  76. package/dist/esm/Wheel/index.native.js.map +1 -1
  77. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  78. package/dist/esm/actionLabel.native.js.map +1 -1
  79. package/dist/esm/fieldDefaults.native.js.map +1 -1
  80. package/dist/esm/fieldLayout.native.js.map +1 -1
  81. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  82. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  83. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  84. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  85. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  86. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  87. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  88. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  89. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  90. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  91. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  92. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  93. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  94. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  95. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  96. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  97. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  98. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  99. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  100. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  101. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  102. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  103. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  104. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  105. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  106. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  107. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  108. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  109. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  110. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  111. package/dist/esm/fields/FileUpload/index.mjs +8 -3
  112. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  113. package/dist/esm/fields/FileUpload/index.native.js +8 -3
  114. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  115. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  116. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  117. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  118. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  119. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  120. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  121. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  122. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  123. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  124. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  125. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  126. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  127. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  128. package/dist/esm/fields/Input/index.native.js.map +1 -1
  129. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  130. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  131. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  132. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  133. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  134. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  135. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  136. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  137. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  138. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  139. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  140. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  141. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  142. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  143. package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
  144. package/dist/esm/fields/Select/index.native.js.map +1 -1
  145. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  146. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  147. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  148. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  149. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  150. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  151. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  152. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  153. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  154. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  155. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  156. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  157. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  158. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  159. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  160. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  161. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  162. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  163. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  164. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  165. package/dist/esm/formSpacing.native.js.map +1 -1
  166. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  167. package/dist/esm/index.native.js.map +1 -1
  168. package/dist/esm/keyboard/chain.native.js.map +1 -1
  169. package/dist/esm/keyboard/index.native.js.map +1 -1
  170. package/dist/esm/keyboard/types.native.js.map +1 -1
  171. package/dist/esm/requiredMarking.native.js.map +1 -1
  172. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  173. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  174. package/dist/esm/shared/choiceRowPress.native.js.map +1 -1
  175. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  176. package/dist/esm/shared/devWarn.native.js.map +1 -1
  177. package/dist/esm/shared/floatingList.native.js.map +1 -1
  178. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  179. package/dist/esm/shared/groupContext.native.js.map +1 -1
  180. package/dist/esm/shared/i18n.native.js.map +1 -1
  181. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  182. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  183. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  184. package/dist/esm/shared/overlaySizeClass.native.js.map +1 -1
  185. package/dist/esm/shared/overlayStack.native.js.map +1 -1
  186. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  187. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  188. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  189. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  190. package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
  191. package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
  192. package/dist/esm/shared/systemControls.native.js.map +1 -1
  193. package/dist/esm/shared/t.native.js.map +1 -1
  194. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  195. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  196. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  197. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  198. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  199. package/dist/esm/shared/utils.native.js.map +1 -1
  200. package/dist/esm/shared/zIndex.native.js.map +1 -1
  201. package/dist/esm/standardActions.native.js.map +1 -1
  202. package/dist/esm/themedPrimitives.native.js.map +1 -1
  203. package/dist/esm/types.native.js.map +1 -1
  204. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  205. package/dist/jsx/Button/IconButtonGroup.mjs +32 -0
  206. package/dist/jsx/Button/IconButtonGroup.mjs.map +1 -1
  207. package/dist/jsx/Button/IconButtonGroup.native.js +32 -0
  208. package/dist/jsx/Button/IconButtonGroup.native.js.map +1 -1
  209. package/dist/jsx/Button/glass.mjs +4 -2
  210. package/dist/jsx/Button/glass.mjs.map +1 -1
  211. package/dist/jsx/Button/iconButtonGroupContext.mjs.map +1 -1
  212. package/dist/jsx/Button/iconButtonGroupContext.native.js.map +1 -1
  213. package/dist/jsx/Button/index.mjs +72 -20
  214. package/dist/jsx/Button/index.mjs.map +1 -1
  215. package/dist/jsx/Button/index.native.js +81 -20
  216. package/dist/jsx/Button/index.native.js.map +1 -1
  217. package/dist/jsx/Button/webGlass.mjs +36 -0
  218. package/dist/jsx/Button/webGlass.mjs.map +1 -0
  219. package/dist/jsx/Button/webGlass.native.js +68 -0
  220. package/dist/jsx/Button/webGlass.native.js.map +1 -0
  221. package/dist/jsx/fields/FileUpload/index.mjs +8 -3
  222. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  223. package/dist/jsx/fields/FileUpload/index.native.js +8 -3
  224. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  225. package/package.json +8 -8
  226. package/src/Button/Button.accentInk.spec.tsx +39 -8
  227. package/src/Button/Button.confirmFill.spec.tsx +141 -0
  228. package/src/Button/Button.iconButton.spec.tsx +143 -3
  229. package/src/Button/Button.stories.tsx +55 -38
  230. package/src/Button/IconButtonGroup.spec.tsx +40 -0
  231. package/src/Button/IconButtonGroup.tsx +39 -0
  232. package/src/Button/glass.spec.ts +73 -0
  233. package/src/Button/glass.ts +8 -3
  234. package/src/Button/iconButtonGroupContext.ts +2 -1
  235. package/src/Button/index.tsx +111 -16
  236. package/src/Button/webGlass.ts +42 -0
  237. package/src/fields/FileUpload/FileUpload.spec.tsx +8 -0
  238. package/src/fields/FileUpload/index.tsx +12 -4
  239. package/types/Button/IconButtonGroup.d.ts.map +1 -1
  240. package/types/Button/glass.d.ts +5 -2
  241. package/types/Button/glass.d.ts.map +1 -1
  242. package/types/Button/iconButtonGroupContext.d.ts +2 -1
  243. package/types/Button/iconButtonGroupContext.d.ts.map +1 -1
  244. package/types/Button/index.d.ts +7 -0
  245. package/types/Button/index.d.ts.map +1 -1
  246. package/types/Button/webGlass.d.ts +32 -0
  247. package/types/Button/webGlass.d.ts.map +1 -0
  248. package/types/fields/FileUpload/index.d.ts.map +1 -1
@@ -4,7 +4,8 @@ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : us
4
4
 
5
5
  /**
6
6
  * LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
7
- * is one shared material capsule and `glass` one shared Liquid Glass capsule,
7
+ * is one shared material capsule and `glass` one shared glass capsule (Liquid
8
+ * Glass on iOS 26, its web twin in iOS Safari),
8
9
  * so a button inside draws its bare glyph instead of its own circle.
9
10
  */
10
11
  export type IconButtonGroupGround = "media" | "glass" | null;
@@ -31,10 +31,14 @@ import {
31
31
  solidButtonIntents,
32
32
  solidPaletteThemes,
33
33
  useAccentOnSurface,
34
+ contrastRatio,
34
35
  ensureKeyboardModalityTracking,
36
+ GLYPH_CONTRAST_FLOOR,
37
+ normalizeToHex,
38
+ relativeLuminance,
35
39
  useBarSurface,
36
40
  useElevatedSurface,
37
- useIdentityInkOnSurface,
41
+ useGlyphTintOnSurface,
38
42
  useResolvedKnobs,
39
43
  useTouchSurface,
40
44
  type ControlTier,
@@ -163,6 +167,25 @@ function normalizeButtonIcon(
163
167
  return icon;
164
168
  }
165
169
 
170
+ /** The fill `theme="accent"` resolves to under `themeName`, as a hex. */
171
+ function accentSolidFill(themeName: string | undefined): string | null {
172
+ if (!themeName) return null;
173
+ const themes = getConfig().themes as Record<string, Record<string, { val?: unknown }>>;
174
+ const parts = themeName.split("_");
175
+ for (let end = parts.length; end > 0; end--) {
176
+ const theme = themes[`${parts.slice(0, end).join("_")}_accent`];
177
+ if (!theme) continue;
178
+ let value = theme.background?.val;
179
+ for (let hop = 0; hop < 4 && typeof value === "string"; hop++) {
180
+ const ref = /^var\(--([^)]+)\)$/.exec(value)?.[1];
181
+ if (!ref) break;
182
+ value = theme[ref]?.val;
183
+ }
184
+ return typeof value === "string" ? normalizeToHex(value) : null;
185
+ }
186
+ return null;
187
+ }
188
+
166
189
  function NativeButtonIcon({
167
190
  icon,
168
191
  size,
@@ -443,22 +466,45 @@ export function iconButtonGlyphPx(rowLinePx: number | undefined): number {
443
466
  /** LC-176: an inline glyph is the text's size; Phosphor's 256 grid pads ~12%. */
444
467
  const INLINE_GLYPH_RATIO = 1.2;
445
468
 
469
+ /**
470
+ * LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
471
+ * 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
472
+ * grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
473
+ * Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
474
+ */
475
+ export const GLYPH_BOLD_STROKE_UNITS = 8;
476
+
477
+ function boldStroke(weight: "regular" | "bold", color = "currentColor") {
478
+ return weight === "bold"
479
+ ? {
480
+ stroke: color,
481
+ strokeWidth: GLYPH_BOLD_STROKE_UNITS,
482
+ strokeLinejoin: "round" as const,
483
+ }
484
+ : undefined;
485
+ }
486
+
446
487
  function withGlyphWeight(
447
488
  icon: IconLike | undefined,
448
489
  size: number,
449
490
  weight: "regular" | "bold",
491
+ floor = false,
450
492
  ): IconLike | undefined {
451
493
  if (icon == null || icon === false) return icon;
452
- if (isValidElement<{ size?: number; weight?: string }>(icon)) {
494
+ if (isValidElement<{ size?: number; weight?: string; color?: string }>(icon)) {
495
+ const resolved = (icon.props.weight ?? weight) as "regular" | "bold";
496
+ const own = icon.props.size;
453
497
  return cloneElement(icon, {
454
- ...(icon.props.size == null ? { size } : undefined),
498
+ ...(own == null || (floor && typeof own === "number" && own < size) ? { size } : undefined),
455
499
  ...(icon.props.weight == null ? { weight } : undefined),
500
+ ...boldStroke(resolved, icon.props.color),
456
501
  });
457
502
  }
458
503
  if (typeof icon === "function" || (typeof icon === "object" && "$$typeof" in icon)) {
459
504
  return createElement(icon as ComponentType<{ size?: number; weight?: string }>, {
460
505
  size,
461
506
  weight,
507
+ ...boldStroke(weight),
462
508
  });
463
509
  }
464
510
  return icon;
@@ -568,7 +614,7 @@ export function Button({
568
614
  const parentScopeTheme = useTheme();
569
615
  const pageOutlineColor = parentScopeTheme.outlineColor?.val as string | undefined;
570
616
  const hostAccentInk = useAccentOnSurface();
571
- const hostIdentityInk = useIdentityInkOnSurface();
617
+ const glyphTint = useGlyphTintOnSurface();
572
618
  const grouped = useControlGrouped();
573
619
  // LC-176 ICON-BUTTON: with no label, the button is its glyph. It paints no
574
620
  // plate at rest and takes the bar tint, unless the caller asked for a frame
@@ -611,7 +657,8 @@ export function Button({
611
657
  // LC-176: a glyph that is the whole button is bold, so it reads as one.
612
658
  const resolvedGlyphWeight = glyphWeight ?? (iconOnly ? "bold" : "regular");
613
659
  const elevatedGround = useElevatedSurface();
614
- const darkScheme = isDarkThemeName(useThemeName());
660
+ const hostThemeName = useThemeName();
661
+ const darkScheme = isDarkThemeName(hostThemeName);
615
662
  const resolvedSize = typeof sizeProp === "number" ? sizeProp : knobProps.sizeToken;
616
663
  const touch = useTouchSurface();
617
664
  const recipe = resolveButtonSizeRecipe(resolvedSize, recipeFamily, touch);
@@ -693,7 +740,7 @@ export function Button({
693
740
  // Accent and intent buttons, chromeless, and grouped segments keep their
694
741
  // own contracts.
695
742
  const tier: ControlTier | undefined =
696
- activeThemeName || chromeless || grouped
743
+ activeThemeName || chromeless || grouped || mediaPlate
697
744
  ? undefined
698
745
  : barSurface
699
746
  ? "plain"
@@ -806,7 +853,13 @@ export function Button({
806
853
  // The media plate is its own state ground; a toggle over media shows its
807
854
  // state in the glyph.
808
855
  const selectedFill = Boolean(isSelected) && !unavailable && !mediaPlate;
809
- const barInk = accentInk && chromeless && !selectedFill && !unavailable ? hostIdentityInk : null;
856
+ // A glyph alone holds 3:1; beside a label both take the label's AA tint.
857
+ const barInk =
858
+ accentInk && chromeless && !selectedFill && !unavailable && !confirmPlate
859
+ ? labelled
860
+ ? glyphTint.label
861
+ : glyphTint.glyph
862
+ : null;
810
863
  const inlineGlyph = iconButton && inline === true && !nested;
811
864
  // LC-176: back's caret beside its label is a bar glyph too, and so is the
812
865
  // glyph on a plate (media, or the overlay's confirm).
@@ -824,6 +877,31 @@ export function Button({
824
877
  ? loadGlassView()
825
878
  : null;
826
879
  const framedCircle = iconOnly && Boolean(circular) && !nested && !mediaPlate && !confirmPlate;
880
+ // FZ-8439 r3: the ✓ on an accent fill is white, iOS's checkmark, whenever
881
+ // white holds the glyph floor on that fill. A fill too light for it (the
882
+ // house ink circle in dark, a pale hue) keeps the sub-theme's on-fill. A
883
+ // literal, so native paints white too and not the token's off-white.
884
+ const accentFillHex = confirmPlate ? accentSolidFill(hostThemeName) : null;
885
+ const confirmInk =
886
+ accentFillHex &&
887
+ contrastRatio(relativeLuminance("#ffffff"), relativeLuminance(accentFillHex)) >=
888
+ GLYPH_CONTRAST_FLOOR
889
+ ? "#ffffff"
890
+ : "$color";
891
+ // LC-176: a glyph on a plate takes the plate's on-colour at full strength,
892
+ // never the frame's quieter default: white on the media material, the text
893
+ // colour on a neutral circle, the accent's on-fill on the confirm (FZ-8439:
894
+ // web glyphs inherit CSS colour, so without it the house ✓ is ink on ink).
895
+ const plateInk =
896
+ unavailable || barInk || outlinedInk
897
+ ? undefined
898
+ : mediaPlate || (iconButton && groupGround === "media")
899
+ ? "$color12"
900
+ : confirmPlate
901
+ ? confirmInk
902
+ : framedCircle && !activeThemeName
903
+ ? hostScoped({ color: "$color12" }).color
904
+ : undefined;
827
905
  const framedCirclePx =
828
906
  touch && typeof sizeProp !== "number"
829
907
  ? Math.max(sizeTokenPx(resolvedSize), MIN_PRESS_TARGET)
@@ -837,13 +915,22 @@ export function Button({
837
915
  : barGlyph
838
916
  ? touch
839
917
  ? Math.max(glyphFloor, resolveButtonSizeRecipe("$6", recipeFamily, touch).iconSize)
840
- : // A pointer toolbar keeps its token box (LC-54); the glyph fills it
841
- // up to the same floor.
842
- Math.max(recipe.iconSize, Math.min(glyphFloor, recipe.height - 8))
918
+ : iconButton
919
+ ? // A bare glyph has no plate to inset from, so it takes its box
920
+ // less a 2pt optical margin, up to the row's glyph: the SHC
921
+ // "+" at $3 reaches the bar's glyph, a $2 copy beside mono
922
+ // text stays in proportion.
923
+ Math.max(recipe.iconSize, Math.min(glyphFloor, recipe.height - 4))
924
+ : // A pointer toolbar keeps its token box (LC-54); the glyph fills
925
+ // it up to the same floor.
926
+ Math.max(recipe.iconSize, Math.min(glyphFloor, recipe.height - 8))
843
927
  : recipe.iconSize;
928
+ // LC-176: a bar glyph is never smaller than its row, whatever px the caller
929
+ // passed (the DataTable toolbar's 14pt token icons).
930
+ const barGlyphFloor = barGlyph && !framedCircle && !inlineGlyph && !nested;
844
931
  const glyph =
845
932
  barGlyph || inlineGlyph || framedCircle
846
- ? withGlyphWeight(icon, iconSize, resolvedGlyphWeight)
933
+ ? withGlyphWeight(icon, iconSize, resolvedGlyphWeight, barGlyphFloor)
847
934
  : icon;
848
935
 
849
936
  // LC-158: the frame keeps its recipe height under Dynamic Type, so the
@@ -908,6 +995,7 @@ export function Button({
908
995
  props.color ??
909
996
  (unavailable ? disabledText.color : undefined) ??
910
997
  barInk ??
998
+ plateInk ??
911
999
  (textColor
912
1000
  ? outlinedOnHost
913
1001
  ? hostScoped({ color: textColor }).color
@@ -929,7 +1017,7 @@ export function Button({
929
1017
  ) : null;
930
1018
  const glyphAfter =
931
1019
  iconAfter && (barGlyph || inlineGlyph || framedCircle)
932
- ? withGlyphWeight(iconAfter, iconSize, resolvedGlyphWeight)
1020
+ ? withGlyphWeight(iconAfter, iconSize, resolvedGlyphWeight, barGlyphFloor)
933
1021
  : iconAfter;
934
1022
  const iconAfterElement = glyphAfter ? (
935
1023
  <View flexShrink={0}>
@@ -1043,6 +1131,7 @@ export function Button({
1043
1131
  : undefined;
1044
1132
  // A square box, so an `edge` pull puts the glyph itself on the gutter.
1045
1133
  // On glass the circle, not the glyph, sits on the margin.
1134
+ const glassInset = typeof resolvedBorderWidth === "number" ? -resolvedBorderWidth : 0;
1046
1135
  const glyphEdgePull =
1047
1136
  GlassView || glassGroup ? 0 : iconButton ? -Math.max(0, (visualPx - iconSize) / 2) : edgePull;
1048
1137
  const buttonElement = (
@@ -1094,6 +1183,10 @@ export function Button({
1094
1183
  {...(inlineGlyph ? { marginInlineStart: "$2" as const } : undefined)}
1095
1184
  // The glass rounds itself, unclipped.
1096
1185
  {...(GlassView ? { borderRadius: 100000 } : undefined)}
1186
+ // On the web the absolute glass circle needs its button as the
1187
+ // containing block and stacking context, or it fills the page and
1188
+ // paints over the glyph.
1189
+ {...(GlassView && isWeb ? { position: "relative" as const, zIndex: 0 } : undefined)}
1097
1190
  {...(confirmPlate ? { borderRadius: 100000 } : undefined)}
1098
1191
  {...(mediaPlate
1099
1192
  ? {
@@ -1108,11 +1201,13 @@ export function Button({
1108
1201
  : { marginInlineEnd: glyphEdgePull }
1109
1202
  : undefined)}
1110
1203
  {...(restFill ? { backgroundColor: restFill } : undefined)}
1204
+ {...(accentFillHex && !unavailable ? { backgroundColor: accentFillHex } : undefined)}
1111
1205
  // Solid-intent sub-themes carry the on-fill foreground as `$color`
1112
1206
  // (LC-05); outlined frames sit on the page, so re-anchor inherited
1113
1207
  // text/icon color (currentColor) to the hue's readable text tier.
1114
1208
  {...(outlinedInk ? { color: outlinedInk } : undefined)}
1115
1209
  {...(barInk ? { color: barInk } : undefined)}
1210
+ {...(plateInk ? { color: plateInk } : undefined)}
1116
1211
  // LC-40 DISABLED-VISIBLE: keepLabel washes the chrome (muted fill/
1117
1212
  // border) while label/glyphs re-anchor to the lowest AA text tier
1118
1213
  // (`color` inherits into currentColor icons); dimWhole dims the
@@ -1272,10 +1367,10 @@ export function Button({
1272
1367
  pointerEvents="none"
1273
1368
  style={{
1274
1369
  position: "absolute",
1275
- top: 0,
1276
- right: 0,
1277
- bottom: 0,
1278
- left: 0,
1370
+ top: glassInset,
1371
+ right: glassInset,
1372
+ bottom: glassInset,
1373
+ left: glassInset,
1279
1374
  borderRadius: visualPx / 2,
1280
1375
  }}
1281
1376
  />
@@ -0,0 +1,42 @@
1
+ import { isDarkThemeName } from "@multiplatform.one/theme";
2
+ import { createElement } from "react";
3
+ import { useThemeName, YStack } from "tamagui";
4
+ import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
5
+
6
+ type GlassNavigator = { userAgent?: string; platform?: string; maxTouchPoints?: number };
7
+
8
+ /**
9
+ * LC-266: iOS Safari, iPadOS included (it reports itself as a Mac with a
10
+ * touch screen). The one place web asks which platform it is on, so an iPhone
11
+ * user gets the iPhone's bar buttons in the browser too.
12
+ */
13
+ export function isAppleTouchWeb(
14
+ nav: GlassNavigator | undefined = typeof navigator === "undefined" ? undefined : navigator,
15
+ ): boolean {
16
+ if (!nav) return false;
17
+ if (/iPhone|iPad|iPod/.test(nav.userAgent ?? "")) return true;
18
+ return /Mac/.test(nav.platform ?? nav.userAgent ?? "") && (nav.maxTouchPoints ?? 0) > 1;
19
+ }
20
+
21
+ const webGlassMarker = { "data-mp-glass": "web" };
22
+
23
+ /**
24
+ * LC-176: the Liquid Glass face iOS Safari draws under a bar's icon buttons,
25
+ * one circle for a lone button or one capsule for an `IconButtonGroup`. It is
26
+ * a layer under the glyphs (absolute, z -1 in the button's stacking context):
27
+ * a near-white material in light and a raised grey in dark, edged by a soft
28
+ * drop shadow alone, with the media plate's blur.
29
+ */
30
+ export function WebGlassFace({ style }: { style?: unknown }) {
31
+ const dark = isDarkThemeName(useThemeName());
32
+ return createElement(YStack, {
33
+ pointerEvents: "none",
34
+ backgroundColor: dark ? "$color4" : "$color1",
35
+ opacity: 0.92,
36
+ shadowColor: "$shadowColor",
37
+ shadowRadius: 10,
38
+ shadowOffset: { width: 0, height: 3 },
39
+ ...webGlassMarker,
40
+ style: { ...(style as object), zIndex: -1, ...MEDIA_PLATE_WEB_STYLE },
41
+ });
42
+ }
@@ -80,6 +80,14 @@ describe("FileUpload", () => {
80
80
  expect(result.container.textContent).not.toContain("Choose File");
81
81
  expect(result.container.textContent).not.toContain("Drag a file");
82
82
  expect(result.container.querySelector('[data-file-upload="preview"] img')).toBeTruthy();
83
+ // FZ-8020 r4: the capsule floats inside the visible tile's top-trailing
84
+ // corner, as Photos does, never over empty dropzone.
85
+ const tile = result.container.querySelector('[data-file-upload="preview-tile"]');
86
+ expect(tile?.querySelector("img")).toBeTruthy();
87
+ expect(tile?.contains(actions!)).toBe(true);
88
+ // Round 4's critique: a $color3 tile read 1.06:1 on the page in dark, so
89
+ // the corner the capsule anchors to was invisible.
90
+ expect(tile?.className).toMatch(/_bg-color5/);
83
91
  fireEvent.click(result.getButton("Remove sprite.png")!);
84
92
  expect(remove).toHaveBeenCalledTimes(1);
85
93
  });
@@ -1065,13 +1065,21 @@ export function FileUpload<
1065
1065
  width="100%"
1066
1066
  >
1067
1067
  {singlePreview ? (
1068
- <YStack position="relative" maxWidth="100%">
1068
+ <YStack
1069
+ data-file-upload="preview-tile"
1070
+ position="relative"
1071
+ width="$14"
1072
+ height="$14"
1073
+ maxWidth="100%"
1074
+ borderRadius={cappedRadius}
1075
+ overflow="hidden"
1076
+ backgroundColor="$color5"
1077
+ >
1069
1078
  <Image
1070
1079
  src={singlePreview}
1071
1080
  alt={singleFile?.name ?? existingName}
1072
- width="$14"
1073
- height="$14"
1074
- maxWidth="100%"
1081
+ width="100%"
1082
+ height="100%"
1075
1083
  objectFit="contain"
1076
1084
  onLoad={(event) => {
1077
1085
  if (!isWeb) return;
@@ -1 +1 @@
1
- {"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAKvE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CAoEjF"}
1
+ {"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAMvE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CA0GjF"}
@@ -12,10 +12,13 @@ export type GlassContainerComponent = ComponentType<{
12
12
  style?: unknown;
13
13
  children?: ReactNode;
14
14
  }>;
15
+ export { isAppleTouchWeb } from "./webGlass";
15
16
  /**
16
17
  * LC-176: the iOS 26 Liquid Glass material an icon button floats on in a bar.
17
- * Only iOS has it (`glass.native.ts`; the native module is Apple-only, so Android probes null); web, Android and GNOME draw the bare
18
- * tinted glyph.
18
+ * Native iOS draws it from expo-glass-effect (`glass.native.ts`; Android
19
+ * probes null). On the web only iOS Safari takes the glass face (Clay on
20
+ * rv_3bb3f1f65d6b981f: "Is there a way to have the buttons at the bottom be
21
+ * liquid glass if it's an iPhone"); every other browser draws the bare glyph.
19
22
  */
20
23
  export declare function loadGlassView(): GlassViewComponent | null;
21
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;CAC3D,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
1
+ {"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;CAC3D,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
3
- * is one shared material capsule and `glass` one shared Liquid Glass capsule,
3
+ * is one shared material capsule and `glass` one shared glass capsule (Liquid
4
+ * Glass on iOS 26, its web twin in iOS Safari),
4
5
  * so a button inside draws its bare glyph instead of its own circle.
5
6
  */
6
7
  export type IconButtonGroupGround = "media" | "glass" | null;
@@ -1 +1 @@
1
- {"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,eAAO,MAAM,sBAAsB,gDAA6C,CAAC;AAEjF,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iCAAwB,MAAM,IAAI,SAAe,CAAC;AAEtF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMhE"}
1
+ {"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,eAAO,MAAM,sBAAsB,gDAA6C,CAAC;AAEjF,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iCAAwB,MAAM,IAAI,SAAe,CAAC;AAEtF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMhE"}
@@ -173,6 +173,13 @@ export declare const ICON_BUTTON_NEUTRAL_GLYPH_PX = 24;
173
173
  * target.
174
174
  */
175
175
  export declare function iconButtonGlyphPx(rowLinePx: number | undefined): number;
176
+ /**
177
+ * LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
178
+ * 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
179
+ * grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
180
+ * Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
181
+ */
182
+ export declare const GLYPH_BOLD_STROKE_UNITS = 8;
176
183
  export declare function Button({ children, action, form: formProp, loading, accent, error, warning, success, skeleton, outlined, disabled, theme, onPress, onKeyDown, tabIndex, icon, iconAfter, selected, nested, circular: circularProp, chromeless, edge, accentInk, plate, inline, glyphWeight, verb, noun, actionRole, disabledReason, disabledReasonPlacement, sizeRecipeEscape, recipeFamily, height: heightProp, paddingHorizontal: paddingHorizontalProp, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
177
184
  export declare namespace Button {
178
185
  var Icon: (props: {
@@ -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":"AAGA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EA6BL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEhB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAEL,KAAK,WAAW,IAAI,kBAAkB,EAavC,MAAM,SAAS,CAAC;AAKjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,KAAK,EAAE,UAAU,EAAuB,MAAM,cAAc,CAAC;AAQpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,EAAE,8BAA8B,EAAE,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAkC,CAAC;AAElG,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,EACrC,MAAM,GAAE,gBAA4B,EACpC,KAAK,UAAQ,GACZ,gBAAgB,CAOlB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQnE;AAaD,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElE,KAAK,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA8G7E,eAAO,MAAM,WAAW;;;;;;;;6CA2DtB,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,kBAAkB,EAClB,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAC1C;IACC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC7C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC;AAED,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAQ/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGvE;AAKD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAsCzC,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,MAAM,EACN,IAAI,EAAE,QAAQ,EACd,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,MAAc,EACd,QAAQ,EAAE,YAAY,EACtB,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,EACL,MAAM,EACN,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,cAAc,EACd,uBAAiC,EACjC,gBAAgB,EAChB,YAAwB,EACxB,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,qBAAqB,EACxC,GAAG,KAAK,EACT,EAAE,WAAW,2CA02Bb;yBA/4Be,MAAM;;;iBApOZ,CAAC;YAAsB,CAAC;;;;;;;AAwnClC,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,WAAW,EACX,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAChE;IACC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,kFAAkF;IAClF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAEhD;AAED,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,32 @@
1
+ type GlassNavigator = {
2
+ userAgent?: string;
3
+ platform?: string;
4
+ maxTouchPoints?: number;
5
+ };
6
+ /**
7
+ * LC-266: iOS Safari, iPadOS included (it reports itself as a Mac with a
8
+ * touch screen). The one place web asks which platform it is on, so an iPhone
9
+ * user gets the iPhone's bar buttons in the browser too.
10
+ */
11
+ export declare function isAppleTouchWeb(nav?: GlassNavigator | undefined): boolean;
12
+ /**
13
+ * LC-176: the Liquid Glass face iOS Safari draws under a bar's icon buttons,
14
+ * one circle for a lone button or one capsule for an `IconButtonGroup`. It is
15
+ * a layer under the glyphs (absolute, z -1 in the button's stacking context):
16
+ * a near-white material in light and a raised grey in dark, edged by a soft
17
+ * drop shadow alone, with the media plate's blur.
18
+ */
19
+ export declare function WebGlassFace({ style }: {
20
+ style?: unknown;
21
+ }): import("react").FunctionComponentElement<Omit<import("@tamagui/core").RNTamaguiViewNonStyleProps, "elevation" | keyof import("@tamagui/web").StackStyleBase | "fullscreen"> & import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase> & {
22
+ elevation?: number | import("tamagui").SizeTokens | undefined;
23
+ fullscreen?: boolean | undefined;
24
+ } & import("@tamagui/web").WithShorthands<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase>> & import("@tamagui/web").WithPseudoProps<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase> & {
25
+ elevation?: number | import("tamagui").SizeTokens | undefined;
26
+ fullscreen?: boolean | undefined;
27
+ } & import("@tamagui/web").WithShorthands<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase>>> & import("@tamagui/web").WithMediaProps<import("@tamagui/web").WithThemeShorthandsAndPseudos<import("@tamagui/web").StackStyleBase, {
28
+ elevation?: number | import("tamagui").SizeTokens | undefined;
29
+ fullscreen?: boolean | undefined;
30
+ }>> & import("react").RefAttributes<import("tamagui").TamaguiElement>>;
31
+ export {};
32
+ //# sourceMappingURL=webGlass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webGlass.d.ts","sourceRoot":"","sources":["../../src/Button/webGlass.ts"],"names":[],"mappings":"AAKA,KAAK,cAAc,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,GAAE,cAAc,GAAG,SAAoE,GACzF,OAAO,CAIT;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;;uEAY1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/FileUpload/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/FileUpload/index.tsx"],"names":[],"mappings":"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"}