@misael703/ui 1.24.0 → 1.25.1

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 (203) hide show
  1. package/dist/{chunk-CGOUG3W5.mjs → chunk-24TLFBBQ.mjs} +3 -3
  2. package/dist/{chunk-CGOUG3W5.mjs.map → chunk-24TLFBBQ.mjs.map} +1 -1
  3. package/dist/{chunk-X2DBGT7M.mjs → chunk-2LHXOVX2.mjs} +3 -3
  4. package/dist/{chunk-X2DBGT7M.mjs.map → chunk-2LHXOVX2.mjs.map} +1 -1
  5. package/dist/{chunk-IZELILHK.js → chunk-2T5KZJGY.js} +5 -5
  6. package/dist/{chunk-IZELILHK.js.map → chunk-2T5KZJGY.js.map} +1 -1
  7. package/dist/{chunk-PKCLA2FD.mjs → chunk-2X66MNCR.mjs} +4 -4
  8. package/dist/{chunk-PKCLA2FD.mjs.map → chunk-2X66MNCR.mjs.map} +1 -1
  9. package/dist/{chunk-RQOTH7I7.js → chunk-3HA3VO2I.js} +40 -2
  10. package/dist/chunk-3HA3VO2I.js.map +1 -0
  11. package/dist/{chunk-56NJXIH7.js → chunk-3OT3FROI.js} +6 -6
  12. package/dist/{chunk-56NJXIH7.js.map → chunk-3OT3FROI.js.map} +1 -1
  13. package/dist/{chunk-JUSOPJZW.mjs → chunk-3U6C2BFM.mjs} +3 -3
  14. package/dist/{chunk-JUSOPJZW.mjs.map → chunk-3U6C2BFM.mjs.map} +1 -1
  15. package/dist/{chunk-55TOQMS2.js → chunk-4CPGEYY3.js} +5 -5
  16. package/dist/{chunk-55TOQMS2.js.map → chunk-4CPGEYY3.js.map} +1 -1
  17. package/dist/{chunk-B4I6BMNS.mjs → chunk-4N2PCBGA.mjs} +9 -6
  18. package/dist/chunk-4N2PCBGA.mjs.map +1 -0
  19. package/dist/{chunk-LYM2VPFL.js → chunk-4RHJW6JI.js} +4 -4
  20. package/dist/{chunk-LYM2VPFL.js.map → chunk-4RHJW6JI.js.map} +1 -1
  21. package/dist/{chunk-PRECODB3.js → chunk-5LSPN6Q6.js} +8 -5
  22. package/dist/chunk-5LSPN6Q6.js.map +1 -0
  23. package/dist/{chunk-LVLJ75ND.mjs → chunk-5OMB6FC5.mjs} +3 -3
  24. package/dist/{chunk-LVLJ75ND.mjs.map → chunk-5OMB6FC5.mjs.map} +1 -1
  25. package/dist/{chunk-PRML6VEF.mjs → chunk-5XT2LX3I.mjs} +10 -3
  26. package/dist/chunk-5XT2LX3I.mjs.map +1 -0
  27. package/dist/{chunk-S4YPRJQQ.js → chunk-6BRRRENF.js} +5 -5
  28. package/dist/{chunk-S4YPRJQQ.js.map → chunk-6BRRRENF.js.map} +1 -1
  29. package/dist/{chunk-RHPXE3E7.js → chunk-6DMU73SO.js} +10 -10
  30. package/dist/{chunk-RHPXE3E7.js.map → chunk-6DMU73SO.js.map} +1 -1
  31. package/dist/{chunk-IZ3FMCZ5.js → chunk-6HNR25ID.js} +4 -4
  32. package/dist/{chunk-IZ3FMCZ5.js.map → chunk-6HNR25ID.js.map} +1 -1
  33. package/dist/{chunk-HYUINOPJ.js → chunk-74ALPTUE.js} +4 -4
  34. package/dist/{chunk-HYUINOPJ.js.map → chunk-74ALPTUE.js.map} +1 -1
  35. package/dist/{chunk-RBJRQ44B.mjs → chunk-7IPB5A75.mjs} +3 -3
  36. package/dist/{chunk-RBJRQ44B.mjs.map → chunk-7IPB5A75.mjs.map} +1 -1
  37. package/dist/{chunk-VCBVLG3Q.js → chunk-A6DHNAM7.js} +4 -4
  38. package/dist/{chunk-VCBVLG3Q.js.map → chunk-A6DHNAM7.js.map} +1 -1
  39. package/dist/{chunk-2BPYXHGW.mjs → chunk-ADF5YEMJ.mjs} +3 -3
  40. package/dist/{chunk-2BPYXHGW.mjs.map → chunk-ADF5YEMJ.mjs.map} +1 -1
  41. package/dist/{chunk-EJ263Y5X.mjs → chunk-ARGGKLQD.mjs} +3 -3
  42. package/dist/{chunk-EJ263Y5X.mjs.map → chunk-ARGGKLQD.mjs.map} +1 -1
  43. package/dist/{chunk-ADQM725E.js → chunk-AS4NTE2Q.js} +5 -5
  44. package/dist/{chunk-ADQM725E.js.map → chunk-AS4NTE2Q.js.map} +1 -1
  45. package/dist/{chunk-VFZ2X655.mjs → chunk-AZTZAY2S.mjs} +4 -4
  46. package/dist/{chunk-VFZ2X655.mjs.map → chunk-AZTZAY2S.mjs.map} +1 -1
  47. package/dist/{chunk-OJNEGJ3P.mjs → chunk-B4BPE3LC.mjs} +4 -4
  48. package/dist/{chunk-OJNEGJ3P.mjs.map → chunk-B4BPE3LC.mjs.map} +1 -1
  49. package/dist/{chunk-FA6526ME.mjs → chunk-CDX256RG.mjs} +3 -3
  50. package/dist/{chunk-FA6526ME.mjs.map → chunk-CDX256RG.mjs.map} +1 -1
  51. package/dist/{chunk-7I5LFBQR.js → chunk-CRKYET66.js} +10 -3
  52. package/dist/chunk-CRKYET66.js.map +1 -0
  53. package/dist/{chunk-XLLARFVP.mjs → chunk-CUWWADL2.mjs} +4 -4
  54. package/dist/{chunk-XLLARFVP.mjs.map → chunk-CUWWADL2.mjs.map} +1 -1
  55. package/dist/{chunk-U3I4IMJI.js → chunk-CXYZK3TK.js} +6 -6
  56. package/dist/{chunk-U3I4IMJI.js.map → chunk-CXYZK3TK.js.map} +1 -1
  57. package/dist/{chunk-5QQ6BTD5.mjs → chunk-D4K255ZA.mjs} +5 -5
  58. package/dist/{chunk-5QQ6BTD5.mjs.map → chunk-D4K255ZA.mjs.map} +1 -1
  59. package/dist/{chunk-VDBGWTIG.js → chunk-DMMZWL7W.js} +4 -4
  60. package/dist/{chunk-VDBGWTIG.js.map → chunk-DMMZWL7W.js.map} +1 -1
  61. package/dist/{chunk-R6XMFBVH.mjs → chunk-EB4TS7VJ.mjs} +3 -3
  62. package/dist/{chunk-R6XMFBVH.mjs.map → chunk-EB4TS7VJ.mjs.map} +1 -1
  63. package/dist/{chunk-XCZVZVYJ.js → chunk-EFEEQBS3.js} +8 -8
  64. package/dist/{chunk-XCZVZVYJ.js.map → chunk-EFEEQBS3.js.map} +1 -1
  65. package/dist/{chunk-QZACPKQ4.js → chunk-F3O6JAL3.js} +4 -4
  66. package/dist/{chunk-QZACPKQ4.js.map → chunk-F3O6JAL3.js.map} +1 -1
  67. package/dist/{chunk-JYHY3UWA.js → chunk-H7HFKEUI.js} +8 -8
  68. package/dist/{chunk-JYHY3UWA.js.map → chunk-H7HFKEUI.js.map} +1 -1
  69. package/dist/{chunk-L353APIO.js → chunk-HEI6PUMK.js} +4 -4
  70. package/dist/{chunk-L353APIO.js.map → chunk-HEI6PUMK.js.map} +1 -1
  71. package/dist/{chunk-L4JQRY4U.mjs → chunk-I3ADS32J.mjs} +4 -4
  72. package/dist/{chunk-L4JQRY4U.mjs.map → chunk-I3ADS32J.mjs.map} +1 -1
  73. package/dist/{chunk-BCE5WXM6.mjs → chunk-JO5WBKF2.mjs} +5 -5
  74. package/dist/{chunk-BCE5WXM6.mjs.map → chunk-JO5WBKF2.mjs.map} +1 -1
  75. package/dist/{chunk-O72DMPH6.js → chunk-KS7CSKO6.js} +9 -9
  76. package/dist/{chunk-O72DMPH6.js.map → chunk-KS7CSKO6.js.map} +1 -1
  77. package/dist/{chunk-4SEJTTTV.mjs → chunk-LJG3AH7G.mjs} +3 -3
  78. package/dist/{chunk-4SEJTTTV.mjs.map → chunk-LJG3AH7G.mjs.map} +1 -1
  79. package/dist/{chunk-55ITZTLL.js → chunk-LJSNE6YQ.js} +8 -8
  80. package/dist/{chunk-55ITZTLL.js.map → chunk-LJSNE6YQ.js.map} +1 -1
  81. package/dist/{chunk-MJ6UOTWQ.js → chunk-M3RO3GSC.js} +12 -12
  82. package/dist/{chunk-MJ6UOTWQ.js.map → chunk-M3RO3GSC.js.map} +1 -1
  83. package/dist/{chunk-2I7NE7QR.mjs → chunk-MSEDQM7C.mjs} +3 -3
  84. package/dist/{chunk-2I7NE7QR.mjs.map → chunk-MSEDQM7C.mjs.map} +1 -1
  85. package/dist/{chunk-XW7DOPY4.mjs → chunk-MVY4UEFB.mjs} +3 -3
  86. package/dist/{chunk-XW7DOPY4.mjs.map → chunk-MVY4UEFB.mjs.map} +1 -1
  87. package/dist/{chunk-L4ITC2U6.mjs → chunk-NCXODB4O.mjs} +4 -4
  88. package/dist/{chunk-L4ITC2U6.mjs.map → chunk-NCXODB4O.mjs.map} +1 -1
  89. package/dist/{chunk-FGNHN34U.js → chunk-NDMMQZZZ.js} +12 -12
  90. package/dist/{chunk-FGNHN34U.js.map → chunk-NDMMQZZZ.js.map} +1 -1
  91. package/dist/{chunk-MOHWK6FH.js → chunk-OEFOGREP.js} +14 -14
  92. package/dist/{chunk-MOHWK6FH.js.map → chunk-OEFOGREP.js.map} +1 -1
  93. package/dist/{chunk-FS42XEU7.js → chunk-PPU5WKZS.js} +6 -6
  94. package/dist/{chunk-FS42XEU7.js.map → chunk-PPU5WKZS.js.map} +1 -1
  95. package/dist/{chunk-HRDLEOYO.mjs → chunk-PVSP7Y2F.mjs} +4 -4
  96. package/dist/{chunk-HRDLEOYO.mjs.map → chunk-PVSP7Y2F.mjs.map} +1 -1
  97. package/dist/{chunk-BSAHYKPF.js → chunk-Q3DKZR44.js} +5 -5
  98. package/dist/{chunk-BSAHYKPF.js.map → chunk-Q3DKZR44.js.map} +1 -1
  99. package/dist/{chunk-5A3MAGA3.mjs → chunk-QAOFEIG4.mjs} +4 -4
  100. package/dist/{chunk-5A3MAGA3.mjs.map → chunk-QAOFEIG4.mjs.map} +1 -1
  101. package/dist/{chunk-QM7BCSCL.mjs → chunk-RDX3D3P5.mjs} +3 -3
  102. package/dist/{chunk-QM7BCSCL.mjs.map → chunk-RDX3D3P5.mjs.map} +1 -1
  103. package/dist/{chunk-HAZDZYF4.mjs → chunk-SHS4QYYN.mjs} +3 -3
  104. package/dist/{chunk-HAZDZYF4.mjs.map → chunk-SHS4QYYN.mjs.map} +1 -1
  105. package/dist/{chunk-YSU3WFND.mjs → chunk-STZ7YDMR.mjs} +3 -3
  106. package/dist/{chunk-YSU3WFND.mjs.map → chunk-STZ7YDMR.mjs.map} +1 -1
  107. package/dist/{chunk-RCXLCU5A.js → chunk-TCFO7YBF.js} +6 -6
  108. package/dist/{chunk-RCXLCU5A.js.map → chunk-TCFO7YBF.js.map} +1 -1
  109. package/dist/{chunk-4QXDOJ7A.js → chunk-TD732KXM.js} +5 -5
  110. package/dist/{chunk-4QXDOJ7A.js.map → chunk-TD732KXM.js.map} +1 -1
  111. package/dist/{chunk-GVYZAOWU.mjs → chunk-TS3WC3G4.mjs} +3 -3
  112. package/dist/{chunk-GVYZAOWU.mjs.map → chunk-TS3WC3G4.mjs.map} +1 -1
  113. package/dist/{chunk-IKGW7HHG.js → chunk-VAAB5DXM.js} +9 -9
  114. package/dist/{chunk-IKGW7HHG.js.map → chunk-VAAB5DXM.js.map} +1 -1
  115. package/dist/{chunk-CIBJKJV3.mjs → chunk-VHYTJD6Z.mjs} +36 -3
  116. package/dist/chunk-VHYTJD6Z.mjs.map +1 -0
  117. package/dist/{chunk-JT2SFHBH.js → chunk-WGEEYXVZ.js} +4 -4
  118. package/dist/{chunk-JT2SFHBH.js.map → chunk-WGEEYXVZ.js.map} +1 -1
  119. package/dist/{chunk-IOBAPH6I.mjs → chunk-Y6EGYS4L.mjs} +3 -3
  120. package/dist/{chunk-IOBAPH6I.mjs.map → chunk-Y6EGYS4L.mjs.map} +1 -1
  121. package/dist/{chunk-GKSUYHGO.js → chunk-YLISYQNI.js} +4 -4
  122. package/dist/{chunk-GKSUYHGO.js.map → chunk-YLISYQNI.js.map} +1 -1
  123. package/dist/{chunk-ORUQ5GCU.mjs → chunk-ZA2AXUIB.mjs} +3 -3
  124. package/dist/{chunk-ORUQ5GCU.mjs.map → chunk-ZA2AXUIB.mjs.map} +1 -1
  125. package/dist/components/AdvancedPickers.js +7 -7
  126. package/dist/components/AdvancedPickers.mjs +3 -3
  127. package/dist/components/AppShell.js +4 -4
  128. package/dist/components/AppShell.mjs +2 -2
  129. package/dist/components/Carousel.js +3 -3
  130. package/dist/components/Carousel.mjs +2 -2
  131. package/dist/components/Code.js +4 -4
  132. package/dist/components/Code.mjs +2 -2
  133. package/dist/components/Comments.js +7 -7
  134. package/dist/components/Comments.mjs +4 -4
  135. package/dist/components/Commerce.js +14 -14
  136. package/dist/components/Commerce.mjs +3 -3
  137. package/dist/components/ContextMenu.js +3 -3
  138. package/dist/components/ContextMenu.mjs +2 -2
  139. package/dist/components/DataTable.js +10 -10
  140. package/dist/components/DataTable.mjs +4 -4
  141. package/dist/components/Display.js +13 -13
  142. package/dist/components/Display.mjs +2 -2
  143. package/dist/components/Display2.js +7 -7
  144. package/dist/components/Display2.mjs +3 -3
  145. package/dist/components/Display3.js +10 -10
  146. package/dist/components/Display3.mjs +4 -4
  147. package/dist/components/Editing.js +9 -9
  148. package/dist/components/Editing.mjs +4 -4
  149. package/dist/components/Filters.js +8 -8
  150. package/dist/components/Filters.mjs +2 -2
  151. package/dist/components/Form.js +12 -12
  152. package/dist/components/Form.mjs +2 -2
  153. package/dist/components/Gallery.js +4 -4
  154. package/dist/components/Gallery.mjs +2 -2
  155. package/dist/components/HoverCard.js +3 -3
  156. package/dist/components/HoverCard.mjs +2 -2
  157. package/dist/components/Icons.d.mts +6 -1
  158. package/dist/components/Icons.d.ts +6 -1
  159. package/dist/components/Icons.js +87 -67
  160. package/dist/components/Icons.mjs +1 -1
  161. package/dist/components/Inputs.js +6 -6
  162. package/dist/components/Inputs.mjs +2 -2
  163. package/dist/components/InputsExtra.js +11 -11
  164. package/dist/components/InputsExtra.mjs +2 -2
  165. package/dist/components/Layout.js +22 -22
  166. package/dist/components/Layout.mjs +3 -3
  167. package/dist/components/Marketing.js +5 -5
  168. package/dist/components/Marketing.mjs +2 -2
  169. package/dist/components/Menubar.js +3 -3
  170. package/dist/components/Menubar.mjs +2 -2
  171. package/dist/components/NavigationMenu.js +4 -4
  172. package/dist/components/NavigationMenu.mjs +3 -3
  173. package/dist/components/Notifications.js +3 -3
  174. package/dist/components/Notifications.mjs +2 -2
  175. package/dist/components/Overlay.js +4 -4
  176. package/dist/components/Overlay.mjs +2 -2
  177. package/dist/components/Permissions.js +4 -4
  178. package/dist/components/Permissions.mjs +3 -3
  179. package/dist/components/Pickers.js +8 -8
  180. package/dist/components/Pickers.mjs +3 -3
  181. package/dist/components/Popover.js +3 -3
  182. package/dist/components/Popover.mjs +2 -2
  183. package/dist/components/Toast.js +4 -4
  184. package/dist/components/Toast.mjs +2 -2
  185. package/dist/components/Toggle.d.mts +8 -0
  186. package/dist/components/Toggle.d.ts +8 -0
  187. package/dist/components/Toggle.js +6 -6
  188. package/dist/components/Toggle.mjs +1 -1
  189. package/dist/hooks/index.js +2 -2
  190. package/dist/hooks/index.mjs +1 -1
  191. package/dist/hooks/usePopoverPosition.js +2 -2
  192. package/dist/hooks/usePopoverPosition.mjs +1 -1
  193. package/dist/index.d.mts +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/index.js +247 -227
  196. package/dist/index.mjs +31 -31
  197. package/package.json +1 -1
  198. package/dist/chunk-7I5LFBQR.js.map +0 -1
  199. package/dist/chunk-B4I6BMNS.mjs.map +0 -1
  200. package/dist/chunk-CIBJKJV3.mjs.map +0 -1
  201. package/dist/chunk-PRECODB3.js.map +0 -1
  202. package/dist/chunk-PRML6VEF.mjs.map +0 -1
  203. package/dist/chunk-RQOTH7I7.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Permissions.tsx"],"names":["useLocale","jsx","cx","jsxs","Checkbox","format"],"mappings":"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","file":"chunk-JT2SFHBH.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"]}
1
+ {"version":3,"sources":["../src/components/Permissions.tsx"],"names":["useLocale","jsx","cx","jsxs","Checkbox","format"],"mappings":"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","file":"chunk-WGEEYXVZ.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"]}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { format } from './chunk-Q4HKSXUE.mjs';
3
3
  import { useLocale } from './chunk-PQV7HHCJ.mjs';
4
- import { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './chunk-CIBJKJV3.mjs';
4
+ import { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './chunk-VHYTJD6Z.mjs';
5
5
  import { cx } from './chunk-IEPCH3JB.mjs';
6
6
  import * as React from 'react';
7
7
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -104,5 +104,5 @@ function Kpi({ label, value, delta, hint, icon, className }) {
104
104
  }
105
105
 
106
106
  export { EmptyState, Kpi, NumberInput, Pagination };
107
- //# sourceMappingURL=chunk-IOBAPH6I.mjs.map
108
- //# sourceMappingURL=chunk-IOBAPH6I.mjs.map
107
+ //# sourceMappingURL=chunk-Y6EGYS4L.mjs.map
108
+ //# sourceMappingURL=chunk-Y6EGYS4L.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Inputs.tsx"],"names":["NumberInput"],"mappings":"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","file":"chunk-IOBAPH6I.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- NumberInput --------------------------------------------------\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type' | 'prefix'> {\n value?: number | null;\n onChange?: (v: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n invalid?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n /** Fill the container width (field grows, text left-aligned) instead of the\n * default intrinsic inline width. Mirrors Button's `fullWidth`. */\n fullWidth?: boolean;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n { value, onChange, min, max, step = 1, invalid, prefix, suffix, fullWidth, className, disabled, ...rest },\n ref\n) {\n const t = useLocale();\n const set = (next: number | null) => {\n if (next == null) return onChange?.(null);\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 incr = (mult: number) => set((value ?? 0) + step * mult);\n return (\n <div className={cx('number-input', fullWidth && 'number-input--block', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.decrement']} onClick={() => incr(-1)} disabled={disabled}>−</button>\n {prefix && <span className=\"number-input__affix\">{prefix}</span>}\n <input\n ref={ref}\n type=\"number\"\n className=\"number-input__field\"\n value={value ?? ''}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(e.target.value === '' ? null : Number(e.target.value))}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {suffix && <span className=\"number-input__affix\">{suffix}</span>}\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.increment']} onClick={() => incr(1)} disabled={disabled}>+</button>\n </div>\n );\n});\n\n// ---------- Pagination ---------------------------------------------------\nexport interface PaginationProps {\n page: number; // 1-indexed\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n siblings?: number;\n className?: string;\n}\n\nfunction pageList(current: number, total: number, siblings: number): (number | '...')[] {\n if (total <= 1) return [1];\n const range = (s: number, e: number) => Array.from({ length: e - s + 1 }, (_, i) => s + i);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const out: (number | '...')[] = [1];\n if (start > 2) out.push('...');\n out.push(...range(start, end));\n if (end < total - 1) out.push('...');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }: PaginationProps) {\n const t = useLocale();\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n // Collapse entirely when everything fits one page (v1.10.0): a lone\n // disabled pager was visual noise on every short/empty list.\n if (totalPages <= 1) return null;\n const pages = pageList(page, totalPages, siblings);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pagination', className)} aria-label={t['pagination.label']}>\n <span className=\"pagination__info\">{format(t['pagination.range'], { from, to, total })}</span>\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.max(1, page - 1))} disabled={page <= 1} aria-label={t['pagination.prev']}><ChevronLeft size={14} /></button>\n {pages.map((p, i) =>\n p === '...' ? (\n <span key={`e${i}`} className=\"pagination__ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cx('pagination__btn', p === page && 'is-active')}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.min(totalPages, page + 1))} disabled={page >= totalPages} aria-label={t['pagination.next']}><ChevronRight size={14} /></button>\n </nav>\n );\n}\n\n// ---------- EmptyState ---------------------------------------------------\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx('empty', className)} role=\"status\">\n {icon && <div className=\"empty__icon\" aria-hidden=\"true\">{icon}</div>}\n <div className=\"empty__title\">{title}</div>\n {description && <div className=\"empty__desc\">{description}</div>}\n {action}\n </div>\n );\n}\n\n// ---------- KPI / Stat card ----------------------------------------------\nexport interface KpiProps {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: { value: string; trend: 'up' | 'down' | 'flat' };\n hint?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport function Kpi({ label, value, delta, hint, icon, className }: KpiProps) {\n return (\n <div className={cx('kpi', className)}>\n <div className=\"kpi__head\">\n <span className=\"kpi__label\">{label}</span>\n {icon && <span className=\"kpi__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"kpi__value\">{value}</div>\n <div className=\"kpi__foot\">\n {delta && (\n <span className={cx('kpi__delta', `kpi__delta--${delta.trend}`)}>\n {delta.trend === 'up' ? <ChevronUp size={12} /> : delta.trend === 'down' ? <ChevronDown size={12} /> : '–'} {delta.value}\n </span>\n )}\n {hint && <span className=\"kpi__hint\">{hint}</span>}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Inputs.tsx"],"names":["NumberInput"],"mappings":"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","file":"chunk-Y6EGYS4L.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- NumberInput --------------------------------------------------\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type' | 'prefix'> {\n value?: number | null;\n onChange?: (v: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n invalid?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n /** Fill the container width (field grows, text left-aligned) instead of the\n * default intrinsic inline width. Mirrors Button's `fullWidth`. */\n fullWidth?: boolean;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n { value, onChange, min, max, step = 1, invalid, prefix, suffix, fullWidth, className, disabled, ...rest },\n ref\n) {\n const t = useLocale();\n const set = (next: number | null) => {\n if (next == null) return onChange?.(null);\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 incr = (mult: number) => set((value ?? 0) + step * mult);\n return (\n <div className={cx('number-input', fullWidth && 'number-input--block', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.decrement']} onClick={() => incr(-1)} disabled={disabled}>−</button>\n {prefix && <span className=\"number-input__affix\">{prefix}</span>}\n <input\n ref={ref}\n type=\"number\"\n className=\"number-input__field\"\n value={value ?? ''}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(e.target.value === '' ? null : Number(e.target.value))}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {suffix && <span className=\"number-input__affix\">{suffix}</span>}\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.increment']} onClick={() => incr(1)} disabled={disabled}>+</button>\n </div>\n );\n});\n\n// ---------- Pagination ---------------------------------------------------\nexport interface PaginationProps {\n page: number; // 1-indexed\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n siblings?: number;\n className?: string;\n}\n\nfunction pageList(current: number, total: number, siblings: number): (number | '...')[] {\n if (total <= 1) return [1];\n const range = (s: number, e: number) => Array.from({ length: e - s + 1 }, (_, i) => s + i);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const out: (number | '...')[] = [1];\n if (start > 2) out.push('...');\n out.push(...range(start, end));\n if (end < total - 1) out.push('...');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }: PaginationProps) {\n const t = useLocale();\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n // Collapse entirely when everything fits one page (v1.10.0): a lone\n // disabled pager was visual noise on every short/empty list.\n if (totalPages <= 1) return null;\n const pages = pageList(page, totalPages, siblings);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pagination', className)} aria-label={t['pagination.label']}>\n <span className=\"pagination__info\">{format(t['pagination.range'], { from, to, total })}</span>\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.max(1, page - 1))} disabled={page <= 1} aria-label={t['pagination.prev']}><ChevronLeft size={14} /></button>\n {pages.map((p, i) =>\n p === '...' ? (\n <span key={`e${i}`} className=\"pagination__ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cx('pagination__btn', p === page && 'is-active')}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.min(totalPages, page + 1))} disabled={page >= totalPages} aria-label={t['pagination.next']}><ChevronRight size={14} /></button>\n </nav>\n );\n}\n\n// ---------- EmptyState ---------------------------------------------------\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx('empty', className)} role=\"status\">\n {icon && <div className=\"empty__icon\" aria-hidden=\"true\">{icon}</div>}\n <div className=\"empty__title\">{title}</div>\n {description && <div className=\"empty__desc\">{description}</div>}\n {action}\n </div>\n );\n}\n\n// ---------- KPI / Stat card ----------------------------------------------\nexport interface KpiProps {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: { value: string; trend: 'up' | 'down' | 'flat' };\n hint?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport function Kpi({ label, value, delta, hint, icon, className }: KpiProps) {\n return (\n <div className={cx('kpi', className)}>\n <div className=\"kpi__head\">\n <span className=\"kpi__label\">{label}</span>\n {icon && <span className=\"kpi__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"kpi__value\">{value}</div>\n <div className=\"kpi__foot\">\n {delta && (\n <span className={cx('kpi__delta', `kpi__delta--${delta.trend}`)}>\n {delta.trend === 'up' ? <ChevronUp size={12} /> : delta.trend === 'down' ? <ChevronDown size={12} /> : '–'} {delta.value}\n </span>\n )}\n {hint && <span className=\"kpi__hint\">{hint}</span>}\n </div>\n </div>\n );\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
5
- var chunk7I5LFBQR_js = require('./chunk-7I5LFBQR.js');
5
+ var chunkCRKYET66_js = require('./chunk-CRKYET66.js');
6
6
  var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
7
7
  var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
8
8
  var React = require('react');
@@ -41,7 +41,7 @@ function ContextMenu({ items, children, className, menuClassName, ariaLabel = "M
41
41
  anchorRef.current = { getBoundingClientRect: () => new DOMRect(x, y, 0, 0) };
42
42
  setPoint({ x, y });
43
43
  };
44
- const pos = chunk7I5LFBQR_js.usePopoverPosition(anchorRef, menuRef, {
44
+ const pos = chunkCRKYET66_js.usePopoverPosition(anchorRef, menuRef, {
45
45
  open,
46
46
  side: "bottom",
47
47
  align: "start",
@@ -90,5 +90,5 @@ function ContextMenu({ items, children, className, menuClassName, ariaLabel = "M
90
90
  }
91
91
 
92
92
  exports.ContextMenu = ContextMenu;
93
- //# sourceMappingURL=chunk-GKSUYHGO.js.map
94
- //# sourceMappingURL=chunk-GKSUYHGO.js.map
93
+ //# sourceMappingURL=chunk-YLISYQNI.js.map
94
+ //# sourceMappingURL=chunk-YLISYQNI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ContextMenu.tsx"],"names":["React","usePopoverPosition","useDismiss","cx","Portal","jsx","jsxs"],"mappings":"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","file":"chunk-GKSUYHGO.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Portal } from './Portal';\nimport { usePopoverPosition, type VirtualElement } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface ContextMenuItem {\n id: string;\n label?: React.ReactNode;\n icon?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n}\n\nexport interface ContextMenuProps {\n items: ContextMenuItem[];\n children: React.ReactNode;\n className?: string;\n menuClassName?: string;\n ariaLabel?: string;\n}\n\nexport function ContextMenu({ items, children, className, menuClassName, ariaLabel = 'Menú contextual' }: ContextMenuProps) {\n const [point, setPoint] = React.useState<{ x: number; y: number } | null>(null);\n const menuRef = React.useRef<HTMLUListElement>(null);\n const anchorRef = React.useRef<VirtualElement | null>(null);\n const open = point !== null;\n\n const close = () => setPoint(null);\n\n const onContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n const x = e.clientX;\n const y = e.clientY;\n // Virtual anchor: a zero-size rect under the cursor. usePopoverPosition\n // then handles viewport flip/clamp + body portal (escapes overflow).\n anchorRef.current = { getBoundingClientRect: () => new DOMRect(x, y, 0, 0) };\n setPoint({ x, y });\n };\n\n const pos = usePopoverPosition(anchorRef, menuRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 2,\n });\n\n useDismiss({ open, onDismiss: close, refs: [menuRef] });\n\n const handleSelect = (item: ContextMenuItem) => {\n if (item.disabled || item.separator) return;\n item.onSelect?.();\n close();\n };\n\n return (\n <span className={cx('context-menu', className)} onContextMenu={onContextMenu}>\n {children}\n {open && (\n <Portal>\n <ul\n ref={menuRef}\n role=\"menu\"\n aria-label={ariaLabel}\n className={cx('context-menu__menu', 'is-floating', menuClassName)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {items.map((item) =>\n item.separator ? (\n <li key={item.id} className=\"context-menu__separator\" role=\"separator\" />\n ) : (\n <li key={item.id} role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className={cx('context-menu__item', item.disabled && 'is-disabled', item.danger && 'context-menu__item--danger')}\n disabled={item.disabled}\n onClick={() => handleSelect(item)}\n >\n {item.icon && <span className=\"context-menu__icon\">{item.icon}</span>}\n <span className=\"context-menu__label\">{item.label}</span>\n </button>\n </li>\n )\n )}\n </ul>\n </Portal>\n )}\n </span>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ContextMenu.tsx"],"names":["React","usePopoverPosition","useDismiss","cx","Portal","jsx","jsxs"],"mappings":"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","file":"chunk-YLISYQNI.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Portal } from './Portal';\nimport { usePopoverPosition, type VirtualElement } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface ContextMenuItem {\n id: string;\n label?: React.ReactNode;\n icon?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n}\n\nexport interface ContextMenuProps {\n items: ContextMenuItem[];\n children: React.ReactNode;\n className?: string;\n menuClassName?: string;\n ariaLabel?: string;\n}\n\nexport function ContextMenu({ items, children, className, menuClassName, ariaLabel = 'Menú contextual' }: ContextMenuProps) {\n const [point, setPoint] = React.useState<{ x: number; y: number } | null>(null);\n const menuRef = React.useRef<HTMLUListElement>(null);\n const anchorRef = React.useRef<VirtualElement | null>(null);\n const open = point !== null;\n\n const close = () => setPoint(null);\n\n const onContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n const x = e.clientX;\n const y = e.clientY;\n // Virtual anchor: a zero-size rect under the cursor. usePopoverPosition\n // then handles viewport flip/clamp + body portal (escapes overflow).\n anchorRef.current = { getBoundingClientRect: () => new DOMRect(x, y, 0, 0) };\n setPoint({ x, y });\n };\n\n const pos = usePopoverPosition(anchorRef, menuRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 2,\n });\n\n useDismiss({ open, onDismiss: close, refs: [menuRef] });\n\n const handleSelect = (item: ContextMenuItem) => {\n if (item.disabled || item.separator) return;\n item.onSelect?.();\n close();\n };\n\n return (\n <span className={cx('context-menu', className)} onContextMenu={onContextMenu}>\n {children}\n {open && (\n <Portal>\n <ul\n ref={menuRef}\n role=\"menu\"\n aria-label={ariaLabel}\n className={cx('context-menu__menu', 'is-floating', menuClassName)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {items.map((item) =>\n item.separator ? (\n <li key={item.id} className=\"context-menu__separator\" role=\"separator\" />\n ) : (\n <li key={item.id} role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className={cx('context-menu__item', item.disabled && 'is-disabled', item.danger && 'context-menu__item--danger')}\n disabled={item.disabled}\n onClick={() => handleSelect(item)}\n >\n {item.icon && <span className=\"context-menu__icon\">{item.icon}</span>}\n <span className=\"context-menu__label\">{item.label}</span>\n </button>\n </li>\n )\n )}\n </ul>\n </Portal>\n )}\n </span>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { ChevronLeft, ChevronRight } from './chunk-CIBJKJV3.mjs';
2
+ import { ChevronLeft, ChevronRight } from './chunk-VHYTJD6Z.mjs';
3
3
  import { cx } from './chunk-IEPCH3JB.mjs';
4
4
  import * as React from 'react';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -117,5 +117,5 @@ function Carousel({
117
117
  }
118
118
 
119
119
  export { Carousel };
120
- //# sourceMappingURL=chunk-ORUQ5GCU.mjs.map
121
- //# sourceMappingURL=chunk-ORUQ5GCU.mjs.map
120
+ //# sourceMappingURL=chunk-ZA2AXUIB.mjs.map
121
+ //# sourceMappingURL=chunk-ZA2AXUIB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-ORUQ5GCU.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-ZA2AXUIB.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
@@ -1,34 +1,34 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkMJ6UOTWQ_js = require('../chunk-MJ6UOTWQ.js');
4
+ var chunkM3RO3GSC_js = require('../chunk-M3RO3GSC.js');
5
5
  require('../chunk-DFQLWCIC.js');
6
6
  require('../chunk-MVJITG75.js');
7
7
  require('../chunk-XMLBKK7X.js');
8
- require('../chunk-7I5LFBQR.js');
8
+ require('../chunk-CRKYET66.js');
9
9
  require('../chunk-WAGWB35Q.js');
10
10
  require('../chunk-3PXYCXDW.js');
11
11
  require('../chunk-4VMQLSHV.js');
12
- require('../chunk-RQOTH7I7.js');
12
+ require('../chunk-3HA3VO2I.js');
13
13
  require('../chunk-PASF6T4H.js');
14
14
 
15
15
 
16
16
 
17
17
  Object.defineProperty(exports, "CommandPalette", {
18
18
  enumerable: true,
19
- get: function () { return chunkMJ6UOTWQ_js.CommandPalette; }
19
+ get: function () { return chunkM3RO3GSC_js.CommandPalette; }
20
20
  });
21
21
  Object.defineProperty(exports, "DateRangePicker", {
22
22
  enumerable: true,
23
- get: function () { return chunkMJ6UOTWQ_js.DateRangePicker; }
23
+ get: function () { return chunkM3RO3GSC_js.DateRangePicker; }
24
24
  });
25
25
  Object.defineProperty(exports, "MultiCombobox", {
26
26
  enumerable: true,
27
- get: function () { return chunkMJ6UOTWQ_js.MultiCombobox; }
27
+ get: function () { return chunkM3RO3GSC_js.MultiCombobox; }
28
28
  });
29
29
  Object.defineProperty(exports, "useCommandPalette", {
30
30
  enumerable: true,
31
- get: function () { return chunkMJ6UOTWQ_js.useCommandPalette; }
31
+ get: function () { return chunkM3RO3GSC_js.useCommandPalette; }
32
32
  });
33
33
  //# sourceMappingURL=AdvancedPickers.js.map
34
34
  //# sourceMappingURL=AdvancedPickers.js.map
@@ -1,13 +1,13 @@
1
1
  'use client';
2
- export { CommandPalette, DateRangePicker, MultiCombobox, useCommandPalette } from '../chunk-L4ITC2U6.mjs';
2
+ export { CommandPalette, DateRangePicker, MultiCombobox, useCommandPalette } from '../chunk-NCXODB4O.mjs';
3
3
  import '../chunk-Q4HKSXUE.mjs';
4
4
  import '../chunk-4QHE5H36.mjs';
5
5
  import '../chunk-6P2TKRTL.mjs';
6
- import '../chunk-PRML6VEF.mjs';
6
+ import '../chunk-5XT2LX3I.mjs';
7
7
  import '../chunk-FKBQYQQD.mjs';
8
8
  import '../chunk-5GEWIK4T.mjs';
9
9
  import '../chunk-PQV7HHCJ.mjs';
10
- import '../chunk-CIBJKJV3.mjs';
10
+ import '../chunk-VHYTJD6Z.mjs';
11
11
  import '../chunk-IEPCH3JB.mjs';
12
12
  //# sourceMappingURL=AdvancedPickers.mjs.map
13
13
  //# sourceMappingURL=AdvancedPickers.mjs.map
@@ -1,20 +1,20 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkS4YPRJQQ_js = require('../chunk-S4YPRJQQ.js');
4
+ var chunk6BRRRENF_js = require('../chunk-6BRRRENF.js');
5
5
  require('../chunk-4VMQLSHV.js');
6
- require('../chunk-RQOTH7I7.js');
6
+ require('../chunk-3HA3VO2I.js');
7
7
  require('../chunk-PASF6T4H.js');
8
8
 
9
9
 
10
10
 
11
11
  Object.defineProperty(exports, "AppShell", {
12
12
  enumerable: true,
13
- get: function () { return chunkS4YPRJQQ_js.AppShell; }
13
+ get: function () { return chunk6BRRRENF_js.AppShell; }
14
14
  });
15
15
  Object.defineProperty(exports, "PageHeader", {
16
16
  enumerable: true,
17
- get: function () { return chunkS4YPRJQQ_js.PageHeader; }
17
+ get: function () { return chunk6BRRRENF_js.PageHeader; }
18
18
  });
19
19
  //# sourceMappingURL=AppShell.js.map
20
20
  //# sourceMappingURL=AppShell.js.map
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { AppShell, PageHeader } from '../chunk-HAZDZYF4.mjs';
2
+ export { AppShell, PageHeader } from '../chunk-SHS4QYYN.mjs';
3
3
  import '../chunk-PQV7HHCJ.mjs';
4
- import '../chunk-CIBJKJV3.mjs';
4
+ import '../chunk-VHYTJD6Z.mjs';
5
5
  import '../chunk-IEPCH3JB.mjs';
6
6
  //# sourceMappingURL=AppShell.mjs.map
7
7
  //# sourceMappingURL=AppShell.mjs.map
@@ -1,15 +1,15 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunk55TOQMS2_js = require('../chunk-55TOQMS2.js');
5
- require('../chunk-RQOTH7I7.js');
4
+ var chunk4CPGEYY3_js = require('../chunk-4CPGEYY3.js');
5
+ require('../chunk-3HA3VO2I.js');
6
6
  require('../chunk-PASF6T4H.js');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "Carousel", {
11
11
  enumerable: true,
12
- get: function () { return chunk55TOQMS2_js.Carousel; }
12
+ get: function () { return chunk4CPGEYY3_js.Carousel; }
13
13
  });
14
14
  //# sourceMappingURL=Carousel.js.map
15
15
  //# sourceMappingURL=Carousel.js.map
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { Carousel } from '../chunk-ORUQ5GCU.mjs';
3
- import '../chunk-CIBJKJV3.mjs';
2
+ export { Carousel } from '../chunk-ZA2AXUIB.mjs';
3
+ import '../chunk-VHYTJD6Z.mjs';
4
4
  import '../chunk-IEPCH3JB.mjs';
5
5
  //# sourceMappingURL=Carousel.mjs.map
6
6
  //# sourceMappingURL=Carousel.mjs.map
@@ -1,19 +1,19 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkL353APIO_js = require('../chunk-L353APIO.js');
5
- require('../chunk-RQOTH7I7.js');
4
+ var chunkHEI6PUMK_js = require('../chunk-HEI6PUMK.js');
5
+ require('../chunk-3HA3VO2I.js');
6
6
  require('../chunk-PASF6T4H.js');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "CodeBlock", {
11
11
  enumerable: true,
12
- get: function () { return chunkL353APIO_js.CodeBlock; }
12
+ get: function () { return chunkHEI6PUMK_js.CodeBlock; }
13
13
  });
14
14
  Object.defineProperty(exports, "JsonViewer", {
15
15
  enumerable: true,
16
- get: function () { return chunkL353APIO_js.JsonViewer; }
16
+ get: function () { return chunkHEI6PUMK_js.JsonViewer; }
17
17
  });
18
18
  //# sourceMappingURL=Code.js.map
19
19
  //# sourceMappingURL=Code.js.map
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { CodeBlock, JsonViewer } from '../chunk-RBJRQ44B.mjs';
3
- import '../chunk-CIBJKJV3.mjs';
2
+ export { CodeBlock, JsonViewer } from '../chunk-7IPB5A75.mjs';
3
+ import '../chunk-VHYTJD6Z.mjs';
4
4
  import '../chunk-IEPCH3JB.mjs';
5
5
  //# sourceMappingURL=Code.mjs.map
6
6
  //# sourceMappingURL=Code.mjs.map
@@ -1,29 +1,29 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkIKGW7HHG_js = require('../chunk-IKGW7HHG.js');
5
- require('../chunk-56NJXIH7.js');
4
+ var chunkVAAB5DXM_js = require('../chunk-VAAB5DXM.js');
5
+ require('../chunk-3OT3FROI.js');
6
6
  require('../chunk-DFQLWCIC.js');
7
7
  require('../chunk-XMLBKK7X.js');
8
- require('../chunk-7I5LFBQR.js');
8
+ require('../chunk-CRKYET66.js');
9
9
  require('../chunk-WAGWB35Q.js');
10
10
  require('../chunk-4VMQLSHV.js');
11
- require('../chunk-RQOTH7I7.js');
11
+ require('../chunk-3HA3VO2I.js');
12
12
  require('../chunk-PASF6T4H.js');
13
13
 
14
14
 
15
15
 
16
16
  Object.defineProperty(exports, "AttachmentList", {
17
17
  enumerable: true,
18
- get: function () { return chunkIKGW7HHG_js.AttachmentList; }
18
+ get: function () { return chunkVAAB5DXM_js.AttachmentList; }
19
19
  });
20
20
  Object.defineProperty(exports, "CommentThread", {
21
21
  enumerable: true,
22
- get: function () { return chunkIKGW7HHG_js.CommentThread; }
22
+ get: function () { return chunkVAAB5DXM_js.CommentThread; }
23
23
  });
24
24
  Object.defineProperty(exports, "_internal", {
25
25
  enumerable: true,
26
- get: function () { return chunkIKGW7HHG_js._internal; }
26
+ get: function () { return chunkVAAB5DXM_js._internal; }
27
27
  });
28
28
  //# sourceMappingURL=Comments.js.map
29
29
  //# sourceMappingURL=Comments.js.map
@@ -1,12 +1,12 @@
1
1
  'use client';
2
- export { AttachmentList, CommentThread, _internal } from '../chunk-HRDLEOYO.mjs';
3
- import '../chunk-OJNEGJ3P.mjs';
2
+ export { AttachmentList, CommentThread, _internal } from '../chunk-PVSP7Y2F.mjs';
3
+ import '../chunk-B4BPE3LC.mjs';
4
4
  import '../chunk-Q4HKSXUE.mjs';
5
5
  import '../chunk-6P2TKRTL.mjs';
6
- import '../chunk-PRML6VEF.mjs';
6
+ import '../chunk-5XT2LX3I.mjs';
7
7
  import '../chunk-FKBQYQQD.mjs';
8
8
  import '../chunk-PQV7HHCJ.mjs';
9
- import '../chunk-CIBJKJV3.mjs';
9
+ import '../chunk-VHYTJD6Z.mjs';
10
10
  import '../chunk-IEPCH3JB.mjs';
11
11
  //# sourceMappingURL=Comments.mjs.map
12
12
  //# sourceMappingURL=Comments.mjs.map
@@ -1,60 +1,60 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkFGNHN34U_js = require('../chunk-FGNHN34U.js');
5
- require('../chunk-BSAHYKPF.js');
4
+ var chunkNDMMQZZZ_js = require('../chunk-NDMMQZZZ.js');
5
+ require('../chunk-Q3DKZR44.js');
6
6
  require('../chunk-FL4ZCWUF.js');
7
7
  require('../chunk-DFQLWCIC.js');
8
8
  require('../chunk-3PXYCXDW.js');
9
9
  require('../chunk-4VMQLSHV.js');
10
- require('../chunk-RQOTH7I7.js');
10
+ require('../chunk-3HA3VO2I.js');
11
11
  require('../chunk-PASF6T4H.js');
12
12
 
13
13
 
14
14
 
15
15
  Object.defineProperty(exports, "AddressForm", {
16
16
  enumerable: true,
17
- get: function () { return chunkFGNHN34U_js.AddressForm; }
17
+ get: function () { return chunkNDMMQZZZ_js.AddressForm; }
18
18
  });
19
19
  Object.defineProperty(exports, "CartDrawer", {
20
20
  enumerable: true,
21
- get: function () { return chunkFGNHN34U_js.CartDrawer; }
21
+ get: function () { return chunkNDMMQZZZ_js.CartDrawer; }
22
22
  });
23
23
  Object.defineProperty(exports, "CompareTable", {
24
24
  enumerable: true,
25
- get: function () { return chunkFGNHN34U_js.CompareTable; }
25
+ get: function () { return chunkNDMMQZZZ_js.CompareTable; }
26
26
  });
27
27
  Object.defineProperty(exports, "FreeShippingProgress", {
28
28
  enumerable: true,
29
- get: function () { return chunkFGNHN34U_js.FreeShippingProgress; }
29
+ get: function () { return chunkNDMMQZZZ_js.FreeShippingProgress; }
30
30
  });
31
31
  Object.defineProperty(exports, "OrderSummary", {
32
32
  enumerable: true,
33
- get: function () { return chunkFGNHN34U_js.OrderSummary; }
33
+ get: function () { return chunkNDMMQZZZ_js.OrderSummary; }
34
34
  });
35
35
  Object.defineProperty(exports, "PriceDisplay", {
36
36
  enumerable: true,
37
- get: function () { return chunkFGNHN34U_js.PriceDisplay; }
37
+ get: function () { return chunkNDMMQZZZ_js.PriceDisplay; }
38
38
  });
39
39
  Object.defineProperty(exports, "PromoCodeInput", {
40
40
  enumerable: true,
41
- get: function () { return chunkFGNHN34U_js.PromoCodeInput; }
41
+ get: function () { return chunkNDMMQZZZ_js.PromoCodeInput; }
42
42
  });
43
43
  Object.defineProperty(exports, "QuantitySelector", {
44
44
  enumerable: true,
45
- get: function () { return chunkFGNHN34U_js.QuantitySelector; }
45
+ get: function () { return chunkNDMMQZZZ_js.QuantitySelector; }
46
46
  });
47
47
  Object.defineProperty(exports, "Rating", {
48
48
  enumerable: true,
49
- get: function () { return chunkFGNHN34U_js.Rating; }
49
+ get: function () { return chunkNDMMQZZZ_js.Rating; }
50
50
  });
51
51
  Object.defineProperty(exports, "VariantSelector", {
52
52
  enumerable: true,
53
- get: function () { return chunkFGNHN34U_js.VariantSelector; }
53
+ get: function () { return chunkNDMMQZZZ_js.VariantSelector; }
54
54
  });
55
55
  Object.defineProperty(exports, "WishlistButton", {
56
56
  enumerable: true,
57
- get: function () { return chunkFGNHN34U_js.WishlistButton; }
57
+ get: function () { return chunkNDMMQZZZ_js.WishlistButton; }
58
58
  });
59
59
  //# sourceMappingURL=Commerce.js.map
60
60
  //# sourceMappingURL=Commerce.js.map
@@ -1,11 +1,11 @@
1
1
  'use client';
2
- export { AddressForm, CartDrawer, CompareTable, FreeShippingProgress, OrderSummary, PriceDisplay, PromoCodeInput, QuantitySelector, Rating, VariantSelector, WishlistButton } from '../chunk-XLLARFVP.mjs';
3
- import '../chunk-JUSOPJZW.mjs';
2
+ export { AddressForm, CartDrawer, CompareTable, FreeShippingProgress, OrderSummary, PriceDisplay, PromoCodeInput, QuantitySelector, Rating, VariantSelector, WishlistButton } from '../chunk-CUWWADL2.mjs';
3
+ import '../chunk-3U6C2BFM.mjs';
4
4
  import '../chunk-U3JH4T3A.mjs';
5
5
  import '../chunk-Q4HKSXUE.mjs';
6
6
  import '../chunk-5GEWIK4T.mjs';
7
7
  import '../chunk-PQV7HHCJ.mjs';
8
- import '../chunk-CIBJKJV3.mjs';
8
+ import '../chunk-VHYTJD6Z.mjs';
9
9
  import '../chunk-IEPCH3JB.mjs';
10
10
  //# sourceMappingURL=Commerce.mjs.map
11
11
  //# sourceMappingURL=Commerce.mjs.map
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkGKSUYHGO_js = require('../chunk-GKSUYHGO.js');
4
+ var chunkYLISYQNI_js = require('../chunk-YLISYQNI.js');
5
5
  require('../chunk-XMLBKK7X.js');
6
- require('../chunk-7I5LFBQR.js');
6
+ require('../chunk-CRKYET66.js');
7
7
  require('../chunk-WAGWB35Q.js');
8
8
  require('../chunk-PASF6T4H.js');
9
9
 
@@ -11,7 +11,7 @@ require('../chunk-PASF6T4H.js');
11
11
 
12
12
  Object.defineProperty(exports, "ContextMenu", {
13
13
  enumerable: true,
14
- get: function () { return chunkGKSUYHGO_js.ContextMenu; }
14
+ get: function () { return chunkYLISYQNI_js.ContextMenu; }
15
15
  });
16
16
  //# sourceMappingURL=ContextMenu.js.map
17
17
  //# sourceMappingURL=ContextMenu.js.map
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { ContextMenu } from '../chunk-EJ263Y5X.mjs';
2
+ export { ContextMenu } from '../chunk-ARGGKLQD.mjs';
3
3
  import '../chunk-6P2TKRTL.mjs';
4
- import '../chunk-PRML6VEF.mjs';
4
+ import '../chunk-5XT2LX3I.mjs';
5
5
  import '../chunk-FKBQYQQD.mjs';
6
6
  import '../chunk-IEPCH3JB.mjs';
7
7
  //# sourceMappingURL=ContextMenu.mjs.map