@multiplatform.one/forms 7.77.2 → 7.79.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 (504) hide show
  1. package/dist/cjs/AdaptivePopup/index.native.js +2 -2
  2. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  3. package/dist/cjs/Button/IconButtonGroup.cjs +27 -23
  4. package/dist/cjs/Button/IconButtonGroup.native.js +27 -23
  5. package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
  6. package/dist/cjs/Button/circleGlyph.native.js.map +1 -1
  7. package/dist/cjs/Button/glass.cjs +2 -1
  8. package/dist/cjs/Button/glass.native.js +44 -19
  9. package/dist/cjs/Button/glass.native.js.map +1 -1
  10. package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
  11. package/dist/cjs/Button/index.cjs +12 -12
  12. package/dist/cjs/Button/index.native.js +14 -14
  13. package/dist/cjs/Button/index.native.js.map +1 -1
  14. package/dist/cjs/Button/webGlass.cjs +9 -5
  15. package/dist/cjs/Button/webGlass.native.js +9 -5
  16. package/dist/cjs/Button/webGlass.native.js.map +1 -1
  17. package/dist/cjs/Chip/index.native.js.map +1 -1
  18. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  19. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  20. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  21. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  22. package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
  23. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  24. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  25. package/dist/cjs/ControlGroup/index.native.js +1 -1
  26. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  27. package/dist/cjs/DescriptionList/index.native.js +2 -2
  28. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  29. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  30. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  31. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  32. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  33. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  34. package/dist/cjs/FieldGroup.native.js.map +1 -1
  35. package/dist/cjs/FloatingPanel/PanelHeader.native.js.map +1 -1
  36. package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -1
  37. package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
  38. package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
  39. package/dist/cjs/FloatingPanel/coverRect.native.js.map +1 -1
  40. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -1
  41. package/dist/cjs/FloatingPanel/iconEcho.native.js.map +1 -1
  42. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  43. package/dist/cjs/FloatingPanel/paintedBox.native.js.map +1 -1
  44. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -1
  45. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  46. package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
  47. package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
  48. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
  49. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  50. package/dist/cjs/Form/index.native.js +1 -1
  51. package/dist/cjs/Form/index.native.js.map +1 -1
  52. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  53. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  54. package/dist/cjs/FormGrid.native.js.map +1 -1
  55. package/dist/cjs/FormSection.native.js.map +1 -1
  56. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
  57. package/dist/cjs/InputParts/index.native.js.map +1 -1
  58. package/dist/cjs/InputParts/keyboardAppearance.native.js.map +1 -1
  59. package/dist/cjs/Label/index.native.js.map +1 -1
  60. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  61. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  62. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  63. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  64. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  65. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  66. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  67. package/dist/cjs/Table/index.native.js.map +1 -1
  68. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  69. package/dist/cjs/Wheel/index.native.js.map +1 -1
  70. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  71. package/dist/cjs/actionLabel.native.js.map +1 -1
  72. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  73. package/dist/cjs/fieldLayout.native.js +1 -1
  74. package/dist/cjs/fieldLayout.native.js.map +1 -1
  75. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  76. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  77. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  78. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  79. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  80. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  81. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  82. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  83. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  84. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  85. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  86. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  87. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  88. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  89. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  90. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  91. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  92. package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
  93. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  94. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  95. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  96. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  97. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  98. package/dist/cjs/fields/Combobox/index.native.js +5 -5
  99. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  100. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  101. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  102. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  103. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
  104. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  105. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  106. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  107. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  108. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  109. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  110. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
  111. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  112. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  113. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  114. package/dist/cjs/fields/DatePicker/parts.native.js +2 -2
  115. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  116. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  117. package/dist/cjs/fields/Duration/DurationWheel.native.js +1 -1
  118. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  119. package/dist/cjs/fields/Duration/durationWheelTypes.native.js.map +1 -1
  120. package/dist/cjs/fields/Duration/index.native.js +3 -3
  121. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  122. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  123. package/dist/cjs/fields/FileUpload/index.native.js +2 -2
  124. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  125. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  126. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  127. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  128. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  129. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  130. package/dist/cjs/fields/Geolocation/index.native.js +5 -5
  131. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  132. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  133. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  134. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  135. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  136. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  137. package/dist/cjs/fields/Icon/index.native.js +3 -3
  138. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  139. package/dist/cjs/fields/ImageField/index.native.js +2 -2
  140. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  141. package/dist/cjs/fields/Input/index.native.js +3 -3
  142. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  143. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  144. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  145. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  146. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  147. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  148. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  149. package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
  150. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  151. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  152. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  153. package/dist/cjs/fields/Progress/index.native.js +1 -1
  154. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  155. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  156. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  157. package/dist/cjs/fields/Rating/index.native.js +1 -1
  158. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  159. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  160. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  161. package/dist/cjs/fields/SearchInput/index.native.js +2 -2
  162. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  163. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  164. package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
  165. package/dist/cjs/fields/Select/index.native.js +4 -4
  166. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  167. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  168. package/dist/cjs/fields/Signature/index.native.js +2 -2
  169. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  170. package/dist/cjs/fields/Slider/index.native.js +1 -1
  171. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  172. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  173. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  174. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  175. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  176. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  177. package/dist/cjs/fields/Switch/index.native.js +2 -2
  178. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  179. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  180. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  181. package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
  182. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  183. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  184. package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
  185. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  186. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  187. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
  188. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  189. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  190. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  191. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +1 -1
  192. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  193. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  194. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  195. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  196. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  197. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  198. package/dist/cjs/formSpacing.native.js.map +1 -1
  199. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  200. package/dist/cjs/index.cjs +0 -1
  201. package/dist/cjs/index.native.js +45 -46
  202. package/dist/cjs/index.native.js.map +1 -1
  203. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  204. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  205. package/dist/cjs/keyboard/index.native.js.map +1 -1
  206. package/dist/cjs/keyboard/types.native.js.map +1 -1
  207. package/dist/cjs/requiredMarking.native.js.map +1 -1
  208. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  209. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  210. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  211. package/dist/cjs/shared/choiceRowPress.native.js.map +1 -1
  212. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  213. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  214. package/dist/cjs/shared/fieldRowContext.native.js.map +1 -1
  215. package/dist/cjs/shared/floatingList.native.js +1 -1
  216. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  217. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  218. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  219. package/dist/cjs/shared/i18n.native.js.map +1 -1
  220. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  221. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  222. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  223. package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -1
  224. package/dist/cjs/shared/overlayStack.native.js.map +1 -1
  225. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  226. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  227. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  228. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  229. package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
  230. package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
  231. package/dist/cjs/shared/systemControls.native.js.map +1 -1
  232. package/dist/cjs/shared/t.native.js.map +1 -1
  233. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  234. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  235. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  236. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  237. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  238. package/dist/cjs/shared/utils.native.js +1 -1
  239. package/dist/cjs/shared/utils.native.js.map +1 -1
  240. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  241. package/dist/cjs/standardActions.native.js.map +1 -1
  242. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  243. package/dist/cjs/types.native.js.map +1 -1
  244. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  245. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  246. package/dist/esm/Button/IconButtonGroup.mjs +33 -28
  247. package/dist/esm/Button/IconButtonGroup.mjs.map +1 -1
  248. package/dist/esm/Button/IconButtonGroup.native.js +33 -28
  249. package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
  250. package/dist/esm/Button/circleGlyph.native.js.map +1 -1
  251. package/dist/esm/Button/glass.mjs +2 -1
  252. package/dist/esm/Button/glass.mjs.map +1 -1
  253. package/dist/esm/Button/glass.native.js +43 -19
  254. package/dist/esm/Button/glass.native.js.map +1 -1
  255. package/dist/esm/Button/iconButtonGroupContext.mjs.map +1 -1
  256. package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
  257. package/dist/esm/Button/index.mjs +14 -13
  258. package/dist/esm/Button/index.mjs.map +1 -1
  259. package/dist/esm/Button/index.native.js +14 -13
  260. package/dist/esm/Button/index.native.js.map +1 -1
  261. package/dist/esm/Button/webGlass.mjs +10 -6
  262. package/dist/esm/Button/webGlass.mjs.map +1 -1
  263. package/dist/esm/Button/webGlass.native.js +10 -6
  264. package/dist/esm/Button/webGlass.native.js.map +1 -1
  265. package/dist/esm/Chip/index.native.js.map +1 -1
  266. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  267. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  268. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  269. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  270. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  271. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  272. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  273. package/dist/esm/ErrorSummary.native.js.map +1 -1
  274. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  275. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  276. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  277. package/dist/esm/FieldGroup.native.js.map +1 -1
  278. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
  279. package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
  280. package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
  281. package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
  282. package/dist/esm/FloatingPanel/coverRect.native.js.map +1 -1
  283. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
  284. package/dist/esm/FloatingPanel/iconEcho.native.js.map +1 -1
  285. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  286. package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
  287. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
  288. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  289. package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
  290. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
  291. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  292. package/dist/esm/Form/index.native.js.map +1 -1
  293. package/dist/esm/Form/submissionController.native.js.map +1 -1
  294. package/dist/esm/Form/validateOn.native.js.map +1 -1
  295. package/dist/esm/FormGrid.native.js.map +1 -1
  296. package/dist/esm/FormSection.native.js.map +1 -1
  297. package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
  298. package/dist/esm/InputParts/index.native.js.map +1 -1
  299. package/dist/esm/InputParts/keyboardAppearance.native.js.map +1 -1
  300. package/dist/esm/Label/index.native.js.map +1 -1
  301. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  302. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  303. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  304. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  305. package/dist/esm/Skeleton/index.native.js.map +1 -1
  306. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  307. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  308. package/dist/esm/Table/index.native.js.map +1 -1
  309. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  310. package/dist/esm/Wheel/index.native.js.map +1 -1
  311. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  312. package/dist/esm/actionLabel.native.js.map +1 -1
  313. package/dist/esm/fieldDefaults.native.js.map +1 -1
  314. package/dist/esm/fieldLayout.native.js.map +1 -1
  315. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  316. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  317. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  318. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  319. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  320. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  321. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  322. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  323. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  324. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  325. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  326. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  327. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  328. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  329. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  330. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  331. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  332. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  333. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  334. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  335. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  336. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  337. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  338. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  339. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  340. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  341. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  342. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  343. package/dist/esm/fields/Duration/durationWheelTypes.native.js.map +1 -1
  344. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  345. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  346. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  347. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  348. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  349. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  350. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  351. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  352. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  353. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  354. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  355. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  356. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  357. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  358. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  359. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  360. package/dist/esm/fields/Input/index.native.js.map +1 -1
  361. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  362. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  363. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  364. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  365. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  366. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  367. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  368. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  369. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  370. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  371. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  372. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  373. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  374. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  375. package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
  376. package/dist/esm/fields/Select/index.native.js.map +1 -1
  377. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  378. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  379. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  380. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  381. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  382. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  383. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  384. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  385. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  386. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  387. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  388. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  389. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  390. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  391. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  392. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  393. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  394. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  395. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  396. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  397. package/dist/esm/formSpacing.native.js.map +1 -1
  398. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  399. package/dist/esm/index.mjs +2 -2
  400. package/dist/esm/index.mjs.map +1 -1
  401. package/dist/esm/index.native.js +2 -2
  402. package/dist/esm/index.native.js.map +1 -1
  403. package/dist/esm/keyboard/chain.native.js.map +1 -1
  404. package/dist/esm/keyboard/index.native.js.map +1 -1
  405. package/dist/esm/keyboard/types.native.js.map +1 -1
  406. package/dist/esm/requiredMarking.native.js.map +1 -1
  407. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  408. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  409. package/dist/esm/shared/choiceRowPress.native.js.map +1 -1
  410. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  411. package/dist/esm/shared/devWarn.native.js.map +1 -1
  412. package/dist/esm/shared/fieldRowContext.native.js.map +1 -1
  413. package/dist/esm/shared/floatingList.native.js.map +1 -1
  414. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  415. package/dist/esm/shared/groupContext.native.js.map +1 -1
  416. package/dist/esm/shared/i18n.native.js.map +1 -1
  417. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  418. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  419. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  420. package/dist/esm/shared/overlaySizeClass.native.js.map +1 -1
  421. package/dist/esm/shared/overlayStack.native.js.map +1 -1
  422. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  423. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  424. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  425. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  426. package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
  427. package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
  428. package/dist/esm/shared/systemControls.native.js.map +1 -1
  429. package/dist/esm/shared/t.native.js.map +1 -1
  430. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  431. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  432. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  433. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  434. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  435. package/dist/esm/shared/utils.native.js.map +1 -1
  436. package/dist/esm/shared/zIndex.native.js.map +1 -1
  437. package/dist/esm/standardActions.native.js.map +1 -1
  438. package/dist/esm/themedPrimitives.native.js.map +1 -1
  439. package/dist/esm/types.native.js.map +1 -1
  440. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  441. package/dist/jsx/Button/IconButtonGroup.mjs +33 -28
  442. package/dist/jsx/Button/IconButtonGroup.mjs.map +1 -1
  443. package/dist/jsx/Button/IconButtonGroup.native.js +27 -23
  444. package/dist/jsx/Button/IconButtonGroup.native.js.map +1 -1
  445. package/dist/jsx/Button/glass.mjs +2 -1
  446. package/dist/jsx/Button/glass.mjs.map +1 -1
  447. package/dist/jsx/Button/glass.native.js +44 -19
  448. package/dist/jsx/Button/glass.native.js.map +1 -1
  449. package/dist/jsx/Button/iconButtonGroupContext.mjs.map +1 -1
  450. package/dist/jsx/Button/iconButtonGroupContext.native.js.map +1 -1
  451. package/dist/jsx/Button/index.mjs +14 -13
  452. package/dist/jsx/Button/index.mjs.map +1 -1
  453. package/dist/jsx/Button/index.native.js +12 -12
  454. package/dist/jsx/Button/index.native.js.map +1 -1
  455. package/dist/jsx/Button/webGlass.mjs +10 -6
  456. package/dist/jsx/Button/webGlass.mjs.map +1 -1
  457. package/dist/jsx/Button/webGlass.native.js +9 -5
  458. package/dist/jsx/Button/webGlass.native.js.map +1 -1
  459. package/dist/jsx/index.js +2 -2
  460. package/dist/jsx/index.js.map +1 -1
  461. package/dist/jsx/index.mjs +2 -2
  462. package/dist/jsx/index.mjs.map +1 -1
  463. package/dist/jsx/index.native.js +0 -1
  464. package/dist/jsx/index.native.js.map +1 -1
  465. package/package.json +8 -8
  466. package/src/Button/Button.iconButton.spec.tsx +47 -7
  467. package/src/Button/IconButtonGroup.spec.tsx +83 -19
  468. package/src/Button/IconButtonGroup.tsx +43 -40
  469. package/src/Button/glass.native.spec.ts +62 -0
  470. package/src/Button/glass.native.ts +58 -37
  471. package/src/Button/glass.spec.ts +64 -16
  472. package/src/Button/glass.ts +16 -12
  473. package/src/Button/iconButtonGroupContext.ts +2 -3
  474. package/src/Button/index.tsx +19 -13
  475. package/src/Button/webGlass.ts +25 -18
  476. package/src/index.ts +0 -1
  477. package/types/Button/IconButtonGroup.d.ts +7 -12
  478. package/types/Button/IconButtonGroup.d.ts.map +1 -1
  479. package/types/Button/glass.d.ts +7 -11
  480. package/types/Button/glass.d.ts.map +1 -1
  481. package/types/Button/glass.native.d.ts +22 -10
  482. package/types/Button/glass.native.d.ts.map +1 -1
  483. package/types/Button/iconButtonGroupContext.d.ts +2 -3
  484. package/types/Button/iconButtonGroupContext.d.ts.map +1 -1
  485. package/types/Button/index.d.ts +1 -1
  486. package/types/Button/index.d.ts.map +1 -1
  487. package/types/Button/webGlass.d.ts +8 -16
  488. package/types/Button/webGlass.d.ts.map +1 -1
  489. package/types/index.d.ts +1 -1
  490. package/types/index.d.ts.map +1 -1
  491. package/dist/cjs/Button/mediaPlate.cjs +0 -31
  492. package/dist/cjs/Button/mediaPlate.native.js +0 -34
  493. package/dist/cjs/Button/mediaPlate.native.js.map +0 -1
  494. package/dist/esm/Button/mediaPlate.mjs +0 -6
  495. package/dist/esm/Button/mediaPlate.mjs.map +0 -1
  496. package/dist/esm/Button/mediaPlate.native.js +0 -6
  497. package/dist/esm/Button/mediaPlate.native.js.map +0 -1
  498. package/dist/jsx/Button/mediaPlate.mjs +0 -6
  499. package/dist/jsx/Button/mediaPlate.mjs.map +0 -1
  500. package/dist/jsx/Button/mediaPlate.native.js +0 -34
  501. package/dist/jsx/Button/mediaPlate.native.js.map +0 -1
  502. package/src/Button/mediaPlate.ts +0 -9
  503. package/types/Button/mediaPlate.d.ts +0 -10
  504. package/types/Button/mediaPlate.d.ts.map +0 -1
@@ -0,0 +1,62 @@
1
+ /**
2
+ * LC-176 (FZ-8666): real Liquid Glass or none. An Android binary, a binary
3
+ * without the module and an iOS before 26 get no glass at all, so the icon
4
+ * button is its plain glyph.
5
+ */
6
+ import { describe, expect, it, vi } from "vitest";
7
+ import type { GlassContainerComponent, GlassViewComponent } from "./glass";
8
+ import { resolveSystemGlass, type GlassSources } from "./glass.native";
9
+
10
+ const view = (() => null) as unknown as GlassViewComponent;
11
+ const container = (() => null) as unknown as GlassContainerComponent;
12
+
13
+ function sources(
14
+ nativeModule: unknown,
15
+ overrides: Partial<ReturnType<GlassSources["glass"]>> = {},
16
+ ): GlassSources {
17
+ return {
18
+ core: () => ({ requireOptionalNativeModule: () => nativeModule }),
19
+ glass: () => ({
20
+ GlassView: view,
21
+ GlassContainer: container,
22
+ isLiquidGlassAvailable: () => true,
23
+ isGlassEffectAPIAvailable: () => true,
24
+ ...overrides,
25
+ }),
26
+ };
27
+ }
28
+
29
+ describe("resolveSystemGlass", () => {
30
+ it("iOS 26 with the module gets the system's views", () => {
31
+ expect(resolveSystemGlass(sources({}))).toEqual({ view, container });
32
+ });
33
+
34
+ it("no native module (Android, a binary built without it) never requires the package", () => {
35
+ const glass = vi.fn();
36
+ const source = { ...sources(null), glass };
37
+ expect(resolveSystemGlass(source as unknown as GlassSources)).toBeNull();
38
+ expect(glass).not.toHaveBeenCalled();
39
+ });
40
+
41
+ it("an iOS before 26 and a beta without the API get no glass", () => {
42
+ expect(resolveSystemGlass(sources({}, { isLiquidGlassAvailable: () => false }))).toBeNull();
43
+ expect(resolveSystemGlass(sources({}, { isGlassEffectAPIAvailable: () => false }))).toBeNull();
44
+ });
45
+
46
+ it("a package that throws on load gets no glass", () => {
47
+ const source = {
48
+ ...sources({}),
49
+ glass: () => {
50
+ throw new Error("no module");
51
+ },
52
+ };
53
+ expect(resolveSystemGlass(source)).toBeNull();
54
+ });
55
+
56
+ it("a module with no container keeps the view", () => {
57
+ expect(resolveSystemGlass(sources({}, { GlassContainer: undefined }))).toEqual({
58
+ view,
59
+ container: null,
60
+ });
61
+ });
62
+ });
@@ -2,50 +2,71 @@ import type { GlassContainerComponent, GlassViewComponent } from "./glass";
2
2
 
3
3
  export type { GlassContainerComponent, GlassViewComponent } from "./glass";
4
4
 
5
- let cachedGlassView: GlassViewComponent | null | undefined;
6
- let cachedGlassContainer: GlassContainerComponent | null | undefined;
5
+ export interface GlassSources {
6
+ core: () => { requireOptionalNativeModule?: (moduleName: string) => unknown };
7
+ glass: () => {
8
+ GlassView?: GlassViewComponent;
9
+ GlassContainer?: GlassContainerComponent;
10
+ isLiquidGlassAvailable?: () => boolean;
11
+ isGlassEffectAPIAvailable?: () => boolean;
12
+ };
13
+ }
14
+
15
+ // Each require sits in its own try: Metro only treats a require as optional
16
+ // inside one, and an app without the package must still bundle.
17
+ const liveSources: GlassSources = {
18
+ core: () => {
19
+ try {
20
+ return require("expo-modules-core");
21
+ } catch {
22
+ return {};
23
+ }
24
+ },
25
+ glass: () => {
26
+ try {
27
+ return require("expo-glass-effect");
28
+ } catch {
29
+ return {};
30
+ }
31
+ },
32
+ };
33
+
34
+ export interface SystemGlass {
35
+ view: GlassViewComponent;
36
+ container: GlassContainerComponent | null;
37
+ }
7
38
 
8
39
  /**
9
- * LC-176: expo-glass-effect's `GlassView`, when this binary links its native
10
- * module and the OS draws Liquid Glass (iOS 26+); Android never links it. The module is probed through
11
- * `requireOptionalNativeModule` BEFORE the guarded `require`, so an OTA on a
12
- * binary built without it, or an older iOS, falls back to the bare tinted
13
- * glyph instead of throwing mid-render (the `nativePickerLoader.ts` contract).
40
+ * LC-176: expo-glass-effect's views, when this binary links the native module
41
+ * and the OS draws Liquid Glass (iOS 26+); Android never links it. The module
42
+ * is probed through `requireOptionalNativeModule` BEFORE the guarded `require`,
43
+ * so an OTA on a binary built without it, or an older iOS, falls back to the
44
+ * bare tinted glyph instead of throwing mid-render (the `nativePickerLoader.ts`
45
+ * contract). A binary whose module predates the container keeps its capsule.
14
46
  */
15
- export function loadGlassView(): GlassViewComponent | null {
16
- if (cachedGlassView !== undefined) return cachedGlassView;
17
- cachedGlassView = null;
47
+ export function resolveSystemGlass(sources: GlassSources = liveSources): SystemGlass | null {
18
48
  try {
19
- const core = require("expo-modules-core") as {
20
- requireOptionalNativeModule?: (moduleName: string) => unknown;
21
- };
22
- if (core.requireOptionalNativeModule?.("ExpoGlassEffect") == null) return cachedGlassView;
23
- const glass = require("expo-glass-effect") as {
24
- GlassView?: GlassViewComponent;
25
- GlassContainer?: GlassContainerComponent;
26
- isLiquidGlassAvailable?: () => boolean;
27
- isGlassEffectAPIAvailable?: () => boolean;
28
- };
29
- if (
30
- glass.GlassView &&
31
- glass.isLiquidGlassAvailable?.() &&
32
- glass.isGlassEffectAPIAvailable?.()
33
- ) {
34
- cachedGlassView = glass.GlassView;
35
- cachedGlassContainer = glass.GlassContainer ?? null;
36
- }
49
+ if (sources.core().requireOptionalNativeModule?.("ExpoGlassEffect") == null) return null;
50
+ const glass = sources.glass();
51
+ if (!glass.GlassView || !glass.isLiquidGlassAvailable?.()) return null;
52
+ if (!glass.isGlassEffectAPIAvailable?.()) return null;
53
+ return { view: glass.GlassView, container: glass.GlassContainer ?? null };
37
54
  } catch {
38
- cachedGlassView = null;
55
+ return null;
39
56
  }
40
- return cachedGlassView;
41
57
  }
42
58
 
43
- /**
44
- * LC-176: expo-glass-effect's `GlassContainer`, present exactly when
45
- * `loadGlassView` found Liquid Glass. A binary whose module predates the
46
- * container keeps separate circles rather than throwing.
47
- */
59
+ let cached: SystemGlass | null | undefined;
60
+
61
+ function systemGlass(): SystemGlass | null {
62
+ if (cached === undefined) cached = resolveSystemGlass();
63
+ return cached;
64
+ }
65
+
66
+ export function loadGlassView(): GlassViewComponent | null {
67
+ return systemGlass()?.view ?? null;
68
+ }
69
+
48
70
  export function loadGlassContainer(): GlassContainerComponent | null {
49
- if (cachedGlassView === undefined) loadGlassView();
50
- return cachedGlassContainer ?? null;
71
+ return systemGlass()?.container ?? null;
51
72
  }
@@ -1,16 +1,19 @@
1
1
  /**
2
2
  * @vitest-environment jsdom
3
3
  *
4
- * LC-176 / LC-266: on the web only iOS Safari takes the glass face (Clay on
5
- * rv_3bb3f1f65d6b981f).
4
+ * LC-176 / LC-266 (FZ-8666): no browser can draw Liquid Glass, so no browser
5
+ * draws glass, iOS Safari included. The drawn face stays behind one switch in
6
+ * `glass.ts` until Clay answers the compare.
6
7
  */
7
8
 
8
- import { createDefaultThemeConfig } from "@multiplatform.one/theme";
9
- import { cleanup, render } from "@testing-library/react";
9
+ import { createDefaultThemeConfig, Surface } from "@multiplatform.one/theme";
10
+ import { cleanup, render, screen } from "@testing-library/react";
10
11
  import { createElement } from "react";
11
12
  import { TamaguiProvider } from "tamagui";
12
13
  import { afterEach, describe, expect, it, vi } from "vitest";
13
- import { isAppleTouchWeb, loadGlassView } from "./glass";
14
+ import { isAppleTouchWeb, loadGlassContainer, loadGlassView } from "./glass";
15
+ import { IconButton, IconButtonGroup } from "./index";
16
+ import { WebGlassFace } from "./webGlass";
14
17
 
15
18
  const IPHONE =
16
19
  "Mozilla/5.0 (iPhone; CPU iPhone OS 26_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1";
@@ -44,30 +47,75 @@ describe("isAppleTouchWeb", () => {
44
47
  });
45
48
  });
46
49
 
47
- describe("loadGlassView on the web", () => {
50
+ function Glyph({ size }: { size?: number }) {
51
+ return createElement("svg", { "data-glyph": "", width: size, height: size });
52
+ }
53
+
54
+ function renderBar(ui: ReturnType<typeof createElement>) {
55
+ return render(
56
+ createElement(
57
+ TamaguiProvider,
58
+ { config: houseConfig.tamagui, defaultTheme: "light", disableInjectCSS: true },
59
+ createElement(Surface, { bar: true }, ui),
60
+ ),
61
+ );
62
+ }
63
+
64
+ describe("no glass on the web (LC-176)", () => {
48
65
  afterEach(() => {
49
66
  cleanup();
50
67
  vi.unstubAllGlobals();
51
68
  });
52
69
 
53
- it("iOS Safari's glass circle sits under the glyph it backs", () => {
54
- vi.stubGlobal("navigator", { userAgent: IPHONE, platform: "iPhone", maxTouchPoints: 5 });
55
- const Glass = loadGlassView();
56
- expect(Glass).not.toBeNull();
70
+ it.each([
71
+ ["iOS Safari", { userAgent: IPHONE, platform: "iPhone", maxTouchPoints: 5 }],
72
+ ["iPadOS Safari", { userAgent: MAC_SAFARI, platform: "MacIntel", maxTouchPoints: 5 }],
73
+ ["desktop Safari", { userAgent: MAC_SAFARI, platform: "MacIntel", maxTouchPoints: 0 }],
74
+ ["Android Chrome", { userAgent: PIXEL, platform: "Linux armv8l", maxTouchPoints: 5 }],
75
+ ])("%s loads no glass and draws the plain glyph", (_browser, nav) => {
76
+ vi.stubGlobal("navigator", nav);
77
+ expect(loadGlassView()).toBeNull();
78
+ expect(loadGlassContainer()).toBeNull();
79
+ renderBar(
80
+ createElement(
81
+ "div",
82
+ null,
83
+ createElement(
84
+ IconButtonGroup,
85
+ null,
86
+ createElement(IconButton, { icon: Glyph, "aria-label": "Search" }),
87
+ createElement(IconButton, { icon: Glyph, "aria-label": "More" }),
88
+ ),
89
+ createElement(IconButton, { icon: Glyph, "aria-label": "Back" }),
90
+ ),
91
+ );
92
+ expect(document.querySelector("[data-mp-glass]")).toBeNull();
93
+ expect(document.querySelector("[data-mp-glass-capsule]")).toBeNull();
94
+ expect(document.querySelector('[data-mp-icon-button-group="bar"]')).not.toBeNull();
95
+ for (const name of ["Search", "More", "Back"])
96
+ expect(screen.getByLabelText(name).getAttribute("data-mp-icon-button")).toBe("glyph");
97
+ });
98
+ });
99
+
100
+ describe("the drawn web face behind the switch", () => {
101
+ afterEach(cleanup);
102
+
103
+ it("sits under the glyph it backs, which stays its sibling", () => {
57
104
  const { container } = render(
58
105
  createElement(
59
106
  TamaguiProvider,
60
107
  { config: houseConfig.tamagui, defaultTheme: "light", disableInjectCSS: true },
61
- createElement(Glass!, { style: { position: "absolute" } }),
108
+ createElement(
109
+ WebGlassFace,
110
+ { style: { position: "absolute" } },
111
+ createElement("svg", { "data-glyph": "" }),
112
+ ),
62
113
  ),
63
114
  );
64
115
  const face = container.querySelector('[data-mp-glass="web"]') as HTMLElement | null;
65
116
  expect(face).not.toBeNull();
66
117
  expect(face!.style.zIndex).toBe("-1");
67
- });
68
-
69
- it("every other browser draws the bare glyph", () => {
70
- vi.stubGlobal("navigator", { userAgent: PIXEL, platform: "Linux armv8l", maxTouchPoints: 5 });
71
- expect(loadGlassView()).toBeNull();
118
+ expect(face!.querySelector("[data-glyph]")).toBeNull();
119
+ expect(face!.nextElementSibling?.hasAttribute("data-glyph")).toBe(true);
72
120
  });
73
121
  });
@@ -4,9 +4,10 @@ import { isAppleTouchWeb, WebGlassFace } from "./webGlass";
4
4
  /** The slice of expo-glass-effect's `GlassView` an icon button draws. */
5
5
  export type GlassViewComponent = ComponentType<{
6
6
  style?: unknown;
7
- glassEffectStyle?: "regular" | "clear";
7
+ glassEffectStyle?: "regular" | "clear" | "none";
8
8
  isInteractive?: boolean;
9
- pointerEvents?: "none" | "auto" | "box-none" | "box-only";
9
+ colorScheme?: "auto" | "light" | "dark";
10
+ children?: ReactNode;
10
11
  }>;
11
12
 
12
13
  /** The slice of expo-glass-effect's `GlassContainer` an icon button group draws. */
@@ -19,20 +20,23 @@ export type GlassContainerComponent = ComponentType<{
19
20
  export { isAppleTouchWeb } from "./webGlass";
20
21
 
21
22
  /**
22
- * LC-176: the iOS 26 Liquid Glass material an icon button floats on in a bar.
23
- * Native iOS draws it from expo-glass-effect (`glass.native.ts`; Android
24
- * probes null). On the web only iOS Safari takes the glass face (Clay on
25
- * rv_3bb3f1f65d6b981f: "Is there a way to have the buttons at the bottom be
26
- * liquid glass if it's an iPhone"); every other browser draws the bare glyph.
23
+ * LC-176 (FZ-8666): iOS Safari cannot draw Liquid Glass, so it draws no glass.
24
+ * This is the one switch for the drawn face Clay asked for on
25
+ * rv_3bb3f1f65d6b981f, off since his note on rv_d481d34557e702ef, until he
26
+ * answers rv_c6369c2bab2ffea0.
27
27
  */
28
- export function loadGlassView(): GlassViewComponent | null {
29
- return isAppleTouchWeb() ? (WebGlassFace as GlassViewComponent) : null;
30
- }
28
+ const iosSafariGlassFace = false;
31
29
 
32
30
  /**
33
- * LC-176: the container that merges neighbouring Liquid Glass circles into one
34
- * shape, as iOS 26 groups bar buttons. Only iOS has it.
31
+ * LC-176: the system Liquid Glass an icon button sits in on a bar. Only native
32
+ * iOS 26 has it, from expo-glass-effect (`glass.native.ts`; Android probes
33
+ * null), so the web draws the plain glyph.
35
34
  */
35
+ export function loadGlassView(): GlassViewComponent | null {
36
+ return iosSafariGlassFace && isAppleTouchWeb() ? (WebGlassFace as GlassViewComponent) : null;
37
+ }
38
+
39
+ /** LC-176: the system's Liquid Glass container. Only iOS has it. */
36
40
  export function loadGlassContainer(): GlassContainerComponent | null {
37
41
  return null;
38
42
  }
@@ -4,9 +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 glass capsule (Liquid
8
- * Glass on iOS 26, its web twin in iOS Safari),
9
- * so a button inside draws its bare glyph instead of its own circle.
7
+ * is one shared dark capsule and `glass` one shared Liquid Glass capsule, so
8
+ * a button inside draws its bare glyph instead of its own circle.
10
9
  */
11
10
  export type IconButtonGroupGround = "media" | "glass" | null;
12
11
 
@@ -79,7 +79,6 @@ import { warnBareDisabled, warnPositiveTabIndex, warnSizeRecipeEscape } from "..
79
79
  import { useControlGrouped } from "../shared/groupContext";
80
80
  import { useInPanelEcho, usePanelTriggerRadiusReporter } from "../FloatingPanel/echoContext";
81
81
  import { loadGlassView } from "./glass";
82
- import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
83
82
  import { boldStroke, GLYPH_BOLD_STROKE_UNITS, ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "./circleGlyph";
84
83
  import { useIconButtonGroupGround, useIconButtonGroupMember } from "./iconButtonGroupContext";
85
84
 
@@ -850,9 +849,9 @@ export function Button({
850
849
  (labelled && chromeless && accentInk === true && edge === "start");
851
850
  const labelLine = labelLinePx(knobProps.body.fontFamily);
852
851
  const glyphFloor = iconButtonGlyphPx(labelLine);
853
- // LC-176: on iOS 26 a bar's icon button floats on Liquid Glass, the native
854
- // bar button. Elsewhere, and on a binary without the module, it stays the
855
- // bare tinted glyph.
852
+ // LC-176: on iOS 26 a bar's icon button sits in system Liquid Glass, the
853
+ // native bar button. Elsewhere, and on a binary without the module, it stays
854
+ // the bare tinted glyph; nothing re-creates the glass (FZ-8666).
856
855
  const glassGroup = groupGround === "glass";
857
856
  const GlassView =
858
857
  iconButton && !inlineGlyph && !nested && accentInk && barSurface && !selectedFill && !glassGroup
@@ -1095,7 +1094,8 @@ export function Button({
1095
1094
  // A plain button is ink on the bar: no shadow at rest (E-FLAT).
1096
1095
  const plainTier = tier === "plain";
1097
1096
  // LC-176: hover and press light a soft plate on web; on native the glyph
1098
- // dims, as an iOS bar button does. The media plate deepens instead.
1097
+ // dims, and on glass the system answers the press instead. The media plate
1098
+ // deepens instead.
1099
1099
  const glyphState = iconButton && !selectedFill;
1100
1100
  const iconHover = glyphState
1101
1101
  ? isWeb
@@ -1107,7 +1107,9 @@ export function Button({
1107
1107
  const iconPress = glyphState
1108
1108
  ? isWeb
1109
1109
  ? hostScoped({ backgroundColor: "$backgroundPress" })
1110
- : { backgroundColor: "transparent", opacity: ICON_BUTTON_PRESS_OPACITY }
1110
+ : GlassView || glassGroup
1111
+ ? { backgroundColor: "transparent" }
1112
+ : { backgroundColor: "transparent", opacity: ICON_BUTTON_PRESS_OPACITY }
1111
1113
  : mediaPlate
1112
1114
  ? { backgroundColor: "$shadow5" }
1113
1115
  : undefined;
@@ -1174,7 +1176,6 @@ export function Button({
1174
1176
  ? {
1175
1177
  borderRadius: 100000,
1176
1178
  backgroundColor: "$shadow4",
1177
- ...(isWeb ? { style: MEDIA_PLATE_WEB_STYLE } : undefined),
1178
1179
  }
1179
1180
  : undefined)}
1180
1181
  {...(edge && !inlineGlyph && chromeless && !selectedFill && !isCircular
@@ -1345,8 +1346,8 @@ export function Button({
1345
1346
  {GlassView ? (
1346
1347
  <GlassView
1347
1348
  glassEffectStyle="regular"
1348
- isInteractive
1349
- pointerEvents="none"
1349
+ isInteractive={!unavailable}
1350
+ colorScheme={darkScheme ? "dark" : "light"}
1350
1351
  style={{
1351
1352
  position: "absolute",
1352
1353
  top: glassInset,
@@ -1354,10 +1355,15 @@ export function Button({
1354
1355
  bottom: glassInset,
1355
1356
  left: glassInset,
1356
1357
  borderRadius: visualPx / 2,
1358
+ alignItems: "center",
1359
+ justifyContent: "center",
1357
1360
  }}
1358
- />
1359
- ) : null}
1360
- {iconElement}
1361
+ >
1362
+ {iconElement}
1363
+ </GlassView>
1364
+ ) : (
1365
+ iconElement
1366
+ )}
1361
1367
  {labelContent}
1362
1368
  {iconAfterElement}
1363
1369
  </ButtonFrame>
@@ -1426,5 +1432,5 @@ export function IconButton(props: IconButtonProps) {
1426
1432
  return <Button {...props} />;
1427
1433
  }
1428
1434
 
1429
- export { IconButtonGroup, ICON_BUTTON_GLASS_MERGE_PX } from "./IconButtonGroup";
1435
+ export { IconButtonGroup } from "./IconButtonGroup";
1430
1436
  export type { IconButtonGroupProps } from "./IconButtonGroup";
@@ -1,7 +1,6 @@
1
1
  import { isDarkThemeName } from "@multiplatform.one/theme";
2
- import { createElement } from "react";
2
+ import { createElement, Fragment, type ReactNode } from "react";
3
3
  import { useThemeName, YStack } from "tamagui";
4
- import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
5
4
 
6
5
  type GlassNavigator = { userAgent?: string; platform?: string; maxTouchPoints?: number };
7
6
 
@@ -19,24 +18,32 @@ export function isAppleTouchWeb(
19
18
  }
20
19
 
21
20
  const webGlassMarker = { "data-mp-glass": "web" };
21
+ const webGlassBlur = {
22
+ backdropFilter: "blur(16px) saturate(180%)",
23
+ WebkitBackdropFilter: "blur(16px) saturate(180%)",
24
+ } as const;
22
25
 
23
26
  /**
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.
27
+ * LC-176: the drawn face `loadGlassView` can give iOS Safari, one circle for a
28
+ * lone button or one capsule for an `IconButtonGroup`. Off by default: the
29
+ * compare in `glass.ts` decides whether it stays. Its children stay siblings
30
+ * above the layer (absolute, z -1 in the button's stacking context).
29
31
  */
30
- export function WebGlassFace({ style }: { style?: unknown }) {
32
+ export function WebGlassFace({ style, children }: { style?: unknown; children?: ReactNode }) {
31
33
  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
- });
34
+ return createElement(
35
+ Fragment,
36
+ null,
37
+ createElement(YStack, {
38
+ pointerEvents: "none",
39
+ backgroundColor: dark ? "$color4" : "$color1",
40
+ opacity: 0.92,
41
+ shadowColor: "$shadowColor",
42
+ shadowRadius: 10,
43
+ shadowOffset: { width: 0, height: 3 },
44
+ ...webGlassMarker,
45
+ style: { ...(style as object), zIndex: -1, ...webGlassBlur },
46
+ }),
47
+ children,
48
+ );
42
49
  }
package/src/index.ts CHANGED
@@ -117,7 +117,6 @@ export {
117
117
  IconButton,
118
118
  IconButtonGroup,
119
119
  iconButtonGlyphPx,
120
- ICON_BUTTON_GLASS_MERGE_PX,
121
120
  ICON_BUTTON_GLYPH_PX,
122
121
  ICON_BUTTON_NEUTRAL_GLYPH_PX,
123
122
  ICON_BUTTON_PRESS_OPACITY,
@@ -1,23 +1,18 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { type XStackProps } from "tamagui";
3
- /**
4
- * LC-176: how far apart two Liquid Glass circles may sit and still merge. Half
5
- * the 44pt target, so neighbours on the bar's gap always join.
6
- */
7
- export declare const ICON_BUTTON_GLASS_MERGE_PX = 22;
8
3
  export interface IconButtonGroupProps extends XStackProps {
9
- /** Over imagery or video: the group shares one material capsule. */
4
+ /** Over imagery or video: the group shares one dark capsule. */
10
5
  plate?: "media";
11
6
  children?: ReactNode;
12
7
  }
13
8
  /**
14
9
  * LC-176: icon buttons that sit side by side. Grounds merge, they never stand
15
- * as a row of separate circles: on iOS 26 the bar's group is one Liquid Glass
16
- * capsule, as the system draws a bar's item group (merging each circle through
17
- * the glass container left a waist between them, FZ-8158); over media the
18
- * group shares one material capsule; a bare row stays bare. A lone button
19
- * keeps its own circle, and a bar group with no icon button in it paints no
20
- * capsule (FZ-8494).
10
+ * as a row of separate circles: on iOS 26 the bar's group sits in one system
11
+ * Liquid Glass capsule, as the system draws a bar's item group (merging each
12
+ * circle through the glass container left a waist between them, FZ-8158), so
13
+ * press and merge are the system's; over media the group shares one dark
14
+ * capsule; a bare row stays bare. A lone button keeps its own circle, and a
15
+ * bar group with no icon button in it paints no capsule (FZ-8494).
21
16
  */
22
17
  export declare function IconButtonGroup({ plate, children, ...rest }: IconButtonGroupProps): import("react/jsx-runtime").JSX.Element;
23
18
  //# sourceMappingURL=IconButtonGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAWvE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAQ7C,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,2CAkIjF"}
1
+ {"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAA4C,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAmBrF,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,gEAAgE;IAChE,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,2CAyIjF"}
@@ -2,9 +2,10 @@ import type { ComponentType, ReactNode } from "react";
2
2
  /** The slice of expo-glass-effect's `GlassView` an icon button draws. */
3
3
  export type GlassViewComponent = ComponentType<{
4
4
  style?: unknown;
5
- glassEffectStyle?: "regular" | "clear";
5
+ glassEffectStyle?: "regular" | "clear" | "none";
6
6
  isInteractive?: boolean;
7
- pointerEvents?: "none" | "auto" | "box-none" | "box-only";
7
+ colorScheme?: "auto" | "light" | "dark";
8
+ children?: ReactNode;
8
9
  }>;
9
10
  /** The slice of expo-glass-effect's `GlassContainer` an icon button group draws. */
10
11
  export type GlassContainerComponent = ComponentType<{
@@ -14,16 +15,11 @@ export type GlassContainerComponent = ComponentType<{
14
15
  }>;
15
16
  export { isAppleTouchWeb } from "./webGlass";
16
17
  /**
17
- * LC-176: the iOS 26 Liquid Glass material an icon button floats on in a bar.
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.
18
+ * LC-176: the system Liquid Glass an icon button sits in on a bar. Only native
19
+ * iOS 26 has it, from expo-glass-effect (`glass.native.ts`; Android probes
20
+ * null), so the web draws the plain glyph.
22
21
  */
23
22
  export declare function loadGlassView(): GlassViewComponent | null;
24
- /**
25
- * LC-176: the container that merges neighbouring Liquid Glass circles into one
26
- * shape, as iOS 26 groups bar buttons. Only iOS has it.
27
- */
23
+ /** LC-176: the system's Liquid Glass container. Only iOS has it. */
28
24
  export declare function loadGlassContainer(): GlassContainerComponent | null;
29
25
  //# sourceMappingURL=glass.d.ts.map
@@ -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;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
+ {"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,GAAG,MAAM,CAAC;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,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;AAU7C;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
@@ -1,17 +1,29 @@
1
1
  import type { GlassContainerComponent, GlassViewComponent } from "./glass";
2
2
  export type { GlassContainerComponent, GlassViewComponent } from "./glass";
3
+ export interface GlassSources {
4
+ core: () => {
5
+ requireOptionalNativeModule?: (moduleName: string) => unknown;
6
+ };
7
+ glass: () => {
8
+ GlassView?: GlassViewComponent;
9
+ GlassContainer?: GlassContainerComponent;
10
+ isLiquidGlassAvailable?: () => boolean;
11
+ isGlassEffectAPIAvailable?: () => boolean;
12
+ };
13
+ }
14
+ export interface SystemGlass {
15
+ view: GlassViewComponent;
16
+ container: GlassContainerComponent | null;
17
+ }
3
18
  /**
4
- * LC-176: expo-glass-effect's `GlassView`, when this binary links its native
5
- * module and the OS draws Liquid Glass (iOS 26+); Android never links it. The module is probed through
6
- * `requireOptionalNativeModule` BEFORE the guarded `require`, so an OTA on a
7
- * binary built without it, or an older iOS, falls back to the bare tinted
8
- * glyph instead of throwing mid-render (the `nativePickerLoader.ts` contract).
19
+ * LC-176: expo-glass-effect's views, when this binary links the native module
20
+ * and the OS draws Liquid Glass (iOS 26+); Android never links it. The module
21
+ * is probed through `requireOptionalNativeModule` BEFORE the guarded `require`,
22
+ * so an OTA on a binary built without it, or an older iOS, falls back to the
23
+ * bare tinted glyph instead of throwing mid-render (the `nativePickerLoader.ts`
24
+ * contract). A binary whose module predates the container keeps its capsule.
9
25
  */
26
+ export declare function resolveSystemGlass(sources?: GlassSources): SystemGlass | null;
10
27
  export declare function loadGlassView(): GlassViewComponent | null;
11
- /**
12
- * LC-176: expo-glass-effect's `GlassContainer`, present exactly when
13
- * `loadGlassView` found Liquid Glass. A binary whose module predates the
14
- * container keeps separate circles rather than throwing.
15
- */
16
28
  export declare function loadGlassContainer(): GlassContainerComponent | null;
17
29
  //# sourceMappingURL=glass.native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glass.native.d.ts","sourceRoot":"","sources":["../../src/Button/glass.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAK3E;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CA0BzD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAGnE"}
1
+ {"version":3,"file":"glass.native.d.ts","sourceRoot":"","sources":["../../src/Button/glass.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM;QAAE,2BAA2B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;IAC9E,KAAK,EAAE,MAAM;QACX,SAAS,CAAC,EAAE,kBAAkB,CAAC;QAC/B,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,sBAAsB,CAAC,EAAE,MAAM,OAAO,CAAC;QACvC,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC;KAC3C,CAAC;CACH;AAqBD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,YAA0B,GAAG,WAAW,GAAG,IAAI,CAU1F;AASD,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
@@ -1,8 +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 glass capsule (Liquid
4
- * Glass on iOS 26, its web twin in iOS Safari),
5
- * so a button inside draws its bare glyph instead of its own circle.
3
+ * is one shared dark capsule and `glass` one shared Liquid Glass capsule, so
4
+ * a button inside draws its bare glyph instead of its own circle.
6
5
  */
7
6
  export type IconButtonGroupGround = "media" | "glass" | null;
8
7
  export declare const IconButtonGroupContext: import("react").Context<IconButtonGroupGround>;
@@ -1 +1 @@
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;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,6BAA6B,wDAAqD,CAAC;AAEhG,wBAAgB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI,CAEzE"}
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;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,6BAA6B,wDAAqD,CAAC;AAEhG,wBAAgB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI,CAEzE"}