@misael703/ui 1.18.1 → 1.19.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 (102) hide show
  1. package/dist/{chunk-45B2B3QV.mjs → chunk-2I7NE7QR.mjs} +3 -3
  2. package/dist/{chunk-45B2B3QV.mjs.map → chunk-2I7NE7QR.mjs.map} +1 -1
  3. package/dist/{chunk-BHNVAG53.js → chunk-56NJXIH7.js} +3 -3
  4. package/dist/{chunk-BHNVAG53.js.map → chunk-56NJXIH7.js.map} +1 -1
  5. package/dist/{chunk-B3AEQVHQ.mjs → chunk-5A3MAGA3.mjs} +4 -4
  6. package/dist/{chunk-B3AEQVHQ.mjs.map → chunk-5A3MAGA3.mjs.map} +1 -1
  7. package/dist/{chunk-3RVWDBWN.mjs → chunk-5QQ6BTD5.mjs} +3 -3
  8. package/dist/{chunk-3RVWDBWN.mjs.map → chunk-5QQ6BTD5.mjs.map} +1 -1
  9. package/dist/{chunk-FURQZLAW.mjs → chunk-BCE5WXM6.mjs} +3 -3
  10. package/dist/{chunk-FURQZLAW.mjs.map → chunk-BCE5WXM6.mjs.map} +1 -1
  11. package/dist/{chunk-4AJLEFZ6.mjs → chunk-EJ263Y5X.mjs} +3 -3
  12. package/dist/{chunk-4AJLEFZ6.mjs.map → chunk-EJ263Y5X.mjs.map} +1 -1
  13. package/dist/{chunk-APPJTIZQ.mjs → chunk-FA6526ME.mjs} +3 -3
  14. package/dist/{chunk-APPJTIZQ.mjs.map → chunk-FA6526ME.mjs.map} +1 -1
  15. package/dist/{chunk-BUPHP3FP.js → chunk-FS42XEU7.js} +4 -4
  16. package/dist/{chunk-BUPHP3FP.js.map → chunk-FS42XEU7.js.map} +1 -1
  17. package/dist/{chunk-ZY7KPFPW.js → chunk-GKSUYHGO.js} +3 -3
  18. package/dist/{chunk-ZY7KPFPW.js.map → chunk-GKSUYHGO.js.map} +1 -1
  19. package/dist/{chunk-PHS5G7WB.mjs → chunk-HRDLEOYO.mjs} +3 -3
  20. package/dist/{chunk-PHS5G7WB.mjs.map → chunk-HRDLEOYO.mjs.map} +1 -1
  21. package/dist/{chunk-ZGJ6VFJD.js → chunk-IKGW7HHG.js} +4 -4
  22. package/dist/{chunk-ZGJ6VFJD.js.map → chunk-IKGW7HHG.js.map} +1 -1
  23. package/dist/{chunk-ETG3VM56.mjs → chunk-IOBAPH6I.mjs} +4 -4
  24. package/dist/chunk-IOBAPH6I.mjs.map +1 -0
  25. package/dist/{chunk-KRTCWOBI.js → chunk-IZ3FMCZ5.js} +3 -3
  26. package/dist/{chunk-KRTCWOBI.js.map → chunk-IZ3FMCZ5.js.map} +1 -1
  27. package/dist/{chunk-LP73F2CH.js → chunk-IZELILHK.js} +3 -3
  28. package/dist/{chunk-LP73F2CH.js.map → chunk-IZELILHK.js.map} +1 -1
  29. package/dist/{chunk-UIMVKTC3.mjs → chunk-L4ITC2U6.mjs} +4 -4
  30. package/dist/{chunk-UIMVKTC3.mjs.map → chunk-L4ITC2U6.mjs.map} +1 -1
  31. package/dist/{chunk-EBDHFIBB.mjs → chunk-L4JQRY4U.mjs} +9 -8
  32. package/dist/chunk-L4JQRY4U.mjs.map +1 -0
  33. package/dist/{chunk-RL4EIKLP.js → chunk-MJ6UOTWQ.js} +4 -4
  34. package/dist/{chunk-RL4EIKLP.js.map → chunk-MJ6UOTWQ.js.map} +1 -1
  35. package/dist/{chunk-JRR3RYQA.js → chunk-MOHWK6FH.js} +8 -7
  36. package/dist/chunk-MOHWK6FH.js.map +1 -0
  37. package/dist/{chunk-KIOJVQ6T.js → chunk-O72DMPH6.js} +3 -3
  38. package/dist/{chunk-KIOJVQ6T.js.map → chunk-O72DMPH6.js.map} +1 -1
  39. package/dist/{chunk-QRBZH2ZZ.mjs → chunk-OJNEGJ3P.mjs} +3 -3
  40. package/dist/{chunk-QRBZH2ZZ.mjs.map → chunk-OJNEGJ3P.mjs.map} +1 -1
  41. package/dist/{chunk-BJXLKT7Q.mjs → chunk-PKCLA2FD.mjs} +3 -3
  42. package/dist/{chunk-BJXLKT7Q.mjs.map → chunk-PKCLA2FD.mjs.map} +1 -1
  43. package/dist/{chunk-BHEHMWKC.mjs → chunk-QM7BCSCL.mjs} +3 -3
  44. package/dist/{chunk-BHEHMWKC.mjs.map → chunk-QM7BCSCL.mjs.map} +1 -1
  45. package/dist/{chunk-KTWHW6UV.js → chunk-RCXLCU5A.js} +4 -4
  46. package/dist/chunk-RCXLCU5A.js.map +1 -0
  47. package/dist/{chunk-ASUZ6KHJ.js → chunk-RHPXE3E7.js} +4 -4
  48. package/dist/{chunk-ASUZ6KHJ.js.map → chunk-RHPXE3E7.js.map} +1 -1
  49. package/dist/{chunk-CHIU6AMF.js → chunk-U3I4IMJI.js} +3 -3
  50. package/dist/{chunk-CHIU6AMF.js.map → chunk-U3I4IMJI.js.map} +1 -1
  51. package/dist/{chunk-YELYJNK3.js → chunk-VCBVLG3Q.js} +3 -3
  52. package/dist/{chunk-YELYJNK3.js.map → chunk-VCBVLG3Q.js.map} +1 -1
  53. package/dist/{chunk-HJVMFD34.js → chunk-VDBGWTIG.js} +3 -3
  54. package/dist/{chunk-HJVMFD34.js.map → chunk-VDBGWTIG.js.map} +1 -1
  55. package/dist/{chunk-YZMUANQD.mjs → chunk-VFZ2X655.mjs} +3 -3
  56. package/dist/{chunk-YZMUANQD.mjs.map → chunk-VFZ2X655.mjs.map} +1 -1
  57. package/dist/{chunk-AHJ7A44D.js → chunk-XCZVZVYJ.js} +4 -4
  58. package/dist/{chunk-AHJ7A44D.js.map → chunk-XCZVZVYJ.js.map} +1 -1
  59. package/dist/{chunk-4QNCTJM6.mjs → chunk-YSU3WFND.mjs} +3 -3
  60. package/dist/{chunk-4QNCTJM6.mjs.map → chunk-YSU3WFND.mjs.map} +1 -1
  61. package/dist/components/AdvancedPickers.js +8 -8
  62. package/dist/components/AdvancedPickers.mjs +4 -4
  63. package/dist/components/Comments.js +6 -6
  64. package/dist/components/Comments.mjs +3 -3
  65. package/dist/components/ContextMenu.js +3 -3
  66. package/dist/components/ContextMenu.mjs +2 -2
  67. package/dist/components/DataTable.js +8 -8
  68. package/dist/components/DataTable.mjs +2 -2
  69. package/dist/components/Display.js +13 -13
  70. package/dist/components/Display.mjs +2 -2
  71. package/dist/components/Display2.js +6 -6
  72. package/dist/components/Display2.mjs +2 -2
  73. package/dist/components/Display3.js +10 -10
  74. package/dist/components/Display3.mjs +4 -4
  75. package/dist/components/Editing.js +7 -7
  76. package/dist/components/Editing.mjs +2 -2
  77. package/dist/components/HoverCard.js +3 -3
  78. package/dist/components/HoverCard.mjs +2 -2
  79. package/dist/components/Inputs.d.mts +3 -0
  80. package/dist/components/Inputs.d.ts +3 -0
  81. package/dist/components/Inputs.js +5 -5
  82. package/dist/components/Inputs.mjs +1 -1
  83. package/dist/components/Layout.js +22 -22
  84. package/dist/components/Layout.mjs +3 -3
  85. package/dist/components/Menubar.js +3 -3
  86. package/dist/components/Menubar.mjs +2 -2
  87. package/dist/components/NavigationMenu.js +3 -3
  88. package/dist/components/NavigationMenu.mjs +2 -2
  89. package/dist/components/Pickers.d.mts +8 -1
  90. package/dist/components/Pickers.d.ts +8 -1
  91. package/dist/components/Pickers.js +8 -8
  92. package/dist/components/Pickers.mjs +3 -3
  93. package/dist/components/Popover.js +3 -3
  94. package/dist/components/Popover.mjs +2 -2
  95. package/dist/index.js +297 -297
  96. package/dist/index.mjs +30 -30
  97. package/dist/styles.css +1 -1
  98. package/package.json +1 -1
  99. package/dist/chunk-EBDHFIBB.mjs.map +0 -1
  100. package/dist/chunk-ETG3VM56.mjs.map +0 -1
  101. package/dist/chunk-JRR3RYQA.js.map +0 -1
  102. package/dist/chunk-KTWHW6UV.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Display3.tsx"],"names":["Timeline"],"mappings":";;;;;;;;AAiBO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,IAAA,GAAO,EAAA,EAAI,SAAA,EAAW,GAAG,IAAA,EAAK,EAAkB;AAC3G,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,MAAA;AACvD,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,aAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAC9C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAO,GAAA,EAAK,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,cAAc,IAAA,EAAY,CAAA;AAAA,oBACxE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MACtC,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EAClD;AAAA,GAAA,EACF,CAAA;AAEJ;AAWO,SAAS,eAAA,CAAgB,EAAE,IAAA,GAAO,SAAA,EAAW,OAAO,KAAA,EAAO,SAAA,EAAW,GAAG,IAAA,EAAK,EAAyB;AAC5G,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA,EAAG,IAAA,EAAK,QAAA,EAAU,GAAG,IAAA,EACpE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAI,KAAA,IAAS,YAAY,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,IACzH,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC7D,CAAA;AAEJ;AAKO,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EAC5B,SAASA,SAAAA,CAAS,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC7C,IAAA,uBAAO,GAAA,CAAC,QAAG,GAAA,EAAU,SAAA,EAAW,GAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EACvE;AACF;AASO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,GAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAsB;AACrH,EAAA,uBACE,IAAA,CAAC,QAAG,SAAA,EAAW,EAAA,CAAG,kBAAkB,SAAS,CAAA,EAAI,GAAG,IAAA,EAClD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,CAAA,EAAG,aAAA,EAAY,MAAA,EAC/E,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACvC,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAkB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MAC9C,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAqB,QAAA,EAAS;AAAA,KAAA,EAC5D;AAAA,GAAA,EACF,CAAA;AAEJ;AAkBA,SAAS,YAAY,KAAA,EAA2C;AAC9D,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,EAAA;AACnB;AAEO,SAAS,IAAA,CAAK;AAAA,EACnB,KAAA;AAAA,EACA,kBAAkB,EAAC;AAAA,EACnB,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,MAAM,CAAC,UAAU,WAAW,CAAA,GAAU,eAAsB,IAAI,GAAA,CAAI,eAAe,CAAC,CAAA;AACpF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,eAA6B,MAAS,CAAA;AAC5E,EAAA,MAAM,OAAA,GAAgB,aAAyB,IAAI,CAAA;AAInD,EAAA,MAAM,eAAA,GAAkB,QAAA,IAAY,UAAA,IAAc,WAAA,CAAY,KAAK,CAAA;AAEnE,EAAA,MAAM,MAAA,GAAe,KAAA,CAAA,WAAA,CAAY,CAAC,EAAA,KAAe;AAC/C,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,WAC3B,IAAA,CAAK,IAAI,EAAE,CAAA;AAChB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAe,MACnB,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,gBAAA,CAA8B,mBAAmB,CAAA,IAAK,EAAE,CAAA;AAEtF,EAAA,MAAM,SAAA,GAAY,CAAC,EAAA,KAAsC;AACvD,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,WAAA,CAAY,EAAA,CAAG,QAAQ,MAAM,CAAA;AAC7B,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX,CAAA;AAKA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAmD;AACxE,IAAA,SAAA,GAAY,CAAC,CAAA;AACb,IAAA,MAAM,QAAA,GAAY,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAqB,mBAAmB,CAAA;AACnF,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAQ,OAAA,EAAS,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvD,IAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACjC,IAAA,IAAI,QAAQ,EAAA,EAAI;AAChB,IAAA,MAAM,EAAA,GAAK,SAAS,OAAA,CAAQ,MAAA;AAC5B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAC,CAAA;AAChD,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,YAAA,CAAa,eAAe,CAAA;AAC1D,IAAA,MAAM,cAAc,YAAA,KAAiB,IAAA;AACrC,IAAA,MAAM,SAAS,YAAA,KAAiB,MAAA;AAEhC,IAAA,QAAQ,EAAE,GAAA;AAAK,MACb,KAAK,WAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,IAAA,CAAK,KAAK,GAAA,CAAI,GAAA,GAAM,GAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,KAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACpC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AACjB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAI,WAAA,IAAe,CAAC,MAAA,EAAQ,MAAA,CAAO,EAAE,CAAA;AAAA,aAAA,IAC5B,eAAe,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,GAAA,GAAM,CAAC,CAAC,CAAA;AACvD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,UAAA,MAAA,CAAO,EAAE,CAAA;AAAA,QACX,CAAA,MAAO;AACL,UAAA,KAAA,IAAS,CAAA,GAAI,GAAA,GAAM,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACjC,YAAA,MAAM,SAAA,GAAY,KAAK,CAAC,CAAA;AACxB,YAAA,IAAI,aAAa,MAAA,CAAO,SAAA,CAAU,QAAQ,KAAA,IAAS,CAAC,IAAI,KAAA,EAAO;AAC7D,cAAA,SAAA,CAAU,SAAS,CAAA;AACnB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF,KAAK,OAAA;AAAA,MACL,KAAK,GAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,QAAA,GAAW,EAAE,CAAA;AACb,QAAA;AAEA;AACJ,EACF,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC/B,SAAA,EAAW,aAAA;AAAA,MACV,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACV,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAM,CAAA;AAAA,UACN,KAAA,EAAO,CAAA;AAAA,UACP,QAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA,EAAU,eAAA;AAAA,UACV,QAAA;AAAA,UACA,WAAA,EAAa;AAAA,SAAA;AAAA,QARR,CAAA,CAAE;AAAA,OAUV;AAAA;AAAA,GACH;AAEJ;AAaA,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,cAAc,CAAC,EAAE,IAAA,CAAK,QAAA,IAAY,KAAK,QAAA,CAAS,MAAA,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,eAAe,IAAA,CAAK,EAAA;AACvC,EAAA,MAAM,QAAA,GAAW,aAAa,IAAA,CAAK,EAAA;AACnC,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,MAAA,EAAO,WAAU,YAAA,EACxB,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,gBAAc,IAAA,CAAK,EAAA;AAAA,QACnB,YAAA,EAAY,KAAA;AAAA,QACZ,eAAA,EAAe,cAAc,MAAA,GAAS,MAAA;AAAA,QACtC,eAAA,EAAe,UAAA;AAAA,QACf,QAAA,EAAU,WAAW,CAAA,GAAI,EAAA;AAAA,QACzB,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,UAAA,IAAc,aAAa,CAAA;AAAA,QACtD,KAAA,EAAO,EAAE,WAAA,EAAa,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAA,CAAA,EAAI;AAAA,QACzE,SAAS,MAAM;AACb,UAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AACnB,UAAA,QAAA,GAAW,KAAK,EAAE,CAAA;AAAA,QACpB,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,WAAA,mBACC,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,EAAA;AAAA,cACV,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAU,YAAA;AAAA,cACV,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,gBAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,cAAG,CAAA;AAAA,cAEvD,QAAA,EAAA,MAAA,uBAAU,WAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,mBAAK,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,8BAGhE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAY,MAAA,EAAO,CAAA;AAAA,UAEzE,IAAA,CAAK,wBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,YAAA,EAAa,aAAA,EAAY,MAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,0BACzE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,eAAK,KAAA,EAAM,CAAA;AAAA,UACzC,KAAK,IAAA,oBAAQ,GAAA,CAAC,UAAK,SAAA,EAAU,YAAA,EAAc,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA,KACxD;AAAA,IACC,WAAA,IAAe,MAAA,oBACd,GAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,gBAAA,EACxB,QAAA,EAAA,IAAA,CAAK,QAAA,CAAU,GAAA,CAAI,CAAC,CAAA,qBACnB,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAM,CAAA;AAAA,QACN,OAAO,KAAA,GAAQ,CAAA;AAAA,QACf,QAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OAAA;AAAA,MARK,CAAA,CAAE;AAAA,KAUV,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAkBO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,GAAS,EAAC,EAAG,aAAA,EAAe,UAAA,EAAY,SAAA,EAAW,GAAG,IAAA,EAAK,EAAkB;AACxH,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,MAAM,YAAA,CAAa,SAAA,oBAAa,IAAI,IAAA,EAAM,CAAC,CAAA;AACpG,EAAA,MAAM,KAAA,GAAQ,SAAA,GAAY,YAAA,CAAa,SAAS,CAAA,GAAI,aAAA;AACpD,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,QAAA,GAAW,EAAE,mBAAmB,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,EAAE,iBAAiB,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAY;AAC5B,IAAA,IAAI,CAAC,SAAA,EAAW,gBAAA,CAAiB,CAAC,CAAA;AAClC,IAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AAGvB,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AACnC,EAAA,MAAM,YAAA,GAAA,CAAgB,QAAA,CAAS,MAAA,EAAO,GAAI,CAAA,IAAK,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,QAAQ,CAAA;AACnC,EAAA,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAQ,GAAI,YAAY,CAAA;AAEnD,EAAA,MAAM,IAAA,GAAe,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACxD,IAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,SAAS,CAAA;AAC5B,IAAA,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAC,CAAA;AACjC,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAoB,cAAQ,MAAM;AACtC,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAA6B;AAC3C,IAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,EAAA,CAAG,IAAA,CAAK,aAAa,CAAA,CAAA,EAAI,EAAA,CAAG,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,EAAA,CAAG,IAAA,CAAK,SAAS,CAAA,CAAA;AAC/E,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,GAAG,KAAK,EAAC;AAC5B,MAAA,IAAA,CAAK,KAAK,EAAE,CAAA;AACZ,MAAA,CAAA,CAAE,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,YAAY,SAAS,CAAA,EAAI,GAAG,IAAA,EAC7C,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,YAAA,EAAY,CAAA,CAAE,oBAAoB,CAAA,EAAG,OAAA,EAAS,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,EAAE,CAAC,CAAA,EAC/H,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,gBAAA,EAAiB,EAAG,CAAA,EAClE,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAAA,QAAE,GAAA;AAAA,QAAE,MAAM,WAAA;AAAY,OAAA,EAAE,CAAA;AAAA,sBACjF,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,eAAA,EAAgB,YAAA,EAAY,CAAA,CAAE,oBAAoB,CAAA,EAAG,OAAA,EAAS,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,CAAC,CAAC,GAC9H,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,mBAAS,GAAA,CAAI,CAAC,CAAA,qBAAM,GAAA,CAAC,SAAY,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,CAAA,EAAA,EAAlC,CAAoC,CAAM,CAAA,EAC3E,CAAA;AAAA,oBACA,GAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EACZ,eAAK,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAClB,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,QAAA,EAAS,KAAM,MAAM,QAAA,EAAS;AAChD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,EAAI,CAAA,CAAE,OAAA,EAAS,CAAA,CAAA;AAC7D,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,CAAI,GAAG,KAAK,EAAC;AAC3C,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,WAAW,EAAA,CAAG,eAAA,EAAiB,CAAC,OAAA,IAAW,QAAA,EAAU,WAAW,UAAU,CAAA;AAAA,UAC1E,OAAA,EAAS,MAAM,UAAA,GAAa,CAAC,CAAA;AAAA,UAE7B,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,CAAA,CAAE,SAAQ,EAAE,CAAA;AAAA,YAC/C,UAAU,MAAA,GAAS,CAAA,oBAClB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,SAAA,CAAU,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,IAAI,GAAA,qBAC9B,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBAEC,WAAW,EAAA,CAAG,iBAAA,EAAmB,oBAAoB,EAAA,CAAG,IAAA,IAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,kBAC3E,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,oBAAA,EAAA,CAAG,OAAA,IAAU;AAAA,kBAAG,CAAA;AAAA,kBAEtD,QAAA,EAAA,EAAA,CAAG;AAAA,iBAAA;AAAA,gBAJC;AAAA,eAMR,CAAA;AAAA,cACA,UAAU,MAAA,GAAS,CAAA,oBAAK,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAE,UAAU,MAAA,GAAS;AAAA,eAAA,EAAE;AAAA,aAAA,EACnF;AAAA;AAAA,SAAA;AAAA,QAlBG;AAAA,OAoBP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-BJXLKT7Q.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { ChevronRight, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { startOfMonth, addMonths, isSameDay } from '../utils/dateFormat';\n\n// ---------- UserCell ----------------------------------------------------\nexport interface UserCellProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n meta?: React.ReactNode; // role / email / etc.\n avatarSrc?: string;\n avatarAlt?: string;\n size?: 24 | 32 | 40 | 48;\n}\n\nexport function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }: UserCellProps) {\n const initialsName = typeof name === 'string' ? name : undefined;\n return (\n <div className={cx('user-cell', className)} {...rest}>\n <Avatar src={avatarSrc} alt={avatarAlt} name={initialsName} size={size} />\n <div className=\"user-cell__body\">\n <div className=\"user-cell__name\">{name}</div>\n {meta && <div className=\"user-cell__meta\">{meta}</div>}\n </div>\n </div>\n );\n}\n\n// ---------- StatusIndicator (pulsing dot) ------------------------------\nexport type StatusTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: StatusTone;\n pulse?: boolean;\n label?: React.ReactNode;\n}\n\nexport function StatusIndicator({ tone = 'success', pulse, label, className, ...rest }: StatusIndicatorProps) {\n return (\n <span className={cx('status-indicator', className)} role=\"status\" {...rest}>\n <span className={cx('status-indicator__dot', `status-indicator__dot--${tone}`, pulse && 'is-pulsing')} aria-hidden=\"true\" />\n {label && <span className=\"status-indicator__label\">{label}</span>}\n </span>\n );\n}\n\n// ---------- Timeline ----------------------------------------------------\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {}\n\nexport const Timeline = React.forwardRef<HTMLOListElement, TimelineProps>(\n function Timeline({ className, ...rest }, ref) {\n return <ol ref={ref} className={cx('timeline', className)} {...rest} />;\n }\n);\n\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {\n icon?: React.ReactNode;\n tone?: StatusTone;\n title: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport function TimelineItem({ icon, tone = 'neutral', title, meta, children, className, ...rest }: TimelineItemProps) {\n return (\n <li className={cx('timeline__item', className)} {...rest}>\n <span className={cx('timeline__marker', `timeline__marker--${tone}`)} aria-hidden=\"true\">\n {icon}\n </span>\n <div className=\"timeline__body\">\n <div className=\"timeline__title\">{title}</div>\n {meta && <div className=\"timeline__meta\">{meta}</div>}\n {children && <div className=\"timeline__content\">{children}</div>}\n </div>\n </li>\n );\n}\n\n// ---------- Tree --------------------------------------------------------\nexport interface TreeNodeData {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n children?: TreeNodeData[];\n meta?: React.ReactNode;\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n nodes: TreeNodeData[];\n defaultExpanded?: string[];\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nfunction firstNodeId(nodes: TreeNodeData[]): string | undefined {\n return nodes[0]?.id;\n}\n\nexport function Tree({\n nodes,\n defaultExpanded = [],\n selectedId,\n onSelect,\n className,\n onKeyDown,\n ...rest\n}: TreeProps) {\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));\n const [activeId, setActiveId] = React.useState<string | undefined>(undefined);\n const rootRef = React.useRef<HTMLUListElement>(null);\n\n // Roving tabindex: one treeitem is tabbable at a time. Falls back to the\n // selected node, then the first node, so the tree is reachable on first Tab.\n const effectiveActive = activeId ?? selectedId ?? firstNodeId(nodes);\n\n const toggle = React.useCallback((id: string) => {\n setExpanded((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const visibleItems = (): HTMLElement[] =>\n Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[role=\"treeitem\"]') ?? []);\n\n const focusItem = (el: HTMLElement | undefined): void => {\n if (!el) return;\n setActiveId(el.dataset.treeId);\n el.focus();\n };\n\n // WAI-ARIA TreeView keyboard model. Focus lives on the treeitem element;\n // querySelectorAll returns items in DOM order, which equals visual order\n // (collapsed branches are not rendered, so they are not navigable).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>): void => {\n onKeyDown?.(e);\n const targetEl = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]');\n if (!targetEl || !rootRef.current?.contains(targetEl)) return;\n const list = visibleItems();\n const idx = list.indexOf(targetEl);\n if (idx === -1) return;\n const id = targetEl.dataset.treeId;\n if (!id) return;\n const depth = Number(targetEl.dataset.depth ?? 0);\n const expandedAttr = targetEl.getAttribute('aria-expanded');\n const hasChildren = expandedAttr !== null;\n const isOpen = expandedAttr === 'true';\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem(list[Math.min(idx + 1, list.length - 1)]);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem(list[Math.max(idx - 1, 0)]);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(list[0]);\n break;\n case 'End':\n e.preventDefault();\n focusItem(list[list.length - 1]);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (hasChildren && !isOpen) toggle(id);\n else if (hasChildren && isOpen) focusItem(list[idx + 1]);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (hasChildren && isOpen) {\n toggle(id);\n } else {\n for (let i = idx - 1; i >= 0; i--) {\n const candidate = list[i];\n if (candidate && Number(candidate.dataset.depth ?? 0) < depth) {\n focusItem(candidate);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.(id);\n break;\n default:\n break;\n }\n };\n\n return (\n <ul\n ref={rootRef}\n role=\"tree\"\n className={cx('tree', className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {nodes.map((n) => (\n <TreeNode\n key={n.id}\n node={n}\n depth={0}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={effectiveActive}\n onSelect={onSelect}\n onFocusItem={setActiveId}\n />\n ))}\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n node: TreeNodeData;\n depth: number;\n expanded: Set<string>;\n toggle: (id: string) => void;\n selectedId?: string;\n activeId?: string;\n onSelect?: (id: string) => void;\n onFocusItem: (id: string) => void;\n}\n\nfunction TreeNode({\n node,\n depth,\n expanded,\n toggle,\n selectedId,\n activeId,\n onSelect,\n onFocusItem,\n}: TreeNodeProps) {\n const hasChildren = !!(node.children && node.children.length);\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const isActive = activeId === node.id;\n return (\n <li role=\"none\" className=\"tree__node\">\n <div\n role=\"treeitem\"\n data-tree-id={node.id}\n data-depth={depth}\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-selected={isSelected}\n tabIndex={isActive ? 0 : -1}\n className={cx('tree__row', isSelected && 'is-selected')}\n style={{ paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` }}\n onClick={() => {\n onFocusItem(node.id);\n onSelect?.(node.id);\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"tree__chev\"\n onClick={(e) => { e.stopPropagation(); toggle(node.id); }}\n >\n {isOpen ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className=\"tree__chev tree__chev--placeholder\" aria-hidden=\"true\" />\n )}\n {node.icon && <span className=\"tree__icon\" aria-hidden=\"true\">{node.icon}</span>}\n <span className=\"tree__label\">{node.label}</span>\n {node.meta && <span className=\"tree__meta\">{node.meta}</span>}\n </div>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"tree__children\">\n {node.children!.map((c) => (\n <TreeNode\n key={c.id}\n node={c}\n depth={depth + 1}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={activeId}\n onSelect={onSelect}\n onFocusItem={onFocusItem}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\n// ---------- Calendar (vista mes completa, no picker) -------------------\nexport interface CalendarEvent {\n date: Date;\n label: React.ReactNode;\n tone?: StatusTone;\n onClick?: () => void;\n}\n\nexport interface CalendarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Mes a mostrar. Default: mes actual. */\n month?: Date;\n events?: CalendarEvent[];\n onMonthChange?: (m: Date) => void;\n onDayClick?: (d: Date) => void;\n}\n\nexport function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }: CalendarProps) {\n const [internalMonth, setInternalMonth] = React.useState(() => startOfMonth(monthProp ?? new Date()));\n const month = monthProp ? startOfMonth(monthProp) : internalMonth;\n const t = useLocale();\n const weekdays = t['calendar.weekdays'];\n const months = t['calendar.months'];\n const setMonth = (m: Date) => {\n if (!monthProp) setInternalMonth(m);\n onMonthChange?.(m);\n };\n\n const today = new Date();\n\n // primer día visible: lunes anterior al primer día del mes\n const firstDay = startOfMonth(month);\n const firstWeekday = (firstDay.getDay() + 6) % 7; // domingo=0 → 6, lunes=1 → 0\n const gridStart = new Date(firstDay);\n gridStart.setDate(firstDay.getDate() - firstWeekday);\n\n const days: Date[] = Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n\n const eventsByDay = React.useMemo(() => {\n const m = new Map<string, CalendarEvent[]>();\n for (const ev of events) {\n const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;\n const list = m.get(key) ?? [];\n list.push(ev);\n m.set(key, list);\n }\n return m;\n }, [events]);\n\n return (\n <div className={cx('calendar', className)} {...rest}>\n <div className=\"calendar__head\">\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.prevMonth']} onClick={() => setMonth(addMonths(month, -1))}>\n <ChevronRight size={16} style={{ transform: 'rotate(180deg)' }} />\n </button>\n <div className=\"calendar__title\">{months[month.getMonth()]} {month.getFullYear()}</div>\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.nextMonth']} onClick={() => setMonth(addMonths(month, 1))}>\n <ChevronRight size={16} />\n </button>\n </div>\n <div className=\"calendar__grid calendar__weekdays\">\n {weekdays.map((w) => <div key={w} className=\"calendar__weekday\">{w}</div>)}\n </div>\n <div className=\"calendar__grid\">\n {days.map((d, i) => {\n const inMonth = d.getMonth() === month.getMonth();\n const isToday = isSameDay(d, today);\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n const dayEvents = eventsByDay.get(key) ?? [];\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('calendar__day', !inMonth && 'is-out', isToday && 'is-today')}\n onClick={() => onDayClick?.(d)}\n >\n <span className=\"calendar__daynum\">{d.getDate()}</span>\n {dayEvents.length > 0 && (\n <div className=\"calendar__events\">\n {dayEvents.slice(0, 2).map((ev, idx) => (\n <span\n key={idx}\n className={cx('calendar__event', `calendar__event--${ev.tone ?? 'neutral'}`)}\n onClick={(e) => { e.stopPropagation(); ev.onClick?.(); }}\n >\n {ev.label}\n </span>\n ))}\n {dayEvents.length > 2 && <span className=\"calendar__more\">+{dayEvents.length - 2}</span>}\n </div>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Display3.tsx"],"names":["Timeline"],"mappings":"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","file":"chunk-PKCLA2FD.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { ChevronRight, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { startOfMonth, addMonths, isSameDay } from '../utils/dateFormat';\n\n// ---------- UserCell ----------------------------------------------------\nexport interface UserCellProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n meta?: React.ReactNode; // role / email / etc.\n avatarSrc?: string;\n avatarAlt?: string;\n size?: 24 | 32 | 40 | 48;\n}\n\nexport function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }: UserCellProps) {\n const initialsName = typeof name === 'string' ? name : undefined;\n return (\n <div className={cx('user-cell', className)} {...rest}>\n <Avatar src={avatarSrc} alt={avatarAlt} name={initialsName} size={size} />\n <div className=\"user-cell__body\">\n <div className=\"user-cell__name\">{name}</div>\n {meta && <div className=\"user-cell__meta\">{meta}</div>}\n </div>\n </div>\n );\n}\n\n// ---------- StatusIndicator (pulsing dot) ------------------------------\nexport type StatusTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: StatusTone;\n pulse?: boolean;\n label?: React.ReactNode;\n}\n\nexport function StatusIndicator({ tone = 'success', pulse, label, className, ...rest }: StatusIndicatorProps) {\n return (\n <span className={cx('status-indicator', className)} role=\"status\" {...rest}>\n <span className={cx('status-indicator__dot', `status-indicator__dot--${tone}`, pulse && 'is-pulsing')} aria-hidden=\"true\" />\n {label && <span className=\"status-indicator__label\">{label}</span>}\n </span>\n );\n}\n\n// ---------- Timeline ----------------------------------------------------\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {}\n\nexport const Timeline = React.forwardRef<HTMLOListElement, TimelineProps>(\n function Timeline({ className, ...rest }, ref) {\n return <ol ref={ref} className={cx('timeline', className)} {...rest} />;\n }\n);\n\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {\n icon?: React.ReactNode;\n tone?: StatusTone;\n title: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport function TimelineItem({ icon, tone = 'neutral', title, meta, children, className, ...rest }: TimelineItemProps) {\n return (\n <li className={cx('timeline__item', className)} {...rest}>\n <span className={cx('timeline__marker', `timeline__marker--${tone}`)} aria-hidden=\"true\">\n {icon}\n </span>\n <div className=\"timeline__body\">\n <div className=\"timeline__title\">{title}</div>\n {meta && <div className=\"timeline__meta\">{meta}</div>}\n {children && <div className=\"timeline__content\">{children}</div>}\n </div>\n </li>\n );\n}\n\n// ---------- Tree --------------------------------------------------------\nexport interface TreeNodeData {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n children?: TreeNodeData[];\n meta?: React.ReactNode;\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n nodes: TreeNodeData[];\n defaultExpanded?: string[];\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nfunction firstNodeId(nodes: TreeNodeData[]): string | undefined {\n return nodes[0]?.id;\n}\n\nexport function Tree({\n nodes,\n defaultExpanded = [],\n selectedId,\n onSelect,\n className,\n onKeyDown,\n ...rest\n}: TreeProps) {\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));\n const [activeId, setActiveId] = React.useState<string | undefined>(undefined);\n const rootRef = React.useRef<HTMLUListElement>(null);\n\n // Roving tabindex: one treeitem is tabbable at a time. Falls back to the\n // selected node, then the first node, so the tree is reachable on first Tab.\n const effectiveActive = activeId ?? selectedId ?? firstNodeId(nodes);\n\n const toggle = React.useCallback((id: string) => {\n setExpanded((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const visibleItems = (): HTMLElement[] =>\n Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[role=\"treeitem\"]') ?? []);\n\n const focusItem = (el: HTMLElement | undefined): void => {\n if (!el) return;\n setActiveId(el.dataset.treeId);\n el.focus();\n };\n\n // WAI-ARIA TreeView keyboard model. Focus lives on the treeitem element;\n // querySelectorAll returns items in DOM order, which equals visual order\n // (collapsed branches are not rendered, so they are not navigable).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>): void => {\n onKeyDown?.(e);\n const targetEl = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]');\n if (!targetEl || !rootRef.current?.contains(targetEl)) return;\n const list = visibleItems();\n const idx = list.indexOf(targetEl);\n if (idx === -1) return;\n const id = targetEl.dataset.treeId;\n if (!id) return;\n const depth = Number(targetEl.dataset.depth ?? 0);\n const expandedAttr = targetEl.getAttribute('aria-expanded');\n const hasChildren = expandedAttr !== null;\n const isOpen = expandedAttr === 'true';\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem(list[Math.min(idx + 1, list.length - 1)]);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem(list[Math.max(idx - 1, 0)]);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(list[0]);\n break;\n case 'End':\n e.preventDefault();\n focusItem(list[list.length - 1]);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (hasChildren && !isOpen) toggle(id);\n else if (hasChildren && isOpen) focusItem(list[idx + 1]);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (hasChildren && isOpen) {\n toggle(id);\n } else {\n for (let i = idx - 1; i >= 0; i--) {\n const candidate = list[i];\n if (candidate && Number(candidate.dataset.depth ?? 0) < depth) {\n focusItem(candidate);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.(id);\n break;\n default:\n break;\n }\n };\n\n return (\n <ul\n ref={rootRef}\n role=\"tree\"\n className={cx('tree', className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {nodes.map((n) => (\n <TreeNode\n key={n.id}\n node={n}\n depth={0}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={effectiveActive}\n onSelect={onSelect}\n onFocusItem={setActiveId}\n />\n ))}\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n node: TreeNodeData;\n depth: number;\n expanded: Set<string>;\n toggle: (id: string) => void;\n selectedId?: string;\n activeId?: string;\n onSelect?: (id: string) => void;\n onFocusItem: (id: string) => void;\n}\n\nfunction TreeNode({\n node,\n depth,\n expanded,\n toggle,\n selectedId,\n activeId,\n onSelect,\n onFocusItem,\n}: TreeNodeProps) {\n const hasChildren = !!(node.children && node.children.length);\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const isActive = activeId === node.id;\n return (\n <li role=\"none\" className=\"tree__node\">\n <div\n role=\"treeitem\"\n data-tree-id={node.id}\n data-depth={depth}\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-selected={isSelected}\n tabIndex={isActive ? 0 : -1}\n className={cx('tree__row', isSelected && 'is-selected')}\n style={{ paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` }}\n onClick={() => {\n onFocusItem(node.id);\n onSelect?.(node.id);\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"tree__chev\"\n onClick={(e) => { e.stopPropagation(); toggle(node.id); }}\n >\n {isOpen ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className=\"tree__chev tree__chev--placeholder\" aria-hidden=\"true\" />\n )}\n {node.icon && <span className=\"tree__icon\" aria-hidden=\"true\">{node.icon}</span>}\n <span className=\"tree__label\">{node.label}</span>\n {node.meta && <span className=\"tree__meta\">{node.meta}</span>}\n </div>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"tree__children\">\n {node.children!.map((c) => (\n <TreeNode\n key={c.id}\n node={c}\n depth={depth + 1}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={activeId}\n onSelect={onSelect}\n onFocusItem={onFocusItem}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\n// ---------- Calendar (vista mes completa, no picker) -------------------\nexport interface CalendarEvent {\n date: Date;\n label: React.ReactNode;\n tone?: StatusTone;\n onClick?: () => void;\n}\n\nexport interface CalendarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Mes a mostrar. Default: mes actual. */\n month?: Date;\n events?: CalendarEvent[];\n onMonthChange?: (m: Date) => void;\n onDayClick?: (d: Date) => void;\n}\n\nexport function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }: CalendarProps) {\n const [internalMonth, setInternalMonth] = React.useState(() => startOfMonth(monthProp ?? new Date()));\n const month = monthProp ? startOfMonth(monthProp) : internalMonth;\n const t = useLocale();\n const weekdays = t['calendar.weekdays'];\n const months = t['calendar.months'];\n const setMonth = (m: Date) => {\n if (!monthProp) setInternalMonth(m);\n onMonthChange?.(m);\n };\n\n const today = new Date();\n\n // primer día visible: lunes anterior al primer día del mes\n const firstDay = startOfMonth(month);\n const firstWeekday = (firstDay.getDay() + 6) % 7; // domingo=0 → 6, lunes=1 → 0\n const gridStart = new Date(firstDay);\n gridStart.setDate(firstDay.getDate() - firstWeekday);\n\n const days: Date[] = Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n\n const eventsByDay = React.useMemo(() => {\n const m = new Map<string, CalendarEvent[]>();\n for (const ev of events) {\n const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;\n const list = m.get(key) ?? [];\n list.push(ev);\n m.set(key, list);\n }\n return m;\n }, [events]);\n\n return (\n <div className={cx('calendar', className)} {...rest}>\n <div className=\"calendar__head\">\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.prevMonth']} onClick={() => setMonth(addMonths(month, -1))}>\n <ChevronRight size={16} style={{ transform: 'rotate(180deg)' }} />\n </button>\n <div className=\"calendar__title\">{months[month.getMonth()]} {month.getFullYear()}</div>\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.nextMonth']} onClick={() => setMonth(addMonths(month, 1))}>\n <ChevronRight size={16} />\n </button>\n </div>\n <div className=\"calendar__grid calendar__weekdays\">\n {weekdays.map((w) => <div key={w} className=\"calendar__weekday\">{w}</div>)}\n </div>\n <div className=\"calendar__grid\">\n {days.map((d, i) => {\n const inMonth = d.getMonth() === month.getMonth();\n const isToday = isSameDay(d, today);\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n const dayEvents = eventsByDay.get(key) ?? [];\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('calendar__day', !inMonth && 'is-out', isToday && 'is-today')}\n onClick={() => onDayClick?.(d)}\n >\n <span className=\"calendar__daynum\">{d.getDate()}</span>\n {dayEvents.length > 0 && (\n <div className=\"calendar__events\">\n {dayEvents.slice(0, 2).map((ev, idx) => (\n <span\n key={idx}\n className={cx('calendar__event', `calendar__event--${ev.tone ?? 'neutral'}`)}\n onClick={(e) => { e.stopPropagation(); ev.onClick?.(); }}\n >\n {ev.label}\n </span>\n ))}\n {dayEvents.length > 2 && <span className=\"calendar__more\">+{dayEvents.length - 2}</span>}\n </div>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { Portal } from './chunk-FKBQYQQD.mjs';
3
2
  import { useDismiss } from './chunk-6P2TKRTL.mjs';
4
3
  import { usePopoverPosition } from './chunk-PRML6VEF.mjs';
4
+ import { Portal } from './chunk-FKBQYQQD.mjs';
5
5
  import { cx } from './chunk-IEPCH3JB.mjs';
6
6
  import * as React from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -213,5 +213,5 @@ function Menubar({ menus, className, ariaLabel = "Barra de men\xFAs" }) {
213
213
  }
214
214
 
215
215
  export { Menubar };
216
- //# sourceMappingURL=chunk-BHEHMWKC.mjs.map
217
- //# sourceMappingURL=chunk-BHEHMWKC.mjs.map
216
+ //# sourceMappingURL=chunk-QM7BCSCL.mjs.map
217
+ //# sourceMappingURL=chunk-QM7BCSCL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Menubar.tsx"],"names":[],"mappings":";;;;;;;AA4BO,SAAS,QAAQ,EAAE,KAAA,EAAO,SAAA,EAAW,SAAA,GAAY,qBAAiB,EAAiB;AACxF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,CAAC,CAAA;AAG5C,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAU,eAAwB,KAAA,CAAM,CAAC,CAAA,EAAG,EAAA,IAAM,IAAI,CAAA;AAE5E,EAAA,MAAM,WAAA,GAAoB,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,QAAA,GAAiB,aAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAkB,aAA2B,IAAI,CAAA;AACvD,EAAA,MAAM,WAAA,GAAoB,KAAA,CAAA,MAAA,CAAiD,EAAE,CAAA;AAC7E,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,MAAA,CAAwC,EAAE,CAAA;AAEjE,EAAA,MAAM,OAAO,MAAA,KAAW,IAAA;AACxB,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA,IAAK,IAAA;AACvD,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AAIxD,EAAA,MAAM,UAAA,GAAA,CAAc,UAAU,KAAA,IAAS,IACpC,GAAA,CAAI,CAAC,IAAI,CAAA,KAAO,EAAA,CAAG,aAAa,EAAA,CAAG,QAAA,GAAW,KAAK,CAAE,CAAA,CACrD,OAAO,CAAC,CAAA,KAAM,KAAK,CAAC,CAAA;AAEvB,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,SAAA,EAAW,QAAA,EAAU;AAAA,IAClD,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,UAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,IAC/B,IAAA,EAAM,CAAC,OAAA,EAAS,QAAQ,CAAA;AAAA,IACxB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAsB;AAC1C,IAAA,IAAI,EAAA,EAAI,WAAA,CAAY,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM;AAAA,EACzC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,EAAY,WAAA,KAAyB;AACzD,IAAA,MAAM,EAAA,GAAK,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAA;AACjC,IAAA,IAAI,EAAA,YAAc,OAAA,GAAU,EAAA;AAC5B,IAAA,WAAA,CAAY,OAAA,GAAU,WAAA;AACtB,IAAA,SAAA,CAAU,CAAC,CAAA;AACX,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,SAAA,CAAU,EAAE,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAM,EAAA,GAAK,MAAA;AACX,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,YAAA,CAAa,EAAE,CAAA;AAAA,EACjB,CAAA;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,IAAA,IAAQ,YAAY,OAAA,EAAS;AAC/B,MAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,MAAA,MAAM,OAAA,GAAU,WAAW,CAAC,CAAA;AAC5B,MAAA,IAAI,WAAW,IAAA,EAAM,QAAA,CAAS,OAAA,CAAQ,OAAO,GAAG,KAAA,EAAM;AAAA,IACxD;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAErB,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,IAAQ,WAAA,CAAY,OAAA,EAAS;AAClC,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,IAAA,IAAI,WAAW,IAAA,EAAM,QAAA,CAAS,OAAA,CAAQ,OAAO,GAAG,KAAA,EAAM;AAAA,EACxD,CAAA,EAAG,CAAC,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE7B,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAsB;AACxC,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,SAAA,EAAW;AACrC,IAAA,IAAA,CAAK,QAAA,IAAW;AAChB,IAAA,oBAAA,EAAqB;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgB;AAChC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAA,GAAO,SAAA,IAAa,CAAA,GAAI,SAAA,GAAY,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,GAAO,GAAA,GAAM,KAAA,CAAM,UAAU,KAAA,CAAM,MAAA;AACjD,IAAA,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,CAAE,EAAA,EAAI,IAAI,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,EAAwB,IAAA,EAAmB,KAAA,KAAkB;AACrF,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,IAAe,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC/D,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AACjC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAA,CAAO,KAAA,GAAQ,CAAA,IAAK,MAAM,MAAM,CAAA;AAC7C,MAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,MAAA,IAAI,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,WAC/B,YAAA,CAAa,KAAK,EAAE,CAAA;AAAA,IAC3B,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,OAAO,KAAA,CAAA,CAAO,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,IAAU,MAAM,MAAM,CAAA;AAC5D,MAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,MAAA,IAAI,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,WAC/B,YAAA,CAAa,KAAK,EAAE,CAAA;AAAA,IAC3B,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,IAAA,EAAM;AACrC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,MAAA,EAAQ;AAC3B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,EAAE,CAAA;AACpB,MAAA,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAE,EAAE,CAAA;AAAA,IAC1B,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,MAAA,YAAA,CAAa,KAAK,EAAE,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAA2B;AACjD,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,oBAAA,EAAqB;AAAA,IACvB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO;AAC1B,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,CAAC,MAAM,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,UAAA,CAAW,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IACzD,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,SAAA,EAAW;AAC9B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,MAAA,EAAQ;AAC3B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IACb,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,KAAK,GAAA,CAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AACjC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,CAAS,CAAC,CAAA;AAAA,IACZ,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,CAAS,EAAE,CAAA;AAAA,IACb,WAAW,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC7C,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,MAAA,MAAM,KAAK,OAAA,IAAW,IAAA,GAAO,QAAA,EAAU,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AACxD,MAAA,IAAI,EAAA,aAAe,EAAE,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,IAAA,EAAK,WAAU,YAAA,EAAY,SAAA,EAAW,SAAA,EAAW,EAAA,CAAG,WAAW,SAAS,CAAA,EACxF,gBAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1B,IAAA,MAAM,MAAA,GAAS,WAAW,IAAA,CAAK,EAAA;AAC/B,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,eAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,UAAA;AAAA,UACL,GAAA,EAAK,CAAC,EAAA,KAAO;AAAE,YAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,GAAI,EAAA;AAAA,UAAI,CAAA;AAAA,UAClD,QAAA,EAAA,CAAW,SAAS,KAAA,CAAM,CAAC,GAAG,EAAA,MAAQ,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AAAA,UACpD,eAAA,EAAc,MAAA;AAAA,UACd,eAAA,EAAe,MAAA;AAAA,UACf,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,MAAA,IAAU,SAAS,CAAA;AAAA,UACrD,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,YAAA,IAAI,MAAA,EAAQ;AAAE,cAAA,SAAA,CAAU,IAAI,CAAA;AAAG,cAAA;AAAA,YAAQ;AACvC,YAAA,SAAA,CAAU,UAAU,CAAA,CAAE,aAAA;AACtB,YAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,YAAA,SAAA,CAAU,CAAC,CAAA;AACX,YAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,YAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AAAA,UACnB,CAAA;AAAA,UACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,YAAA,IAAI,CAAC,MAAA,EAAQ;AACb,YAAA,SAAA,CAAU,UAAU,CAAA,CAAE,aAAA;AACtB,YAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,YAAA,SAAA,CAAU,CAAC,CAAA;AACX,YAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,YAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AAAA,UACnB,CAAA;AAAA,UACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAAA,UAC/B,WAAW,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA,UAEhD,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,OACR;AAAA,MACC,MAAA,wBACE,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,MAAA;AAAA,UACL,cAAY,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,GAAW,KAAK,KAAA,GAAQ,MAAA;AAAA,UAC1D,SAAA,EAAU,eAAA;AAAA,UACV,SAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,OAAA;AAAA,YACV,KAAK,GAAA,CAAI,GAAA;AAAA,YACT,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,WACtC;AAAA,UAEC,eAAK,KAAA,CAAM,GAAA;AAAA,YAAI,CAAC,IAAA,EAAM,CAAA,KACrB,IAAA,CAAK,SAAA,uBACF,IAAA,EAAA,EAAiB,SAAA,EAAU,oBAAA,EAAqB,IAAA,EAAK,eAA7C,IAAA,CAAK,EAAoD,oBAElE,GAAA,CAAC,IAAA,EAAA,EAAiB,MAAK,MAAA,EACrB,QAAA,kBAAA,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,UAAA;AAAA,gBACL,GAAA,EAAK,CAAC,EAAA,KAAO;AAAE,kBAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,gBAAI,CAAA;AAAA,gBACzC,QAAA,EAAU,UAAA,CAAW,MAAM,CAAA,KAAM,IAAI,CAAA,GAAI,EAAA;AAAA,gBACzC,UAAU,IAAA,CAAK,QAAA;AAAA,gBACf,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,IAAA,CAAK,QAAA,IAAY,eAAe,UAAA,CAAW,MAAM,CAAA,KAAM,CAAA,IAAK,WAAW,CAAA;AAAA,gBACtG,cAAc,MAAM,SAAA,CAAU,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,gBACnD,OAAA,EAAS,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,gBAE9B,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,kBAC5C,KAAK,QAAA,oBAAY,GAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,eAAK,QAAA,EAAS;AAAA;AAAA;AAAA,aACtE,EAAA,EAbO,KAAK,EAcd;AAAA;AAEJ;AAAA,OACF,EACF;AAAA,KAAA,EAAA,EAnEM,KAAK,EAqEf,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ","file":"chunk-BHEHMWKC.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface MenubarItem {\n id: string;\n label?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n separator?: boolean;\n shortcut?: string;\n}\n\nexport interface MenubarMenu {\n id: string;\n label: React.ReactNode;\n items: MenubarItem[];\n}\n\nexport interface MenubarProps {\n menus: MenubarMenu[];\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Menubar({ menus, className, ariaLabel = 'Barra de menús' }: MenubarProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n const [active, setActive] = React.useState(0);\n // Roving tab stop for the menubar row (one tab stop, arrows move between\n // triggers — WAI-ARIA menubar pattern).\n const [tabId, setTabId] = React.useState<string | null>(menus[0]?.id ?? null);\n // Keyboard opens move focus into the menu; pointer opens don't.\n const focusOnOpen = React.useRef(false);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const panelRef = React.useRef<HTMLUListElement>(null);\n const anchorRef = React.useRef<HTMLElement | null>(null);\n const triggerRefs = React.useRef<Record<string, HTMLButtonElement | null>>({});\n const itemRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n\n const open = openId !== null;\n const openMenu = menus.find((m) => m.id === openId) ?? null;\n const menuIndex = menus.findIndex((m) => m.id === openId);\n\n // Positions within the open menu that are selectable (no\n // separators/disabled). `active` indexes into this list.\n const enabledIdx = (openMenu?.items ?? [])\n .map((it, i) => (it.separator || it.disabled ? -1 : i))\n .filter((i) => i >= 0);\n\n const pos = usePopoverPosition(anchorRef, panelRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 6,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpenId(null),\n refs: [rootRef, panelRef],\n closeOnEscape: false,\n });\n\n const focusTrigger = (id: string | null) => {\n if (id) triggerRefs.current[id]?.focus();\n };\n\n const openMenuById = (id: string, viaKeyboard: boolean) => {\n const el = triggerRefs.current[id];\n if (el) anchorRef.current = el;\n focusOnOpen.current = viaKeyboard;\n setActive(0);\n setTabId(id);\n setOpenId(id);\n };\n\n const closeAndFocusTrigger = () => {\n const id = openId;\n setOpenId(null);\n focusTrigger(id);\n };\n\n React.useEffect(() => {\n if (open && focusOnOpen.current) {\n focusOnOpen.current = false;\n const realIdx = enabledIdx[0];\n if (realIdx != null) itemRefs.current[realIdx]?.focus();\n }\n }, [open, enabledIdx]);\n\n React.useEffect(() => {\n if (!open || focusOnOpen.current) return;\n const realIdx = enabledIdx[active];\n if (realIdx != null) itemRefs.current[realIdx]?.focus();\n }, [open, active, enabledIdx]);\n\n const selectItem = (item: MenubarItem) => {\n if (item.disabled || item.separator) return;\n item.onSelect?.();\n closeAndFocusTrigger();\n };\n\n const stepMenu = (dir: 1 | -1) => {\n if (menus.length === 0) return;\n const from = menuIndex >= 0 ? menuIndex : 0;\n const next = (from + dir + menus.length) % menus.length;\n openMenuById(menus[next].id, true);\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent, menu: MenubarMenu, index: number) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openMenuById(menu.id, true);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n const next = menus[(index + 1) % menus.length];\n setTabId(next.id);\n if (open) openMenuById(next.id, true);\n else focusTrigger(next.id);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = menus[(index - 1 + menus.length) % menus.length];\n setTabId(prev.id);\n if (open) openMenuById(prev.id, true);\n else focusTrigger(prev.id);\n } else if (e.key === 'Escape' && open) {\n e.preventDefault();\n setOpenId(null);\n } else if (e.key === 'Home') {\n e.preventDefault();\n setTabId(menus[0].id);\n focusTrigger(menus[0].id);\n } else if (e.key === 'End') {\n e.preventDefault();\n const last = menus[menus.length - 1];\n setTabId(last.id);\n focusTrigger(last.id);\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n closeAndFocusTrigger();\n } else if (e.key === 'Tab') {\n setOpenId(null);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActive((a) => Math.min(a + 1, enabledIdx.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActive((a) => Math.max(a - 1, 0));\n } else if (e.key === 'Home') {\n e.preventDefault();\n setActive(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n setActive(Math.max(enabledIdx.length - 1, 0));\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n stepMenu(1);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n stepMenu(-1);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const realIdx = enabledIdx[active];\n const it = realIdx != null ? openMenu?.items[realIdx] : undefined;\n if (it) selectItem(it);\n }\n };\n\n return (\n <div ref={rootRef} role=\"menubar\" aria-label={ariaLabel} className={cx('menubar', className)}>\n {menus.map((menu, index) => {\n const isOpen = openId === menu.id;\n return (\n <div key={menu.id} className=\"menubar__menu\">\n <button\n type=\"button\"\n role=\"menuitem\"\n ref={(el) => { triggerRefs.current[menu.id] = el; }}\n tabIndex={(tabId ?? menus[0]?.id) === menu.id ? 0 : -1}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n className={cx('menubar__trigger', isOpen && 'is-open')}\n onClick={(e) => {\n if (isOpen) { setOpenId(null); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setActive(0);\n setTabId(menu.id);\n setOpenId(menu.id);\n }}\n onMouseEnter={(e) => {\n if (!openId) return;\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setActive(0);\n setTabId(menu.id);\n setOpenId(menu.id);\n }}\n onFocus={() => setTabId(menu.id)}\n onKeyDown={(e) => onTriggerKeyDown(e, menu, index)}\n >\n {menu.label}\n </button>\n {isOpen && (\n <Portal>\n <ul\n ref={panelRef}\n role=\"menu\"\n aria-label={typeof menu.label === 'string' ? menu.label : undefined}\n className=\"menubar__list\"\n onKeyDown={onPanelKeyDown}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {menu.items.map((item, i) =>\n item.separator ? (\n <li key={item.id} className=\"menubar__separator\" role=\"separator\" />\n ) : (\n <li key={item.id} role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n ref={(el) => { itemRefs.current[i] = el; }}\n tabIndex={enabledIdx[active] === i ? 0 : -1}\n disabled={item.disabled}\n className={cx('menubar__item', item.disabled && 'is-disabled', enabledIdx[active] === i && 'is-active')}\n onMouseEnter={() => setActive(enabledIdx.indexOf(i))}\n onClick={() => selectItem(item)}\n >\n <span className=\"menubar__label\">{item.label}</span>\n {item.shortcut && <kbd className=\"menubar__shortcut\">{item.shortcut}</kbd>}\n </button>\n </li>\n )\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Menubar.tsx"],"names":[],"mappings":"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","file":"chunk-QM7BCSCL.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface MenubarItem {\n id: string;\n label?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n separator?: boolean;\n shortcut?: string;\n}\n\nexport interface MenubarMenu {\n id: string;\n label: React.ReactNode;\n items: MenubarItem[];\n}\n\nexport interface MenubarProps {\n menus: MenubarMenu[];\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Menubar({ menus, className, ariaLabel = 'Barra de menús' }: MenubarProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n const [active, setActive] = React.useState(0);\n // Roving tab stop for the menubar row (one tab stop, arrows move between\n // triggers — WAI-ARIA menubar pattern).\n const [tabId, setTabId] = React.useState<string | null>(menus[0]?.id ?? null);\n // Keyboard opens move focus into the menu; pointer opens don't.\n const focusOnOpen = React.useRef(false);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const panelRef = React.useRef<HTMLUListElement>(null);\n const anchorRef = React.useRef<HTMLElement | null>(null);\n const triggerRefs = React.useRef<Record<string, HTMLButtonElement | null>>({});\n const itemRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n\n const open = openId !== null;\n const openMenu = menus.find((m) => m.id === openId) ?? null;\n const menuIndex = menus.findIndex((m) => m.id === openId);\n\n // Positions within the open menu that are selectable (no\n // separators/disabled). `active` indexes into this list.\n const enabledIdx = (openMenu?.items ?? [])\n .map((it, i) => (it.separator || it.disabled ? -1 : i))\n .filter((i) => i >= 0);\n\n const pos = usePopoverPosition(anchorRef, panelRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 6,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpenId(null),\n refs: [rootRef, panelRef],\n closeOnEscape: false,\n });\n\n const focusTrigger = (id: string | null) => {\n if (id) triggerRefs.current[id]?.focus();\n };\n\n const openMenuById = (id: string, viaKeyboard: boolean) => {\n const el = triggerRefs.current[id];\n if (el) anchorRef.current = el;\n focusOnOpen.current = viaKeyboard;\n setActive(0);\n setTabId(id);\n setOpenId(id);\n };\n\n const closeAndFocusTrigger = () => {\n const id = openId;\n setOpenId(null);\n focusTrigger(id);\n };\n\n React.useEffect(() => {\n if (open && focusOnOpen.current) {\n focusOnOpen.current = false;\n const realIdx = enabledIdx[0];\n if (realIdx != null) itemRefs.current[realIdx]?.focus();\n }\n }, [open, enabledIdx]);\n\n React.useEffect(() => {\n if (!open || focusOnOpen.current) return;\n const realIdx = enabledIdx[active];\n if (realIdx != null) itemRefs.current[realIdx]?.focus();\n }, [open, active, enabledIdx]);\n\n const selectItem = (item: MenubarItem) => {\n if (item.disabled || item.separator) return;\n item.onSelect?.();\n closeAndFocusTrigger();\n };\n\n const stepMenu = (dir: 1 | -1) => {\n if (menus.length === 0) return;\n const from = menuIndex >= 0 ? menuIndex : 0;\n const next = (from + dir + menus.length) % menus.length;\n openMenuById(menus[next].id, true);\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent, menu: MenubarMenu, index: number) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openMenuById(menu.id, true);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n const next = menus[(index + 1) % menus.length];\n setTabId(next.id);\n if (open) openMenuById(next.id, true);\n else focusTrigger(next.id);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = menus[(index - 1 + menus.length) % menus.length];\n setTabId(prev.id);\n if (open) openMenuById(prev.id, true);\n else focusTrigger(prev.id);\n } else if (e.key === 'Escape' && open) {\n e.preventDefault();\n setOpenId(null);\n } else if (e.key === 'Home') {\n e.preventDefault();\n setTabId(menus[0].id);\n focusTrigger(menus[0].id);\n } else if (e.key === 'End') {\n e.preventDefault();\n const last = menus[menus.length - 1];\n setTabId(last.id);\n focusTrigger(last.id);\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n closeAndFocusTrigger();\n } else if (e.key === 'Tab') {\n setOpenId(null);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActive((a) => Math.min(a + 1, enabledIdx.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActive((a) => Math.max(a - 1, 0));\n } else if (e.key === 'Home') {\n e.preventDefault();\n setActive(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n setActive(Math.max(enabledIdx.length - 1, 0));\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n stepMenu(1);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n stepMenu(-1);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const realIdx = enabledIdx[active];\n const it = realIdx != null ? openMenu?.items[realIdx] : undefined;\n if (it) selectItem(it);\n }\n };\n\n return (\n <div ref={rootRef} role=\"menubar\" aria-label={ariaLabel} className={cx('menubar', className)}>\n {menus.map((menu, index) => {\n const isOpen = openId === menu.id;\n return (\n <div key={menu.id} className=\"menubar__menu\">\n <button\n type=\"button\"\n role=\"menuitem\"\n ref={(el) => { triggerRefs.current[menu.id] = el; }}\n tabIndex={(tabId ?? menus[0]?.id) === menu.id ? 0 : -1}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n className={cx('menubar__trigger', isOpen && 'is-open')}\n onClick={(e) => {\n if (isOpen) { setOpenId(null); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setActive(0);\n setTabId(menu.id);\n setOpenId(menu.id);\n }}\n onMouseEnter={(e) => {\n if (!openId) return;\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setActive(0);\n setTabId(menu.id);\n setOpenId(menu.id);\n }}\n onFocus={() => setTabId(menu.id)}\n onKeyDown={(e) => onTriggerKeyDown(e, menu, index)}\n >\n {menu.label}\n </button>\n {isOpen && (\n <Portal>\n <ul\n ref={panelRef}\n role=\"menu\"\n aria-label={typeof menu.label === 'string' ? menu.label : undefined}\n className=\"menubar__list\"\n onKeyDown={onPanelKeyDown}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {menu.items.map((item, i) =>\n item.separator ? (\n <li key={item.id} className=\"menubar__separator\" role=\"separator\" />\n ) : (\n <li key={item.id} role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n ref={(el) => { itemRefs.current[i] = el; }}\n tabIndex={enabledIdx[active] === i ? 0 : -1}\n disabled={item.disabled}\n className={cx('menubar__item', item.disabled && 'is-disabled', enabledIdx[active] === i && 'is-active')}\n onMouseEnter={() => setActive(enabledIdx.indexOf(i))}\n onClick={() => selectItem(item)}\n >\n <span className=\"menubar__label\">{item.label}</span>\n {item.shortcut && <kbd className=\"menubar__shortcut\">{item.shortcut}</kbd>}\n </button>\n </li>\n )\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
@@ -28,7 +28,7 @@ function _interopNamespace(e) {
28
28
 
29
29
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
30
 
31
- var NumberInput = React__namespace.forwardRef(function NumberInput2({ value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest }, ref) {
31
+ var NumberInput = React__namespace.forwardRef(function NumberInput2({ value, onChange, min, max, step = 1, invalid, prefix, suffix, fullWidth, className, disabled, ...rest }, ref) {
32
32
  const t = chunk4VMQLSHV_js.useLocale();
33
33
  const set = (next) => {
34
34
  if (next == null) return onChange?.(null);
@@ -38,7 +38,7 @@ var NumberInput = React__namespace.forwardRef(function NumberInput2({ value, onC
38
38
  onChange?.(v);
39
39
  };
40
40
  const incr = (mult) => set((value ?? 0) + step * mult);
41
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("number-input", invalid && "is-invalid", disabled && "is-disabled", className), children: [
41
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("number-input", fullWidth && "number-input--block", invalid && "is-invalid", disabled && "is-disabled", className), children: [
42
42
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "number-input__btn", tabIndex: -1, "aria-label": t["numberInput.decrement"], onClick: () => incr(-1), disabled, children: "\u2212" }),
43
43
  prefix && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "number-input__affix", children: prefix }),
44
44
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -129,5 +129,5 @@ exports.EmptyState = EmptyState;
129
129
  exports.Kpi = Kpi;
130
130
  exports.NumberInput = NumberInput;
131
131
  exports.Pagination = Pagination;
132
- //# sourceMappingURL=chunk-KTWHW6UV.js.map
133
- //# sourceMappingURL=chunk-KTWHW6UV.js.map
132
+ //# sourceMappingURL=chunk-RCXLCU5A.js.map
133
+ //# sourceMappingURL=chunk-RCXLCU5A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Inputs.tsx"],"names":["React","NumberInput","useLocale","jsxs","cx","jsx","format","ChevronLeft","ChevronRight","ChevronUp","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBO,IAAM,WAAA,GAAoBA,4BAA+C,SAASC,YAAAA,CACvF,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,GAAA,EAAK,IAAA,GAAO,GAAG,OAAA,EAAS,MAAA,EAAQ,QAAQ,SAAA,EAAW,SAAA,EAAW,UAAU,GAAG,IAAA,IACnG,GAAA,EACA;AACA,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAwB;AACnC,IAAA,IAAI,IAAA,IAAQ,IAAA,EAAM,OAAO,QAAA,GAAW,IAAI,CAAA;AACxC,IAAA,IAAI,CAAA,GAAI,IAAA;AACR,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,MAAc,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAChD,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,MAAc,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAChD,IAAA,QAAA,GAAW,CAAC,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,OAAO,CAAC,IAAA,KAAiB,KAAK,KAAA,IAAS,CAAA,IAAK,OAAO,IAAI,CAAA;AAC7D,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,cAAA,EAAgB,SAAA,IAAa,qBAAA,EAAuB,OAAA,IAAW,YAAA,EAAc,QAAA,IAAY,aAAA,EAAe,SAAS,CAAA,EAClI,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB,UAAU,EAAA,EAAI,YAAA,EAAY,CAAA,CAAE,uBAAuB,GAAG,OAAA,EAAS,MAAM,KAAK,EAAE,CAAA,EAAG,UAAoB,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,IACvJ,MAAA,oBAAUA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAuB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,oBACzDA,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,qBAAA;AAAA,QACV,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,GAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAU,CAAC,CAAA,KAAM,GAAA,CAAI,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC1E,gBAAc,OAAA,IAAW,MAAA;AAAA,QACxB,GAAG;AAAA;AAAA,KACN;AAAA,IACC,MAAA,oBAAUA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAuB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,mCACxD,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAU,mBAAA,EAAoB,UAAU,EAAA,EAAI,YAAA,EAAY,CAAA,CAAE,uBAAuB,GAAG,OAAA,EAAS,MAAM,KAAK,CAAC,CAAA,EAAG,UAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,GAAA,EACzJ,CAAA;AAEJ,CAAC;AAYD,SAAS,QAAA,CAAS,OAAA,EAAiB,KAAA,EAAe,QAAA,EAAsC;AACtF,EAAA,IAAI,KAAA,IAAS,CAAA,EAAG,OAAO,CAAC,CAAC,CAAA;AACzB,EAAA,MAAM,QAAQ,CAAC,CAAA,EAAW,CAAA,KAAc,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,CAAA,GAAI,CAAA,GAAI,GAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACzF,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,QAAQ,CAAA;AAC5C,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,UAAU,QAAQ,CAAA;AAClD,EAAA,MAAM,GAAA,GAA0B,CAAC,CAAC,CAAA;AAClC,EAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC7B,EAAA,GAAA,CAAI,IAAA,CAAK,GAAG,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AAC7B,EAAA,IAAI,GAAA,GAAM,KAAA,GAAQ,CAAA,EAAG,GAAA,CAAI,KAAK,KAAK,CAAA;AACnC,EAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC7B,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,YAAA,EAAc,QAAA,GAAW,CAAA,EAAG,SAAA,EAAU,EAAoB;AAC5G,EAAA,MAAM,IAAIH,0BAAA,EAAU;AACpB,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAG1D,EAAA,IAAI,UAAA,IAAc,GAAG,OAAO,IAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAA;AACjD,EAAA,MAAM,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAA,CAAK,IAAA,GAAO,KAAK,QAAA,GAAW,CAAA;AACvD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,QAAQ,CAAA;AAC1C,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,kBAAkB,CAAA,EAC3E,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAAC,uBAAA,CAAO,CAAA,CAAE,kBAAkB,CAAA,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,CAAA,EAAE,CAAA;AAAA,oBACvFD,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAC,CAAA,EAAG,QAAA,EAAU,IAAA,IAAQ,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,iBAAiB,CAAA,EAAG,QAAA,kBAAAA,cAAA,CAACE,4BAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,IACrL,KAAA,CAAM,GAAA;AAAA,MAAI,CAAC,CAAA,EAAG,CAAA,KACb,CAAA,KAAM,KAAA,mBACJF,cAAA,CAAC,MAAA,EAAA,EAAmB,SAAA,EAAU,sBAAA,EAAuB,QAAA,EAAA,QAAA,EAAA,EAA1C,CAAA,CAAA,EAAI,CAAC,EAAsC,CAAA,mBAEtDA,cAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAWD,mBAAA,CAAG,iBAAA,EAAmB,CAAA,KAAM,QAAQ,WAAW,CAAA;AAAA,UAC1D,cAAA,EAAc,CAAA,KAAM,IAAA,GAAO,MAAA,GAAS,MAAA;AAAA,UACpC,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA;AAAA,UAE5B,QAAA,EAAA;AAAA,SAAA;AAAA,QANI;AAAA;AAOP,KAEJ;AAAA,oBACAC,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,IAAA,GAAO,CAAC,CAAC,CAAA,EAAG,QAAA,EAAU,IAAA,IAAQ,UAAA,EAAY,YAAA,EAAY,CAAA,CAAE,iBAAiB,CAAA,EAAG,QAAA,kBAAAA,cAAA,CAACG,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,GAAA,EAC3M,CAAA;AAEJ;AAWO,SAAS,WAAW,EAAE,IAAA,EAAM,OAAO,WAAA,EAAa,MAAA,EAAQ,WAAU,EAAoB;AAC3F,EAAA,uBACEL,eAAA,CAAC,SAAI,SAAA,EAAWC,mBAAA,CAAG,SAAS,SAAS,CAAA,EAAG,MAAK,QAAA,EAC1C,QAAA,EAAA;AAAA,IAAA,IAAA,mCAAS,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,aAAA,EAAY,QAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBAC/DC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACpC,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAe,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,IACzD;AAAA,GAAA,EACH,CAAA;AAEJ;AAYO,SAAS,GAAA,CAAI,EAAE,KAAA,EAAO,KAAA,EAAO,OAAO,IAAA,EAAM,IAAA,EAAM,WAAU,EAAa;AAC5E,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWD,mBAAA,CAAG,KAAA,EAAO,SAAS,CAAA,EACjC,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EAAc,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACnC,wBAAQA,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,WAAA,EAAY,aAAA,EAAY,QAAQ,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EAChE,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACnCF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCA,eAAA,CAAC,UAAK,SAAA,EAAWC,mBAAA,CAAG,cAAc,CAAA,YAAA,EAAe,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA,EAC3D,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,KAAA,KAAU,IAAA,mBAAOC,cAAA,CAACI,0BAAA,EAAA,EAAU,MAAM,EAAA,EAAI,CAAA,GAAK,KAAA,CAAM,KAAA,KAAU,MAAA,mBAASJ,cAAA,CAACK,4BAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,GAAK,QAAA;AAAA,QAAI,GAAA;AAAA,QAAE,KAAA,CAAM;AAAA,OAAA,EACrH,CAAA;AAAA,MAED,IAAA,oBAAQL,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAa,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EAC7C;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-RCXLCU5A.js","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,8 +1,8 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkKTWHW6UV_js = require('./chunk-KTWHW6UV.js');
5
4
  var chunkHYUINOPJ_js = require('./chunk-HYUINOPJ.js');
5
+ var chunkRCXLCU5A_js = require('./chunk-RCXLCU5A.js');
6
6
  var chunkDFQLWCIC_js = require('./chunk-DFQLWCIC.js');
7
7
  var chunk4VMQLSHV_js = require('./chunk-4VMQLSHV.js');
8
8
  var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
@@ -337,7 +337,7 @@ function TablePagination({
337
337
  )
338
338
  ] }),
339
339
  /* @__PURE__ */ jsxRuntime.jsx(
340
- chunkKTWHW6UV_js.Pagination,
340
+ chunkRCXLCU5A_js.Pagination,
341
341
  {
342
342
  page,
343
343
  pageSize,
@@ -359,5 +359,5 @@ exports.Breadcrumbs = Breadcrumbs;
359
359
  exports.DataTable = DataTable;
360
360
  exports.TablePagination = TablePagination;
361
361
  exports.TableToolbar = TableToolbar;
362
- //# sourceMappingURL=chunk-ASUZ6KHJ.js.map
363
- //# sourceMappingURL=chunk-ASUZ6KHJ.js.map
362
+ //# sourceMappingURL=chunk-RHPXE3E7.js.map
363
+ //# sourceMappingURL=chunk-RHPXE3E7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DataTable.tsx"],"names":["jsxs","Fragment","cx","jsx","Checkbox","React","useLocale","rows","rowKey","selectedKeys","onSelectionChange","ChevronUp","ChevronDown","MoreVertical","format","Pagination","TableToolbar"],"mappings":"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","file":"chunk-ASUZ6KHJ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronUp, ChevronDown, MoreVertical } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- DataTableRow (memoized) -------------------------------------\n// Extracted as React.memo so unrelated parent re-renders don't churn through\n// every row in the table. Combined with a ref-stable `onToggle`, only the\n// row whose `selected` prop actually changed re-renders on toggle.\ninterface DataTableRowProps<T> {\n row: T;\n rowK: string;\n selected: boolean;\n selectable: boolean;\n selectAriaLabel: string;\n columns: Column<T>[];\n onToggle: (k: string) => void;\n /** Resolved from `rowHref(row)` — makes the row a navigable link. */\n href?: string;\n /** Resolved from `onRowClick(row)` — makes the row activate a callback. */\n onActivate?: () => void;\n /** Accessible name for the stretched row control (e.g. \"Ver Taladro\"). */\n actionLabel?: string;\n /** Full-control escape hatch (see `DataTableProps.renderRow`). */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n}\n\nfunction DataTableRowImpl<T>({\n row, rowK, selected, selectable, selectAriaLabel, columns, onToggle,\n href, onActivate, actionLabel, renderRow,\n}: DataTableRowProps<T>) {\n const interactive = !renderRow && (!!href || !!onActivate);\n\n const cells = (\n <>\n {selectable && (\n <td className={cx(interactive && 'data-table__cell--above')}>\n <Checkbox\n checked={selected}\n onChange={() => onToggle(rowK)}\n aria-label={selectAriaLabel}\n />\n </td>\n )}\n {columns.map((c, ci) => {\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const value = c.accessor\n ? c.accessor(row)\n : (row as Record<string, unknown>)[c.key] as React.ReactNode;\n // data-label is consumed by the .data-table--cards CSS to surface\n // the column header as an inline label on each row when the table\n // collapses to a card layout on narrow viewports. Non-string\n // headers (e.g. JSX) can't be projected through `attr()` so we\n // omit the attribute and the cell renders without a visible label.\n const label = typeof c.header === 'string' ? c.header : undefined;\n return (\n <td\n key={c.key}\n // `table__align-*` makes alignment authoritative for ANY cell\n // content. `text-align` alone silently fails for a block/flex\n // child (e.g. an action column of buttons → floated left); the\n // class adds the matching `margin` auto so element children\n // honor `align` too. Left cells emit no extra class → byte-\n // identical to pre-1.10.0 (zero regression for the default).\n className={cx(\n c.numeric && 'table__num',\n align !== 'left' && `table__align-${align}`,\n )}\n style={{ textAlign: align }}\n data-label={label}\n >\n {/* Stretched row control: a real <a>/<button> in the first\n data cell, overlaying the whole row (the <tr> is the\n positioned ancestor). Keyboard-operable + SR-labelled +\n valid table markup — no role hacks, no onClick-only div.\n Visually empty; the cells stay the visible content. Other\n interactive cell content opts above it via\n `data-table__cell--above` (stretched-link pattern). */}\n {interactive && ci === 0 && (\n href ? (\n <a\n href={href}\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n ) : (\n <button\n type=\"button\"\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n )\n )}\n {value as React.ReactNode}\n </td>\n );\n })}\n </>\n );\n\n if (renderRow) return <>{renderRow({ row, cells, rowKey: rowK })}</>;\n\n return (\n <tr className={cx(selected && 'is-selected', interactive && 'is-clickable')}>\n {cells}\n </tr>\n );\n}\n\n// Cast preserves the generic signature through React.memo.\nconst DataTableRow = React.memo(DataTableRowImpl) as typeof DataTableRowImpl;\n\n// ---------- DataTable ----------------------------------------------------\nexport interface Column<T> {\n key: string;\n header: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n align?: 'left' | 'right' | 'center';\n width?: number | string;\n /**\n * Marks the column as numeric: cells get the `.table__num` class\n * (monospace + tabular alignment) and right-align by default.\n */\n numeric?: boolean;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n sort?: { key: string; dir: 'asc' | 'desc' } | null;\n /**\n * Sorting is uncontrolled inside the table — consumers re-order `rows`\n * in response to `onSortChange`. Stability of equal-keyed rows is the\n * caller's responsibility (use a stable sort like `Array.prototype.sort`\n * in V8/Node ≥ 12, or a tiebreaker on rowKey).\n */\n onSortChange?: (s: { key: string; dir: 'asc' | 'desc' } | null) => void;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n /**\n * \"Select all\" toggles only the rows currently passed to the component.\n * If the consumer paginates externally and only passes the visible page,\n * this selects the page — not the dataset across all pages.\n */\n onSelectionChange?: (keys: Set<string>) => void;\n empty?: React.ReactNode;\n /**\n * Renders an error state in place of the body. Takes precedence over\n * `loading`, `empty`, and rows. Use it when a fetch fails.\n */\n error?: React.ReactNode;\n loading?: boolean;\n /**\n * Sticky-position the table header so it stays visible while the body\n * scrolls. The wrapper itself becomes the vertical scroll container\n * (the table is already overflow-x:auto, so an outer scroller can't reach\n * the header). Defaults to `max-height: 70vh`; override by passing a\n * `className` with a different `max-height`. Do NOT wrap `<DataTable>` in\n * your own `overflow-y:auto` container — that breaks the sticky context.\n */\n stickyHeader?: boolean;\n /**\n * Layout for narrow viewports (`<600px`):\n * - `'table'` (default): the table scrolls horizontally inside its wrapper.\n * - `'cards'`: each row collapses to a stacked card with the column\n * header as an inline label per cell. Requires string `header` values\n * for the labels to appear; non-string headers render without a label.\n */\n mobileLayout?: 'table' | 'cards';\n /** Accessible name announced by screen readers (e.g. \"Pedidos abiertos\"). */\n ariaLabel?: string;\n /**\n * Builds the accessible label for the per-row checkbox so screen-reader\n * users can tell rows apart. Defaults to the row's key. Provide this\n * when the key isn't human-readable (e.g. a UUID).\n */\n rowLabel?: (row: T) => string;\n /**\n * Body density. Default `'compact'` (v1.10.0): a readable-dense register\n * (~30px rows, `--text-xs`, single-line cells) — the right default for\n * the data-heavy screens this kit serves (\"default = product\"). Pass\n * `'comfortable'` to opt back into the pre-1.10.0 airy 14px/16px rows\n * (which wrap to two lines).\n */\n density?: 'comfortable' | 'compact';\n /**\n * Makes every row a navigable link. The kit renders a real, keyboard-\n * operable, screen-reader-labelled `<a>` stretched over the row — valid\n * table markup (no `role` hacks, no `asChild` on `<tr>`, never an\n * onClick-only div). One Tab stop per row; Enter activates; the focus\n * ring shows on the row. Additive; combinable with `onRowClick`.\n */\n rowHref?: (row: T) => string;\n /**\n * Makes every row activate a callback (pointer **and** keyboard).\n * Renders a real stretched `<button>` with the same a11y guarantees as\n * `rowHref`. Prefer `rowHref` when the action is navigation.\n */\n onRowClick?: (row: T) => void;\n /**\n * Full-control escape hatch — the render-prop polymorphism the kit uses\n * for data/array-driven components (cf. `AppShell.linkAs`; deliberately\n * NOT `asChild`, which would emit invalid markup on `<tr>`). Receives the\n * row, the kit-rendered `cells`, and the row key; return your own row\n * element (e.g. a framework `<Link>` wrapping a `<tr>`). When set,\n * `rowHref`/`onRowClick` are ignored (you own row interactivity & a11y).\n */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n /**\n * Toolbar / filter zone that shares the table's rounded surface. When\n * set, the DataTable renders it INSIDE its own border+radius+overflow\n * surface (`.table-surface`): the toolbar is clipped to the radius,\n * there is exactly one divider between it and the header, and the\n * header band's corner-rounding is dropped so the strip is clean in the\n * corner — no card-border + filter-border + header-top stack, no seam.\n * Accepts any node (`<TableToolbar>`, `<FilterBar>`, a custom row). The\n * legacy sibling pattern (`<TableToolbar/><DataTable/>`) still works.\n */\n toolbar?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Tabular data renderer with optional sorting, selection, error/empty/\n * loading states.\n *\n * State priority (only one body state renders at a time):\n * error > loading > empty > rows\n *\n * Known limits (deferred to a later release):\n * - No virtualization; tested up to ~200 rows. For large datasets, plug\n * in react-window/tanstack-virtual around the body rows.\n */\nexport function DataTable<T>({\n columns, rows, rowKey,\n sort, onSortChange,\n selectable, selectedKeys, onSelectionChange,\n empty, error, loading, stickyHeader, mobileLayout = 'table',\n ariaLabel, rowLabel, className,\n density = 'compact', rowHref, onRowClick, renderRow, toolbar,\n}: DataTableProps<T>) {\n const t = useLocale();\n const allSelected = selectable && rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const someSelected = selectable && !allSelected && rows.some((r) => selectedKeys?.has(rowKey(r)));\n const headerCbRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCbRef.current) headerCbRef.current.indeterminate = !!someSelected;\n }, [someSelected]);\n\n // Latest-props ref so toggleRow stays referentially stable across selection\n // changes. Without this, every selection update would create a new\n // toggleRow, defeating React.memo on DataTableRow.\n const propsRef = React.useRef({ rows, rowKey, selectedKeys, onSelectionChange });\n propsRef.current = { rows, rowKey, selectedKeys, onSelectionChange };\n\n const toggleAll = React.useCallback(() => {\n const { rows, rowKey, selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const allSel = rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const next = new Set(selectedKeys);\n if (allSel) rows.forEach((r) => next.delete(rowKey(r)));\n else rows.forEach((r) => next.add(rowKey(r)));\n onSelectionChange(next);\n }, []);\n\n const toggleRow = React.useCallback((k: string) => {\n const { selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const next = new Set(selectedKeys);\n if (next.has(k)) next.delete(k); else next.add(k);\n onSelectionChange(next);\n }, []);\n\n const onSort = (col: Column<T>) => {\n if (!col.sortable || !onSortChange) return;\n if (!sort || sort.key !== col.key) onSortChange({ key: col.key, dir: 'asc' });\n else if (sort.dir === 'asc') onSortChange({ key: col.key, dir: 'desc' });\n else onSortChange(null);\n };\n\n const wrap = (\n <div\n className={cx(\n 'table-wrap',\n stickyHeader && 'table-wrap--sticky',\n mobileLayout === 'cards' && 'table-wrap--cards',\n className,\n )}\n >\n <table\n className={cx(\n 'table data-table',\n density === 'comfortable' && 'table--comfortable',\n )}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ width: 40 }}>\n <Checkbox\n ref={headerCbRef}\n checked={!!allSelected}\n onChange={toggleAll}\n aria-label={t['table.selectAll']}\n />\n </th>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key;\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const sortValue = c.sortable\n ? (active ? (sort!.dir === 'asc' ? 'ascending' : 'descending') : 'none')\n : undefined;\n const headerInner = (\n <span className=\"data-table__th\">\n {c.header}\n {c.sortable && (\n <span className=\"data-table__sort\" aria-hidden=\"true\">\n {active ? (sort!.dir === 'asc' ? <ChevronUp size={12} /> : <ChevronDown size={12} />) : <MoreVertical size={12} />}\n </span>\n )}\n </span>\n );\n return (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, textAlign: align }}\n aria-sort={sortValue}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n className=\"data-table__sort-btn\"\n onClick={() => onSort(c)}\n >\n {headerInner}\n </button>\n ) : headerInner}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {error ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"data-table__error\"\n role=\"alert\"\n style={{ padding: 32, textAlign: 'center' }}\n >\n {error}\n </td>\n </tr>\n ) : loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={`s${i}`}>\n {selectable && <td><div className=\"skel\" style={{ height: 14 }} /></td>}\n {columns.map((c) => <td key={c.key}><div className=\"skel\" style={{ height: 12, width: '70%' }} /></td>)}\n </tr>\n ))\n ) : rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} style={{ padding: 32 }}>\n {empty ?? <div style={{ textAlign: 'center', color: 'var(--fg-muted)' }}>{t['table.empty']}</div>}\n </td>\n </tr>\n ) : (\n rows.map((r) => {\n const k = rowKey(r);\n const label = rowLabel ? rowLabel(r) : k;\n const href = rowHref?.(r);\n const onActivate = onRowClick ? () => onRowClick(r) : undefined;\n return (\n <DataTableRow\n key={k}\n row={r}\n rowK={k}\n selected={!!selectedKeys?.has(k)}\n selectable={!!selectable}\n selectAriaLabel={format(t['table.selectRow'], { label })}\n columns={columns}\n onToggle={toggleRow}\n href={href}\n onActivate={onActivate}\n actionLabel={format(t['table.rowAction'], { label })}\n renderRow={renderRow}\n />\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n // No toolbar → byte-identical legacy output. With a toolbar, the\n // DataTable owns the single rounded+clipped+bordered surface; the inner\n // .table-wrap defers its border/radius (CSS) and stays the scroll/sticky\n // context, so existing behaviour is untouched.\n return toolbar == null ? wrap : (\n <div className=\"table-surface\">\n <div className=\"table-surface__bar\">{toolbar}</div>\n {wrap}\n </div>\n );\n}\n\n// ---------- Accordion ----------------------------------------------------\ninterface AccordionContextValue {\n open: Set<string>;\n toggle: (id: string) => void;\n multiple: boolean;\n}\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps {\n multiple?: boolean;\n defaultOpen?: string[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ multiple = false, defaultOpen = [], children, className }: AccordionProps) {\n const [open, setOpen] = React.useState<Set<string>>(new Set(defaultOpen));\n const toggle = (id: string) => {\n setOpen((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else {\n if (!multiple) next.clear();\n next.add(id);\n }\n return next;\n });\n };\n return (\n <AccordionContext.Provider value={{ open, toggle, multiple }}>\n <div className={cx('accordion', className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport function AccordionItem({ id, title, children }: { id: string; title: React.ReactNode; children: React.ReactNode }) {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error('<AccordionItem> must be used inside <Accordion>');\n const isOpen = ctx.open.has(id);\n const reactId = React.useId();\n const triggerId = `accordion-trigger-${reactId}`;\n const panelId = `accordion-panel-${reactId}`;\n return (\n <div className={cx('accordion__item', isOpen && 'is-open')}>\n <button\n type=\"button\"\n id={triggerId}\n className=\"accordion__trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => ctx.toggle(id)}\n >\n <span>{title}</span>\n <span className=\"accordion__chev\" aria-hidden=\"true\"><ChevronDown size={14} /></span>\n </button>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion__panel\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n// ---------- Breadcrumbs --------------------------------------------------\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n}\n\nexport function Breadcrumbs({ items, className }: { items: BreadcrumbItem[]; className?: string }) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cx('breadcrumbs', className)}>\n <ol>\n {items.map((it, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i}>\n {it.href && !last ? <a href={it.href}>{it.label}</a> : <span aria-current={last ? 'page' : undefined}>{it.label}</span>}\n {!last && <span aria-hidden=\"true\" className=\"breadcrumbs__sep\">/</span>}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n// ---------- TablePagination ---------------------------------------------\n// Convenience wrapper that pairs a page-size selector with a Pagination\n// row. Use it under a DataTable when the table is paginated externally.\nimport { Pagination } from './Inputs';\n\nexport interface TablePaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n /** If set, renders a page-size selector. Omit for fixed-size pagination. */\n onPageSizeChange?: (size: number) => void;\n /** Options shown in the page-size selector. Default `[10, 25, 50, 100]`. */\n pageSizeOptions?: readonly number[];\n className?: string;\n}\n\nexport function TablePagination({\n page, pageSize, total, onPageChange,\n onPageSizeChange, pageSizeOptions = [10, 25, 50, 100],\n className,\n}: TablePaginationProps) {\n const t = useLocale();\n const selectId = React.useId();\n return (\n <div className={cx('table-pagination', className)}>\n {onPageSizeChange && (\n <label className=\"table-pagination__size\" htmlFor={selectId}>\n <span>{t['pagination.rowsPerPage']}</span>\n <select\n id={selectId}\n className=\"select\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((n) => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n </label>\n )}\n <Pagination\n page={page}\n pageSize={pageSize}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n}\n\n// ---------- TableToolbar -------------------------------------------------\n// Barra superior que se compone arriba (o dentro de un wrapper) de un DataTable.\n// Cualquier hijo con className \"grow\" se expande para empujar las acciones al lado.\nexport const TableToolbar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function TableToolbar({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('table-toolbar', className)} {...rest} />;\n }\n);\n"]}
1
+ {"version":3,"sources":["../src/components/DataTable.tsx"],"names":["jsxs","Fragment","cx","jsx","Checkbox","React","useLocale","rows","rowKey","selectedKeys","onSelectionChange","ChevronUp","ChevronDown","MoreVertical","format","Pagination","TableToolbar"],"mappings":"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","file":"chunk-RHPXE3E7.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronUp, ChevronDown, MoreVertical } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- DataTableRow (memoized) -------------------------------------\n// Extracted as React.memo so unrelated parent re-renders don't churn through\n// every row in the table. Combined with a ref-stable `onToggle`, only the\n// row whose `selected` prop actually changed re-renders on toggle.\ninterface DataTableRowProps<T> {\n row: T;\n rowK: string;\n selected: boolean;\n selectable: boolean;\n selectAriaLabel: string;\n columns: Column<T>[];\n onToggle: (k: string) => void;\n /** Resolved from `rowHref(row)` — makes the row a navigable link. */\n href?: string;\n /** Resolved from `onRowClick(row)` — makes the row activate a callback. */\n onActivate?: () => void;\n /** Accessible name for the stretched row control (e.g. \"Ver Taladro\"). */\n actionLabel?: string;\n /** Full-control escape hatch (see `DataTableProps.renderRow`). */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n}\n\nfunction DataTableRowImpl<T>({\n row, rowK, selected, selectable, selectAriaLabel, columns, onToggle,\n href, onActivate, actionLabel, renderRow,\n}: DataTableRowProps<T>) {\n const interactive = !renderRow && (!!href || !!onActivate);\n\n const cells = (\n <>\n {selectable && (\n <td className={cx(interactive && 'data-table__cell--above')}>\n <Checkbox\n checked={selected}\n onChange={() => onToggle(rowK)}\n aria-label={selectAriaLabel}\n />\n </td>\n )}\n {columns.map((c, ci) => {\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const value = c.accessor\n ? c.accessor(row)\n : (row as Record<string, unknown>)[c.key] as React.ReactNode;\n // data-label is consumed by the .data-table--cards CSS to surface\n // the column header as an inline label on each row when the table\n // collapses to a card layout on narrow viewports. Non-string\n // headers (e.g. JSX) can't be projected through `attr()` so we\n // omit the attribute and the cell renders without a visible label.\n const label = typeof c.header === 'string' ? c.header : undefined;\n return (\n <td\n key={c.key}\n // `table__align-*` makes alignment authoritative for ANY cell\n // content. `text-align` alone silently fails for a block/flex\n // child (e.g. an action column of buttons → floated left); the\n // class adds the matching `margin` auto so element children\n // honor `align` too. Left cells emit no extra class → byte-\n // identical to pre-1.10.0 (zero regression for the default).\n className={cx(\n c.numeric && 'table__num',\n align !== 'left' && `table__align-${align}`,\n )}\n style={{ textAlign: align }}\n data-label={label}\n >\n {/* Stretched row control: a real <a>/<button> in the first\n data cell, overlaying the whole row (the <tr> is the\n positioned ancestor). Keyboard-operable + SR-labelled +\n valid table markup — no role hacks, no onClick-only div.\n Visually empty; the cells stay the visible content. Other\n interactive cell content opts above it via\n `data-table__cell--above` (stretched-link pattern). */}\n {interactive && ci === 0 && (\n href ? (\n <a\n href={href}\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n ) : (\n <button\n type=\"button\"\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n )\n )}\n {value as React.ReactNode}\n </td>\n );\n })}\n </>\n );\n\n if (renderRow) return <>{renderRow({ row, cells, rowKey: rowK })}</>;\n\n return (\n <tr className={cx(selected && 'is-selected', interactive && 'is-clickable')}>\n {cells}\n </tr>\n );\n}\n\n// Cast preserves the generic signature through React.memo.\nconst DataTableRow = React.memo(DataTableRowImpl) as typeof DataTableRowImpl;\n\n// ---------- DataTable ----------------------------------------------------\nexport interface Column<T> {\n key: string;\n header: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n align?: 'left' | 'right' | 'center';\n width?: number | string;\n /**\n * Marks the column as numeric: cells get the `.table__num` class\n * (monospace + tabular alignment) and right-align by default.\n */\n numeric?: boolean;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n sort?: { key: string; dir: 'asc' | 'desc' } | null;\n /**\n * Sorting is uncontrolled inside the table — consumers re-order `rows`\n * in response to `onSortChange`. Stability of equal-keyed rows is the\n * caller's responsibility (use a stable sort like `Array.prototype.sort`\n * in V8/Node ≥ 12, or a tiebreaker on rowKey).\n */\n onSortChange?: (s: { key: string; dir: 'asc' | 'desc' } | null) => void;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n /**\n * \"Select all\" toggles only the rows currently passed to the component.\n * If the consumer paginates externally and only passes the visible page,\n * this selects the page — not the dataset across all pages.\n */\n onSelectionChange?: (keys: Set<string>) => void;\n empty?: React.ReactNode;\n /**\n * Renders an error state in place of the body. Takes precedence over\n * `loading`, `empty`, and rows. Use it when a fetch fails.\n */\n error?: React.ReactNode;\n loading?: boolean;\n /**\n * Sticky-position the table header so it stays visible while the body\n * scrolls. The wrapper itself becomes the vertical scroll container\n * (the table is already overflow-x:auto, so an outer scroller can't reach\n * the header). Defaults to `max-height: 70vh`; override by passing a\n * `className` with a different `max-height`. Do NOT wrap `<DataTable>` in\n * your own `overflow-y:auto` container — that breaks the sticky context.\n */\n stickyHeader?: boolean;\n /**\n * Layout for narrow viewports (`<600px`):\n * - `'table'` (default): the table scrolls horizontally inside its wrapper.\n * - `'cards'`: each row collapses to a stacked card with the column\n * header as an inline label per cell. Requires string `header` values\n * for the labels to appear; non-string headers render without a label.\n */\n mobileLayout?: 'table' | 'cards';\n /** Accessible name announced by screen readers (e.g. \"Pedidos abiertos\"). */\n ariaLabel?: string;\n /**\n * Builds the accessible label for the per-row checkbox so screen-reader\n * users can tell rows apart. Defaults to the row's key. Provide this\n * when the key isn't human-readable (e.g. a UUID).\n */\n rowLabel?: (row: T) => string;\n /**\n * Body density. Default `'compact'` (v1.10.0): a readable-dense register\n * (~30px rows, `--text-xs`, single-line cells) — the right default for\n * the data-heavy screens this kit serves (\"default = product\"). Pass\n * `'comfortable'` to opt back into the pre-1.10.0 airy 14px/16px rows\n * (which wrap to two lines).\n */\n density?: 'comfortable' | 'compact';\n /**\n * Makes every row a navigable link. The kit renders a real, keyboard-\n * operable, screen-reader-labelled `<a>` stretched over the row — valid\n * table markup (no `role` hacks, no `asChild` on `<tr>`, never an\n * onClick-only div). One Tab stop per row; Enter activates; the focus\n * ring shows on the row. Additive; combinable with `onRowClick`.\n */\n rowHref?: (row: T) => string;\n /**\n * Makes every row activate a callback (pointer **and** keyboard).\n * Renders a real stretched `<button>` with the same a11y guarantees as\n * `rowHref`. Prefer `rowHref` when the action is navigation.\n */\n onRowClick?: (row: T) => void;\n /**\n * Full-control escape hatch — the render-prop polymorphism the kit uses\n * for data/array-driven components (cf. `AppShell.linkAs`; deliberately\n * NOT `asChild`, which would emit invalid markup on `<tr>`). Receives the\n * row, the kit-rendered `cells`, and the row key; return your own row\n * element (e.g. a framework `<Link>` wrapping a `<tr>`). When set,\n * `rowHref`/`onRowClick` are ignored (you own row interactivity & a11y).\n */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n /**\n * Toolbar / filter zone that shares the table's rounded surface. When\n * set, the DataTable renders it INSIDE its own border+radius+overflow\n * surface (`.table-surface`): the toolbar is clipped to the radius,\n * there is exactly one divider between it and the header, and the\n * header band's corner-rounding is dropped so the strip is clean in the\n * corner — no card-border + filter-border + header-top stack, no seam.\n * Accepts any node (`<TableToolbar>`, `<FilterBar>`, a custom row). The\n * legacy sibling pattern (`<TableToolbar/><DataTable/>`) still works.\n */\n toolbar?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Tabular data renderer with optional sorting, selection, error/empty/\n * loading states.\n *\n * State priority (only one body state renders at a time):\n * error > loading > empty > rows\n *\n * Known limits (deferred to a later release):\n * - No virtualization; tested up to ~200 rows. For large datasets, plug\n * in react-window/tanstack-virtual around the body rows.\n */\nexport function DataTable<T>({\n columns, rows, rowKey,\n sort, onSortChange,\n selectable, selectedKeys, onSelectionChange,\n empty, error, loading, stickyHeader, mobileLayout = 'table',\n ariaLabel, rowLabel, className,\n density = 'compact', rowHref, onRowClick, renderRow, toolbar,\n}: DataTableProps<T>) {\n const t = useLocale();\n const allSelected = selectable && rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const someSelected = selectable && !allSelected && rows.some((r) => selectedKeys?.has(rowKey(r)));\n const headerCbRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCbRef.current) headerCbRef.current.indeterminate = !!someSelected;\n }, [someSelected]);\n\n // Latest-props ref so toggleRow stays referentially stable across selection\n // changes. Without this, every selection update would create a new\n // toggleRow, defeating React.memo on DataTableRow.\n const propsRef = React.useRef({ rows, rowKey, selectedKeys, onSelectionChange });\n propsRef.current = { rows, rowKey, selectedKeys, onSelectionChange };\n\n const toggleAll = React.useCallback(() => {\n const { rows, rowKey, selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const allSel = rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const next = new Set(selectedKeys);\n if (allSel) rows.forEach((r) => next.delete(rowKey(r)));\n else rows.forEach((r) => next.add(rowKey(r)));\n onSelectionChange(next);\n }, []);\n\n const toggleRow = React.useCallback((k: string) => {\n const { selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const next = new Set(selectedKeys);\n if (next.has(k)) next.delete(k); else next.add(k);\n onSelectionChange(next);\n }, []);\n\n const onSort = (col: Column<T>) => {\n if (!col.sortable || !onSortChange) return;\n if (!sort || sort.key !== col.key) onSortChange({ key: col.key, dir: 'asc' });\n else if (sort.dir === 'asc') onSortChange({ key: col.key, dir: 'desc' });\n else onSortChange(null);\n };\n\n const wrap = (\n <div\n className={cx(\n 'table-wrap',\n stickyHeader && 'table-wrap--sticky',\n mobileLayout === 'cards' && 'table-wrap--cards',\n className,\n )}\n >\n <table\n className={cx(\n 'table data-table',\n density === 'comfortable' && 'table--comfortable',\n )}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ width: 40 }}>\n <Checkbox\n ref={headerCbRef}\n checked={!!allSelected}\n onChange={toggleAll}\n aria-label={t['table.selectAll']}\n />\n </th>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key;\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const sortValue = c.sortable\n ? (active ? (sort!.dir === 'asc' ? 'ascending' : 'descending') : 'none')\n : undefined;\n const headerInner = (\n <span className=\"data-table__th\">\n {c.header}\n {c.sortable && (\n <span className=\"data-table__sort\" aria-hidden=\"true\">\n {active ? (sort!.dir === 'asc' ? <ChevronUp size={12} /> : <ChevronDown size={12} />) : <MoreVertical size={12} />}\n </span>\n )}\n </span>\n );\n return (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, textAlign: align }}\n aria-sort={sortValue}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n className=\"data-table__sort-btn\"\n onClick={() => onSort(c)}\n >\n {headerInner}\n </button>\n ) : headerInner}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {error ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"data-table__error\"\n role=\"alert\"\n style={{ padding: 32, textAlign: 'center' }}\n >\n {error}\n </td>\n </tr>\n ) : loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={`s${i}`}>\n {selectable && <td><div className=\"skel\" style={{ height: 14 }} /></td>}\n {columns.map((c) => <td key={c.key}><div className=\"skel\" style={{ height: 12, width: '70%' }} /></td>)}\n </tr>\n ))\n ) : rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} style={{ padding: 32 }}>\n {empty ?? <div style={{ textAlign: 'center', color: 'var(--fg-muted)' }}>{t['table.empty']}</div>}\n </td>\n </tr>\n ) : (\n rows.map((r) => {\n const k = rowKey(r);\n const label = rowLabel ? rowLabel(r) : k;\n const href = rowHref?.(r);\n const onActivate = onRowClick ? () => onRowClick(r) : undefined;\n return (\n <DataTableRow\n key={k}\n row={r}\n rowK={k}\n selected={!!selectedKeys?.has(k)}\n selectable={!!selectable}\n selectAriaLabel={format(t['table.selectRow'], { label })}\n columns={columns}\n onToggle={toggleRow}\n href={href}\n onActivate={onActivate}\n actionLabel={format(t['table.rowAction'], { label })}\n renderRow={renderRow}\n />\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n // No toolbar → byte-identical legacy output. With a toolbar, the\n // DataTable owns the single rounded+clipped+bordered surface; the inner\n // .table-wrap defers its border/radius (CSS) and stays the scroll/sticky\n // context, so existing behaviour is untouched.\n return toolbar == null ? wrap : (\n <div className=\"table-surface\">\n <div className=\"table-surface__bar\">{toolbar}</div>\n {wrap}\n </div>\n );\n}\n\n// ---------- Accordion ----------------------------------------------------\ninterface AccordionContextValue {\n open: Set<string>;\n toggle: (id: string) => void;\n multiple: boolean;\n}\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps {\n multiple?: boolean;\n defaultOpen?: string[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ multiple = false, defaultOpen = [], children, className }: AccordionProps) {\n const [open, setOpen] = React.useState<Set<string>>(new Set(defaultOpen));\n const toggle = (id: string) => {\n setOpen((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else {\n if (!multiple) next.clear();\n next.add(id);\n }\n return next;\n });\n };\n return (\n <AccordionContext.Provider value={{ open, toggle, multiple }}>\n <div className={cx('accordion', className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport function AccordionItem({ id, title, children }: { id: string; title: React.ReactNode; children: React.ReactNode }) {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error('<AccordionItem> must be used inside <Accordion>');\n const isOpen = ctx.open.has(id);\n const reactId = React.useId();\n const triggerId = `accordion-trigger-${reactId}`;\n const panelId = `accordion-panel-${reactId}`;\n return (\n <div className={cx('accordion__item', isOpen && 'is-open')}>\n <button\n type=\"button\"\n id={triggerId}\n className=\"accordion__trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => ctx.toggle(id)}\n >\n <span>{title}</span>\n <span className=\"accordion__chev\" aria-hidden=\"true\"><ChevronDown size={14} /></span>\n </button>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion__panel\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n// ---------- Breadcrumbs --------------------------------------------------\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n}\n\nexport function Breadcrumbs({ items, className }: { items: BreadcrumbItem[]; className?: string }) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cx('breadcrumbs', className)}>\n <ol>\n {items.map((it, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i}>\n {it.href && !last ? <a href={it.href}>{it.label}</a> : <span aria-current={last ? 'page' : undefined}>{it.label}</span>}\n {!last && <span aria-hidden=\"true\" className=\"breadcrumbs__sep\">/</span>}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n// ---------- TablePagination ---------------------------------------------\n// Convenience wrapper that pairs a page-size selector with a Pagination\n// row. Use it under a DataTable when the table is paginated externally.\nimport { Pagination } from './Inputs';\n\nexport interface TablePaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n /** If set, renders a page-size selector. Omit for fixed-size pagination. */\n onPageSizeChange?: (size: number) => void;\n /** Options shown in the page-size selector. Default `[10, 25, 50, 100]`. */\n pageSizeOptions?: readonly number[];\n className?: string;\n}\n\nexport function TablePagination({\n page, pageSize, total, onPageChange,\n onPageSizeChange, pageSizeOptions = [10, 25, 50, 100],\n className,\n}: TablePaginationProps) {\n const t = useLocale();\n const selectId = React.useId();\n return (\n <div className={cx('table-pagination', className)}>\n {onPageSizeChange && (\n <label className=\"table-pagination__size\" htmlFor={selectId}>\n <span>{t['pagination.rowsPerPage']}</span>\n <select\n id={selectId}\n className=\"select\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((n) => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n </label>\n )}\n <Pagination\n page={page}\n pageSize={pageSize}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n}\n\n// ---------- TableToolbar -------------------------------------------------\n// Barra superior que se compone arriba (o dentro de un wrapper) de un DataTable.\n// Cualquier hijo con className \"grow\" se expande para empujar las acciones al lado.\nexport const TableToolbar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function TableToolbar({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('table-toolbar', className)} {...rest} />;\n }\n);\n"]}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
5
4
  var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
6
5
  var chunk7I5LFBQR_js = require('./chunk-7I5LFBQR.js');
6
+ var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
7
7
  var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
8
8
  var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
9
9
  var React = require('react');
@@ -195,5 +195,5 @@ function NavigationMenu({ items, className, ariaLabel = "Navegaci\xF3n principal
195
195
  }
196
196
 
197
197
  exports.NavigationMenu = NavigationMenu;
198
- //# sourceMappingURL=chunk-CHIU6AMF.js.map
199
- //# sourceMappingURL=chunk-CHIU6AMF.js.map
198
+ //# sourceMappingURL=chunk-U3I4IMJI.js.map
199
+ //# sourceMappingURL=chunk-U3I4IMJI.js.map