@multiplatform.one/forms 7.71.0 → 7.73.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 (381) hide show
  1. package/dist/cjs/Button/circleGlyph.cjs +28 -0
  2. package/dist/cjs/Button/circleGlyph.native.js +31 -0
  3. package/dist/cjs/Button/circleGlyph.native.js.map +1 -0
  4. package/dist/cjs/Button/index.cjs +19 -3
  5. package/dist/cjs/Button/index.native.js +19 -3
  6. package/dist/cjs/Button/index.native.js.map +1 -1
  7. package/dist/cjs/FloatingPanel/PanelHeader.cjs +49 -0
  8. package/dist/cjs/FloatingPanel/PanelHeader.native.js +53 -0
  9. package/dist/cjs/FloatingPanel/PanelHeader.native.js.map +1 -0
  10. package/dist/cjs/FloatingPanel/echoContext.cjs +67 -0
  11. package/dist/cjs/FloatingPanel/echoContext.native.js +71 -0
  12. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -0
  13. package/dist/cjs/FloatingPanel/iconEcho.cjs +104 -0
  14. package/dist/cjs/FloatingPanel/iconEcho.native.js +114 -0
  15. package/dist/cjs/FloatingPanel/iconEcho.native.js.map +1 -0
  16. package/dist/cjs/FloatingPanel/index.cjs +371 -86
  17. package/dist/cjs/FloatingPanel/index.native.js +164 -20
  18. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  19. package/dist/cjs/FloatingPanel/paintedBox.cjs +80 -0
  20. package/dist/cjs/FloatingPanel/paintedBox.native.js +85 -0
  21. package/dist/cjs/FloatingPanel/paintedBox.native.js.map +1 -0
  22. package/dist/cjs/FloatingPanel/panelWidth.cjs +92 -0
  23. package/dist/cjs/FloatingPanel/panelWidth.native.js +99 -0
  24. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -0
  25. package/dist/cjs/FloatingPanel/pointAnchor.cjs +34 -5
  26. package/dist/cjs/FloatingPanel/pointAnchor.native.js +37 -8
  27. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  28. package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +60 -5
  29. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +72 -5
  30. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  31. package/dist/cjs/InputParts/index.cjs +18 -0
  32. package/dist/cjs/InputParts/index.native.js +19 -1
  33. package/dist/cjs/InputParts/index.native.js.map +1 -1
  34. package/dist/cjs/Wheel/NativeWheel.native.js +1 -1
  35. package/dist/cjs/Wheel/NativeWheel.native.js.map +1 -1
  36. package/dist/cjs/Wheel/index.cjs +2 -1
  37. package/dist/cjs/Wheel/index.native.js +4 -1
  38. package/dist/cjs/Wheel/index.native.js.map +1 -1
  39. package/dist/cjs/Wheel/wheelShared.cjs +6 -1
  40. package/dist/cjs/Wheel/wheelShared.native.js +7 -1
  41. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  42. package/dist/cjs/fields/Combobox/index.cjs +1 -0
  43. package/dist/cjs/fields/Combobox/index.native.js +1 -0
  44. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  45. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +6 -30
  46. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  47. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  48. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  49. package/dist/cjs/fields/DatePicker/catalog.cjs +2 -28
  50. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -30
  51. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  52. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  53. package/dist/cjs/fields/DatePicker/parts.cjs +11 -20
  54. package/dist/cjs/fields/DatePicker/parts.native.js +13 -22
  55. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  56. package/dist/cjs/fields/Select/index.cjs +65 -44
  57. package/dist/cjs/fields/Select/index.native.js +69 -47
  58. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  59. package/dist/cjs/fields/Select/shouldInlineChoices.cjs +3 -1
  60. package/dist/cjs/fields/Select/shouldInlineChoices.native.js +3 -1
  61. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  62. package/dist/cjs/fields/TimePicker/catalog.cjs +4 -25
  63. package/dist/cjs/fields/TimePicker/catalog.native.js +7 -29
  64. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  65. package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
  66. package/dist/cjs/fields/TimePicker/parts.cjs +8 -21
  67. package/dist/cjs/fields/TimePicker/parts.native.js +8 -21
  68. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  69. package/dist/cjs/index.cjs +2 -0
  70. package/dist/cjs/index.native.js +2 -0
  71. package/dist/cjs/index.native.js.map +1 -1
  72. package/dist/cjs/shared/floatingList.cjs +13 -4
  73. package/dist/cjs/shared/floatingList.native.js +15 -4
  74. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  75. package/dist/esm/Button/circleGlyph.mjs +3 -0
  76. package/dist/esm/Button/circleGlyph.mjs.map +1 -0
  77. package/dist/esm/Button/circleGlyph.native.js +3 -0
  78. package/dist/esm/Button/circleGlyph.native.js.map +1 -0
  79. package/dist/esm/Button/index.mjs +18 -2
  80. package/dist/esm/Button/index.mjs.map +1 -1
  81. package/dist/esm/Button/index.native.js +18 -2
  82. package/dist/esm/Button/index.native.js.map +1 -1
  83. package/dist/esm/FloatingPanel/PanelHeader.mjs +24 -0
  84. package/dist/esm/FloatingPanel/PanelHeader.mjs.map +1 -0
  85. package/dist/esm/FloatingPanel/PanelHeader.native.js +25 -0
  86. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -0
  87. package/dist/esm/FloatingPanel/echoContext.mjs +35 -0
  88. package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -0
  89. package/dist/esm/FloatingPanel/echoContext.native.js +36 -0
  90. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -0
  91. package/dist/esm/FloatingPanel/iconEcho.mjs +77 -0
  92. package/dist/esm/FloatingPanel/iconEcho.mjs.map +1 -0
  93. package/dist/esm/FloatingPanel/iconEcho.native.js +84 -0
  94. package/dist/esm/FloatingPanel/iconEcho.native.js.map +1 -0
  95. package/dist/esm/FloatingPanel/index.mjs +373 -90
  96. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  97. package/dist/esm/FloatingPanel/index.native.js +165 -23
  98. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  99. package/dist/esm/FloatingPanel/paintedBox.mjs +52 -0
  100. package/dist/esm/FloatingPanel/paintedBox.mjs.map +1 -0
  101. package/dist/esm/FloatingPanel/paintedBox.native.js +54 -0
  102. package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -0
  103. package/dist/esm/FloatingPanel/panelWidth.mjs +63 -0
  104. package/dist/esm/FloatingPanel/panelWidth.mjs.map +1 -0
  105. package/dist/esm/FloatingPanel/panelWidth.native.js +67 -0
  106. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -0
  107. package/dist/esm/FloatingPanel/pointAnchor.mjs +34 -5
  108. package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
  109. package/dist/esm/FloatingPanel/pointAnchor.native.js +37 -8
  110. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  111. package/dist/esm/FloatingPanel/useFloatingPanel.mjs +60 -6
  112. package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  113. package/dist/esm/FloatingPanel/useFloatingPanel.native.js +72 -6
  114. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  115. package/dist/esm/InputParts/index.mjs +19 -1
  116. package/dist/esm/InputParts/index.mjs.map +1 -1
  117. package/dist/esm/InputParts/index.native.js +20 -2
  118. package/dist/esm/InputParts/index.native.js.map +1 -1
  119. package/dist/esm/Wheel/NativeWheel.native.js +1 -1
  120. package/dist/esm/Wheel/NativeWheel.native.js.map +1 -1
  121. package/dist/esm/Wheel/index.mjs +2 -1
  122. package/dist/esm/Wheel/index.mjs.map +1 -1
  123. package/dist/esm/Wheel/index.native.js +4 -1
  124. package/dist/esm/Wheel/index.native.js.map +1 -1
  125. package/dist/esm/Wheel/wheelShared.mjs +6 -1
  126. package/dist/esm/Wheel/wheelShared.mjs.map +1 -1
  127. package/dist/esm/Wheel/wheelShared.native.js +7 -1
  128. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  129. package/dist/esm/fields/Combobox/index.mjs +1 -0
  130. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  131. package/dist/esm/fields/Combobox/index.native.js +1 -0
  132. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  133. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  134. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  135. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  136. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  137. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  138. package/dist/esm/fields/DatePicker/catalog.mjs +2 -28
  139. package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
  140. package/dist/esm/fields/DatePicker/catalog.native.js +2 -30
  141. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  142. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  143. package/dist/esm/fields/DatePicker/parts.mjs +11 -20
  144. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  145. package/dist/esm/fields/DatePicker/parts.native.js +13 -22
  146. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  147. package/dist/esm/fields/Select/index.mjs +66 -45
  148. package/dist/esm/fields/Select/index.mjs.map +1 -1
  149. package/dist/esm/fields/Select/index.native.js +70 -48
  150. package/dist/esm/fields/Select/index.native.js.map +1 -1
  151. package/dist/esm/fields/Select/shouldInlineChoices.mjs +3 -1
  152. package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
  153. package/dist/esm/fields/Select/shouldInlineChoices.native.js +3 -1
  154. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  155. package/dist/esm/fields/TimePicker/catalog.mjs +4 -25
  156. package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
  157. package/dist/esm/fields/TimePicker/catalog.native.js +7 -29
  158. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  159. package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
  160. package/dist/esm/fields/TimePicker/parts.mjs +8 -21
  161. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  162. package/dist/esm/fields/TimePicker/parts.native.js +8 -21
  163. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  164. package/dist/esm/index.mjs +2 -1
  165. package/dist/esm/index.mjs.map +1 -1
  166. package/dist/esm/index.native.js +2 -1
  167. package/dist/esm/index.native.js.map +1 -1
  168. package/dist/esm/shared/floatingList.mjs +14 -5
  169. package/dist/esm/shared/floatingList.mjs.map +1 -1
  170. package/dist/esm/shared/floatingList.native.js +16 -5
  171. package/dist/esm/shared/floatingList.native.js.map +1 -1
  172. package/dist/jsx/Button/circleGlyph.mjs +3 -0
  173. package/dist/jsx/Button/circleGlyph.mjs.map +1 -0
  174. package/dist/jsx/Button/circleGlyph.native.js +31 -0
  175. package/dist/jsx/Button/circleGlyph.native.js.map +1 -0
  176. package/dist/jsx/Button/index.mjs +18 -2
  177. package/dist/jsx/Button/index.mjs.map +1 -1
  178. package/dist/jsx/Button/index.native.js +19 -3
  179. package/dist/jsx/Button/index.native.js.map +1 -1
  180. package/dist/jsx/FloatingPanel/PanelHeader.mjs +24 -0
  181. package/dist/jsx/FloatingPanel/PanelHeader.mjs.map +1 -0
  182. package/dist/jsx/FloatingPanel/PanelHeader.native.js +53 -0
  183. package/dist/jsx/FloatingPanel/PanelHeader.native.js.map +1 -0
  184. package/dist/jsx/FloatingPanel/echoContext.mjs +35 -0
  185. package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -0
  186. package/dist/jsx/FloatingPanel/echoContext.native.js +71 -0
  187. package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -0
  188. package/dist/jsx/FloatingPanel/iconEcho.mjs +77 -0
  189. package/dist/jsx/FloatingPanel/iconEcho.mjs.map +1 -0
  190. package/dist/jsx/FloatingPanel/iconEcho.native.js +114 -0
  191. package/dist/jsx/FloatingPanel/iconEcho.native.js.map +1 -0
  192. package/dist/jsx/FloatingPanel/index.mjs +373 -90
  193. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  194. package/dist/jsx/FloatingPanel/index.native.js +164 -20
  195. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  196. package/dist/jsx/FloatingPanel/paintedBox.mjs +52 -0
  197. package/dist/jsx/FloatingPanel/paintedBox.mjs.map +1 -0
  198. package/dist/jsx/FloatingPanel/paintedBox.native.js +85 -0
  199. package/dist/jsx/FloatingPanel/paintedBox.native.js.map +1 -0
  200. package/dist/jsx/FloatingPanel/panelWidth.mjs +63 -0
  201. package/dist/jsx/FloatingPanel/panelWidth.mjs.map +1 -0
  202. package/dist/jsx/FloatingPanel/panelWidth.native.js +99 -0
  203. package/dist/jsx/FloatingPanel/panelWidth.native.js.map +1 -0
  204. package/dist/jsx/FloatingPanel/pointAnchor.mjs +34 -5
  205. package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
  206. package/dist/jsx/FloatingPanel/pointAnchor.native.js +37 -8
  207. package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
  208. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +60 -6
  209. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  210. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +72 -5
  211. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  212. package/dist/jsx/InputParts/index.mjs +19 -1
  213. package/dist/jsx/InputParts/index.mjs.map +1 -1
  214. package/dist/jsx/InputParts/index.native.js +19 -1
  215. package/dist/jsx/InputParts/index.native.js.map +1 -1
  216. package/dist/jsx/Wheel/NativeWheel.native.js +1 -1
  217. package/dist/jsx/Wheel/NativeWheel.native.js.map +1 -1
  218. package/dist/jsx/Wheel/index.mjs +2 -1
  219. package/dist/jsx/Wheel/index.mjs.map +1 -1
  220. package/dist/jsx/Wheel/index.native.js +4 -1
  221. package/dist/jsx/Wheel/index.native.js.map +1 -1
  222. package/dist/jsx/Wheel/wheelShared.mjs +6 -1
  223. package/dist/jsx/Wheel/wheelShared.mjs.map +1 -1
  224. package/dist/jsx/Wheel/wheelShared.native.js +7 -1
  225. package/dist/jsx/Wheel/wheelShared.native.js.map +1 -1
  226. package/dist/jsx/fields/Combobox/index.mjs +1 -0
  227. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  228. package/dist/jsx/fields/Combobox/index.native.js +1 -0
  229. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  230. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  231. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  232. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  233. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  234. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  235. package/dist/jsx/fields/DatePicker/catalog.mjs +2 -28
  236. package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
  237. package/dist/jsx/fields/DatePicker/catalog.native.js +2 -30
  238. package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
  239. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  240. package/dist/jsx/fields/DatePicker/parts.mjs +11 -20
  241. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  242. package/dist/jsx/fields/DatePicker/parts.native.js +13 -22
  243. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  244. package/dist/jsx/fields/Select/index.mjs +66 -45
  245. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  246. package/dist/jsx/fields/Select/index.native.js +69 -47
  247. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  248. package/dist/jsx/fields/Select/shouldInlineChoices.mjs +3 -1
  249. package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
  250. package/dist/jsx/fields/Select/shouldInlineChoices.native.js +3 -1
  251. package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
  252. package/dist/jsx/fields/TimePicker/catalog.mjs +4 -25
  253. package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
  254. package/dist/jsx/fields/TimePicker/catalog.native.js +7 -29
  255. package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
  256. package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
  257. package/dist/jsx/fields/TimePicker/parts.mjs +8 -21
  258. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  259. package/dist/jsx/fields/TimePicker/parts.native.js +8 -21
  260. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  261. package/dist/jsx/index.js +2 -1
  262. package/dist/jsx/index.js.map +1 -1
  263. package/dist/jsx/index.mjs +2 -1
  264. package/dist/jsx/index.mjs.map +1 -1
  265. package/dist/jsx/index.native.js +2 -0
  266. package/dist/jsx/index.native.js.map +1 -1
  267. package/dist/jsx/shared/floatingList.mjs +14 -5
  268. package/dist/jsx/shared/floatingList.mjs.map +1 -1
  269. package/dist/jsx/shared/floatingList.native.js +15 -4
  270. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  271. package/package.json +8 -8
  272. package/src/Button/circleGlyph.ts +6 -0
  273. package/src/Button/index.tsx +25 -7
  274. package/src/FloatingPanel/FloatingPanel.echoStretch.spec.tsx +67 -0
  275. package/src/FloatingPanel/FloatingPanel.iconEcho.spec.tsx +297 -0
  276. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +280 -3
  277. package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +237 -0
  278. package/src/FloatingPanel/PanelHeader.tsx +26 -0
  279. package/src/FloatingPanel/echoContext.ts +67 -0
  280. package/src/FloatingPanel/iconEcho.tsx +118 -0
  281. package/src/FloatingPanel/index.native.tsx +220 -12
  282. package/src/FloatingPanel/index.tsx +539 -109
  283. package/src/FloatingPanel/paintedBox.spec.ts +95 -0
  284. package/src/FloatingPanel/paintedBox.ts +75 -0
  285. package/src/FloatingPanel/panelWidth.spec.ts +158 -0
  286. package/src/FloatingPanel/panelWidth.ts +122 -0
  287. package/src/FloatingPanel/panelWidthContract.spec.ts +10 -10
  288. package/src/FloatingPanel/pointAnchor.spec.ts +111 -2
  289. package/src/FloatingPanel/pointAnchor.ts +56 -3
  290. package/src/FloatingPanel/useFloatingPanel.spec.tsx +124 -4
  291. package/src/FloatingPanel/useFloatingPanel.ts +112 -34
  292. package/src/InputParts/index.tsx +26 -0
  293. package/src/Wheel/NativeWheel.native.tsx +1 -1
  294. package/src/Wheel/Wheel.spec.tsx +9 -0
  295. package/src/Wheel/index.tsx +12 -3
  296. package/src/Wheel/wheelShared.ts +6 -2
  297. package/src/fields/Combobox/index.tsx +1 -0
  298. package/src/fields/DatePicker/DatePicker.stories.tsx +3 -3
  299. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +17 -45
  300. package/src/fields/DatePicker/DatetimePicker.native.tsx +3 -0
  301. package/src/fields/DatePicker/catalog.tsx +8 -39
  302. package/src/fields/DatePicker/index.native.tsx +3 -0
  303. package/src/fields/DatePicker/parts.tsx +13 -23
  304. package/src/fields/DatePicker/seamlessCover.spec.tsx +180 -0
  305. package/src/fields/DatePicker/touchWeb.spec.tsx +109 -167
  306. package/src/fields/Select/Select.containingBlock.spec.tsx +191 -0
  307. package/src/fields/Select/Select.stories.tsx +43 -0
  308. package/src/fields/Select/index.tsx +109 -45
  309. package/src/fields/Select/shouldInlineChoices.spec.ts +13 -0
  310. package/src/fields/Select/shouldInlineChoices.ts +6 -0
  311. package/src/fields/TimePicker/catalog.tsx +12 -33
  312. package/src/fields/TimePicker/index.native.tsx +2 -0
  313. package/src/fields/TimePicker/parts.tsx +6 -20
  314. package/src/index.ts +3 -0
  315. package/src/shared/floatingList.tsx +21 -5
  316. package/types/Button/circleGlyph.d.ts +7 -0
  317. package/types/Button/circleGlyph.d.ts.map +1 -0
  318. package/types/Button/index.d.ts +2 -6
  319. package/types/Button/index.d.ts.map +1 -1
  320. package/types/FloatingPanel/PanelHeader.d.ts +9 -0
  321. package/types/FloatingPanel/PanelHeader.d.ts.map +1 -0
  322. package/types/FloatingPanel/echoContext.d.ts +38 -0
  323. package/types/FloatingPanel/echoContext.d.ts.map +1 -0
  324. package/types/FloatingPanel/iconEcho.d.ts +29 -0
  325. package/types/FloatingPanel/iconEcho.d.ts.map +1 -0
  326. package/types/FloatingPanel/index.d.ts +69 -0
  327. package/types/FloatingPanel/index.d.ts.map +1 -1
  328. package/types/FloatingPanel/index.native.d.ts +9 -1
  329. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  330. package/types/FloatingPanel/paintedBox.d.ts +29 -0
  331. package/types/FloatingPanel/paintedBox.d.ts.map +1 -0
  332. package/types/FloatingPanel/panelWidth.d.ts +71 -0
  333. package/types/FloatingPanel/panelWidth.d.ts.map +1 -0
  334. package/types/FloatingPanel/pointAnchor.d.ts +17 -1
  335. package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
  336. package/types/FloatingPanel/useFloatingPanel.d.ts +33 -2
  337. package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
  338. package/types/InputParts/index.d.ts.map +1 -1
  339. package/types/Wheel/index.d.ts.map +1 -1
  340. package/types/Wheel/wheelShared.d.ts +2 -1
  341. package/types/Wheel/wheelShared.d.ts.map +1 -1
  342. package/types/fields/Combobox/index.d.ts.map +1 -1
  343. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +6 -0
  344. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  345. package/types/fields/DatePicker/DatetimePicker.native.d.ts +3 -0
  346. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  347. package/types/fields/DatePicker/catalog.d.ts +6 -0
  348. package/types/fields/DatePicker/catalog.d.ts.map +1 -1
  349. package/types/fields/DatePicker/index.native.d.ts +3 -0
  350. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  351. package/types/fields/DatePicker/parts.d.ts +5 -7
  352. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  353. package/types/fields/Select/index.d.ts +8 -1
  354. package/types/fields/Select/index.d.ts.map +1 -1
  355. package/types/fields/Select/shouldInlineChoices.d.ts +5 -1
  356. package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
  357. package/types/fields/TimePicker/catalog.d.ts +7 -1
  358. package/types/fields/TimePicker/catalog.d.ts.map +1 -1
  359. package/types/fields/TimePicker/index.native.d.ts +2 -0
  360. package/types/fields/TimePicker/index.native.d.ts.map +1 -1
  361. package/types/fields/TimePicker/parts.d.ts +1 -3
  362. package/types/fields/TimePicker/parts.d.ts.map +1 -1
  363. package/types/index.d.ts +3 -0
  364. package/types/index.d.ts.map +1 -1
  365. package/types/shared/floatingList.d.ts +5 -1
  366. package/types/shared/floatingList.d.ts.map +1 -1
  367. package/dist/cjs/shared/touchWebPicker.cjs +0 -136
  368. package/dist/cjs/shared/touchWebPicker.native.js +0 -154
  369. package/dist/cjs/shared/touchWebPicker.native.js.map +0 -1
  370. package/dist/esm/shared/touchWebPicker.mjs +0 -105
  371. package/dist/esm/shared/touchWebPicker.mjs.map +0 -1
  372. package/dist/esm/shared/touchWebPicker.native.js +0 -120
  373. package/dist/esm/shared/touchWebPicker.native.js.map +0 -1
  374. package/dist/jsx/shared/touchWebPicker.mjs +0 -105
  375. package/dist/jsx/shared/touchWebPicker.mjs.map +0 -1
  376. package/dist/jsx/shared/touchWebPicker.native.js +0 -154
  377. package/dist/jsx/shared/touchWebPicker.native.js.map +0 -1
  378. package/src/shared/touchWebPicker.spec.ts +0 -98
  379. package/src/shared/touchWebPicker.tsx +0 -158
  380. package/types/shared/touchWebPicker.d.ts +0 -40
  381. package/types/shared/touchWebPicker.d.ts.map +0 -1
@@ -1,154 +0,0 @@
1
- "use strict";
2
-
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
21
- };
22
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
- value: true
24
- }), mod);
25
- var touchWebPicker_exports = {};
26
- __export(touchWebPicker_exports, {
27
- TouchWebPickerInput: () => TouchWebPickerInput,
28
- fromNativeDateValue: () => fromNativeDateValue,
29
- fromTimeInputValue: () => fromTimeInputValue,
30
- toDateInputValue: () => toDateInputValue,
31
- toDatetimeLocalValue: () => toDatetimeLocalValue,
32
- toTimeInputValue: () => toTimeInputValue,
33
- useCoarsePointer: () => useCoarsePointer
34
- });
35
- module.exports = __toCommonJS(touchWebPicker_exports);
36
- var import_jsx_runtime = require("react/jsx-runtime");
37
- var import_theme = require("@multiplatform.one/theme");
38
- var import_react = require("react");
39
- var import_tamagui = require("tamagui");
40
- var coarsePointerQuery = "(pointer: coarse)";
41
- function coarsePointerList() {
42
- if (!import_tamagui.isWeb || typeof window === "undefined" || typeof window.matchMedia !== "function") {
43
- return null;
44
- }
45
- return window.matchMedia(coarsePointerQuery);
46
- }
47
- function subscribeCoarsePointer(onChange) {
48
- var _list_addListener;
49
- var list = coarsePointerList();
50
- if (!list) return function () {};
51
- if (typeof list.addEventListener === "function") {
52
- list.addEventListener("change", onChange);
53
- return function () {
54
- return list.removeEventListener("change", onChange);
55
- };
56
- }
57
- (_list_addListener = list.addListener) === null || _list_addListener === void 0 ? void 0 : _list_addListener.call(list, onChange);
58
- return function () {
59
- var _list_removeListener;
60
- return (_list_removeListener = list.removeListener) === null || _list_removeListener === void 0 ? void 0 : _list_removeListener.call(list, onChange);
61
- };
62
- }
63
- function readCoarsePointer() {
64
- var _ref;
65
- var _coarsePointerList;
66
- return (_ref = (_coarsePointerList = coarsePointerList()) === null || _coarsePointerList === void 0 ? void 0 : _coarsePointerList.matches) !== null && _ref !== void 0 ? _ref : false;
67
- }
68
- function useCoarsePointer() {
69
- return (0, import_react.useSyncExternalStore)(subscribeCoarsePointer, readCoarsePointer, function () {
70
- return false;
71
- });
72
- }
73
- function toDateInputValue(value) {
74
- return value ? (0, import_theme.formatCalendarDate)(value, "date") : "";
75
- }
76
- function toDatetimeLocalValue(value, showSeconds) {
77
- if (!value) return "";
78
- var wire = (0, import_theme.formatCalendarDate)(value, "datetime").replace(" ", "T");
79
- return showSeconds ? wire : wire.slice(0, 16);
80
- }
81
- function fromNativeDateValue(value) {
82
- return (0, import_theme.parseCalendarDate)(value);
83
- }
84
- var nativeTimePattern = /^([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d)(?:\.\d+)?)?$/;
85
- function fromTimeInputValue(value, showSeconds) {
86
- var _match_;
87
- var match = value.trim().replace(/^(\d):/, "0$1:").match(nativeTimePattern);
88
- if (!match) return "";
89
- var base = `${match[1]}:${match[2]}`;
90
- return showSeconds ? `${base}:${(_match_ = match[3]) !== null && _match_ !== void 0 ? _match_ : "00"}` : base;
91
- }
92
- function toTimeInputValue(value, showSeconds) {
93
- return fromTimeInputValue(value !== null && value !== void 0 ? value : "", showSeconds);
94
- }
95
- var overlayStyle = {
96
- position: "absolute",
97
- top: 0,
98
- left: 0,
99
- width: "100%",
100
- height: "100%",
101
- margin: 0,
102
- padding: 0,
103
- border: 0,
104
- opacity: 0,
105
- // iOS Safari zooms the page into a focused input under 16px.
106
- fontSize: 16,
107
- cursor: "pointer",
108
- zIndex: 1,
109
- WebkitAppearance: "none",
110
- appearance: "none"
111
- };
112
- function TouchWebPickerInput(param) {
113
- var {
114
- kind,
115
- value,
116
- onValue,
117
- onBlur,
118
- id,
119
- min,
120
- max,
121
- showSeconds,
122
- disabled,
123
- required,
124
- invalid,
125
- "aria-label": ariaLabel,
126
- "aria-describedby": ariaDescribedBy
127
- } = param;
128
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
129
- type: kind,
130
- id,
131
- value,
132
- min: min || void 0,
133
- max: max || void 0,
134
- step: showSeconds ? 1 : void 0,
135
- disabled,
136
- required,
137
- "aria-label": ariaLabel,
138
- "aria-describedby": ariaDescribedBy,
139
- "aria-invalid": invalid || void 0,
140
- "data-testid": "touch-web-picker",
141
- style: overlayStyle,
142
- onChange: function onChange(event) {
143
- return onValue(event.currentTarget.value);
144
- },
145
- onBlur,
146
- onClick: function onClick(event) {
147
- try {
148
- var _event_currentTarget_showPicker, _event_currentTarget;
149
- (_event_currentTarget_showPicker = (_event_currentTarget = event.currentTarget).showPicker) === null || _event_currentTarget_showPicker === void 0 ? void 0 : _event_currentTarget_showPicker.call(_event_currentTarget);
150
- } catch (unused) {}
151
- }
152
- });
153
- }
154
- //# sourceMappingURL=touchWebPicker.native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","touchWebPicker_exports","TouchWebPickerInput","fromNativeDateValue","fromTimeInputValue","toDateInputValue","toDatetimeLocalValue","toTimeInputValue","useCoarsePointer","module","exports","import_jsx_runtime","require","import_theme","import_react","import_tamagui","coarsePointerQuery","coarsePointerList","isWeb","window","matchMedia","subscribeCoarsePointer","onChange","_list_addListener","list","addEventListener","removeEventListener","addListener","_list_removeListener","removeListener","readCoarsePointer","_ref","_coarsePointerList","matches","useSyncExternalStore","formatCalendarDate","showSeconds","wire","replace","slice","parseCalendarDate","nativeTimePattern","_match_","match","trim","base","overlayStyle","position","top","left","width","height","margin","padding","border","opacity","fontSize","cursor","zIndex","WebkitAppearance","appearance","param","kind","onValue","onBlur","id","min","max","disabled","required","invalid","ariaLabel","ariaDescribedBy"],"sources":["../../../src/shared/touchWebPicker.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,98 +0,0 @@
1
- /**
2
- * FZ-8114 value contract for the touch-web picker inputs, across timezones.
3
- * The browser speaks timezone-naive strings; the MPO calendar speaks local
4
- * Dates. Each zone below must map one onto the other without a day or hour
5
- * shift. The negative control (the UTC-instant formulation) has to FAIL in
6
- * some zone, so a host that stopped honouring TZ cannot pass this vacuously.
7
- */
8
- import { formatCalendarDate } from "@multiplatform.one/theme";
9
- import { describe, expect, it } from "vitest";
10
- import {
11
- fromNativeDateValue,
12
- fromTimeInputValue,
13
- toDateInputValue,
14
- toDatetimeLocalValue,
15
- toTimeInputValue,
16
- } from "./touchWebPicker";
17
-
18
- const zones = [
19
- "UTC",
20
- "America/Los_Angeles",
21
- "America/St_Johns",
22
- "Asia/Kolkata",
23
- "Pacific/Kiritimati",
24
- ] as const;
25
-
26
- function inZone<T>(timeZone: string, read: () => T): T {
27
- const previous = process.env.TZ;
28
- process.env.TZ = timeZone;
29
- try {
30
- return read();
31
- } finally {
32
- if (previous === undefined) delete process.env.TZ;
33
- else process.env.TZ = previous;
34
- }
35
- }
36
-
37
- describe("touch-web picker values (FZ-8114)", () => {
38
- it("the zones really differ on this host", () => {
39
- const offsets = new Set(
40
- zones.map((zone) => inZone(zone, () => new Date(2026, 2, 5).getTimezoneOffset())),
41
- );
42
- expect(offsets.size).toBe(zones.length);
43
- });
44
-
45
- for (const zone of zones) {
46
- describe(zone, () => {
47
- it("date: the calendar's local midnight and the input string round-trip", () => {
48
- inZone(zone, () => {
49
- const picked = new Date(2026, 2, 5);
50
- expect(toDateInputValue(picked)).toBe("2026-03-05");
51
- const back = fromNativeDateValue("2026-03-05");
52
- expect(back?.getTime()).toBe(picked.getTime());
53
- expect(formatCalendarDate(back, "date")).toBe("2026-03-05");
54
- });
55
- });
56
-
57
- it("datetime: the local wall clock and the datetime-local string round-trip", () => {
58
- inZone(zone, () => {
59
- const picked = new Date(2026, 7, 15, 23, 45, 30);
60
- expect(toDatetimeLocalValue(picked, false)).toBe("2026-08-15T23:45");
61
- expect(toDatetimeLocalValue(picked, true)).toBe("2026-08-15T23:45:30");
62
- const back = fromNativeDateValue("2026-08-15T23:45");
63
- expect(back?.getTime()).toBe(new Date(2026, 7, 15, 23, 45, 0).getTime());
64
- expect(formatCalendarDate(back, "datetime")).toBe("2026-08-15 23:45:00");
65
- const withSeconds = fromNativeDateValue("2026-08-15T23:45:30");
66
- expect(withSeconds?.getTime()).toBe(picked.getTime());
67
- });
68
- });
69
- });
70
- }
71
-
72
- it("negative control: the UTC instant names the wrong day in some zone", () => {
73
- const wrong = zones.filter((zone) =>
74
- inZone(zone, () => new Date(2026, 7, 15).toISOString().slice(0, 10) !== "2026-08-15"),
75
- );
76
- expect(wrong.length).toBeGreaterThan(0);
77
- });
78
-
79
- it("empty and unparseable input clears", () => {
80
- expect(toDateInputValue(null)).toBe("");
81
- expect(toDatetimeLocalValue(undefined, true)).toBe("");
82
- expect(fromNativeDateValue("")).toBeNull();
83
- expect(fromNativeDateValue("2026-13-45")).toBeNull();
84
- });
85
-
86
- it("time: the input string normalises to the string TimePicker's wheels emit", () => {
87
- expect(fromTimeInputValue("14:30", false)).toBe("14:30");
88
- expect(fromTimeInputValue("14:30", true)).toBe("14:30:00");
89
- expect(fromTimeInputValue("14:30:15", false)).toBe("14:30");
90
- expect(fromTimeInputValue("14:30:15.250", true)).toBe("14:30:15");
91
- expect(fromTimeInputValue("9:05", false)).toBe("09:05");
92
- expect(fromTimeInputValue("", false)).toBe("");
93
- expect(fromTimeInputValue("25:00", false)).toBe("");
94
- expect(toTimeInputValue("08:00:00", false)).toBe("08:00");
95
- expect(toTimeInputValue("08:00", true)).toBe("08:00:00");
96
- expect(toTimeInputValue(undefined, false)).toBe("");
97
- });
98
- });
@@ -1,158 +0,0 @@
1
- import { formatCalendarDate, parseCalendarDate } from "@multiplatform.one/theme";
2
- import { type CSSProperties, useSyncExternalStore } from "react";
3
- import { isWeb } from "tamagui";
4
-
5
- /**
6
- * LC-266 on touch web (FZ-8114): a coarse primary pointer gets the browser's
7
- * own picker (`input type=date|time|datetime-local`), laid transparently over
8
- * the MPO box. iOS Safari opens its picker only for a real tap on the input,
9
- * so the input has to be what the finger hits.
10
- */
11
-
12
- export type TouchWebPickerKind = "date" | "time" | "datetime-local";
13
-
14
- const coarsePointerQuery = "(pointer: coarse)";
15
-
16
- function coarsePointerList(): MediaQueryList | null {
17
- if (!isWeb || typeof window === "undefined" || typeof window.matchMedia !== "function") {
18
- return null;
19
- }
20
- return window.matchMedia(coarsePointerQuery);
21
- }
22
-
23
- function subscribeCoarsePointer(onChange: () => void): () => void {
24
- const list = coarsePointerList();
25
- if (!list) return () => {};
26
- if (typeof list.addEventListener === "function") {
27
- list.addEventListener("change", onChange);
28
- return () => list.removeEventListener("change", onChange);
29
- }
30
- list.addListener?.(onChange);
31
- return () => list.removeListener?.(onChange);
32
- }
33
-
34
- function readCoarsePointer(): boolean {
35
- return coarsePointerList()?.matches ?? false;
36
- }
37
-
38
- /**
39
- * Primary pointer only: a touch laptop driven by its trackpad reports `fine`
40
- * and keeps the keyboard field. SSR and hydration read `false`.
41
- */
42
- export function useCoarsePointer(): boolean {
43
- return useSyncExternalStore(subscribeCoarsePointer, readCoarsePointer, () => false);
44
- }
45
-
46
- export function toDateInputValue(value: Date | null | undefined): string {
47
- return value ? formatCalendarDate(value, "date") : "";
48
- }
49
-
50
- export function toDatetimeLocalValue(value: Date | null | undefined, showSeconds: boolean): string {
51
- if (!value) return "";
52
- const wire = formatCalendarDate(value, "datetime").replace(" ", "T");
53
- return showSeconds ? wire : wire.slice(0, 16);
54
- }
55
-
56
- /**
57
- * The browser's string is timezone-naive, so it is read onto LOCAL parts:
58
- * the same Date the MPO calendar builds for that day or wall clock.
59
- */
60
- export function fromNativeDateValue(value: string): Date | null {
61
- return parseCalendarDate(value);
62
- }
63
-
64
- const nativeTimePattern = /^([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d)(?:\.\d+)?)?$/;
65
-
66
- /** Browsers drop `:00` seconds or add milliseconds; both normalise to TimePicker's string. */
67
- export function fromTimeInputValue(value: string, showSeconds: boolean): string {
68
- const match = value
69
- .trim()
70
- .replace(/^(\d):/, "0$1:")
71
- .match(nativeTimePattern);
72
- if (!match) return "";
73
- const base = `${match[1]}:${match[2]}`;
74
- return showSeconds ? `${base}:${match[3] ?? "00"}` : base;
75
- }
76
-
77
- export function toTimeInputValue(value: string | null | undefined, showSeconds: boolean): string {
78
- return fromTimeInputValue(value ?? "", showSeconds);
79
- }
80
-
81
- const overlayStyle: CSSProperties = {
82
- position: "absolute",
83
- top: 0,
84
- left: 0,
85
- width: "100%",
86
- height: "100%",
87
- margin: 0,
88
- padding: 0,
89
- border: 0,
90
- opacity: 0,
91
- // iOS Safari zooms the page into a focused input under 16px.
92
- fontSize: 16,
93
- cursor: "pointer",
94
- zIndex: 1,
95
- WebkitAppearance: "none",
96
- appearance: "none",
97
- };
98
-
99
- export interface TouchWebPickerInputProps {
100
- kind: TouchWebPickerKind;
101
- value: string;
102
- onValue: (value: string) => void;
103
- onBlur?: () => void;
104
- id?: string;
105
- min?: string;
106
- max?: string;
107
- showSeconds?: boolean;
108
- disabled?: boolean;
109
- required?: boolean;
110
- invalid?: boolean;
111
- "aria-label"?: string;
112
- "aria-describedby"?: string;
113
- }
114
-
115
- /** FieldLayout's label targets `id`, so the input carries the field's name. */
116
- export function TouchWebPickerInput({
117
- kind,
118
- value,
119
- onValue,
120
- onBlur,
121
- id,
122
- min,
123
- max,
124
- showSeconds,
125
- disabled,
126
- required,
127
- invalid,
128
- "aria-label": ariaLabel,
129
- "aria-describedby": ariaDescribedBy,
130
- }: TouchWebPickerInputProps) {
131
- return (
132
- <input
133
- type={kind}
134
- id={id}
135
- value={value}
136
- min={min || undefined}
137
- max={max || undefined}
138
- step={showSeconds ? 1 : undefined}
139
- disabled={disabled}
140
- required={required}
141
- aria-label={ariaLabel}
142
- aria-describedby={ariaDescribedBy}
143
- aria-invalid={invalid || undefined}
144
- data-testid="touch-web-picker"
145
- style={overlayStyle}
146
- onChange={(event) => onValue(event.currentTarget.value)}
147
- onBlur={onBlur}
148
- onClick={(event) => {
149
- // Chrome with a touch screen in desktop mode draws editable segments
150
- // and opens nothing for a tap; showPicker opens the dialog. It throws
151
- // when the picker is already up, which is harmless.
152
- try {
153
- (event.currentTarget as HTMLInputElement & { showPicker?: () => void }).showPicker?.();
154
- } catch {}
155
- }}
156
- />
157
- );
158
- }
@@ -1,40 +0,0 @@
1
- /**
2
- * LC-266 on touch web (FZ-8114): a coarse primary pointer gets the browser's
3
- * own picker (`input type=date|time|datetime-local`), laid transparently over
4
- * the MPO box. iOS Safari opens its picker only for a real tap on the input,
5
- * so the input has to be what the finger hits.
6
- */
7
- export type TouchWebPickerKind = "date" | "time" | "datetime-local";
8
- /**
9
- * Primary pointer only: a touch laptop driven by its trackpad reports `fine`
10
- * and keeps the keyboard field. SSR and hydration read `false`.
11
- */
12
- export declare function useCoarsePointer(): boolean;
13
- export declare function toDateInputValue(value: Date | null | undefined): string;
14
- export declare function toDatetimeLocalValue(value: Date | null | undefined, showSeconds: boolean): string;
15
- /**
16
- * The browser's string is timezone-naive, so it is read onto LOCAL parts:
17
- * the same Date the MPO calendar builds for that day or wall clock.
18
- */
19
- export declare function fromNativeDateValue(value: string): Date | null;
20
- /** Browsers drop `:00` seconds or add milliseconds; both normalise to TimePicker's string. */
21
- export declare function fromTimeInputValue(value: string, showSeconds: boolean): string;
22
- export declare function toTimeInputValue(value: string | null | undefined, showSeconds: boolean): string;
23
- export interface TouchWebPickerInputProps {
24
- kind: TouchWebPickerKind;
25
- value: string;
26
- onValue: (value: string) => void;
27
- onBlur?: () => void;
28
- id?: string;
29
- min?: string;
30
- max?: string;
31
- showSeconds?: boolean;
32
- disabled?: boolean;
33
- required?: boolean;
34
- invalid?: boolean;
35
- "aria-label"?: string;
36
- "aria-describedby"?: string;
37
- }
38
- /** FieldLayout's label targets `id`, so the input carries the field's name. */
39
- export declare function TouchWebPickerInput({ kind, value, onValue, onBlur, id, min, max, showSeconds, disabled, required, invalid, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, }: TouchWebPickerInputProps): import("react/jsx-runtime").JSX.Element;
40
- //# sourceMappingURL=touchWebPicker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"touchWebPicker.d.ts","sourceRoot":"","sources":["../../src/shared/touchWebPicker.tsx"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;AA0BpE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAIjG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;AAID,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAQ9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAE/F;AAoBD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,EAAE,EACF,GAAG,EACH,GAAG,EACH,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,GACpC,EAAE,wBAAwB,2CA4B1B"}