@mieweb/ui 0.1.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 (459) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +696 -0
  3. package/dist/brands/bluehive.cjs +18 -0
  4. package/dist/brands/bluehive.cjs.map +1 -0
  5. package/dist/brands/bluehive.css +136 -0
  6. package/dist/brands/bluehive.d.cts +16 -0
  7. package/dist/brands/bluehive.d.ts +16 -0
  8. package/dist/brands/bluehive.js +3 -0
  9. package/dist/brands/bluehive.js.map +1 -0
  10. package/dist/brands/enterprise-health.css +260 -0
  11. package/dist/brands/index.cjs +55 -0
  12. package/dist/brands/index.cjs.map +1 -0
  13. package/dist/brands/index.d.cts +100 -0
  14. package/dist/brands/index.d.ts +100 -0
  15. package/dist/brands/index.js +10 -0
  16. package/dist/brands/index.js.map +1 -0
  17. package/dist/brands/mieweb.css +138 -0
  18. package/dist/brands/types.cjs +20 -0
  19. package/dist/brands/types.cjs.map +1 -0
  20. package/dist/brands/types.d.cts +188 -0
  21. package/dist/brands/types.d.ts +188 -0
  22. package/dist/brands/types.js +3 -0
  23. package/dist/brands/types.js.map +1 -0
  24. package/dist/brands/waggleline.css +164 -0
  25. package/dist/brands/webchart.css +138 -0
  26. package/dist/chunk-265CFCCX.js +173 -0
  27. package/dist/chunk-265CFCCX.js.map +1 -0
  28. package/dist/chunk-2J2V4TMJ.cjs +139 -0
  29. package/dist/chunk-2J2V4TMJ.cjs.map +1 -0
  30. package/dist/chunk-2O7D6F67.cjs +63 -0
  31. package/dist/chunk-2O7D6F67.cjs.map +1 -0
  32. package/dist/chunk-3NJ72QU6.js +55 -0
  33. package/dist/chunk-3NJ72QU6.js.map +1 -0
  34. package/dist/chunk-4AWW5WPF.js +161 -0
  35. package/dist/chunk-4AWW5WPF.js.map +1 -0
  36. package/dist/chunk-4LNS5QDP.cjs +84 -0
  37. package/dist/chunk-4LNS5QDP.cjs.map +1 -0
  38. package/dist/chunk-4LTN2LEN.js +79 -0
  39. package/dist/chunk-4LTN2LEN.js.map +1 -0
  40. package/dist/chunk-4MHTSFPX.js +205 -0
  41. package/dist/chunk-4MHTSFPX.js.map +1 -0
  42. package/dist/chunk-4YRAEFYW.js +233 -0
  43. package/dist/chunk-4YRAEFYW.js.map +1 -0
  44. package/dist/chunk-53K3KWXQ.cjs +753 -0
  45. package/dist/chunk-53K3KWXQ.cjs.map +1 -0
  46. package/dist/chunk-6DP6RKUA.cjs +15 -0
  47. package/dist/chunk-6DP6RKUA.cjs.map +1 -0
  48. package/dist/chunk-6HFFWEM3.cjs +22 -0
  49. package/dist/chunk-6HFFWEM3.cjs.map +1 -0
  50. package/dist/chunk-6OCIIIAI.js +128 -0
  51. package/dist/chunk-6OCIIIAI.js.map +1 -0
  52. package/dist/chunk-6Q4SU72T.js +300 -0
  53. package/dist/chunk-6Q4SU72T.js.map +1 -0
  54. package/dist/chunk-AU5ADTYD.cjs +326 -0
  55. package/dist/chunk-AU5ADTYD.cjs.map +1 -0
  56. package/dist/chunk-AWIULTJW.js +190 -0
  57. package/dist/chunk-AWIULTJW.js.map +1 -0
  58. package/dist/chunk-B26RIQ5R.js +97 -0
  59. package/dist/chunk-B26RIQ5R.js.map +1 -0
  60. package/dist/chunk-B3L43JGH.js +98 -0
  61. package/dist/chunk-B3L43JGH.js.map +1 -0
  62. package/dist/chunk-B7DA35BY.cjs +496 -0
  63. package/dist/chunk-B7DA35BY.cjs.map +1 -0
  64. package/dist/chunk-B7YGVKTE.cjs +184 -0
  65. package/dist/chunk-B7YGVKTE.cjs.map +1 -0
  66. package/dist/chunk-BR2XGATJ.cjs +40 -0
  67. package/dist/chunk-BR2XGATJ.cjs.map +1 -0
  68. package/dist/chunk-BTJHYGPI.cjs +27 -0
  69. package/dist/chunk-BTJHYGPI.cjs.map +1 -0
  70. package/dist/chunk-BXK5TNJE.cjs +329 -0
  71. package/dist/chunk-BXK5TNJE.cjs.map +1 -0
  72. package/dist/chunk-C6MDPPPL.js +82 -0
  73. package/dist/chunk-C6MDPPPL.js.map +1 -0
  74. package/dist/chunk-CEHWXAAI.js +22 -0
  75. package/dist/chunk-CEHWXAAI.js.map +1 -0
  76. package/dist/chunk-CLNOI5J7.js +38 -0
  77. package/dist/chunk-CLNOI5J7.js.map +1 -0
  78. package/dist/chunk-CP7NPDQW.js +99 -0
  79. package/dist/chunk-CP7NPDQW.js.map +1 -0
  80. package/dist/chunk-CQCYXHCU.cjs +256 -0
  81. package/dist/chunk-CQCYXHCU.cjs.map +1 -0
  82. package/dist/chunk-D5IBXXF2.js +243 -0
  83. package/dist/chunk-D5IBXXF2.js.map +1 -0
  84. package/dist/chunk-DMA74PZ7.js +240 -0
  85. package/dist/chunk-DMA74PZ7.js.map +1 -0
  86. package/dist/chunk-EF46XW4Z.cjs +270 -0
  87. package/dist/chunk-EF46XW4Z.cjs.map +1 -0
  88. package/dist/chunk-EKIQE524.cjs +78 -0
  89. package/dist/chunk-EKIQE524.cjs.map +1 -0
  90. package/dist/chunk-F3SOEIN2.js +11 -0
  91. package/dist/chunk-F3SOEIN2.js.map +1 -0
  92. package/dist/chunk-FFJVCQ5R.cjs +128 -0
  93. package/dist/chunk-FFJVCQ5R.cjs.map +1 -0
  94. package/dist/chunk-FHY3K6PL.cjs +24 -0
  95. package/dist/chunk-FHY3K6PL.cjs.map +1 -0
  96. package/dist/chunk-FIUNOH6W.js +13 -0
  97. package/dist/chunk-FIUNOH6W.js.map +1 -0
  98. package/dist/chunk-FIXAVBUA.cjs +200 -0
  99. package/dist/chunk-FIXAVBUA.cjs.map +1 -0
  100. package/dist/chunk-FQ5G7J24.js +297 -0
  101. package/dist/chunk-FQ5G7J24.js.map +1 -0
  102. package/dist/chunk-G2DOD34H.js +215 -0
  103. package/dist/chunk-G2DOD34H.js.map +1 -0
  104. package/dist/chunk-GV5JQBPX.js +110 -0
  105. package/dist/chunk-GV5JQBPX.js.map +1 -0
  106. package/dist/chunk-H2CIKJQI.js +32 -0
  107. package/dist/chunk-H2CIKJQI.js.map +1 -0
  108. package/dist/chunk-HB7C7NB5.js +20 -0
  109. package/dist/chunk-HB7C7NB5.js.map +1 -0
  110. package/dist/chunk-HLW3XD5R.cjs +322 -0
  111. package/dist/chunk-HLW3XD5R.cjs.map +1 -0
  112. package/dist/chunk-HRA4FUO6.cjs +425 -0
  113. package/dist/chunk-HRA4FUO6.cjs.map +1 -0
  114. package/dist/chunk-IY7UQPDO.cjs +122 -0
  115. package/dist/chunk-IY7UQPDO.cjs.map +1 -0
  116. package/dist/chunk-JFAXLE2J.js +217 -0
  117. package/dist/chunk-JFAXLE2J.js.map +1 -0
  118. package/dist/chunk-JYMQJ32S.cjs +115 -0
  119. package/dist/chunk-JYMQJ32S.cjs.map +1 -0
  120. package/dist/chunk-KJOFWJHV.js +406 -0
  121. package/dist/chunk-KJOFWJHV.js.map +1 -0
  122. package/dist/chunk-KJZNEVYM.js +61 -0
  123. package/dist/chunk-KJZNEVYM.js.map +1 -0
  124. package/dist/chunk-KMN7JX2X.cjs +67 -0
  125. package/dist/chunk-KMN7JX2X.cjs.map +1 -0
  126. package/dist/chunk-LEE3NMNP.cjs +429 -0
  127. package/dist/chunk-LEE3NMNP.cjs.map +1 -0
  128. package/dist/chunk-LZEY55QZ.cjs +219 -0
  129. package/dist/chunk-LZEY55QZ.cjs.map +1 -0
  130. package/dist/chunk-MKJDBXX4.cjs +171 -0
  131. package/dist/chunk-MKJDBXX4.cjs.map +1 -0
  132. package/dist/chunk-MTZPVOP6.js +99 -0
  133. package/dist/chunk-MTZPVOP6.js.map +1 -0
  134. package/dist/chunk-N3QTYHRZ.cjs +134 -0
  135. package/dist/chunk-N3QTYHRZ.cjs.map +1 -0
  136. package/dist/chunk-N5EKL4DH.js +148 -0
  137. package/dist/chunk-N5EKL4DH.js.map +1 -0
  138. package/dist/chunk-NAATBUHR.cjs +231 -0
  139. package/dist/chunk-NAATBUHR.cjs.map +1 -0
  140. package/dist/chunk-NH2JVQ6V.cjs +272 -0
  141. package/dist/chunk-NH2JVQ6V.cjs.map +1 -0
  142. package/dist/chunk-NIHESA7O.js +114 -0
  143. package/dist/chunk-NIHESA7O.js.map +1 -0
  144. package/dist/chunk-NXRLGHEC.js +98 -0
  145. package/dist/chunk-NXRLGHEC.js.map +1 -0
  146. package/dist/chunk-O5HS7ZND.cjs +81 -0
  147. package/dist/chunk-O5HS7ZND.cjs.map +1 -0
  148. package/dist/chunk-O7WRE2WX.js +195 -0
  149. package/dist/chunk-O7WRE2WX.js.map +1 -0
  150. package/dist/chunk-ONWOB76P.js +319 -0
  151. package/dist/chunk-ONWOB76P.js.map +1 -0
  152. package/dist/chunk-OR5DRJCW.cjs +13 -0
  153. package/dist/chunk-OR5DRJCW.cjs.map +1 -0
  154. package/dist/chunk-ORUPC5TV.cjs +244 -0
  155. package/dist/chunk-ORUPC5TV.cjs.map +1 -0
  156. package/dist/chunk-OT36EMM5.js +22 -0
  157. package/dist/chunk-OT36EMM5.js.map +1 -0
  158. package/dist/chunk-OW2BWGST.js +238 -0
  159. package/dist/chunk-OW2BWGST.js.map +1 -0
  160. package/dist/chunk-OWPWP46L.js +92 -0
  161. package/dist/chunk-OWPWP46L.js.map +1 -0
  162. package/dist/chunk-P52GA3GJ.cjs +101 -0
  163. package/dist/chunk-P52GA3GJ.cjs.map +1 -0
  164. package/dist/chunk-PEFJAWNR.cjs +121 -0
  165. package/dist/chunk-PEFJAWNR.cjs.map +1 -0
  166. package/dist/chunk-PF3XWKE5.cjs +343 -0
  167. package/dist/chunk-PF3XWKE5.cjs.map +1 -0
  168. package/dist/chunk-QBWVTJKF.js +548 -0
  169. package/dist/chunk-QBWVTJKF.js.map +1 -0
  170. package/dist/chunk-QDGZBDBI.cjs +99 -0
  171. package/dist/chunk-QDGZBDBI.cjs.map +1 -0
  172. package/dist/chunk-QL2YTVTR.js +163 -0
  173. package/dist/chunk-QL2YTVTR.js.map +1 -0
  174. package/dist/chunk-QYJ7RQJ2.cjs +239 -0
  175. package/dist/chunk-QYJ7RQJ2.cjs.map +1 -0
  176. package/dist/chunk-QZLRB3UG.js +727 -0
  177. package/dist/chunk-QZLRB3UG.js.map +1 -0
  178. package/dist/chunk-R4DM4635.cjs +109 -0
  179. package/dist/chunk-R4DM4635.cjs.map +1 -0
  180. package/dist/chunk-RCMF6KZA.js +75 -0
  181. package/dist/chunk-RCMF6KZA.js.map +1 -0
  182. package/dist/chunk-RRQGH7C5.cjs +187 -0
  183. package/dist/chunk-RRQGH7C5.cjs.map +1 -0
  184. package/dist/chunk-S6UNPMAS.cjs +84 -0
  185. package/dist/chunk-S6UNPMAS.cjs.map +1 -0
  186. package/dist/chunk-SJ3BF4BO.cjs +199 -0
  187. package/dist/chunk-SJ3BF4BO.cjs.map +1 -0
  188. package/dist/chunk-SN52QMRT.js +58 -0
  189. package/dist/chunk-SN52QMRT.js.map +1 -0
  190. package/dist/chunk-SOFX4T7M.js +124 -0
  191. package/dist/chunk-SOFX4T7M.js.map +1 -0
  192. package/dist/chunk-SWMRCGL4.cjs +24 -0
  193. package/dist/chunk-SWMRCGL4.cjs.map +1 -0
  194. package/dist/chunk-SWV5E75F.cjs +94 -0
  195. package/dist/chunk-SWV5E75F.cjs.map +1 -0
  196. package/dist/chunk-T4ME7QCT.js +22 -0
  197. package/dist/chunk-T4ME7QCT.js.map +1 -0
  198. package/dist/chunk-TA6FVVCM.js +207 -0
  199. package/dist/chunk-TA6FVVCM.js.map +1 -0
  200. package/dist/chunk-UHSPAFY6.js +82 -0
  201. package/dist/chunk-UHSPAFY6.js.map +1 -0
  202. package/dist/chunk-ULOA7WBW.js +82 -0
  203. package/dist/chunk-ULOA7WBW.js.map +1 -0
  204. package/dist/chunk-UZUBLXVC.js +307 -0
  205. package/dist/chunk-UZUBLXVC.js.map +1 -0
  206. package/dist/chunk-VDMQCSXT.cjs +234 -0
  207. package/dist/chunk-VDMQCSXT.cjs.map +1 -0
  208. package/dist/chunk-VV4N4WY6.cjs +121 -0
  209. package/dist/chunk-VV4N4WY6.cjs.map +1 -0
  210. package/dist/chunk-VWXGUNBR.cjs +574 -0
  211. package/dist/chunk-VWXGUNBR.cjs.map +1 -0
  212. package/dist/chunk-WN2FJE23.js +474 -0
  213. package/dist/chunk-WN2FJE23.js.map +1 -0
  214. package/dist/chunk-XHJGYBYG.cjs +262 -0
  215. package/dist/chunk-XHJGYBYG.cjs.map +1 -0
  216. package/dist/chunk-XXOBTAKA.js +390 -0
  217. package/dist/chunk-XXOBTAKA.js.map +1 -0
  218. package/dist/chunk-Z3TFPXVN.cjs +84 -0
  219. package/dist/chunk-Z3TFPXVN.cjs.map +1 -0
  220. package/dist/chunk-ZJCPW6MS.cjs +54 -0
  221. package/dist/chunk-ZJCPW6MS.cjs.map +1 -0
  222. package/dist/chunk-ZO46CFVN.cjs +4 -0
  223. package/dist/chunk-ZO46CFVN.cjs.map +1 -0
  224. package/dist/chunk-ZQ4XMJH7.js +3 -0
  225. package/dist/chunk-ZQ4XMJH7.js.map +1 -0
  226. package/dist/components/Alert/index.cjs +25 -0
  227. package/dist/components/Alert/index.cjs.map +1 -0
  228. package/dist/components/Alert/index.d.cts +39 -0
  229. package/dist/components/Alert/index.d.ts +39 -0
  230. package/dist/components/Alert/index.js +4 -0
  231. package/dist/components/Alert/index.js.map +1 -0
  232. package/dist/components/AudioPlayer/index.cjs +29 -0
  233. package/dist/components/AudioPlayer/index.cjs.map +1 -0
  234. package/dist/components/AudioPlayer/index.d.cts +83 -0
  235. package/dist/components/AudioPlayer/index.d.ts +83 -0
  236. package/dist/components/AudioPlayer/index.js +4 -0
  237. package/dist/components/AudioPlayer/index.js.map +1 -0
  238. package/dist/components/AudioRecorder/index.cjs +29 -0
  239. package/dist/components/AudioRecorder/index.cjs.map +1 -0
  240. package/dist/components/AudioRecorder/index.d.cts +106 -0
  241. package/dist/components/AudioRecorder/index.d.ts +106 -0
  242. package/dist/components/AudioRecorder/index.js +4 -0
  243. package/dist/components/AudioRecorder/index.js.map +1 -0
  244. package/dist/components/Avatar/index.cjs +25 -0
  245. package/dist/components/Avatar/index.cjs.map +1 -0
  246. package/dist/components/Avatar/index.d.cts +62 -0
  247. package/dist/components/Avatar/index.d.ts +62 -0
  248. package/dist/components/Avatar/index.js +4 -0
  249. package/dist/components/Avatar/index.js.map +1 -0
  250. package/dist/components/Badge/index.cjs +17 -0
  251. package/dist/components/Badge/index.cjs.map +1 -0
  252. package/dist/components/Badge/index.d.cts +25 -0
  253. package/dist/components/Badge/index.d.ts +25 -0
  254. package/dist/components/Badge/index.js +4 -0
  255. package/dist/components/Badge/index.js.map +1 -0
  256. package/dist/components/Breadcrumb/index.cjs +17 -0
  257. package/dist/components/Breadcrumb/index.cjs.map +1 -0
  258. package/dist/components/Breadcrumb/index.d.cts +47 -0
  259. package/dist/components/Breadcrumb/index.d.ts +47 -0
  260. package/dist/components/Breadcrumb/index.js +4 -0
  261. package/dist/components/Breadcrumb/index.js.map +1 -0
  262. package/dist/components/Button/index.cjs +17 -0
  263. package/dist/components/Button/index.cjs.map +1 -0
  264. package/dist/components/Button/index.d.cts +32 -0
  265. package/dist/components/Button/index.d.ts +32 -0
  266. package/dist/components/Button/index.js +4 -0
  267. package/dist/components/Button/index.js.map +1 -0
  268. package/dist/components/Card/index.cjs +65 -0
  269. package/dist/components/Card/index.cjs.map +1 -0
  270. package/dist/components/Card/index.d.cts +119 -0
  271. package/dist/components/Card/index.d.ts +119 -0
  272. package/dist/components/Card/index.js +4 -0
  273. package/dist/components/Card/index.js.map +1 -0
  274. package/dist/components/Checkbox/index.cjs +21 -0
  275. package/dist/components/Checkbox/index.cjs.map +1 -0
  276. package/dist/components/Checkbox/index.d.cts +63 -0
  277. package/dist/components/Checkbox/index.d.ts +63 -0
  278. package/dist/components/Checkbox/index.js +4 -0
  279. package/dist/components/Checkbox/index.js.map +1 -0
  280. package/dist/components/DateInput/index.cjs +15 -0
  281. package/dist/components/DateInput/index.cjs.map +1 -0
  282. package/dist/components/DateInput/index.d.cts +55 -0
  283. package/dist/components/DateInput/index.d.ts +55 -0
  284. package/dist/components/DateInput/index.js +6 -0
  285. package/dist/components/DateInput/index.js.map +1 -0
  286. package/dist/components/Dropdown/index.cjs +35 -0
  287. package/dist/components/Dropdown/index.cjs.map +1 -0
  288. package/dist/components/Dropdown/index.d.cts +102 -0
  289. package/dist/components/Dropdown/index.d.ts +102 -0
  290. package/dist/components/Dropdown/index.js +6 -0
  291. package/dist/components/Dropdown/index.js.map +1 -0
  292. package/dist/components/Input/index.cjs +17 -0
  293. package/dist/components/Input/index.cjs.map +1 -0
  294. package/dist/components/Input/index.d.cts +32 -0
  295. package/dist/components/Input/index.d.ts +32 -0
  296. package/dist/components/Input/index.js +4 -0
  297. package/dist/components/Input/index.js.map +1 -0
  298. package/dist/components/Modal/index.cjs +43 -0
  299. package/dist/components/Modal/index.cjs.map +1 -0
  300. package/dist/components/Modal/index.d.cts +82 -0
  301. package/dist/components/Modal/index.d.ts +82 -0
  302. package/dist/components/Modal/index.js +6 -0
  303. package/dist/components/Modal/index.js.map +1 -0
  304. package/dist/components/Pagination/index.cjs +21 -0
  305. package/dist/components/Pagination/index.cjs.map +1 -0
  306. package/dist/components/Pagination/index.d.cts +78 -0
  307. package/dist/components/Pagination/index.d.ts +78 -0
  308. package/dist/components/Pagination/index.js +4 -0
  309. package/dist/components/Pagination/index.js.map +1 -0
  310. package/dist/components/PhoneInput/index.cjs +19 -0
  311. package/dist/components/PhoneInput/index.cjs.map +1 -0
  312. package/dist/components/PhoneInput/index.d.cts +80 -0
  313. package/dist/components/PhoneInput/index.d.ts +80 -0
  314. package/dist/components/PhoneInput/index.js +6 -0
  315. package/dist/components/PhoneInput/index.js.map +1 -0
  316. package/dist/components/Progress/index.cjs +29 -0
  317. package/dist/components/Progress/index.cjs.map +1 -0
  318. package/dist/components/Progress/index.d.cts +76 -0
  319. package/dist/components/Progress/index.d.ts +76 -0
  320. package/dist/components/Progress/index.js +4 -0
  321. package/dist/components/Progress/index.js.map +1 -0
  322. package/dist/components/QuickAction/index.cjs +29 -0
  323. package/dist/components/QuickAction/index.cjs.map +1 -0
  324. package/dist/components/QuickAction/index.d.cts +78 -0
  325. package/dist/components/QuickAction/index.d.ts +78 -0
  326. package/dist/components/QuickAction/index.js +4 -0
  327. package/dist/components/QuickAction/index.js.map +1 -0
  328. package/dist/components/Radio/index.cjs +21 -0
  329. package/dist/components/Radio/index.cjs.map +1 -0
  330. package/dist/components/Radio/index.d.cts +72 -0
  331. package/dist/components/Radio/index.d.ts +72 -0
  332. package/dist/components/Radio/index.js +4 -0
  333. package/dist/components/Radio/index.js.map +1 -0
  334. package/dist/components/RecordButton/index.cjs +25 -0
  335. package/dist/components/RecordButton/index.cjs.map +1 -0
  336. package/dist/components/RecordButton/index.d.cts +83 -0
  337. package/dist/components/RecordButton/index.d.ts +83 -0
  338. package/dist/components/RecordButton/index.js +4 -0
  339. package/dist/components/RecordButton/index.js.map +1 -0
  340. package/dist/components/SchedulePicker/index.cjs +45 -0
  341. package/dist/components/SchedulePicker/index.cjs.map +1 -0
  342. package/dist/components/SchedulePicker/index.d.cts +111 -0
  343. package/dist/components/SchedulePicker/index.d.ts +111 -0
  344. package/dist/components/SchedulePicker/index.js +4 -0
  345. package/dist/components/SchedulePicker/index.js.map +1 -0
  346. package/dist/components/Select/index.cjs +19 -0
  347. package/dist/components/Select/index.cjs.map +1 -0
  348. package/dist/components/Select/index.d.cts +79 -0
  349. package/dist/components/Select/index.d.ts +79 -0
  350. package/dist/components/Select/index.js +6 -0
  351. package/dist/components/Select/index.js.map +1 -0
  352. package/dist/components/Skeleton/index.cjs +29 -0
  353. package/dist/components/Skeleton/index.cjs.map +1 -0
  354. package/dist/components/Skeleton/index.d.cts +96 -0
  355. package/dist/components/Skeleton/index.d.ts +96 -0
  356. package/dist/components/Skeleton/index.js +4 -0
  357. package/dist/components/Skeleton/index.js.map +1 -0
  358. package/dist/components/Spinner/index.cjs +25 -0
  359. package/dist/components/Spinner/index.cjs.map +1 -0
  360. package/dist/components/Spinner/index.d.cts +67 -0
  361. package/dist/components/Spinner/index.d.ts +67 -0
  362. package/dist/components/Spinner/index.js +4 -0
  363. package/dist/components/Spinner/index.js.map +1 -0
  364. package/dist/components/Switch/index.cjs +21 -0
  365. package/dist/components/Switch/index.cjs.map +1 -0
  366. package/dist/components/Switch/index.d.cts +41 -0
  367. package/dist/components/Switch/index.d.ts +41 -0
  368. package/dist/components/Switch/index.js +4 -0
  369. package/dist/components/Switch/index.js.map +1 -0
  370. package/dist/components/Table/index.cjs +41 -0
  371. package/dist/components/Table/index.cjs.map +1 -0
  372. package/dist/components/Table/index.d.cts +54 -0
  373. package/dist/components/Table/index.d.ts +54 -0
  374. package/dist/components/Table/index.js +4 -0
  375. package/dist/components/Table/index.js.map +1 -0
  376. package/dist/components/Tabs/index.cjs +33 -0
  377. package/dist/components/Tabs/index.cjs.map +1 -0
  378. package/dist/components/Tabs/index.d.cts +70 -0
  379. package/dist/components/Tabs/index.d.ts +70 -0
  380. package/dist/components/Tabs/index.js +4 -0
  381. package/dist/components/Tabs/index.js.map +1 -0
  382. package/dist/components/Text/index.cjs +21 -0
  383. package/dist/components/Text/index.cjs.map +1 -0
  384. package/dist/components/Text/index.d.cts +35 -0
  385. package/dist/components/Text/index.d.ts +35 -0
  386. package/dist/components/Text/index.js +4 -0
  387. package/dist/components/Text/index.js.map +1 -0
  388. package/dist/components/Textarea/index.cjs +17 -0
  389. package/dist/components/Textarea/index.cjs.map +1 -0
  390. package/dist/components/Textarea/index.d.cts +42 -0
  391. package/dist/components/Textarea/index.d.ts +42 -0
  392. package/dist/components/Textarea/index.js +4 -0
  393. package/dist/components/Textarea/index.js.map +1 -0
  394. package/dist/components/ThemeProvider/index.cjs +36 -0
  395. package/dist/components/ThemeProvider/index.cjs.map +1 -0
  396. package/dist/components/ThemeProvider/index.d.cts +121 -0
  397. package/dist/components/ThemeProvider/index.d.ts +121 -0
  398. package/dist/components/ThemeProvider/index.js +7 -0
  399. package/dist/components/ThemeProvider/index.js.map +1 -0
  400. package/dist/components/Tooltip/index.cjs +14 -0
  401. package/dist/components/Tooltip/index.cjs.map +1 -0
  402. package/dist/components/Tooltip/index.d.cts +55 -0
  403. package/dist/components/Tooltip/index.d.ts +55 -0
  404. package/dist/components/Tooltip/index.js +5 -0
  405. package/dist/components/Tooltip/index.js.map +1 -0
  406. package/dist/components/VisuallyHidden/index.cjs +12 -0
  407. package/dist/components/VisuallyHidden/index.cjs.map +1 -0
  408. package/dist/components/VisuallyHidden/index.d.cts +20 -0
  409. package/dist/components/VisuallyHidden/index.d.ts +20 -0
  410. package/dist/components/VisuallyHidden/index.js +3 -0
  411. package/dist/components/VisuallyHidden/index.js.map +1 -0
  412. package/dist/default-LIRPABBK.js +3 -0
  413. package/dist/default-LIRPABBK.js.map +1 -0
  414. package/dist/default-ZGHKI5WF.cjs +18 -0
  415. package/dist/default-ZGHKI5WF.cjs.map +1 -0
  416. package/dist/enterprise-health-ORQQOLM3.js +3 -0
  417. package/dist/enterprise-health-ORQQOLM3.js.map +1 -0
  418. package/dist/enterprise-health-UDI25OCV.cjs +18 -0
  419. package/dist/enterprise-health-UDI25OCV.cjs.map +1 -0
  420. package/dist/hooks/index.cjs +69 -0
  421. package/dist/hooks/index.cjs.map +1 -0
  422. package/dist/hooks/index.d.cts +179 -0
  423. package/dist/hooks/index.d.ts +179 -0
  424. package/dist/hooks/index.js +8 -0
  425. package/dist/hooks/index.js.map +1 -0
  426. package/dist/index.cjs +33153 -0
  427. package/dist/index.cjs.map +1 -0
  428. package/dist/index.d.cts +8188 -0
  429. package/dist/index.d.ts +8188 -0
  430. package/dist/index.js +32162 -0
  431. package/dist/index.js.map +1 -0
  432. package/dist/mieweb-PV2YKYO7.js +3 -0
  433. package/dist/mieweb-PV2YKYO7.js.map +1 -0
  434. package/dist/mieweb-UJABK5XX.cjs +18 -0
  435. package/dist/mieweb-UJABK5XX.cjs.map +1 -0
  436. package/dist/styles.css +2 -0
  437. package/dist/tailwind-preset.cjs +22 -0
  438. package/dist/tailwind-preset.cjs.map +1 -0
  439. package/dist/tailwind-preset.d.cts +39 -0
  440. package/dist/tailwind-preset.d.ts +39 -0
  441. package/dist/tailwind-preset.js +3 -0
  442. package/dist/tailwind-preset.js.map +1 -0
  443. package/dist/useTheme-B9SWu6ui.d.cts +24 -0
  444. package/dist/useTheme-B9SWu6ui.d.ts +24 -0
  445. package/dist/utils/index.cjs +63 -0
  446. package/dist/utils/index.cjs.map +1 -0
  447. package/dist/utils/index.d.cts +73 -0
  448. package/dist/utils/index.d.ts +73 -0
  449. package/dist/utils/index.js +6 -0
  450. package/dist/utils/index.js.map +1 -0
  451. package/dist/waggleline-6IGA66HR.cjs +18 -0
  452. package/dist/waggleline-6IGA66HR.cjs.map +1 -0
  453. package/dist/waggleline-BMUYAFJF.js +3 -0
  454. package/dist/waggleline-BMUYAFJF.js.map +1 -0
  455. package/dist/webchart-2SLO5ICI.js +3 -0
  456. package/dist/webchart-2SLO5ICI.js.map +1 -0
  457. package/dist/webchart-EHVGP46N.cjs +18 -0
  458. package/dist/webchart-EHVGP46N.cjs.map +1 -0
  459. package/package.json +212 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AudioPlayer/AudioPlayer.tsx"],"names":["cva","jsx","jsxs","cn","React"],"mappings":"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","file":"chunk-VWXGUNBR.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type AudioPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\nexport interface AudioPlayerProps extends VariantProps<\n typeof audioPlayerVariants\n> {\n /** Audio source URL */\n src: string;\n /** Title/label for the audio (used for accessibility and display) */\n title?: string;\n /** Callback when playback state changes */\n onStateChange?: (state: AudioPlayerState) => void;\n /** Callback when playback ends */\n onEnded?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when time updates during playback */\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n /** Whether to show the time display */\n showTime?: boolean;\n /** Whether to show the duration (for inline variant) */\n showDuration?: boolean;\n /** Waveform color (for waveform variant) */\n waveColor?: string;\n /** Progress/played waveform color (for waveform variant) */\n progressColor?: string;\n /** Height of the waveform (for waveform variant) */\n waveformHeight?: number;\n /** Whether the player is disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Playback speed options */\n playbackRates?: number[];\n /** Whether to show playback speed control */\n showPlaybackRate?: boolean;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst audioPlayerVariants = cva('', {\n variants: {\n variant: {\n inline: 'inline-flex items-center gap-2',\n compact: [\n 'flex items-center gap-3 p-3',\n 'rounded-lg border border-border',\n 'bg-card text-card-foreground',\n ],\n waveform: [\n 'flex flex-col gap-3 p-4',\n 'rounded-xl border border-border',\n 'bg-card text-card-foreground',\n ],\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n { variant: 'compact', size: 'sm', class: 'p-2 gap-2' },\n { variant: 'compact', size: 'lg', class: 'p-4 gap-4' },\n { variant: 'waveform', size: 'sm', class: 'p-3 gap-2' },\n { variant: 'waveform', size: 'lg', class: 'p-5 gap-4' },\n ],\n defaultVariants: {\n variant: 'compact',\n size: 'md',\n },\n});\n\nconst playButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'active:scale-95',\n ],\n {\n variants: {\n variant: {\n inline: [\n 'text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100',\n 'dark:text-neutral-400 dark:hover:text-neutral-200 dark:hover:bg-neutral-800',\n ],\n compact: [\n 'bg-primary-600 text-white',\n 'hover:bg-primary-700',\n 'active:bg-primary-800',\n ],\n waveform: [\n 'bg-primary-600 text-white',\n 'hover:bg-primary-700',\n 'active:bg-primary-800',\n ],\n },\n size: {\n sm: 'h-7 w-7',\n md: 'h-9 w-9',\n lg: 'h-11 w-11',\n },\n },\n defaultVariants: {\n variant: 'compact',\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function formatTime(seconds: number): string {\n if (!isFinite(seconds) || isNaN(seconds)) return '0:00';\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, '0')}`;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction PlayIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n );\n}\n\nfunction PauseIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\n </svg>\n );\n}\n\nfunction SpinnerIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn('animate-spin', className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Progress Bar Component (for compact variant)\n// ============================================================================\n\ninterface ProgressBarProps {\n currentTime: number;\n duration: number;\n onSeek: (time: number) => void;\n disabled?: boolean;\n}\n\nfunction ProgressBar({\n currentTime,\n duration,\n onSeek,\n disabled,\n}: ProgressBarProps) {\n const progressRef = React.useRef<HTMLDivElement>(null);\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled || !progressRef.current || duration <= 0) return;\n const rect = progressRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const percentage = x / rect.width;\n onSeek(percentage * duration);\n };\n\n return (\n <div\n ref={progressRef}\n role=\"slider\"\n aria-label=\"Audio progress\"\n aria-valuemin={0}\n aria-valuemax={duration}\n aria-valuenow={currentTime}\n aria-valuetext={`${formatTime(currentTime)} of ${formatTime(duration)}`}\n tabIndex={disabled ? -1 : 0}\n className={cn(\n 'relative h-1.5 flex-1 cursor-pointer rounded-full bg-neutral-200 dark:bg-neutral-700',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (disabled) return;\n const step = duration * 0.05; // 5% steps\n if (e.key === 'ArrowRight') {\n onSeek(Math.min(currentTime + step, duration));\n } else if (e.key === 'ArrowLeft') {\n onSeek(Math.max(currentTime - step, 0));\n }\n }}\n >\n <div\n className=\"bg-primary-600 absolute inset-y-0 left-0 rounded-full transition-all\"\n style={{ width: `${progress}%` }}\n />\n <div\n className=\"bg-primary-600 absolute top-1/2 h-3 w-3 -translate-y-1/2 rounded-full shadow-sm transition-all\"\n style={{ left: `calc(${progress}% - 6px)` }}\n />\n </div>\n );\n}\n\n// ============================================================================\n// Waveform Component (lazy-loaded WaveSurfer)\n// ============================================================================\n\ninterface WaveformProps {\n src: string;\n isPlaying: boolean;\n playbackRate?: number;\n onReady: (duration: number) => void;\n onTimeUpdate: (time: number) => void;\n onFinish: () => void;\n onSeek: (time: number) => void;\n waveColor?: string;\n progressColor?: string;\n height?: number;\n}\n\nfunction Waveform({\n src,\n isPlaying,\n playbackRate = 1,\n onReady,\n onTimeUpdate,\n onFinish,\n onSeek,\n waveColor,\n progressColor,\n height = 64,\n}: WaveformProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wavesurferRef = React.useRef<any>(null);\n const [isLoaded, setIsLoaded] = React.useState(false);\n\n // Initialize WaveSurfer\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const initWaveSurfer = async () => {\n try {\n const WaveSurfer = (await import('wavesurfer.js')).default;\n\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n\n wavesurferRef.current = WaveSurfer.create({\n container: containerRef.current!,\n waveColor: waveColor || '#d1d5db',\n progressColor: progressColor || 'var(--color-primary-600, #2563eb)',\n cursorColor: 'transparent',\n barWidth: 2,\n barGap: 2,\n barRadius: 2,\n height,\n normalize: true,\n interact: true,\n });\n\n wavesurferRef.current.on('ready', () => {\n setIsLoaded(true);\n onReady(wavesurferRef.current.getDuration());\n });\n\n wavesurferRef.current.on('audioprocess', () => {\n onTimeUpdate(wavesurferRef.current.getCurrentTime());\n });\n\n wavesurferRef.current.on('seeking', () => {\n onTimeUpdate(wavesurferRef.current.getCurrentTime());\n });\n\n wavesurferRef.current.on('interaction', () => {\n onSeek(wavesurferRef.current.getCurrentTime());\n });\n\n wavesurferRef.current.on('finish', () => {\n onFinish();\n });\n\n wavesurferRef.current.load(src);\n } catch (error) {\n console.error('Failed to load WaveSurfer:', error);\n }\n };\n\n initWaveSurfer();\n\n return () => {\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n wavesurferRef.current = null;\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [src]);\n\n // Handle play/pause\n React.useEffect(() => {\n if (!wavesurferRef.current || !isLoaded) return;\n\n if (isPlaying) {\n wavesurferRef.current.play();\n } else {\n wavesurferRef.current.pause();\n }\n }, [isPlaying, isLoaded]);\n\n // Handle playback rate changes\n React.useEffect(() => {\n if (!wavesurferRef.current || !isLoaded) return;\n wavesurferRef.current.setPlaybackRate(playbackRate);\n }, [playbackRate, isLoaded]);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'w-full rounded-lg bg-neutral-100 dark:bg-neutral-800',\n !isLoaded && 'animate-pulse'\n )}\n style={{ height }}\n />\n );\n}\n\n// ============================================================================\n// Main AudioPlayer Component\n// ============================================================================\n\n/**\n * A versatile audio player component with multiple display variants.\n *\n * @example\n * ```tsx\n * // Inline - minimal, just play button and duration\n * <AudioPlayer src=\"/audio.mp3\" variant=\"inline\" showDuration />\n *\n * // Compact - play button, progress bar, and time\n * <AudioPlayer src=\"/audio.mp3\" variant=\"compact\" showTime />\n *\n * // Waveform - full visualization with WaveSurfer\n * <AudioPlayer src=\"/audio.mp3\" variant=\"waveform\" showTime />\n * ```\n */\nfunction AudioPlayer({\n src,\n title,\n variant = 'compact',\n size = 'md',\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n showTime = true,\n showDuration = true,\n waveColor,\n progressColor,\n waveformHeight = 64,\n disabled = false,\n className,\n 'aria-label': ariaLabel,\n playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2],\n showPlaybackRate = false,\n /** Whether to preload audio (set to false for lists with many items) */\n preload = false,\n /** Fallback duration in seconds to display before audio is loaded */\n fallbackDuration,\n}: AudioPlayerProps & { preload?: boolean; fallbackDuration?: number }) {\n const [state, setState] = React.useState<AudioPlayerState>('idle');\n const [currentTime, setCurrentTime] = React.useState(0);\n const [duration, setDuration] = React.useState(0);\n const [playbackRate, setPlaybackRate] = React.useState(1);\n const [audioInitialized, setAudioInitialized] = React.useState(false);\n const audioRef = React.useRef<globalThis.HTMLAudioElement | null>(null);\n\n const isPlaying = state === 'playing';\n const isLoading = state === 'loading';\n\n // Update state helper\n const updateState = React.useCallback(\n (newState: AudioPlayerState) => {\n setState(newState);\n onStateChange?.(newState);\n },\n [onStateChange]\n );\n\n // Initialize audio element (for non-waveform variants)\n const initAudio = React.useCallback(() => {\n if (variant === 'waveform' || audioInitialized) return null;\n\n const audio = new globalThis.Audio(src);\n audioRef.current = audio;\n setAudioInitialized(true);\n\n audio.addEventListener('loadstart', () => updateState('loading'));\n audio.addEventListener('canplay', () => {\n updateState('idle');\n });\n audio.addEventListener('loadedmetadata', () => {\n setDuration(audio.duration);\n });\n audio.addEventListener('timeupdate', () => {\n setCurrentTime(audio.currentTime);\n onTimeUpdate?.(audio.currentTime, audio.duration);\n });\n audio.addEventListener('ended', () => {\n updateState('idle');\n setCurrentTime(0);\n onEnded?.();\n });\n audio.addEventListener('error', () => {\n updateState('error');\n onError?.(new Error('Failed to load audio'));\n });\n\n return audio;\n }, [\n src,\n variant,\n audioInitialized,\n updateState,\n onTimeUpdate,\n onEnded,\n onError,\n ]);\n\n // Auto-initialize if preload is true\n React.useEffect(() => {\n if (preload && !audioInitialized && variant !== 'waveform') {\n initAudio();\n }\n }, [preload, audioInitialized, variant, initAudio]);\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n if (audioRef.current) {\n audioRef.current.pause();\n audioRef.current.src = '';\n }\n };\n }, []);\n\n // Handle playback rate changes\n React.useEffect(() => {\n if (audioRef.current) {\n audioRef.current.playbackRate = playbackRate;\n }\n }, [playbackRate]);\n\n const handlePlay = React.useCallback(() => {\n if (disabled) return;\n\n // Waveform variant uses WaveSurfer for playback - just toggle state\n if (variant === 'waveform') {\n if (isLoading) return;\n updateState(isPlaying ? 'paused' : 'playing');\n return;\n }\n\n // Lazy initialize audio on first play\n if (!audioInitialized && !isLoading) {\n const audio = initAudio();\n if (audio) {\n updateState('loading');\n audio.addEventListener(\n 'canplay',\n () => {\n audio.play().catch((error) => {\n updateState('error');\n onError?.(error);\n });\n updateState('playing');\n },\n { once: true }\n );\n }\n return;\n }\n\n if (isLoading) return;\n\n if (isPlaying) {\n if (audioRef.current) {\n audioRef.current.pause();\n }\n updateState('paused');\n } else {\n if (audioRef.current) {\n audioRef.current.play().catch((error) => {\n updateState('error');\n onError?.(error);\n });\n updateState('playing');\n }\n }\n }, [\n disabled,\n variant,\n audioInitialized,\n isLoading,\n isPlaying,\n initAudio,\n updateState,\n onError,\n ]);\n\n const handleSeek = React.useCallback((time: number) => {\n if (audioRef.current) {\n audioRef.current.currentTime = time;\n setCurrentTime(time);\n }\n }, []);\n\n // Waveform callbacks\n const handleWaveformReady = React.useCallback((dur: number) => {\n setDuration(dur);\n setState('idle');\n }, []);\n\n const handleWaveformTimeUpdate = React.useCallback(\n (time: number) => {\n setCurrentTime(time);\n onTimeUpdate?.(time, duration);\n },\n [duration, onTimeUpdate]\n );\n\n const handleWaveformFinish = React.useCallback(() => {\n updateState('idle');\n setCurrentTime(0);\n onEnded?.();\n }, [updateState, onEnded]);\n\n const handleWaveformSeek = React.useCallback((time: number) => {\n setCurrentTime(time);\n }, []);\n\n const iconSize =\n size === 'sm' ? 'h-3.5 w-3.5' : size === 'lg' ? 'h-5 w-5' : 'h-4 w-4';\n\n const getAriaLabel = () => {\n if (ariaLabel) return ariaLabel;\n if (title) return `${isPlaying ? 'Pause' : 'Play'} ${title}`;\n return isPlaying ? 'Pause audio' : 'Play audio';\n };\n\n const renderPlayButton = () => (\n <button\n type=\"button\"\n onClick={handlePlay}\n disabled={disabled || isLoading}\n className={cn(playButtonVariants({ variant, size }))}\n aria-label={getAriaLabel()}\n aria-pressed={isPlaying}\n >\n {isLoading ? (\n <SpinnerIcon className={iconSize} />\n ) : isPlaying ? (\n <PauseIcon className={iconSize} />\n ) : (\n <PlayIcon className={iconSize} />\n )}\n </button>\n );\n\n const renderTime = () => {\n if (!showTime) return null;\n return (\n <span className=\"font-mono text-xs text-neutral-500 tabular-nums dark:text-neutral-400\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </span>\n );\n };\n\n const renderPlaybackRateControl = () => {\n if (!showPlaybackRate) return null;\n return (\n <select\n value={playbackRate}\n onChange={(e) => setPlaybackRate(Number(e.target.value))}\n className=\"rounded border border-neutral-200 bg-transparent px-1 py-0.5 text-xs dark:border-neutral-700\"\n aria-label=\"Playback speed\"\n >\n {playbackRates.map((rate) => (\n <option key={rate} value={rate}>\n {rate}x\n </option>\n ))}\n </select>\n );\n };\n\n // ============================================================================\n // Inline Variant\n // ============================================================================\n if (variant === 'inline') {\n const displayDuration = duration > 0 ? duration : (fallbackDuration ?? 0);\n return (\n <div className={cn(audioPlayerVariants({ variant, size }), className)}>\n {renderPlayButton()}\n {title && (\n <span className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\">\n {title}\n </span>\n )}\n {showDuration && displayDuration > 0 && (\n <span className=\"font-mono text-xs text-neutral-500 tabular-nums dark:text-neutral-400\">\n {isPlaying ? formatTime(currentTime) : formatTime(displayDuration)}\n </span>\n )}\n </div>\n );\n }\n\n // ============================================================================\n // Compact Variant\n // ============================================================================\n if (variant === 'compact') {\n return (\n <div className={cn(audioPlayerVariants({ variant, size }), className)}>\n {renderPlayButton()}\n <ProgressBar\n currentTime={currentTime}\n duration={duration}\n onSeek={handleSeek}\n disabled={disabled}\n />\n {renderTime()}\n {renderPlaybackRateControl()}\n </div>\n );\n }\n\n // ============================================================================\n // Waveform Variant\n // ============================================================================\n return (\n <div className={cn(audioPlayerVariants({ variant, size }), className)}>\n {title && (\n <span className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\">\n {title}\n </span>\n )}\n <Waveform\n src={src}\n isPlaying={isPlaying}\n playbackRate={playbackRate}\n onReady={handleWaveformReady}\n onTimeUpdate={handleWaveformTimeUpdate}\n onFinish={handleWaveformFinish}\n onSeek={handleWaveformSeek}\n waveColor={waveColor}\n progressColor={progressColor}\n height={waveformHeight}\n />\n <div className=\"flex items-center gap-3\">\n {renderPlayButton()}\n <div className=\"flex flex-1 items-center justify-between\">\n {renderTime()}\n {renderPlaybackRateControl()}\n </div>\n </div>\n </div>\n );\n}\n\nAudioPlayer.displayName = 'AudioPlayer';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { AudioPlayer, audioPlayerVariants, playButtonVariants, ProgressBar };\n"]}
@@ -0,0 +1,474 @@
1
+ import { Input } from './chunk-NXRLGHEC.js';
2
+ import { formatDateValue, isValidDate, isDateInFuture, isDateInPast, calculateAge } from './chunk-SN52QMRT.js';
3
+ import { cn } from './chunk-F3SOEIN2.js';
4
+ import * as React from 'react';
5
+ import { Calendar } from 'lucide-react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var widthClasses = {
9
+ full: "w-full",
10
+ fit: "w-fit",
11
+ fixed: "w-44"
12
+ // ~176px - enough for MM/DD/YYYY + calendar icon
13
+ };
14
+ var sizeClasses = {
15
+ sm: "h-8 text-sm",
16
+ md: "h-10 text-base",
17
+ lg: "h-12 text-lg"
18
+ };
19
+ function getValidationError(value, mode, minAge, maxAge) {
20
+ if (!value || value.replace(/\D/g, "").length === 0) {
21
+ return void 0;
22
+ }
23
+ if (!isValidDate(value)) {
24
+ return "Please enter a valid date (MM/DD/YYYY)";
25
+ }
26
+ switch (mode) {
27
+ case "dob": {
28
+ if (!isDateInPast(value)) {
29
+ return "Date of birth must be in the past";
30
+ }
31
+ const age = calculateAge(value);
32
+ if (age !== null) {
33
+ if (minAge !== void 0 && age < minAge) {
34
+ return `Must be at least ${minAge} years old`;
35
+ }
36
+ if (maxAge !== void 0 && age > maxAge) {
37
+ return `Must be no more than ${maxAge} years old`;
38
+ }
39
+ }
40
+ break;
41
+ }
42
+ case "expiration":
43
+ if (!isDateInFuture(value)) {
44
+ return "Expiration date must be in the future";
45
+ }
46
+ break;
47
+ case "past":
48
+ if (!isDateInPast(value)) {
49
+ return "Date must be in the past";
50
+ }
51
+ break;
52
+ case "future":
53
+ if (!isDateInFuture(value)) {
54
+ return "Date must be in the future";
55
+ }
56
+ break;
57
+ }
58
+ return void 0;
59
+ }
60
+ var DateInput = React.forwardRef(
61
+ ({
62
+ value = "",
63
+ onChange,
64
+ mode = "default",
65
+ minAge,
66
+ maxAge,
67
+ validateOnBlur,
68
+ showCalendar = false,
69
+ width = "full",
70
+ className,
71
+ onBlur,
72
+ hasError,
73
+ error,
74
+ ...props
75
+ }, ref) => {
76
+ const [displayValue, setDisplayValue] = React.useState(
77
+ () => formatDateValue(value)
78
+ );
79
+ const [localError, setLocalError] = React.useState();
80
+ React.useEffect(() => {
81
+ setDisplayValue(formatDateValue(value));
82
+ }, [value]);
83
+ const handleChange = (e) => {
84
+ const formatted = formatDateValue(e.target.value);
85
+ setDisplayValue(formatted);
86
+ onChange?.(formatted);
87
+ if (localError) {
88
+ setLocalError(void 0);
89
+ }
90
+ };
91
+ const handleBlur = (e) => {
92
+ onBlur?.(e);
93
+ if (validateOnBlur) {
94
+ const validationError = getValidationError(
95
+ displayValue,
96
+ mode,
97
+ minAge,
98
+ maxAge
99
+ );
100
+ setLocalError(validationError);
101
+ }
102
+ };
103
+ const placeholder = mode === "expiration" ? "MM/DD/YYYY" : "MM/DD/YYYY";
104
+ const autoComplete = mode === "dob" ? "bday" : mode === "expiration" ? "cc-exp" : void 0;
105
+ const generatedId = React.useId();
106
+ const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);
107
+ const calendarRef = React.useRef(null);
108
+ const buttonRef = React.useRef(null);
109
+ const parsedDate = React.useMemo(() => {
110
+ if (!displayValue || !isValidDate(displayValue)) {
111
+ return {
112
+ month: (/* @__PURE__ */ new Date()).getMonth(),
113
+ year: (/* @__PURE__ */ new Date()).getFullYear(),
114
+ day: null
115
+ };
116
+ }
117
+ const [month, day, year] = displayValue.split("/").map(Number);
118
+ return { month: month - 1, year, day };
119
+ }, [displayValue]);
120
+ const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);
121
+ const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);
122
+ React.useEffect(() => {
123
+ if (displayValue && isValidDate(displayValue)) {
124
+ const [month, , year] = displayValue.split("/").map(Number);
125
+ setCalendarMonth(month - 1);
126
+ setCalendarYear(year);
127
+ }
128
+ }, [displayValue]);
129
+ React.useEffect(() => {
130
+ const handleClickOutside = (event) => {
131
+ if (calendarRef.current && !calendarRef.current.contains(event.target) && buttonRef.current && !buttonRef.current.contains(event.target)) {
132
+ setIsCalendarOpen(false);
133
+ }
134
+ };
135
+ if (isCalendarOpen) {
136
+ document.addEventListener("mousedown", handleClickOutside);
137
+ return () => document.removeEventListener("mousedown", handleClickOutside);
138
+ }
139
+ }, [isCalendarOpen]);
140
+ React.useEffect(() => {
141
+ const handleEscape = (event) => {
142
+ if (event.key === "Escape") {
143
+ setIsCalendarOpen(false);
144
+ buttonRef.current?.focus();
145
+ }
146
+ };
147
+ if (isCalendarOpen) {
148
+ document.addEventListener("keydown", handleEscape);
149
+ return () => document.removeEventListener("keydown", handleEscape);
150
+ }
151
+ }, [isCalendarOpen]);
152
+ const handleDateSelect = (day) => {
153
+ const month = String(calendarMonth + 1).padStart(2, "0");
154
+ const dayStr = String(day).padStart(2, "0");
155
+ const year = String(calendarYear);
156
+ const formatted = `${month}/${dayStr}/${year}`;
157
+ setDisplayValue(formatted);
158
+ onChange?.(formatted);
159
+ setIsCalendarOpen(false);
160
+ if (validateOnBlur) {
161
+ const validationError = getValidationError(
162
+ formatted,
163
+ mode,
164
+ minAge,
165
+ maxAge
166
+ );
167
+ setLocalError(validationError);
168
+ }
169
+ };
170
+ const getDaysInMonth = (month, year) => {
171
+ return new Date(year, month + 1, 0).getDate();
172
+ };
173
+ const getFirstDayOfMonth = (month, year) => {
174
+ return new Date(year, month, 1).getDay();
175
+ };
176
+ const renderCalendar = () => {
177
+ const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);
178
+ const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);
179
+ const days = [];
180
+ for (let i = 0; i < firstDay; i++) {
181
+ days.push(null);
182
+ }
183
+ for (let i = 1; i <= daysInMonth; i++) {
184
+ days.push(i);
185
+ }
186
+ const monthNames = [
187
+ "January",
188
+ "February",
189
+ "March",
190
+ "April",
191
+ "May",
192
+ "June",
193
+ "July",
194
+ "August",
195
+ "September",
196
+ "October",
197
+ "November",
198
+ "December"
199
+ ];
200
+ const isSelectedDay = (day) => {
201
+ return parsedDate.day === day && parsedDate.month === calendarMonth && parsedDate.year === calendarYear;
202
+ };
203
+ const isToday = (day) => {
204
+ const today = /* @__PURE__ */ new Date();
205
+ return day === today.getDate() && calendarMonth === today.getMonth() && calendarYear === today.getFullYear();
206
+ };
207
+ return /* @__PURE__ */ jsxs(
208
+ "div",
209
+ {
210
+ ref: calendarRef,
211
+ className: cn(
212
+ "absolute top-full left-0 z-50 mt-1",
213
+ "bg-background border-border rounded-lg border shadow-lg",
214
+ "w-72 p-3"
215
+ ),
216
+ role: "dialog",
217
+ "aria-label": "Choose date",
218
+ children: [
219
+ /* @__PURE__ */ jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
220
+ /* @__PURE__ */ jsx(
221
+ "button",
222
+ {
223
+ type: "button",
224
+ onClick: () => {
225
+ if (calendarMonth === 0) {
226
+ setCalendarMonth(11);
227
+ setCalendarYear(calendarYear - 1);
228
+ } else {
229
+ setCalendarMonth(calendarMonth - 1);
230
+ }
231
+ },
232
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
233
+ "aria-label": "Previous month",
234
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
235
+ }
236
+ ),
237
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
238
+ /* @__PURE__ */ jsx(
239
+ "select",
240
+ {
241
+ value: calendarMonth,
242
+ onChange: (e) => setCalendarMonth(Number(e.target.value)),
243
+ className: "bg-background border-border rounded border px-2 py-1 text-sm",
244
+ "aria-label": "Select month",
245
+ children: monthNames.map((name, i) => /* @__PURE__ */ jsx("option", { value: i, children: name }, name))
246
+ }
247
+ ),
248
+ /* @__PURE__ */ jsx(
249
+ "select",
250
+ {
251
+ value: calendarYear,
252
+ onChange: (e) => setCalendarYear(Number(e.target.value)),
253
+ className: "bg-background border-border rounded border px-2 py-1 text-sm",
254
+ "aria-label": "Select year",
255
+ children: Array.from(
256
+ { length: 150 },
257
+ (_, i) => (/* @__PURE__ */ new Date()).getFullYear() - 100 + i
258
+ ).map((year) => /* @__PURE__ */ jsx("option", { value: year, children: year }, year))
259
+ }
260
+ )
261
+ ] }),
262
+ /* @__PURE__ */ jsx(
263
+ "button",
264
+ {
265
+ type: "button",
266
+ onClick: () => {
267
+ if (calendarMonth === 11) {
268
+ setCalendarMonth(0);
269
+ setCalendarYear(calendarYear + 1);
270
+ } else {
271
+ setCalendarMonth(calendarMonth + 1);
272
+ }
273
+ },
274
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
275
+ "aria-label": "Next month",
276
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
277
+ }
278
+ )
279
+ ] }),
280
+ /* @__PURE__ */ jsx("div", { className: "mb-1 grid grid-cols-7 gap-1", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((day) => /* @__PURE__ */ jsx(
281
+ "div",
282
+ {
283
+ className: "text-muted-foreground py-1 text-center text-xs font-medium",
284
+ children: day
285
+ },
286
+ day
287
+ )) }),
288
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-1", children: days.map((day, index) => /* @__PURE__ */ jsx(
289
+ "button",
290
+ {
291
+ type: "button",
292
+ disabled: day === null,
293
+ onClick: () => day && handleDateSelect(day),
294
+ className: cn(
295
+ "h-8 w-8 rounded-md text-sm transition-colors",
296
+ "focus:ring-ring focus:ring-2 focus:outline-none",
297
+ day === null && "invisible",
298
+ day !== null && "hover:bg-muted",
299
+ isSelectedDay(day) && "bg-primary-800 hover:bg-primary-700 text-white",
300
+ isToday(day) && !isSelectedDay(day) && "border-primary-800 text-primary-800 border"
301
+ ),
302
+ children: day
303
+ },
304
+ index
305
+ )) }),
306
+ /* @__PURE__ */ jsx("div", { className: "border-border mt-3 border-t pt-3", children: /* @__PURE__ */ jsx(
307
+ "button",
308
+ {
309
+ type: "button",
310
+ onClick: () => {
311
+ const today = /* @__PURE__ */ new Date();
312
+ setCalendarMonth(today.getMonth());
313
+ setCalendarYear(today.getFullYear());
314
+ handleDateSelect(today.getDate());
315
+ },
316
+ className: "text-primary-800 w-full text-sm hover:underline",
317
+ children: "Today"
318
+ }
319
+ ) })
320
+ ]
321
+ }
322
+ );
323
+ };
324
+ if (showCalendar) {
325
+ const { label, helperText, hideLabel, required, size, ...inputProps } = props;
326
+ const resolvedSize = size ?? "md";
327
+ const inputId = inputProps.id || generatedId;
328
+ const errorId = `${inputId}-error`;
329
+ const helperId = `${inputId}-helper`;
330
+ const showError = hasError || !!localError;
331
+ const errorMessage = error || localError;
332
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1.5", widthClasses[width]), children: [
333
+ label && /* @__PURE__ */ jsxs(
334
+ "label",
335
+ {
336
+ htmlFor: inputId,
337
+ className: cn(
338
+ "text-foreground text-sm font-medium",
339
+ hideLabel && "sr-only"
340
+ ),
341
+ children: [
342
+ label,
343
+ required && /* @__PURE__ */ jsx(
344
+ "span",
345
+ {
346
+ className: "ml-1",
347
+ style: { color: "#ef4444" },
348
+ "aria-hidden": "true",
349
+ children: "*"
350
+ }
351
+ )
352
+ ]
353
+ }
354
+ ),
355
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
356
+ /* @__PURE__ */ jsx(
357
+ "input",
358
+ {
359
+ ref,
360
+ id: inputId,
361
+ type: "text",
362
+ inputMode: "numeric",
363
+ autoComplete,
364
+ placeholder,
365
+ value: displayValue,
366
+ onChange: handleChange,
367
+ onBlur: handleBlur,
368
+ "aria-invalid": showError,
369
+ "aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
370
+ className: cn(
371
+ "w-full px-3 py-2",
372
+ "rounded-lg border",
373
+ "bg-background text-foreground",
374
+ "placeholder:text-muted-foreground",
375
+ "transition-colors duration-200",
376
+ "focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
377
+ "disabled:cursor-not-allowed disabled:opacity-50",
378
+ sizeClasses[resolvedSize],
379
+ showError ? "border-destructive focus:ring-destructive" : "border-input",
380
+ "pr-10",
381
+ className
382
+ ),
383
+ ...inputProps
384
+ }
385
+ ),
386
+ /* @__PURE__ */ jsx(
387
+ "button",
388
+ {
389
+ ref: buttonRef,
390
+ type: "button",
391
+ onClick: () => setIsCalendarOpen(!isCalendarOpen),
392
+ className: cn(
393
+ "absolute top-1/2 right-3 -translate-y-1/2",
394
+ "text-muted-foreground hover:text-foreground",
395
+ "focus:text-foreground focus:outline-none",
396
+ "transition-colors"
397
+ ),
398
+ "aria-label": "Open calendar",
399
+ "aria-expanded": isCalendarOpen,
400
+ "aria-haspopup": "dialog",
401
+ children: /* @__PURE__ */ jsx(Calendar, { size: 18 })
402
+ }
403
+ ),
404
+ isCalendarOpen && renderCalendar()
405
+ ] }),
406
+ errorMessage && /* @__PURE__ */ jsx(
407
+ "p",
408
+ {
409
+ id: errorId,
410
+ className: "text-sm",
411
+ style: { color: "#ef4444" },
412
+ role: "alert",
413
+ children: errorMessage
414
+ }
415
+ ),
416
+ helperText && !errorMessage && /* @__PURE__ */ jsx("p", { id: helperId, className: "text-muted-foreground text-sm", children: helperText })
417
+ ] });
418
+ }
419
+ return /* @__PURE__ */ jsx(
420
+ Input,
421
+ {
422
+ ref,
423
+ type: "text",
424
+ inputMode: "numeric",
425
+ autoComplete,
426
+ placeholder,
427
+ value: displayValue,
428
+ onChange: handleChange,
429
+ onBlur: handleBlur,
430
+ hasError: hasError || !!localError,
431
+ error: error || localError,
432
+ className: cn(widthClasses[width], className),
433
+ ...props
434
+ }
435
+ );
436
+ }
437
+ );
438
+ DateInput.displayName = "DateInput";
439
+ function ChevronLeftIcon() {
440
+ return /* @__PURE__ */ jsx(
441
+ "svg",
442
+ {
443
+ width: "16",
444
+ height: "16",
445
+ viewBox: "0 0 24 24",
446
+ fill: "none",
447
+ stroke: "currentColor",
448
+ strokeWidth: "2",
449
+ strokeLinecap: "round",
450
+ strokeLinejoin: "round",
451
+ children: /* @__PURE__ */ jsx("path", { d: "m15 18-6-6 6-6" })
452
+ }
453
+ );
454
+ }
455
+ function ChevronRightIcon() {
456
+ return /* @__PURE__ */ jsx(
457
+ "svg",
458
+ {
459
+ width: "16",
460
+ height: "16",
461
+ viewBox: "0 0 24 24",
462
+ fill: "none",
463
+ stroke: "currentColor",
464
+ strokeWidth: "2",
465
+ strokeLinecap: "round",
466
+ strokeLinejoin: "round",
467
+ children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
468
+ }
469
+ );
470
+ }
471
+
472
+ export { DateInput };
473
+ //# sourceMappingURL=chunk-WN2FJE23.js.map
474
+ //# sourceMappingURL=chunk-WN2FJE23.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","file":"chunk-WN2FJE23.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatDateValue,\n isValidDate,\n isDateInPast,\n isDateInFuture,\n calculateAge,\n} from '../../utils/date';\nimport { Input, type InputProps } from '../Input';\nimport { Calendar } from 'lucide-react';\n\nexport type DateInputMode =\n | 'default'\n | 'dob'\n | 'expiration'\n | 'past'\n | 'future';\n\nexport type DateInputWidth = 'full' | 'fit' | 'fixed';\n\nconst widthClasses: Record<DateInputWidth, string> = {\n full: 'w-full',\n fit: 'w-fit',\n fixed: 'w-44', // ~176px - enough for MM/DD/YYYY + calendar icon\n};\n\nconst sizeClasses = {\n sm: 'h-8 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n} as const;\n\nexport interface DateInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The date value in MM/DD/YYYY format */\n value?: string;\n /** Callback fired when the value changes */\n onChange?: (value: string) => void;\n /** Validation mode for the date input */\n mode?: DateInputMode;\n /** Minimum age for DOB validation (default: 0) */\n minAge?: number;\n /** Maximum age for DOB validation */\n maxAge?: number;\n /** Whether to validate on blur */\n validateOnBlur?: boolean;\n /** Whether to show a calendar picker button */\n showCalendar?: boolean;\n /** Width behavior of the input */\n width?: DateInputWidth;\n}\n\nfunction getValidationError(\n value: string,\n mode: DateInputMode,\n minAge?: number,\n maxAge?: number\n): string | undefined {\n if (!value || value.replace(/\\D/g, '').length === 0) {\n return undefined;\n }\n\n if (!isValidDate(value)) {\n return 'Please enter a valid date (MM/DD/YYYY)';\n }\n\n switch (mode) {\n case 'dob': {\n if (!isDateInPast(value)) {\n return 'Date of birth must be in the past';\n }\n const age = calculateAge(value);\n if (age !== null) {\n if (minAge !== undefined && age < minAge) {\n return `Must be at least ${minAge} years old`;\n }\n if (maxAge !== undefined && age > maxAge) {\n return `Must be no more than ${maxAge} years old`;\n }\n }\n break;\n }\n case 'expiration':\n if (!isDateInFuture(value)) {\n return 'Expiration date must be in the future';\n }\n break;\n case 'past':\n if (!isDateInPast(value)) {\n return 'Date must be in the past';\n }\n break;\n case 'future':\n if (!isDateInFuture(value)) {\n return 'Date must be in the future';\n }\n break;\n }\n\n return undefined;\n}\n\n/**\n * A date input that automatically formats to MM/DD/YYYY with validation modes.\n *\n * @example\n * ```tsx\n * // Date of birth with age validation\n * <DateInput\n * label=\"Date of Birth\"\n * mode=\"dob\"\n * minAge={18}\n * validateOnBlur\n * />\n *\n * // With calendar picker\n * <DateInput\n * label=\"Select Date\"\n * showCalendar\n * />\n *\n * // Expiration date\n * <DateInput\n * label=\"License Expiration\"\n * mode=\"expiration\"\n * validateOnBlur\n * />\n * ```\n */\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value = '',\n onChange,\n mode = 'default',\n minAge,\n maxAge,\n validateOnBlur,\n showCalendar = false,\n width = 'full',\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatDateValue(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatDateValue(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatDateValue(e.target.value);\n setDisplayValue(formatted);\n onChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const validationError = getValidationError(\n displayValue,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const placeholder = mode === 'expiration' ? 'MM/DD/YYYY' : 'MM/DD/YYYY';\n const autoComplete =\n mode === 'dob' ? 'bday' : mode === 'expiration' ? 'cc-exp' : undefined;\n\n // Generate stable ID for accessibility\n const generatedId = React.useId();\n\n // Calendar picker state\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n // Parse current value into date parts for calendar\n const parsedDate = React.useMemo(() => {\n if (!displayValue || !isValidDate(displayValue)) {\n return {\n month: new Date().getMonth(),\n year: new Date().getFullYear(),\n day: null,\n };\n }\n const [month, day, year] = displayValue.split('/').map(Number);\n return { month: month - 1, year, day };\n }, [displayValue]);\n\n const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);\n const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);\n\n // Update calendar view when value changes\n React.useEffect(() => {\n if (displayValue && isValidDate(displayValue)) {\n const [month, , year] = displayValue.split('/').map(Number);\n setCalendarMonth(month - 1);\n setCalendarYear(year);\n }\n }, [displayValue]);\n\n // Close calendar on click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n calendarRef.current &&\n !calendarRef.current.contains(event.target as HTMLElement) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as HTMLElement)\n ) {\n setIsCalendarOpen(false);\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isCalendarOpen]);\n\n // Close on Escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsCalendarOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isCalendarOpen]);\n\n const handleDateSelect = (day: number) => {\n const month = String(calendarMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const year = String(calendarYear);\n const formatted = `${month}/${dayStr}/${year}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n setIsCalendarOpen(false);\n\n // Validate if needed\n if (validateOnBlur) {\n const validationError = getValidationError(\n formatted,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (month: number, year: number) => {\n return new Date(year, month, 1).getDay();\n };\n\n const renderCalendar = () => {\n const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);\n const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);\n const days: (number | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add the days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n const isSelectedDay = (day: number) => {\n return (\n parsedDate.day === day &&\n parsedDate.month === calendarMonth &&\n parsedDate.year === calendarYear\n );\n };\n\n const isToday = (day: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n calendarMonth === today.getMonth() &&\n calendarYear === today.getFullYear()\n );\n };\n\n return (\n <div\n ref={calendarRef}\n className={cn(\n 'absolute top-full left-0 z-50 mt-1',\n 'bg-background border-border rounded-lg border shadow-lg',\n 'w-72 p-3'\n )}\n role=\"dialog\"\n aria-label=\"Choose date\"\n >\n {/* Header with month/year navigation */}\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 0) {\n setCalendarMonth(11);\n setCalendarYear(calendarYear - 1);\n } else {\n setCalendarMonth(calendarMonth - 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Previous month\"\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"flex items-center gap-2\">\n <select\n value={calendarMonth}\n onChange={(e) => setCalendarMonth(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select month\"\n >\n {monthNames.map((name, i) => (\n <option key={name} value={i}>\n {name}\n </option>\n ))}\n </select>\n <select\n value={calendarYear}\n onChange={(e) => setCalendarYear(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select year\"\n >\n {Array.from(\n { length: 150 },\n (_, i) => new Date().getFullYear() - 100 + i\n ).map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 11) {\n setCalendarMonth(0);\n setCalendarYear(calendarYear + 1);\n } else {\n setCalendarMonth(calendarMonth + 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Next month\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"mb-1 grid grid-cols-7 gap-1\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map((day) => (\n <div\n key={day}\n className=\"text-muted-foreground py-1 text-center text-xs font-medium\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={day === null}\n onClick={() => day && handleDateSelect(day)}\n className={cn(\n 'h-8 w-8 rounded-md text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n day === null && 'invisible',\n day !== null && 'hover:bg-muted',\n isSelectedDay(day!) &&\n 'bg-primary-800 hover:bg-primary-700 text-white',\n isToday(day!) &&\n !isSelectedDay(day!) &&\n 'border-primary-800 text-primary-800 border'\n )}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"border-border mt-3 border-t pt-3\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date();\n setCalendarMonth(today.getMonth());\n setCalendarYear(today.getFullYear());\n handleDateSelect(today.getDate());\n }}\n className=\"text-primary-800 w-full text-sm hover:underline\"\n >\n Today\n </button>\n </div>\n </div>\n );\n };\n\n if (showCalendar) {\n // Extract label/error/helper and component-specific props to handle positioning correctly\n // Filter out Input component props that aren't valid HTML input attributes\n const { label, helperText, hideLabel, required, size, ...inputProps } =\n props;\n // Ensure size has a valid value (fallback to 'md' if null/undefined)\n const resolvedSize = size ?? 'md';\n const inputId = inputProps.id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n const showError = hasError || !!localError;\n const errorMessage = error || localError;\n\n return (\n <div className={cn('flex flex-col gap-1.5', widthClasses[width])}>\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {required && (\n <span\n className=\"ml-1\"\n style={{ color: '#ef4444' }}\n aria-hidden=\"true\"\n >\n *\n </span>\n )}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n aria-invalid={showError}\n aria-describedby={\n [errorMessage ? errorId : null, helperText ? helperId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={cn(\n 'w-full px-3 py-2',\n 'rounded-lg border',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n sizeClasses[resolvedSize],\n showError\n ? 'border-destructive focus:ring-destructive'\n : 'border-input',\n 'pr-10',\n className\n )}\n {...inputProps}\n />\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsCalendarOpen(!isCalendarOpen)}\n className={cn(\n 'absolute top-1/2 right-3 -translate-y-1/2',\n 'text-muted-foreground hover:text-foreground',\n 'focus:text-foreground focus:outline-none',\n 'transition-colors'\n )}\n aria-label=\"Open calendar\"\n aria-expanded={isCalendarOpen}\n aria-haspopup=\"dialog\"\n >\n <Calendar size={18} />\n </button>\n {isCalendarOpen && renderCalendar()}\n </div>\n {errorMessage && (\n <p\n id={errorId}\n className=\"text-sm\"\n style={{ color: '#ef4444' }}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {helperText && !errorMessage && (\n <p id={helperId} className=\"text-muted-foreground text-sm\">\n {helperText}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\n// Simple icon components\nfunction ChevronLeftIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport { DateInput };\n"]}