@m3ui-vue/m3ui-vue 0.1.7 → 0.1.8

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 (37) hide show
  1. package/dist/components/MRating.vue.d.ts +1 -1
  2. package/dist/composables/useToast.d.ts +15 -18
  3. package/dist/index.d.ts +1 -1
  4. package/dist/m3ui-vue.css +1 -1
  5. package/dist/m3ui.js +516 -513
  6. package/dist/m3ui.js.map +1 -1
  7. package/dist/styles.css +1 -1
  8. package/package.json +1 -1
  9. package/src/components/MBottomSheet.vue +2 -2
  10. package/src/components/MCalendar.vue +1 -1
  11. package/src/components/MColorPicker.vue +2 -2
  12. package/src/components/MContextMenu.vue +1 -1
  13. package/src/components/MDataTable.vue +27 -6
  14. package/src/components/MDatePicker.vue +2 -2
  15. package/src/components/MDateRangePicker.vue +2 -2
  16. package/src/components/MIconButton.vue +0 -1
  17. package/src/components/MJsonViewer.vue +1 -1
  18. package/src/components/MLoadingOverlay.vue +1 -1
  19. package/src/components/MMenu.vue +1 -1
  20. package/src/components/MMultiSelect.vue +1 -1
  21. package/src/components/MNavigationDrawer.vue +24 -9
  22. package/src/components/MScheduler.vue +2 -2
  23. package/src/components/MSelect.vue +1 -1
  24. package/src/components/MSideSheet.vue +1 -1
  25. package/src/components/MSnackbar.vue +7 -6
  26. package/src/components/MStepper.vue +2 -2
  27. package/src/components/MTable.vue +2 -2
  28. package/src/components/MTimePicker.vue +2 -2
  29. package/src/components/MTimeline.vue +2 -2
  30. package/src/components/MTooltip.vue +1 -1
  31. package/src/components/MTour.vue +2 -2
  32. package/src/components/MTreeTable.vue +1 -1
  33. package/src/components/MVirtualTable.vue +1 -1
  34. package/src/components/_MContextMenuPanel.vue +1 -1
  35. package/src/components/_MTreeNode.vue +2 -2
  36. package/src/composables/useToast.ts +15 -10
  37. package/src/index.ts +1 -1
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
- .code-editor-container[data-v-b0a66a4b] .cm-editor{height:100%;min-height:inherit;font-family:Roboto Mono,Fira Code,Consolas,monospace;font-size:.8125rem;line-height:1.6}.code-editor-container[data-v-b0a66a4b] .cm-editor.cm-focused{outline:none}.code-editor-container[data-v-b0a66a4b] .cm-scroller{min-height:inherit}.code-editor-container[data-v-b0a66a4b] .cm-content{padding:12px 0}.code-editor-container[data-v-b0a66a4b] .cm-line{padding:0 16px}.code-editor-container[data-v-b0a66a4b] .cm-gutters{background:var(--color-surface-container);border-right:1px solid var(--color-outline-variant);color:var(--color-outline);padding:0 4px;font-size:.75rem}.code-editor-container[data-v-b0a66a4b] .cm-activeLineGutter{background:var(--color-surface-container-high);color:var(--color-on-surface-variant)}.code-editor-container[data-v-b0a66a4b] .cm-activeLine{background:var(--color-surface-container-lowest)}.code-editor-container[data-v-b0a66a4b] .cm-selectionBackground{background:var(--color-primary-container)!important}.code-editor-container[data-v-b0a66a4b] .cm-cursor{border-left-color:var(--color-primary);border-left-width:2px}.code-editor-container[data-v-b0a66a4b] .cm-matchingBracket{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px}.code-editor-container[data-v-b0a66a4b] .cm-foldGutter span{color:var(--color-on-surface-variant)}.bs-scrim[data-v-941a89e7]{transition:opacity .3s}.bs-enter-from .bs-scrim[data-v-941a89e7],.bs-leave-to .bs-scrim[data-v-941a89e7]{opacity:0}.bs-panel[data-v-941a89e7]{transition:transform .32s cubic-bezier(.2,0,0,1),opacity .24s}.bs-enter-from .bs-panel[data-v-941a89e7]{opacity:0;transform:translateY(40%)}.bs-leave-to .bs-panel[data-v-941a89e7]{opacity:0;transform:translateY(100%)!important}@keyframes m3-wavy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes m3-wavy-travel{0%{stroke-dashoffset:0}to{stroke-dashoffset:calc(var(--m3-wave-len) * -1px)}}@media (prefers-reduced-motion:reduce){.animate-\[m3-wavy-spin_2\.8s_linear_infinite\]{animation:2.8s linear infinite m3-wavy-spin}.animate-\[m3-wavy-travel_2s_linear_infinite\]{animation:none!important}}.hue-slider[data-v-9ee0043f]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-9ee0043f]::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#fff;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.hue-slider[data-v-9ee0043f]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.m3-cmd-enter-active[data-v-da578f14],.m3-cmd-leave-active[data-v-da578f14]{transition:opacity .15s}.m3-cmd-enter-from[data-v-da578f14],.m3-cmd-leave-to[data-v-da578f14]{opacity:0}.m3-cmd-enter-active .cmd-box[data-v-da578f14],.m3-cmd-leave-active .cmd-box[data-v-da578f14]{transition:transform .15s}.m3-cmd-enter-from .cmd-box[data-v-da578f14],.m3-cmd-leave-to .cmd-box[data-v-da578f14]{transform:scale(.95)translateY(-10px)}.m3-dialog-enter-active[data-v-e7dfca29],.m3-dialog-leave-active[data-v-e7dfca29]{transition:opacity .15s}.m3-dialog-enter-from[data-v-e7dfca29],.m3-dialog-leave-to[data-v-e7dfca29]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-e7dfca29],.m3-dialog-leave-active .dialog-box[data-v-e7dfca29]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-e7dfca29],.m3-dialog-leave-to .dialog-box[data-v-e7dfca29]{transform:scale(.95)}.expand-grid[data-v-89e4475b]{grid-template-rows:1fr;display:grid}.expand-body[data-v-89e4475b]{min-height:0;overflow:hidden}.expand-enter-active[data-v-89e4475b]{transition:grid-template-rows .28s cubic-bezier(.2,0,0,1)}.expand-enter-active>.expand-body[data-v-89e4475b]{transition:opacity .22s}.expand-enter-from[data-v-89e4475b]{grid-template-rows:0fr}.expand-enter-from>.expand-body[data-v-89e4475b]{opacity:0}.expand-leave-active[data-v-89e4475b]{transition:grid-template-rows .22s cubic-bezier(.4,0,1,1)}.expand-leave-active>.expand-body[data-v-89e4475b]{transition:opacity .15s}.expand-leave-to[data-v-89e4475b]{grid-template-rows:0fr}.expand-leave-to>.expand-body[data-v-89e4475b]{opacity:0}.m3-file-enter-active[data-v-34a862f0],.m3-file-leave-active[data-v-34a862f0]{transition:all .2s}.m3-file-enter-from[data-v-34a862f0],.m3-file-leave-to[data-v-34a862f0]{opacity:0;transform:translateY(-8px)}.nd-scrim[data-v-ebc5ef9c]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-ebc5ef9c],.nd-leave-to .nd-scrim[data-v-ebc5ef9c]{opacity:0}.nd-panel[data-v-ebc5ef9c]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel[data-v-ebc5ef9c],.nd-leave-to .nd-panel[data-v-ebc5ef9c]{transform:translate(-100%)}.nd-section-grid[data-v-ebc5ef9c]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-ebc5ef9c]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-ebc5ef9c]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-ebc5ef9c]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-ebc5ef9c]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-ebc5ef9c]{opacity:0}.nd-section-leave-active[data-v-ebc5ef9c]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-ebc5ef9c]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-ebc5ef9c]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-ebc5ef9c]{opacity:0}.nd-inline[data-v-ebc5ef9c]{transition:width .3s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-ebc5ef9c]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-ebc5ef9c]{max-height:0}.nd-inline.nd-hidden[data-v-ebc5ef9c]{overflow:hidden}.nd-inline .nd-section-body[data-v-ebc5ef9c]>*{transition:padding .3s cubic-bezier(.2,0,0,1)}@keyframes m3-wave-flow{0%{transform:translate(0)}to{transform:translate(-20px)}}@keyframes m3-progress-indeterminate{0%{left:-40%}to{left:100%}}@media (prefers-reduced-motion:reduce){.animate-\[m3-wave-flow_1\.2s_linear_infinite\],.animate-\[m3-wave-flow_0\.9s_linear_infinite\],.animate-\[m3-progress-indeterminate_1\.6s_ease-in-out_infinite\]{animation:none!important}}.m3-radio-dot[data-v-cdb650b5]{transform-box:fill-box;transform-origin:50%;transition:transform .15s;transform:scale(0)}.m3-radio-dot.is-checked[data-v-cdb650b5]{transform:scale(1)}.ss-scrim[data-v-f8751672]{transition:opacity .28s}.ss-enter-from .ss-scrim[data-v-f8751672],.ss-leave-to .ss-scrim[data-v-f8751672]{opacity:0}.ss-panel[data-v-f8751672]{transition:transform .32s cubic-bezier(.2,0,0,1),opacity .24s}.ss-enter-from .ss-panel[data-v-f8751672]{opacity:0;transform:translate(40%)}.ss-leave-to .ss-panel[data-v-f8751672]{opacity:0;transform:translate(100%)!important}@keyframes skeleton-wave-move-32ecf05b{0%{transform:translate(-100%)}60%{transform:translate(100%)}to{transform:translate(100%)}}.skeleton-wave[data-v-32ecf05b]{position:relative;overflow:hidden}.skeleton-wave[data-v-32ecf05b]:after{content:"";background:linear-gradient(90deg, transparent 0%, var(--color-on-surface) 50%, transparent 100%);opacity:.06;animation:1.8s ease-in-out infinite skeleton-wave-move-32ecf05b;position:absolute;inset:0}.toast-row[data-v-e83a5c10]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-e83a5c10]{min-height:0}.m3-toast-bot-enter-active[data-v-e83a5c10]{transition:grid-template-rows .22s cubic-bezier(.2,0,0,1),padding-bottom .22s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-bot-enter-active>.toast-inner[data-v-e83a5c10]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-e83a5c10]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-e83a5c10]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-e83a5c10]{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1),padding-bottom .3s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-bot-leave-active>.toast-inner[data-v-e83a5c10]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-e83a5c10]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-e83a5c10]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-e83a5c10]{transition:grid-template-rows .22s cubic-bezier(.2,0,0,1),padding-bottom .22s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-top-enter-active>.toast-inner[data-v-e83a5c10]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-e83a5c10]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-e83a5c10]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-e83a5c10]{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1),padding-bottom .3s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-top-leave-active>.toast-inner[data-v-e83a5c10]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-e83a5c10]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-e83a5c10]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-e83a5c10{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.m3-spot-enter-active[data-v-51b103ff],.m3-spot-leave-active[data-v-51b103ff]{transition:opacity .15s}.m3-spot-enter-from[data-v-51b103ff],.m3-spot-leave-to[data-v-51b103ff]{opacity:0}.m3-spot-enter-active .spot-box[data-v-51b103ff],.m3-spot-leave-active .spot-box[data-v-51b103ff]{transition:transform .15s,opacity .15s}.m3-spot-enter-from .spot-box[data-v-51b103ff]{opacity:0;transform:scale(.96)translateY(-8px)}.m3-spot-leave-to .spot-box[data-v-51b103ff]{opacity:0;transform:scale(.98)}.m3-tour-highlight{box-shadow:0 0 0 4px var(--color-primary);border-radius:8px;position:relative;z-index:201!important}.m3-tour-enter-active,.m3-tour-leave-active{transition:opacity .2s}.m3-tour-enter-from,.m3-tour-leave-to{opacity:0}.m3-markdown[data-v-6e4dc2b6] h1{font-size:var(--text-headline-large);line-height:var(--text-headline-large--line-height);color:var(--color-on-surface);margin:1em 0 .5em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h2{font-size:var(--text-headline-medium);line-height:var(--text-headline-medium--line-height);color:var(--color-on-surface);margin:1em 0 .5em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h3{font-size:var(--text-headline-small);line-height:var(--text-headline-small--line-height);color:var(--color-on-surface);margin:.75em 0 .25em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h4{font-size:var(--text-title-large);line-height:var(--text-title-large--line-height);color:var(--color-on-surface);margin:.75em 0 .25em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] p{margin:.5em 0}.m3-markdown[data-v-6e4dc2b6] a{color:var(--color-primary);text-underline-offset:2px;text-decoration:underline}.m3-markdown[data-v-6e4dc2b6] a:hover{opacity:.8}.m3-markdown[data-v-6e4dc2b6] strong{color:var(--color-on-surface);font-weight:600}.m3-markdown[data-v-6e4dc2b6] em{font-style:italic}.m3-markdown[data-v-6e4dc2b6] ul,.m3-markdown[data-v-6e4dc2b6] ol{margin:.5em 0;padding-left:1.5em}.m3-markdown[data-v-6e4dc2b6] li{margin:.25em 0}.m3-markdown[data-v-6e4dc2b6] li::marker{color:var(--color-on-surface-variant)}.m3-markdown[data-v-6e4dc2b6] blockquote{border-left:3px solid var(--color-primary);background:var(--color-surface-container);color:var(--color-on-surface-variant);border-radius:0 8px 8px 0;margin:.75em 0;padding:.5em 1em}.m3-markdown[data-v-6e4dc2b6] code{background:var(--color-surface-container-highest);color:var(--color-primary);border-radius:4px;padding:.15em .4em;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875em}.m3-markdown[data-v-6e4dc2b6] pre{background:var(--color-surface-container-highest);border:1px solid var(--color-outline-variant);border-radius:12px;margin:.75em 0;padding:1em;overflow-x:auto}.m3-markdown[data-v-6e4dc2b6] pre code{color:var(--color-on-surface);background:0 0;padding:0}.m3-markdown[data-v-6e4dc2b6] hr{border:none;border-top:1px solid var(--color-outline-variant);margin:1.5em 0}.m3-markdown[data-v-6e4dc2b6] table{border-collapse:collapse;width:100%;margin:.75em 0}.m3-markdown[data-v-6e4dc2b6] th{background:var(--color-surface-container);text-align:left;border-bottom:2px solid var(--color-outline-variant);font-weight:600;font-size:var(--text-label-large);color:var(--color-on-surface);padding:.5em .75em}.m3-markdown[data-v-6e4dc2b6] td{border-bottom:1px solid var(--color-outline-variant);padding:.5em .75em}.m3-markdown[data-v-6e4dc2b6] img{border-radius:12px;max-width:100%;height:auto;margin:.5em 0}.rte-content[data-v-89c08c83] .tiptap{min-height:inherit;outline:none}.rte-content[data-v-89c08c83] .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--color-on-surface-variant);opacity:.5;pointer-events:none;height:0}.rte-content[data-v-89c08c83] h1{font-size:var(--text-headline-large);line-height:var(--text-headline-large--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] h2{font-size:var(--text-headline-medium);line-height:var(--text-headline-medium--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] h3{font-size:var(--text-headline-small);line-height:var(--text-headline-small--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] p{margin:.5em 0}.rte-content[data-v-89c08c83] ul,.rte-content[data-v-89c08c83] ol{margin:.5em 0;padding-left:1.5em}.rte-content[data-v-89c08c83] blockquote{border-left:3px solid var(--color-primary);color:var(--color-on-surface-variant);margin:.5em 0;padding-left:1em}.rte-content[data-v-89c08c83] code{background:var(--color-surface-container-highest);border-radius:4px;padding:.15em .4em;font-size:.875em}.rte-content[data-v-89c08c83] pre{background:var(--color-surface-container-highest);border-radius:8px;margin:.5em 0;padding:1em;overflow-x:auto}.rte-content[data-v-89c08c83] pre code{background:0 0;padding:0}.rte-content[data-v-89c08c83] a{color:var(--color-primary);text-decoration:underline}.rte-content[data-v-89c08c83] mark{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px;padding:.1em .2em}.rte-content[data-v-89c08c83] img{border-radius:8px;max-width:100%;height:auto;margin:.5em 0}
1
+ .code-editor-container[data-v-b0a66a4b] .cm-editor{height:100%;min-height:inherit;font-family:Roboto Mono,Fira Code,Consolas,monospace;font-size:.8125rem;line-height:1.6}.code-editor-container[data-v-b0a66a4b] .cm-editor.cm-focused{outline:none}.code-editor-container[data-v-b0a66a4b] .cm-scroller{min-height:inherit}.code-editor-container[data-v-b0a66a4b] .cm-content{padding:12px 0}.code-editor-container[data-v-b0a66a4b] .cm-line{padding:0 16px}.code-editor-container[data-v-b0a66a4b] .cm-gutters{background:var(--color-surface-container);border-right:1px solid var(--color-outline-variant);color:var(--color-outline);padding:0 4px;font-size:.75rem}.code-editor-container[data-v-b0a66a4b] .cm-activeLineGutter{background:var(--color-surface-container-high);color:var(--color-on-surface-variant)}.code-editor-container[data-v-b0a66a4b] .cm-activeLine{background:var(--color-surface-container-lowest)}.code-editor-container[data-v-b0a66a4b] .cm-selectionBackground{background:var(--color-primary-container)!important}.code-editor-container[data-v-b0a66a4b] .cm-cursor{border-left-color:var(--color-primary);border-left-width:2px}.code-editor-container[data-v-b0a66a4b] .cm-matchingBracket{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px}.code-editor-container[data-v-b0a66a4b] .cm-foldGutter span{color:var(--color-on-surface-variant)}.bs-scrim[data-v-5b1fb748]{transition:opacity .3s}.bs-enter-from .bs-scrim[data-v-5b1fb748],.bs-leave-to .bs-scrim[data-v-5b1fb748]{opacity:0}.bs-panel[data-v-5b1fb748]{transition:transform .32s cubic-bezier(.2,0,0,1),opacity .24s}.bs-enter-from .bs-panel[data-v-5b1fb748]{opacity:0;transform:translateY(40%)}.bs-leave-to .bs-panel[data-v-5b1fb748]{opacity:0;transform:translateY(100%)!important}@keyframes m3-wavy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes m3-wavy-travel{0%{stroke-dashoffset:0}to{stroke-dashoffset:calc(var(--m3-wave-len) * -1px)}}@media (prefers-reduced-motion:reduce){.animate-\[m3-wavy-spin_2\.8s_linear_infinite\]{animation:2.8s linear infinite m3-wavy-spin}.animate-\[m3-wavy-travel_2s_linear_infinite\]{animation:none!important}}.hue-slider[data-v-872ab758]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-872ab758]::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#fff;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.hue-slider[data-v-872ab758]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.m3-cmd-enter-active[data-v-da578f14],.m3-cmd-leave-active[data-v-da578f14]{transition:opacity .15s}.m3-cmd-enter-from[data-v-da578f14],.m3-cmd-leave-to[data-v-da578f14]{opacity:0}.m3-cmd-enter-active .cmd-box[data-v-da578f14],.m3-cmd-leave-active .cmd-box[data-v-da578f14]{transition:transform .15s}.m3-cmd-enter-from .cmd-box[data-v-da578f14],.m3-cmd-leave-to .cmd-box[data-v-da578f14]{transform:scale(.95)translateY(-10px)}.m3-dialog-enter-active[data-v-e7dfca29],.m3-dialog-leave-active[data-v-e7dfca29]{transition:opacity .15s}.m3-dialog-enter-from[data-v-e7dfca29],.m3-dialog-leave-to[data-v-e7dfca29]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-e7dfca29],.m3-dialog-leave-active .dialog-box[data-v-e7dfca29]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-e7dfca29],.m3-dialog-leave-to .dialog-box[data-v-e7dfca29]{transform:scale(.95)}.dt-expand-grid[data-v-fcd73278]{grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.2,0,0,1);display:grid}.dt-expand-grid.dt-expand-open[data-v-fcd73278]{grid-template-rows:1fr}.dt-expand-body[data-v-fcd73278]{min-height:0;overflow:hidden}.expand-grid[data-v-89e4475b]{grid-template-rows:1fr;display:grid}.expand-body[data-v-89e4475b]{min-height:0;overflow:hidden}.expand-enter-active[data-v-89e4475b]{transition:grid-template-rows .28s cubic-bezier(.2,0,0,1)}.expand-enter-active>.expand-body[data-v-89e4475b]{transition:opacity .22s}.expand-enter-from[data-v-89e4475b]{grid-template-rows:0fr}.expand-enter-from>.expand-body[data-v-89e4475b]{opacity:0}.expand-leave-active[data-v-89e4475b]{transition:grid-template-rows .22s cubic-bezier(.4,0,1,1)}.expand-leave-active>.expand-body[data-v-89e4475b]{transition:opacity .15s}.expand-leave-to[data-v-89e4475b]{grid-template-rows:0fr}.expand-leave-to>.expand-body[data-v-89e4475b]{opacity:0}.m3-file-enter-active[data-v-34a862f0],.m3-file-leave-active[data-v-34a862f0]{transition:all .2s}.m3-file-enter-from[data-v-34a862f0],.m3-file-leave-to[data-v-34a862f0]{opacity:0;transform:translateY(-8px)}.nd-scrim[data-v-a5cf49d0]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-a5cf49d0],.nd-leave-to .nd-scrim[data-v-a5cf49d0]{opacity:0}.nd-panel[data-v-a5cf49d0]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel[data-v-a5cf49d0],.nd-leave-to .nd-panel[data-v-a5cf49d0]{transform:translate(-100%)}.nd-section-grid[data-v-a5cf49d0]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-a5cf49d0]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-a5cf49d0]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-a5cf49d0]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-a5cf49d0]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-a5cf49d0]{opacity:0}.nd-section-leave-active[data-v-a5cf49d0]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-a5cf49d0]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-a5cf49d0]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-a5cf49d0]{opacity:0}.nd-inline[data-v-a5cf49d0]{transition:width .3s cubic-bezier(.2,0,0,1);overflow:hidden}.nd-inline[data-v-a5cf49d0]>*{min-width:18rem}.nd-inline.nd-collapsed[data-v-a5cf49d0]>*{min-width:0}.nd-label[data-v-a5cf49d0]{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.nd-inline.nd-collapsed .nd-label[data-v-a5cf49d0]{opacity:0;transition:opacity .1s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-a5cf49d0]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-a5cf49d0]{max-height:0}.nd-inline .nd-section-body[data-v-a5cf49d0]>*{transition:padding .3s cubic-bezier(.2,0,0,1)}@keyframes m3-wave-flow{0%{transform:translate(0)}to{transform:translate(-20px)}}@keyframes m3-progress-indeterminate{0%{left:-40%}to{left:100%}}@media (prefers-reduced-motion:reduce){.animate-\[m3-wave-flow_1\.2s_linear_infinite\],.animate-\[m3-wave-flow_0\.9s_linear_infinite\],.animate-\[m3-progress-indeterminate_1\.6s_ease-in-out_infinite\]{animation:none!important}}.m3-radio-dot[data-v-cdb650b5]{transform-box:fill-box;transform-origin:50%;transition:transform .15s;transform:scale(0)}.m3-radio-dot.is-checked[data-v-cdb650b5]{transform:scale(1)}.ss-scrim[data-v-ba5b6f4b]{transition:opacity .28s}.ss-enter-from .ss-scrim[data-v-ba5b6f4b],.ss-leave-to .ss-scrim[data-v-ba5b6f4b]{opacity:0}.ss-panel[data-v-ba5b6f4b]{transition:transform .32s cubic-bezier(.2,0,0,1),opacity .24s}.ss-enter-from .ss-panel[data-v-ba5b6f4b]{opacity:0;transform:translate(40%)}.ss-leave-to .ss-panel[data-v-ba5b6f4b]{opacity:0;transform:translate(100%)!important}@keyframes skeleton-wave-move-32ecf05b{0%{transform:translate(-100%)}60%{transform:translate(100%)}to{transform:translate(100%)}}.skeleton-wave[data-v-32ecf05b]{position:relative;overflow:hidden}.skeleton-wave[data-v-32ecf05b]:after{content:"";background:linear-gradient(90deg, transparent 0%, var(--color-on-surface) 50%, transparent 100%);opacity:.06;animation:1.8s ease-in-out infinite skeleton-wave-move-32ecf05b;position:absolute;inset:0}.toast-row[data-v-746fa345]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-746fa345]{min-height:0}.m3-toast-bot-enter-active[data-v-746fa345]{transition:grid-template-rows .22s cubic-bezier(.2,0,0,1),padding-bottom .22s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-bot-enter-active>.toast-inner[data-v-746fa345]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-746fa345]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-746fa345]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-746fa345]{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1),padding-bottom .3s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-bot-leave-active>.toast-inner[data-v-746fa345]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-746fa345]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-746fa345]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-746fa345]{transition:grid-template-rows .22s cubic-bezier(.2,0,0,1),padding-bottom .22s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-top-enter-active>.toast-inner[data-v-746fa345]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-746fa345]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-746fa345]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-746fa345]{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1),padding-bottom .3s cubic-bezier(.2,0,0,1);overflow:hidden}.m3-toast-top-leave-active>.toast-inner[data-v-746fa345]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-746fa345]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-746fa345]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-746fa345{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.m3-spot-enter-active[data-v-51b103ff],.m3-spot-leave-active[data-v-51b103ff]{transition:opacity .15s}.m3-spot-enter-from[data-v-51b103ff],.m3-spot-leave-to[data-v-51b103ff]{opacity:0}.m3-spot-enter-active .spot-box[data-v-51b103ff],.m3-spot-leave-active .spot-box[data-v-51b103ff]{transition:transform .15s,opacity .15s}.m3-spot-enter-from .spot-box[data-v-51b103ff]{opacity:0;transform:scale(.96)translateY(-8px)}.m3-spot-leave-to .spot-box[data-v-51b103ff]{opacity:0;transform:scale(.98)}.m3-tour-highlight{box-shadow:0 0 0 4px var(--color-primary);border-radius:8px;position:relative;z-index:201!important}.m3-tour-enter-active,.m3-tour-leave-active{transition:opacity .2s}.m3-tour-enter-from,.m3-tour-leave-to{opacity:0}.m3-markdown[data-v-6e4dc2b6] h1{font-size:var(--text-headline-large);line-height:var(--text-headline-large--line-height);color:var(--color-on-surface);margin:1em 0 .5em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h2{font-size:var(--text-headline-medium);line-height:var(--text-headline-medium--line-height);color:var(--color-on-surface);margin:1em 0 .5em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h3{font-size:var(--text-headline-small);line-height:var(--text-headline-small--line-height);color:var(--color-on-surface);margin:.75em 0 .25em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] h4{font-size:var(--text-title-large);line-height:var(--text-title-large--line-height);color:var(--color-on-surface);margin:.75em 0 .25em;font-weight:600}.m3-markdown[data-v-6e4dc2b6] p{margin:.5em 0}.m3-markdown[data-v-6e4dc2b6] a{color:var(--color-primary);text-underline-offset:2px;text-decoration:underline}.m3-markdown[data-v-6e4dc2b6] a:hover{opacity:.8}.m3-markdown[data-v-6e4dc2b6] strong{color:var(--color-on-surface);font-weight:600}.m3-markdown[data-v-6e4dc2b6] em{font-style:italic}.m3-markdown[data-v-6e4dc2b6] ul,.m3-markdown[data-v-6e4dc2b6] ol{margin:.5em 0;padding-left:1.5em}.m3-markdown[data-v-6e4dc2b6] li{margin:.25em 0}.m3-markdown[data-v-6e4dc2b6] li::marker{color:var(--color-on-surface-variant)}.m3-markdown[data-v-6e4dc2b6] blockquote{border-left:3px solid var(--color-primary);background:var(--color-surface-container);color:var(--color-on-surface-variant);border-radius:0 8px 8px 0;margin:.75em 0;padding:.5em 1em}.m3-markdown[data-v-6e4dc2b6] code{background:var(--color-surface-container-highest);color:var(--color-primary);border-radius:4px;padding:.15em .4em;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875em}.m3-markdown[data-v-6e4dc2b6] pre{background:var(--color-surface-container-highest);border:1px solid var(--color-outline-variant);border-radius:12px;margin:.75em 0;padding:1em;overflow-x:auto}.m3-markdown[data-v-6e4dc2b6] pre code{color:var(--color-on-surface);background:0 0;padding:0}.m3-markdown[data-v-6e4dc2b6] hr{border:none;border-top:1px solid var(--color-outline-variant);margin:1.5em 0}.m3-markdown[data-v-6e4dc2b6] table{border-collapse:collapse;width:100%;margin:.75em 0}.m3-markdown[data-v-6e4dc2b6] th{background:var(--color-surface-container);text-align:left;border-bottom:2px solid var(--color-outline-variant);font-weight:600;font-size:var(--text-label-large);color:var(--color-on-surface);padding:.5em .75em}.m3-markdown[data-v-6e4dc2b6] td{border-bottom:1px solid var(--color-outline-variant);padding:.5em .75em}.m3-markdown[data-v-6e4dc2b6] img{border-radius:12px;max-width:100%;height:auto;margin:.5em 0}.rte-content[data-v-89c08c83] .tiptap{min-height:inherit;outline:none}.rte-content[data-v-89c08c83] .tiptap p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--color-on-surface-variant);opacity:.5;pointer-events:none;height:0}.rte-content[data-v-89c08c83] h1{font-size:var(--text-headline-large);line-height:var(--text-headline-large--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] h2{font-size:var(--text-headline-medium);line-height:var(--text-headline-medium--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] h3{font-size:var(--text-headline-small);line-height:var(--text-headline-small--line-height);margin:.75em 0 .25em;font-weight:600}.rte-content[data-v-89c08c83] p{margin:.5em 0}.rte-content[data-v-89c08c83] ul,.rte-content[data-v-89c08c83] ol{margin:.5em 0;padding-left:1.5em}.rte-content[data-v-89c08c83] blockquote{border-left:3px solid var(--color-primary);color:var(--color-on-surface-variant);margin:.5em 0;padding-left:1em}.rte-content[data-v-89c08c83] code{background:var(--color-surface-container-highest);border-radius:4px;padding:.15em .4em;font-size:.875em}.rte-content[data-v-89c08c83] pre{background:var(--color-surface-container-highest);border-radius:8px;margin:.5em 0;padding:1em;overflow-x:auto}.rte-content[data-v-89c08c83] pre code{background:0 0;padding:0}.rte-content[data-v-89c08c83] a{color:var(--color-primary);text-decoration:underline}.rte-content[data-v-89c08c83] mark{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px;padding:.1em .2em}.rte-content[data-v-89c08c83] img{border-radius:8px;max-width:100%;height:auto;margin:.5em 0}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m3ui-vue/m3ui-vue",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Material 3 component library for Vue 3 + Tailwind CSS v4",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -41,13 +41,13 @@ const sheetStyle = computed(() => ({
41
41
  <template>
42
42
  <Teleport to="body">
43
43
  <Transition name="bs" :duration="{ enter: 320, leave: 280 }">
44
- <div v-if="modelValue" class="fixed inset-0 z-[200] flex flex-col justify-end">
44
+ <div v-if="modelValue" class="fixed inset-0 z-200 flex flex-col justify-end">
45
45
  <!-- Scrim -->
46
46
  <div class="bs-scrim absolute inset-0 bg-black/40" @click="close" />
47
47
 
48
48
  <!-- Panel -->
49
49
  <div
50
- class="bs-panel relative flex w-full flex-col rounded-t-[28px] bg-surface-container-low shadow-elevation-3"
50
+ class="bs-panel relative flex w-full flex-col rounded-t-xl bg-surface-container-low shadow-elevation-3"
51
51
  :class="fullHeight ? 'max-h-[92vh]' : 'max-h-[60vh]'"
52
52
  :style="sheetStyle"
53
53
  >
@@ -125,7 +125,7 @@ const eventColor: Record<string, string> = {
125
125
  <div
126
126
  v-for="(day, i) in calendarDays"
127
127
  :key="i"
128
- class="flex min-h-[80px] cursor-pointer flex-col border-b border-r border-outline-variant/50 p-1.5 transition-colors hover:bg-on-surface/[0.03]"
128
+ class="flex min-h-[80px] cursor-pointer flex-col border-b border-r border-outline-variant/50 p-1.5 transition-colors hover:bg-on-surface/3"
129
129
  :class="[
130
130
  !day.current ? 'bg-surface-container-lowest/50' : 'bg-surface',
131
131
  (i + 1) % 7 === 0 ? 'border-r-0' : '',
@@ -191,7 +191,7 @@ onUnmounted(() => {
191
191
  </button>
192
192
  <label
193
193
  v-if="label"
194
- class="pointer-events-none absolute -top-2.5 left-3 bg-[var(--field-bg)] px-1 text-label-small transition-colors"
194
+ class="pointer-events-none absolute -top-2.5 left-3 bg-(--field-bg) px-1 text-label-small transition-colors"
195
195
  :class="open ? (error ? 'text-error' : 'text-primary') : error ? 'text-error' : 'text-on-surface-variant'"
196
196
  >
197
197
  {{ label }}
@@ -211,7 +211,7 @@ onUnmounted(() => {
211
211
  <div
212
212
  v-if="open"
213
213
  ref="panelEl"
214
- class="fixed z-[500] w-[280px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
214
+ class="fixed z-500 w-[280px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
215
215
  :style="dropPos"
216
216
  >
217
217
  <!-- Saturation / Brightness area -->
@@ -51,7 +51,7 @@ defineExpose({ show, showAt, hide })
51
51
  >
52
52
  <div
53
53
  v-if="visible"
54
- class="fixed inset-0 z-[200]"
54
+ class="fixed inset-0 z-200"
55
55
  @mousedown.self="hide"
56
56
  @contextmenu.prevent
57
57
  >
@@ -248,7 +248,7 @@ function colStyle(col: DataTableColumn) {
248
248
  <!-- Table -->
249
249
  <div class="overflow-x-auto">
250
250
  <table class="w-full border-collapse">
251
- <thead :class="stickyHeader ? 'sticky top-0 z-[1]' : ''">
251
+ <thead :class="stickyHeader ? 'sticky top-0 z-1' : ''">
252
252
  <tr class="bg-surface-container-high">
253
253
  <th v-if="hasExpand" class="w-10 px-2" :class="dense ? 'py-2' : 'py-3'" />
254
254
  <th v-if="selectable" class="w-12 px-4" :class="dense ? 'py-2' : 'py-3'">
@@ -320,8 +320,8 @@ function colStyle(col: DataTableColumn) {
320
320
  <tr
321
321
  :class="[
322
322
  'border-t border-outline-variant transition-colors duration-100',
323
- 'hover:bg-on-surface/[0.04]',
324
- selectable && isSelected(row) ? 'bg-primary/[0.06]' : '',
323
+ 'hover:bg-on-surface/4',
324
+ selectable && isSelected(row) ? 'bg-primary/6' : '',
325
325
  striped ? 'even:bg-surface-container-lowest' : '',
326
326
  selectable ? 'cursor-pointer' : '',
327
327
  ]"
@@ -354,9 +354,15 @@ function colStyle(col: DataTableColumn) {
354
354
  </td>
355
355
  </tr>
356
356
  <!-- Expanded content -->
357
- <tr v-if="hasExpand && isExpanded(row)">
358
- <td :colspan="visibleColumns.length + extraCols" class="border-t border-outline-variant/50 bg-surface-container-lowest px-6 py-4">
359
- <slot name="row-expand" :row="row" />
357
+ <tr v-if="hasExpand">
358
+ <td :colspan="visibleColumns.length + extraCols" class="border-t border-outline-variant/50 bg-surface-container-lowest p-0">
359
+ <div class="dt-expand-grid" :class="isExpanded(row) ? 'dt-expand-open' : ''">
360
+ <div class="dt-expand-body">
361
+ <div class="px-6 py-4">
362
+ <slot name="row-expand" :row="row" />
363
+ </div>
364
+ </div>
365
+ </div>
360
366
  </td>
361
367
  </tr>
362
368
  </template>
@@ -374,3 +380,18 @@ function colStyle(col: DataTableColumn) {
374
380
  </div>
375
381
  </div>
376
382
  </template>
383
+
384
+ <style scoped>
385
+ .dt-expand-grid {
386
+ display: grid;
387
+ grid-template-rows: 0fr;
388
+ transition: grid-template-rows 250ms cubic-bezier(0.2, 0, 0, 1);
389
+ }
390
+ .dt-expand-grid.dt-expand-open {
391
+ grid-template-rows: 1fr;
392
+ }
393
+ .dt-expand-body {
394
+ min-height: 0;
395
+ overflow: hidden;
396
+ }
397
+ </style>
@@ -184,7 +184,7 @@ onUnmounted(() => {
184
184
  </button>
185
185
  <label
186
186
  v-if="label"
187
- class="pointer-events-none absolute -top-2.5 left-3 bg-[var(--field-bg)] px-1 text-label-small transition-colors"
187
+ class="pointer-events-none absolute -top-2.5 left-3 bg-(--field-bg) px-1 text-label-small transition-colors"
188
188
  :class="open ? (error ? 'text-error' : 'text-primary') : error ? 'text-error' : 'text-on-surface-variant'"
189
189
  >
190
190
  {{ label }}
@@ -205,7 +205,7 @@ onUnmounted(() => {
205
205
  <div
206
206
  v-if="open"
207
207
  ref="panelEl"
208
- class="fixed z-[500] w-[320px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
208
+ class="fixed z-500 w-[320px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
209
209
  :style="dropPos"
210
210
  >
211
211
  <!-- Header -->
@@ -195,7 +195,7 @@ onUnmounted(() => {
195
195
  </button>
196
196
  <label
197
197
  v-if="label"
198
- class="pointer-events-none absolute -top-2.5 left-3 bg-[var(--field-bg)] px-1 text-label-small transition-colors"
198
+ class="pointer-events-none absolute -top-2.5 left-3 bg-(--field-bg) px-1 text-label-small transition-colors"
199
199
  :class="open ? (error ? 'text-error' : 'text-primary') : error ? 'text-error' : 'text-on-surface-variant'"
200
200
  >
201
201
  {{ label }}
@@ -215,7 +215,7 @@ onUnmounted(() => {
215
215
  <div
216
216
  v-if="open"
217
217
  ref="panelEl"
218
- class="fixed z-[500] w-[320px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
218
+ class="fixed z-500 w-[320px] rounded-lg bg-surface-container p-4 shadow-elevation-3"
219
219
  :style="dropPos"
220
220
  >
221
221
  <p class="mb-2 text-center text-label-medium text-on-surface-variant">
@@ -44,7 +44,6 @@ const variantClasses = computed(() => {
44
44
  :to="to || undefined"
45
45
  :type="to ? undefined : 'button'"
46
46
  :aria-label="label"
47
- :title="label"
48
47
  :disabled="disabled"
49
48
  :class="[base, variantClasses]"
50
49
  :style="{ width: `${size}px`, height: `${size}px` }"
@@ -62,7 +62,7 @@ function formatValue(val: unknown) {
62
62
  <template v-if="isExpandable">
63
63
  <button
64
64
  type="button"
65
- class="group inline-flex cursor-pointer items-center gap-0.5 rounded px-0.5 hover:bg-on-surface/[0.06]"
65
+ class="group inline-flex cursor-pointer items-center gap-0.5 rounded px-0.5 hover:bg-on-surface/6"
66
66
  @click="expanded = !expanded"
67
67
  >
68
68
  <MIcon
@@ -20,7 +20,7 @@ withDefaults(defineProps<{
20
20
  >
21
21
  <div
22
22
  v-if="visible"
23
- class="fixed inset-0 z-[300] flex flex-col items-center justify-center gap-4"
23
+ class="fixed inset-0 z-300 flex flex-col items-center justify-center gap-4"
24
24
  :class="opaque ? 'bg-surface' : 'bg-surface/80 backdrop-blur-sm'"
25
25
  >
26
26
  <MSpinner :size="spinnerSize" class="text-primary" />
@@ -102,7 +102,7 @@ const origin = computed(() =>
102
102
  <div
103
103
  v-if="open"
104
104
  ref="dropdownEl"
105
- class="fixed z-[500] min-w-48 overflow-y-auto overflow-x-hidden rounded-xs bg-surface-container py-1 shadow-elevation-2"
105
+ class="fixed z-500 min-w-48 overflow-y-auto overflow-x-hidden rounded-xs bg-surface-container py-1 shadow-elevation-2"
106
106
  :style="{ ...dropStyle, transformOrigin: origin }"
107
107
  @click="close"
108
108
  >
@@ -263,7 +263,7 @@ const labelClasses = computed(() => {
263
263
  <div
264
264
  v-if="open"
265
265
  ref="dropdownEl"
266
- class="fixed z-[500] max-h-60 overflow-auto rounded-sm bg-surface-container shadow-elevation-2"
266
+ class="fixed z-500 max-h-60 overflow-auto rounded-sm bg-surface-container shadow-elevation-2"
267
267
  :style="dropPos"
268
268
  >
269
269
  <!-- Search -->
@@ -67,7 +67,7 @@ watch(() => props.modelValue, (open) => {
67
67
  <!-- ── Modal variant ──────────────────────────────────────── -->
68
68
  <Teleport v-if="modal" to="body">
69
69
  <Transition name="nd" :duration="{ enter: 300, leave: 280 }">
70
- <div v-if="modelValue" class="fixed inset-0 z-[100] flex">
70
+ <div v-if="modelValue" class="fixed inset-0 z-100 flex">
71
71
  <div class="nd-scrim absolute inset-0 bg-black/40" @click="close" />
72
72
 
73
73
  <nav class="nd-panel relative flex h-full w-72 max-w-[85vw] flex-col bg-surface-container shadow-elevation-3">
@@ -169,11 +169,11 @@ watch(() => props.modelValue, (open) => {
169
169
  @click="toggleSection(section, si)"
170
170
  >
171
171
  <MIcon v-if="section.icon" :name="section.icon" :size="24" class="shrink-0" />
172
- <span class="min-w-0 flex-1 text-left text-title-small font-medium">{{ section.title }}</span>
172
+ <span class="nd-label min-w-0 flex-1 text-left text-title-small font-medium">{{ section.title }}</span>
173
173
  <MIcon
174
174
  :name="isSectionOpen(section, si) ? 'expand_less' : 'expand_more'"
175
175
  :size="18"
176
- class="shrink-0"
176
+ class="nd-label shrink-0"
177
177
  />
178
178
  </button>
179
179
 
@@ -207,8 +207,8 @@ watch(() => props.modelValue, (open) => {
207
207
  @click="select(item)"
208
208
  >
209
209
  <MIcon v-if="item.icon" :name="item.icon" :size="24" class="shrink-0" />
210
- <span class="min-w-0 flex-1 text-label-large font-medium">{{ item.label }}</span>
211
- <span v-if="item.badge != null" class="text-label-medium text-on-surface-variant">
210
+ <span class="nd-label min-w-0 flex-1 text-label-large font-medium">{{ item.label }}</span>
211
+ <span v-if="item.badge != null" class="nd-label text-label-medium text-on-surface-variant">
212
212
  {{ item.badge }}
213
213
  </span>
214
214
  </component>
@@ -279,6 +279,25 @@ watch(() => props.modelValue, (open) => {
279
279
  /* ── Inline sidebar width transition ───────────────────── */
280
280
  .nd-inline {
281
281
  transition: width 300ms cubic-bezier(0.2, 0, 0, 1);
282
+ overflow: hidden;
283
+ }
284
+
285
+ /* Freeze layout so content clips like a curtain during open/close */
286
+ .nd-inline > * {
287
+ min-width: 18rem;
288
+ }
289
+ /* Collapse-to-icons: let children adapt to 72px width */
290
+ .nd-inline.nd-collapsed > * {
291
+ min-width: 0;
292
+ }
293
+
294
+ /* Collapse-to-icons: fade out labels before width squishes them */
295
+ .nd-label {
296
+ transition: opacity 200ms 80ms cubic-bezier(0.2, 0, 0, 1);
297
+ }
298
+ .nd-inline.nd-collapsed .nd-label {
299
+ opacity: 0;
300
+ transition: opacity 100ms cubic-bezier(0.2, 0, 0, 1);
282
301
  }
283
302
 
284
303
  /* Elements that should collapse to 0 height when sidebar is collapsed */
@@ -290,10 +309,6 @@ watch(() => props.modelValue, (open) => {
290
309
  max-height: 0;
291
310
  }
292
311
 
293
- .nd-inline.nd-hidden {
294
- overflow: hidden;
295
- }
296
-
297
312
  .nd-inline .nd-section-body > * {
298
313
  transition: padding 300ms cubic-bezier(0.2, 0, 0, 1);
299
314
  }
@@ -200,14 +200,14 @@ const eventColors: Record<string, string> = {
200
200
  v-for="day in visibleDays"
201
201
  :key="fmt(day)"
202
202
  class="relative h-14 border-r border-b border-outline-variant/50 p-0 last:border-r-0"
203
- :class="fmt(day) === todayIso ? 'bg-primary-container/[0.05]' : ''"
203
+ :class="fmt(day) === todayIso ? 'bg-primary-container/5' : ''"
204
204
  @click="emit('slotClick', { date: fmt(day), hour })"
205
205
  >
206
206
  <template v-for="ev in eventsForDayHour(day, hour)" :key="ev.id">
207
207
  <button
208
208
  v-if="isEventStart(ev, hour)"
209
209
  type="button"
210
- class="absolute inset-x-0.5 top-0.5 z-[5] cursor-pointer overflow-hidden rounded border-l-[3px] px-2 py-1 text-left transition-opacity hover:opacity-90"
210
+ class="absolute inset-x-0.5 top-0.5 z-5 cursor-pointer overflow-hidden rounded border-l-[3px] px-2 py-1 text-left transition-opacity hover:opacity-90"
211
211
  :class="eventColors[ev.color ?? 'primary']"
212
212
  :style="{ height: `calc(${eventDuration(ev) * 100}% - 4px)` }"
213
213
  @click.stop="emit('eventClick', ev)"
@@ -223,7 +223,7 @@ const labelClasses = computed(() => {
223
223
  <div
224
224
  v-if="open"
225
225
  ref="dropdownEl"
226
- class="fixed z-[500] max-h-60 overflow-auto rounded-sm bg-surface-container py-1 shadow-elevation-2"
226
+ class="fixed z-500 max-h-60 overflow-auto rounded-sm bg-surface-container py-1 shadow-elevation-2"
227
227
  :style="dropPos"
228
228
  >
229
229
  <div
@@ -40,7 +40,7 @@ const panelStyle = computed(() => ({
40
40
  <template>
41
41
  <Teleport to="body">
42
42
  <Transition name="ss" :duration="{ enter: 320, leave: 280 }">
43
- <div v-if="modelValue" class="fixed inset-0 z-[200] flex justify-end">
43
+ <div v-if="modelValue" class="fixed inset-0 z-200 flex justify-end">
44
44
  <!-- Scrim -->
45
45
  <div class="ss-scrim absolute inset-0 bg-black/40" @click="close" />
46
46
 
@@ -85,13 +85,14 @@ const getVariantStyle = (variant: string): VariantStyle =>
85
85
  <div v-for="t in toasts" :key="t.id" class="toast-row w-full min-w-64 max-w-xs">
86
86
  <div
87
87
  class="toast-inner pointer-events-auto relative flex items-center gap-3 overflow-hidden rounded-2xl px-4 py-4 shadow-elevation-2"
88
- :class="getVariantStyle(t.variant).container"
88
+ :class="t.color ? 'text-white ring-1 ring-inset ring-white/10' : getVariantStyle(t.variant).container"
89
+ :style="t.color ? { backgroundColor: t.color } : undefined"
89
90
  >
90
91
  <MIcon
91
- :name="getVariantStyle(t.variant).iconName"
92
+ :name="t.icon ?? getVariantStyle(t.variant).iconName"
92
93
  :size="20"
93
94
  class="shrink-0"
94
- :class="getVariantStyle(t.variant).icon"
95
+ :class="t.color ? '' : getVariantStyle(t.variant).icon"
95
96
  />
96
97
 
97
98
  <p class="flex-1 text-body-medium leading-snug">{{ t.message }}</p>
@@ -101,7 +102,7 @@ const getVariantStyle = (variant: string): VariantStyle =>
101
102
  v-if="t.action"
102
103
  type="button"
103
104
  class="cursor-pointer rounded px-2 py-1 text-label-medium font-semibold transition-colors"
104
- :class="getVariantStyle(t.variant).action"
105
+ :class="t.color ? 'text-white/90 hover:bg-white/15' : getVariantStyle(t.variant).action"
105
106
  @click="
106
107
  () => {
107
108
  t.action!.onClick();
@@ -115,7 +116,7 @@ const getVariantStyle = (variant: string): VariantStyle =>
115
116
  <button
116
117
  type="button"
117
118
  class="flex h-8 w-8 cursor-pointer items-center justify-center rounded-full transition-colors"
118
- :class="getVariantStyle(t.variant).close"
119
+ :class="t.color ? 'text-white/60 hover:bg-white/15' : getVariantStyle(t.variant).close"
119
120
  aria-label="Cerrar"
120
121
  @click="dismiss(t.id)"
121
122
  >
@@ -127,7 +128,7 @@ const getVariantStyle = (variant: string): VariantStyle =>
127
128
  <div
128
129
  v-if="t.duration > 0"
129
130
  class="absolute right-0 bottom-0 left-0 h-0.5 origin-left"
130
- :class="getVariantStyle(t.variant).progress"
131
+ :class="t.color ? 'bg-white/30' : getVariantStyle(t.variant).progress"
131
132
  :style="{ animation: `m3-toast-progress ${t.duration}ms linear forwards` }"
132
133
  />
133
134
  </div>
@@ -88,7 +88,7 @@ function select(index: number) {
88
88
  class="mt-[18px] flex flex-1 items-center px-2"
89
89
  >
90
90
  <div
91
- class="h-[1px] w-full transition-colors duration-300"
91
+ class="h-px w-full transition-colors duration-300"
92
92
  :class="i < modelValue ? 'bg-primary' : 'bg-outline-variant'"
93
93
  />
94
94
  </div>
@@ -121,7 +121,7 @@ function select(index: number) {
121
121
  <!-- Vertical connector -->
122
122
  <div
123
123
  v-if="i < steps.length - 1"
124
- class="my-1 w-[1px] flex-1 transition-colors duration-300"
124
+ class="my-1 w-px flex-1 transition-colors duration-300"
125
125
  :class="i < modelValue ? 'bg-primary' : 'bg-outline-variant'"
126
126
  style="min-height: 24px"
127
127
  />
@@ -359,8 +359,8 @@ const hasActions = computed(() => !!slots['row-actions'])
359
359
  :key="rowId(row)"
360
360
  :class="[
361
361
  'border-t border-outline-variant transition-colors duration-100',
362
- 'hover:bg-on-surface/[0.04]',
363
- selectable && isSelected(row) ? 'bg-primary/[0.06]' : '',
362
+ 'hover:bg-on-surface/4',
363
+ selectable && isSelected(row) ? 'bg-primary/6' : '',
364
364
  selectable ? 'cursor-pointer' : '',
365
365
  ]"
366
366
  @click="selectable ? toggleRow(row) : undefined"
@@ -140,7 +140,7 @@ onUnmounted(() => {
140
140
  </button>
141
141
  <label
142
142
  v-if="label"
143
- class="pointer-events-none absolute -top-2.5 left-3 bg-[var(--field-bg)] px-1 text-label-small transition-colors"
143
+ class="pointer-events-none absolute -top-2.5 left-3 bg-(--field-bg) px-1 text-label-small transition-colors"
144
144
  :class="open ? (error ? 'text-error' : 'text-primary') : error ? 'text-error' : 'text-on-surface-variant'"
145
145
  >
146
146
  {{ label }}
@@ -160,7 +160,7 @@ onUnmounted(() => {
160
160
  <div
161
161
  v-if="open"
162
162
  ref="panelEl"
163
- class="fixed z-[500] w-[280px] rounded-lg bg-surface-container shadow-elevation-3"
163
+ class="fixed z-500 w-[280px] rounded-lg bg-surface-container shadow-elevation-3"
164
164
  :style="dropPos"
165
165
  >
166
166
  <!-- Display -->
@@ -41,7 +41,7 @@ const dotBg: Record<string, string> = {
41
41
  <!-- Line + dot -->
42
42
  <div class="flex flex-col items-center">
43
43
  <div
44
- class="z-[1] flex shrink-0 items-center justify-center rounded-full"
44
+ class="z-1 flex shrink-0 items-center justify-center rounded-full"
45
45
  :class="[item.icon ? 'h-9 w-9' : 'h-3 w-3', dotBg[item.color ?? 'primary']]"
46
46
  :style="item.dotColor ? { backgroundColor: item.dotColor } : undefined"
47
47
  >
@@ -100,7 +100,7 @@ const dotBg: Record<string, string> = {
100
100
  <!-- Center column: dot + continuous line -->
101
101
  <div class="flex w-14 shrink-0 flex-col items-center">
102
102
  <div
103
- class="z-[1] flex shrink-0 items-center justify-center rounded-full"
103
+ class="z-1 flex shrink-0 items-center justify-center rounded-full"
104
104
  :class="[item.icon ? 'h-9 w-9' : 'h-3.5 w-3.5', dotBg[item.color ?? 'primary']]"
105
105
  :style="item.dotColor ? { backgroundColor: item.dotColor } : undefined"
106
106
  >
@@ -78,7 +78,7 @@ onUnmounted(() => window.removeEventListener('scroll', onScroll, true))
78
78
  <div
79
79
  v-if="visible && text"
80
80
  ref="tipEl"
81
- class="pointer-events-none fixed z-[400] max-w-[220px] rounded bg-inverse-surface px-3 py-1.5 text-label-medium text-inverse-on-surface shadow-elevation-2"
81
+ class="pointer-events-none fixed z-400 max-w-[220px] rounded bg-inverse-surface px-3 py-1.5 text-label-medium text-inverse-on-surface shadow-elevation-2"
82
82
  :style="tipStyle"
83
83
  role="tooltip"
84
84
  >
@@ -149,14 +149,14 @@ onBeforeUnmount(clearHighlight)
149
149
  <Teleport to="body">
150
150
  <!-- Overlay -->
151
151
  <Transition name="m3-tour">
152
- <div v-if="modelValue && step" class="fixed inset-0 z-[200] bg-black/40" @click="close" />
152
+ <div v-if="modelValue && step" class="fixed inset-0 z-200 bg-black/40" @click="close" />
153
153
  </Transition>
154
154
 
155
155
  <!-- Tooltip -->
156
156
  <Transition name="m3-tour">
157
157
  <div
158
158
  v-if="modelValue && step"
159
- class="fixed z-[202] w-80 rounded-xl bg-surface-container-high p-5 shadow-elevation-3"
159
+ class="fixed z-202 w-80 rounded-xl bg-surface-container-high p-5 shadow-elevation-3"
160
160
  :style="tooltipStyle"
161
161
  >
162
162
  <!-- Arrow -->
@@ -114,7 +114,7 @@ function alignClass(a?: string) { return a === 'center' ? 'text-center' : a ===
114
114
  <tr
115
115
  v-for="(item, i) in flatRows"
116
116
  :key="item.row[rowKey] ?? i"
117
- class="border-t border-outline-variant transition-colors duration-100 hover:bg-on-surface/[0.04]"
117
+ class="border-t border-outline-variant transition-colors duration-100 hover:bg-on-surface/4"
118
118
  :class="item.depth > 0 ? 'bg-surface-container-lowest/50' : ''"
119
119
  @click="emit('rowClick', item.row)"
120
120
  >
@@ -122,7 +122,7 @@ function alignClass(a?: string) { return a === 'center' ? 'text-center' : a ===
122
122
  <div
123
123
  v-for="{ row, index, top } in visibleRows"
124
124
  :key="row[rowKey] ?? index"
125
- class="absolute left-0 right-0 flex border-t border-outline-variant transition-colors duration-75 hover:bg-on-surface/[0.04]"
125
+ class="absolute left-0 right-0 flex border-t border-outline-variant transition-colors duration-75 hover:bg-on-surface/4"
126
126
  :class="index % 2 === 0 ? '' : 'bg-surface-container-lowest/50'"
127
127
  :style="{ top: `${top}px`, height: `${rowHeight}px` }"
128
128
  @click="emit('rowClick', row)"
@@ -66,7 +66,7 @@ function onPanelMouseLeave(e: MouseEvent) {
66
66
  <template>
67
67
  <div
68
68
  ref="panel"
69
- class="m3-ctx-panel absolute z-[201] min-w-[200px] rounded-sm bg-surface-container shadow-elevation-2"
69
+ class="m3-ctx-panel absolute z-201 min-w-[200px] rounded-sm bg-surface-container shadow-elevation-2"
70
70
  :style="{ left: `${panelX}px`, top: `${panelY}px` }"
71
71
  @mouseleave="onPanelMouseLeave"
72
72
  >
@@ -82,9 +82,9 @@ function onAfterLeave(el: Element) {
82
82
  ? 'cursor-not-allowed opacity-38'
83
83
  : 'cursor-pointer',
84
84
  !node.disabled && isSelected
85
- ? 'bg-primary/[0.10]'
85
+ ? 'bg-primary/10'
86
86
  : !node.disabled
87
- ? 'hover:bg-on-surface/[0.04]'
87
+ ? 'hover:bg-on-surface/4'
88
88
  : '',
89
89
  ]"
90
90
  @click="onRowClick"
@@ -13,6 +13,8 @@ export interface Toast {
13
13
  variant: ToastVariant
14
14
  duration: number
15
15
  action?: ToastAction
16
+ icon?: string
17
+ color?: string
16
18
  }
17
19
 
18
20
  let nextId = 1
@@ -24,27 +26,30 @@ function dismiss(id: number) {
24
26
  toasts.value = toasts.value.filter((t) => t.id !== id)
25
27
  }
26
28
 
29
+ export interface ToastOptions {
30
+ duration?: number
31
+ action?: ToastAction
32
+ icon?: string
33
+ color?: string
34
+ }
35
+
27
36
  function show(
28
37
  message: string,
29
38
  variant: ToastVariant = 'info',
30
- options: number | { duration?: number; action?: ToastAction } = {},
39
+ options: number | ToastOptions = {},
31
40
  ) {
32
41
  const id = nextId++
33
42
  const opts = typeof options === 'number' ? { duration: options } : options
34
43
  const duration = opts.duration ?? (variant === 'error' ? 6000 : 4000)
35
- toasts.value.push({ id, message, variant, duration, action: opts.action })
44
+ toasts.value.push({ id, message, variant, duration, action: opts.action, icon: opts.icon, color: opts.color })
36
45
  if (duration > 0) setTimeout(() => dismiss(id), duration)
37
46
  return id
38
47
  }
39
48
 
40
- const success = (msg: string, opts?: { duration?: number; action?: ToastAction }) =>
41
- show(msg, 'success', opts ?? {})
42
- const error = (msg: string, opts?: { duration?: number; action?: ToastAction }) =>
43
- show(msg, 'error', opts ?? {})
44
- const warning = (msg: string, opts?: { duration?: number; action?: ToastAction }) =>
45
- show(msg, 'warning', opts ?? {})
46
- const info = (msg: string, opts?: { duration?: number; action?: ToastAction }) =>
47
- show(msg, 'info', opts ?? {})
49
+ const success = (msg: string, opts?: ToastOptions) => show(msg, 'success', opts ?? {})
50
+ const error = (msg: string, opts?: ToastOptions) => show(msg, 'error', opts ?? {})
51
+ const warning = (msg: string, opts?: ToastOptions) => show(msg, 'warning', opts ?? {})
52
+ const info = (msg: string, opts?: ToastOptions) => show(msg, 'info', opts ?? {})
48
53
 
49
54
  export function useToast() {
50
55
  return { toasts, position, show, success, error, warning, info, dismiss }