@banzamel/mineralui 1.6.2 → 1.6.3

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 (441) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-CnBVN71i.js → MAvatar-BHASnoyu.js} +5 -5
  3. package/dist/{MAvatar-CnBVN71i.js.map → MAvatar-BHASnoyu.js.map} +1 -1
  4. package/dist/MAvatar-BVJh6kgW.cjs +2 -0
  5. package/dist/{MAvatar-DGEQqUss.cjs.map → MAvatar-BVJh6kgW.cjs.map} +1 -1
  6. package/dist/MBadge-B4x-Lx7e.cjs +2 -0
  7. package/dist/{MBadge-DcIPfPH1.cjs.map → MBadge-B4x-Lx7e.cjs.map} +1 -1
  8. package/dist/{MBadge-C_vK2JdM.js → MBadge-_BggwkrM.js} +3 -3
  9. package/dist/{MBadge-C_vK2JdM.js.map → MBadge-_BggwkrM.js.map} +1 -1
  10. package/dist/MButton-DrkVdRDy.cjs +2 -0
  11. package/dist/{MButton-LUNWBBOV.cjs.map → MButton-DrkVdRDy.cjs.map} +1 -1
  12. package/dist/{MButton-BpSZUhpY.js → MButton-y9qXhhGt.js} +4 -4
  13. package/dist/{MButton-BpSZUhpY.js.map → MButton-y9qXhhGt.js.map} +1 -1
  14. package/dist/{MCheckbox-CNz73bQC.js → MCheckbox-B-nT2OBE.js} +3 -3
  15. package/dist/{MCheckbox-CNz73bQC.js.map → MCheckbox-B-nT2OBE.js.map} +1 -1
  16. package/dist/MCheckbox-C40ESQRe.cjs +2 -0
  17. package/dist/{MCheckbox-PzknJeM2.cjs.map → MCheckbox-C40ESQRe.cjs.map} +1 -1
  18. package/dist/{MCookieBootstrap-DSOT4FQo.cjs → MCookieBootstrap-3-wyz3Dk.cjs} +1 -1
  19. package/dist/{MCookieBootstrap-DSOT4FQo.cjs.map → MCookieBootstrap-3-wyz3Dk.cjs.map} +1 -1
  20. package/dist/{MCookieBootstrap-CNYLvKjW.js → MCookieBootstrap-CGvYxIK8.js} +1 -1
  21. package/dist/{MCookieBootstrap-CNYLvKjW.js.map → MCookieBootstrap-CGvYxIK8.js.map} +1 -1
  22. package/dist/MDataTable-Bx7W-Ari.cjs +2 -0
  23. package/dist/{MDataTable-Bq6UoNJX.cjs.map → MDataTable-Bx7W-Ari.cjs.map} +1 -1
  24. package/dist/{MDataTable-AH5Tnirs.js → MDataTable-ByvNQqNP.js} +6 -6
  25. package/dist/{MDataTable-AH5Tnirs.js.map → MDataTable-ByvNQqNP.js.map} +1 -1
  26. package/dist/MDrawer-DFkrFrnD.cjs +2 -0
  27. package/dist/{MDrawer-DRqMsjMt.cjs.map → MDrawer-DFkrFrnD.cjs.map} +1 -1
  28. package/dist/{MDrawer-C08QXXC4.js → MDrawer-W2WQs1sM.js} +5 -5
  29. package/dist/{MDrawer-C08QXXC4.js.map → MDrawer-W2WQs1sM.js.map} +1 -1
  30. package/dist/MDropdownMenu-BmfXSc46.cjs +2 -0
  31. package/dist/{MDropdownMenu-CymCQqyP.cjs.map → MDropdownMenu-BmfXSc46.cjs.map} +1 -1
  32. package/dist/{MDropdownMenu-CMnBt-wO.js → MDropdownMenu-D79Cm5aS.js} +4 -4
  33. package/dist/{MDropdownMenu-CMnBt-wO.js.map → MDropdownMenu-D79Cm5aS.js.map} +1 -1
  34. package/dist/MGalleryIllustration-BB3DoCl_.cjs +2 -0
  35. package/dist/{MGalleryIllustration-BHtRFizZ.cjs.map → MGalleryIllustration-BB3DoCl_.cjs.map} +1 -1
  36. package/dist/{MGalleryIllustration-DhOtXwhC.js → MGalleryIllustration-D7CVMSwO.js} +2 -2
  37. package/dist/{MGalleryIllustration-DhOtXwhC.js.map → MGalleryIllustration-D7CVMSwO.js.map} +1 -1
  38. package/dist/MHeading-BhCNoJeW.cjs +2 -0
  39. package/dist/{MHeading-DHT1gORD.cjs.map → MHeading-BhCNoJeW.cjs.map} +1 -1
  40. package/dist/{MHeading-BvpWyvjj.js → MHeading-MPh8Qm9q.js} +4 -4
  41. package/dist/{MHeading-BvpWyvjj.js.map → MHeading-MPh8Qm9q.js.map} +1 -1
  42. package/dist/MI18nProvider-B2sE0x5D.cjs +2 -0
  43. package/dist/{MI18nProvider-Bml7Vs2-.cjs.map → MI18nProvider-B2sE0x5D.cjs.map} +1 -1
  44. package/dist/{MI18nProvider-BRZxEMqL.js → MI18nProvider-VH14CI8u.js} +1 -1
  45. package/dist/{MI18nProvider-BRZxEMqL.js.map → MI18nProvider-VH14CI8u.js.map} +1 -1
  46. package/dist/MImage-L_zgfWRY.cjs +2 -0
  47. package/dist/{MImage-CxeuH-cT.cjs.map → MImage-L_zgfWRY.cjs.map} +1 -1
  48. package/dist/{MImage-BQs91GK-.js → MImage-gwFphZk2.js} +9 -9
  49. package/dist/{MImage-BQs91GK-.js.map → MImage-gwFphZk2.js.map} +1 -1
  50. package/dist/MInline-CHrh3PHH.cjs +2 -0
  51. package/dist/{MInline-D9p9Sazp.cjs.map → MInline-CHrh3PHH.cjs.map} +1 -1
  52. package/dist/{MInline-DA_ehefx.js → MInline-CoMhfX5V.js} +4 -4
  53. package/dist/{MInline-DA_ehefx.js.map → MInline-CoMhfX5V.js.map} +1 -1
  54. package/dist/MInput-DYqV3-rQ.cjs +2 -0
  55. package/dist/{MInput-DDZ71Qqn.cjs.map → MInput-DYqV3-rQ.cjs.map} +1 -1
  56. package/dist/{MInput-l3MY93Su.js → MInput-bzSwK880.js} +6 -6
  57. package/dist/{MInput-l3MY93Su.js.map → MInput-bzSwK880.js.map} +1 -1
  58. package/dist/MInputCVC-5NkYSxV8.cjs +2 -0
  59. package/dist/{MInputCVC-Sp2uZ5aO.cjs.map → MInputCVC-5NkYSxV8.cjs.map} +1 -1
  60. package/dist/{MInputCVC-CN91scmw.js → MInputCVC-BHpMHTO5.js} +5 -5
  61. package/dist/{MInputCVC-CN91scmw.js.map → MInputCVC-BHpMHTO5.js.map} +1 -1
  62. package/dist/MInputSearch-DfoenJIm.cjs +2 -0
  63. package/dist/{MInputSearch-30o4bcDC.cjs.map → MInputSearch-DfoenJIm.cjs.map} +1 -1
  64. package/dist/{MInputSearch-CdPfJ4v_.js → MInputSearch-Dh4C3Tz5.js} +4 -4
  65. package/dist/{MInputSearch-CdPfJ4v_.js.map → MInputSearch-Dh4C3Tz5.js.map} +1 -1
  66. package/dist/MLink-CY45UR_j.cjs +2 -0
  67. package/dist/{MLink-U_wAUuz1.cjs.map → MLink-CY45UR_j.cjs.map} +1 -1
  68. package/dist/{MLink-CRUWGES-.js → MLink-rFKN1mcM.js} +3 -3
  69. package/dist/{MLink-CRUWGES-.js.map → MLink-rFKN1mcM.js.map} +1 -1
  70. package/dist/{MModal-CHSo5gKE.js → MModal-BDTAgnrm.js} +4 -4
  71. package/dist/{MModal-CHSo5gKE.js.map → MModal-BDTAgnrm.js.map} +1 -1
  72. package/dist/MModal-DT5BBgNZ.cjs +2 -0
  73. package/dist/{MModal-Czy-rR--.cjs.map → MModal-DT5BBgNZ.cjs.map} +1 -1
  74. package/dist/{MPagination-DdT1uNzD.js → MPagination-CTnaW5AW.js} +4 -4
  75. package/dist/{MPagination-DdT1uNzD.js.map → MPagination-CTnaW5AW.js.map} +1 -1
  76. package/dist/MPagination-CZEJMJzZ.cjs +2 -0
  77. package/dist/{MPagination-73z0sQvf.cjs.map → MPagination-CZEJMJzZ.cjs.map} +1 -1
  78. package/dist/MPopover-B4IUb9f0.cjs +2 -0
  79. package/dist/{MPopover-BW23_1Dl.cjs.map → MPopover-B4IUb9f0.cjs.map} +1 -1
  80. package/dist/{MPopover-3tjz5lKh.js → MPopover-Cqz5TsHg.js} +3 -3
  81. package/dist/{MPopover-3tjz5lKh.js.map → MPopover-Cqz5TsHg.js.map} +1 -1
  82. package/dist/{MPortal-Dqlkh3hw.js → MPortal-Ba2Sxset.js} +1 -1
  83. package/dist/{MPortal-Dqlkh3hw.js.map → MPortal-Ba2Sxset.js.map} +1 -1
  84. package/dist/MPortal-Bi24xTGW.cjs +2 -0
  85. package/dist/{MPortal-DE3pL2Xl.cjs.map → MPortal-Bi24xTGW.cjs.map} +1 -1
  86. package/dist/MQrCode-ByfmG33y.cjs +2 -0
  87. package/dist/{MQrCode-CMoru4dD.cjs.map → MQrCode-ByfmG33y.cjs.map} +1 -1
  88. package/dist/{MQrCode-DK5-SBhN.js → MQrCode-CCtTkkv9.js} +4 -4
  89. package/dist/{MQrCode-DK5-SBhN.js.map → MQrCode-CCtTkkv9.js.map} +1 -1
  90. package/dist/MSkeleton-5j1h9s95.cjs +2 -0
  91. package/dist/{MSkeleton-B0Mxe3L7.cjs.map → MSkeleton-5j1h9s95.cjs.map} +1 -1
  92. package/dist/{MSkeleton-Bqq_XJn8.js → MSkeleton-DGhtNmpI.js} +4 -4
  93. package/dist/{MSkeleton-Bqq_XJn8.js.map → MSkeleton-DGhtNmpI.js.map} +1 -1
  94. package/dist/{MSlider-ByVuoFFc.js → MSlider-5141rKeH.js} +2 -2
  95. package/dist/{MSlider-ByVuoFFc.js.map → MSlider-5141rKeH.js.map} +1 -1
  96. package/dist/MSlider-Ch3VjAJC.cjs +2 -0
  97. package/dist/{MSlider-sH2Vt9Lw.cjs.map → MSlider-Ch3VjAJC.cjs.map} +1 -1
  98. package/dist/MSparkline-B6qpt5WM.cjs +2 -0
  99. package/dist/{MSparkline-B-ld7hJu.cjs.map → MSparkline-B6qpt5WM.cjs.map} +1 -1
  100. package/dist/{MSparkline-DbtdM0W6.js → MSparkline-voNWOLNz.js} +2 -2
  101. package/dist/{MSparkline-DbtdM0W6.js.map → MSparkline-voNWOLNz.js.map} +1 -1
  102. package/dist/MStack-Bh-R2opf.cjs +2 -0
  103. package/dist/{MStack-Cy2GplIA.cjs.map → MStack-Bh-R2opf.cjs.map} +1 -1
  104. package/dist/{MStack-BWarX5O9.js → MStack-CSaEbepM.js} +4 -4
  105. package/dist/{MStack-BWarX5O9.js.map → MStack-CSaEbepM.js.map} +1 -1
  106. package/dist/{MSubText-C9VizSn9.js → MSubText-BFdfBlpS.js} +4 -4
  107. package/dist/{MSubText-C9VizSn9.js.map → MSubText-BFdfBlpS.js.map} +1 -1
  108. package/dist/MSubText-C-70zn0m.cjs +2 -0
  109. package/dist/{MSubText-DP9WYlwz.cjs.map → MSubText-C-70zn0m.cjs.map} +1 -1
  110. package/dist/MSurface-CpiV1-7f.cjs +2 -0
  111. package/dist/{MSurface-C467dVMQ.cjs.map → MSurface-CpiV1-7f.cjs.map} +1 -1
  112. package/dist/{MSurface-DfZ1Zy1-.js → MSurface-DJYSftdM.js} +4 -4
  113. package/dist/{MSurface-DfZ1Zy1-.js.map → MSurface-DJYSftdM.js.map} +1 -1
  114. package/dist/{MTag-N-tYZ915.js → MTag-CH5nMbm7.js} +5 -5
  115. package/dist/{MTag-N-tYZ915.js.map → MTag-CH5nMbm7.js.map} +1 -1
  116. package/dist/MTag-Y4Tswmli.cjs +2 -0
  117. package/dist/{MTag-DXqkBvqx.cjs.map → MTag-Y4Tswmli.cjs.map} +1 -1
  118. package/dist/MText-DEJddMB5.cjs +2 -0
  119. package/dist/{MText-COzub3y4.cjs.map → MText-DEJddMB5.cjs.map} +1 -1
  120. package/dist/{MText-B7_HjPym.js → MText-DcB1GAt-.js} +4 -4
  121. package/dist/{MText-B7_HjPym.js.map → MText-DcB1GAt-.js.map} +1 -1
  122. package/dist/{MTimeAgo-D1G2yovw.js → MTimeAgo-C4p80NvI.js} +4 -4
  123. package/dist/{MTimeAgo-D1G2yovw.js.map → MTimeAgo-C4p80NvI.js.map} +1 -1
  124. package/dist/MTimeAgo-DxZGVo2Y.cjs +2 -0
  125. package/dist/{MTimeAgo-DWwXs48z.cjs.map → MTimeAgo-DxZGVo2Y.cjs.map} +1 -1
  126. package/dist/MToggle-C8vYRzpC.cjs +2 -0
  127. package/dist/{MToggle-Cm3f6gm4.cjs.map → MToggle-C8vYRzpC.cjs.map} +1 -1
  128. package/dist/{MToggle-D0DrQirB.js → MToggle-Dt1Ctr5e.js} +3 -3
  129. package/dist/{MToggle-D0DrQirB.js.map → MToggle-Dt1Ctr5e.js.map} +1 -1
  130. package/dist/{MTooltip-w6Aj044c.js → MTooltip-C43aUKMP.js} +3 -3
  131. package/dist/{MTooltip-w6Aj044c.js.map → MTooltip-C43aUKMP.js.map} +1 -1
  132. package/dist/MTooltip-kSTMMpvu.cjs +2 -0
  133. package/dist/{MTooltip-C3PeHgV3.cjs.map → MTooltip-kSTMMpvu.cjs.map} +1 -1
  134. package/dist/arduino-CXUo7Bjy.cjs +2 -0
  135. package/dist/arduino-CXUo7Bjy.cjs.map +1 -0
  136. package/dist/arduino-Eif5KI8O.js +261 -0
  137. package/dist/arduino-Eif5KI8O.js.map +1 -0
  138. package/dist/bash-CCF_TYbb.js +171 -0
  139. package/dist/bash-CCF_TYbb.js.map +1 -0
  140. package/dist/bash-W4h3o_nx.cjs +2 -0
  141. package/dist/bash-W4h3o_nx.cjs.map +1 -0
  142. package/dist/c-DVgkp6T3.js +178 -0
  143. package/dist/c-DVgkp6T3.js.map +1 -0
  144. package/dist/c-Dm60JY-W.cjs +2 -0
  145. package/dist/c-Dm60JY-W.cjs.map +1 -0
  146. package/dist/cards-BiYdorB0.cjs +2 -0
  147. package/dist/{cards-B75QM9JW.cjs.map → cards-BiYdorB0.cjs.map} +1 -1
  148. package/dist/{cards-BKi8MxNx.js → cards-fn61xD_5.js} +17 -17
  149. package/dist/{cards-BKi8MxNx.js.map → cards-fn61xD_5.js.map} +1 -1
  150. package/dist/cards.cjs +1 -1
  151. package/dist/cards.js +2 -2
  152. package/dist/{cn-DYFxgzi2.cjs → cn-CU5TNITO.cjs} +1 -1
  153. package/dist/{cn-DYFxgzi2.cjs.map → cn-CU5TNITO.cjs.map} +1 -1
  154. package/dist/{cn-CUSXNnjF.js → cn-YER3QsV1.js} +1 -1
  155. package/dist/{cn-CUSXNnjF.js.map → cn-YER3QsV1.js.map} +1 -1
  156. package/dist/controls-C5PtrGZf.cjs +2 -0
  157. package/dist/{controls-B7wV_kjJ.cjs.map → controls-C5PtrGZf.cjs.map} +1 -1
  158. package/dist/{controls-BEi-0mf4.js → controls-DCtMOoQe.js} +6 -6
  159. package/dist/{controls-BEi-0mf4.js.map → controls-DCtMOoQe.js.map} +1 -1
  160. package/dist/controls.cjs +1 -1
  161. package/dist/controls.js +5 -5
  162. package/dist/cookie-consent-bootstrap.cjs +1 -1
  163. package/dist/cookie-consent-bootstrap.js +1 -1
  164. package/dist/core-AKWkE8Bx.cjs +4 -0
  165. package/dist/core-AKWkE8Bx.cjs.map +1 -0
  166. package/dist/core-CB9-PTLK.js +854 -0
  167. package/dist/core-CB9-PTLK.js.map +1 -0
  168. package/dist/cpp-DyKt1H8n.cjs +2 -0
  169. package/dist/cpp-DyKt1H8n.cjs.map +1 -0
  170. package/dist/cpp-OOenfB17.js +227 -0
  171. package/dist/cpp-OOenfB17.js.map +1 -0
  172. package/dist/{creditCards-BB11bW7D.js → creditCards-CCysEwry.js} +1 -1
  173. package/dist/{creditCards-BB11bW7D.js.map → creditCards-CCysEwry.js.map} +1 -1
  174. package/dist/{creditCards-198KJN0s.cjs → creditCards-ljs044xt.cjs} +1 -1
  175. package/dist/{creditCards-198KJN0s.cjs.map → creditCards-ljs044xt.cjs.map} +1 -1
  176. package/dist/css-DxVbPJLu.cjs +2 -0
  177. package/dist/css-DxVbPJLu.cjs.map +1 -0
  178. package/dist/css-u5LSEAra.js +142 -0
  179. package/dist/css-u5LSEAra.js.map +1 -0
  180. package/dist/data-Bw9FSZ80.cjs +2 -0
  181. package/dist/{data-DHkccnSN.cjs.map → data-Bw9FSZ80.cjs.map} +1 -1
  182. package/dist/{data-DKrj_Hx6.js → data-CMSIr_Ac.js} +24 -24
  183. package/dist/{data-DKrj_Hx6.js.map → data-CMSIr_Ac.js.map} +1 -1
  184. package/dist/data.cjs +1 -1
  185. package/dist/data.js +3 -3
  186. package/dist/{dateUtils-Ben8lfvV.js → dateUtils-CUY6CRCf.js} +1 -1
  187. package/dist/{dateUtils-Ben8lfvV.js.map → dateUtils-CUY6CRCf.js.map} +1 -1
  188. package/dist/{dateUtils-vT9rOf1J.cjs → dateUtils-Dq1vaA-D.cjs} +1 -1
  189. package/dist/{dateUtils-vT9rOf1J.cjs.map → dateUtils-Dq1vaA-D.cjs.map} +1 -1
  190. package/dist/display-BafEcBK_.cjs +3 -0
  191. package/dist/display-BafEcBK_.cjs.map +1 -0
  192. package/dist/{display-rQqBLjAN.js → display-Zxj9YHu_.js} +196 -179
  193. package/dist/display-Zxj9YHu_.js.map +1 -0
  194. package/dist/display.cjs +1 -1
  195. package/dist/display.js +3 -3
  196. package/dist/{dropdowns-BKnXb1XJ.js → dropdowns-Bw8obCYl.js} +15 -15
  197. package/dist/{dropdowns-BKnXb1XJ.js.map → dropdowns-Bw8obCYl.js.map} +1 -1
  198. package/dist/dropdowns-DN7j1HhE.cjs +2 -0
  199. package/dist/{dropdowns-cRrLY8FG.cjs.map → dropdowns-DN7j1HhE.cjs.map} +1 -1
  200. package/dist/dropdowns.cjs +1 -1
  201. package/dist/dropdowns.js +1 -1
  202. package/dist/{feedback-CIXmm0XT.js → feedback-8H3bmQw5.js} +18 -18
  203. package/dist/{feedback-CIXmm0XT.js.map → feedback-8H3bmQw5.js.map} +1 -1
  204. package/dist/feedback-Di0SEpRe.cjs +2 -0
  205. package/dist/{feedback-DiMptPJy.cjs.map → feedback-Di0SEpRe.cjs.map} +1 -1
  206. package/dist/feedback.cjs +1 -1
  207. package/dist/feedback.js +6 -6
  208. package/dist/form-BYz99Py5.cjs +2 -0
  209. package/dist/{form-DABPazeN.cjs.map → form-BYz99Py5.cjs.map} +1 -1
  210. package/dist/{form-DZJxDW59.js → form-JHlvtP9r.js} +2 -2
  211. package/dist/{form-DZJxDW59.js.map → form-JHlvtP9r.js.map} +1 -1
  212. package/dist/form.cjs +1 -1
  213. package/dist/form.js +1 -1
  214. package/dist/{formatters-CauWlsnM.cjs → formatters-CNjg_h7-.cjs} +1 -1
  215. package/dist/{formatters-CauWlsnM.cjs.map → formatters-CNjg_h7-.cjs.map} +1 -1
  216. package/dist/{formatters-Doqdu_w1.js → formatters-T0vvjMtB.js} +1 -1
  217. package/dist/{formatters-Doqdu_w1.js.map → formatters-T0vvjMtB.js.map} +1 -1
  218. package/dist/{frameworkTexts-DzujbRBe.js → frameworkTexts-CvxcWRXp.js} +2 -2
  219. package/dist/{frameworkTexts-DzujbRBe.js.map → frameworkTexts-CvxcWRXp.js.map} +1 -1
  220. package/dist/frameworkTexts-abkS5XZK.cjs +2 -0
  221. package/dist/{frameworkTexts-DPX5T2x3.cjs.map → frameworkTexts-abkS5XZK.cjs.map} +1 -1
  222. package/dist/i18n.cjs +1 -1
  223. package/dist/i18n.js +1 -1
  224. package/dist/{icons-DlNO04xH.js → icons-CfpYxnfg.js} +1 -1
  225. package/dist/{icons-DlNO04xH.js.map → icons-CfpYxnfg.js.map} +1 -1
  226. package/dist/icons-DWMgDKgt.cjs +2 -0
  227. package/dist/{icons-BJCV7W0L.cjs.map → icons-DWMgDKgt.cjs.map} +1 -1
  228. package/dist/icons.cjs +1 -1
  229. package/dist/icons.js +1 -1
  230. package/dist/illustrations.cjs +1 -1
  231. package/dist/illustrations.js +1 -1
  232. package/dist/index.cjs +1 -1
  233. package/dist/index.js +57 -57
  234. package/dist/{inputs-CmpB6eyB.js → inputs-Bcwd_UTr.js} +12 -12
  235. package/dist/{inputs-CmpB6eyB.js.map → inputs-Bcwd_UTr.js.map} +1 -1
  236. package/dist/inputs-FP545Yri.cjs +2 -0
  237. package/dist/{inputs-EZBwxk7j.cjs.map → inputs-FP545Yri.cjs.map} +1 -1
  238. package/dist/inputs.cjs +1 -1
  239. package/dist/inputs.js +4 -4
  240. package/dist/javascript-CXjsxb-I.js +438 -0
  241. package/dist/javascript-CXjsxb-I.js.map +1 -0
  242. package/dist/javascript-CzjCTQxn.cjs +2 -0
  243. package/dist/javascript-CzjCTQxn.cjs.map +1 -0
  244. package/dist/json-9Qq5guN0.cjs +2 -0
  245. package/dist/json-9Qq5guN0.cjs.map +1 -0
  246. package/dist/json-CyV5VF8D.js +38 -0
  247. package/dist/json-CyV5VF8D.js.map +1 -0
  248. package/dist/{layout-D72Y7VcW.js → layout-BpEnTocp.js} +11 -11
  249. package/dist/{layout-D72Y7VcW.js.map → layout-BpEnTocp.js.map} +1 -1
  250. package/dist/layout-rtlHrjDb.cjs +2 -0
  251. package/dist/{layout-DZiWboju.cjs.map → layout-rtlHrjDb.cjs.map} +1 -1
  252. package/dist/layout.cjs +1 -1
  253. package/dist/layout.js +5 -5
  254. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
  255. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
  256. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
  257. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
  258. package/dist/{licensing-Cbpi1toF.js → licensing-CwzqhHH9.js} +1 -1
  259. package/dist/{licensing-Cbpi1toF.js.map → licensing-CwzqhHH9.js.map} +1 -1
  260. package/dist/licensing-ezfo7ZTh.cjs +2 -0
  261. package/dist/{licensing-JchPJhVY.cjs.map → licensing-ezfo7ZTh.cjs.map} +1 -1
  262. package/dist/locale-CZyqh3ON.cjs +2 -0
  263. package/dist/{locale-DIwV_GfN.cjs.map → locale-CZyqh3ON.cjs.map} +1 -1
  264. package/dist/{locale-BNyzqXAU.js → locale-JX_gX03k.js} +1 -1
  265. package/dist/{locale-BNyzqXAU.js.map → locale-JX_gX03k.js.map} +1 -1
  266. package/dist/{media-BlGY91Na.js → media-C3M0npGW.js} +9 -9
  267. package/dist/{media-BlGY91Na.js.map → media-C3M0npGW.js.map} +1 -1
  268. package/dist/media-ClgUKDca.cjs +2 -0
  269. package/dist/{media-p643cb02.cjs.map → media-ClgUKDca.cjs.map} +1 -1
  270. package/dist/media.cjs +1 -1
  271. package/dist/media.js +3 -3
  272. package/dist/{overlays-51pBvlf9.js → overlays-CGlqD3rl.js} +7 -7
  273. package/dist/{overlays-51pBvlf9.js.map → overlays-CGlqD3rl.js.map} +1 -1
  274. package/dist/overlays-DrSGzbbA.cjs +2 -0
  275. package/dist/{overlays-8htlWp07.cjs.map → overlays-DrSGzbbA.cjs.map} +1 -1
  276. package/dist/overlays.cjs +1 -1
  277. package/dist/overlays.js +5 -5
  278. package/dist/php-Br75m0HU.cjs +3 -0
  279. package/dist/php-Br75m0HU.cjs.map +1 -0
  280. package/dist/php-deNqvHeU.js +296 -0
  281. package/dist/php-deNqvHeU.js.map +1 -0
  282. package/dist/primitives.cjs +1 -1
  283. package/dist/primitives.js +2 -2
  284. package/dist/{relativeTime-BqCuaBqb.js → relativeTime-Cr-NVzij.js} +1 -1
  285. package/dist/{relativeTime-BqCuaBqb.js.map → relativeTime-Cr-NVzij.js.map} +1 -1
  286. package/dist/{relativeTime-DUbW4O44.cjs → relativeTime-DgYBUaVm.cjs} +1 -1
  287. package/dist/{relativeTime-DUbW4O44.cjs.map → relativeTime-DgYBUaVm.cjs.map} +1 -1
  288. package/dist/style-runtime.cjs +1 -1
  289. package/dist/style-runtime.js +1 -1
  290. package/dist/styles.css +1 -1
  291. package/dist/theme-CgS-bND3.cjs +2 -0
  292. package/dist/{theme-Bnwe-wvr.cjs.map → theme-CgS-bND3.cjs.map} +1 -1
  293. package/dist/{theme-KYwqDZxJ.js → theme-D_f-cmSA.js} +1 -1
  294. package/dist/{theme-KYwqDZxJ.js.map → theme-D_f-cmSA.js.map} +1 -1
  295. package/dist/theme.cjs +1 -1
  296. package/dist/theme.js +1 -1
  297. package/dist/typescript-CRgqVaw_.cjs +2 -0
  298. package/dist/typescript-CRgqVaw_.cjs.map +1 -0
  299. package/dist/typescript-jNfCpQvl.js +523 -0
  300. package/dist/typescript-jNfCpQvl.js.map +1 -0
  301. package/dist/{typography-FCWA0UOB.js → typography-BSBsn0f8.js} +3 -3
  302. package/dist/{typography-FCWA0UOB.js.map → typography-BSBsn0f8.js.map} +1 -1
  303. package/dist/typography-Zo4Usx9I.cjs +2 -0
  304. package/dist/{typography-D1s-QFlb.cjs.map → typography-Zo4Usx9I.cjs.map} +1 -1
  305. package/dist/typography.cjs +1 -1
  306. package/dist/typography.js +5 -5
  307. package/dist/{useGhostText-BJZKdZpw.js → useGhostText-DG0bzcao.js} +1 -1
  308. package/dist/{useGhostText-BJZKdZpw.js.map → useGhostText-DG0bzcao.js.map} +1 -1
  309. package/dist/useGhostText-tv1LiSPs.cjs +2 -0
  310. package/dist/{useGhostText-D1DbIs-n.cjs.map → useGhostText-tv1LiSPs.cjs.map} +1 -1
  311. package/dist/useInteractionEffect-D1ZdNbKU.cjs +2 -0
  312. package/dist/{useInteractionEffect-CYHGHV1e.cjs.map → useInteractionEffect-D1ZdNbKU.cjs.map} +1 -1
  313. package/dist/{useInteractionEffect-ClkU3aH5.js → useInteractionEffect-DtpbVd77.js} +1 -1
  314. package/dist/{useInteractionEffect-ClkU3aH5.js.map → useInteractionEffect-DtpbVd77.js.map} +1 -1
  315. package/dist/useKeyboardNav-CkIlAagq.cjs +2 -0
  316. package/dist/{useKeyboardNav-BoibrRUF.cjs.map → useKeyboardNav-CkIlAagq.cjs.map} +1 -1
  317. package/dist/{useKeyboardNav-CBOdeTFM.js → useKeyboardNav-iEXOdEMB.js} +1 -1
  318. package/dist/{useKeyboardNav-CBOdeTFM.js.map → useKeyboardNav-iEXOdEMB.js.map} +1 -1
  319. package/dist/utils.cjs +1 -1
  320. package/dist/utils.js +10 -10
  321. package/dist/{validators-D4aTeaH0.cjs → validators-BeNTD8mf.cjs} +1 -1
  322. package/dist/{validators-D4aTeaH0.cjs.map → validators-BeNTD8mf.cjs.map} +1 -1
  323. package/dist/{validators-YZyyyLvE.js → validators-H8tNxb8O.js} +1 -1
  324. package/dist/{validators-YZyyyLvE.js.map → validators-H8tNxb8O.js.map} +1 -1
  325. package/dist/xml-0Th6YIDv.js +168 -0
  326. package/dist/xml-0Th6YIDv.js.map +1 -0
  327. package/dist/xml-C_ksWBRH.cjs +2 -0
  328. package/dist/xml-C_ksWBRH.cjs.map +1 -0
  329. package/package.json +2 -2
  330. package/dist/MAvatar-DGEQqUss.cjs +0 -2
  331. package/dist/MBadge-DcIPfPH1.cjs +0 -2
  332. package/dist/MButton-LUNWBBOV.cjs +0 -2
  333. package/dist/MCheckbox-PzknJeM2.cjs +0 -2
  334. package/dist/MDataTable-Bq6UoNJX.cjs +0 -2
  335. package/dist/MDrawer-DRqMsjMt.cjs +0 -2
  336. package/dist/MDropdownMenu-CymCQqyP.cjs +0 -2
  337. package/dist/MGalleryIllustration-BHtRFizZ.cjs +0 -2
  338. package/dist/MHeading-DHT1gORD.cjs +0 -2
  339. package/dist/MI18nProvider-Bml7Vs2-.cjs +0 -2
  340. package/dist/MImage-CxeuH-cT.cjs +0 -2
  341. package/dist/MInline-D9p9Sazp.cjs +0 -2
  342. package/dist/MInput-DDZ71Qqn.cjs +0 -2
  343. package/dist/MInputCVC-Sp2uZ5aO.cjs +0 -2
  344. package/dist/MInputSearch-30o4bcDC.cjs +0 -2
  345. package/dist/MLink-U_wAUuz1.cjs +0 -2
  346. package/dist/MModal-Czy-rR--.cjs +0 -2
  347. package/dist/MPagination-73z0sQvf.cjs +0 -2
  348. package/dist/MPopover-BW23_1Dl.cjs +0 -2
  349. package/dist/MPortal-DE3pL2Xl.cjs +0 -2
  350. package/dist/MQrCode-CMoru4dD.cjs +0 -2
  351. package/dist/MSkeleton-B0Mxe3L7.cjs +0 -2
  352. package/dist/MSlider-sH2Vt9Lw.cjs +0 -2
  353. package/dist/MSparkline-B-ld7hJu.cjs +0 -2
  354. package/dist/MStack-Cy2GplIA.cjs +0 -2
  355. package/dist/MSubText-DP9WYlwz.cjs +0 -2
  356. package/dist/MSurface-C467dVMQ.cjs +0 -2
  357. package/dist/MTag-DXqkBvqx.cjs +0 -2
  358. package/dist/MText-COzub3y4.cjs +0 -2
  359. package/dist/MTimeAgo-DWwXs48z.cjs +0 -2
  360. package/dist/MToggle-Cm3f6gm4.cjs +0 -2
  361. package/dist/MTooltip-C3PeHgV3.cjs +0 -2
  362. package/dist/cards-B75QM9JW.cjs +0 -2
  363. package/dist/chunk-350yNsax.cjs +0 -1
  364. package/dist/chunk-efA98nb6.js +0 -13
  365. package/dist/controls-B7wV_kjJ.cjs +0 -2
  366. package/dist/data-DHkccnSN.cjs +0 -2
  367. package/dist/display-DKJ6Hp3A.cjs +0 -3
  368. package/dist/display-DKJ6Hp3A.cjs.map +0 -1
  369. package/dist/display-rQqBLjAN.js.map +0 -1
  370. package/dist/dropdowns-cRrLY8FG.cjs +0 -2
  371. package/dist/feedback-DiMptPJy.cjs +0 -2
  372. package/dist/form-DABPazeN.cjs +0 -2
  373. package/dist/frameworkTexts-DPX5T2x3.cjs +0 -2
  374. package/dist/icons-BJCV7W0L.cjs +0 -2
  375. package/dist/inputs-EZBwxk7j.cjs +0 -2
  376. package/dist/layout-DZiWboju.cjs +0 -2
  377. package/dist/licensing-JchPJhVY.cjs +0 -2
  378. package/dist/locale-DIwV_GfN.cjs +0 -2
  379. package/dist/media-p643cb02.cjs +0 -2
  380. package/dist/overlays-8htlWp07.cjs +0 -2
  381. package/dist/prism-bash-DSVvpDwH.cjs +0 -2
  382. package/dist/prism-bash-DSVvpDwH.cjs.map +0 -1
  383. package/dist/prism-bash-GQKgVScr.js +0 -177
  384. package/dist/prism-bash-GQKgVScr.js.map +0 -1
  385. package/dist/prism-c-DBlZetAm.js +0 -56
  386. package/dist/prism-c-DBlZetAm.js.map +0 -1
  387. package/dist/prism-c-DwJ0sL1f.cjs +0 -2
  388. package/dist/prism-c-DwJ0sL1f.cjs.map +0 -1
  389. package/dist/prism-clike-BHy7LBAZ.cjs +0 -2
  390. package/dist/prism-clike-BHy7LBAZ.cjs.map +0 -1
  391. package/dist/prism-clike-CrtZga9r.js +0 -30
  392. package/dist/prism-clike-CrtZga9r.js.map +0 -1
  393. package/dist/prism-core-DsZQ3wSm.js +0 -299
  394. package/dist/prism-core-DsZQ3wSm.js.map +0 -1
  395. package/dist/prism-core-Z2NDHfPM.cjs +0 -2
  396. package/dist/prism-core-Z2NDHfPM.cjs.map +0 -1
  397. package/dist/prism-cpp-CXyjGEks.cjs +0 -2
  398. package/dist/prism-cpp-CXyjGEks.cjs.map +0 -1
  399. package/dist/prism-cpp-DerVaWjZ.js +0 -65
  400. package/dist/prism-cpp-DerVaWjZ.js.map +0 -1
  401. package/dist/prism-css-Bx_bUmkm.js +0 -57
  402. package/dist/prism-css-Bx_bUmkm.js.map +0 -1
  403. package/dist/prism-css-q8i9Tl0Y.cjs +0 -2
  404. package/dist/prism-css-q8i9Tl0Y.cjs.map +0 -1
  405. package/dist/prism-javascript-CC_WcCH4.cjs +0 -2
  406. package/dist/prism-javascript-CC_WcCH4.cjs.map +0 -1
  407. package/dist/prism-javascript-uSHTlCK6.js +0 -103
  408. package/dist/prism-javascript-uSHTlCK6.js.map +0 -1
  409. package/dist/prism-json-CRpBxccA.js +0 -27
  410. package/dist/prism-json-CRpBxccA.js.map +0 -1
  411. package/dist/prism-json-CvwHQDim.cjs +0 -2
  412. package/dist/prism-json-CvwHQDim.cjs.map +0 -1
  413. package/dist/prism-jsx-CSsxTxi5.js +0 -48
  414. package/dist/prism-jsx-CSsxTxi5.js.map +0 -1
  415. package/dist/prism-jsx-ZJAX6mJe.cjs +0 -2
  416. package/dist/prism-jsx-ZJAX6mJe.cjs.map +0 -1
  417. package/dist/prism-markup-Cc4COxfn.js +0 -118
  418. package/dist/prism-markup-Cc4COxfn.js.map +0 -1
  419. package/dist/prism-markup-RTw80xRC.cjs +0 -2
  420. package/dist/prism-markup-RTw80xRC.cjs.map +0 -1
  421. package/dist/prism-markup-templating-CylI3Gpj.cjs +0 -2
  422. package/dist/prism-markup-templating-CylI3Gpj.cjs.map +0 -1
  423. package/dist/prism-markup-templating-D4w8OHUw.js +0 -41
  424. package/dist/prism-markup-templating-D4w8OHUw.js.map +0 -1
  425. package/dist/prism-php-CMZ7fRp0.cjs +0 -2
  426. package/dist/prism-php-CMZ7fRp0.cjs.map +0 -1
  427. package/dist/prism-php-nJ_CzHXP.js +0 -279
  428. package/dist/prism-php-nJ_CzHXP.js.map +0 -1
  429. package/dist/prism-tsx-CvHlXV3S.cjs +0 -2
  430. package/dist/prism-tsx-CvHlXV3S.cjs.map +0 -1
  431. package/dist/prism-tsx-UlwV29L3.js +0 -10
  432. package/dist/prism-tsx-UlwV29L3.js.map +0 -1
  433. package/dist/prism-typescript-BA7hsZPZ.js +0 -40
  434. package/dist/prism-typescript-BA7hsZPZ.js.map +0 -1
  435. package/dist/prism-typescript-CDAVIXup.cjs +0 -2
  436. package/dist/prism-typescript-CDAVIXup.cjs.map +0 -1
  437. package/dist/theme-Bnwe-wvr.cjs +0 -2
  438. package/dist/typography-D1s-QFlb.cjs +0 -2
  439. package/dist/useGhostText-D1DbIs-n.cjs +0 -2
  440. package/dist/useInteractionEffect-CYHGHV1e.cjs +0 -2
  441. package/dist/useKeyboardNav-BoibrRUF.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"MQrCode-DK5-SBhN.js","names":[],"sources":["../src/components/display/MRating/MRating.tsx","../src/components/display/MQrCode/MQrCode.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type {MRatingProps} from './MRating.types'\nimport {MStarFillIcon, MStarIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MRating.css'\n\n// Render an interactive star-based rating control.\nexport function MRating({\n value = 0,\n max = 5,\n color = 'warning',\n size = 'md',\n readOnly = false,\n onChange,\n className,\n ...rest\n}: MRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null)\n const displayValue = hovered ?? value\n\n const handleClick = (index: number) => {\n if (readOnly) return\n onChange?.(index)\n }\n\n return (\n <div\n className={cn('rating', `color-${color}`, size, readOnly && 'read-only', className)}\n role=\"radiogroup\"\n aria-label=\"MRating\"\n onMouseLeave={() => setHovered(null)}\n {...rest}\n >\n {Array.from({length: max}, (_, i) => {\n const starIndex = i + 1\n const filled = displayValue >= starIndex\n return (\n <button\n key={i}\n type=\"button\"\n className=\"rating-star\"\n onClick={() => handleClick(starIndex)}\n onMouseEnter={() => !readOnly && setHovered(starIndex)}\n aria-label={`${starIndex} star${starIndex > 1 ? 's' : ''}`}\n tabIndex={readOnly ? -1 : 0}\n disabled={readOnly}\n >\n <span className=\"star-icon\" aria-hidden=\"true\">\n {filled ? <MStarFillIcon /> : <MStarIcon />}\n </span>\n </button>\n )\n })}\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MQrCodeProps} from './MQrCode.types'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls/MButton'\nimport {MErrorIcon, MSuccessIcon} from '../../../icons'\nimport './MQrCode.css'\n\ntype VersionInfo = {\n version: number\n size: number\n dataWords: number\n ecWords: number\n byteLimit: number\n align: number[]\n}\n\nconst versions: VersionInfo[] = [\n {version: 1, size: 21, dataWords: 19, ecWords: 7, byteLimit: 17, align: []},\n {version: 2, size: 25, dataWords: 34, ecWords: 10, byteLimit: 32, align: [6, 18]},\n {version: 3, size: 29, dataWords: 55, ecWords: 15, byteLimit: 53, align: [6, 22]},\n {version: 4, size: 33, dataWords: 80, ecWords: 20, byteLimit: 78, align: [6, 26]},\n {version: 5, size: 37, dataWords: 108, ecWords: 26, byteLimit: 106, align: [6, 30]},\n]\n\nconst formatBits = [\n '111011111000100',\n '111001011110011',\n '111110110101010',\n '111100010011101',\n '110011000101111',\n '110001100011000',\n '110110001000001',\n '110100101110110',\n]\n\nconst expTable = new Array<number>(512).fill(0)\nconst logTable = new Array<number>(256).fill(0)\nconst encoder = new TextEncoder()\n\nlet fieldReady = false\n\n// Prepare log/exp lookup tables for QR Reed-Solomon math.\nfunction ensureField() {\n if (fieldReady) return\n\n let value = 1\n\n for (let i = 0; i < 255; i += 1) {\n expTable[i] = value\n logTable[value] = i\n value <<= 1\n\n if (value & 0x100) {\n value ^= 0x11d\n }\n }\n\n for (let i = 255; i < 512; i += 1) {\n expTable[i] = expTable[i - 255]\n }\n\n fieldReady = true\n}\n\n// Multiply two values inside the QR Galois field.\nfunction gfMul(a: number, b: number) {\n if (!a || !b) return 0\n ensureField()\n return expTable[logTable[a] + logTable[b]]\n}\n\n// Multiply generator polynomials used for error correction.\nfunction polyMul(left: number[], right: number[]) {\n const next = new Array(left.length + right.length - 1).fill(0)\n\n for (let row = 0; row < left.length; row += 1) {\n for (let col = 0; col < right.length; col += 1) {\n next[row + col] ^= gfMul(left[row], right[col])\n }\n }\n\n return next\n}\n\n// Build the generator polynomial for the chosen correction size.\nfunction makeGenerator(ecWords: number) {\n ensureField()\n\n let poly = [1]\n\n for (let i = 0; i < ecWords; i += 1) {\n poly = polyMul(poly, [1, expTable[i]])\n }\n\n return poly\n}\n\n// Compute Reed-Solomon error words for the current payload.\nfunction makeErrorWords(data: number[], ecWords: number) {\n const poly = makeGenerator(ecWords)\n const work = [...data, ...new Array(ecWords).fill(0)]\n\n for (let i = 0; i < data.length; i += 1) {\n const factor = work[i]\n\n if (!factor) continue\n\n for (let j = 0; j < poly.length; j += 1) {\n work[i + j] ^= gfMul(poly[j], factor)\n }\n }\n\n return work.slice(-ecWords)\n}\n\n// Push bits in MSB order so QR payload building stays explicit.\nfunction pushBits(target: number[], value: number, size: number) {\n for (let bit = size - 1; bit >= 0; bit -= 1) {\n target.push((value >> bit) & 1)\n }\n}\n\n// Repack a flat bit list into QR codewords.\nfunction bitsToBytes(bits: number[]) {\n const bytes: number[] = []\n\n for (let i = 0; i < bits.length; i += 8) {\n let byte = 0\n\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (bits[i + bit] ?? 0)\n }\n\n bytes.push(byte)\n }\n\n return bytes\n}\n\n// Pick the smallest supported QR version for the payload.\nfunction pickVersion(length: number) {\n return versions.find((item) => length <= item.byteLimit) ?? null\n}\n\n// Encode a string as byte mode payload plus correction words.\nfunction encodeData(value: string, info: VersionInfo) {\n const data = Array.from(encoder.encode(value))\n const bits: number[] = []\n const capacity = info.dataWords * 8\n\n pushBits(bits, 0b0100, 4)\n pushBits(bits, data.length, 8)\n\n data.forEach((byte) => pushBits(bits, byte, 8))\n\n pushBits(bits, 0, Math.min(4, capacity - bits.length))\n\n while (bits.length % 8 !== 0) {\n bits.push(0)\n }\n\n const pads = [0xec, 0x11]\n\n for (let i = 0; bits.length < capacity; i += 1) {\n pushBits(bits, pads[i % 2], 8)\n }\n\n const dataWords = bitsToBytes(bits)\n return [...dataWords, ...makeErrorWords(dataWords, info.ecWords)]\n}\n\n// Create an empty matrix before function patterns are placed.\nfunction makeGrid(size: number) {\n return Array.from({length: size}, () => Array<boolean | null>(size).fill(null))\n}\n\n// Write a module and mark it as reserved.\nfunction setCell(grid: (boolean | null)[][], marks: boolean[][], row: number, col: number, dark: boolean) {\n if (row < 0 || col < 0 || row >= grid.length || col >= grid.length) return\n grid[row][col] = dark\n marks[row][col] = true\n}\n\n// Place one finder pattern with its quiet white border.\nfunction placeFinder(grid: (boolean | null)[][], marks: boolean[][], top: number, left: number) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const edge = row === -1 || row === 7 || col === -1 || col === 7\n const outer = row === 0 || row === 6 || col === 0 || col === 6\n const inner = row >= 2 && row <= 4 && col >= 2 && col <= 4\n setCell(grid, marks, top + row, left + col, !edge && (outer || inner))\n }\n }\n}\n\n// Place one alignment pattern unless another function block already owns it.\nfunction placeAlign(grid: (boolean | null)[][], marks: boolean[][], center: number, middle: number) {\n if (marks[center][middle]) return\n\n for (let row = -2; row <= 2; row += 1) {\n for (let col = -2; col <= 2; col += 1) {\n const edge = Math.max(Math.abs(row), Math.abs(col)) === 2\n const dot = row === 0 && col === 0\n setCell(grid, marks, center + row, middle + col, edge || dot)\n }\n }\n}\n\n// Reserve format info cells before data placement starts.\nfunction markFormat(marks: boolean[][]) {\n const size = marks.length\n const left = [\n [8, 0],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 4],\n [8, 5],\n [8, 7],\n [8, 8],\n [7, 8],\n [5, 8],\n [4, 8],\n [3, 8],\n [2, 8],\n [1, 8],\n [0, 8],\n ]\n const right = [\n [size - 1, 8],\n [size - 2, 8],\n [size - 3, 8],\n [size - 4, 8],\n [size - 5, 8],\n [size - 6, 8],\n [size - 7, 8],\n [8, size - 8],\n [8, size - 7],\n [8, size - 6],\n [8, size - 5],\n [8, size - 4],\n [8, size - 3],\n [8, size - 2],\n [8, size - 1],\n ]\n\n ;[...left, ...right].forEach(([row, col]) => {\n marks[row][col] = true\n })\n}\n\n// Build the static QR scaffolding: finders, timing and align blocks.\nfunction makeBase(info: VersionInfo) {\n const grid = makeGrid(info.size)\n const marks = Array.from({length: info.size}, () => Array<boolean>(info.size).fill(false))\n\n placeFinder(grid, marks, 0, 0)\n placeFinder(grid, marks, 0, info.size - 7)\n placeFinder(grid, marks, info.size - 7, 0)\n\n for (let i = 8; i < info.size - 8; i += 1) {\n setCell(grid, marks, 6, i, i % 2 === 0)\n setCell(grid, marks, i, 6, i % 2 === 0)\n }\n\n info.align.forEach((row) => {\n info.align.forEach((col) => {\n placeAlign(grid, marks, row, col)\n })\n })\n\n markFormat(marks)\n setCell(grid, marks, info.version * 4 + 9, 8, true)\n\n return {grid, marks}\n}\n\n// Fill open cells with payload bits using the QR zig-zag path.\nfunction placeData(grid: (boolean | null)[][], marks: boolean[][], words: number[]) {\n const size = grid.length\n const bits: number[] = []\n\n words.forEach((word) => pushBits(bits, word, 8))\n\n let index = 0\n let up = true\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) {\n col -= 1\n }\n\n let row = up ? size - 1 : 0\n\n while (row >= 0 && row < size) {\n for (let offset = 0; offset < 2; offset += 1) {\n const x = col - offset\n\n if (marks[row][x]) continue\n\n grid[row][x] = bits[index] === 1\n index += 1\n }\n\n row += up ? -1 : 1\n }\n\n up = !up\n }\n\n for (let row = 0; row < size; row += 1) {\n for (let col = 0; col < size; col += 1) {\n if (!marks[row][col] && grid[row][col] == null) {\n grid[row][col] = false\n }\n }\n }\n}\n\n// Check whether the current mask flips this module.\nfunction shouldFlip(mask: number, row: number, col: number) {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0\n case 1:\n return row % 2 === 0\n case 2:\n return col % 3 === 0\n case 3:\n return (row + col) % 3 === 0\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0\n case 7:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0\n default:\n return false\n }\n}\n\n// Apply one mask while leaving reserved cells untouched.\nfunction applyMask(grid: (boolean | null)[][], marks: boolean[][], mask: number) {\n return grid.map((line, row) =>\n line.map((cell, col) => {\n if (marks[row][col]) return Boolean(cell)\n return shouldFlip(mask, row, col) ? !cell : Boolean(cell)\n })\n )\n}\n\n// Write format bits into both reserved format strips.\nfunction withFormat(grid: boolean[][], mask: number) {\n const size = grid.length\n const bits = formatBits[mask]\n const left = [\n [8, 0],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 4],\n [8, 5],\n [8, 7],\n [8, 8],\n [7, 8],\n [5, 8],\n [4, 8],\n [3, 8],\n [2, 8],\n [1, 8],\n [0, 8],\n ]\n const right = [\n [size - 1, 8],\n [size - 2, 8],\n [size - 3, 8],\n [size - 4, 8],\n [size - 5, 8],\n [size - 6, 8],\n [size - 7, 8],\n [8, size - 8],\n [8, size - 7],\n [8, size - 6],\n [8, size - 5],\n [8, size - 4],\n [8, size - 3],\n [8, size - 2],\n [8, size - 1],\n ]\n const next = grid.map((line) => [...line])\n\n bits.split('').forEach((bit, index) => {\n const dark = bit === '1'\n const [leftRow, leftCol] = left[index]\n const [rightRow, rightCol] = right[index]\n\n next[leftRow][leftCol] = dark\n next[rightRow][rightCol] = dark\n })\n\n return next\n}\n\n// Penalize long runs of the same color.\nfunction runPenalty(values: boolean[]) {\n let score = 0\n let run = 1\n\n for (let i = 1; i <= values.length; i += 1) {\n if (values[i] === values[i - 1]) {\n run += 1\n continue\n }\n\n if (run >= 5) {\n score += run - 2\n }\n\n run = 1\n }\n\n return score\n}\n\n// Penalize large flat blocks that scan poorly.\nfunction blockPenalty(grid: boolean[][]) {\n let score = 0\n\n for (let row = 0; row < grid.length - 1; row += 1) {\n for (let col = 0; col < grid.length - 1; col += 1) {\n const cell = grid[row][col]\n\n if (cell === grid[row][col + 1] && cell === grid[row + 1][col] && cell === grid[row + 1][col + 1]) {\n score += 3\n }\n }\n }\n\n return score\n}\n\n// Penalize patterns that look too similar to finder markers.\nfunction finderPenalty(values: boolean[]) {\n const matchA = '10111010000'\n const matchB = '00001011101'\n let score = 0\n\n for (let i = 0; i <= values.length - 11; i += 1) {\n const slice = values\n .slice(i, i + 11)\n .map((cell) => (cell ? '1' : '0'))\n .join('')\n\n if (slice === matchA || slice === matchB) {\n score += 40\n }\n }\n\n return score\n}\n\n// Keep the dark/light balance near the QR target.\nfunction ratioPenalty(grid: boolean[][]) {\n const total = grid.length * grid.length\n const dark = grid.flat().filter(Boolean).length\n const ratio = (dark * 100) / total\n return Math.floor(Math.abs(ratio - 50) / 5) * 10\n}\n\n// Sum the standard QR penalties for one candidate matrix.\nfunction getPenalty(grid: boolean[][]) {\n let score = 0\n\n for (let row = 0; row < grid.length; row += 1) {\n score += runPenalty(grid[row])\n score += finderPenalty(grid[row])\n }\n\n for (let col = 0; col < grid.length; col += 1) {\n const line = grid.map((row) => row[col])\n score += runPenalty(line)\n score += finderPenalty(line)\n }\n\n score += blockPenalty(grid)\n score += ratioPenalty(grid)\n\n return score\n}\n\n// Build the final matrix and pick the mask with the lowest penalty.\nfunction makeMatrix(value: string) {\n const data = Array.from(encoder.encode(value))\n const info = pickVersion(data.length)\n\n if (!info) {\n return null\n }\n\n const {grid, marks} = makeBase(info)\n placeData(grid, marks, encodeData(value, info))\n\n let bestMask = 0\n let bestGrid = withFormat(applyMask(grid, marks, 0), 0)\n let bestScore = getPenalty(bestGrid)\n\n for (let mask = 1; mask < 8; mask += 1) {\n const masked = withFormat(applyMask(grid, marks, mask), mask)\n const score = getPenalty(masked)\n\n if (score < bestScore) {\n bestMask = mask\n bestGrid = masked\n bestScore = score\n }\n }\n\n return {grid: bestGrid, mask: bestMask}\n}\n\n// Render a local SVG QR code without adding a runtime dependency.\nexport function MQrCode({\n value,\n size = 144,\n padding = 4,\n fg = '#111827',\n bg = '#ffffff',\n status = 'idle',\n statusLabel,\n className,\n style,\n ...rest\n}: MQrCodeProps) {\n const qr = makeMatrix(value)\n\n if (!qr) {\n return null\n }\n\n const dimension = qr.grid.length + padding * 2\n const nextStyle = {\n '--qr-size': `${size}px`,\n ...style,\n } as CSSProperties\n const statusColor = status === 'success' ? 'success' : status === 'error' ? 'error' : 'primary'\n\n return (\n <div\n className={cn('qr-code', status !== 'idle' && `status-${status}`, className)}\n style={nextStyle}\n aria-busy={status === 'loading' || undefined}\n {...rest}\n >\n <svg\n className={cn(status !== 'idle' && 'dimmed')}\n viewBox={`0 0 ${dimension} ${dimension}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"QR code\"\n >\n <rect width={dimension} height={dimension} fill={bg} />\n {qr.grid.map((line, row) =>\n line.map((cell, col) =>\n cell ? (\n <rect\n key={`${row}-${col}`}\n x={col + padding}\n y={row + padding}\n width=\"1\"\n height=\"1\"\n fill={fg}\n />\n ) : null\n )\n )}\n </svg>\n {status !== 'idle' && (\n <div className=\"qr-status-center\" aria-label={statusLabel ?? `QR code ${status}`} role=\"status\">\n {status === 'loading' ? (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n loading\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n />\n ) : status === 'success' ? (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n >\n <MSuccessIcon />\n </MButton>\n ) : (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n >\n <MErrorIcon />\n </MButton>\n )}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MQrCode-CCtTkkv9.js","names":[],"sources":["../src/components/display/MRating/MRating.tsx","../src/components/display/MQrCode/MQrCode.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type {MRatingProps} from './MRating.types'\nimport {MStarFillIcon, MStarIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MRating.css'\n\n// Render an interactive star-based rating control.\nexport function MRating({\n value = 0,\n max = 5,\n color = 'warning',\n size = 'md',\n readOnly = false,\n onChange,\n className,\n ...rest\n}: MRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null)\n const displayValue = hovered ?? value\n\n const handleClick = (index: number) => {\n if (readOnly) return\n onChange?.(index)\n }\n\n return (\n <div\n className={cn('rating', `color-${color}`, size, readOnly && 'read-only', className)}\n role=\"radiogroup\"\n aria-label=\"MRating\"\n onMouseLeave={() => setHovered(null)}\n {...rest}\n >\n {Array.from({length: max}, (_, i) => {\n const starIndex = i + 1\n const filled = displayValue >= starIndex\n return (\n <button\n key={i}\n type=\"button\"\n className=\"rating-star\"\n onClick={() => handleClick(starIndex)}\n onMouseEnter={() => !readOnly && setHovered(starIndex)}\n aria-label={`${starIndex} star${starIndex > 1 ? 's' : ''}`}\n tabIndex={readOnly ? -1 : 0}\n disabled={readOnly}\n >\n <span className=\"star-icon\" aria-hidden=\"true\">\n {filled ? <MStarFillIcon /> : <MStarIcon />}\n </span>\n </button>\n )\n })}\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MQrCodeProps} from './MQrCode.types'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls/MButton'\nimport {MErrorIcon, MSuccessIcon} from '../../../icons'\nimport './MQrCode.css'\n\ntype VersionInfo = {\n version: number\n size: number\n dataWords: number\n ecWords: number\n byteLimit: number\n align: number[]\n}\n\nconst versions: VersionInfo[] = [\n {version: 1, size: 21, dataWords: 19, ecWords: 7, byteLimit: 17, align: []},\n {version: 2, size: 25, dataWords: 34, ecWords: 10, byteLimit: 32, align: [6, 18]},\n {version: 3, size: 29, dataWords: 55, ecWords: 15, byteLimit: 53, align: [6, 22]},\n {version: 4, size: 33, dataWords: 80, ecWords: 20, byteLimit: 78, align: [6, 26]},\n {version: 5, size: 37, dataWords: 108, ecWords: 26, byteLimit: 106, align: [6, 30]},\n]\n\nconst formatBits = [\n '111011111000100',\n '111001011110011',\n '111110110101010',\n '111100010011101',\n '110011000101111',\n '110001100011000',\n '110110001000001',\n '110100101110110',\n]\n\nconst expTable = new Array<number>(512).fill(0)\nconst logTable = new Array<number>(256).fill(0)\nconst encoder = new TextEncoder()\n\nlet fieldReady = false\n\n// Prepare log/exp lookup tables for QR Reed-Solomon math.\nfunction ensureField() {\n if (fieldReady) return\n\n let value = 1\n\n for (let i = 0; i < 255; i += 1) {\n expTable[i] = value\n logTable[value] = i\n value <<= 1\n\n if (value & 0x100) {\n value ^= 0x11d\n }\n }\n\n for (let i = 255; i < 512; i += 1) {\n expTable[i] = expTable[i - 255]\n }\n\n fieldReady = true\n}\n\n// Multiply two values inside the QR Galois field.\nfunction gfMul(a: number, b: number) {\n if (!a || !b) return 0\n ensureField()\n return expTable[logTable[a] + logTable[b]]\n}\n\n// Multiply generator polynomials used for error correction.\nfunction polyMul(left: number[], right: number[]) {\n const next = new Array(left.length + right.length - 1).fill(0)\n\n for (let row = 0; row < left.length; row += 1) {\n for (let col = 0; col < right.length; col += 1) {\n next[row + col] ^= gfMul(left[row], right[col])\n }\n }\n\n return next\n}\n\n// Build the generator polynomial for the chosen correction size.\nfunction makeGenerator(ecWords: number) {\n ensureField()\n\n let poly = [1]\n\n for (let i = 0; i < ecWords; i += 1) {\n poly = polyMul(poly, [1, expTable[i]])\n }\n\n return poly\n}\n\n// Compute Reed-Solomon error words for the current payload.\nfunction makeErrorWords(data: number[], ecWords: number) {\n const poly = makeGenerator(ecWords)\n const work = [...data, ...new Array(ecWords).fill(0)]\n\n for (let i = 0; i < data.length; i += 1) {\n const factor = work[i]\n\n if (!factor) continue\n\n for (let j = 0; j < poly.length; j += 1) {\n work[i + j] ^= gfMul(poly[j], factor)\n }\n }\n\n return work.slice(-ecWords)\n}\n\n// Push bits in MSB order so QR payload building stays explicit.\nfunction pushBits(target: number[], value: number, size: number) {\n for (let bit = size - 1; bit >= 0; bit -= 1) {\n target.push((value >> bit) & 1)\n }\n}\n\n// Repack a flat bit list into QR codewords.\nfunction bitsToBytes(bits: number[]) {\n const bytes: number[] = []\n\n for (let i = 0; i < bits.length; i += 8) {\n let byte = 0\n\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (bits[i + bit] ?? 0)\n }\n\n bytes.push(byte)\n }\n\n return bytes\n}\n\n// Pick the smallest supported QR version for the payload.\nfunction pickVersion(length: number) {\n return versions.find((item) => length <= item.byteLimit) ?? null\n}\n\n// Encode a string as byte mode payload plus correction words.\nfunction encodeData(value: string, info: VersionInfo) {\n const data = Array.from(encoder.encode(value))\n const bits: number[] = []\n const capacity = info.dataWords * 8\n\n pushBits(bits, 0b0100, 4)\n pushBits(bits, data.length, 8)\n\n data.forEach((byte) => pushBits(bits, byte, 8))\n\n pushBits(bits, 0, Math.min(4, capacity - bits.length))\n\n while (bits.length % 8 !== 0) {\n bits.push(0)\n }\n\n const pads = [0xec, 0x11]\n\n for (let i = 0; bits.length < capacity; i += 1) {\n pushBits(bits, pads[i % 2], 8)\n }\n\n const dataWords = bitsToBytes(bits)\n return [...dataWords, ...makeErrorWords(dataWords, info.ecWords)]\n}\n\n// Create an empty matrix before function patterns are placed.\nfunction makeGrid(size: number) {\n return Array.from({length: size}, () => Array<boolean | null>(size).fill(null))\n}\n\n// Write a module and mark it as reserved.\nfunction setCell(grid: (boolean | null)[][], marks: boolean[][], row: number, col: number, dark: boolean) {\n if (row < 0 || col < 0 || row >= grid.length || col >= grid.length) return\n grid[row][col] = dark\n marks[row][col] = true\n}\n\n// Place one finder pattern with its quiet white border.\nfunction placeFinder(grid: (boolean | null)[][], marks: boolean[][], top: number, left: number) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const edge = row === -1 || row === 7 || col === -1 || col === 7\n const outer = row === 0 || row === 6 || col === 0 || col === 6\n const inner = row >= 2 && row <= 4 && col >= 2 && col <= 4\n setCell(grid, marks, top + row, left + col, !edge && (outer || inner))\n }\n }\n}\n\n// Place one alignment pattern unless another function block already owns it.\nfunction placeAlign(grid: (boolean | null)[][], marks: boolean[][], center: number, middle: number) {\n if (marks[center][middle]) return\n\n for (let row = -2; row <= 2; row += 1) {\n for (let col = -2; col <= 2; col += 1) {\n const edge = Math.max(Math.abs(row), Math.abs(col)) === 2\n const dot = row === 0 && col === 0\n setCell(grid, marks, center + row, middle + col, edge || dot)\n }\n }\n}\n\n// Reserve format info cells before data placement starts.\nfunction markFormat(marks: boolean[][]) {\n const size = marks.length\n const left = [\n [8, 0],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 4],\n [8, 5],\n [8, 7],\n [8, 8],\n [7, 8],\n [5, 8],\n [4, 8],\n [3, 8],\n [2, 8],\n [1, 8],\n [0, 8],\n ]\n const right = [\n [size - 1, 8],\n [size - 2, 8],\n [size - 3, 8],\n [size - 4, 8],\n [size - 5, 8],\n [size - 6, 8],\n [size - 7, 8],\n [8, size - 8],\n [8, size - 7],\n [8, size - 6],\n [8, size - 5],\n [8, size - 4],\n [8, size - 3],\n [8, size - 2],\n [8, size - 1],\n ]\n\n ;[...left, ...right].forEach(([row, col]) => {\n marks[row][col] = true\n })\n}\n\n// Build the static QR scaffolding: finders, timing and align blocks.\nfunction makeBase(info: VersionInfo) {\n const grid = makeGrid(info.size)\n const marks = Array.from({length: info.size}, () => Array<boolean>(info.size).fill(false))\n\n placeFinder(grid, marks, 0, 0)\n placeFinder(grid, marks, 0, info.size - 7)\n placeFinder(grid, marks, info.size - 7, 0)\n\n for (let i = 8; i < info.size - 8; i += 1) {\n setCell(grid, marks, 6, i, i % 2 === 0)\n setCell(grid, marks, i, 6, i % 2 === 0)\n }\n\n info.align.forEach((row) => {\n info.align.forEach((col) => {\n placeAlign(grid, marks, row, col)\n })\n })\n\n markFormat(marks)\n setCell(grid, marks, info.version * 4 + 9, 8, true)\n\n return {grid, marks}\n}\n\n// Fill open cells with payload bits using the QR zig-zag path.\nfunction placeData(grid: (boolean | null)[][], marks: boolean[][], words: number[]) {\n const size = grid.length\n const bits: number[] = []\n\n words.forEach((word) => pushBits(bits, word, 8))\n\n let index = 0\n let up = true\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) {\n col -= 1\n }\n\n let row = up ? size - 1 : 0\n\n while (row >= 0 && row < size) {\n for (let offset = 0; offset < 2; offset += 1) {\n const x = col - offset\n\n if (marks[row][x]) continue\n\n grid[row][x] = bits[index] === 1\n index += 1\n }\n\n row += up ? -1 : 1\n }\n\n up = !up\n }\n\n for (let row = 0; row < size; row += 1) {\n for (let col = 0; col < size; col += 1) {\n if (!marks[row][col] && grid[row][col] == null) {\n grid[row][col] = false\n }\n }\n }\n}\n\n// Check whether the current mask flips this module.\nfunction shouldFlip(mask: number, row: number, col: number) {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0\n case 1:\n return row % 2 === 0\n case 2:\n return col % 3 === 0\n case 3:\n return (row + col) % 3 === 0\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0\n case 7:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0\n default:\n return false\n }\n}\n\n// Apply one mask while leaving reserved cells untouched.\nfunction applyMask(grid: (boolean | null)[][], marks: boolean[][], mask: number) {\n return grid.map((line, row) =>\n line.map((cell, col) => {\n if (marks[row][col]) return Boolean(cell)\n return shouldFlip(mask, row, col) ? !cell : Boolean(cell)\n })\n )\n}\n\n// Write format bits into both reserved format strips.\nfunction withFormat(grid: boolean[][], mask: number) {\n const size = grid.length\n const bits = formatBits[mask]\n const left = [\n [8, 0],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 4],\n [8, 5],\n [8, 7],\n [8, 8],\n [7, 8],\n [5, 8],\n [4, 8],\n [3, 8],\n [2, 8],\n [1, 8],\n [0, 8],\n ]\n const right = [\n [size - 1, 8],\n [size - 2, 8],\n [size - 3, 8],\n [size - 4, 8],\n [size - 5, 8],\n [size - 6, 8],\n [size - 7, 8],\n [8, size - 8],\n [8, size - 7],\n [8, size - 6],\n [8, size - 5],\n [8, size - 4],\n [8, size - 3],\n [8, size - 2],\n [8, size - 1],\n ]\n const next = grid.map((line) => [...line])\n\n bits.split('').forEach((bit, index) => {\n const dark = bit === '1'\n const [leftRow, leftCol] = left[index]\n const [rightRow, rightCol] = right[index]\n\n next[leftRow][leftCol] = dark\n next[rightRow][rightCol] = dark\n })\n\n return next\n}\n\n// Penalize long runs of the same color.\nfunction runPenalty(values: boolean[]) {\n let score = 0\n let run = 1\n\n for (let i = 1; i <= values.length; i += 1) {\n if (values[i] === values[i - 1]) {\n run += 1\n continue\n }\n\n if (run >= 5) {\n score += run - 2\n }\n\n run = 1\n }\n\n return score\n}\n\n// Penalize large flat blocks that scan poorly.\nfunction blockPenalty(grid: boolean[][]) {\n let score = 0\n\n for (let row = 0; row < grid.length - 1; row += 1) {\n for (let col = 0; col < grid.length - 1; col += 1) {\n const cell = grid[row][col]\n\n if (cell === grid[row][col + 1] && cell === grid[row + 1][col] && cell === grid[row + 1][col + 1]) {\n score += 3\n }\n }\n }\n\n return score\n}\n\n// Penalize patterns that look too similar to finder markers.\nfunction finderPenalty(values: boolean[]) {\n const matchA = '10111010000'\n const matchB = '00001011101'\n let score = 0\n\n for (let i = 0; i <= values.length - 11; i += 1) {\n const slice = values\n .slice(i, i + 11)\n .map((cell) => (cell ? '1' : '0'))\n .join('')\n\n if (slice === matchA || slice === matchB) {\n score += 40\n }\n }\n\n return score\n}\n\n// Keep the dark/light balance near the QR target.\nfunction ratioPenalty(grid: boolean[][]) {\n const total = grid.length * grid.length\n const dark = grid.flat().filter(Boolean).length\n const ratio = (dark * 100) / total\n return Math.floor(Math.abs(ratio - 50) / 5) * 10\n}\n\n// Sum the standard QR penalties for one candidate matrix.\nfunction getPenalty(grid: boolean[][]) {\n let score = 0\n\n for (let row = 0; row < grid.length; row += 1) {\n score += runPenalty(grid[row])\n score += finderPenalty(grid[row])\n }\n\n for (let col = 0; col < grid.length; col += 1) {\n const line = grid.map((row) => row[col])\n score += runPenalty(line)\n score += finderPenalty(line)\n }\n\n score += blockPenalty(grid)\n score += ratioPenalty(grid)\n\n return score\n}\n\n// Build the final matrix and pick the mask with the lowest penalty.\nfunction makeMatrix(value: string) {\n const data = Array.from(encoder.encode(value))\n const info = pickVersion(data.length)\n\n if (!info) {\n return null\n }\n\n const {grid, marks} = makeBase(info)\n placeData(grid, marks, encodeData(value, info))\n\n let bestMask = 0\n let bestGrid = withFormat(applyMask(grid, marks, 0), 0)\n let bestScore = getPenalty(bestGrid)\n\n for (let mask = 1; mask < 8; mask += 1) {\n const masked = withFormat(applyMask(grid, marks, mask), mask)\n const score = getPenalty(masked)\n\n if (score < bestScore) {\n bestMask = mask\n bestGrid = masked\n bestScore = score\n }\n }\n\n return {grid: bestGrid, mask: bestMask}\n}\n\n// Render a local SVG QR code without adding a runtime dependency.\nexport function MQrCode({\n value,\n size = 144,\n padding = 4,\n fg = '#111827',\n bg = '#ffffff',\n status = 'idle',\n statusLabel,\n className,\n style,\n ...rest\n}: MQrCodeProps) {\n const qr = makeMatrix(value)\n\n if (!qr) {\n return null\n }\n\n const dimension = qr.grid.length + padding * 2\n const nextStyle = {\n '--qr-size': `${size}px`,\n ...style,\n } as CSSProperties\n const statusColor = status === 'success' ? 'success' : status === 'error' ? 'error' : 'primary'\n\n return (\n <div\n className={cn('qr-code', status !== 'idle' && `status-${status}`, className)}\n style={nextStyle}\n aria-busy={status === 'loading' || undefined}\n {...rest}\n >\n <svg\n className={cn(status !== 'idle' && 'dimmed')}\n viewBox={`0 0 ${dimension} ${dimension}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"QR code\"\n >\n <rect width={dimension} height={dimension} fill={bg} />\n {qr.grid.map((line, row) =>\n line.map((cell, col) =>\n cell ? (\n <rect\n key={`${row}-${col}`}\n x={col + padding}\n y={row + padding}\n width=\"1\"\n height=\"1\"\n fill={fg}\n />\n ) : null\n )\n )}\n </svg>\n {status !== 'idle' && (\n <div className=\"qr-status-center\" aria-label={statusLabel ?? `QR code ${status}`} role=\"status\">\n {status === 'loading' ? (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n loading\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n />\n ) : status === 'success' ? (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n >\n <MSuccessIcon />\n </MButton>\n ) : (\n <MButton\n variant=\"ghost\"\n size=\"lg\"\n color={statusColor}\n shape=\"circle\"\n iconOnly\n pulsing\n disabled\n tabIndex={-1}\n className=\"qr-status-chip\"\n aria-hidden=\"true\"\n >\n <MErrorIcon />\n </MButton>\n )}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;AAOA,SAAgB,EAAQ,EACpB,WAAQ,GACR,SAAM,GACN,WAAQ,WACR,UAAO,MACP,cAAW,IACX,aACA,cACA,GAAG,KACU;CACb,IAAM,CAAC,GAAS,KAAc,EAAwB,KAAK,EACrD,IAAe,KAAW,GAE1B,KAAe,MAAkB;AAC/B,OACJ,IAAW,EAAM;;AAGrB,QACI,kBAAC,OAAD;EACI,WAAW,EAAG,UAAU,SAAS,KAAS,GAAM,KAAY,aAAa,EAAU;EACnF,MAAK;EACL,cAAW;EACX,oBAAoB,EAAW,KAAK;EACpC,GAAI;YAEH,MAAM,KAAK,EAAC,QAAQ,GAAI,GAAG,GAAG,MAAM;GACjC,IAAM,IAAY,IAAI,GAChB,IAAS,KAAgB;AAC/B,UACI,kBAAC,UAAD;IAEI,MAAK;IACL,WAAU;IACV,eAAe,EAAY,EAAU;IACrC,oBAAoB,CAAC,KAAY,EAAW,EAAU;IACtD,cAAY,GAAG,EAAU,OAAO,IAAY,IAAI,MAAM;IACtD,UAAU,IAAW,KAAK;IAC1B,UAAU;cAEV,kBAAC,QAAD;KAAM,WAAU;KAAY,eAAY;eAC1B,EAAT,IAAU,IAAoB,GAArB,EAAiB,CAAgB;KACxC,CAAA;IACF,EAZA,EAYA;IAEf;EACA,CAAA;;;;ACrCd,IAAM,IAA0B;CAC5B;EAAC,SAAS;EAAG,MAAM;EAAI,WAAW;EAAI,SAAS;EAAG,WAAW;EAAI,OAAO,EAAE;EAAC;CAC3E;EAAC,SAAS;EAAG,MAAM;EAAI,WAAW;EAAI,SAAS;EAAI,WAAW;EAAI,OAAO,CAAC,GAAG,GAAG;EAAC;CACjF;EAAC,SAAS;EAAG,MAAM;EAAI,WAAW;EAAI,SAAS;EAAI,WAAW;EAAI,OAAO,CAAC,GAAG,GAAG;EAAC;CACjF;EAAC,SAAS;EAAG,MAAM;EAAI,WAAW;EAAI,SAAS;EAAI,WAAW;EAAI,OAAO,CAAC,GAAG,GAAG;EAAC;CACjF;EAAC,SAAS;EAAG,MAAM;EAAI,WAAW;EAAK,SAAS;EAAI,WAAW;EAAK,OAAO,CAAC,GAAG,GAAG;EAAC;CACtF,EAEK,IAAa;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,EAEK,IAAe,MAAc,IAAI,CAAC,KAAK,EAAE,EACzC,IAAe,MAAc,IAAI,CAAC,KAAK,EAAE,EACzC,IAAU,IAAI,aAAa,EAE7B,IAAa;AAGjB,SAAS,IAAc;AACnB,KAAI,EAAY;CAEhB,IAAI,IAAQ;AAEZ,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,EAK1B,CAJA,EAAS,KAAK,GACd,EAAS,KAAS,GAClB,MAAU,GAEN,IAAQ,QACR,KAAS;AAIjB,MAAK,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,EAC5B,GAAS,KAAK,EAAS,IAAI;AAG/B,KAAa;;AAIjB,SAAS,EAAM,GAAW,GAAW;AAGjC,QAFI,CAAC,KAAK,CAAC,IAAU,KACrB,GAAa,EACN,EAAS,EAAS,KAAK,EAAS;;AAI3C,SAAS,EAAQ,GAAgB,GAAiB;CAC9C,IAAM,IAAW,MAAM,EAAK,SAAS,EAAM,SAAS,EAAE,CAAC,KAAK,EAAE;AAE9D,MAAK,IAAI,IAAM,GAAG,IAAM,EAAK,QAAQ,KAAO,EACxC,MAAK,IAAI,IAAM,GAAG,IAAM,EAAM,QAAQ,KAAO,EACzC,GAAK,IAAM,MAAQ,EAAM,EAAK,IAAM,EAAM,GAAK;AAIvD,QAAO;;AAIX,SAAS,EAAc,GAAiB;AACpC,IAAa;CAEb,IAAI,IAAO,CAAC,EAAE;AAEd,MAAK,IAAI,IAAI,GAAG,IAAI,GAAS,KAAK,EAC9B,KAAO,EAAQ,GAAM,CAAC,GAAG,EAAS,GAAG,CAAC;AAG1C,QAAO;;AAIX,SAAS,EAAe,GAAgB,GAAiB;CACrD,IAAM,IAAO,EAAc,EAAQ,EAC7B,IAAO,CAAC,GAAG,GAAM,GAAO,MAAM,EAAQ,CAAC,KAAK,EAAE,CAAC;AAErD,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK,GAAG;EACrC,IAAM,IAAS,EAAK;AAEf,QAEL,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK,EAClC,GAAK,IAAI,MAAM,EAAM,EAAK,IAAI,EAAO;;AAI7C,QAAO,EAAK,MAAM,CAAC,EAAQ;;AAI/B,SAAS,EAAS,GAAkB,GAAe,GAAc;AAC7D,MAAK,IAAI,IAAM,IAAO,GAAG,KAAO,GAAG,IAC/B,GAAO,KAAM,KAAS,IAAO,EAAE;;AAKvC,SAAS,EAAY,GAAgB;CACjC,IAAM,IAAkB,EAAE;AAE1B,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK,GAAG;EACrC,IAAI,IAAO;AAEX,OAAK,IAAI,IAAM,GAAG,IAAM,GAAG,KAAO,EAC9B,KAAQ,KAAQ,KAAM,EAAK,IAAI,MAAQ;AAG3C,IAAM,KAAK,EAAK;;AAGpB,QAAO;;AAIX,SAAS,EAAY,GAAgB;AACjC,QAAO,EAAS,MAAM,MAAS,KAAU,EAAK,UAAU,IAAI;;AAIhE,SAAS,EAAW,GAAe,GAAmB;CAClD,IAAM,IAAO,MAAM,KAAK,EAAQ,OAAO,EAAM,CAAC,EACxC,IAAiB,EAAE,EACnB,IAAW,EAAK,YAAY;AASlC,MAPA,EAAS,GAAM,GAAQ,EAAE,EACzB,EAAS,GAAM,EAAK,QAAQ,EAAE,EAE9B,EAAK,SAAS,MAAS,EAAS,GAAM,GAAM,EAAE,CAAC,EAE/C,EAAS,GAAM,GAAG,KAAK,IAAI,GAAG,IAAW,EAAK,OAAO,CAAC,EAE/C,EAAK,SAAS,KAAM,GACvB,GAAK,KAAK,EAAE;CAGhB,IAAM,IAAO,CAAC,KAAM,GAAK;AAEzB,MAAK,IAAI,IAAI,GAAG,EAAK,SAAS,GAAU,KAAK,EACzC,GAAS,GAAM,EAAK,IAAI,IAAI,EAAE;CAGlC,IAAM,IAAY,EAAY,EAAK;AACnC,QAAO,CAAC,GAAG,GAAW,GAAG,EAAe,GAAW,EAAK,QAAQ,CAAC;;AAIrE,SAAS,EAAS,GAAc;AAC5B,QAAO,MAAM,KAAK,EAAC,QAAQ,GAAK,QAAQ,MAAsB,EAAK,CAAC,KAAK,KAAK,CAAC;;AAInF,SAAS,EAAQ,GAA4B,GAAoB,GAAa,GAAa,GAAe;AAClG,KAAM,KAAK,IAAM,KAAK,KAAO,EAAK,UAAU,KAAO,EAAK,WAC5D,EAAK,GAAK,KAAO,GACjB,EAAM,GAAK,KAAO;;AAItB,SAAS,EAAY,GAA4B,GAAoB,GAAa,GAAc;AAC5F,MAAK,IAAI,IAAM,IAAI,KAAO,GAAG,KAAO,EAChC,MAAK,IAAI,IAAM,IAAI,KAAO,GAAG,KAAO,GAAG;EACnC,IAAM,IAAO,MAAQ,MAAM,MAAQ,KAAK,MAAQ,MAAM,MAAQ,GACxD,IAAQ,MAAQ,KAAK,MAAQ,KAAK,MAAQ,KAAK,MAAQ,GACvD,IAAQ,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO;AACzD,IAAQ,GAAM,GAAO,IAAM,GAAK,IAAO,GAAK,CAAC,MAAS,KAAS,GAAO;;;AAMlF,SAAS,EAAW,GAA4B,GAAoB,GAAgB,GAAgB;AAC5F,QAAM,GAAQ,GAElB,MAAK,IAAI,IAAM,IAAI,KAAO,GAAG,KAAO,EAChC,MAAK,IAAI,IAAM,IAAI,KAAO,GAAG,KAAO,GAAG;EACnC,IAAM,IAAO,KAAK,IAAI,KAAK,IAAI,EAAI,EAAE,KAAK,IAAI,EAAI,CAAC,KAAK,GAClD,IAAM,MAAQ,KAAK,MAAQ;AACjC,IAAQ,GAAM,GAAO,IAAS,GAAK,IAAS,GAAK,KAAQ,EAAI;;;AAMzE,SAAS,EAAW,GAAoB;CACpC,IAAM,IAAO,EAAM,QACb,IAAO;EACT,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACT,EACK,IAAQ;EACV,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EAChB;AAEA,EAAC,GAAG,GAAM,GAAG,EAAM,CAAC,SAAS,CAAC,GAAK,OAAS;AACzC,IAAM,GAAK,KAAO;GACpB;;AAIN,SAAS,EAAS,GAAmB;CACjC,IAAM,IAAO,EAAS,EAAK,KAAK,EAC1B,IAAQ,MAAM,KAAK,EAAC,QAAQ,EAAK,MAAK,QAAQ,MAAe,EAAK,KAAK,CAAC,KAAK,GAAM,CAAC;AAI1F,CAFA,EAAY,GAAM,GAAO,GAAG,EAAE,EAC9B,EAAY,GAAM,GAAO,GAAG,EAAK,OAAO,EAAE,EAC1C,EAAY,GAAM,GAAO,EAAK,OAAO,GAAG,EAAE;AAE1C,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,OAAO,GAAG,KAAK,EAEpC,CADA,EAAQ,GAAM,GAAO,GAAG,GAAG,IAAI,KAAM,EAAE,EACvC,EAAQ,GAAM,GAAO,GAAG,GAAG,IAAI,KAAM,EAAE;AAY3C,QATA,EAAK,MAAM,SAAS,MAAQ;AACxB,IAAK,MAAM,SAAS,MAAQ;AACxB,KAAW,GAAM,GAAO,GAAK,EAAI;IACnC;GACJ,EAEF,EAAW,EAAM,EACjB,EAAQ,GAAM,GAAO,EAAK,UAAU,IAAI,GAAG,GAAG,GAAK,EAE5C;EAAC;EAAM;EAAM;;AAIxB,SAAS,EAAU,GAA4B,GAAoB,GAAiB;CAChF,IAAM,IAAO,EAAK,QACZ,IAAiB,EAAE;AAEzB,GAAM,SAAS,MAAS,EAAS,GAAM,GAAM,EAAE,CAAC;CAEhD,IAAI,IAAQ,GACR,IAAK;AAET,MAAK,IAAI,IAAM,IAAO,GAAG,IAAM,GAAG,KAAO,GAAG;AACxC,EAAI,MAAQ,KACR;EAGJ,IAAI,IAAM,IAAK,IAAO,IAAI;AAE1B,SAAO,KAAO,KAAK,IAAM,IAAM;AAC3B,QAAK,IAAI,IAAS,GAAG,IAAS,GAAG,KAAU,GAAG;IAC1C,IAAM,IAAI,IAAM;AAEZ,MAAM,GAAK,OAEf,EAAK,GAAK,KAAK,EAAK,OAAW,GAC/B,KAAS;;AAGb,QAAO,IAAK,KAAK;;AAGrB,MAAK,CAAC;;AAGV,MAAK,IAAI,IAAM,GAAG,IAAM,GAAM,KAAO,EACjC,MAAK,IAAI,IAAM,GAAG,IAAM,GAAM,KAAO,EACjC,CAAI,CAAC,EAAM,GAAK,MAAQ,EAAK,GAAK,MAAQ,SACtC,EAAK,GAAK,KAAO;;AAOjC,SAAS,EAAW,GAAc,GAAa,GAAa;AACxD,SAAQ,GAAR;EACI,KAAK,EACD,SAAQ,IAAM,KAAO,KAAM;EAC/B,KAAK,EACD,QAAO,IAAM,KAAM;EACvB,KAAK,EACD,QAAO,IAAM,KAAM;EACvB,KAAK,EACD,SAAQ,IAAM,KAAO,KAAM;EAC/B,KAAK,EACD,SAAQ,KAAK,MAAM,IAAM,EAAE,GAAG,KAAK,MAAM,IAAM,EAAE,IAAI,KAAM;EAC/D,KAAK,EACD,QAAS,IAAM,IAAO,IAAO,IAAM,IAAO,KAAO;EACrD,KAAK,EACD,SAAU,IAAM,IAAO,IAAO,IAAM,IAAO,KAAM,KAAM;EAC3D,KAAK,EACD,UAAU,IAAM,KAAO,IAAO,IAAM,IAAO,KAAM,KAAM;EAC3D,QACI,QAAO;;;AAKnB,SAAS,EAAU,GAA4B,GAAoB,GAAc;AAC7E,QAAO,EAAK,KAAK,GAAM,MACnB,EAAK,KAAK,GAAM,MACR,EAAM,GAAK,KAAa,EAAQ,IAC7B,EAAW,GAAM,GAAK,EAAI,GAAG,CAAC,IAAO,EAAQ,EACtD,CACL;;AAIL,SAAS,EAAW,GAAmB,GAAc;CACjD,IAAM,IAAO,EAAK,QACZ,IAAO,EAAW,IAClB,IAAO;EACT,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACN,CAAC,GAAG,EAAE;EACT,EACK,IAAQ;EACV,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,IAAO,GAAG,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EACb,CAAC,GAAG,IAAO,EAAE;EAChB,EACK,IAAO,EAAK,KAAK,MAAS,CAAC,GAAG,EAAK,CAAC;AAW1C,QATA,EAAK,MAAM,GAAG,CAAC,SAAS,GAAK,MAAU;EACnC,IAAM,IAAO,MAAQ,KACf,CAAC,GAAS,KAAW,EAAK,IAC1B,CAAC,GAAU,KAAY,EAAM;AAGnC,EADA,EAAK,GAAS,KAAW,GACzB,EAAK,GAAU,KAAY;GAC7B,EAEK;;AAIX,SAAS,EAAW,GAAmB;CACnC,IAAI,IAAQ,GACR,IAAM;AAEV,MAAK,IAAI,IAAI,GAAG,KAAK,EAAO,QAAQ,KAAK,GAAG;AACxC,MAAI,EAAO,OAAO,EAAO,IAAI,IAAI;AAC7B,QAAO;AACP;;AAOJ,EAJI,KAAO,MACP,KAAS,IAAM,IAGnB,IAAM;;AAGV,QAAO;;AAIX,SAAS,EAAa,GAAmB;CACrC,IAAI,IAAQ;AAEZ,MAAK,IAAI,IAAM,GAAG,IAAM,EAAK,SAAS,GAAG,KAAO,EAC5C,MAAK,IAAI,IAAM,GAAG,IAAM,EAAK,SAAS,GAAG,KAAO,GAAG;EAC/C,IAAM,IAAO,EAAK,GAAK;AAEvB,EAAI,MAAS,EAAK,GAAK,IAAM,MAAM,MAAS,EAAK,IAAM,GAAG,MAAQ,MAAS,EAAK,IAAM,GAAG,IAAM,OAC3F,KAAS;;AAKrB,QAAO;;AAIX,SAAS,EAAc,GAAmB;CACtC,IAEI,IAAQ;AAEZ,MAAK,IAAI,IAAI,GAAG,KAAK,EAAO,SAAS,IAAI,KAAK,GAAG;EAC7C,IAAM,IAAQ,EACT,MAAM,GAAG,IAAI,GAAG,CAChB,KAAK,MAAU,IAAO,MAAM,IAAK,CACjC,KAAK,GAAG;AAEb,GAAI,MAAU,iBAAU,MAAU,mBAC9B,KAAS;;AAIjB,QAAO;;AAIX,SAAS,EAAa,GAAmB;CACrC,IAAM,IAAQ,EAAK,SAAS,EAAK,QAE3B,IADO,EAAK,MAAM,CAAC,OAAO,QAAQ,CAAC,SACnB,MAAO;AAC7B,QAAO,KAAK,MAAM,KAAK,IAAI,IAAQ,GAAG,GAAG,EAAE,GAAG;;AAIlD,SAAS,EAAW,GAAmB;CACnC,IAAI,IAAQ;AAEZ,MAAK,IAAI,IAAM,GAAG,IAAM,EAAK,QAAQ,KAAO,EAExC,CADA,KAAS,EAAW,EAAK,GAAK,EAC9B,KAAS,EAAc,EAAK,GAAK;AAGrC,MAAK,IAAI,IAAM,GAAG,IAAM,EAAK,QAAQ,KAAO,GAAG;EAC3C,IAAM,IAAO,EAAK,KAAK,MAAQ,EAAI,GAAK;AAExC,EADA,KAAS,EAAW,EAAK,EACzB,KAAS,EAAc,EAAK;;AAMhC,QAHA,KAAS,EAAa,EAAK,EAC3B,KAAS,EAAa,EAAK,EAEpB;;AAIX,SAAS,EAAW,GAAe;CAE/B,IAAM,IAAO,EADA,MAAM,KAAK,EAAQ,OAAO,EAAM,CAAC,CAChB,OAAO;AAErC,KAAI,CAAC,EACD,QAAO;CAGX,IAAM,EAAC,SAAM,aAAS,EAAS,EAAK;AACpC,GAAU,GAAM,GAAO,EAAW,GAAO,EAAK,CAAC;CAE/C,IAAI,IAAW,GACX,IAAW,EAAW,EAAU,GAAM,GAAO,EAAE,EAAE,EAAE,EACnD,IAAY,EAAW,EAAS;AAEpC,MAAK,IAAI,IAAO,GAAG,IAAO,GAAG,KAAQ,GAAG;EACpC,IAAM,IAAS,EAAW,EAAU,GAAM,GAAO,EAAK,EAAE,EAAK,EACvD,IAAQ,EAAW,EAAO;AAEhC,EAAI,IAAQ,MACR,IAAW,GACX,IAAW,GACX,IAAY;;AAIpB,QAAO;EAAC,MAAM;EAAU,MAAM;EAAS;;AAI3C,SAAgB,EAAQ,EACpB,UACA,UAAO,KACP,aAAU,GACV,QAAK,WACL,QAAK,WACL,YAAS,QACT,gBACA,cACA,UACA,GAAG,KACU;CACb,IAAM,IAAK,EAAW,EAAM;AAE5B,KAAI,CAAC,EACD,QAAO;CAGX,IAAM,IAAY,EAAG,KAAK,SAAS,IAAU,GACvC,IAAY;EACd,aAAa,GAAG,EAAK;EACrB,GAAG;EACN,EACK,IAAc,MAAW,YAAY,YAAY,MAAW,UAAU,UAAU;AAEtF,QACI,kBAAC,OAAD;EACI,WAAW,EAAG,WAAW,MAAW,UAAU,UAAU,KAAU,EAAU;EAC5E,OAAO;EACP,aAAW,MAAW,aAAa,KAAA;EACnC,GAAI;YAJR,CAMI,kBAAC,OAAD;GACI,WAAW,EAAG,MAAW,UAAU,SAAS;GAC5C,SAAS,OAAO,EAAU,GAAG;GAC7B,MAAK;GACL,OAAM;GACN,MAAK;GACL,cAAW;aANf,CAQI,kBAAC,QAAD;IAAM,OAAO;IAAW,QAAQ;IAAW,MAAM;IAAM,CAAA,EACtD,EAAG,KAAK,KAAK,GAAM,MAChB,EAAK,KAAK,GAAM,MACZ,IACI,kBAAC,QAAD;IAEI,GAAG,IAAM;IACT,GAAG,IAAM;IACT,OAAM;IACN,QAAO;IACP,MAAM;IACR,EANO,GAAG,EAAI,GAAG,IAMjB,GACF,KACP,CACJ,CACC;MACL,MAAW,UACR,kBAAC,OAAD;GAAK,WAAU;GAAmB,cAAY,KAAe,WAAW;GAAU,MAAK;aAClF,MAAW,YACR,kBAAC,GAAD;IACI,SAAQ;IACR,MAAK;IACL,OAAO;IACP,OAAM;IACN,UAAA;IACA,SAAA;IACA,SAAA;IACA,UAAA;IACA,UAAU;IACV,WAAU;IACV,eAAY;IACd,CAAA,GACF,MAAW,YACX,kBAAC,GAAD;IACI,SAAQ;IACR,MAAK;IACL,OAAO;IACP,OAAM;IACN,UAAA;IACA,SAAA;IACA,UAAA;IACA,UAAU;IACV,WAAU;IACV,eAAY;cAEZ,kBAAC,GAAD,EAAgB,CAAA;IACV,CAAA,GAEV,kBAAC,GAAD;IACI,SAAQ;IACR,MAAK;IACL,OAAO;IACP,OAAM;IACN,UAAA;IACA,SAAA;IACA,UAAA;IACA,UAAU;IACV,WAAU;IACV,eAAY;cAEZ,kBAAC,GAAD,EAAc,CAAA;IACR,CAAA;GAEZ,CAAA,CAER"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-D1ZdNbKU.cjs`),n=require(`./MSurface-CpiV1-7f.cjs`);require(`./core-AKWkE8Bx.cjs`);let r=require(`react/jsx-runtime`);function i({interactive:i=!1,stretch:a=!0,tone:o=`raised`,padded:s=!1,color:c,clickEffect:u,rippleColor:d,skeleton:f=!1,spacing:p,mt:m,mb:h,ml:g,mr:_,mx:v,my:y,className:b,children:x,onPointerDown:S,...C}){let{effectClassName:w,effectLayer:T,handlePointerDown:E}=t.t({effect:u??(i?`ripple`:`none`),disabled:!i||f,color:d});return(0,r.jsxs)(n.t,{tone:o,padded:s,spacing:p,mt:m,mb:h,ml:g,mr:_,mx:v,my:y,className:e.t(`card`,!a&&`no-stretch`,c&&`color-${c}`,i&&!f&&`interactive`,f&&`skeleton`,w,b),onPointerDown:e=>{E(e),S?.(e)},...C,children:[T,f?(0,r.jsxs)(`div`,{className:`card-skeleton-content`,children:[(0,r.jsx)(l,{variant:`rectangle`,height:`8rem`}),(0,r.jsx)(l,{variant:`text`,lines:3,className:`card-skeleton-lines`})]}):x]})}function a({className:t,children:n,...i}){return(0,r.jsx)(`div`,{className:e.t(`header`,t),...i,children:n})}function o({className:t,children:n,...i}){return(0,r.jsx)(`div`,{className:e.t(`body`,t),...i,children:n})}function s({className:t,children:n,...i}){return(0,r.jsx)(`div`,{className:e.t(`footer`,t),...i,children:n})}function c(e,t){return t<=1?`100%`:e===t-1?`68%`:e===t-2&&t>3?`88%`:`100%`}function l({variant:t=`text`,width:n,height:i,radius:a,lines:o=3,gap:s,animate:l=!0,className:u,style:d,...f}){let p=l===!1?`none`:l===!0?`shimmer`:l;return t===`text`?(0,r.jsx)(`div`,{className:e.t(`skeleton-group`,u),style:{width:n??void 0,gap:s??void 0,...d},...f,children:Array.from({length:o},(t,n)=>(0,r.jsx)(`div`,{className:e.t(`skeleton`,`text`,p),style:{width:c(n,o),height:i??void 0,borderRadius:a??void 0}},n))}):(0,r.jsx)(`div`,{className:e.t(`skeleton`,t,p,u),style:{width:n??void 0,height:i??void 0,borderRadius:a??void 0,...d},...f})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=MSkeleton-5j1h9s95.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSkeleton-B0Mxe3L7.cjs","names":[],"sources":["../src/components/cards/MCard/MCard.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MCardProps, MCardSectionProps} from './MCard.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSurface} from '../../layout'\nimport {MSkeleton} from '../../feedback'\nimport './MCard.css'\n\n// Compose elevated content blocks that can optionally behave like an interactive surface.\nexport function MCard({\n interactive = false,\n stretch = true,\n tone = 'raised',\n padded = false,\n color,\n clickEffect,\n rippleColor,\n skeleton = false,\n spacing,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n className,\n children,\n onPointerDown,\n ...rest\n}: MCardProps) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect ?? (interactive ? 'ripple' : 'none'),\n disabled: !interactive || skeleton,\n color: rippleColor,\n })\n\n return (\n <MSurface\n tone={tone}\n padded={padded}\n spacing={spacing}\n mt={mt}\n mb={mb}\n ml={ml}\n mr={mr}\n mx={mx}\n my={my}\n className={cn(\n 'card',\n !stretch && 'no-stretch',\n color && `color-${color}`,\n interactive && !skeleton && 'interactive',\n skeleton && 'skeleton',\n effectClassName,\n className\n )}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {skeleton ? (\n <div className=\"card-skeleton-content\">\n <MSkeleton variant=\"rectangle\" height=\"8rem\" />\n <MSkeleton variant=\"text\" lines={3} className=\"card-skeleton-lines\" />\n </div>\n ) : (\n children\n )}\n </MSurface>\n )\n}\n\n// Render the top section of a card.\nexport function MCardHeader({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('header', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the main content section of a card.\nexport function MCardBody({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('body', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the bottom section of a card.\nexport function MCardFooter({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('footer', className)} {...rest}>\n {children}\n </div>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":"8LAQA,SAAgB,EAAM,CAClB,cAAc,GACd,UAAU,GACV,OAAO,SACP,SAAS,GACT,QACA,cACA,cACA,WAAW,GACX,UACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,WACA,gBACA,GAAG,GACQ,CACX,GAAM,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAqC,CAC3F,OAAQ,IAAgB,EAAc,SAAW,QACjD,SAAU,CAAC,GAAe,EAC1B,MAAO,EACV,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,EAAA,EAAD,CACU,OACE,SACC,UACL,KACA,KACA,KACA,KACA,KACA,KACJ,UAAW,EAAA,EACP,OACA,CAAC,GAAW,aACZ,GAAS,SAAS,IAClB,GAAe,CAAC,GAAY,cAC5B,GAAY,WACZ,EACA,EACH,CACD,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,GAAI,WAvBR,CAyBK,EACA,GACG,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iCAAf,EACI,EAAA,EAAA,KAAC,EAAD,CAAW,QAAQ,YAAY,OAAO,OAAS,CAAA,EAC/C,EAAA,EAAA,KAAC,EAAD,CAAW,QAAQ,OAAO,MAAO,EAAG,UAAU,sBAAwB,CAAA,CACpE,GAEN,EAEG,GAKnB,SAAgB,EAAY,CAAC,YAAW,WAAU,GAAG,GAA0B,CAC3E,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,EAAU,CAAE,GAAI,EACxC,WACC,CAAA,CAKd,SAAgB,EAAU,CAAC,YAAW,WAAU,GAAG,GAA0B,CACzE,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,OAAQ,EAAU,CAAE,GAAI,EACtC,WACC,CAAA,CAKd,SAAgB,EAAY,CAAC,YAAW,WAAU,GAAG,GAA0B,CAC3E,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,EAAU,CAAE,GAAI,EACxC,WACC,CAAA,CC7Fd,SAAS,EAAiB,EAAe,EAAe,CAapD,OAZI,GAAS,EACF,OAGP,IAAU,EAAQ,EACX,MAGP,IAAU,EAAQ,GAAK,EAAQ,EACxB,MAGJ,OAIX,SAAgB,EAAU,CACtB,UAAU,OACV,QACA,SACA,SACA,QAAQ,EACR,MACA,UAAU,GACV,YACA,QACA,GAAG,GACY,CACf,IAAM,EAAY,IAAY,GAAQ,OAAS,IAAY,GAAO,UAAY,EAwB9E,OAtBI,IAAY,QAER,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,MAAO,CAAC,MAAO,GAAS,IAAA,GAAW,IAAK,GAAO,IAAA,GAAW,GAAG,EAAM,CACnE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAM,EAAG,EAAG,KAC7B,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EAAG,WAAY,OAAQ,EAAU,CAC5C,MAAO,CACH,MAAO,EAAiB,EAAG,EAAM,CACjC,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GAC3B,CACH,CAPO,EAOP,CACJ,CACA,CAAA,EAKV,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAS,EAAW,EAAU,CACxD,MAAO,CACH,MAAO,GAAS,IAAA,GAChB,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GACxB,GAAG,EACN,CACD,GAAI,EACN,CAAA"}
1
+ {"version":3,"file":"MSkeleton-5j1h9s95.cjs","names":[],"sources":["../src/components/cards/MCard/MCard.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MCardProps, MCardSectionProps} from './MCard.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSurface} from '../../layout'\nimport {MSkeleton} from '../../feedback'\nimport './MCard.css'\n\n// Compose elevated content blocks that can optionally behave like an interactive surface.\nexport function MCard({\n interactive = false,\n stretch = true,\n tone = 'raised',\n padded = false,\n color,\n clickEffect,\n rippleColor,\n skeleton = false,\n spacing,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n className,\n children,\n onPointerDown,\n ...rest\n}: MCardProps) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect ?? (interactive ? 'ripple' : 'none'),\n disabled: !interactive || skeleton,\n color: rippleColor,\n })\n\n return (\n <MSurface\n tone={tone}\n padded={padded}\n spacing={spacing}\n mt={mt}\n mb={mb}\n ml={ml}\n mr={mr}\n mx={mx}\n my={my}\n className={cn(\n 'card',\n !stretch && 'no-stretch',\n color && `color-${color}`,\n interactive && !skeleton && 'interactive',\n skeleton && 'skeleton',\n effectClassName,\n className\n )}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {skeleton ? (\n <div className=\"card-skeleton-content\">\n <MSkeleton variant=\"rectangle\" height=\"8rem\" />\n <MSkeleton variant=\"text\" lines={3} className=\"card-skeleton-lines\" />\n </div>\n ) : (\n children\n )}\n </MSurface>\n )\n}\n\n// Render the top section of a card.\nexport function MCardHeader({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('header', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the main content section of a card.\nexport function MCardBody({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('body', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the bottom section of a card.\nexport function MCardFooter({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('footer', className)} {...rest}>\n {children}\n </div>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":"6LAQA,SAAgB,EAAM,CAClB,cAAc,GACd,UAAU,GACV,OAAO,SACP,SAAS,GACT,QACA,cACA,cACA,WAAW,GACX,UACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,WACA,gBACA,GAAG,GACQ,CACX,GAAM,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAqC,CAC3F,OAAQ,IAAgB,EAAc,SAAW,QACjD,SAAU,CAAC,GAAe,EAC1B,MAAO,EACV,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,EAAA,EAAD,CACU,OACE,SACC,UACL,KACA,KACA,KACA,KACA,KACA,KACJ,UAAW,EAAA,EACP,OACA,CAAC,GAAW,aACZ,GAAS,SAAS,IAClB,GAAe,CAAC,GAAY,cAC5B,GAAY,WACZ,EACA,EACH,CACD,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,GAAI,WAvBR,CAyBK,EACA,GACG,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iCAAf,EACI,EAAA,EAAA,KAAC,EAAD,CAAW,QAAQ,YAAY,OAAO,OAAS,CAAA,EAC/C,EAAA,EAAA,KAAC,EAAD,CAAW,QAAQ,OAAO,MAAO,EAAG,UAAU,sBAAwB,CAAA,CACpE,GAEN,EAEG,GAKnB,SAAgB,EAAY,CAAC,YAAW,WAAU,GAAG,GAA0B,CAC3E,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,EAAU,CAAE,GAAI,EACxC,WACC,CAAA,CAKd,SAAgB,EAAU,CAAC,YAAW,WAAU,GAAG,GAA0B,CACzE,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,OAAQ,EAAU,CAAE,GAAI,EACtC,WACC,CAAA,CAKd,SAAgB,EAAY,CAAC,YAAW,WAAU,GAAG,GAA0B,CAC3E,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,EAAU,CAAE,GAAI,EACxC,WACC,CAAA,CC7Fd,SAAS,EAAiB,EAAe,EAAe,CAapD,OAZI,GAAS,EACF,OAGP,IAAU,EAAQ,EACX,MAGP,IAAU,EAAQ,GAAK,EAAQ,EACxB,MAGJ,OAIX,SAAgB,EAAU,CACtB,UAAU,OACV,QACA,SACA,SACA,QAAQ,EACR,MACA,UAAU,GACV,YACA,QACA,GAAG,GACY,CACf,IAAM,EAAY,IAAY,GAAQ,OAAS,IAAY,GAAO,UAAY,EAwB9E,OAtBI,IAAY,QAER,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,MAAO,CAAC,MAAO,GAAS,IAAA,GAAW,IAAK,GAAO,IAAA,GAAW,GAAG,EAAM,CACnE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAM,EAAG,EAAG,KAC7B,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EAAG,WAAY,OAAQ,EAAU,CAC5C,MAAO,CACH,MAAO,EAAiB,EAAG,EAAM,CACjC,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GAC3B,CACH,CAPO,EAOP,CACJ,CACA,CAAA,EAKV,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAS,EAAW,EAAU,CACxD,MAAO,CACH,MAAO,GAAS,IAAA,GAChB,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GACxB,GAAG,EACN,CACD,GAAI,EACN,CAAA"}
@@ -1,6 +1,6 @@
1
- import { t as e } from "./cn-CUSXNnjF.js";
2
- import { t } from "./useInteractionEffect-ClkU3aH5.js";
3
- import { t as n } from "./MSurface-DfZ1Zy1-.js";
1
+ import { t as e } from "./cn-YER3QsV1.js";
2
+ import { t } from "./useInteractionEffect-DtpbVd77.js";
3
+ import { t as n } from "./MSurface-DJYSftdM.js";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  //#region src/components/cards/MCard/MCard.tsx
6
6
  function a({ interactive: a = !1, stretch: o = !0, tone: s = "raised", padded: c = !1, color: l, clickEffect: d, rippleColor: f, skeleton: p = !1, spacing: m, mt: h, mb: g, ml: _, mr: v, mx: y, my: b, className: x, children: S, onPointerDown: C, ...w }) {
@@ -95,4 +95,4 @@ function u({ variant: t = "text", width: n, height: i, radius: a, lines: o = 3,
95
95
  //#endregion
96
96
  export { o as a, c as i, a as n, s as r, u as t };
97
97
 
98
- //# sourceMappingURL=MSkeleton-Bqq_XJn8.js.map
98
+ //# sourceMappingURL=MSkeleton-DGhtNmpI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSkeleton-Bqq_XJn8.js","names":[],"sources":["../src/components/cards/MCard/MCard.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MCardProps, MCardSectionProps} from './MCard.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSurface} from '../../layout'\nimport {MSkeleton} from '../../feedback'\nimport './MCard.css'\n\n// Compose elevated content blocks that can optionally behave like an interactive surface.\nexport function MCard({\n interactive = false,\n stretch = true,\n tone = 'raised',\n padded = false,\n color,\n clickEffect,\n rippleColor,\n skeleton = false,\n spacing,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n className,\n children,\n onPointerDown,\n ...rest\n}: MCardProps) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect ?? (interactive ? 'ripple' : 'none'),\n disabled: !interactive || skeleton,\n color: rippleColor,\n })\n\n return (\n <MSurface\n tone={tone}\n padded={padded}\n spacing={spacing}\n mt={mt}\n mb={mb}\n ml={ml}\n mr={mr}\n mx={mx}\n my={my}\n className={cn(\n 'card',\n !stretch && 'no-stretch',\n color && `color-${color}`,\n interactive && !skeleton && 'interactive',\n skeleton && 'skeleton',\n effectClassName,\n className\n )}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {skeleton ? (\n <div className=\"card-skeleton-content\">\n <MSkeleton variant=\"rectangle\" height=\"8rem\" />\n <MSkeleton variant=\"text\" lines={3} className=\"card-skeleton-lines\" />\n </div>\n ) : (\n children\n )}\n </MSurface>\n )\n}\n\n// Render the top section of a card.\nexport function MCardHeader({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('header', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the main content section of a card.\nexport function MCardBody({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('body', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the bottom section of a card.\nexport function MCardFooter({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('footer', className)} {...rest}>\n {children}\n </div>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":";;;;;AAQA,SAAgB,EAAM,EAClB,iBAAc,IACd,aAAU,IACV,UAAO,UACP,YAAS,IACT,UACA,gBACA,gBACA,cAAW,IACX,YACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,aACA,kBACA,GAAG,KACQ;CACX,IAAM,EAAC,oBAAiB,gBAAa,yBAAqB,EAAqC;EAC3F,QAAQ,MAAgB,IAAc,WAAW;EACjD,UAAU,CAAC,KAAe;EAC1B,OAAO;EACV,CAAC;AAEF,QACI,kBAAC,GAAD;EACU;EACE;EACC;EACL;EACA;EACA;EACA;EACA;EACA;EACJ,WAAW,EACP,QACA,CAAC,KAAW,cACZ,KAAS,SAAS,KAClB,KAAe,CAAC,KAAY,eAC5B,KAAY,YACZ,GACA,EACH;EACD,gBAAgB,MAAU;AAEtB,GADA,EAAkB,EAAM,EACxB,IAAgB,EAAM;;EAE1B,GAAI;YAvBR,CAyBK,GACA,IACG,kBAAC,OAAD;GAAK,WAAU;aAAf,CACI,kBAAC,GAAD;IAAW,SAAQ;IAAY,QAAO;IAAS,CAAA,EAC/C,kBAAC,GAAD;IAAW,SAAQ;IAAO,OAAO;IAAG,WAAU;IAAwB,CAAA,CACpE;OAEN,EAEG;;;AAKnB,SAAgB,EAAY,EAAC,cAAW,aAAU,GAAG,KAA0B;AAC3E,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,EAAU;EAAE,GAAI;EACxC;EACC,CAAA;;AAKd,SAAgB,EAAU,EAAC,cAAW,aAAU,GAAG,KAA0B;AACzE,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,QAAQ,EAAU;EAAE,GAAI;EACtC;EACC,CAAA;;AAKd,SAAgB,EAAY,EAAC,cAAW,aAAU,GAAG,KAA0B;AAC3E,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,EAAU;EAAE,GAAI;EACxC;EACC,CAAA;;;;AC7Fd,SAAS,EAAiB,GAAe,GAAe;AAapD,QAZI,KAAS,IACF,SAGP,MAAU,IAAQ,IACX,QAGP,MAAU,IAAQ,KAAK,IAAQ,IACxB,QAGJ;;AAIX,SAAgB,EAAU,EACtB,aAAU,QACV,UACA,WACA,WACA,WAAQ,GACR,QACA,aAAU,IACV,cACA,UACA,GAAG,KACY;CACf,IAAM,IAAY,MAAY,KAAQ,SAAS,MAAY,KAAO,YAAY;AAwB9E,QAtBI,MAAY,SAER,kBAAC,OAAD;EACI,WAAW,EAAG,kBAAkB,EAAU;EAC1C,OAAO;GAAC,OAAO,KAAS,KAAA;GAAW,KAAK,KAAO,KAAA;GAAW,GAAG;GAAM;EACnE,GAAI;YAEH,MAAM,KAAK,EAAC,QAAQ,GAAM,GAAG,GAAG,MAC7B,kBAAC,OAAD;GAEI,WAAW,EAAG,YAAY,QAAQ,EAAU;GAC5C,OAAO;IACH,OAAO,EAAiB,GAAG,EAAM;IACjC,QAAQ,KAAU,KAAA;IAClB,cAAc,KAAU,KAAA;IAC3B;GACH,EAPO,EAOP,CACJ;EACA,CAAA,GAKV,kBAAC,OAAD;EACI,WAAW,EAAG,YAAY,GAAS,GAAW,EAAU;EACxD,OAAO;GACH,OAAO,KAAS,KAAA;GAChB,QAAQ,KAAU,KAAA;GAClB,cAAc,KAAU,KAAA;GACxB,GAAG;GACN;EACD,GAAI;EACN,CAAA"}
1
+ {"version":3,"file":"MSkeleton-DGhtNmpI.js","names":[],"sources":["../src/components/cards/MCard/MCard.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MCardProps, MCardSectionProps} from './MCard.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSurface} from '../../layout'\nimport {MSkeleton} from '../../feedback'\nimport './MCard.css'\n\n// Compose elevated content blocks that can optionally behave like an interactive surface.\nexport function MCard({\n interactive = false,\n stretch = true,\n tone = 'raised',\n padded = false,\n color,\n clickEffect,\n rippleColor,\n skeleton = false,\n spacing,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n className,\n children,\n onPointerDown,\n ...rest\n}: MCardProps) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect ?? (interactive ? 'ripple' : 'none'),\n disabled: !interactive || skeleton,\n color: rippleColor,\n })\n\n return (\n <MSurface\n tone={tone}\n padded={padded}\n spacing={spacing}\n mt={mt}\n mb={mb}\n ml={ml}\n mr={mr}\n mx={mx}\n my={my}\n className={cn(\n 'card',\n !stretch && 'no-stretch',\n color && `color-${color}`,\n interactive && !skeleton && 'interactive',\n skeleton && 'skeleton',\n effectClassName,\n className\n )}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {skeleton ? (\n <div className=\"card-skeleton-content\">\n <MSkeleton variant=\"rectangle\" height=\"8rem\" />\n <MSkeleton variant=\"text\" lines={3} className=\"card-skeleton-lines\" />\n </div>\n ) : (\n children\n )}\n </MSurface>\n )\n}\n\n// Render the top section of a card.\nexport function MCardHeader({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('header', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the main content section of a card.\nexport function MCardBody({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('body', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the bottom section of a card.\nexport function MCardFooter({className, children, ...rest}: MCardSectionProps) {\n return (\n <div className={cn('footer', className)} {...rest}>\n {children}\n </div>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":";;;;;AAQA,SAAgB,EAAM,EAClB,iBAAc,IACd,aAAU,IACV,UAAO,UACP,YAAS,IACT,UACA,gBACA,gBACA,cAAW,IACX,YACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,aACA,kBACA,GAAG,KACQ;CACX,IAAM,EAAC,oBAAiB,gBAAa,yBAAqB,EAAqC;EAC3F,QAAQ,MAAgB,IAAc,WAAW;EACjD,UAAU,CAAC,KAAe;EAC1B,OAAO;EACV,CAAC;AAEF,QACI,kBAAC,GAAD;EACU;EACE;EACC;EACL;EACA;EACA;EACA;EACA;EACA;EACJ,WAAW,EACP,QACA,CAAC,KAAW,cACZ,KAAS,SAAS,KAClB,KAAe,CAAC,KAAY,eAC5B,KAAY,YACZ,GACA,EACH;EACD,gBAAgB,MAAU;AAEtB,GADA,EAAkB,EAAM,EACxB,IAAgB,EAAM;;EAE1B,GAAI;YAvBR,CAyBK,GACA,IACG,kBAAC,OAAD;GAAK,WAAU;aAAf,CACI,kBAAC,GAAD;IAAW,SAAQ;IAAY,QAAO;IAAS,CAAA,EAC/C,kBAAC,GAAD;IAAW,SAAQ;IAAO,OAAO;IAAG,WAAU;IAAwB,CAAA,CACpE;OAEN,EAEG;;;AAKnB,SAAgB,EAAY,EAAC,cAAW,aAAU,GAAG,KAA0B;AAC3E,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,EAAU;EAAE,GAAI;EACxC;EACC,CAAA;;AAKd,SAAgB,EAAU,EAAC,cAAW,aAAU,GAAG,KAA0B;AACzE,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,QAAQ,EAAU;EAAE,GAAI;EACtC;EACC,CAAA;;AAKd,SAAgB,EAAY,EAAC,cAAW,aAAU,GAAG,KAA0B;AAC3E,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,EAAU;EAAE,GAAI;EACxC;EACC,CAAA;;;;AC7Fd,SAAS,EAAiB,GAAe,GAAe;AAapD,QAZI,KAAS,IACF,SAGP,MAAU,IAAQ,IACX,QAGP,MAAU,IAAQ,KAAK,IAAQ,IACxB,QAGJ;;AAIX,SAAgB,EAAU,EACtB,aAAU,QACV,UACA,WACA,WACA,WAAQ,GACR,QACA,aAAU,IACV,cACA,UACA,GAAG,KACY;CACf,IAAM,IAAY,MAAY,KAAQ,SAAS,MAAY,KAAO,YAAY;AAwB9E,QAtBI,MAAY,SAER,kBAAC,OAAD;EACI,WAAW,EAAG,kBAAkB,EAAU;EAC1C,OAAO;GAAC,OAAO,KAAS,KAAA;GAAW,KAAK,KAAO,KAAA;GAAW,GAAG;GAAM;EACnE,GAAI;YAEH,MAAM,KAAK,EAAC,QAAQ,GAAM,GAAG,GAAG,MAC7B,kBAAC,OAAD;GAEI,WAAW,EAAG,YAAY,QAAQ,EAAU;GAC5C,OAAO;IACH,OAAO,EAAiB,GAAG,EAAM;IACjC,QAAQ,KAAU,KAAA;IAClB,cAAc,KAAU,KAAA;IAC3B;GACH,EAPO,EAOP,CACJ;EACA,CAAA,GAKV,kBAAC,OAAD;EACI,WAAW,EAAG,YAAY,GAAS,GAAW,EAAU;EACxD,OAAO;GACH,OAAO,KAAS,KAAA;GAChB,QAAQ,KAAU,KAAA;GAClB,cAAc,KAAU,KAAA;GACxB,GAAG;GACN;EACD,GAAI;EACN,CAAA"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./cn-CUSXNnjF.js";
1
+ import { t as e } from "./cn-YER3QsV1.js";
2
2
  import { useCallback as t, useRef as n } from "react";
3
3
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
4
  //#region src/components/controls/MSlider/MSlider.tsx
@@ -72,4 +72,4 @@ function a({ min: a = 0, max: o = 100, step: s = 1, value: c, onChange: l, marks
72
72
  //#endregion
73
73
  export { a as t };
74
74
 
75
- //# sourceMappingURL=MSlider-ByVuoFFc.js.map
75
+ //# sourceMappingURL=MSlider-5141rKeH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSlider-ByVuoFFc.js","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAQ,EACpB,SAAM,GACN,SAAM,KACN,UAAO,GACP,UACA,aACA,UACA,UACA,WAAQ,WACR,cAAW,IACX,cACA,GAAG,KACU;CACb,IAAM,IAAW,EAAuB,KAAK,EAEvC,KAAY,IAAQ,MAAQ,IAAM,KAAQ,KAE1C,IAAe,GAChB,MAAgB;EACb,IAAM,IAAU,KAAK,MAAM,IAAM,EAAK,GAAG;AACzC,SAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAQ,CAAC;IAEhD;EAAC;EAAK;EAAK;EAAK,CACnB,EAEK,IAAmB,GACpB,MAAoB;EACjB,IAAM,IAAQ,EAAS;AACvB,MAAI,CAAC,EAAO,QAAO;EACnB,IAAM,IAAO,EAAM,uBAAuB;AAE1C,SAAO,EAAa,KADL,IAAU,EAAK,QAAQ,EAAK,SACR,IAAM,GAAK;IAElD;EAAC;EAAK;EAAK;EAAO;EAAa,CAClC,EAEK,IAAoB,GACrB,MAA0B;AACvB,MAAI,EAAU;AACd,IAAE,gBAAgB;EAClB,IAAM,IAAS,EAAE;AAEjB,EADA,EAAO,kBAAkB,EAAE,UAAU,EACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC;EAErC,IAAM,KAAU,MAAqB;AACjC,KAAS,EAAiB,EAAG,QAAQ,CAAC;KAEpC,UAAa;AAEf,GADA,EAAO,oBAAoB,eAAe,EAAO,EACjD,EAAO,oBAAoB,aAAa,EAAK;;AAGjD,EADA,EAAO,iBAAiB,eAAe,EAAO,EAC9C,EAAO,iBAAiB,aAAa,EAAK;IAE9C;EAAC;EAAU;EAAU;EAAiB,CACzC;AAED,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,SAAS,KAAS,KAAY,YAAY,EAAU;EAAE,GAAI;YAAvF,CACK,KAAS,kBAAC,OAAD;GAAK,WAAU;aAAS;GAAY,CAAA,EAC9C,kBAAC,OAAD;GAAK,WAAU;GAAgB,KAAK;GAAU,eAAe;aAA7D,CACI,kBAAC,OAAD;IAAK,WAAU;cAAf,CACI,kBAAC,OAAD;KAAK,WAAU;KAAO,OAAO,EAAC,OAAO,GAAG,EAAQ,IAAG;KAAI,CAAA,EACvD,kBAAC,OAAD;KAAK,WAAU;KAAQ,OAAO,EAAC,MAAM,GAAG,EAAQ,IAAG;KAAI,CAAA,CACrD;OACL,KAAS,EAAM,SAAS,KACrB,kBAAC,OAAD;IAAK,WAAU;cACV,EAAM,KAAK,MAGJ,kBAAC,OAAD;KAAsB,WAAU;KAAO,OAAO,EAAC,MAAM,IAFnC,EAAK,QAAQ,MAAQ,IAAM,KAAQ,IAEe,IAAG;eAAvE,CACI,kBAAC,OAAD,EAAK,WAAU,QAAS,CAAA,EACvB,EAAK,SAAS,kBAAC,OAAD;MAAK,WAAU;gBAAS,EAAK;MAAY,CAAA,CACtD;OAHI,EAAK,MAGT,CAEZ;IACA,CAAA,CAER;KACJ"}
1
+ {"version":3,"file":"MSlider-5141rKeH.js","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAQ,EACpB,SAAM,GACN,SAAM,KACN,UAAO,GACP,UACA,aACA,UACA,UACA,WAAQ,WACR,cAAW,IACX,cACA,GAAG,KACU;CACb,IAAM,IAAW,EAAuB,KAAK,EAEvC,KAAY,IAAQ,MAAQ,IAAM,KAAQ,KAE1C,IAAe,GAChB,MAAgB;EACb,IAAM,IAAU,KAAK,MAAM,IAAM,EAAK,GAAG;AACzC,SAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAQ,CAAC;IAEhD;EAAC;EAAK;EAAK;EAAK,CACnB,EAEK,IAAmB,GACpB,MAAoB;EACjB,IAAM,IAAQ,EAAS;AACvB,MAAI,CAAC,EAAO,QAAO;EACnB,IAAM,IAAO,EAAM,uBAAuB;AAE1C,SAAO,EAAa,KADL,IAAU,EAAK,QAAQ,EAAK,SACR,IAAM,GAAK;IAElD;EAAC;EAAK;EAAK;EAAO;EAAa,CAClC,EAEK,IAAoB,GACrB,MAA0B;AACvB,MAAI,EAAU;AACd,IAAE,gBAAgB;EAClB,IAAM,IAAS,EAAE;AAEjB,EADA,EAAO,kBAAkB,EAAE,UAAU,EACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC;EAErC,IAAM,KAAU,MAAqB;AACjC,KAAS,EAAiB,EAAG,QAAQ,CAAC;KAEpC,UAAa;AAEf,GADA,EAAO,oBAAoB,eAAe,EAAO,EACjD,EAAO,oBAAoB,aAAa,EAAK;;AAGjD,EADA,EAAO,iBAAiB,eAAe,EAAO,EAC9C,EAAO,iBAAiB,aAAa,EAAK;IAE9C;EAAC;EAAU;EAAU;EAAiB,CACzC;AAED,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,UAAU,SAAS,KAAS,KAAY,YAAY,EAAU;EAAE,GAAI;YAAvF,CACK,KAAS,kBAAC,OAAD;GAAK,WAAU;aAAS;GAAY,CAAA,EAC9C,kBAAC,OAAD;GAAK,WAAU;GAAgB,KAAK;GAAU,eAAe;aAA7D,CACI,kBAAC,OAAD;IAAK,WAAU;cAAf,CACI,kBAAC,OAAD;KAAK,WAAU;KAAO,OAAO,EAAC,OAAO,GAAG,EAAQ,IAAG;KAAI,CAAA,EACvD,kBAAC,OAAD;KAAK,WAAU;KAAQ,OAAO,EAAC,MAAM,GAAG,EAAQ,IAAG;KAAI,CAAA,CACrD;OACL,KAAS,EAAM,SAAS,KACrB,kBAAC,OAAD;IAAK,WAAU;cACV,EAAM,KAAK,MAGJ,kBAAC,OAAD;KAAsB,WAAU;KAAO,OAAO,EAAC,MAAM,IAFnC,EAAK,QAAQ,MAAQ,IAAM,KAAQ,IAEe,IAAG;eAAvE,CACI,kBAAC,OAAD,EAAK,WAAU,QAAS,CAAA,EACvB,EAAK,SAAS,kBAAC,OAAD;MAAK,WAAU;gBAAS,EAAK;MAAY,CAAA,CACtD;OAHI,EAAK,MAGT,CAEZ;IACA,CAAA,CAER;KACJ"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./cn-CU5TNITO.cjs`);require(`./core-AKWkE8Bx.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r({min:r=0,max:i=100,step:a=1,value:o,onChange:s,marks:c,label:l,color:u=`primary`,disabled:d=!1,className:f,...p}){let m=(0,t.useRef)(null),h=(o-r)/(i-r)*100,g=(0,t.useCallback)(e=>{let t=Math.round(e/a)*a;return Math.min(i,Math.max(r,t))},[r,i,a]),_=(0,t.useCallback)(e=>{let t=m.current;if(!t)return o;let n=t.getBoundingClientRect();return g(r+(e-n.left)/n.width*(i-r))},[r,i,o,g]),v=(0,t.useCallback)(e=>{if(d)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId),s(_(e.clientX));let n=e=>{s(_(e.clientX))},r=()=>{t.removeEventListener(`pointermove`,n),t.removeEventListener(`pointerup`,r)};t.addEventListener(`pointermove`,n),t.addEventListener(`pointerup`,r)},[d,s,_]);return(0,n.jsxs)(`div`,{className:e.t(`slider`,`color-${u}`,d&&`disabled`,f),...p,children:[l&&(0,n.jsx)(`div`,{className:`label`,children:l}),(0,n.jsxs)(`div`,{className:`track-wrapper`,ref:m,onPointerDown:v,children:[(0,n.jsxs)(`div`,{className:`track`,children:[(0,n.jsx)(`div`,{className:`fill`,style:{width:`${h}%`}}),(0,n.jsx)(`div`,{className:`thumb`,style:{left:`${h}%`}})]}),c&&c.length>0&&(0,n.jsx)(`div`,{className:`marks`,children:c.map(e=>(0,n.jsxs)(`div`,{className:`mark`,style:{left:`${(e.value-r)/(i-r)*100}%`},children:[(0,n.jsx)(`div`,{className:`tick`}),e.label&&(0,n.jsx)(`div`,{className:`label`,children:e.label})]},e.value))})]})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
+ //# sourceMappingURL=MSlider-Ch3VjAJC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSlider-sH2Vt9Lw.cjs","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"2HAMA,SAAgB,EAAQ,CACpB,MAAM,EACN,MAAM,IACN,OAAO,EACP,QACA,WACA,QACA,QACA,QAAQ,UACR,WAAW,GACX,YACA,GAAG,GACU,CACb,IAAM,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAY,EAAQ,IAAQ,EAAM,GAAQ,IAE1C,GAAA,EAAA,EAAA,aACD,GAAgB,CACb,IAAM,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EACzC,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,EAAQ,CAAC,EAEhD,CAAC,EAAK,EAAK,EAAK,CACnB,CAEK,GAAA,EAAA,EAAA,aACD,GAAoB,CACjB,IAAM,EAAQ,EAAS,QACvB,GAAI,CAAC,EAAO,OAAO,EACnB,IAAM,EAAO,EAAM,uBAAuB,CAE1C,OAAO,EAAa,GADL,EAAU,EAAK,MAAQ,EAAK,OACR,EAAM,GAAK,EAElD,CAAC,EAAK,EAAK,EAAO,EAAa,CAClC,CAEK,GAAA,EAAA,EAAA,aACD,GAA0B,CACvB,GAAI,EAAU,OACd,EAAE,gBAAgB,CAClB,IAAM,EAAS,EAAE,cACjB,EAAO,kBAAkB,EAAE,UAAU,CACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC,CAErC,IAAM,EAAU,GAAqB,CACjC,EAAS,EAAiB,EAAG,QAAQ,CAAC,EAEpC,MAAa,CACf,EAAO,oBAAoB,cAAe,EAAO,CACjD,EAAO,oBAAoB,YAAa,EAAK,EAEjD,EAAO,iBAAiB,cAAe,EAAO,CAC9C,EAAO,iBAAiB,YAAa,EAAK,EAE9C,CAAC,EAAU,EAAU,EAAiB,CACzC,CAED,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,SAAS,IAAS,GAAY,WAAY,EAAU,CAAE,GAAI,WAAvF,CACK,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAY,CAAA,EAC9C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAU,cAAe,WAA7D,EACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iBAAf,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAO,MAAO,CAAC,MAAO,GAAG,EAAQ,GAAG,CAAI,CAAA,EACvD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,QAAQ,MAAO,CAAC,KAAM,GAAG,EAAQ,GAAG,CAAI,CAAA,CACrD,GACL,GAAS,EAAM,OAAS,IACrB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACV,EAAM,IAAK,IAGJ,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,OAAO,MAAO,CAAC,KAAM,IAFnC,EAAK,MAAQ,IAAQ,EAAM,GAAQ,IAEe,GAAG,UAAvE,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAS,CAAA,CACvB,EAAK,QAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAK,MAAY,CAAA,CACtD,EAHI,EAAK,MAGT,CAEZ,CACA,CAAA,CAER,GACJ"}
1
+ {"version":3,"file":"MSlider-Ch3VjAJC.cjs","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"0HAMA,SAAgB,EAAQ,CACpB,MAAM,EACN,MAAM,IACN,OAAO,EACP,QACA,WACA,QACA,QACA,QAAQ,UACR,WAAW,GACX,YACA,GAAG,GACU,CACb,IAAM,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAY,EAAQ,IAAQ,EAAM,GAAQ,IAE1C,GAAA,EAAA,EAAA,aACD,GAAgB,CACb,IAAM,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EACzC,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,EAAQ,CAAC,EAEhD,CAAC,EAAK,EAAK,EAAK,CACnB,CAEK,GAAA,EAAA,EAAA,aACD,GAAoB,CACjB,IAAM,EAAQ,EAAS,QACvB,GAAI,CAAC,EAAO,OAAO,EACnB,IAAM,EAAO,EAAM,uBAAuB,CAE1C,OAAO,EAAa,GADL,EAAU,EAAK,MAAQ,EAAK,OACR,EAAM,GAAK,EAElD,CAAC,EAAK,EAAK,EAAO,EAAa,CAClC,CAEK,GAAA,EAAA,EAAA,aACD,GAA0B,CACvB,GAAI,EAAU,OACd,EAAE,gBAAgB,CAClB,IAAM,EAAS,EAAE,cACjB,EAAO,kBAAkB,EAAE,UAAU,CACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC,CAErC,IAAM,EAAU,GAAqB,CACjC,EAAS,EAAiB,EAAG,QAAQ,CAAC,EAEpC,MAAa,CACf,EAAO,oBAAoB,cAAe,EAAO,CACjD,EAAO,oBAAoB,YAAa,EAAK,EAEjD,EAAO,iBAAiB,cAAe,EAAO,CAC9C,EAAO,iBAAiB,YAAa,EAAK,EAE9C,CAAC,EAAU,EAAU,EAAiB,CACzC,CAED,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,SAAS,IAAS,GAAY,WAAY,EAAU,CAAE,GAAI,WAAvF,CACK,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAY,CAAA,EAC9C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAU,cAAe,WAA7D,EACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iBAAf,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAO,MAAO,CAAC,MAAO,GAAG,EAAQ,GAAG,CAAI,CAAA,EACvD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,QAAQ,MAAO,CAAC,KAAM,GAAG,EAAQ,GAAG,CAAI,CAAA,CACrD,GACL,GAAS,EAAM,OAAS,IACrB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACV,EAAM,IAAK,IAGJ,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,OAAO,MAAO,CAAC,KAAM,IAFnC,EAAK,MAAQ,IAAQ,EAAM,GAAQ,IAEe,GAAG,UAAvE,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAS,CAAA,CACvB,EAAK,QAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAK,MAAY,CAAA,CACtD,EAHI,EAAK,MAGT,CAEZ,CACA,CAAA,CAER,GACJ"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./cn-CU5TNITO.cjs`);require(`./core-AKWkE8Bx.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r(e,t){let[n,r]=e,[i,a]=t,o=r-n||1;return e=>i+(e-n)/o*(a-i)}function i(e){if(e>=0)return 0;let t=o(e,0);return Math.floor(e/t)*t}function a(e,t=0){let n=o(t,e);return Math.ceil(e/n)*n}function o(e,t,n=5){let r=(t-e||1)/n,i=10**Math.floor(Math.log10(r)),a=r/i,o;return o=a<=1?1:a<=2?2:a<=5?5:10,o*i}function s(e,t,n=5){let r=o(e,t,n),i=Math.floor(e/r)*r,a=Math.ceil(t/r)*r,s=[];for(let e=i;e<=a+r*.01;e+=r)s.push(Math.round(e*1e10)/1e10);return s}function c(e){let t=1/0,n=-1/0;for(let r of e)for(let e of r)e<t&&(t=e),e>n&&(n=e);return t===1/0?[0,1]:t===n?[t-1,n+1]:[t,n]}function l(e){if(e.length===0)return[0,1];let t=Math.max(...e.map(e=>e.length)),n=-1/0;for(let r=0;r<t;r++){let t=0;for(let n of e)t+=n[r]??0;t>n&&(n=t)}return[0,n===0?1:n]}function u(e){return e.length===0?``:e.map((e,t)=>`${t===0?`M`:`L`}${e.x},${e.y}`).join(` `)}function d(e){if(e.length===0)return``;if(e.length===1)return`M${e[0].x},${e[0].y}`;if(e.length===2)return u(e);let t=`M${e[0].x},${e[0].y}`;for(let n=0;n<e.length-1;n++){let r=e[Math.max(n-1,0)],i=e[n],a=e[n+1],o=e[Math.min(n+2,e.length-1)],s=i.x+(a.x-r.x)/6,c=i.y+(a.y-r.y)/6,l=a.x-(o.x-i.x)/6,u=a.y-(o.y-i.y)/6;t+=` C${s},${c} ${l},${u} ${a.x},${a.y}`}return t}function f(e,t,n){if(e.length===0)return``;let r=n?d(e):u(e),i=e[e.length-1],a=e[0];return`${r} L${i.x},${t} L${a.x},${t} Z`}function p(e,t,n){if(e.length===0)return``;let r=n?d(e):u(e),i=[...t].reverse();return`${r} ${n?d(i).replace(/^M/,`L`):i.map(e=>`L${e.x},${e.y}`).join(` `)} Z`}function m(e,t,n,r,i){let a=i-r;if(a>=Math.PI*2-.001){let i=r+Math.PI;return[`M${e+n*Math.cos(r)},${t+n*Math.sin(r)}`,`A${n},${n} 0 1 1 ${e+n*Math.cos(i)},${t+n*Math.sin(i)}`,`A${n},${n} 0 1 1 ${e+n*Math.cos(r)},${t+n*Math.sin(r)}`].join(` `)}let o=+(a>Math.PI);return`M${e+n*Math.cos(r)},${t+n*Math.sin(r)} A${n},${n} 0 ${o} 1 ${e+n*Math.cos(i)},${t+n*Math.sin(i)}`}function h(e,t,n,r,i,a){let o=a-i;if(r<=0){if(o>=Math.PI*2-.001)return m(e,t,n,i,a)+` Z`;let r=e+n*Math.cos(i),s=t+n*Math.sin(i),c=e+n*Math.cos(a),l=t+n*Math.sin(a);return`M${e},${t} L${r},${s} A${n},${n} 0 ${+(o>Math.PI)} 1 ${c},${l} Z`}let s=e+n*Math.cos(i),c=t+n*Math.sin(i),l=e+n*Math.cos(a),u=t+n*Math.sin(a),d=e+r*Math.cos(a),f=t+r*Math.sin(a),p=e+r*Math.cos(i),h=t+r*Math.sin(i);if(o>=Math.PI*2-.001){let a=i+Math.PI,o=e+n*Math.cos(a),l=t+n*Math.sin(a),u=e+r*Math.cos(a),d=t+r*Math.sin(a);return[`M${s},${c}`,`A${n},${n} 0 1 1 ${o},${l}`,`A${n},${n} 0 1 1 ${s},${c}`,`M${p},${h}`,`A${r},${r} 0 1 0 ${u},${d}`,`A${r},${r} 0 1 0 ${p},${h}`,`Z`].join(` `)}let g=+(o>Math.PI);return[`M${s},${c}`,`A${n},${n} 0 ${g} 1 ${l},${u}`,`L${d},${f}`,`A${r},${r} 0 ${g} 0 ${p},${h}`,`Z`].join(` `)}var g=2;function _({data:i,type:a=`line`,color:o=`primary`,width:s=`100%`,height:c=40,padding:l=g,curved:p=!0,animated:m=!0,showMinMax:h=!1,fillOpacity:_=.15,className:v,style:y,...b}){let x=(0,t.useRef)(null),[S,C]=(0,t.useState)(!m),w=Math.max(0,l);(0,t.useEffect)(()=>{if(m){let e=requestAnimationFrame(()=>C(!0));return()=>cancelAnimationFrame(e)}},[m]);let{points:T,minIdx:E,maxIdx:D,svgWidth:O,svgHeight:k,barWidth:A}=(0,t.useMemo)(()=>{let e=i.length;if(e===0)return{points:[],minIdx:0,maxIdx:0,svgWidth:100,svgHeight:c,barWidth:0};let t=c,n=1/0,a=-1/0,o=0,s=0;for(let t=0;t<e;t++)i[t]<n&&(n=i[t],o=t),i[t]>a&&(a=i[t],s=t);n===a&&(--n,a+=1);let l=r([0,Math.max(e-1,1)],[w,98-w]),u=r([n,a],[t-w,w]),d=i.map((e,t)=>({x:l(t),y:u(e)})),f=e>1?(98-w*2)/e:98-w*2;return{points:d,minIdx:o,maxIdx:s,svgWidth:98,svgHeight:t,barWidth:f}},[i,c,w]);if(i.length===0)return null;let j=a===`bar`?``:p?d(T):u(T),M=a===`area`?f(T,k-w,p):``;return(0,n.jsx)(`div`,{className:e.t(`sparkline`,o,v),style:{width:s,height:c,...y},...b,children:(0,n.jsxs)(`svg`,{ref:x,viewBox:`0 0 ${O} ${k}`,preserveAspectRatio:`none`,className:e.t(`sparkline-svg`,S&&`mounted`),children:[a===`area`&&(0,n.jsx)(`path`,{className:`sparkline-area`,d:M,style:{opacity:_}}),a===`bar`?(0,n.jsx)(`g`,{className:`sparkline-bars`,children:T.map((e,t)=>{let r=k-w-e.y;return(0,n.jsx)(`rect`,{className:`sparkline-bar`,x:e.x-A*.4,y:e.y,width:A*.8,height:Math.max(r,.5),rx:1},t)})}):(0,n.jsx)(`path`,{className:`sparkline-line`,d:j}),h&&a!==`bar`&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(`circle`,{className:`sparkline-dot sparkline-dot-min`,cx:T[E].x,cy:T[E].y,r:2.5}),(0,n.jsx)(`circle`,{className:`sparkline-dot sparkline-dot-max`,cx:T[D].x,cy:T[D].y,r:2.5})]})]})})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=MSparkline-B6qpt5WM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSparkline-B-ld7hJu.cjs","names":[],"sources":["../src/components/data/MChart/utils/scales.ts","../src/components/data/MChart/utils/paths.ts","../src/components/data/MSparkline/MSparkline.tsx"],"sourcesContent":["export function createLinearScale(domain: [number, number], range: [number, number]): (value: number) => number {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0 || 1\n\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0)\n}\n\nexport function niceMin(min: number): number {\n if (min >= 0) return 0\n const step = niceStep(min, 0)\n return Math.floor(min / step) * step\n}\n\nexport function niceMax(max: number, min: number = 0): number {\n const step = niceStep(min, max)\n return Math.ceil(max / step) * step\n}\n\nexport function niceStep(min: number, max: number, ticks = 5): number {\n const range = max - min || 1\n const rough = range / ticks\n const pow = Math.pow(10, Math.floor(Math.log10(rough)))\n const normalized = rough / pow\n\n let nice: number\n if (normalized <= 1) nice = 1\n else if (normalized <= 2) nice = 2\n else if (normalized <= 5) nice = 5\n else nice = 10\n\n return nice * pow\n}\n\nexport function generateTicks(min: number, max: number, count = 5): number[] {\n const step = niceStep(min, max, count)\n const start = Math.floor(min / step) * step\n const end = Math.ceil(max / step) * step\n const ticks: number[] = []\n\n for (let v = start; v <= end + step * 0.01; v += step) {\n ticks.push(Math.round(v * 1e10) / 1e10)\n }\n\n return ticks\n}\n\nexport function getDataExtent(datasets: number[][]): [number, number] {\n let min = Infinity\n let max = -Infinity\n\n for (const data of datasets) {\n for (const v of data) {\n if (v < min) min = v\n if (v > max) max = v\n }\n }\n\n if (min === Infinity) return [0, 1]\n if (min === max) return [min - 1, max + 1]\n\n return [min, max]\n}\n\nexport function getStackedExtent(datasets: number[][]): [number, number] {\n if (datasets.length === 0) return [0, 1]\n\n const len = Math.max(...datasets.map((d) => d.length))\n let max = -Infinity\n\n for (let i = 0; i < len; i++) {\n let sum = 0\n for (const data of datasets) {\n sum += data[i] ?? 0\n }\n if (sum > max) max = sum\n }\n\n return [0, max === 0 ? 1 : max]\n}\n","export interface Point {\n x: number\n y: number\n}\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' ')\n}\n\nexport function curvedPath(points: Point[]): string {\n if (points.length === 0) return ''\n if (points.length === 1) return `M${points[0].x},${points[0].y}`\n if (points.length === 2) return linePath(points)\n\n let d = `M${points[0].x},${points[0].y}`\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[Math.max(i - 1, 0)]\n const p1 = points[i]\n const p2 = points[i + 1]\n const p3 = points[Math.min(i + 2, points.length - 1)]\n\n const cp1x = p1.x + (p2.x - p0.x) / 6\n const cp1y = p1.y + (p2.y - p0.y) / 6\n const cp2x = p2.x - (p3.x - p1.x) / 6\n const cp2y = p2.y - (p3.y - p1.y) / 6\n\n d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`\n }\n\n return d\n}\n\nexport function areaPath(points: Point[], baseline: number, curved: boolean): string {\n if (points.length === 0) return ''\n\n const topPath = curved ? curvedPath(points) : linePath(points)\n const last = points[points.length - 1]\n const first = points[0]\n\n return `${topPath} L${last.x},${baseline} L${first.x},${baseline} Z`\n}\n\nexport function stackedAreaPath(topPoints: Point[], bottomPoints: Point[], curved: boolean): string {\n if (topPoints.length === 0) return ''\n\n const topPath = curved ? curvedPath(topPoints) : linePath(topPoints)\n const reversed = [...bottomPoints].reverse()\n const bottomPath = curved\n ? curvedPath(reversed).replace(/^M/, 'L')\n : reversed.map((p) => `L${p.x},${p.y}`).join(' ')\n\n return `${topPath} ${bottomPath} Z`\n}\n\nexport function pieArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n return [\n `M${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(mid)},${cy + r * Math.sin(mid)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n const x1 = cx + r * Math.cos(startAngle)\n const y1 = cy + r * Math.sin(startAngle)\n const x2 = cx + r * Math.cos(endAngle)\n const y2 = cy + r * Math.sin(endAngle)\n\n return `M${x1},${y1} A${r},${r} 0 ${largeArc} 1 ${x2},${y2}`\n}\n\nexport function pieSector(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n startAngle: number,\n endAngle: number\n): string {\n const sweep = endAngle - startAngle\n\n if (innerR <= 0) {\n if (sweep >= Math.PI * 2 - 0.001) {\n return pieArc(cx, cy, outerR, startAngle, endAngle) + ' Z'\n }\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(endAngle)\n const y2 = cy + outerR * Math.sin(endAngle)\n const largeArc = sweep > Math.PI ? 1 : 0\n return `M${cx},${cy} L${x1},${y1} A${outerR},${outerR} 0 ${largeArc} 1 ${x2},${y2} Z`\n }\n\n const ox1 = cx + outerR * Math.cos(startAngle)\n const oy1 = cy + outerR * Math.sin(startAngle)\n const ox2 = cx + outerR * Math.cos(endAngle)\n const oy2 = cy + outerR * Math.sin(endAngle)\n const ix1 = cx + innerR * Math.cos(endAngle)\n const iy1 = cy + innerR * Math.sin(endAngle)\n const ix2 = cx + innerR * Math.cos(startAngle)\n const iy2 = cy + innerR * Math.sin(startAngle)\n\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n const omx = cx + outerR * Math.cos(mid)\n const omy = cy + outerR * Math.sin(mid)\n const imx = cx + innerR * Math.cos(mid)\n const imy = cy + innerR * Math.sin(mid)\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 1 1 ${omx},${omy}`,\n `A${outerR},${outerR} 0 1 1 ${ox1},${oy1}`,\n `M${ix2},${iy2}`,\n `A${innerR},${innerR} 0 1 0 ${imx},${imy}`,\n `A${innerR},${innerR} 0 1 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 ${largeArc} 1 ${ox2},${oy2}`,\n `L${ix1},${iy1}`,\n `A${innerR},${innerR} 0 ${largeArc} 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n}\n","import {useMemo, useRef, useEffect, useState} from 'react'\nimport type {MSparklineProps} from './MSparkline.types'\nimport {cn} from '../../../utils/cn'\nimport {createLinearScale} from '../MChart/utils/scales'\nimport {linePath, curvedPath, areaPath} from '../MChart/utils/paths'\nimport type {Point} from '../MChart/utils/paths'\nimport './MSparkline.css'\n\nconst DEFAULT_PADDING = 2\n\nexport function MSparkline({\n data,\n type = 'line',\n color = 'primary',\n width = '100%',\n height = 40,\n padding = DEFAULT_PADDING,\n curved = true,\n animated = true,\n showMinMax = false,\n fillOpacity = 0.15,\n className,\n style,\n ...rest\n}: MSparklineProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const [mounted, setMounted] = useState(!animated)\n const resolvedPadding = Math.max(0, padding)\n\n useEffect(() => {\n if (animated) {\n const id = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(id)\n }\n }, [animated])\n\n const {points, minIdx, maxIdx, svgWidth, svgHeight, barWidth} = useMemo(() => {\n const len = data.length\n if (len === 0) {\n return {\n points: [] as Point[],\n minIdx: 0,\n maxIdx: 0,\n svgWidth: 100,\n svgHeight: height,\n barWidth: 0,\n }\n }\n\n const svgW = 98\n const svgH = height\n\n let min = Infinity\n let max = -Infinity\n let mnI = 0\n let mxI = 0\n\n for (let i = 0; i < len; i++) {\n if (data[i] < min) {\n min = data[i]\n mnI = i\n }\n if (data[i] > max) {\n max = data[i]\n mxI = i\n }\n }\n\n if (min === max) {\n min -= 1\n max += 1\n }\n\n const xScale = createLinearScale([0, Math.max(len - 1, 1)], [resolvedPadding, svgW - resolvedPadding])\n const yScale = createLinearScale([min, max], [svgH - resolvedPadding, resolvedPadding])\n\n const pts: Point[] = data.map((v, i) => ({x: xScale(i), y: yScale(v)}))\n const bw = len > 1 ? (svgW - resolvedPadding * 2) / len : svgW - resolvedPadding * 2\n\n return {points: pts, minIdx: mnI, maxIdx: mxI, svgWidth: svgW, svgHeight: svgH, barWidth: bw}\n }, [data, height, resolvedPadding])\n\n if (data.length === 0) return null\n\n const pathStr = type === 'bar' ? '' : curved ? curvedPath(points) : linePath(points)\n const areaStr = type === 'area' ? areaPath(points, svgHeight - resolvedPadding, curved) : ''\n\n return (\n <div className={cn('sparkline', color, className)} style={{width, height, ...style}} {...rest}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n preserveAspectRatio=\"none\"\n className={cn('sparkline-svg', mounted && 'mounted')}\n >\n {type === 'area' && <path className=\"sparkline-area\" d={areaStr} style={{opacity: fillOpacity}} />}\n {type === 'bar' ? (\n <g className=\"sparkline-bars\">\n {points.map((p, i) => {\n const barH = svgHeight - resolvedPadding - p.y\n return (\n <rect\n key={i}\n className=\"sparkline-bar\"\n x={p.x - barWidth * 0.4}\n y={p.y}\n width={barWidth * 0.8}\n height={Math.max(barH, 0.5)}\n rx={1}\n />\n )\n })}\n </g>\n ) : (\n <path className=\"sparkline-line\" d={pathStr} />\n )}\n {showMinMax && type !== 'bar' && (\n <>\n <circle\n className=\"sparkline-dot sparkline-dot-min\"\n cx={points[minIdx].x}\n cy={points[minIdx].y}\n r={2.5}\n />\n <circle\n className=\"sparkline-dot sparkline-dot-max\"\n cx={points[maxIdx].x}\n cy={points[maxIdx].y}\n r={2.5}\n />\n </>\n )}\n </svg>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MSparkline-B6qpt5WM.cjs","names":[],"sources":["../src/components/data/MChart/utils/scales.ts","../src/components/data/MChart/utils/paths.ts","../src/components/data/MSparkline/MSparkline.tsx"],"sourcesContent":["export function createLinearScale(domain: [number, number], range: [number, number]): (value: number) => number {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0 || 1\n\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0)\n}\n\nexport function niceMin(min: number): number {\n if (min >= 0) return 0\n const step = niceStep(min, 0)\n return Math.floor(min / step) * step\n}\n\nexport function niceMax(max: number, min: number = 0): number {\n const step = niceStep(min, max)\n return Math.ceil(max / step) * step\n}\n\nexport function niceStep(min: number, max: number, ticks = 5): number {\n const range = max - min || 1\n const rough = range / ticks\n const pow = Math.pow(10, Math.floor(Math.log10(rough)))\n const normalized = rough / pow\n\n let nice: number\n if (normalized <= 1) nice = 1\n else if (normalized <= 2) nice = 2\n else if (normalized <= 5) nice = 5\n else nice = 10\n\n return nice * pow\n}\n\nexport function generateTicks(min: number, max: number, count = 5): number[] {\n const step = niceStep(min, max, count)\n const start = Math.floor(min / step) * step\n const end = Math.ceil(max / step) * step\n const ticks: number[] = []\n\n for (let v = start; v <= end + step * 0.01; v += step) {\n ticks.push(Math.round(v * 1e10) / 1e10)\n }\n\n return ticks\n}\n\nexport function getDataExtent(datasets: number[][]): [number, number] {\n let min = Infinity\n let max = -Infinity\n\n for (const data of datasets) {\n for (const v of data) {\n if (v < min) min = v\n if (v > max) max = v\n }\n }\n\n if (min === Infinity) return [0, 1]\n if (min === max) return [min - 1, max + 1]\n\n return [min, max]\n}\n\nexport function getStackedExtent(datasets: number[][]): [number, number] {\n if (datasets.length === 0) return [0, 1]\n\n const len = Math.max(...datasets.map((d) => d.length))\n let max = -Infinity\n\n for (let i = 0; i < len; i++) {\n let sum = 0\n for (const data of datasets) {\n sum += data[i] ?? 0\n }\n if (sum > max) max = sum\n }\n\n return [0, max === 0 ? 1 : max]\n}\n","export interface Point {\n x: number\n y: number\n}\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' ')\n}\n\nexport function curvedPath(points: Point[]): string {\n if (points.length === 0) return ''\n if (points.length === 1) return `M${points[0].x},${points[0].y}`\n if (points.length === 2) return linePath(points)\n\n let d = `M${points[0].x},${points[0].y}`\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[Math.max(i - 1, 0)]\n const p1 = points[i]\n const p2 = points[i + 1]\n const p3 = points[Math.min(i + 2, points.length - 1)]\n\n const cp1x = p1.x + (p2.x - p0.x) / 6\n const cp1y = p1.y + (p2.y - p0.y) / 6\n const cp2x = p2.x - (p3.x - p1.x) / 6\n const cp2y = p2.y - (p3.y - p1.y) / 6\n\n d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`\n }\n\n return d\n}\n\nexport function areaPath(points: Point[], baseline: number, curved: boolean): string {\n if (points.length === 0) return ''\n\n const topPath = curved ? curvedPath(points) : linePath(points)\n const last = points[points.length - 1]\n const first = points[0]\n\n return `${topPath} L${last.x},${baseline} L${first.x},${baseline} Z`\n}\n\nexport function stackedAreaPath(topPoints: Point[], bottomPoints: Point[], curved: boolean): string {\n if (topPoints.length === 0) return ''\n\n const topPath = curved ? curvedPath(topPoints) : linePath(topPoints)\n const reversed = [...bottomPoints].reverse()\n const bottomPath = curved\n ? curvedPath(reversed).replace(/^M/, 'L')\n : reversed.map((p) => `L${p.x},${p.y}`).join(' ')\n\n return `${topPath} ${bottomPath} Z`\n}\n\nexport function pieArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n return [\n `M${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(mid)},${cy + r * Math.sin(mid)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n const x1 = cx + r * Math.cos(startAngle)\n const y1 = cy + r * Math.sin(startAngle)\n const x2 = cx + r * Math.cos(endAngle)\n const y2 = cy + r * Math.sin(endAngle)\n\n return `M${x1},${y1} A${r},${r} 0 ${largeArc} 1 ${x2},${y2}`\n}\n\nexport function pieSector(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n startAngle: number,\n endAngle: number\n): string {\n const sweep = endAngle - startAngle\n\n if (innerR <= 0) {\n if (sweep >= Math.PI * 2 - 0.001) {\n return pieArc(cx, cy, outerR, startAngle, endAngle) + ' Z'\n }\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(endAngle)\n const y2 = cy + outerR * Math.sin(endAngle)\n const largeArc = sweep > Math.PI ? 1 : 0\n return `M${cx},${cy} L${x1},${y1} A${outerR},${outerR} 0 ${largeArc} 1 ${x2},${y2} Z`\n }\n\n const ox1 = cx + outerR * Math.cos(startAngle)\n const oy1 = cy + outerR * Math.sin(startAngle)\n const ox2 = cx + outerR * Math.cos(endAngle)\n const oy2 = cy + outerR * Math.sin(endAngle)\n const ix1 = cx + innerR * Math.cos(endAngle)\n const iy1 = cy + innerR * Math.sin(endAngle)\n const ix2 = cx + innerR * Math.cos(startAngle)\n const iy2 = cy + innerR * Math.sin(startAngle)\n\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n const omx = cx + outerR * Math.cos(mid)\n const omy = cy + outerR * Math.sin(mid)\n const imx = cx + innerR * Math.cos(mid)\n const imy = cy + innerR * Math.sin(mid)\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 1 1 ${omx},${omy}`,\n `A${outerR},${outerR} 0 1 1 ${ox1},${oy1}`,\n `M${ix2},${iy2}`,\n `A${innerR},${innerR} 0 1 0 ${imx},${imy}`,\n `A${innerR},${innerR} 0 1 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 ${largeArc} 1 ${ox2},${oy2}`,\n `L${ix1},${iy1}`,\n `A${innerR},${innerR} 0 ${largeArc} 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n}\n","import {useMemo, useRef, useEffect, useState} from 'react'\nimport type {MSparklineProps} from './MSparkline.types'\nimport {cn} from '../../../utils/cn'\nimport {createLinearScale} from '../MChart/utils/scales'\nimport {linePath, curvedPath, areaPath} from '../MChart/utils/paths'\nimport type {Point} from '../MChart/utils/paths'\nimport './MSparkline.css'\n\nconst DEFAULT_PADDING = 2\n\nexport function MSparkline({\n data,\n type = 'line',\n color = 'primary',\n width = '100%',\n height = 40,\n padding = DEFAULT_PADDING,\n curved = true,\n animated = true,\n showMinMax = false,\n fillOpacity = 0.15,\n className,\n style,\n ...rest\n}: MSparklineProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const [mounted, setMounted] = useState(!animated)\n const resolvedPadding = Math.max(0, padding)\n\n useEffect(() => {\n if (animated) {\n const id = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(id)\n }\n }, [animated])\n\n const {points, minIdx, maxIdx, svgWidth, svgHeight, barWidth} = useMemo(() => {\n const len = data.length\n if (len === 0) {\n return {\n points: [] as Point[],\n minIdx: 0,\n maxIdx: 0,\n svgWidth: 100,\n svgHeight: height,\n barWidth: 0,\n }\n }\n\n const svgW = 98\n const svgH = height\n\n let min = Infinity\n let max = -Infinity\n let mnI = 0\n let mxI = 0\n\n for (let i = 0; i < len; i++) {\n if (data[i] < min) {\n min = data[i]\n mnI = i\n }\n if (data[i] > max) {\n max = data[i]\n mxI = i\n }\n }\n\n if (min === max) {\n min -= 1\n max += 1\n }\n\n const xScale = createLinearScale([0, Math.max(len - 1, 1)], [resolvedPadding, svgW - resolvedPadding])\n const yScale = createLinearScale([min, max], [svgH - resolvedPadding, resolvedPadding])\n\n const pts: Point[] = data.map((v, i) => ({x: xScale(i), y: yScale(v)}))\n const bw = len > 1 ? (svgW - resolvedPadding * 2) / len : svgW - resolvedPadding * 2\n\n return {points: pts, minIdx: mnI, maxIdx: mxI, svgWidth: svgW, svgHeight: svgH, barWidth: bw}\n }, [data, height, resolvedPadding])\n\n if (data.length === 0) return null\n\n const pathStr = type === 'bar' ? '' : curved ? curvedPath(points) : linePath(points)\n const areaStr = type === 'area' ? areaPath(points, svgHeight - resolvedPadding, curved) : ''\n\n return (\n <div className={cn('sparkline', color, className)} style={{width, height, ...style}} {...rest}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n preserveAspectRatio=\"none\"\n className={cn('sparkline-svg', mounted && 'mounted')}\n >\n {type === 'area' && <path className=\"sparkline-area\" d={areaStr} style={{opacity: fillOpacity}} />}\n {type === 'bar' ? (\n <g className=\"sparkline-bars\">\n {points.map((p, i) => {\n const barH = svgHeight - resolvedPadding - p.y\n return (\n <rect\n key={i}\n className=\"sparkline-bar\"\n x={p.x - barWidth * 0.4}\n y={p.y}\n width={barWidth * 0.8}\n height={Math.max(barH, 0.5)}\n rx={1}\n />\n )\n })}\n </g>\n ) : (\n <path className=\"sparkline-line\" d={pathStr} />\n )}\n {showMinMax && type !== 'bar' && (\n <>\n <circle\n className=\"sparkline-dot sparkline-dot-min\"\n cx={points[minIdx].x}\n cy={points[minIdx].y}\n r={2.5}\n />\n <circle\n className=\"sparkline-dot sparkline-dot-max\"\n cx={points[maxIdx].x}\n cy={points[maxIdx].y}\n r={2.5}\n />\n </>\n )}\n </svg>\n </div>\n )\n}\n"],"mappings":"0HAAA,SAAgB,EAAkB,EAA0B,EAAoD,CAC5G,GAAM,CAAC,EAAI,GAAM,EACX,CAAC,EAAI,GAAM,EACX,EAAO,EAAK,GAAM,EAExB,MAAQ,IAAkB,GAAO,EAAQ,GAAM,GAAS,EAAK,GAGjE,SAAgB,EAAQ,EAAqB,CACzC,GAAI,GAAO,EAAG,MAAO,GACrB,IAAM,EAAO,EAAS,EAAK,EAAE,CAC7B,OAAO,KAAK,MAAM,EAAM,EAAK,CAAG,EAGpC,SAAgB,EAAQ,EAAa,EAAc,EAAW,CAC1D,IAAM,EAAO,EAAS,EAAK,EAAI,CAC/B,OAAO,KAAK,KAAK,EAAM,EAAK,CAAG,EAGnC,SAAgB,EAAS,EAAa,EAAa,EAAQ,EAAW,CAElE,IAAM,GADQ,EAAM,GAAO,GACL,EAChB,EAAe,IAAI,KAAK,MAAM,KAAK,MAAM,EAAM,CAAC,CAChD,EAAa,EAAQ,EAEvB,EAMJ,MALA,CAGK,EAHD,GAAc,EAAU,EACnB,GAAc,EAAU,EACxB,GAAc,EAAU,EACrB,GAEL,EAAO,EAGlB,SAAgB,EAAc,EAAa,EAAa,EAAQ,EAAa,CACzE,IAAM,EAAO,EAAS,EAAK,EAAK,EAAM,CAChC,EAAQ,KAAK,MAAM,EAAM,EAAK,CAAG,EACjC,EAAM,KAAK,KAAK,EAAM,EAAK,CAAG,EAC9B,EAAkB,EAAE,CAE1B,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,EAAO,IAAM,GAAK,EAC7C,EAAM,KAAK,KAAK,MAAM,EAAI,KAAK,CAAG,KAAK,CAG3C,OAAO,EAGX,SAAgB,EAAc,EAAwC,CAClE,IAAI,EAAM,IACN,EAAM,KAEV,IAAK,IAAM,KAAQ,EACf,IAAK,IAAM,KAAK,EACR,EAAI,IAAK,EAAM,GACf,EAAI,IAAK,EAAM,GAO3B,OAHI,IAAQ,IAAiB,CAAC,EAAG,EAAE,CAC/B,IAAQ,EAAY,CAAC,EAAM,EAAG,EAAM,EAAE,CAEnC,CAAC,EAAK,EAAI,CAGrB,SAAgB,EAAiB,EAAwC,CACrE,GAAI,EAAS,SAAW,EAAG,MAAO,CAAC,EAAG,EAAE,CAExC,IAAM,EAAM,KAAK,IAAI,GAAG,EAAS,IAAK,GAAM,EAAE,OAAO,CAAC,CAClD,EAAM,KAEV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,IAAK,CAC1B,IAAI,EAAM,EACV,IAAK,IAAM,KAAQ,EACf,GAAO,EAAK,IAAM,EAElB,EAAM,IAAK,EAAM,GAGzB,MAAO,CAAC,EAAG,IAAQ,EAAI,EAAI,EAAI,CCzEnC,SAAgB,EAAS,EAAyB,CAE9C,OADI,EAAO,SAAW,EAAU,GACzB,EAAO,KAAK,EAAG,IAAM,GAAG,IAAM,EAAI,IAAM,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAGhF,SAAgB,EAAW,EAAyB,CAChD,GAAI,EAAO,SAAW,EAAG,MAAO,GAChC,GAAI,EAAO,SAAW,EAAG,MAAO,IAAI,EAAO,GAAG,EAAE,GAAG,EAAO,GAAG,IAC7D,GAAI,EAAO,SAAW,EAAG,OAAO,EAAS,EAAO,CAEhD,IAAI,EAAI,IAAI,EAAO,GAAG,EAAE,GAAG,EAAO,GAAG,IAErC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAS,EAAG,IAAK,CACxC,IAAM,EAAK,EAAO,KAAK,IAAI,EAAI,EAAG,EAAE,EAC9B,EAAK,EAAO,GACZ,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,KAAK,IAAI,EAAI,EAAG,EAAO,OAAS,EAAE,EAE9C,EAAO,EAAG,GAAK,EAAG,EAAI,EAAG,GAAK,EAC9B,EAAO,EAAG,GAAK,EAAG,EAAI,EAAG,GAAK,EAC9B,EAAO,EAAG,GAAK,EAAG,EAAI,EAAG,GAAK,EAC9B,EAAO,EAAG,GAAK,EAAG,EAAI,EAAG,GAAK,EAEpC,GAAK,KAAK,EAAK,GAAG,EAAK,GAAG,EAAK,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAG,IAGzD,OAAO,EAGX,SAAgB,EAAS,EAAiB,EAAkB,EAAyB,CACjF,GAAI,EAAO,SAAW,EAAG,MAAO,GAEhC,IAAM,EAAU,EAAS,EAAW,EAAO,CAAG,EAAS,EAAO,CACxD,EAAO,EAAO,EAAO,OAAS,GAC9B,EAAQ,EAAO,GAErB,MAAO,GAAG,EAAQ,IAAI,EAAK,EAAE,GAAG,EAAS,IAAI,EAAM,EAAE,GAAG,EAAS,IAGrE,SAAgB,EAAgB,EAAoB,EAAuB,EAAyB,CAChG,GAAI,EAAU,SAAW,EAAG,MAAO,GAEnC,IAAM,EAAU,EAAS,EAAW,EAAU,CAAG,EAAS,EAAU,CAC9D,EAAW,CAAC,GAAG,EAAa,CAAC,SAAS,CAK5C,MAAO,GAAG,EAAQ,GAJC,EACb,EAAW,EAAS,CAAC,QAAQ,KAAM,IAAI,CACvC,EAAS,IAAK,GAAM,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAErB,IAGpC,SAAgB,EAAO,EAAY,EAAY,EAAW,EAAoB,EAA0B,CACpG,IAAM,EAAQ,EAAW,EACzB,GAAI,GAAS,KAAK,GAAK,EAAI,KAAO,CAC9B,IAAM,EAAM,EAAa,KAAK,GAC9B,MAAO,CACH,IAAI,EAAK,EAAI,KAAK,IAAI,EAAW,CAAC,GAAG,EAAK,EAAI,KAAK,IAAI,EAAW,GAClE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAK,EAAI,KAAK,IAAI,EAAI,CAAC,GAAG,EAAK,EAAI,KAAK,IAAI,EAAI,GACpE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAK,EAAI,KAAK,IAAI,EAAW,CAAC,GAAG,EAAK,EAAI,KAAK,IAAI,EAAW,GACrF,CAAC,KAAK,IAAI,CAGf,IAAM,EAAW,IAAQ,KAAK,IAM9B,MAAO,IALI,EAAK,EAAI,KAAK,IAAI,EAAW,CAK1B,GAJH,EAAK,EAAI,KAAK,IAAI,EAAW,CAIpB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAS,KAHlC,EAAK,EAAI,KAAK,IAAI,EAAS,CAGe,GAF1C,EAAK,EAAI,KAAK,IAAI,EAAS,GAK1C,SAAgB,EACZ,EACA,EACA,EACA,EACA,EACA,EACM,CACN,IAAM,EAAQ,EAAW,EAEzB,GAAI,GAAU,EAAG,CACb,GAAI,GAAS,KAAK,GAAK,EAAI,KACvB,OAAO,EAAO,EAAI,EAAI,EAAQ,EAAY,EAAS,CAAG,KAE1D,IAAM,EAAK,EAAK,EAAS,KAAK,IAAI,EAAW,CACvC,EAAK,EAAK,EAAS,KAAK,IAAI,EAAW,CACvC,EAAK,EAAK,EAAS,KAAK,IAAI,EAAS,CACrC,EAAK,EAAK,EAAS,KAAK,IAAI,EAAS,CAE3C,MAAO,IAAI,EAAG,GAAG,EAAG,IAAI,EAAG,GAAG,EAAG,IAAI,EAAO,GAAG,EAAO,KADrC,IAAQ,KAAK,IACsC,KAAK,EAAG,GAAG,EAAG,IAGtF,IAAM,EAAM,EAAK,EAAS,KAAK,IAAI,EAAW,CACxC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAW,CACxC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAS,CACtC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAS,CACtC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAS,CACtC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAS,CACtC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAW,CACxC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAW,CAE9C,GAAI,GAAS,KAAK,GAAK,EAAI,KAAO,CAC9B,IAAM,EAAM,EAAa,KAAK,GACxB,EAAM,EAAK,EAAS,KAAK,IAAI,EAAI,CACjC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAI,CACjC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAI,CACjC,EAAM,EAAK,EAAS,KAAK,IAAI,EAAI,CACvC,MAAO,CACH,IAAI,EAAI,GAAG,IACX,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG,IACrC,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG,IACrC,IAAI,EAAI,GAAG,IACX,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG,IACrC,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG,IACrC,IACH,CAAC,KAAK,IAAI,CAGf,IAAM,EAAW,IAAQ,KAAK,IAC9B,MAAO,CACH,IAAI,EAAI,GAAG,IACX,IAAI,EAAO,GAAG,EAAO,KAAK,EAAS,KAAK,EAAI,GAAG,IAC/C,IAAI,EAAI,GAAG,IACX,IAAI,EAAO,GAAG,EAAO,KAAK,EAAS,KAAK,EAAI,GAAG,IAC/C,IACH,CAAC,KAAK,IAAI,CC3Hf,IAAM,EAAkB,EAExB,SAAgB,EAAW,CACvB,OACA,OAAO,OACP,QAAQ,UACR,QAAQ,OACR,SAAS,GACT,UAAU,EACV,SAAS,GACT,WAAW,GACX,aAAa,GACb,cAAc,IACd,YACA,QACA,GAAG,GACa,CAChB,IAAM,GAAA,EAAA,EAAA,QAA+B,KAAK,CACpC,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,CAAC,EAAS,CAC3C,EAAkB,KAAK,IAAI,EAAG,EAAQ,EAE5C,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAU,CACV,IAAM,EAAK,0BAA4B,EAAW,GAAK,CAAC,CACxD,UAAa,qBAAqB,EAAG,GAE1C,CAAC,EAAS,CAAC,CAEd,GAAM,CAAC,SAAQ,SAAQ,SAAQ,WAAU,YAAW,aAAA,EAAA,EAAA,aAA0B,CAC1E,IAAM,EAAM,EAAK,OACjB,GAAI,IAAQ,EACR,MAAO,CACH,OAAQ,EAAE,CACV,OAAQ,EACR,OAAQ,EACR,SAAU,IACV,UAAW,EACX,SAAU,EACb,CAGL,IACM,EAAO,EAET,EAAM,IACN,EAAM,KACN,EAAM,EACN,EAAM,EAEV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,IACjB,EAAK,GAAK,IACV,EAAM,EAAK,GACX,EAAM,GAEN,EAAK,GAAK,IACV,EAAM,EAAK,GACX,EAAM,GAIV,IAAQ,IACR,IACA,GAAO,GAGX,IAAM,EAAS,EAAkB,CAAC,EAAG,KAAK,IAAI,EAAM,EAAG,EAAE,CAAC,CAAE,CAAC,EAAiB,GAAO,EAAgB,CAAC,CAChG,EAAS,EAAkB,CAAC,EAAK,EAAI,CAAE,CAAC,EAAO,EAAiB,EAAgB,CAAC,CAEjF,EAAe,EAAK,KAAK,EAAG,KAAO,CAAC,EAAG,EAAO,EAAE,CAAE,EAAG,EAAO,EAAE,CAAC,EAAE,CACjE,EAAK,EAAM,GAAK,GAAO,EAAkB,GAAK,EAAM,GAAO,EAAkB,EAEnF,MAAO,CAAC,OAAQ,EAAK,OAAQ,EAAK,OAAQ,EAAK,SAAU,GAAM,UAAW,EAAM,SAAU,EAAG,EAC9F,CAAC,EAAM,EAAQ,EAAgB,CAAC,CAEnC,GAAI,EAAK,SAAW,EAAG,OAAO,KAE9B,IAAM,EAAU,IAAS,MAAQ,GAAK,EAAS,EAAW,EAAO,CAAG,EAAS,EAAO,CAC9E,EAAU,IAAS,OAAS,EAAS,EAAQ,EAAY,EAAiB,EAAO,CAAG,GAE1F,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,YAAa,EAAO,EAAU,CAAE,MAAO,CAAC,QAAO,SAAQ,GAAG,EAAM,CAAE,GAAI,YACrF,EAAA,EAAA,MAAC,MAAD,CACI,IAAK,EACL,QAAS,OAAO,EAAS,GAAG,IAC5B,oBAAoB,OACpB,UAAW,EAAA,EAAG,gBAAiB,GAAW,UAAU,UAJxD,CAMK,IAAS,SAAU,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,EAAG,EAAS,MAAO,CAAC,QAAS,EAAY,CAAI,CAAA,CACjG,IAAS,OACN,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,0BACR,EAAO,KAAK,EAAG,IAAM,CAClB,IAAM,EAAO,EAAY,EAAkB,EAAE,EAC7C,OACI,EAAA,EAAA,KAAC,OAAD,CAEI,UAAU,gBACV,EAAG,EAAE,EAAI,EAAW,GACpB,EAAG,EAAE,EACL,MAAO,EAAW,GAClB,OAAQ,KAAK,IAAI,EAAM,GAAI,CAC3B,GAAI,EACN,CAPO,EAOP,EAER,CACF,CAAA,EAEJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,EAAG,EAAW,CAAA,CAElD,GAAc,IAAS,QACpB,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,SAAD,CACI,UAAU,kCACV,GAAI,EAAO,GAAQ,EACnB,GAAI,EAAO,GAAQ,EACnB,EAAG,IACL,CAAA,EACF,EAAA,EAAA,KAAC,SAAD,CACI,UAAU,kCACV,GAAI,EAAO,GAAQ,EACnB,GAAI,EAAO,GAAQ,EACnB,EAAG,IACL,CAAA,CACH,CAAA,CAAA,CAEL,GACJ,CAAA"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./cn-CUSXNnjF.js";
1
+ import { t as e } from "./cn-YER3QsV1.js";
2
2
  import { useEffect as t, useMemo as n, useRef as r, useState as i } from "react";
3
3
  import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
4
4
  //#region src/components/data/MChart/utils/scales.ts
@@ -204,4 +204,4 @@ function S({ data: l, type: u = "line", color: d = "primary", width: f = "100%",
204
204
  //#endregion
205
205
  export { b as a, f as c, u as d, l as f, h as i, p as l, _ as n, v as o, g as r, c as s, S as t, m as u };
206
206
 
207
- //# sourceMappingURL=MSparkline-DbtdM0W6.js.map
207
+ //# sourceMappingURL=MSparkline-voNWOLNz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSparkline-DbtdM0W6.js","names":[],"sources":["../src/components/data/MChart/utils/scales.ts","../src/components/data/MChart/utils/paths.ts","../src/components/data/MSparkline/MSparkline.tsx"],"sourcesContent":["export function createLinearScale(domain: [number, number], range: [number, number]): (value: number) => number {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0 || 1\n\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0)\n}\n\nexport function niceMin(min: number): number {\n if (min >= 0) return 0\n const step = niceStep(min, 0)\n return Math.floor(min / step) * step\n}\n\nexport function niceMax(max: number, min: number = 0): number {\n const step = niceStep(min, max)\n return Math.ceil(max / step) * step\n}\n\nexport function niceStep(min: number, max: number, ticks = 5): number {\n const range = max - min || 1\n const rough = range / ticks\n const pow = Math.pow(10, Math.floor(Math.log10(rough)))\n const normalized = rough / pow\n\n let nice: number\n if (normalized <= 1) nice = 1\n else if (normalized <= 2) nice = 2\n else if (normalized <= 5) nice = 5\n else nice = 10\n\n return nice * pow\n}\n\nexport function generateTicks(min: number, max: number, count = 5): number[] {\n const step = niceStep(min, max, count)\n const start = Math.floor(min / step) * step\n const end = Math.ceil(max / step) * step\n const ticks: number[] = []\n\n for (let v = start; v <= end + step * 0.01; v += step) {\n ticks.push(Math.round(v * 1e10) / 1e10)\n }\n\n return ticks\n}\n\nexport function getDataExtent(datasets: number[][]): [number, number] {\n let min = Infinity\n let max = -Infinity\n\n for (const data of datasets) {\n for (const v of data) {\n if (v < min) min = v\n if (v > max) max = v\n }\n }\n\n if (min === Infinity) return [0, 1]\n if (min === max) return [min - 1, max + 1]\n\n return [min, max]\n}\n\nexport function getStackedExtent(datasets: number[][]): [number, number] {\n if (datasets.length === 0) return [0, 1]\n\n const len = Math.max(...datasets.map((d) => d.length))\n let max = -Infinity\n\n for (let i = 0; i < len; i++) {\n let sum = 0\n for (const data of datasets) {\n sum += data[i] ?? 0\n }\n if (sum > max) max = sum\n }\n\n return [0, max === 0 ? 1 : max]\n}\n","export interface Point {\n x: number\n y: number\n}\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' ')\n}\n\nexport function curvedPath(points: Point[]): string {\n if (points.length === 0) return ''\n if (points.length === 1) return `M${points[0].x},${points[0].y}`\n if (points.length === 2) return linePath(points)\n\n let d = `M${points[0].x},${points[0].y}`\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[Math.max(i - 1, 0)]\n const p1 = points[i]\n const p2 = points[i + 1]\n const p3 = points[Math.min(i + 2, points.length - 1)]\n\n const cp1x = p1.x + (p2.x - p0.x) / 6\n const cp1y = p1.y + (p2.y - p0.y) / 6\n const cp2x = p2.x - (p3.x - p1.x) / 6\n const cp2y = p2.y - (p3.y - p1.y) / 6\n\n d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`\n }\n\n return d\n}\n\nexport function areaPath(points: Point[], baseline: number, curved: boolean): string {\n if (points.length === 0) return ''\n\n const topPath = curved ? curvedPath(points) : linePath(points)\n const last = points[points.length - 1]\n const first = points[0]\n\n return `${topPath} L${last.x},${baseline} L${first.x},${baseline} Z`\n}\n\nexport function stackedAreaPath(topPoints: Point[], bottomPoints: Point[], curved: boolean): string {\n if (topPoints.length === 0) return ''\n\n const topPath = curved ? curvedPath(topPoints) : linePath(topPoints)\n const reversed = [...bottomPoints].reverse()\n const bottomPath = curved\n ? curvedPath(reversed).replace(/^M/, 'L')\n : reversed.map((p) => `L${p.x},${p.y}`).join(' ')\n\n return `${topPath} ${bottomPath} Z`\n}\n\nexport function pieArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n return [\n `M${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(mid)},${cy + r * Math.sin(mid)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n const x1 = cx + r * Math.cos(startAngle)\n const y1 = cy + r * Math.sin(startAngle)\n const x2 = cx + r * Math.cos(endAngle)\n const y2 = cy + r * Math.sin(endAngle)\n\n return `M${x1},${y1} A${r},${r} 0 ${largeArc} 1 ${x2},${y2}`\n}\n\nexport function pieSector(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n startAngle: number,\n endAngle: number\n): string {\n const sweep = endAngle - startAngle\n\n if (innerR <= 0) {\n if (sweep >= Math.PI * 2 - 0.001) {\n return pieArc(cx, cy, outerR, startAngle, endAngle) + ' Z'\n }\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(endAngle)\n const y2 = cy + outerR * Math.sin(endAngle)\n const largeArc = sweep > Math.PI ? 1 : 0\n return `M${cx},${cy} L${x1},${y1} A${outerR},${outerR} 0 ${largeArc} 1 ${x2},${y2} Z`\n }\n\n const ox1 = cx + outerR * Math.cos(startAngle)\n const oy1 = cy + outerR * Math.sin(startAngle)\n const ox2 = cx + outerR * Math.cos(endAngle)\n const oy2 = cy + outerR * Math.sin(endAngle)\n const ix1 = cx + innerR * Math.cos(endAngle)\n const iy1 = cy + innerR * Math.sin(endAngle)\n const ix2 = cx + innerR * Math.cos(startAngle)\n const iy2 = cy + innerR * Math.sin(startAngle)\n\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n const omx = cx + outerR * Math.cos(mid)\n const omy = cy + outerR * Math.sin(mid)\n const imx = cx + innerR * Math.cos(mid)\n const imy = cy + innerR * Math.sin(mid)\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 1 1 ${omx},${omy}`,\n `A${outerR},${outerR} 0 1 1 ${ox1},${oy1}`,\n `M${ix2},${iy2}`,\n `A${innerR},${innerR} 0 1 0 ${imx},${imy}`,\n `A${innerR},${innerR} 0 1 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 ${largeArc} 1 ${ox2},${oy2}`,\n `L${ix1},${iy1}`,\n `A${innerR},${innerR} 0 ${largeArc} 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n}\n","import {useMemo, useRef, useEffect, useState} from 'react'\nimport type {MSparklineProps} from './MSparkline.types'\nimport {cn} from '../../../utils/cn'\nimport {createLinearScale} from '../MChart/utils/scales'\nimport {linePath, curvedPath, areaPath} from '../MChart/utils/paths'\nimport type {Point} from '../MChart/utils/paths'\nimport './MSparkline.css'\n\nconst DEFAULT_PADDING = 2\n\nexport function MSparkline({\n data,\n type = 'line',\n color = 'primary',\n width = '100%',\n height = 40,\n padding = DEFAULT_PADDING,\n curved = true,\n animated = true,\n showMinMax = false,\n fillOpacity = 0.15,\n className,\n style,\n ...rest\n}: MSparklineProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const [mounted, setMounted] = useState(!animated)\n const resolvedPadding = Math.max(0, padding)\n\n useEffect(() => {\n if (animated) {\n const id = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(id)\n }\n }, [animated])\n\n const {points, minIdx, maxIdx, svgWidth, svgHeight, barWidth} = useMemo(() => {\n const len = data.length\n if (len === 0) {\n return {\n points: [] as Point[],\n minIdx: 0,\n maxIdx: 0,\n svgWidth: 100,\n svgHeight: height,\n barWidth: 0,\n }\n }\n\n const svgW = 98\n const svgH = height\n\n let min = Infinity\n let max = -Infinity\n let mnI = 0\n let mxI = 0\n\n for (let i = 0; i < len; i++) {\n if (data[i] < min) {\n min = data[i]\n mnI = i\n }\n if (data[i] > max) {\n max = data[i]\n mxI = i\n }\n }\n\n if (min === max) {\n min -= 1\n max += 1\n }\n\n const xScale = createLinearScale([0, Math.max(len - 1, 1)], [resolvedPadding, svgW - resolvedPadding])\n const yScale = createLinearScale([min, max], [svgH - resolvedPadding, resolvedPadding])\n\n const pts: Point[] = data.map((v, i) => ({x: xScale(i), y: yScale(v)}))\n const bw = len > 1 ? (svgW - resolvedPadding * 2) / len : svgW - resolvedPadding * 2\n\n return {points: pts, minIdx: mnI, maxIdx: mxI, svgWidth: svgW, svgHeight: svgH, barWidth: bw}\n }, [data, height, resolvedPadding])\n\n if (data.length === 0) return null\n\n const pathStr = type === 'bar' ? '' : curved ? curvedPath(points) : linePath(points)\n const areaStr = type === 'area' ? areaPath(points, svgHeight - resolvedPadding, curved) : ''\n\n return (\n <div className={cn('sparkline', color, className)} style={{width, height, ...style}} {...rest}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n preserveAspectRatio=\"none\"\n className={cn('sparkline-svg', mounted && 'mounted')}\n >\n {type === 'area' && <path className=\"sparkline-area\" d={areaStr} style={{opacity: fillOpacity}} />}\n {type === 'bar' ? (\n <g className=\"sparkline-bars\">\n {points.map((p, i) => {\n const barH = svgHeight - resolvedPadding - p.y\n return (\n <rect\n key={i}\n className=\"sparkline-bar\"\n x={p.x - barWidth * 0.4}\n y={p.y}\n width={barWidth * 0.8}\n height={Math.max(barH, 0.5)}\n rx={1}\n />\n )\n })}\n </g>\n ) : (\n <path className=\"sparkline-line\" d={pathStr} />\n )}\n {showMinMax && type !== 'bar' && (\n <>\n <circle\n className=\"sparkline-dot sparkline-dot-min\"\n cx={points[minIdx].x}\n cy={points[minIdx].y}\n r={2.5}\n />\n <circle\n className=\"sparkline-dot sparkline-dot-max\"\n cx={points[maxIdx].x}\n cy={points[maxIdx].y}\n r={2.5}\n />\n </>\n )}\n </svg>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MSparkline-voNWOLNz.js","names":[],"sources":["../src/components/data/MChart/utils/scales.ts","../src/components/data/MChart/utils/paths.ts","../src/components/data/MSparkline/MSparkline.tsx"],"sourcesContent":["export function createLinearScale(domain: [number, number], range: [number, number]): (value: number) => number {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0 || 1\n\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0)\n}\n\nexport function niceMin(min: number): number {\n if (min >= 0) return 0\n const step = niceStep(min, 0)\n return Math.floor(min / step) * step\n}\n\nexport function niceMax(max: number, min: number = 0): number {\n const step = niceStep(min, max)\n return Math.ceil(max / step) * step\n}\n\nexport function niceStep(min: number, max: number, ticks = 5): number {\n const range = max - min || 1\n const rough = range / ticks\n const pow = Math.pow(10, Math.floor(Math.log10(rough)))\n const normalized = rough / pow\n\n let nice: number\n if (normalized <= 1) nice = 1\n else if (normalized <= 2) nice = 2\n else if (normalized <= 5) nice = 5\n else nice = 10\n\n return nice * pow\n}\n\nexport function generateTicks(min: number, max: number, count = 5): number[] {\n const step = niceStep(min, max, count)\n const start = Math.floor(min / step) * step\n const end = Math.ceil(max / step) * step\n const ticks: number[] = []\n\n for (let v = start; v <= end + step * 0.01; v += step) {\n ticks.push(Math.round(v * 1e10) / 1e10)\n }\n\n return ticks\n}\n\nexport function getDataExtent(datasets: number[][]): [number, number] {\n let min = Infinity\n let max = -Infinity\n\n for (const data of datasets) {\n for (const v of data) {\n if (v < min) min = v\n if (v > max) max = v\n }\n }\n\n if (min === Infinity) return [0, 1]\n if (min === max) return [min - 1, max + 1]\n\n return [min, max]\n}\n\nexport function getStackedExtent(datasets: number[][]): [number, number] {\n if (datasets.length === 0) return [0, 1]\n\n const len = Math.max(...datasets.map((d) => d.length))\n let max = -Infinity\n\n for (let i = 0; i < len; i++) {\n let sum = 0\n for (const data of datasets) {\n sum += data[i] ?? 0\n }\n if (sum > max) max = sum\n }\n\n return [0, max === 0 ? 1 : max]\n}\n","export interface Point {\n x: number\n y: number\n}\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' ')\n}\n\nexport function curvedPath(points: Point[]): string {\n if (points.length === 0) return ''\n if (points.length === 1) return `M${points[0].x},${points[0].y}`\n if (points.length === 2) return linePath(points)\n\n let d = `M${points[0].x},${points[0].y}`\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[Math.max(i - 1, 0)]\n const p1 = points[i]\n const p2 = points[i + 1]\n const p3 = points[Math.min(i + 2, points.length - 1)]\n\n const cp1x = p1.x + (p2.x - p0.x) / 6\n const cp1y = p1.y + (p2.y - p0.y) / 6\n const cp2x = p2.x - (p3.x - p1.x) / 6\n const cp2y = p2.y - (p3.y - p1.y) / 6\n\n d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`\n }\n\n return d\n}\n\nexport function areaPath(points: Point[], baseline: number, curved: boolean): string {\n if (points.length === 0) return ''\n\n const topPath = curved ? curvedPath(points) : linePath(points)\n const last = points[points.length - 1]\n const first = points[0]\n\n return `${topPath} L${last.x},${baseline} L${first.x},${baseline} Z`\n}\n\nexport function stackedAreaPath(topPoints: Point[], bottomPoints: Point[], curved: boolean): string {\n if (topPoints.length === 0) return ''\n\n const topPath = curved ? curvedPath(topPoints) : linePath(topPoints)\n const reversed = [...bottomPoints].reverse()\n const bottomPath = curved\n ? curvedPath(reversed).replace(/^M/, 'L')\n : reversed.map((p) => `L${p.x},${p.y}`).join(' ')\n\n return `${topPath} ${bottomPath} Z`\n}\n\nexport function pieArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n return [\n `M${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(mid)},${cy + r * Math.sin(mid)}`,\n `A${r},${r} 0 1 1 ${cx + r * Math.cos(startAngle)},${cy + r * Math.sin(startAngle)}`,\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n const x1 = cx + r * Math.cos(startAngle)\n const y1 = cy + r * Math.sin(startAngle)\n const x2 = cx + r * Math.cos(endAngle)\n const y2 = cy + r * Math.sin(endAngle)\n\n return `M${x1},${y1} A${r},${r} 0 ${largeArc} 1 ${x2},${y2}`\n}\n\nexport function pieSector(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n startAngle: number,\n endAngle: number\n): string {\n const sweep = endAngle - startAngle\n\n if (innerR <= 0) {\n if (sweep >= Math.PI * 2 - 0.001) {\n return pieArc(cx, cy, outerR, startAngle, endAngle) + ' Z'\n }\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(endAngle)\n const y2 = cy + outerR * Math.sin(endAngle)\n const largeArc = sweep > Math.PI ? 1 : 0\n return `M${cx},${cy} L${x1},${y1} A${outerR},${outerR} 0 ${largeArc} 1 ${x2},${y2} Z`\n }\n\n const ox1 = cx + outerR * Math.cos(startAngle)\n const oy1 = cy + outerR * Math.sin(startAngle)\n const ox2 = cx + outerR * Math.cos(endAngle)\n const oy2 = cy + outerR * Math.sin(endAngle)\n const ix1 = cx + innerR * Math.cos(endAngle)\n const iy1 = cy + innerR * Math.sin(endAngle)\n const ix2 = cx + innerR * Math.cos(startAngle)\n const iy2 = cy + innerR * Math.sin(startAngle)\n\n if (sweep >= Math.PI * 2 - 0.001) {\n const mid = startAngle + Math.PI\n const omx = cx + outerR * Math.cos(mid)\n const omy = cy + outerR * Math.sin(mid)\n const imx = cx + innerR * Math.cos(mid)\n const imy = cy + innerR * Math.sin(mid)\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 1 1 ${omx},${omy}`,\n `A${outerR},${outerR} 0 1 1 ${ox1},${oy1}`,\n `M${ix2},${iy2}`,\n `A${innerR},${innerR} 0 1 0 ${imx},${imy}`,\n `A${innerR},${innerR} 0 1 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n }\n\n const largeArc = sweep > Math.PI ? 1 : 0\n return [\n `M${ox1},${oy1}`,\n `A${outerR},${outerR} 0 ${largeArc} 1 ${ox2},${oy2}`,\n `L${ix1},${iy1}`,\n `A${innerR},${innerR} 0 ${largeArc} 0 ${ix2},${iy2}`,\n 'Z',\n ].join(' ')\n}\n","import {useMemo, useRef, useEffect, useState} from 'react'\nimport type {MSparklineProps} from './MSparkline.types'\nimport {cn} from '../../../utils/cn'\nimport {createLinearScale} from '../MChart/utils/scales'\nimport {linePath, curvedPath, areaPath} from '../MChart/utils/paths'\nimport type {Point} from '../MChart/utils/paths'\nimport './MSparkline.css'\n\nconst DEFAULT_PADDING = 2\n\nexport function MSparkline({\n data,\n type = 'line',\n color = 'primary',\n width = '100%',\n height = 40,\n padding = DEFAULT_PADDING,\n curved = true,\n animated = true,\n showMinMax = false,\n fillOpacity = 0.15,\n className,\n style,\n ...rest\n}: MSparklineProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const [mounted, setMounted] = useState(!animated)\n const resolvedPadding = Math.max(0, padding)\n\n useEffect(() => {\n if (animated) {\n const id = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(id)\n }\n }, [animated])\n\n const {points, minIdx, maxIdx, svgWidth, svgHeight, barWidth} = useMemo(() => {\n const len = data.length\n if (len === 0) {\n return {\n points: [] as Point[],\n minIdx: 0,\n maxIdx: 0,\n svgWidth: 100,\n svgHeight: height,\n barWidth: 0,\n }\n }\n\n const svgW = 98\n const svgH = height\n\n let min = Infinity\n let max = -Infinity\n let mnI = 0\n let mxI = 0\n\n for (let i = 0; i < len; i++) {\n if (data[i] < min) {\n min = data[i]\n mnI = i\n }\n if (data[i] > max) {\n max = data[i]\n mxI = i\n }\n }\n\n if (min === max) {\n min -= 1\n max += 1\n }\n\n const xScale = createLinearScale([0, Math.max(len - 1, 1)], [resolvedPadding, svgW - resolvedPadding])\n const yScale = createLinearScale([min, max], [svgH - resolvedPadding, resolvedPadding])\n\n const pts: Point[] = data.map((v, i) => ({x: xScale(i), y: yScale(v)}))\n const bw = len > 1 ? (svgW - resolvedPadding * 2) / len : svgW - resolvedPadding * 2\n\n return {points: pts, minIdx: mnI, maxIdx: mxI, svgWidth: svgW, svgHeight: svgH, barWidth: bw}\n }, [data, height, resolvedPadding])\n\n if (data.length === 0) return null\n\n const pathStr = type === 'bar' ? '' : curved ? curvedPath(points) : linePath(points)\n const areaStr = type === 'area' ? areaPath(points, svgHeight - resolvedPadding, curved) : ''\n\n return (\n <div className={cn('sparkline', color, className)} style={{width, height, ...style}} {...rest}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n preserveAspectRatio=\"none\"\n className={cn('sparkline-svg', mounted && 'mounted')}\n >\n {type === 'area' && <path className=\"sparkline-area\" d={areaStr} style={{opacity: fillOpacity}} />}\n {type === 'bar' ? (\n <g className=\"sparkline-bars\">\n {points.map((p, i) => {\n const barH = svgHeight - resolvedPadding - p.y\n return (\n <rect\n key={i}\n className=\"sparkline-bar\"\n x={p.x - barWidth * 0.4}\n y={p.y}\n width={barWidth * 0.8}\n height={Math.max(barH, 0.5)}\n rx={1}\n />\n )\n })}\n </g>\n ) : (\n <path className=\"sparkline-line\" d={pathStr} />\n )}\n {showMinMax && type !== 'bar' && (\n <>\n <circle\n className=\"sparkline-dot sparkline-dot-min\"\n cx={points[minIdx].x}\n cy={points[minIdx].y}\n r={2.5}\n />\n <circle\n className=\"sparkline-dot sparkline-dot-max\"\n cx={points[maxIdx].x}\n cy={points[maxIdx].y}\n r={2.5}\n />\n </>\n )}\n </svg>\n </div>\n )\n}\n"],"mappings":";;;;AAAA,SAAgB,EAAkB,GAA0B,GAAoD;CAC5G,IAAM,CAAC,GAAI,KAAM,GACX,CAAC,GAAI,KAAM,GACX,IAAO,IAAK,KAAM;AAExB,SAAQ,MAAkB,KAAO,IAAQ,KAAM,KAAS,IAAK;;AAGjE,SAAgB,EAAQ,GAAqB;AACzC,KAAI,KAAO,EAAG,QAAO;CACrB,IAAM,IAAO,EAAS,GAAK,EAAE;AAC7B,QAAO,KAAK,MAAM,IAAM,EAAK,GAAG;;AAGpC,SAAgB,EAAQ,GAAa,IAAc,GAAW;CAC1D,IAAM,IAAO,EAAS,GAAK,EAAI;AAC/B,QAAO,KAAK,KAAK,IAAM,EAAK,GAAG;;AAGnC,SAAgB,EAAS,GAAa,GAAa,IAAQ,GAAW;CAElE,IAAM,KADQ,IAAM,KAAO,KACL,GAChB,IAAe,MAAI,KAAK,MAAM,KAAK,MAAM,EAAM,CAAC,EAChD,IAAa,IAAQ,GAEvB;AAMJ,QALA,AAGK,IAHD,KAAc,IAAU,IACnB,KAAc,IAAU,IACxB,KAAc,IAAU,IACrB,IAEL,IAAO;;AAGlB,SAAgB,EAAc,GAAa,GAAa,IAAQ,GAAa;CACzE,IAAM,IAAO,EAAS,GAAK,GAAK,EAAM,EAChC,IAAQ,KAAK,MAAM,IAAM,EAAK,GAAG,GACjC,IAAM,KAAK,KAAK,IAAM,EAAK,GAAG,GAC9B,IAAkB,EAAE;AAE1B,MAAK,IAAI,IAAI,GAAO,KAAK,IAAM,IAAO,KAAM,KAAK,EAC7C,GAAM,KAAK,KAAK,MAAM,IAAI,KAAK,GAAG,KAAK;AAG3C,QAAO;;AAGX,SAAgB,EAAc,GAAwC;CAClE,IAAI,IAAM,UACN,IAAM;AAEV,MAAK,IAAM,KAAQ,EACf,MAAK,IAAM,KAAK,EAEZ,CADI,IAAI,MAAK,IAAM,IACf,IAAI,MAAK,IAAM;AAO3B,QAHI,MAAQ,WAAiB,CAAC,GAAG,EAAE,GAC/B,MAAQ,IAAY,CAAC,IAAM,GAAG,IAAM,EAAE,GAEnC,CAAC,GAAK,EAAI;;AAGrB,SAAgB,EAAiB,GAAwC;AACrE,KAAI,EAAS,WAAW,EAAG,QAAO,CAAC,GAAG,EAAE;CAExC,IAAM,IAAM,KAAK,IAAI,GAAG,EAAS,KAAK,MAAM,EAAE,OAAO,CAAC,EAClD,IAAM;AAEV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAK,KAAK;EAC1B,IAAI,IAAM;AACV,OAAK,IAAM,KAAQ,EACf,MAAO,EAAK,MAAM;AAEtB,EAAI,IAAM,MAAK,IAAM;;AAGzB,QAAO,CAAC,GAAG,MAAQ,IAAI,IAAI,EAAI;;;;ACzEnC,SAAgB,EAAS,GAAyB;AAE9C,QADI,EAAO,WAAW,IAAU,KACzB,EAAO,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI;;AAGhF,SAAgB,EAAW,GAAyB;AAChD,KAAI,EAAO,WAAW,EAAG,QAAO;AAChC,KAAI,EAAO,WAAW,EAAG,QAAO,IAAI,EAAO,GAAG,EAAE,GAAG,EAAO,GAAG;AAC7D,KAAI,EAAO,WAAW,EAAG,QAAO,EAAS,EAAO;CAEhD,IAAI,IAAI,IAAI,EAAO,GAAG,EAAE,GAAG,EAAO,GAAG;AAErC,MAAK,IAAI,IAAI,GAAG,IAAI,EAAO,SAAS,GAAG,KAAK;EACxC,IAAM,IAAK,EAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAC9B,IAAK,EAAO,IACZ,IAAK,EAAO,IAAI,IAChB,IAAK,EAAO,KAAK,IAAI,IAAI,GAAG,EAAO,SAAS,EAAE,GAE9C,IAAO,EAAG,KAAK,EAAG,IAAI,EAAG,KAAK,GAC9B,IAAO,EAAG,KAAK,EAAG,IAAI,EAAG,KAAK,GAC9B,IAAO,EAAG,KAAK,EAAG,IAAI,EAAG,KAAK,GAC9B,IAAO,EAAG,KAAK,EAAG,IAAI,EAAG,KAAK;AAEpC,OAAK,KAAK,EAAK,GAAG,EAAK,GAAG,EAAK,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAG;;AAGzD,QAAO;;AAGX,SAAgB,EAAS,GAAiB,GAAkB,GAAyB;AACjF,KAAI,EAAO,WAAW,EAAG,QAAO;CAEhC,IAAM,IAAU,IAAS,EAAW,EAAO,GAAG,EAAS,EAAO,EACxD,IAAO,EAAO,EAAO,SAAS,IAC9B,IAAQ,EAAO;AAErB,QAAO,GAAG,EAAQ,IAAI,EAAK,EAAE,GAAG,EAAS,IAAI,EAAM,EAAE,GAAG,EAAS;;AAGrE,SAAgB,EAAgB,GAAoB,GAAuB,GAAyB;AAChG,KAAI,EAAU,WAAW,EAAG,QAAO;CAEnC,IAAM,IAAU,IAAS,EAAW,EAAU,GAAG,EAAS,EAAU,EAC9D,IAAW,CAAC,GAAG,EAAa,CAAC,SAAS;AAK5C,QAAO,GAAG,EAAQ,GAJC,IACb,EAAW,EAAS,CAAC,QAAQ,MAAM,IAAI,GACvC,EAAS,KAAK,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAErB;;AAGpC,SAAgB,EAAO,GAAY,GAAY,GAAW,GAAoB,GAA0B;CACpG,IAAM,IAAQ,IAAW;AACzB,KAAI,KAAS,KAAK,KAAK,IAAI,MAAO;EAC9B,IAAM,IAAM,IAAa,KAAK;AAC9B,SAAO;GACH,IAAI,IAAK,IAAI,KAAK,IAAI,EAAW,CAAC,GAAG,IAAK,IAAI,KAAK,IAAI,EAAW;GAClE,IAAI,EAAE,GAAG,EAAE,SAAS,IAAK,IAAI,KAAK,IAAI,EAAI,CAAC,GAAG,IAAK,IAAI,KAAK,IAAI,EAAI;GACpE,IAAI,EAAE,GAAG,EAAE,SAAS,IAAK,IAAI,KAAK,IAAI,EAAW,CAAC,GAAG,IAAK,IAAI,KAAK,IAAI,EAAW;GACrF,CAAC,KAAK,IAAI;;CAGf,IAAM,IAAW,MAAQ,KAAK;AAM9B,QAAO,IALI,IAAK,IAAI,KAAK,IAAI,EAAW,CAK1B,GAJH,IAAK,IAAI,KAAK,IAAI,EAAW,CAIpB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAS,KAHlC,IAAK,IAAI,KAAK,IAAI,EAAS,CAGe,GAF1C,IAAK,IAAI,KAAK,IAAI,EAAS;;AAK1C,SAAgB,EACZ,GACA,GACA,GACA,GACA,GACA,GACM;CACN,IAAM,IAAQ,IAAW;AAEzB,KAAI,KAAU,GAAG;AACb,MAAI,KAAS,KAAK,KAAK,IAAI,KACvB,QAAO,EAAO,GAAI,GAAI,GAAQ,GAAY,EAAS,GAAG;EAE1D,IAAM,IAAK,IAAK,IAAS,KAAK,IAAI,EAAW,EACvC,IAAK,IAAK,IAAS,KAAK,IAAI,EAAW,EACvC,IAAK,IAAK,IAAS,KAAK,IAAI,EAAS,EACrC,IAAK,IAAK,IAAS,KAAK,IAAI,EAAS;AAE3C,SAAO,IAAI,EAAG,GAAG,EAAG,IAAI,EAAG,GAAG,EAAG,IAAI,EAAO,GAAG,EAAO,KADrC,MAAQ,KAAK,IACsC,KAAK,EAAG,GAAG,EAAG;;CAGtF,IAAM,IAAM,IAAK,IAAS,KAAK,IAAI,EAAW,EACxC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAW,EACxC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAS,EACtC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAS,EACtC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAS,EACtC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAS,EACtC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAW,EACxC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAW;AAE9C,KAAI,KAAS,KAAK,KAAK,IAAI,MAAO;EAC9B,IAAM,IAAM,IAAa,KAAK,IACxB,IAAM,IAAK,IAAS,KAAK,IAAI,EAAI,EACjC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAI,EACjC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAI,EACjC,IAAM,IAAK,IAAS,KAAK,IAAI,EAAI;AACvC,SAAO;GACH,IAAI,EAAI,GAAG;GACX,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG;GACrC,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG;GACrC,IAAI,EAAI,GAAG;GACX,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG;GACrC,IAAI,EAAO,GAAG,EAAO,SAAS,EAAI,GAAG;GACrC;GACH,CAAC,KAAK,IAAI;;CAGf,IAAM,IAAW,MAAQ,KAAK;AAC9B,QAAO;EACH,IAAI,EAAI,GAAG;EACX,IAAI,EAAO,GAAG,EAAO,KAAK,EAAS,KAAK,EAAI,GAAG;EAC/C,IAAI,EAAI,GAAG;EACX,IAAI,EAAO,GAAG,EAAO,KAAK,EAAS,KAAK,EAAI,GAAG;EAC/C;EACH,CAAC,KAAK,IAAI;;;;AC3Hf,IAAM,IAAkB;AAExB,SAAgB,EAAW,EACvB,SACA,UAAO,QACP,WAAQ,WACR,WAAQ,QACR,YAAS,IACT,aAAU,GACV,YAAS,IACT,cAAW,IACX,gBAAa,IACb,iBAAc,KACd,cACA,UACA,GAAG,KACa;CAChB,IAAM,IAAS,EAAsB,KAAK,EACpC,CAAC,GAAS,KAAc,EAAS,CAAC,EAAS,EAC3C,IAAkB,KAAK,IAAI,GAAG,EAAQ;AAE5C,SAAgB;AACZ,MAAI,GAAU;GACV,IAAM,IAAK,4BAA4B,EAAW,GAAK,CAAC;AACxD,gBAAa,qBAAqB,EAAG;;IAE1C,CAAC,EAAS,CAAC;CAEd,IAAM,EAAC,WAAQ,WAAQ,WAAQ,aAAU,cAAW,gBAAY,QAAc;EAC1E,IAAM,IAAM,EAAK;AACjB,MAAI,MAAQ,EACR,QAAO;GACH,QAAQ,EAAE;GACV,QAAQ;GACR,QAAQ;GACR,UAAU;GACV,WAAW;GACX,UAAU;GACb;EAGL,IACM,IAAO,GAET,IAAM,UACN,IAAM,WACN,IAAM,GACN,IAAM;AAEV,OAAK,IAAI,IAAI,GAAG,IAAI,GAAK,IAKrB,CAJI,EAAK,KAAK,MACV,IAAM,EAAK,IACX,IAAM,IAEN,EAAK,KAAK,MACV,IAAM,EAAK,IACX,IAAM;AAId,EAAI,MAAQ,MACR,KACA,KAAO;EAGX,IAAM,IAAS,EAAkB,CAAC,GAAG,KAAK,IAAI,IAAM,GAAG,EAAE,CAAC,EAAE,CAAC,GAAiB,KAAO,EAAgB,CAAC,EAChG,IAAS,EAAkB,CAAC,GAAK,EAAI,EAAE,CAAC,IAAO,GAAiB,EAAgB,CAAC,EAEjF,IAAe,EAAK,KAAK,GAAG,OAAO;GAAC,GAAG,EAAO,EAAE;GAAE,GAAG,EAAO,EAAE;GAAC,EAAE,EACjE,IAAK,IAAM,KAAK,KAAO,IAAkB,KAAK,IAAM,KAAO,IAAkB;AAEnF,SAAO;GAAC,QAAQ;GAAK,QAAQ;GAAK,QAAQ;GAAK,UAAU;GAAM,WAAW;GAAM,UAAU;GAAG;IAC9F;EAAC;EAAM;EAAQ;EAAgB,CAAC;AAEnC,KAAI,EAAK,WAAW,EAAG,QAAO;CAE9B,IAAM,IAAU,MAAS,QAAQ,KAAK,IAAS,EAAW,EAAO,GAAG,EAAS,EAAO,EAC9E,IAAU,MAAS,SAAS,EAAS,GAAQ,IAAY,GAAiB,EAAO,GAAG;AAE1F,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,aAAa,GAAO,EAAU;EAAE,OAAO;GAAC;GAAO;GAAQ,GAAG;GAAM;EAAE,GAAI;YACrF,kBAAC,OAAD;GACI,KAAK;GACL,SAAS,OAAO,EAAS,GAAG;GAC5B,qBAAoB;GACpB,WAAW,EAAG,iBAAiB,KAAW,UAAU;aAJxD;IAMK,MAAS,UAAU,kBAAC,QAAD;KAAM,WAAU;KAAiB,GAAG;KAAS,OAAO,EAAC,SAAS,GAAY;KAAI,CAAA;IACjG,MAAS,QACN,kBAAC,KAAD;KAAG,WAAU;eACR,EAAO,KAAK,GAAG,MAAM;MAClB,IAAM,IAAO,IAAY,IAAkB,EAAE;AAC7C,aACI,kBAAC,QAAD;OAEI,WAAU;OACV,GAAG,EAAE,IAAI,IAAW;OACpB,GAAG,EAAE;OACL,OAAO,IAAW;OAClB,QAAQ,KAAK,IAAI,GAAM,GAAI;OAC3B,IAAI;OACN,EAPO,EAOP;OAER;KACF,CAAA,GAEJ,kBAAC,QAAD;KAAM,WAAU;KAAiB,GAAG;KAAW,CAAA;IAElD,KAAc,MAAS,SACpB,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,UAAD;KACI,WAAU;KACV,IAAI,EAAO,GAAQ;KACnB,IAAI,EAAO,GAAQ;KACnB,GAAG;KACL,CAAA,EACF,kBAAC,UAAD;KACI,WAAU;KACV,IAAI,EAAO,GAAQ;KACnB,IAAI,EAAO,GAAQ;KACnB,GAAG;KACL,CAAA,CACH,EAAA,CAAA;IAEL;;EACJ,CAAA"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./theme-CgS-bND3.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-AKWkE8Bx.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`stretch`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x,className:S,style:C,children:w,...T}){let E=n.n({fsize:c});return(0,r.jsx)(`div`,{className:t.t(`stack`,i!==`stretch`&&i,...n.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x}),S),style:{...E,...C},...e.r(a),...T,children:w})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=MStack-Bh-R2opf.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MStack-Cy2GplIA.cjs","names":[],"sources":["../src/components/layout/MStack/MStack.tsx"],"sourcesContent":["import type {MStackProps} from './MStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MStack.css'\n\n// MStack children vertically with shared layout utility props.\nexport function MStack({\n align = 'stretch',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MStackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'stack',\n align !== 'stretch' && align,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"kLAOA,SAAgB,EAAO,CACnB,QAAQ,UACR,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,QACA,IAAU,WAAa,EACvB,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
1
+ {"version":3,"file":"MStack-Bh-R2opf.cjs","names":[],"sources":["../src/components/layout/MStack/MStack.tsx"],"sourcesContent":["import type {MStackProps} from './MStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MStack.css'\n\n// MStack children vertically with shared layout utility props.\nexport function MStack({\n align = 'stretch',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MStackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'stack',\n align !== 'stretch' && align,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"iLAOA,SAAgB,EAAO,CACnB,QAAQ,UACR,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,QACA,IAAU,WAAa,EACvB,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
@@ -1,6 +1,6 @@
1
- import { r as e } from "./theme-KYwqDZxJ.js";
2
- import { t } from "./cn-CUSXNnjF.js";
3
- import { n, t as r } from "./layoutProps-Cl6d1KmH.js";
1
+ import { r as e } from "./theme-D_f-cmSA.js";
2
+ import { t } from "./cn-YER3QsV1.js";
3
+ import { n, t as r } from "./layoutProps-CE5-ghKw.js";
4
4
  import { jsx as i } from "react/jsx-runtime";
5
5
  //#region src/components/layout/MStack/MStack.tsx
6
6
  function a({ align: a = "stretch", hidden: o, spacing: s, padding: c, fsize: l, mt: u, mb: d, ml: f, mr: p, mx: m, my: h, pt: g, pb: _, pl: v, pr: y, px: b, py: x, fullWidth: S, className: C, style: w, children: T, ...E }) {
@@ -36,4 +36,4 @@ function a({ align: a = "stretch", hidden: o, spacing: s, padding: c, fsize: l,
36
36
  //#endregion
37
37
  export { a as t };
38
38
 
39
- //# sourceMappingURL=MStack-BWarX5O9.js.map
39
+ //# sourceMappingURL=MStack-CSaEbepM.js.map