@misael703/ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +462 -0
  3. package/dist/brand.d.mts +46 -0
  4. package/dist/brand.d.ts +46 -0
  5. package/dist/brand.js +24 -0
  6. package/dist/brand.js.map +1 -0
  7. package/dist/brand.mjs +3 -0
  8. package/dist/brand.mjs.map +1 -0
  9. package/dist/chunk-26KJA67X.js +166 -0
  10. package/dist/chunk-26KJA67X.js.map +1 -0
  11. package/dist/chunk-2JTBLDMK.js +274 -0
  12. package/dist/chunk-2JTBLDMK.js.map +1 -0
  13. package/dist/chunk-2RVSLQEA.mjs +171 -0
  14. package/dist/chunk-2RVSLQEA.mjs.map +1 -0
  15. package/dist/chunk-2UV37SEN.mjs +78 -0
  16. package/dist/chunk-2UV37SEN.mjs.map +1 -0
  17. package/dist/chunk-33PU6AH7.mjs +123 -0
  18. package/dist/chunk-33PU6AH7.mjs.map +1 -0
  19. package/dist/chunk-3PXYCXDW.js +32 -0
  20. package/dist/chunk-3PXYCXDW.js.map +1 -0
  21. package/dist/chunk-3TNBETXR.js +116 -0
  22. package/dist/chunk-3TNBETXR.js.map +1 -0
  23. package/dist/chunk-3UHX7ITQ.mjs +76 -0
  24. package/dist/chunk-3UHX7ITQ.mjs.map +1 -0
  25. package/dist/chunk-4REALDR3.js +4 -0
  26. package/dist/chunk-4REALDR3.js.map +1 -0
  27. package/dist/chunk-55TOQMS2.js +142 -0
  28. package/dist/chunk-55TOQMS2.js.map +1 -0
  29. package/dist/chunk-5GEWIK4T.mjs +27 -0
  30. package/dist/chunk-5GEWIK4T.mjs.map +1 -0
  31. package/dist/chunk-5VMZMDJF.js +145 -0
  32. package/dist/chunk-5VMZMDJF.js.map +1 -0
  33. package/dist/chunk-6II4NJQM.js +127 -0
  34. package/dist/chunk-6II4NJQM.js.map +1 -0
  35. package/dist/chunk-6LOJIU3C.js +84 -0
  36. package/dist/chunk-6LOJIU3C.js.map +1 -0
  37. package/dist/chunk-6MEOR4YO.mjs +45 -0
  38. package/dist/chunk-6MEOR4YO.mjs.map +1 -0
  39. package/dist/chunk-6PEC4RRO.mjs +94 -0
  40. package/dist/chunk-6PEC4RRO.mjs.map +1 -0
  41. package/dist/chunk-7AKN7FDA.mjs +103 -0
  42. package/dist/chunk-7AKN7FDA.mjs.map +1 -0
  43. package/dist/chunk-AAQ7KUZH.mjs +352 -0
  44. package/dist/chunk-AAQ7KUZH.mjs.map +1 -0
  45. package/dist/chunk-ADIKHOEG.js +212 -0
  46. package/dist/chunk-ADIKHOEG.js.map +1 -0
  47. package/dist/chunk-ADQM725E.js +141 -0
  48. package/dist/chunk-ADQM725E.js.map +1 -0
  49. package/dist/chunk-AWYCGJJX.js +102 -0
  50. package/dist/chunk-AWYCGJJX.js.map +1 -0
  51. package/dist/chunk-AZBX7UFI.js +100 -0
  52. package/dist/chunk-AZBX7UFI.js.map +1 -0
  53. package/dist/chunk-BCIZLGM3.mjs +78 -0
  54. package/dist/chunk-BCIZLGM3.mjs.map +1 -0
  55. package/dist/chunk-BMZQ6L2C.js +294 -0
  56. package/dist/chunk-BMZQ6L2C.js.map +1 -0
  57. package/dist/chunk-CHVTPN3K.mjs +3 -0
  58. package/dist/chunk-CHVTPN3K.mjs.map +1 -0
  59. package/dist/chunk-CIBJKJV3.mjs +314 -0
  60. package/dist/chunk-CIBJKJV3.mjs.map +1 -0
  61. package/dist/chunk-CPMQ2DFS.js +197 -0
  62. package/dist/chunk-CPMQ2DFS.js.map +1 -0
  63. package/dist/chunk-CVXS7IHA.js +376 -0
  64. package/dist/chunk-CVXS7IHA.js.map +1 -0
  65. package/dist/chunk-DHCJMYFD.mjs +76 -0
  66. package/dist/chunk-DHCJMYFD.mjs.map +1 -0
  67. package/dist/chunk-DW3XAXHR.mjs +146 -0
  68. package/dist/chunk-DW3XAXHR.mjs.map +1 -0
  69. package/dist/chunk-E2XOUDAH.js +215 -0
  70. package/dist/chunk-E2XOUDAH.js.map +1 -0
  71. package/dist/chunk-EJJDJJEM.js +505 -0
  72. package/dist/chunk-EJJDJJEM.js.map +1 -0
  73. package/dist/chunk-FXM7OKDQ.js +146 -0
  74. package/dist/chunk-FXM7OKDQ.js.map +1 -0
  75. package/dist/chunk-GCW5JYWQ.js +69 -0
  76. package/dist/chunk-GCW5JYWQ.js.map +1 -0
  77. package/dist/chunk-GDFYAUHT.mjs +192 -0
  78. package/dist/chunk-GDFYAUHT.mjs.map +1 -0
  79. package/dist/chunk-GT2KVC2P.mjs +267 -0
  80. package/dist/chunk-GT2KVC2P.mjs.map +1 -0
  81. package/dist/chunk-GVYZAOWU.mjs +142 -0
  82. package/dist/chunk-GVYZAOWU.mjs.map +1 -0
  83. package/dist/chunk-HI3JT6SI.mjs +174 -0
  84. package/dist/chunk-HI3JT6SI.mjs.map +1 -0
  85. package/dist/chunk-HPFJ2A24.js +125 -0
  86. package/dist/chunk-HPFJ2A24.js.map +1 -0
  87. package/dist/chunk-HVUNNL3A.mjs +244 -0
  88. package/dist/chunk-HVUNNL3A.mjs.map +1 -0
  89. package/dist/chunk-HYUINOPJ.js +173 -0
  90. package/dist/chunk-HYUINOPJ.js.map +1 -0
  91. package/dist/chunk-IEPCH3JB.mjs +8 -0
  92. package/dist/chunk-IEPCH3JB.mjs.map +1 -0
  93. package/dist/chunk-IIYQO6BL.js +98 -0
  94. package/dist/chunk-IIYQO6BL.js.map +1 -0
  95. package/dist/chunk-IMFQ55KO.js +131 -0
  96. package/dist/chunk-IMFQ55KO.js.map +1 -0
  97. package/dist/chunk-IVL7P3MF.mjs +105 -0
  98. package/dist/chunk-IVL7P3MF.mjs.map +1 -0
  99. package/dist/chunk-JDOXRLZW.js +138 -0
  100. package/dist/chunk-JDOXRLZW.js.map +1 -0
  101. package/dist/chunk-JMFDIN5R.mjs +64 -0
  102. package/dist/chunk-JMFDIN5R.mjs.map +1 -0
  103. package/dist/chunk-KKOJI25C.mjs +11 -0
  104. package/dist/chunk-KKOJI25C.mjs.map +1 -0
  105. package/dist/chunk-L353APIO.js +131 -0
  106. package/dist/chunk-L353APIO.js.map +1 -0
  107. package/dist/chunk-LIGJBHXU.js +13 -0
  108. package/dist/chunk-LIGJBHXU.js.map +1 -0
  109. package/dist/chunk-LUXTZOTJ.js +204 -0
  110. package/dist/chunk-LUXTZOTJ.js.map +1 -0
  111. package/dist/chunk-ML5IYW5D.mjs +82 -0
  112. package/dist/chunk-ML5IYW5D.mjs.map +1 -0
  113. package/dist/chunk-NLCKWF3Y.mjs +88 -0
  114. package/dist/chunk-NLCKWF3Y.mjs.map +1 -0
  115. package/dist/chunk-NU4GAGUV.js +86 -0
  116. package/dist/chunk-NU4GAGUV.js.map +1 -0
  117. package/dist/chunk-NUURPO3J.mjs +120 -0
  118. package/dist/chunk-NUURPO3J.mjs.map +1 -0
  119. package/dist/chunk-O6FCBNWN.mjs +191 -0
  120. package/dist/chunk-O6FCBNWN.mjs.map +1 -0
  121. package/dist/chunk-OCE4ODTM.mjs +116 -0
  122. package/dist/chunk-OCE4ODTM.mjs.map +1 -0
  123. package/dist/chunk-ORUQ5GCU.mjs +120 -0
  124. package/dist/chunk-ORUQ5GCU.mjs.map +1 -0
  125. package/dist/chunk-PASF6T4H.js +10 -0
  126. package/dist/chunk-PASF6T4H.js.map +1 -0
  127. package/dist/chunk-PCRNKITV.mjs +106 -0
  128. package/dist/chunk-PCRNKITV.mjs.map +1 -0
  129. package/dist/chunk-PSJVU4E4.js +72 -0
  130. package/dist/chunk-PSJVU4E4.js.map +1 -0
  131. package/dist/chunk-PXCH5Z76.mjs +82 -0
  132. package/dist/chunk-PXCH5Z76.mjs.map +1 -0
  133. package/dist/chunk-QHRP73CS.js +106 -0
  134. package/dist/chunk-QHRP73CS.js.map +1 -0
  135. package/dist/chunk-QI6TVWWF.js +121 -0
  136. package/dist/chunk-QI6TVWWF.js.map +1 -0
  137. package/dist/chunk-QSCJ2CER.mjs +480 -0
  138. package/dist/chunk-QSCJ2CER.mjs.map +1 -0
  139. package/dist/chunk-R76YER7O.js +458 -0
  140. package/dist/chunk-R76YER7O.js.map +1 -0
  141. package/dist/chunk-RBJRQ44B.mjs +108 -0
  142. package/dist/chunk-RBJRQ44B.mjs.map +1 -0
  143. package/dist/chunk-RQOTH7I7.js +401 -0
  144. package/dist/chunk-RQOTH7I7.js.map +1 -0
  145. package/dist/chunk-SYX4GZ7E.mjs +134 -0
  146. package/dist/chunk-SYX4GZ7E.mjs.map +1 -0
  147. package/dist/chunk-T4R2LSRL.js +148 -0
  148. package/dist/chunk-T4R2LSRL.js.map +1 -0
  149. package/dist/chunk-TB6EHWRF.mjs +92 -0
  150. package/dist/chunk-TB6EHWRF.mjs.map +1 -0
  151. package/dist/chunk-TEQ67JKX.js +181 -0
  152. package/dist/chunk-TEQ67JKX.js.map +1 -0
  153. package/dist/chunk-TXKFCVCN.mjs +426 -0
  154. package/dist/chunk-TXKFCVCN.mjs.map +1 -0
  155. package/dist/chunk-TZG34EYW.js +74 -0
  156. package/dist/chunk-TZG34EYW.js.map +1 -0
  157. package/dist/chunk-UB2XEZ7C.mjs +72 -0
  158. package/dist/chunk-UB2XEZ7C.mjs.map +1 -0
  159. package/dist/chunk-UIKCTWKG.js +116 -0
  160. package/dist/chunk-UIKCTWKG.js.map +1 -0
  161. package/dist/chunk-UNOPDYA7.js +107 -0
  162. package/dist/chunk-UNOPDYA7.js.map +1 -0
  163. package/dist/chunk-V26K66NP.mjs +49 -0
  164. package/dist/chunk-V26K66NP.mjs.map +1 -0
  165. package/dist/chunk-W6YOBPL5.js +110 -0
  166. package/dist/chunk-W6YOBPL5.js.map +1 -0
  167. package/dist/chunk-X2DBGT7M.mjs +117 -0
  168. package/dist/chunk-X2DBGT7M.mjs.map +1 -0
  169. package/dist/chunk-YBOTLQ3G.mjs +99 -0
  170. package/dist/chunk-YBOTLQ3G.mjs.map +1 -0
  171. package/dist/chunk-Z3FAKG3E.mjs +125 -0
  172. package/dist/chunk-Z3FAKG3E.mjs.map +1 -0
  173. package/dist/chunk-Z4GRQHIG.mjs +177 -0
  174. package/dist/chunk-Z4GRQHIG.mjs.map +1 -0
  175. package/dist/chunk-ZRBVYPKN.js +169 -0
  176. package/dist/chunk-ZRBVYPKN.js.map +1 -0
  177. package/dist/chunk-ZRFSTYRL.mjs +157 -0
  178. package/dist/chunk-ZRFSTYRL.mjs.map +1 -0
  179. package/dist/chunk-ZXSSOEIM.js +197 -0
  180. package/dist/chunk-ZXSSOEIM.js.map +1 -0
  181. package/dist/components/AdvancedPickers.d.mts +77 -0
  182. package/dist/components/AdvancedPickers.d.ts +77 -0
  183. package/dist/components/AdvancedPickers.js +30 -0
  184. package/dist/components/AdvancedPickers.js.map +1 -0
  185. package/dist/components/AdvancedPickers.mjs +9 -0
  186. package/dist/components/AdvancedPickers.mjs.map +1 -0
  187. package/dist/components/AppShell.d.mts +55 -0
  188. package/dist/components/AppShell.d.ts +55 -0
  189. package/dist/components/AppShell.js +19 -0
  190. package/dist/components/AppShell.js.map +1 -0
  191. package/dist/components/AppShell.mjs +6 -0
  192. package/dist/components/AppShell.mjs.map +1 -0
  193. package/dist/components/Button.d.mts +16 -0
  194. package/dist/components/Button.d.ts +16 -0
  195. package/dist/components/Button.js +17 -0
  196. package/dist/components/Button.js.map +1 -0
  197. package/dist/components/Button.mjs +4 -0
  198. package/dist/components/Button.mjs.map +1 -0
  199. package/dist/components/Carousel.d.mts +17 -0
  200. package/dist/components/Carousel.d.ts +17 -0
  201. package/dist/components/Carousel.js +14 -0
  202. package/dist/components/Carousel.js.map +1 -0
  203. package/dist/components/Carousel.mjs +5 -0
  204. package/dist/components/Carousel.mjs.map +1 -0
  205. package/dist/components/Charts.d.mts +96 -0
  206. package/dist/components/Charts.d.ts +96 -0
  207. package/dist/components/Charts.js +29 -0
  208. package/dist/components/Charts.js.map +1 -0
  209. package/dist/components/Charts.mjs +4 -0
  210. package/dist/components/Charts.mjs.map +1 -0
  211. package/dist/components/Code.d.mts +18 -0
  212. package/dist/components/Code.d.ts +18 -0
  213. package/dist/components/Code.js +18 -0
  214. package/dist/components/Code.js.map +1 -0
  215. package/dist/components/Code.mjs +5 -0
  216. package/dist/components/Code.mjs.map +1 -0
  217. package/dist/components/Collapsible.d.mts +12 -0
  218. package/dist/components/Collapsible.d.ts +12 -0
  219. package/dist/components/Collapsible.js +21 -0
  220. package/dist/components/Collapsible.js.map +1 -0
  221. package/dist/components/Collapsible.mjs +4 -0
  222. package/dist/components/Collapsible.mjs.map +1 -0
  223. package/dist/components/Comments.d.mts +41 -0
  224. package/dist/components/Comments.d.ts +41 -0
  225. package/dist/components/Comments.js +25 -0
  226. package/dist/components/Comments.js.map +1 -0
  227. package/dist/components/Comments.mjs +8 -0
  228. package/dist/components/Comments.mjs.map +1 -0
  229. package/dist/components/Commerce.d.mts +159 -0
  230. package/dist/components/Commerce.d.ts +159 -0
  231. package/dist/components/Commerce.js +58 -0
  232. package/dist/components/Commerce.js.map +1 -0
  233. package/dist/components/Commerce.mjs +9 -0
  234. package/dist/components/Commerce.mjs.map +1 -0
  235. package/dist/components/ContextMenu.d.mts +22 -0
  236. package/dist/components/ContextMenu.d.ts +22 -0
  237. package/dist/components/ContextMenu.js +13 -0
  238. package/dist/components/ContextMenu.js.map +1 -0
  239. package/dist/components/ContextMenu.mjs +4 -0
  240. package/dist/components/ContextMenu.mjs.map +1 -0
  241. package/dist/components/DataTable.d.mts +121 -0
  242. package/dist/components/DataTable.d.ts +121 -0
  243. package/dist/components/DataTable.js +38 -0
  244. package/dist/components/DataTable.js.map +1 -0
  245. package/dist/components/DataTable.mjs +9 -0
  246. package/dist/components/DataTable.mjs.map +1 -0
  247. package/dist/components/Display.d.mts +56 -0
  248. package/dist/components/Display.d.ts +56 -0
  249. package/dist/components/Display.js +55 -0
  250. package/dist/components/Display.js.map +1 -0
  251. package/dist/components/Display.mjs +6 -0
  252. package/dist/components/Display.mjs.map +1 -0
  253. package/dist/components/Display2.d.mts +54 -0
  254. package/dist/components/Display2.d.ts +54 -0
  255. package/dist/components/Display2.js +26 -0
  256. package/dist/components/Display2.js.map +1 -0
  257. package/dist/components/Display2.mjs +5 -0
  258. package/dist/components/Display2.mjs.map +1 -0
  259. package/dist/components/Display3.d.mts +58 -0
  260. package/dist/components/Display3.d.ts +58 -0
  261. package/dist/components/Display3.js +36 -0
  262. package/dist/components/Display3.js.map +1 -0
  263. package/dist/components/Display3.mjs +7 -0
  264. package/dist/components/Display3.mjs.map +1 -0
  265. package/dist/components/Editing.d.mts +52 -0
  266. package/dist/components/Editing.d.ts +52 -0
  267. package/dist/components/Editing.js +33 -0
  268. package/dist/components/Editing.js.map +1 -0
  269. package/dist/components/Editing.mjs +8 -0
  270. package/dist/components/Editing.mjs.map +1 -0
  271. package/dist/components/Filters.d.mts +37 -0
  272. package/dist/components/Filters.d.ts +37 -0
  273. package/dist/components/Filters.js +28 -0
  274. package/dist/components/Filters.js.map +1 -0
  275. package/dist/components/Filters.mjs +7 -0
  276. package/dist/components/Filters.mjs.map +1 -0
  277. package/dist/components/Form.d.mts +55 -0
  278. package/dist/components/Form.d.ts +55 -0
  279. package/dist/components/Form.js +50 -0
  280. package/dist/components/Form.js.map +1 -0
  281. package/dist/components/Form.mjs +5 -0
  282. package/dist/components/Form.mjs.map +1 -0
  283. package/dist/components/Gallery.d.mts +28 -0
  284. package/dist/components/Gallery.d.ts +28 -0
  285. package/dist/components/Gallery.js +20 -0
  286. package/dist/components/Gallery.js.map +1 -0
  287. package/dist/components/Gallery.mjs +7 -0
  288. package/dist/components/Gallery.mjs.map +1 -0
  289. package/dist/components/HoverCard.d.mts +17 -0
  290. package/dist/components/HoverCard.d.ts +17 -0
  291. package/dist/components/HoverCard.js +13 -0
  292. package/dist/components/HoverCard.js.map +1 -0
  293. package/dist/components/HoverCard.mjs +4 -0
  294. package/dist/components/HoverCard.mjs.map +1 -0
  295. package/dist/components/Icons.d.mts +84 -0
  296. package/dist/components/Icons.d.ts +84 -0
  297. package/dist/components/Icons.js +272 -0
  298. package/dist/components/Icons.js.map +1 -0
  299. package/dist/components/Icons.mjs +3 -0
  300. package/dist/components/Icons.mjs.map +1 -0
  301. package/dist/components/InputOTP.d.mts +17 -0
  302. package/dist/components/InputOTP.d.ts +17 -0
  303. package/dist/components/InputOTP.js +13 -0
  304. package/dist/components/InputOTP.js.map +1 -0
  305. package/dist/components/InputOTP.mjs +4 -0
  306. package/dist/components/InputOTP.mjs.map +1 -0
  307. package/dist/components/Inputs.d.mts +45 -0
  308. package/dist/components/Inputs.d.ts +45 -0
  309. package/dist/components/Inputs.js +28 -0
  310. package/dist/components/Inputs.js.map +1 -0
  311. package/dist/components/Inputs.mjs +7 -0
  312. package/dist/components/Inputs.mjs.map +1 -0
  313. package/dist/components/InputsExtra.d.mts +98 -0
  314. package/dist/components/InputsExtra.d.ts +98 -0
  315. package/dist/components/InputsExtra.js +49 -0
  316. package/dist/components/InputsExtra.js.map +1 -0
  317. package/dist/components/InputsExtra.mjs +8 -0
  318. package/dist/components/InputsExtra.mjs.map +1 -0
  319. package/dist/components/Layout.d.mts +83 -0
  320. package/dist/components/Layout.d.ts +83 -0
  321. package/dist/components/Layout.js +78 -0
  322. package/dist/components/Layout.js.map +1 -0
  323. package/dist/components/Layout.mjs +5 -0
  324. package/dist/components/Layout.mjs.map +1 -0
  325. package/dist/components/Logo.d.mts +38 -0
  326. package/dist/components/Logo.d.ts +38 -0
  327. package/dist/components/Logo.js +14 -0
  328. package/dist/components/Logo.js.map +1 -0
  329. package/dist/components/Logo.mjs +5 -0
  330. package/dist/components/Logo.mjs.map +1 -0
  331. package/dist/components/Marketing.d.mts +46 -0
  332. package/dist/components/Marketing.d.ts +46 -0
  333. package/dist/components/Marketing.js +22 -0
  334. package/dist/components/Marketing.js.map +1 -0
  335. package/dist/components/Marketing.mjs +5 -0
  336. package/dist/components/Marketing.mjs.map +1 -0
  337. package/dist/components/Menubar.d.mts +24 -0
  338. package/dist/components/Menubar.d.ts +24 -0
  339. package/dist/components/Menubar.js +13 -0
  340. package/dist/components/Menubar.js.map +1 -0
  341. package/dist/components/Menubar.mjs +4 -0
  342. package/dist/components/Menubar.mjs.map +1 -0
  343. package/dist/components/NavigationMenu.d.mts +28 -0
  344. package/dist/components/NavigationMenu.d.ts +28 -0
  345. package/dist/components/NavigationMenu.js +14 -0
  346. package/dist/components/NavigationMenu.js.map +1 -0
  347. package/dist/components/NavigationMenu.mjs +5 -0
  348. package/dist/components/NavigationMenu.mjs.map +1 -0
  349. package/dist/components/Notifications.d.mts +25 -0
  350. package/dist/components/Notifications.d.ts +25 -0
  351. package/dist/components/Notifications.js +16 -0
  352. package/dist/components/Notifications.js.map +1 -0
  353. package/dist/components/Notifications.mjs +7 -0
  354. package/dist/components/Notifications.mjs.map +1 -0
  355. package/dist/components/Overlay.d.mts +20 -0
  356. package/dist/components/Overlay.d.ts +20 -0
  357. package/dist/components/Overlay.js +19 -0
  358. package/dist/components/Overlay.js.map +1 -0
  359. package/dist/components/Overlay.mjs +6 -0
  360. package/dist/components/Overlay.mjs.map +1 -0
  361. package/dist/components/Permissions.d.mts +23 -0
  362. package/dist/components/Permissions.d.ts +23 -0
  363. package/dist/components/Permissions.js +17 -0
  364. package/dist/components/Permissions.js.map +1 -0
  365. package/dist/components/Permissions.mjs +8 -0
  366. package/dist/components/Permissions.mjs.map +1 -0
  367. package/dist/components/Pickers.d.mts +54 -0
  368. package/dist/components/Pickers.d.ts +54 -0
  369. package/dist/components/Pickers.js +25 -0
  370. package/dist/components/Pickers.js.map +1 -0
  371. package/dist/components/Pickers.mjs +8 -0
  372. package/dist/components/Pickers.mjs.map +1 -0
  373. package/dist/components/Popover.d.mts +23 -0
  374. package/dist/components/Popover.d.ts +23 -0
  375. package/dist/components/Popover.js +13 -0
  376. package/dist/components/Popover.js.map +1 -0
  377. package/dist/components/Popover.mjs +4 -0
  378. package/dist/components/Popover.mjs.map +1 -0
  379. package/dist/components/Primitives.d.mts +18 -0
  380. package/dist/components/Primitives.d.ts +18 -0
  381. package/dist/components/Primitives.js +21 -0
  382. package/dist/components/Primitives.js.map +1 -0
  383. package/dist/components/Primitives.mjs +4 -0
  384. package/dist/components/Primitives.mjs.map +1 -0
  385. package/dist/components/Resizable.d.mts +27 -0
  386. package/dist/components/Resizable.d.ts +27 -0
  387. package/dist/components/Resizable.js +21 -0
  388. package/dist/components/Resizable.js.map +1 -0
  389. package/dist/components/Resizable.mjs +4 -0
  390. package/dist/components/Resizable.mjs.map +1 -0
  391. package/dist/components/Toast.d.mts +21 -0
  392. package/dist/components/Toast.d.ts +21 -0
  393. package/dist/components/Toast.js +19 -0
  394. package/dist/components/Toast.js.map +1 -0
  395. package/dist/components/Toast.mjs +6 -0
  396. package/dist/components/Toast.mjs.map +1 -0
  397. package/dist/components/Toggle.d.mts +42 -0
  398. package/dist/components/Toggle.d.ts +42 -0
  399. package/dist/components/Toggle.js +21 -0
  400. package/dist/components/Toggle.js.map +1 -0
  401. package/dist/components/Toggle.mjs +4 -0
  402. package/dist/components/Toggle.mjs.map +1 -0
  403. package/dist/fonts/DMSans-VariableFont_wght.woff2 +0 -0
  404. package/dist/fonts/OFL.txt +98 -0
  405. package/dist/fonts/Outfit-VariableFont_wght.woff2 +0 -0
  406. package/dist/fonts.css +1 -0
  407. package/dist/index.d.mts +43 -0
  408. package/dist/index.d.ts +43 -0
  409. package/dist/index.js +926 -0
  410. package/dist/index.js.map +1 -0
  411. package/dist/index.mjs +45 -0
  412. package/dist/index.mjs.map +1 -0
  413. package/dist/locale/index.d.mts +174 -0
  414. package/dist/locale/index.d.ts +174 -0
  415. package/dist/locale/index.js +26 -0
  416. package/dist/locale/index.js.map +1 -0
  417. package/dist/locale/index.mjs +5 -0
  418. package/dist/locale/index.mjs.map +1 -0
  419. package/dist/presets/elalba/defaults.d.mts +24 -0
  420. package/dist/presets/elalba/defaults.d.ts +24 -0
  421. package/dist/presets/elalba/defaults.js +13 -0
  422. package/dist/presets/elalba/defaults.js.map +1 -0
  423. package/dist/presets/elalba/defaults.mjs +11 -0
  424. package/dist/presets/elalba/defaults.mjs.map +1 -0
  425. package/dist/presets/elalba/logos/logo-horizontal-dark.png +0 -0
  426. package/dist/presets/elalba/logos/logo-horizontal-dark.svg +58 -0
  427. package/dist/presets/elalba/logos/logo-horizontal-light.png +0 -0
  428. package/dist/presets/elalba/logos/logo-horizontal-light.svg +68 -0
  429. package/dist/presets/elalba/logos/logo-vertical-dark.png +0 -0
  430. package/dist/presets/elalba/logos/logo-vertical-dark.svg +58 -0
  431. package/dist/presets/elalba/logos/logo-vertical-light.png +0 -0
  432. package/dist/presets/elalba/logos/logo-vertical-light.svg +68 -0
  433. package/dist/presets/elalba/logos/mark-dark.png +0 -0
  434. package/dist/presets/elalba/logos/mark-dark.svg +27 -0
  435. package/dist/presets/elalba/logos/mark-light.png +0 -0
  436. package/dist/presets/elalba/logos/mark-light.svg +27 -0
  437. package/dist/presets/elalba/logos/wordmark-dark.png +0 -0
  438. package/dist/presets/elalba/logos/wordmark-dark.svg +36 -0
  439. package/dist/presets/elalba/logos/wordmark-light.png +0 -0
  440. package/dist/presets/elalba/logos/wordmark-light.svg +36 -0
  441. package/dist/presets/elalba/styles.css +1 -0
  442. package/dist/styles.css +1 -0
  443. package/dist/tokens.css +1 -0
  444. package/dist/utils/cx.d.mts +3 -0
  445. package/dist/utils/cx.d.ts +3 -0
  446. package/dist/utils/cx.js +12 -0
  447. package/dist/utils/cx.js.map +1 -0
  448. package/dist/utils/cx.mjs +3 -0
  449. package/dist/utils/cx.mjs.map +1 -0
  450. package/dist/utils/dateFormat.d.mts +35 -0
  451. package/dist/utils/dateFormat.d.ts +35 -0
  452. package/dist/utils/dateFormat.js +29 -0
  453. package/dist/utils/dateFormat.js.map +1 -0
  454. package/dist/utils/dateFormat.mjs +4 -0
  455. package/dist/utils/dateFormat.mjs.map +1 -0
  456. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Commerce.tsx"],"names":[],"mappings":"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","file":"chunk-TXKFCVCN.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Drawer } from './Overlay';\nimport { Heart, Minus, Plus, Star, Trash, X, Check } from './Icons';\nimport { getBrand } from '../brand';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- Rating ------------------------------------------------------\nexport interface RatingProps {\n value: number; // 0..max\n max?: number; // default 5\n /** Si se pasa, se vuelve interactivo. */\n onChange?: (value: number) => void;\n size?: number;\n /** Permite medias estrellas (display only). */\n allowHalf?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Rating({\n value, max = 5, onChange, size = 16, allowHalf = true, className, ariaLabel,\n}: RatingProps) {\n const isInteractive = !!onChange;\n return (\n <div\n className={cx('rating', isInteractive && 'rating--interactive', className)}\n role={isInteractive ? 'slider' : 'img'}\n aria-label={ariaLabel ?? `${value} de ${max} estrellas`}\n aria-valuenow={isInteractive ? value : undefined}\n aria-valuemin={isInteractive ? 0 : undefined}\n aria-valuemax={isInteractive ? max : undefined}\n >\n {Array.from({ length: max }, (_, i) => {\n const idx = i + 1;\n const fill = value >= idx ? 1 : (allowHalf && value >= idx - 0.5 ? 0.5 : 0);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('rating__star', fill === 1 && 'is-full', fill === 0.5 && 'is-half')}\n disabled={!isInteractive}\n onClick={() => onChange?.(idx)}\n aria-label={`${idx} ${idx === 1 ? 'estrella' : 'estrellas'}`}\n >\n <Star size={size} />\n </button>\n );\n })}\n </div>\n );\n}\n\n// ---------- PriceDisplay -----------------------------------------------\nexport interface PriceDisplayProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n amount: number;\n /** Precio original tachado (para descuentos). */\n compareAt?: number;\n /** ISO 4217. Default desde `getBrand().currency`. */\n currency?: string;\n /** BCP 47. Default desde `getBrand().locale`. */\n locale?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Muestra \"% off\" si hay compareAt. Default: true. */\n showDiscount?: boolean;\n}\n\nexport function PriceDisplay({\n amount, compareAt, currency, locale,\n size = 'md', showDiscount = true, className, ...rest\n}: PriceDisplayProps) {\n const brand = getBrand();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const hasDiscount = compareAt != null && compareAt > amount;\n const discount = hasDiscount ? Math.round(((compareAt - amount) / compareAt) * 100) : 0;\n\n return (\n <div className={cx('price', `price--${size}`, className)} {...rest}>\n <span className=\"price__amount\">{fmt(amount)}</span>\n {hasDiscount && (\n <>\n <span className=\"price__compare\"><del>{fmt(compareAt)}</del></span>\n {showDiscount && discount > 0 && (\n <span className=\"price__discount\">-{discount}%</span>\n )}\n </>\n )}\n </div>\n );\n}\n\n// ---------- QuantitySelector (compacto) --------------------------------\nexport interface QuantitySelectorProps {\n value: number;\n onChange: (v: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n id?: string;\n}\n\nexport function QuantitySelector({\n value, onChange, min = 1, max, step = 1, disabled, size = 'md', className, id,\n}: QuantitySelectorProps) {\n const t = useLocale();\n const set = (next: number) => {\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange(v);\n };\n const dec = () => set(value - step);\n const inc = () => set(value + step);\n return (\n <div className={cx('qty', `qty--${size}`, disabled && 'is-disabled', className)}>\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.decreaseQty']}\n onClick={dec}\n disabled={disabled || (typeof min === 'number' && value <= min)}\n >\n <Minus size={14} />\n </button>\n <input\n id={id}\n type=\"number\"\n className=\"qty__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(Number(e.target.value))}\n aria-label={t['commerce.quantity']}\n />\n <button\n type=\"button\"\n className=\"qty__btn\"\n aria-label={t['commerce.increaseQty']}\n onClick={inc}\n disabled={disabled || (typeof max === 'number' && value >= max)}\n >\n <Plus size={14} />\n </button>\n </div>\n );\n}\n\n// ---------- VariantSelector --------------------------------------------\nexport interface VariantOption<T = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n /** Color hex/rgb para chips de tipo \"color\". */\n swatch?: string;\n}\n\nexport interface VariantSelectorProps<T = string> {\n label?: React.ReactNode;\n options: VariantOption<T>[];\n value: T | null;\n onChange: (value: T) => void;\n /** 'chip' (default), 'swatch' (círculos de color). */\n appearance?: 'chip' | 'swatch';\n className?: string;\n}\n\nexport function VariantSelector<T extends string | number = string>({\n label, options, value, onChange, appearance = 'chip', className,\n}: VariantSelectorProps<T>) {\n return (\n <div className={cx('variants', className)}>\n {label && <div className=\"variants__label\">{label}</div>}\n <div className={cx('variants__options', `variants__options--${appearance}`)} role=\"radiogroup\">\n {options.map((o) => {\n const selected = value === o.value;\n if (appearance === 'swatch') {\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__swatch', selected && 'is-selected', o.disabled && 'is-disabled')}\n style={{ background: o.swatch }}\n title={typeof o.label === 'string' ? o.label : String(o.value)}\n aria-label={typeof o.label === 'string' ? o.label : String(o.value)}\n onClick={() => onChange(o.value)}\n >\n {selected && <Check size={14} />}\n </button>\n );\n }\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={o.disabled}\n className={cx('variants__chip', selected && 'is-selected', o.disabled && 'is-disabled')}\n onClick={() => onChange(o.value)}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ---------- WishlistButton ---------------------------------------------\nexport interface WishlistButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n active?: boolean;\n onToggle?: (next: boolean) => void;\n size?: number;\n}\n\nexport function WishlistButton({ active = false, onToggle, size = 20, className, ...rest }: WishlistButtonProps) {\n const t = useLocale();\n return (\n <button\n type=\"button\"\n className={cx('wishlist', active && 'is-active', className)}\n aria-label={active ? t['commerce.removeFavorite'] : t['commerce.addFavorite']}\n aria-pressed={active}\n onClick={() => onToggle?.(!active)}\n {...rest}\n >\n <Heart size={size} />\n </button>\n );\n}\n\n// ---------- PromoCodeInput ---------------------------------------------\nexport interface PromoCodeInputProps {\n /** Validador async. Resuelve con un mensaje de éxito o lanza un Error con el mensaje. */\n onApply: (code: string) => Promise<string>;\n placeholder?: string;\n buttonLabel?: string;\n className?: string;\n id?: string;\n}\n\nexport function PromoCodeInput({\n onApply, placeholder,\n buttonLabel, className, id,\n}: PromoCodeInputProps) {\n const [code, setCode] = React.useState('');\n const [state, setState] = React.useState<'idle' | 'loading' | 'success' | 'error'>('idle');\n const [message, setMessage] = React.useState<string | null>(null);\n const t = useLocale();\n const ph = placeholder ?? t['commerce.promoPlaceholder'];\n const btn = buttonLabel ?? t['commerce.applyCoupon'];\n\n const apply = async () => {\n if (!code.trim()) return;\n setState('loading');\n setMessage(null);\n try {\n const msg = await onApply(code.trim());\n setState('success');\n setMessage(msg);\n } catch (err) {\n setState('error');\n setMessage(err instanceof Error ? err.message : t['commerce.promoInvalid']);\n }\n };\n\n return (\n <div className={cx('promo', state === 'success' && 'is-success', state === 'error' && 'is-error', className)}>\n <div className=\"promo__row\">\n <input\n id={id}\n type=\"text\"\n className=\"input promo__input\"\n value={code}\n placeholder={ph}\n disabled={state === 'loading' || state === 'success'}\n onChange={(e) => { setCode(e.target.value.toUpperCase()); if (state !== 'idle') setState('idle'); }}\n onKeyDown={(e) => e.key === 'Enter' && apply()}\n />\n <button\n type=\"button\"\n className=\"btn btn--primary btn--md\"\n disabled={!code.trim() || state === 'loading' || state === 'success'}\n onClick={apply}\n >\n {state === 'loading' ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : btn}\n </button>\n </div>\n {message && <div className={cx('promo__message', `promo__message--${state}`)}>{message}</div>}\n </div>\n );\n}\n\n// ---------- FreeShippingProgress ---------------------------------------\nexport interface FreeShippingProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Subtotal actual del cart. */\n current: number;\n /** Threshold para envío gratis. */\n threshold: number;\n currency?: string;\n locale?: string;\n achievedMessage?: React.ReactNode;\n}\n\nexport function FreeShippingProgress({\n current, threshold, currency, locale,\n achievedMessage,\n className, ...rest\n}: FreeShippingProgressProps) {\n const brand = getBrand();\n const t = useLocale();\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale ?? brand.locale, { style: 'currency', currency: currency ?? brand.currency, maximumFractionDigits: 0 }).format(n);\n\n const pct = Math.min(100, (current / threshold) * 100);\n const remaining = Math.max(0, threshold - current);\n const achieved = current >= threshold;\n const successMsg = achievedMessage ?? t['commerce.shippingAchieved'];\n\n return (\n <div className={cx('shipping-progress', achieved && 'is-achieved', className)} {...rest}>\n <div className=\"shipping-progress__text\">\n {achieved ? successMsg : <>{t['commerce.shippingPrefix']}<strong>{fmt(remaining)}</strong>{t['commerce.shippingSuffix']}</>}\n </div>\n <div className=\"shipping-progress__track\" aria-hidden=\"true\">\n <div className=\"shipping-progress__bar\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n}\n\n// ---------- CartDrawer + line items ------------------------------------\nexport interface CartLineItem {\n id: string;\n name: React.ReactNode;\n variant?: React.ReactNode;\n image?: string;\n unitPrice: number;\n quantity: number;\n}\n\nexport interface CartDrawerProps {\n open: boolean;\n onClose: () => void;\n items: CartLineItem[];\n onQuantityChange?: (id: string, qty: number) => void;\n onRemove?: (id: string) => void;\n onCheckout?: () => void;\n freeShippingThreshold?: number;\n currency?: string;\n locale?: string;\n}\n\nexport function CartDrawer({\n open, onClose, items,\n onQuantityChange, onRemove, onCheckout,\n freeShippingThreshold, currency, locale,\n}: CartDrawerProps) {\n const brand = getBrand();\n const t = useLocale();\n const resolvedCurrency = currency ?? brand.currency;\n const resolvedLocale = locale ?? brand.locale;\n const subtotal = items.reduce((sum, it) => sum + it.unitPrice * it.quantity, 0);\n const fmt = (n: number) =>\n new Intl.NumberFormat(resolvedLocale, { style: 'currency', currency: resolvedCurrency, maximumFractionDigits: 0 }).format(n);\n\n return (\n <Drawer\n open={open}\n onClose={onClose}\n title={t['commerce.cartTitle']}\n footer={\n <div className=\"cart__footer\">\n {freeShippingThreshold != null && (\n <FreeShippingProgress current={subtotal} threshold={freeShippingThreshold} currency={resolvedCurrency} locale={resolvedLocale} />\n )}\n <div className=\"cart__totals\">\n <span>{t['commerce.subtotal']}</span>\n <strong>{fmt(subtotal)}</strong>\n </div>\n <button type=\"button\" className=\"btn btn--primary btn--lg btn--block\" disabled={items.length === 0} onClick={onCheckout}>\n {t['commerce.checkout']}\n </button>\n </div>\n }\n >\n {items.length === 0 ? (\n <div className=\"cart__empty\">{t['commerce.cartEmpty']}</div>\n ) : (\n <ul className=\"cart__list\">\n {items.map((it) => (\n <li key={it.id} className=\"cart__item\">\n <div className=\"cart__item-media\">\n {it.image ? <img src={it.image} alt=\"\" /> : <div className=\"cart__item-placeholder\" />}\n </div>\n <div className=\"cart__item-body\">\n <div className=\"cart__item-name\">{it.name}</div>\n {it.variant && <div className=\"cart__item-variant\">{it.variant}</div>}\n <div className=\"cart__item-price\">{fmt(it.unitPrice)}</div>\n </div>\n <div className=\"cart__item-actions\">\n {onQuantityChange ? (\n <QuantitySelector\n size=\"sm\"\n value={it.quantity}\n onChange={(q) => onQuantityChange(it.id, q)}\n />\n ) : (\n <span className=\"cart__item-qty\">x{it.quantity}</span>\n )}\n {onRemove && (\n <button\n type=\"button\"\n className=\"cart__item-remove\"\n aria-label={t['commerce.removeFromCart']}\n onClick={() => onRemove(it.id)}\n >\n <Trash size={14} />\n </button>\n )}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Drawer>\n );\n}\n\n// ---------- OrderSummary ------------------------------------------------\nexport interface OrderLineRow {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Aplica estilo de total (negrita, más grande). */\n emphasis?: boolean;\n}\n\nexport interface OrderSummaryProps extends Omit<React.HTMLAttributes<HTMLDListElement>, 'title'> {\n rows: OrderLineRow[];\n title?: React.ReactNode;\n}\n\nexport function OrderSummary({ rows, title, className, ...rest }: OrderSummaryProps) {\n return (\n <div className={cx('order-summary', className)}>\n {title && <div className=\"order-summary__title\">{title}</div>}\n <dl className=\"order-summary__list\" {...rest}>\n {rows.map((r, i) => (\n <div key={i} className={cx('order-summary__row', r.emphasis && 'is-emphasis')}>\n <dt>{r.label}</dt>\n <dd>{r.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\n// ---------- AddressForm (generic field composer) -----------------------\n// The kit doesn't ship country-specific fields. Consumers pass a `fields`\n// array describing which inputs to render and the order. For Chile, that\n// means defining `[{ key: 'rut', ... }, { key: 'comuna', ... }, ...]` in\n// app code. For other markets, define different fields.\n//\n// Layout: each field declares its `width` ('full' | 'half' | 'third').\n// The form renders in a 6-column CSS grid, where 'full' spans 6, 'half'\n// spans 3, and 'third' spans 2. On narrow viewports everything stacks.\n\nexport interface AddressFieldOption {\n value: string;\n label: React.ReactNode;\n}\n\nexport interface AddressField {\n /** Key del campo en el objeto `value`. */\n key: string;\n label: React.ReactNode;\n type?: 'text' | 'select' | 'textarea';\n placeholder?: string;\n /** Solo para `type: 'select'`. */\n options?: readonly AddressFieldOption[];\n /** Placeholder de la opción vacía. Default: 'Selecciona…' (locale: `common.search` no aplica). */\n selectPlaceholder?: string;\n /** Anchura en una grilla de 6 columnas. Default: 'full'. */\n width?: 'full' | 'half' | 'third';\n /** Solo para `type: 'textarea'`. */\n rows?: number;\n}\n\nexport interface AddressFormProps {\n fields: AddressField[];\n value: Record<string, string>;\n onChange: (value: Record<string, string>) => void;\n className?: string;\n}\n\nexport function AddressForm({ fields, value, onChange, className }: AddressFormProps) {\n const reactId = React.useId();\n const set = (key: string, v: string) => onChange({ ...value, [key]: v });\n\n return (\n <div className={cx('address-form', className)}>\n {fields.map((f) => {\n const id = `${reactId}-${f.key}`;\n const width = f.width ?? 'full';\n const v = value[f.key] ?? '';\n return (\n <div key={f.key} className={cx('form-field', `address-form__field--${width}`)}>\n <label className=\"label\" htmlFor={id}>{f.label}</label>\n {f.type === 'select' ? (\n <select\n id={id}\n className=\"select\"\n value={v}\n onChange={(e) => set(f.key, e.target.value)}\n >\n <option value=\"\">{f.selectPlaceholder ?? 'Selecciona…'}</option>\n {f.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {typeof o.label === 'string' ? o.label : o.value}\n </option>\n ))}\n </select>\n ) : f.type === 'textarea' ? (\n <textarea\n id={id}\n className=\"textarea\"\n value={v}\n placeholder={f.placeholder}\n rows={f.rows ?? 2}\n onChange={(e) => set(f.key, e.target.value)}\n />\n ) : (\n <input\n id={id}\n className=\"input\"\n value={v}\n placeholder={f.placeholder}\n onChange={(e) => set(f.key, e.target.value)}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n// ---------- CompareTable -----------------------------------------------\nexport interface CompareItem {\n id: string;\n name: React.ReactNode;\n image?: string;\n price?: React.ReactNode;\n}\n\nexport interface CompareAttribute {\n key: string;\n label: React.ReactNode;\n /** Valor por item, indexado por id. */\n values: Record<string, React.ReactNode>;\n}\n\nexport interface CompareTableProps extends React.HTMLAttributes<HTMLTableElement> {\n items: CompareItem[];\n attributes: CompareAttribute[];\n onRemove?: (id: string) => void;\n}\n\nexport function CompareTable({ items, attributes, onRemove, className, ...rest }: CompareTableProps) {\n const t = useLocale();\n return (\n <div className={cx('compare', className)}>\n <table className=\"compare__table\" {...rest}>\n <thead>\n <tr>\n <th />\n {items.map((it) => (\n <th key={it.id} scope=\"col\">\n <div className=\"compare__head\">\n {it.image && <img src={it.image} alt=\"\" className=\"compare__img\" />}\n <div className=\"compare__name\">{it.name}</div>\n {it.price && <div className=\"compare__price\">{it.price}</div>}\n {onRemove && (\n <button\n type=\"button\"\n className=\"compare__remove\"\n aria-label={format(t['commerce.removeItem'], { name: typeof it.name === 'string' ? it.name : 'item' })}\n onClick={() => onRemove(it.id)}\n >\n <X size={14} />\n </button>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {attributes.map((attr) => (\n <tr key={attr.key}>\n <th scope=\"row\" className=\"compare__attr\">{attr.label}</th>\n {items.map((it) => (\n <td key={it.id} className=\"compare__cell\">{attr.values[it.id] ?? '—'}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var chunkHYUINOPJ_js = require('./chunk-HYUINOPJ.js');
4
+ var chunkLIGJBHXU_js = require('./chunk-LIGJBHXU.js');
5
+ var chunkTEQ67JKX_js = require('./chunk-TEQ67JKX.js');
6
+ var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function PermissionMatrix({
10
+ roles,
11
+ actions,
12
+ value,
13
+ onChange,
14
+ readOnly,
15
+ className,
16
+ ...rest
17
+ }) {
18
+ const t = chunkTEQ67JKX_js.useLocale();
19
+ const has = (roleId, actionId) => (value[roleId] ?? []).includes(actionId);
20
+ const toggle = (roleId, actionId) => {
21
+ if (readOnly) return;
22
+ const current = new Set(value[roleId] ?? []);
23
+ if (current.has(actionId)) current.delete(actionId);
24
+ else current.add(actionId);
25
+ onChange({ ...value, [roleId]: Array.from(current) });
26
+ };
27
+ const toggleAllForRole = (roleId, allow) => {
28
+ if (readOnly) return;
29
+ onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });
30
+ };
31
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkPASF6T4H_js.cx("permissions", className), children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "permissions__table", ...rest, children: [
32
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
33
+ /* @__PURE__ */ jsxRuntime.jsx("th", { scope: "col", className: "permissions__action-col", children: t["permissions.action"] }),
34
+ roles.map((r) => {
35
+ const count = (value[r.id] ?? []).length;
36
+ const all = count === actions.length;
37
+ return /* @__PURE__ */ jsxRuntime.jsx("th", { scope: "col", className: "permissions__role-col", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "permissions__role-head", children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: r.label }),
39
+ !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
40
+ "button",
41
+ {
42
+ type: "button",
43
+ className: "permissions__role-toggle",
44
+ onClick: () => toggleAllForRole(r.id, !all),
45
+ children: all ? t["permissions.unmarkAll"] : t["permissions.markAll"]
46
+ }
47
+ )
48
+ ] }) }, r.id);
49
+ })
50
+ ] }) }),
51
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: actions.map((a) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
52
+ /* @__PURE__ */ jsxRuntime.jsxs("th", { scope: "row", className: "permissions__action-cell", children: [
53
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: a.label }),
54
+ a.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "permissions__action-desc", children: a.description })
55
+ ] }),
56
+ roles.map((r) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: "permissions__cell", children: /* @__PURE__ */ jsxRuntime.jsx(
57
+ chunkHYUINOPJ_js.Checkbox,
58
+ {
59
+ checked: has(r.id, a.id),
60
+ disabled: readOnly,
61
+ onChange: () => toggle(r.id, a.id),
62
+ "aria-label": chunkLIGJBHXU_js.format(t["permissions.cellLabel"], {
63
+ action: typeof a.label === "string" ? a.label : a.id,
64
+ role: typeof r.label === "string" ? r.label : r.id
65
+ })
66
+ }
67
+ ) }, r.id))
68
+ ] }, a.id)) })
69
+ ] }) });
70
+ }
71
+
72
+ exports.PermissionMatrix = PermissionMatrix;
73
+ //# sourceMappingURL=chunk-TZG34EYW.js.map
74
+ //# sourceMappingURL=chunk-TZG34EYW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Permissions.tsx"],"names":["useLocale","jsx","cx","jsxs","Checkbox","format"],"mappings":"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","file":"chunk-TZG34EYW.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\nexport interface PermissionRole { id: string; label: React.ReactNode }\nexport interface PermissionAction { id: string; label: React.ReactNode; description?: React.ReactNode }\n\nexport interface PermissionMatrixProps extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onChange'> {\n roles: PermissionRole[];\n actions: PermissionAction[];\n /** Map de roleId → set de actionIds permitidos */\n value: Record<string, string[]>;\n onChange: (value: Record<string, string[]>) => void;\n readOnly?: boolean;\n}\n\nexport function PermissionMatrix({\n roles, actions, value, onChange, readOnly, className, ...rest\n}: PermissionMatrixProps) {\n const t = useLocale();\n const has = (roleId: string, actionId: string) => (value[roleId] ?? []).includes(actionId);\n\n const toggle = (roleId: string, actionId: string) => {\n if (readOnly) return;\n const current = new Set(value[roleId] ?? []);\n if (current.has(actionId)) current.delete(actionId);\n else current.add(actionId);\n onChange({ ...value, [roleId]: Array.from(current) });\n };\n\n const toggleAllForRole = (roleId: string, allow: boolean) => {\n if (readOnly) return;\n onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });\n };\n\n return (\n <div className={cx('permissions', className)}>\n <table className=\"permissions__table\" {...rest}>\n <thead>\n <tr>\n <th scope=\"col\" className=\"permissions__action-col\">{t['permissions.action']}</th>\n {roles.map((r) => {\n const count = (value[r.id] ?? []).length;\n const all = count === actions.length;\n return (\n <th key={r.id} scope=\"col\" className=\"permissions__role-col\">\n <div className=\"permissions__role-head\">\n <span>{r.label}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"permissions__role-toggle\"\n onClick={() => toggleAllForRole(r.id, !all)}\n >\n {all ? t['permissions.unmarkAll'] : t['permissions.markAll']}\n </button>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {actions.map((a) => (\n <tr key={a.id}>\n <th scope=\"row\" className=\"permissions__action-cell\">\n <div>{a.label}</div>\n {a.description && <div className=\"permissions__action-desc\">{a.description}</div>}\n </th>\n {roles.map((r) => (\n <td key={r.id} className=\"permissions__cell\">\n <Checkbox\n checked={has(r.id, a.id)}\n disabled={readOnly}\n onChange={() => toggle(r.id, a.id)}\n aria-label={format(t['permissions.cellLabel'], {\n action: typeof a.label === 'string' ? a.label : a.id,\n role: typeof r.label === 'string' ? r.label : r.id,\n })}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -0,0 +1,72 @@
1
+ import { Checkbox } from './chunk-GVYZAOWU.mjs';
2
+ import { format } from './chunk-KKOJI25C.mjs';
3
+ import { useLocale } from './chunk-ZRFSTYRL.mjs';
4
+ import { cx } from './chunk-IEPCH3JB.mjs';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function PermissionMatrix({
8
+ roles,
9
+ actions,
10
+ value,
11
+ onChange,
12
+ readOnly,
13
+ className,
14
+ ...rest
15
+ }) {
16
+ const t = useLocale();
17
+ const has = (roleId, actionId) => (value[roleId] ?? []).includes(actionId);
18
+ const toggle = (roleId, actionId) => {
19
+ if (readOnly) return;
20
+ const current = new Set(value[roleId] ?? []);
21
+ if (current.has(actionId)) current.delete(actionId);
22
+ else current.add(actionId);
23
+ onChange({ ...value, [roleId]: Array.from(current) });
24
+ };
25
+ const toggleAllForRole = (roleId, allow) => {
26
+ if (readOnly) return;
27
+ onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });
28
+ };
29
+ return /* @__PURE__ */ jsx("div", { className: cx("permissions", className), children: /* @__PURE__ */ jsxs("table", { className: "permissions__table", ...rest, children: [
30
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
31
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "permissions__action-col", children: t["permissions.action"] }),
32
+ roles.map((r) => {
33
+ const count = (value[r.id] ?? []).length;
34
+ const all = count === actions.length;
35
+ return /* @__PURE__ */ jsx("th", { scope: "col", className: "permissions__role-col", children: /* @__PURE__ */ jsxs("div", { className: "permissions__role-head", children: [
36
+ /* @__PURE__ */ jsx("span", { children: r.label }),
37
+ !readOnly && /* @__PURE__ */ jsx(
38
+ "button",
39
+ {
40
+ type: "button",
41
+ className: "permissions__role-toggle",
42
+ onClick: () => toggleAllForRole(r.id, !all),
43
+ children: all ? t["permissions.unmarkAll"] : t["permissions.markAll"]
44
+ }
45
+ )
46
+ ] }) }, r.id);
47
+ })
48
+ ] }) }),
49
+ /* @__PURE__ */ jsx("tbody", { children: actions.map((a) => /* @__PURE__ */ jsxs("tr", { children: [
50
+ /* @__PURE__ */ jsxs("th", { scope: "row", className: "permissions__action-cell", children: [
51
+ /* @__PURE__ */ jsx("div", { children: a.label }),
52
+ a.description && /* @__PURE__ */ jsx("div", { className: "permissions__action-desc", children: a.description })
53
+ ] }),
54
+ roles.map((r) => /* @__PURE__ */ jsx("td", { className: "permissions__cell", children: /* @__PURE__ */ jsx(
55
+ Checkbox,
56
+ {
57
+ checked: has(r.id, a.id),
58
+ disabled: readOnly,
59
+ onChange: () => toggle(r.id, a.id),
60
+ "aria-label": format(t["permissions.cellLabel"], {
61
+ action: typeof a.label === "string" ? a.label : a.id,
62
+ role: typeof r.label === "string" ? r.label : r.id
63
+ })
64
+ }
65
+ ) }, r.id))
66
+ ] }, a.id)) })
67
+ ] }) });
68
+ }
69
+
70
+ export { PermissionMatrix };
71
+ //# sourceMappingURL=chunk-UB2XEZ7C.mjs.map
72
+ //# sourceMappingURL=chunk-UB2XEZ7C.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Permissions.tsx"],"names":[],"mappings":"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","file":"chunk-UB2XEZ7C.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\nexport interface PermissionRole { id: string; label: React.ReactNode }\nexport interface PermissionAction { id: string; label: React.ReactNode; description?: React.ReactNode }\n\nexport interface PermissionMatrixProps extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onChange'> {\n roles: PermissionRole[];\n actions: PermissionAction[];\n /** Map de roleId → set de actionIds permitidos */\n value: Record<string, string[]>;\n onChange: (value: Record<string, string[]>) => void;\n readOnly?: boolean;\n}\n\nexport function PermissionMatrix({\n roles, actions, value, onChange, readOnly, className, ...rest\n}: PermissionMatrixProps) {\n const t = useLocale();\n const has = (roleId: string, actionId: string) => (value[roleId] ?? []).includes(actionId);\n\n const toggle = (roleId: string, actionId: string) => {\n if (readOnly) return;\n const current = new Set(value[roleId] ?? []);\n if (current.has(actionId)) current.delete(actionId);\n else current.add(actionId);\n onChange({ ...value, [roleId]: Array.from(current) });\n };\n\n const toggleAllForRole = (roleId: string, allow: boolean) => {\n if (readOnly) return;\n onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });\n };\n\n return (\n <div className={cx('permissions', className)}>\n <table className=\"permissions__table\" {...rest}>\n <thead>\n <tr>\n <th scope=\"col\" className=\"permissions__action-col\">{t['permissions.action']}</th>\n {roles.map((r) => {\n const count = (value[r.id] ?? []).length;\n const all = count === actions.length;\n return (\n <th key={r.id} scope=\"col\" className=\"permissions__role-col\">\n <div className=\"permissions__role-head\">\n <span>{r.label}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"permissions__role-toggle\"\n onClick={() => toggleAllForRole(r.id, !all)}\n >\n {all ? t['permissions.unmarkAll'] : t['permissions.markAll']}\n </button>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {actions.map((a) => (\n <tr key={a.id}>\n <th scope=\"row\" className=\"permissions__action-cell\">\n <div>{a.label}</div>\n {a.description && <div className=\"permissions__action-desc\">{a.description}</div>}\n </th>\n {roles.map((r) => (\n <td key={r.id} className=\"permissions__cell\">\n <Checkbox\n checked={has(r.id, a.id)}\n disabled={readOnly}\n onChange={() => toggle(r.id, a.id)}\n aria-label={format(t['permissions.cellLabel'], {\n action: typeof a.label === 'string' ? a.label : a.id,\n role: typeof r.label === 'string' ? r.label : r.id,\n })}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -0,0 +1,116 @@
1
+ 'use strict';
2
+
3
+ var chunk5VMZMDJF_js = require('./chunk-5VMZMDJF.js');
4
+ var chunkLIGJBHXU_js = require('./chunk-LIGJBHXU.js');
5
+ var chunkTEQ67JKX_js = require('./chunk-TEQ67JKX.js');
6
+ var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
7
+ var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
8
+ var React = require('react');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ function CommentThread({
32
+ comments,
33
+ onAdd,
34
+ placeholder,
35
+ allowInternal = false,
36
+ className,
37
+ ...rest
38
+ }) {
39
+ const [draft, setDraft] = React__namespace.useState("");
40
+ const [internal, setInternal] = React__namespace.useState(false);
41
+ const t = chunkTEQ67JKX_js.useLocale();
42
+ const ph = placeholder ?? t["comments.placeholder"];
43
+ const submit = () => {
44
+ if (!draft.trim() || !onAdd) return;
45
+ onAdd(draft, internal);
46
+ setDraft("");
47
+ setInternal(false);
48
+ };
49
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("comments", className), ...rest, children: [
50
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "comments__list", children: comments.map((c) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: chunkPASF6T4H_js.cx("comment", c.internal && "comment--internal"), children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5VMZMDJF_js.Avatar, { name: c.author.name, src: c.author.avatarSrc, size: 32 }),
52
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "comment__body", children: [
53
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "comment__head", children: [
54
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "comment__author", children: c.author.name }),
55
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "comment__time", children: c.timestamp }),
56
+ c.internal && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "comment__tag", children: t["comments.internalTag"] })
57
+ ] }),
58
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "comment__text", children: c.body })
59
+ ] })
60
+ ] }, c.id)) }),
61
+ onAdd && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "comments__compose", children: [
62
+ /* @__PURE__ */ jsxRuntime.jsx(
63
+ "textarea",
64
+ {
65
+ className: "textarea",
66
+ value: draft,
67
+ onChange: (e) => setDraft(e.target.value),
68
+ placeholder: ph,
69
+ rows: 3
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "comments__compose-actions", children: [
73
+ allowInternal && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "comments__internal-toggle", children: [
74
+ /* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: internal, onChange: (e) => setInternal(e.target.checked) }),
75
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: t["comments.internalOnly"] })
76
+ ] }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--primary btn--sm", disabled: !draft.trim(), onClick: submit, children: t["comments.send"] })
78
+ ] })
79
+ ] })
80
+ ] });
81
+ }
82
+ function AttachmentList({ attachments, emptyMessage, className, ...rest }) {
83
+ const t = chunkTEQ67JKX_js.useLocale();
84
+ const empty = emptyMessage ?? t["attachments.empty"];
85
+ if (attachments.length === 0) {
86
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "attachments__empty", children: empty });
87
+ }
88
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: chunkPASF6T4H_js.cx("attachments", className), ...rest, children: attachments.map((a) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "attachment", children: [
89
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "attachment__icon", "aria-hidden": "true", children: a.icon ?? /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.FileText, { size: 20 }) }),
90
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "attachment__body", children: [
91
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "attachment__name", children: a.name }),
92
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "attachment__meta", children: [
93
+ a.size && /* @__PURE__ */ jsxRuntime.jsx("span", { children: a.size }),
94
+ a.uploadedBy && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
95
+ "\xB7 ",
96
+ a.uploadedBy
97
+ ] }),
98
+ a.uploadedAt && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
99
+ "\xB7 ",
100
+ a.uploadedAt
101
+ ] })
102
+ ] })
103
+ ] }),
104
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "attachment__actions", children: [
105
+ a.url && /* @__PURE__ */ jsxRuntime.jsx("a", { href: a.url, download: true, className: "attachment__action", "aria-label": chunkLIGJBHXU_js.format(t["attachments.download"], { name: a.name }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.Download, { size: 16 }) }),
106
+ a.onRemove && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "attachment__action attachment__action--danger", "aria-label": chunkLIGJBHXU_js.format(t["attachments.remove"], { name: a.name }), onClick: a.onRemove, children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.Trash, { size: 16 }) })
107
+ ] })
108
+ ] }, a.id)) });
109
+ }
110
+ var _internal = { X: chunkRQOTH7I7_js.X };
111
+
112
+ exports.AttachmentList = AttachmentList;
113
+ exports.CommentThread = CommentThread;
114
+ exports._internal = _internal;
115
+ //# sourceMappingURL=chunk-UIKCTWKG.js.map
116
+ //# sourceMappingURL=chunk-UIKCTWKG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Comments.tsx"],"names":["React","useLocale","jsxs","cx","jsx","Avatar","FileText","format","Download","Trash","X"],"mappings":"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","file":"chunk-UIKCTWKG.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { FileText, Download, Trash, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- CommentThread ----------------------------------------------\nexport interface CommentItem {\n id: string;\n author: { name: string; avatarSrc?: string };\n body: React.ReactNode;\n timestamp: React.ReactNode;\n internal?: boolean;\n}\n\nexport interface CommentThreadProps extends React.HTMLAttributes<HTMLDivElement> {\n comments: CommentItem[];\n onAdd?: (body: string, internal: boolean) => void;\n placeholder?: string;\n allowInternal?: boolean;\n}\n\nexport function CommentThread({\n comments, onAdd, placeholder,\n allowInternal = false, className, ...rest\n}: CommentThreadProps) {\n const [draft, setDraft] = React.useState('');\n const [internal, setInternal] = React.useState(false);\n const t = useLocale();\n const ph = placeholder ?? t['comments.placeholder'];\n\n const submit = () => {\n if (!draft.trim() || !onAdd) return;\n onAdd(draft, internal);\n setDraft('');\n setInternal(false);\n };\n\n return (\n <div className={cx('comments', className)} {...rest}>\n <ul className=\"comments__list\">\n {comments.map((c) => (\n <li key={c.id} className={cx('comment', c.internal && 'comment--internal')}>\n <Avatar name={c.author.name} src={c.author.avatarSrc} size={32} />\n <div className=\"comment__body\">\n <div className=\"comment__head\">\n <span className=\"comment__author\">{c.author.name}</span>\n <span className=\"comment__time\">{c.timestamp}</span>\n {c.internal && <span className=\"comment__tag\">{t['comments.internalTag']}</span>}\n </div>\n <div className=\"comment__text\">{c.body}</div>\n </div>\n </li>\n ))}\n </ul>\n {onAdd && (\n <div className=\"comments__compose\">\n <textarea\n className=\"textarea\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n placeholder={ph}\n rows={3}\n />\n <div className=\"comments__compose-actions\">\n {allowInternal && (\n <label className=\"comments__internal-toggle\">\n <input type=\"checkbox\" checked={internal} onChange={(e) => setInternal(e.target.checked)} />\n <span>{t['comments.internalOnly']}</span>\n </label>\n )}\n <button type=\"button\" className=\"btn btn--primary btn--sm\" disabled={!draft.trim()} onClick={submit}>\n {t['comments.send']}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------- AttachmentList ---------------------------------------------\nexport interface AttachmentItem {\n id: string;\n name: string;\n size?: string; // ya formateado: \"245 KB\"\n url?: string;\n uploadedBy?: string;\n uploadedAt?: React.ReactNode;\n icon?: React.ReactNode;\n onRemove?: () => void;\n}\n\nexport interface AttachmentListProps extends React.HTMLAttributes<HTMLUListElement> {\n attachments: AttachmentItem[];\n emptyMessage?: React.ReactNode;\n}\n\nexport function AttachmentList({ attachments, emptyMessage, className, ...rest }: AttachmentListProps) {\n const t = useLocale();\n const empty = emptyMessage ?? t['attachments.empty'];\n if (attachments.length === 0) {\n return <div className=\"attachments__empty\">{empty}</div>;\n }\n return (\n <ul className={cx('attachments', className)} {...rest}>\n {attachments.map((a) => (\n <li key={a.id} className=\"attachment\">\n <span className=\"attachment__icon\" aria-hidden=\"true\">\n {a.icon ?? <FileText size={20} />}\n </span>\n <div className=\"attachment__body\">\n <div className=\"attachment__name\">{a.name}</div>\n <div className=\"attachment__meta\">\n {a.size && <span>{a.size}</span>}\n {a.uploadedBy && <span>· {a.uploadedBy}</span>}\n {a.uploadedAt && <span>· {a.uploadedAt}</span>}\n </div>\n </div>\n <div className=\"attachment__actions\">\n {a.url && (\n <a href={a.url} download className=\"attachment__action\" aria-label={format(t['attachments.download'], { name: a.name })}>\n <Download size={16} />\n </a>\n )}\n {a.onRemove && (\n <button type=\"button\" className=\"attachment__action attachment__action--danger\" aria-label={format(t['attachments.remove'], { name: a.name })} onClick={a.onRemove}>\n <Trash size={16} />\n </button>\n )}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\n// re-export para que el bundle no tenga dead imports\nexport const _internal = { X };\n"]}
@@ -0,0 +1,107 @@
1
+ 'use strict';
2
+
3
+ var chunkLIGJBHXU_js = require('./chunk-LIGJBHXU.js');
4
+ var chunkTEQ67JKX_js = require('./chunk-TEQ67JKX.js');
5
+ var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
6
+ var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
7
+ var React = require('react');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }) {
31
+ const t = chunkTEQ67JKX_js.useLocale();
32
+ const heading = title ?? t["filters.panel"];
33
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: chunkPASF6T4H_js.cx("filter-panel", className), "aria-label": t["filters.panel"], ...rest, children: [
34
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "filter-panel__head", children: [
35
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "filter-panel__title", children: [
36
+ heading,
37
+ typeof activeCount === "number" && activeCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "filter-panel__count", children: activeCount })
38
+ ] }),
39
+ onClearAll && activeCount !== void 0 && activeCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "filter-panel__clear", onClick: onClearAll, children: t["filters.clear"] })
40
+ ] }),
41
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "filter-panel__body", children })
42
+ ] });
43
+ }
44
+ function FilterSection({ title, defaultOpen = true, children, className, ...rest }) {
45
+ const [open, setOpen] = React__namespace.useState(defaultOpen);
46
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("filter-section", className), ...rest, children: [
47
+ /* @__PURE__ */ jsxRuntime.jsxs(
48
+ "button",
49
+ {
50
+ type: "button",
51
+ className: "filter-section__head",
52
+ "aria-expanded": open,
53
+ onClick: () => setOpen((o) => !o),
54
+ children: [
55
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: title }),
56
+ open ? /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronUp, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronDown, { size: 14 })
57
+ ]
58
+ }
59
+ ),
60
+ open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "filter-section__body", children })
61
+ ] });
62
+ }
63
+ function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }) {
64
+ const t = chunkTEQ67JKX_js.useLocale();
65
+ if (selectedCount <= 0) return null;
66
+ const countText = chunkLIGJBHXU_js.format(
67
+ selectedCount === 1 ? t["filters.selectedOne"] : t["filters.selectedMany"],
68
+ { n: selectedCount }
69
+ );
70
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("bulk-bar", className), role: "region", "aria-label": t["filters.bulkActions"], ...rest, children: [
71
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bulk-bar__count", children: [
72
+ label ?? countText,
73
+ onClear && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "bulk-bar__clear", "aria-label": t["filters.deselectAll"], onClick: onClear, children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.X, { size: 14 }) })
74
+ ] }),
75
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bulk-bar__actions", children })
76
+ ] });
77
+ }
78
+ function SortDropdown({
79
+ value,
80
+ options,
81
+ onChange,
82
+ label,
83
+ className,
84
+ id
85
+ }) {
86
+ const t = chunkTEQ67JKX_js.useLocale();
87
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: chunkPASF6T4H_js.cx("sort-dropdown", className), children: [
88
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sort-dropdown__label", children: label ?? t["filters.sortBy"] }),
89
+ /* @__PURE__ */ jsxRuntime.jsx(
90
+ "select",
91
+ {
92
+ id,
93
+ className: "sort-dropdown__select select",
94
+ value,
95
+ onChange: (e) => onChange(e.target.value),
96
+ children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: String(o.value), children: typeof o.label === "string" ? o.label : String(o.value) }, String(o.value)))
97
+ }
98
+ )
99
+ ] });
100
+ }
101
+
102
+ exports.BulkActionBar = BulkActionBar;
103
+ exports.FilterPanel = FilterPanel;
104
+ exports.FilterSection = FilterSection;
105
+ exports.SortDropdown = SortDropdown;
106
+ //# sourceMappingURL=chunk-UNOPDYA7.js.map
107
+ //# sourceMappingURL=chunk-UNOPDYA7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Filters.tsx"],"names":["useLocale","jsxs","cx","jsx","React","ChevronUp","ChevronDown","format","X"],"mappings":"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","file":"chunk-UNOPDYA7.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, ChevronUp, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- FilterPanel -------------------------------------------------\nexport interface FilterPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n onClearAll?: () => void;\n activeCount?: number;\n}\n\nexport function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }: FilterPanelProps) {\n const t = useLocale();\n const heading = title ?? t['filters.panel'];\n return (\n <aside className={cx('filter-panel', className)} aria-label={t['filters.panel']} {...rest}>\n <div className=\"filter-panel__head\">\n <span className=\"filter-panel__title\">\n {heading}\n {typeof activeCount === 'number' && activeCount > 0 && (\n <span className=\"filter-panel__count\">{activeCount}</span>\n )}\n </span>\n {onClearAll && activeCount !== undefined && activeCount > 0 && (\n <button type=\"button\" className=\"filter-panel__clear\" onClick={onClearAll}>\n {t['filters.clear']}\n </button>\n )}\n </div>\n <div className=\"filter-panel__body\">{children}</div>\n </aside>\n );\n}\n\nexport interface FilterSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function FilterSection({ title, defaultOpen = true, children, className, ...rest }: FilterSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n return (\n <div className={cx('filter-section', className)} {...rest}>\n <button\n type=\"button\"\n className=\"filter-section__head\"\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n >\n <span>{title}</span>\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n {open && <div className=\"filter-section__body\">{children}</div>}\n </div>\n );\n}\n\n// ---------- BulkActionBar ----------------------------------------------\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cantidad de items seleccionados. La barra se oculta si es 0. */\n selectedCount: number;\n /** Texto opcional, default: \"{N} seleccionado(s)\". */\n label?: React.ReactNode;\n onClear?: () => void;\n}\n\nexport function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }: BulkActionBarProps) {\n const t = useLocale();\n if (selectedCount <= 0) return null;\n const countText = format(\n selectedCount === 1 ? t['filters.selectedOne'] : t['filters.selectedMany'],\n { n: selectedCount }\n );\n return (\n <div className={cx('bulk-bar', className)} role=\"region\" aria-label={t['filters.bulkActions']} {...rest}>\n <div className=\"bulk-bar__count\">\n {label ?? countText}\n {onClear && (\n <button type=\"button\" className=\"bulk-bar__clear\" aria-label={t['filters.deselectAll']} onClick={onClear}>\n <X size={14} />\n </button>\n )}\n </div>\n <div className=\"bulk-bar__actions\">{children}</div>\n </div>\n );\n}\n\n// ---------- SortDropdown -----------------------------------------------\nexport interface SortOption<T = string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SortDropdownProps<T = string> {\n value: T;\n options: SortOption<T>[];\n onChange: (value: T) => void;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function SortDropdown<T extends string = string>({\n value, options, onChange, label, className, id,\n}: SortDropdownProps<T>) {\n const t = useLocale();\n return (\n <label className={cx('sort-dropdown', className)}>\n <span className=\"sort-dropdown__label\">{label ?? t['filters.sortBy']}</span>\n <select\n id={id}\n className=\"sort-dropdown__select select\"\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((o) => (\n <option key={String(o.value)} value={String(o.value)}>\n {typeof o.label === 'string' ? o.label : String(o.value)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import { cx } from './chunk-IEPCH3JB.mjs';
2
+ import * as React from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var Button = React.forwardRef(function Button2({
6
+ variant = "primary",
7
+ size = "md",
8
+ loading = false,
9
+ iconLeft,
10
+ iconRight,
11
+ fullWidth = false,
12
+ className,
13
+ disabled,
14
+ children,
15
+ ...rest
16
+ }, ref) {
17
+ return /* @__PURE__ */ jsxs(
18
+ "button",
19
+ {
20
+ ref,
21
+ className: cx(
22
+ "btn",
23
+ `btn--${variant}`,
24
+ `btn--${size}`,
25
+ fullWidth && "btn--block",
26
+ loading && "is-loading",
27
+ className
28
+ ),
29
+ disabled: disabled || loading,
30
+ "aria-busy": loading || void 0,
31
+ ...rest,
32
+ children: [
33
+ loading && /* @__PURE__ */ jsx("span", { className: "spinner spinner--inverse", "aria-hidden": "true" }),
34
+ !loading && iconLeft,
35
+ children,
36
+ !loading && iconRight
37
+ ]
38
+ }
39
+ );
40
+ });
41
+ var ButtonGroup = React.forwardRef(
42
+ function ButtonGroup2({ className, role = "group", ...rest }, ref) {
43
+ return /* @__PURE__ */ jsx("div", { ref, role, className: cx("btn-group", className), ...rest });
44
+ }
45
+ );
46
+
47
+ export { Button, ButtonGroup };
48
+ //# sourceMappingURL=chunk-V26K66NP.mjs.map
49
+ //# sourceMappingURL=chunk-V26K66NP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Button.tsx"],"names":["Button","ButtonGroup"],"mappings":";;;;AAyBO,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA,CAA2C,SAASA,OAAAA,CAC9E;AAAA,EACE,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,KAAA;AAAA,QACA,QAAQ,OAAO,CAAA,CAAA;AAAA,QACf,QAAQ,IAAI,CAAA,CAAA;AAAA,QACZ,SAAA,IAAa,YAAA;AAAA,QACb,OAAA,IAAW,YAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,aAAW,OAAA,IAAW,MAAA;AAAA,MACrB,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,OAAA,oBAAW,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,eAAY,MAAA,EAAO,CAAA;AAAA,QACzE,CAAC,OAAA,IAAW,QAAA;AAAA,QACZ,QAAA;AAAA,QACA,CAAC,OAAA,IAAW;AAAA;AAAA;AAAA,GACf;AAEJ,CAAC;AAGM,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASC,aAAY,EAAE,SAAA,EAAW,OAAO,OAAA,EAAS,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAChE,IAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,IAAA,EAAY,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EACrF;AACF","file":"chunk-V26K66NP.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'subtle'\n | 'danger'\n | 'success'\n | 'warning'\n | 'link';\n\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n fullWidth?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n iconLeft,\n iconRight,\n fullWidth = false,\n className,\n disabled,\n children,\n ...rest\n },\n ref\n) {\n return (\n <button\n ref={ref}\n className={cx(\n 'btn',\n `btn--${variant}`,\n `btn--${size}`,\n fullWidth && 'btn--block',\n loading && 'is-loading',\n className\n )}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...rest}\n >\n {loading && <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" />}\n {!loading && iconLeft}\n {children}\n {!loading && iconRight}\n </button>\n );\n});\n\n// ---------- ButtonGroup --------------------------------------------------\nexport const ButtonGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ButtonGroup({ className, role = 'group', ...rest }, ref) {\n return <div ref={ref} role={role} className={cx('btn-group', className)} {...rest} />;\n }\n);\n"]}