@banzamel/mineralui 2.1.2 → 2.1.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 (118) hide show
  1. package/README.md +1 -1
  2. package/dist/{MDetailList-BhKBJwpd.cjs → MDetailList-DTLU7HQZ.cjs} +2 -2
  3. package/dist/{MDetailList-BhKBJwpd.cjs.map → MDetailList-DTLU7HQZ.cjs.map} +1 -1
  4. package/dist/{MDetailList-BjvZUyNj.js → MDetailList-fDhVyhm7.js} +3 -3
  5. package/dist/{MDetailList-BjvZUyNj.js.map → MDetailList-fDhVyhm7.js.map} +1 -1
  6. package/dist/{MDropdownMenu-CZmU3uku.js → MDropdownMenu-BeD_DxPr.js} +2 -2
  7. package/dist/{MDropdownMenu-CZmU3uku.js.map → MDropdownMenu-BeD_DxPr.js.map} +1 -1
  8. package/dist/{MDropdownMenu-hXaIMkAj.cjs → MDropdownMenu-C2lftqSx.cjs} +2 -2
  9. package/dist/{MDropdownMenu-hXaIMkAj.cjs.map → MDropdownMenu-C2lftqSx.cjs.map} +1 -1
  10. package/dist/{MInput-BhTAfpYS.cjs → MInput-BpTlP8GE.cjs} +2 -2
  11. package/dist/{MInput-BhTAfpYS.cjs.map → MInput-BpTlP8GE.cjs.map} +1 -1
  12. package/dist/{MInput-CgtX0fUN.js → MInput-C8ObGzQk.js} +2 -2
  13. package/dist/{MInput-CgtX0fUN.js.map → MInput-C8ObGzQk.js.map} +1 -1
  14. package/dist/{MInputCVC-BGYhUGDE.js → MInputCVC-DvUOzpYp.js} +24 -24
  15. package/dist/{MInputCVC-BGYhUGDE.js.map → MInputCVC-DvUOzpYp.js.map} +1 -1
  16. package/dist/{MInputCVC-E2Z2hYfy.cjs → MInputCVC-_2ALihF1.cjs} +2 -2
  17. package/dist/{MInputCVC-E2Z2hYfy.cjs.map → MInputCVC-_2ALihF1.cjs.map} +1 -1
  18. package/dist/{MInputSearch-DE9Jqp0i.cjs → MInputSearch-9wcXlY8-.cjs} +2 -2
  19. package/dist/{MInputSearch-DE9Jqp0i.cjs.map → MInputSearch-9wcXlY8-.cjs.map} +1 -1
  20. package/dist/{MInputSearch-DEr5HBgw.js → MInputSearch-BM8gLlJ1.js} +3 -3
  21. package/dist/{MInputSearch-DEr5HBgw.js.map → MInputSearch-BM8gLlJ1.js.map} +1 -1
  22. package/dist/{MPagination-DTqT33Mx.cjs → MPagination-C6QQdEj_.cjs} +2 -2
  23. package/dist/{MPagination-DTqT33Mx.cjs.map → MPagination-C6QQdEj_.cjs.map} +1 -1
  24. package/dist/{MPagination-7yTbB8dZ.js → MPagination-CgmNEAZX.js} +6 -6
  25. package/dist/{MPagination-7yTbB8dZ.js.map → MPagination-CgmNEAZX.js.map} +1 -1
  26. package/dist/{MPopover-hDqrn317.cjs → MPopover-Cweomcj2.cjs} +2 -2
  27. package/dist/MPopover-Cweomcj2.cjs.map +1 -0
  28. package/dist/{MPopover-BRuwva-c.js → MPopover-DT3vclV1.js} +6 -3
  29. package/dist/MPopover-DT3vclV1.js.map +1 -0
  30. package/dist/{MTag-BtlOVMRl.cjs → MTag-BzTp1crT.cjs} +2 -2
  31. package/dist/{MTag-BtlOVMRl.cjs.map → MTag-BzTp1crT.cjs.map} +1 -1
  32. package/dist/{MTag-BF6htPr-.js → MTag-D9q6faIk.js} +2 -2
  33. package/dist/{MTag-BF6htPr-.js.map → MTag-D9q6faIk.js.map} +1 -1
  34. package/dist/{MTreeView-DQaRF0ty.js → MTreeView-B1J7uqd1.js} +63 -63
  35. package/dist/{MTreeView-DQaRF0ty.js.map → MTreeView-B1J7uqd1.js.map} +1 -1
  36. package/dist/{MTreeView-1IqmVPMv.cjs → MTreeView-DuQkm0ZV.cjs} +2 -2
  37. package/dist/{MTreeView-1IqmVPMv.cjs.map → MTreeView-DuQkm0ZV.cjs.map} +1 -1
  38. package/dist/{cards-Du2kX3Br.js → cards-DYmK8TpL.js} +73 -73
  39. package/dist/{cards-Du2kX3Br.js.map → cards-DYmK8TpL.js.map} +1 -1
  40. package/dist/{cards-BBYh24NQ.cjs → cards-fRWZkts9.cjs} +2 -2
  41. package/dist/{cards-BBYh24NQ.cjs.map → cards-fRWZkts9.cjs.map} +1 -1
  42. package/dist/cards.cjs +1 -1
  43. package/dist/cards.js +1 -1
  44. package/dist/{controls-Cbv4FmNq.js → controls-BKAhqjNM.js} +2 -2
  45. package/dist/{controls-Cbv4FmNq.js.map → controls-BKAhqjNM.js.map} +1 -1
  46. package/dist/{controls-DrdHBBtm.cjs → controls-CT_0lIPr.cjs} +2 -2
  47. package/dist/{controls-DrdHBBtm.cjs.map → controls-CT_0lIPr.cjs.map} +1 -1
  48. package/dist/controls.cjs +1 -1
  49. package/dist/controls.js +1 -1
  50. package/dist/{data-Csb03WFo.cjs → data-CuynADWM.cjs} +2 -2
  51. package/dist/{data-Csb03WFo.cjs.map → data-CuynADWM.cjs.map} +1 -1
  52. package/dist/{data-BgTkBMkP.js → data-D8WFA3Et.js} +16 -16
  53. package/dist/{data-BgTkBMkP.js.map → data-D8WFA3Et.js.map} +1 -1
  54. package/dist/data.cjs +1 -1
  55. package/dist/data.js +2 -2
  56. package/dist/{display-D9H8MP8D.js → display-BF4jASt9.js} +16 -16
  57. package/dist/{display-D9H8MP8D.js.map → display-BF4jASt9.js.map} +1 -1
  58. package/dist/{display-IMWtdmxS.cjs → display-DMix8BmD.cjs} +3 -3
  59. package/dist/{display-IMWtdmxS.cjs.map → display-DMix8BmD.cjs.map} +1 -1
  60. package/dist/display.cjs +1 -1
  61. package/dist/display.js +2 -2
  62. package/dist/{dropdowns-oj4--GbK.js → dropdowns-5cJf-6UG.js} +91 -91
  63. package/dist/{dropdowns-oj4--GbK.js.map → dropdowns-5cJf-6UG.js.map} +1 -1
  64. package/dist/{dropdowns-D_nUdflh.cjs → dropdowns-C-ASvu7P.cjs} +2 -2
  65. package/dist/{dropdowns-D_nUdflh.cjs.map → dropdowns-C-ASvu7P.cjs.map} +1 -1
  66. package/dist/dropdowns.cjs +1 -1
  67. package/dist/dropdowns.js +1 -1
  68. package/dist/{feedback-u1ssUT7e.cjs → feedback-4TjD57rX.cjs} +2 -2
  69. package/dist/{feedback-u1ssUT7e.cjs.map → feedback-4TjD57rX.cjs.map} +1 -1
  70. package/dist/{feedback-D7BTlioj.js → feedback-DW-cehnb.js} +35 -35
  71. package/dist/{feedback-D7BTlioj.js.map → feedback-DW-cehnb.js.map} +1 -1
  72. package/dist/feedback.cjs +1 -1
  73. package/dist/feedback.js +2 -2
  74. package/dist/icons/glyphs/MCoinIcon.d.ts +2 -0
  75. package/dist/icons/glyphs/MMoneyIcon.d.ts +2 -0
  76. package/dist/icons/glyphs/MReceiptIcon.d.ts +2 -0
  77. package/dist/icons/glyphs/MWalletIcon.d.ts +2 -0
  78. package/dist/icons/index.d.ts +4 -0
  79. package/dist/{icons-DLP-Rs6z.js → icons-CBMl-kOM.js} +221 -166
  80. package/dist/icons-CBMl-kOM.js.map +1 -0
  81. package/dist/icons-D675Im0B.cjs +2 -0
  82. package/dist/icons-D675Im0B.cjs.map +1 -0
  83. package/dist/icons.cjs +1 -1
  84. package/dist/icons.js +2 -2
  85. package/dist/index.cjs +1 -1
  86. package/dist/index.js +53 -53
  87. package/dist/{inputs-DQrjGfwd.js → inputs-CQoi402V.js} +180 -180
  88. package/dist/{inputs-DQrjGfwd.js.map → inputs-CQoi402V.js.map} +1 -1
  89. package/dist/{inputs-DsFdc0Io.cjs → inputs-yaaTPTsY.cjs} +2 -2
  90. package/dist/{inputs-DsFdc0Io.cjs.map → inputs-yaaTPTsY.cjs.map} +1 -1
  91. package/dist/inputs.cjs +1 -1
  92. package/dist/inputs.js +4 -4
  93. package/dist/{layout-B_2yBP1M.cjs → layout-CfolwT8L.cjs} +2 -2
  94. package/dist/{layout-B_2yBP1M.cjs.map → layout-CfolwT8L.cjs.map} +1 -1
  95. package/dist/{layout-BuvV-N9H.js → layout-i8H5tIbO.js} +32 -32
  96. package/dist/{layout-BuvV-N9H.js.map → layout-i8H5tIbO.js.map} +1 -1
  97. package/dist/layout.cjs +1 -1
  98. package/dist/layout.js +2 -2
  99. package/dist/{media-Xt6MkVhb.cjs → media-DRz3JZfr.cjs} +2 -2
  100. package/dist/{media-Xt6MkVhb.cjs.map → media-DRz3JZfr.cjs.map} +1 -1
  101. package/dist/{media-5IsYrhIQ.js → media-vOQOIYFD.js} +11 -11
  102. package/dist/{media-5IsYrhIQ.js.map → media-vOQOIYFD.js.map} +1 -1
  103. package/dist/media.cjs +1 -1
  104. package/dist/media.js +1 -1
  105. package/dist/{overlays-WA3jnWTG.js → overlays-CAcGmqNv.js} +50 -50
  106. package/dist/{overlays-WA3jnWTG.js.map → overlays-CAcGmqNv.js.map} +1 -1
  107. package/dist/{overlays-BAJDNT1m.cjs → overlays-zPzbHW5P.cjs} +2 -2
  108. package/dist/{overlays-BAJDNT1m.cjs.map → overlays-zPzbHW5P.cjs.map} +1 -1
  109. package/dist/overlays.cjs +1 -1
  110. package/dist/overlays.js +2 -2
  111. package/dist/primitives.cjs +1 -1
  112. package/dist/primitives.js +1 -1
  113. package/package.json +1 -1
  114. package/dist/MPopover-BRuwva-c.js.map +0 -1
  115. package/dist/MPopover-hDqrn317.cjs.map +0 -1
  116. package/dist/icons-BfdQ45F2.cjs +0 -2
  117. package/dist/icons-BfdQ45F2.cjs.map +0 -1
  118. package/dist/icons-DLP-Rs6z.js.map +0 -1
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./dropdowns-D_nUdflh.cjs`);exports.MAutocomplete=e.i,exports.MDatePicker=e.r,exports.MDateRangePicker=e.t,exports.MSelect=e.a,exports.MTimePicker=e.n;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./dropdowns-C-ASvu7P.cjs`);exports.MAutocomplete=e.i,exports.MDatePicker=e.r,exports.MDateRangePicker=e.t,exports.MSelect=e.a,exports.MTimePicker=e.n;
package/dist/dropdowns.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { a as e, i as t, n, r, t as i } from "./dropdowns-oj4--GbK.js";
3
+ import { a as e, i as t, n, r, t as i } from "./dropdowns-5cJf-6UG.js";
4
4
  export { t as MAutocomplete, r as MDatePicker, i as MDateRangePicker, e as MSelect, n as MTimePicker };
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./icons-BfdQ45F2.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./MPortal-BciZHNDC.cjs`),i=require(`./MButton-R08y1HCT.cjs`);require(`./core-DBpQf3uY.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);var s={success:(0,o.jsx)(t.yi,{}),warning:(0,o.jsx)(t.Si,{}),error:(0,o.jsx)(t.bi,{}),info:(0,o.jsx)(t.xi,{}),primary:(0,o.jsx)(t.xi,{}),neutral:(0,o.jsx)(t.vi,{}),light:(0,o.jsx)(t.Ln,{}),dark:(0,o.jsx)(t.In,{}),news:(0,o.jsx)(t.Pn,{})};function c(e){return e?s[e]??s.info:s.info}function l({color:t=`info`,icon:r=!0,title:i,hidden:a,className:s,children:l,...u}){let d=r===!1?null:r===!0?c(t):r;return(0,o.jsxs)(`div`,{className:n.t(`alert`,`color-${t}`,s),role:`status`,...e.r(a),...u,children:[d&&(0,o.jsx)(`span`,{className:`icon`,children:d}),(0,o.jsxs)(`div`,{className:`main`,children:[i&&(0,o.jsx)(`div`,{className:`title`,children:i}),l&&(0,o.jsx)(`div`,{className:`content`,children:l})]})]})}function u({color:r=`primary`,variant:s=`filled`,icon:c,action:l,hidden:u,dismissible:d=!1,onDismiss:f,className:p,children:m,...h}){let[g,_]=(0,a.useState)(!0),[v,y]=(0,a.useState)(!1),b=(0,a.useRef)(null);if(!g)return null;let x=()=>{y(!0);let e=b.current;if(!e){_(!1),f?.();return}let t=()=>{_(!1),y(!1),f?.()};e.addEventListener(`transitionend`,t,{once:!0}),setTimeout(t,1e3)};return(0,o.jsx)(`div`,{ref:b,className:n.t(`banner-wrap`,v&&`dismissing`),...e.r(u),children:(0,o.jsxs)(`div`,{className:n.t(`banner`,`color-${r}`,s,p),role:`banner`,...h,children:[c&&(0,o.jsx)(`span`,{className:`banner-icon`,children:c}),(0,o.jsx)(`div`,{className:`banner-content`,children:m}),l&&(0,o.jsx)(`div`,{className:`banner-action`,children:l}),d&&(0,o.jsx)(i.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,className:`banner-dismiss`,onClick:x,"aria-label":`Dismiss`,children:(0,o.jsx)(t.Ki,{})})]})})}var d={xs:24,sm:36,md:56,lg:88,xl:128},f={xs:2,sm:3,md:4,lg:6,xl:8};function p(e,t,n){return Math.max(t,Math.min(n,e))}function m(e){return typeof e==`number`?e:d[e??`md`]??d.md}function h(e,t){return typeof e==`number`?e:typeof t==`number`?Math.max(2,Math.round(t/14)):f[t??`md`]??f.md}function g({value:e,size:t=`md`,color:r=`primary`,thickness:i,showPercent:a=!0,label:s,ariaLabel:c,className:l,style:u,...d}){let f=p(Math.round(e),0,100),g=m(t),_=h(i,t),v=(g-_)/2,y=2*Math.PI*v,b=y*(1-f/100),x={width:`${g}px`,height:`${g}px`,...u},S=typeof t==`string`?t:`custom`,C=c??`Loading ${f}%`,w=s===void 0?a:s!==null;return(0,o.jsxs)(`div`,{className:n.t(`progress-ring`,S,r&&`color-${r}`,l),style:x,role:`progressbar`,"aria-valuenow":f,"aria-valuemin":0,"aria-valuemax":100,"aria-label":C,...d,children:[(0,o.jsxs)(`svg`,{className:`progress-ring-svg`,width:g,height:g,viewBox:`0 0 ${g} ${g}`,"aria-hidden":`true`,children:[(0,o.jsx)(`circle`,{className:`progress-ring-track`,cx:g/2,cy:g/2,r:v,fill:`none`,strokeWidth:_}),(0,o.jsx)(`circle`,{className:`progress-ring-indicator`,cx:g/2,cy:g/2,r:v,fill:`none`,strokeWidth:_,strokeDasharray:y,strokeDashoffset:b,strokeLinecap:`round`,transform:`rotate(-90 ${g/2} ${g/2})`})]}),w?(0,o.jsx)(`span`,{className:`progress-ring-label`,"aria-hidden":`true`,children:s===void 0?`${f}%`:s}):null]})}var _=(0,a.createContext)(null),v=_.Provider;function y(){let e=(0,a.useContext)(_);if(!e)throw Error(`useMToast must be used inside MToastProvider`);return e}function b({entry:e,onDismiss:r}){let[s,l]=(0,a.useState)(!1),u=e.duration??4e3;(0,a.useEffect)(()=>{if(u<=0)return;let e=setTimeout(()=>l(!0),u);return()=>clearTimeout(e)},[u]);function d(){s&&r(e.id)}let f=e.color||`info`,p=e.icon===!1?null:e.icon===void 0||e.icon===!0?c(f):e.icon;return(0,o.jsxs)(`div`,{className:n.t(`toast item`,`color-${f}`,s&&`exit`),role:`status`,onAnimationEnd:d,children:[(0,o.jsxs)(`div`,{className:`toast body`,children:[p&&(0,o.jsx)(`span`,{className:`toast icon`,children:p}),(0,o.jsxs)(`div`,{className:`toast content`,children:[e.title&&(0,o.jsx)(`div`,{className:`toast title`,children:e.title}),(0,o.jsx)(`div`,{className:`toast message`,children:e.message})]})]}),(0,o.jsx)(i.t,{variant:`ghost`,color:`neutral`,iconOnly:!0,size:`xs`,className:`toast close`,onClick:()=>l(!0),"aria-label":`Close`,children:(0,o.jsx)(t.Ki,{})})]})}var x=0;function S({position:e=`top-right`,duration:t=4e3,children:i}){let[s,c]=(0,a.useState)([]),l=(0,a.useRef)(t);l.current=t;let u=(0,a.useCallback)(e=>{c(t=>t.filter(t=>t.id!==e))},[]),d=(0,a.useCallback)(e=>{let t=`toast-${++x}`,n={id:t,...e,duration:e.duration??l.current};return c(e=>[...e,n]),t},[]);return(0,o.jsxs)(v,{value:(0,a.useMemo)(()=>({toast:d,dismiss:u}),[d,u]),children:[i,(0,o.jsx)(r.t,{children:(0,o.jsx)(`div`,{className:n.t(`toast container`,e),children:s.map(e=>(0,o.jsx)(b,{entry:e,onDismiss:u},e.id))})})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return S}});
2
- //# sourceMappingURL=feedback-u1ssUT7e.cjs.map
1
+ const e=require(`./theme-BfNZicWk.cjs`),t=require(`./icons-D675Im0B.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./MPortal-BciZHNDC.cjs`),i=require(`./MButton-R08y1HCT.cjs`);require(`./core-DBpQf3uY.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);var s={success:(0,o.jsx)(t.Ci,{}),warning:(0,o.jsx)(t.Ei,{}),error:(0,o.jsx)(t.wi,{}),info:(0,o.jsx)(t.Ti,{}),primary:(0,o.jsx)(t.Ti,{}),neutral:(0,o.jsx)(t.Si,{}),light:(0,o.jsx)(t.Ln,{}),dark:(0,o.jsx)(t.In,{}),news:(0,o.jsx)(t.Pn,{})};function c(e){return e?s[e]??s.info:s.info}function l({color:t=`info`,icon:r=!0,title:i,hidden:a,className:s,children:l,...u}){let d=r===!1?null:r===!0?c(t):r;return(0,o.jsxs)(`div`,{className:n.t(`alert`,`color-${t}`,s),role:`status`,...e.r(a),...u,children:[d&&(0,o.jsx)(`span`,{className:`icon`,children:d}),(0,o.jsxs)(`div`,{className:`main`,children:[i&&(0,o.jsx)(`div`,{className:`title`,children:i}),l&&(0,o.jsx)(`div`,{className:`content`,children:l})]})]})}function u({color:r=`primary`,variant:s=`filled`,icon:c,action:l,hidden:u,dismissible:d=!1,onDismiss:f,className:p,children:m,...h}){let[g,_]=(0,a.useState)(!0),[v,y]=(0,a.useState)(!1),b=(0,a.useRef)(null);if(!g)return null;let x=()=>{y(!0);let e=b.current;if(!e){_(!1),f?.();return}let t=()=>{_(!1),y(!1),f?.()};e.addEventListener(`transitionend`,t,{once:!0}),setTimeout(t,1e3)};return(0,o.jsx)(`div`,{ref:b,className:n.t(`banner-wrap`,v&&`dismissing`),...e.r(u),children:(0,o.jsxs)(`div`,{className:n.t(`banner`,`color-${r}`,s,p),role:`banner`,...h,children:[c&&(0,o.jsx)(`span`,{className:`banner-icon`,children:c}),(0,o.jsx)(`div`,{className:`banner-content`,children:m}),l&&(0,o.jsx)(`div`,{className:`banner-action`,children:l}),d&&(0,o.jsx)(i.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,className:`banner-dismiss`,onClick:x,"aria-label":`Dismiss`,children:(0,o.jsx)(t.Xi,{})})]})})}var d={xs:24,sm:36,md:56,lg:88,xl:128},f={xs:2,sm:3,md:4,lg:6,xl:8};function p(e,t,n){return Math.max(t,Math.min(n,e))}function m(e){return typeof e==`number`?e:d[e??`md`]??d.md}function h(e,t){return typeof e==`number`?e:typeof t==`number`?Math.max(2,Math.round(t/14)):f[t??`md`]??f.md}function g({value:e,size:t=`md`,color:r=`primary`,thickness:i,showPercent:a=!0,label:s,ariaLabel:c,className:l,style:u,...d}){let f=p(Math.round(e),0,100),g=m(t),_=h(i,t),v=(g-_)/2,y=2*Math.PI*v,b=y*(1-f/100),x={width:`${g}px`,height:`${g}px`,...u},S=typeof t==`string`?t:`custom`,C=c??`Loading ${f}%`,w=s===void 0?a:s!==null;return(0,o.jsxs)(`div`,{className:n.t(`progress-ring`,S,r&&`color-${r}`,l),style:x,role:`progressbar`,"aria-valuenow":f,"aria-valuemin":0,"aria-valuemax":100,"aria-label":C,...d,children:[(0,o.jsxs)(`svg`,{className:`progress-ring-svg`,width:g,height:g,viewBox:`0 0 ${g} ${g}`,"aria-hidden":`true`,children:[(0,o.jsx)(`circle`,{className:`progress-ring-track`,cx:g/2,cy:g/2,r:v,fill:`none`,strokeWidth:_}),(0,o.jsx)(`circle`,{className:`progress-ring-indicator`,cx:g/2,cy:g/2,r:v,fill:`none`,strokeWidth:_,strokeDasharray:y,strokeDashoffset:b,strokeLinecap:`round`,transform:`rotate(-90 ${g/2} ${g/2})`})]}),w?(0,o.jsx)(`span`,{className:`progress-ring-label`,"aria-hidden":`true`,children:s===void 0?`${f}%`:s}):null]})}var _=(0,a.createContext)(null),v=_.Provider;function y(){let e=(0,a.useContext)(_);if(!e)throw Error(`useMToast must be used inside MToastProvider`);return e}function b({entry:e,onDismiss:r}){let[s,l]=(0,a.useState)(!1),u=e.duration??4e3;(0,a.useEffect)(()=>{if(u<=0)return;let e=setTimeout(()=>l(!0),u);return()=>clearTimeout(e)},[u]);function d(){s&&r(e.id)}let f=e.color||`info`,p=e.icon===!1?null:e.icon===void 0||e.icon===!0?c(f):e.icon;return(0,o.jsxs)(`div`,{className:n.t(`toast item`,`color-${f}`,s&&`exit`),role:`status`,onAnimationEnd:d,children:[(0,o.jsxs)(`div`,{className:`toast body`,children:[p&&(0,o.jsx)(`span`,{className:`toast icon`,children:p}),(0,o.jsxs)(`div`,{className:`toast content`,children:[e.title&&(0,o.jsx)(`div`,{className:`toast title`,children:e.title}),(0,o.jsx)(`div`,{className:`toast message`,children:e.message})]})]}),(0,o.jsx)(i.t,{variant:`ghost`,color:`neutral`,iconOnly:!0,size:`xs`,className:`toast close`,onClick:()=>l(!0),"aria-label":`Close`,children:(0,o.jsx)(t.Xi,{})})]})}var x=0;function S({position:e=`top-right`,duration:t=4e3,children:i}){let[s,c]=(0,a.useState)([]),l=(0,a.useRef)(t);l.current=t;let u=(0,a.useCallback)(e=>{c(t=>t.filter(t=>t.id!==e))},[]),d=(0,a.useCallback)(e=>{let t=`toast-${++x}`,n={id:t,...e,duration:e.duration??l.current};return c(e=>[...e,n]),t},[]);return(0,o.jsxs)(v,{value:(0,a.useMemo)(()=>({toast:d,dismiss:u}),[d,u]),children:[i,(0,o.jsx)(r.t,{children:(0,o.jsx)(`div`,{className:n.t(`toast container`,e),children:s.map(e=>(0,o.jsx)(b,{entry:e,onDismiss:u},e.id))})})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return S}});
2
+ //# sourceMappingURL=feedback-4TjD57rX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-u1ssUT7e.cjs","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({color = 'info', icon = true, title, hidden, className, children, ...rest}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div className={cn('alert', `color-${color}`, className)} role=\"status\" {...getHiddenProps(hidden)} {...rest}>\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n const onEnd = () => {\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n el.addEventListener('transitionend', onEnd, {once: true})\n setTimeout(onEnd, 1000)\n }\n\n return (\n <div ref={wrapRef} className={cn('banner-wrap', dismissing && 'dismissing')} {...getHiddenProps(hidden)}>\n <div className={cn('banner', `color-${color}`, variant, className)} role=\"banner\" {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? `Loading ${clampedValue}%`\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg className=\"progress-ring-svg\" width={diameter} height={diameter} viewBox={`0 0 ${diameter} ${diameter}`} aria-hidden=\"true\">\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useEffect, useState} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => setExiting(true), duration)\n return () => clearTimeout(timer)\n }, [duration])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n return (\n <div className={cn('toast item', `color-${color}`, exiting && 'exit')} role=\"status\" onAnimationEnd={handleEnd}>\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n <div className=\"toast message\">{entry.message}</div>\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label=\"Close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback((options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n return id\n }, [])\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":"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"}
1
+ {"version":3,"file":"feedback-4TjD57rX.cjs","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({color = 'info', icon = true, title, hidden, className, children, ...rest}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div className={cn('alert', `color-${color}`, className)} role=\"status\" {...getHiddenProps(hidden)} {...rest}>\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n const onEnd = () => {\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n el.addEventListener('transitionend', onEnd, {once: true})\n setTimeout(onEnd, 1000)\n }\n\n return (\n <div ref={wrapRef} className={cn('banner-wrap', dismissing && 'dismissing')} {...getHiddenProps(hidden)}>\n <div className={cn('banner', `color-${color}`, variant, className)} role=\"banner\" {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? `Loading ${clampedValue}%`\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg className=\"progress-ring-svg\" width={diameter} height={diameter} viewBox={`0 0 ${diameter} ${diameter}`} aria-hidden=\"true\">\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useEffect, useState} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => setExiting(true), duration)\n return () => clearTimeout(timer)\n }, [duration])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n return (\n <div className={cn('toast item', `color-${color}`, exiting && 'exit')} role=\"status\" onAnimationEnd={handleEnd}>\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n <div className=\"toast message\">{entry.message}</div>\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label=\"Close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback((options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n return id\n }, [])\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { r as e } from "./theme-DAOU1aPs.js";
2
- import { In as t, Ki as n, Ln as r, Pn as i, Si as a, bi as o, vi as s, xi as c, yi as l } from "./icons-DLP-Rs6z.js";
2
+ import { Ci as t, Ei as n, In as r, Ln as i, Pn as a, Si as o, Ti as s, Xi as c, wi as l } from "./icons-CBMl-kOM.js";
3
3
  import { t as u } from "./cn-YER3QsV1.js";
4
4
  import { t as d } from "./MPortal-Ba2Sxset.js";
5
5
  import { t as f } from "./MButton-C1pnL4_j.js";
@@ -7,15 +7,15 @@ import { createContext as p, useCallback as m, useContext as h, useEffect as g,
7
7
  import { jsx as b, jsxs as x } from "react/jsx-runtime";
8
8
  //#region src/components/feedback/statusIcons.tsx
9
9
  var S = {
10
- success: /* @__PURE__ */ b(l, {}),
11
- warning: /* @__PURE__ */ b(a, {}),
12
- error: /* @__PURE__ */ b(o, {}),
13
- info: /* @__PURE__ */ b(c, {}),
14
- primary: /* @__PURE__ */ b(c, {}),
15
- neutral: /* @__PURE__ */ b(s, {}),
16
- light: /* @__PURE__ */ b(r, {}),
17
- dark: /* @__PURE__ */ b(t, {}),
18
- news: /* @__PURE__ */ b(i, {})
10
+ success: /* @__PURE__ */ b(t, {}),
11
+ warning: /* @__PURE__ */ b(n, {}),
12
+ error: /* @__PURE__ */ b(l, {}),
13
+ info: /* @__PURE__ */ b(s, {}),
14
+ primary: /* @__PURE__ */ b(s, {}),
15
+ neutral: /* @__PURE__ */ b(o, {}),
16
+ light: /* @__PURE__ */ b(i, {}),
17
+ dark: /* @__PURE__ */ b(r, {}),
18
+ news: /* @__PURE__ */ b(a, {})
19
19
  };
20
20
  function C(e) {
21
21
  return e ? S[e] ?? S.info : S.info;
@@ -46,43 +46,43 @@ function w({ color: t = "info", icon: n = !0, title: r, hidden: i, className: a,
46
46
  }
47
47
  //#endregion
48
48
  //#region src/components/feedback/MBanner/MBanner.tsx
49
- function T({ color: t = "primary", variant: r = "filled", icon: i, action: a, hidden: o, dismissible: s = !1, onDismiss: c, className: l, children: d, ...p }) {
49
+ function T({ color: t = "primary", variant: n = "filled", icon: r, action: i, hidden: a, dismissible: o = !1, onDismiss: s, className: l, children: d, ...p }) {
50
50
  let [m, h] = y(!0), [g, _] = y(!1), S = v(null);
51
51
  if (!m) return null;
52
52
  let C = () => {
53
53
  _(!0);
54
54
  let e = S.current;
55
55
  if (!e) {
56
- h(!1), c?.();
56
+ h(!1), s?.();
57
57
  return;
58
58
  }
59
59
  let t = () => {
60
- h(!1), _(!1), c?.();
60
+ h(!1), _(!1), s?.();
61
61
  };
62
62
  e.addEventListener("transitionend", t, { once: !0 }), setTimeout(t, 1e3);
63
63
  };
64
64
  return /* @__PURE__ */ b("div", {
65
65
  ref: S,
66
66
  className: u("banner-wrap", g && "dismissing"),
67
- ...e(o),
67
+ ...e(a),
68
68
  children: /* @__PURE__ */ x("div", {
69
- className: u("banner", `color-${t}`, r, l),
69
+ className: u("banner", `color-${t}`, n, l),
70
70
  role: "banner",
71
71
  ...p,
72
72
  children: [
73
- i && /* @__PURE__ */ b("span", {
73
+ r && /* @__PURE__ */ b("span", {
74
74
  className: "banner-icon",
75
- children: i
75
+ children: r
76
76
  }),
77
77
  /* @__PURE__ */ b("div", {
78
78
  className: "banner-content",
79
79
  children: d
80
80
  }),
81
- a && /* @__PURE__ */ b("div", {
81
+ i && /* @__PURE__ */ b("div", {
82
82
  className: "banner-action",
83
- children: a
83
+ children: i
84
84
  }),
85
- s && /* @__PURE__ */ b(f, {
85
+ o && /* @__PURE__ */ b(f, {
86
86
  variant: "link",
87
87
  color: "neutral",
88
88
  iconOnly: !0,
@@ -90,7 +90,7 @@ function T({ color: t = "primary", variant: r = "filled", icon: i, action: a, hi
90
90
  className: "banner-dismiss",
91
91
  onClick: C,
92
92
  "aria-label": "Dismiss",
93
- children: /* @__PURE__ */ b(n, {})
93
+ children: /* @__PURE__ */ b(c, {})
94
94
  })
95
95
  ]
96
96
  })
@@ -178,25 +178,25 @@ function P() {
178
178
  //#endregion
179
179
  //#region src/components/feedback/MToast/MToastItem.tsx
180
180
  function F({ entry: e, onDismiss: t }) {
181
- let [r, i] = y(!1), a = e.duration ?? 4e3;
181
+ let [n, r] = y(!1), i = e.duration ?? 4e3;
182
182
  g(() => {
183
- if (a <= 0) return;
184
- let e = setTimeout(() => i(!0), a);
183
+ if (i <= 0) return;
184
+ let e = setTimeout(() => r(!0), i);
185
185
  return () => clearTimeout(e);
186
- }, [a]);
187
- function o() {
188
- r && t(e.id);
186
+ }, [i]);
187
+ function a() {
188
+ n && t(e.id);
189
189
  }
190
- let s = e.color || "info", c = e.icon === !1 ? null : e.icon === void 0 || e.icon === !0 ? C(s) : e.icon;
190
+ let o = e.color || "info", s = e.icon === !1 ? null : e.icon === void 0 || e.icon === !0 ? C(o) : e.icon;
191
191
  return /* @__PURE__ */ x("div", {
192
- className: u("toast item", `color-${s}`, r && "exit"),
192
+ className: u("toast item", `color-${o}`, n && "exit"),
193
193
  role: "status",
194
- onAnimationEnd: o,
194
+ onAnimationEnd: a,
195
195
  children: [/* @__PURE__ */ x("div", {
196
196
  className: "toast body",
197
- children: [c && /* @__PURE__ */ b("span", {
197
+ children: [s && /* @__PURE__ */ b("span", {
198
198
  className: "toast icon",
199
- children: c
199
+ children: s
200
200
  }), /* @__PURE__ */ x("div", {
201
201
  className: "toast content",
202
202
  children: [e.title && /* @__PURE__ */ b("div", {
@@ -213,9 +213,9 @@ function F({ entry: e, onDismiss: t }) {
213
213
  iconOnly: !0,
214
214
  size: "xs",
215
215
  className: "toast close",
216
- onClick: () => i(!0),
216
+ onClick: () => r(!0),
217
217
  "aria-label": "Close",
218
- children: /* @__PURE__ */ b(n, {})
218
+ children: /* @__PURE__ */ b(c, {})
219
219
  })]
220
220
  });
221
221
  }
@@ -252,4 +252,4 @@ function L({ position: e = "top-right", duration: t = 4e3, children: n }) {
252
252
  //#endregion
253
253
  export { w as a, T as i, P as n, j as r, L as t };
254
254
 
255
- //# sourceMappingURL=feedback-D7BTlioj.js.map
255
+ //# sourceMappingURL=feedback-DW-cehnb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-D7BTlioj.js","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({color = 'info', icon = true, title, hidden, className, children, ...rest}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div className={cn('alert', `color-${color}`, className)} role=\"status\" {...getHiddenProps(hidden)} {...rest}>\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n const onEnd = () => {\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n el.addEventListener('transitionend', onEnd, {once: true})\n setTimeout(onEnd, 1000)\n }\n\n return (\n <div ref={wrapRef} className={cn('banner-wrap', dismissing && 'dismissing')} {...getHiddenProps(hidden)}>\n <div className={cn('banner', `color-${color}`, variant, className)} role=\"banner\" {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? `Loading ${clampedValue}%`\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg className=\"progress-ring-svg\" width={diameter} height={diameter} viewBox={`0 0 ${diameter} ${diameter}`} aria-hidden=\"true\">\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useEffect, useState} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => setExiting(true), duration)\n return () => clearTimeout(timer)\n }, [duration])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n return (\n <div className={cn('toast item', `color-${color}`, exiting && 'exit')} role=\"status\" onAnimationEnd={handleEnd}>\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n <div className=\"toast message\">{entry.message}</div>\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label=\"Close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback((options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n return id\n }, [])\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":"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"}
1
+ {"version":3,"file":"feedback-DW-cehnb.js","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({color = 'info', icon = true, title, hidden, className, children, ...rest}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div className={cn('alert', `color-${color}`, className)} role=\"status\" {...getHiddenProps(hidden)} {...rest}>\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n const onEnd = () => {\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n el.addEventListener('transitionend', onEnd, {once: true})\n setTimeout(onEnd, 1000)\n }\n\n return (\n <div ref={wrapRef} className={cn('banner-wrap', dismissing && 'dismissing')} {...getHiddenProps(hidden)}>\n <div className={cn('banner', `color-${color}`, variant, className)} role=\"banner\" {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? `Loading ${clampedValue}%`\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg className=\"progress-ring-svg\" width={diameter} height={diameter} viewBox={`0 0 ${diameter} ${diameter}`} aria-hidden=\"true\">\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useEffect, useState} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => setExiting(true), duration)\n return () => clearTimeout(timer)\n }, [duration])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n return (\n <div className={cn('toast item', `color-${color}`, exiting && 'exit')} role=\"status\" onAnimationEnd={handleEnd}>\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n <div className=\"toast message\">{entry.message}</div>\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label=\"Close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback((options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n return id\n }, [])\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":"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"}
package/dist/feedback.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-R08y1HCT.cjs`),t=require(`./feedback-u1ssUT7e.cjs`),n=require(`./MSkeleton-CLSU5pL6.cjs`),r=require(`./MTag-BtlOVMRl.cjs`),i=require(`./MLoader-XcpKlLrd.cjs`);exports.MAlert=t.a,exports.MBadge=n.n,exports.MBanner=t.i,exports.MLoader=i.t,exports.MProgressRing=t.r,exports.MSkeleton=n.t,exports.MSpinner=e.r,exports.MTag=r.t,exports.MToastProvider=t.t,exports.useMToast=t.n;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-R08y1HCT.cjs`),t=require(`./feedback-4TjD57rX.cjs`),n=require(`./MSkeleton-CLSU5pL6.cjs`),r=require(`./MTag-BzTp1crT.cjs`),i=require(`./MLoader-XcpKlLrd.cjs`);exports.MAlert=t.a,exports.MBadge=n.n,exports.MBanner=t.i,exports.MLoader=i.t,exports.MProgressRing=t.r,exports.MSkeleton=n.t,exports.MSpinner=e.r,exports.MTag=r.t,exports.MToastProvider=t.t,exports.useMToast=t.n;
package/dist/feedback.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
3
  import { r as e } from "./MButton-C1pnL4_j.js";
4
- import { a as t, i as n, n as r, r as i, t as a } from "./feedback-D7BTlioj.js";
4
+ import { a as t, i as n, n as r, r as i, t as a } from "./feedback-DW-cehnb.js";
5
5
  import { n as o, t as s } from "./MSkeleton-C5uD4Axo.js";
6
- import { t as c } from "./MTag-BF6htPr-.js";
6
+ import { t as c } from "./MTag-D9q6faIk.js";
7
7
  import { t as l } from "./MLoader-CnvWqFtA.js";
8
8
  export { t as MAlert, o as MBadge, n as MBanner, l as MLoader, i as MProgressRing, s as MSkeleton, e as MSpinner, c as MTag, a as MToastProvider, r as useMToast };
@@ -0,0 +1,2 @@
1
+ import { MIconProps } from '../MIcon.types';
2
+ export declare const MCoinIcon: import('react').ForwardRefExoticComponent<MIconProps & import('react').RefAttributes<SVGSVGElement>>;
@@ -0,0 +1,2 @@
1
+ import { MIconProps } from '../MIcon.types';
2
+ export declare const MMoneyIcon: import('react').ForwardRefExoticComponent<MIconProps & import('react').RefAttributes<SVGSVGElement>>;
@@ -0,0 +1,2 @@
1
+ import { MIconProps } from '../MIcon.types';
2
+ export declare const MReceiptIcon: import('react').ForwardRefExoticComponent<MIconProps & import('react').RefAttributes<SVGSVGElement>>;
@@ -0,0 +1,2 @@
1
+ import { MIconProps } from '../MIcon.types';
2
+ export declare const MWalletIcon: import('react').ForwardRefExoticComponent<MIconProps & import('react').RefAttributes<SVGSVGElement>>;
@@ -73,6 +73,10 @@ export { MIdCardIcon } from './glyphs/MIdCardIcon';
73
73
  export { MEyeIcon } from './glyphs/MEyeIcon';
74
74
  export { MEyeOffIcon } from './glyphs/MEyeOffIcon';
75
75
  export { MCreditCardIcon } from './glyphs/MCreditCardIcon';
76
+ export { MWalletIcon } from './glyphs/MWalletIcon';
77
+ export { MCoinIcon } from './glyphs/MCoinIcon';
78
+ export { MMoneyIcon } from './glyphs/MMoneyIcon';
79
+ export { MReceiptIcon } from './glyphs/MReceiptIcon';
76
80
  export { MHeartIcon } from './glyphs/MHeartIcon';
77
81
  export { MHeartFillIcon } from './glyphs/MHeartFillIcon';
78
82
  export { MEllipsisHorizontalIcon } from './glyphs/MEllipsisHorizontalIcon';