@banzamel/mineralui 1.7.1 → 1.8.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 (408) hide show
  1. package/dist/{MAvatar-BHASnoyu.js → MAvatar-BcayQCnp.js} +2 -2
  2. package/dist/{MAvatar-BHASnoyu.js.map → MAvatar-BcayQCnp.js.map} +1 -1
  3. package/dist/{MAvatar-CV3xJOmx.cjs → MAvatar-BgevCYi3.cjs} +2 -2
  4. package/dist/{MAvatar-CV3xJOmx.cjs.map → MAvatar-BgevCYi3.cjs.map} +1 -1
  5. package/dist/MButton-8UCydOik.cjs +2 -0
  6. package/dist/MButton-8UCydOik.cjs.map +1 -0
  7. package/dist/{MButton-y9qXhhGt.js → MButton-DZLLrtQb.js} +38 -36
  8. package/dist/MButton-DZLLrtQb.js.map +1 -0
  9. package/dist/{MCheckbox-B-nT2OBE.js → MCheckbox-B7SpcD4H.js} +1 -1
  10. package/dist/{MCheckbox-B-nT2OBE.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
  11. package/dist/{MCheckbox-CdDWGVp3.cjs → MCheckbox-Dn3p_9-1.cjs} +2 -2
  12. package/dist/{MCheckbox-CdDWGVp3.cjs.map → MCheckbox-Dn3p_9-1.cjs.map} +1 -1
  13. package/dist/{MCookieBootstrap-3-wyz3Dk.cjs → MCookieBootstrap-BUqtJO3m.cjs} +1 -1
  14. package/dist/{MCookieBootstrap-3-wyz3Dk.cjs.map → MCookieBootstrap-BUqtJO3m.cjs.map} +1 -1
  15. package/dist/{MCookieBootstrap-CGvYxIK8.js → MCookieBootstrap-Btt49Iuq.js} +1 -1
  16. package/dist/{MCookieBootstrap-CGvYxIK8.js.map → MCookieBootstrap-Btt49Iuq.js.map} +1 -1
  17. package/dist/{MDataTable-C3v15no3.cjs → MDataTable-95_Mb6jE.cjs} +2 -2
  18. package/dist/MDataTable-95_Mb6jE.cjs.map +1 -0
  19. package/dist/{MDataTable-C_XiTGTF.js → MDataTable-DxDS5auV.js} +5 -5
  20. package/dist/MDataTable-DxDS5auV.js.map +1 -0
  21. package/dist/{MDrawer-W2WQs1sM.js → MDrawer-CXNHYwPO.js} +2 -2
  22. package/dist/{MDrawer-W2WQs1sM.js.map → MDrawer-CXNHYwPO.js.map} +1 -1
  23. package/dist/{MDrawer-BtA_Xgj0.cjs → MDrawer-DzqtHVeA.cjs} +2 -2
  24. package/dist/{MDrawer-BtA_Xgj0.cjs.map → MDrawer-DzqtHVeA.cjs.map} +1 -1
  25. package/dist/{MDropdownMenu-BWgf92rJ.js → MDropdownMenu-CeiC1tz3.js} +1 -1
  26. package/dist/{MDropdownMenu-BWgf92rJ.js.map → MDropdownMenu-CeiC1tz3.js.map} +1 -1
  27. package/dist/{MDropdownMenu-mGE19gCi.cjs → MDropdownMenu-c9U3sEcl.cjs} +2 -2
  28. package/dist/{MDropdownMenu-mGE19gCi.cjs.map → MDropdownMenu-c9U3sEcl.cjs.map} +1 -1
  29. package/dist/{MGalleryIllustration-D2agVuZM.cjs → MGalleryIllustration-Dglx_Ckc.cjs} +2 -2
  30. package/dist/{MGalleryIllustration-D2agVuZM.cjs.map → MGalleryIllustration-Dglx_Ckc.cjs.map} +1 -1
  31. package/dist/MGrid-C4kPZDSa.cjs +2 -0
  32. package/dist/MGrid-C4kPZDSa.cjs.map +1 -0
  33. package/dist/MGrid-DR0fHItF.js +182 -0
  34. package/dist/MGrid-DR0fHItF.js.map +1 -0
  35. package/dist/{MHeading-BQCe_JhE.cjs → MHeading-CKe5lcM_.cjs} +2 -2
  36. package/dist/{MHeading-BQCe_JhE.cjs.map → MHeading-CKe5lcM_.cjs.map} +1 -1
  37. package/dist/{MI18nProvider-CqAwaswx.cjs → MI18nProvider-DOh5xexz.cjs} +2 -2
  38. package/dist/{MI18nProvider-CqAwaswx.cjs.map → MI18nProvider-DOh5xexz.cjs.map} +1 -1
  39. package/dist/MImage-BZ6SrSao.cjs +2 -0
  40. package/dist/MImage-BZ6SrSao.cjs.map +1 -0
  41. package/dist/{MImage-I0LPhcqF.js → MImage-Btx_7g2Z.js} +5 -6
  42. package/dist/MImage-Btx_7g2Z.js.map +1 -0
  43. package/dist/{MInput-CNSvoRiu.js → MInput-7i0Dy1t4.js} +2 -2
  44. package/dist/{MInput-CNSvoRiu.js.map → MInput-7i0Dy1t4.js.map} +1 -1
  45. package/dist/{MInput-5-alcVsu.cjs → MInput-D_zaoWwX.cjs} +2 -2
  46. package/dist/{MInput-5-alcVsu.cjs.map → MInput-D_zaoWwX.cjs.map} +1 -1
  47. package/dist/MInputExpDate-DWWwjMYK.cjs +2 -0
  48. package/dist/MInputExpDate-DWWwjMYK.cjs.map +1 -0
  49. package/dist/{MInputCVC-BgougfgN.js → MInputExpDate-DhO5zN7L.js} +97 -97
  50. package/dist/MInputExpDate-DhO5zN7L.js.map +1 -0
  51. package/dist/{MInputSearch-BwR-BPh2.js → MInputSearch-CmzHPnmC.js} +2 -2
  52. package/dist/{MInputSearch-BwR-BPh2.js.map → MInputSearch-CmzHPnmC.js.map} +1 -1
  53. package/dist/{MInputSearch-X9yNPuTf.cjs → MInputSearch-DpHSVpmL.cjs} +2 -2
  54. package/dist/{MInputSearch-X9yNPuTf.cjs.map → MInputSearch-DpHSVpmL.cjs.map} +1 -1
  55. package/dist/MKbd-DWTS3iS5.cjs +2 -0
  56. package/dist/MKbd-DWTS3iS5.cjs.map +1 -0
  57. package/dist/MKbd-v6-tJ9sP.js +14 -0
  58. package/dist/MKbd-v6-tJ9sP.js.map +1 -0
  59. package/dist/{MLink-BakLkpKp.cjs → MLink-B3ImjkJV.cjs} +2 -2
  60. package/dist/{MLink-BakLkpKp.cjs.map → MLink-B3ImjkJV.cjs.map} +1 -1
  61. package/dist/{MModal-BYuPCSLG.cjs → MModal-CP0e31pv.cjs} +2 -2
  62. package/dist/{MModal-BYuPCSLG.cjs.map → MModal-CP0e31pv.cjs.map} +1 -1
  63. package/dist/{MModal-K73juXhN.js → MModal-DGmeQlWo.js} +2 -2
  64. package/dist/{MModal-K73juXhN.js.map → MModal-DGmeQlWo.js.map} +1 -1
  65. package/dist/{MPagination-B8BcGks_.cjs → MPagination-CS62B9kZ.cjs} +2 -2
  66. package/dist/{MPagination-B8BcGks_.cjs.map → MPagination-CS62B9kZ.cjs.map} +1 -1
  67. package/dist/{MPagination-BdBpF3Px.js → MPagination-Dr110are.js} +2 -2
  68. package/dist/{MPagination-BdBpF3Px.js.map → MPagination-Dr110are.js.map} +1 -1
  69. package/dist/{MPopover-DfEiRuM9.cjs → MPopover-CxxaY9kr.cjs} +2 -2
  70. package/dist/{MPopover-DfEiRuM9.cjs.map → MPopover-CxxaY9kr.cjs.map} +1 -1
  71. package/dist/{MPortal-CuBXhhl_.cjs → MPortal-BIxPtFYd.cjs} +2 -2
  72. package/dist/{MPortal-CuBXhhl_.cjs.map → MPortal-BIxPtFYd.cjs.map} +1 -1
  73. package/dist/{MQrCode-CCtTkkv9.js → MQrCode-6ANDcExA.js} +150 -100
  74. package/dist/MQrCode-6ANDcExA.js.map +1 -0
  75. package/dist/MQrCode-B0-Np-N3.cjs +2 -0
  76. package/dist/MQrCode-B0-Np-N3.cjs.map +1 -0
  77. package/dist/MSimpleGrid-Bojj4xKH.js +18 -0
  78. package/dist/MSimpleGrid-Bojj4xKH.js.map +1 -0
  79. package/dist/MSimpleGrid-CyLf-9R2.cjs +2 -0
  80. package/dist/MSimpleGrid-CyLf-9R2.cjs.map +1 -0
  81. package/dist/MSkeleton-BdwhPx-k.cjs +2 -0
  82. package/dist/MSkeleton-BdwhPx-k.cjs.map +1 -0
  83. package/dist/MSkeleton-BvXgnYs_.js +136 -0
  84. package/dist/MSkeleton-BvXgnYs_.js.map +1 -0
  85. package/dist/{MSlider-5141rKeH.js → MSlider-CqrusKJQ.js} +1 -1
  86. package/dist/{MSlider-5141rKeH.js.map → MSlider-CqrusKJQ.js.map} +1 -1
  87. package/dist/{MSlider-fhvfj0ft.cjs → MSlider-qCGmD4UA.cjs} +2 -2
  88. package/dist/{MSlider-fhvfj0ft.cjs.map → MSlider-qCGmD4UA.cjs.map} +1 -1
  89. package/dist/MStack-ByFYGSsy.cjs +2 -0
  90. package/dist/MStack-ByFYGSsy.cjs.map +1 -0
  91. package/dist/MStack-DFIc3S4_.js +70 -0
  92. package/dist/MStack-DFIc3S4_.js.map +1 -0
  93. package/dist/{MSubText-C1unzaCF.cjs → MSubText-1ilKSz8e.cjs} +2 -2
  94. package/dist/{MSubText-C1unzaCF.cjs.map → MSubText-1ilKSz8e.cjs.map} +1 -1
  95. package/dist/MSurface-CmVIQC1A.js +43 -0
  96. package/dist/MSurface-CmVIQC1A.js.map +1 -0
  97. package/dist/MSurface-CpAuwpHv.cjs +2 -0
  98. package/dist/MSurface-CpAuwpHv.cjs.map +1 -0
  99. package/dist/{MTabs-Dg31d-_D.js → MTabs-BQZ--mMq.js} +1 -1
  100. package/dist/{MTabs-Dg31d-_D.js.map → MTabs-BQZ--mMq.js.map} +1 -1
  101. package/dist/{MTabs-DuLqttVp.cjs → MTabs-DeUn6bIp.cjs} +2 -2
  102. package/dist/{MTabs-DuLqttVp.cjs.map → MTabs-DeUn6bIp.cjs.map} +1 -1
  103. package/dist/{MTag-CH5nMbm7.js → MTag-C4SUJly2.js} +2 -2
  104. package/dist/{MTag-CH5nMbm7.js.map → MTag-C4SUJly2.js.map} +1 -1
  105. package/dist/{MTag-CeLhZhqT.cjs → MTag-DwQ-j1sV.cjs} +2 -2
  106. package/dist/{MTag-CeLhZhqT.cjs.map → MTag-DwQ-j1sV.cjs.map} +1 -1
  107. package/dist/{MText-BbEkc0Ik.cjs → MText-D0fI_D_Q.cjs} +2 -2
  108. package/dist/{MText-BbEkc0Ik.cjs.map → MText-D0fI_D_Q.cjs.map} +1 -1
  109. package/dist/{MTimeAgo-Dd0JQRGj.cjs → MTimeAgo-DI3DF7bD.cjs} +2 -2
  110. package/dist/{MTimeAgo-Dd0JQRGj.cjs.map → MTimeAgo-DI3DF7bD.cjs.map} +1 -1
  111. package/dist/{MTimeAgo-C4p80NvI.js → MTimeAgo-Db8gOade.js} +2 -2
  112. package/dist/{MTimeAgo-C4p80NvI.js.map → MTimeAgo-Db8gOade.js.map} +1 -1
  113. package/dist/{MToggle-Dt1Ctr5e.js → MToggle-B6emKoKq.js} +1 -1
  114. package/dist/{MToggle-Dt1Ctr5e.js.map → MToggle-B6emKoKq.js.map} +1 -1
  115. package/dist/{MToggle-BZSwJw_z.cjs → MToggle-BVJm5Bdk.cjs} +2 -2
  116. package/dist/{MToggle-BZSwJw_z.cjs.map → MToggle-BVJm5Bdk.cjs.map} +1 -1
  117. package/dist/{MTooltip-BE0GcseJ.cjs → MTooltip-Dq2vYf3G.cjs} +2 -2
  118. package/dist/{MTooltip-BE0GcseJ.cjs.map → MTooltip-Dq2vYf3G.cjs.map} +1 -1
  119. package/dist/{MTooltip-C43aUKMP.js → MTooltip-jSf4VBtB.js} +1 -1
  120. package/dist/{MTooltip-C43aUKMP.js.map → MTooltip-jSf4VBtB.js.map} +1 -1
  121. package/dist/MTreeView-AqH8XMPz.js +516 -0
  122. package/dist/MTreeView-AqH8XMPz.js.map +1 -0
  123. package/dist/MTreeView-Dp9qbqQh.cjs +2 -0
  124. package/dist/MTreeView-Dp9qbqQh.cjs.map +1 -0
  125. package/dist/{arduino-C1gw-z1N.cjs → arduino-Bm509TuR.cjs} +1 -1
  126. package/dist/{arduino-C1gw-z1N.cjs.map → arduino-Bm509TuR.cjs.map} +1 -1
  127. package/dist/{arduino-5iMB2x4D.js → arduino-C5s1z3P1.js} +1 -1
  128. package/dist/{arduino-5iMB2x4D.js.map → arduino-C5s1z3P1.js.map} +1 -1
  129. package/dist/{bash-wzZkpJC-.cjs → bash-CyBbinAU.cjs} +1 -1
  130. package/dist/{bash-wzZkpJC-.cjs.map → bash-CyBbinAU.cjs.map} +1 -1
  131. package/dist/{bash-CNKpaaFe.js → bash-RIFbRcCe.js} +1 -1
  132. package/dist/{bash-CNKpaaFe.js.map → bash-RIFbRcCe.js.map} +1 -1
  133. package/dist/{c-BKjXPJPn.js → c-DAywn1DE.js} +1 -1
  134. package/dist/{c-BKjXPJPn.js.map → c-DAywn1DE.js.map} +1 -1
  135. package/dist/{c-BSPjDa0P.cjs → c-DGOxo0dj.cjs} +1 -1
  136. package/dist/{c-BSPjDa0P.cjs.map → c-DGOxo0dj.cjs.map} +1 -1
  137. package/dist/cards-B9g6Lf1n.cjs +2 -0
  138. package/dist/cards-B9g6Lf1n.cjs.map +1 -0
  139. package/dist/cards-D7oHIHmU.js +1535 -0
  140. package/dist/cards-D7oHIHmU.js.map +1 -0
  141. package/dist/cards.cjs +1 -1
  142. package/dist/cards.js +3 -3
  143. package/dist/components/cards/MCard/MCard.d.ts +1 -1
  144. package/dist/components/cards/MCard/MCard.types.d.ts +2 -5
  145. package/dist/components/cards/MCardActionArea/MCardActionArea.d.ts +2 -0
  146. package/dist/components/cards/MCardActionArea/MCardActionArea.types.d.ts +7 -0
  147. package/dist/components/cards/MCardActionArea/index.d.ts +2 -0
  148. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +2 -0
  149. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.types.d.ts +41 -0
  150. package/dist/components/cards/MCardDaySchedule/index.d.ts +2 -0
  151. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +2 -0
  152. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.types.d.ts +31 -0
  153. package/dist/components/cards/MCardDocumentTree/index.d.ts +2 -0
  154. package/dist/components/cards/MCardFinance/MCardFinance.d.ts +1 -1
  155. package/dist/components/cards/MCardFinance/MCardFinance.types.d.ts +2 -1
  156. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  157. package/dist/components/cards/MCardGrid/MCardGrid.types.d.ts +2 -0
  158. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  159. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +2 -1
  160. package/dist/components/cards/MCardTile/MCardTile.d.ts +1 -1
  161. package/dist/components/cards/MCardTile/MCardTile.types.d.ts +2 -4
  162. package/dist/components/cards/MCardWidget/MCardWidget.d.ts +1 -1
  163. package/dist/components/cards/MCardWidget/MCardWidget.types.d.ts +2 -1
  164. package/dist/components/cards/MStatCard/MStatCard.d.ts +3 -0
  165. package/dist/components/cards/MStatCard/MStatCard.types.d.ts +16 -0
  166. package/dist/components/cards/MStatCard/index.d.ts +2 -0
  167. package/dist/components/cards/index.d.ts +10 -0
  168. package/dist/components/cards/shared/MCardAction.types.d.ts +12 -0
  169. package/dist/components/cards/shared/MCardAction.utils.d.ts +16 -0
  170. package/dist/components/cards/shared/MCardColor.utils.d.ts +3 -0
  171. package/dist/components/cards/shared/index.d.ts +3 -0
  172. package/dist/components/controls/MButton/MButton.types.d.ts +2 -0
  173. package/dist/components/controls/MQuickActions/MQuickActions.d.ts +2 -0
  174. package/dist/components/controls/MQuickActions/MQuickActions.types.d.ts +33 -0
  175. package/dist/components/controls/MQuickActions/index.d.ts +2 -0
  176. package/dist/components/controls/index.d.ts +2 -0
  177. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  178. package/dist/components/data/MTreeView/MTreeView.types.d.ts +2 -0
  179. package/dist/components/display/MDetailList/MDetailList.d.ts +2 -0
  180. package/dist/components/display/MDetailList/MDetailList.types.d.ts +20 -0
  181. package/dist/components/display/MDetailList/index.d.ts +2 -0
  182. package/dist/components/display/index.d.ts +2 -0
  183. package/dist/components/layout/MAppMenu/MAppMenu.d.ts +2 -0
  184. package/dist/components/layout/MAppMenu/MAppMenu.types.d.ts +63 -0
  185. package/dist/components/layout/MAppMenu/index.d.ts +2 -0
  186. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  187. package/dist/components/layout/MInline/MInline.types.d.ts +1 -1
  188. package/dist/components/layout/MSidebar/MSidebar.d.ts +1 -1
  189. package/dist/components/layout/MSidebar/MSidebar.types.d.ts +7 -0
  190. package/dist/components/layout/MStatGrid/MStatGrid.d.ts +2 -0
  191. package/dist/components/layout/MStatGrid/MStatGrid.types.d.ts +9 -0
  192. package/dist/components/layout/MStatGrid/index.d.ts +2 -0
  193. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  194. package/dist/components/layout/MSurface/MSurface.types.d.ts +6 -1
  195. package/dist/components/layout/index.d.ts +6 -0
  196. package/dist/components/media/MGallery/MGallery.types.d.ts +5 -0
  197. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +2 -0
  198. package/dist/components/overlays/MCommandPalette/MCommandPalette.types.d.ts +35 -0
  199. package/dist/components/overlays/MCommandPalette/index.d.ts +2 -0
  200. package/dist/components/overlays/index.d.ts +2 -0
  201. package/dist/components/typography/MHeading/MHeading.d.ts +3 -3
  202. package/dist/{controls-DCtMOoQe.js → controls-BczTk73I.js} +141 -100
  203. package/dist/controls-BczTk73I.js.map +1 -0
  204. package/dist/controls-BfV0vxeJ.cjs +2 -0
  205. package/dist/controls-BfV0vxeJ.cjs.map +1 -0
  206. package/dist/controls.cjs +1 -1
  207. package/dist/controls.js +6 -6
  208. package/dist/cookie-consent-bootstrap.cjs +1 -1
  209. package/dist/cookie-consent-bootstrap.js +1 -1
  210. package/dist/{core-B8VC-Umz.js → core-BUYr52VU.js} +1 -1
  211. package/dist/{core-B8VC-Umz.js.map → core-BUYr52VU.js.map} +1 -1
  212. package/dist/{core-w629c4ND.cjs → core-DAox0BHy.cjs} +1 -1
  213. package/dist/{core-w629c4ND.cjs.map → core-DAox0BHy.cjs.map} +1 -1
  214. package/dist/{cpp-LIcuHkFj.cjs → cpp-D-FtdQo9.cjs} +1 -1
  215. package/dist/{cpp-LIcuHkFj.cjs.map → cpp-D-FtdQo9.cjs.map} +1 -1
  216. package/dist/{cpp-bNWmO1Au.js → cpp-Y9cHXDal.js} +1 -1
  217. package/dist/{cpp-bNWmO1Au.js.map → cpp-Y9cHXDal.js.map} +1 -1
  218. package/dist/{css-h_5aJA6y.js → css-C__ffGj6.js} +1 -1
  219. package/dist/{css-h_5aJA6y.js.map → css-C__ffGj6.js.map} +1 -1
  220. package/dist/{css-D6fGBtGV.cjs → css-DCYZ-Rs6.cjs} +1 -1
  221. package/dist/{css-D6fGBtGV.cjs.map → css-DCYZ-Rs6.cjs.map} +1 -1
  222. package/dist/data-7kG1MC1Z.cjs +2 -0
  223. package/dist/data-7kG1MC1Z.cjs.map +1 -0
  224. package/dist/{data-DT1ncDx_.js → data-z3e8XTSt.js} +762 -1067
  225. package/dist/data-z3e8XTSt.js.map +1 -0
  226. package/dist/data.cjs +1 -1
  227. package/dist/data.js +4 -4
  228. package/dist/display-Cw3-bTsm.cjs +3 -0
  229. package/dist/{display-BxVd6MMK.cjs.map → display-Cw3-bTsm.cjs.map} +1 -1
  230. package/dist/{display-CtVfcztO.js → display-DyC7084n.js} +34 -36
  231. package/dist/{display-CtVfcztO.js.map → display-DyC7084n.js.map} +1 -1
  232. package/dist/display.cjs +1 -1
  233. package/dist/display.js +4 -4
  234. package/dist/{dropdowns-BgpcQ9Hq.cjs → dropdowns-6eO0b6eI.cjs} +2 -2
  235. package/dist/{dropdowns-BgpcQ9Hq.cjs.map → dropdowns-6eO0b6eI.cjs.map} +1 -1
  236. package/dist/{dropdowns-C58ur0qF.js → dropdowns-zXgrjNXZ.js} +7 -7
  237. package/dist/{dropdowns-C58ur0qF.js.map → dropdowns-zXgrjNXZ.js.map} +1 -1
  238. package/dist/dropdowns.cjs +1 -1
  239. package/dist/dropdowns.js +1 -1
  240. package/dist/feedback-BvRmoSzV.cjs +2 -0
  241. package/dist/{feedback-BJiO6j28.cjs.map → feedback-BvRmoSzV.cjs.map} +1 -1
  242. package/dist/{feedback-q3oO-E_X.js → feedback-DfBjzJAw.js} +299 -300
  243. package/dist/{feedback-q3oO-E_X.js.map → feedback-DfBjzJAw.js.map} +1 -1
  244. package/dist/feedback.cjs +1 -1
  245. package/dist/feedback.js +6 -7
  246. package/dist/{form-DIOkVhd9.js → form-BiPQ8SRK.js} +1 -1
  247. package/dist/{form-DIOkVhd9.js.map → form-BiPQ8SRK.js.map} +1 -1
  248. package/dist/{form-D7OKrCBM.cjs → form-DlXWN2ul.cjs} +2 -2
  249. package/dist/{form-D7OKrCBM.cjs.map → form-DlXWN2ul.cjs.map} +1 -1
  250. package/dist/form.cjs +1 -1
  251. package/dist/form.js +1 -1
  252. package/dist/{frameworkTexts-CJHzJHsg.cjs → frameworkTexts-BLJcGUXz.cjs} +2 -2
  253. package/dist/{frameworkTexts-CJHzJHsg.cjs.map → frameworkTexts-BLJcGUXz.cjs.map} +1 -1
  254. package/dist/{frameworkTexts-Bzd6bn9s.js → frameworkTexts-BTFyhWFD.js} +1 -1
  255. package/dist/{frameworkTexts-Bzd6bn9s.js.map → frameworkTexts-BTFyhWFD.js.map} +1 -1
  256. package/dist/i18n.cjs +1 -1
  257. package/dist/{icons-lUQfZ4Jr.cjs → icons-qCoE70hn.cjs} +2 -2
  258. package/dist/{icons-lUQfZ4Jr.cjs.map → icons-qCoE70hn.cjs.map} +1 -1
  259. package/dist/icons.cjs +1 -1
  260. package/dist/illustrations.cjs +1 -1
  261. package/dist/index.cjs +2 -1
  262. package/dist/index.cjs.map +1 -0
  263. package/dist/index.d.ts +4 -0
  264. package/dist/index.js +90 -56
  265. package/dist/index.js.map +1 -0
  266. package/dist/{inputs-DOO1tKK9.cjs → inputs-C1I1SLZ8.cjs} +2 -2
  267. package/dist/{inputs-DOO1tKK9.cjs.map → inputs-C1I1SLZ8.cjs.map} +1 -1
  268. package/dist/{inputs-Dwjwa_SJ.js → inputs-Dy1WurNK.js} +16 -7
  269. package/dist/{inputs-Dwjwa_SJ.js.map → inputs-Dy1WurNK.js.map} +1 -1
  270. package/dist/inputs.cjs +1 -1
  271. package/dist/inputs.js +5 -5
  272. package/dist/{javascript-BnTECToz.js → javascript-ClV78Svx.js} +1 -1
  273. package/dist/{javascript-BnTECToz.js.map → javascript-ClV78Svx.js.map} +1 -1
  274. package/dist/{javascript-Oy5hkezl.cjs → javascript-_Sr9cnsG.cjs} +1 -1
  275. package/dist/{javascript-Oy5hkezl.cjs.map → javascript-_Sr9cnsG.cjs.map} +1 -1
  276. package/dist/{json-BP8eqPWc.cjs → json-BFetU4Pi.cjs} +1 -1
  277. package/dist/{json-BP8eqPWc.cjs.map → json-BFetU4Pi.cjs.map} +1 -1
  278. package/dist/{json-Ci-bDynf.js → json-Dz6EkGZR.js} +1 -1
  279. package/dist/{json-Ci-bDynf.js.map → json-Dz6EkGZR.js.map} +1 -1
  280. package/dist/layout-D1-mF4xn.js +772 -0
  281. package/dist/layout-D1-mF4xn.js.map +1 -0
  282. package/dist/layout-Op6GWQ8w.cjs +2 -0
  283. package/dist/layout-Op6GWQ8w.cjs.map +1 -0
  284. package/dist/layout.cjs +1 -1
  285. package/dist/layout.js +8 -7
  286. package/dist/licensing-DmF0ObpG.cjs +2 -0
  287. package/dist/licensing-DmF0ObpG.cjs.map +1 -0
  288. package/dist/{licensing-CwzqhHH9.js → licensing-ZFCUU4Z8.js} +5 -1
  289. package/dist/licensing-ZFCUU4Z8.js.map +1 -0
  290. package/dist/{locale-Ba2yreFR.cjs → locale-Bz2JXxDZ.cjs} +2 -2
  291. package/dist/{locale-Ba2yreFR.cjs.map → locale-Bz2JXxDZ.cjs.map} +1 -1
  292. package/dist/{locale-JX_gX03k.js → locale-CS1-IY_I.js} +1 -1
  293. package/dist/{locale-JX_gX03k.js.map → locale-CS1-IY_I.js.map} +1 -1
  294. package/dist/media-DbToUupt.cjs +2 -0
  295. package/dist/media-DbToUupt.cjs.map +1 -0
  296. package/dist/{media-DdshnqJ1.js → media-DdChr0Cw.js} +7 -7
  297. package/dist/media-DdChr0Cw.js.map +1 -0
  298. package/dist/media.cjs +1 -1
  299. package/dist/media.js +3 -3
  300. package/dist/overlays-B0khU6Wb.js +392 -0
  301. package/dist/overlays-B0khU6Wb.js.map +1 -0
  302. package/dist/overlays-VAh5PqAe.cjs +2 -0
  303. package/dist/overlays-VAh5PqAe.cjs.map +1 -0
  304. package/dist/overlays.cjs +1 -1
  305. package/dist/overlays.js +6 -6
  306. package/dist/{php-DJ5j7KZU.js → php-5Erp5xxI.js} +1 -1
  307. package/dist/{php-DJ5j7KZU.js.map → php-5Erp5xxI.js.map} +1 -1
  308. package/dist/{php-Cwjc-ZYq.cjs → php-jOdR0XS8.cjs} +1 -1
  309. package/dist/{php-Cwjc-ZYq.cjs.map → php-jOdR0XS8.cjs.map} +1 -1
  310. package/dist/primitives.cjs +1 -1
  311. package/dist/style-runtime.cjs +1 -1
  312. package/dist/style-runtime.js +1 -1
  313. package/dist/styles.css +1 -1
  314. package/dist/{theme-Bb_NAEiZ.cjs → theme-BaroO-OB.cjs} +2 -2
  315. package/dist/{theme-Bb_NAEiZ.cjs.map → theme-BaroO-OB.cjs.map} +1 -1
  316. package/dist/theme.cjs +1 -1
  317. package/dist/{typescript-QKlfKtex.cjs → typescript-C65sNL5w.cjs} +1 -1
  318. package/dist/{typescript-QKlfKtex.cjs.map → typescript-C65sNL5w.cjs.map} +1 -1
  319. package/dist/{typescript-DUexJ4gh.js → typescript-wdQKWfxO.js} +1 -1
  320. package/dist/{typescript-DUexJ4gh.js.map → typescript-wdQKWfxO.js.map} +1 -1
  321. package/dist/{typography-BSBsn0f8.js → typography-CldwDFse.js} +2 -11
  322. package/dist/typography-CldwDFse.js.map +1 -0
  323. package/dist/typography-D7COsP1O.cjs +2 -0
  324. package/dist/typography-D7COsP1O.cjs.map +1 -0
  325. package/dist/typography.cjs +1 -1
  326. package/dist/typography.js +4 -3
  327. package/dist/{useGhostText-mibV4s1-.cjs → useGhostText-Dg4P606B.cjs} +2 -2
  328. package/dist/{useGhostText-mibV4s1-.cjs.map → useGhostText-Dg4P606B.cjs.map} +1 -1
  329. package/dist/{useInteractionEffect-CtXlbjhC.cjs → useInteractionEffect-Bo8285cg.cjs} +2 -2
  330. package/dist/{useInteractionEffect-CtXlbjhC.cjs.map → useInteractionEffect-Bo8285cg.cjs.map} +1 -1
  331. package/dist/{useKeyboardNav-CCUoRMgm.cjs → useKeyboardNav-CyeQtqF8.cjs} +2 -2
  332. package/dist/{useKeyboardNav-CCUoRMgm.cjs.map → useKeyboardNav-CyeQtqF8.cjs.map} +1 -1
  333. package/dist/utils/commandPaletteFromAppMenu.d.ts +42 -0
  334. package/dist/utils/licensing.d.ts +4 -0
  335. package/dist/utils.cjs +1 -1
  336. package/dist/utils.js +1 -1
  337. package/dist/{xml-DEtyywwU.cjs → xml-B2okahIr.cjs} +1 -1
  338. package/dist/{xml-DEtyywwU.cjs.map → xml-B2okahIr.cjs.map} +1 -1
  339. package/dist/{xml-DlZghN7m.js → xml-a3b-XevT.js} +1 -1
  340. package/dist/{xml-DlZghN7m.js.map → xml-a3b-XevT.js.map} +1 -1
  341. package/package.json +1 -1
  342. package/dist/MBadge-BoxsfX_h.cjs +0 -2
  343. package/dist/MBadge-BoxsfX_h.cjs.map +0 -1
  344. package/dist/MBadge-_BggwkrM.js +0 -19
  345. package/dist/MBadge-_BggwkrM.js.map +0 -1
  346. package/dist/MButton-B9k45kH-.cjs +0 -2
  347. package/dist/MButton-B9k45kH-.cjs.map +0 -1
  348. package/dist/MButton-y9qXhhGt.js.map +0 -1
  349. package/dist/MDataTable-C3v15no3.cjs.map +0 -1
  350. package/dist/MDataTable-C_XiTGTF.js.map +0 -1
  351. package/dist/MImage-I0LPhcqF.js.map +0 -1
  352. package/dist/MImage-hnSqIPaC.cjs +0 -2
  353. package/dist/MImage-hnSqIPaC.cjs.map +0 -1
  354. package/dist/MInline-CoMhfX5V.js +0 -39
  355. package/dist/MInline-CoMhfX5V.js.map +0 -1
  356. package/dist/MInline-FEXWkr71.cjs +0 -2
  357. package/dist/MInline-FEXWkr71.cjs.map +0 -1
  358. package/dist/MInputCVC-BgougfgN.js.map +0 -1
  359. package/dist/MInputCVC-CRWp1fYi.cjs +0 -2
  360. package/dist/MInputCVC-CRWp1fYi.cjs.map +0 -1
  361. package/dist/MQrCode-BXXTLtBP.cjs +0 -2
  362. package/dist/MQrCode-BXXTLtBP.cjs.map +0 -1
  363. package/dist/MQrCode-CCtTkkv9.js.map +0 -1
  364. package/dist/MSkeleton-BP7H_lsX.js +0 -98
  365. package/dist/MSkeleton-BP7H_lsX.js.map +0 -1
  366. package/dist/MSkeleton-QO2sI-Ni.cjs +0 -2
  367. package/dist/MSkeleton-QO2sI-Ni.cjs.map +0 -1
  368. package/dist/MSparkline-CcM1n7Kh.cjs +0 -2
  369. package/dist/MSparkline-CcM1n7Kh.cjs.map +0 -1
  370. package/dist/MSparkline-voNWOLNz.js +0 -207
  371. package/dist/MSparkline-voNWOLNz.js.map +0 -1
  372. package/dist/MStack-CSaEbepM.js +0 -39
  373. package/dist/MStack-CSaEbepM.js.map +0 -1
  374. package/dist/MStack-Dy8Zl6FW.cjs +0 -2
  375. package/dist/MStack-Dy8Zl6FW.cjs.map +0 -1
  376. package/dist/MSurface-f_3vN0sd.js +0 -39
  377. package/dist/MSurface-f_3vN0sd.js.map +0 -1
  378. package/dist/MSurface-wVqTsi1m.cjs +0 -2
  379. package/dist/MSurface-wVqTsi1m.cjs.map +0 -1
  380. package/dist/cards-BYX8bM2l.js +0 -1163
  381. package/dist/cards-BYX8bM2l.js.map +0 -1
  382. package/dist/cards-lCx9oEVk.cjs +0 -2
  383. package/dist/cards-lCx9oEVk.cjs.map +0 -1
  384. package/dist/controls-CZCxbJgq.cjs +0 -2
  385. package/dist/controls-CZCxbJgq.cjs.map +0 -1
  386. package/dist/controls-DCtMOoQe.js.map +0 -1
  387. package/dist/data-CcS-eYye.cjs +0 -2
  388. package/dist/data-CcS-eYye.cjs.map +0 -1
  389. package/dist/data-DT1ncDx_.js.map +0 -1
  390. package/dist/display-BxVd6MMK.cjs +0 -3
  391. package/dist/feedback-BJiO6j28.cjs +0 -2
  392. package/dist/layout-B3S9bvaP.cjs +0 -2
  393. package/dist/layout-B3S9bvaP.cjs.map +0 -1
  394. package/dist/layout-BqDbW0Qn.js +0 -854
  395. package/dist/layout-BqDbW0Qn.js.map +0 -1
  396. package/dist/licensing-CwzqhHH9.js.map +0 -1
  397. package/dist/licensing-Df1Z1rnQ.cjs +0 -2
  398. package/dist/licensing-Df1Z1rnQ.cjs.map +0 -1
  399. package/dist/media-C5atCcc6.cjs +0 -2
  400. package/dist/media-C5atCcc6.cjs.map +0 -1
  401. package/dist/media-DdshnqJ1.js.map +0 -1
  402. package/dist/overlays-BC_6IATL.cjs +0 -2
  403. package/dist/overlays-BC_6IATL.cjs.map +0 -1
  404. package/dist/overlays-zUoV_Jy7.js +0 -186
  405. package/dist/overlays-zUoV_Jy7.js.map +0 -1
  406. package/dist/typography-BSBsn0f8.js.map +0 -1
  407. package/dist/typography-CRKIyR-B.cjs +0 -2
  408. package/dist/typography-CRKIyR-B.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useInteractionEffect-CtXlbjhC.cjs","names":[],"sources":["../src/utils/useInteractionEffect.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type {PointerEvent, ReactElement} from 'react'\n\nexport type MClickEffect = 'none' | 'ripple'\n\nexport interface UseInteractionEffectOptions {\n effect?: MClickEffect\n disabled?: boolean\n centered?: boolean\n color?: string\n}\n\nexport interface UseInteractionEffectResult<T extends HTMLElement> {\n effectClassName?: string\n effectLayer: ReactElement | null\n handlePointerDown: (event: PointerEvent<T>) => void\n triggerEffect: (target: T | null) => void\n}\n\ninterface RippleOptions {\n centered: boolean\n color?: string\n clientX?: number\n clientY?: number\n}\n\n// Render and position a ripple wave inside the dedicated effect layer.\nfunction appendRipple(layer: HTMLSpanElement, host: HTMLElement, options: RippleOptions) {\n const rect = host.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 1.75\n const radius = size / 2\n const wave = document.createElement('span')\n const x =\n options.centered || options.clientX === undefined\n ? rect.width / 2 - radius\n : options.clientX - rect.left - radius\n const y =\n options.centered || options.clientY === undefined\n ? rect.height / 2 - radius\n : options.clientY - rect.top - radius\n\n wave.className = 'click-effect-wave'\n wave.style.width = `${size}px`\n wave.style.height = `${size}px`\n wave.style.left = `${x}px`\n wave.style.top = `${y}px`\n\n if (options.color) {\n wave.style.setProperty('--click-effect-color', options.color)\n }\n\n layer.appendChild(wave)\n wave.addEventListener('animationend', () => wave.remove(), {once: true})\n}\n\n// Attach a lightweight click feedback effect without coupling it to a specific component.\nexport function useInteractionEffect<T extends HTMLElement = HTMLElement>({\n effect = 'ripple',\n disabled = false,\n centered = false,\n color,\n}: UseInteractionEffectOptions = {}): UseInteractionEffectResult<T> {\n const layerRef = useRef<HTMLSpanElement>(null)\n const enabled = effect === 'ripple' && !disabled\n\n // Trigger a centered ripple for keyboard-driven or programmatic actions.\n const triggerEffect = useCallback(\n (target: T | null) => {\n if (!enabled || !target || !layerRef.current) {\n return\n }\n\n appendRipple(layerRef.current, target, {centered: true, color})\n },\n [color, enabled]\n )\n\n // Start the ripple from the actual pointer position when possible.\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !layerRef.current) {\n return\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return\n }\n\n appendRipple(layerRef.current, event.currentTarget, {\n centered,\n color,\n clientX: event.clientX,\n clientY: event.clientY,\n })\n },\n [centered, color, enabled]\n )\n\n return {\n effectClassName: enabled ? 'click-effect-root' : undefined,\n effectLayer: enabled ? <span ref={layerRef} className=\"click-effect-layer\" aria-hidden=\"true\" /> : null,\n handlePointerDown,\n triggerEffect,\n }\n}\n"],"mappings":"qFA2BA,SAAS,EAAa,EAAwB,EAAmB,EAAwB,CACrF,IAAM,EAAO,EAAK,uBAAuB,CACnC,EAAO,KAAK,IAAI,EAAK,MAAO,EAAK,OAAO,CAAG,KAC3C,EAAS,EAAO,EAChB,EAAO,SAAS,cAAc,OAAO,CACrC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,MAAQ,EAAI,EACjB,EAAQ,QAAU,EAAK,KAAO,EAClC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,OAAS,EAAI,EAClB,EAAQ,QAAU,EAAK,IAAM,EAEvC,EAAK,UAAY,oBACjB,EAAK,MAAM,MAAQ,GAAG,EAAK,IAC3B,EAAK,MAAM,OAAS,GAAG,EAAK,IAC5B,EAAK,MAAM,KAAO,GAAG,EAAE,IACvB,EAAK,MAAM,IAAM,GAAG,EAAE,IAElB,EAAQ,OACR,EAAK,MAAM,YAAY,uBAAwB,EAAQ,MAAM,CAGjE,EAAM,YAAY,EAAK,CACvB,EAAK,iBAAiB,mBAAsB,EAAK,QAAQ,CAAE,CAAC,KAAM,GAAK,CAAC,CAI5E,SAAgB,EAA0D,CACtE,SAAS,SACT,WAAW,GACX,WAAW,GACX,SAC6B,EAAE,CAAiC,CAChE,IAAM,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,EAAU,IAAW,UAAY,CAAC,EAGlC,GAAA,EAAA,EAAA,aACD,GAAqB,CACd,CAAC,GAAW,CAAC,GAAU,CAAC,EAAS,SAIrC,EAAa,EAAS,QAAS,EAAQ,CAAC,SAAU,GAAM,QAAM,CAAC,EAEnE,CAAC,EAAO,EAAQ,CACnB,CAGK,GAAA,EAAA,EAAA,aACD,GAA2B,CACpB,CAAC,GAAW,CAAC,EAAS,SAItB,EAAM,cAAgB,SAAW,EAAM,SAAW,GAItD,EAAa,EAAS,QAAS,EAAM,cAAe,CAChD,WACA,QACA,QAAS,EAAM,QACf,QAAS,EAAM,QAClB,CAAC,EAEN,CAAC,EAAU,EAAO,EAAQ,CAC7B,CAED,MAAO,CACH,gBAAiB,EAAU,oBAAsB,IAAA,GACjD,YAAa,GAAU,EAAA,EAAA,KAAC,OAAD,CAAM,IAAK,EAAU,UAAU,qBAAqB,cAAY,OAAS,CAAA,CAAG,KACnG,oBACA,gBACH"}
1
+ {"version":3,"file":"useInteractionEffect-Bo8285cg.cjs","names":[],"sources":["../src/utils/useInteractionEffect.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type {PointerEvent, ReactElement} from 'react'\n\nexport type MClickEffect = 'none' | 'ripple'\n\nexport interface UseInteractionEffectOptions {\n effect?: MClickEffect\n disabled?: boolean\n centered?: boolean\n color?: string\n}\n\nexport interface UseInteractionEffectResult<T extends HTMLElement> {\n effectClassName?: string\n effectLayer: ReactElement | null\n handlePointerDown: (event: PointerEvent<T>) => void\n triggerEffect: (target: T | null) => void\n}\n\ninterface RippleOptions {\n centered: boolean\n color?: string\n clientX?: number\n clientY?: number\n}\n\n// Render and position a ripple wave inside the dedicated effect layer.\nfunction appendRipple(layer: HTMLSpanElement, host: HTMLElement, options: RippleOptions) {\n const rect = host.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 1.75\n const radius = size / 2\n const wave = document.createElement('span')\n const x =\n options.centered || options.clientX === undefined\n ? rect.width / 2 - radius\n : options.clientX - rect.left - radius\n const y =\n options.centered || options.clientY === undefined\n ? rect.height / 2 - radius\n : options.clientY - rect.top - radius\n\n wave.className = 'click-effect-wave'\n wave.style.width = `${size}px`\n wave.style.height = `${size}px`\n wave.style.left = `${x}px`\n wave.style.top = `${y}px`\n\n if (options.color) {\n wave.style.setProperty('--click-effect-color', options.color)\n }\n\n layer.appendChild(wave)\n wave.addEventListener('animationend', () => wave.remove(), {once: true})\n}\n\n// Attach a lightweight click feedback effect without coupling it to a specific component.\nexport function useInteractionEffect<T extends HTMLElement = HTMLElement>({\n effect = 'ripple',\n disabled = false,\n centered = false,\n color,\n}: UseInteractionEffectOptions = {}): UseInteractionEffectResult<T> {\n const layerRef = useRef<HTMLSpanElement>(null)\n const enabled = effect === 'ripple' && !disabled\n\n // Trigger a centered ripple for keyboard-driven or programmatic actions.\n const triggerEffect = useCallback(\n (target: T | null) => {\n if (!enabled || !target || !layerRef.current) {\n return\n }\n\n appendRipple(layerRef.current, target, {centered: true, color})\n },\n [color, enabled]\n )\n\n // Start the ripple from the actual pointer position when possible.\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !layerRef.current) {\n return\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return\n }\n\n appendRipple(layerRef.current, event.currentTarget, {\n centered,\n color,\n clientX: event.clientX,\n clientY: event.clientY,\n })\n },\n [centered, color, enabled]\n )\n\n return {\n effectClassName: enabled ? 'click-effect-root' : undefined,\n effectLayer: enabled ? <span ref={layerRef} className=\"click-effect-layer\" aria-hidden=\"true\" /> : null,\n handlePointerDown,\n triggerEffect,\n }\n}\n"],"mappings":"qFA2BA,SAAS,EAAa,EAAwB,EAAmB,EAAwB,CACrF,IAAM,EAAO,EAAK,uBAAuB,CACnC,EAAO,KAAK,IAAI,EAAK,MAAO,EAAK,OAAO,CAAG,KAC3C,EAAS,EAAO,EAChB,EAAO,SAAS,cAAc,OAAO,CACrC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,MAAQ,EAAI,EACjB,EAAQ,QAAU,EAAK,KAAO,EAClC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,OAAS,EAAI,EAClB,EAAQ,QAAU,EAAK,IAAM,EAEvC,EAAK,UAAY,oBACjB,EAAK,MAAM,MAAQ,GAAG,EAAK,IAC3B,EAAK,MAAM,OAAS,GAAG,EAAK,IAC5B,EAAK,MAAM,KAAO,GAAG,EAAE,IACvB,EAAK,MAAM,IAAM,GAAG,EAAE,IAElB,EAAQ,OACR,EAAK,MAAM,YAAY,uBAAwB,EAAQ,MAAM,CAGjE,EAAM,YAAY,EAAK,CACvB,EAAK,iBAAiB,mBAAsB,EAAK,QAAQ,CAAE,CAAC,KAAM,GAAK,CAAC,CAI5E,SAAgB,EAA0D,CACtE,SAAS,SACT,WAAW,GACX,WAAW,GACX,SAC6B,EAAE,CAAiC,CAChE,IAAM,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,EAAU,IAAW,UAAY,CAAC,EAGlC,GAAA,EAAA,EAAA,aACD,GAAqB,CACd,CAAC,GAAW,CAAC,GAAU,CAAC,EAAS,SAIrC,EAAa,EAAS,QAAS,EAAQ,CAAC,SAAU,GAAM,QAAM,CAAC,EAEnE,CAAC,EAAO,EAAQ,CACnB,CAGK,GAAA,EAAA,EAAA,aACD,GAA2B,CACpB,CAAC,GAAW,CAAC,EAAS,SAItB,EAAM,cAAgB,SAAW,EAAM,SAAW,GAItD,EAAa,EAAS,QAAS,EAAM,cAAe,CAChD,WACA,QACA,QAAS,EAAM,QACf,QAAS,EAAM,QAClB,CAAC,EAEN,CAAC,EAAU,EAAO,EAAQ,CAC7B,CAED,MAAO,CACH,gBAAiB,EAAU,oBAAsB,IAAA,GACjD,YAAa,GAAU,EAAA,EAAA,KAAC,OAAD,CAAM,IAAK,EAAU,UAAU,qBAAqB,cAAY,OAAS,CAAA,CAAG,KACnG,oBACA,gBACH"}
@@ -1,2 +1,2 @@
1
- require(`./core-w629c4ND.cjs`);let e=require(`react`);function t({itemCount:t,onSelect:n,onClose:r,isOpen:i,loop:a=!0}){let[o,s]=(0,e.useState)(-1);return{activeIndex:o,setActiveIndex:s,resetIndex:(0,e.useCallback)(()=>s(-1),[]),onKeyDown:(0,e.useCallback)(e=>{if(!(!i||t===0))switch(e.key){case`ArrowDown`:e.preventDefault(),s(e=>e>=t-1?a?0:e:e+1);break;case`ArrowUp`:e.preventDefault(),s(e=>e<=0?a?t-1:0:e-1);break;case`Enter`:e.preventDefault(),o>=0&&o<t&&n(o);break;case`Escape`:e.preventDefault(),r();break;case`Home`:e.preventDefault(),s(0);break;case`End`:e.preventDefault(),s(t-1);break}},[i,t,o,n,r,a])}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
- //# sourceMappingURL=useKeyboardNav-CCUoRMgm.cjs.map
1
+ require(`./core-DAox0BHy.cjs`);let e=require(`react`);function t({itemCount:t,onSelect:n,onClose:r,isOpen:i,loop:a=!0}){let[o,s]=(0,e.useState)(-1);return{activeIndex:o,setActiveIndex:s,resetIndex:(0,e.useCallback)(()=>s(-1),[]),onKeyDown:(0,e.useCallback)(e=>{if(!(!i||t===0))switch(e.key){case`ArrowDown`:e.preventDefault(),s(e=>e>=t-1?a?0:e:e+1);break;case`ArrowUp`:e.preventDefault(),s(e=>e<=0?a?t-1:0:e-1);break;case`Enter`:e.preventDefault(),o>=0&&o<t&&n(o);break;case`Escape`:e.preventDefault(),r();break;case`Home`:e.preventDefault(),s(0);break;case`End`:e.preventDefault(),s(t-1);break}},[i,t,o,n,r,a])}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
+ //# sourceMappingURL=useKeyboardNav-CyeQtqF8.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardNav-CCUoRMgm.cjs","names":[],"sources":["../src/utils/useKeyboardNav.ts"],"sourcesContent":["import {useState, useCallback, type KeyboardEvent} from 'react'\n\nexport interface UseKeyboardNavOptions {\n itemCount: number\n onSelect: (index: number) => void\n onClose: () => void\n isOpen: boolean\n loop?: boolean\n}\n\n// Provide arrow-key navigation and selection state for list-like widgets.\nexport function useKeyboardNav({itemCount, onSelect, onClose, isOpen, loop = true}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1)\n\n // Reset highlight state when the owning widget closes or clears results.\n const resetIndex = useCallback(() => setActiveIndex(-1), [])\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev\n return prev + 1\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0\n return prev - 1\n })\n break\n }\n case 'Enter': {\n e.preventDefault()\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex)\n }\n break\n }\n case 'Escape': {\n e.preventDefault()\n onClose()\n break\n }\n case 'Home': {\n e.preventDefault()\n setActiveIndex(0)\n break\n }\n case 'End': {\n e.preventDefault()\n setActiveIndex(itemCount - 1)\n break\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop]\n )\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown}\n}\n"],"mappings":"sDAWA,SAAgB,EAAe,CAAC,YAAW,WAAU,UAAS,SAAQ,OAAO,IAA8B,CACvG,GAAM,CAAC,EAAa,IAAA,EAAA,EAAA,UAA2B,GAAG,CAqDlD,MAAO,CAAC,cAAa,iBAAgB,YAAA,EAAA,EAAA,iBAlDA,EAAe,GAAG,CAAE,EAAE,CAAC,CAkDX,WAAA,EAAA,EAAA,aA/C5C,GAAqB,CACd,MAAC,GAAU,IAAc,GAE7B,OAAQ,EAAE,IAAV,CACI,IAAK,YACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAY,EAAU,EAAO,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,UACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAU,EAAO,EAAY,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,QACD,EAAE,gBAAgB,CACd,GAAe,GAAK,EAAc,GAClC,EAAS,EAAY,CAEzB,MAEJ,IAAK,SACD,EAAE,gBAAgB,CAClB,GAAS,CACT,MAEJ,IAAK,OACD,EAAE,gBAAgB,CAClB,EAAe,EAAE,CACjB,MAEJ,IAAK,MACD,EAAE,gBAAgB,CAClB,EAAe,EAAY,EAAE,CAC7B,QAIZ,CAAC,EAAQ,EAAW,EAAa,EAAU,EAAS,EAAK,CAC5D,CAE0D"}
1
+ {"version":3,"file":"useKeyboardNav-CyeQtqF8.cjs","names":[],"sources":["../src/utils/useKeyboardNav.ts"],"sourcesContent":["import {useState, useCallback, type KeyboardEvent} from 'react'\n\nexport interface UseKeyboardNavOptions {\n itemCount: number\n onSelect: (index: number) => void\n onClose: () => void\n isOpen: boolean\n loop?: boolean\n}\n\n// Provide arrow-key navigation and selection state for list-like widgets.\nexport function useKeyboardNav({itemCount, onSelect, onClose, isOpen, loop = true}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1)\n\n // Reset highlight state when the owning widget closes or clears results.\n const resetIndex = useCallback(() => setActiveIndex(-1), [])\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev\n return prev + 1\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0\n return prev - 1\n })\n break\n }\n case 'Enter': {\n e.preventDefault()\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex)\n }\n break\n }\n case 'Escape': {\n e.preventDefault()\n onClose()\n break\n }\n case 'Home': {\n e.preventDefault()\n setActiveIndex(0)\n break\n }\n case 'End': {\n e.preventDefault()\n setActiveIndex(itemCount - 1)\n break\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop]\n )\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown}\n}\n"],"mappings":"sDAWA,SAAgB,EAAe,CAAC,YAAW,WAAU,UAAS,SAAQ,OAAO,IAA8B,CACvG,GAAM,CAAC,EAAa,IAAA,EAAA,EAAA,UAA2B,GAAG,CAqDlD,MAAO,CAAC,cAAa,iBAAgB,YAAA,EAAA,EAAA,iBAlDA,EAAe,GAAG,CAAE,EAAE,CAAC,CAkDX,WAAA,EAAA,EAAA,aA/C5C,GAAqB,CACd,MAAC,GAAU,IAAc,GAE7B,OAAQ,EAAE,IAAV,CACI,IAAK,YACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAY,EAAU,EAAO,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,UACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAU,EAAO,EAAY,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,QACD,EAAE,gBAAgB,CACd,GAAe,GAAK,EAAc,GAClC,EAAS,EAAY,CAEzB,MAEJ,IAAK,SACD,EAAE,gBAAgB,CAClB,GAAS,CACT,MAEJ,IAAK,OACD,EAAE,gBAAgB,CAClB,EAAe,EAAE,CACjB,MAEJ,IAAK,MACD,EAAE,gBAAgB,CAClB,EAAe,EAAY,EAAE,CAC7B,QAIZ,CAAC,EAAQ,EAAW,EAAa,EAAU,EAAS,EAAK,CAC5D,CAE0D"}
@@ -0,0 +1,42 @@
1
+ import { MAppMenuGroup, MAppMenuItem } from '../components/layout/MAppMenu/MAppMenu.types';
2
+ import { MCommandPaletteItem } from '../components/overlays/MCommandPalette/MCommandPalette.types';
3
+ export interface CommandPaletteFromAppMenuOptions {
4
+ /**
5
+ * Called when the user selects an item that has a `to` or `href`. Receives
6
+ * the resolved target string and the original `MAppMenuItem` so the caller
7
+ * can run their router (`navigate(target)`) without `MCommandPalette`
8
+ * needing to know about `react-router`.
9
+ */
10
+ onSelect?: (target: string, item: MAppMenuItem) => void;
11
+ /** When `true`, disabled menu items are still emitted. Default `false`. */
12
+ includeDisabled?: boolean;
13
+ /**
14
+ * Optional extra keywords appended to every emitted item. Useful for adding
15
+ * global search aliases (e.g. translations) without mutating the source menu.
16
+ */
17
+ extraKeywords?: string[];
18
+ }
19
+ /**
20
+ * Convert an `MAppMenu` navigation model (the same `MAppMenuGroup[]` shape that
21
+ * already feeds the sidebar / topbar / navs) into `MCommandPaletteItem[]` so the
22
+ * command palette and the navigation menu share one source of truth instead of
23
+ * being maintained in parallel.
24
+ *
25
+ * Mapping:
26
+ * - `MAppMenuGroup.label` → `MCommandPaletteItem.group`
27
+ * - `MAppMenuItem.label` → `MCommandPaletteItem.title`
28
+ * - `MAppMenuItem.icon` → `MCommandPaletteItem.icon` (component icons are
29
+ * instantiated as elements; ReactNode icons are forwarded as-is)
30
+ * - `MAppMenuItem.description` (or fallback to the HTML `title` attr)
31
+ * → `MCommandPaletteItem.description`
32
+ * - `MAppMenuItem.to` → `MCommandPaletteItem.to`
33
+ * - `MAppMenuItem.href` → `MCommandPaletteItem.href`
34
+ * - `MAppMenuItem.target` / `rel` / `component` / `badge` are forwarded
35
+ * - When `to`/`href` is present and `options.onSelect` is provided, the emitted
36
+ * `onSelect` calls `options.onSelect(target, item)` so the caller's router
37
+ * handles navigation.
38
+ *
39
+ * Tree menus are flattened — only leaves with a navigable target (or with their
40
+ * own `onClick`) are emitted, so the palette stays a flat command list.
41
+ */
42
+ export declare function commandPaletteFromAppMenu(groups: MAppMenuGroup[], options?: CommandPaletteFromAppMenuOptions): MCommandPaletteItem[];
@@ -36,6 +36,10 @@ export declare const mineralComponentLicenses: {
36
36
  readonly group: "layout";
37
37
  readonly plan: "pro";
38
38
  };
39
+ readonly MAppMenu: {
40
+ readonly group: "layout";
41
+ readonly plan: "pro";
42
+ };
39
43
  readonly MMasonry: {
40
44
  readonly group: "media";
41
45
  readonly plan: "pro";
package/dist/utils.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./cn-CU5TNITO.cjs`),t=require(`./validators-DRhikiAi.cjs`),n=require(`./creditCards-D_HwRUBz.cjs`),r=require(`./formatters-CNjg_h7-.cjs`),i=require(`./dateUtils-Dq1vaA-D.cjs`),a=require(`./relativeTime-DgYBUaVm.cjs`),o=require(`./useGhostText-mibV4s1-.cjs`),s=require(`./licensing-Df1Z1rnQ.cjs`),c=require(`./useKeyboardNav-CCUoRMgm.cjs`),l=require(`./useInteractionEffect-CtXlbjhC.cjs`);exports.addMonths=i.t,exports.addYears=i.n,exports.adjustCursorAfterFormat=r.t,exports.capitalizeWords=r.n,exports.cn=e.t,exports.composeValidators=t.t,exports.creditCardBrands=n.t,exports.daysInMonth=i.i,exports.detectCardBrand=n.n,exports.firstDayOfMonth=i.a,exports.formatAbsoluteTime=a.t,exports.formatCardNumber=n.r,exports.formatCurrency=r.r,exports.formatDate=i.o,exports.formatIBAN=r.a,exports.formatNIP=r.o,exports.formatPhone=r.s,exports.formatPostCode=t._,exports.formatRelativeTime=a.n,exports.formatTime=i.c,exports.getAutoUpdateInterval=a.r,exports.getDayNames=i.u,exports.getMineralComponentLicense=s.t,exports.getMineralComponentPlan=s.n,exports.getMonthNames=i.d,exports.getPostCodeRule=t.v,exports.getRelativeTimeValue=a.i,exports.isDateInRange=i.f,exports.isMineralProComponent=s.r,exports.isSameDay=i.p,exports.mineralComponentLicenses=s.i,exports.mineralProComponents=s.a,exports.parseCurrencyToNumber=r.c,exports.parseDate=i.m,exports.parseRelativeThreshold=a.a,exports.parseTime=i.h,exports.postCodeCountries=t.y,exports.postCodeRules=t.b,exports.stripCardNumber=n.i,exports.stripNonAlphanumeric=r.l,exports.stripNonDigits=r.u,exports.stripTime=i._,exports.toDate=a.o,exports.unformatIBAN=r.d,exports.useClickOutside=s.o,exports.useDebounce=o.n,exports.useDebouncedCallback=o.r,exports.useGhostText=o.t,exports.useInteractionEffect=l.t,exports.useKeyboardNav=c.t,exports.validateCardNumber=n.a,exports.validateEmail=t.o,exports.validateIBAN=t.s,exports.validateMaxLength=t.c,exports.validateMinLength=t.l,exports.validateNIP=t.u,exports.validatePESEL=t.d,exports.validatePattern=t.f,exports.validatePhone=t.p,exports.validatePostCode=t.x,exports.validateREGON=t.m,exports.validateRange=t.h,exports.validateRequired=t.g;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./cn-CU5TNITO.cjs`),t=require(`./validators-DRhikiAi.cjs`),n=require(`./creditCards-D_HwRUBz.cjs`),r=require(`./formatters-CNjg_h7-.cjs`),i=require(`./dateUtils-Dq1vaA-D.cjs`),a=require(`./relativeTime-DgYBUaVm.cjs`),o=require(`./useGhostText-Dg4P606B.cjs`),s=require(`./licensing-DmF0ObpG.cjs`),c=require(`./useKeyboardNav-CyeQtqF8.cjs`),l=require(`./useInteractionEffect-Bo8285cg.cjs`);exports.addMonths=i.t,exports.addYears=i.n,exports.adjustCursorAfterFormat=r.t,exports.capitalizeWords=r.n,exports.cn=e.t,exports.composeValidators=t.t,exports.creditCardBrands=n.t,exports.daysInMonth=i.i,exports.detectCardBrand=n.n,exports.firstDayOfMonth=i.a,exports.formatAbsoluteTime=a.t,exports.formatCardNumber=n.r,exports.formatCurrency=r.r,exports.formatDate=i.o,exports.formatIBAN=r.a,exports.formatNIP=r.o,exports.formatPhone=r.s,exports.formatPostCode=t._,exports.formatRelativeTime=a.n,exports.formatTime=i.c,exports.getAutoUpdateInterval=a.r,exports.getDayNames=i.u,exports.getMineralComponentLicense=s.t,exports.getMineralComponentPlan=s.n,exports.getMonthNames=i.d,exports.getPostCodeRule=t.v,exports.getRelativeTimeValue=a.i,exports.isDateInRange=i.f,exports.isMineralProComponent=s.r,exports.isSameDay=i.p,exports.mineralComponentLicenses=s.i,exports.mineralProComponents=s.a,exports.parseCurrencyToNumber=r.c,exports.parseDate=i.m,exports.parseRelativeThreshold=a.a,exports.parseTime=i.h,exports.postCodeCountries=t.y,exports.postCodeRules=t.b,exports.stripCardNumber=n.i,exports.stripNonAlphanumeric=r.l,exports.stripNonDigits=r.u,exports.stripTime=i._,exports.toDate=a.o,exports.unformatIBAN=r.d,exports.useClickOutside=s.o,exports.useDebounce=o.n,exports.useDebouncedCallback=o.r,exports.useGhostText=o.t,exports.useInteractionEffect=l.t,exports.useKeyboardNav=c.t,exports.validateCardNumber=n.a,exports.validateEmail=t.o,exports.validateIBAN=t.s,exports.validateMaxLength=t.c,exports.validateMinLength=t.l,exports.validateNIP=t.u,exports.validatePESEL=t.d,exports.validatePattern=t.f,exports.validatePhone=t.p,exports.validatePostCode=t.x,exports.validateREGON=t.m,exports.validateRange=t.h,exports.validateRequired=t.g;
package/dist/utils.js CHANGED
@@ -7,7 +7,7 @@ import { a as C, c as w, d as T, l as E, n as D, o as O, r as k, s as A, t as j,
7
7
  import { _ as N, a as P, c as F, d as I, f as L, h as R, i as z, m as B, n as V, o as H, p as U, t as W, u as G } from "./dateUtils-CUY6CRCf.js";
8
8
  import { a as K, i as q, n as J, o as Y, r as X, t as Z } from "./relativeTime-Cr-NVzij.js";
9
9
  import { n as Q, r as $, t as ee } from "./useGhostText-DG0bzcao.js";
10
- import { a as te, i as ne, n as re, o as ie, r as ae, t as oe } from "./licensing-CwzqhHH9.js";
10
+ import { a as te, i as ne, n as re, o as ie, r as ae, t as oe } from "./licensing-ZFCUU4Z8.js";
11
11
  import { t as se } from "./useKeyboardNav-iEXOdEMB.js";
12
12
  import { t as ce } from "./useInteractionEffect-DtpbVd77.js";
13
13
  export { W as addMonths, V as addYears, j as adjustCursorAfterFormat, D as capitalizeWords, e as cn, p as composeValidators, S as creditCardBrands, z as daysInMonth, b as detectCardBrand, P as firstDayOfMonth, Z as formatAbsoluteTime, x as formatCardNumber, k as formatCurrency, H as formatDate, C as formatIBAN, O as formatNIP, A as formatPhone, t as formatPostCode, J as formatRelativeTime, F as formatTime, X as getAutoUpdateInterval, G as getDayNames, oe as getMineralComponentLicense, re as getMineralComponentPlan, I as getMonthNames, h as getPostCodeRule, q as getRelativeTimeValue, L as isDateInRange, ae as isMineralProComponent, U as isSameDay, ne as mineralComponentLicenses, te as mineralProComponents, w as parseCurrencyToNumber, B as parseDate, K as parseRelativeThreshold, R as parseTime, _ as postCodeCountries, n as postCodeRules, y as stripCardNumber, E as stripNonAlphanumeric, M as stripNonDigits, N as stripTime, Y as toDate, T as unformatIBAN, ie as useClickOutside, Q as useDebounce, $ as useDebouncedCallback, ee as useGhostText, ce as useInteractionEffect, se as useKeyboardNav, v as validateCardNumber, u as validateEmail, f as validateIBAN, r as validateMaxLength, c as validateMinLength, m as validateNIP, i as validatePESEL, a as validatePattern, d as validatePhone, g as validatePostCode, l as validateREGON, s as validateRange, o as validateRequired };
@@ -1,2 +1,2 @@
1
1
  function e(e){let t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r=/[\p{L}0-9._:-]+/u,i={className:`symbol`,begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},a={begin:/\s/,contains:[{className:`keyword`,begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},o=e.inherit(a,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{className:`string`}),c=e.inherit(e.QUOTE_STRING_MODE,{className:`string`}),l={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:`attr`,begin:r,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:`string`,endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[i]},{begin:/'/,end:/'/,contains:[i]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:`HTML, XML`,aliases:[`html`,`xhtml`,`rss`,`atom`,`xjb`,`xsd`,`xsl`,`plist`,`wsf`,`svg`],case_insensitive:!0,unicodeRegex:!0,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,relevance:10,contains:[a,c,s,o,{begin:/\[/,end:/\]/,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,contains:[a,o,c,s]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},i,{className:`meta`,end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[c]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:`tag`,begin:/<style(?=\s|>)/,end:/>/,keywords:{name:`style`},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:[`css`,`xml`]}},{className:`tag`,begin:/<script(?=\s|>)/,end:/>/,keywords:{name:`script`},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:[`javascript`,`handlebars`,`xml`]}},{className:`tag`,begin:/<>|<\/>/},{className:`tag`,begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:`name`,begin:n,relevance:0,starts:l}]},{className:`tag`,begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:`name`,begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}exports.default=e;
2
- //# sourceMappingURL=xml-DEtyywwU.cjs.map
2
+ //# sourceMappingURL=xml-B2okahIr.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml-DEtyywwU.cjs","names":[],"sources":["../node_modules/highlight.js/es/languages/xml.js"],"sourcesContent":["/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n"],"x_google_ignoreList":[0],"mappings":"AAQA,SAAS,EAAI,EAAM,CACjB,IAAM,EAAQ,EAAK,MAQb,EAAc,EAAM,OAAO,YAAa,EAAM,SAAS,mBAAmB,CAAE,kBAAkB,CAC9F,EAAe,mBACf,EAAe,CACnB,UAAW,SACX,MAAO,mCACR,CACK,EAAoB,CACxB,MAAO,KACP,SAAU,CACR,CACE,UAAW,UACX,MAAO,sBACP,QAAS,KACV,CACF,CACF,CACK,EAAwB,EAAK,QAAQ,EAAmB,CAC5D,MAAO,KACP,IAAK,KACN,CAAC,CACI,EAAwB,EAAK,QAAQ,EAAK,iBAAkB,CAAE,UAAW,SAAU,CAAC,CACpF,EAAyB,EAAK,QAAQ,EAAK,kBAAmB,CAAE,UAAW,SAAU,CAAC,CACtF,EAAgB,CACpB,eAAgB,GAChB,QAAS,IACT,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACZ,CACD,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,EAAc,CAC3B,CACD,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,EAAc,CAC3B,CACD,CAAE,MAAO,eAAgB,CAC1B,CACF,CACF,CACF,CACF,CACF,CACD,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,MACD,CACD,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACR,EACA,EACA,EACA,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACR,EACA,EACA,EACA,EACD,CACF,CACF,CACF,CACF,CACF,CACD,EAAK,QACH,OACA,MACA,CAAE,UAAW,GAAI,CAClB,CACD,CACE,MAAO,cACP,IAAK,QACL,UAAW,GACZ,CACD,EAEA,CACE,UAAW,OACX,IAAK,MACL,SAAU,CACR,CACE,MAAO,SACP,UAAW,GACX,SAAU,CACR,EACD,CACF,CACD,CACE,MAAO,oBACR,CACF,CAEF,CACD,CACE,UAAW,MAMX,MAAO,iBACP,IAAK,IACL,SAAU,CAAE,KAAM,QAAS,CAC3B,SAAU,CAAE,EAAe,CAC3B,OAAQ,CACN,IAAK,YACL,UAAW,GACX,YAAa,CACX,MACA,MACD,CACF,CACF,CACD,CACE,UAAW,MAEX,MAAO,kBACP,IAAK,IACL,SAAU,CAAE,KAAM,SAAU,CAC5B,SAAU,CAAE,EAAe,CAC3B,OAAQ,CACN,IAAK,aACL,UAAW,GACX,YAAa,CACX,aACA,aACA,MACD,CACF,CACF,CAED,CACE,UAAW,MACX,MAAO,UACR,CAED,CACE,UAAW,MACX,MAAO,EAAM,OACX,IACA,EAAM,UAAU,EAAM,OACpB,EAIA,EAAM,OAAO,MAAO,IAAK,KAAK,CAC/B,CAAC,CACH,CACD,IAAK,OACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACX,OAAQ,EACT,CACF,CACF,CAED,CACE,UAAW,MACX,MAAO,EAAM,OACX,MACA,EAAM,UAAU,EAAM,OACpB,EAAa,IACd,CAAC,CACH,CACD,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACZ,CACD,CACE,MAAO,IACP,UAAW,EACX,WAAY,GACb,CACF,CACF,CACF,CACF"}
1
+ {"version":3,"file":"xml-B2okahIr.cjs","names":[],"sources":["../node_modules/highlight.js/es/languages/xml.js"],"sourcesContent":["/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n"],"x_google_ignoreList":[0],"mappings":"AAQA,SAAS,EAAI,EAAM,CACjB,IAAM,EAAQ,EAAK,MAQb,EAAc,EAAM,OAAO,YAAa,EAAM,SAAS,mBAAmB,CAAE,kBAAkB,CAC9F,EAAe,mBACf,EAAe,CACnB,UAAW,SACX,MAAO,mCACR,CACK,EAAoB,CACxB,MAAO,KACP,SAAU,CACR,CACE,UAAW,UACX,MAAO,sBACP,QAAS,KACV,CACF,CACF,CACK,EAAwB,EAAK,QAAQ,EAAmB,CAC5D,MAAO,KACP,IAAK,KACN,CAAC,CACI,EAAwB,EAAK,QAAQ,EAAK,iBAAkB,CAAE,UAAW,SAAU,CAAC,CACpF,EAAyB,EAAK,QAAQ,EAAK,kBAAmB,CAAE,UAAW,SAAU,CAAC,CACtF,EAAgB,CACpB,eAAgB,GAChB,QAAS,IACT,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACZ,CACD,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,EAAc,CAC3B,CACD,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,EAAc,CAC3B,CACD,CAAE,MAAO,eAAgB,CAC1B,CACF,CACF,CACF,CACF,CACF,CACD,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,MACD,CACD,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACR,EACA,EACA,EACA,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACR,EACA,EACA,EACA,EACD,CACF,CACF,CACF,CACF,CACF,CACD,EAAK,QACH,OACA,MACA,CAAE,UAAW,GAAI,CAClB,CACD,CACE,MAAO,cACP,IAAK,QACL,UAAW,GACZ,CACD,EAEA,CACE,UAAW,OACX,IAAK,MACL,SAAU,CACR,CACE,MAAO,SACP,UAAW,GACX,SAAU,CACR,EACD,CACF,CACD,CACE,MAAO,oBACR,CACF,CAEF,CACD,CACE,UAAW,MAMX,MAAO,iBACP,IAAK,IACL,SAAU,CAAE,KAAM,QAAS,CAC3B,SAAU,CAAE,EAAe,CAC3B,OAAQ,CACN,IAAK,YACL,UAAW,GACX,YAAa,CACX,MACA,MACD,CACF,CACF,CACD,CACE,UAAW,MAEX,MAAO,kBACP,IAAK,IACL,SAAU,CAAE,KAAM,SAAU,CAC5B,SAAU,CAAE,EAAe,CAC3B,OAAQ,CACN,IAAK,aACL,UAAW,GACX,YAAa,CACX,aACA,aACA,MACD,CACF,CACF,CAED,CACE,UAAW,MACX,MAAO,UACR,CAED,CACE,UAAW,MACX,MAAO,EAAM,OACX,IACA,EAAM,UAAU,EAAM,OACpB,EAIA,EAAM,OAAO,MAAO,IAAK,KAAK,CAC/B,CAAC,CACH,CACD,IAAK,OACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACX,OAAQ,EACT,CACF,CACF,CAED,CACE,UAAW,MACX,MAAO,EAAM,OACX,MACA,EAAM,UAAU,EAAM,OACpB,EAAa,IACd,CAAC,CACH,CACD,SAAU,CACR,CACE,UAAW,OACX,MAAO,EACP,UAAW,EACZ,CACD,CACE,MAAO,IACP,UAAW,EACX,WAAY,GACb,CACF,CACF,CACF,CACF"}
@@ -165,4 +165,4 @@ function e(e) {
165
165
  //#endregion
166
166
  export { e as default };
167
167
 
168
- //# sourceMappingURL=xml-DlZghN7m.js.map
168
+ //# sourceMappingURL=xml-a3b-XevT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml-DlZghN7m.js","names":[],"sources":["../node_modules/highlight.js/es/languages/xml.js"],"sourcesContent":["/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n"],"x_google_ignoreList":[0],"mappings":";AAQA,SAAS,EAAI,GAAM;CACjB,IAAM,IAAQ,EAAK,OAQb,IAAc,EAAM,OAAO,aAAa,EAAM,SAAS,mBAAmB,EAAE,kBAAkB,EAC9F,IAAe,oBACf,IAAe;EACnB,WAAW;EACX,OAAO;EACR,EACK,IAAoB;EACxB,OAAO;EACP,UAAU,CACR;GACE,WAAW;GACX,OAAO;GACP,SAAS;GACV,CACF;EACF,EACK,IAAwB,EAAK,QAAQ,GAAmB;EAC5D,OAAO;EACP,KAAK;EACN,CAAC,EACI,IAAwB,EAAK,QAAQ,EAAK,kBAAkB,EAAE,WAAW,UAAU,CAAC,EACpF,IAAyB,EAAK,QAAQ,EAAK,mBAAmB,EAAE,WAAW,UAAU,CAAC,EACtF,IAAgB;EACpB,gBAAgB;EAChB,SAAS;EACT,WAAW;EACX,UAAU,CACR;GACE,WAAW;GACX,OAAO;GACP,WAAW;GACZ,EACD;GACE,OAAO;GACP,WAAW;GACX,UAAU,CACR;IACE,WAAW;IACX,YAAY;IACZ,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,UAAU,CAAE,EAAc;MAC3B;KACD;MACE,OAAO;MACP,KAAK;MACL,UAAU,CAAE,EAAc;MAC3B;KACD,EAAE,OAAO,gBAAgB;KAC1B;IACF,CACF;GACF,CACF;EACF;AACD,QAAO;EACL,MAAM;EACN,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,kBAAkB;EAClB,cAAc;EACd,UAAU;GACR;IACE,WAAW;IACX,OAAO;IACP,KAAK;IACL,WAAW;IACX,UAAU;KACR;KACA;KACA;KACA;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR;OACE,WAAW;OACX,OAAO;OACP,KAAK;OACL,UAAU;QACR;QACA;QACA;QACA;QACD;OACF,CACF;MACF;KACF;IACF;GACD,EAAK,QACH,QACA,OACA,EAAE,WAAW,IAAI,CAClB;GACD;IACE,OAAO;IACP,KAAK;IACL,WAAW;IACZ;GACD;GAEA;IACE,WAAW;IACX,KAAK;IACL,UAAU,CACR;KACE,OAAO;KACP,WAAW;KACX,UAAU,CACR,EACD;KACF,EACD,EACE,OAAO,qBACR,CACF;IAEF;GACD;IACE,WAAW;IAMX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,MAAM,SAAS;IAC3B,UAAU,CAAE,EAAe;IAC3B,QAAQ;KACN,KAAK;KACL,WAAW;KACX,aAAa,CACX,OACA,MACD;KACF;IACF;GACD;IACE,WAAW;IAEX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,MAAM,UAAU;IAC5B,UAAU,CAAE,EAAe;IAC3B,QAAQ;KACN,KAAK;KACL,WAAW;KACX,aAAa;MACX;MACA;MACA;MACD;KACF;IACF;GAED;IACE,WAAW;IACX,OAAO;IACR;GAED;IACE,WAAW;IACX,OAAO,EAAM,OACX,KACA,EAAM,UAAU,EAAM,OACpB,GAIA,EAAM,OAAO,OAAO,KAAK,KAAK,CAC/B,CAAC,CACH;IACD,KAAK;IACL,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,WAAW;KACX,QAAQ;KACT,CACF;IACF;GAED;IACE,WAAW;IACX,OAAO,EAAM,OACX,OACA,EAAM,UAAU,EAAM,OACpB,GAAa,IACd,CAAC,CACH;IACD,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,WAAW;KACZ,EACD;KACE,OAAO;KACP,WAAW;KACX,YAAY;KACb,CACF;IACF;GACF;EACF"}
1
+ {"version":3,"file":"xml-a3b-XevT.js","names":[],"sources":["../node_modules/highlight.js/es/languages/xml.js"],"sourcesContent":["/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n"],"x_google_ignoreList":[0],"mappings":";AAQA,SAAS,EAAI,GAAM;CACjB,IAAM,IAAQ,EAAK,OAQb,IAAc,EAAM,OAAO,aAAa,EAAM,SAAS,mBAAmB,EAAE,kBAAkB,EAC9F,IAAe,oBACf,IAAe;EACnB,WAAW;EACX,OAAO;EACR,EACK,IAAoB;EACxB,OAAO;EACP,UAAU,CACR;GACE,WAAW;GACX,OAAO;GACP,SAAS;GACV,CACF;EACF,EACK,IAAwB,EAAK,QAAQ,GAAmB;EAC5D,OAAO;EACP,KAAK;EACN,CAAC,EACI,IAAwB,EAAK,QAAQ,EAAK,kBAAkB,EAAE,WAAW,UAAU,CAAC,EACpF,IAAyB,EAAK,QAAQ,EAAK,mBAAmB,EAAE,WAAW,UAAU,CAAC,EACtF,IAAgB;EACpB,gBAAgB;EAChB,SAAS;EACT,WAAW;EACX,UAAU,CACR;GACE,WAAW;GACX,OAAO;GACP,WAAW;GACZ,EACD;GACE,OAAO;GACP,WAAW;GACX,UAAU,CACR;IACE,WAAW;IACX,YAAY;IACZ,UAAU;KACR;MACE,OAAO;MACP,KAAK;MACL,UAAU,CAAE,EAAc;MAC3B;KACD;MACE,OAAO;MACP,KAAK;MACL,UAAU,CAAE,EAAc;MAC3B;KACD,EAAE,OAAO,gBAAgB;KAC1B;IACF,CACF;GACF,CACF;EACF;AACD,QAAO;EACL,MAAM;EACN,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,kBAAkB;EAClB,cAAc;EACd,UAAU;GACR;IACE,WAAW;IACX,OAAO;IACP,KAAK;IACL,WAAW;IACX,UAAU;KACR;KACA;KACA;KACA;KACA;MACE,OAAO;MACP,KAAK;MACL,UAAU,CACR;OACE,WAAW;OACX,OAAO;OACP,KAAK;OACL,UAAU;QACR;QACA;QACA;QACA;QACD;OACF,CACF;MACF;KACF;IACF;GACD,EAAK,QACH,QACA,OACA,EAAE,WAAW,IAAI,CAClB;GACD;IACE,OAAO;IACP,KAAK;IACL,WAAW;IACZ;GACD;GAEA;IACE,WAAW;IACX,KAAK;IACL,UAAU,CACR;KACE,OAAO;KACP,WAAW;KACX,UAAU,CACR,EACD;KACF,EACD,EACE,OAAO,qBACR,CACF;IAEF;GACD;IACE,WAAW;IAMX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,MAAM,SAAS;IAC3B,UAAU,CAAE,EAAe;IAC3B,QAAQ;KACN,KAAK;KACL,WAAW;KACX,aAAa,CACX,OACA,MACD;KACF;IACF;GACD;IACE,WAAW;IAEX,OAAO;IACP,KAAK;IACL,UAAU,EAAE,MAAM,UAAU;IAC5B,UAAU,CAAE,EAAe;IAC3B,QAAQ;KACN,KAAK;KACL,WAAW;KACX,aAAa;MACX;MACA;MACA;MACD;KACF;IACF;GAED;IACE,WAAW;IACX,OAAO;IACR;GAED;IACE,WAAW;IACX,OAAO,EAAM,OACX,KACA,EAAM,UAAU,EAAM,OACpB,GAIA,EAAM,OAAO,OAAO,KAAK,KAAK,CAC/B,CAAC,CACH;IACD,KAAK;IACL,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,WAAW;KACX,QAAQ;KACT,CACF;IACF;GAED;IACE,WAAW;IACX,OAAO,EAAM,OACX,OACA,EAAM,UAAU,EAAM,OACpB,GAAa,IACd,CAAC,CACH;IACD,UAAU,CACR;KACE,WAAW;KACX,OAAO;KACP,WAAW;KACZ,EACD;KACE,OAAO;KACP,WAAW;KACX,YAAY;KACb,CACF;IACF;GACF;EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@banzamel/mineralui",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "description": "Modern React UI component framework with mineral dark aesthetic",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -1,2 +0,0 @@
1
- const e=require(`./theme-Bb_NAEiZ.cjs`),t=require(`./cn-CU5TNITO.cjs`);require(`./core-w629c4ND.cjs`);let n=require(`react/jsx-runtime`);function r({color:r=`primary`,size:i=`md`,hidden:a,pulsing:o=!1,rounded:s=!1,fullWidth:c=!1,icon:l,className:u,children:d,...f}){return(0,n.jsxs)(`span`,{className:t.t(`badge`,`color-${r}`,i,o&&`pulsing`,s&&`rounded`,c&&`full-width`,u),...e.r(a),...f,children:[l&&(0,n.jsx)(`span`,{className:`badge-icon`,children:l}),d]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
- //# sourceMappingURL=MBadge-BoxsfX_h.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MBadge-BoxsfX_h.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n hidden,\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":"yIAMA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,SACA,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAXR,CAaK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE"}
@@ -1,19 +0,0 @@
1
- import { r as e } from "./theme-D_f-cmSA.js";
2
- import { t } from "./cn-YER3QsV1.js";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
- //#region src/components/feedback/MBadge/MBadge.tsx
5
- function i({ color: i = "primary", size: a = "md", hidden: o, pulsing: s = !1, rounded: c = !1, fullWidth: l = !1, icon: u, className: d, children: f, ...p }) {
6
- return /* @__PURE__ */ r("span", {
7
- className: t("badge", `color-${i}`, a, s && "pulsing", c && "rounded", l && "full-width", d),
8
- ...e(o),
9
- ...p,
10
- children: [u && /* @__PURE__ */ n("span", {
11
- className: "badge-icon",
12
- children: u
13
- }), f]
14
- });
15
- }
16
- //#endregion
17
- export { i as t };
18
-
19
- //# sourceMappingURL=MBadge-_BggwkrM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MBadge-_BggwkrM.js","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n hidden,\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAO,EACnB,WAAQ,WACR,UAAO,MACP,WACA,aAAU,IACV,aAAU,IACV,eAAY,IACZ,SACA,cACA,aACA,GAAG,KACS;AACZ,QACI,kBAAC,QAAD;EACI,WAAW,EACP,SACA,SAAS,KACT,GACA,KAAW,WACX,KAAW,WACX,KAAa,cACb,EACH;EACD,GAAI,EAAe,EAAO;EAC1B,GAAI;YAXR,CAaK,KAAQ,kBAAC,QAAD;GAAM,WAAU;aAAc;GAAY,CAAA,EAClD,EACE"}
@@ -1,2 +0,0 @@
1
- const e=require(`./theme-Bb_NAEiZ.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./useInteractionEffect-CtXlbjhC.cjs`);require(`./core-w629c4ND.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=(0,r.createContext)(null);function o(){return(0,r.useContext)(a)}function s({color:e=`primary`,size:n=`md`,label:r=`Loading`,className:a,style:o,...s}){let c=typeof n==`number`?{width:`${n}px`,height:`${n}px`,...o}:o||{};return(0,i.jsx)(`span`,{className:t.t(`spinner`,typeof n==`string`&&n,e&&`color-${e}`,a),style:c,role:`status`,"aria-label":r,...s})}function c(e){return e!=null&&e!==!1}function l({badge:e,badgeColor:t,badgePulsing:n}){return c(e)}function u({badge:e,badgeColor:n=`primary`,badgePulsing:r=!1,className:a}){if(!l({badge:e,badgeColor:n,badgePulsing:r}))return null;let o=e===!0;return(0,i.jsx)(`span`,{className:t.t(`overlay-badge`,`color-${n}`,o&&`dot`,r&&`pulsing`,a),"aria-hidden":`true`,children:o?null:e})}var d=(0,r.forwardRef)(function({component:r,to:a,href:c,variant:l,size:d,color:f,hidden:p,fullWidth:m=!1,rounded:h=!1,shape:g,iconOnly:_=!1,loading:v=!1,active:y=!1,pulsing:b=!1,badge:x,badgeColor:S,badgePulsing:C=!1,startIcon:w,endIcon:T,clickEffect:E=`ripple`,rippleColor:D,className:O,style:k,children:A,disabled:j=!1,type:M=`button`,onClick:N,onPointerDown:P,onKeyDown:F,...I},L){let R=r??`button`,z=!r||R===`button`,B=o(),V=l??B?.variant??`filled`,H=d??B?.size??`md`,U=f??B?.color??`primary`,W=j||v,{effectClassName:G,effectLayer:K,handlePointerDown:q,triggerEffect:J}=n.t({effect:E,disabled:W,centered:_,color:D});function Y(e){if(W&&!z){e.preventDefault();return}N?.(e)}return(0,i.jsxs)(R,{ref:L,type:z?M:void 0,to:r?W?void 0:a:void 0,href:r?W?void 0:c:void 0,className:t.t(`button`,V,H,`color-${U}`,m&&`full-width`,h&&`rounded`,g===`circle`&&`circle`,_&&`icon-only`,v&&`loading`,y&&`active`,b&&`pulsing`,W&&`disabled`,G,O),style:k,disabled:z?W:void 0,"aria-busy":v||void 0,"aria-disabled":!z&&W?!0:void 0,onClick:Y,onPointerDown:e=>{q(e),P?.(e)},onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&J(e.currentTarget),F?.(e)},...e.r(p),...I,children:[K,u({badge:x,badgeColor:S,badgePulsing:C}),v&&(0,i.jsx)(s,{size:`sm`,color:`inherit`,"aria-hidden":`true`}),w&&(0,i.jsx)(`span`,{className:`icon start`,children:w}),A&&(0,i.jsx)(`span`,{className:`content`,children:A}),T&&(0,i.jsx)(`span`,{className:`icon end`,children:T})]})});Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
2
- //# sourceMappingURL=MButton-B9k45kH-.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MButton-B9k45kH-.cjs","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {getHiddenProps} from '../../../theme'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n hidden,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MButton-y9qXhhGt.js","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {getHiddenProps} from '../../../theme'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n hidden,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MDataTable-C3v15no3.cjs","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useCallback, useMemo, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MButton, MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MPopover} from '../../primitives'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon, MFilterIcon, MSortIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nfunction getNestedValue(obj: unknown, key: string): unknown {\n const parts = key.split('.')\n let val: unknown = obj\n\n for (const p of parts) {\n if (val == null || typeof val !== 'object') return undefined\n val = (val as Record<string, unknown>)[p]\n }\n\n return val\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n search: controlledSearch,\n onSearchChange,\n searchKeys,\n filterKeys = [],\n filters: controlledFilters,\n onFiltersChange,\n sortKeys = [],\n page: controlledPage,\n onPageChange,\n total,\n manualSearch = false,\n manualFilters = false,\n manualSort = false,\n manualPagination = false,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [internalFilters, setInternalFilters] = useState<Record<string, string[]>>({})\n const [internalPage, setInternalPage] = useState(1)\n const [filterOpen, setFilterOpen] = useState(false)\n const [sortOpen, setSortOpen] = useState(false)\n const filterBtnRef = useRef<HTMLElement>(null)\n const sortBtnRef = useRef<HTMLElement>(null)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const search = controlledSearch !== undefined ? controlledSearch : internalSearch\n const filters = controlledFilters !== undefined ? controlledFilters : internalFilters\n const page = controlledPage !== undefined ? controlledPage : internalPage\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n const setSearch = useCallback(\n (next: string) => {\n if (controlledSearch === undefined) setInternalSearch(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSearchChange?.(next)\n },\n [controlledSearch, controlledPage, manualPagination, onSearchChange]\n )\n\n const setFilters = useCallback(\n (next: Record<string, string[]>) => {\n if (controlledFilters === undefined) setInternalFilters(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onFiltersChange?.(next)\n },\n [controlledFilters, controlledPage, manualPagination, onFiltersChange]\n )\n\n const setSort = useCallback(\n (next: MDataTableSort | null) => {\n if (controlledSort === undefined) setInternalSort(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSortChange?.(next)\n },\n [controlledSort, controlledPage, manualPagination, onSortChange]\n )\n\n const setPage = useCallback(\n (next: number) => {\n if (controlledPage === undefined) setInternalPage(next)\n onPageChange?.(next)\n },\n [controlledPage, onPageChange]\n )\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n setSort(next)\n }\n\n function toggleFilterValue(key: string, value: string) {\n const current = filters[key] ?? []\n const next = current.includes(value) ? current.filter((item) => item !== value) : [...current, value]\n setFilters({...filters, [key]: next})\n }\n\n const filterOptions = useMemo(() => {\n const map: Record<string, string[]> = {}\n\n for (const filterKey of filterKeys) {\n if (filterKey.options) {\n map[filterKey.key] = filterKey.options\n continue\n }\n\n const values = new Set<string>()\n\n for (const row of data) {\n const value = getNestedValue(row, filterKey.key)\n if (value != null) values.add(String(value))\n }\n\n map[filterKey.key] = Array.from(values).sort()\n }\n\n return map\n }, [data, filterKeys])\n\n const filtered = useMemo(() => {\n let result: T[] = data\n\n if (!manualSearch && filterable && search.trim()) {\n const query = search.toLowerCase()\n\n if (searchKeys && searchKeys.length > 0) {\n result = result.filter((row) =>\n searchKeys.some((key) => {\n const value = getNestedValue(row, key)\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n } else {\n result = result.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }\n }\n\n if (!manualFilters) {\n for (const [key, selectedValues] of Object.entries(filters)) {\n if (!selectedValues || selectedValues.length === 0) continue\n\n result = result.filter((row) => {\n const value = getNestedValue(row, key)\n return value != null && selectedValues.includes(String(value))\n })\n }\n }\n\n return result\n }, [data, manualSearch, manualFilters, filterable, search, searchKeys, columns, filters])\n\n const sorted = useMemo(() => {\n if (manualSort || !activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n const sortKeyAllowed = sortKeys.some((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable && !sortKeyAllowed) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable, sortKeys, manualSort])\n\n const totalItems = manualPagination ? (total ?? sorted.length) : sorted.length\n const totalPages = pagination ? Math.max(1, Math.ceil(totalItems / pageSize)) : 1\n const pageData = useMemo(() => {\n if (!pagination || manualPagination) return sorted\n const start = (page - 1) * pageSize\n return sorted.slice(start, start + pageSize)\n }, [sorted, pagination, manualPagination, page, pageSize])\n\n const allKeys = pageData.map((row, index) => getRowKey(row, (page - 1) * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n const openFilter = useCallback(() => {\n setFilterOpen((v) => !v)\n setSortOpen(false)\n }, [])\n\n const openSort = useCallback(() => {\n setSortOpen((v) => !v)\n setFilterOpen(false)\n }, [])\n\n const activeSortMenuItem = sortKeys.find((item) => item.key === activeSort?.key)\n const showToolbar = filterable || filterKeys.length > 0 || sortKeys.length > 0\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {showToolbar && (\n <div className=\"toolbar\">\n {filterable && (\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n onClear={() => setSearch('')}\n />\n )}\n\n {(filterKeys.length > 0 || sortKeys.length > 0) && (\n <div className=\"toolbar-actions\">\n {filterKeys.length > 0 && (\n <>\n <MButton\n ref={filterBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={<MFilterIcon />}\n aria-expanded={filterOpen}\n onClick={openFilter}\n >\n Filter\n </MButton>\n <MPopover\n open={filterOpen}\n anchorRef={filterBtnRef}\n onClose={() => setFilterOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {filterKeys.map((filterKey) => (\n <div key={filterKey.key} className=\"data-table-filter-group\">\n <span className=\"data-table-filter-label\">{filterKey.label}</span>\n {(filterOptions[filterKey.key] ?? []).map((option) => (\n <div key={option} className=\"data-table-filter-option\">\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n checked={\n filters[filterKey.key]?.includes(option) ?? false\n }\n onChange={() =>\n toggleFilterValue(filterKey.key, option)\n }\n label={option}\n />\n </div>\n ))}\n </div>\n ))}\n </MPopover>\n </>\n )}\n\n {sortKeys.length > 0 && (\n <>\n <MButton\n ref={sortBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={\n activeSort ? (\n activeSort.dir === 'asc' ? (\n <MArrowUpIcon />\n ) : (\n <MArrowDownIcon />\n )\n ) : (\n <MSortIcon />\n )\n }\n aria-expanded={sortOpen}\n onClick={openSort}\n >\n {activeSortMenuItem ? `Sort: ${activeSortMenuItem.label}` : 'Sort'}\n </MButton>\n <MPopover\n open={sortOpen}\n anchorRef={sortBtnRef}\n onClose={() => setSortOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {sortKeys.map((sortItem) => (\n <button\n key={sortItem.key}\n type=\"button\"\n className={cn(\n 'data-table-sort-item',\n activeSort?.key === sortItem.key && 'active'\n )}\n onClick={() => {\n if (activeSort?.key === sortItem.key) {\n setSort({\n key: sortItem.key,\n dir: activeSort.dir === 'asc' ? 'desc' : 'asc',\n })\n } else {\n setSort({key: sortItem.key, dir: 'asc'})\n }\n }}\n >\n {sortItem.label}\n {activeSort?.key === sortItem.key && (\n <span className=\"data-table-sort-dir\">\n {activeSort.dir === 'asc' ? (\n <MArrowUpIcon className=\"data-table-sort-icon\" />\n ) : (\n <MArrowDownIcon className=\"data-table-sort-icon\" />\n )}\n </span>\n )}\n </button>\n ))}\n </MPopover>\n </>\n )}\n </div>\n )}\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, (page - 1) * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, (page - 1) * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination total={totalItems} page={page} pageSize={pageSize} onChange={setPage} />\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MDataTable-C_XiTGTF.js","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useCallback, useMemo, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MButton, MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MPopover} from '../../primitives'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon, MFilterIcon, MSortIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nfunction getNestedValue(obj: unknown, key: string): unknown {\n const parts = key.split('.')\n let val: unknown = obj\n\n for (const p of parts) {\n if (val == null || typeof val !== 'object') return undefined\n val = (val as Record<string, unknown>)[p]\n }\n\n return val\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n search: controlledSearch,\n onSearchChange,\n searchKeys,\n filterKeys = [],\n filters: controlledFilters,\n onFiltersChange,\n sortKeys = [],\n page: controlledPage,\n onPageChange,\n total,\n manualSearch = false,\n manualFilters = false,\n manualSort = false,\n manualPagination = false,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [internalFilters, setInternalFilters] = useState<Record<string, string[]>>({})\n const [internalPage, setInternalPage] = useState(1)\n const [filterOpen, setFilterOpen] = useState(false)\n const [sortOpen, setSortOpen] = useState(false)\n const filterBtnRef = useRef<HTMLElement>(null)\n const sortBtnRef = useRef<HTMLElement>(null)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const search = controlledSearch !== undefined ? controlledSearch : internalSearch\n const filters = controlledFilters !== undefined ? controlledFilters : internalFilters\n const page = controlledPage !== undefined ? controlledPage : internalPage\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n const setSearch = useCallback(\n (next: string) => {\n if (controlledSearch === undefined) setInternalSearch(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSearchChange?.(next)\n },\n [controlledSearch, controlledPage, manualPagination, onSearchChange]\n )\n\n const setFilters = useCallback(\n (next: Record<string, string[]>) => {\n if (controlledFilters === undefined) setInternalFilters(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onFiltersChange?.(next)\n },\n [controlledFilters, controlledPage, manualPagination, onFiltersChange]\n )\n\n const setSort = useCallback(\n (next: MDataTableSort | null) => {\n if (controlledSort === undefined) setInternalSort(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSortChange?.(next)\n },\n [controlledSort, controlledPage, manualPagination, onSortChange]\n )\n\n const setPage = useCallback(\n (next: number) => {\n if (controlledPage === undefined) setInternalPage(next)\n onPageChange?.(next)\n },\n [controlledPage, onPageChange]\n )\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n setSort(next)\n }\n\n function toggleFilterValue(key: string, value: string) {\n const current = filters[key] ?? []\n const next = current.includes(value) ? current.filter((item) => item !== value) : [...current, value]\n setFilters({...filters, [key]: next})\n }\n\n const filterOptions = useMemo(() => {\n const map: Record<string, string[]> = {}\n\n for (const filterKey of filterKeys) {\n if (filterKey.options) {\n map[filterKey.key] = filterKey.options\n continue\n }\n\n const values = new Set<string>()\n\n for (const row of data) {\n const value = getNestedValue(row, filterKey.key)\n if (value != null) values.add(String(value))\n }\n\n map[filterKey.key] = Array.from(values).sort()\n }\n\n return map\n }, [data, filterKeys])\n\n const filtered = useMemo(() => {\n let result: T[] = data\n\n if (!manualSearch && filterable && search.trim()) {\n const query = search.toLowerCase()\n\n if (searchKeys && searchKeys.length > 0) {\n result = result.filter((row) =>\n searchKeys.some((key) => {\n const value = getNestedValue(row, key)\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n } else {\n result = result.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }\n }\n\n if (!manualFilters) {\n for (const [key, selectedValues] of Object.entries(filters)) {\n if (!selectedValues || selectedValues.length === 0) continue\n\n result = result.filter((row) => {\n const value = getNestedValue(row, key)\n return value != null && selectedValues.includes(String(value))\n })\n }\n }\n\n return result\n }, [data, manualSearch, manualFilters, filterable, search, searchKeys, columns, filters])\n\n const sorted = useMemo(() => {\n if (manualSort || !activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n const sortKeyAllowed = sortKeys.some((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable && !sortKeyAllowed) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable, sortKeys, manualSort])\n\n const totalItems = manualPagination ? (total ?? sorted.length) : sorted.length\n const totalPages = pagination ? Math.max(1, Math.ceil(totalItems / pageSize)) : 1\n const pageData = useMemo(() => {\n if (!pagination || manualPagination) return sorted\n const start = (page - 1) * pageSize\n return sorted.slice(start, start + pageSize)\n }, [sorted, pagination, manualPagination, page, pageSize])\n\n const allKeys = pageData.map((row, index) => getRowKey(row, (page - 1) * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n const openFilter = useCallback(() => {\n setFilterOpen((v) => !v)\n setSortOpen(false)\n }, [])\n\n const openSort = useCallback(() => {\n setSortOpen((v) => !v)\n setFilterOpen(false)\n }, [])\n\n const activeSortMenuItem = sortKeys.find((item) => item.key === activeSort?.key)\n const showToolbar = filterable || filterKeys.length > 0 || sortKeys.length > 0\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {showToolbar && (\n <div className=\"toolbar\">\n {filterable && (\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n onClear={() => setSearch('')}\n />\n )}\n\n {(filterKeys.length > 0 || sortKeys.length > 0) && (\n <div className=\"toolbar-actions\">\n {filterKeys.length > 0 && (\n <>\n <MButton\n ref={filterBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={<MFilterIcon />}\n aria-expanded={filterOpen}\n onClick={openFilter}\n >\n Filter\n </MButton>\n <MPopover\n open={filterOpen}\n anchorRef={filterBtnRef}\n onClose={() => setFilterOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {filterKeys.map((filterKey) => (\n <div key={filterKey.key} className=\"data-table-filter-group\">\n <span className=\"data-table-filter-label\">{filterKey.label}</span>\n {(filterOptions[filterKey.key] ?? []).map((option) => (\n <div key={option} className=\"data-table-filter-option\">\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n checked={\n filters[filterKey.key]?.includes(option) ?? false\n }\n onChange={() =>\n toggleFilterValue(filterKey.key, option)\n }\n label={option}\n />\n </div>\n ))}\n </div>\n ))}\n </MPopover>\n </>\n )}\n\n {sortKeys.length > 0 && (\n <>\n <MButton\n ref={sortBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={\n activeSort ? (\n activeSort.dir === 'asc' ? (\n <MArrowUpIcon />\n ) : (\n <MArrowDownIcon />\n )\n ) : (\n <MSortIcon />\n )\n }\n aria-expanded={sortOpen}\n onClick={openSort}\n >\n {activeSortMenuItem ? `Sort: ${activeSortMenuItem.label}` : 'Sort'}\n </MButton>\n <MPopover\n open={sortOpen}\n anchorRef={sortBtnRef}\n onClose={() => setSortOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {sortKeys.map((sortItem) => (\n <button\n key={sortItem.key}\n type=\"button\"\n className={cn(\n 'data-table-sort-item',\n activeSort?.key === sortItem.key && 'active'\n )}\n onClick={() => {\n if (activeSort?.key === sortItem.key) {\n setSort({\n key: sortItem.key,\n dir: activeSort.dir === 'asc' ? 'desc' : 'asc',\n })\n } else {\n setSort({key: sortItem.key, dir: 'asc'})\n }\n }}\n >\n {sortItem.label}\n {activeSort?.key === sortItem.key && (\n <span className=\"data-table-sort-dir\">\n {activeSort.dir === 'asc' ? (\n <MArrowUpIcon className=\"data-table-sort-icon\" />\n ) : (\n <MArrowDownIcon className=\"data-table-sort-icon\" />\n )}\n </span>\n )}\n </button>\n ))}\n </MPopover>\n </>\n )}\n </div>\n )}\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, (page - 1) * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, (page - 1) * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination total={totalItems} page={page} pageSize={pageSize} onChange={setPage} />\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MImage-I0LPhcqF.js","names":[],"sources":["../src/components/media/MMediaLightbox/MMediaLightbox.tsx","../src/components/media/mediaPreviewRegistry.ts","../src/components/media/mediaInteraction.ts","../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useEffect, useRef} from 'react'\nimport type {MouseEvent} from 'react'\nimport {MButton} from '../../controls'\nimport {MBadge} from '../../feedback'\nimport {MPortal} from '../../primitives'\nimport {MCloseIcon, MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MMediaLightbox.css'\n\nexport interface MMediaLightboxItem {\n src: string\n alt?: string\n caption?: string\n}\n\ninterface MMediaLightboxProps {\n open: boolean\n items: MMediaLightboxItem[]\n activeIndex: number\n onClose: () => void\n onActiveIndexChange: (index: number) => void\n}\n\nexport function MMediaLightbox({open, items, activeIndex, onClose, onActiveIndexChange}: MMediaLightboxProps) {\n const currentItem = items[activeIndex]\n const frameRef = useRef<HTMLDivElement | null>(null)\n const canGoPrev = activeIndex > 0\n const canGoNext = activeIndex < items.length - 1\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose()\n return\n }\n\n if (event.key === 'ArrowLeft' && canGoPrev) {\n onActiveIndexChange(activeIndex - 1)\n }\n\n if (event.key === 'ArrowRight' && canGoNext) {\n onActiveIndexChange(activeIndex + 1)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [activeIndex, canGoNext, canGoPrev, onActiveIndexChange, onClose, open])\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [open])\n\n if (!open || !currentItem) {\n return null\n }\n\n const handleBackdropMouseDown = (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as Node | null\n\n if (target && frameRef.current && !frameRef.current.contains(target)) {\n onClose()\n }\n }\n\n const previewLabel = currentItem.alt || currentItem.caption || 'Image preview'\n\n return (\n <MPortal>\n <div className={cn('mineral-backdrop', 'media-lightbox-backdrop')} onMouseDown={handleBackdropMouseDown}>\n <div className=\"media-lightbox-shell\" role=\"dialog\" aria-modal=\"true\" aria-label={previewLabel}>\n <div className=\"media-lightbox-stage\">\n <div ref={frameRef} className=\"media-lightbox-frame\">\n <div className=\"media-lightbox-topbar\">\n <MBadge color=\"dark\" size=\"sm\" rounded className=\"media-lightbox-counter\">\n {items.length > 1 ? `${activeIndex + 1} / ${items.length}` : 'Preview'}\n </MBadge>\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"primary\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-action\"\n aria-label=\"Close preview\"\n onClick={onClose}\n >\n <MCloseIcon />\n </MButton>\n </div>\n\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"primary\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-nav media-lightbox-nav-prev\"\n aria-label=\"Previous image\"\n disabled={items.length <= 1 || !canGoPrev}\n onClick={() => canGoPrev && onActiveIndexChange(activeIndex - 1)}\n >\n <MChevronLeftIcon />\n </MButton>\n\n <img className=\"media-lightbox-image\" src={currentItem.src} alt={currentItem.alt || ''} />\n\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"primary\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-nav media-lightbox-nav-next\"\n aria-label=\"Next image\"\n disabled={items.length <= 1 || !canGoNext}\n onClick={() => canGoNext && onActiveIndexChange(activeIndex + 1)}\n >\n <MChevronRightIcon />\n </MButton>\n\n {currentItem.caption || currentItem.alt ? (\n <MBadge color=\"dark\" size=\"sm\" rounded className=\"media-lightbox-caption\">\n {currentItem.caption || currentItem.alt}\n </MBadge>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n </MPortal>\n )\n}\n","import type {MMediaLightboxItem} from './MMediaLightbox/MMediaLightbox'\n\ninterface MMediaPreviewRegistryItem extends MMediaLightboxItem {\n id: string\n}\n\nconst previewGroups = new Map<string, Map<string, MMediaPreviewRegistryItem>>()\n\nexport function registerMediaPreviewItem(group: string, id: string, item: MMediaLightboxItem) {\n let groupItems = previewGroups.get(group)\n\n if (!groupItems) {\n groupItems = new Map()\n previewGroups.set(group, groupItems)\n }\n\n groupItems.set(id, {id, ...item})\n\n return () => {\n const currentGroupItems = previewGroups.get(group)\n if (!currentGroupItems) {\n return\n }\n\n currentGroupItems.delete(id)\n\n if (currentGroupItems.size === 0) {\n previewGroups.delete(group)\n }\n }\n}\n\nexport function getMediaPreviewGroupItems(group: string) {\n return Array.from(previewGroups.get(group)?.values() ?? [])\n}\n","import type {MClickEffect} from '../../utils/useInteractionEffect'\n\nexport type MMediaInteractionEffect = MClickEffect | 'zoom' | 'dim' | 'zoom-ripple'\nexport type MMediaHoverEffect = 'none' | 'zoom' | 'dim' | 'zoom-dim'\n\nexport function usesRipple(effect: MMediaInteractionEffect): boolean {\n return effect === 'ripple' || effect === 'zoom-ripple'\n}\n\nexport function usesZoom(effect: MMediaInteractionEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-ripple'\n}\n\nexport function usesDim(effect: MMediaInteractionEffect): boolean {\n return effect === 'dim'\n}\n\nexport function usesHoverZoom(effect: MMediaHoverEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-dim'\n}\n\nexport function usesHoverDim(effect: MMediaHoverEffect): boolean {\n return effect === 'dim' || effect === 'zoom-dim'\n}\n","import {useEffect, useId, useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MImageProps, MImageSize} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport {MMediaLightbox} from '../MMediaLightbox/MMediaLightbox'\nimport {getMediaPreviewGroupItems, registerMediaPreviewItem} from '../mediaPreviewRegistry'\nimport {usesHoverDim, usesHoverZoom} from '../mediaInteraction'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\nfunction toCssSize(value: MImageSize | undefined): string | undefined {\n if (value == null) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n src,\n fit = 'cover',\n ratio = 'auto',\n width,\n height,\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n preview = false,\n previewGroup,\n hoverEffect = 'none',\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const [previewOpen, setPreviewOpen] = useState(false)\n const [previewItems, setPreviewItems] = useState<Array<{src: string; alt?: string; caption?: string}>>([])\n const [previewIndex, setPreviewIndex] = useState(0)\n const previewId = useId()\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const widthValue = toCssSize(width)\n const heightValue = toCssSize(height)\n const hasExplicitSize = widthValue != null || heightValue != null\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const sizeStyle: CSSProperties = {}\n if (widthValue != null) sizeStyle.width = widthValue\n if (heightValue != null) sizeStyle.height = heightValue\n const ratioStyle: CSSProperties = {\n ...style,\n ...(hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio]} : null),\n ...sizeStyle,\n }\n const resolvedSrc = errored && fallback ? fallback : src\n const previewItem = useMemo(\n () => ({\n src: resolvedSrc || '',\n alt: alt ?? '',\n caption: typeof rest.title === 'string' ? rest.title : undefined,\n }),\n [alt, resolvedSrc, rest.title]\n )\n\n useEffect(() => {\n if (!preview || !previewGroup || !resolvedSrc) {\n return\n }\n\n return registerMediaPreviewItem(previewGroup, previewId, previewItem)\n }, [preview, previewGroup, previewId, previewItem, resolvedSrc])\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const openPreview = () => {\n if (!preview || !resolvedSrc) {\n return\n }\n\n if (previewGroup) {\n const groupItems = getMediaPreviewGroupItems(previewGroup)\n const currentIndex = groupItems.findIndex((item) => item.id === previewId)\n\n if (groupItems.length > 0 && currentIndex >= 0) {\n setPreviewItems(groupItems.map(({id, ...item}) => item))\n setPreviewIndex(currentIndex)\n setPreviewOpen(true)\n return\n }\n }\n\n setPreviewItems([previewItem])\n setPreviewIndex(0)\n setPreviewOpen(true)\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n const usesWrapper = hasFixedRatio || hasExplicitSize || Boolean(effectLayer) || preview || hoverEffect !== 'none'\n const wrapperClassName = cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n hasExplicitSize && 'has-size',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n preview && 'preview',\n usesHoverZoom(hoverEffect) && 'effect-zoom',\n usesHoverDim(hoverEffect) && 'effect-dim',\n effectClassName,\n className\n )\n const imageNode = <img className={imgClassName} onError={handleError} src={resolvedSrc} {...rest} alt={alt ?? ''} />\n\n if (usesWrapper) {\n return (\n <>\n {preview ? (\n <button\n type=\"button\"\n className={cn(wrapperClassName, 'image-button')}\n aria-label={`Preview ${alt || 'image'}`}\n onClick={openPreview}\n onPointerDown={effectLayer ? handlePointerDown : undefined}\n disabled={!resolvedSrc}\n {...getHiddenProps(hidden)}\n style={ratioStyle}\n >\n {effectLayer}\n {imageNode}\n </button>\n ) : (\n <span\n className={wrapperClassName}\n onPointerDown={effectLayer ? handlePointerDown : undefined}\n {...getHiddenProps(hidden)}\n style={ratioStyle}\n >\n {effectLayer}\n {imageNode}\n </span>\n )}\n\n <MMediaLightbox\n open={previewOpen}\n items={previewItems}\n activeIndex={previewIndex}\n onActiveIndexChange={setPreviewIndex}\n onClose={() => setPreviewOpen(false)}\n />\n </>\n )\n }\n\n return (\n <>\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n src={resolvedSrc}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n\n <MMediaLightbox\n open={previewOpen}\n items={previewItems}\n activeIndex={previewIndex}\n onActiveIndexChange={setPreviewIndex}\n onClose={() => setPreviewOpen(false)}\n />\n </>\n )\n}\n"],"mappings":"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"}