@rpcbase/ui 0.183.0 → 0.184.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 (632) hide show
  1. package/dist/index10.js +25 -24
  2. package/dist/index10.js.map +1 -1
  3. package/dist/index100.js +5 -5
  4. package/dist/index100.js.map +1 -1
  5. package/dist/index101.js +5 -4
  6. package/dist/index101.js.map +1 -1
  7. package/dist/index102.js +4 -4
  8. package/dist/index102.js.map +1 -1
  9. package/dist/index103.js +4 -6
  10. package/dist/index103.js.map +1 -1
  11. package/dist/index104.js +6 -145
  12. package/dist/index104.js.map +1 -1
  13. package/dist/index105.js +24 -39
  14. package/dist/index105.js.map +1 -1
  15. package/dist/index106.js +6 -4
  16. package/dist/index106.js.map +1 -1
  17. package/dist/index107.js +4 -7
  18. package/dist/index107.js.map +1 -1
  19. package/dist/index108.js +6 -13
  20. package/dist/index108.js.map +1 -1
  21. package/dist/index109.js +5 -13
  22. package/dist/index109.js.map +1 -1
  23. package/dist/index11.js +34 -66
  24. package/dist/index11.js.map +1 -1
  25. package/dist/index110.js +4 -7
  26. package/dist/index110.js.map +1 -1
  27. package/dist/index111.js +5 -31
  28. package/dist/index111.js.map +1 -1
  29. package/dist/index112.js +4 -10
  30. package/dist/index112.js.map +1 -1
  31. package/dist/index113.js +8 -10
  32. package/dist/index113.js.map +1 -1
  33. package/dist/index114.js +5 -8
  34. package/dist/index114.js.map +1 -1
  35. package/dist/index115.js +4 -13
  36. package/dist/index115.js.map +1 -1
  37. package/dist/index116.js +4 -101
  38. package/dist/index116.js.map +1 -1
  39. package/dist/index117.js +7 -20
  40. package/dist/index117.js.map +1 -1
  41. package/dist/index118.js +145 -53
  42. package/dist/index118.js.map +1 -1
  43. package/dist/index119.js +36 -69
  44. package/dist/index119.js.map +1 -1
  45. package/dist/index12.js +556 -525
  46. package/dist/index12.js.map +1 -1
  47. package/dist/index120.js +4 -9
  48. package/dist/index120.js.map +1 -1
  49. package/dist/index121.js +5 -18
  50. package/dist/index121.js.map +1 -1
  51. package/dist/index122.js +13 -16
  52. package/dist/index122.js.map +1 -1
  53. package/dist/index123.js +13 -23
  54. package/dist/index123.js.map +1 -1
  55. package/dist/index124.js +7 -6
  56. package/dist/index124.js.map +1 -1
  57. package/dist/index125.js +31 -5
  58. package/dist/index125.js.map +1 -1
  59. package/dist/index126.js +10 -23
  60. package/dist/index126.js.map +1 -1
  61. package/dist/index127.js +11 -35
  62. package/dist/index127.js.map +1 -1
  63. package/dist/index128.js +9 -16
  64. package/dist/index128.js.map +1 -1
  65. package/dist/index129.js +13 -6
  66. package/dist/index129.js.map +1 -1
  67. package/dist/index13.js +128 -118
  68. package/dist/index13.js.map +1 -1
  69. package/dist/index130.js +101 -4
  70. package/dist/index130.js.map +1 -1
  71. package/dist/index131.js +20 -5
  72. package/dist/index131.js.map +1 -1
  73. package/dist/index132.js +53 -4
  74. package/dist/index132.js.map +1 -1
  75. package/dist/index133.js +72 -4
  76. package/dist/index133.js.map +1 -1
  77. package/dist/index134.js +9 -3
  78. package/dist/index134.js.map +1 -1
  79. package/dist/index135.js +20 -6
  80. package/dist/index135.js.map +1 -1
  81. package/dist/index136.js +17 -24
  82. package/dist/index136.js.map +1 -1
  83. package/dist/index137.js +23 -7
  84. package/dist/index137.js.map +1 -1
  85. package/dist/index138.js +6 -6
  86. package/dist/index138.js.map +1 -1
  87. package/dist/index139.js +5 -5
  88. package/dist/index139.js.map +1 -1
  89. package/dist/index14.js +74 -74
  90. package/dist/index14.js.map +1 -1
  91. package/dist/index140.js +23 -3
  92. package/dist/index140.js.map +1 -1
  93. package/dist/index141.js +35 -4
  94. package/dist/index141.js.map +1 -1
  95. package/dist/index142.js +16 -5
  96. package/dist/index142.js.map +1 -1
  97. package/dist/index143.js +6 -3
  98. package/dist/index143.js.map +1 -1
  99. package/dist/index144.js +4 -4
  100. package/dist/index144.js.map +1 -1
  101. package/dist/index145.js +4 -3
  102. package/dist/index145.js.map +1 -1
  103. package/dist/index146.js +4 -3
  104. package/dist/index146.js.map +1 -1
  105. package/dist/index147.js +4 -3
  106. package/dist/index147.js.map +1 -1
  107. package/dist/index148.js +3 -46
  108. package/dist/index148.js.map +1 -1
  109. package/dist/index149.js +6 -205
  110. package/dist/index149.js.map +1 -1
  111. package/dist/index15.js +763 -624
  112. package/dist/index15.js.map +1 -1
  113. package/dist/index150.js +24 -22
  114. package/dist/index150.js.map +1 -1
  115. package/dist/index151.js +7 -24
  116. package/dist/index151.js.map +1 -1
  117. package/dist/index152.js +6 -399
  118. package/dist/index152.js.map +1 -1
  119. package/dist/index153.js +5 -46
  120. package/dist/index153.js.map +1 -1
  121. package/dist/index154.js +3 -605
  122. package/dist/index154.js.map +1 -1
  123. package/dist/index155.js +3 -5
  124. package/dist/index155.js.map +1 -1
  125. package/dist/index156.js +3 -67
  126. package/dist/index156.js.map +1 -1
  127. package/dist/index157.js +4 -2
  128. package/dist/index157.js.map +1 -1
  129. package/dist/index158.js +4 -363
  130. package/dist/index158.js.map +1 -1
  131. package/dist/index159.js +3 -261
  132. package/dist/index159.js.map +1 -1
  133. package/dist/index16.js +20 -22
  134. package/dist/index16.js.map +1 -1
  135. package/dist/index160.js +3 -60
  136. package/dist/index160.js.map +1 -1
  137. package/dist/index161.js +3 -46
  138. package/dist/index161.js.map +1 -1
  139. package/dist/index162.js +5 -169
  140. package/dist/index162.js.map +1 -1
  141. package/dist/index163.js +61 -102
  142. package/dist/index163.js.map +1 -1
  143. package/dist/index164.js +2 -25
  144. package/dist/index164.js.map +1 -1
  145. package/dist/index165.js +364 -8
  146. package/dist/index165.js.map +1 -1
  147. package/dist/index166.js +261 -4
  148. package/dist/index166.js.map +1 -1
  149. package/dist/index167.js +60 -5
  150. package/dist/index167.js.map +1 -1
  151. package/dist/index168.js +46 -4
  152. package/dist/index168.js.map +1 -1
  153. package/dist/index169.js +153 -450
  154. package/dist/index169.js.map +1 -1
  155. package/dist/index17.js +17 -17
  156. package/dist/index17.js.map +1 -1
  157. package/dist/index170.js +102 -178
  158. package/dist/index170.js.map +1 -1
  159. package/dist/index171.js +24 -107
  160. package/dist/index171.js.map +1 -1
  161. package/dist/index172.js +8 -263
  162. package/dist/index172.js.map +1 -1
  163. package/dist/index173.js +4 -9
  164. package/dist/index173.js.map +1 -1
  165. package/dist/index174.js +5 -42
  166. package/dist/index174.js.map +1 -1
  167. package/dist/index175.js +3 -3
  168. package/dist/index175.js.map +1 -1
  169. package/dist/index176.js +459 -51
  170. package/dist/index176.js.map +1 -1
  171. package/dist/index177.js +185 -8
  172. package/dist/index177.js.map +1 -1
  173. package/dist/index178.js +102 -61
  174. package/dist/index178.js.map +1 -1
  175. package/dist/index179.js +260 -17
  176. package/dist/index179.js.map +1 -1
  177. package/dist/index18.js +411 -341
  178. package/dist/index18.js.map +1 -1
  179. package/dist/index180.js +9 -16
  180. package/dist/index180.js.map +1 -1
  181. package/dist/index181.js +41 -4
  182. package/dist/index181.js.map +1 -1
  183. package/dist/index182.js +4 -5
  184. package/dist/index182.js.map +1 -1
  185. package/dist/index183.js +24 -6
  186. package/dist/index183.js.map +1 -1
  187. package/dist/index184.js +29 -5
  188. package/dist/index184.js.map +1 -1
  189. package/dist/index185.js +5 -8
  190. package/dist/index185.js.map +1 -1
  191. package/dist/index186.js +67 -17
  192. package/dist/index186.js.map +1 -1
  193. package/dist/index187.js +180 -5
  194. package/dist/index187.js.map +1 -1
  195. package/dist/index188.js +46 -5
  196. package/dist/index188.js.map +1 -1
  197. package/dist/index189.js +58 -13
  198. package/dist/index189.js.map +1 -1
  199. package/dist/index19.js +626 -660
  200. package/dist/index19.js.map +1 -1
  201. package/dist/index190.js +8 -10
  202. package/dist/index190.js.map +1 -1
  203. package/dist/index191.js +66 -14
  204. package/dist/index191.js.map +1 -1
  205. package/dist/index192.js +19 -14
  206. package/dist/index192.js.map +1 -1
  207. package/dist/index193.js +16 -5
  208. package/dist/index193.js.map +1 -1
  209. package/dist/index194.js +5 -6
  210. package/dist/index194.js.map +1 -1
  211. package/dist/index195.js +5 -7
  212. package/dist/index195.js.map +1 -1
  213. package/dist/index196.js +6 -6
  214. package/dist/index196.js.map +1 -1
  215. package/dist/index197.js +4 -9
  216. package/dist/index197.js.map +1 -1
  217. package/dist/index198.js +7 -5
  218. package/dist/index198.js.map +1 -1
  219. package/dist/index199.js +17 -5
  220. package/dist/index199.js.map +1 -1
  221. package/dist/index20.js +442 -634
  222. package/dist/index20.js.map +1 -1
  223. package/dist/index200.js +5 -9
  224. package/dist/index200.js.map +1 -1
  225. package/dist/index201.js +5 -5
  226. package/dist/index201.js.map +1 -1
  227. package/dist/index202.js +13 -5
  228. package/dist/index202.js.map +1 -1
  229. package/dist/index203.js +10 -4
  230. package/dist/index203.js.map +1 -1
  231. package/dist/index204.js +14 -11
  232. package/dist/index204.js.map +1 -1
  233. package/dist/index205.js +14 -10
  234. package/dist/index205.js.map +1 -1
  235. package/dist/index206.js +5 -10
  236. package/dist/index206.js.map +1 -1
  237. package/dist/index207.js +6 -11
  238. package/dist/index207.js.map +1 -1
  239. package/dist/index208.js +7 -11
  240. package/dist/index208.js.map +1 -1
  241. package/dist/index209.js +6 -10
  242. package/dist/index209.js.map +1 -1
  243. package/dist/index21.js +254 -200
  244. package/dist/index21.js.map +1 -1
  245. package/dist/index210.js +9 -7
  246. package/dist/index210.js.map +1 -1
  247. package/dist/index211.js +5 -6
  248. package/dist/index211.js.map +1 -1
  249. package/dist/index212.js +5 -5
  250. package/dist/index212.js.map +1 -1
  251. package/dist/index213.js +9 -6
  252. package/dist/index213.js.map +1 -1
  253. package/dist/index214.js +5 -7
  254. package/dist/index214.js.map +1 -1
  255. package/dist/index215.js +5 -6
  256. package/dist/index215.js.map +1 -1
  257. package/dist/index216.js +4 -55
  258. package/dist/index216.js.map +1 -1
  259. package/dist/index217.js +11 -16
  260. package/dist/index217.js.map +1 -1
  261. package/dist/index218.js +10 -7
  262. package/dist/index218.js.map +1 -1
  263. package/dist/index219.js +10 -10
  264. package/dist/index219.js.map +1 -1
  265. package/dist/index22.js +1 -1
  266. package/dist/index22.js.map +1 -1
  267. package/dist/index220.js +11 -10
  268. package/dist/index220.js.map +1 -1
  269. package/dist/index221.js +11 -21
  270. package/dist/index221.js.map +1 -1
  271. package/dist/index222.js +10 -10
  272. package/dist/index222.js.map +1 -1
  273. package/dist/index223.js +7 -9
  274. package/dist/index223.js.map +1 -1
  275. package/dist/index224.js +6 -9
  276. package/dist/index224.js.map +1 -1
  277. package/dist/index225.js +5 -4
  278. package/dist/index225.js.map +1 -1
  279. package/dist/index226.js +6 -5
  280. package/dist/index226.js.map +1 -1
  281. package/dist/index227.js +7 -16
  282. package/dist/index227.js.map +1 -1
  283. package/dist/index228.js +6 -9
  284. package/dist/index228.js.map +1 -1
  285. package/dist/index229.js +54 -17
  286. package/dist/index229.js.map +1 -1
  287. package/dist/index23.js +27 -34
  288. package/dist/index23.js.map +1 -1
  289. package/dist/index230.js +16 -15
  290. package/dist/index230.js.map +1 -1
  291. package/dist/index231.js +7 -12
  292. package/dist/index231.js.map +1 -1
  293. package/dist/index232.js +9 -28
  294. package/dist/index232.js.map +1 -1
  295. package/dist/index233.js +9 -11
  296. package/dist/index233.js.map +1 -1
  297. package/dist/index234.js +20 -24
  298. package/dist/index234.js.map +1 -1
  299. package/dist/index235.js +10 -5
  300. package/dist/index235.js.map +1 -1
  301. package/dist/index236.js +9 -24
  302. package/dist/index236.js.map +1 -1
  303. package/dist/index237.js +10 -29
  304. package/dist/index237.js.map +1 -1
  305. package/dist/index238.js +5 -5
  306. package/dist/index238.js.map +1 -1
  307. package/dist/index239.js +5 -67
  308. package/dist/index239.js.map +1 -1
  309. package/dist/index24.js +219 -222
  310. package/dist/index24.js.map +1 -1
  311. package/dist/index240.js +15 -179
  312. package/dist/index240.js.map +1 -1
  313. package/dist/index241.js +9 -46
  314. package/dist/index241.js.map +1 -1
  315. package/dist/index242.js +18 -13
  316. package/dist/index242.js.map +1 -1
  317. package/dist/index243.js +15 -154
  318. package/dist/index243.js.map +1 -1
  319. package/dist/index244.js +12 -30
  320. package/dist/index244.js.map +1 -1
  321. package/dist/index245.js +29 -9
  322. package/dist/index245.js.map +1 -1
  323. package/dist/index246.js +11 -46
  324. package/dist/index246.js.map +1 -1
  325. package/dist/index247.js +25 -11
  326. package/dist/index247.js.map +1 -1
  327. package/dist/index248.js +5 -44
  328. package/dist/index248.js.map +1 -1
  329. package/dist/index249.js +12 -94
  330. package/dist/index249.js.map +1 -1
  331. package/dist/index25.js +46 -50
  332. package/dist/index25.js.map +1 -1
  333. package/dist/index250.js +143 -75
  334. package/dist/index250.js.map +1 -1
  335. package/dist/index251.js +27 -102
  336. package/dist/index251.js.map +1 -1
  337. package/dist/index252.js +9 -52
  338. package/dist/index252.js.map +1 -1
  339. package/dist/index253.js +46 -10
  340. package/dist/index253.js.map +1 -1
  341. package/dist/index254.js +10 -36
  342. package/dist/index254.js.map +1 -1
  343. package/dist/index255.js +44 -8
  344. package/dist/index255.js.map +1 -1
  345. package/dist/index256.js +86 -107
  346. package/dist/index256.js.map +1 -1
  347. package/dist/index257.js +86 -17
  348. package/dist/index257.js.map +1 -1
  349. package/dist/index258.js +104 -14
  350. package/dist/index258.js.map +1 -1
  351. package/dist/index259.js +52 -3
  352. package/dist/index259.js.map +1 -1
  353. package/dist/index260.js +10 -35
  354. package/dist/index260.js.map +1 -1
  355. package/dist/index261.js +36 -19
  356. package/dist/index261.js.map +1 -1
  357. package/dist/index262.js +8 -9
  358. package/dist/index262.js.map +1 -1
  359. package/dist/index263.js +3 -8
  360. package/dist/index263.js.map +1 -1
  361. package/dist/index264.js +9 -19
  362. package/dist/index264.js.map +1 -1
  363. package/dist/index265.js +113 -25
  364. package/dist/index265.js.map +1 -1
  365. package/dist/index266.js +17 -16
  366. package/dist/index266.js.map +1 -1
  367. package/dist/index267.js +15 -4
  368. package/dist/index267.js.map +1 -1
  369. package/dist/index268.js +36 -18
  370. package/dist/index268.js.map +1 -1
  371. package/dist/index269.js +20 -12
  372. package/dist/index269.js.map +1 -1
  373. package/dist/index270.js +9 -5
  374. package/dist/index270.js.map +1 -1
  375. package/dist/index271.js +20 -3
  376. package/dist/index271.js.map +1 -1
  377. package/dist/index272.js +26 -21
  378. package/dist/index272.js.map +1 -1
  379. package/dist/index273.js +15 -111
  380. package/dist/index273.js.map +1 -1
  381. package/dist/index274.js +5 -16
  382. package/dist/index274.js.map +1 -1
  383. package/dist/index275.js +3 -525
  384. package/dist/index275.js.map +1 -1
  385. package/dist/index276.js +23 -127
  386. package/dist/index276.js.map +1 -1
  387. package/dist/index277.js +108 -129
  388. package/dist/index277.js.map +1 -1
  389. package/dist/index278.js +15 -20
  390. package/dist/index278.js.map +1 -1
  391. package/dist/index279.js +524 -5
  392. package/dist/index279.js.map +1 -1
  393. package/dist/index28.js +3 -37
  394. package/dist/index28.js.map +1 -1
  395. package/dist/index280.js +127 -5
  396. package/dist/index280.js.map +1 -1
  397. package/dist/index281.js +134 -4
  398. package/dist/index281.js.map +1 -1
  399. package/dist/index282.js +4 -15
  400. package/dist/index282.js.map +1 -1
  401. package/dist/index283.js +19 -9
  402. package/dist/index283.js.map +1 -1
  403. package/dist/index284.js +12 -5
  404. package/dist/index284.js.map +1 -1
  405. package/dist/index285.js +20 -4
  406. package/dist/index285.js.map +1 -1
  407. package/dist/index286.js +67 -544
  408. package/dist/index286.js.map +1 -1
  409. package/dist/index287.js +8 -46
  410. package/dist/index287.js.map +1 -1
  411. package/dist/index288.js +14 -18
  412. package/dist/index288.js.map +1 -1
  413. package/dist/index289.js +66 -7
  414. package/dist/index289.js.map +1 -1
  415. package/dist/index29.js +37 -3
  416. package/dist/index29.js.map +1 -1
  417. package/dist/index290.js +64 -8
  418. package/dist/index290.js.map +1 -1
  419. package/dist/index291.js +5 -7
  420. package/dist/index291.js.map +1 -1
  421. package/dist/index292.js +5 -8
  422. package/dist/index292.js.map +1 -1
  423. package/dist/index293.js +4 -13
  424. package/dist/index293.js.map +1 -1
  425. package/dist/index294.js +15 -9
  426. package/dist/index294.js.map +1 -1
  427. package/dist/index295.js +8 -13
  428. package/dist/index295.js.map +1 -1
  429. package/dist/index296.js +6 -69
  430. package/dist/index296.js.map +1 -1
  431. package/dist/index297.js +5 -9
  432. package/dist/index297.js.map +1 -1
  433. package/dist/index298.js +545 -13
  434. package/dist/index298.js.map +1 -1
  435. package/dist/index299.js +45 -64
  436. package/dist/index299.js.map +1 -1
  437. package/dist/index3.js.map +1 -1
  438. package/dist/index30.js +3 -125
  439. package/dist/index30.js.map +1 -1
  440. package/dist/index300.js +15 -62
  441. package/dist/index300.js.map +1 -1
  442. package/dist/index301.js +6 -4
  443. package/dist/index301.js.map +1 -1
  444. package/dist/index302.js +9 -56
  445. package/dist/index302.js.map +1 -1
  446. package/dist/index303.js +8 -68
  447. package/dist/index303.js.map +1 -1
  448. package/dist/index304.js +9 -31
  449. package/dist/index304.js.map +1 -1
  450. package/dist/index305.js +13 -9
  451. package/dist/index305.js.map +1 -1
  452. package/dist/index306.js +10 -153
  453. package/dist/index306.js.map +1 -1
  454. package/dist/index307.js +14 -108
  455. package/dist/index307.js.map +1 -1
  456. package/dist/index31.js +120 -227
  457. package/dist/index31.js.map +1 -1
  458. package/dist/index310.js +4 -15
  459. package/dist/index310.js.map +1 -1
  460. package/dist/index311.js +55 -28
  461. package/dist/index311.js.map +1 -1
  462. package/dist/index312.js +68 -13
  463. package/dist/index312.js.map +1 -1
  464. package/dist/index313.js +31 -7
  465. package/dist/index313.js.map +1 -1
  466. package/dist/index314.js +9 -23
  467. package/dist/index314.js.map +1 -1
  468. package/dist/index315.js +152 -12
  469. package/dist/index315.js.map +1 -1
  470. package/dist/index316.js +107 -27
  471. package/dist/index316.js.map +1 -1
  472. package/dist/index317.js +22 -4
  473. package/dist/index317.js.map +1 -1
  474. package/dist/index318.js +16 -0
  475. package/dist/index318.js.map +1 -0
  476. package/dist/index319.js +31 -0
  477. package/dist/index319.js.map +1 -0
  478. package/dist/index32.js +229 -21
  479. package/dist/index32.js.map +1 -1
  480. package/dist/index320.js +8 -0
  481. package/dist/index320.js.map +1 -0
  482. package/dist/index321.js +19 -0
  483. package/dist/index321.js.map +1 -0
  484. package/dist/index322.js +32 -0
  485. package/dist/index322.js.map +1 -0
  486. package/dist/index323.js +16 -0
  487. package/dist/index323.js.map +1 -0
  488. package/dist/index324.js +10 -0
  489. package/dist/index324.js.map +1 -0
  490. package/dist/index33.js +23 -50
  491. package/dist/index33.js.map +1 -1
  492. package/dist/index34.js +50 -2640
  493. package/dist/index34.js.map +1 -1
  494. package/dist/index35.js +2598 -351
  495. package/dist/index35.js.map +1 -1
  496. package/dist/index36.js +375 -214
  497. package/dist/index36.js.map +1 -1
  498. package/dist/index37.js +230 -19
  499. package/dist/index37.js.map +1 -1
  500. package/dist/index38.js +18 -138
  501. package/dist/index38.js.map +1 -1
  502. package/dist/index39.js +113 -170
  503. package/dist/index39.js.map +1 -1
  504. package/dist/index4.js +17 -15
  505. package/dist/index4.js.map +1 -1
  506. package/dist/index40.js +209 -64
  507. package/dist/index40.js.map +1 -1
  508. package/dist/index41.js +86 -94
  509. package/dist/index41.js.map +1 -1
  510. package/dist/index42.js +118 -5
  511. package/dist/index42.js.map +1 -1
  512. package/dist/index43.js +5 -843
  513. package/dist/index43.js.map +1 -1
  514. package/dist/index44.js +832 -54
  515. package/dist/index44.js.map +1 -1
  516. package/dist/index45.js +57 -8
  517. package/dist/index45.js.map +1 -1
  518. package/dist/index46.js +8 -2
  519. package/dist/index46.js.map +1 -1
  520. package/dist/index47.js +2 -24
  521. package/dist/index47.js.map +1 -1
  522. package/dist/index48.js +11 -233
  523. package/dist/index48.js.map +1 -1
  524. package/dist/index49.js +19 -205
  525. package/dist/index49.js.map +1 -1
  526. package/dist/index5.js +34 -34
  527. package/dist/index5.js.map +1 -1
  528. package/dist/index50.js +7 -3
  529. package/dist/index50.js.map +1 -1
  530. package/dist/index51.js +2 -7
  531. package/dist/index51.js.map +1 -1
  532. package/dist/index52.js +22 -46
  533. package/dist/index52.js.map +1 -1
  534. package/dist/index53.js +232 -25
  535. package/dist/index53.js.map +1 -1
  536. package/dist/index54.js +203 -49
  537. package/dist/index54.js.map +1 -1
  538. package/dist/index55.js +3 -7
  539. package/dist/index55.js.map +1 -1
  540. package/dist/index56.js +6 -14
  541. package/dist/index56.js.map +1 -1
  542. package/dist/index57.js +43 -129
  543. package/dist/index57.js.map +1 -1
  544. package/dist/index58.js +26 -10
  545. package/dist/index58.js.map +1 -1
  546. package/dist/index59.js +48 -214
  547. package/dist/index59.js.map +1 -1
  548. package/dist/index6.js +154 -120
  549. package/dist/index6.js.map +1 -1
  550. package/dist/index60.js +8 -13
  551. package/dist/index60.js.map +1 -1
  552. package/dist/index61.js +14 -33
  553. package/dist/index61.js.map +1 -1
  554. package/dist/index62.js +128 -41
  555. package/dist/index62.js.map +1 -1
  556. package/dist/index63.js +10 -7
  557. package/dist/index63.js.map +1 -1
  558. package/dist/index64.js +213 -46
  559. package/dist/index64.js.map +1 -1
  560. package/dist/index65.js +13 -4
  561. package/dist/index65.js.map +1 -1
  562. package/dist/index66.js +33 -5
  563. package/dist/index66.js.map +1 -1
  564. package/dist/index67.js +46 -27
  565. package/dist/index67.js.map +1 -1
  566. package/dist/index68.js +8 -50
  567. package/dist/index68.js.map +1 -1
  568. package/dist/index69.js +50 -9
  569. package/dist/index69.js.map +1 -1
  570. package/dist/index7.js +29 -24
  571. package/dist/index7.js.map +1 -1
  572. package/dist/index70.js +4 -12
  573. package/dist/index70.js.map +1 -1
  574. package/dist/index71.js +5 -53
  575. package/dist/index71.js.map +1 -1
  576. package/dist/index72.js +28 -6
  577. package/dist/index72.js.map +1 -1
  578. package/dist/index73.js +50 -8
  579. package/dist/index73.js.map +1 -1
  580. package/dist/index74.js +9 -6
  581. package/dist/index74.js.map +1 -1
  582. package/dist/index77.js +12 -52
  583. package/dist/index77.js.map +1 -1
  584. package/dist/index78.js +5 -4
  585. package/dist/index78.js.map +1 -1
  586. package/dist/index79.js +7 -4
  587. package/dist/index79.js.map +1 -1
  588. package/dist/index8.js +21 -24
  589. package/dist/index8.js.map +1 -1
  590. package/dist/index80.js +5 -15
  591. package/dist/index80.js.map +1 -1
  592. package/dist/index81.js +2 -6
  593. package/dist/index81.js.map +1 -1
  594. package/dist/index82.js +2 -8
  595. package/dist/index82.js.map +1 -1
  596. package/dist/index83.js +53 -16
  597. package/dist/index83.js.map +1 -1
  598. package/dist/index84.js +46 -4
  599. package/dist/index84.js.map +1 -1
  600. package/dist/index85.js +205 -4
  601. package/dist/index85.js.map +1 -1
  602. package/dist/index86.js +22 -6
  603. package/dist/index86.js.map +1 -1
  604. package/dist/index87.js +24 -5
  605. package/dist/index87.js.map +1 -1
  606. package/dist/index88.js +399 -4
  607. package/dist/index88.js.map +1 -1
  608. package/dist/index89.js +46 -4
  609. package/dist/index89.js.map +1 -1
  610. package/dist/index9.js +138 -187
  611. package/dist/index9.js.map +1 -1
  612. package/dist/index90.js +605 -6
  613. package/dist/index90.js.map +1 -1
  614. package/dist/index91.js +52 -25
  615. package/dist/index91.js.map +1 -1
  616. package/dist/index92.js +4 -6
  617. package/dist/index92.js.map +1 -1
  618. package/dist/index93.js +4 -4
  619. package/dist/index93.js.map +1 -1
  620. package/dist/index94.js +14 -5
  621. package/dist/index94.js.map +1 -1
  622. package/dist/index95.js +3 -3
  623. package/dist/index95.js.map +1 -1
  624. package/dist/index96.js +7 -4
  625. package/dist/index96.js.map +1 -1
  626. package/dist/index97.js +16 -5
  627. package/dist/index97.js.map +1 -1
  628. package/dist/index98.js +3 -3
  629. package/dist/index98.js.map +1 -1
  630. package/dist/index99.js +4 -8
  631. package/dist/index99.js.map +1 -1
  632. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index19.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.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const 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 // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n 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 onDraftValueHandlerChange={setTriggerDraftValueHandler}\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 onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\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 onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n 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 if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n <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","setTriggerDraftValueHandler","handler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","uncontrolledOpen","setUncontrolledOpen","open","setOpen","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","onDraftValueHandlerChange","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","draft","setDraft","nextValue","moveSelection","base","baseIndex","nextIndex","nextOption","triggerClassName","IMaskInput","appended","dynamicMasked","digits","hourPrefix","accepted","nextText","completed","resolved","closestOption","highlightedOption","fallbackValue","shouldSelectAll","element"],"mappings":"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"}
1
+ {"version":3,"file":"index19.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.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const 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 // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n 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 onDraftValueHandlerChange={setTriggerDraftValueHandler}\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 onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\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 onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n 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 if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n <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","String","padStart","parseTimeInput","raw","trimmed","trim","match","exec","hours","Number","minutes","isFinite","parseTimeInputWithSelectableOption","options","parsed","parsedOption","find","option","isOptionSelectable","selectableValue","timeStringToMinutes","disabled","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","POSITIVE_INFINITY","bestMinutes","NEGATIVE_INFINITY","optionMinutes","diff","Math","abs","HourPickerScrollButton","direction","viewportRef","speed","className","setDisabled","React","useState","animationRef","useRef","undefined","lastTimeRef","isScrollingRef","checkScrollability","useCallback","viewport","current","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","useEffect","handleScroll","handleResize","addEventListener","passive","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","removeEventListener","disconnect","stopScrolling","cancelAnimationFrame","smoothScroll","currentTime","deltaTime","distance","requestAnimationFrame","oldScrollTop","maxScroll","newScrollTop","max","min","scrollTo","top","setTimeout","startScrolling","jsx","cn","ChevronUp","ChevronDown","HourPickerInput","t0","$","_c","id","onChange","onValueUpdate","placeholder","t1","inputClassName","readOnly","open","openProp","onOpenChange","triggerTestId","contentTestId","isHydrated","reactId","useId","triggerId","triggerInputRef","setTriggerDraftValueRef","t2","Symbol","for","handler","setTriggerDraftValueHandler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","_temp","uncontrolledOpen","setUncontrolledOpen","setOpen","t3","t4","input","HTMLInputElement","document","activeElement","focus","preventScroll","t5","next","updateHighlightedValue","t6","markKeyboardNavigation","t7","t8","currentOption","firstEnabled","_temp2","t9","next_0","matchingOption","option_1","updateValue","t10","next_1","matchingOption_0","option_2","commitValue","t11","t12","handlePointerDown","event","target","Node","container","contains","t13","t14","popover_0","popover","handleWheel","event_0","deltaY","maxScrollTop","atTop","atBottom","target_0","preventDefault","nextScrollTop","t15","t16","window","trigger","HTMLElement","isActive","observer","IntersectionObserver","entries","entry","isIntersecting","t17","trigger_0","popover_1","rect","getBoundingClientRect","popoverHeight","offsetHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","width","left","bottom","overflowBottom","aboveTop","updateDesktopPopoverPosition","t18","t19","rafId","useLayoutEffect","t20","viewport_0","raf","run","selected","querySelector","targetTop","offsetTop","targetBottom","viewportBottom","all","Array","from","querySelectorAll","length","lastDisabledBefore","el","hasAttribute","offset","firstEnabled_0","t21","t22","t23","viewport_1","target_2","targetTop_0","targetBottom_0","viewportBottom_0","t24","t25","node","t26","HourPickerMaskedSelectTrigger","t27","popover_2","DismissableLayerBranch","jsxs","map","option_3","isChecked","_temp3","event_2","movementX","movementY","Check","label","description","createPortal","body","t28","t29","event_1","option_0","displayName","HourPickerSelectField","SelectValue","SelectTrigger","_temp4","SelectContent","Select","SelectItem","HourPickerField","props","useIsTouchDevice","onCommit","inputRef","onDraftValueHandlerChange","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","draft","setDraft","nextValue","base","baseIndex","findIndex","nextIndex","nextOption","moveSelection","triggerClassName","mask","lazy","appended","dynamicMasked","digits","replace","compiledMasks","hourPrefix","slice","some","startsWith","accepted","nextText","completed","nextText_0","resolved","closestOption","currentTarget","key","defaultPrevented","ctrlKey","metaKey","altKey","resolved_0","highlightedOption","fallbackValue","_temp5","targetMinutes_0","closestOption_0","shouldSelectAll","element","select","resolved_1","IMaskInput","_temp6","_temp7","event_3"],"mappings":"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"}
package/dist/index190.js CHANGED
@@ -1,14 +1,12 @@
1
- import { normalizeDates as l } from "./index283.js";
2
- function s(n, r, a) {
3
- const [e, t] = l(
4
- a?.in,
5
- n,
6
- r
7
- ), o = e.getFullYear() - t.getFullYear(), f = e.getMonth() - t.getMonth();
8
- return o * 12 + f;
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(" ");
9
8
  }
10
9
  export {
11
- s as default,
12
- s as differenceInCalendarMonths
10
+ o as tzName
13
11
  };
14
12
  //# sourceMappingURL=index190.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index190.js","sources":["../../../node_modules/date-fns/differenceInCalendarMonths.js"],"sourcesContent":["import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n"],"names":["differenceInCalendarMonths","laterDate","earlierDate","options","laterDate_","earlierDate_","normalizeDates","yearsDiff","monthsDiff"],"mappings":";AA4BO,SAASA,EAA2BC,GAAWC,GAAaC,GAAS;AAC1E,QAAM,CAACC,GAAYC,CAAY,IAAIC;AAAA,IACjCH,GAAS;AAAA,IACTF;AAAA,IACAC;AAAA,EACJ,GAEQK,IAAYH,EAAW,YAAW,IAAKC,EAAa,YAAW,GAC/DG,IAAaJ,EAAW,SAAQ,IAAKC,EAAa,SAAQ;AAEhE,SAAOE,IAAY,KAAKC;AAC1B;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index190.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]}
package/dist/index191.js CHANGED
@@ -1,18 +1,70 @@
1
- import { normalizeInterval as l } from "./index284.js";
2
- import { constructFrom as m } from "./index279.js";
3
- function u(s, a) {
4
- const { start: e, end: r } = l(a?.in, s);
5
- let n = +e > +r;
6
- const c = n ? +e : +r, t = n ? r : e;
7
- t.setHours(0, 0, 0, 0), t.setDate(1);
8
- let i = 1;
9
- const o = [];
10
- for (; +t <= c; )
11
- o.push(m(e, t)), t.setMonth(t.getMonth() + i);
12
- return n ? o.reverse() : o;
1
+ import { tzOffset as s } from "./index192.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
+ }
13
66
  }
14
67
  export {
15
- u as default,
16
- u as eachMonthOfInterval
68
+ n as TZDateMini
17
69
  };
18
70
  //# sourceMappingURL=index191.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index191.js","sources":["../../../node_modules/date-fns/eachMonthOfInterval.js"],"sourcesContent":["import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachMonthOfInterval} function options.\n */\n\n/**\n * The {@link eachMonthOfInterval} function result type. It resolves the proper data type.\n */\n\n/**\n * @name eachMonthOfInterval\n * @category Interval Helpers\n * @summary Return the array of months within the specified time interval.\n *\n * @description\n * Return the array of months within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of months from the month of the interval start to the month of the interval end\n *\n * @example\n * // Each month between 6 February 2014 and 10 August 2014:\n * const result = eachMonthOfInterval({\n * start: new Date(2014, 1, 6),\n * end: new Date(2014, 7, 10)\n * })\n * //=> [\n * // Sat Feb 01 2014 00:00:00,\n * // Sat Mar 01 2014 00:00:00,\n * // Tue Apr 01 2014 00:00:00,\n * // Thu May 01 2014 00:00:00,\n * // Sun Jun 01 2014 00:00:00,\n * // Tue Jul 01 2014 00:00:00,\n * // Fri Aug 01 2014 00:00:00\n * // ]\n */\nexport function eachMonthOfInterval(interval, options) {\n const { start, end } = normalizeInterval(options?.in, interval);\n\n let reversed = +start > +end;\n const endTime = reversed ? +start : +end;\n const date = reversed ? end : start;\n date.setHours(0, 0, 0, 0);\n date.setDate(1);\n\n let step = options?.step ?? 1;\n if (!step) return [];\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(constructFrom(start, date));\n date.setMonth(date.getMonth() + step);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachMonthOfInterval;\n"],"names":["eachMonthOfInterval","interval","options","start","end","normalizeInterval","reversed","endTime","date","step","dates","constructFrom"],"mappings":";;AA2CO,SAASA,EAAoBC,GAAUC,GAAS;AACrD,QAAM,EAAE,OAAAC,GAAO,KAAAC,EAAG,IAAKC,EAAkBH,GAAS,IAAID,CAAQ;AAE9D,MAAIK,IAAW,CAACH,IAAQ,CAACC;AACzB,QAAMG,IAAUD,IAAW,CAACH,IAAQ,CAACC,GAC/BI,IAAOF,IAAWF,IAAMD;AAC9B,EAAAK,EAAK,SAAS,GAAG,GAAG,GAAG,CAAC,GACxBA,EAAK,QAAQ,CAAC;AAEd,MAAIC,IAAwB;AAO5B,QAAMC,IAAQ,CAAA;AAEd,SAAO,CAACF,KAAQD;AACd,IAAAG,EAAM,KAAKC,EAAcR,GAAOK,CAAI,CAAC,GACrCA,EAAK,SAASA,EAAK,SAAQ,IAAKC,CAAI;AAGtC,SAAOH,IAAWI,EAAM,QAAO,IAAKA;AACtC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index191.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]}
package/dist/index192.js CHANGED
@@ -1,18 +1,23 @@
1
- import { normalizeInterval as u } from "./index284.js";
2
- import { constructFrom as i } from "./index279.js";
3
- function f(o, a) {
4
- const { start: t, end: r } = u(a?.in, o);
5
- let s = +t > +r;
6
- const l = s ? +t : +r, e = s ? r : t;
7
- e.setHours(0, 0, 0, 0), e.setMonth(0, 1);
8
- let c = 1;
9
- const n = [];
10
- for (; +e <= l; )
11
- n.push(i(t, e)), e.setFullYear(e.getFullYear() + c);
12
- return s ? n.reverse() : n;
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;
13
19
  }
14
20
  export {
15
- f as default,
16
- f as eachYearOfInterval
21
+ u as tzOffset
17
22
  };
18
23
  //# sourceMappingURL=index192.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index192.js","sources":["../../../node_modules/date-fns/eachYearOfInterval.js"],"sourcesContent":["import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachYearOfInterval} function options.\n */\n\n/**\n * The {@link eachYearOfInterval} function result type. It resolves the proper data type.\n * It uses the first argument date object type, starting from the date argument,\n * then the start interval date, and finally the end interval date. If\n * a context function is passed, it uses the context function return type.\n */\n\n/**\n * @name eachYearOfInterval\n * @category Interval Helpers\n * @summary Return the array of yearly timestamps within the specified time interval.\n *\n * @description\n * Return the array of yearly timestamps within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of yearly timestamps from the month of the interval start to the month of the interval end\n *\n * @example\n * // Each year between 6 February 2014 and 10 August 2017:\n * const result = eachYearOfInterval({\n * start: new Date(2014, 1, 6),\n * end: new Date(2017, 7, 10)\n * })\n * //=> [\n * // Wed Jan 01 2014 00:00:00,\n * // Thu Jan 01 2015 00:00:00,\n * // Fri Jan 01 2016 00:00:00,\n * // Sun Jan 01 2017 00:00:00\n * // ]\n */\nexport function eachYearOfInterval(interval, options) {\n const { start, end } = normalizeInterval(options?.in, interval);\n\n let reversed = +start > +end;\n const endTime = reversed ? +start : +end;\n const date = reversed ? end : start;\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n\n let step = options?.step ?? 1;\n if (!step) return [];\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(constructFrom(start, date));\n date.setFullYear(date.getFullYear() + step);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachYearOfInterval;\n"],"names":["eachYearOfInterval","interval","options","start","end","normalizeInterval","reversed","endTime","date","step","dates","constructFrom"],"mappings":";;AA2CO,SAASA,EAAmBC,GAAUC,GAAS;AACpD,QAAM,EAAE,OAAAC,GAAO,KAAAC,EAAG,IAAKC,EAAkBH,GAAS,IAAID,CAAQ;AAE9D,MAAIK,IAAW,CAACH,IAAQ,CAACC;AACzB,QAAMG,IAAUD,IAAW,CAACH,IAAQ,CAACC,GAC/BI,IAAOF,IAAWF,IAAMD;AAC9B,EAAAK,EAAK,SAAS,GAAG,GAAG,GAAG,CAAC,GACxBA,EAAK,SAAS,GAAG,CAAC;AAElB,MAAIC,IAAwB;AAO5B,QAAMC,IAAQ,CAAA;AAEd,SAAO,CAACF,KAAQD;AACd,IAAAG,EAAM,KAAKC,EAAcR,GAAOK,CAAI,CAAC,GACrCA,EAAK,YAAYA,EAAK,YAAW,IAAKC,CAAI;AAG5C,SAAOH,IAAWI,EAAM,QAAO,IAAKA;AACtC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index192.js","sources":["../../../node_modules/@date-fns/tz/tzOffset/index.js"],"sourcesContent":["const offsetFormatCache = {};\nconst offsetCache = {};\n\n/**\n * The function extracts UTC offset in minutes from the given date in specified\n * time zone.\n *\n * Unlike `Date.prototype.getTimezoneOffset`, this function returns the value\n * mirrored to the sign of the offset in the time zone. For Asia/Singapore\n * (UTC+8), `tzOffset` returns 480, while `getTimezoneOffset` returns -480.\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date to check the offset for\n *\n * @returns UTC offset in minutes\n */\nexport function tzOffset(timeZone, date) {\n try {\n const format = offsetFormatCache[timeZone] ||= new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n timeZoneName: \"longOffset\"\n }).format;\n const offsetStr = format(date).split(\"GMT\")[1];\n if (offsetStr in offsetCache) return offsetCache[offsetStr];\n return calcOffset(offsetStr, offsetStr.split(\":\"));\n } catch {\n // Fallback to manual parsing if the runtime doesn't support ±HH:MM/±HHMM/±HH\n // See: https://github.com/nodejs/node/issues/53419\n if (timeZone in offsetCache) return offsetCache[timeZone];\n const captures = timeZone?.match(offsetRe);\n if (captures) return calcOffset(timeZone, captures.slice(1));\n return NaN;\n }\n}\nconst offsetRe = /([+-]\\d\\d):?(\\d\\d)?/;\nfunction calcOffset(cacheStr, values) {\n const hours = +(values[0] || 0);\n const minutes = +(values[1] || 0);\n // Convert seconds to minutes by dividing by 60 to keep the function return in minutes.\n const seconds = +(values[2] || 0) / 60;\n return offsetCache[cacheStr] = hours * 60 + minutes > 0 ? hours * 60 + minutes + seconds : hours * 60 - minutes - seconds;\n}"],"names":["offsetFormatCache","offsetCache","tzOffset","timeZone","date","offsetStr","calcOffset","captures","offsetRe","cacheStr","values","hours","minutes","seconds"],"mappings":"AAAA,MAAMA,IAAoB,CAAA,GACpBC,IAAc,CAAA;AAeb,SAASC,EAASC,GAAUC,GAAM;AACvC,MAAI;AAKF,UAAMC,KAJSL,EAAkBG,CAAQ,MAAM,IAAI,KAAK,eAAe,SAAS;AAAA,MAC9E,UAAAA;AAAA,MACA,cAAc;AAAA,IACpB,CAAK,EAAE,QACsBC,CAAI,EAAE,MAAM,KAAK,EAAE,CAAC;AAC7C,WAAIC,KAAaJ,IAAoBA,EAAYI,CAAS,IACnDC,EAAWD,GAAWA,EAAU,MAAM,GAAG,CAAC;AAAA,EACnD,QAAQ;AAGN,QAAIF,KAAYF,EAAa,QAAOA,EAAYE,CAAQ;AACxD,UAAMI,IAAWJ,GAAU,MAAMK,CAAQ;AACzC,WAAID,IAAiBD,EAAWH,GAAUI,EAAS,MAAM,CAAC,CAAC,IACpD;AAAA,EACT;AACF;AACA,MAAMC,IAAW;AACjB,SAASF,EAAWG,GAAUC,GAAQ;AACpC,QAAMC,IAAQ,EAAED,EAAO,CAAC,KAAK,IACvBE,IAAU,EAAEF,EAAO,CAAC,KAAK,IAEzBG,IAAU,EAAEH,EAAO,CAAC,KAAK,KAAK;AACpC,SAAOT,EAAYQ,CAAQ,IAAIE,IAAQ,KAAKC,IAAU,IAAID,IAAQ,KAAKC,IAAUC,IAAUF,IAAQ,KAAKC,IAAUC;AACpH;","x_google_ignoreList":[0]}