@rpcbase/ui 0.158.0 → 0.159.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 (664) hide show
  1. package/dist/components/DayPicker/index.d.ts.map +1 -1
  2. package/dist/components/HoursPicker/index.d.ts.map +1 -1
  3. package/dist/index100.js +130 -4
  4. package/dist/index100.js.map +1 -1
  5. package/dist/index101.js +20 -6
  6. package/dist/index101.js.map +1 -1
  7. package/dist/index102.js +75 -5
  8. package/dist/index102.js.map +1 -1
  9. package/dist/index103.js +18 -4
  10. package/dist/index103.js.map +1 -1
  11. package/dist/index104.js +101 -5
  12. package/dist/index104.js.map +1 -1
  13. package/dist/index105.js +5 -5
  14. package/dist/index105.js.map +1 -1
  15. package/dist/index106.js +14 -8
  16. package/dist/index106.js.map +1 -1
  17. package/dist/index107.js +2 -6
  18. package/dist/index107.js.map +1 -1
  19. package/dist/index108.js +7 -4
  20. package/dist/index108.js.map +1 -1
  21. package/dist/index109.js +326 -4
  22. package/dist/index109.js.map +1 -1
  23. package/dist/index11.js +105 -104
  24. package/dist/index11.js.map +1 -1
  25. package/dist/index110.js +49 -6
  26. package/dist/index110.js.map +1 -1
  27. package/dist/index111.js +5 -145
  28. package/dist/index111.js.map +1 -1
  29. package/dist/index112.js +66 -37
  30. package/dist/index112.js.map +1 -1
  31. package/dist/index113.js +2 -5
  32. package/dist/index113.js.map +1 -1
  33. package/dist/index114.js +363 -7
  34. package/dist/index114.js.map +1 -1
  35. package/dist/index115.js +261 -13
  36. package/dist/index115.js.map +1 -1
  37. package/dist/index116.js +60 -13
  38. package/dist/index116.js.map +1 -1
  39. package/dist/index117.js +46 -7
  40. package/dist/index117.js.map +1 -1
  41. package/dist/index118.js +169 -31
  42. package/dist/index118.js.map +1 -1
  43. package/dist/index119.js +109 -10
  44. package/dist/index119.js.map +1 -1
  45. package/dist/index120.js +24 -10
  46. package/dist/index120.js.map +1 -1
  47. package/dist/index121.js +8 -9
  48. package/dist/index121.js.map +1 -1
  49. package/dist/index122.js +4 -13
  50. package/dist/index122.js.map +1 -1
  51. package/dist/index123.js +5 -101
  52. package/dist/index123.js.map +1 -1
  53. package/dist/index124.js +5 -20
  54. package/dist/index124.js.map +1 -1
  55. package/dist/index125.js +464 -51
  56. package/dist/index125.js.map +1 -1
  57. package/dist/index126.js +182 -69
  58. package/dist/index126.js.map +1 -1
  59. package/dist/index127.js +107 -9
  60. package/dist/index127.js.map +1 -1
  61. package/dist/index128.js +262 -20
  62. package/dist/index128.js.map +1 -1
  63. package/dist/index129.js +9 -16
  64. package/dist/index129.js.map +1 -1
  65. package/dist/index13.js +1 -1
  66. package/dist/index130.js +40 -21
  67. package/dist/index130.js.map +1 -1
  68. package/dist/index131.js +4 -6
  69. package/dist/index131.js.map +1 -1
  70. package/dist/index132.js +52 -6
  71. package/dist/index132.js.map +1 -1
  72. package/dist/index133.js +4 -23
  73. package/dist/index133.js.map +1 -1
  74. package/dist/index134.js +5 -35
  75. package/dist/index134.js.map +1 -1
  76. package/dist/index135.js +16 -16
  77. package/dist/index135.js.map +1 -1
  78. package/dist/index136.js +5 -6
  79. package/dist/index136.js.map +1 -1
  80. package/dist/index137.js +7 -4
  81. package/dist/index137.js.map +1 -1
  82. package/dist/index138.js +16 -4
  83. package/dist/index138.js.map +1 -1
  84. package/dist/index139.js +4 -4
  85. package/dist/index139.js.map +1 -1
  86. package/dist/index14.js +3 -3
  87. package/dist/index140.js +4 -4
  88. package/dist/index140.js.map +1 -1
  89. package/dist/index141.js +5 -3
  90. package/dist/index141.js.map +1 -1
  91. package/dist/index142.js +5 -6
  92. package/dist/index142.js.map +1 -1
  93. package/dist/index143.js +5 -24
  94. package/dist/index143.js.map +1 -1
  95. package/dist/index144.js +4 -7
  96. package/dist/index144.js.map +1 -1
  97. package/dist/index145.js +6 -6
  98. package/dist/index145.js.map +1 -1
  99. package/dist/index146.js +24 -5
  100. package/dist/index146.js.map +1 -1
  101. package/dist/index147.js +6 -3
  102. package/dist/index147.js.map +1 -1
  103. package/dist/index148.js +4 -3
  104. package/dist/index148.js.map +1 -1
  105. package/dist/index149.js +6 -4
  106. package/dist/index149.js.map +1 -1
  107. package/dist/index150.js +5 -3
  108. package/dist/index150.js.map +1 -1
  109. package/dist/index151.js +4 -4
  110. package/dist/index151.js.map +1 -1
  111. package/dist/index152.js +5 -3
  112. package/dist/index152.js.map +1 -1
  113. package/dist/index153.js +4 -3
  114. package/dist/index153.js.map +1 -1
  115. package/dist/index154.js +8 -3
  116. package/dist/index154.js.map +1 -1
  117. package/dist/index155.js +5 -3
  118. package/dist/index155.js.map +1 -1
  119. package/dist/index156.js +4 -33
  120. package/dist/index156.js.map +1 -1
  121. package/dist/index157.js +4 -249
  122. package/dist/index157.js.map +1 -1
  123. package/dist/index158.js +6 -114
  124. package/dist/index158.js.map +1 -1
  125. package/dist/index159.js +144 -218
  126. package/dist/index159.js.map +1 -1
  127. package/dist/index160.js +36 -63
  128. package/dist/index160.js.map +1 -1
  129. package/dist/index161.js +4 -20
  130. package/dist/index161.js.map +1 -1
  131. package/dist/index162.js +7 -209
  132. package/dist/index162.js.map +1 -1
  133. package/dist/index163.js +13 -319
  134. package/dist/index163.js.map +1 -1
  135. package/dist/index164.js +13 -130
  136. package/dist/index164.js.map +1 -1
  137. package/dist/index165.js +7 -20
  138. package/dist/index165.js.map +1 -1
  139. package/dist/index166.js +31 -75
  140. package/dist/index166.js.map +1 -1
  141. package/dist/index167.js +10 -18
  142. package/dist/index167.js.map +1 -1
  143. package/dist/index168.js +10 -101
  144. package/dist/index168.js.map +1 -1
  145. package/dist/index169.js +9 -5
  146. package/dist/index169.js.map +1 -1
  147. package/dist/index170.js +13 -14
  148. package/dist/index170.js.map +1 -1
  149. package/dist/index171.js +102 -2
  150. package/dist/index171.js.map +1 -1
  151. package/dist/index172.js +19 -7
  152. package/dist/index172.js.map +1 -1
  153. package/dist/index173.js +51 -324
  154. package/dist/index173.js.map +1 -1
  155. package/dist/index174.js +71 -48
  156. package/dist/index174.js.map +1 -1
  157. package/dist/index175.js +9 -605
  158. package/dist/index175.js.map +1 -1
  159. package/dist/index176.js +19 -45
  160. package/dist/index176.js.map +1 -1
  161. package/dist/index177.js +16 -11
  162. package/dist/index177.js.map +1 -1
  163. package/dist/index178.js +21 -203
  164. package/dist/index178.js.map +1 -1
  165. package/dist/index179.js +7 -22
  166. package/dist/index179.js.map +1 -1
  167. package/dist/index18.js +45 -44
  168. package/dist/index18.js.map +1 -1
  169. package/dist/index180.js +5 -24
  170. package/dist/index180.js.map +1 -1
  171. package/dist/index181.js +18 -394
  172. package/dist/index181.js.map +1 -1
  173. package/dist/index182.js +33 -45
  174. package/dist/index182.js.map +1 -1
  175. package/dist/index183.js +16 -6
  176. package/dist/index183.js.map +1 -1
  177. package/dist/index184.js +6 -68
  178. package/dist/index184.js.map +1 -1
  179. package/dist/index185.js +5 -2
  180. package/dist/index185.js.map +1 -1
  181. package/dist/index186.js +4 -363
  182. package/dist/index186.js.map +1 -1
  183. package/dist/index187.js +4 -261
  184. package/dist/index187.js.map +1 -1
  185. package/dist/index188.js +4 -60
  186. package/dist/index188.js.map +1 -1
  187. package/dist/index189.js +3 -46
  188. package/dist/index189.js.map +1 -1
  189. package/dist/index19.js +6 -6
  190. package/dist/index190.js +6 -169
  191. package/dist/index190.js.map +1 -1
  192. package/dist/index191.js +24 -110
  193. package/dist/index191.js.map +1 -1
  194. package/dist/index192.js +7 -24
  195. package/dist/index192.js.map +1 -1
  196. package/dist/index193.js +7 -8
  197. package/dist/index193.js.map +1 -1
  198. package/dist/index194.js +5 -4
  199. package/dist/index194.js.map +1 -1
  200. package/dist/index195.js +3 -5
  201. package/dist/index195.js.map +1 -1
  202. package/dist/index196.js +3 -4
  203. package/dist/index196.js.map +1 -1
  204. package/dist/index197.js +4 -466
  205. package/dist/index197.js.map +1 -1
  206. package/dist/index198.js +3 -185
  207. package/dist/index198.js.map +1 -1
  208. package/dist/index199.js +4 -107
  209. package/dist/index199.js.map +1 -1
  210. package/dist/index20.js +1 -1
  211. package/dist/index200.js +3 -262
  212. package/dist/index200.js.map +1 -1
  213. package/dist/index201.js +3 -9
  214. package/dist/index201.js.map +1 -1
  215. package/dist/index202.js +3 -42
  216. package/dist/index202.js.map +1 -1
  217. package/dist/index203.js +605 -4
  218. package/dist/index203.js.map +1 -1
  219. package/dist/index204.js +25 -2
  220. package/dist/index204.js.map +1 -1
  221. package/dist/index205.js +29 -68
  222. package/dist/index205.js.map +1 -1
  223. package/dist/index206.js +5 -85
  224. package/dist/index206.js.map +1 -1
  225. package/dist/index207.js +3 -46
  226. package/dist/index207.js.map +1 -1
  227. package/dist/index208.js +2 -8
  228. package/dist/index208.js.map +1 -1
  229. package/dist/index209.js +67 -4
  230. package/dist/index209.js.map +1 -1
  231. package/dist/index21.js +1 -1
  232. package/dist/index210.js +81 -48
  233. package/dist/index210.js.map +1 -1
  234. package/dist/index211.js +44 -14
  235. package/dist/index211.js.map +1 -1
  236. package/dist/index212.js +7 -5
  237. package/dist/index212.js.map +1 -1
  238. package/dist/index213.js +4 -5
  239. package/dist/index213.js.map +1 -1
  240. package/dist/index214.js +51 -58
  241. package/dist/index214.js.map +1 -1
  242. package/dist/index215.js +60 -62
  243. package/dist/index215.js.map +1 -1
  244. package/dist/index216.js +48 -6
  245. package/dist/index216.js.map +1 -1
  246. package/dist/index217.js +39 -4
  247. package/dist/index217.js.map +1 -1
  248. package/dist/index218.js +100 -7
  249. package/dist/index218.js.map +1 -1
  250. package/dist/index219.js +97 -17
  251. package/dist/index219.js.map +1 -1
  252. package/dist/index220.js +99 -5
  253. package/dist/index220.js.map +1 -1
  254. package/dist/index221.js +13 -5
  255. package/dist/index221.js.map +1 -1
  256. package/dist/index222.js +154 -13
  257. package/dist/index222.js.map +1 -1
  258. package/dist/index223.js +30 -10
  259. package/dist/index223.js.map +1 -1
  260. package/dist/index224.js +9 -14
  261. package/dist/index224.js.map +1 -1
  262. package/dist/index225.js +47 -14
  263. package/dist/index225.js.map +1 -1
  264. package/dist/index226.js +11 -5
  265. package/dist/index226.js.map +1 -1
  266. package/dist/index227.js +44 -6
  267. package/dist/index227.js.map +1 -1
  268. package/dist/index228.js +95 -7
  269. package/dist/index228.js.map +1 -1
  270. package/dist/index229.js +86 -6
  271. package/dist/index229.js.map +1 -1
  272. package/dist/index23.js +1 -1
  273. package/dist/index230.js +105 -9
  274. package/dist/index230.js.map +1 -1
  275. package/dist/index231.js +52 -5
  276. package/dist/index231.js.map +1 -1
  277. package/dist/index232.js +11 -5
  278. package/dist/index232.js.map +1 -1
  279. package/dist/index233.js +37 -9
  280. package/dist/index233.js.map +1 -1
  281. package/dist/index234.js +8 -5
  282. package/dist/index234.js.map +1 -1
  283. package/dist/index235.js +116 -5
  284. package/dist/index235.js.map +1 -1
  285. package/dist/index236.js +17 -4
  286. package/dist/index236.js.map +1 -1
  287. package/dist/index237.js +15 -11
  288. package/dist/index237.js.map +1 -1
  289. package/dist/index238.js +3 -10
  290. package/dist/index238.js.map +1 -1
  291. package/dist/index239.js +36 -10
  292. package/dist/index239.js.map +1 -1
  293. package/dist/index240.js +20 -11
  294. package/dist/index240.js.map +1 -1
  295. package/dist/index241.js +9 -11
  296. package/dist/index241.js.map +1 -1
  297. package/dist/index242.js +8 -10
  298. package/dist/index242.js.map +1 -1
  299. package/dist/index243.js +19 -7
  300. package/dist/index243.js.map +1 -1
  301. package/dist/index244.js +28 -6
  302. package/dist/index244.js.map +1 -1
  303. package/dist/index245.js +16 -5
  304. package/dist/index245.js.map +1 -1
  305. package/dist/index246.js +58 -6
  306. package/dist/index246.js.map +1 -1
  307. package/dist/index247.js +8 -7
  308. package/dist/index247.js.map +1 -1
  309. package/dist/index248.js +66 -6
  310. package/dist/index248.js.map +1 -1
  311. package/dist/index249.js +18 -54
  312. package/dist/index249.js.map +1 -1
  313. package/dist/index250.js +16 -8
  314. package/dist/index250.js.map +1 -1
  315. package/dist/index251.js +4 -18
  316. package/dist/index251.js.map +1 -1
  317. package/dist/index252.js +5 -23
  318. package/dist/index252.js.map +1 -1
  319. package/dist/index253.js +6 -16
  320. package/dist/index253.js.map +1 -1
  321. package/dist/index254.js +4 -7
  322. package/dist/index254.js.map +1 -1
  323. package/dist/index255.js +7 -10
  324. package/dist/index255.js.map +1 -1
  325. package/dist/index256.js +17 -10
  326. package/dist/index256.js.map +1 -1
  327. package/dist/index257.js +5 -21
  328. package/dist/index257.js.map +1 -1
  329. package/dist/index258.js +5 -10
  330. package/dist/index258.js.map +1 -1
  331. package/dist/index259.js +13 -9
  332. package/dist/index259.js.map +1 -1
  333. package/dist/index260.js +10 -9
  334. package/dist/index260.js.map +1 -1
  335. package/dist/index261.js +14 -4
  336. package/dist/index261.js.map +1 -1
  337. package/dist/index262.js +14 -5
  338. package/dist/index262.js.map +1 -1
  339. package/dist/index263.js +5 -16
  340. package/dist/index263.js.map +1 -1
  341. package/dist/index264.js +6 -9
  342. package/dist/index264.js.map +1 -1
  343. package/dist/index265.js +7 -18
  344. package/dist/index265.js.map +1 -1
  345. package/dist/index266.js +6 -15
  346. package/dist/index266.js.map +1 -1
  347. package/dist/index267.js +9 -12
  348. package/dist/index267.js.map +1 -1
  349. package/dist/index268.js +5 -29
  350. package/dist/index268.js.map +1 -1
  351. package/dist/index269.js +5 -12
  352. package/dist/index269.js.map +1 -1
  353. package/dist/index270.js +9 -25
  354. package/dist/index270.js.map +1 -1
  355. package/dist/index271.js +5 -5
  356. package/dist/index271.js.map +1 -1
  357. package/dist/index272.js +5 -64
  358. package/dist/index272.js.map +1 -1
  359. package/dist/index273.js +4 -48
  360. package/dist/index273.js.map +1 -1
  361. package/dist/index274.js +11 -39
  362. package/dist/index274.js.map +1 -1
  363. package/dist/index275.js +10 -100
  364. package/dist/index275.js.map +1 -1
  365. package/dist/index276.js +10 -97
  366. package/dist/index276.js.map +1 -1
  367. package/dist/index277.js +11 -99
  368. package/dist/index277.js.map +1 -1
  369. package/dist/index278.js +11 -3
  370. package/dist/index278.js.map +1 -1
  371. package/dist/index279.js +10 -67
  372. package/dist/index279.js.map +1 -1
  373. package/dist/index28.js +1 -1
  374. package/dist/index280.js +7 -180
  375. package/dist/index280.js.map +1 -1
  376. package/dist/index281.js +6 -46
  377. package/dist/index281.js.map +1 -1
  378. package/dist/index282.js +5 -24
  379. package/dist/index282.js.map +1 -1
  380. package/dist/index283.js +7 -29
  381. package/dist/index283.js.map +1 -1
  382. package/dist/index284.js +8 -5
  383. package/dist/index284.js.map +1 -1
  384. package/dist/index285.js +6 -13
  385. package/dist/index285.js.map +1 -1
  386. package/dist/index286.js +54 -153
  387. package/dist/index286.js.map +1 -1
  388. package/dist/index287.js +22 -29
  389. package/dist/index287.js.map +1 -1
  390. package/dist/index288.js +16 -9
  391. package/dist/index288.js.map +1 -1
  392. package/dist/index289.js +7 -47
  393. package/dist/index289.js.map +1 -1
  394. package/dist/index29.js +124 -47
  395. package/dist/index29.js.map +1 -1
  396. package/dist/index290.js +10 -11
  397. package/dist/index290.js.map +1 -1
  398. package/dist/index291.js +9 -43
  399. package/dist/index291.js.map +1 -1
  400. package/dist/index292.js +19 -93
  401. package/dist/index292.js.map +1 -1
  402. package/dist/index293.js +10 -86
  403. package/dist/index293.js.map +1 -1
  404. package/dist/index294.js +9 -105
  405. package/dist/index294.js.map +1 -1
  406. package/dist/index295.js +9 -52
  407. package/dist/index295.js.map +1 -1
  408. package/dist/index296.js +4 -11
  409. package/dist/index296.js.map +1 -1
  410. package/dist/index297.js +5 -37
  411. package/dist/index297.js.map +1 -1
  412. package/dist/index298.js +16 -8
  413. package/dist/index298.js.map +1 -1
  414. package/dist/index299.js +9 -116
  415. package/dist/index299.js.map +1 -1
  416. package/dist/index30.js +47 -219
  417. package/dist/index30.js.map +1 -1
  418. package/dist/index300.js +18 -17
  419. package/dist/index300.js.map +1 -1
  420. package/dist/index301.js +15 -15
  421. package/dist/index301.js.map +1 -1
  422. package/dist/index302.js +12 -3
  423. package/dist/index302.js.map +1 -1
  424. package/dist/index303.js +28 -35
  425. package/dist/index303.js.map +1 -1
  426. package/dist/index304.js +11 -19
  427. package/dist/index304.js.map +1 -1
  428. package/dist/index305.js +25 -9
  429. package/dist/index305.js.map +1 -1
  430. package/dist/index306.js +5 -8
  431. package/dist/index306.js.map +1 -1
  432. package/dist/index307.js +65 -17
  433. package/dist/index307.js.map +1 -1
  434. package/dist/index308.js +178 -26
  435. package/dist/index308.js.map +1 -1
  436. package/dist/index309.js +44 -14
  437. package/dist/index309.js.map +1 -1
  438. package/dist/index31.js +216 -40
  439. package/dist/index31.js.map +1 -1
  440. package/dist/index310.js +5 -2
  441. package/dist/index310.js.map +1 -1
  442. package/dist/index311.js +3 -2
  443. package/dist/index311.js.map +1 -1
  444. package/dist/index312.js +23 -4
  445. package/dist/index312.js.map +1 -1
  446. package/dist/index313.js +113 -19
  447. package/dist/index313.js.map +1 -1
  448. package/dist/index314.js +15 -12
  449. package/dist/index314.js.map +1 -1
  450. package/dist/index315.js +525 -5
  451. package/dist/index315.js.map +1 -1
  452. package/dist/index316.js +128 -3
  453. package/dist/index316.js.map +1 -1
  454. package/dist/index317.js +132 -22
  455. package/dist/index317.js.map +1 -1
  456. package/dist/index318.js +2 -113
  457. package/dist/index318.js.map +1 -1
  458. package/dist/index319.js +2 -16
  459. package/dist/index319.js.map +1 -1
  460. package/dist/index32.js +41 -38
  461. package/dist/index32.js.map +1 -1
  462. package/dist/index320.js +19 -523
  463. package/dist/index320.js.map +1 -1
  464. package/dist/index321.js +4 -127
  465. package/dist/index321.js.map +1 -1
  466. package/dist/index322.js +18 -133
  467. package/dist/index322.js.map +1 -1
  468. package/dist/index323.js +12 -20
  469. package/dist/index323.js.map +1 -1
  470. package/dist/index324.js +64 -5
  471. package/dist/index324.js.map +1 -1
  472. package/dist/index325.js +69 -6
  473. package/dist/index325.js.map +1 -1
  474. package/dist/index326.js +9 -4
  475. package/dist/index326.js.map +1 -1
  476. package/dist/index327.js +14 -16
  477. package/dist/index327.js.map +1 -1
  478. package/dist/index328.js +65 -8
  479. package/dist/index328.js.map +1 -1
  480. package/dist/index329.js +5 -5
  481. package/dist/index329.js.map +1 -1
  482. package/dist/index33.js +36 -24
  483. package/dist/index33.js.map +1 -1
  484. package/dist/index330.js +5 -4
  485. package/dist/index330.js.map +1 -1
  486. package/dist/index331.js +4 -546
  487. package/dist/index331.js.map +1 -1
  488. package/dist/index332.js +16 -47
  489. package/dist/index332.js.map +1 -1
  490. package/dist/index333.js +8 -17
  491. package/dist/index333.js.map +1 -1
  492. package/dist/index334.js +5 -6
  493. package/dist/index334.js.map +1 -1
  494. package/dist/index335.js +4 -8
  495. package/dist/index335.js.map +1 -1
  496. package/dist/index336.js +545 -7
  497. package/dist/index336.js.map +1 -1
  498. package/dist/index337.js +47 -9
  499. package/dist/index337.js.map +1 -1
  500. package/dist/index338.js +17 -12
  501. package/dist/index338.js.map +1 -1
  502. package/dist/index339.js +6 -9
  503. package/dist/index339.js.map +1 -1
  504. package/dist/index34.js +21 -38
  505. package/dist/index34.js.map +1 -1
  506. package/dist/index340.js +8 -13
  507. package/dist/index340.js.map +1 -1
  508. package/dist/index341.js +8 -69
  509. package/dist/index341.js.map +1 -1
  510. package/dist/index342.js +9 -9
  511. package/dist/index342.js.map +1 -1
  512. package/dist/index343.js +13 -14
  513. package/dist/index343.js.map +1 -1
  514. package/dist/index344.js +10 -66
  515. package/dist/index344.js.map +1 -1
  516. package/dist/index345.js +13 -64
  517. package/dist/index345.js.map +1 -1
  518. package/dist/index346.js +3 -4
  519. package/dist/index346.js.map +1 -1
  520. package/dist/index347.js +23 -56
  521. package/dist/index347.js.map +1 -1
  522. package/dist/index348.js +5 -68
  523. package/dist/index348.js.map +1 -1
  524. package/dist/index349.js +55 -30
  525. package/dist/index349.js.map +1 -1
  526. package/dist/index35.js +44 -30
  527. package/dist/index35.js.map +1 -1
  528. package/dist/index350.js +68 -9
  529. package/dist/index350.js.map +1 -1
  530. package/dist/index351.js +26 -148
  531. package/dist/index351.js.map +1 -1
  532. package/dist/index352.js +9 -108
  533. package/dist/index352.js.map +1 -1
  534. package/dist/index353.js +153 -4
  535. package/dist/index353.js.map +1 -1
  536. package/dist/index354.js +108 -23
  537. package/dist/index354.js.map +1 -1
  538. package/dist/index355.js +22 -15
  539. package/dist/index355.js.map +1 -1
  540. package/dist/index356.js +12 -28
  541. package/dist/index356.js.map +1 -1
  542. package/dist/index357.js +27 -12
  543. package/dist/index357.js.map +1 -1
  544. package/dist/index358.js +5 -7
  545. package/dist/index358.js.map +1 -1
  546. package/dist/index359.js +15 -22
  547. package/dist/index359.js.map +1 -1
  548. package/dist/index36.js +30 -26
  549. package/dist/index36.js.map +1 -1
  550. package/dist/index360.js +28 -12
  551. package/dist/index360.js.map +1 -1
  552. package/dist/index361.js +12 -27
  553. package/dist/index361.js.map +1 -1
  554. package/dist/index362.js +7 -5
  555. package/dist/index362.js.map +1 -1
  556. package/dist/index37.js +28 -23
  557. package/dist/index37.js.map +1 -1
  558. package/dist/index38.js +17 -123
  559. package/dist/index38.js.map +1 -1
  560. package/dist/index39.js +127 -230
  561. package/dist/index39.js.map +1 -1
  562. package/dist/index40.js +230 -49
  563. package/dist/index40.js.map +1 -1
  564. package/dist/index41.js +50 -2640
  565. package/dist/index41.js.map +1 -1
  566. package/dist/index42.js +2598 -351
  567. package/dist/index42.js.map +1 -1
  568. package/dist/index43.js +375 -214
  569. package/dist/index43.js.map +1 -1
  570. package/dist/index44.js +230 -19
  571. package/dist/index44.js.map +1 -1
  572. package/dist/index45.js +18 -138
  573. package/dist/index45.js.map +1 -1
  574. package/dist/index46.js +125 -170
  575. package/dist/index46.js.map +1 -1
  576. package/dist/index47.js +174 -64
  577. package/dist/index47.js.map +1 -1
  578. package/dist/index48.js +74 -88
  579. package/dist/index48.js.map +1 -1
  580. package/dist/index49.js +90 -5
  581. package/dist/index49.js.map +1 -1
  582. package/dist/index50.js +5 -843
  583. package/dist/index50.js.map +1 -1
  584. package/dist/index51.js +832 -54
  585. package/dist/index51.js.map +1 -1
  586. package/dist/index52.js +66 -8
  587. package/dist/index52.js.map +1 -1
  588. package/dist/index53.js +8 -2
  589. package/dist/index53.js.map +1 -1
  590. package/dist/index54.js +2 -24
  591. package/dist/index54.js.map +1 -1
  592. package/dist/index55.js +22 -232
  593. package/dist/index55.js.map +1 -1
  594. package/dist/index56.js +229 -200
  595. package/dist/index56.js.map +1 -1
  596. package/dist/index59.js +1 -1
  597. package/dist/index63.js +12 -122
  598. package/dist/index63.js.map +1 -1
  599. package/dist/index64.js +133 -14
  600. package/dist/index64.js.map +1 -1
  601. package/dist/index65.js +10 -133
  602. package/dist/index65.js.map +1 -1
  603. package/dist/index66.js +216 -10
  604. package/dist/index66.js.map +1 -1
  605. package/dist/index67.js +12 -216
  606. package/dist/index67.js.map +1 -1
  607. package/dist/index68.js +34 -13
  608. package/dist/index68.js.map +1 -1
  609. package/dist/index69.js +44 -31
  610. package/dist/index69.js.map +1 -1
  611. package/dist/index70.js +7 -46
  612. package/dist/index70.js.map +1 -1
  613. package/dist/index71.js +49 -7
  614. package/dist/index71.js.map +1 -1
  615. package/dist/index72.js +4 -50
  616. package/dist/index72.js.map +1 -1
  617. package/dist/index73.js +6 -4
  618. package/dist/index73.js.map +1 -1
  619. package/dist/index74.js +28 -6
  620. package/dist/index74.js.map +1 -1
  621. package/dist/index75.js +50 -28
  622. package/dist/index75.js.map +1 -1
  623. package/dist/index76.js +9 -50
  624. package/dist/index76.js.map +1 -1
  625. package/dist/index77.js +205 -9
  626. package/dist/index77.js.map +1 -1
  627. package/dist/index78.js +11 -53
  628. package/dist/index78.js.map +1 -1
  629. package/dist/index79.js +1 -1
  630. package/dist/index80.js +2 -2
  631. package/dist/index81.js +2 -2
  632. package/dist/index84.js +47 -52
  633. package/dist/index84.js.map +1 -1
  634. package/dist/index85.js +205 -4
  635. package/dist/index85.js.map +1 -1
  636. package/dist/index86.js +22 -5
  637. package/dist/index86.js.map +1 -1
  638. package/dist/index87.js +24 -15
  639. package/dist/index87.js.map +1 -1
  640. package/dist/index88.js +399 -5
  641. package/dist/index88.js.map +1 -1
  642. package/dist/index89.js +46 -7
  643. package/dist/index89.js.map +1 -1
  644. package/dist/index90.js +53 -16
  645. package/dist/index90.js.map +1 -1
  646. package/dist/index91.js +3 -4
  647. package/dist/index91.js.map +1 -1
  648. package/dist/index92.js +33 -4
  649. package/dist/index92.js.map +1 -1
  650. package/dist/index93.js +249 -5
  651. package/dist/index93.js.map +1 -1
  652. package/dist/index94.js +114 -5
  653. package/dist/index94.js.map +1 -1
  654. package/dist/index95.js +219 -4
  655. package/dist/index95.js.map +1 -1
  656. package/dist/index96.js +66 -4
  657. package/dist/index96.js.map +1 -1
  658. package/dist/index97.js +20 -6
  659. package/dist/index97.js.map +1 -1
  660. package/dist/index98.js +209 -24
  661. package/dist/index98.js.map +1 -1
  662. package/dist/index99.js +319 -6
  663. package/dist/index99.js.map +1 -1
  664. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index179.js","sources":["../../../node_modules/@radix-ui/react-arrow/dist/index.mjs"],"sourcesContent":["// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["NAME","Arrow","React","props","forwardedRef","children","width","height","arrowProps","jsx","Primitive","Root"],"mappings":";;;AAIA,IAAIA,IAAO,SACPC,IAAQC,EAAM,WAAW,CAACC,GAAOC,MAAiB;AACpD,QAAM,EAAE,UAAAC,GAAU,OAAAC,IAAQ,IAAI,QAAAC,IAAS,GAAG,GAAGC,EAAU,IAAKL;AAC5D,SAAuBM,gBAAAA,EAAAA;AAAAA,IACrBC,EAAU;AAAA,IACV;AAAA,MACE,GAAGF;AAAA,MACH,KAAKJ;AAAA,MACL,OAAAE;AAAA,MACA,QAAAC;AAAA,MACA,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,UAAUJ,EAAM,UAAUE,IAA2BI,gBAAAA,EAAAA,IAAI,WAAW,EAAE,QAAQ,iBAAgB,CAAE;AAAA,IACtG;AAAA,EACA;AACA,CAAC;AACDR,EAAM,cAAcD;AACjB,IAACW,IAAOV;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index179.js","sources":["../../../node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js"],"sourcesContent":["import { defaultDateLib } from \"../classes/index.js\";\n/**\n * Checks if a given date is within a specified date range.\n *\n * @since 9.0.0\n * @param range - The date range to check against.\n * @param date - The date to check.\n * @param excludeEnds - If `true`, the range's start and end dates are excluded.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the date is within the range, otherwise `false`.\n * @group Utilities\n */\nexport function rangeIncludesDate(range, date, excludeEnds = false, dateLib = defaultDateLib) {\n let { from, to } = range;\n const { differenceInCalendarDays, isSameDay } = dateLib;\n if (from && to) {\n const isRangeInverted = differenceInCalendarDays(to, from) < 0;\n if (isRangeInverted) {\n [from, to] = [to, from];\n }\n const isInRange = differenceInCalendarDays(date, from) >= (excludeEnds ? 1 : 0) &&\n differenceInCalendarDays(to, date) >= (excludeEnds ? 1 : 0);\n return isInRange;\n }\n if (!excludeEnds && to) {\n return isSameDay(to, date);\n }\n if (!excludeEnds && from) {\n return isSameDay(from, date);\n }\n return false;\n}\n/**\n * @private\n * @deprecated Use {@link rangeIncludesDate} instead.\n */\nexport const isDateInRange = (range, date) => rangeIncludesDate(range, date, false, defaultDateLib);\n"],"names":["rangeIncludesDate","range","date","excludeEnds","dateLib","defaultDateLib","from","to","differenceInCalendarDays","isSameDay"],"mappings":";AAYO,SAASA,EAAkBC,GAAOC,GAAMC,IAAc,IAAOC,IAAUC,GAAgB;AAC1F,MAAI,EAAE,MAAAC,GAAM,IAAAC,EAAE,IAAKN;AACnB,QAAM,EAAE,0BAAAO,GAA0B,WAAAC,EAAS,IAAKL;AAChD,SAAIE,KAAQC,KACgBC,EAAyBD,GAAID,CAAI,IAAI,MAEzD,CAACA,GAAMC,CAAE,IAAI,CAACA,GAAID,CAAI,IAERE,EAAyBN,GAAMI,CAAI,MAAMH,IAAc,IAAI,MACzEK,EAAyBD,GAAIL,CAAI,MAAMC,IAAc,IAAI,MAG7D,CAACA,KAAeI,IACTE,EAAUF,GAAIL,CAAI,IAEzB,CAACC,KAAeG,IACTG,EAAUH,GAAMJ,CAAI,IAExB;AACX;","x_google_ignoreList":[0]}
package/dist/index18.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { j as c } from "./index28.js";
2
2
  import { Check as de, ChevronDown as ie, ChevronUp as me } from "lucide-react";
3
3
  import * as n from "react";
4
- import { createPortal as pe } from "react-dom";
5
- import "./index29.js";
4
+ import { DismissableLayerBranch as pe } from "./index29.js";
5
+ import { createPortal as be } from "react-dom";
6
6
  import "./index30.js";
7
7
  import "./index31.js";
8
8
  import "./index32.js";
@@ -10,15 +10,16 @@ import "./index33.js";
10
10
  import "./index34.js";
11
11
  import "./index35.js";
12
12
  import "./index36.js";
13
- import be from "./index37.js";
14
- import "./index38.js";
15
- import { Select as he, SelectTrigger as ve, SelectValue as ge, SelectContent as xe, SelectItem as we } from "./index20.js";
16
- import { useIsTouchDevice as ke } from "./index4.js";
13
+ import "./index37.js";
14
+ import he from "./index38.js";
15
+ import "./index39.js";
16
+ import { Select as ve, SelectTrigger as ge, SelectValue as xe, SelectContent as we, SelectItem as ke } from "./index20.js";
17
+ import { useIsTouchDevice as ye } from "./index4.js";
17
18
  import { cn as O } from "./index2.js";
18
19
  function Q(f) {
19
20
  return String(f).padStart(2, "0");
20
21
  }
21
- function ye(f) {
22
+ function Ne(f) {
22
23
  const u = f.trim();
23
24
  if (!u) return null;
24
25
  const r = /^(\d{1,2}):(\d{2})$/.exec(u);
@@ -28,7 +29,7 @@ function ye(f) {
28
29
  return !Number.isFinite(i) || !Number.isFinite(s) || i < 0 || i > 23 || s < 0 || s > 59 ? null : `${Q(i)}:${Q(s)}`;
29
30
  }
30
31
  function J(f, u) {
31
- const r = ye(f);
32
+ const r = Ne(f);
32
33
  if (!r) return null;
33
34
  const i = u.find((s) => s.value === r);
34
35
  return U(i) ? { parsed: r, selectableValue: r } : { parsed: r, selectableValue: null };
@@ -66,12 +67,12 @@ function oe({
66
67
  x(!0);
67
68
  return;
68
69
  }
69
- const { scrollTop: p, scrollHeight: M, clientHeight: T } = h, N = 2, g = p > N, E = p < M - T - N;
70
+ const { scrollTop: p, scrollHeight: M, clientHeight: T } = h, N = 2, g = p > N, D = p < M - T - N;
70
71
  if (!(M > T + N)) {
71
72
  x(!0);
72
73
  return;
73
74
  }
74
- x(f === "up" ? !g : !E);
75
+ x(f === "up" ? !g : !D);
75
76
  }, [f, u]);
76
77
  n.useEffect(() => {
77
78
  const h = u.current;
@@ -102,10 +103,10 @@ function oe({
102
103
  return;
103
104
  }
104
105
  const N = p.scrollTop, g = p.scrollHeight - p.clientHeight;
105
- let E;
106
- f === "up" ? E = Math.max(0, N - T) : E = Math.min(g, N + T), p.scrollTop = E, m.current = h;
106
+ let D;
107
+ f === "up" ? D = Math.max(0, N - T) : D = Math.min(g, N + T), p.scrollTop = D, m.current = h;
107
108
  const R = 1;
108
- (f === "up" ? E > R : E < g - R) && Math.abs(E - N) > 0.01 ? d.current = requestAnimationFrame(A) : (I(), setTimeout(P, 16));
109
+ (f === "up" ? D > R : D < g - R) && Math.abs(D - N) > 0.01 ? d.current = requestAnimationFrame(A) : (I(), setTimeout(P, 16));
109
110
  },
110
111
  [P, f, s, r, I, u]
111
112
  ), H = n.useCallback(() => {
@@ -132,7 +133,7 @@ function oe({
132
133
  }
133
134
  );
134
135
  }
135
- function Ne({
136
+ function Se({
136
137
  id: f,
137
138
  label: u = "Select time",
138
139
  placeholder: r,
@@ -152,7 +153,7 @@ function Ne({
152
153
  contentTestId: T,
153
154
  isHydrated: N
154
155
  }) {
155
- const g = ke(), E = n.useId(), R = f ?? `hours-picker-${E}`, V = n.useRef(null), j = n.useRef(null), Y = n.useRef(null), z = n.useRef(!1), [t, l] = n.useState(null), b = n.useRef(null), v = n.useRef(null), D = n.useRef(null), [_, le] = n.useState(() => ({
156
+ const g = ye(), D = n.useId(), R = f ?? `hours-picker-${D}`, V = n.useRef(null), j = n.useRef(null), Y = n.useRef(null), z = n.useRef(!1), [t, l] = n.useState(null), b = n.useRef(null), v = n.useRef(null), E = n.useRef(null), [_, le] = n.useState(() => ({
156
157
  left: 0,
157
158
  top: 0,
158
159
  width: 0
@@ -244,7 +245,7 @@ function Ne({
244
245
  };
245
246
  }, [A, g, S, B]), n.useEffect(() => {
246
247
  if (g || !S || !p) return;
247
- const e = D.current;
248
+ const e = E.current;
248
249
  if (!e) return;
249
250
  const a = requestAnimationFrame(() => {
250
251
  if (e.querySelector(
@@ -267,7 +268,7 @@ function Ne({
267
268
  return () => cancelAnimationFrame(a);
268
269
  }, [p, g, S, x]), n.useEffect(() => {
269
270
  if (g || !S || !t || !z.current) return;
270
- const e = D.current;
271
+ const e = E.current;
271
272
  if (!e) return;
272
273
  const o = e.querySelector(`[role="option"][data-value="${t}"]`);
273
274
  if (!(o instanceof HTMLElement)) return;
@@ -294,7 +295,7 @@ function Ne({
294
295
  }
295
296
  ) : null,
296
297
  g ? /* @__PURE__ */ c.jsxs(
297
- he,
298
+ ve,
298
299
  {
299
300
  disabled: A,
300
301
  open: S,
@@ -303,7 +304,7 @@ function Ne({
303
304
  onValueChange: (e) => X(e),
304
305
  children: [
305
306
  /* @__PURE__ */ c.jsx(
306
- ve,
307
+ ge,
307
308
  {
308
309
  id: R,
309
310
  "data-testid": M,
@@ -316,17 +317,17 @@ function Ne({
316
317
  "[&_[data-slot='description']]:hidden",
317
318
  P
318
319
  ),
319
- children: /* @__PURE__ */ c.jsx(ge, { placeholder: te })
320
+ children: /* @__PURE__ */ c.jsx(xe, { placeholder: te })
320
321
  }
321
322
  ),
322
323
  /* @__PURE__ */ c.jsx(
323
- xe,
324
+ we,
324
325
  {
325
326
  "data-testid": T,
326
327
  autoScroll: p,
327
328
  className: "max-h-64 overflow-y-auto",
328
329
  children: x.map((e) => /* @__PURE__ */ c.jsxs(
329
- we,
330
+ ke,
330
331
  {
331
332
  value: e.value,
332
333
  disabled: e.disabled,
@@ -343,7 +344,7 @@ function Ne({
343
344
  }
344
345
  ) : /* @__PURE__ */ c.jsxs("div", { className: "relative", children: [
345
346
  /* @__PURE__ */ c.jsx(
346
- Se,
347
+ De,
347
348
  {
348
349
  id: R,
349
350
  placeholder: te,
@@ -368,14 +369,14 @@ function Ne({
368
369
  }
369
370
  ),
370
371
  S ? (() => {
371
- const e = /* @__PURE__ */ c.jsxs(
372
+ const e = /* @__PURE__ */ c.jsx(pe, { children: /* @__PURE__ */ c.jsxs(
372
373
  "div",
373
374
  {
374
375
  ref: v,
375
376
  "data-testid": T,
376
377
  "data-state": "open",
377
378
  className: O(
378
- "fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md",
379
+ "pointer-events-auto fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md",
379
380
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95"
380
381
  ),
381
382
  style: {
@@ -388,13 +389,13 @@ function Ne({
388
389
  oe,
389
390
  {
390
391
  direction: "up",
391
- viewportRef: D
392
+ viewportRef: E
392
393
  }
393
394
  ),
394
395
  /* @__PURE__ */ c.jsx(
395
396
  "div",
396
397
  {
397
- ref: D,
398
+ ref: E,
398
399
  role: "listbox",
399
400
  className: "max-h-64 overflow-y-auto p-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden",
400
401
  children: x.map((o) => {
@@ -441,13 +442,13 @@ function Ne({
441
442
  oe,
442
443
  {
443
444
  direction: "down",
444
- viewportRef: D
445
+ viewportRef: E
445
446
  }
446
447
  )
447
448
  ]
448
449
  }
449
- );
450
- return typeof document > "u" ? e : pe(e, document.body);
450
+ ) });
451
+ return typeof document > "u" ? e : be(e, document.body);
451
452
  })() : null
452
453
  ] }),
453
454
  I ? /* @__PURE__ */ c.jsx("p", { className: "text-red-500 text-sm mt-1", children: I }) : null
@@ -455,8 +456,8 @@ function Ne({
455
456
  }
456
457
  );
457
458
  }
458
- Ne.displayName = "HoursPickerInput";
459
- function Se({
459
+ Se.displayName = "HoursPickerInput";
460
+ function De({
460
461
  id: f,
461
462
  placeholder: u,
462
463
  value: r,
@@ -476,7 +477,7 @@ function Se({
476
477
  inputRef: T,
477
478
  setDraftValueRef: N
478
479
  }) {
479
- const g = n.useRef(!1), E = n.useRef(!1), R = n.useRef(!1), [V, j] = n.useState(() => r || "");
480
+ const g = n.useRef(!1), D = n.useRef(!1), R = n.useRef(!1), [V, j] = n.useState(() => r || "");
480
481
  n.useEffect(() => (N.current = (t) => {
481
482
  j(t);
482
483
  }, () => {
@@ -488,9 +489,9 @@ function Se({
488
489
  let b = s.findIndex((v) => v.value === l);
489
490
  b === -1 && (b = t === 1 ? -1 : s.length);
490
491
  for (let v = b + t; v >= 0 && v < s.length; v += t) {
491
- const D = s[v];
492
- if (U(D)) {
493
- p(D.value), j(D.value), r !== D.value && i(D.value);
492
+ const E = s[v];
493
+ if (U(E)) {
494
+ p(E.value), j(E.value), r !== E.value && i(E.value);
494
495
  return;
495
496
  }
496
497
  }
@@ -511,7 +512,7 @@ function Se({
511
512
  );
512
513
  return /* @__PURE__ */ c.jsxs("div", { className: "relative group", children: [
513
514
  /* @__PURE__ */ c.jsx(
514
- be,
515
+ he,
515
516
  {
516
517
  id: f,
517
518
  "data-testid": A,
@@ -551,14 +552,14 @@ function Se({
551
552
  const v = Z(b.parsed);
552
553
  if (v == null)
553
554
  return;
554
- const D = se(v, s);
555
- D && p(D.value);
555
+ const E = se(v, s);
556
+ E && p(E.value);
556
557
  },
557
558
  onPointerDown: () => {
558
- E.current = !0, !d && (m || w(!0));
559
+ D.current = !0, !d && (m || w(!0));
559
560
  },
560
561
  onMouseDown: (t) => {
561
- E.current = !0, R.current = typeof document < "u" && document.activeElement === t.currentTarget, !d && (m || w(!0));
562
+ D.current = !0, R.current = typeof document < "u" && document.activeElement === t.currentTarget, !d && (m || w(!0));
562
563
  },
563
564
  onClick: () => {
564
565
  d || m || w(!0);
@@ -604,8 +605,8 @@ function Se({
604
605
  }
605
606
  },
606
607
  onFocus: (t) => {
607
- const l = !E.current || !R.current;
608
- if (E.current = !1, R.current = !1, g.current = !0, l) {
608
+ const l = !D.current || !R.current;
609
+ if (D.current = !1, R.current = !1, g.current = !0, l) {
609
610
  const b = t.currentTarget;
610
611
  requestAnimationFrame(() => b.select());
611
612
  }
@@ -657,6 +658,6 @@ function Se({
657
658
  ] });
658
659
  }
659
660
  export {
660
- Ne as HoursPickerInput
661
+ Se as HoursPickerInput
661
662
  };
662
663
  //# sourceMappingURL=index18.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index18.js","sources":["../src/components/HoursPicker/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\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/Select\"\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\nexport type HoursPickerOption = {\n value: string\n label: string\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\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HoursPickerOption[]): 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: HoursPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HoursPickerOption[]) {\n let bestOption: HoursPickerOption | 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 HoursPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HoursPickerScrollButtonProps = {\n direction: HoursPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HoursPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HoursPickerScrollButtonProps) {\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.scrollTop = 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 HoursPickerInputProps = {\n id?: string\n label?: React.ReactNode\n placeholder?: string\n value: string | null\n onChange: (value: string | null) => void\n options: HoursPickerOption[]\n autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n className?: string\n labelClassName?: string\n buttonClassName?: string\n error?: React.ReactNode\n disabled?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n autoScroll?: \"firstEnabled\" | \"firstEnabledWithContext\"\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HoursPickerInput({\n id,\n label = \"Select time\",\n placeholder,\n value,\n onChange,\n options,\n autoComplete,\n className,\n labelClassName,\n buttonClassName,\n error,\n disabled,\n open: openProp,\n onOpenChange,\n autoScroll = \"firstEnabledWithContext\",\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HoursPickerInputProps) {\n const isTouchDevice = useIsTouchDevice()\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 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 isOpenControlled = openProp !== undefined && onOpenChange !== undefined\n\n const resolvedPlaceholder = placeholder ?? (typeof label === \"string\" ? label : \"Select time\")\n\n const useIsomorphicLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect\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 commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n onChange(next)\n },\n [onChange, options],\n )\n\n const handleSelectOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (isOpenControlled) {\n onOpenChange?.(nextOpen)\n return\n }\n\n if (isTouchDevice) {\n setUncontrolledOpen(nextOpen)\n return\n }\n\n if (!nextOpen) {\n setUncontrolledOpen(false)\n }\n },\n [isOpenControlled, isTouchDevice, onOpenChange],\n )\n\n React.useEffect(() => {\n if (isTouchDevice) return\n if (!open) return\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 document.addEventListener(\"pointerdown\", handlePointerDown, true)\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown, true)\n }\n }, [isTouchDevice, open, setOpen])\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, triggerId])\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 }, [triggerId])\n\n useIsomorphicLayoutEffect(() => {\n if (isTouchDevice) return\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, isTouchDevice, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (isTouchDevice) return\n if (!open) return\n if (!autoScroll) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\n \"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\"\n ) as HTMLElement | null\n if (selected) return\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 =\n autoScroll === \"firstEnabledWithContext\" && lastDisabledBefore\n ? lastDisabledBefore\n : 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 }, [autoScroll, isTouchDevice, open, options])\n\n React.useEffect(() => {\n if (isTouchDevice) return\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, isTouchDevice, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n {label ? (\n <label\n htmlFor={triggerId}\n className={cn(\"block text-sm font-medium text-gray-700 mb-1 cursor-pointer\", labelClassName)}\n >\n {label}\n </label>\n ) : null}\n {isTouchDevice ? (\n <Select\n disabled={disabled}\n open={open}\n onOpenChange={handleSelectOpenChange}\n value={value ?? \"\"}\n onValueChange={(next) => commitValue(next)}\n >\n <SelectTrigger\n id={triggerId}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"transition-colors hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n error && \"border-red-500\",\n \"[&_[data-slot='description']]:hidden\",\n buttonClassName,\n )}\n >\n <SelectValue placeholder={resolvedPlaceholder} />\n </SelectTrigger>\n\n <SelectContent\n data-testid={contentTestId}\n autoScroll={autoScroll}\n className=\"max-h-64 overflow-y-auto\"\n >\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"block text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <div className=\"relative\">\n <HoursPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={resolvedPlaceholder}\n value={value}\n onChange={commitValue}\n options={options}\n autoComplete={autoComplete}\n disabled={disabled}\n open={open}\n setOpen={setOpen}\n buttonClassName={buttonClassName}\n error={error}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n setDraftValueRef={setTriggerDraftValueRef}\n />\n\n {open ? (() => {\n const popover = (\n <div\n ref={desktopPopoverRef}\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: desktopPopoverPosition.left,\n top: desktopPopoverPosition.top,\n width: desktopPopoverPosition.width,\n }}\n >\n <HoursPickerScrollButton\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 [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 <HoursPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n )}\n {error ? (\n <p className=\"text-red-500 text-sm mt-1\">\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n\nHoursPickerInput.displayName = \"HoursPickerInput\"\n\ntype HoursPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onChange: (value: string | null) => void\n options: HoursPickerOption[]\n autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n disabled?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n buttonClassName?: string\n error?: React.ReactNode\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 setDraftValueRef: React.MutableRefObject<((value: string) => void) | null>\n}\n\nfunction HoursPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onChange,\n options,\n autoComplete,\n disabled,\n open,\n setOpen,\n buttonClassName,\n error,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n setDraftValueRef,\n}: HoursPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n setDraftValueRef.current = (nextValue) => {\n setDraft(nextValue)\n }\n return () => {\n setDraftValueRef.current = null\n }\n }, [setDraftValueRef])\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 setDraft(nextOption.value)\n if (value !== nextOption.value) {\n onChange(nextOption.value)\n }\n return\n }\n },\n [highlightedValueRef, onChange, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n const triggerClassName = cn(\n \"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 error && \"border-red-500\",\n \"[&_[data-slot='description']]:hidden\",\n buttonClassName,\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={disabled}\n inputRef={inputRef}\n autoComplete={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) => {\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n setDraft(nextText)\n\n if (nextText.replace(/\\D/g, \"\").length !== 0) {\n return\n }\n\n if (value) {\n onChange(null)\n }\n }}\n onComplete={(completed) => {\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\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 onChange(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 (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 return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onChange(resolved.selectableValue)\n }\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 if (value !== closestOption.value) {\n onChange(closestOption.value)\n }\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 onChange(resolved.selectableValue)\n }\n }}\n />\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"],"names":["pad2","value","parseTimeInput","raw","trimmed","match","hours","minutes","parseTimeInputWithSelectableOption","options","parsed","parsedOption","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","bestMinutes","optionMinutes","diff","HoursPickerScrollButton","direction","viewportRef","speed","className","disabled","setDisabled","React","animationRef","lastTimeRef","isScrollingRef","checkScrollability","viewport","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","handleScroll","handleResize","resizeObserver","mutationObserver","stopScrolling","smoothScroll","currentTime","deltaTime","distance","oldScrollTop","maxScroll","newScrollTop","startScrolling","jsx","cn","ChevronUp","ChevronDown","HoursPickerInput","id","label","placeholder","onChange","autoComplete","labelClassName","buttonClassName","error","openProp","onOpenChange","autoScroll","triggerTestId","contentTestId","isHydrated","isTouchDevice","useIsTouchDevice","reactId","triggerId","triggerInputRef","setTriggerDraftValueRef","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","isOpenControlled","resolvedPlaceholder","useIsomorphicLayoutEffect","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","commitValue","matchingOption","handleSelectOpenChange","nextOpen","handlePointerDown","event","target","container","trigger","isActive","observer","entries","entry","updateDesktopPopoverPosition","popover","rect","popoverHeight","viewportWidth","viewportHeight","padding","width","left","top","overflowBottom","aboveTop","rafId","raf","all","lastDisabledBefore","el","offset","targetTop","targetBottom","viewportBottom","jsxs","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","HoursPickerMaskedSelectTrigger","node","isChecked","Check","createPortal","inputRef","setDraftValueRef","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","draft","setDraft","nextValue","moveSelection","base","baseIndex","nextIndex","nextOption","triggerClassName","IMaskInput","appended","dynamicMasked","digits","hourPrefix","accepted","nextText","completed","resolved","closestOption","shouldSelectAll","element"],"mappings":"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"}
1
+ {"version":3,"file":"index18.js","sources":["../src/components/HoursPicker/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport * as React from \"react\"\nimport { DismissableLayerBranch } from \"@radix-ui/react-dismissable-layer\"\nimport { createPortal } from \"react-dom\"\nimport { IMaskInput } from \"react-imask\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/Select\"\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\nexport type HoursPickerOption = {\n value: string\n label: string\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\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HoursPickerOption[]): 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: HoursPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HoursPickerOption[]) {\n let bestOption: HoursPickerOption | 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 HoursPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HoursPickerScrollButtonProps = {\n direction: HoursPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HoursPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HoursPickerScrollButtonProps) {\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.scrollTop = 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 HoursPickerInputProps = {\n id?: string\n label?: React.ReactNode\n placeholder?: string\n value: string | null\n onChange: (value: string | null) => void\n options: HoursPickerOption[]\n autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n className?: string\n labelClassName?: string\n buttonClassName?: string\n error?: React.ReactNode\n disabled?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n autoScroll?: \"firstEnabled\" | \"firstEnabledWithContext\"\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HoursPickerInput({\n id,\n label = \"Select time\",\n placeholder,\n value,\n onChange,\n options,\n autoComplete,\n className,\n labelClassName,\n buttonClassName,\n error,\n disabled,\n open: openProp,\n onOpenChange,\n autoScroll = \"firstEnabledWithContext\",\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HoursPickerInputProps) {\n const isTouchDevice = useIsTouchDevice()\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 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 isOpenControlled = openProp !== undefined && onOpenChange !== undefined\n\n const resolvedPlaceholder = placeholder ?? (typeof label === \"string\" ? label : \"Select time\")\n\n const useIsomorphicLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect\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 commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n onChange(next)\n },\n [onChange, options],\n )\n\n const handleSelectOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (isOpenControlled) {\n onOpenChange?.(nextOpen)\n return\n }\n\n if (isTouchDevice) {\n setUncontrolledOpen(nextOpen)\n return\n }\n\n if (!nextOpen) {\n setUncontrolledOpen(false)\n }\n },\n [isOpenControlled, isTouchDevice, onOpenChange],\n )\n\n React.useEffect(() => {\n if (isTouchDevice) return\n if (!open) return\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 document.addEventListener(\"pointerdown\", handlePointerDown, true)\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown, true)\n }\n }, [isTouchDevice, open, setOpen])\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, triggerId])\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 }, [triggerId])\n\n useIsomorphicLayoutEffect(() => {\n if (isTouchDevice) return\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, isTouchDevice, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (isTouchDevice) return\n if (!open) return\n if (!autoScroll) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\n \"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\"\n ) as HTMLElement | null\n if (selected) return\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 =\n autoScroll === \"firstEnabledWithContext\" && lastDisabledBefore\n ? lastDisabledBefore\n : 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 }, [autoScroll, isTouchDevice, open, options])\n\n React.useEffect(() => {\n if (isTouchDevice) return\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, isTouchDevice, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n {label ? (\n <label\n htmlFor={triggerId}\n className={cn(\"block text-sm font-medium text-gray-700 mb-1 cursor-pointer\", labelClassName)}\n >\n {label}\n </label>\n ) : null}\n {isTouchDevice ? (\n <Select\n disabled={disabled}\n open={open}\n onOpenChange={handleSelectOpenChange}\n value={value ?? \"\"}\n onValueChange={(next) => commitValue(next)}\n >\n <SelectTrigger\n id={triggerId}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"transition-colors hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n error && \"border-red-500\",\n \"[&_[data-slot='description']]:hidden\",\n buttonClassName,\n )}\n >\n <SelectValue placeholder={resolvedPlaceholder} />\n </SelectTrigger>\n\n <SelectContent\n data-testid={contentTestId}\n autoScroll={autoScroll}\n className=\"max-h-64 overflow-y-auto\"\n >\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"block text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <div className=\"relative\">\n <HoursPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={resolvedPlaceholder}\n value={value}\n onChange={commitValue}\n options={options}\n autoComplete={autoComplete}\n disabled={disabled}\n open={open}\n setOpen={setOpen}\n buttonClassName={buttonClassName}\n error={error}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n setDraftValueRef={setTriggerDraftValueRef}\n />\n\n {open ? (() => {\n const popover = (\n <DismissableLayerBranch>\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 <HoursPickerScrollButton\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 [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 <HoursPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </DismissableLayerBranch>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n )}\n {error ? (\n <p className=\"text-red-500 text-sm mt-1\">\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n\nHoursPickerInput.displayName = \"HoursPickerInput\"\n\ntype HoursPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onChange: (value: string | null) => void\n options: HoursPickerOption[]\n autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n disabled?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n buttonClassName?: string\n error?: React.ReactNode\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 setDraftValueRef: React.MutableRefObject<((value: string) => void) | null>\n}\n\nfunction HoursPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onChange,\n options,\n autoComplete,\n disabled,\n open,\n setOpen,\n buttonClassName,\n error,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n setDraftValueRef,\n}: HoursPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n setDraftValueRef.current = (nextValue) => {\n setDraft(nextValue)\n }\n return () => {\n setDraftValueRef.current = null\n }\n }, [setDraftValueRef])\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 setDraft(nextOption.value)\n if (value !== nextOption.value) {\n onChange(nextOption.value)\n }\n return\n }\n },\n [highlightedValueRef, onChange, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n const triggerClassName = cn(\n \"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 error && \"border-red-500\",\n \"[&_[data-slot='description']]:hidden\",\n buttonClassName,\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={disabled}\n inputRef={inputRef}\n autoComplete={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) => {\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n setDraft(nextText)\n\n if (nextText.replace(/\\D/g, \"\").length !== 0) {\n return\n }\n\n if (value) {\n onChange(null)\n }\n }}\n onComplete={(completed) => {\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\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 onChange(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 (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 return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onChange(resolved.selectableValue)\n }\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 if (value !== closestOption.value) {\n onChange(closestOption.value)\n }\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 onChange(resolved.selectableValue)\n }\n }}\n />\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"],"names":["pad2","value","parseTimeInput","raw","trimmed","match","hours","minutes","parseTimeInputWithSelectableOption","options","parsed","parsedOption","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","bestMinutes","optionMinutes","diff","HoursPickerScrollButton","direction","viewportRef","speed","className","disabled","setDisabled","React","animationRef","lastTimeRef","isScrollingRef","checkScrollability","viewport","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","handleScroll","handleResize","resizeObserver","mutationObserver","stopScrolling","smoothScroll","currentTime","deltaTime","distance","oldScrollTop","maxScroll","newScrollTop","startScrolling","jsx","cn","ChevronUp","ChevronDown","HoursPickerInput","id","label","placeholder","onChange","autoComplete","labelClassName","buttonClassName","error","openProp","onOpenChange","autoScroll","triggerTestId","contentTestId","isHydrated","isTouchDevice","useIsTouchDevice","reactId","triggerId","triggerInputRef","setTriggerDraftValueRef","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","isOpenControlled","resolvedPlaceholder","useIsomorphicLayoutEffect","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","commitValue","matchingOption","handleSelectOpenChange","nextOpen","handlePointerDown","event","target","container","trigger","isActive","observer","entries","entry","updateDesktopPopoverPosition","popover","rect","popoverHeight","viewportWidth","viewportHeight","padding","width","left","top","overflowBottom","aboveTop","rafId","raf","all","lastDisabledBefore","el","offset","targetTop","targetBottom","viewportBottom","jsxs","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","HoursPickerMaskedSelectTrigger","node","DismissableLayerBranch","isChecked","Check","createPortal","inputRef","setDraftValueRef","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","draft","setDraft","nextValue","moveSelection","base","baseIndex","nextIndex","nextOption","triggerClassName","IMaskInput","appended","dynamicMasked","digits","hourPrefix","accepted","nextText","completed","resolved","closestOption","shouldSelectAll","element"],"mappings":"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"}
package/dist/index180.js CHANGED
@@ -1,28 +1,9 @@
1
- import * as h from "react";
2
- import { useLayoutEffect as z } from "./index73.js";
3
- function c(r) {
4
- const [d, e] = h.useState(void 0);
5
- return z(() => {
6
- if (r) {
7
- e({ width: r.offsetWidth, height: r.offsetHeight });
8
- const f = new ResizeObserver((i) => {
9
- if (!Array.isArray(i) || !i.length)
10
- return;
11
- const b = i[0];
12
- let o, t;
13
- if ("borderBoxSize" in b) {
14
- const s = b.borderBoxSize, u = Array.isArray(s) ? s[0] : s;
15
- o = u.inlineSize, t = u.blockSize;
16
- } else
17
- o = r.offsetWidth, t = r.offsetHeight;
18
- e({ width: o, height: t });
19
- });
20
- return f.observe(r, { box: "border-box" }), () => f.unobserve(r);
21
- } else
22
- e(void 0);
23
- }, [r]), d;
1
+ import { TZDate as r } from "./index246.js";
2
+ import "./index248.js";
3
+ function e(n, o) {
4
+ return n instanceof r && n.timeZone === o ? n : new r(n, o);
24
5
  }
25
6
  export {
26
- c as useSize
7
+ e as toTimeZone
27
8
  };
28
9
  //# sourceMappingURL=index180.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index180.js","sources":["../../../node_modules/@radix-ui/react-use-size/dist/index.mjs"],"sourcesContent":["// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["useSize","element","size","setSize","React","useLayoutEffect","resizeObserver","entries","entry","width","height","borderSizeEntry","borderSize"],"mappings":";;AAGA,SAASA,EAAQC,GAAS;AACxB,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAM,SAAS,MAAM;AAC7CC,SAAAA,EAAgB,MAAM;AACpB,QAAIJ,GAAS;AACX,MAAAE,EAAQ,EAAE,OAAOF,EAAQ,aAAa,QAAQA,EAAQ,cAAc;AACpE,YAAMK,IAAiB,IAAI,eAAe,CAACC,MAAY;AAIrD,YAHI,CAAC,MAAM,QAAQA,CAAO,KAGtB,CAACA,EAAQ;AACX;AAEF,cAAMC,IAAQD,EAAQ,CAAC;AACvB,YAAIE,GACAC;AACJ,YAAI,mBAAmBF,GAAO;AAC5B,gBAAMG,IAAkBH,EAAM,eACxBI,IAAa,MAAM,QAAQD,CAAe,IAAIA,EAAgB,CAAC,IAAIA;AACzE,UAAAF,IAAQG,EAAW,YACnBF,IAASE,EAAW;AAAA,QACtB;AACE,UAAAH,IAAQR,EAAQ,aAChBS,IAAST,EAAQ;AAEnB,QAAAE,EAAQ,EAAE,OAAAM,GAAO,QAAAC,GAAQ;AAAA,MAC3B,CAAC;AACD,aAAAJ,EAAe,QAAQL,GAAS,EAAE,KAAK,aAAY,CAAE,GAC9C,MAAMK,EAAe,UAAUL,CAAO;AAAA,IAC/C;AACE,MAAAE,EAAQ,MAAM;AAAA,EAElB,GAAG,CAACF,CAAO,CAAC,GACLC;AACT;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index180.js","sources":["../../../node_modules/react-day-picker/dist/esm/utils/toTimeZone.js"],"sourcesContent":["import { TZDate } from \"@date-fns/tz\";\n/**\n * Convert a {@link Date} or {@link TZDate} instance to the given time zone.\n * Reuses the same instance when it is already a {@link TZDate} using the target\n * time zone to avoid extra allocations.\n */\nexport function toTimeZone(date, timeZone) {\n if (date instanceof TZDate && date.timeZone === timeZone) {\n return date;\n }\n return new TZDate(date, timeZone);\n}\n"],"names":["toTimeZone","date","timeZone","TZDate"],"mappings":";;AAMO,SAASA,EAAWC,GAAMC,GAAU;AACvC,SAAID,aAAgBE,KAAUF,EAAK,aAAaC,IACrCD,IAEJ,IAAIE,EAAOF,GAAMC,CAAQ;AACpC;","x_google_ignoreList":[0]}