@rpcbase/ui 0.170.0 → 0.171.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 (519) hide show
  1. package/dist/components/HourPickerField/index.d.ts.map +1 -1
  2. package/dist/index10.js +1 -1
  3. package/dist/index100.js +4 -5
  4. package/dist/index100.js.map +1 -1
  5. package/dist/index101.js +6 -4
  6. package/dist/index101.js.map +1 -1
  7. package/dist/index102.js +145 -5
  8. package/dist/index102.js.map +1 -1
  9. package/dist/index103.js +39 -4
  10. package/dist/index103.js.map +1 -1
  11. package/dist/index104.js +4 -8
  12. package/dist/index104.js.map +1 -1
  13. package/dist/index105.js +7 -5
  14. package/dist/index105.js.map +1 -1
  15. package/dist/index106.js +13 -4
  16. package/dist/index106.js.map +1 -1
  17. package/dist/index107.js +13 -4
  18. package/dist/index107.js.map +1 -1
  19. package/dist/index108.js +7 -6
  20. package/dist/index108.js.map +1 -1
  21. package/dist/index109.js +31 -145
  22. package/dist/index109.js.map +1 -1
  23. package/dist/index11.js +3 -3
  24. package/dist/index110.js +10 -39
  25. package/dist/index110.js.map +1 -1
  26. package/dist/index111.js +10 -4
  27. package/dist/index111.js.map +1 -1
  28. package/dist/index112.js +8 -7
  29. package/dist/index112.js.map +1 -1
  30. package/dist/index113.js +13 -13
  31. package/dist/index113.js.map +1 -1
  32. package/dist/index114.js +101 -13
  33. package/dist/index114.js.map +1 -1
  34. package/dist/index115.js +20 -8
  35. package/dist/index115.js.map +1 -1
  36. package/dist/index116.js +53 -31
  37. package/dist/index116.js.map +1 -1
  38. package/dist/index117.js +72 -10
  39. package/dist/index117.js.map +1 -1
  40. package/dist/index118.js +9 -10
  41. package/dist/index118.js.map +1 -1
  42. package/dist/index119.js +20 -8
  43. package/dist/index119.js.map +1 -1
  44. package/dist/index12.js +1 -1
  45. package/dist/index120.js +16 -13
  46. package/dist/index120.js.map +1 -1
  47. package/dist/index121.js +23 -101
  48. package/dist/index121.js.map +1 -1
  49. package/dist/index122.js +7 -20
  50. package/dist/index122.js.map +1 -1
  51. package/dist/index123.js +5 -53
  52. package/dist/index123.js.map +1 -1
  53. package/dist/index124.js +23 -72
  54. package/dist/index124.js.map +1 -1
  55. package/dist/index125.js +35 -10
  56. package/dist/index125.js.map +1 -1
  57. package/dist/index126.js +16 -21
  58. package/dist/index126.js.map +1 -1
  59. package/dist/index127.js +6 -16
  60. package/dist/index127.js.map +1 -1
  61. package/dist/index128.js +4 -23
  62. package/dist/index128.js.map +1 -1
  63. package/dist/index129.js +4 -6
  64. package/dist/index129.js.map +1 -1
  65. package/dist/index13.js +2 -2
  66. package/dist/index130.js +4 -5
  67. package/dist/index130.js.map +1 -1
  68. package/dist/index131.js +4 -23
  69. package/dist/index131.js.map +1 -1
  70. package/dist/index132.js +4 -35
  71. package/dist/index132.js.map +1 -1
  72. package/dist/index133.js +7 -16
  73. package/dist/index133.js.map +1 -1
  74. package/dist/index134.js +24 -7
  75. package/dist/index134.js.map +1 -1
  76. package/dist/index135.js +7 -4
  77. package/dist/index135.js.map +1 -1
  78. package/dist/index136.js +6 -4
  79. package/dist/index136.js.map +1 -1
  80. package/dist/index137.js +5 -4
  81. package/dist/index137.js.map +1 -1
  82. package/dist/index138.js +3 -4
  83. package/dist/index138.js.map +1 -1
  84. package/dist/index139.js +1 -1
  85. package/dist/index139.js.map +1 -1
  86. package/dist/index14.js +4 -4
  87. package/dist/index140.js +4 -6
  88. package/dist/index140.js.map +1 -1
  89. package/dist/index141.js +4 -24
  90. package/dist/index141.js.map +1 -1
  91. package/dist/index142.js +4 -7
  92. package/dist/index142.js.map +1 -1
  93. package/dist/index143.js +3 -6
  94. package/dist/index143.js.map +1 -1
  95. package/dist/index144.js +3 -5
  96. package/dist/index144.js.map +1 -1
  97. package/dist/index145.js +3 -3
  98. package/dist/index145.js.map +1 -1
  99. package/dist/index146.js +46 -3
  100. package/dist/index146.js.map +1 -1
  101. package/dist/index147.js +46 -4
  102. package/dist/index147.js.map +1 -1
  103. package/dist/index148.js +205 -3
  104. package/dist/index148.js.map +1 -1
  105. package/dist/index149.js +22 -5
  106. package/dist/index149.js.map +1 -1
  107. package/dist/index15.js +1 -1
  108. package/dist/index150.js +24 -3
  109. package/dist/index150.js.map +1 -1
  110. package/dist/index151.js +399 -3
  111. package/dist/index151.js.map +1 -1
  112. package/dist/index152.js +605 -3
  113. package/dist/index152.js.map +1 -1
  114. package/dist/index16.js +1 -1
  115. package/dist/index17.js +1 -1
  116. package/dist/index174.js +16 -24
  117. package/dist/index174.js.map +1 -1
  118. package/dist/index175.js +6 -29
  119. package/dist/index175.js.map +1 -1
  120. package/dist/index176.js +6 -5
  121. package/dist/index176.js.map +1 -1
  122. package/dist/index177.js +58 -67
  123. package/dist/index177.js.map +1 -1
  124. package/dist/index178.js +62 -176
  125. package/dist/index178.js.map +1 -1
  126. package/dist/index179.js +6 -46
  127. package/dist/index179.js.map +1 -1
  128. package/dist/index18.js +188 -181
  129. package/dist/index18.js.map +1 -1
  130. package/dist/index180.js +4 -58
  131. package/dist/index180.js.map +1 -1
  132. package/dist/index181.js +7 -8
  133. package/dist/index181.js.map +1 -1
  134. package/dist/index182.js +17 -66
  135. package/dist/index182.js.map +1 -1
  136. package/dist/index183.js +5 -19
  137. package/dist/index183.js.map +1 -1
  138. package/dist/index184.js +5 -16
  139. package/dist/index184.js.map +1 -1
  140. package/dist/index185.js +13 -5
  141. package/dist/index185.js.map +1 -1
  142. package/dist/index186.js +10 -5
  143. package/dist/index186.js.map +1 -1
  144. package/dist/index187.js +14 -6
  145. package/dist/index187.js.map +1 -1
  146. package/dist/index188.js +14 -4
  147. package/dist/index188.js.map +1 -1
  148. package/dist/index189.js +5 -7
  149. package/dist/index189.js.map +1 -1
  150. package/dist/index19.js +7 -7
  151. package/dist/index190.js +6 -17
  152. package/dist/index190.js.map +1 -1
  153. package/dist/index191.js +7 -5
  154. package/dist/index191.js.map +1 -1
  155. package/dist/index192.js +6 -5
  156. package/dist/index192.js.map +1 -1
  157. package/dist/index193.js +8 -12
  158. package/dist/index193.js.map +1 -1
  159. package/dist/index194.js +5 -10
  160. package/dist/index194.js.map +1 -1
  161. package/dist/index195.js +5 -14
  162. package/dist/index195.js.map +1 -1
  163. package/dist/index196.js +9 -14
  164. package/dist/index196.js.map +1 -1
  165. package/dist/index197.js +4 -4
  166. package/dist/index197.js.map +1 -1
  167. package/dist/index198.js +5 -6
  168. package/dist/index198.js.map +1 -1
  169. package/dist/index199.js +4 -7
  170. package/dist/index199.js.map +1 -1
  171. package/dist/index20.js +2 -2
  172. package/dist/index200.js +10 -5
  173. package/dist/index200.js.map +1 -1
  174. package/dist/index201.js +10 -9
  175. package/dist/index201.js.map +1 -1
  176. package/dist/index202.js +10 -5
  177. package/dist/index202.js.map +1 -1
  178. package/dist/index203.js +11 -5
  179. package/dist/index203.js.map +1 -1
  180. package/dist/index204.js +11 -9
  181. package/dist/index204.js.map +1 -1
  182. package/dist/index205.js +10 -5
  183. package/dist/index205.js.map +1 -1
  184. package/dist/index206.js +7 -5
  185. package/dist/index206.js.map +1 -1
  186. package/dist/index207.js +6 -4
  187. package/dist/index207.js.map +1 -1
  188. package/dist/index208.js +5 -11
  189. package/dist/index208.js.map +1 -1
  190. package/dist/index209.js +6 -10
  191. package/dist/index209.js.map +1 -1
  192. package/dist/index21.js +1 -1
  193. package/dist/index210.js +7 -10
  194. package/dist/index210.js.map +1 -1
  195. package/dist/index211.js +6 -11
  196. package/dist/index211.js.map +1 -1
  197. package/dist/index212.js +55 -11
  198. package/dist/index212.js.map +1 -1
  199. package/dist/index213.js +8 -10
  200. package/dist/index213.js.map +1 -1
  201. package/dist/index214.js +19 -7
  202. package/dist/index214.js.map +1 -1
  203. package/dist/index215.js +23 -6
  204. package/dist/index215.js.map +1 -1
  205. package/dist/index216.js +16 -5
  206. package/dist/index216.js.map +1 -1
  207. package/dist/index217.js +7 -6
  208. package/dist/index217.js.map +1 -1
  209. package/dist/index218.js +10 -7
  210. package/dist/index218.js.map +1 -1
  211. package/dist/index219.js +10 -6
  212. package/dist/index219.js.map +1 -1
  213. package/dist/index22.js +1 -1
  214. package/dist/index220.js +20 -54
  215. package/dist/index220.js.map +1 -1
  216. package/dist/index221.js +10 -23
  217. package/dist/index221.js.map +1 -1
  218. package/dist/index222.js +9 -16
  219. package/dist/index222.js.map +1 -1
  220. package/dist/index223.js +9 -7
  221. package/dist/index223.js.map +1 -1
  222. package/dist/index224.js +4 -10
  223. package/dist/index224.js.map +1 -1
  224. package/dist/index225.js +5 -10
  225. package/dist/index225.js.map +1 -1
  226. package/dist/index226.js +16 -21
  227. package/dist/index226.js.map +1 -1
  228. package/dist/index227.js +9 -10
  229. package/dist/index227.js.map +1 -1
  230. package/dist/index228.js +18 -9
  231. package/dist/index228.js.map +1 -1
  232. package/dist/index229.js +15 -9
  233. package/dist/index229.js.map +1 -1
  234. package/dist/index23.js +1 -1
  235. package/dist/index230.js +12 -4
  236. package/dist/index230.js.map +1 -1
  237. package/dist/index231.js +29 -5
  238. package/dist/index231.js.map +1 -1
  239. package/dist/index232.js +11 -15
  240. package/dist/index232.js.map +1 -1
  241. package/dist/index233.js +25 -9
  242. package/dist/index233.js.map +1 -1
  243. package/dist/index234.js +5 -18
  244. package/dist/index234.js.map +1 -1
  245. package/dist/index235.js +24 -15
  246. package/dist/index235.js.map +1 -1
  247. package/dist/index236.js +29 -13
  248. package/dist/index236.js.map +1 -1
  249. package/dist/index237.js +5 -30
  250. package/dist/index237.js.map +1 -1
  251. package/dist/index238.js +67 -12
  252. package/dist/index238.js.map +1 -1
  253. package/dist/index239.js +178 -23
  254. package/dist/index239.js.map +1 -1
  255. package/dist/index24.js +1 -1
  256. package/dist/index240.js +46 -5
  257. package/dist/index240.js.map +1 -1
  258. package/dist/index244.js +1 -1
  259. package/dist/index245.js +1 -1
  260. package/dist/index248.js +2 -2
  261. package/dist/index251.js +1 -1
  262. package/dist/index255.js +3 -116
  263. package/dist/index255.js.map +1 -1
  264. package/dist/index256.js +9 -17
  265. package/dist/index256.js.map +1 -1
  266. package/dist/index257.js +114 -13
  267. package/dist/index257.js.map +1 -1
  268. package/dist/index258.js +17 -3
  269. package/dist/index258.js.map +1 -1
  270. package/dist/index259.js +12 -33
  271. package/dist/index259.js.map +1 -1
  272. package/dist/index260.js +35 -19
  273. package/dist/index260.js.map +1 -1
  274. package/dist/index261.js +20 -9
  275. package/dist/index261.js.map +1 -1
  276. package/dist/index263.js +2 -2
  277. package/dist/index266.js +5 -5
  278. package/dist/index266.js.map +1 -1
  279. package/dist/index267.js +19 -3
  280. package/dist/index267.js.map +1 -1
  281. package/dist/index268.js +12 -23
  282. package/dist/index268.js.map +1 -1
  283. package/dist/index269.js +5 -113
  284. package/dist/index269.js.map +1 -1
  285. package/dist/index27.js +37 -3
  286. package/dist/index27.js.map +1 -1
  287. package/dist/index270.js +3 -16
  288. package/dist/index270.js.map +1 -1
  289. package/dist/index271.js +21 -522
  290. package/dist/index271.js.map +1 -1
  291. package/dist/index272.js +112 -127
  292. package/dist/index272.js.map +1 -1
  293. package/dist/index273.js +15 -133
  294. package/dist/index273.js.map +1 -1
  295. package/dist/index274.js +524 -4
  296. package/dist/index274.js.map +1 -1
  297. package/dist/index275.js +127 -18
  298. package/dist/index275.js.map +1 -1
  299. package/dist/index276.js +133 -12
  300. package/dist/index276.js.map +1 -1
  301. package/dist/index278.js +5 -64
  302. package/dist/index278.js.map +1 -1
  303. package/dist/index279.js +6 -69
  304. package/dist/index279.js.map +1 -1
  305. package/dist/index28.js +3 -125
  306. package/dist/index28.js.map +1 -1
  307. package/dist/index280.js +4 -9
  308. package/dist/index280.js.map +1 -1
  309. package/dist/index281.js +16 -14
  310. package/dist/index281.js.map +1 -1
  311. package/dist/index282.js +8 -65
  312. package/dist/index282.js.map +1 -1
  313. package/dist/index283.js +5 -5
  314. package/dist/index283.js.map +1 -1
  315. package/dist/index284.js +4 -5
  316. package/dist/index284.js.map +1 -1
  317. package/dist/index285.js +546 -4
  318. package/dist/index285.js.map +1 -1
  319. package/dist/index286.js +47 -16
  320. package/dist/index286.js.map +1 -1
  321. package/dist/index287.js +17 -8
  322. package/dist/index287.js.map +1 -1
  323. package/dist/index288.js +6 -5
  324. package/dist/index288.js.map +1 -1
  325. package/dist/index289.js +8 -4
  326. package/dist/index289.js.map +1 -1
  327. package/dist/index29.js +120 -227
  328. package/dist/index29.js.map +1 -1
  329. package/dist/index290.js +7 -545
  330. package/dist/index290.js.map +1 -1
  331. package/dist/index291.js +9 -47
  332. package/dist/index291.js.map +1 -1
  333. package/dist/index292.js +12 -17
  334. package/dist/index292.js.map +1 -1
  335. package/dist/index293.js +9 -6
  336. package/dist/index293.js.map +1 -1
  337. package/dist/index294.js +13 -8
  338. package/dist/index294.js.map +1 -1
  339. package/dist/index295.js +69 -8
  340. package/dist/index295.js.map +1 -1
  341. package/dist/index296.js +9 -9
  342. package/dist/index296.js.map +1 -1
  343. package/dist/index297.js +14 -13
  344. package/dist/index297.js.map +1 -1
  345. package/dist/index298.js +66 -10
  346. package/dist/index298.js.map +1 -1
  347. package/dist/index299.js +64 -13
  348. package/dist/index299.js.map +1 -1
  349. package/dist/index30.js +230 -49
  350. package/dist/index30.js.map +1 -1
  351. package/dist/index300.js +4 -3
  352. package/dist/index300.js.map +1 -1
  353. package/dist/index301.js +56 -23
  354. package/dist/index301.js.map +1 -1
  355. package/dist/index302.js +68 -5
  356. package/dist/index302.js.map +1 -1
  357. package/dist/index303.js +30 -55
  358. package/dist/index303.js.map +1 -1
  359. package/dist/index304.js +9 -68
  360. package/dist/index304.js.map +1 -1
  361. package/dist/index305.js +148 -26
  362. package/dist/index305.js.map +1 -1
  363. package/dist/index306.js +108 -9
  364. package/dist/index306.js.map +1 -1
  365. package/dist/index307.js +4 -153
  366. package/dist/index307.js.map +1 -1
  367. package/dist/index308.js +23 -108
  368. package/dist/index308.js.map +1 -1
  369. package/dist/index309.js +15 -22
  370. package/dist/index309.js.map +1 -1
  371. package/dist/index31.js +50 -2640
  372. package/dist/index31.js.map +1 -1
  373. package/dist/index310.js +28 -12
  374. package/dist/index310.js.map +1 -1
  375. package/dist/index311.js +12 -27
  376. package/dist/index311.js.map +1 -1
  377. package/dist/index312.js +7 -5
  378. package/dist/index312.js.map +1 -1
  379. package/dist/index313.js +22 -15
  380. package/dist/index313.js.map +1 -1
  381. package/dist/index314.js +12 -28
  382. package/dist/index314.js.map +1 -1
  383. package/dist/index315.js +27 -12
  384. package/dist/index315.js.map +1 -1
  385. package/dist/index316.js +5 -7
  386. package/dist/index316.js.map +1 -1
  387. package/dist/index32.js +2598 -351
  388. package/dist/index32.js.map +1 -1
  389. package/dist/index33.js +375 -214
  390. package/dist/index33.js.map +1 -1
  391. package/dist/index34.js +230 -19
  392. package/dist/index34.js.map +1 -1
  393. package/dist/index35.js +18 -138
  394. package/dist/index35.js.map +1 -1
  395. package/dist/index36.js +125 -170
  396. package/dist/index36.js.map +1 -1
  397. package/dist/index37.js +174 -64
  398. package/dist/index37.js.map +1 -1
  399. package/dist/index38.js +74 -88
  400. package/dist/index38.js.map +1 -1
  401. package/dist/index39.js +90 -5
  402. package/dist/index39.js.map +1 -1
  403. package/dist/index40.js +5 -843
  404. package/dist/index40.js.map +1 -1
  405. package/dist/index41.js +832 -54
  406. package/dist/index41.js.map +1 -1
  407. package/dist/index42.js +66 -37
  408. package/dist/index42.js.map +1 -1
  409. package/dist/index45.js +1 -1
  410. package/dist/index46.js +1 -1
  411. package/dist/index47.js +8 -8
  412. package/dist/index48.js +6 -3
  413. package/dist/index48.js.map +1 -1
  414. package/dist/index49.js +33 -6
  415. package/dist/index49.js.map +1 -1
  416. package/dist/index5.js +1 -1
  417. package/dist/index50.js +25 -46
  418. package/dist/index50.js.map +1 -1
  419. package/dist/index51.js +7 -26
  420. package/dist/index51.js.map +1 -1
  421. package/dist/index52.js +10 -49
  422. package/dist/index52.js.map +1 -1
  423. package/dist/index53.js +3 -7
  424. package/dist/index53.js.map +1 -1
  425. package/dist/index54.js +47 -14
  426. package/dist/index54.js.map +1 -1
  427. package/dist/index55.js +47 -130
  428. package/dist/index55.js.map +1 -1
  429. package/dist/index56.js +7 -10
  430. package/dist/index56.js.map +1 -1
  431. package/dist/index57.js +13 -215
  432. package/dist/index57.js.map +1 -1
  433. package/dist/index58.js +133 -12
  434. package/dist/index58.js.map +1 -1
  435. package/dist/index59.js +10 -33
  436. package/dist/index59.js.map +1 -1
  437. package/dist/index60.js +214 -44
  438. package/dist/index60.js.map +1 -1
  439. package/dist/index61.js +13 -8
  440. package/dist/index61.js.map +1 -1
  441. package/dist/index62.js +44 -47
  442. package/dist/index62.js.map +1 -1
  443. package/dist/index63.js +50 -4
  444. package/dist/index63.js.map +1 -1
  445. package/dist/index64.js +4 -6
  446. package/dist/index64.js.map +1 -1
  447. package/dist/index65.js +6 -28
  448. package/dist/index65.js.map +1 -1
  449. package/dist/index66.js +28 -50
  450. package/dist/index66.js.map +1 -1
  451. package/dist/index67.js +50 -9
  452. package/dist/index67.js.map +1 -1
  453. package/dist/index68.js +8 -11
  454. package/dist/index68.js.map +1 -1
  455. package/dist/index69.js +5 -53
  456. package/dist/index69.js.map +1 -1
  457. package/dist/index70.js +8 -2
  458. package/dist/index70.js.map +1 -1
  459. package/dist/index71.js +6 -2
  460. package/dist/index71.js.map +1 -1
  461. package/dist/index72.js +2 -6
  462. package/dist/index72.js.map +1 -1
  463. package/dist/index73.js +2 -8
  464. package/dist/index73.js.map +1 -1
  465. package/dist/index74.js +53 -5
  466. package/dist/index74.js.map +1 -1
  467. package/dist/index75.js +52 -47
  468. package/dist/index75.js.map +1 -1
  469. package/dist/index76.js +4 -205
  470. package/dist/index76.js.map +1 -1
  471. package/dist/index77.js +5 -22
  472. package/dist/index77.js.map +1 -1
  473. package/dist/index78.js +15 -24
  474. package/dist/index78.js.map +1 -1
  475. package/dist/index79.js +5 -399
  476. package/dist/index79.js.map +1 -1
  477. package/dist/index8.js +1 -1
  478. package/dist/index80.js +7 -46
  479. package/dist/index80.js.map +1 -1
  480. package/dist/index81.js +15 -604
  481. package/dist/index81.js.map +1 -1
  482. package/dist/index82.js +5 -52
  483. package/dist/index82.js.map +1 -1
  484. package/dist/index83.js +4 -4
  485. package/dist/index83.js.map +1 -1
  486. package/dist/index84.js +5 -4
  487. package/dist/index84.js.map +1 -1
  488. package/dist/index85.js +5 -15
  489. package/dist/index85.js.map +1 -1
  490. package/dist/index86.js +3 -4
  491. package/dist/index86.js.map +1 -1
  492. package/dist/index87.js +3 -6
  493. package/dist/index87.js.map +1 -1
  494. package/dist/index88.js +5 -15
  495. package/dist/index88.js.map +1 -1
  496. package/dist/index89.js +24 -4
  497. package/dist/index89.js.map +1 -1
  498. package/dist/index9.js +1 -1
  499. package/dist/index90.js +6 -4
  500. package/dist/index90.js.map +1 -1
  501. package/dist/index91.js +4 -5
  502. package/dist/index91.js.map +1 -1
  503. package/dist/index92.js +6 -5
  504. package/dist/index92.js.map +1 -1
  505. package/dist/index93.js +4 -3
  506. package/dist/index93.js.map +1 -1
  507. package/dist/index94.js +4 -4
  508. package/dist/index94.js.map +1 -1
  509. package/dist/index95.js +5 -6
  510. package/dist/index95.js.map +1 -1
  511. package/dist/index96.js +4 -24
  512. package/dist/index96.js.map +1 -1
  513. package/dist/index97.js +8 -6
  514. package/dist/index97.js.map +1 -1
  515. package/dist/index98.js +5 -4
  516. package/dist/index98.js.map +1 -1
  517. package/dist/index99.js +4 -6
  518. package/dist/index99.js.map +1 -1
  519. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index18.js","sources":["../src/components/HourPickerField/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\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/Select\"\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n 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: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.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 HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const 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 updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n return\n }\n\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n return\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const 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\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n 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\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n 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 <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </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\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n 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={\"firstEnabledWithContext\"}\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 HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n 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 HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\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}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n\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 ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n 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={\"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 onCommit(null)\n }\n }}\n onComplete={(completed) => {\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(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 onCommit(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 onCommit(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":["imaskAny","IMask","InputMask","pad2","value","parseTimeInput","raw","trimmed","match","hours","minutes","parseTimeInputWithSelectableOption","options","parsed","parsedOption","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","bestMinutes","optionMinutes","diff","HourPickerScrollButton","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","HourPickerInput","id","onChange","onValueUpdate","placeholder","inputClassName","readOnly","openProp","onOpenChange","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","updateValue","matchingOption","commitValue","handlePointerDown","event","target","container","popover","handleWheel","deltaY","maxScrollTop","atTop","atBottom","nextScrollTop","trigger","isActive","observer","entries","entry","updateDesktopPopoverPosition","rect","popoverHeight","viewportWidth","viewportHeight","padding","width","left","top","overflowBottom","aboveTop","rafId","raf","selected","targetTop","targetBottom","viewportBottom","all","lastDisabledBefore","el","offset","jsxs","HourPickerMaskedSelectTrigger","node","DismissableLayerBranch","isChecked","Check","createPortal","HourPickerSelectField","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","HourPickerField","props","useIsTouchDevice","onCommit","inputRef","setDraftValueRef","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","draft","setDraft","nextValue","moveSelection","base","baseIndex","nextIndex","nextOption","triggerClassName","IMaskInput","appended","dynamicMasked","digits","hourPrefix","accepted","nextText","completed","resolved","closestOption","shouldSelectAll","element"],"mappings":";;;;;;;;;;AAcA,MAAMA,KAAWC;AACb,OAAOD,GAAS,aAAc,eAChCA,GAAS,YAAYE;AAWvB,SAASC,EAAKC,GAAe;AAC3B,SAAO,OAAOA,CAAK,EAAE,SAAS,GAAG,GAAG;AACtC;AAEA,SAASC,GAAeC,GAAa;AACnC,QAAMC,IAAUD,EAAI,KAAA;AACpB,MAAI,CAACC,EAAS,QAAO;AAErB,QAAMC,IAAQ,sBAAsB,KAAKD,CAAO;AAChD,MAAI,CAACC;AACH,WAAO;AAGT,QAAMC,IAAQ,OAAOD,EAAM,CAAC,CAAC,GACvBE,IAAU,OAAOF,EAAM,CAAC,CAAC;AAK/B,SAJI,CAAC,OAAO,SAASC,CAAK,KAAK,CAAC,OAAO,SAASC,CAAO,KAInDD,IAAQ,KAAKA,IAAQ,MAAMC,IAAU,KAAKA,IAAU,KAC/C,OAGF,GAAGP,EAAKM,CAAK,CAAC,IAAIN,EAAKO,CAAO,CAAC;AACxC;AAOA,SAASC,EAAmCL,GAAaM,GAA2D;AAClH,QAAMC,IAASR,GAAeC,CAAG;AACjC,MAAI,CAACO,EAAQ,QAAO;AAEpB,QAAMC,IAAeF,EAAQ,KAAK,CAACG,MAAWA,EAAO,UAAUF,CAAM;AACrE,SAAIG,EAAmBF,CAAY,IAC1B,EAAE,QAAAD,GAAQ,iBAAiBA,EAAA,IAG7B,EAAE,QAAAA,GAAQ,iBAAiB,KAAA;AACpC;AAEA,SAASI,EAAoBb,GAAe;AAC1C,QAAMI,IAAQ,oBAAoB,KAAKJ,CAAK;AAC5C,MAAI,CAACI;AACH,WAAO;AAGT,QAAMC,IAAQ,OAAOD,EAAM,CAAC,CAAC,GACvBE,IAAU,OAAOF,EAAM,CAAC,CAAC;AAE/B,SAAI,CAAC,OAAO,SAASC,CAAK,KAAK,CAAC,OAAO,SAASC,CAAO,IAC9C,OAGFD,IAAQ,KAAKC;AACtB;AAEA,SAASM,EAAmBD,GAAsC;AAChE,SAAKA,IACE,CAACA,EAAO,WADK;AAEtB;AAEA,SAASG,GAA4BC,GAAuBP,GAA6B;AACvF,MAAIQ,IAAsC,MACtCC,IAAW,OAAO,mBAClBC,IAAc,OAAO;AAEzB,aAAWP,KAAUH,GAAS;AAC5B,QAAI,CAACI,EAAmBD,CAAM,EAAG;AACjC,UAAMQ,IAAgBN,EAAoBF,EAAO,KAAK;AACtD,QAAIQ,KAAiB,KAAM;AAE3B,UAAMC,IAAO,KAAK,IAAID,IAAgBJ,CAAa;AACnD,KAAIK,IAAOH,KAAaG,MAASH,KAAYE,IAAgBD,OAC3DF,IAAaL,GACbM,IAAWG,GACXF,IAAcC;AAAA,EAElB;AAEA,SAAOH;AACT;AAWA,SAASK,GAAuB;AAAA,EAC9B,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAAgC;AAC9B,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAM,SAAS,EAAI,GAC7CC,IAAeD,EAAM,OAA2B,MAAS,GACzDE,IAAcF,EAAM,OAA2B,MAAS,GACxDG,IAAiBH,EAAM,OAAO,EAAK,GAEnCI,IAAqBJ,EAAM,YAAY,MAAM;AACjD,UAAMK,IAAWV,EAAY;AAC7B,QAAI,CAACU,GAAU;AACb,MAAAN,EAAY,EAAI;AAChB;AAAA,IACF;AAEA,UAAM,EAAE,WAAAO,GAAW,cAAAC,GAAc,cAAAC,EAAA,IAAiBH,GAC5CI,IAAY,GAEZC,IAAcJ,IAAYG,GAC1BE,IAAgBL,IAAaC,IAAeC,IAAeC;AAGjE,QAAI,EAFyBF,IAAeC,IAAeC,IAEhC;AACzB,MAAAV,EAAY,EAAI;AAChB;AAAA,IACF;AAGA,IAAAA,EADsBL,MAAc,OAAO,CAACgB,IAAc,CAACC,CAClC;AAAA,EAC3B,GAAG,CAACjB,GAAWC,CAAW,CAAC;AAE3B,EAAAK,EAAM,UAAU,MAAM;AACpB,UAAMK,IAAWV,EAAY;AAC7B,QAAI,CAACU,EAAU;AAEf,IAAAD,EAAA;AAEA,UAAMQ,IAAe,MAAMR,EAAA,GACrBS,IAAe,MAAMT,EAAA;AAE3B,IAAAC,EAAS,iBAAiB,UAAUO,GAAc,EAAE,SAAS,IAAM;AAEnE,UAAME,IAAiB,IAAI,eAAeD,CAAY;AACtD,IAAAC,EAAe,QAAQT,CAAQ;AAE/B,UAAMU,IAAmB,IAAI,iBAAiBF,CAAY;AAC1D,WAAAE,EAAiB,QAAQV,GAAU,EAAE,WAAW,IAAM,SAAS,IAAM,GAE9D,MAAM;AACX,MAAAA,EAAS,oBAAoB,UAAUO,CAAY,GACnDE,EAAe,WAAA,GACfC,EAAiB,WAAA;AAAA,IACnB;AAAA,EACF,GAAG,CAACpB,GAAaS,CAAkB,CAAC;AAEpC,QAAMY,IAAgBhB,EAAM,YAAY,MAAM;AAC5C,IAAIC,EAAa,YACf,qBAAqBA,EAAa,OAAO,GACzCA,EAAa,UAAU,SAEzBE,EAAe,UAAU,IACzBD,EAAY,UAAU;AAAA,EACxB,GAAG,CAAA,CAAE,GAECe,IAAejB,EAAM;AAAA,IACzB,CAACkB,MAAwB;AACvB,YAAMb,IAAWV,EAAY;AAC7B,UAAI,CAACU,KAAYP,KAAY,CAACK,EAAe,SAAS;AACpD,QAAAa,EAAA;AACA;AAAA,MACF;AAEA,MAAKd,EAAY,YACfA,EAAY,UAAUgB;AAGxB,YAAMC,IAAYD,IAAchB,EAAY,SACtCkB,IAAYxB,IAAQuB,IAAa;AAEvC,UAAIC,IAAW,KAAK;AAClB,QAAAnB,EAAa,UAAU,sBAAsBgB,CAAY;AACzD;AAAA,MACF;AAEA,YAAMI,IAAehB,EAAS,WACxBiB,IAAYjB,EAAS,eAAeA,EAAS;AAEnD,UAAIkB;AACJ,MAAI7B,MAAc,OAChB6B,IAAe,KAAK,IAAI,GAAGF,IAAeD,CAAQ,IAElDG,IAAe,KAAK,IAAID,GAAWD,IAAeD,CAAQ,GAG5Df,EAAS,YAAYkB,GAErBrB,EAAY,UAAUgB;AAEtB,YAAMT,IAAY;AAMlB,OAJEf,MAAc,OACV6B,IAAed,IACfc,IAAgBD,IAAYb,MAEf,KAAK,IAAIc,IAAeF,CAAY,IAAI,OACzDpB,EAAa,UAAU,sBAAsBgB,CAAY,KAEzDD,EAAA,GACA,WAAWZ,GAAoB,EAAE;AAAA,IAErC;AAAA,IACA,CAACA,GAAoBV,GAAWI,GAAUF,GAAOoB,GAAerB,CAAW;AAAA,EAAA,GAGvE6B,IAAiBxB,EAAM,YAAY,MAAM;AAC7C,IAAIF,KAAY,CAACH,EAAY,WAAWQ,EAAe,YAEvDA,EAAe,UAAU,IACzBD,EAAY,UAAU,QACtBD,EAAa,UAAU,sBAAsBgB,CAAY;AAAA,EAC3D,GAAG,CAACnB,GAAUmB,GAActB,CAAW,CAAC;AAExC,SAAAK,EAAM,UAAU,MAAMgB,GAAe,CAACA,CAAa,CAAC,GAGlDS,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA5B,IAAW,8BAA8B;AAAA,QACzCD;AAAA,MAAA;AAAA,MAEF,gBAAgB,MAAM;AACpB,QAAKC,KAAU0B,EAAA;AAAA,MACjB;AAAA,MACA,eAAe,MAAM;AACnB,QAAI,CAAC1B,KAAY,CAACK,EAAe,WAASqB,EAAA;AAAA,MAC5C;AAAA,MACA,gBAAgB,MAAM;AACpB,QAAAR,EAAA;AAAA,MACF;AAAA,MAEC,UAAAtB,MAAc,OACX+B,gBAAAA,EAAAA,IAACE,IAAA,EAAU,eAAW,IAAC,WAAU,qBAAA,CAAqB,IACtDF,gBAAAA,EAAAA,IAACG,IAAA,EAAY,eAAW,IAAC,WAAU,qBAAA,CAAqB;AAAA,IAAA;AAAA,EAAA;AAGlE;AAoBO,SAASC,GAAgB;AAAA,EAC9B,IAAAC;AAAA,EACA,OAAA1D;AAAA,EACA,UAAA2D;AAAA,EACA,eAAAC;AAAA,EACA,SAAApD;AAAA,EACA,aAAAqD,IAAc;AAAA,EACd,WAAApC;AAAA,EACA,gBAAAqC;AAAA,EACA,UAAApC;AAAA,EACA,UAAAqC;AAAA,EACA,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AACF,GAAyB;AACvB,QAAMC,IAAUzC,EAAM,MAAA,GAChB0C,IAAYZ,KAAM,gBAAgBW,CAAO,IACzCE,IAAkB3C,EAAM,OAAgC,IAAI,GAC5D4C,IAA0B5C,EAAM,OAAyC,IAAI,GAC7E6C,IAAsB7C,EAAM,OAAsB,IAAI,GACtD8C,IAA8B9C,EAAM,OAAO,EAAK,GAChD,CAAC+C,GAAkBC,CAAmB,IAAIhD,EAAM,SAAwB,IAAI,GAC5EiD,IAAejD,EAAM,OAA8B,IAAI,GACvDkD,IAAoBlD,EAAM,OAA8B,IAAI,GAC5DmD,IAAoBnD,EAAM,OAA8B,IAAI,GAC5D,CAACoD,GAAwBC,CAAyB,IAAIrD,EAAM,SAAS,OAAO;AAAA,IAChF,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,EAAA,EACP,GAEI,CAACsD,GAAkBC,CAAmB,IAAIvD,EAAM,SAAS,EAAK,GAC9DwD,IAAOpB,KAAYkB,GACnBG,IAAUpB,KAAgBkB,GAE1BG,KAA4B,OAAO,SAAW,MAAc1D,EAAM,YAAYA,EAAM,iBAEpF2D,IAAyB3D,EAAM,YAAY,CAAC4D,MAAwB;AACxE,IAAAf,EAAoB,UAAUe,GAC9BZ,EAAoBY,CAAI;AAAA,EAC1B,GAAG,CAAA,CAAE,GAECC,KAAyB7D,EAAM,YAAY,MAAM;AACrD,IAAA8C,EAA4B,UAAU;AAAA,EACxC,GAAG,CAAA,CAAE;AAEL,EAAA9C,EAAM,UAAU,MAAM;AACpB,QAAI,CAACwD,EAAM;AAEX,UAAMM,IAAgBlF,EAAQ,KAAK,CAACG,MAAWA,EAAO,UAAUX,CAAK;AACrE,QAAI0F,KAAiB9E,EAAmB8E,CAAa,GAAG;AACtD,MAAAH,EAAuBG,EAAc,KAAK;AAC1C;AAAA,IACF;AAEA,UAAMC,IAAenF,EAAQ,KAAK,CAACG,MAAWC,EAAmBD,CAAM,CAAC;AACxE,IAAA4E,EAAuBI,GAAc,SAAS,IAAI;AAAA,EACpD,GAAG,CAACP,GAAM5E,GAAS+E,GAAwBvF,CAAK,CAAC;AAEjD,QAAM4F,KAAchE,EAAM;AAAA,IACxB,CAAC4D,MAAwB;AACvB,UAAIA,MAAS,MAAM;AACjB,YAAI5B,GAAe;AACjB,UAAAA,EAAc,IAAI;AAClB;AAAA,QACF;AAEA,QAAAD,EAAS,IAAI;AACb;AAAA,MACF;AAEA,YAAMkC,IAAiBrF,EAAQ,KAAK,CAACG,MAAWA,EAAO,UAAU6E,CAAI;AACrE,UAAK5E,EAAmBiF,CAAc,GAItC;AAAA,YAAIjC,GAAe;AACjB,UAAAA,EAAc4B,CAAI;AAClB;AAAA,QACF;AAEA,QAAA7B,EAAS6B,CAAI;AAAA;AAAA,IACf;AAAA,IACA,CAAC7B,GAAUC,GAAepD,CAAO;AAAA,EAAA,GAG7BsF,IAAclE,EAAM;AAAA,IACxB,CAAC4D,MAAwB;AACvB,UAAIA,MAAS,MAAM;AACjB,QAAI5B,KACFA,EAAc,IAAI,GAEpBD,EAAS,IAAI;AACb;AAAA,MACF;AAEA,YAAMkC,IAAiBrF,EAAQ,KAAK,CAACG,MAAWA,EAAO,UAAU6E,CAAI;AACrE,MAAK5E,EAAmBiF,CAAc,MAIlCjC,KACFA,EAAc4B,CAAI,GAGpB7B,EAAS6B,CAAI;AAAA,IACf;AAAA,IACA,CAAC7B,GAAUC,GAAepD,CAAO;AAAA,EAAA;AAGnC,EAAAoB,EAAM,UAAU,MAAM;AACpB,QAAI,CAACwD,EAAM;AAEX,UAAMW,IAAoB,CAACC,MAAwB;AACjD,YAAMC,IAASD,EAAM;AACrB,UAAI,EAAEC,aAAkB;AACtB;AAGF,YAAMC,IAAYrB,EAAa;AAU/B,MATI,CAACqB,KAIDA,EAAU,SAASD,CAAM,KAIbnB,EAAkB,SACrB,SAASmB,CAAM,KAI5BZ,EAAQ,EAAK;AAAA,IACf;AAEA,oBAAS,iBAAiB,eAAeU,GAAmB,EAAI,GACzD,MAAM;AACX,eAAS,oBAAoB,eAAeA,GAAmB,EAAI;AAAA,IACrE;AAAA,EACF,GAAG,CAACX,GAAMC,CAAO,CAAC,GAElBzD,EAAM,UAAU,MAAM;AACpB,QAAI,CAACwD;AACH;AAGF,UAAMe,IAAUrB,EAAkB;AAClC,QAAI,CAACqB;AACH;AAGF,UAAMC,IAAc,CAACJ,MAAsB;AACzC,YAAM/D,IAAW8C,EAAkB;AACnC,UAAI,CAAC9C;AACH;AAGF,YAAMoE,IAASL,EAAM;AACrB,UAAIK,MAAW;AACb;AAGF,YAAMC,IAAe,KAAK,IAAI,GAAGrE,EAAS,eAAeA,EAAS,YAAY,GACxEsE,IAAQtE,EAAS,aAAa,GAC9BuE,IAAWvE,EAAS,aAAaqE,GAEjCL,IAASD,EAAM;AAGrB,UAF4BC,aAAkB,QAAQhE,EAAS,SAASgE,CAAM,GAErD;AACvB,SAAKI,IAAS,KAAKE,KAAWF,IAAS,KAAKG,MAC1CR,EAAM,eAAA;AAER;AAAA,MACF;AAEA,MAAAA,EAAM,eAAA;AACN,YAAMS,IAAgB,KAAK,IAAIH,GAAc,KAAK,IAAI,GAAGrE,EAAS,YAAYoE,CAAM,CAAC;AACrF,MAAApE,EAAS,YAAYwE;AAAA,IACvB;AAEA,WAAAN,EAAQ,iBAAiB,SAASC,GAAa,EAAE,SAAS,IAAO,GAC1D,MAAM;AACX,MAAAD,EAAQ,oBAAoB,SAASC,CAAW;AAAA,IAClD;AAAA,EACF,GAAG,CAAChB,CAAI,CAAC,GAETxD,EAAM,UAAU,MAAM;AAUpB,QATI,CAACwD,KAGDpB,MAAa,UAAa,CAACC,KAG3B,OAAO,SAAW,OAGlB,EAAE,0BAA0B;AAC9B;AAGF,UAAMyC,IAAUnC,EAAgB;AAChC,QAAI,EAAEmC,aAAmB;AACvB;AAGF,QAAIC,IAAW;AACf,UAAMC,IAAW,IAAI,qBAAqB,CAAAC,MAAW;AACnD,UAAI,CAACF;AACH;AAEF,YAAMG,IAAQD,EAAQ,CAAC;AACvB,MAAIC,KAAS,CAACA,EAAM,kBAClBzB,EAAQ,EAAK;AAAA,IAEjB,CAAC;AACD,WAAAuB,EAAS,QAAQF,CAAO,GACjB,MAAM;AACX,MAAAC,IAAW,IACXC,EAAS,WAAA;AAAA,IACX;AAAA,EACF,GAAG,CAAC3C,GAAcmB,GAAMpB,GAAUqB,CAAO,CAAC;AAE1C,QAAM0B,IAA+BnF,EAAM,YAAY,MAAM;AAC3D,QAAI,OAAO,SAAW,IAAa;AAEnC,UAAM8E,IAAUnC,EAAgB,SAC1B4B,IAAUrB,EAAkB;AAClC,QAAI,EAAE4B,aAAmB,gBAAgB,CAACP,EAAS;AAEnD,UAAMa,IAAON,EAAQ,sBAAA,GACfO,IAAgBd,EAAQ,cACxBe,IAAgB,OAAO,cAAc,GACrCC,IAAiB,OAAO,eAAe,GACvCC,IAAU,GAEVC,IAAQL,EAAK;AAEnB,QAAIM,IAAON,EAAK;AAChB,IAAIM,IAAOD,IAAQH,IAAgBE,MACjCE,IAAO,KAAK,IAAIF,GAASF,IAAgBG,IAAQD,CAAO,IAEtDE,IAAOF,MACTE,IAAOF;AAGT,QAAIG,IAAMP,EAAK,SAASI;AACxB,UAAMI,IAAiBD,IAAMN,IAAgBE,IAAiBC,GACxDK,IAAWT,EAAK,MAAMC,IAAgBG;AAC5C,IAAII,KAAkBC,KAAYL,MAChCG,IAAME,IAGJF,IAAMH,MACRG,IAAMH,IAEJG,IAAMN,IAAgBE,IAAiBC,MACzCG,IAAM,KAAK,IAAIH,GAASD,IAAiBF,IAAgBG,CAAO,IAGlEnC,EAA0B,EAAE,MAAAqC,GAAM,KAAAC,GAAK,OAAAF,EAAA,CAAO;AAAA,EAChD,GAAG,CAAA,CAAE;AAEL,SAAA/B,GAA0B,MAAM;AAE9B,QADI,CAACF,KAAQ1D,KACT,OAAO,SAAW,IAAa;AAEnC,IAAAqF,EAAA;AACA,UAAMW,IAAQ,OAAO,sBAAsBX,CAA4B;AAEvE,kBAAO,iBAAiB,UAAUA,GAA8B,EAAI,GACpE,OAAO,iBAAiB,UAAUA,CAA4B,GACvD,MAAM;AACX,aAAO,qBAAqBW,CAAK,GACjC,OAAO,oBAAoB,UAAUX,GAA8B,EAAI,GACvE,OAAO,oBAAoB,UAAUA,CAA4B;AAAA,IACnE;AAAA,EACF,GAAG,CAACrF,GAAU0D,GAAM2B,CAA4B,CAAC,GAEjDnF,EAAM,UAAU,MAAM;AACpB,QAAI,CAACwD,EAAM;AAEX,UAAMnD,IAAW8C,EAAkB;AACnC,QAAI,CAAC9C,EAAU;AA4Cf,UAAM0F,IAAM,sBA1CA,MAAM;AAChB,YAAMC,IAAW3F,EAAS,cAAc,uCAA2C;AACnF,UAAI2F,aAAoB,aAAa;AAEnC,cAAMC,IAAYD,EAAS,YAAY,GACjCE,IAAeF,EAAS,YAAYA,EAAS,eAAe;AAElE,YAAIC,IAAY5F,EAAS,WAAW;AAClC,UAAAA,EAAS,YAAY,KAAK,IAAI,GAAG4F,CAAS;AAC1C;AAAA,QACF;AAEA,cAAME,KAAiB9F,EAAS,YAAYA,EAAS;AACrD,QAAI6F,IAAeC,OACjB9F,EAAS,YAAY,KAAK,IAAI,GAAG6F,IAAe7F,EAAS,YAAY;AAEvE;AAAA,MACF;AAEA,YAAM+F,IAAM,MAAM,KAAK/F,EAAS,iBAAiB,iBAAmB,CAAC;AACrE,UAAI,CAAC+F,EAAI,OAAQ;AAEjB,UAAIrC,GACAsC;AAEJ,iBAAWC,KAAMF,GAAK;AAEpB,YAAI,CADeE,EAAG,aAAa,eAAe,GACjC;AACf,UAAAvC,IAAeuC;AACf;AAAA,QACF;AACA,QAAAD,IAAqBC;AAAA,MACvB;AAEA,UAAI,CAACvC,EAAc;AAInB,YAAMwC,IAAS,KAAK,IAAI,IAFTF,KAA0CtC,GAEvB,YAAY,CAAC;AAC/C,MAAA1D,EAAS,YAAYkG;AAAA,IACvB,CAEqC;AACrC,WAAO,MAAM,qBAAqBR,CAAG;AAAA,EACvC,GAAG,CAACvC,GAAM5E,CAAO,CAAC,GAElBoB,EAAM,UAAU,MAAM;AAGpB,QAFI,CAACwD,KACD,CAACT,KACD,CAACD,EAA4B,QAAS;AAE1C,UAAMzC,IAAW8C,EAAkB;AACnC,QAAI,CAAC9C,EAAU;AAEf,UAAMgE,IAAShE,EAAS,cAAc,+BAA+B0C,CAAgB,IAAI;AACzF,QAAI,EAAEsB,aAAkB,aAAc;AAEtC,UAAMmB,IAAU,GACVS,IAAY5B,EAAO,YAAYmB,GAC/BU,IAAe7B,EAAO,YAAYA,EAAO,eAAemB;AAE9D,QAAIS,IAAY5F,EAAS,WAAW;AAClC,MAAAA,EAAS,YAAY,KAAK,IAAI,GAAG4F,CAAS;AAC1C;AAAA,IACF;AAEA,UAAME,IAAiB9F,EAAS,YAAYA,EAAS;AACrD,IAAI6F,IAAeC,MACjB9F,EAAS,YAAY,KAAK,IAAI,GAAG6F,IAAe7F,EAAS,YAAY;AAAA,EAEzE,GAAG,CAAC0C,GAAkBS,CAAI,CAAC,GAGzB/B,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,aAAa7B,CAAS;AAAA,MACpC,KAAKoD;AAAA,MAEL,UAAAuD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,QAAA/E,gBAAAA,EAAAA;AAAAA,UAACgF;AAAA,UAAA;AAAA,YACC,IAAI/D;AAAA,YACJ,aAAAT;AAAA,YACA,OAAA7D;AAAA,YACA,eAAe4F;AAAA,YACf,UAAUE;AAAA,YACV,SAAAtF;AAAA,YACA,UAAAkB;AAAA,YACA,UAAAqC;AAAA,YACA,MAAAqB;AAAA,YACA,SAAAC;AAAA,YACA,gBAAAvB;AAAA,YACA,eAAAI;AAAA,YACA,YAAAE;AAAA,YACA,qBAAAK;AAAA,YACA,qBAAqBc;AAAA,YACrB,wBAAAE;AAAA,YACA,UAAU,CAAC6C,MAAS;AAClB,cAAA/D,EAAgB,UAAU+D;AAAA,YAC5B;AAAA,YACA,kBAAkB9D;AAAA,UAAA;AAAA,QAAA;AAAA,QAGnBY,KAAQ,MAAM;AACb,gBAAMe,0BACHoC,IAAA,EACC,UAAAH,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKtD;AAAA,cACL,eAAaX;AAAA,cACb,cAAW;AAAA,cACX,WAAWb;AAAA,gBACT;AAAA,gBACA;AAAA,cAAA;AAAA,cAEF,OAAO;AAAA,gBACL,MAAM0B,EAAuB;AAAA,gBAC7B,KAAKA,EAAuB;AAAA,gBAC5B,OAAOA,EAAuB;AAAA,cAAA;AAAA,cAGhC,UAAA;AAAA,gBAAA3B,gBAAAA,EAAAA;AAAAA,kBAAChC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,aAAa0D;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGf1B,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAK0B;AAAA,oBACL,MAAK;AAAA,oBACL,WAAU;AAAA,oBAET,UAAAvE,EAAQ,IAAI,CAACG,MAAW;AACvB,4BAAM6H,IAAY7H,EAAO,UAAUX;AAEnC,6BACEoI,gBAAAA,EAAAA;AAAAA,wBAAC;AAAA,wBAAA;AAAA,0BAEC,MAAK;AAAA,0BACL,iBAAeI;AAAA,0BACf,cAAY7H,EAAO;AAAA,0BACnB,cAAY6H,IAAY,YAAY;AAAA,0BACpC,iBAAe7H,EAAO,WAAW,KAAK;AAAA,0BACtC,WAAW2C;AAAA,4BACT;AAAA,4BACA3C,EAAO,YAAY;AAAA,4BACnBgE,MAAqBhE,EAAO,SAAS;AAAA,0BAAA;AAAA,0BAEvC,aAAa,CAACqF,MAAU;AACtB,4BAAAA,EAAM,eAAA;AAAA,0BACR;AAAA,0BACA,SAAS,MAAM;AACb,4BAAIrF,EAAO,aAEX6D,EAAwB,UAAU7D,EAAO,KAAK,GAC9C4E,EAAuB5E,EAAO,KAAK,GACnC4D,EAAgB,SAAS,MAAM,EAAE,eAAe,IAAM,GACtDuB,EAAYnF,EAAO,KAAK,GACxB0E,EAAQ,EAAK;AAAA,0BACf;AAAA,0BACA,gBAAgB,MAAM;AACpB,4BAAIX,EAA4B,YAChCA,EAA4B,UAAU,IACtCa,EAAuB5E,EAAO,KAAK;AAAA,0BACrC;AAAA,0BACA,eAAe,CAACqF,MAAU;AACxB,4BAAItB,EAA4B,WAAWsB,EAAM,cAAc,KAAKA,EAAM,cAAc,MAGxFtB,EAA4B,UAAU,IACtCa,EAAuB5E,EAAO,KAAK;AAAA,0BACrC;AAAA,0BAEA,UAAA;AAAA,4BAAA0C,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,gEACb,UAAAmF,IAAYnF,gBAAAA,EAAAA,IAACoF,IAAA,EAAM,eAAW,IAAC,WAAU,UAAA,CAAU,IAAK,MAC3D;AAAA,4BAEAL,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,8BAAA/E,gBAAAA,EAAAA,IAAC,QAAA,EAAM,YAAO,MAAA,CAAM;AAAA,8BACnB1C,EAAO,eAAe,OACrB0C,gBAAAA,EAAAA,IAAC,QAAA,EAAK,aAAU,eAAc,WAAU,iCACrC,UAAA1C,EAAO,YAAA,CACV,IACE;AAAA,4BAAA,EAAA,CACN;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBA/CKA,EAAO;AAAA,sBAAA;AAAA,oBAkDlB,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGH0C,gBAAAA,EAAAA;AAAAA,kBAAChC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,aAAa0D;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACf;AAAA,YAAA;AAAA,UAAA,GAEJ;AAGF,iBAAI,OAAO,WAAa,MAAoBoB,IACrCuC,GAAavC,GAAS,SAAS,IAAI;AAAA,QAC5C,OAAO;AAAA,MAAA,EAAA,CACT;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA1C,GAAgB,cAAc;AAI9B,SAASkF,GAAsB;AAAA,EAC7B,IAAAjF;AAAA,EACA,OAAA1D;AAAA,EACA,UAAA2D;AAAA,EACA,eAAAC;AAAA,EACA,SAAApD;AAAA,EACA,aAAAqD,IAAc;AAAA,EACd,WAAApC;AAAA,EACA,gBAAAqC;AAAA,EACA,UAAApC;AAAA,EACA,MAAA0D;AAAA,EACA,cAAAnB;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AACF,GAAyB;AACvB,QAAM0B,IAAclE,EAAM;AAAA,IACxB,CAAC4D,MAAiB;AAChB,YAAMK,IAAiBrF,EAAQ,KAAK,CAACG,MAAWA,EAAO,UAAU6E,CAAI;AACrE,MAAK5E,EAAmBiF,CAAc,MAIlCjC,KACFA,EAAc4B,CAAI,GAEpB7B,EAAS6B,CAAI;AAAA,IACf;AAAA,IACA,CAAC7B,GAAUC,GAAepD,CAAO;AAAA,EAAA;AAGnC,SACE6C,gBAAAA,MAAC,SAAI,aAAU,sBAAqB,WAAWC,EAAG,aAAa7B,CAAS,GACtE,UAAA2G,gBAAAA,EAAAA;AAAAA,IAACQ;AAAA,IAAA;AAAA,MACC,UAAAlH;AAAA,MACA,MAAA0D;AAAA,MACA,cAAAnB;AAAA,MACA,OAAOjE,KAAS;AAAA,MAChB,eAAe,CAACwF,MAASM,EAAYN,CAAI;AAAA,MAEzC,UAAA;AAAA,QAAAnC,gBAAAA,EAAAA;AAAAA,UAACwF;AAAA,UAAA;AAAA,YACC,IAAAnF;AAAA,YACA,eAAaQ;AAAA,YACb,iBAAeE,IAAa,SAAS;AAAA,YACrC,WAAWd;AAAA,cACT;AAAA,cACA,CAACtD,KAAS;AAAA,cACVoF,KAAQ;AAAA,cACR;AAAA,cACAtB;AAAA,YAAA;AAAA,YAGF,UAAAT,gBAAAA,EAAAA,IAACyF,MAAY,aAAAjF,EAAA,CAA0B;AAAA,UAAA;AAAA,QAAA;AAAA,QAGzCR,gBAAAA,EAAAA;AAAAA,UAAC0F;AAAA,UAAA;AAAA,YACC,eAAa5E;AAAA,YACb,YAAY;AAAA,YACZ,WAAU;AAAA,YAET,UAAA3D,EAAQ,IAAI,CAACG,MACZyH,gBAAAA,EAAAA;AAAAA,cAACY;AAAA,cAAA;AAAA,gBAEC,OAAOrI,EAAO;AAAA,gBACd,UAAUA,EAAO;AAAA,gBAEjB,UAAA;AAAA,kBAAA0C,gBAAAA,EAAAA,IAAC,QAAA,EAAM,YAAO,MAAA,CAAM;AAAA,kBACnB1C,EAAO,eAAe,OACrB0C,gBAAAA,EAAAA,IAAC,QAAA,EAAK,aAAU,eAAc,WAAU,uCACrC,UAAA1C,EAAO,YAAA,CACV,IACE;AAAA,gBAAA;AAAA,cAAA;AAAA,cATCA,EAAO;AAAA,YAAA,CAWf;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAASsI,GAAgBC,GAA6B;AAG3D,SAFsBC,GAAA,IAGb9F,gBAAAA,MAACsF,IAAA,EAAuB,GAAGO,EAAA,CAAO,IAGpC7F,gBAAAA,MAACI,IAAA,EAAiB,GAAGyF,EAAA,CAAO;AACrC;AAEAD,GAAgB,cAAc;AAuB9B,SAASZ,GAA8B;AAAA,EACrC,IAAA3E;AAAA,EACA,aAAAG;AAAA,EACA,OAAA7D;AAAA,EACA,eAAA4D;AAAA,EACA,UAAAwF;AAAA,EACA,SAAA5I;AAAA,EACA,UAAAkB;AAAA,EACA,UAAAqC;AAAA,EACA,MAAAqB;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAvB;AAAA,EACA,eAAAI;AAAA,EACA,YAAAE;AAAA,EACA,qBAAAK;AAAA,EACA,qBAAAG;AAAA,EACA,wBAAAa;AAAA,EACA,UAAA4D;AAAA,EACA,kBAAAC;AACF,GAAuC;AACrC,QAAMC,IAAe3H,EAAM,OAAO,EAAK,GACjC4H,IAAwB5H,EAAM,OAAO,EAAK,GAC1C6H,IAAkC7H,EAAM,OAAO,EAAK,GACpD8H,IAA+B9H,EAAM,OAAsB,IAAI,GAE/D,CAAC+H,GAAOC,CAAQ,IAAIhI,EAAM,SAAS,MAAO5B,KAAgB,EAAG;AAEnE,EAAA4B,EAAM,UAAU,OACd0H,EAAiB,UAAU,CAACO,MAAc;AACxC,IAAAD,EAASC,CAAS;AAAA,EACpB,GACO,MAAM;AACX,IAAAP,EAAiB,UAAU;AAAA,EAC7B,IACC,CAACA,CAAgB,CAAC;AAErB,QAAMQ,IAAgBlI,EAAM;AAAA,IAC1B,CAACN,MAAsB;AACrB,YAAMyI,IAAOtF,EAAoB,WAAWzE,KAAS;AAErD,UAAIgK,IAAYxJ,EAAQ,UAAU,CAACG,MAAWA,EAAO,UAAUoJ,CAAI;AACnE,MAAIC,MAAc,OAChBA,IAAY1I,MAAc,IAAI,KAAKd,EAAQ;AAG7C,eAASyJ,IAAYD,IAAY1I,GAAW2I,KAAa,KAAKA,IAAYzJ,EAAQ,QAAQyJ,KAAa3I,GAAW;AAChH,cAAM4I,IAAa1J,EAAQyJ,CAAS;AACpC,YAAKrJ,EAAmBsJ,CAAU,GAElC;AAAA,UAAAtF,EAAoBsF,EAAW,KAAK,GACpCR,EAA6B,UAAUQ,EAAW,OAClDN,EAASM,EAAW,KAAK,GACzBtG,EAAcsG,EAAW,KAAK;AAC9B;AAAA;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAACzF,GAAqBb,GAAepD,GAASoE,GAAqB5E,CAAK;AAAA,EAAA;AAG1E,EAAA4B,EAAM,UAAU,MAAM;AACpB,IAAI2H,EAAa,WACjBK,EAAS5J,KAAgB,EAAE;AAAA,EAC7B,GAAG,CAACA,CAAK,CAAC;AAEV,QAAMmK,IAAmB7G;AAAA,IACvB;AAAA,IACA;AAAA,IACA,CAACqG,KAAS;AAAA,IACVvE,KAAQ;AAAA,IACR;AAAA,IACAtB;AAAA,EAAA;AAGF,SACEsE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,IAAA/E,gBAAAA,EAAAA;AAAAA,MAAC+G;AAAA,MAAA;AAAA,QACC,IAAA1G;AAAA,QACA,eAAaQ;AAAA,QACb,iBAAeE,IAAa,SAAS;AAAA,QACrC,MAAK;AAAA,QACL,UAAA1C;AAAA,QACA,UAAAqC;AAAA,QACA,UAAAsF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,UACJ,EAAE,MAAM,SAAS,MAAM,GAAA;AAAA,UACvB,EAAE,MAAM,QAAQ,MAAM,GAAA;AAAA,QAAK;AAAA,QAE7B,UAAU,CAACgB,GAAUC,MAAkB;AACrC,gBAAMC,KAAUD,EAAc,QAAQD,GAAU,QAAQ,OAAO,EAAE;AAEjE,cADIE,EAAO,UAAU,KACjBA,EAAO,UAAU,EAAG,QAAOD,EAAc,cAAc,CAAC;AAE5D,gBAAME,IAAazK,EAAK,OAAOwK,EAAO,MAAM,GAAG,CAAC,CAAC,CAAC;AAElD,iBADwB/J,EAAQ,KAAK,CAACG,MAAWA,EAAO,MAAM,WAAW,GAAG6J,CAAU,GAAG,CAAC,IAC9DF,EAAc,cAAc,CAAC,IAElDA,EAAc,cAAc,CAAC;AAAA,QACtC;AAAA,QACA,aAAAzG;AAAA,QACA,OAAO8F;AAAA,QACP,WAAWQ;AAAA,QACX,UAAU,CAACM,MAAa;AACtB,gBAAMC,IAAW,OAAOD,KAAa,WAAWA,IAAW,OAAOA,KAAY,EAAE;AAGhF,UAFAb,EAASc,CAAQ,GAEbA,EAAS,QAAQ,OAAO,EAAE,EAAE,WAAW,KAIvC1K,KACFoJ,EAAS,IAAI;AAAA,QAEjB;AAAA,QACA,YAAY,CAACuB,MAAc;AACzB,gBAAMD,IAAW,OAAOC,KAAc,WAAWA,IAAY,OAAOA,KAAa,EAAE;AACnF,cAAIjB,EAA6B,YAAYgB,GAAU;AACrD,YAAAhB,EAA6B,UAAU;AACvC;AAAA,UACF;AAEA,gBAAMkB,IAAWrK,EAAmCmK,GAAUlK,CAAO;AACrE,cAAI,CAACoK;AACH;AAGF,cAAIA,EAAS,iBAAiB;AAI5B,gBAHAhG,EAAoBgG,EAAS,eAAe,GAC5ChB,EAASgB,EAAS,eAAe,GAE7B5K,MAAU4K,EAAS;AACrB;AAGF,YAAAxB,EAASwB,EAAS,eAAe;AACjC;AAAA,UACF;AAEA,gBAAM7J,IAAgBF,EAAoB+J,EAAS,MAAM;AACzD,cAAI7J,KAAiB;AACnB;AAGF,gBAAM8J,IAAgB/J,GAA4BC,GAAeP,CAAO;AACxE,UAAKqK,KAILjG,EAAoBiG,EAAc,KAAK;AAAA,QACzC;AAAA,QACA,eAAe,MAAM;AAEnB,UADArB,EAAsB,UAAU,IAC5B,CAAA9H,MACC0D,KACHC,EAAQ,EAAI;AAAA,QAEhB;AAAA,QACA,aAAa,CAACW,MAAU;AAGtB,UAFAwD,EAAsB,UAAU,IAChCC,EAAgC,UAAU,OAAO,WAAa,OAAe,SAAS,kBAAkBzD,EAAM,eAC1G,CAAAtE,MACC0D,KACHC,EAAQ,EAAI;AAAA,QAEhB;AAAA,QACA,SAAS,MAAM;AACb,UAAI3D,KACC0D,KACHC,EAAQ,EAAI;AAAA,QAEhB;AAAA,QACA,WAAW,CAACW,MAAU;AACpB,cAAI,CAAAtE,GAIJ;AAAA,gBAAIsE,EAAM,QAAQ,SAASZ,KAAQ,CAACY,EAAM,kBAAkB;AAC1D,cAAAX,EAAQ,EAAK;AACb;AAAA,YACF;AAEA,gBAAIW,EAAM,QAAQ,UAAU;AAC1B,kBAAI,CAACZ;AACH;AAEF,cAAAY,EAAM,eAAA,GACNX,EAAQ,EAAK;AACb;AAAA,YACF;AAcA,gBAZI,CAACD,KAAQ,CAACY,EAAM,qBAEfA,EAAM,IAAI,WAAW,KAAKA,EAAM,QAAQ,eAAeA,EAAM,QAAQ,aACtE,CAACA,EAAM,WACP,CAACA,EAAM,WACP,CAACA,EAAM,UAGPX,EAAQ,EAAI,GAIZW,EAAM,QAAQ,eAAeA,EAAM,QAAQ,WAAW;AAIxD,kBAHAP,EAAA,GACAO,EAAM,eAAA,GAEF,CAACZ,GAAM;AACT,gBAAAC,EAAQ,EAAI;AACZ;AAAA,cACF;AAEA,cAAAyE,EAAc9D,EAAM,QAAQ,cAAc,IAAI,EAAE;AAChD;AAAA,YACF;AAEA,gBAAIA,EAAM,QAAQ,SAAS;AACzB,cAAAP,EAAA;AACA,oBAAMmF,IAAWrK,EAAmCoJ,GAAOnJ,CAAO;AAClE,kBAAI,CAACoK;AACH;AAGF,kBAAIA,EAAS,iBAAiB;AAC5B,gBAAA5E,EAAM,eAAA,GACNpB,EAAoBgG,EAAS,eAAe,GAC5ChB,EAASgB,EAAS,eAAe,GAC7B5K,MAAU4K,EAAS,mBACrBxB,EAASwB,EAAS,eAAe,GAEnCvF,EAAQ,EAAK;AACb;AAAA,cACF;AAEA,oBAAMtE,IAAgBF,EAAoB+J,EAAS,MAAM;AACzD,kBAAI7J,KAAiB;AACnB;AAGF,oBAAM8J,IAAgB/J,GAA4BC,GAAeP,CAAO;AACxE,kBAAI,CAACqK;AACH;AAGF,cAAA7E,EAAM,eAAA,GACNpB,EAAoBiG,EAAc,KAAK,GACvCjB,EAASiB,EAAc,KAAK,GACxB7K,MAAU6K,EAAc,SAC1BzB,EAASyB,EAAc,KAAK,GAE9BxF,EAAQ,EAAK;AACb;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QACA,SAAS,CAACW,MAAU;AAClB,gBAAM8E,IAAkB,CAACtB,EAAsB,WAAW,CAACC,EAAgC;AAI3F,cAHAD,EAAsB,UAAU,IAChCC,EAAgC,UAAU,IAC1CF,EAAa,UAAU,IACnBuB,GAAiB;AACnB,kBAAMC,IAAU/E,EAAM;AACtB,kCAAsB,MAAM+E,EAAQ,QAAQ;AAAA,UAC9C;AAEA,UAAIrJ,KAIA0D,KAIJC,EAAQ,EAAI;AAAA,QACd;AAAA,QACA,QAAQ,MAAM;AACZ,UAAAkE,EAAa,UAAU;AAEvB,gBAAMpJ,IAAUwJ,EAAM,KAAA;AACtB,cAAI,CAACxJ,GAAS;AACZ,YAAAyJ,EAAS5J,KAAgB,EAAE;AAC3B;AAAA,UACF;AAEA,gBAAM4K,IAAWrK,EAAmCJ,GAASK,CAAO;AACpE,cAAI,CAACoK,GAAU;AACb,YAAAhB,EAAS5J,KAAgB,EAAE;AAC3B;AAAA,UACF;AAEA,cAAI,CAAC4K,EAAS,iBAAiB;AAC7B,YAAAhB,EAAS5J,KAAgB,EAAE;AAC3B;AAAA,UACF;AAEA,UAAA4J,EAASgB,EAAS,eAAe,GAC7B5K,MAAU4K,EAAS,mBACrBxB,EAASwB,EAAS,eAAe;AAAA,QAErC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGFvH,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,UAAA3B;AAAA,QACA,aAAU;AAAA,QACV,WAAW4B;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,cAAY8B,IAAO,sBAAsB;AAAA,QACzC,eAAe,CAACY,MAAU;AACxB,UAAAA,EAAM,eAAA;AAAA,QACR;AAAA,QACA,aAAa,CAACA,MAAU;AACtB,UAAAA,EAAM,eAAA;AAAA,QACR;AAAA,QACA,SAAS,MAAM;AACb,UAAItE,KACJ2D,EAAQ,CAACD,CAAI;AAAA,QACf;AAAA,QAEA,UAAA/B,gBAAAA,EAAAA,IAACG,IAAA,EAAY,eAAW,IAAC,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAC9C,GACF;AAEJ;"}
1
+ {"version":3,"file":"index18.js","sources":["../src/components/HourPickerField/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\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/Select\"\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n 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: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.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 HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const 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 React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n return\n }\n\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n return\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const 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\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n 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\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n 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 <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </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\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n 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={\"firstEnabledWithContext\"}\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 HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n 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 HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\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}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n\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 ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n 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={\"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 onCommit(null)\n }\n }}\n onComplete={(completed) => {\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(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 onCommit(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 onCommit(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":["imaskAny","IMask","InputMask","pad2","value","parseTimeInput","raw","trimmed","match","hours","minutes","parseTimeInputWithSelectableOption","options","parsed","parsedOption","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","bestMinutes","optionMinutes","diff","HourPickerScrollButton","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","HourPickerInput","id","onChange","onValueUpdate","placeholder","inputClassName","readOnly","openProp","onOpenChange","triggerTestId","contentTestId","isHydrated","reactId","triggerId","triggerInputRef","setTriggerDraftValueRef","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","useIsomorphicLayoutEffect","input","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","updateValue","matchingOption","commitValue","handlePointerDown","event","target","container","popover","handleWheel","deltaY","maxScrollTop","atTop","atBottom","nextScrollTop","trigger","isActive","observer","entries","entry","updateDesktopPopoverPosition","rect","popoverHeight","viewportWidth","viewportHeight","padding","width","left","top","overflowBottom","aboveTop","rafId","raf","selected","targetTop","targetBottom","viewportBottom","all","lastDisabledBefore","el","offset","jsxs","HourPickerMaskedSelectTrigger","node","DismissableLayerBranch","isChecked","Check","createPortal","HourPickerSelectField","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","HourPickerField","props","useIsTouchDevice","onCommit","inputRef","setDraftValueRef","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","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,62 +1,8 @@
1
- import { tzName as r } from "./index181.js";
2
- import { TZDateMini as s } from "./index182.js";
3
- class o extends s {
4
- //#region static
5
- static tz(t, ...e) {
6
- return e.length ? new o(...e, t) : new o(Date.now(), t);
7
- }
8
- //#endregion
9
- //#region representation
10
- toISOString() {
11
- const [t, e, n] = this.tzComponents(), i = `${t}${e}:${n}`;
12
- return this.internal.toISOString().slice(0, -1) + i;
13
- }
14
- toString() {
15
- return `${this.toDateString()} ${this.toTimeString()}`;
16
- }
17
- toDateString() {
18
- const [t, e, n, i] = this.internal.toUTCString().split(" ");
19
- return `${t?.slice(0, -1)} ${n} ${e} ${i}`;
20
- }
21
- toTimeString() {
22
- const t = this.internal.toUTCString().split(" ")[4], [e, n, i] = this.tzComponents();
23
- return `${t} GMT${e}${n}${i} (${r(this.timeZone, this)})`;
24
- }
25
- toLocaleString(t, e) {
26
- return Date.prototype.toLocaleString.call(this, t, {
27
- ...e,
28
- timeZone: e?.timeZone || this.timeZone
29
- });
30
- }
31
- toLocaleDateString(t, e) {
32
- return Date.prototype.toLocaleDateString.call(this, t, {
33
- ...e,
34
- timeZone: e?.timeZone || this.timeZone
35
- });
36
- }
37
- toLocaleTimeString(t, e) {
38
- return Date.prototype.toLocaleTimeString.call(this, t, {
39
- ...e,
40
- timeZone: e?.timeZone || this.timeZone
41
- });
42
- }
43
- //#endregion
44
- //#region private
45
- tzComponents() {
46
- const t = this.getTimezoneOffset(), e = t > 0 ? "-" : "+", n = String(Math.floor(Math.abs(t) / 60)).padStart(2, "0"), i = String(Math.abs(t) % 60).padStart(2, "0");
47
- return [e, n, i];
48
- }
49
- //#endregion
50
- withTimeZone(t) {
51
- return new o(+this, t);
52
- }
53
- //#region date-fns integration
54
- [/* @__PURE__ */ Symbol.for("constructDateFrom")](t) {
55
- return new o(+new Date(t), this.timeZone);
56
- }
57
- //#endregion
1
+ function n(s, e) {
2
+ const t = e.startOfMonth(s), r = t.getDay();
3
+ return r === 1 ? t : r === 0 ? e.addDays(t, -6) : e.addDays(t, -1 * (r - 1));
58
4
  }
59
5
  export {
60
- o as TZDate
6
+ n as startOfBroadcastWeek
61
7
  };
62
8
  //# sourceMappingURL=index180.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index180.js","sources":["../../../node_modules/@date-fns/tz/date/index.js"],"sourcesContent":["import { tzName } from \"../tzName/index.js\";\nimport { TZDateMini } from \"./mini.js\";\nexport class TZDate extends TZDateMini {\n //#region static\n\n static tz(tz, ...args) {\n return args.length ? new TZDate(...args, tz) : new TZDate(Date.now(), tz);\n }\n\n //#endregion\n\n //#region representation\n\n toISOString() {\n const [sign, hours, minutes] = this.tzComponents();\n const tz = `${sign}${hours}:${minutes}`;\n return this.internal.toISOString().slice(0, -1) + tz;\n }\n toString() {\n // \"Tue Aug 13 2024 07:50:19 GMT+0800 (Singapore Standard Time)\";\n return `${this.toDateString()} ${this.toTimeString()}`;\n }\n toDateString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const [day, date, month, year] = this.internal.toUTCString().split(\" \");\n // \"Tue Aug 13 2024\"\n return `${day?.slice(0, -1) /* Remove \",\" */} ${month} ${date} ${year}`;\n }\n toTimeString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const time = this.internal.toUTCString().split(\" \")[4];\n const [sign, hours, minutes] = this.tzComponents();\n // \"07:42:23 GMT+0800 (Singapore Standard Time)\"\n return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;\n }\n toLocaleString(locales, options) {\n return Date.prototype.toLocaleString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleDateString(locales, options) {\n return Date.prototype.toLocaleDateString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleTimeString(locales, options) {\n return Date.prototype.toLocaleTimeString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n\n //#endregion\n\n //#region private\n\n tzComponents() {\n const offset = this.getTimezoneOffset();\n const sign = offset > 0 ? \"-\" : \"+\";\n const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, \"0\");\n const minutes = String(Math.abs(offset) % 60).padStart(2, \"0\");\n return [sign, hours, minutes];\n }\n\n //#endregion\n\n withTimeZone(timeZone) {\n return new TZDate(+this, timeZone);\n }\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDate(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}"],"names":["TZDate","TZDateMini","tz","args","sign","hours","minutes","day","date","month","year","time","tzName","locales","options","offset","timeZone"],"mappings":";;AAEO,MAAMA,UAAeC,EAAW;AAAA;AAAA,EAGrC,OAAO,GAAGC,MAAOC,GAAM;AACrB,WAAOA,EAAK,SAAS,IAAIH,EAAO,GAAGG,GAAMD,CAAE,IAAI,IAAIF,EAAO,KAAK,IAAG,GAAIE,CAAE;AAAA,EAC1E;AAAA;AAAA;AAAA,EAMA,cAAc;AACZ,UAAM,CAACE,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY,GAC1CJ,IAAK,GAAGE,CAAI,GAAGC,CAAK,IAAIC,CAAO;AACrC,WAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,IAAIJ;AAAA,EACpD;AAAA,EACA,WAAW;AAET,WAAO,GAAG,KAAK,aAAY,CAAE,IAAI,KAAK,aAAY,CAAE;AAAA,EACtD;AAAA,EACA,eAAe;AAEb,UAAM,CAACK,GAAKC,GAAMC,GAAOC,CAAI,IAAI,KAAK,SAAS,cAAc,MAAM,GAAG;AAEtE,WAAO,GAAGH,GAAK,MAAM,GAAG,EAAE,CAAC,IAAqBE,CAAK,IAAID,CAAI,IAAIE,CAAI;AAAA,EACvE;AAAA,EACA,eAAe;AAEb,UAAMC,IAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,GAC/C,CAACP,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY;AAEhD,WAAO,GAAGK,CAAI,OAAOP,CAAI,GAAGC,CAAK,GAAGC,CAAO,KAAKM,EAAO,KAAK,UAAU,IAAI,CAAC;AAAA,EAC7E;AAAA,EACA,eAAeC,GAASC,GAAS;AAC/B,WAAO,KAAK,UAAU,eAAe,KAAK,MAAMD,GAAS;AAAA,MACvD,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA;AAAA;AAAA,EAMA,eAAe;AACb,UAAMC,IAAS,KAAK,kBAAiB,GAC/BX,IAAOW,IAAS,IAAI,MAAM,KAC1BV,IAAQ,OAAO,KAAK,MAAM,KAAK,IAAIU,CAAM,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG,GACjET,IAAU,OAAO,KAAK,IAAIS,CAAM,IAAI,EAAE,EAAE,SAAS,GAAG,GAAG;AAC7D,WAAO,CAACX,GAAMC,GAAOC,CAAO;AAAA,EAC9B;AAAA;AAAA,EAIA,aAAaU,GAAU;AACrB,WAAO,IAAIhB,EAAO,CAAC,MAAMgB,CAAQ;AAAA,EACnC;AAAA;AAAA,EAIA,CAAC,uBAAO,IAAI,mBAAmB,CAAC,EAAER,GAAM;AACtC,WAAO,IAAIR,EAAO,CAAC,IAAI,KAAKQ,CAAI,GAAG,KAAK,QAAQ;AAAA,EAClD;AAAA;AAGF;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index180.js","sources":["../../../node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js"],"sourcesContent":["/**\n * Returns the start date of the week in the broadcast calendar.\n *\n * The broadcast week starts on Monday. If the first day of the month is not a\n * Monday, this function calculates the previous Monday as the start of the\n * broadcast week.\n *\n * @since 9.4.0\n * @param date The date for which to calculate the start of the broadcast week.\n * @param dateLib The date library to use for date manipulation.\n * @returns The start date of the broadcast week.\n */\nexport function startOfBroadcastWeek(date, dateLib) {\n const firstOfMonth = dateLib.startOfMonth(date);\n const dayOfWeek = firstOfMonth.getDay();\n if (dayOfWeek === 1) {\n return firstOfMonth;\n }\n else if (dayOfWeek === 0) {\n return dateLib.addDays(firstOfMonth, -1 * 6);\n }\n else {\n return dateLib.addDays(firstOfMonth, -1 * (dayOfWeek - 1));\n }\n}\n"],"names":["startOfBroadcastWeek","date","dateLib","firstOfMonth","dayOfWeek"],"mappings":"AAYO,SAASA,EAAqBC,GAAMC,GAAS;AAChD,QAAMC,IAAeD,EAAQ,aAAaD,CAAI,GACxCG,IAAYD,EAAa,OAAM;AACrC,SAAIC,MAAc,IACPD,IAEFC,MAAc,IACZF,EAAQ,QAAQC,GAAc,EAAM,IAGpCD,EAAQ,QAAQC,GAAc,MAAMC,IAAY,EAAE;AAEjE;","x_google_ignoreList":[0]}
package/dist/index181.js CHANGED
@@ -1,12 +1,11 @@
1
- function o(e, n, t = "long") {
2
- return new Intl.DateTimeFormat("en-US", {
3
- // Enforces engine to render the time. Without the option JavaScriptCore omits it.
4
- hour: "numeric",
5
- timeZone: e,
6
- timeZoneName: t
7
- }).format(n).split(/\s/g).slice(2).join(" ");
1
+ import { constructFrom as a } from "./index278.js";
2
+ import { toDate as i } from "./index279.js";
3
+ function s(e, r, o) {
4
+ const t = i(e, o?.in);
5
+ return isNaN(r) ? a(e, NaN) : (r && t.setDate(t.getDate() + r), t);
8
6
  }
9
7
  export {
10
- o as tzName
8
+ s as addDays,
9
+ s as default
11
10
  };
12
11
  //# sourceMappingURL=index181.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index181.js","sources":["../../../node_modules/@date-fns/tz/tzName/index.js"],"sourcesContent":["/**\n * Time zone name format.\n */\n\n/**\n * The function returns the time zone name for the given date in the specified\n * time zone.\n *\n * It uses the `Intl.DateTimeFormat` API and by default outputs the time zone\n * name in a long format, e.g. \"Pacific Standard Time\" or\n * \"Singapore Standard Time\".\n *\n * It is possible to specify the format as the third argument using one of the following options\n *\n * - \"short\": e.g. \"EDT\" or \"GMT+8\".\n * - \"long\": e.g. \"Eastern Daylight Time\".\n * - \"shortGeneric\": e.g. \"ET\" or \"Singapore Time\".\n * - \"longGeneric\": e.g. \"Eastern Time\" or \"Singapore Standard Time\".\n *\n * These options correspond to TR35 tokens `z..zzz`, `zzzz`, `v`, and `vvvv` respectively: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-zone\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date object to get the time zone name for\n * @param format - Optional format of the time zone name. Defaults to \"long\". Can be \"short\", \"long\", \"shortGeneric\", or \"longGeneric\".\n *\n * @returns Time zone name (e.g. \"Singapore Standard Time\")\n */\nexport function tzName(timeZone, date, format = \"long\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n // Enforces engine to render the time. Without the option JavaScriptCore omits it.\n hour: \"numeric\",\n timeZone: timeZone,\n timeZoneName: format\n }).format(date).split(/\\s/g) // Format.JS uses non-breaking spaces\n .slice(2) // Skip the hour and AM/PM parts\n .join(\" \");\n}"],"names":["tzName","timeZone","date","format"],"mappings":"AA2BO,SAASA,EAAOC,GAAUC,GAAMC,IAAS,QAAQ;AACtD,SAAO,IAAI,KAAK,eAAe,SAAS;AAAA;AAAA,IAEtC,MAAM;AAAA,IACN,UAAUF;AAAA,IACV,cAAcE;AAAA,EAClB,CAAG,EAAE,OAAOD,CAAI,EAAE,MAAM,KAAK,EAC1B,MAAM,CAAC,EACP,KAAK,GAAG;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index181.js","sources":["../../../node_modules/date-fns/addDays.js"],"sourcesContent":["import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n if (!amount) return _date;\n\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n"],"names":["addDays","date","amount","options","_date","toDate","constructFrom"],"mappings":";;AA6BO,SAASA,EAAQC,GAAMC,GAAQC,GAAS;AAC7C,QAAMC,IAAQC,EAAOJ,GAAME,GAAS,EAAE;AACtC,SAAI,MAAMD,CAAM,IAAUI,EAA6BL,GAAM,GAAG,KAG3DC,KAELE,EAAM,QAAQA,EAAM,QAAO,IAAKF,CAAM,GAC/BE;AACT;","x_google_ignoreList":[0]}
package/dist/index182.js CHANGED
@@ -1,70 +1,21 @@
1
- import { tzOffset as s } from "./index183.js";
2
- class n extends Date {
3
- //#region static
4
- constructor(...e) {
5
- super(), e.length > 1 && typeof e[e.length - 1] == "string" && (this.timeZone = e.pop()), this.internal = /* @__PURE__ */ new Date(), isNaN(s(this.timeZone, this)) ? this.setTime(NaN) : e.length ? typeof e[0] == "number" && (e.length === 1 || e.length === 2 && typeof e[1] != "number") ? this.setTime(e[0]) : typeof e[0] == "string" ? this.setTime(+new Date(e[0])) : e[0] instanceof Date ? this.setTime(+e[0]) : (this.setTime(+new Date(...e)), U(this), a(this)) : this.setTime(Date.now());
6
- }
7
- static tz(e, ...o) {
8
- return o.length ? new n(...o, e) : new n(Date.now(), e);
9
- }
10
- //#endregion
11
- //#region time zone
12
- withTimeZone(e) {
13
- return new n(+this, e);
14
- }
15
- getTimezoneOffset() {
16
- const e = -s(this.timeZone, this);
17
- return e > 0 ? Math.floor(e) : Math.ceil(e);
18
- }
19
- //#endregion
20
- //#region time
21
- setTime(e) {
22
- return Date.prototype.setTime.apply(this, arguments), a(this), +this;
23
- }
24
- //#endregion
25
- //#region date-fns integration
26
- [/* @__PURE__ */ Symbol.for("constructDateFrom")](e) {
27
- return new n(+new Date(e), this.timeZone);
28
- }
29
- //#endregion
30
- }
31
- const D = /^(get|set)(?!UTC)/;
32
- Object.getOwnPropertyNames(Date.prototype).forEach((t) => {
33
- if (!D.test(t)) return;
34
- const e = t.replace(D, "$1UTC");
35
- n.prototype[e] && (t.startsWith("get") ? n.prototype[t] = function() {
36
- return this.internal[e]();
37
- } : (n.prototype[t] = function() {
38
- return Date.prototype[e].apply(this.internal, arguments), H(this), +this;
39
- }, n.prototype[e] = function() {
40
- return Date.prototype[e].apply(this, arguments), a(this), +this;
41
- }));
42
- });
43
- function a(t) {
44
- t.internal.setTime(+t), t.internal.setUTCSeconds(t.internal.getUTCSeconds() - Math.round(-s(t.timeZone, t) * 60));
45
- }
46
- function H(t) {
47
- Date.prototype.setFullYear.call(t, t.internal.getUTCFullYear(), t.internal.getUTCMonth(), t.internal.getUTCDate()), Date.prototype.setHours.call(t, t.internal.getUTCHours(), t.internal.getUTCMinutes(), t.internal.getUTCSeconds(), t.internal.getUTCMilliseconds()), U(t);
48
- }
49
- function U(t) {
50
- const e = s(t.timeZone, t), o = e > 0 ? Math.floor(e) : Math.ceil(e), i = /* @__PURE__ */ new Date(+t);
51
- i.setUTCHours(i.getUTCHours() - 1);
52
- const r = -(/* @__PURE__ */ new Date(+t)).getTimezoneOffset(), g = -(/* @__PURE__ */ new Date(+i)).getTimezoneOffset(), m = r - g, M = Date.prototype.getHours.apply(t) !== t.internal.getUTCHours();
53
- m && M && t.internal.setUTCMinutes(t.internal.getUTCMinutes() + m);
54
- const f = r - o;
55
- f && Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + f);
56
- const l = /* @__PURE__ */ new Date(+t);
57
- l.setUTCSeconds(0);
58
- const y = r > 0 ? l.getSeconds() : (l.getSeconds() - 60) % 60, c = Math.round(-(s(t.timeZone, t) * 60)) % 60;
59
- (c || y) && (t.internal.setUTCSeconds(t.internal.getUTCSeconds() + c), Date.prototype.setUTCSeconds.call(t, Date.prototype.getUTCSeconds.call(t) + c + y));
60
- const p = s(t.timeZone, t), u = p > 0 ? Math.floor(p) : Math.ceil(p), w = -(/* @__PURE__ */ new Date(+t)).getTimezoneOffset() - u, O = u !== o, C = w - f;
61
- if (O && C) {
62
- Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + C);
63
- const h = s(t.timeZone, t), S = h > 0 ? Math.floor(h) : Math.ceil(h), T = u - S;
64
- T && (t.internal.setUTCMinutes(t.internal.getUTCMinutes() + T), Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + T));
65
- }
1
+ import { constructFrom as s } from "./index278.js";
2
+ import { toDate as f } from "./index279.js";
3
+ function u(n, o, i) {
4
+ const t = f(n, i?.in);
5
+ if (isNaN(o)) return s(n, NaN);
6
+ if (!o)
7
+ return t;
8
+ const r = t.getDate(), e = s(n, t.getTime());
9
+ e.setMonth(t.getMonth() + o + 1, 0);
10
+ const a = e.getDate();
11
+ return r >= a ? e : (t.setFullYear(
12
+ e.getFullYear(),
13
+ e.getMonth(),
14
+ r
15
+ ), t);
66
16
  }
67
17
  export {
68
- n as TZDateMini
18
+ u as addMonths,
19
+ u as default
69
20
  };
70
21
  //# sourceMappingURL=index182.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index182.js","sources":["../../../node_modules/@date-fns/tz/date/mini.js"],"sourcesContent":["import { tzOffset } from \"../tzOffset/index.js\";\nexport class TZDateMini extends Date {\n //#region static\n\n constructor(...args) {\n super();\n if (args.length > 1 && typeof args[args.length - 1] === \"string\") {\n this.timeZone = args.pop();\n }\n this.internal = new Date();\n if (isNaN(tzOffset(this.timeZone, this))) {\n this.setTime(NaN);\n } else {\n if (!args.length) {\n this.setTime(Date.now());\n } else if (typeof args[0] === \"number\" && (args.length === 1 || args.length === 2 && typeof args[1] !== \"number\")) {\n this.setTime(args[0]);\n } else if (typeof args[0] === \"string\") {\n this.setTime(+new Date(args[0]));\n } else if (args[0] instanceof Date) {\n this.setTime(+args[0]);\n } else {\n this.setTime(+new Date(...args));\n adjustToSystemTZ(this, NaN);\n syncToInternal(this);\n }\n }\n }\n static tz(tz, ...args) {\n return args.length ? new TZDateMini(...args, tz) : new TZDateMini(Date.now(), tz);\n }\n\n //#endregion\n\n //#region time zone\n\n withTimeZone(timeZone) {\n return new TZDateMini(+this, timeZone);\n }\n getTimezoneOffset() {\n const offset = -tzOffset(this.timeZone, this);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n return offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n }\n\n //#endregion\n\n //#region time\n\n setTime(time) {\n Date.prototype.setTime.apply(this, arguments);\n syncToInternal(this);\n return +this;\n }\n\n //#endregion\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDateMini(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}\n\n// Assign getters and setters\nconst re = /^(get|set)(?!UTC)/;\nObject.getOwnPropertyNames(Date.prototype).forEach(method => {\n if (!re.test(method)) return;\n const utcMethod = method.replace(re, \"$1UTC\");\n // Filter out methods without UTC counterparts\n if (!TZDateMini.prototype[utcMethod]) return;\n if (method.startsWith(\"get\")) {\n // Delegate to internal date's UTC method\n TZDateMini.prototype[method] = function () {\n return this.internal[utcMethod]();\n };\n } else {\n // Assign regular setter\n TZDateMini.prototype[method] = function () {\n Date.prototype[utcMethod].apply(this.internal, arguments);\n syncFromInternal(this);\n return +this;\n };\n\n // Assign UTC setter\n TZDateMini.prototype[utcMethod] = function () {\n Date.prototype[utcMethod].apply(this, arguments);\n syncToInternal(this);\n return +this;\n };\n }\n});\n\n/**\n * Function syncs time to internal date, applying the time zone offset.\n *\n * @param {Date} date - Date to sync\n */\nfunction syncToInternal(date) {\n date.internal.setTime(+date);\n date.internal.setUTCSeconds(date.internal.getUTCSeconds() - Math.round(-tzOffset(date.timeZone, date) * 60));\n}\n\n/**\n * Function syncs the internal date UTC values to the date. It allows to get\n * accurate timestamp value.\n *\n * @param {Date} date - The date to sync\n */\nfunction syncFromInternal(date) {\n // First we transpose the internal values\n Date.prototype.setFullYear.call(date, date.internal.getUTCFullYear(), date.internal.getUTCMonth(), date.internal.getUTCDate());\n Date.prototype.setHours.call(date, date.internal.getUTCHours(), date.internal.getUTCMinutes(), date.internal.getUTCSeconds(), date.internal.getUTCMilliseconds());\n\n // Now we have to adjust the date to the system time zone\n adjustToSystemTZ(date);\n}\n\n/**\n * Function adjusts the date to the system time zone. It uses the time zone\n * differences to calculate the offset and adjust the date.\n *\n * @param {Date} date - Date to adjust\n */\nfunction adjustToSystemTZ(date) {\n // Save the time zone offset before all the adjustments\n const baseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const offset = baseOffset > 0 ? Math.floor(baseOffset) : Math.ceil(baseOffset);\n //#region System DST adjustment\n\n // The biggest problem with using the system time zone is that when we create\n // a date from internal values stored in UTC, the system time zone might end\n // up on the DST hour:\n //\n // $ TZ=America/New_York node\n // > new Date(2020, 2, 8, 1).toString()\n // 'Sun Mar 08 2020 01:00:00 GMT-0500 (Eastern Standard Time)'\n // > new Date(2020, 2, 8, 2).toString()\n // 'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n // > new Date(2020, 2, 8, 3).toString()\n // 'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n // > new Date(2020, 2, 8, 4).toString()\n // 'Sun Mar 08 2020 04:00:00 GMT-0400 (Eastern Daylight Time)'\n //\n // Here we get the same hour for both 2 and 3, because the system time zone\n // has DST beginning at 8 March 2020, 2 a.m. and jumps to 3 a.m. So we have\n // to adjust the internal date to reflect that.\n //\n // However we want to adjust only if that's the DST hour the change happenes,\n // not the hour where DST moves to.\n\n // We calculate the previous hour to see if the time zone offset has changed\n // and we have landed on the DST hour.\n const prevHour = new Date(+date);\n // We use UTC methods here as we don't want to land on the same hour again\n // in case of DST.\n prevHour.setUTCHours(prevHour.getUTCHours() - 1);\n\n // Calculate if we are on the system DST hour.\n const systemOffset = -new Date(+date).getTimezoneOffset();\n const prevHourSystemOffset = -new Date(+prevHour).getTimezoneOffset();\n const systemDSTChange = systemOffset - prevHourSystemOffset;\n // Detect the DST shift. System DST change will occur both on\n const dstShift = Date.prototype.getHours.apply(date) !== date.internal.getUTCHours();\n\n // Move the internal date when we are on the system DST hour.\n if (systemDSTChange && dstShift) date.internal.setUTCMinutes(date.internal.getUTCMinutes() + systemDSTChange);\n\n //#endregion\n\n //#region System diff adjustment\n\n // Now we need to adjust the date, since we just applied internal values.\n // We need to calculate the difference between the system and date time zones\n // and apply it to the date.\n\n const offsetDiff = systemOffset - offset;\n if (offsetDiff) Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetDiff);\n\n //#endregion\n\n //#region Seconds System diff adjustment\n\n const systemDate = new Date(+date);\n // Set the UTC seconds to 0 to isolate the timezone offset in seconds.\n systemDate.setUTCSeconds(0);\n // For negative systemOffset, invert the seconds.\n const systemSecondsOffset = systemOffset > 0 ? systemDate.getSeconds() : (systemDate.getSeconds() - 60) % 60;\n\n // Calculate the seconds offset based on the timezone offset.\n const secondsOffset = Math.round(-(tzOffset(date.timeZone, date) * 60)) % 60;\n if (secondsOffset || systemSecondsOffset) {\n date.internal.setUTCSeconds(date.internal.getUTCSeconds() + secondsOffset);\n Date.prototype.setUTCSeconds.call(date, Date.prototype.getUTCSeconds.call(date) + secondsOffset + systemSecondsOffset);\n }\n\n //#endregion\n\n //#region Post-adjustment DST fix\n\n const postBaseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const postOffset = postBaseOffset > 0 ? Math.floor(postBaseOffset) : Math.ceil(postBaseOffset);\n const postSystemOffset = -new Date(+date).getTimezoneOffset();\n const postOffsetDiff = postSystemOffset - postOffset;\n const offsetChanged = postOffset !== offset;\n const postDiff = postOffsetDiff - offsetDiff;\n if (offsetChanged && postDiff) {\n Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + postDiff);\n\n // Now we need to check if got offset change during the post-adjustment.\n // If so, we also need both dates to reflect that.\n\n const newBaseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const newOffset = newBaseOffset > 0 ? Math.floor(newBaseOffset) : Math.ceil(newBaseOffset);\n const offsetChange = postOffset - newOffset;\n if (offsetChange) {\n date.internal.setUTCMinutes(date.internal.getUTCMinutes() + offsetChange);\n Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetChange);\n }\n }\n\n //#endregion\n}"],"names":["TZDateMini","args","tzOffset","adjustToSystemTZ","syncToInternal","tz","timeZone","offset","time","date","re","method","utcMethod","syncFromInternal","baseOffset","prevHour","systemOffset","prevHourSystemOffset","systemDSTChange","dstShift","offsetDiff","systemDate","systemSecondsOffset","secondsOffset","postBaseOffset","postOffset","postOffsetDiff","offsetChanged","postDiff","newBaseOffset","newOffset","offsetChange"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index182.js","sources":["../../../node_modules/date-fns/addMonths.js"],"sourcesContent":["import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n"],"names":["addMonths","date","amount","options","_date","toDate","constructFrom","dayOfMonth","endOfDesiredMonth","daysInMonth"],"mappings":";;AAiCO,SAASA,EAAUC,GAAMC,GAAQC,GAAS;AAC/C,QAAMC,IAAQC,EAAOJ,GAAME,GAAS,EAAE;AACtC,MAAI,MAAMD,CAAM,EAAG,QAAOI,EAA6BL,GAAM,GAAG;AAChE,MAAI,CAACC;AAEH,WAAOE;AAET,QAAMG,IAAaH,EAAM,QAAO,GAU1BI,IAAoBF,EAA6BL,GAAMG,EAAM,QAAO,CAAE;AAC5E,EAAAI,EAAkB,SAASJ,EAAM,SAAQ,IAAKF,IAAS,GAAG,CAAC;AAC3D,QAAMO,IAAcD,EAAkB,QAAO;AAC7C,SAAID,KAAcE,IAGTD,KASPJ,EAAM;AAAA,IACJI,EAAkB,YAAW;AAAA,IAC7BA,EAAkB,SAAQ;AAAA,IAC1BD;AAAA,EACN,GACWH;AAEX;","x_google_ignoreList":[0]}
package/dist/index183.js CHANGED
@@ -1,23 +1,9 @@
1
- const e = {}, s = {};
2
- function u(t, r) {
3
- try {
4
- const n = (e[t] ||= new Intl.DateTimeFormat("en-US", {
5
- timeZone: t,
6
- timeZoneName: "longOffset"
7
- }).format)(r).split("GMT")[1];
8
- return n in s ? s[n] : o(n, n.split(":"));
9
- } catch {
10
- if (t in s) return s[t];
11
- const f = t?.match(a);
12
- return f ? o(t, f.slice(1)) : NaN;
13
- }
14
- }
15
- const a = /([+-]\d\d):?(\d\d)?/;
16
- function o(t, r) {
17
- const f = +(r[0] || 0), n = +(r[1] || 0), c = +(r[2] || 0) / 60;
18
- return s[t] = f * 60 + n > 0 ? f * 60 + n + c : f * 60 - n - c;
1
+ import { addDays as r } from "./index181.js";
2
+ function o(a, d, e) {
3
+ return r(a, d * 7, e);
19
4
  }
20
5
  export {
21
- u as tzOffset
6
+ o as addWeeks,
7
+ o as default
22
8
  };
23
9
  //# sourceMappingURL=index183.js.map