@mieweb/ui 0.7.1-dev.1 → 0.7.1-dev.11

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 (418) hide show
  1. package/dist/CsvBlock-LVJARITD.cjs +15 -0
  2. package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-LVJARITD.cjs.map} +1 -1
  3. package/dist/CsvBlock-VTYNQ75L.js +6 -0
  4. package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-VTYNQ75L.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-F33P37UD.cjs +15 -0
  6. package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-F33P37UD.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-N4PPVJLJ.js +6 -0
  8. package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-N4PPVJLJ.js.map} +1 -1
  9. package/dist/MermaidBlock-G5X4FPUN.cjs +15 -0
  10. package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-G5X4FPUN.cjs.map} +1 -1
  11. package/dist/MermaidBlock-HUT53CRG.js +6 -0
  12. package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-HUT53CRG.js.map} +1 -1
  13. package/dist/SurveyBlock-ORTPGA5T.cjs +15 -0
  14. package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-ORTPGA5T.cjs.map} +1 -1
  15. package/dist/SurveyBlock-PM3ZMWWR.js +6 -0
  16. package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-PM3ZMWWR.js.map} +1 -1
  17. package/dist/ag-grid.cjs +8 -8
  18. package/dist/ag-grid.js +1 -1
  19. package/dist/brands/index.cjs +7 -7
  20. package/dist/brands/index.js +2 -2
  21. package/dist/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
  22. package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
  23. package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
  24. package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
  25. package/dist/{chunk-J7Z7467B.js → chunk-34LGPMO4.js} +3 -3
  26. package/dist/{chunk-J7Z7467B.js.map → chunk-34LGPMO4.js.map} +1 -1
  27. package/dist/{chunk-OX2RIVN7.js → chunk-3D4ITDLO.js} +4 -4
  28. package/dist/{chunk-OX2RIVN7.js.map → chunk-3D4ITDLO.js.map} +1 -1
  29. package/dist/{chunk-PJAQDAMZ.cjs → chunk-3IAA3KCE.cjs} +15 -6
  30. package/dist/chunk-3IAA3KCE.cjs.map +1 -0
  31. package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
  32. package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
  33. package/dist/{chunk-JLBT76WH.js → chunk-3YSIZ2CK.js} +14 -5
  34. package/dist/chunk-3YSIZ2CK.js.map +1 -0
  35. package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  36. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  37. package/dist/{chunk-IHTRKWBG.js → chunk-4G3NJLQA.js} +4 -4
  38. package/dist/{chunk-IHTRKWBG.js.map → chunk-4G3NJLQA.js.map} +1 -1
  39. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  40. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  41. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  42. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  43. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  44. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  45. package/dist/{chunk-TN33E2VN.cjs → chunk-62TFTZWT.cjs} +12 -12
  46. package/dist/{chunk-TN33E2VN.cjs.map → chunk-62TFTZWT.cjs.map} +1 -1
  47. package/dist/{chunk-MSRU3XBH.cjs → chunk-6ECKH4DJ.cjs} +7 -7
  48. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-6ECKH4DJ.cjs.map} +1 -1
  49. package/dist/{chunk-PFWHWIXS.cjs → chunk-6ED4RUGM.cjs} +100 -3
  50. package/dist/chunk-6ED4RUGM.cjs.map +1 -0
  51. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  52. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  53. package/dist/{chunk-PWHK7SWN.cjs → chunk-6K4FCEY4.cjs} +125 -124
  54. package/dist/chunk-6K4FCEY4.cjs.map +1 -0
  55. package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
  56. package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
  57. package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
  58. package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
  59. package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
  60. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
  61. package/dist/{chunk-5BQE6BEL.js → chunk-6XGESZ4S.js} +3 -3
  62. package/dist/{chunk-5BQE6BEL.js.map → chunk-6XGESZ4S.js.map} +1 -1
  63. package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
  64. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
  65. package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
  66. package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
  67. package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
  68. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
  69. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  70. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  71. package/dist/{chunk-UOOH356R.cjs → chunk-AIJAFPGJ.cjs} +5 -5
  72. package/dist/{chunk-UOOH356R.cjs.map → chunk-AIJAFPGJ.cjs.map} +1 -1
  73. package/dist/{chunk-43GBCUSQ.js → chunk-AQ564XO7.js} +6 -6
  74. package/dist/chunk-AQ564XO7.js.map +1 -0
  75. package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
  76. package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  77. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  78. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  79. package/dist/{chunk-T42BCIUA.js → chunk-BMSG4NBH.js} +4 -4
  80. package/dist/{chunk-T42BCIUA.js.map → chunk-BMSG4NBH.js.map} +1 -1
  81. package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
  82. package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
  83. package/dist/{chunk-VPNURIAY.cjs → chunk-C2NNNOSU.cjs} +8 -8
  84. package/dist/{chunk-VPNURIAY.cjs.map → chunk-C2NNNOSU.cjs.map} +1 -1
  85. package/dist/{chunk-AES2BKEW.cjs → chunk-C7I3ZGMQ.cjs} +8 -8
  86. package/dist/{chunk-AES2BKEW.cjs.map → chunk-C7I3ZGMQ.cjs.map} +1 -1
  87. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  88. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  89. package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
  90. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
  91. package/dist/{chunk-ZHBANUBI.cjs → chunk-CPUDOVWH.cjs} +21 -21
  92. package/dist/{chunk-ZHBANUBI.cjs.map → chunk-CPUDOVWH.cjs.map} +1 -1
  93. package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
  94. package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
  95. package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
  96. package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
  97. package/dist/{chunk-QUUFKGDF.cjs → chunk-EDBGSGUK.cjs} +15 -15
  98. package/dist/{chunk-QUUFKGDF.cjs.map → chunk-EDBGSGUK.cjs.map} +1 -1
  99. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  100. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  101. package/dist/{chunk-KL2S36FM.js → chunk-ET5JGGVL.js} +3 -3
  102. package/dist/{chunk-KL2S36FM.js.map → chunk-ET5JGGVL.js.map} +1 -1
  103. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  104. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  105. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  106. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  107. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  108. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  109. package/dist/{chunk-5MAGWW5X.cjs → chunk-FKLUSYFP.cjs} +11 -11
  110. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-FKLUSYFP.cjs.map} +1 -1
  111. package/dist/{chunk-YZT62IMX.js → chunk-GDBPFHNX.js} +4 -4
  112. package/dist/{chunk-YZT62IMX.js.map → chunk-GDBPFHNX.js.map} +1 -1
  113. package/dist/{chunk-7VF6WO7H.cjs → chunk-GKWWFJDB.cjs} +310 -99
  114. package/dist/chunk-GKWWFJDB.cjs.map +1 -0
  115. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  116. package/dist/chunk-GTHNWP4P.js.map +1 -0
  117. package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
  118. package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
  119. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  120. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  121. package/dist/{chunk-MCCO4A23.js → chunk-I2BKK3AQ.js} +256 -45
  122. package/dist/chunk-I2BKK3AQ.js.map +1 -0
  123. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  124. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  125. package/dist/{chunk-DUPR6FEL.js → chunk-I3WGZPI6.js} +4 -4
  126. package/dist/{chunk-DUPR6FEL.js.map → chunk-I3WGZPI6.js.map} +1 -1
  127. package/dist/{chunk-ZAIEQWRA.js → chunk-IS5PNYR7.js} +4 -4
  128. package/dist/{chunk-ZAIEQWRA.js.map → chunk-IS5PNYR7.js.map} +1 -1
  129. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  130. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  131. package/dist/{chunk-UM6NA7HL.js → chunk-IXWRD4AP.js} +3 -3
  132. package/dist/{chunk-UM6NA7HL.js.map → chunk-IXWRD4AP.js.map} +1 -1
  133. package/dist/{chunk-MKWGKASO.js → chunk-JJNCQMR5.js} +3 -3
  134. package/dist/{chunk-MKWGKASO.js.map → chunk-JJNCQMR5.js.map} +1 -1
  135. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  136. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  137. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  138. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  139. package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
  140. package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
  141. package/dist/{chunk-JHYFHEHS.js → chunk-MHD5HZ4X.js} +4 -4
  142. package/dist/{chunk-JHYFHEHS.js.map → chunk-MHD5HZ4X.js.map} +1 -1
  143. package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
  144. package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
  145. package/dist/{chunk-KJ5BSGEO.cjs → chunk-NGPEXCC7.cjs} +11 -11
  146. package/dist/{chunk-KJ5BSGEO.cjs.map → chunk-NGPEXCC7.cjs.map} +1 -1
  147. package/dist/{chunk-FCBQP2U4.cjs → chunk-NPKPCYAT.cjs} +142 -16
  148. package/dist/chunk-NPKPCYAT.cjs.map +1 -0
  149. package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
  150. package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
  151. package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
  152. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
  153. package/dist/{chunk-DAPZPT5N.cjs → chunk-OJEXXH5D.cjs} +11 -11
  154. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-OJEXXH5D.cjs.map} +1 -1
  155. package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
  156. package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
  157. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  158. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  159. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  160. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  161. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  162. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  163. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  164. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  165. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  166. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  167. package/dist/{chunk-NVHAQOHH.cjs → chunk-PLMXN23Q.cjs} +10 -10
  168. package/dist/chunk-PLMXN23Q.cjs.map +1 -0
  169. package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
  170. package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
  171. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  172. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  173. package/dist/{chunk-NQME7MCK.js → chunk-QEBVYLI7.js} +188 -204
  174. package/dist/chunk-QEBVYLI7.js.map +1 -0
  175. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  176. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  177. package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
  178. package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
  179. package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
  180. package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
  181. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  182. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  183. package/dist/chunk-S5RVSXDV.cjs +45 -0
  184. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  185. package/dist/{chunk-4LVPQ44A.js → chunk-SAJSA4TS.js} +3 -3
  186. package/dist/{chunk-4LVPQ44A.js.map → chunk-SAJSA4TS.js.map} +1 -1
  187. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  188. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  189. package/dist/chunk-SVSHA7XV.js +487 -0
  190. package/dist/chunk-SVSHA7XV.js.map +1 -0
  191. package/dist/chunk-TQONQSJO.js +42 -0
  192. package/dist/chunk-TQONQSJO.js.map +1 -0
  193. package/dist/{chunk-V25Z5GR6.cjs → chunk-TU36DBH2.cjs} +9 -9
  194. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-TU36DBH2.cjs.map} +1 -1
  195. package/dist/{chunk-6D5F7EDM.js → chunk-TWQHAJ7C.js} +17 -16
  196. package/dist/chunk-TWQHAJ7C.js.map +1 -0
  197. package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  198. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  199. package/dist/{chunk-MZPF2QGM.cjs → chunk-U4HA2WHA.cjs} +13 -13
  200. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-U4HA2WHA.cjs.map} +1 -1
  201. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  202. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  203. package/dist/{chunk-BLPCYP4D.cjs → chunk-UTCFBBOD.cjs} +29 -29
  204. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-UTCFBBOD.cjs.map} +1 -1
  205. package/dist/{chunk-OOYEHBYJ.js → chunk-UUI7WXI5.js} +142 -16
  206. package/dist/chunk-UUI7WXI5.js.map +1 -0
  207. package/dist/{chunk-FJH7P5WG.js → chunk-UXBRRSJ6.js} +6 -6
  208. package/dist/{chunk-FJH7P5WG.js.map → chunk-UXBRRSJ6.js.map} +1 -1
  209. package/dist/{chunk-IWDQPSJN.cjs → chunk-V3S7QNFF.cjs} +208 -223
  210. package/dist/chunk-V3S7QNFF.cjs.map +1 -0
  211. package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
  212. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  213. package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
  214. package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
  215. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  216. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  217. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  218. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  219. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  220. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  221. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  222. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  223. package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
  224. package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
  225. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  226. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  227. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  228. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  229. package/dist/chunk-X4LBUPJO.cjs +511 -0
  230. package/dist/chunk-X4LBUPJO.cjs.map +1 -0
  231. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  232. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  233. package/dist/{chunk-MAMY5HTT.cjs → chunk-XCVBCY7L.cjs} +20 -20
  234. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-XCVBCY7L.cjs.map} +1 -1
  235. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  236. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  237. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  238. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  239. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  240. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  241. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  242. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  243. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  244. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  245. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  246. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  247. package/dist/{chunk-EL2RSQTJ.cjs → chunk-YVL3XATO.cjs} +5 -5
  248. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-YVL3XATO.cjs.map} +1 -1
  249. package/dist/{chunk-LJ2ZWIX6.js → chunk-YVO5VAGX.js} +100 -3
  250. package/dist/chunk-YVO5VAGX.js.map +1 -0
  251. package/dist/{chunk-PVUDXJAI.js → chunk-YXCE2HSK.js} +4 -4
  252. package/dist/{chunk-PVUDXJAI.js.map → chunk-YXCE2HSK.js.map} +1 -1
  253. package/dist/{chunk-372IIHUA.cjs → chunk-YXHX2DAK.cjs} +53 -53
  254. package/dist/{chunk-372IIHUA.cjs.map → chunk-YXHX2DAK.cjs.map} +1 -1
  255. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  256. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  257. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  258. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  259. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  260. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  261. package/dist/components/Alert/index.cjs +6 -6
  262. package/dist/components/Alert/index.js +2 -2
  263. package/dist/components/AlertDialog/index.cjs +5 -5
  264. package/dist/components/AlertDialog/index.js +4 -4
  265. package/dist/components/AudioPlayer/index.cjs +7 -7
  266. package/dist/components/AudioPlayer/index.js +2 -2
  267. package/dist/components/AudioRecorder/index.cjs +7 -7
  268. package/dist/components/AudioRecorder/index.js +2 -2
  269. package/dist/components/Autocomplete/index.cjs +4 -4
  270. package/dist/components/Autocomplete/index.js +3 -3
  271. package/dist/components/Avatar/index.cjs +6 -6
  272. package/dist/components/Avatar/index.js +2 -2
  273. package/dist/components/Badge/index.cjs +4 -4
  274. package/dist/components/Badge/index.js +2 -2
  275. package/dist/components/Breadcrumb/index.cjs +4 -4
  276. package/dist/components/Breadcrumb/index.js +2 -2
  277. package/dist/components/Button/index.cjs +4 -4
  278. package/dist/components/Button/index.js +2 -2
  279. package/dist/components/Card/index.cjs +16 -16
  280. package/dist/components/Card/index.js +2 -2
  281. package/dist/components/Checkbox/index.cjs +5 -5
  282. package/dist/components/Checkbox/index.js +2 -2
  283. package/dist/components/CollabStatus/index.cjs +21 -0
  284. package/dist/components/CollabStatus/index.cjs.map +1 -0
  285. package/dist/components/CollabStatus/index.d.cts +222 -0
  286. package/dist/components/CollabStatus/index.d.ts +222 -0
  287. package/dist/components/CollabStatus/index.js +4 -0
  288. package/dist/components/CollabStatus/index.js.map +1 -0
  289. package/dist/components/Collapsible/index.cjs +5 -5
  290. package/dist/components/Collapsible/index.js +2 -2
  291. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  292. package/dist/components/CountryCodeDropdown/index.js +2 -2
  293. package/dist/components/DateInput/index.cjs +4 -4
  294. package/dist/components/DateInput/index.js +3 -3
  295. package/dist/components/Dropdown/index.cjs +9 -9
  296. package/dist/components/Dropdown/index.js +3 -3
  297. package/dist/components/FloatingWindow/index.cjs +5 -5
  298. package/dist/components/FloatingWindow/index.js +3 -3
  299. package/dist/components/Input/index.cjs +4 -4
  300. package/dist/components/Input/index.js +2 -2
  301. package/dist/components/Label/index.cjs +4 -4
  302. package/dist/components/Label/index.js +2 -2
  303. package/dist/components/Markdown/index.cjs +17 -17
  304. package/dist/components/Markdown/index.js +8 -8
  305. package/dist/components/MediaEditor/index.cjs +15 -15
  306. package/dist/components/MediaEditor/index.d.cts +34 -1
  307. package/dist/components/MediaEditor/index.d.ts +34 -1
  308. package/dist/components/MediaEditor/index.js +10 -10
  309. package/dist/components/MediaPlayer/index.cjs +6 -6
  310. package/dist/components/MediaPlayer/index.js +3 -3
  311. package/dist/components/Modal/index.cjs +10 -10
  312. package/dist/components/Modal/index.js +2 -2
  313. package/dist/components/Pagination/index.cjs +5 -5
  314. package/dist/components/Pagination/index.js +2 -2
  315. package/dist/components/PhoneInput/index.cjs +5 -5
  316. package/dist/components/PhoneInput/index.js +3 -3
  317. package/dist/components/Progress/index.cjs +7 -7
  318. package/dist/components/Progress/index.js +2 -2
  319. package/dist/components/QuickAction/index.cjs +7 -7
  320. package/dist/components/QuickAction/index.js +2 -2
  321. package/dist/components/Radio/index.cjs +5 -5
  322. package/dist/components/Radio/index.js +2 -2
  323. package/dist/components/RecordButton/index.cjs +5 -5
  324. package/dist/components/RecordButton/index.js +2 -2
  325. package/dist/components/RichTextEditor/index.cjs +9 -9
  326. package/dist/components/RichTextEditor/index.js +6 -6
  327. package/dist/components/SchedulePicker/index.cjs +11 -11
  328. package/dist/components/SchedulePicker/index.js +2 -2
  329. package/dist/components/ScrollArea/index.cjs +4 -4
  330. package/dist/components/ScrollArea/index.js +2 -2
  331. package/dist/components/Select/index.cjs +4 -4
  332. package/dist/components/Select/index.js +2 -2
  333. package/dist/components/Separator/index.cjs +4 -4
  334. package/dist/components/Separator/index.js +2 -2
  335. package/dist/components/Sheet/index.cjs +11 -11
  336. package/dist/components/Sheet/index.d.cts +1 -1
  337. package/dist/components/Sheet/index.d.ts +1 -1
  338. package/dist/components/Sheet/index.js +2 -2
  339. package/dist/components/Skeleton/index.cjs +7 -7
  340. package/dist/components/Skeleton/index.js +2 -2
  341. package/dist/components/Slider/index.cjs +6 -6
  342. package/dist/components/Slider/index.js +2 -2
  343. package/dist/components/Spinner/index.cjs +6 -6
  344. package/dist/components/Spinner/index.js +2 -2
  345. package/dist/components/SuperChat/index.cjs +45 -45
  346. package/dist/components/SuperChat/index.js +8 -8
  347. package/dist/components/SuperChat/plugins/index.cjs +9 -9
  348. package/dist/components/SuperChat/plugins/index.js +3 -3
  349. package/dist/components/Switch/index.cjs +5 -5
  350. package/dist/components/Switch/index.js +2 -2
  351. package/dist/components/Table/index.cjs +10 -10
  352. package/dist/components/Table/index.js +2 -2
  353. package/dist/components/Tabs/index.cjs +8 -8
  354. package/dist/components/Tabs/index.js +2 -2
  355. package/dist/components/Text/index.cjs +5 -5
  356. package/dist/components/Text/index.d.cts +1 -1
  357. package/dist/components/Text/index.d.ts +1 -1
  358. package/dist/components/Text/index.js +2 -2
  359. package/dist/components/Textarea/index.cjs +4 -4
  360. package/dist/components/Textarea/index.js +2 -2
  361. package/dist/components/ThemeProvider/index.cjs +9 -9
  362. package/dist/components/ThemeProvider/index.js +3 -3
  363. package/dist/components/Toggle/index.cjs +4 -4
  364. package/dist/components/Toggle/index.js +2 -2
  365. package/dist/components/Tooltip/index.cjs +3 -3
  366. package/dist/components/Tooltip/index.js +2 -2
  367. package/dist/datavis.cjs +7 -7
  368. package/dist/datavis.js +3 -3
  369. package/dist/esheet.cjs +16 -16
  370. package/dist/esheet.js +13 -13
  371. package/dist/hooks/index.cjs +32 -20
  372. package/dist/hooks/index.d.cts +30 -2
  373. package/dist/hooks/index.d.ts +30 -2
  374. package/dist/hooks/index.js +2 -2
  375. package/dist/index.cjs +1910 -1726
  376. package/dist/index.cjs.map +1 -1
  377. package/dist/index.d.cts +147 -15
  378. package/dist/index.d.ts +147 -15
  379. package/dist/index.js +244 -93
  380. package/dist/index.js.map +1 -1
  381. package/dist/styles.css +1 -1
  382. package/dist/tailwind-preset.cjs +4 -4
  383. package/dist/tailwind-preset.js +1 -1
  384. package/dist/{useTranscriptEdits-Hy0Vm-H8.d.cts → useTranscriptEdits-CGzlemHT.d.cts} +16 -3
  385. package/dist/{useTranscriptEdits-C2BbMU37.d.ts → useTranscriptEdits-D32bLs0l.d.ts} +16 -3
  386. package/dist/utils/index.cjs +15 -11
  387. package/dist/utils/index.d.cts +6 -1
  388. package/dist/utils/index.d.ts +6 -1
  389. package/dist/utils/index.js +2 -2
  390. package/package.json +4 -1
  391. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  392. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  393. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  394. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  395. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  396. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  397. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  398. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  399. package/dist/chunk-43GBCUSQ.js.map +0 -1
  400. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  401. package/dist/chunk-6D5F7EDM.js.map +0 -1
  402. package/dist/chunk-7VF6WO7H.cjs.map +0 -1
  403. package/dist/chunk-F3SOEIN2.js +0 -11
  404. package/dist/chunk-F3SOEIN2.js.map +0 -1
  405. package/dist/chunk-FCBQP2U4.cjs.map +0 -1
  406. package/dist/chunk-IWDQPSJN.cjs.map +0 -1
  407. package/dist/chunk-JLBT76WH.js.map +0 -1
  408. package/dist/chunk-LJ2ZWIX6.js.map +0 -1
  409. package/dist/chunk-MCCO4A23.js.map +0 -1
  410. package/dist/chunk-NQME7MCK.js.map +0 -1
  411. package/dist/chunk-NVHAQOHH.cjs.map +0 -1
  412. package/dist/chunk-OOYEHBYJ.js.map +0 -1
  413. package/dist/chunk-OR5DRJCW.cjs +0 -13
  414. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  415. package/dist/chunk-PFWHWIXS.cjs.map +0 -1
  416. package/dist/chunk-PJAQDAMZ.cjs.map +0 -1
  417. package/dist/chunk-PWHK7SWN.cjs.map +0 -1
  418. package/dist/chunk-ZGSC2CB2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/FloatingWindow/FloatingWindow.tsx"],"names":[],"mappings":"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","file":"chunk-C2544GKZ.js","sourcesContent":["import * as React from 'react';\nimport { Minus, Square, ExternalLink, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\n\ntype ResizeDirection = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';\n\nexport interface FloatingWindowProps {\n /** Whether the window is rendered. */\n open: boolean;\n /** Whether the window is collapsed to a minimized bar (renders nothing). */\n minimized?: boolean;\n /** Window title shown in the header. */\n title: React.ReactNode;\n /** Window body content. */\n children: React.ReactNode;\n /** Footer content, typically action buttons. */\n footer?: React.ReactNode;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Called when the minimize control is activated. Hidden when omitted. */\n onMinimize?: () => void;\n /** Called when the pop-out control is activated. Hidden when omitted. */\n onPopOut?: () => void;\n /**\n * When `true` the window floats at a draggable position. When `false`\n * (default) it is centered over a dimmed overlay like a modal.\n */\n draggable?: boolean;\n /** Whether the window can be resized from its edges/corners. Default true. */\n resizable?: boolean;\n /** Initial width in pixels. Default 1024. */\n defaultWidth?: number;\n /** Initial height in pixels. Default 600. */\n defaultHeight?: number;\n /** Minimum width in pixels. Default 600. */\n minWidth?: number;\n /** Minimum height in pixels. Default 400. */\n minHeight?: number;\n /** Class applied to the window container. */\n className?: string;\n /** Accessible label for the dialog when the title is not text. */\n 'aria-label'?: string;\n}\n\nconst RESIZE_HANDLES: { dir: ResizeDirection; className: string }[] = [\n { dir: 'nw', className: 'top-0 left-0 h-2 w-2 cursor-nw-resize' },\n { dir: 'ne', className: 'top-0 right-0 h-2 w-2 cursor-ne-resize' },\n { dir: 'sw', className: 'bottom-0 left-0 h-2 w-2 cursor-sw-resize' },\n { dir: 'n', className: 'top-0 left-2 right-2 h-1 cursor-n-resize' },\n { dir: 's', className: 'bottom-0 left-2 right-2 h-1 cursor-s-resize' },\n { dir: 'w', className: 'left-0 top-2 bottom-2 w-1 cursor-w-resize' },\n { dir: 'e', className: 'right-0 top-2 bottom-2 w-1 cursor-e-resize' },\n];\n\n/**\n * A presentational floating window shell used for pop-out editors (notes,\n * letters, etc.). It can render as a centered modal-style window or as a\n * draggable, freely-positioned window, and supports edge/corner resizing.\n * Open/minimize/close state and footer actions are controlled via props so it\n * can be wired to any store.\n */\nconst FloatingWindow = React.forwardRef<HTMLDivElement, FloatingWindowProps>(\n (\n {\n open,\n minimized = false,\n title,\n children,\n footer,\n onClose,\n onMinimize,\n onPopOut,\n draggable = false,\n resizable = true,\n defaultWidth = 1024,\n defaultHeight = 600,\n minWidth = 600,\n minHeight = 400,\n className,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const [size, setSize] = React.useState({\n width: defaultWidth,\n height: defaultHeight,\n });\n const [position, setPosition] = React.useState({ x: 50, y: 50 });\n\n const dragRef = React.useRef<{ x: number; y: number } | null>(null);\n const resizeRef = React.useRef<{\n dir: ResizeDirection;\n startX: number;\n startY: number;\n startW: number;\n startH: number;\n startPosX: number;\n startPosY: number;\n } | null>(null);\n\n const titleId = React.useId();\n\n const handleResizeStart = (e: React.MouseEvent, dir: ResizeDirection) => {\n e.preventDefault();\n e.stopPropagation();\n resizeRef.current = {\n dir,\n startX: e.clientX,\n startY: e.clientY,\n startW: size.width,\n startH: size.height,\n startPosX: position.x,\n startPosY: position.y,\n };\n };\n\n const handleDragStart = (e: React.MouseEvent) => {\n if (!draggable) return;\n if ((e.target as HTMLElement).closest('[data-window-controls]')) return;\n const rect = (e.currentTarget as HTMLElement)\n .closest('[data-slot=\"floating-window\"]')!\n .getBoundingClientRect();\n dragRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n };\n\n React.useEffect(() => {\n if (!open || minimized) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (dragRef.current) {\n setPosition({\n x: e.clientX - dragRef.current.x,\n y: e.clientY - dragRef.current.y,\n });\n return;\n }\n const r = resizeRef.current;\n if (!r) return;\n const deltaX = e.clientX - r.startX;\n const deltaY = e.clientY - r.startY;\n let newWidth = r.startW;\n let newHeight = r.startH;\n let newX = r.startPosX;\n let newY = r.startPosY;\n\n if (r.dir.includes('e')) {\n newWidth = Math.max(\n minWidth,\n Math.min(window.innerWidth - 40, r.startW + deltaX)\n );\n }\n if (r.dir.includes('w')) {\n newWidth = Math.max(minWidth, r.startW - deltaX);\n if (draggable) newX = r.startPosX + (r.startW - newWidth);\n }\n if (r.dir.includes('s')) {\n newHeight = Math.max(\n minHeight,\n Math.min(window.innerHeight - 40, r.startH + deltaY)\n );\n }\n if (r.dir.includes('n')) {\n newHeight = Math.max(minHeight, r.startH - deltaY);\n if (draggable) newY = r.startPosY + (r.startH - newHeight);\n }\n\n setSize({ width: newWidth, height: newHeight });\n if (draggable && (r.dir.includes('w') || r.dir.includes('n'))) {\n setPosition({ x: newX, y: newY });\n }\n };\n\n const handleMouseUp = () => {\n dragRef.current = null;\n resizeRef.current = null;\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [open, minimized, draggable, minWidth, minHeight]);\n\n if (!open || minimized) return null;\n\n const windowEl = (\n <div\n ref={ref}\n data-slot=\"floating-window\"\n role=\"dialog\"\n aria-modal={draggable ? undefined : true}\n aria-labelledby={typeof title === 'string' ? titleId : undefined}\n aria-label={typeof title === 'string' ? undefined : ariaLabel}\n className={cn(\n 'bg-card text-card-foreground relative flex flex-col overflow-hidden rounded-lg shadow-2xl',\n draggable && 'border-primary-800 fixed border-2',\n className\n )}\n style={\n draggable\n ? {\n left: position.x,\n top: position.y,\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n zIndex: 50,\n }\n : {\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n }\n }\n >\n {resizable &&\n RESIZE_HANDLES.map((handle) => (\n <div\n key={handle.dir}\n aria-hidden=\"true\"\n className={cn('absolute z-10', handle.className)}\n onMouseDown={(e) => handleResizeStart(e, handle.dir)}\n />\n ))}\n {resizable && (\n <div\n aria-hidden=\"true\"\n className=\"hover:bg-muted/50 absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize rounded-tl\"\n onMouseDown={(e) => handleResizeStart(e, 'se')}\n >\n <svg\n className=\"text-muted-foreground/50 h-4 w-4\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM22 14H20V12H22V14ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z\" />\n </svg>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- header acts as an optional drag handle; the controls inside remain keyboard accessible */}\n <div\n data-slot=\"floating-window-header\"\n className={cn(\n 'bg-primary-800 text-primary-foreground flex items-center justify-between rounded-t-lg px-4 py-3',\n draggable && 'cursor-move'\n )}\n onMouseDown={handleDragStart}\n >\n <h2\n id={typeof title === 'string' ? titleId : undefined}\n className=\"text-lg font-semibold\"\n >\n {title}\n </h2>\n <div data-window-controls className=\"flex items-center gap-1\">\n {onMinimize && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onMinimize}\n aria-label=\"Minimize\"\n title=\"Minimize\"\n >\n <Minus className=\"h-4 w-4\" />\n </Button>\n )}\n {onPopOut && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onPopOut}\n aria-label=\"Open in new window\"\n title=\"Open in new window\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* eslint-disable jsx-a11y/no-noninteractive-tabindex */}\n <div\n data-slot=\"floating-window-content\"\n role=\"region\"\n className=\"flex-1 overflow-y-auto\"\n tabIndex={0}\n >\n {children}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-tabindex */}\n\n {footer && (\n <div\n data-slot=\"floating-window-footer\"\n className=\"border-border bg-card flex items-center justify-end gap-3 rounded-b-lg border-t px-6 py-4\"\n >\n {footer}\n </div>\n )}\n </div>\n );\n\n if (draggable) return windowEl;\n\n return (\n <div\n data-slot=\"floating-window-overlay\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n >\n {windowEl}\n </div>\n );\n }\n);\n\nFloatingWindow.displayName = 'FloatingWindow';\n\nexport interface MinimizedWindowProps {\n /** Title shown on the minimized bar. */\n title: React.ReactNode;\n /** Called when the bar is activated to restore the window. */\n onRestore: () => void;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Additional class for the minimized bar. */\n className?: string;\n}\n\n/**\n * A compact bar representing a minimized {@link FloatingWindow}. Render this\n * (typically in a docked tray) while the corresponding window is minimized.\n */\nconst MinimizedWindow = React.forwardRef<HTMLDivElement, MinimizedWindowProps>(\n ({ title, onRestore, onClose, className }, ref) => (\n <div\n ref={ref}\n data-slot=\"minimized-window\"\n className={cn(\n 'border-border bg-card flex min-w-[200px] items-center gap-2 rounded-lg border px-3 py-2 shadow-md',\n className\n )}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={onRestore}\n >\n <Square className=\"mr-1 h-3 w-3\" />\n <span className=\"truncate text-sm\">{title}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-6 w-6 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-3 w-3\" />\n </Button>\n </div>\n )\n);\n\nMinimizedWindow.displayName = 'MinimizedWindow';\n\nexport { FloatingWindow, MinimizedWindow };\n"]}
1
+ {"version":3,"sources":["../src/components/FloatingWindow/FloatingWindow.tsx"],"names":[],"mappings":";;;;;;AA6CA,IAAM,cAAA,GAAgE;AAAA,EACpE,EAAE,GAAA,EAAK,IAAA,EAAM,SAAA,EAAW,uCAAA,EAAwC;AAAA,EAChE,EAAE,GAAA,EAAK,IAAA,EAAM,SAAA,EAAW,wCAAA,EAAyC;AAAA,EACjE,EAAE,GAAA,EAAK,IAAA,EAAM,SAAA,EAAW,0CAAA,EAA2C;AAAA,EACnE,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,0CAAA,EAA2C;AAAA,EAClE,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,6CAAA,EAA8C;AAAA,EACrE,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,2CAAA,EAA4C;AAAA,EACnE,EAAE,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,4CAAA;AACzB,CAAA;AASA,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA;AAAA,EAC3B,CACE;AAAA,IACE,IAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,SAAA,GAAY,IAAA;AAAA,IACZ,YAAA,GAAe,IAAA;AAAA,IACf,aAAA,GAAgB,GAAA;AAAA,IAChB,QAAA,GAAW,GAAA;AAAA,IACX,SAAA,GAAY,GAAA;AAAA,IACZ,SAAA;AAAA,IACA,YAAA,EAAc;AAAA,KAEhB,GAAA,KACG;AACH,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS;AAAA,MACrC,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA;AAE/D,IAAA,MAAM,OAAA,GAAgB,aAAwC,IAAI,CAAA;AAClE,IAAA,MAAM,SAAA,GAAkB,aAQd,IAAI,CAAA;AAEd,IAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAE5B,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,EAAqB,GAAA,KAAyB;AACvE,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,SAAA,CAAU,OAAA,GAAU;AAAA,QAClB,GAAA;AAAA,QACA,QAAQ,CAAA,CAAE,OAAA;AAAA,QACV,QAAQ,CAAA,CAAE,OAAA;AAAA,QACV,QAAQ,IAAA,CAAK,KAAA;AAAA,QACb,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,WAAW,QAAA,CAAS,CAAA;AAAA,QACpB,WAAW,QAAA,CAAS;AAAA,OACtB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAwB;AAC/C,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,wBAAwB,CAAA,EAAG;AACjE,MAAA,MAAM,OAAQ,CAAA,CAAE,aAAA,CACb,OAAA,CAAQ,+BAA+B,EACvC,qBAAA,EAAsB;AACzB,MAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,CAAA,EAAG,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI;AAAA,IACxE,CAAA;AAEA,IAAM,gBAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,MAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,WAAA,CAAY;AAAA,YACV,CAAA,EAAG,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,CAAA;AAAA,YAC/B,CAAA,EAAG,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ;AAAA,WAChC,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAI,SAAA,CAAU,OAAA;AACpB,QAAA,IAAI,CAAC,CAAA,EAAG;AACR,QAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,MAAA;AAC7B,QAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,MAAA;AAC7B,QAAA,IAAI,WAAW,CAAA,CAAE,MAAA;AACjB,QAAA,IAAI,YAAY,CAAA,CAAE,MAAA;AAClB,QAAA,IAAI,OAAO,CAAA,CAAE,SAAA;AACb,QAAA,IAAI,OAAO,CAAA,CAAE,SAAA;AAEb,QAAA,IAAI,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,UAAA,QAAA,GAAW,IAAA,CAAK,GAAA;AAAA,YACd,QAAA;AAAA,YACA,KAAK,GAAA,CAAI,MAAA,CAAO,aAAa,EAAA,EAAI,CAAA,CAAE,SAAS,MAAM;AAAA,WACpD;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,UAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,CAAA,CAAE,SAAS,MAAM,CAAA;AAC/C,UAAA,IAAI,SAAA,EAAW,IAAA,GAAO,CAAA,CAAE,SAAA,IAAa,EAAE,MAAA,GAAS,QAAA,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,UAAA,SAAA,GAAY,IAAA,CAAK,GAAA;AAAA,YACf,SAAA;AAAA,YACA,KAAK,GAAA,CAAI,MAAA,CAAO,cAAc,EAAA,EAAI,CAAA,CAAE,SAAS,MAAM;AAAA,WACrD;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,UAAA,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,CAAA,CAAE,SAAS,MAAM,CAAA;AACjD,UAAA,IAAI,SAAA,EAAW,IAAA,GAAO,CAAA,CAAE,SAAA,IAAa,EAAE,MAAA,GAAS,SAAA,CAAA;AAAA,QAClD;AAEA,QAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAA;AAC9C,QAAA,IAAI,SAAA,KAAc,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,KAAK,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CAAA,EAAI;AAC7D,UAAA,WAAA,CAAY,EAAE,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAAA,QAClC;AAAA,MACF,CAAA;AAEA,MAAA,MAAM,gBAAgB,MAAM;AAC1B,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,MACtB,CAAA;AAEA,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACtD,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,MAAA,OAAO,MAAM;AACX,QAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACzD,QAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,MACvD,CAAA;AAAA,IACF,GAAG,CAAC,IAAA,EAAM,WAAW,SAAA,EAAW,QAAA,EAAU,SAAS,CAAC,CAAA;AAEpD,IAAA,IAAI,CAAC,IAAA,IAAQ,SAAA,EAAW,OAAO,IAAA;AAE/B,IAAA,MAAM,QAAA,mBACJ,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,iBAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,YAAY,MAAA,GAAY,IAAA;AAAA,QACpC,iBAAA,EAAiB,OAAO,KAAA,KAAU,QAAA,GAAW,OAAA,GAAU,MAAA;AAAA,QACvD,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,MAAA,GAAY,SAAA;AAAA,QACpD,SAAA,EAAW,EAAA;AAAA,UACT,2FAAA;AAAA,UACA,SAAA,IAAa,mCAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,OACE,SAAA,GACI;AAAA,UACE,MAAM,QAAA,CAAS,CAAA;AAAA,UACf,KAAK,QAAA,CAAS,CAAA;AAAA,UACd,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAW,oBAAA;AAAA,UACX,MAAA,EAAQ;AAAA,SACV,GACA;AAAA,UACE,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACb;AAAA,QAGL,QAAA,EAAA;AAAA,UAAA,SAAA,IACC,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,qBAClB,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,MAAA,CAAO,SAAS,CAAA;AAAA,cAC/C,aAAa,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAA,EAAG,OAAO,GAAG;AAAA,aAAA;AAAA,YAH9C,MAAA,CAAO;AAAA,WAKf,CAAA;AAAA,UACF,SAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAU,sFAAA;AAAA,cACV,WAAA,EAAa,CAAC,CAAA,KAAM,iBAAA,CAAkB,GAAG,IAAI,CAAA;AAAA,cAE7C,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,kCAAA;AAAA,kBACV,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,cAAA;AAAA,kBAEL,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oHAAA,EAAqH;AAAA;AAAA;AAC/H;AAAA,WACF;AAAA,0BAIF,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,wBAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,iGAAA;AAAA,gBACA,SAAA,IAAa;AAAA,eACf;AAAA,cACA,WAAA,EAAa,eAAA;AAAA,cAEb,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,OAAO,KAAA,KAAU,QAAA,GAAW,OAAA,GAAU,MAAA;AAAA,oBAC1C,SAAA,EAAU,uBAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gCACA,IAAA,CAAC,KAAA,EAAA,EAAI,sBAAA,EAAoB,IAAA,EAAC,WAAU,yBAAA,EACjC,QAAA,EAAA;AAAA,kBAAA,UAAA,oBACC,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAQ,OAAA;AAAA,sBACR,IAAA,EAAK,IAAA;AAAA,sBACL,SAAA,EAAU,oEAAA;AAAA,sBACV,OAAA,EAAS,UAAA;AAAA,sBACT,YAAA,EAAW,UAAA;AAAA,sBACX,KAAA,EAAM,UAAA;AAAA,sBAEN,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,mBAC7B;AAAA,kBAED,QAAA,oBACC,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAQ,OAAA;AAAA,sBACR,IAAA,EAAK,IAAA;AAAA,sBACL,SAAA,EAAU,oEAAA;AAAA,sBACV,OAAA,EAAS,QAAA;AAAA,sBACT,YAAA,EAAW,oBAAA;AAAA,sBACX,KAAA,EAAM,oBAAA;AAAA,sBAEN,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,mBACpC;AAAA,kCAEF,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAQ,OAAA;AAAA,sBACR,IAAA,EAAK,IAAA;AAAA,sBACL,SAAA,EAAU,oEAAA;AAAA,sBACV,OAAA,EAAS,OAAA;AAAA,sBACT,YAAA,EAAW,OAAA;AAAA,sBACX,KAAA,EAAM,OAAA;AAAA,sBAEN,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACzB,iBAAA,EACF;AAAA;AAAA;AAAA,WACF;AAAA,0BAGA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,yBAAA;AAAA,cACV,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,wBAAA;AAAA,cACV,QAAA,EAAU,CAAA;AAAA,cAET;AAAA;AAAA,WACH;AAAA,UAGC,MAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,wBAAA;AAAA,cACV,SAAA,EAAU,2FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAGF,IAAA,IAAI,WAAW,OAAO,QAAA;AAEtB,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,yBAAA;AAAA,QACV,SAAA,EAAU,iEAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAiB7B,IAAM,eAAA,GAAwB,KAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,KAAA,EAAO,WAAW,OAAA,EAAS,SAAA,IAAa,GAAA,qBACzC,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAA,EAAU,UAAA;AAAA,YACV,OAAA,EAAS,SAAA;AAAA,YAET,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,cAAA,EAAe,CAAA;AAAA,8BACjC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,SAC5C;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAA,EAAU,qBAAA;AAAA,YACV,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAW,OAAA;AAAA,YACX,KAAA,EAAM,OAAA;AAAA,YAEN,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACzB;AAAA;AAAA;AAGN;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-BX5ZODPF.js","sourcesContent":["import * as React from 'react';\nimport { Minus, Square, ExternalLink, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\n\ntype ResizeDirection = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';\n\nexport interface FloatingWindowProps {\n /** Whether the window is rendered. */\n open: boolean;\n /** Whether the window is collapsed to a minimized bar (renders nothing). */\n minimized?: boolean;\n /** Window title shown in the header. */\n title: React.ReactNode;\n /** Window body content. */\n children: React.ReactNode;\n /** Footer content, typically action buttons. */\n footer?: React.ReactNode;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Called when the minimize control is activated. Hidden when omitted. */\n onMinimize?: () => void;\n /** Called when the pop-out control is activated. Hidden when omitted. */\n onPopOut?: () => void;\n /**\n * When `true` the window floats at a draggable position. When `false`\n * (default) it is centered over a dimmed overlay like a modal.\n */\n draggable?: boolean;\n /** Whether the window can be resized from its edges/corners. Default true. */\n resizable?: boolean;\n /** Initial width in pixels. Default 1024. */\n defaultWidth?: number;\n /** Initial height in pixels. Default 600. */\n defaultHeight?: number;\n /** Minimum width in pixels. Default 600. */\n minWidth?: number;\n /** Minimum height in pixels. Default 400. */\n minHeight?: number;\n /** Class applied to the window container. */\n className?: string;\n /** Accessible label for the dialog when the title is not text. */\n 'aria-label'?: string;\n}\n\nconst RESIZE_HANDLES: { dir: ResizeDirection; className: string }[] = [\n { dir: 'nw', className: 'top-0 left-0 h-2 w-2 cursor-nw-resize' },\n { dir: 'ne', className: 'top-0 right-0 h-2 w-2 cursor-ne-resize' },\n { dir: 'sw', className: 'bottom-0 left-0 h-2 w-2 cursor-sw-resize' },\n { dir: 'n', className: 'top-0 left-2 right-2 h-1 cursor-n-resize' },\n { dir: 's', className: 'bottom-0 left-2 right-2 h-1 cursor-s-resize' },\n { dir: 'w', className: 'left-0 top-2 bottom-2 w-1 cursor-w-resize' },\n { dir: 'e', className: 'right-0 top-2 bottom-2 w-1 cursor-e-resize' },\n];\n\n/**\n * A presentational floating window shell used for pop-out editors (notes,\n * letters, etc.). It can render as a centered modal-style window or as a\n * draggable, freely-positioned window, and supports edge/corner resizing.\n * Open/minimize/close state and footer actions are controlled via props so it\n * can be wired to any store.\n */\nconst FloatingWindow = React.forwardRef<HTMLDivElement, FloatingWindowProps>(\n (\n {\n open,\n minimized = false,\n title,\n children,\n footer,\n onClose,\n onMinimize,\n onPopOut,\n draggable = false,\n resizable = true,\n defaultWidth = 1024,\n defaultHeight = 600,\n minWidth = 600,\n minHeight = 400,\n className,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const [size, setSize] = React.useState({\n width: defaultWidth,\n height: defaultHeight,\n });\n const [position, setPosition] = React.useState({ x: 50, y: 50 });\n\n const dragRef = React.useRef<{ x: number; y: number } | null>(null);\n const resizeRef = React.useRef<{\n dir: ResizeDirection;\n startX: number;\n startY: number;\n startW: number;\n startH: number;\n startPosX: number;\n startPosY: number;\n } | null>(null);\n\n const titleId = React.useId();\n\n const handleResizeStart = (e: React.MouseEvent, dir: ResizeDirection) => {\n e.preventDefault();\n e.stopPropagation();\n resizeRef.current = {\n dir,\n startX: e.clientX,\n startY: e.clientY,\n startW: size.width,\n startH: size.height,\n startPosX: position.x,\n startPosY: position.y,\n };\n };\n\n const handleDragStart = (e: React.MouseEvent) => {\n if (!draggable) return;\n if ((e.target as HTMLElement).closest('[data-window-controls]')) return;\n const rect = (e.currentTarget as HTMLElement)\n .closest('[data-slot=\"floating-window\"]')!\n .getBoundingClientRect();\n dragRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n };\n\n React.useEffect(() => {\n if (!open || minimized) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (dragRef.current) {\n setPosition({\n x: e.clientX - dragRef.current.x,\n y: e.clientY - dragRef.current.y,\n });\n return;\n }\n const r = resizeRef.current;\n if (!r) return;\n const deltaX = e.clientX - r.startX;\n const deltaY = e.clientY - r.startY;\n let newWidth = r.startW;\n let newHeight = r.startH;\n let newX = r.startPosX;\n let newY = r.startPosY;\n\n if (r.dir.includes('e')) {\n newWidth = Math.max(\n minWidth,\n Math.min(window.innerWidth - 40, r.startW + deltaX)\n );\n }\n if (r.dir.includes('w')) {\n newWidth = Math.max(minWidth, r.startW - deltaX);\n if (draggable) newX = r.startPosX + (r.startW - newWidth);\n }\n if (r.dir.includes('s')) {\n newHeight = Math.max(\n minHeight,\n Math.min(window.innerHeight - 40, r.startH + deltaY)\n );\n }\n if (r.dir.includes('n')) {\n newHeight = Math.max(minHeight, r.startH - deltaY);\n if (draggable) newY = r.startPosY + (r.startH - newHeight);\n }\n\n setSize({ width: newWidth, height: newHeight });\n if (draggable && (r.dir.includes('w') || r.dir.includes('n'))) {\n setPosition({ x: newX, y: newY });\n }\n };\n\n const handleMouseUp = () => {\n dragRef.current = null;\n resizeRef.current = null;\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [open, minimized, draggable, minWidth, minHeight]);\n\n if (!open || minimized) return null;\n\n const windowEl = (\n <div\n ref={ref}\n data-slot=\"floating-window\"\n role=\"dialog\"\n aria-modal={draggable ? undefined : true}\n aria-labelledby={typeof title === 'string' ? titleId : undefined}\n aria-label={typeof title === 'string' ? undefined : ariaLabel}\n className={cn(\n 'bg-card text-card-foreground relative flex flex-col overflow-hidden rounded-lg shadow-2xl',\n draggable && 'border-primary-800 fixed border-2',\n className\n )}\n style={\n draggable\n ? {\n left: position.x,\n top: position.y,\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n zIndex: 50,\n }\n : {\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n }\n }\n >\n {resizable &&\n RESIZE_HANDLES.map((handle) => (\n <div\n key={handle.dir}\n aria-hidden=\"true\"\n className={cn('absolute z-10', handle.className)}\n onMouseDown={(e) => handleResizeStart(e, handle.dir)}\n />\n ))}\n {resizable && (\n <div\n aria-hidden=\"true\"\n className=\"hover:bg-muted/50 absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize rounded-tl\"\n onMouseDown={(e) => handleResizeStart(e, 'se')}\n >\n <svg\n className=\"text-muted-foreground/50 h-4 w-4\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM22 14H20V12H22V14ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z\" />\n </svg>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- header acts as an optional drag handle; the controls inside remain keyboard accessible */}\n <div\n data-slot=\"floating-window-header\"\n className={cn(\n 'bg-primary-800 text-primary-foreground flex items-center justify-between rounded-t-lg px-4 py-3',\n draggable && 'cursor-move'\n )}\n onMouseDown={handleDragStart}\n >\n <h2\n id={typeof title === 'string' ? titleId : undefined}\n className=\"text-lg font-semibold\"\n >\n {title}\n </h2>\n <div data-window-controls className=\"flex items-center gap-1\">\n {onMinimize && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onMinimize}\n aria-label=\"Minimize\"\n title=\"Minimize\"\n >\n <Minus className=\"h-4 w-4\" />\n </Button>\n )}\n {onPopOut && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onPopOut}\n aria-label=\"Open in new window\"\n title=\"Open in new window\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* eslint-disable jsx-a11y/no-noninteractive-tabindex */}\n <div\n data-slot=\"floating-window-content\"\n role=\"region\"\n className=\"flex-1 overflow-y-auto\"\n tabIndex={0}\n >\n {children}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-tabindex */}\n\n {footer && (\n <div\n data-slot=\"floating-window-footer\"\n className=\"border-border bg-card flex items-center justify-end gap-3 rounded-b-lg border-t px-6 py-4\"\n >\n {footer}\n </div>\n )}\n </div>\n );\n\n if (draggable) return windowEl;\n\n return (\n <div\n data-slot=\"floating-window-overlay\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n >\n {windowEl}\n </div>\n );\n }\n);\n\nFloatingWindow.displayName = 'FloatingWindow';\n\nexport interface MinimizedWindowProps {\n /** Title shown on the minimized bar. */\n title: React.ReactNode;\n /** Called when the bar is activated to restore the window. */\n onRestore: () => void;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Additional class for the minimized bar. */\n className?: string;\n}\n\n/**\n * A compact bar representing a minimized {@link FloatingWindow}. Render this\n * (typically in a docked tray) while the corresponding window is minimized.\n */\nconst MinimizedWindow = React.forwardRef<HTMLDivElement, MinimizedWindowProps>(\n ({ title, onRestore, onClose, className }, ref) => (\n <div\n ref={ref}\n data-slot=\"minimized-window\"\n className={cn(\n 'border-border bg-card flex min-w-[200px] items-center gap-2 rounded-lg border px-3 py-2 shadow-md',\n className\n )}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={onRestore}\n >\n <Square className=\"mr-1 h-3 w-3\" />\n <span className=\"truncate text-sm\">{title}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-6 w-6 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-3 w-3\" />\n </Button>\n </div>\n )\n);\n\nMinimizedWindow.displayName = 'MinimizedWindow';\n\nexport { FloatingWindow, MinimizedWindow };\n"]}
@@ -3,7 +3,7 @@
3
3
  var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
4
4
  var chunkFSGEDDF2_cjs = require('./chunk-FSGEDDF2.cjs');
5
5
  var chunkZDEYV373_cjs = require('./chunk-ZDEYV373.cjs');
6
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
6
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var libphonenumber = require('google-libphonenumber');
@@ -206,7 +206,7 @@ function CountryCodeDropdown({
206
206
  "aria-haspopup": "listbox",
207
207
  "aria-expanded": isOpen,
208
208
  "aria-controls": isOpen ? menuId : void 0,
209
- className: chunkOR5DRJCW_cjs.cn(
209
+ className: chunkS5RVSXDV_cjs.cn(
210
210
  "inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm",
211
211
  "border-input bg-background text-foreground",
212
212
  "transition-colors duration-200",
@@ -230,7 +230,7 @@ function CountryCodeDropdown({
230
230
  "svg",
231
231
  {
232
232
  "data-slot": "country-dropdown-chevron",
233
- className: chunkOR5DRJCW_cjs.cn(
233
+ className: chunkS5RVSXDV_cjs.cn(
234
234
  "h-4 w-4 shrink-0 text-neutral-500 transition-transform duration-200",
235
235
  isOpen && "rotate-180"
236
236
  ),
@@ -263,7 +263,7 @@ function CountryCodeDropdown({
263
263
  "aria-label": ariaLabel,
264
264
  tabIndex: -1,
265
265
  onKeyDown: handleKeyDown,
266
- className: chunkOR5DRJCW_cjs.cn(
266
+ className: chunkS5RVSXDV_cjs.cn(
267
267
  "flex w-72 flex-col overflow-hidden",
268
268
  "rounded-xl border border-neutral-200 bg-white shadow-lg",
269
269
  "dark:border-neutral-700 dark:bg-neutral-800",
@@ -285,7 +285,7 @@ function CountryCodeDropdown({
285
285
  onChange: (e) => setSearch(e.target.value),
286
286
  placeholder: searchPlaceholder,
287
287
  "aria-label": "Search countries",
288
- className: chunkOR5DRJCW_cjs.cn(
288
+ className: chunkS5RVSXDV_cjs.cn(
289
289
  "w-full rounded-lg border border-neutral-200 px-3 py-1.5 text-sm",
290
290
  "text-foreground placeholder:text-muted-foreground bg-white",
291
291
  "focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
@@ -309,7 +309,7 @@ function CountryCodeDropdown({
309
309
  "data-slot": "country-dropdown-option",
310
310
  "aria-selected": country.code === selected.code,
311
311
  onClick: () => handleSelect(country),
312
- className: chunkOR5DRJCW_cjs.cn(
312
+ className: chunkS5RVSXDV_cjs.cn(
313
313
  "flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm",
314
314
  "transition-colors duration-150",
315
315
  "focus:outline-none",
@@ -362,5 +362,5 @@ CountryCodeDropdown.displayName = "CountryCodeDropdown";
362
362
  exports.CountryCodeDropdown = CountryCodeDropdown;
363
363
  exports.formatE164 = formatE164;
364
364
  exports.validatePhoneNumber = validatePhoneNumber;
365
- //# sourceMappingURL=chunk-VPNURIAY.cjs.map
366
- //# sourceMappingURL=chunk-VPNURIAY.cjs.map
365
+ //# sourceMappingURL=chunk-C2NNNOSU.cjs.map
366
+ //# sourceMappingURL=chunk-C2NNNOSU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CountryCodeDropdown/CountryCodeDropdown.tsx"],"names":["PhoneNumberUtil","libphonenumber","PhoneNumberFormat","React","useAnchoredPosition","useClickOutside","useEscapeKey","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-VPNURIAY.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport * as libphonenumber from 'google-libphonenumber';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\nconst PhoneNumberUtil =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberUtil ?? libphonenumber.PhoneNumberUtil;\nconst PhoneNumberFormat =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberFormat ?? libphonenumber.PhoneNumberFormat;\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CountryData {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** Country name (e.g. \"United States\") */\n name: string;\n /** Dial code (e.g. \"+1\") */\n dialCode: string;\n /** Emoji flag (e.g. \"🇺🇸\") */\n flag: string;\n}\n\nexport interface CountryCodeDropdownProps {\n /** The currently selected country code (ISO alpha-2, e.g. \"US\") */\n value?: string;\n /** Called when a country is selected */\n onChange?: (country: CountryData) => void;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger button */\n className?: string;\n /** Placement of the dropdown panel */\n placement?: 'bottom-start' | 'bottom-end';\n /** Placeholder text for the search field */\n searchPlaceholder?: string;\n /** Label for accessibility — visually hidden */\n 'aria-label'?: string;\n}\n\n// =============================================================================\n// Country Data (generated from libphonenumber)\n// =============================================================================\n\n/** Convert an ISO alpha-2 code to an emoji flag. */\nfunction isoToEmoji(code: string): string {\n return [...code.toUpperCase()]\n .map((c) => String.fromCodePoint(0x1f1e6 - 65 + c.charCodeAt(0)))\n .join('');\n}\n\n/** Build the full sorted list of countries from libphonenumber. */\nfunction buildCountryList(): CountryData[] {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const regions = phoneUtil.getSupportedRegions() as string[];\n const list: CountryData[] = regions.map((code: string) => {\n const callingCode = phoneUtil.getCountryCodeForRegion(code);\n return {\n code,\n name: regionDisplayName(code),\n dialCode: `+${callingCode}`,\n flag: isoToEmoji(code),\n };\n });\n list.sort((a, b) => a.name.localeCompare(b.name));\n return list;\n}\n\n/** Lazy singleton so we only build the list once. */\nlet _countries: CountryData[] | null = null;\nfunction getCountries(): CountryData[] {\n if (!_countries) _countries = buildCountryList();\n return _countries;\n}\n\n// =============================================================================\n// Region display name mapping\n// =============================================================================\n\n/** Lazy singleton for Intl.DisplayNames so we only construct it once. */\nlet _regionDisplayNames: Intl.DisplayNames | null = null;\n\nfunction getRegionDisplayNames(): Intl.DisplayNames | null {\n if (_regionDisplayNames === null) {\n try {\n const locales =\n typeof navigator !== 'undefined' && navigator.languages?.length\n ? [...navigator.languages]\n : ['en'];\n _regionDisplayNames = new Intl.DisplayNames(locales, { type: 'region' });\n } catch {\n return null;\n }\n }\n return _regionDisplayNames;\n}\n\n/**\n * Use the browser Intl API for display names where available,\n * falling back to the raw ISO code.\n */\nfunction regionDisplayName(code: string): string {\n const dn = getRegionDisplayNames();\n if (!dn) return code;\n return dn.of(code) ?? code;\n}\n\n// =============================================================================\n// Validation helper (exported for consumers)\n// =============================================================================\n\n/**\n * Validate a phone number string for a given country code using libphonenumber.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns Whether the number is valid for the given region.\n */\nexport function validatePhoneNumber(\n phoneNumber: string,\n countryCode: string\n): boolean {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.isValidNumberForRegion(parsed, countryCode);\n } catch {\n return false;\n }\n}\n\n/**\n * Format a phone number into E.164 international format.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns The formatted number (e.g. \"+15551234567\") or the original string if parsing fails.\n */\nexport function formatE164(phoneNumber: string, countryCode: string): string {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.format(parsed, PhoneNumberFormat.E164);\n } catch {\n return phoneNumber;\n }\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * A country-code selector dropdown designed to sit beside a phone number input.\n *\n * Defaults to United States (+1) with the 🇺🇸 flag. Clicking the trigger opens\n * a searchable list of all supported countries with their dial codes and flags.\n *\n * Uses Google's libphonenumber for the canonical country/code list and provides\n * a `validatePhoneNumber` helper for phone validation.\n *\n * @example\n * ```tsx\n * const [country, setCountry] = useState<CountryData>();\n *\n * <div className=\"flex gap-2\">\n * <CountryCodeDropdown value={country?.code} onChange={setCountry} />\n * <Input placeholder=\"Phone number\" />\n * </div>\n * ```\n */\nfunction CountryCodeDropdown({\n value,\n onChange,\n disabled = false,\n className,\n placement = 'bottom-start',\n searchPlaceholder = 'Search countries…',\n 'aria-label': ariaLabel = 'Select country code',\n}: CountryCodeDropdownProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [internalValue, setInternalValue] = React.useState(value ?? 'US');\n const containerRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const isControlled = value !== undefined;\n const activeValue = isControlled ? value : internalValue;\n\n // Defer building the full country list until the dropdown is first opened\n const [countriesLoaded, setCountriesLoaded] = React.useState(false);\n const countries = React.useMemo(\n () => (countriesLoaded ? getCountries() : []),\n [countriesLoaded]\n );\n\n React.useEffect(() => {\n if (isOpen && !countriesLoaded) setCountriesLoaded(true);\n }, [isOpen, countriesLoaded]);\n\n const selected = React.useMemo(() => {\n if (countries.length) {\n return (\n countries.find((c) => c.code === activeValue) ??\n countries.find((c) => c.code === 'US')!\n );\n }\n // Lightweight fallback while list hasn't loaded yet\n return {\n code: activeValue ?? 'US',\n name: regionDisplayName(activeValue ?? 'US'),\n dialCode: `+${PhoneNumberUtil.getInstance().getCountryCodeForRegion(activeValue ?? 'US')}`,\n flag: isoToEmoji(activeValue ?? 'US'),\n };\n }, [activeValue, countries]);\n\n const filtered = React.useMemo(() => {\n if (!search) return countries;\n const q = search.toLowerCase();\n return countries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.dialCode.includes(q) ||\n c.code.toLowerCase().includes(q)\n );\n }, [search, countries]);\n\n // Close helpers\n const close = React.useCallback(() => {\n setIsOpen(false);\n setSearch('');\n }, []);\n\n // Portal + fixed positioning so the panel escapes overflow-hidden ancestors.\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, placement });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [containerRef, floatingRef]\n );\n useClickOutside(outsideRefs, close, isOpen);\n useEscapeKey(close, isOpen);\n\n // Focus search input when opening\n React.useEffect(() => {\n if (isOpen) {\n // Defer to let the DOM render\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen]);\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) setIsOpen((prev) => !prev);\n }, [disabled]);\n\n const handleSelect = React.useCallback(\n (country: CountryData) => {\n if (!isControlled) {\n setInternalValue(country.code);\n }\n onChange?.(country);\n close();\n },\n [isControlled, onChange, close]\n );\n\n // Keyboard navigation inside the list\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const items =\n listRef.current?.querySelectorAll<HTMLButtonElement>(\n '[role=\"option\"]'\n );\n if (!items?.length) return;\n\n const current = document.activeElement as HTMLElement;\n const idx = Array.from(items).indexOf(current as HTMLButtonElement);\n let next: number;\n if (e.key === 'ArrowDown') {\n next = idx < items.length - 1 ? idx + 1 : 0;\n } else {\n next = idx > 0 ? idx - 1 : items.length - 1;\n }\n items[next].focus();\n }\n },\n [isOpen]\n );\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"country-dropdown\"\n className=\"relative inline-flex\"\n >\n {/* Trigger button */}\n <button\n type=\"button\"\n data-slot=\"country-dropdown-trigger\"\n onClick={handleToggle}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? menuId : undefined}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm',\n 'border-input bg-background text-foreground',\n 'transition-colors duration-200',\n 'hover:bg-neutral-50 dark:hover:bg-neutral-700',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <span\n data-slot=\"country-dropdown-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {selected.flag}\n </span>\n <span data-slot=\"country-dropdown-dialcode\">{selected.dialCode}</span>\n <svg\n data-slot=\"country-dropdown-chevron\"\n className={cn(\n 'h-4 w-4 shrink-0 text-neutral-500 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {/* Dropdown panel */}\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={menuId}\n role=\"listbox\"\n data-slot=\"country-dropdown-panel\"\n aria-label={ariaLabel}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex w-72 flex-col overflow-hidden',\n 'rounded-xl border border-neutral-200 bg-white shadow-lg',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search input */}\n <div\n data-slot=\"country-dropdown-search\"\n className=\"shrink-0 border-b border-neutral-200 p-2 dark:border-neutral-700\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n data-slot=\"country-dropdown-search-input\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n aria-label=\"Search countries\"\n className={cn(\n 'w-full rounded-lg border border-neutral-200 px-3 py-1.5 text-sm',\n 'text-foreground placeholder:text-muted-foreground bg-white',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'dark:border-neutral-600 dark:bg-neutral-700 dark:text-neutral-100'\n )}\n />\n </div>\n\n {/* Country list */}\n <div\n ref={listRef}\n data-slot=\"country-dropdown-list\"\n className=\"max-h-60 min-h-0 overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-4 text-center text-sm\">\n No countries found\n </div>\n ) : (\n filtered.map((country) => (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n data-slot=\"country-dropdown-option\"\n aria-selected={country.code === selected.code}\n onClick={() => handleSelect(country)}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm',\n 'transition-colors duration-150',\n 'focus:outline-none',\n country.code === selected.code\n ? 'bg-neutral-100 font-medium text-neutral-900 dark:bg-neutral-700 dark:text-white'\n : 'text-neutral-700 hover:bg-neutral-50 dark:text-neutral-300 dark:hover:bg-neutral-700/50',\n 'focus:bg-neutral-100 dark:focus:bg-neutral-700'\n )}\n >\n <span\n data-slot=\"country-dropdown-option-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {country.flag}\n </span>\n <span\n data-slot=\"country-dropdown-option-name\"\n className=\"flex-1 truncate\"\n >\n {country.name}\n </span>\n <span\n data-slot=\"country-dropdown-option-dialcode\"\n className=\"text-muted-foreground shrink-0 text-xs\"\n >\n {country.dialCode}\n </span>\n </button>\n ))\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nCountryCodeDropdown.displayName = 'CountryCodeDropdown';\n\nexport { CountryCodeDropdown };\n"]}
1
+ {"version":3,"sources":["../src/components/CountryCodeDropdown/CountryCodeDropdown.tsx"],"names":["PhoneNumberUtil","libphonenumber","PhoneNumberFormat","React","useAnchoredPosition","useClickOutside","useEscapeKey","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-C2NNNOSU.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport * as libphonenumber from 'google-libphonenumber';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\nconst PhoneNumberUtil =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberUtil ?? libphonenumber.PhoneNumberUtil;\nconst PhoneNumberFormat =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberFormat ?? libphonenumber.PhoneNumberFormat;\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CountryData {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** Country name (e.g. \"United States\") */\n name: string;\n /** Dial code (e.g. \"+1\") */\n dialCode: string;\n /** Emoji flag (e.g. \"🇺🇸\") */\n flag: string;\n}\n\nexport interface CountryCodeDropdownProps {\n /** The currently selected country code (ISO alpha-2, e.g. \"US\") */\n value?: string;\n /** Called when a country is selected */\n onChange?: (country: CountryData) => void;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger button */\n className?: string;\n /** Placement of the dropdown panel */\n placement?: 'bottom-start' | 'bottom-end';\n /** Placeholder text for the search field */\n searchPlaceholder?: string;\n /** Label for accessibility — visually hidden */\n 'aria-label'?: string;\n}\n\n// =============================================================================\n// Country Data (generated from libphonenumber)\n// =============================================================================\n\n/** Convert an ISO alpha-2 code to an emoji flag. */\nfunction isoToEmoji(code: string): string {\n return [...code.toUpperCase()]\n .map((c) => String.fromCodePoint(0x1f1e6 - 65 + c.charCodeAt(0)))\n .join('');\n}\n\n/** Build the full sorted list of countries from libphonenumber. */\nfunction buildCountryList(): CountryData[] {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const regions = phoneUtil.getSupportedRegions() as string[];\n const list: CountryData[] = regions.map((code: string) => {\n const callingCode = phoneUtil.getCountryCodeForRegion(code);\n return {\n code,\n name: regionDisplayName(code),\n dialCode: `+${callingCode}`,\n flag: isoToEmoji(code),\n };\n });\n list.sort((a, b) => a.name.localeCompare(b.name));\n return list;\n}\n\n/** Lazy singleton so we only build the list once. */\nlet _countries: CountryData[] | null = null;\nfunction getCountries(): CountryData[] {\n if (!_countries) _countries = buildCountryList();\n return _countries;\n}\n\n// =============================================================================\n// Region display name mapping\n// =============================================================================\n\n/** Lazy singleton for Intl.DisplayNames so we only construct it once. */\nlet _regionDisplayNames: Intl.DisplayNames | null = null;\n\nfunction getRegionDisplayNames(): Intl.DisplayNames | null {\n if (_regionDisplayNames === null) {\n try {\n const locales =\n typeof navigator !== 'undefined' && navigator.languages?.length\n ? [...navigator.languages]\n : ['en'];\n _regionDisplayNames = new Intl.DisplayNames(locales, { type: 'region' });\n } catch {\n return null;\n }\n }\n return _regionDisplayNames;\n}\n\n/**\n * Use the browser Intl API for display names where available,\n * falling back to the raw ISO code.\n */\nfunction regionDisplayName(code: string): string {\n const dn = getRegionDisplayNames();\n if (!dn) return code;\n return dn.of(code) ?? code;\n}\n\n// =============================================================================\n// Validation helper (exported for consumers)\n// =============================================================================\n\n/**\n * Validate a phone number string for a given country code using libphonenumber.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns Whether the number is valid for the given region.\n */\nexport function validatePhoneNumber(\n phoneNumber: string,\n countryCode: string\n): boolean {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.isValidNumberForRegion(parsed, countryCode);\n } catch {\n return false;\n }\n}\n\n/**\n * Format a phone number into E.164 international format.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns The formatted number (e.g. \"+15551234567\") or the original string if parsing fails.\n */\nexport function formatE164(phoneNumber: string, countryCode: string): string {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.format(parsed, PhoneNumberFormat.E164);\n } catch {\n return phoneNumber;\n }\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * A country-code selector dropdown designed to sit beside a phone number input.\n *\n * Defaults to United States (+1) with the 🇺🇸 flag. Clicking the trigger opens\n * a searchable list of all supported countries with their dial codes and flags.\n *\n * Uses Google's libphonenumber for the canonical country/code list and provides\n * a `validatePhoneNumber` helper for phone validation.\n *\n * @example\n * ```tsx\n * const [country, setCountry] = useState<CountryData>();\n *\n * <div className=\"flex gap-2\">\n * <CountryCodeDropdown value={country?.code} onChange={setCountry} />\n * <Input placeholder=\"Phone number\" />\n * </div>\n * ```\n */\nfunction CountryCodeDropdown({\n value,\n onChange,\n disabled = false,\n className,\n placement = 'bottom-start',\n searchPlaceholder = 'Search countries…',\n 'aria-label': ariaLabel = 'Select country code',\n}: CountryCodeDropdownProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [internalValue, setInternalValue] = React.useState(value ?? 'US');\n const containerRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const isControlled = value !== undefined;\n const activeValue = isControlled ? value : internalValue;\n\n // Defer building the full country list until the dropdown is first opened\n const [countriesLoaded, setCountriesLoaded] = React.useState(false);\n const countries = React.useMemo(\n () => (countriesLoaded ? getCountries() : []),\n [countriesLoaded]\n );\n\n React.useEffect(() => {\n if (isOpen && !countriesLoaded) setCountriesLoaded(true);\n }, [isOpen, countriesLoaded]);\n\n const selected = React.useMemo(() => {\n if (countries.length) {\n return (\n countries.find((c) => c.code === activeValue) ??\n countries.find((c) => c.code === 'US')!\n );\n }\n // Lightweight fallback while list hasn't loaded yet\n return {\n code: activeValue ?? 'US',\n name: regionDisplayName(activeValue ?? 'US'),\n dialCode: `+${PhoneNumberUtil.getInstance().getCountryCodeForRegion(activeValue ?? 'US')}`,\n flag: isoToEmoji(activeValue ?? 'US'),\n };\n }, [activeValue, countries]);\n\n const filtered = React.useMemo(() => {\n if (!search) return countries;\n const q = search.toLowerCase();\n return countries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.dialCode.includes(q) ||\n c.code.toLowerCase().includes(q)\n );\n }, [search, countries]);\n\n // Close helpers\n const close = React.useCallback(() => {\n setIsOpen(false);\n setSearch('');\n }, []);\n\n // Portal + fixed positioning so the panel escapes overflow-hidden ancestors.\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, placement });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [containerRef, floatingRef]\n );\n useClickOutside(outsideRefs, close, isOpen);\n useEscapeKey(close, isOpen);\n\n // Focus search input when opening\n React.useEffect(() => {\n if (isOpen) {\n // Defer to let the DOM render\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen]);\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) setIsOpen((prev) => !prev);\n }, [disabled]);\n\n const handleSelect = React.useCallback(\n (country: CountryData) => {\n if (!isControlled) {\n setInternalValue(country.code);\n }\n onChange?.(country);\n close();\n },\n [isControlled, onChange, close]\n );\n\n // Keyboard navigation inside the list\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const items =\n listRef.current?.querySelectorAll<HTMLButtonElement>(\n '[role=\"option\"]'\n );\n if (!items?.length) return;\n\n const current = document.activeElement as HTMLElement;\n const idx = Array.from(items).indexOf(current as HTMLButtonElement);\n let next: number;\n if (e.key === 'ArrowDown') {\n next = idx < items.length - 1 ? idx + 1 : 0;\n } else {\n next = idx > 0 ? idx - 1 : items.length - 1;\n }\n items[next].focus();\n }\n },\n [isOpen]\n );\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"country-dropdown\"\n className=\"relative inline-flex\"\n >\n {/* Trigger button */}\n <button\n type=\"button\"\n data-slot=\"country-dropdown-trigger\"\n onClick={handleToggle}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? menuId : undefined}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm',\n 'border-input bg-background text-foreground',\n 'transition-colors duration-200',\n 'hover:bg-neutral-50 dark:hover:bg-neutral-700',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <span\n data-slot=\"country-dropdown-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {selected.flag}\n </span>\n <span data-slot=\"country-dropdown-dialcode\">{selected.dialCode}</span>\n <svg\n data-slot=\"country-dropdown-chevron\"\n className={cn(\n 'h-4 w-4 shrink-0 text-neutral-500 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {/* Dropdown panel */}\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={menuId}\n role=\"listbox\"\n data-slot=\"country-dropdown-panel\"\n aria-label={ariaLabel}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex w-72 flex-col overflow-hidden',\n 'rounded-xl border border-neutral-200 bg-white shadow-lg',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search input */}\n <div\n data-slot=\"country-dropdown-search\"\n className=\"shrink-0 border-b border-neutral-200 p-2 dark:border-neutral-700\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n data-slot=\"country-dropdown-search-input\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n aria-label=\"Search countries\"\n className={cn(\n 'w-full rounded-lg border border-neutral-200 px-3 py-1.5 text-sm',\n 'text-foreground placeholder:text-muted-foreground bg-white',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'dark:border-neutral-600 dark:bg-neutral-700 dark:text-neutral-100'\n )}\n />\n </div>\n\n {/* Country list */}\n <div\n ref={listRef}\n data-slot=\"country-dropdown-list\"\n className=\"max-h-60 min-h-0 overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-4 text-center text-sm\">\n No countries found\n </div>\n ) : (\n filtered.map((country) => (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n data-slot=\"country-dropdown-option\"\n aria-selected={country.code === selected.code}\n onClick={() => handleSelect(country)}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm',\n 'transition-colors duration-150',\n 'focus:outline-none',\n country.code === selected.code\n ? 'bg-neutral-100 font-medium text-neutral-900 dark:bg-neutral-700 dark:text-white'\n : 'text-neutral-700 hover:bg-neutral-50 dark:text-neutral-300 dark:hover:bg-neutral-700/50',\n 'focus:bg-neutral-100 dark:focus:bg-neutral-700'\n )}\n >\n <span\n data-slot=\"country-dropdown-option-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {country.flag}\n </span>\n <span\n data-slot=\"country-dropdown-option-name\"\n className=\"flex-1 truncate\"\n >\n {country.name}\n </span>\n <span\n data-slot=\"country-dropdown-option-dialcode\"\n className=\"text-muted-foreground shrink-0 text-xs\"\n >\n {country.dialCode}\n </span>\n </button>\n ))\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nCountryCodeDropdown.displayName = 'CountryCodeDropdown';\n\nexport { CountryCodeDropdown };\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkMSRU3XBH_cjs = require('./chunk-MSRU3XBH.cjs');
3
+ var chunk6ECKH4DJ_cjs = require('./chunk-6ECKH4DJ.cjs');
4
4
  var chunkFSGEDDF2_cjs = require('./chunk-FSGEDDF2.cjs');
5
5
  var chunkZDEYV373_cjs = require('./chunk-ZDEYV373.cjs');
6
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
6
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -141,7 +141,7 @@ function Autocomplete({
141
141
  anchorRef.current = node;
142
142
  },
143
143
  "data-slot": "autocomplete",
144
- className: chunkOR5DRJCW_cjs.cn("relative", className),
144
+ className: chunkS5RVSXDV_cjs.cn("relative", className),
145
145
  children: [
146
146
  /* @__PURE__ */ jsxRuntime.jsx(
147
147
  "input",
@@ -164,7 +164,7 @@ function Autocomplete({
164
164
  onFocus: () => {
165
165
  if (meetsMinLength) setOpen(true);
166
166
  },
167
- className: chunkOR5DRJCW_cjs.cn(chunkMSRU3XBH_cjs.inputVariants({ size }), inputClassName),
167
+ className: chunkS5RVSXDV_cjs.cn(chunk6ECKH4DJ_cjs.inputVariants({ size }), inputClassName),
168
168
  ...inputProps
169
169
  }
170
170
  ),
@@ -177,7 +177,7 @@ function Autocomplete({
177
177
  id: listId,
178
178
  role: "listbox",
179
179
  "data-slot": "autocomplete-list",
180
- className: chunkOR5DRJCW_cjs.cn(
180
+ className: chunkS5RVSXDV_cjs.cn(
181
181
  "border-border overflow-auto rounded-md border",
182
182
  "bg-card text-card-foreground shadow-lg"
183
183
  ),
@@ -202,7 +202,7 @@ function Autocomplete({
202
202
  onMouseEnter: () => setActiveIndex(index),
203
203
  onMouseDown: (e) => e.preventDefault(),
204
204
  onClick: () => commitRow(row),
205
- className: chunkOR5DRJCW_cjs.cn(
205
+ className: chunkS5RVSXDV_cjs.cn(
206
206
  "w-full px-4 py-3 text-left text-sm transition-colors",
207
207
  "border-border border-b last:border-b-0",
208
208
  "focus:outline-none",
@@ -225,5 +225,5 @@ function Autocomplete({
225
225
  Autocomplete.displayName = "Autocomplete";
226
226
 
227
227
  exports.Autocomplete = Autocomplete;
228
- //# sourceMappingURL=chunk-AES2BKEW.cjs.map
229
- //# sourceMappingURL=chunk-AES2BKEW.cjs.map
228
+ //# sourceMappingURL=chunk-C7I3ZGMQ.cjs.map
229
+ //# sourceMappingURL=chunk-C7I3ZGMQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Autocomplete/Autocomplete.tsx"],"names":["React","useAnchoredPosition","useClickOutside","jsxs","cn","jsx","inputVariants","createPortal"],"mappings":"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","file":"chunk-AES2BKEW.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { inputVariants } from '../Input';\n\nexport interface AutocompleteProps<T> extends Pick<\n VariantProps<typeof inputVariants>,\n 'size'\n> {\n /** Candidate items to search through. */\n items: T[];\n /** Called when the user picks an item. */\n onSelect: (item: T) => void;\n /** Returns a stable key for an item (used for React keys & option ids). */\n getItemKey: (item: T) => string;\n /** Renders the visible content of a result row. */\n renderItem: (item: T) => React.ReactNode;\n /**\n * Predicate used to filter `items` by the current query. When omitted, all\n * `items` are shown as-is (the caller is responsible for filtering).\n */\n filter?: (item: T, query: string) => boolean;\n /** Controlled query value. */\n value?: string;\n /** Default query value (uncontrolled). */\n defaultValue?: string;\n /** Called whenever the query changes. */\n onValueChange?: (query: string) => void;\n /** Placeholder text for the search input. */\n placeholder?: string;\n /** Content shown when there are no matching items. */\n emptyMessage?: React.ReactNode;\n /**\n * Renders the label of a \"create new\" action appended to the results. When\n * provided together with `onCreate`, the action row is shown.\n */\n createLabel?: (query: string) => React.ReactNode;\n /** Called when the \"create new\" action is chosen. Receives the query. */\n onCreate?: (query: string) => void;\n /** Minimum query length before results open. Defaults to 1. */\n minQueryLength?: number;\n /** Clear the query after a selection. Defaults to true. */\n clearOnSelect?: boolean;\n /** Disable the input. */\n disabled?: boolean;\n /** Accessible label for the combobox input. */\n 'aria-label'?: string;\n /** Class applied to the outer wrapper. */\n className?: string;\n /** Class applied to the input element. */\n inputClassName?: string;\n /** Forwarded ref to the underlying input. */\n inputRef?: React.Ref<HTMLInputElement>;\n /** Additional props forwarded to the input element. */\n inputProps?: Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'size'\n | 'placeholder'\n | 'disabled'\n | 'aria-label'\n >;\n}\n\ntype Row<T> =\n | { kind: 'item'; item: T; key: string }\n | { kind: 'create'; key: string };\n\n/**\n * A data-agnostic, presentational combobox. It renders a search input with a\n * filterable results popover and an optional \"create new\" action. All data and\n * side effects are supplied via props/callbacks so it can be wired to any store.\n *\n * @example\n * ```tsx\n * <Autocomplete\n * items={employees}\n * getItemKey={(e) => e.id}\n * filter={(e, q) => e.name.toLowerCase().includes(q.toLowerCase())}\n * renderItem={(e) => <span>{e.name}</span>}\n * onSelect={handleSelect}\n * placeholder=\"Search employees…\"\n * />\n * ```\n */\nfunction Autocomplete<T>({\n items,\n onSelect,\n getItemKey,\n renderItem,\n filter,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n placeholder,\n emptyMessage,\n createLabel,\n onCreate,\n minQueryLength = 1,\n clearOnSelect = true,\n disabled,\n size,\n className,\n inputClassName,\n inputRef,\n inputProps,\n 'aria-label': ariaLabel,\n}: AutocompleteProps<T>) {\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const query = isControlled ? controlledValue : uncontrolledValue;\n\n const [open, setOpen] = React.useState(false);\n const [activeIndex, setActiveIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const listId = React.useId();\n\n const meetsMinLength = query.length >= minQueryLength;\n\n const filteredItems = React.useMemo(() => {\n if (!filter) return items;\n return items.filter((item) => filter(item, query));\n }, [items, filter, query]);\n\n const showCreate = Boolean(onCreate && createLabel && query.length > 0);\n\n const rows = React.useMemo<Row<T>[]>(() => {\n const itemRows: Row<T>[] = filteredItems.map((item) => ({\n kind: 'item',\n item,\n key: getItemKey(item),\n }));\n if (showCreate) {\n itemRows.push({ kind: 'create', key: '__create__' });\n }\n return itemRows;\n }, [filteredItems, showCreate, getItemKey]);\n\n const hasContent =\n rows.length > 0 || (meetsMinLength && emptyMessage != null);\n const isOpen = open && meetsMinLength && hasContent;\n\n // Portal + fixed positioning so the listbox escapes overflow-hidden\n // ancestors (cards, dialogs, scroll containers, …).\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, matchWidth: true, maxHeight: 300 });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [floatingRef]\n );\n useClickOutside(outsideRefs, () => setOpen(false), open);\n\n const setQuery = React.useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\n );\n\n React.useEffect(() => {\n if (!isOpen) setActiveIndex(-1);\n }, [isOpen]);\n\n const commitRow = (row: Row<T>) => {\n if (row.kind === 'item') {\n onSelect(row.item);\n } else {\n onCreate?.(query);\n }\n setOpen(false);\n setActiveIndex(-1);\n if (clearOnSelect) setQuery('');\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value);\n setOpen(true);\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!isOpen) {\n setOpen(true);\n return;\n }\n setActiveIndex((i) => (rows.length === 0 ? -1 : (i + 1) % rows.length));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n if (!isOpen) return;\n setActiveIndex((i) =>\n rows.length === 0 ? -1 : (i - 1 + rows.length) % rows.length\n );\n } else if (e.key === 'Enter') {\n if (isOpen && activeIndex >= 0 && activeIndex < rows.length) {\n e.preventDefault();\n commitRow(rows[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n\n const activeId =\n isOpen && activeIndex >= 0 && activeIndex < rows.length\n ? `${listId}-opt-${rows[activeIndex].key}`\n : undefined;\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"autocomplete\"\n className={cn('relative', className)}\n >\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeId}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n data-slot=\"autocomplete-input\"\n value={query}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (meetsMinLength) setOpen(true);\n }}\n className={cn(inputVariants({ size }), inputClassName)}\n {...inputProps}\n />\n\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={listId}\n role=\"listbox\"\n data-slot=\"autocomplete-list\"\n className={cn(\n 'border-border overflow-auto rounded-md border',\n 'bg-card text-card-foreground shadow-lg'\n )}\n >\n {rows.length === 0\n ? emptyMessage != null && (\n <div\n data-slot=\"autocomplete-empty\"\n className=\"text-muted-foreground px-4 py-3 text-sm\"\n >\n {emptyMessage}\n </div>\n )\n : rows.map((row, index) => {\n const isActive = index === activeIndex;\n const optionId = `${listId}-opt-${row.key}`;\n return (\n <button\n key={row.key}\n id={optionId}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-slot={\n row.kind === 'create'\n ? 'autocomplete-create'\n : 'autocomplete-option'\n }\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => commitRow(row)}\n className={cn(\n 'w-full px-4 py-3 text-left text-sm transition-colors',\n 'border-border border-b last:border-b-0',\n 'focus:outline-none',\n isActive\n ? 'bg-muted text-foreground'\n : 'hover:bg-muted',\n row.kind === 'create' &&\n 'text-primary-800 flex items-center gap-2 font-medium'\n )}\n >\n {row.kind === 'create'\n ? createLabel!(query)\n : renderItem(row.item)}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nAutocomplete.displayName = 'Autocomplete';\n\nexport { Autocomplete };\n"]}
1
+ {"version":3,"sources":["../src/components/Autocomplete/Autocomplete.tsx"],"names":["React","useAnchoredPosition","useClickOutside","jsxs","cn","jsx","inputVariants","createPortal"],"mappings":"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","file":"chunk-C7I3ZGMQ.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { inputVariants } from '../Input';\n\nexport interface AutocompleteProps<T> extends Pick<\n VariantProps<typeof inputVariants>,\n 'size'\n> {\n /** Candidate items to search through. */\n items: T[];\n /** Called when the user picks an item. */\n onSelect: (item: T) => void;\n /** Returns a stable key for an item (used for React keys & option ids). */\n getItemKey: (item: T) => string;\n /** Renders the visible content of a result row. */\n renderItem: (item: T) => React.ReactNode;\n /**\n * Predicate used to filter `items` by the current query. When omitted, all\n * `items` are shown as-is (the caller is responsible for filtering).\n */\n filter?: (item: T, query: string) => boolean;\n /** Controlled query value. */\n value?: string;\n /** Default query value (uncontrolled). */\n defaultValue?: string;\n /** Called whenever the query changes. */\n onValueChange?: (query: string) => void;\n /** Placeholder text for the search input. */\n placeholder?: string;\n /** Content shown when there are no matching items. */\n emptyMessage?: React.ReactNode;\n /**\n * Renders the label of a \"create new\" action appended to the results. When\n * provided together with `onCreate`, the action row is shown.\n */\n createLabel?: (query: string) => React.ReactNode;\n /** Called when the \"create new\" action is chosen. Receives the query. */\n onCreate?: (query: string) => void;\n /** Minimum query length before results open. Defaults to 1. */\n minQueryLength?: number;\n /** Clear the query after a selection. Defaults to true. */\n clearOnSelect?: boolean;\n /** Disable the input. */\n disabled?: boolean;\n /** Accessible label for the combobox input. */\n 'aria-label'?: string;\n /** Class applied to the outer wrapper. */\n className?: string;\n /** Class applied to the input element. */\n inputClassName?: string;\n /** Forwarded ref to the underlying input. */\n inputRef?: React.Ref<HTMLInputElement>;\n /** Additional props forwarded to the input element. */\n inputProps?: Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'size'\n | 'placeholder'\n | 'disabled'\n | 'aria-label'\n >;\n}\n\ntype Row<T> =\n | { kind: 'item'; item: T; key: string }\n | { kind: 'create'; key: string };\n\n/**\n * A data-agnostic, presentational combobox. It renders a search input with a\n * filterable results popover and an optional \"create new\" action. All data and\n * side effects are supplied via props/callbacks so it can be wired to any store.\n *\n * @example\n * ```tsx\n * <Autocomplete\n * items={employees}\n * getItemKey={(e) => e.id}\n * filter={(e, q) => e.name.toLowerCase().includes(q.toLowerCase())}\n * renderItem={(e) => <span>{e.name}</span>}\n * onSelect={handleSelect}\n * placeholder=\"Search employees…\"\n * />\n * ```\n */\nfunction Autocomplete<T>({\n items,\n onSelect,\n getItemKey,\n renderItem,\n filter,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n placeholder,\n emptyMessage,\n createLabel,\n onCreate,\n minQueryLength = 1,\n clearOnSelect = true,\n disabled,\n size,\n className,\n inputClassName,\n inputRef,\n inputProps,\n 'aria-label': ariaLabel,\n}: AutocompleteProps<T>) {\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const query = isControlled ? controlledValue : uncontrolledValue;\n\n const [open, setOpen] = React.useState(false);\n const [activeIndex, setActiveIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const listId = React.useId();\n\n const meetsMinLength = query.length >= minQueryLength;\n\n const filteredItems = React.useMemo(() => {\n if (!filter) return items;\n return items.filter((item) => filter(item, query));\n }, [items, filter, query]);\n\n const showCreate = Boolean(onCreate && createLabel && query.length > 0);\n\n const rows = React.useMemo<Row<T>[]>(() => {\n const itemRows: Row<T>[] = filteredItems.map((item) => ({\n kind: 'item',\n item,\n key: getItemKey(item),\n }));\n if (showCreate) {\n itemRows.push({ kind: 'create', key: '__create__' });\n }\n return itemRows;\n }, [filteredItems, showCreate, getItemKey]);\n\n const hasContent =\n rows.length > 0 || (meetsMinLength && emptyMessage != null);\n const isOpen = open && meetsMinLength && hasContent;\n\n // Portal + fixed positioning so the listbox escapes overflow-hidden\n // ancestors (cards, dialogs, scroll containers, …).\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, matchWidth: true, maxHeight: 300 });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [floatingRef]\n );\n useClickOutside(outsideRefs, () => setOpen(false), open);\n\n const setQuery = React.useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\n );\n\n React.useEffect(() => {\n if (!isOpen) setActiveIndex(-1);\n }, [isOpen]);\n\n const commitRow = (row: Row<T>) => {\n if (row.kind === 'item') {\n onSelect(row.item);\n } else {\n onCreate?.(query);\n }\n setOpen(false);\n setActiveIndex(-1);\n if (clearOnSelect) setQuery('');\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value);\n setOpen(true);\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!isOpen) {\n setOpen(true);\n return;\n }\n setActiveIndex((i) => (rows.length === 0 ? -1 : (i + 1) % rows.length));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n if (!isOpen) return;\n setActiveIndex((i) =>\n rows.length === 0 ? -1 : (i - 1 + rows.length) % rows.length\n );\n } else if (e.key === 'Enter') {\n if (isOpen && activeIndex >= 0 && activeIndex < rows.length) {\n e.preventDefault();\n commitRow(rows[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n\n const activeId =\n isOpen && activeIndex >= 0 && activeIndex < rows.length\n ? `${listId}-opt-${rows[activeIndex].key}`\n : undefined;\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"autocomplete\"\n className={cn('relative', className)}\n >\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeId}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n data-slot=\"autocomplete-input\"\n value={query}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (meetsMinLength) setOpen(true);\n }}\n className={cn(inputVariants({ size }), inputClassName)}\n {...inputProps}\n />\n\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={listId}\n role=\"listbox\"\n data-slot=\"autocomplete-list\"\n className={cn(\n 'border-border overflow-auto rounded-md border',\n 'bg-card text-card-foreground shadow-lg'\n )}\n >\n {rows.length === 0\n ? emptyMessage != null && (\n <div\n data-slot=\"autocomplete-empty\"\n className=\"text-muted-foreground px-4 py-3 text-sm\"\n >\n {emptyMessage}\n </div>\n )\n : rows.map((row, index) => {\n const isActive = index === activeIndex;\n const optionId = `${listId}-opt-${row.key}`;\n return (\n <button\n key={row.key}\n id={optionId}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-slot={\n row.kind === 'create'\n ? 'autocomplete-create'\n : 'autocomplete-option'\n }\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => commitRow(row)}\n className={cn(\n 'w-full px-4 py-3 text-left text-sm transition-colors',\n 'border-border border-b last:border-b-0',\n 'focus:outline-none',\n isActive\n ? 'bg-muted text-foreground'\n : 'hover:bg-muted',\n row.kind === 'create' &&\n 'text-primary-800 flex items-center gap-2 font-medium'\n )}\n >\n {row.kind === 'create'\n ? createLabel!(query)\n : renderItem(row.item)}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nAutocomplete.displayName = 'Autocomplete';\n\nexport { Autocomplete };\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-F3SOEIN2.js';
1
+ import { cn } from './chunk-TQONQSJO.js';
2
2
  import * as React from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -227,5 +227,5 @@ function CircularProgress({
227
227
  CircularProgress.displayName = "CircularProgress";
228
228
 
229
229
  export { CircularProgress, Progress, circularProgressVariants, progressBarFillVariants, progressBarTrackVariants };
230
- //# sourceMappingURL=chunk-IYIYL2SQ.js.map
231
- //# sourceMappingURL=chunk-IYIYL2SQ.js.map
230
+ //# sourceMappingURL=chunk-CEQJGUAS.js.map
231
+ //# sourceMappingURL=chunk-CEQJGUAS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":[],"mappings":"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","file":"chunk-IYIYL2SQ.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Progress Bar Variants\n// ============================================================================\n\nconst progressBarTrackVariants = cva(\n ['w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700'],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst progressBarFillVariants = cva(\n ['h-full rounded-full transition-all duration-300 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n },\n animated: {\n true: 'animate-pulse',\n false: '',\n },\n striped: {\n true: [\n 'bg-gradient-to-r',\n 'from-transparent via-white/20 to-transparent',\n 'bg-[length:1rem_100%]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n animated: false,\n striped: false,\n },\n }\n);\n\n// ============================================================================\n// Progress Bar Component\n// ============================================================================\n\nexport interface ProgressProps\n extends\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Label for the progress bar */\n label?: string;\n /** Show the percentage value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number, max: number) => string;\n /** Additional class name */\n className?: string;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n}\n\n/**\n * A progress bar component for showing completion status.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={75} showValue label=\"Upload progress\" />\n * <Progress value={30} variant=\"success\" striped />\n * ```\n */\nfunction Progress({\n value,\n max = 100,\n label,\n showValue = false,\n formatValue,\n size,\n variant,\n animated,\n striped,\n className,\n indeterminate = false,\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const progressId = React.useId();\n\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`;\n\n return (\n <div data-slot=\"progress\" className={cn('w-full', className)}>\n {(label || showValue) && (\n <div\n data-slot=\"progress-label-row\"\n className=\"mb-1.5 flex items-center justify-between\"\n >\n {label && (\n <label\n data-slot=\"progress-label\"\n id={`${progressId}-label`}\n className=\"text-foreground text-sm font-medium\"\n >\n {label}\n </label>\n )}\n {showValue && !indeterminate && (\n <span\n data-slot=\"progress-value\"\n className=\"text-sm text-neutral-600 dark:text-neutral-400\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n <div\n data-slot=\"progress-track\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-labelledby={label ? `${progressId}-label` : undefined}\n aria-label={!label ? 'Progress' : undefined}\n className={cn(progressBarTrackVariants({ size }))}\n >\n <div\n data-slot=\"progress-fill\"\n className={cn(\n progressBarFillVariants({ variant, animated, striped }),\n indeterminate &&\n 'w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]',\n !striped && variant === 'default' && 'bg-primary-800',\n !striped && variant === 'success' && 'bg-green-500',\n !striped && variant === 'warning' && 'bg-yellow-500',\n !striped && variant === 'danger' && 'bg-red-500'\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = 'Progress';\n\n// ============================================================================\n// Circular Progress Variants\n// ============================================================================\n\nconst circularProgressVariants = cva(['relative inline-flex'], {\n variants: {\n size: {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Circular Progress Component\n// ============================================================================\n\nexport interface CircularProgressProps extends VariantProps<\n typeof circularProgressVariants\n> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Stroke width */\n strokeWidth?: number;\n /** Show the percentage value in the center */\n showValue?: boolean;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A circular progress indicator component.\n *\n * @example\n * ```tsx\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={50} variant=\"success\" size=\"lg\" />\n * ```\n */\nfunction CircularProgress({\n value,\n max = 100,\n variant = 'default',\n size,\n strokeWidth = 4,\n showValue = false,\n indeterminate = false,\n className,\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // SVG calculations\n const sizeMap = { sm: 32, md: 48, lg: 64, xl: 96 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const variantColors = {\n default: 'stroke-primary-500',\n success: 'stroke-green-500',\n warning: 'stroke-yellow-500',\n danger: 'stroke-red-500',\n };\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label=\"Progress\"\n className={cn(circularProgressVariants({ size }), className)}\n >\n <svg\n aria-hidden=\"true\"\n className={cn('-rotate-90 transform', indeterminate && 'animate-spin')}\n width={svgSize}\n height={svgSize}\n >\n {/* Background track */}\n <circle\n className=\"stroke-neutral-200 dark:stroke-neutral-700\"\n fill=\"none\"\n strokeWidth={strokeWidth}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n />\n {/* Progress fill */}\n <circle\n className={cn(\n variantColors[variant],\n 'transition-all duration-300 ease-out'\n )}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n data-slot=\"circular-progress-value\"\n className=\"text-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\"\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n}\n\nCircularProgress.displayName = 'CircularProgress';\n\nexport {\n Progress,\n CircularProgress,\n progressBarTrackVariants,\n progressBarFillVariants,\n circularProgressVariants,\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":[],"mappings":"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","file":"chunk-CEQJGUAS.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Progress Bar Variants\n// ============================================================================\n\nconst progressBarTrackVariants = cva(\n ['w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700'],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst progressBarFillVariants = cva(\n ['h-full rounded-full transition-all duration-300 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n },\n animated: {\n true: 'animate-pulse',\n false: '',\n },\n striped: {\n true: [\n 'bg-gradient-to-r',\n 'from-transparent via-white/20 to-transparent',\n 'bg-[length:1rem_100%]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n animated: false,\n striped: false,\n },\n }\n);\n\n// ============================================================================\n// Progress Bar Component\n// ============================================================================\n\nexport interface ProgressProps\n extends\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Label for the progress bar */\n label?: string;\n /** Show the percentage value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number, max: number) => string;\n /** Additional class name */\n className?: string;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n}\n\n/**\n * A progress bar component for showing completion status.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={75} showValue label=\"Upload progress\" />\n * <Progress value={30} variant=\"success\" striped />\n * ```\n */\nfunction Progress({\n value,\n max = 100,\n label,\n showValue = false,\n formatValue,\n size,\n variant,\n animated,\n striped,\n className,\n indeterminate = false,\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const progressId = React.useId();\n\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`;\n\n return (\n <div data-slot=\"progress\" className={cn('w-full', className)}>\n {(label || showValue) && (\n <div\n data-slot=\"progress-label-row\"\n className=\"mb-1.5 flex items-center justify-between\"\n >\n {label && (\n <label\n data-slot=\"progress-label\"\n id={`${progressId}-label`}\n className=\"text-foreground text-sm font-medium\"\n >\n {label}\n </label>\n )}\n {showValue && !indeterminate && (\n <span\n data-slot=\"progress-value\"\n className=\"text-sm text-neutral-600 dark:text-neutral-400\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n <div\n data-slot=\"progress-track\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-labelledby={label ? `${progressId}-label` : undefined}\n aria-label={!label ? 'Progress' : undefined}\n className={cn(progressBarTrackVariants({ size }))}\n >\n <div\n data-slot=\"progress-fill\"\n className={cn(\n progressBarFillVariants({ variant, animated, striped }),\n indeterminate &&\n 'w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]',\n !striped && variant === 'default' && 'bg-primary-800',\n !striped && variant === 'success' && 'bg-green-500',\n !striped && variant === 'warning' && 'bg-yellow-500',\n !striped && variant === 'danger' && 'bg-red-500'\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = 'Progress';\n\n// ============================================================================\n// Circular Progress Variants\n// ============================================================================\n\nconst circularProgressVariants = cva(['relative inline-flex'], {\n variants: {\n size: {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Circular Progress Component\n// ============================================================================\n\nexport interface CircularProgressProps extends VariantProps<\n typeof circularProgressVariants\n> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Stroke width */\n strokeWidth?: number;\n /** Show the percentage value in the center */\n showValue?: boolean;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A circular progress indicator component.\n *\n * @example\n * ```tsx\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={50} variant=\"success\" size=\"lg\" />\n * ```\n */\nfunction CircularProgress({\n value,\n max = 100,\n variant = 'default',\n size,\n strokeWidth = 4,\n showValue = false,\n indeterminate = false,\n className,\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // SVG calculations\n const sizeMap = { sm: 32, md: 48, lg: 64, xl: 96 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const variantColors = {\n default: 'stroke-primary-500',\n success: 'stroke-green-500',\n warning: 'stroke-yellow-500',\n danger: 'stroke-red-500',\n };\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label=\"Progress\"\n className={cn(circularProgressVariants({ size }), className)}\n >\n <svg\n aria-hidden=\"true\"\n className={cn('-rotate-90 transform', indeterminate && 'animate-spin')}\n width={svgSize}\n height={svgSize}\n >\n {/* Background track */}\n <circle\n className=\"stroke-neutral-200 dark:stroke-neutral-700\"\n fill=\"none\"\n strokeWidth={strokeWidth}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n />\n {/* Progress fill */}\n <circle\n className={cn(\n variantColors[variant],\n 'transition-all duration-300 ease-out'\n )}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n data-slot=\"circular-progress-value\"\n className=\"text-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\"\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n}\n\nCircularProgress.displayName = 'CircularProgress';\n\nexport {\n Progress,\n CircularProgress,\n progressBarTrackVariants,\n progressBarFillVariants,\n circularProgressVariants,\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkKJPOFUF5_cjs = require('./chunk-KJPOFUF5.cjs');
4
- var chunkA2QVQF54_cjs = require('./chunk-A2QVQF54.cjs');
5
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
3
+ var chunkP2VTQ5AR_cjs = require('./chunk-P2VTQ5AR.cjs');
4
+ var chunkM26KJKZG_cjs = require('./chunk-M26KJKZG.cjs');
5
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
8
  function AlertDialog({
@@ -28,7 +28,7 @@ function AlertDialog({
28
28
  onAction?.();
29
29
  };
30
30
  return /* @__PURE__ */ jsxRuntime.jsxs(
31
- chunkKJPOFUF5_cjs.Modal,
31
+ chunkP2VTQ5AR_cjs.Modal,
32
32
  {
33
33
  open,
34
34
  onOpenChange,
@@ -38,7 +38,7 @@ function AlertDialog({
38
38
  className,
39
39
  "aria-label": typeof title === "string" ? title : void 0,
40
40
  children: [
41
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJPOFUF5_cjs.ModalBody, { className: "px-6 py-5", children: [
41
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalBody, { className: "px-6 py-5", children: [
42
42
  /* @__PURE__ */ jsxRuntime.jsx(
43
43
  "h2",
44
44
  {
@@ -51,16 +51,16 @@ function AlertDialog({
51
51
  "p",
52
52
  {
53
53
  "data-slot": "alert-dialog-description",
54
- className: chunkOR5DRJCW_cjs.cn("text-muted-foreground mt-2 text-sm"),
54
+ className: chunkS5RVSXDV_cjs.cn("text-muted-foreground mt-2 text-sm"),
55
55
  children: description
56
56
  }
57
57
  ),
58
58
  children
59
59
  ] }),
60
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJPOFUF5_cjs.ModalFooter, { children: [
61
- !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(chunkA2QVQF54_cjs.Button, { variant: "secondary", onClick: handleCancel, children: cancelLabel }),
60
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalFooter, { children: [
61
+ !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(chunkM26KJKZG_cjs.Button, { variant: "secondary", onClick: handleCancel, children: cancelLabel }),
62
62
  /* @__PURE__ */ jsxRuntime.jsx(
63
- chunkA2QVQF54_cjs.Button,
63
+ chunkM26KJKZG_cjs.Button,
64
64
  {
65
65
  variant: variant === "destructive" ? "danger" : "primary",
66
66
  onClick: handleAction,
@@ -76,5 +76,5 @@ function AlertDialog({
76
76
  AlertDialog.displayName = "AlertDialog";
77
77
 
78
78
  exports.AlertDialog = AlertDialog;
79
- //# sourceMappingURL=chunk-6ZYE6JUK.cjs.map
80
- //# sourceMappingURL=chunk-6ZYE6JUK.cjs.map
79
+ //# sourceMappingURL=chunk-CKRRJO7T.cjs.map
80
+ //# sourceMappingURL=chunk-CKRRJO7T.cjs.map