@multiplatform.one/forms 7.70.0 → 7.72.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 (333) hide show
  1. package/dist/cjs/Button/index.cjs +16 -0
  2. package/dist/cjs/Button/index.native.js +16 -0
  3. package/dist/cjs/Button/index.native.js.map +1 -1
  4. package/dist/cjs/FloatingPanel/echoContext.cjs +39 -0
  5. package/dist/cjs/FloatingPanel/echoContext.native.js +42 -0
  6. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -0
  7. package/dist/cjs/FloatingPanel/index.cjs +212 -80
  8. package/dist/cjs/FloatingPanel/index.native.js +92 -17
  9. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  10. package/dist/cjs/FloatingPanel/panelWidth.cjs +92 -0
  11. package/dist/cjs/FloatingPanel/panelWidth.native.js +99 -0
  12. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -0
  13. package/dist/cjs/FloatingPanel/pointAnchor.cjs +15 -5
  14. package/dist/cjs/FloatingPanel/pointAnchor.native.js +15 -5
  15. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  16. package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +58 -4
  17. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +69 -4
  18. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  19. package/dist/cjs/InputParts/index.cjs +20 -1
  20. package/dist/cjs/InputParts/index.native.js +22 -2
  21. package/dist/cjs/InputParts/index.native.js.map +1 -1
  22. package/dist/cjs/Wheel/NativeWheel.native.js +1 -1
  23. package/dist/cjs/Wheel/NativeWheel.native.js.map +1 -1
  24. package/dist/cjs/Wheel/index.cjs +2 -1
  25. package/dist/cjs/Wheel/index.native.js +4 -1
  26. package/dist/cjs/Wheel/index.native.js.map +1 -1
  27. package/dist/cjs/Wheel/wheelShared.cjs +6 -1
  28. package/dist/cjs/Wheel/wheelShared.native.js +7 -1
  29. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  30. package/dist/cjs/fields/Combobox/index.cjs +1 -0
  31. package/dist/cjs/fields/Combobox/index.native.js +1 -0
  32. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  33. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +6 -30
  34. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  35. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  36. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  37. package/dist/cjs/fields/DatePicker/catalog.cjs +2 -28
  38. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -30
  39. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  40. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  41. package/dist/cjs/fields/DatePicker/parts.cjs +11 -20
  42. package/dist/cjs/fields/DatePicker/parts.native.js +13 -22
  43. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  44. package/dist/cjs/fields/SearchInput/index.cjs +23 -1
  45. package/dist/cjs/fields/SearchInput/index.native.js +23 -1
  46. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  47. package/dist/cjs/fields/Select/index.cjs +65 -44
  48. package/dist/cjs/fields/Select/index.native.js +69 -47
  49. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  50. package/dist/cjs/fields/Select/shouldInlineChoices.cjs +3 -1
  51. package/dist/cjs/fields/Select/shouldInlineChoices.native.js +3 -1
  52. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  53. package/dist/cjs/fields/TimePicker/catalog.cjs +4 -25
  54. package/dist/cjs/fields/TimePicker/catalog.native.js +7 -29
  55. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  56. package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
  57. package/dist/cjs/fields/TimePicker/parts.cjs +8 -21
  58. package/dist/cjs/fields/TimePicker/parts.native.js +8 -21
  59. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  60. package/dist/cjs/index.native.js.map +1 -1
  61. package/dist/cjs/shared/floatingList.cjs +13 -4
  62. package/dist/cjs/shared/floatingList.native.js +15 -4
  63. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  64. package/dist/esm/Button/index.mjs +17 -1
  65. package/dist/esm/Button/index.mjs.map +1 -1
  66. package/dist/esm/Button/index.native.js +17 -1
  67. package/dist/esm/Button/index.native.js.map +1 -1
  68. package/dist/esm/FloatingPanel/echoContext.mjs +11 -0
  69. package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -0
  70. package/dist/esm/FloatingPanel/echoContext.native.js +11 -0
  71. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -0
  72. package/dist/esm/FloatingPanel/index.mjs +213 -83
  73. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  74. package/dist/esm/FloatingPanel/index.native.js +92 -19
  75. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  76. package/dist/esm/FloatingPanel/panelWidth.mjs +63 -0
  77. package/dist/esm/FloatingPanel/panelWidth.mjs.map +1 -0
  78. package/dist/esm/FloatingPanel/panelWidth.native.js +67 -0
  79. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -0
  80. package/dist/esm/FloatingPanel/pointAnchor.mjs +15 -5
  81. package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
  82. package/dist/esm/FloatingPanel/pointAnchor.native.js +15 -5
  83. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  84. package/dist/esm/FloatingPanel/useFloatingPanel.mjs +58 -5
  85. package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  86. package/dist/esm/FloatingPanel/useFloatingPanel.native.js +69 -5
  87. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  88. package/dist/esm/InputParts/index.mjs +21 -2
  89. package/dist/esm/InputParts/index.mjs.map +1 -1
  90. package/dist/esm/InputParts/index.native.js +23 -3
  91. package/dist/esm/InputParts/index.native.js.map +1 -1
  92. package/dist/esm/Wheel/NativeWheel.native.js +1 -1
  93. package/dist/esm/Wheel/NativeWheel.native.js.map +1 -1
  94. package/dist/esm/Wheel/index.mjs +2 -1
  95. package/dist/esm/Wheel/index.mjs.map +1 -1
  96. package/dist/esm/Wheel/index.native.js +4 -1
  97. package/dist/esm/Wheel/index.native.js.map +1 -1
  98. package/dist/esm/Wheel/wheelShared.mjs +6 -1
  99. package/dist/esm/Wheel/wheelShared.mjs.map +1 -1
  100. package/dist/esm/Wheel/wheelShared.native.js +7 -1
  101. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  102. package/dist/esm/fields/Combobox/index.mjs +1 -0
  103. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  104. package/dist/esm/fields/Combobox/index.native.js +1 -0
  105. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  106. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  107. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  108. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  109. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  110. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  111. package/dist/esm/fields/DatePicker/catalog.mjs +2 -28
  112. package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
  113. package/dist/esm/fields/DatePicker/catalog.native.js +2 -30
  114. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  115. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  116. package/dist/esm/fields/DatePicker/parts.mjs +11 -20
  117. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  118. package/dist/esm/fields/DatePicker/parts.native.js +13 -22
  119. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  120. package/dist/esm/fields/SearchInput/index.mjs +25 -3
  121. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  122. package/dist/esm/fields/SearchInput/index.native.js +25 -3
  123. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  124. package/dist/esm/fields/Select/index.mjs +66 -45
  125. package/dist/esm/fields/Select/index.mjs.map +1 -1
  126. package/dist/esm/fields/Select/index.native.js +70 -48
  127. package/dist/esm/fields/Select/index.native.js.map +1 -1
  128. package/dist/esm/fields/Select/shouldInlineChoices.mjs +3 -1
  129. package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
  130. package/dist/esm/fields/Select/shouldInlineChoices.native.js +3 -1
  131. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  132. package/dist/esm/fields/TimePicker/catalog.mjs +4 -25
  133. package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
  134. package/dist/esm/fields/TimePicker/catalog.native.js +7 -29
  135. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  136. package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
  137. package/dist/esm/fields/TimePicker/parts.mjs +8 -21
  138. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  139. package/dist/esm/fields/TimePicker/parts.native.js +8 -21
  140. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  141. package/dist/esm/index.mjs.map +1 -1
  142. package/dist/esm/index.native.js.map +1 -1
  143. package/dist/esm/shared/floatingList.mjs +14 -5
  144. package/dist/esm/shared/floatingList.mjs.map +1 -1
  145. package/dist/esm/shared/floatingList.native.js +16 -5
  146. package/dist/esm/shared/floatingList.native.js.map +1 -1
  147. package/dist/jsx/Button/index.mjs +17 -1
  148. package/dist/jsx/Button/index.mjs.map +1 -1
  149. package/dist/jsx/Button/index.native.js +16 -0
  150. package/dist/jsx/Button/index.native.js.map +1 -1
  151. package/dist/jsx/FloatingPanel/echoContext.mjs +11 -0
  152. package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -0
  153. package/dist/jsx/FloatingPanel/echoContext.native.js +42 -0
  154. package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -0
  155. package/dist/jsx/FloatingPanel/index.mjs +213 -83
  156. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  157. package/dist/jsx/FloatingPanel/index.native.js +92 -17
  158. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  159. package/dist/jsx/FloatingPanel/panelWidth.mjs +63 -0
  160. package/dist/jsx/FloatingPanel/panelWidth.mjs.map +1 -0
  161. package/dist/jsx/FloatingPanel/panelWidth.native.js +99 -0
  162. package/dist/jsx/FloatingPanel/panelWidth.native.js.map +1 -0
  163. package/dist/jsx/FloatingPanel/pointAnchor.mjs +15 -5
  164. package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
  165. package/dist/jsx/FloatingPanel/pointAnchor.native.js +15 -5
  166. package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
  167. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +58 -5
  168. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  169. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +69 -4
  170. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  171. package/dist/jsx/InputParts/index.mjs +21 -2
  172. package/dist/jsx/InputParts/index.mjs.map +1 -1
  173. package/dist/jsx/InputParts/index.native.js +22 -2
  174. package/dist/jsx/InputParts/index.native.js.map +1 -1
  175. package/dist/jsx/Wheel/NativeWheel.native.js +1 -1
  176. package/dist/jsx/Wheel/NativeWheel.native.js.map +1 -1
  177. package/dist/jsx/Wheel/index.mjs +2 -1
  178. package/dist/jsx/Wheel/index.mjs.map +1 -1
  179. package/dist/jsx/Wheel/index.native.js +4 -1
  180. package/dist/jsx/Wheel/index.native.js.map +1 -1
  181. package/dist/jsx/Wheel/wheelShared.mjs +6 -1
  182. package/dist/jsx/Wheel/wheelShared.mjs.map +1 -1
  183. package/dist/jsx/Wheel/wheelShared.native.js +7 -1
  184. package/dist/jsx/Wheel/wheelShared.native.js.map +1 -1
  185. package/dist/jsx/fields/Combobox/index.mjs +1 -0
  186. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  187. package/dist/jsx/fields/Combobox/index.native.js +1 -0
  188. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  189. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  190. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  191. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  192. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  193. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  194. package/dist/jsx/fields/DatePicker/catalog.mjs +2 -28
  195. package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
  196. package/dist/jsx/fields/DatePicker/catalog.native.js +2 -30
  197. package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
  198. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  199. package/dist/jsx/fields/DatePicker/parts.mjs +11 -20
  200. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  201. package/dist/jsx/fields/DatePicker/parts.native.js +13 -22
  202. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  203. package/dist/jsx/fields/SearchInput/index.mjs +25 -3
  204. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  205. package/dist/jsx/fields/SearchInput/index.native.js +23 -1
  206. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  207. package/dist/jsx/fields/Select/index.mjs +66 -45
  208. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  209. package/dist/jsx/fields/Select/index.native.js +69 -47
  210. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  211. package/dist/jsx/fields/Select/shouldInlineChoices.mjs +3 -1
  212. package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
  213. package/dist/jsx/fields/Select/shouldInlineChoices.native.js +3 -1
  214. package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
  215. package/dist/jsx/fields/TimePicker/catalog.mjs +4 -25
  216. package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
  217. package/dist/jsx/fields/TimePicker/catalog.native.js +7 -29
  218. package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
  219. package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
  220. package/dist/jsx/fields/TimePicker/parts.mjs +8 -21
  221. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  222. package/dist/jsx/fields/TimePicker/parts.native.js +8 -21
  223. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  224. package/dist/jsx/index.js.map +1 -1
  225. package/dist/jsx/index.mjs.map +1 -1
  226. package/dist/jsx/index.native.js.map +1 -1
  227. package/dist/jsx/shared/floatingList.mjs +14 -5
  228. package/dist/jsx/shared/floatingList.mjs.map +1 -1
  229. package/dist/jsx/shared/floatingList.native.js +15 -4
  230. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  231. package/package.json +8 -8
  232. package/src/Button/index.tsx +22 -0
  233. package/src/FloatingPanel/FloatingPanel.echoStretch.spec.tsx +67 -0
  234. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +193 -2
  235. package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +237 -0
  236. package/src/FloatingPanel/echoContext.ts +22 -0
  237. package/src/FloatingPanel/index.native.tsx +106 -9
  238. package/src/FloatingPanel/index.tsx +310 -102
  239. package/src/FloatingPanel/panelWidth.spec.ts +158 -0
  240. package/src/FloatingPanel/panelWidth.ts +122 -0
  241. package/src/FloatingPanel/panelWidthContract.spec.ts +10 -10
  242. package/src/FloatingPanel/pointAnchor.spec.ts +64 -2
  243. package/src/FloatingPanel/pointAnchor.ts +28 -3
  244. package/src/FloatingPanel/useFloatingPanel.spec.tsx +124 -4
  245. package/src/FloatingPanel/useFloatingPanel.ts +106 -33
  246. package/src/InputParts/index.tsx +30 -1
  247. package/src/Wheel/NativeWheel.native.tsx +1 -1
  248. package/src/Wheel/Wheel.spec.tsx +9 -0
  249. package/src/Wheel/index.tsx +12 -3
  250. package/src/Wheel/wheelShared.ts +6 -2
  251. package/src/fields/Combobox/index.tsx +1 -0
  252. package/src/fields/DatePicker/DatePicker.stories.tsx +3 -3
  253. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +17 -45
  254. package/src/fields/DatePicker/DatetimePicker.native.tsx +3 -0
  255. package/src/fields/DatePicker/catalog.tsx +8 -39
  256. package/src/fields/DatePicker/index.native.tsx +3 -0
  257. package/src/fields/DatePicker/parts.tsx +13 -23
  258. package/src/fields/DatePicker/seamlessCover.spec.tsx +180 -0
  259. package/src/fields/DatePicker/touchWeb.spec.tsx +109 -167
  260. package/src/fields/SearchInput/SearchInput.spec.tsx +40 -0
  261. package/src/fields/SearchInput/index.tsx +47 -2
  262. package/src/fields/Select/Select.containingBlock.spec.tsx +191 -0
  263. package/src/fields/Select/Select.stories.tsx +43 -0
  264. package/src/fields/Select/index.tsx +109 -45
  265. package/src/fields/Select/shouldInlineChoices.spec.ts +13 -0
  266. package/src/fields/Select/shouldInlineChoices.ts +6 -0
  267. package/src/fields/TimePicker/catalog.tsx +12 -33
  268. package/src/fields/TimePicker/index.native.tsx +2 -0
  269. package/src/fields/TimePicker/parts.tsx +6 -20
  270. package/src/index.ts +1 -0
  271. package/src/shared/floatingList.tsx +21 -5
  272. package/types/Button/index.d.ts.map +1 -1
  273. package/types/FloatingPanel/echoContext.d.ts +14 -0
  274. package/types/FloatingPanel/echoContext.d.ts.map +1 -0
  275. package/types/FloatingPanel/index.d.ts +59 -0
  276. package/types/FloatingPanel/index.d.ts.map +1 -1
  277. package/types/FloatingPanel/index.native.d.ts +9 -1
  278. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  279. package/types/FloatingPanel/panelWidth.d.ts +71 -0
  280. package/types/FloatingPanel/panelWidth.d.ts.map +1 -0
  281. package/types/FloatingPanel/pointAnchor.d.ts +8 -1
  282. package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
  283. package/types/FloatingPanel/useFloatingPanel.d.ts +33 -2
  284. package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
  285. package/types/InputParts/index.d.ts +5 -1
  286. package/types/InputParts/index.d.ts.map +1 -1
  287. package/types/Wheel/index.d.ts.map +1 -1
  288. package/types/Wheel/wheelShared.d.ts +2 -1
  289. package/types/Wheel/wheelShared.d.ts.map +1 -1
  290. package/types/fields/Combobox/index.d.ts.map +1 -1
  291. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +6 -0
  292. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  293. package/types/fields/DatePicker/DatetimePicker.native.d.ts +3 -0
  294. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  295. package/types/fields/DatePicker/catalog.d.ts +6 -0
  296. package/types/fields/DatePicker/catalog.d.ts.map +1 -1
  297. package/types/fields/DatePicker/index.native.d.ts +3 -0
  298. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  299. package/types/fields/DatePicker/parts.d.ts +5 -7
  300. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  301. package/types/fields/Input/index.d.ts +3 -1
  302. package/types/fields/Input/index.d.ts.map +1 -1
  303. package/types/fields/SearchInput/index.d.ts +11 -0
  304. package/types/fields/SearchInput/index.d.ts.map +1 -1
  305. package/types/fields/Select/index.d.ts +8 -1
  306. package/types/fields/Select/index.d.ts.map +1 -1
  307. package/types/fields/Select/shouldInlineChoices.d.ts +5 -1
  308. package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
  309. package/types/fields/TimePicker/catalog.d.ts +7 -1
  310. package/types/fields/TimePicker/catalog.d.ts.map +1 -1
  311. package/types/fields/TimePicker/index.native.d.ts +2 -0
  312. package/types/fields/TimePicker/index.native.d.ts.map +1 -1
  313. package/types/fields/TimePicker/parts.d.ts +1 -3
  314. package/types/fields/TimePicker/parts.d.ts.map +1 -1
  315. package/types/index.d.ts +1 -0
  316. package/types/index.d.ts.map +1 -1
  317. package/types/shared/floatingList.d.ts +5 -1
  318. package/types/shared/floatingList.d.ts.map +1 -1
  319. package/dist/cjs/shared/touchWebPicker.cjs +0 -136
  320. package/dist/cjs/shared/touchWebPicker.native.js +0 -154
  321. package/dist/cjs/shared/touchWebPicker.native.js.map +0 -1
  322. package/dist/esm/shared/touchWebPicker.mjs +0 -105
  323. package/dist/esm/shared/touchWebPicker.mjs.map +0 -1
  324. package/dist/esm/shared/touchWebPicker.native.js +0 -120
  325. package/dist/esm/shared/touchWebPicker.native.js.map +0 -1
  326. package/dist/jsx/shared/touchWebPicker.mjs +0 -105
  327. package/dist/jsx/shared/touchWebPicker.mjs.map +0 -1
  328. package/dist/jsx/shared/touchWebPicker.native.js +0 -154
  329. package/dist/jsx/shared/touchWebPicker.native.js.map +0 -1
  330. package/src/shared/touchWebPicker.spec.ts +0 -98
  331. package/src/shared/touchWebPicker.tsx +0 -158
  332. package/types/shared/touchWebPicker.d.ts +0 -40
  333. package/types/shared/touchWebPicker.d.ts.map +0 -1
@@ -33,6 +33,46 @@ describe("SearchInput", () => {
33
33
  expect(result.container.querySelector("svg")).toBeTruthy();
34
34
  });
35
35
 
36
+ it("puts trailing accessories inside the field, after clear, without an end inset", () => {
37
+ const result = renderWithProviders(
38
+ <SearchInput
39
+ defaultValue="abc"
40
+ trailing={
41
+ <button type="button" aria-label="Filter">
42
+ f
43
+ </button>
44
+ }
45
+ />,
46
+ );
47
+ const input = result.container.querySelector("input")!;
48
+ const trailing = result.container.querySelector<HTMLElement>("[data-search-trailing]")!;
49
+ const box = trailing.parentElement!;
50
+ expect(box.contains(input)).toBe(true);
51
+ const clear = result.getByLabelText("Clear search");
52
+ expect(clear.compareDocumentPosition(trailing) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
53
+ expect(trailing.contains(result.getByLabelText("Filter"))).toBe(true);
54
+ const style = getComputedStyle(box);
55
+ expect(style.paddingInlineEnd || "0px").toBe("0px");
56
+ });
57
+
58
+ it("filled is the .searchable field: the tinted wash, no edge at rest (FZ-8039)", () => {
59
+ const boxOf = (node: Element) => node.closest("[data-ring-target]") as HTMLElement;
60
+ const filled = renderWithProviders(<SearchInput filled />);
61
+ const filledBox = boxOf(filled.container.querySelector("input")!);
62
+ expect(String(filledBox.className)).toMatch(/_bg-color3\b/);
63
+ expect(String(filledBox.className)).toMatch(/_btc-transparent\b/);
64
+ filled.unmount();
65
+ const plain = renderWithProviders(<SearchInput />);
66
+ const plainBox = boxOf(plain.container.querySelector("input")!);
67
+ expect(String(plainBox.className)).not.toMatch(/_bg-color3\b/);
68
+ expect(String(plainBox.className)).not.toMatch(/_btc-transparent\b/);
69
+ });
70
+
71
+ it("keeps its end inset without trailing accessories", () => {
72
+ const result = renderWithProviders(<SearchInput />);
73
+ expect(result.container.querySelector("[data-search-trailing]")).toBeNull();
74
+ });
75
+
36
76
  it("uses readable glyph ink for search and clear rather than the boundary ramp", () => {
37
77
  let expectedInk = "";
38
78
  function Sample() {
@@ -13,14 +13,17 @@ import { useTouchSurface } from "@multiplatform.one/theme";
13
13
  import { MagnifyingGlassIcon, XIcon } from "@phosphor-icons/react";
14
14
  import {
15
15
  MIN_PRESS_TARGET,
16
+ controlTierWash,
16
17
  ensureCompositeFocusRing,
18
+ isDarkThemeName,
17
19
  pressTargetHitSlop,
18
20
  sizeRecipeForToken,
21
+ useElevatedSurface,
19
22
  } from "@multiplatform.one/theme";
20
23
  import type { ComponentProps, ReactNode, Ref, RefObject } from "react";
21
24
  import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
22
25
  import type { LabelProps, SizeTokens, TamaguiElement } from "tamagui";
23
- import { isWeb } from "tamagui";
26
+ import { XStack, isWeb, useThemeName } from "tamagui";
24
27
  import { Skeleton } from "../../Skeleton";
25
28
  import { Field, FieldLayout } from "../../fieldLayout";
26
29
  import { Input as InputParts } from "../../InputParts";
@@ -70,6 +73,11 @@ export interface SearchInputProps {
70
73
  size?: SizeTokens;
71
74
  /** Borderless/background-less (flush toolbar bands). */
72
75
  chromeless?: boolean;
76
+ /**
77
+ * The `.searchable` field of a list (UISearchBar): the LC-153 tinted wash
78
+ * with no edge at rest. Focus still turns the edge accent (LC-133).
79
+ */
80
+ filled?: boolean;
73
81
  skeleton?: boolean;
74
82
  label?: ReactNode;
75
83
  labelProps?: Omit<LabelProps, "htmlFor" | "ref">;
@@ -78,6 +86,12 @@ export interface SearchInputProps {
78
86
  /** Leading icon size in px. Defaults from the size token. */
79
87
  iconSize?: number;
80
88
  inputProps?: Omit<AreaProps, "value" | "id" | "onChange" | "onChangeText" | "ref">;
89
+ /**
90
+ * Bare glyph buttons at the field's trailing edge, after clear: the
91
+ * `.searchable` accessories of the list the field searches (filter, sort,
92
+ * more). The field drops its end inset so the last glyph's square closes it.
93
+ */
94
+ trailing?: ReactNode;
81
95
  }
82
96
 
83
97
  const SEARCH_STYLE_ID = "mp-search-input-chrome";
@@ -141,6 +155,7 @@ function SearchInputImpl(
141
155
  error,
142
156
  size,
143
157
  chromeless,
158
+ filled,
144
159
  skeleton,
145
160
  label,
146
161
  labelProps,
@@ -148,6 +163,7 @@ function SearchInputImpl(
148
163
  "aria-label": ariaLabel,
149
164
  iconSize,
150
165
  inputProps,
166
+ trailing,
151
167
  }: SearchInputProps,
152
168
  ref: Ref<SearchInputHandle>,
153
169
  ) {
@@ -244,6 +260,18 @@ function SearchInputImpl(
244
260
  ...(belowFloor ? { hitSlop: pressTargetHitSlop(visualHeight) } : undefined),
245
261
  } as const;
246
262
 
263
+ const elevatedGround = useElevatedSurface();
264
+ const darkScheme = isDarkThemeName(useThemeName());
265
+ const filledWash = controlTierWash(darkScheme, elevatedGround).rest;
266
+ const filledProps =
267
+ filled && !chromeless
268
+ ? {
269
+ backgroundColor: filledWash,
270
+ borderColor: "transparent" as const,
271
+ hoverStyle: { backgroundColor: filledWash, borderColor: "transparent" as const },
272
+ }
273
+ : undefined;
274
+
247
275
  const chromelessProps = chromeless
248
276
  ? {
249
277
  borderWidth: 0,
@@ -345,7 +373,13 @@ function SearchInputImpl(
345
373
  } as unknown as AreaProps;
346
374
 
347
375
  return (
348
- <InputParts.Box {...boxContract} disabled={disabled} {...chromelessProps}>
376
+ <InputParts.Box
377
+ {...boxContract}
378
+ disabled={disabled}
379
+ trailingFlush={trailing != null}
380
+ {...filledProps}
381
+ {...chromelessProps}
382
+ >
349
383
  <InputParts.Icon
350
384
  adornment="leading"
351
385
  color={formCommonColors.muted}
@@ -368,6 +402,17 @@ function SearchInputImpl(
368
402
  <XIcon />
369
403
  </InputParts.Action>
370
404
  ) : null}
405
+ {trailing != null ? (
406
+ <XStack
407
+ data-search-trailing=""
408
+ flexDirection="row"
409
+ alignItems="center"
410
+ alignSelf="stretch"
411
+ flexShrink={0}
412
+ >
413
+ {trailing}
414
+ </XStack>
415
+ ) : null}
371
416
  </InputParts.Box>
372
417
  );
373
418
  };
@@ -0,0 +1,191 @@
1
+ /**
2
+ * FZ-8438 (Clay's rv_0ea65e640a0ef261, an iPad Select inside a sheet): the
3
+ * listbox is `position: fixed`, and inside a transformed sheet it lays out
4
+ * against that sheet, not the viewport. Its top is offset by the sheet's
5
+ * origin so the panel still lands on its field.
6
+ */
7
+ import { fireEvent, waitFor } from "@testing-library/react";
8
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
9
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
10
+ import { OverlayStackProvider } from "../../shared/overlayStack";
11
+ import { Select, type SelectOption } from "./index";
12
+
13
+ const options: SelectOption[] = [
14
+ { value: "hel", label: "Helsinki" },
15
+ { value: "fsn", label: "Falkenstein" },
16
+ { value: "nbg", label: "Nuremberg" },
17
+ ];
18
+
19
+ async function openTop(result: ReturnType<typeof renderWithProviders>) {
20
+ fireEvent.keyDown(result.getByTestId("select-trigger"), { key: "Enter" });
21
+ const dropdown = await result.findByTestId("select-dropdown");
22
+ await waitFor(() => expect(dropdown.style.top).not.toBe(""));
23
+ return { dropdown, top: parseFloat(dropdown.style.top) };
24
+ }
25
+
26
+ describe("Select inside a transformed sheet (FZ-8438)", () => {
27
+ beforeEach(() => {
28
+ Object.defineProperty(window, "innerWidth", {
29
+ configurable: true,
30
+ writable: true,
31
+ value: 1200,
32
+ });
33
+ });
34
+
35
+ it("offsets its top by the sheet it lays out against", async () => {
36
+ const plain = renderWithProviders(<Select options={options} value="hel" />);
37
+ const { top: viewportTop } = await openTop(plain);
38
+ plain.unmount();
39
+
40
+ const result = renderWithProviders(
41
+ <div
42
+ role="dialog"
43
+ data-testid="sheet"
44
+ style={{ transform: "translateY(0px)", overflowY: "auto", height: 100 }}
45
+ >
46
+ <Select options={options} value="hel" />
47
+ </div>,
48
+ );
49
+ const sheet = result.getByTestId("sheet");
50
+ sheet.scrollTop = 40;
51
+ const { dropdown, top } = await openTop(result);
52
+ expect(sheet.contains(dropdown)).toBe(true);
53
+ expect(top).toBe(viewportTop + 40);
54
+ });
55
+ });
56
+
57
+ describe("Select seamless cover (LC-112, FZ-8438)", () => {
58
+ beforeEach(() => {
59
+ Object.defineProperty(window, "innerWidth", {
60
+ configurable: true,
61
+ writable: true,
62
+ value: 1200,
63
+ });
64
+ });
65
+ afterEach(() => {
66
+ vi.restoreAllMocks();
67
+ });
68
+
69
+ it("opens on the field's top edge with the field echoed as a hidden first row", async () => {
70
+ const original = HTMLElement.prototype.getBoundingClientRect;
71
+ vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
72
+ function (this: HTMLElement) {
73
+ const field = this.querySelector('[data-testid="select-trigger"]');
74
+ if (this.dataset.testid === "select-trigger" || field) {
75
+ return {
76
+ x: 16,
77
+ y: 200,
78
+ top: 200,
79
+ left: 16,
80
+ right: 416,
81
+ bottom: 240,
82
+ width: 400,
83
+ height: 40,
84
+ toJSON: () => ({}),
85
+ } as DOMRect;
86
+ }
87
+ return original.call(this);
88
+ },
89
+ );
90
+ const result = renderWithProviders(<Select options={options} value="nbg" />);
91
+ const { dropdown, top } = await openTop(result);
92
+ expect(top).toBe(200);
93
+ const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
94
+ expect(echo).not.toBeNull();
95
+ expect(dropdown.firstElementChild).toBe(echo);
96
+ expect(echo?.getAttribute("aria-hidden")).toBe("true");
97
+ expect(echo?.getAttribute("role")).toBeNull();
98
+ });
99
+ });
100
+
101
+ describe("Select drop-up (LC-112, FZ-8438 r3)", () => {
102
+ const field = (top: number) => ({
103
+ x: 16,
104
+ y: top,
105
+ top,
106
+ left: 16,
107
+ right: 416,
108
+ bottom: top + 40,
109
+ width: 400,
110
+ height: 40,
111
+ toJSON: () => ({}),
112
+ });
113
+ let fieldTop = 700;
114
+ beforeEach(() => {
115
+ Object.defineProperty(window, "innerWidth", {
116
+ configurable: true,
117
+ writable: true,
118
+ value: 1024,
119
+ });
120
+ Object.defineProperty(window, "innerHeight", {
121
+ configurable: true,
122
+ writable: true,
123
+ value: 768,
124
+ });
125
+ const original = HTMLElement.prototype.getBoundingClientRect;
126
+ vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
127
+ function (this: HTMLElement) {
128
+ if (
129
+ this.dataset.testid === "select-trigger" ||
130
+ this.querySelector('[data-testid="select-trigger"]')
131
+ ) {
132
+ return field(fieldTop) as DOMRect;
133
+ }
134
+ return original.call(this);
135
+ },
136
+ );
137
+ vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
138
+ function (this: HTMLElement) {
139
+ return this.dataset.testid === "select-dropdown" ? 300 : 0;
140
+ },
141
+ );
142
+ });
143
+ afterEach(() => {
144
+ vi.restoreAllMocks();
145
+ });
146
+
147
+ it("a field too low for its list opens upward, its bottom edge on the field's", async () => {
148
+ fieldTop = 700;
149
+ const result = renderWithProviders(<Select options={options} value="hel" />);
150
+ const { dropdown } = await openTop(result);
151
+ // The panel's bottom edge is the field's (740): the 300 list plus the
152
+ // frame's borders, above it.
153
+ await waitFor(() => expect(parseFloat(dropdown.style.top)).toBeLessThan(700));
154
+ expect(parseFloat(dropdown.style.top) + parseFloat(dropdown.style.maxHeight)).toBe(740);
155
+ expect(parseFloat(dropdown.style.maxHeight)).toBeGreaterThanOrEqual(300);
156
+ const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
157
+ await waitFor(() => expect(echo?.style.order).toBe("1"));
158
+ expect(echo?.style.top).toBe("");
159
+ expect(echo?.style.bottom).not.toBe("");
160
+ });
161
+
162
+ it("a field with room below keeps the echo on top, opening down", async () => {
163
+ fieldTop = 120;
164
+ const result = renderWithProviders(<Select options={options} value="hel" />);
165
+ const { dropdown, top } = await openTop(result);
166
+ expect(top).toBe(120);
167
+ const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
168
+ expect(echo?.style.order).toBe("");
169
+ });
170
+ });
171
+
172
+ describe("Select beside its field in a sheet (LC-262, FZ-8438)", () => {
173
+ beforeEach(() => {
174
+ Object.defineProperty(window, "innerWidth", {
175
+ configurable: true,
176
+ writable: true,
177
+ value: 1200,
178
+ });
179
+ });
180
+
181
+ it("draws no trigger echo row when it opens beside the field", async () => {
182
+ const result = renderWithProviders(
183
+ <OverlayStackProvider zIndex={100000}>
184
+ <Select options={options} value="hel" />
185
+ </OverlayStackProvider>,
186
+ );
187
+ const { dropdown } = await openTop(result);
188
+ expect(dropdown.querySelector("[data-fp-trigger-row]")).toBeNull();
189
+ expect(dropdown.textContent?.match(/Helsinki/g)?.length ?? 0).toBe(1);
190
+ });
191
+ });
@@ -496,3 +496,46 @@ export const NativeIos: Story = {
496
496
  native: true,
497
497
  },
498
498
  };
499
+
500
+ const zoneOptions: SelectOption[] = [
501
+ { value: "hst", label: "Hawaii" },
502
+ { value: "akst", label: "Alaska" },
503
+ { value: "pt", label: "Pacific Time (US and Canada)" },
504
+ { value: "mt", label: "Mountain Time (US and Canada)" },
505
+ { value: "ct", label: "Central Time (US and Canada)" },
506
+ { value: "et", label: "Eastern Time (US and Canada)" },
507
+ { value: "gmt", label: "London" },
508
+ { value: "cet", label: "Berlin" },
509
+ { value: "eet", label: "Helsinki" },
510
+ { value: "ist", label: "Kolkata" },
511
+ { value: "jst", label: "Tokyo" },
512
+ { value: "aest", label: "Sydney" },
513
+ ];
514
+
515
+ /**
516
+ * LC-112 width setting (FZ-8438 r3): the same field opened four ways. Each
517
+ * panel's top edge sits on its field; only the width changes.
518
+ */
519
+ export const PanelWidths: Story = {
520
+ render: () => (
521
+ <YStack gap="$4" width={260}>
522
+ <Select label="Content" options={zoneOptions} defaultValue="pt" panelWidth="content" />
523
+ <Select label="Trigger" options={zoneOptions} defaultValue="pt" panelWidth="trigger" />
524
+ <Select label="Screen" options={zoneOptions} defaultValue="pt" panelWidth="screen" />
525
+ <Select label="Fixed 360" options={zoneOptions} defaultValue="pt" panelWidth={360} />
526
+ </YStack>
527
+ ),
528
+ };
529
+
530
+ /**
531
+ * Phone width (LC-112, FZ-7830): a long list opens its sheet at page level and
532
+ * a short one (seven or fewer options) opens as a menu over its field.
533
+ */
534
+ export const PhoneLists: Story = {
535
+ render: () => (
536
+ <YStack gap="$4">
537
+ <Select label="Time zone" options={zoneOptions} defaultValue="pt" />
538
+ <Select label="Country" options={countryOptions} defaultValue="us" />
539
+ </YStack>
540
+ ),
541
+ };