@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/Tooltip/Tooltip.tsx"],"names":["React","usePrefersReducedMotion","jsxs","createPortal","cn"],"mappings":"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","file":"chunk-BXK5TNJE.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** The content to display in the tooltip */\n content: React.ReactNode;\n /** The element that triggers the tooltip */\n children: React.ReactElement<{\n onFocus?: () => void;\n onBlur?: () => void;\n 'aria-describedby'?: string;\n }>;\n /** Preferred placement of the tooltip relative to the trigger. Will flip if not enough space. */\n placement?: TooltipPlacement;\n /** Delay in ms before showing the tooltip */\n delay?: number;\n /** Whether the tooltip is disabled */\n disabled?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Additional class name for the tooltip content */\n className?: string;\n /** Maximum width of the tooltip in pixels. Set to 'none' for no limit. Default: 250 */\n maxWidth?: number | 'none';\n /** Offset from the trigger element in pixels. Default: 8 */\n offset?: number;\n}\n\nconst DEFAULT_OFFSET = 8;\nconst VIEWPORT_PADDING = 8;\n\n/**\n * An accessible tooltip component that displays on hover/focus.\n * Features smart positioning that automatically flips to avoid going off-screen.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"This is a tooltip\">\n * <Button>Hover me</Button>\n * </Tooltip>\n * ```\n *\n * @example\n * ```tsx\n * // With multi-line content\n * <Tooltip content=\"This is a longer description that will wrap nicely\" maxWidth={200}>\n * <Button>Info</Button>\n * </Tooltip>\n * ```\n */\nfunction Tooltip({\n content,\n children,\n placement: preferredPlacement = 'top',\n delay = 200,\n disabled = false,\n open: controlledOpen,\n onOpenChange,\n className,\n maxWidth = 250,\n offset = DEFAULT_OFFSET,\n}: TooltipProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const [position, setPosition] = React.useState<{\n top: number;\n left: number;\n actualPlacement: TooltipPlacement;\n arrowOffset: number;\n } | null>(null);\n const [isDarkMode, setIsDarkMode] = React.useState(false);\n\n const showTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const hideTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const isHoveringRef = React.useRef(false);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const tooltipRef = React.useRef<HTMLDivElement>(null);\n const tooltipId = React.useId();\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(value);\n }\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange]\n );\n\n const clearTimeouts = React.useCallback(() => {\n if (showTimeoutRef.current) {\n clearTimeout(showTimeoutRef.current);\n showTimeoutRef.current = null;\n }\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = null;\n }\n }, []);\n\n // Calculate optimal position for tooltip\n const calculatePosition = React.useCallback(() => {\n if (!wrapperRef.current || !tooltipRef.current) return;\n\n const triggerRect = wrapperRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Helper to check if placement fits\n const fitsPlacement = (p: TooltipPlacement): boolean => {\n switch (p) {\n case 'top':\n return (\n triggerRect.top - tooltipRect.height - offset >= VIEWPORT_PADDING\n );\n case 'bottom':\n return (\n triggerRect.bottom + tooltipRect.height + offset <=\n viewportHeight - VIEWPORT_PADDING\n );\n case 'left':\n return (\n triggerRect.left - tooltipRect.width - offset >= VIEWPORT_PADDING\n );\n case 'right':\n return (\n triggerRect.right + tooltipRect.width + offset <=\n viewportWidth - VIEWPORT_PADDING\n );\n }\n };\n\n // Determine actual placement (flip if preferred doesn't fit)\n let actualPlacement = preferredPlacement;\n if (!fitsPlacement(preferredPlacement)) {\n const opposites: Record<TooltipPlacement, TooltipPlacement> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n const opposite = opposites[preferredPlacement];\n if (fitsPlacement(opposite)) {\n actualPlacement = opposite;\n } else {\n // Try perpendicular placements\n const perpendicular: TooltipPlacement[] =\n preferredPlacement === 'top' || preferredPlacement === 'bottom'\n ? ['right', 'left']\n : ['bottom', 'top'];\n for (const p of perpendicular) {\n if (fitsPlacement(p)) {\n actualPlacement = p;\n break;\n }\n }\n }\n }\n\n // Calculate base position\n let top = 0;\n let left = 0;\n const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n\n switch (actualPlacement) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - offset;\n left = triggerCenterX - tooltipRect.width / 2;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerCenterX - tooltipRect.width / 2;\n break;\n case 'left':\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.left - tooltipRect.width - offset;\n break;\n case 'right':\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.right + offset;\n break;\n }\n\n // Calculate arrow offset for when tooltip is constrained\n let arrowOffset = 0;\n const idealLeft = left;\n\n // Constrain to viewport (horizontal)\n if (left < VIEWPORT_PADDING) {\n left = VIEWPORT_PADDING;\n } else if (left + tooltipRect.width > viewportWidth - VIEWPORT_PADDING) {\n left = viewportWidth - tooltipRect.width - VIEWPORT_PADDING;\n }\n\n // Calculate arrow offset based on how much we shifted\n if (actualPlacement === 'top' || actualPlacement === 'bottom') {\n arrowOffset = idealLeft - left;\n }\n\n // Constrain to viewport (vertical)\n if (top < VIEWPORT_PADDING) {\n top = VIEWPORT_PADDING;\n } else if (top + tooltipRect.height > viewportHeight - VIEWPORT_PADDING) {\n top = viewportHeight - tooltipRect.height - VIEWPORT_PADDING;\n }\n\n setPosition({ top, left, actualPlacement, arrowOffset });\n }, [preferredPlacement, offset]);\n\n // Detect dark mode from document\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const checkDarkMode = () => {\n setIsDarkMode(document.documentElement.classList.contains('dark'));\n };\n\n checkDarkMode();\n\n // Watch for class changes on document\n const observer = new window.MutationObserver(checkDarkMode);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n // Recalculate position when open or on scroll/resize\n React.useEffect(() => {\n if (!isOpen) {\n setPosition(null);\n return;\n }\n\n // Initial calculation after render\n const rafId = window.requestAnimationFrame(() => {\n calculatePosition();\n });\n\n // Recalculate on scroll/resize\n const handleUpdate = () => calculatePosition();\n window.addEventListener('scroll', handleUpdate, true);\n window.addEventListener('resize', handleUpdate);\n\n return () => {\n window.cancelAnimationFrame(rafId);\n window.removeEventListener('scroll', handleUpdate, true);\n window.removeEventListener('resize', handleUpdate);\n };\n }, [isOpen, calculatePosition]);\n\n const handleMouseEnter = React.useCallback(() => {\n if (disabled) return;\n isHoveringRef.current = true;\n clearTimeouts();\n showTimeoutRef.current = setTimeout(() => {\n if (isHoveringRef.current) {\n setOpen(true);\n }\n }, delay);\n }, [disabled, delay, setOpen, clearTimeouts]);\n\n const handleMouseLeave = React.useCallback(() => {\n isHoveringRef.current = false;\n clearTimeouts();\n hideTimeoutRef.current = setTimeout(() => {\n if (!isHoveringRef.current) {\n setOpen(false);\n }\n }, 100);\n }, [setOpen, clearTimeouts]);\n\n const handleFocus = React.useCallback(() => {\n if (disabled) return;\n clearTimeouts();\n setOpen(true);\n }, [disabled, setOpen, clearTimeouts]);\n\n const handleBlur = React.useCallback(() => {\n clearTimeouts();\n setOpen(false);\n }, [setOpen, clearTimeouts]);\n\n // Cleanup timeouts on unmount\n React.useEffect(() => {\n return () => {\n clearTimeouts();\n };\n }, [clearTimeouts]);\n\n // Clone the child to add aria attributes and focus handlers\n const trigger = React.cloneElement(children, {\n onFocus: handleFocus,\n onBlur: handleBlur,\n 'aria-describedby': isOpen ? tooltipId : undefined,\n });\n\n // Arrow styles based on actual placement - using inline styles for border triangle\n // Arrow color matches tooltip background (neutral-900 in light mode, neutral-100 in dark mode)\n const getArrowStyle = (isDark: boolean): React.CSSProperties => {\n if (!position) return {};\n const { actualPlacement, arrowOffset } = position;\n\n const baseStyle: React.CSSProperties = {\n position: 'absolute',\n width: 0,\n height: 0,\n borderStyle: 'solid',\n // Must use content-box for CSS border triangle to work (Tailwind sets border-box globally)\n boxSizing: 'content-box',\n };\n\n const arrowSize = 5;\n // Match tooltip background colors: bg-neutral-900 (#171717) / dark:bg-neutral-100 (#f5f5f5)\n const arrowColor = isDark ? '#f5f5f5' : '#171717';\n\n // Use arrowSize for positioning to create slight overlap with tooltip body\n const arrowOffset2 = arrowSize;\n\n switch (actualPlacement) {\n case 'top':\n return {\n ...baseStyle,\n bottom: -arrowOffset2,\n left: `calc(50% + ${arrowOffset}px)`,\n transform: 'translateX(-50%)',\n borderWidth: `${arrowSize}px ${arrowSize}px 0 ${arrowSize}px`,\n borderColor: `${arrowColor} transparent transparent transparent`,\n };\n case 'bottom':\n return {\n ...baseStyle,\n top: -arrowOffset2,\n left: `calc(50% + ${arrowOffset}px)`,\n transform: 'translateX(-50%)',\n borderWidth: `0 ${arrowSize}px ${arrowSize}px ${arrowSize}px`,\n borderColor: `transparent transparent ${arrowColor} transparent`,\n };\n case 'left':\n return {\n ...baseStyle,\n right: -arrowOffset2,\n top: '50%',\n transform: 'translateY(-50%)',\n borderWidth: `${arrowSize}px 0 ${arrowSize}px ${arrowSize}px`,\n borderColor: `transparent transparent transparent ${arrowColor}`,\n };\n case 'right':\n return {\n ...baseStyle,\n left: -arrowOffset2,\n top: '50%',\n transform: 'translateY(-50%)',\n borderWidth: `${arrowSize}px ${arrowSize}px ${arrowSize}px 0`,\n borderColor: `transparent ${arrowColor} transparent transparent`,\n };\n }\n };\n\n return (\n <div\n ref={wrapperRef}\n className=\"relative inline-flex\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {trigger}\n {isOpen &&\n !disabled &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={tooltipRef}\n id={tooltipId}\n role=\"tooltip\"\n aria-hidden={!isOpen}\n style={{\n position: 'fixed',\n top: position?.top ?? -9999,\n left: position?.left ?? -9999,\n maxWidth: maxWidth === 'none' ? undefined : maxWidth,\n visibility: position ? 'visible' : 'hidden',\n // Use inline styles to ensure they work in portals (rendered outside React tree)\n backgroundColor: isDarkMode ? '#f5f5f5' : '#171717', // neutral-100 / neutral-900\n color: isDarkMode ? '#171717' : '#ffffff', // neutral-900 / white\n fontFamily:\n 'var(--mieweb-font-sans, ui-sans-serif, system-ui, sans-serif)',\n }}\n className={cn(\n 'pointer-events-none z-[9999] px-3 py-1.5 text-xs',\n 'rounded-md shadow-md',\n 'leading-normal font-semibold',\n !prefersReducedMotion && position && 'animate-fade-in',\n className\n )}\n >\n {content}\n {position && (\n <span style={getArrowStyle(isDarkMode)} aria-hidden=\"true\" />\n )}\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nTooltip.displayName = 'Tooltip';\n\nexport { Tooltip };\n"]}
@@ -0,0 +1,82 @@
1
+ // src/brands/webchart.ts
2
+ var webchartBrand = {
3
+ name: "webchart",
4
+ displayName: "WebChart",
5
+ description: "Future-ready electronic health record system",
6
+ colors: {
7
+ // Primary color scale - WebChart Orange (#f5841f)
8
+ primary: {
9
+ 50: "#fff7ed",
10
+ 100: "#ffedd5",
11
+ 200: "#fed7aa",
12
+ 300: "#fdba74",
13
+ 400: "#fb923c",
14
+ 500: "#f5841f",
15
+ 600: "#ea580c",
16
+ 700: "#c2410c",
17
+ 800: "#9a3412",
18
+ 900: "#7c2d12",
19
+ 950: "#431407"
20
+ },
21
+ // Light mode semantic colors
22
+ light: {
23
+ background: "#ffffff",
24
+ foreground: "#171717",
25
+ card: "#ffffff",
26
+ cardForeground: "#171717",
27
+ muted: "#f5f5f5",
28
+ mutedForeground: "#737373",
29
+ border: "#e5e7eb",
30
+ input: "#e5e7eb",
31
+ ring: "#f5841f",
32
+ destructive: "#ef4444",
33
+ destructiveForeground: "#ffffff",
34
+ success: "#22c55e",
35
+ successForeground: "#ffffff",
36
+ warning: "#f59e0b",
37
+ warningForeground: "#ffffff"
38
+ },
39
+ // Dark mode semantic colors
40
+ dark: {
41
+ background: "#171717",
42
+ foreground: "#fafafa",
43
+ card: "#262626",
44
+ cardForeground: "#fafafa",
45
+ muted: "#404040",
46
+ mutedForeground: "#a1a1aa",
47
+ border: "#404040",
48
+ input: "#404040",
49
+ ring: "#f5841f",
50
+ destructive: "#dc2626",
51
+ destructiveForeground: "#fafafa",
52
+ success: "#16a34a",
53
+ successForeground: "#fafafa",
54
+ warning: "#d97706",
55
+ warningForeground: "#fafafa"
56
+ }
57
+ },
58
+ typography: {
59
+ fontFamily: {
60
+ sans: ["Inter", "ui-sans-serif", "system-ui", "sans-serif"],
61
+ mono: ["ui-monospace", "SFMono-Regular", "Menlo", "monospace"]
62
+ }
63
+ },
64
+ borderRadius: {
65
+ none: "0",
66
+ sm: "0.25rem",
67
+ md: "0.5rem",
68
+ lg: "0.75rem",
69
+ xl: "1rem",
70
+ "2xl": "1.5rem",
71
+ full: "9999px"
72
+ },
73
+ boxShadow: {
74
+ card: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
75
+ dropdown: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
76
+ modal: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)"
77
+ }
78
+ };
79
+
80
+ export { webchartBrand };
81
+ //# sourceMappingURL=chunk-C6MDPPPL.js.map
82
+ //# sourceMappingURL=chunk-C6MDPPPL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/brands/webchart.ts"],"names":[],"mappings":";AAaO,IAAM,aAAA,GAA6B;AAAA,EACxC,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,WAAA,EAAa,8CAAA;AAAA,EAEb,MAAA,EAAQ;AAAA;AAAA,IAEN,OAAA,EAAS;AAAA,MACP,EAAA,EAAI,SAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA;AAAA,IAGA,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,cAAA,EAAgB,SAAA;AAAA,MAChB,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,SAAA;AAAA,MACjB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,SAAA;AAAA,MACb,qBAAA,EAAuB,SAAA;AAAA,MACvB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB,SAAA;AAAA,MACnB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACrB;AAAA;AAAA,IAGA,IAAA,EAAM;AAAA,MACJ,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,cAAA,EAAgB,SAAA;AAAA,MAChB,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,SAAA;AAAA,MACjB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,SAAA;AAAA,MACb,qBAAA,EAAuB,SAAA;AAAA,MACvB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB,SAAA;AAAA,MACnB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB;AAAA;AACrB,GACF;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,CAAC,OAAA,EAAS,eAAA,EAAiB,aAAa,YAAY,CAAA;AAAA,MAC1D,IAAA,EAAM,CAAC,cAAA,EAAgB,gBAAA,EAAkB,SAAS,WAAW;AAAA;AAC/D,GACF;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,+DAAA;AAAA,IACN,QAAA,EACE,kEAAA;AAAA,IACF,KAAA,EAAO;AAAA;AAEX","file":"chunk-C6MDPPPL.js","sourcesContent":["/**\n * WebChart Brand Configuration\n *\n * The official brand theme for WebChart EHR.\n * Primary color: #f5841f (WebChart Orange)\n */\n\nimport type { BrandConfig } from './types';\n\n/**\n * WebChart brand configuration.\n * This defines all the design tokens used in WebChart applications.\n */\nexport const webchartBrand: BrandConfig = {\n name: 'webchart',\n displayName: 'WebChart',\n description: 'Future-ready electronic health record system',\n\n colors: {\n // Primary color scale - WebChart Orange (#f5841f)\n primary: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f5841f',\n 600: '#ea580c',\n 700: '#c2410c',\n 800: '#9a3412',\n 900: '#7c2d12',\n 950: '#431407',\n },\n\n // Light mode semantic colors\n light: {\n background: '#ffffff',\n foreground: '#171717',\n card: '#ffffff',\n cardForeground: '#171717',\n muted: '#f5f5f5',\n mutedForeground: '#737373',\n border: '#e5e7eb',\n input: '#e5e7eb',\n ring: '#f5841f',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n success: '#22c55e',\n successForeground: '#ffffff',\n warning: '#f59e0b',\n warningForeground: '#ffffff',\n },\n\n // Dark mode semantic colors\n dark: {\n background: '#171717',\n foreground: '#fafafa',\n card: '#262626',\n cardForeground: '#fafafa',\n muted: '#404040',\n mutedForeground: '#a1a1aa',\n border: '#404040',\n input: '#404040',\n ring: '#f5841f',\n destructive: '#dc2626',\n destructiveForeground: '#fafafa',\n success: '#16a34a',\n successForeground: '#fafafa',\n warning: '#d97706',\n warningForeground: '#fafafa',\n },\n },\n\n typography: {\n fontFamily: {\n sans: ['Inter', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],\n },\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n full: '9999px',\n },\n\n boxShadow: {\n card: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n dropdown:\n '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n modal: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n },\n};\n\nexport { webchartBrand as default };\n"]}
@@ -0,0 +1,22 @@
1
+ // src/utils/phone.ts
2
+ function formatPhoneNumber(value) {
3
+ const digits = value.replace(/\D/g, "").slice(0, 10);
4
+ if (digits.length === 0) return "";
5
+ if (digits.length <= 3) return `(${digits}`;
6
+ if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;
7
+ return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;
8
+ }
9
+ function unformatPhoneNumber(value) {
10
+ return value.replace(/\D/g, "");
11
+ }
12
+ function isValidPhoneNumber(value) {
13
+ const digits = unformatPhoneNumber(value);
14
+ return digits.length === 10;
15
+ }
16
+ function isPhoneNumberEmpty(value) {
17
+ return unformatPhoneNumber(value).length === 0;
18
+ }
19
+
20
+ export { formatPhoneNumber, isPhoneNumberEmpty, isValidPhoneNumber, unformatPhoneNumber };
21
+ //# sourceMappingURL=chunk-CEHWXAAI.js.map
22
+ //# sourceMappingURL=chunk-CEHWXAAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/phone.ts"],"names":[],"mappings":";AAOO,SAAS,kBAAkB,KAAA,EAAuB;AACvD,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACnD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAA,EAAG,OAAO,IAAI,MAAM,CAAA,CAAA;AACzC,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAA,EAAG,OAAO,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACzE,EAAA,OAAO,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACzE;AAKO,SAAS,oBAAoB,KAAA,EAAuB;AACzD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;AAKO,SAAS,mBAAmB,KAAA,EAAwB;AACzD,EAAA,MAAM,MAAA,GAAS,oBAAoB,KAAK,CAAA;AACxC,EAAA,OAAO,OAAO,MAAA,KAAW,EAAA;AAC3B;AAKO,SAAS,mBAAmB,KAAA,EAAwB;AACzD,EAAA,OAAO,mBAAA,CAAoB,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA;AAC/C","file":"chunk-CEHWXAAI.js","sourcesContent":["/**\n * Phone number formatting utilities\n */\n\n/**\n * Formats a phone number string to US format: (XXX) XXX-XXXX\n */\nexport function formatPhoneNumber(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 10);\n if (digits.length === 0) return '';\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n\n/**\n * Removes formatting from a phone number, returning only digits\n */\nexport function unformatPhoneNumber(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Validates if a phone number has exactly 10 digits\n */\nexport function isValidPhoneNumber(value: string): boolean {\n const digits = unformatPhoneNumber(value);\n return digits.length === 10;\n}\n\n/**\n * Checks if a phone number string is empty (no digits)\n */\nexport function isPhoneNumberEmpty(value: string): boolean {\n return unformatPhoneNumber(value).length === 0;\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { useRef, useEffect } from 'react';
2
+
3
+ // src/hooks/useFocusTrap.ts
4
+ function useFocusTrap(enabled = true) {
5
+ const containerRef = useRef(null);
6
+ useEffect(() => {
7
+ if (!enabled || !containerRef.current) return;
8
+ const container = containerRef.current;
9
+ const focusableElements = container.querySelectorAll(
10
+ 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
11
+ );
12
+ if (focusableElements.length === 0) return;
13
+ const firstElement = focusableElements[0];
14
+ const lastElement = focusableElements[focusableElements.length - 1];
15
+ firstElement.focus();
16
+ const handleKeyDown = (event) => {
17
+ if (event.key !== "Tab") return;
18
+ if (event.shiftKey) {
19
+ if (document.activeElement === firstElement) {
20
+ event.preventDefault();
21
+ lastElement.focus();
22
+ }
23
+ } else {
24
+ if (document.activeElement === lastElement) {
25
+ event.preventDefault();
26
+ firstElement.focus();
27
+ }
28
+ }
29
+ };
30
+ container.addEventListener("keydown", handleKeyDown);
31
+ return () => container.removeEventListener("keydown", handleKeyDown);
32
+ }, [enabled]);
33
+ return containerRef;
34
+ }
35
+
36
+ export { useFocusTrap };
37
+ //# sourceMappingURL=chunk-CLNOI5J7.js.map
38
+ //# sourceMappingURL=chunk-CLNOI5J7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useFocusTrap.ts"],"names":[],"mappings":";;;AAsBO,SAAS,YAAA,CACd,UAAU,IAAA,EACW;AACrB,EAAA,MAAM,YAAA,GAAe,OAAU,IAAI,CAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,OAAA,EAAS;AAEvC,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,MAAM,oBAAoB,SAAA,CAAU,gBAAA;AAAA,MAClC;AAAA,KACF;AAEA,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAEpC,IAAA,MAAM,YAAA,GAAe,kBAAkB,CAAC,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,iBAAA,CAAkB,MAAA,GAAS,CAAC,CAAA;AAGlE,IAAA,YAAA,CAAa,KAAA,EAAM;AAEnB,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAoC;AACzD,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AAEzB,MAAA,IAAI,MAAM,QAAA,EAAU;AAElB,QAAA,IAAI,QAAA,CAAS,kBAAkB,YAAA,EAAc;AAC3C,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,WAAA,CAAY,KAAA,EAAM;AAAA,QACpB;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,QAAA,CAAS,kBAAkB,WAAA,EAAa;AAC1C,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,YAAA,CAAa,KAAA,EAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,SAAA,CAAU,gBAAA,CAAiB,WAAW,aAAa,CAAA;AACnD,IAAA,OAAO,MAAM,SAAA,CAAU,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,YAAA;AACT","file":"chunk-CLNOI5J7.js","sourcesContent":["import { useEffect, useRef, type RefObject } from 'react';\n\n/**\n * Hook that traps focus within a container element.\n * Essential for accessibility in modals and dialogs.\n *\n * @param enabled - Whether focus trapping is active\n * @returns ref to attach to the container element\n *\n * @example\n * ```tsx\n * function Modal({ isOpen }: { isOpen: boolean }) {\n * const containerRef = useFocusTrap<HTMLDivElement>(isOpen);\n * return (\n * <div ref={containerRef} role=\"dialog\" aria-modal=\"true\">\n * <button>First focusable</button>\n * <button>Last focusable</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useFocusTrap<T extends HTMLElement>(\n enabled = true\n): RefObject<T | null> {\n const containerRef = useRef<T>(null);\n\n useEffect(() => {\n if (!enabled || !containerRef.current) return;\n\n const container = containerRef.current;\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Focus the first element when trap is enabled\n firstElement.focus();\n\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n container.addEventListener('keydown', handleKeyDown);\n return () => container.removeEventListener('keydown', handleKeyDown);\n }, [enabled]);\n\n return containerRef;\n}\n"]}
@@ -0,0 +1,99 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+
3
+ // src/hooks/useKeyboardShortcut.ts
4
+ function useKeyboardShortcut(key, callback, options = {}) {
5
+ const {
6
+ enabled = true,
7
+ modifiers = {},
8
+ preventDefault = true,
9
+ stopPropagation = false,
10
+ ignoreInputs = true
11
+ } = options;
12
+ const handleKeyDown = useCallback(
13
+ (event) => {
14
+ if (ignoreInputs) {
15
+ const target = event.target;
16
+ const tagName = target.tagName.toUpperCase();
17
+ if (tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT" || target.isContentEditable) {
18
+ return;
19
+ }
20
+ }
21
+ const { ctrl, shift, alt, meta } = modifiers;
22
+ const metaOrCtrl = meta || ctrl;
23
+ if (metaOrCtrl) {
24
+ if (!(event.metaKey || event.ctrlKey)) return;
25
+ } else {
26
+ if (event.metaKey || event.ctrlKey) return;
27
+ }
28
+ if (shift && !event.shiftKey) return;
29
+ if (alt && !event.altKey) return;
30
+ const eventKey = event.key.length === 1 ? event.key.toLowerCase() : event.key;
31
+ const targetKey = key.length === 1 ? key.toLowerCase() : key;
32
+ if (eventKey !== targetKey) return;
33
+ if (preventDefault) {
34
+ event.preventDefault();
35
+ }
36
+ if (stopPropagation) {
37
+ event.stopPropagation();
38
+ }
39
+ callback(event);
40
+ },
41
+ [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]
42
+ );
43
+ useEffect(() => {
44
+ if (!enabled) return;
45
+ document.addEventListener("keydown", handleKeyDown);
46
+ return () => document.removeEventListener("keydown", handleKeyDown);
47
+ }, [handleKeyDown, enabled]);
48
+ }
49
+ function useCommandK(callback, enabled = true) {
50
+ useKeyboardShortcut("k", callback, {
51
+ enabled,
52
+ modifiers: { meta: true, ctrl: true },
53
+ ignoreInputs: false
54
+ // Cmd+K should work even in inputs
55
+ });
56
+ }
57
+ function useMediaQuery(query) {
58
+ const [matches, setMatches] = useState(() => {
59
+ if (typeof window === "undefined") return false;
60
+ return window.matchMedia(query).matches;
61
+ });
62
+ useEffect(() => {
63
+ if (typeof window === "undefined") return;
64
+ const mediaQuery = window.matchMedia(query);
65
+ setMatches(mediaQuery.matches);
66
+ const handler = (event) => {
67
+ setMatches(event.matches);
68
+ };
69
+ if (mediaQuery.addEventListener) {
70
+ mediaQuery.addEventListener("change", handler);
71
+ return () => mediaQuery.removeEventListener("change", handler);
72
+ }
73
+ mediaQuery.addListener(handler);
74
+ return () => mediaQuery.removeListener(handler);
75
+ }, [query]);
76
+ return matches;
77
+ }
78
+ function useIsMobile() {
79
+ return useMediaQuery("(max-width: 639px)");
80
+ }
81
+ function useIsSmallTablet() {
82
+ return useMediaQuery("(min-width: 640px) and (max-width: 767px)");
83
+ }
84
+ function useIsTablet() {
85
+ return useMediaQuery("(min-width: 768px) and (max-width: 1023px)");
86
+ }
87
+ function useIsDesktop() {
88
+ return useMediaQuery("(min-width: 1024px)");
89
+ }
90
+ function useIsLargeDesktop() {
91
+ return useMediaQuery("(min-width: 1280px)");
92
+ }
93
+ function useIsMobileOrTablet() {
94
+ return useMediaQuery("(max-width: 1023px)");
95
+ }
96
+
97
+ export { useCommandK, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery };
98
+ //# sourceMappingURL=chunk-CP7NPDQW.js.map
99
+ //# sourceMappingURL=chunk-CP7NPDQW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts"],"names":["useEffect"],"mappings":";;;AA2CO,SAAS,mBAAA,CACd,GAAA,EACA,QAAA,EACA,OAAA,GAAmC,EAAC,EAC9B;AACN,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,IAAA;AAAA,IACV,YAAY,EAAC;AAAA,IACb,cAAA,GAAiB,IAAA;AAAA,IACjB,eAAA,GAAkB,KAAA;AAAA,IAClB,YAAA,GAAe;AAAA,GACjB,GAAI,OAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,KAAA,KAAyB;AAExB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAY;AAC3C,QAAA,IACE,YAAY,OAAA,IACZ,OAAA,KAAY,cACZ,OAAA,KAAY,QAAA,IACZ,OAAO,iBAAA,EACP;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,MAAK,GAAI,SAAA;AAGnC,MAAA,MAAM,aAAa,IAAA,IAAQ,IAAA;AAC3B,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI,EAAE,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAA,EAAU;AAAA,MACzC,CAAA,MAAO;AAEL,QAAA,IAAI,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,EAAS;AAAA,MACtC;AAEA,MAAA,IAAI,KAAA,IAAS,CAAC,KAAA,CAAM,QAAA,EAAU;AAC9B,MAAA,IAAI,GAAA,IAAO,CAAC,KAAA,CAAM,MAAA,EAAQ;AAG1B,MAAA,MAAM,QAAA,GACJ,MAAM,GAAA,CAAI,MAAA,KAAW,IAAI,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY,GAAI,KAAA,CAAM,GAAA;AAC3D,MAAA,MAAM,YAAY,GAAA,CAAI,MAAA,KAAW,CAAA,GAAI,GAAA,CAAI,aAAY,GAAI,GAAA;AACzD,MAAA,IAAI,aAAa,SAAA,EAAW;AAE5B,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,KAAA,CAAM,cAAA,EAAe;AAAA,MACvB;AACA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,MACxB;AAEA,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB,CAAA;AAAA,IACA,CAAC,GAAA,EAAK,QAAA,EAAU,SAAA,EAAW,cAAA,EAAgB,iBAAiB,YAAY;AAAA,GAC1E;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,aAAA,EAAe,OAAO,CAAC,CAAA;AAC7B;AAaO,SAAS,WAAA,CAAY,QAAA,EAAsB,OAAA,GAAU,IAAA,EAAY;AACtE,EAAA,mBAAA,CAAoB,KAAK,QAAA,EAAU;AAAA,IACjC,OAAA;AAAA,IACA,SAAA,EAAW,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IACpC,YAAA,EAAc;AAAA;AAAA,GACf,CAAA;AACH;ACxGO,SAAS,cAAc,KAAA,EAAwB;AAEpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,MAAM;AAEpD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA;AAAA,EAClC,CAAC,CAAA;AAED,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAG1C,IAAA,UAAA,CAAW,WAAW,OAAO,CAAA;AAG7B,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAA+B;AAC9C,MAAA,UAAA,CAAW,MAAM,OAAO,CAAA;AAAA,IAC1B,CAAA;AAGA,IAAA,IAAI,WAAW,gBAAA,EAAkB;AAC/B,MAAA,UAAA,CAAW,gBAAA,CAAiB,UAAU,OAAO,CAAA;AAC7C,MAAA,OAAO,MAAM,UAAA,CAAW,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,IAC/D;AAGA,IAAA,UAAA,CAAW,YAAY,OAAO,CAAA;AAC9B,IAAA,OAAO,MAAM,UAAA,CAAW,cAAA,CAAe,OAAO,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,cAAc,oBAAoB,CAAA;AAC3C;AAGO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,cAAc,2CAA2C,CAAA;AAClE;AAGO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,cAAc,4CAA4C,CAAA;AACnE;AAGO,SAAS,YAAA,GAAwB;AACtC,EAAA,OAAO,cAAc,qBAAqB,CAAA;AAC5C;AAGO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,cAAc,qBAAqB,CAAA;AAC5C;AAGO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,OAAO,cAAc,qBAAqB,CAAA;AAC5C","file":"chunk-CP7NPDQW.js","sourcesContent":["import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n"]}
@@ -0,0 +1,256 @@
1
+ 'use strict';
2
+
3
+ var chunkVV4N4WY6_cjs = require('./chunk-VV4N4WY6.cjs');
4
+ var chunkBTJHYGPI_cjs = require('./chunk-BTJHYGPI.cjs');
5
+ var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ var PhoneInput = React__namespace.forwardRef(
30
+ ({
31
+ value = "",
32
+ onChange,
33
+ onFormattedChange,
34
+ validateOnBlur,
35
+ className,
36
+ onBlur,
37
+ hasError,
38
+ error,
39
+ ...props
40
+ }, ref) => {
41
+ const [displayValue, setDisplayValue] = React__namespace.useState(
42
+ () => chunkBTJHYGPI_cjs.formatPhoneNumber(value)
43
+ );
44
+ const [localError, setLocalError] = React__namespace.useState();
45
+ React__namespace.useEffect(() => {
46
+ setDisplayValue(chunkBTJHYGPI_cjs.formatPhoneNumber(value));
47
+ }, [value]);
48
+ const handleChange = (e) => {
49
+ const formatted = chunkBTJHYGPI_cjs.formatPhoneNumber(e.target.value);
50
+ setDisplayValue(formatted);
51
+ const unformatted = chunkBTJHYGPI_cjs.unformatPhoneNumber(formatted);
52
+ onChange?.(unformatted);
53
+ onFormattedChange?.(formatted);
54
+ if (localError) {
55
+ setLocalError(void 0);
56
+ }
57
+ };
58
+ const handleBlur = (e) => {
59
+ onBlur?.(e);
60
+ if (validateOnBlur) {
61
+ const unformatted = chunkBTJHYGPI_cjs.unformatPhoneNumber(displayValue);
62
+ if (unformatted.length > 0 && !chunkBTJHYGPI_cjs.isValidPhoneNumber(displayValue)) {
63
+ setLocalError("Please enter a valid 10-digit phone number");
64
+ } else {
65
+ setLocalError(void 0);
66
+ }
67
+ }
68
+ };
69
+ return /* @__PURE__ */ jsxRuntime.jsx(
70
+ chunkVV4N4WY6_cjs.Input,
71
+ {
72
+ ref,
73
+ type: "tel",
74
+ inputMode: "numeric",
75
+ autoComplete: "tel-national",
76
+ placeholder: "(555) 555-5555",
77
+ value: displayValue,
78
+ onChange: handleChange,
79
+ onBlur: handleBlur,
80
+ hasError: hasError || !!localError,
81
+ error: error || localError,
82
+ className: chunkOR5DRJCW_cjs.cn(className),
83
+ ...props
84
+ }
85
+ );
86
+ }
87
+ );
88
+ PhoneInput.displayName = "PhoneInput";
89
+ var PHONE_TYPES = [
90
+ { value: "cell", label: "Cell" },
91
+ { value: "landline", label: "Landline" },
92
+ { value: "home", label: "Home" },
93
+ { value: "work", label: "Work" },
94
+ { value: "fax", label: "Fax" }
95
+ ];
96
+ function PhoneInputGroup({
97
+ value,
98
+ onChange,
99
+ minEntries = 1,
100
+ maxEntries = 5,
101
+ required = false,
102
+ disabled = false,
103
+ validateOnBlur = false,
104
+ label,
105
+ typeLabels,
106
+ className
107
+ }) {
108
+ const phones = React__namespace.useMemo(() => {
109
+ if (value.length >= minEntries) return value;
110
+ const padding = Array(minEntries - value.length).fill(null).map(() => ({ number: "", type: "cell" }));
111
+ return [...value, ...padding];
112
+ }, [value, minEntries]);
113
+ const handlePhoneChange = (index, number) => {
114
+ const updated = [...phones];
115
+ updated[index] = { ...updated[index], number };
116
+ onChange(updated);
117
+ };
118
+ const handleTypeChange = (index, type) => {
119
+ const updated = [...phones];
120
+ updated[index] = { ...updated[index], type };
121
+ onChange(updated);
122
+ };
123
+ const handleAdd = () => {
124
+ if (phones.length < maxEntries) {
125
+ onChange([...phones, { number: "", type: "cell" }]);
126
+ }
127
+ };
128
+ const handleRemove = (index) => {
129
+ if (phones.length > minEntries) {
130
+ onChange(phones.filter((_, i) => i !== index));
131
+ }
132
+ };
133
+ const getTypeLabel = (type) => {
134
+ if (typeLabels?.[type]) return typeLabels[type];
135
+ return PHONE_TYPES.find((t) => t.value === type)?.label || type;
136
+ };
137
+ const canAdd = phones.length < maxEntries;
138
+ const canRemove = phones.length > minEntries;
139
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkOR5DRJCW_cjs.cn("space-y-3", className), children: phones.map((phone, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2", children: [
140
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
141
+ PhoneInput,
142
+ {
143
+ label: index === 0 ? label : void 0,
144
+ value: phone.number,
145
+ onChange: (num) => handlePhoneChange(index, num),
146
+ disabled,
147
+ validateOnBlur,
148
+ required: required && index === 0
149
+ }
150
+ ) }),
151
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-32 shrink-0", children: [
152
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: `phone-type-${index}`, className: "sr-only", children: "Phone type" }),
153
+ /* @__PURE__ */ jsxRuntime.jsx(
154
+ "select",
155
+ {
156
+ id: `phone-type-${index}`,
157
+ value: phone.type,
158
+ onChange: (e) => handleTypeChange(index, e.target.value),
159
+ disabled,
160
+ className: chunkOR5DRJCW_cjs.cn(
161
+ "w-full rounded-md border px-3 py-2 text-sm",
162
+ "border-gray-300 bg-white text-gray-900",
163
+ "focus:border-brand-500 focus:ring-brand-500/20 focus:ring-2 focus:outline-none",
164
+ "disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500",
165
+ "dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100",
166
+ "dark:focus:border-brand-400 dark:focus:ring-brand-400/20",
167
+ index === 0 && label ? "mt-6" : ""
168
+ ),
169
+ children: PHONE_TYPES.map((type) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: type.value, children: getTypeLabel(type.value) }, type.value))
170
+ }
171
+ )
172
+ ] }),
173
+ /* @__PURE__ */ jsxRuntime.jsx(
174
+ "div",
175
+ {
176
+ className: chunkOR5DRJCW_cjs.cn(
177
+ "flex shrink-0 items-center",
178
+ index === 0 && label ? "mt-6" : ""
179
+ ),
180
+ children: index === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ onClick: handleAdd,
185
+ disabled: disabled || !canAdd,
186
+ className: chunkOR5DRJCW_cjs.cn(
187
+ "rounded-full p-2 transition-colors",
188
+ "text-brand-600 hover:bg-brand-50",
189
+ "disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent",
190
+ "dark:text-brand-400 dark:hover:bg-brand-900/20",
191
+ "dark:disabled:text-gray-600"
192
+ ),
193
+ "aria-label": "Add phone number",
194
+ children: /* @__PURE__ */ jsxRuntime.jsx(
195
+ "svg",
196
+ {
197
+ className: "h-5 w-5",
198
+ fill: "none",
199
+ viewBox: "0 0 24 24",
200
+ stroke: "currentColor",
201
+ children: /* @__PURE__ */ jsxRuntime.jsx(
202
+ "path",
203
+ {
204
+ strokeLinecap: "round",
205
+ strokeLinejoin: "round",
206
+ strokeWidth: 2,
207
+ d: "M12 4v16m8-8H4"
208
+ }
209
+ )
210
+ }
211
+ )
212
+ }
213
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
214
+ "button",
215
+ {
216
+ type: "button",
217
+ onClick: () => handleRemove(index),
218
+ disabled: disabled || !canRemove,
219
+ className: chunkOR5DRJCW_cjs.cn(
220
+ "rounded-full p-2 transition-colors",
221
+ "text-red-600 hover:bg-red-50",
222
+ "disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent",
223
+ "dark:text-red-400 dark:hover:bg-red-900/20",
224
+ "dark:disabled:text-gray-600"
225
+ ),
226
+ "aria-label": "Remove phone number",
227
+ children: /* @__PURE__ */ jsxRuntime.jsx(
228
+ "svg",
229
+ {
230
+ className: "h-5 w-5",
231
+ fill: "none",
232
+ viewBox: "0 0 24 24",
233
+ stroke: "currentColor",
234
+ children: /* @__PURE__ */ jsxRuntime.jsx(
235
+ "path",
236
+ {
237
+ strokeLinecap: "round",
238
+ strokeLinejoin: "round",
239
+ strokeWidth: 2,
240
+ d: "M20 12H4"
241
+ }
242
+ )
243
+ }
244
+ )
245
+ }
246
+ )
247
+ }
248
+ )
249
+ ] }, index)) });
250
+ }
251
+ PhoneInputGroup.displayName = "PhoneInputGroup";
252
+
253
+ exports.PhoneInput = PhoneInput;
254
+ exports.PhoneInputGroup = PhoneInputGroup;
255
+ //# sourceMappingURL=chunk-CQCYXHCU.cjs.map
256
+ //# sourceMappingURL=chunk-CQCYXHCU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/PhoneInput/PhoneInput.tsx"],"names":["React","formatPhoneNumber","unformatPhoneNumber","isValidPhoneNumber","jsx","Input","cn","jsxs"],"mappings":"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","file":"chunk-CQCYXHCU.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatPhoneNumber,\n unformatPhoneNumber,\n isValidPhoneNumber,\n} from '../../utils/phone';\nimport { Input, type InputProps } from '../Input';\n\nexport interface PhoneInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The phone number value (can be formatted or unformatted) */\n value?: string;\n /** Callback fired when the value changes, receives the unformatted value */\n onChange?: (value: string) => void;\n /** Callback fired when the formatted value changes */\n onFormattedChange?: (formattedValue: string) => void;\n /** Whether to validate and show error state for incomplete phone numbers */\n validateOnBlur?: boolean;\n}\n\n/**\n * A phone number input that automatically formats to US format: (XXX) XXX-XXXX\n *\n * @example\n * ```tsx\n * const [phone, setPhone] = useState('');\n * <PhoneInput\n * label=\"Phone Number\"\n * value={phone}\n * onChange={setPhone}\n * validateOnBlur\n * />\n * ```\n */\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n (\n {\n value = '',\n onChange,\n onFormattedChange,\n validateOnBlur,\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatPhoneNumber(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatPhoneNumber(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatPhoneNumber(e.target.value);\n setDisplayValue(formatted);\n\n const unformatted = unformatPhoneNumber(formatted);\n onChange?.(unformatted);\n onFormattedChange?.(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 unformatted = unformatPhoneNumber(displayValue);\n if (unformatted.length > 0 && !isValidPhoneNumber(displayValue)) {\n setLocalError('Please enter a valid 10-digit phone number');\n } else {\n setLocalError(undefined);\n }\n }\n };\n\n return (\n <Input\n ref={ref}\n type=\"tel\"\n inputMode=\"numeric\"\n autoComplete=\"tel-national\"\n placeholder=\"(555) 555-5555\"\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(className)}\n {...props}\n />\n );\n }\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\n// =============================================================================\n// Phone Types\n// =============================================================================\n\nexport type PhoneType = 'cell' | 'landline' | 'home' | 'work' | 'fax';\n\nexport interface PhoneEntry {\n number: string;\n type: PhoneType;\n}\n\nconst PHONE_TYPES: { value: PhoneType; label: string }[] = [\n { value: 'cell', label: 'Cell' },\n { value: 'landline', label: 'Landline' },\n { value: 'home', label: 'Home' },\n { value: 'work', label: 'Work' },\n { value: 'fax', label: 'Fax' },\n];\n\n// =============================================================================\n// PhoneInputGroup\n// =============================================================================\n\nexport interface PhoneInputGroupProps {\n /** Array of phone entries */\n value: PhoneEntry[];\n /** Callback when phone entries change */\n onChange: (phones: PhoneEntry[]) => void;\n /** Minimum number of phone entries (default: 1) */\n minEntries?: number;\n /** Maximum number of phone entries (default: 5) */\n maxEntries?: number;\n /** Whether the first entry is required */\n required?: boolean;\n /** Whether all inputs are disabled */\n disabled?: boolean;\n /** Validate on blur */\n validateOnBlur?: boolean;\n /** Label for the phone input */\n label?: string;\n /** Labels for type options (for i18n) */\n typeLabels?: Record<PhoneType, string>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * A group of phone inputs with type selection and add/remove functionality.\n *\n * @example\n * ```tsx\n * const [phones, setPhones] = useState<PhoneEntry[]>([\n * { number: '', type: 'cell' }\n * ]);\n *\n * <PhoneInputGroup\n * value={phones}\n * onChange={setPhones}\n * required\n * />\n * ```\n */\nfunction PhoneInputGroup({\n value,\n onChange,\n minEntries = 1,\n maxEntries = 5,\n required = false,\n disabled = false,\n validateOnBlur = false,\n label,\n typeLabels,\n className,\n}: PhoneInputGroupProps) {\n // Ensure we always have at least minEntries\n const phones = React.useMemo(() => {\n if (value.length >= minEntries) return value;\n const padding: PhoneEntry[] = Array(minEntries - value.length)\n .fill(null)\n .map(() => ({ number: '', type: 'cell' as PhoneType }));\n return [...value, ...padding];\n }, [value, minEntries]);\n\n const handlePhoneChange = (index: number, number: string) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], number };\n onChange(updated);\n };\n\n const handleTypeChange = (index: number, type: PhoneType) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], type };\n onChange(updated);\n };\n\n const handleAdd = () => {\n if (phones.length < maxEntries) {\n onChange([...phones, { number: '', type: 'cell' }]);\n }\n };\n\n const handleRemove = (index: number) => {\n if (phones.length > minEntries) {\n onChange(phones.filter((_, i) => i !== index));\n }\n };\n\n const getTypeLabel = (type: PhoneType): string => {\n if (typeLabels?.[type]) return typeLabels[type];\n return PHONE_TYPES.find((t) => t.value === type)?.label || type;\n };\n\n const canAdd = phones.length < maxEntries;\n const canRemove = phones.length > minEntries;\n\n return (\n <div className={cn('space-y-3', className)}>\n {phones.map((phone, index) => (\n <div key={index} className=\"flex items-start gap-2\">\n {/* Phone number input */}\n <div className=\"flex-1\">\n <PhoneInput\n label={index === 0 ? label : undefined}\n value={phone.number}\n onChange={(num) => handlePhoneChange(index, num)}\n disabled={disabled}\n validateOnBlur={validateOnBlur}\n required={required && index === 0}\n />\n </div>\n\n {/* Type selector */}\n <div className=\"w-32 shrink-0\">\n <label htmlFor={`phone-type-${index}`} className=\"sr-only\">\n Phone type\n </label>\n <select\n id={`phone-type-${index}`}\n value={phone.type}\n onChange={(e) =>\n handleTypeChange(index, e.target.value as PhoneType)\n }\n disabled={disabled}\n className={cn(\n 'w-full rounded-md border px-3 py-2 text-sm',\n 'border-gray-300 bg-white text-gray-900',\n 'focus:border-brand-500 focus:ring-brand-500/20 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500',\n 'dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100',\n 'dark:focus:border-brand-400 dark:focus:ring-brand-400/20',\n index === 0 && label ? 'mt-6' : ''\n )}\n >\n {PHONE_TYPES.map((type) => (\n <option key={type.value} value={type.value}>\n {getTypeLabel(type.value)}\n </option>\n ))}\n </select>\n </div>\n\n {/* Add/Remove buttons */}\n <div\n className={cn(\n 'flex shrink-0 items-center',\n index === 0 && label ? 'mt-6' : ''\n )}\n >\n {index === 0 ? (\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={disabled || !canAdd}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-brand-600 hover:bg-brand-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-brand-400 dark:hover:bg-brand-900/20',\n 'dark:disabled:text-gray-600'\n )}\n aria-label=\"Add phone number\"\n >\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => handleRemove(index)}\n disabled={disabled || !canRemove}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-red-600 hover:bg-red-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-red-400 dark:hover:bg-red-900/20',\n 'dark:disabled:text-gray-600'\n )}\n aria-label=\"Remove phone number\"\n >\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20 12H4\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nPhoneInputGroup.displayName = 'PhoneInputGroup';\n\nexport { PhoneInput, PhoneInputGroup };\n"]}