@rpcbase/ui 0.287.0 → 0.289.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 (738) hide show
  1. package/dist/assets/sha256.worker-DNtOSCbM.js.map +1 -0
  2. package/dist/components/FilesUploadField/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -12
  4. package/dist/index10.js.map +1 -1
  5. package/dist/index100.js.map +1 -1
  6. package/dist/index101.js.map +1 -1
  7. package/dist/index102.js.map +1 -1
  8. package/dist/index103.js.map +1 -1
  9. package/dist/index104.js.map +1 -1
  10. package/dist/index105.js.map +1 -1
  11. package/dist/index106.js.map +1 -1
  12. package/dist/index107.js.map +1 -1
  13. package/dist/index108.js.map +1 -1
  14. package/dist/index109.js.map +1 -1
  15. package/dist/index11.js +96 -17
  16. package/dist/index11.js.map +1 -1
  17. package/dist/index110.js.map +1 -1
  18. package/dist/index111.js.map +1 -1
  19. package/dist/index112.js.map +1 -1
  20. package/dist/index113.js.map +1 -1
  21. package/dist/index114.js.map +1 -1
  22. package/dist/index115.js.map +1 -1
  23. package/dist/index116.js.map +1 -1
  24. package/dist/index117.js.map +1 -1
  25. package/dist/index118.js.map +1 -1
  26. package/dist/index119.js.map +1 -1
  27. package/dist/index12.js.map +1 -1
  28. package/dist/index120.js.map +1 -1
  29. package/dist/index121.js.map +1 -1
  30. package/dist/index122.js.map +1 -1
  31. package/dist/index123.js +1 -1
  32. package/dist/index123.js.map +1 -1
  33. package/dist/index124.js.map +1 -1
  34. package/dist/index125.js.map +1 -1
  35. package/dist/index126.js.map +1 -1
  36. package/dist/index127.js.map +1 -1
  37. package/dist/index128.js.map +1 -1
  38. package/dist/index129.js.map +1 -1
  39. package/dist/index13.js.map +1 -1
  40. package/dist/index130.js.map +1 -1
  41. package/dist/index131.js.map +1 -1
  42. package/dist/index132.js.map +1 -1
  43. package/dist/index133.js.map +1 -1
  44. package/dist/index134.js.map +1 -1
  45. package/dist/index135.js.map +1 -1
  46. package/dist/index136.js.map +1 -1
  47. package/dist/index137.js.map +1 -1
  48. package/dist/index138.js.map +1 -1
  49. package/dist/index139.js.map +1 -1
  50. package/dist/index14.js.map +1 -1
  51. package/dist/index140.js.map +1 -1
  52. package/dist/index141.js.map +1 -1
  53. package/dist/index142.js.map +1 -1
  54. package/dist/index143.js.map +1 -1
  55. package/dist/index144.js.map +1 -1
  56. package/dist/index145.js.map +1 -1
  57. package/dist/index146.js.map +1 -1
  58. package/dist/index147.js.map +1 -1
  59. package/dist/index148.js.map +1 -1
  60. package/dist/index149.js.map +1 -1
  61. package/dist/index15.js.map +1 -1
  62. package/dist/index150.js.map +1 -1
  63. package/dist/index151.js.map +1 -1
  64. package/dist/index152.js.map +1 -1
  65. package/dist/index153.js.map +1 -1
  66. package/dist/index154.js +4 -4
  67. package/dist/index154.js.map +1 -1
  68. package/dist/index155.js.map +1 -1
  69. package/dist/index156.js.map +1 -1
  70. package/dist/index157.js.map +1 -1
  71. package/dist/index158.js.map +1 -1
  72. package/dist/index159.js.map +1 -1
  73. package/dist/index16.js.map +1 -1
  74. package/dist/index160.js.map +1 -1
  75. package/dist/index161.js.map +1 -1
  76. package/dist/index162.js.map +1 -1
  77. package/dist/index163.js.map +1 -1
  78. package/dist/index164.js.map +1 -1
  79. package/dist/index165.js.map +1 -1
  80. package/dist/index166.js.map +1 -1
  81. package/dist/index167.js.map +1 -1
  82. package/dist/index168.js.map +1 -1
  83. package/dist/index169.js.map +1 -1
  84. package/dist/index17.js.map +1 -1
  85. package/dist/index170.js +18 -12
  86. package/dist/index170.js.map +1 -1
  87. package/dist/index171.js.map +1 -1
  88. package/dist/index172.js.map +1 -1
  89. package/dist/index173.js.map +1 -1
  90. package/dist/index174.js.map +1 -1
  91. package/dist/index175.js.map +1 -1
  92. package/dist/index176.js.map +1 -1
  93. package/dist/index177.js.map +1 -1
  94. package/dist/index178.js.map +1 -1
  95. package/dist/index179.js.map +1 -1
  96. package/dist/index18.js.map +1 -1
  97. package/dist/index180.js.map +1 -1
  98. package/dist/index181.js +1 -1
  99. package/dist/index181.js.map +1 -1
  100. package/dist/index182.js +3 -3
  101. package/dist/index182.js.map +1 -1
  102. package/dist/index183.js.map +1 -1
  103. package/dist/index184.js.map +1 -1
  104. package/dist/index185.js.map +1 -1
  105. package/dist/index186.js.map +1 -1
  106. package/dist/index187.js.map +1 -1
  107. package/dist/index188.js.map +1 -1
  108. package/dist/index189.js.map +1 -1
  109. package/dist/index19.js.map +1 -1
  110. package/dist/index190.js +9 -7
  111. package/dist/index190.js.map +1 -1
  112. package/dist/index191.js +4 -4
  113. package/dist/index191.js.map +1 -1
  114. package/dist/index192.js +4 -15
  115. package/dist/index192.js.map +1 -1
  116. package/dist/index193.js +13 -3
  117. package/dist/index193.js.map +1 -1
  118. package/dist/index194.js +2 -2
  119. package/dist/index194.js.map +1 -1
  120. package/dist/index195.js +4 -85
  121. package/dist/index195.js.map +1 -1
  122. package/dist/index196.js +79 -54
  123. package/dist/index196.js.map +1 -1
  124. package/dist/index197.js +68 -7
  125. package/dist/index197.js.map +1 -1
  126. package/dist/index198.js +3 -23
  127. package/dist/index198.js.map +1 -1
  128. package/dist/index199.js +6 -28
  129. package/dist/index199.js.map +1 -1
  130. package/dist/index20.js.map +1 -1
  131. package/dist/index200.js +4 -97
  132. package/dist/index200.js.map +1 -1
  133. package/dist/index201.js +3 -4
  134. package/dist/index201.js.map +1 -1
  135. package/dist/index202.js +23 -24
  136. package/dist/index202.js.map +1 -1
  137. package/dist/index203.js +28 -10
  138. package/dist/index203.js.map +1 -1
  139. package/dist/index204.js +97 -4
  140. package/dist/index204.js.map +1 -1
  141. package/dist/index205.js +4 -12
  142. package/dist/index205.js.map +1 -1
  143. package/dist/index206.js +22 -19
  144. package/dist/index206.js.map +1 -1
  145. package/dist/index207.js +4 -6
  146. package/dist/index207.js.map +1 -1
  147. package/dist/index208.js +4 -15
  148. package/dist/index208.js.map +1 -1
  149. package/dist/index209.js +10 -102
  150. package/dist/index209.js.map +1 -1
  151. package/dist/index210.js +21 -3
  152. package/dist/index210.js.map +1 -1
  153. package/dist/index211.js +5 -23
  154. package/dist/index211.js.map +1 -1
  155. package/dist/index212.js +15 -28
  156. package/dist/index212.js.map +1 -1
  157. package/dist/index213.js +101 -17
  158. package/dist/index213.js.map +1 -1
  159. package/dist/index214.js +3 -7
  160. package/dist/index214.js.map +1 -1
  161. package/dist/index215.js +24 -15
  162. package/dist/index215.js.map +1 -1
  163. package/dist/index216.js +27 -7
  164. package/dist/index216.js.map +1 -1
  165. package/dist/index217.js +17 -24
  166. package/dist/index217.js.map +1 -1
  167. package/dist/index218.js +6 -22
  168. package/dist/index218.js.map +1 -1
  169. package/dist/index219.js +15 -6
  170. package/dist/index219.js.map +1 -1
  171. package/dist/index220.js +8 -5
  172. package/dist/index220.js.map +1 -1
  173. package/dist/index221.js +27 -4
  174. package/dist/index221.js.map +1 -1
  175. package/dist/index222.js +23 -4
  176. package/dist/index222.js.map +1 -1
  177. package/dist/index223.js +6 -24
  178. package/dist/index223.js.map +1 -1
  179. package/dist/index224.js +5 -3
  180. package/dist/index224.js.map +1 -1
  181. package/dist/index225.js +4 -24
  182. package/dist/index225.js.map +1 -1
  183. package/dist/index226.js +4 -23
  184. package/dist/index226.js.map +1 -1
  185. package/dist/index227.js +23 -6
  186. package/dist/index227.js.map +1 -1
  187. package/dist/index228.js +22 -8
  188. package/dist/index228.js.map +1 -1
  189. package/dist/index229.js +3 -19
  190. package/dist/index229.js.map +1 -1
  191. package/dist/index23.js.map +1 -1
  192. package/dist/index230.js +22 -50
  193. package/dist/index230.js.map +1 -1
  194. package/dist/index231.js +7 -20
  195. package/dist/index231.js.map +1 -1
  196. package/dist/index232.js +9 -27
  197. package/dist/index232.js.map +1 -1
  198. package/dist/index233.js +17 -97
  199. package/dist/index233.js.map +1 -1
  200. package/dist/index234.js +50 -33
  201. package/dist/index234.js.map +1 -1
  202. package/dist/index235.js +20 -119
  203. package/dist/index235.js.map +1 -1
  204. package/dist/index236.js +28 -13
  205. package/dist/index236.js.map +1 -1
  206. package/dist/index237.js +98 -4
  207. package/dist/index237.js.map +1 -1
  208. package/dist/index238.js +33 -15
  209. package/dist/index238.js.map +1 -1
  210. package/dist/index239.js +116 -62
  211. package/dist/index239.js.map +1 -1
  212. package/dist/index24.js.map +1 -1
  213. package/dist/index240.js +13 -10
  214. package/dist/index240.js.map +1 -1
  215. package/dist/index241.js +4 -109
  216. package/dist/index241.js.map +1 -1
  217. package/dist/index242.js +14 -14
  218. package/dist/index242.js.map +1 -1
  219. package/dist/index243.js +64 -12
  220. package/dist/index243.js.map +1 -1
  221. package/dist/index244.js +10 -5
  222. package/dist/index244.js.map +1 -1
  223. package/dist/index245.js +104 -318
  224. package/dist/index245.js.map +1 -1
  225. package/dist/index246.js +14 -66
  226. package/dist/index246.js.map +1 -1
  227. package/dist/index247.js +12 -232
  228. package/dist/index247.js.map +1 -1
  229. package/dist/index248.js +4 -270
  230. package/dist/index248.js.map +1 -1
  231. package/dist/index249.js +313 -309
  232. package/dist/index249.js.map +1 -1
  233. package/dist/index25.js.map +1 -1
  234. package/dist/index250.js +60 -171
  235. package/dist/index250.js.map +1 -1
  236. package/dist/index251.js +252 -8
  237. package/dist/index251.js.map +1 -1
  238. package/dist/index252.js +268 -41
  239. package/dist/index252.js.map +1 -1
  240. package/dist/index253.js +316 -47
  241. package/dist/index253.js.map +1 -1
  242. package/dist/index254.js +179 -9
  243. package/dist/index254.js.map +1 -1
  244. package/dist/index255.js +6 -50
  245. package/dist/index255.js.map +1 -1
  246. package/dist/index256.js +41 -51
  247. package/dist/index256.js.map +1 -1
  248. package/dist/index257.js +50 -7
  249. package/dist/index257.js.map +1 -1
  250. package/dist/index258.js +9 -10
  251. package/dist/index258.js.map +1 -1
  252. package/dist/index259.js +51 -61
  253. package/dist/index259.js.map +1 -1
  254. package/dist/index26.js.map +1 -1
  255. package/dist/index260.js +53 -42
  256. package/dist/index260.js.map +1 -1
  257. package/dist/index261.js +9 -97
  258. package/dist/index261.js.map +1 -1
  259. package/dist/index262.js +31 -47
  260. package/dist/index262.js.map +1 -1
  261. package/dist/index263.js +61 -36
  262. package/dist/index263.js.map +1 -1
  263. package/dist/index264.js +43 -47
  264. package/dist/index264.js.map +1 -1
  265. package/dist/index265.js +92 -46
  266. package/dist/index265.js.map +1 -1
  267. package/dist/index266.js +48 -20
  268. package/dist/index266.js.map +1 -1
  269. package/dist/index267.js +33 -176
  270. package/dist/index267.js.map +1 -1
  271. package/dist/index268.js +49 -48
  272. package/dist/index268.js.map +1 -1
  273. package/dist/index269.js +68 -15
  274. package/dist/index269.js.map +1 -1
  275. package/dist/index27.js.map +1 -1
  276. package/dist/index270.js +20 -65
  277. package/dist/index270.js.map +1 -1
  278. package/dist/index271.js +202 -9
  279. package/dist/index271.js.map +1 -1
  280. package/dist/index272.js +48 -40
  281. package/dist/index272.js.map +1 -1
  282. package/dist/index273.js +60 -91
  283. package/dist/index273.js.map +1 -1
  284. package/dist/index274.js +9 -278
  285. package/dist/index274.js.map +1 -1
  286. package/dist/index275.js +38 -55
  287. package/dist/index275.js.map +1 -1
  288. package/dist/index276.js +91 -10
  289. package/dist/index276.js.map +1 -1
  290. package/dist/index277.js +278 -12
  291. package/dist/index277.js.map +1 -1
  292. package/dist/index278.js +58 -11
  293. package/dist/index278.js.map +1 -1
  294. package/dist/index279.js +11 -64
  295. package/dist/index279.js.map +1 -1
  296. package/dist/index28.js +5 -5
  297. package/dist/index28.js.map +1 -1
  298. package/dist/index280.js +12 -6
  299. package/dist/index280.js.map +1 -1
  300. package/dist/index281.js +3 -25
  301. package/dist/index281.js.map +1 -1
  302. package/dist/index282.js +3 -25
  303. package/dist/index282.js.map +1 -1
  304. package/dist/index283.js +12 -126
  305. package/dist/index283.js.map +1 -1
  306. package/dist/index284.js +63 -51
  307. package/dist/index284.js.map +1 -1
  308. package/dist/index285.js +5 -60
  309. package/dist/index285.js.map +1 -1
  310. package/dist/index286.js +24 -48
  311. package/dist/index286.js.map +1 -1
  312. package/dist/index287.js +24 -6
  313. package/dist/index287.js.map +1 -1
  314. package/dist/index288.js +125 -14
  315. package/dist/index288.js.map +1 -1
  316. package/dist/index289.js +51 -16
  317. package/dist/index289.js.map +1 -1
  318. package/dist/index29.js +5 -7
  319. package/dist/index29.js.map +1 -1
  320. package/dist/index290.js +56 -11
  321. package/dist/index290.js.map +1 -1
  322. package/dist/index291.js +47 -24
  323. package/dist/index291.js.map +1 -1
  324. package/dist/index292.js +7 -51
  325. package/dist/index292.js.map +1 -1
  326. package/dist/index293.js +15 -6
  327. package/dist/index293.js.map +1 -1
  328. package/dist/index294.js +18 -148
  329. package/dist/index294.js.map +1 -1
  330. package/dist/index295.js +12 -59
  331. package/dist/index295.js.map +1 -1
  332. package/dist/index296.js +25 -120
  333. package/dist/index296.js.map +1 -1
  334. package/dist/index297.js +54 -15
  335. package/dist/index297.js.map +1 -1
  336. package/dist/index298.js +5 -866
  337. package/dist/index298.js.map +1 -1
  338. package/dist/index299.js +148 -28
  339. package/dist/index299.js.map +1 -1
  340. package/dist/index3.js.map +1 -1
  341. package/dist/index30.js +6 -8
  342. package/dist/index30.js.map +1 -1
  343. package/dist/index300.js +55 -512
  344. package/dist/index300.js.map +1 -1
  345. package/dist/index301.js +111 -794
  346. package/dist/index301.js.map +1 -1
  347. package/dist/index302.js +14 -7436
  348. package/dist/index302.js.map +1 -1
  349. package/dist/index303.js +862 -6
  350. package/dist/index303.js.map +1 -1
  351. package/dist/index304.js +28 -12
  352. package/dist/index304.js.map +1 -1
  353. package/dist/index305.js +515 -5
  354. package/dist/index305.js.map +1 -1
  355. package/dist/index306.js +803 -5
  356. package/dist/index306.js.map +1 -1
  357. package/dist/index307.js +7426 -468
  358. package/dist/index307.js.map +1 -1
  359. package/dist/index308.js +6 -37
  360. package/dist/index308.js.map +1 -1
  361. package/dist/index309.js +12 -19
  362. package/dist/index309.js.map +1 -1
  363. package/dist/index31.js +5 -11
  364. package/dist/index31.js.map +1 -1
  365. package/dist/index310.js +5 -30
  366. package/dist/index310.js.map +1 -1
  367. package/dist/index311.js +5 -4
  368. package/dist/index311.js.map +1 -1
  369. package/dist/index312.js +461 -51
  370. package/dist/index312.js.map +1 -1
  371. package/dist/index313.js +36 -10
  372. package/dist/index313.js.map +1 -1
  373. package/dist/index314.js +19 -5
  374. package/dist/index314.js.map +1 -1
  375. package/dist/index315.js +29 -8
  376. package/dist/index315.js.map +1 -1
  377. package/dist/index316.js +4 -12
  378. package/dist/index316.js.map +1 -1
  379. package/dist/index317.js +60 -3
  380. package/dist/index317.js.map +1 -1
  381. package/dist/index318.js +10 -15
  382. package/dist/index318.js.map +1 -1
  383. package/dist/index319.js +5 -25
  384. package/dist/index319.js.map +1 -1
  385. package/dist/index32.js +5 -5
  386. package/dist/index32.js.map +1 -1
  387. package/dist/index320.js +9 -41
  388. package/dist/index320.js.map +1 -1
  389. package/dist/index321.js +11 -4
  390. package/dist/index321.js.map +1 -1
  391. package/dist/index322.js +3 -26
  392. package/dist/index322.js.map +1 -1
  393. package/dist/index323.js +15 -18
  394. package/dist/index323.js.map +1 -1
  395. package/dist/index324.js +22 -31
  396. package/dist/index324.js.map +1 -1
  397. package/dist/index325.js +41 -5
  398. package/dist/index325.js.map +1 -1
  399. package/dist/index326.js +4 -8
  400. package/dist/index326.js.map +1 -1
  401. package/dist/index327.js +25 -8
  402. package/dist/index327.js.map +1 -1
  403. package/dist/index328.js +19 -9
  404. package/dist/index328.js.map +1 -1
  405. package/dist/index329.js +34 -10
  406. package/dist/index329.js.map +1 -1
  407. package/dist/index33.js +9 -6
  408. package/dist/index33.js.map +1 -1
  409. package/dist/index330.js +5 -7
  410. package/dist/index330.js.map +1 -1
  411. package/dist/index331.js +9 -75
  412. package/dist/index331.js.map +1 -1
  413. package/dist/index332.js +8 -162
  414. package/dist/index332.js.map +1 -1
  415. package/dist/index333.js +9 -114
  416. package/dist/index333.js.map +1 -1
  417. package/dist/index334.js +10 -14
  418. package/dist/index334.js.map +1 -1
  419. package/dist/index335.js +7 -80
  420. package/dist/index335.js.map +1 -1
  421. package/dist/index336.js +68 -39
  422. package/dist/index336.js.map +1 -1
  423. package/dist/index337.js +160 -11
  424. package/dist/index337.js.map +1 -1
  425. package/dist/index338.js +113 -15
  426. package/dist/index338.js.map +1 -1
  427. package/dist/index339.js +13 -100
  428. package/dist/index339.js.map +1 -1
  429. package/dist/index34.js +6 -6
  430. package/dist/index34.js.map +1 -1
  431. package/dist/index340.js +73 -49
  432. package/dist/index340.js.map +1 -1
  433. package/dist/index341.js +34 -96
  434. package/dist/index341.js.map +1 -1
  435. package/dist/index342.js +12 -70
  436. package/dist/index342.js.map +1 -1
  437. package/dist/index343.js +14 -111
  438. package/dist/index343.js.map +1 -1
  439. package/dist/index344.js +94 -48
  440. package/dist/index344.js.map +1 -1
  441. package/dist/index345.js +50 -37
  442. package/dist/index345.js.map +1 -1
  443. package/dist/index346.js +89 -125
  444. package/dist/index346.js.map +1 -1
  445. package/dist/index347.js +52 -123
  446. package/dist/index347.js.map +1 -1
  447. package/dist/index348.js +54 -197
  448. package/dist/index348.js.map +1 -1
  449. package/dist/index349.js +44 -229
  450. package/dist/index349.js.map +1 -1
  451. package/dist/index35.js +9 -9
  452. package/dist/index35.js.map +1 -1
  453. package/dist/index350.js +42 -308
  454. package/dist/index350.js.map +1 -1
  455. package/dist/index351.js +144 -5
  456. package/dist/index351.js.map +1 -1
  457. package/dist/index352.js +142 -6
  458. package/dist/index352.js.map +1 -1
  459. package/dist/index353.js +257 -7
  460. package/dist/index353.js.map +1 -1
  461. package/dist/index354.js +241 -6
  462. package/dist/index354.js.map +1 -1
  463. package/dist/index355.js +309 -6
  464. package/dist/index355.js.map +1 -1
  465. package/dist/index356.js +5 -21
  466. package/dist/index356.js.map +1 -1
  467. package/dist/index357.js +6 -10
  468. package/dist/index357.js.map +1 -1
  469. package/dist/index358.js +7 -128
  470. package/dist/index358.js.map +1 -1
  471. package/dist/index359.js +6 -42
  472. package/dist/index359.js.map +1 -1
  473. package/dist/index36.js +12 -7
  474. package/dist/index36.js.map +1 -1
  475. package/dist/index360.js +6 -68
  476. package/dist/index360.js.map +1 -1
  477. package/dist/index361.js +20 -116
  478. package/dist/index361.js.map +1 -1
  479. package/dist/index362.js +10 -490
  480. package/dist/index362.js.map +1 -1
  481. package/dist/index363.js +128 -7
  482. package/dist/index363.js.map +1 -1
  483. package/dist/index364.js +42 -13
  484. package/dist/index364.js.map +1 -1
  485. package/dist/index365.js +67 -3
  486. package/dist/index365.js.map +1 -1
  487. package/dist/index366.js +115 -45
  488. package/dist/index366.js.map +1 -1
  489. package/dist/index367.js +490 -11
  490. package/dist/index367.js.map +1 -1
  491. package/dist/index368.js +8 -26
  492. package/dist/index368.js.map +1 -1
  493. package/dist/index369.js +12 -41
  494. package/dist/index369.js.map +1 -1
  495. package/dist/index37.js +13 -5
  496. package/dist/index37.js.map +1 -1
  497. package/dist/index370.js +4 -36
  498. package/dist/index370.js.map +1 -1
  499. package/dist/index371.js +45 -15
  500. package/dist/index371.js.map +1 -1
  501. package/dist/index372.js +24 -41
  502. package/dist/index372.js.map +1 -1
  503. package/dist/index373.js +3 -12
  504. package/dist/index373.js.map +1 -1
  505. package/dist/index374.js +27 -11
  506. package/dist/index374.js.map +1 -1
  507. package/dist/index375.js +40 -50
  508. package/dist/index375.js.map +1 -1
  509. package/dist/index376.js +37 -40
  510. package/dist/index376.js.map +1 -1
  511. package/dist/index377.js +12 -10
  512. package/dist/index377.js.map +1 -1
  513. package/dist/index378.js +40 -4
  514. package/dist/index378.js.map +1 -1
  515. package/dist/index379.js +7 -4
  516. package/dist/index379.js.map +1 -1
  517. package/dist/index38.js +5 -5
  518. package/dist/index38.js.map +1 -1
  519. package/dist/index380.js +29 -8
  520. package/dist/index380.js.map +1 -1
  521. package/dist/index381.js +9 -303
  522. package/dist/index381.js.map +1 -1
  523. package/dist/index382.js +57 -4
  524. package/dist/index382.js.map +1 -1
  525. package/dist/index383.js +40 -22
  526. package/dist/index383.js.map +1 -1
  527. package/dist/index384.js +15 -105
  528. package/dist/index384.js.map +1 -1
  529. package/dist/index385.js +5 -22
  530. package/dist/index385.js.map +1 -1
  531. package/dist/index386.js +10 -22
  532. package/dist/index386.js.map +1 -1
  533. package/dist/index387.js +289 -16
  534. package/dist/index387.js.map +1 -1
  535. package/dist/index388.js +4 -12
  536. package/dist/index388.js.map +1 -1
  537. package/dist/index389.js +20 -112
  538. package/dist/index389.js.map +1 -1
  539. package/dist/index39.js +6 -10
  540. package/dist/index39.js.map +1 -1
  541. package/dist/index390.js +3 -9
  542. package/dist/index390.js.map +1 -1
  543. package/dist/index391.js +104 -27
  544. package/dist/index391.js.map +1 -1
  545. package/dist/index392.js +20 -9
  546. package/dist/index392.js.map +1 -1
  547. package/dist/index393.js +20 -6
  548. package/dist/index393.js.map +1 -1
  549. package/dist/index394.js +14 -253
  550. package/dist/index394.js.map +1 -1
  551. package/dist/index395.js +12 -10
  552. package/dist/index395.js.map +1 -1
  553. package/dist/index396.js +117 -11
  554. package/dist/index396.js.map +1 -1
  555. package/dist/index397.js +8 -6
  556. package/dist/index397.js.map +1 -1
  557. package/dist/index398.js +32 -22
  558. package/dist/index398.js.map +1 -1
  559. package/dist/index399.js +9 -23
  560. package/dist/index399.js.map +1 -1
  561. package/dist/index4.js.map +1 -1
  562. package/dist/index40.js +8 -11
  563. package/dist/index40.js.map +1 -1
  564. package/dist/index400.js +6 -105
  565. package/dist/index400.js.map +1 -1
  566. package/dist/index401.js +3 -15
  567. package/dist/index401.js.map +1 -1
  568. package/dist/index402.js +251 -10
  569. package/dist/index402.js.map +1 -1
  570. package/dist/index403.js +9 -7
  571. package/dist/index403.js.map +1 -1
  572. package/dist/index404.js +11 -239
  573. package/dist/index404.js.map +1 -1
  574. package/dist/index405.js +7 -28
  575. package/dist/index405.js.map +1 -1
  576. package/dist/index406.js +21 -37
  577. package/dist/index406.js.map +1 -1
  578. package/dist/index407.js +21 -10
  579. package/dist/index407.js.map +1 -1
  580. package/dist/index408.js +97 -117
  581. package/dist/index408.js.map +1 -1
  582. package/dist/index409.js +15 -40
  583. package/dist/index409.js.map +1 -1
  584. package/dist/index41.js +6 -7
  585. package/dist/index41.js.map +1 -1
  586. package/dist/index410.js +11 -25
  587. package/dist/index410.js.map +1 -1
  588. package/dist/index411.js +7 -9
  589. package/dist/index411.js.map +1 -1
  590. package/dist/index412.js +3 -24
  591. package/dist/index412.js.map +1 -1
  592. package/dist/index413.js +226 -15
  593. package/dist/index413.js.map +1 -1
  594. package/dist/index414.js +24 -11
  595. package/dist/index414.js.map +1 -1
  596. package/dist/index415.js +38 -4
  597. package/dist/index415.js.map +1 -1
  598. package/dist/index416.js +11 -324
  599. package/dist/index416.js.map +1 -1
  600. package/dist/index417.js +119 -62
  601. package/dist/index417.js.map +1 -1
  602. package/dist/index418.js +42 -4
  603. package/dist/index418.js.map +1 -1
  604. package/dist/index419.js +25 -28
  605. package/dist/index419.js.map +1 -1
  606. package/dist/index42.js +6 -4
  607. package/dist/index42.js.map +1 -1
  608. package/dist/index420.js +11 -470
  609. package/dist/index420.js.map +1 -1
  610. package/dist/index421.js +23 -268
  611. package/dist/index421.js.map +1 -1
  612. package/dist/index422.js +24 -0
  613. package/dist/index422.js.map +1 -0
  614. package/dist/index423.js +17 -0
  615. package/dist/index423.js.map +1 -0
  616. package/dist/index424.js +8 -0
  617. package/dist/index424.js.map +1 -0
  618. package/dist/index425.js +328 -0
  619. package/dist/index425.js.map +1 -0
  620. package/dist/index426.js +66 -0
  621. package/dist/index426.js.map +1 -0
  622. package/dist/index427.js +7 -0
  623. package/dist/index427.js.map +1 -0
  624. package/dist/index428.js +31 -0
  625. package/dist/index428.js.map +1 -0
  626. package/dist/index429.js +474 -0
  627. package/dist/index429.js.map +1 -0
  628. package/dist/index43.js +68 -7
  629. package/dist/index43.js.map +1 -1
  630. package/dist/index430.js +272 -0
  631. package/dist/index430.js.map +1 -0
  632. package/dist/index44.js +7 -6
  633. package/dist/index44.js.map +1 -1
  634. package/dist/index45.js +31 -7
  635. package/dist/index45.js.map +1 -1
  636. package/dist/index46.js +10 -10
  637. package/dist/index46.js.map +1 -1
  638. package/dist/index47.js +15 -13
  639. package/dist/index47.js.map +1 -1
  640. package/dist/index48.js +201 -7
  641. package/dist/index48.js.map +1 -1
  642. package/dist/index49.js +20 -6
  643. package/dist/index49.js.map +1 -1
  644. package/dist/index5.js.map +1 -1
  645. package/dist/index50.js +16 -6
  646. package/dist/index50.js.map +1 -1
  647. package/dist/index51.js +123 -14
  648. package/dist/index51.js.map +1 -1
  649. package/dist/index52.js +19 -8
  650. package/dist/index52.js.map +1 -1
  651. package/dist/index53.js +5 -7
  652. package/dist/index53.js.map +1 -1
  653. package/dist/index54.js +9 -68
  654. package/dist/index54.js.map +1 -1
  655. package/dist/index55.js +7 -7
  656. package/dist/index55.js.map +1 -1
  657. package/dist/index56.js +9 -31
  658. package/dist/index56.js.map +1 -1
  659. package/dist/index57.js +13 -10
  660. package/dist/index57.js.map +1 -1
  661. package/dist/index58.js +8 -15
  662. package/dist/index58.js.map +1 -1
  663. package/dist/index59.js +10 -201
  664. package/dist/index59.js.map +1 -1
  665. package/dist/index6.js.map +1 -1
  666. package/dist/index60.js +13 -20
  667. package/dist/index60.js.map +1 -1
  668. package/dist/index61.js +9 -16
  669. package/dist/index61.js.map +1 -1
  670. package/dist/index62.js +10 -123
  671. package/dist/index62.js.map +1 -1
  672. package/dist/index63.js +5 -19
  673. package/dist/index63.js.map +1 -1
  674. package/dist/index64.js +42 -9
  675. package/dist/index64.js.map +1 -1
  676. package/dist/index65.js +387 -9
  677. package/dist/index65.js.map +1 -1
  678. package/dist/index66.js +37 -14
  679. package/dist/index66.js.map +1 -1
  680. package/dist/index67.js +21 -9
  681. package/dist/index67.js.map +1 -1
  682. package/dist/index68.js +4 -9
  683. package/dist/index68.js.map +1 -1
  684. package/dist/index69.js +6 -4
  685. package/dist/index69.js.map +1 -1
  686. package/dist/index7.js +3 -3
  687. package/dist/index7.js.map +1 -1
  688. package/dist/index70.js +57 -41
  689. package/dist/index70.js.map +1 -1
  690. package/dist/index71.js +5 -387
  691. package/dist/index71.js.map +1 -1
  692. package/dist/index72.js +6 -37
  693. package/dist/index72.js.map +1 -1
  694. package/dist/index73.js +5 -21
  695. package/dist/index73.js.map +1 -1
  696. package/dist/index74.js +4 -56
  697. package/dist/index74.js.map +1 -1
  698. package/dist/index75.js +7 -7
  699. package/dist/index75.js.map +1 -1
  700. package/dist/index76.js +6 -5
  701. package/dist/index76.js.map +1 -1
  702. package/dist/index77.js +6 -5
  703. package/dist/index77.js.map +1 -1
  704. package/dist/index78.js +11 -5
  705. package/dist/index78.js.map +1 -1
  706. package/dist/index79.js +11 -5
  707. package/dist/index79.js.map +1 -1
  708. package/dist/index8.js.map +1 -1
  709. package/dist/index80.js +7 -6
  710. package/dist/index80.js.map +1 -1
  711. package/dist/index81.js +10 -6
  712. package/dist/index81.js.map +1 -1
  713. package/dist/index82.js +5 -8
  714. package/dist/index82.js.map +1 -1
  715. package/dist/index83.js +6 -7
  716. package/dist/index83.js.map +1 -1
  717. package/dist/index84.js.map +1 -1
  718. package/dist/index85.js.map +1 -1
  719. package/dist/index86.js.map +1 -1
  720. package/dist/index87.js +2 -2
  721. package/dist/index87.js.map +1 -1
  722. package/dist/index88.js +31 -31
  723. package/dist/index88.js.map +1 -1
  724. package/dist/index89.js +1 -1
  725. package/dist/index89.js.map +1 -1
  726. package/dist/index9.js.map +1 -1
  727. package/dist/index90.js.map +1 -1
  728. package/dist/index91.js.map +1 -1
  729. package/dist/index92.js.map +1 -1
  730. package/dist/index93.js.map +1 -1
  731. package/dist/index94.js.map +1 -1
  732. package/dist/index95.js.map +1 -1
  733. package/dist/index96.js.map +1 -1
  734. package/dist/index97.js.map +1 -1
  735. package/dist/index98.js.map +1 -1
  736. package/dist/index99.js.map +1 -1
  737. package/package.json +13 -13
  738. package/dist/assets/sha256.worker-BEf4_Y9w.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index306.js","names":[],"sources":["../../../node_modules/libphonenumber-js/es6/helpers/isCallingCode.js"],"sourcesContent":["var CALLING_CODE_REG_EXP = /^\\d+$/;\nexport default function isCallingCode(string) {\n return CALLING_CODE_REG_EXP.test(string);\n}\n//# sourceMappingURL=isCallingCode.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,IAAI,IAAuB;AAC3B,SAAwB,EAAc,GAAQ;CAC5C,OAAO,EAAqB,KAAK,CAAM;AACzC"}
1
+ {"version":3,"file":"index306.js","names":["<HourPickerSelectField {...props} />","<HourPickerInput {...props} />","{\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\n selectedLabel,\n disabled,\n readOnly,\n open,\n setOpen,\n inputClassName,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps","() => (value ? value : \"\")","() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }","[onDraftValueHandlerChange]","(direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n }","highlightedValueRef.current","React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )","() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }","[value]","() => {\n lastAcceptedSignatureRef.current = getAcceptedInputSignature(draft)\n }","[draft]","() => {\n if (value === null) {\n clearCommitPendingRef.current = false\n }\n }","cn(\n \"peer flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"transition-colors group-hover:bg-accent group-hover:text-accent-foreground\",\n !draft && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n value && selectedLabel != null && \"text-transparent focus:text-foreground\",\n )","!draft && \"text-muted-foreground\"","open && \"ring-2 ring-primary ring-offset-2\"","value && selectedLabel != null && \"text-transparent focus:text-foreground\"","[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]","(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }","option","(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }","(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }","event","nextText","() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }","(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }","() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }","(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }","resolved","(option) => isOptionSelectable(option)","targetMinutes","closestOption","(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }","() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }","<IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />","isHydrated ? \"true\" : undefined","value && selectedLabel != null ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"hours-picker-input-selected-label\"\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-3 right-10 flex min-w-0 items-center text-base peer-focus:hidden md:text-sm\",\n disabled && \"opacity-50\",\n )}\n >\n <span className=\"min-w-0 truncate\">{selectedLabel}</span>\n </span>\n ) : null","cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )","() => {\n if (disabled) return\n setOpen(!open)\n }","<ChevronDown aria-hidden className=\"size-4\" />","<button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>","open ? \"Close time picker\" : \"Open time picker\"","(event) => {\n event.preventDefault()\n }","<div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n {value && selectedLabel != null ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"hours-picker-input-selected-label\"\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-3 right-10 flex min-w-0 items-center text-base peer-focus:hidden md:text-sm\",\n disabled && \"opacity-50\",\n )}\n >\n <span className=\"min-w-0 truncate\">{selectedLabel}</span>\n </span>\n ) : null}\n\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>\n </div>","React","_Fragment","_c","React$1","IMask","imaskAny","InputMask","pad2","value","parseTimeInput","trimmed","raw","match","hours","minutes","getAcceptedInputSignature","parsed","digits","minutePart","hourPart","parseTimeInputWithSelectableOption","isOptionSelectable","options","option","timeStringToMinutes","findClosestSelectableOption","bestOption","bestDiff","bestMinutes","optionMinutes","diff","targetMinutes","HourPickerScrollButton","disabled","setDisabled","animationRef","lastTimeRef","isScrollingRef","checkScrollability","viewport","viewportRef","canScrollUp","scrollTop","canScrollDown","scrollHeight","clientHeight","direction","handleScroll","handleResize","resizeObserver","mutationObserver","stopScrolling","smoothScroll","currentTime","distance","speed","oldScrollTop","maxScroll","newScrollTop","startScrolling","cn","className","jsx","ChevronUp","ChevronDown","HourPickerInput","openProp","reactId","triggerId","id","triggerInputRef","setTriggerDraftValueRef","setTriggerDraftValueHandler","handler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","onOpenChange","openRef","readOnly","input","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","updateValue","onValueUpdate","commitValue","onChange","ownerDocument","ownerWindow","handlePointerDown","target","event","container","handleKeyDown","popover","handleWheel","deltaY","maxScrollTop","atTop","atBottom","trigger","isActive","observer","entry","entries","updateDesktopPopoverPosition","rect","popoverHeight","viewportWidth","viewportHeight","width","left","top","overflowBottom","aboveTop","rafId","raf","selected","targetTop","targetBottom","all","lastDisabledBefore","el","offset","selectedOption","HourPickerMaskedSelectTrigger","node","Fragment","contentTestId","isChecked","Check","createPortal","HourPickerSelectField","triggerRef","popoverRef","popoverPosition","setPopoverPosition","resolvedOpen","updatePopoverPosition","selectedLabel","triggerTestId","isHydrated","inputClassName","placeholder","HourPickerField","$","c","useIsTouchDevice","t0","props","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","lastAcceptedSignatureRef","clearCommitPendingRef","t1","draft","setDraft","t2","t3","onDraftValueHandlerChange","nextValue","t4","base","baseIndex","nextIndex","nextOption","moveSelection","t5","t6","t7","t8","t10","t9","t11","t12","t13","t14","triggerClassName","t15","t16","t17","dynamicMasked","appended","hourPrefix","option_0","t18","onCommit","nextText","accepted","nextDigits","nextSignature","t19","event_0","nextText_0","completed","resolved","closestOption","t20","t21","t22","event_1","t23","event_2","resolved_0","highlightedOption","option_1","fallbackValue","_temp6","targetMinutes_0","closestOption_0","t24","shouldSelectAll","element","event_3","t25","resolved_1","t26","inputRef","IMaskInput","t27","t28","t29","t30","t31","t32","_temp7","_temp8","t33","option_2"],"sources":["../src/components/HourPickerField/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport * as React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { IMaskInput } from \"react-imask\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n selectedLabel?: React.ReactNode\n disabled?: boolean\n description?: React.ReactNode\n}\n\nfunction pad2(value: number) {\n return String(value).padStart(2, \"0\")\n}\n\nfunction parseTimeInput(raw: string) {\n const trimmed = raw.trim()\n if (!trimmed) return null\n\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(trimmed)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null\n }\n\n return `${pad2(hours)}:${pad2(minutes)}`\n}\n\nfunction getAcceptedInputSignature(raw: string) {\n const parsed = parseTimeInput(raw)\n if (parsed) {\n return `parsed:${parsed}`\n }\n\n const digits = raw.replace(/\\D/g, \"\")\n if (!digits) {\n return \"empty\"\n }\n\n if (digits.length <= 2) {\n return `hour:${Number(digits)}`\n }\n\n const minutePart = digits.slice(-2)\n const hourPart = digits.slice(0, -2)\n return `hour-minute:${Number(hourPart)}:${minutePart}`\n}\n\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = open\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (!container) {\n return\n }\n\n if (container.contains(target)) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return\n }\n if (!openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = desktopPopoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [open, setOpen])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n const selectedOption = options.find((option) => option.value === value)\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n selectedLabel={selectedOption?.selectedLabel}\n disabled={disabled}\n readOnly={readOnly}\n open={open}\n setOpen={setOpen}\n inputClassName={inputClassName}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n onDraftValueHandlerChange={setTriggerDraftValueHandler}\n />\n\n {open ? (() => {\n const popover = (\n <>\n <div\n ref={desktopPopoverRef}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"pointer-events-auto fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: desktopPopoverPosition.left,\n top: desktopPopoverPosition.top,\n width: desktopPopoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n </div>\n )\n}\n\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerRef = React.useRef<HTMLButtonElement | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const popoverRef = React.useRef<HTMLDivElement | null>(null)\n const viewportRef = React.useRef<HTMLDivElement | null>(null)\n const [popoverPosition, setPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const resolvedOpen = open ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = resolvedOpen\n\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n const updatePopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n const trigger = triggerRef.current\n const popover = popoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) {\n return\n }\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setPopoverPosition({ left, top, width })\n }, [])\n\n React.useLayoutEffect(() => {\n if (!resolvedOpen || disabled) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n\n updatePopoverPosition()\n const rafId = window.requestAnimationFrame(updatePopoverPosition)\n\n window.addEventListener(\"scroll\", updatePopoverPosition, true)\n window.addEventListener(\"resize\", updatePopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updatePopoverPosition, true)\n window.removeEventListener(\"resize\", updatePopoverPosition)\n }\n }, [disabled, resolvedOpen, updatePopoverPosition])\n\n React.useEffect(() => {\n if (!resolvedOpen) {\n return\n }\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (container?.contains(target)) {\n return\n }\n\n const popover = popoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = popoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [resolvedOpen, setOpen])\n\n const selectedOption = options.find((option) => option.value === value)\n const selectedLabel = selectedOption?.selectedLabel ?? selectedOption?.label ?? value\n\n return (\n <div\n data-slot=\"hours-picker-field\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <button\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={resolvedOpen}\n aria-controls={`${triggerId}-content`}\n disabled={disabled}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n \"hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n resolvedOpen && \"ring-2 ring-primary ring-offset-2\",\n inputClassName,\n )}\n onClick={() => {\n if (disabled || readOnly) {\n return\n }\n setOpen(!resolvedOpen)\n }}\n >\n <span className=\"line-clamp-1 text-left\">\n {value ? selectedLabel : placeholder}\n </span>\n <ChevronDown aria-hidden className=\"h-4 w-4 shrink-0 opacity-50\" />\n </button>\n\n {resolvedOpen ? (() => {\n const popover = (\n <>\n <div\n ref={popoverRef}\n id={`${triggerId}-content`}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: popoverPosition.left,\n top: popoverPosition.top,\n width: popoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={viewportRef}\n />\n\n <div\n ref={viewportRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n isChecked && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled || readOnly) {\n return\n }\n\n commitValue(option.value)\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={viewportRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") {\n return popover\n }\n\n return createPortal(popover, document.body)\n })() : null}\n </div>\n )\n}\n\nexport function HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n selectedLabel?: React.ReactNode\n disabled?: boolean\n readOnly?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n inputClassName?: string\n triggerTestId?: string\n isHydrated?: boolean\n highlightedValueRef: React.MutableRefObject<string | null>\n setHighlightedValue: (value: string | null) => void\n markKeyboardNavigation: () => void\n inputRef: (node: HTMLInputElement | null) => void\n onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\n}\n\nfunction HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\n selectedLabel,\n disabled,\n readOnly,\n open,\n setOpen,\n inputClassName,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n const lastAcceptedSignatureRef = React.useRef<string | null>(null)\n const clearCommitPendingRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n React.useEffect(() => {\n lastAcceptedSignatureRef.current = getAcceptedInputSignature(draft)\n }, [draft])\n\n React.useEffect(() => {\n if (value === null) {\n clearCommitPendingRef.current = false\n }\n }, [value])\n\n const triggerClassName = cn(\n \"peer flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"transition-colors group-hover:bg-accent group-hover:text-accent-foreground\",\n !draft && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n value && selectedLabel != null && \"text-transparent focus:text-foreground\",\n )\n\n return (\n <div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n {value && selectedLabel != null ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"hours-picker-input-selected-label\"\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-3 right-10 flex min-w-0 items-center text-base peer-focus:hidden md:text-sm\",\n disabled && \"opacity-50\",\n )}\n >\n <span className=\"min-w-0 truncate\">{selectedLabel}</span>\n </span>\n ) : null}\n\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>\n </div>\n )\n}\n"],"mappings":"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"}