@rpcbase/ui 0.159.0 → 0.160.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 (507) hide show
  1. package/dist/components/HoursPicker/index.d.ts +9 -6
  2. package/dist/components/HoursPicker/index.d.ts.map +1 -1
  3. package/dist/components/Select/index.d.ts.map +1 -1
  4. package/dist/index.js +32 -31
  5. package/dist/index100.js +105 -126
  6. package/dist/index100.js.map +1 -1
  7. package/dist/index101.js +24 -20
  8. package/dist/index101.js.map +1 -1
  9. package/dist/index102.js +8 -76
  10. package/dist/index102.js.map +1 -1
  11. package/dist/index103.js +4 -18
  12. package/dist/index103.js.map +1 -1
  13. package/dist/index104.js +5 -101
  14. package/dist/index104.js.map +1 -1
  15. package/dist/index105.js +5 -5
  16. package/dist/index105.js.map +1 -1
  17. package/dist/index106.js +466 -14
  18. package/dist/index106.js.map +1 -1
  19. package/dist/index107.js +186 -2
  20. package/dist/index107.js.map +1 -1
  21. package/dist/index108.js +107 -7
  22. package/dist/index108.js.map +1 -1
  23. package/dist/index109.js +241 -305
  24. package/dist/index109.js.map +1 -1
  25. package/dist/index110.js +9 -49
  26. package/dist/index110.js.map +1 -1
  27. package/dist/index111.js +42 -5
  28. package/dist/index111.js.map +1 -1
  29. package/dist/index112.js +4 -68
  30. package/dist/index112.js.map +1 -1
  31. package/dist/index113.js +52 -2
  32. package/dist/index113.js.map +1 -1
  33. package/dist/index114.js +4 -363
  34. package/dist/index114.js.map +1 -1
  35. package/dist/index115.js +4 -261
  36. package/dist/index115.js.map +1 -1
  37. package/dist/index116.js +15 -60
  38. package/dist/index116.js.map +1 -1
  39. package/dist/index117.js +5 -46
  40. package/dist/index117.js.map +1 -1
  41. package/dist/index118.js +7 -169
  42. package/dist/index118.js.map +1 -1
  43. package/dist/index119.js +16 -109
  44. package/dist/index119.js.map +1 -1
  45. package/dist/index120.js +4 -24
  46. package/dist/index120.js.map +1 -1
  47. package/dist/index121.js +5 -8
  48. package/dist/index121.js.map +1 -1
  49. package/dist/index122.js +5 -4
  50. package/dist/index122.js.map +1 -1
  51. package/dist/index123.js +5 -5
  52. package/dist/index123.js.map +1 -1
  53. package/dist/index124.js +3 -3
  54. package/dist/index124.js.map +1 -1
  55. package/dist/index125.js +4 -466
  56. package/dist/index125.js.map +1 -1
  57. package/dist/index126.js +6 -185
  58. package/dist/index126.js.map +1 -1
  59. package/dist/index127.js +24 -107
  60. package/dist/index127.js.map +1 -1
  61. package/dist/index128.js +6 -262
  62. package/dist/index128.js.map +1 -1
  63. package/dist/index129.js +4 -9
  64. package/dist/index129.js.map +1 -1
  65. package/dist/index130.js +6 -42
  66. package/dist/index130.js.map +1 -1
  67. package/dist/index131.js +5 -4
  68. package/dist/index131.js.map +1 -1
  69. package/dist/index132.js +5 -52
  70. package/dist/index132.js.map +1 -1
  71. package/dist/index133.js +5 -4
  72. package/dist/index133.js.map +1 -1
  73. package/dist/index134.js +3 -3
  74. package/dist/index134.js.map +1 -1
  75. package/dist/index135.js +6 -13
  76. package/dist/index135.js.map +1 -1
  77. package/dist/index136.js +4 -4
  78. package/dist/index136.js.map +1 -1
  79. package/dist/index137.js +4 -7
  80. package/dist/index137.js.map +1 -1
  81. package/dist/index138.js +4 -16
  82. package/dist/index138.js.map +1 -1
  83. package/dist/index139.js +6 -4
  84. package/dist/index139.js.map +1 -1
  85. package/dist/index140.js +145 -4
  86. package/dist/index140.js.map +1 -1
  87. package/dist/index141.js +39 -5
  88. package/dist/index141.js.map +1 -1
  89. package/dist/index142.js +4 -5
  90. package/dist/index142.js.map +1 -1
  91. package/dist/index143.js +7 -4
  92. package/dist/index143.js.map +1 -1
  93. package/dist/index144.js +13 -4
  94. package/dist/index144.js.map +1 -1
  95. package/dist/index145.js +13 -6
  96. package/dist/index145.js.map +1 -1
  97. package/dist/index146.js +7 -24
  98. package/dist/index146.js.map +1 -1
  99. package/dist/index147.js +31 -6
  100. package/dist/index147.js.map +1 -1
  101. package/dist/index148.js +10 -4
  102. package/dist/index148.js.map +1 -1
  103. package/dist/index149.js +10 -6
  104. package/dist/index149.js.map +1 -1
  105. package/dist/index150.js +8 -5
  106. package/dist/index150.js.map +1 -1
  107. package/dist/index151.js +13 -4
  108. package/dist/index151.js.map +1 -1
  109. package/dist/index152.js +101 -5
  110. package/dist/index152.js.map +1 -1
  111. package/dist/index153.js +20 -5
  112. package/dist/index153.js.map +1 -1
  113. package/dist/index154.js +53 -8
  114. package/dist/index154.js.map +1 -1
  115. package/dist/index155.js +72 -5
  116. package/dist/index155.js.map +1 -1
  117. package/dist/index156.js +9 -4
  118. package/dist/index156.js.map +1 -1
  119. package/dist/index157.js +20 -4
  120. package/dist/index157.js.map +1 -1
  121. package/dist/index158.js +16 -6
  122. package/dist/index158.js.map +1 -1
  123. package/dist/index159.js +23 -145
  124. package/dist/index159.js.map +1 -1
  125. package/dist/index160.js +6 -39
  126. package/dist/index160.js.map +1 -1
  127. package/dist/index161.js +5 -4
  128. package/dist/index161.js.map +1 -1
  129. package/dist/index162.js +23 -7
  130. package/dist/index162.js.map +1 -1
  131. package/dist/index163.js +35 -14
  132. package/dist/index163.js.map +1 -1
  133. package/dist/index164.js +16 -14
  134. package/dist/index164.js.map +1 -1
  135. package/dist/index165.js +6 -7
  136. package/dist/index165.js.map +1 -1
  137. package/dist/index166.js +4 -31
  138. package/dist/index166.js.map +1 -1
  139. package/dist/index167.js +4 -10
  140. package/dist/index167.js.map +1 -1
  141. package/dist/index168.js +4 -10
  142. package/dist/index168.js.map +1 -1
  143. package/dist/index169.js +4 -8
  144. package/dist/index169.js.map +1 -1
  145. package/dist/index170.js +3 -13
  146. package/dist/index170.js.map +1 -1
  147. package/dist/index171.js +6 -101
  148. package/dist/index171.js.map +1 -1
  149. package/dist/index172.js +24 -20
  150. package/dist/index172.js.map +1 -1
  151. package/dist/index173.js +7 -53
  152. package/dist/index173.js.map +1 -1
  153. package/dist/index174.js +6 -72
  154. package/dist/index174.js.map +1 -1
  155. package/dist/index175.js +5 -9
  156. package/dist/index175.js.map +1 -1
  157. package/dist/index176.js +3 -20
  158. package/dist/index176.js.map +1 -1
  159. package/dist/index177.js +3 -16
  160. package/dist/index177.js.map +1 -1
  161. package/dist/index178.js +4 -23
  162. package/dist/index178.js.map +1 -1
  163. package/dist/index179.js +3 -6
  164. package/dist/index179.js.map +1 -1
  165. package/dist/index18.js +475 -465
  166. package/dist/index18.js.map +1 -1
  167. package/dist/index180.js +4 -5
  168. package/dist/index180.js.map +1 -1
  169. package/dist/index181.js +3 -23
  170. package/dist/index181.js.map +1 -1
  171. package/dist/index182.js +4 -35
  172. package/dist/index182.js.map +1 -1
  173. package/dist/index183.js +4 -16
  174. package/dist/index183.js.map +1 -1
  175. package/dist/index184.js +3 -6
  176. package/dist/index184.js.map +1 -1
  177. package/dist/index185.js +33 -4
  178. package/dist/index185.js.map +1 -1
  179. package/dist/index186.js +249 -4
  180. package/dist/index186.js.map +1 -1
  181. package/dist/index187.js +114 -4
  182. package/dist/index187.js.map +1 -1
  183. package/dist/index188.js +219 -4
  184. package/dist/index188.js.map +1 -1
  185. package/dist/index189.js +66 -3
  186. package/dist/index189.js.map +1 -1
  187. package/dist/index190.js +20 -6
  188. package/dist/index190.js.map +1 -1
  189. package/dist/index191.js +210 -24
  190. package/dist/index191.js.map +1 -1
  191. package/dist/index192.js +319 -7
  192. package/dist/index192.js.map +1 -1
  193. package/dist/index193.js +130 -6
  194. package/dist/index193.js.map +1 -1
  195. package/dist/index194.js +20 -5
  196. package/dist/index194.js.map +1 -1
  197. package/dist/index195.js +75 -3
  198. package/dist/index195.js.map +1 -1
  199. package/dist/index196.js +18 -3
  200. package/dist/index196.js.map +1 -1
  201. package/dist/index197.js +101 -4
  202. package/dist/index197.js.map +1 -1
  203. package/dist/index198.js +5 -4
  204. package/dist/index198.js.map +1 -1
  205. package/dist/index199.js +14 -4
  206. package/dist/index199.js.map +1 -1
  207. package/dist/index20.js +113 -105
  208. package/dist/index20.js.map +1 -1
  209. package/dist/index200.js +2 -4
  210. package/dist/index200.js.map +1 -1
  211. package/dist/index201.js +7 -3
  212. package/dist/index201.js.map +1 -1
  213. package/dist/index202.js +326 -3
  214. package/dist/index202.js.map +1 -1
  215. package/dist/index203.js +46 -602
  216. package/dist/index203.js.map +1 -1
  217. package/dist/index205.js +3 -3
  218. package/dist/index206.js +3 -3
  219. package/dist/index209.js +1 -1
  220. package/dist/index210.js +1 -1
  221. package/dist/index215.js +63 -60
  222. package/dist/index215.js.map +1 -1
  223. package/dist/index216.js +179 -47
  224. package/dist/index216.js.map +1 -1
  225. package/dist/index217.js +46 -39
  226. package/dist/index217.js.map +1 -1
  227. package/dist/index218.js +13 -100
  228. package/dist/index218.js.map +1 -1
  229. package/dist/index219.js +151 -94
  230. package/dist/index219.js.map +1 -1
  231. package/dist/index220.js +27 -96
  232. package/dist/index220.js.map +1 -1
  233. package/dist/index221.js +9 -13
  234. package/dist/index221.js.map +1 -1
  235. package/dist/index222.js +40 -147
  236. package/dist/index222.js.map +1 -1
  237. package/dist/index223.js +10 -29
  238. package/dist/index223.js.map +1 -1
  239. package/dist/index224.js +44 -9
  240. package/dist/index224.js.map +1 -1
  241. package/dist/index225.js +88 -40
  242. package/dist/index225.js.map +1 -1
  243. package/dist/index226.js +85 -10
  244. package/dist/index226.js.map +1 -1
  245. package/dist/index227.js +102 -41
  246. package/dist/index227.js.map +1 -1
  247. package/dist/index228.js +45 -88
  248. package/dist/index228.js.map +1 -1
  249. package/dist/index229.js +10 -85
  250. package/dist/index229.js.map +1 -1
  251. package/dist/index230.js +28 -96
  252. package/dist/index230.js.map +1 -1
  253. package/dist/index231.js +8 -52
  254. package/dist/index231.js.map +1 -1
  255. package/dist/index232.js +115 -10
  256. package/dist/index232.js.map +1 -1
  257. package/dist/index233.js +16 -36
  258. package/dist/index233.js.map +1 -1
  259. package/dist/index234.js +15 -8
  260. package/dist/index234.js.map +1 -1
  261. package/dist/index235.js +3 -116
  262. package/dist/index235.js.map +1 -1
  263. package/dist/index236.js +35 -16
  264. package/dist/index236.js.map +1 -1
  265. package/dist/index237.js +19 -14
  266. package/dist/index237.js.map +1 -1
  267. package/dist/index238.js +9 -3
  268. package/dist/index238.js.map +1 -1
  269. package/dist/index239.js +8 -36
  270. package/dist/index239.js.map +1 -1
  271. package/dist/index240.js +58 -20
  272. package/dist/index240.js.map +1 -1
  273. package/dist/index241.js +8 -9
  274. package/dist/index241.js.map +1 -1
  275. package/dist/index242.js +66 -8
  276. package/dist/index242.js.map +1 -1
  277. package/dist/index243.js +18 -18
  278. package/dist/index243.js.map +1 -1
  279. package/dist/index244.js +15 -27
  280. package/dist/index244.js.map +1 -1
  281. package/dist/index245.js +4 -15
  282. package/dist/index245.js.map +1 -1
  283. package/dist/index246.js +4 -57
  284. package/dist/index246.js.map +1 -1
  285. package/dist/index247.js +6 -8
  286. package/dist/index247.js.map +1 -1
  287. package/dist/index248.js +4 -66
  288. package/dist/index248.js.map +1 -1
  289. package/dist/index249.js +7 -19
  290. package/dist/index249.js.map +1 -1
  291. package/dist/index250.js +17 -16
  292. package/dist/index250.js.map +1 -1
  293. package/dist/index251.js +5 -5
  294. package/dist/index251.js.map +1 -1
  295. package/dist/index252.js +5 -5
  296. package/dist/index252.js.map +1 -1
  297. package/dist/index253.js +13 -6
  298. package/dist/index253.js.map +1 -1
  299. package/dist/index254.js +10 -4
  300. package/dist/index254.js.map +1 -1
  301. package/dist/index255.js +14 -7
  302. package/dist/index255.js.map +1 -1
  303. package/dist/index256.js +14 -17
  304. package/dist/index256.js.map +1 -1
  305. package/dist/index257.js +5 -5
  306. package/dist/index257.js.map +1 -1
  307. package/dist/index258.js +6 -5
  308. package/dist/index258.js.map +1 -1
  309. package/dist/index259.js +7 -13
  310. package/dist/index259.js.map +1 -1
  311. package/dist/index260.js +5 -9
  312. package/dist/index260.js.map +1 -1
  313. package/dist/index261.js +9 -14
  314. package/dist/index261.js.map +1 -1
  315. package/dist/index262.js +5 -14
  316. package/dist/index262.js.map +1 -1
  317. package/dist/index263.js +5 -5
  318. package/dist/index263.js.map +1 -1
  319. package/dist/index264.js +9 -6
  320. package/dist/index264.js.map +1 -1
  321. package/dist/index265.js +5 -7
  322. package/dist/index265.js.map +1 -1
  323. package/dist/index266.js +5 -6
  324. package/dist/index266.js.map +1 -1
  325. package/dist/index267.js +4 -9
  326. package/dist/index267.js.map +1 -1
  327. package/dist/index268.js +11 -5
  328. package/dist/index268.js.map +1 -1
  329. package/dist/index269.js +10 -5
  330. package/dist/index269.js.map +1 -1
  331. package/dist/index270.js +10 -9
  332. package/dist/index270.js.map +1 -1
  333. package/dist/index271.js +11 -5
  334. package/dist/index271.js.map +1 -1
  335. package/dist/index272.js +11 -5
  336. package/dist/index272.js.map +1 -1
  337. package/dist/index273.js +10 -4
  338. package/dist/index273.js.map +1 -1
  339. package/dist/index274.js +7 -11
  340. package/dist/index274.js.map +1 -1
  341. package/dist/index275.js +6 -10
  342. package/dist/index275.js.map +1 -1
  343. package/dist/index276.js +5 -10
  344. package/dist/index276.js.map +1 -1
  345. package/dist/index277.js +6 -11
  346. package/dist/index277.js.map +1 -1
  347. package/dist/index278.js +6 -10
  348. package/dist/index278.js.map +1 -1
  349. package/dist/index279.js +6 -10
  350. package/dist/index279.js.map +1 -1
  351. package/dist/index280.js +55 -7
  352. package/dist/index280.js.map +1 -1
  353. package/dist/index281.js +19 -6
  354. package/dist/index281.js.map +1 -1
  355. package/dist/index282.js +28 -5
  356. package/dist/index282.js.map +1 -1
  357. package/dist/index283.js +16 -6
  358. package/dist/index283.js.map +1 -1
  359. package/dist/index284.js +23 -7
  360. package/dist/index284.js.map +1 -1
  361. package/dist/index285.js +16 -6
  362. package/dist/index285.js.map +1 -1
  363. package/dist/index286.js +7 -55
  364. package/dist/index286.js.map +1 -1
  365. package/dist/index287.js +10 -23
  366. package/dist/index287.js.map +1 -1
  367. package/dist/index288.js +9 -15
  368. package/dist/index288.js.map +1 -1
  369. package/dist/index289.js +21 -7
  370. package/dist/index289.js.map +1 -1
  371. package/dist/index29.js +1 -1
  372. package/dist/index290.js +10 -10
  373. package/dist/index290.js.map +1 -1
  374. package/dist/index291.js +9 -10
  375. package/dist/index291.js.map +1 -1
  376. package/dist/index292.js +9 -21
  377. package/dist/index292.js.map +1 -1
  378. package/dist/index293.js +4 -10
  379. package/dist/index293.js.map +1 -1
  380. package/dist/index294.js +5 -9
  381. package/dist/index294.js.map +1 -1
  382. package/dist/index295.js +16 -9
  383. package/dist/index295.js.map +1 -1
  384. package/dist/index296.js +9 -4
  385. package/dist/index296.js.map +1 -1
  386. package/dist/index297.js +18 -5
  387. package/dist/index297.js.map +1 -1
  388. package/dist/index298.js +15 -16
  389. package/dist/index298.js.map +1 -1
  390. package/dist/index299.js +12 -9
  391. package/dist/index299.js.map +1 -1
  392. package/dist/index30.js +14 -14
  393. package/dist/index300.js +29 -18
  394. package/dist/index300.js.map +1 -1
  395. package/dist/index301.js +12 -15
  396. package/dist/index301.js.map +1 -1
  397. package/dist/index302.js +25 -12
  398. package/dist/index302.js.map +1 -1
  399. package/dist/index303.js +5 -29
  400. package/dist/index303.js.map +1 -1
  401. package/dist/index304.js +62 -10
  402. package/dist/index304.js.map +1 -1
  403. package/dist/index305.js +48 -25
  404. package/dist/index305.js.map +1 -1
  405. package/dist/index306.js +39 -5
  406. package/dist/index306.js.map +1 -1
  407. package/dist/index307.js +98 -65
  408. package/dist/index307.js.map +1 -1
  409. package/dist/index308.js +94 -177
  410. package/dist/index308.js.map +1 -1
  411. package/dist/index309.js +98 -45
  412. package/dist/index309.js.map +1 -1
  413. package/dist/index31.js +3 -3
  414. package/dist/index310.js +2 -5
  415. package/dist/index310.js.map +1 -1
  416. package/dist/index311.js +2 -3
  417. package/dist/index311.js.map +1 -1
  418. package/dist/index312.js +5 -24
  419. package/dist/index312.js.map +1 -1
  420. package/dist/index313.js +3 -113
  421. package/dist/index313.js.map +1 -1
  422. package/dist/index314.js +23 -15
  423. package/dist/index314.js.map +1 -1
  424. package/dist/index315.js +107 -519
  425. package/dist/index315.js.map +1 -1
  426. package/dist/index316.js +14 -126
  427. package/dist/index316.js.map +1 -1
  428. package/dist/index317.js +516 -125
  429. package/dist/index317.js.map +1 -1
  430. package/dist/index318.js +128 -2
  431. package/dist/index318.js.map +1 -1
  432. package/dist/index319.js +134 -2
  433. package/dist/index319.js.map +1 -1
  434. package/dist/index32.js +2 -2
  435. package/dist/index320.js +1 -1
  436. package/dist/index325.js +2 -2
  437. package/dist/index326.js +1 -1
  438. package/dist/index33.js +1 -1
  439. package/dist/index336.js +2 -2
  440. package/dist/index339.js +1 -1
  441. package/dist/index34.js +1 -1
  442. package/dist/index340.js +2 -2
  443. package/dist/index342.js +1 -1
  444. package/dist/index343.js +1 -1
  445. package/dist/index344.js +1 -1
  446. package/dist/index345.js +1 -1
  447. package/dist/index35.js +1 -1
  448. package/dist/index355.js +11 -21
  449. package/dist/index355.js.map +1 -1
  450. package/dist/index356.js +26 -11
  451. package/dist/index356.js.map +1 -1
  452. package/dist/index357.js +4 -27
  453. package/dist/index357.js.map +1 -1
  454. package/dist/index358.js +22 -4
  455. package/dist/index358.js.map +1 -1
  456. package/dist/index36.js +1 -1
  457. package/dist/index39.js +2 -2
  458. package/dist/index40.js +24 -24
  459. package/dist/index42.js +1 -1
  460. package/dist/index50.js +2 -2
  461. package/dist/index55.js +1 -1
  462. package/dist/index56.js +1 -1
  463. package/dist/index59.js +1 -1
  464. package/dist/index66.js +4 -4
  465. package/dist/index68.js +1 -1
  466. package/dist/index77.js +1 -1
  467. package/dist/index78.js +53 -11
  468. package/dist/index78.js.map +1 -1
  469. package/dist/index79.js +1 -1
  470. package/dist/index80.js +2 -2
  471. package/dist/index81.js +2 -2
  472. package/dist/index82.js +12 -2
  473. package/dist/index82.js.map +1 -1
  474. package/dist/index83.js +2 -2
  475. package/dist/index84.js +2 -47
  476. package/dist/index84.js.map +1 -1
  477. package/dist/index85.js +41 -200
  478. package/dist/index85.js.map +1 -1
  479. package/dist/index86.js +204 -20
  480. package/dist/index86.js.map +1 -1
  481. package/dist/index87.js +22 -25
  482. package/dist/index87.js.map +1 -1
  483. package/dist/index88.js +23 -398
  484. package/dist/index88.js.map +1 -1
  485. package/dist/index89.js +392 -39
  486. package/dist/index89.js.map +1 -1
  487. package/dist/index90.js +44 -51
  488. package/dist/index90.js.map +1 -1
  489. package/dist/index91.js +605 -3
  490. package/dist/index91.js.map +1 -1
  491. package/dist/index92.js +5 -33
  492. package/dist/index92.js.map +1 -1
  493. package/dist/index93.js +65 -246
  494. package/dist/index93.js.map +1 -1
  495. package/dist/index94.js +2 -115
  496. package/dist/index94.js.map +1 -1
  497. package/dist/index95.js +359 -215
  498. package/dist/index95.js.map +1 -1
  499. package/dist/index96.js +257 -62
  500. package/dist/index96.js.map +1 -1
  501. package/dist/index97.js +58 -18
  502. package/dist/index97.js.map +1 -1
  503. package/dist/index98.js +44 -207
  504. package/dist/index98.js.map +1 -1
  505. package/dist/index99.js +159 -309
  506. package/dist/index99.js.map +1 -1
  507. package/package.json +1 -1
@@ -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 { 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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"}
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 value: string | null\n onChange: (value: string | null) => void\n options: HoursPickerOption[]\n placeholder?: string\n autoComplete?: React.InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"]\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: 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 value,\n onChange,\n options,\n placeholder = \"Select time\",\n autoComplete,\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n autoScroll = \"firstEnabledWithContext\",\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HoursPickerInputProps) {\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\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 React.useEffect(() => {\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 }, [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])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n useIsomorphicLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n if (!autoScroll) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target =\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, open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HoursPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onChange={commitValue}\n options={options}\n autoComplete={autoComplete}\n disabled={disabled}\n readOnly={readOnly}\n open={open}\n setOpen={setOpen}\n inputClassName={inputClassName}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n 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 </div>\n )\n}\n\nHoursPickerInput.displayName = \"HoursPickerInput\"\n\nexport type HoursPickerFieldProps = HoursPickerInputProps\n\nfunction HoursPickerSelectField({\n id,\n value,\n onChange,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n open,\n onOpenChange,\n autoScroll = \"firstEnabledWithContext\",\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HoursPickerFieldProps) {\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n onChange(next)\n },\n [onChange, options],\n )\n\n return (\n <div data-slot=\"hours-picker-field\" className={cn(\"w-[150px]\", className)}>\n <Select\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n value={value ?? \"\"}\n onValueChange={(next) => commitValue(next)}\n >\n <SelectTrigger\n id={id}\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 \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n )}\n >\n <SelectValue placeholder={placeholder} />\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 </div>\n )\n}\n\nexport function HoursPickerField(props: HoursPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HoursPickerSelectField {...props} />\n }\n\n return <HoursPickerInput {...props} />\n}\n\nHoursPickerField.displayName = \"HoursPickerField\"\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 readOnly?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n inputClassName?: string\n triggerTestId?: string\n isHydrated?: boolean\n highlightedValueRef: React.MutableRefObject<string | null>\n setHighlightedValue: (value: string | null) => void\n markKeyboardNavigation: () => void\n inputRef: (node: HTMLInputElement | null) => void\n 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 readOnly,\n open,\n setOpen,\n inputClassName,\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 \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n )\n\n return (\n <div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={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","onChange","placeholder","autoComplete","inputClassName","readOnly","openProp","onOpenChange","autoScroll","triggerTestId","contentTestId","isHydrated","reactId","triggerId","triggerInputRef","setTriggerDraftValueRef","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","useIsomorphicLayoutEffect","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","commitValue","matchingOption","handlePointerDown","event","target","container","trigger","isActive","observer","entries","entry","updateDesktopPopoverPosition","popover","rect","popoverHeight","viewportWidth","viewportHeight","padding","width","left","top","overflowBottom","aboveTop","rafId","raf","selected","targetTop","targetBottom","viewportBottom","all","lastDisabledBefore","el","offset","jsxs","HoursPickerMaskedSelectTrigger","node","DismissableLayerBranch","isChecked","Check","createPortal","HoursPickerSelectField","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","HoursPickerField","props","useIsTouchDevice","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,9 +1,8 @@
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);
1
+ import { DateLib as c } from "./index140.js";
2
+ function a(e, r, t) {
3
+ return (t ?? new c(r)).format(e, "cccc");
5
4
  }
6
5
  export {
7
- e as toTimeZone
6
+ a as labelWeekday
8
7
  };
9
8
  //# sourceMappingURL=index180.js.map
@@ -1 +1 @@
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]}
1
+ {"version":3,"file":"index180.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelWeekday.js"],"sourcesContent":["import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a weekday column header.\n *\n * @defaultValue `\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"`\n * @param date - The date representing the weekday.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the weekday column header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekday(date, options, dateLib) {\n return (dateLib ?? new DateLib(options)).format(date, \"cccc\");\n}\n"],"names":["labelWeekday","date","options","dateLib","DateLib"],"mappings":";AAYO,SAASA,EAAaC,GAAMC,GAASC,GAAS;AACjD,UAAQA,KAAW,IAAIC,EAAQF,CAAO,GAAG,OAAOD,GAAM,MAAM;AAChE;","x_google_ignoreList":[0]}
package/dist/index181.js CHANGED
@@ -1,27 +1,7 @@
1
- function o(e) {
2
- return !!(e && typeof e == "object" && "before" in e && "after" in e);
3
- }
4
- function t(e) {
5
- return !!(e && typeof e == "object" && "from" in e);
6
- }
7
- function r(e) {
8
- return !!(e && typeof e == "object" && "after" in e);
9
- }
10
- function f(e) {
11
- return !!(e && typeof e == "object" && "before" in e);
12
- }
13
- function i(e) {
14
- return !!(e && typeof e == "object" && "dayOfWeek" in e);
15
- }
16
- function y(e, n) {
17
- return Array.isArray(e) && e.every(n.isDate);
1
+ function o(e, n) {
2
+ return `Week ${e}`;
18
3
  }
19
4
  export {
20
- r as isDateAfterType,
21
- f as isDateBeforeType,
22
- o as isDateInterval,
23
- t as isDateRange,
24
- y as isDatesArray,
25
- i as isDayOfWeekType
5
+ o as labelWeekNumber
26
6
  };
27
7
  //# sourceMappingURL=index181.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index181.js","sources":["../../../node_modules/react-day-picker/dist/esm/utils/typeguards.js"],"sourcesContent":["/**\n * Checks if the given value is of type {@link DateInterval}.\n *\n * @param matcher - The value to check.\n * @returns `true` if the value is a {@link DateInterval}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateInterval(matcher) {\n return Boolean(matcher &&\n typeof matcher === \"object\" &&\n \"before\" in matcher &&\n \"after\" in matcher);\n}\n/**\n * Checks if the given value is of type {@link DateRange}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateRange}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateRange(value) {\n return Boolean(value && typeof value === \"object\" && \"from\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateAfter}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateAfter}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateAfterType(value) {\n return Boolean(value && typeof value === \"object\" && \"after\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateBefore}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateBefore}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateBeforeType(value) {\n return Boolean(value && typeof value === \"object\" && \"before\" in value);\n}\n/**\n * Checks if the given value is of type {@link DayOfWeek}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DayOfWeek}, otherwise `false`.\n * @group Utilities\n */\nexport function isDayOfWeekType(value) {\n return Boolean(value && typeof value === \"object\" && \"dayOfWeek\" in value);\n}\n/**\n * Checks if the given value is an array of valid dates.\n *\n * @private\n * @param value - The value to check.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the value is an array of valid dates, otherwise `false`.\n */\nexport function isDatesArray(value, dateLib) {\n return Array.isArray(value) && value.every(dateLib.isDate);\n}\n"],"names":["isDateInterval","matcher","isDateRange","value","isDateAfterType","isDateBeforeType","isDayOfWeekType","isDatesArray","dateLib"],"mappings":"AAOO,SAASA,EAAeC,GAAS;AACpC,SAAO,GAAQA,KACX,OAAOA,KAAY,YACnB,YAAYA,KACZ,WAAWA;AACnB;AAQO,SAASC,EAAYC,GAAO;AAC/B,SAAO,GAAQA,KAAS,OAAOA,KAAU,YAAY,UAAUA;AACnE;AAQO,SAASC,EAAgBD,GAAO;AACnC,SAAO,GAAQA,KAAS,OAAOA,KAAU,YAAY,WAAWA;AACpE;AAQO,SAASE,EAAiBF,GAAO;AACpC,SAAO,GAAQA,KAAS,OAAOA,KAAU,YAAY,YAAYA;AACrE;AAQO,SAASG,EAAgBH,GAAO;AACnC,SAAO,GAAQA,KAAS,OAAOA,KAAU,YAAY,eAAeA;AACxE;AASO,SAASI,EAAaJ,GAAOK,GAAS;AACzC,SAAO,MAAM,QAAQL,CAAK,KAAKA,EAAM,MAAMK,EAAQ,MAAM;AAC7D;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index181.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js"],"sourcesContent":["/**\n * Generates the ARIA label for the week number cell (the first cell in a row).\n *\n * @defaultValue `Week ${weekNumber}`\n * @param weekNumber - The number of the week.\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number cell.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumber(weekNumber, _options) {\n return `Week ${weekNumber}`;\n}\n"],"names":["labelWeekNumber","weekNumber","_options"],"mappings":"AAUO,SAASA,EAAgBC,GAAYC,GAAU;AAClD,SAAO,QAAQD,CAAU;AAC7B;","x_google_ignoreList":[0]}
package/dist/index182.js CHANGED
@@ -1,38 +1,7 @@
1
- import { enUS as f } from "./index322.js";
2
- import { formatDate as n } from "./index286.js";
3
- const s = {
4
- ...f,
5
- labels: {
6
- labelDayButton: (a, r, o, e) => {
7
- let t;
8
- e && typeof e.format == "function" ? t = e.format.bind(e) : t = (m, c) => n(m, c, { locale: f, ...o });
9
- let l = t(a, "PPPP");
10
- return r.today && (l = `Today, ${l}`), r.selected && (l = `${l}, selected`), l;
11
- },
12
- labelMonthDropdown: "Choose the Month",
13
- labelNext: "Go to the Next Month",
14
- labelPrevious: "Go to the Previous Month",
15
- labelWeekNumber: (a) => `Week ${a}`,
16
- labelYearDropdown: "Choose the Year",
17
- labelGrid: (a, r, o) => {
18
- let e;
19
- return o && typeof o.format == "function" ? e = o.format.bind(o) : e = (t, l) => n(t, l, { locale: f, ...r }), e(a, "LLLL yyyy");
20
- },
21
- labelGridcell: (a, r, o, e) => {
22
- let t;
23
- e && typeof e.format == "function" ? t = e.format.bind(e) : t = (m, c) => n(m, c, { locale: f, ...o });
24
- let l = t(a, "PPPP");
25
- return r?.today && (l = `Today, ${l}`), l;
26
- },
27
- labelNav: "Navigation bar",
28
- labelWeekNumberHeader: "Week Number",
29
- labelWeekday: (a, r, o) => {
30
- let e;
31
- return o && typeof o.format == "function" ? e = o.format.bind(o) : e = (t, l) => n(t, l, { locale: f, ...r }), e(a, "cccc");
32
- }
33
- }
34
- };
1
+ function r(e) {
2
+ return "Week Number";
3
+ }
35
4
  export {
36
- s as enUS
5
+ r as labelWeekNumberHeader
37
6
  };
38
7
  //# sourceMappingURL=index182.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index182.js","sources":["../../../node_modules/react-day-picker/dist/esm/locale/en-US.js"],"sourcesContent":["import { format } from \"date-fns\";\nimport { enUS as dateFnsEnUS } from \"date-fns/locale\";\n/** English (United States) locale extended with DayPicker-specific translations. */\nexport const enUS = {\n ...dateFnsEnUS,\n labels: {\n labelDayButton: (date, modifiers, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n let label = formatDate(date, \"PPPP\");\n if (modifiers.today)\n label = `Today, ${label}`;\n if (modifiers.selected)\n label = `${label}, selected`;\n return label;\n },\n labelMonthDropdown: \"Choose the Month\",\n labelNext: \"Go to the Next Month\",\n labelPrevious: \"Go to the Previous Month\",\n labelWeekNumber: (weekNumber) => `Week ${weekNumber}`,\n labelYearDropdown: \"Choose the Year\",\n labelGrid: (date, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n return formatDate(date, \"LLLL yyyy\");\n },\n labelGridcell: (date, modifiers, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n let label = formatDate(date, \"PPPP\");\n if (modifiers?.today) {\n label = `Today, ${label}`;\n }\n return label;\n },\n labelNav: \"Navigation bar\",\n labelWeekNumberHeader: \"Week Number\",\n labelWeekday: (date, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n return formatDate(date, \"cccc\");\n },\n },\n};\n"],"names":["enUS","dateFnsEnUS","date","modifiers","options","dateLib","formatDate","d","pattern","format","label","weekNumber"],"mappings":";;AAGY,MAACA,IAAO;AAAA,EAChB,GAAGC;AAAAA,EACH,QAAQ;AAAA,IACJ,gBAAgB,CAACC,GAAMC,GAAWC,GAASC,MAAY;AACnD,UAAIC;AACJ,MAAID,KAAW,OAAOA,EAAQ,UAAW,aACrCC,IAAaD,EAAQ,OAAO,KAAKA,CAAO,IAGxCC,IAAa,CAACC,GAAGC,MAAYC,EAAOF,GAAGC,GAAS,EAAE,QAAQP,GAAa,GAAGG,EAAO,CAAE;AAEvF,UAAIM,IAAQJ,EAAWJ,GAAM,MAAM;AACnC,aAAIC,EAAU,UACVO,IAAQ,UAAUA,CAAK,KACvBP,EAAU,aACVO,IAAQ,GAAGA,CAAK,eACbA;AAAA,IACX;AAAA,IACA,oBAAoB;AAAA,IACpB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,iBAAiB,CAACC,MAAe,QAAQA,CAAU;AAAA,IACnD,mBAAmB;AAAA,IACnB,WAAW,CAACT,GAAME,GAASC,MAAY;AACnC,UAAIC;AACJ,aAAID,KAAW,OAAOA,EAAQ,UAAW,aACrCC,IAAaD,EAAQ,OAAO,KAAKA,CAAO,IAGxCC,IAAa,CAACC,GAAGC,MAAYC,EAAOF,GAAGC,GAAS,EAAE,QAAQP,GAAa,GAAGG,EAAO,CAAE,GAEhFE,EAAWJ,GAAM,WAAW;AAAA,IACvC;AAAA,IACA,eAAe,CAACA,GAAMC,GAAWC,GAASC,MAAY;AAClD,UAAIC;AACJ,MAAID,KAAW,OAAOA,EAAQ,UAAW,aACrCC,IAAaD,EAAQ,OAAO,KAAKA,CAAO,IAGxCC,IAAa,CAACC,GAAGC,MAAYC,EAAOF,GAAGC,GAAS,EAAE,QAAQP,GAAa,GAAGG,EAAO,CAAE;AAEvF,UAAIM,IAAQJ,EAAWJ,GAAM,MAAM;AACnC,aAAIC,GAAW,UACXO,IAAQ,UAAUA,CAAK,KAEpBA;AAAA,IACX;AAAA,IACA,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,cAAc,CAACR,GAAME,GAASC,MAAY;AACtC,UAAIC;AACJ,aAAID,KAAW,OAAOA,EAAQ,UAAW,aACrCC,IAAaD,EAAQ,OAAO,KAAKA,CAAO,IAGxCC,IAAa,CAACC,GAAGC,MAAYC,EAAOF,GAAGC,GAAS,EAAE,QAAQP,GAAa,GAAGG,EAAO,CAAE,GAEhFE,EAAWJ,GAAM,MAAM;AAAA,IAClC;AAAA,EACR;AACA;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index182.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js"],"sourcesContent":["/**\n * Generates the ARIA label for the week number header element.\n *\n * @defaultValue `\"Week Number\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumberHeader(_options) {\n return \"Week Number\";\n}\n"],"names":["labelWeekNumberHeader","_options"],"mappings":"AASO,SAASA,EAAsBC,GAAU;AAC5C,SAAO;AACX;","x_google_ignoreList":[0]}
package/dist/index183.js CHANGED
@@ -1,19 +1,7 @@
1
- import { formatCaption as t, formatMonthCaption as e } from "./index184.js";
2
- import { formatDay as a } from "./index185.js";
3
- import { formatMonthDropdown as p } from "./index186.js";
4
- import { formatWeekdayName as x } from "./index187.js";
5
- import { formatWeekNumber as i } from "./index188.js";
6
- import { formatWeekNumberHeader as C } from "./index189.js";
7
- import { formatYearCaption as N, formatYearDropdown as W } from "./index190.js";
1
+ function e(o) {
2
+ return "Choose the Year";
3
+ }
8
4
  export {
9
- t as formatCaption,
10
- a as formatDay,
11
- e as formatMonthCaption,
12
- p as formatMonthDropdown,
13
- i as formatWeekNumber,
14
- C as formatWeekNumberHeader,
15
- x as formatWeekdayName,
16
- N as formatYearCaption,
17
- W as formatYearDropdown
5
+ e as labelYearDropdown
18
6
  };
19
7
  //# sourceMappingURL=index183.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index183.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index183.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js"],"sourcesContent":["/**\n * Generates the ARIA label for the years dropdown.\n *\n * @defaultValue `\"Choose the Year\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the years dropdown.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelYearDropdown(_options) {\n return \"Choose the Year\";\n}\n"],"names":["labelYearDropdown","_options"],"mappings":"AASO,SAASA,EAAkBC,GAAU;AACxC,SAAO;AACX;","x_google_ignoreList":[0]}
package/dist/index184.js CHANGED
@@ -1,10 +1,7 @@
1
- import { DateLib as r } from "./index159.js";
2
- function a(t, o, n) {
3
- return (n ?? new r(o)).formatMonthYear(t);
1
+ function a(n, t) {
2
+ return new a.InputMask(n, t);
4
3
  }
5
- const f = a;
6
4
  export {
7
- a as formatCaption,
8
- f as formatMonthCaption
5
+ a as default
9
6
  };
10
7
  //# sourceMappingURL=index184.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index184.js","sources":["../../../node_modules/react-day-picker/dist/esm/formatters/formatCaption.js"],"sourcesContent":["import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the caption of the month.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param month The date representing the month.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n * instance is created.\n * @returns The formatted caption as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatCaption(month, options, dateLib) {\n const lib = dateLib ?? new DateLib(options);\n return lib.formatMonthYear(month);\n}\n/**\n * @private\n * @deprecated Use {@link formatCaption} instead.\n * @group Formatters\n */\nexport const formatMonthCaption = formatCaption;\n"],"names":["formatCaption","month","options","dateLib","DateLib","formatMonthCaption"],"mappings":";AAaO,SAASA,EAAcC,GAAOC,GAASC,GAAS;AAEnD,UADYA,KAAW,IAAIC,EAAQF,CAAO,GAC/B,gBAAgBD,CAAK;AACpC;AAMY,MAACI,IAAqBL;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index184.js","sources":["../../../node_modules/imask/esm/core/holder.js"],"sourcesContent":["/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n"],"names":["IMask","el","opts"],"mappings":"AACA,SAASA,EAAMC,GAAIC,GAAM;AAEvB,SAAO,IAAIF,EAAM,UAAUC,GAAIC,CAAI;AACrC;","x_google_ignoreList":[0]}
package/dist/index185.js CHANGED
@@ -1,8 +1,37 @@
1
- import { DateLib as a } from "./index159.js";
2
- function f(r, t, o) {
3
- return (o ?? new a(t)).format(r, "d");
1
+ import i from "./index184.js";
2
+ class s {
3
+ /** Inserted symbols */
4
+ /** Additional offset if any changes occurred before tail */
5
+ /** Raw inserted is used by dynamic mask */
6
+ /** Can skip chars */
7
+ static normalize(t) {
8
+ return Array.isArray(t) ? t : [t, new s()];
9
+ }
10
+ constructor(t) {
11
+ Object.assign(this, {
12
+ inserted: "",
13
+ rawInserted: "",
14
+ tailShift: 0,
15
+ skip: !1
16
+ }, t);
17
+ }
18
+ /** Aggregate changes */
19
+ aggregate(t) {
20
+ return this.inserted += t.inserted, this.rawInserted += t.rawInserted, this.tailShift += t.tailShift, this.skip = this.skip || t.skip, this;
21
+ }
22
+ /** Total offset considering all changes */
23
+ get offset() {
24
+ return this.tailShift + this.inserted.length;
25
+ }
26
+ get consumed() {
27
+ return !!this.rawInserted || this.skip;
28
+ }
29
+ equals(t) {
30
+ return this.inserted === t.inserted && this.tailShift === t.tailShift && this.rawInserted === t.rawInserted && this.skip === t.skip;
31
+ }
4
32
  }
33
+ i.ChangeDetails = s;
5
34
  export {
6
- f as formatDay
35
+ s as default
7
36
  };
8
37
  //# sourceMappingURL=index185.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index185.js","sources":["../../../node_modules/react-day-picker/dist/esm/formatters/formatDay.js"],"sourcesContent":["import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the day date shown in the day cell.\n *\n * @defaultValue `d` (e.g., \"1\").\n * @param date The date to format.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n * instance is created.\n * @returns The formatted day as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatDay(date, options, dateLib) {\n return (dateLib ?? new DateLib(options)).format(date, \"d\");\n}\n"],"names":["formatDay","date","options","dateLib","DateLib"],"mappings":";AAaO,SAASA,EAAUC,GAAMC,GAASC,GAAS;AAC9C,UAAQA,KAAW,IAAIC,EAAQF,CAAO,GAAG,OAAOD,GAAM,GAAG;AAC7D;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index185.js","sources":["../../../node_modules/imask/esm/core/change-details.js"],"sourcesContent":["import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n"],"names":["ChangeDetails","prep","details","IMask"],"mappings":";AAGA,MAAMA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EASlB,OAAO,UAAUC,GAAM;AACrB,WAAO,MAAM,QAAQA,CAAI,IAAIA,IAAO,CAACA,GAAM,IAAID,GAAe;AAAA,EAChE;AAAA,EACA,YAAYE,GAAS;AACnB,WAAO,OAAO,MAAM;AAAA,MAClB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,MACX,MAAM;AAAA,IACZ,GAAOA,CAAO;AAAA,EACZ;AAAA;AAAA,EAGA,UAAUA,GAAS;AACjB,gBAAK,YAAYA,EAAQ,UACzB,KAAK,eAAeA,EAAQ,aAC5B,KAAK,aAAaA,EAAQ,WAC1B,KAAK,OAAO,KAAK,QAAQA,EAAQ,MAC1B;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,KAAK,SAAS;AAAA,EACxC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,EAAQ,KAAK,eAAgB,KAAK;AAAA,EAC3C;AAAA,EACA,OAAOA,GAAS;AACd,WAAO,KAAK,aAAaA,EAAQ,YAAY,KAAK,cAAcA,EAAQ,aAAa,KAAK,gBAAgBA,EAAQ,eAAe,KAAK,SAASA,EAAQ;AAAA,EACzJ;AACF;AACAC,EAAM,gBAAgBH;","x_google_ignoreList":[0]}