@m3ui-vue/m3ui-vue 0.2.7 → 0.3.1
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.
- package/dist/{MMenuItem-DpoEsH91.js → MMenuItem-C6RwHl-l.js} +14 -14
- package/dist/{MMenuItem-DpoEsH91.js.map → MMenuItem-C6RwHl-l.js.map} +1 -1
- package/dist/components/MAutocomplete.vue.d.ts +29 -0
- package/dist/components/MChatBubble.vue.d.ts +32 -0
- package/dist/components/MMultiAutocomplete.vue.d.ts +33 -0
- package/dist/components/MMultiSelect.vue.d.ts +5 -3
- package/dist/components/MNavigationDrawer.vue.d.ts +1 -1
- package/dist/components/MSlider.vue.d.ts +1 -1
- package/dist/components/MTagInput.vue.d.ts +29 -0
- package/dist/components/MTextField.vue.d.ts +1 -1
- package/dist/components/MWindow.vue.d.ts +55 -0
- package/dist/index.d.ts +5 -0
- package/dist/m3ui-vue.css +1 -1
- package/dist/m3ui.js +1975 -973
- package/dist/m3ui.js.map +1 -1
- package/dist/rich-text-editor.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/MAppBar.vue +17 -13
- package/src/components/MAutocomplete.vue +373 -0
- package/src/components/MChatBubble.vue +98 -0
- package/src/components/MMaskField.vue +2 -3
- package/src/components/MMultiAutocomplete.vue +446 -0
- package/src/components/MMultiSelect.vue +38 -9
- package/src/components/MNumberField.vue +2 -2
- package/src/components/MSelect.vue +4 -4
- package/src/components/MTagInput.vue +223 -0
- package/src/components/MTextField.vue +3 -4
- package/src/components/MWindow.vue +330 -0
- package/src/index.ts +5 -0
package/dist/rich-text-editor.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as e, i as t, n, o as r, r as i, t as a } from "./MMenuItem-
|
|
1
|
+
import { d as e, i as t, n, o as r, r as i, t as a } from "./MMenuItem-C6RwHl-l.js";
|
|
2
2
|
import { t as o } from "./MIcon-CaEooCmZ.js";
|
|
3
3
|
import { t as s } from "./_plugin-vue_export-helper-B3ysoDQm.js";
|
|
4
4
|
import { Fragment as c, computed as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, normalizeClass as g, normalizeStyle as _, onBeforeUnmount as v, onMounted as y, openBlock as b, ref as x, renderList as S, shallowRef as C, toDisplayString as w, watch as T, withCtx as E, withKeys as D } from "vue";
|
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)}@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}}.m3-dialog-enter-active[data-v-4ccfbc3c],.m3-dialog-leave-active[data-v-4ccfbc3c]{transition:opacity .15s}.m3-dialog-enter-from[data-v-4ccfbc3c],.m3-dialog-leave-to[data-v-4ccfbc3c]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-4ccfbc3c],.m3-dialog-leave-active .dialog-box[data-v-4ccfbc3c]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-4ccfbc3c],.m3-dialog-leave-to .dialog-box[data-v-4ccfbc3c]{transform:scale(.95)}.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}.m3-carousel-right-enter-active,.m3-carousel-right-leave-active,.m3-carousel-left-enter-active,.m3-carousel-left-leave-active{transition:transform .5s cubic-bezier(.2,0,0,1),opacity .5s cubic-bezier(.2,0,0,1)}.m3-carousel-right-enter-from{opacity:0;transform:translate(100%)}.m3-carousel-right-leave-to,.m3-carousel-left-enter-from{opacity:0;transform:translate(-100%)}.m3-carousel-left-leave-to{opacity:0;transform:translate(100%)}.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-4d6cca63],.m3-cmd-leave-active[data-v-4d6cca63]{transition:opacity .15s}.m3-cmd-enter-from[data-v-4d6cca63],.m3-cmd-leave-to[data-v-4d6cca63]{opacity:0}.m3-cmd-enter-active .cmd-box[data-v-4d6cca63],.m3-cmd-leave-active .cmd-box[data-v-4d6cca63]{transition:transform .15s}.m3-cmd-enter-from .cmd-box[data-v-4d6cca63],.m3-cmd-leave-to .cmd-box[data-v-4d6cca63]{transform:scale(.95)translateY(-10px)}.dt-expand-grid[data-v-857139c7]{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-857139c7]{grid-template-rows:1fr}.dt-expand-body[data-v-857139c7]{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-6b150427],.m3-file-leave-active[data-v-6b150427]{transition:all .2s}.m3-file-enter-from[data-v-6b150427],.m3-file-leave-to[data-v-6b150427]{opacity:0;transform:translateY(-8px)}.mli-expand-grid{grid-template-rows:1fr;display:grid}.mli-expand-body{min-height:0;padding-left:2rem;overflow:hidden}.mli-expand-enter-active{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1)}.mli-expand-enter-active>.mli-expand-body{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.mli-expand-enter-from{grid-template-rows:0fr}.mli-expand-enter-from>.mli-expand-body{opacity:0}.mli-expand-leave-active{transition:grid-template-rows .25s cubic-bezier(.4,0,1,1)}.mli-expand-leave-active>.mli-expand-body{transition:opacity .12s cubic-bezier(.4,0,1,1)}.mli-expand-leave-to{grid-template-rows:0fr}.mli-expand-leave-to>.mli-expand-body{opacity:0}input[type=number][data-v-9068433a]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-9068433a]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-9068433a]{-moz-appearance:textfield}.nd-scrim[data-v-ec337590]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-ec337590],.nd-leave-to .nd-scrim[data-v-ec337590]{opacity:0}.nd-panel[data-v-ec337590]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel-left[data-v-ec337590],.nd-leave-to .nd-panel-left[data-v-ec337590]{transform:translate(-100%)}.nd-enter-from .nd-panel-right[data-v-ec337590],.nd-leave-to .nd-panel-right[data-v-ec337590]{transform:translate(100%)}.nd-enter-from .nd-panel-top[data-v-ec337590],.nd-leave-to .nd-panel-top[data-v-ec337590]{transform:translateY(-100%)}.nd-enter-from .nd-panel-bottom[data-v-ec337590],.nd-leave-to .nd-panel-bottom[data-v-ec337590]{transform:translateY(100%)}.nd-section-grid[data-v-ec337590]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-ec337590]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-ec337590]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-ec337590]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-ec337590]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-ec337590]{opacity:0}.nd-section-leave-active[data-v-ec337590]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-ec337590]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-ec337590]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-ec337590]{opacity:0}.nd-inline[data-v-ec337590]{transition:width .3s cubic-bezier(.2,0,0,1);overflow:hidden}.nd-inline[data-v-ec337590]>*{min-width:var(--nd-width,18rem)}.nd-inline.nd-collapsed[data-v-ec337590]>*{min-width:0}.nd-toggle[data-v-ec337590]{align-items:center;display:flex}.nd-toggle-inner[data-v-ec337590]{flex-shrink:0;justify-content:center;align-items:center;width:72px;height:64px;display:flex}.nd-label[data-v-ec337590]{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.nd-inline.nd-collapsed .nd-label[data-v-ec337590],.nd-inline.nd-collapsed[data-v-ec337590] .nd-label{opacity:0;transition:opacity .1s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-ec337590]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-ec337590]{max-height:0}.nd-inline .nd-section-body[data-v-ec337590]>*,.nd-inline[data-v-ec337590] .nd-section-body>*{transition:padding .3s cubic-bezier(.2,0,0,1)}.nd-children-divider[data-v-ec337590]{border-top:1px solid #0000;height:0;margin:0 .75rem;transition:border-color .1s,margin .1s}.nd-inline.nd-collapsed .nd-children-divider[data-v-ec337590]{border-top-color:var(--color-outline-variant);margin:.25rem .75rem;transition:border-color .2s .3s,margin .2s .3s}@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-64ce9e7c]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-64ce9e7c]{min-height:0}.m3-toast-bot-enter-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-64ce9e7c{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.m3-spot-enter-active[data-v-1fa0da82],.m3-spot-leave-active[data-v-1fa0da82]{transition:opacity .15s}.m3-spot-enter-from[data-v-1fa0da82],.m3-spot-leave-to[data-v-1fa0da82]{opacity:0}.m3-spot-enter-active .spot-box[data-v-1fa0da82],.m3-spot-leave-active .spot-box[data-v-1fa0da82]{transition:transform .15s,opacity .15s}.m3-spot-enter-from .spot-box[data-v-1fa0da82]{opacity:0;transform:scale(.96)translateY(-8px)}.m3-spot-leave-to .spot-box[data-v-1fa0da82]{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-23db2c2c] 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-23db2c2c] 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-23db2c2c] 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-23db2c2c] 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-23db2c2c] p{margin:.5em 0}.m3-markdown[data-v-23db2c2c] a{color:var(--color-primary);text-underline-offset:2px;text-decoration:underline}.m3-markdown[data-v-23db2c2c] a:hover{opacity:.8}.m3-markdown[data-v-23db2c2c] strong{color:var(--color-on-surface);font-weight:600}.m3-markdown[data-v-23db2c2c] em{font-style:italic}.m3-markdown[data-v-23db2c2c] ul{margin:.5em 0;padding-left:1.5em;list-style-type:disc}.m3-markdown[data-v-23db2c2c] ol{margin:.5em 0;padding-left:1.5em;list-style-type:decimal}.m3-markdown[data-v-23db2c2c] li{margin:.25em 0}.m3-markdown[data-v-23db2c2c] li::marker{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] code{background:var(--color-surface-container-highest);color:var(--color-primary);border-radius:4px;padding:.15em .4em;font-family:Roboto Mono,Fira Code,Consolas,monospace;font-size:.875em}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] pre code{color:var(--color-on-surface);background:0 0;padding:0;font-size:.8125rem;line-height:1.6}.m3-markdown[data-v-23db2c2c] .hljs-keyword,.m3-markdown[data-v-23db2c2c] .hljs-selector-tag,.m3-markdown[data-v-23db2c2c] .hljs-built_in,.m3-markdown[data-v-23db2c2c] .hljs-tag .hljs-keyword{color:var(--color-primary)}.m3-markdown[data-v-23db2c2c] .hljs-string,.m3-markdown[data-v-23db2c2c] .hljs-regexp,.m3-markdown[data-v-23db2c2c] .hljs-template-variable{color:var(--color-tertiary)}.m3-markdown[data-v-23db2c2c] .hljs-number,.m3-markdown[data-v-23db2c2c] .hljs-literal{color:var(--color-error)}.m3-markdown[data-v-23db2c2c] .hljs-title.function_,.m3-markdown[data-v-23db2c2c] .hljs-title.function_>.hljs-keyword{color:var(--color-secondary);font-weight:500}.m3-markdown[data-v-23db2c2c] .hljs-type,.m3-markdown[data-v-23db2c2c] .hljs-title.class_{color:var(--color-primary);font-style:italic}.m3-markdown[data-v-23db2c2c] .hljs-comment,.m3-markdown[data-v-23db2c2c] .hljs-quote{color:var(--color-outline);font-style:italic}.m3-markdown[data-v-23db2c2c] .hljs-attr,.m3-markdown[data-v-23db2c2c] .hljs-attribute{color:var(--color-tertiary)}.m3-markdown[data-v-23db2c2c] .hljs-tag{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] .hljs-name{color:var(--color-primary)}.m3-markdown[data-v-23db2c2c] .hljs-punctuation,.m3-markdown[data-v-23db2c2c] .hljs-operator,.m3-markdown[data-v-23db2c2c] .hljs-meta,.m3-markdown[data-v-23db2c2c] .hljs-meta .hljs-keyword{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] .hljs-variable,.m3-markdown[data-v-23db2c2c] .hljs-property,.m3-markdown[data-v-23db2c2c] .hljs-symbol,.m3-markdown[data-v-23db2c2c] .hljs-params{color:var(--color-on-surface)}.m3-markdown[data-v-23db2c2c] .m3-code-block{position:relative}.m3-markdown[data-v-23db2c2c] .m3-code-copy{background:var(--color-surface-container);width:28px;height:28px;color:var(--color-on-surface-variant);cursor:pointer;opacity:0;z-index:1;border:none;border-radius:6px;justify-content:center;align-items:center;transition:opacity .15s;display:flex;position:absolute;top:8px;right:8px}.m3-markdown[data-v-23db2c2c] .m3-code-block:hover .m3-code-copy{opacity:1}.m3-markdown[data-v-23db2c2c] .m3-code-copy:hover{background:var(--color-surface-container-high);color:var(--color-on-surface)}.m3-markdown[data-v-23db2c2c] .m3-code-line{display:block}.m3-markdown[data-v-23db2c2c] .m3-line-hl{background:color-mix(in srgb, var(--color-primary) 8%, transparent);border-left:2px solid color-mix(in srgb, var(--color-primary) 40%, transparent);margin:0 -1em;padding:0 1em 0 calc(1em - 2px)}.m3-markdown[data-v-23db2c2c] hr{border:none;border-top:1px solid var(--color-outline-variant);margin:1.5em 0}.m3-markdown[data-v-23db2c2c] table{border-collapse:collapse;width:100%;margin:.75em 0}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] td{border-bottom:1px solid var(--color-outline-variant);padding:.5em .75em}.m3-markdown[data-v-23db2c2c] img{border-radius:12px;max-width:100%;height:auto;margin:.5em 0}.rte-content[data-v-e6829e5c] .tiptap{min-height:inherit;outline:none}.rte-content[data-v-e6829e5c] .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-e6829e5c] 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-e6829e5c] 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-e6829e5c] 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-e6829e5c] p{margin:.5em 0}.rte-content[data-v-e6829e5c] ul{margin:.5em 0;padding-left:1.5em;list-style-type:disc}.rte-content[data-v-e6829e5c] ol{margin:.5em 0;padding-left:1.5em;list-style-type:decimal}.rte-content[data-v-e6829e5c] blockquote{border-left:3px solid var(--color-primary);color:var(--color-on-surface-variant);margin:.5em 0;padding-left:1em}.rte-content[data-v-e6829e5c] code{background:var(--color-surface-container-highest);border-radius:4px;padding:.15em .4em;font-size:.875em}.rte-content[data-v-e6829e5c] pre{background:var(--color-surface-container-highest);border-radius:8px;margin:.5em 0;padding:1em;overflow-x:auto}.rte-content[data-v-e6829e5c] pre code{background:0 0;padding:0}.rte-content[data-v-e6829e5c] a{color:var(--color-primary);text-decoration:underline}.rte-content[data-v-e6829e5c] mark{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px;padding:.1em .2em}.rte-content[data-v-e6829e5c] 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)}@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}}.m3-dialog-enter-active[data-v-4ccfbc3c],.m3-dialog-leave-active[data-v-4ccfbc3c]{transition:opacity .15s}.m3-dialog-enter-from[data-v-4ccfbc3c],.m3-dialog-leave-to[data-v-4ccfbc3c]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-4ccfbc3c],.m3-dialog-leave-active .dialog-box[data-v-4ccfbc3c]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-4ccfbc3c],.m3-dialog-leave-to .dialog-box[data-v-4ccfbc3c]{transform:scale(.95)}.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}.m3-carousel-right-enter-active,.m3-carousel-right-leave-active,.m3-carousel-left-enter-active,.m3-carousel-left-leave-active{transition:transform .5s cubic-bezier(.2,0,0,1),opacity .5s cubic-bezier(.2,0,0,1)}.m3-carousel-right-enter-from{opacity:0;transform:translate(100%)}.m3-carousel-right-leave-to,.m3-carousel-left-enter-from{opacity:0;transform:translate(-100%)}.m3-carousel-left-leave-to{opacity:0;transform:translate(100%)}.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-4d6cca63],.m3-cmd-leave-active[data-v-4d6cca63]{transition:opacity .15s}.m3-cmd-enter-from[data-v-4d6cca63],.m3-cmd-leave-to[data-v-4d6cca63]{opacity:0}.m3-cmd-enter-active .cmd-box[data-v-4d6cca63],.m3-cmd-leave-active .cmd-box[data-v-4d6cca63]{transition:transform .15s}.m3-cmd-enter-from .cmd-box[data-v-4d6cca63],.m3-cmd-leave-to .cmd-box[data-v-4d6cca63]{transform:scale(.95)translateY(-10px)}.dt-expand-grid[data-v-857139c7]{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-857139c7]{grid-template-rows:1fr}.dt-expand-body[data-v-857139c7]{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-6b150427],.m3-file-leave-active[data-v-6b150427]{transition:all .2s}.m3-file-enter-from[data-v-6b150427],.m3-file-leave-to[data-v-6b150427]{opacity:0;transform:translateY(-8px)}.mli-expand-grid{grid-template-rows:1fr;display:grid}.mli-expand-body{min-height:0;padding-left:2rem;overflow:hidden}.mli-expand-enter-active{transition:grid-template-rows .3s cubic-bezier(.2,0,0,1)}.mli-expand-enter-active>.mli-expand-body{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.mli-expand-enter-from{grid-template-rows:0fr}.mli-expand-enter-from>.mli-expand-body{opacity:0}.mli-expand-leave-active{transition:grid-template-rows .25s cubic-bezier(.4,0,1,1)}.mli-expand-leave-active>.mli-expand-body{transition:opacity .12s cubic-bezier(.4,0,1,1)}.mli-expand-leave-to{grid-template-rows:0fr}.mli-expand-leave-to>.mli-expand-body{opacity:0}input[type=number][data-v-8b2327d2]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-8b2327d2]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-8b2327d2]{-moz-appearance:textfield}.nd-scrim[data-v-ec337590]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-ec337590],.nd-leave-to .nd-scrim[data-v-ec337590]{opacity:0}.nd-panel[data-v-ec337590]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel-left[data-v-ec337590],.nd-leave-to .nd-panel-left[data-v-ec337590]{transform:translate(-100%)}.nd-enter-from .nd-panel-right[data-v-ec337590],.nd-leave-to .nd-panel-right[data-v-ec337590]{transform:translate(100%)}.nd-enter-from .nd-panel-top[data-v-ec337590],.nd-leave-to .nd-panel-top[data-v-ec337590]{transform:translateY(-100%)}.nd-enter-from .nd-panel-bottom[data-v-ec337590],.nd-leave-to .nd-panel-bottom[data-v-ec337590]{transform:translateY(100%)}.nd-section-grid[data-v-ec337590]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-ec337590]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-ec337590]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-ec337590]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-ec337590]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-ec337590]{opacity:0}.nd-section-leave-active[data-v-ec337590]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-ec337590]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-ec337590]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-ec337590]{opacity:0}.nd-inline[data-v-ec337590]{transition:width .3s cubic-bezier(.2,0,0,1);overflow:hidden}.nd-inline[data-v-ec337590]>*{min-width:var(--nd-width,18rem)}.nd-inline.nd-collapsed[data-v-ec337590]>*{min-width:0}.nd-toggle[data-v-ec337590]{align-items:center;display:flex}.nd-toggle-inner[data-v-ec337590]{flex-shrink:0;justify-content:center;align-items:center;width:72px;height:64px;display:flex}.nd-label[data-v-ec337590]{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.nd-inline.nd-collapsed .nd-label[data-v-ec337590],.nd-inline.nd-collapsed[data-v-ec337590] .nd-label{opacity:0;transition:opacity .1s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-ec337590]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-ec337590]{max-height:0}.nd-inline .nd-section-body[data-v-ec337590]>*,.nd-inline[data-v-ec337590] .nd-section-body>*{transition:padding .3s cubic-bezier(.2,0,0,1)}.nd-children-divider[data-v-ec337590]{border-top:1px solid #0000;height:0;margin:0 .75rem;transition:border-color .1s,margin .1s}.nd-inline.nd-collapsed .nd-children-divider[data-v-ec337590]{border-top-color:var(--color-outline-variant);margin:.25rem .75rem;transition:border-color .2s .3s,margin .2s .3s}@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-64ce9e7c]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-64ce9e7c]{min-height:0}.m3-toast-bot-enter-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-64ce9e7c]{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-64ce9e7c]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-64ce9e7c]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-64ce9e7c]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-64ce9e7c{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.m3-spot-enter-active[data-v-1fa0da82],.m3-spot-leave-active[data-v-1fa0da82]{transition:opacity .15s}.m3-spot-enter-from[data-v-1fa0da82],.m3-spot-leave-to[data-v-1fa0da82]{opacity:0}.m3-spot-enter-active .spot-box[data-v-1fa0da82],.m3-spot-leave-active .spot-box[data-v-1fa0da82]{transition:transform .15s,opacity .15s}.m3-spot-enter-from .spot-box[data-v-1fa0da82]{opacity:0;transform:scale(.96)translateY(-8px)}.m3-spot-leave-to .spot-box[data-v-1fa0da82]{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-23db2c2c] 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-23db2c2c] 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-23db2c2c] 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-23db2c2c] 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-23db2c2c] p{margin:.5em 0}.m3-markdown[data-v-23db2c2c] a{color:var(--color-primary);text-underline-offset:2px;text-decoration:underline}.m3-markdown[data-v-23db2c2c] a:hover{opacity:.8}.m3-markdown[data-v-23db2c2c] strong{color:var(--color-on-surface);font-weight:600}.m3-markdown[data-v-23db2c2c] em{font-style:italic}.m3-markdown[data-v-23db2c2c] ul{margin:.5em 0;padding-left:1.5em;list-style-type:disc}.m3-markdown[data-v-23db2c2c] ol{margin:.5em 0;padding-left:1.5em;list-style-type:decimal}.m3-markdown[data-v-23db2c2c] li{margin:.25em 0}.m3-markdown[data-v-23db2c2c] li::marker{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] code{background:var(--color-surface-container-highest);color:var(--color-primary);border-radius:4px;padding:.15em .4em;font-family:Roboto Mono,Fira Code,Consolas,monospace;font-size:.875em}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] pre code{color:var(--color-on-surface);background:0 0;padding:0;font-size:.8125rem;line-height:1.6}.m3-markdown[data-v-23db2c2c] .hljs-keyword,.m3-markdown[data-v-23db2c2c] .hljs-selector-tag,.m3-markdown[data-v-23db2c2c] .hljs-built_in,.m3-markdown[data-v-23db2c2c] .hljs-tag .hljs-keyword{color:var(--color-primary)}.m3-markdown[data-v-23db2c2c] .hljs-string,.m3-markdown[data-v-23db2c2c] .hljs-regexp,.m3-markdown[data-v-23db2c2c] .hljs-template-variable{color:var(--color-tertiary)}.m3-markdown[data-v-23db2c2c] .hljs-number,.m3-markdown[data-v-23db2c2c] .hljs-literal{color:var(--color-error)}.m3-markdown[data-v-23db2c2c] .hljs-title.function_,.m3-markdown[data-v-23db2c2c] .hljs-title.function_>.hljs-keyword{color:var(--color-secondary);font-weight:500}.m3-markdown[data-v-23db2c2c] .hljs-type,.m3-markdown[data-v-23db2c2c] .hljs-title.class_{color:var(--color-primary);font-style:italic}.m3-markdown[data-v-23db2c2c] .hljs-comment,.m3-markdown[data-v-23db2c2c] .hljs-quote{color:var(--color-outline);font-style:italic}.m3-markdown[data-v-23db2c2c] .hljs-attr,.m3-markdown[data-v-23db2c2c] .hljs-attribute{color:var(--color-tertiary)}.m3-markdown[data-v-23db2c2c] .hljs-tag{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] .hljs-name{color:var(--color-primary)}.m3-markdown[data-v-23db2c2c] .hljs-punctuation,.m3-markdown[data-v-23db2c2c] .hljs-operator,.m3-markdown[data-v-23db2c2c] .hljs-meta,.m3-markdown[data-v-23db2c2c] .hljs-meta .hljs-keyword{color:var(--color-on-surface-variant)}.m3-markdown[data-v-23db2c2c] .hljs-variable,.m3-markdown[data-v-23db2c2c] .hljs-property,.m3-markdown[data-v-23db2c2c] .hljs-symbol,.m3-markdown[data-v-23db2c2c] .hljs-params{color:var(--color-on-surface)}.m3-markdown[data-v-23db2c2c] .m3-code-block{position:relative}.m3-markdown[data-v-23db2c2c] .m3-code-copy{background:var(--color-surface-container);width:28px;height:28px;color:var(--color-on-surface-variant);cursor:pointer;opacity:0;z-index:1;border:none;border-radius:6px;justify-content:center;align-items:center;transition:opacity .15s;display:flex;position:absolute;top:8px;right:8px}.m3-markdown[data-v-23db2c2c] .m3-code-block:hover .m3-code-copy{opacity:1}.m3-markdown[data-v-23db2c2c] .m3-code-copy:hover{background:var(--color-surface-container-high);color:var(--color-on-surface)}.m3-markdown[data-v-23db2c2c] .m3-code-line{display:block}.m3-markdown[data-v-23db2c2c] .m3-line-hl{background:color-mix(in srgb, var(--color-primary) 8%, transparent);border-left:2px solid color-mix(in srgb, var(--color-primary) 40%, transparent);margin:0 -1em;padding:0 1em 0 calc(1em - 2px)}.m3-markdown[data-v-23db2c2c] hr{border:none;border-top:1px solid var(--color-outline-variant);margin:1.5em 0}.m3-markdown[data-v-23db2c2c] table{border-collapse:collapse;width:100%;margin:.75em 0}.m3-markdown[data-v-23db2c2c] 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-23db2c2c] td{border-bottom:1px solid var(--color-outline-variant);padding:.5em .75em}.m3-markdown[data-v-23db2c2c] img{border-radius:12px;max-width:100%;height:auto;margin:.5em 0}.rte-content[data-v-e6829e5c] .tiptap{min-height:inherit;outline:none}.rte-content[data-v-e6829e5c] .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-e6829e5c] 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-e6829e5c] 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-e6829e5c] 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-e6829e5c] p{margin:.5em 0}.rte-content[data-v-e6829e5c] ul{margin:.5em 0;padding-left:1.5em;list-style-type:disc}.rte-content[data-v-e6829e5c] ol{margin:.5em 0;padding-left:1.5em;list-style-type:decimal}.rte-content[data-v-e6829e5c] blockquote{border-left:3px solid var(--color-primary);color:var(--color-on-surface-variant);margin:.5em 0;padding-left:1em}.rte-content[data-v-e6829e5c] code{background:var(--color-surface-container-highest);border-radius:4px;padding:.15em .4em;font-size:.875em}.rte-content[data-v-e6829e5c] pre{background:var(--color-surface-container-highest);border-radius:8px;margin:.5em 0;padding:1em;overflow-x:auto}.rte-content[data-v-e6829e5c] pre code{background:0 0;padding:0}.rte-content[data-v-e6829e5c] a{color:var(--color-primary);text-decoration:underline}.rte-content[data-v-e6829e5c] mark{background:var(--color-tertiary-container);color:var(--color-on-tertiary-container);border-radius:2px;padding:.1em .2em}.rte-content[data-v-e6829e5c] img{border-radius:8px;max-width:100%;height:auto;margin:.5em 0}
|
|
2
2
|
/*$vite$:1*/
|
package/package.json
CHANGED
|
@@ -16,27 +16,31 @@ const colorMap: Record<string, string> = {
|
|
|
16
16
|
|
|
17
17
|
<template>
|
|
18
18
|
<div
|
|
19
|
-
class="
|
|
19
|
+
class="w-full transition-shadow"
|
|
20
20
|
:class="[
|
|
21
21
|
colorMap[color],
|
|
22
22
|
elevated ? 'shadow-elevation-2' : '',
|
|
23
23
|
bordered ? 'border-b border-outline-variant' : '',
|
|
24
|
-
dense ? 'h-12' : 'h-16',
|
|
25
24
|
]"
|
|
26
25
|
>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
<div
|
|
27
|
+
class="flex items-center gap-2 px-4"
|
|
28
|
+
:class="dense ? 'h-12' : 'h-16'"
|
|
29
|
+
>
|
|
30
|
+
<!-- Leading -->
|
|
31
|
+
<div v-if="$slots.leading" class="flex shrink-0 items-center">
|
|
32
|
+
<slot name="leading" />
|
|
33
|
+
</div>
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
<!-- Content -->
|
|
36
|
+
<div class="flex flex-1 items-center overflow-hidden">
|
|
37
|
+
<slot />
|
|
38
|
+
</div>
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
<!-- Trailing -->
|
|
41
|
+
<div v-if="$slots.trailing" class="flex shrink-0 items-center gap-1">
|
|
42
|
+
<slot name="trailing" />
|
|
43
|
+
</div>
|
|
40
44
|
</div>
|
|
41
45
|
</div>
|
|
42
46
|
</template>
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, ref, useId, onMounted, onUnmounted, watch, nextTick } from 'vue'
|
|
3
|
+
import MIcon from './MIcon.vue'
|
|
4
|
+
import { useFieldBg } from '../composables/useFieldBg'
|
|
5
|
+
import { useLocale } from '../composables/useLocale'
|
|
6
|
+
import type { SelectOption } from './MSelect.vue'
|
|
7
|
+
|
|
8
|
+
const props = withDefaults(
|
|
9
|
+
defineProps<{
|
|
10
|
+
modelValue: unknown
|
|
11
|
+
options: SelectOption[]
|
|
12
|
+
label?: string
|
|
13
|
+
placeholder?: string
|
|
14
|
+
variant?: 'filled' | 'outlined'
|
|
15
|
+
disabled?: boolean
|
|
16
|
+
error?: string
|
|
17
|
+
hint?: string
|
|
18
|
+
required?: boolean
|
|
19
|
+
leadingIcon?: string
|
|
20
|
+
clearable?: boolean
|
|
21
|
+
fieldBg?: string
|
|
22
|
+
noResultsText?: string
|
|
23
|
+
}>(),
|
|
24
|
+
{
|
|
25
|
+
modelValue: undefined,
|
|
26
|
+
variant: 'filled',
|
|
27
|
+
disabled: false,
|
|
28
|
+
required: false,
|
|
29
|
+
clearable: false,
|
|
30
|
+
},
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
const emit = defineEmits<{ 'update:modelValue': [unknown] }>()
|
|
34
|
+
|
|
35
|
+
const locale = useLocale()
|
|
36
|
+
const id = useId()
|
|
37
|
+
const open = ref(false)
|
|
38
|
+
const search = ref('')
|
|
39
|
+
const highlightIndex = ref(-1)
|
|
40
|
+
const fieldEl = ref<HTMLElement | null>(null)
|
|
41
|
+
const inputEl = ref<HTMLInputElement | null>(null)
|
|
42
|
+
const { resolvedFieldBg } = useFieldBg(fieldEl, () => props.fieldBg)
|
|
43
|
+
const dropdownEl = ref<HTMLElement | null>(null)
|
|
44
|
+
const dropPos = ref({ top: '0px', left: '0px', width: '0px' })
|
|
45
|
+
|
|
46
|
+
function eq(a: unknown, b: unknown): boolean {
|
|
47
|
+
if (a === b) return true
|
|
48
|
+
if (typeof a !== 'object' || typeof b !== 'object' || a == null || b == null) return false
|
|
49
|
+
return JSON.stringify(a) === JSON.stringify(b)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const hasValue = computed(() => props.modelValue != null && props.modelValue !== '')
|
|
53
|
+
const selectedLabel = computed(
|
|
54
|
+
() => props.options.find((o) => eq(o.value, props.modelValue))?.label ?? '',
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
const filteredOptions = computed(() => {
|
|
58
|
+
if (!search.value) return props.options
|
|
59
|
+
const q = search.value.toLowerCase()
|
|
60
|
+
return props.options.filter((o) => o.label.toLowerCase().includes(q))
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const resolvedNoResultsText = computed(() => props.noResultsText ?? locale.noResults)
|
|
64
|
+
|
|
65
|
+
function computeDropPos() {
|
|
66
|
+
if (!fieldEl.value) return
|
|
67
|
+
const rect = fieldEl.value.getBoundingClientRect()
|
|
68
|
+
const spaceBelow = window.innerHeight - rect.bottom - 8
|
|
69
|
+
const dropH = Math.min(240, filteredOptions.value.length * 52 + 8)
|
|
70
|
+
const openAbove = spaceBelow < dropH && rect.top > dropH
|
|
71
|
+
dropPos.value = {
|
|
72
|
+
top: openAbove ? `${rect.top - 4 - dropH}px` : `${rect.bottom + 4}px`,
|
|
73
|
+
left: `${rect.left}px`,
|
|
74
|
+
width: `${rect.width}px`,
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function openDropdown() {
|
|
79
|
+
if (props.disabled || open.value) return
|
|
80
|
+
computeDropPos()
|
|
81
|
+
open.value = true
|
|
82
|
+
highlightIndex.value = -1
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function closeDropdown() {
|
|
86
|
+
open.value = false
|
|
87
|
+
search.value = ''
|
|
88
|
+
highlightIndex.value = -1
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function select(opt: SelectOption) {
|
|
92
|
+
if (opt.disabled) return
|
|
93
|
+
emit('update:modelValue', opt.value)
|
|
94
|
+
closeDropdown()
|
|
95
|
+
nextTick(() => inputEl.value?.blur())
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function onInputFocus() {
|
|
99
|
+
search.value = ''
|
|
100
|
+
openDropdown()
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function onInputBlur(e: FocusEvent) {
|
|
104
|
+
const related = e.relatedTarget as Node | null
|
|
105
|
+
if (dropdownEl.value?.contains(related) || fieldEl.value?.contains(related)) return
|
|
106
|
+
closeDropdown()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function onInput(e: Event) {
|
|
110
|
+
search.value = (e.target as HTMLInputElement).value
|
|
111
|
+
if (!open.value) openDropdown()
|
|
112
|
+
highlightIndex.value = -1
|
|
113
|
+
nextTick(computeDropPos)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function onOutsideClick(e: MouseEvent) {
|
|
117
|
+
const t = e.target as Node
|
|
118
|
+
if (!fieldEl.value?.contains(t) && !dropdownEl.value?.contains(t)) closeDropdown()
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function onScroll(e: Event) {
|
|
122
|
+
if (!open.value) return
|
|
123
|
+
// Scrolling inside the dropdown list itself -- do nothing
|
|
124
|
+
if (dropdownEl.value?.contains(e.target as Node)) return
|
|
125
|
+
// Recompute position to track the trigger element as the page scrolls
|
|
126
|
+
if (!fieldEl.value) return
|
|
127
|
+
const rect = fieldEl.value.getBoundingClientRect()
|
|
128
|
+
// Only close if the trigger has scrolled completely out of the viewport
|
|
129
|
+
if (rect.bottom < 0 || rect.top > window.innerHeight) {
|
|
130
|
+
closeDropdown()
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
computeDropPos()
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function onKeydown(e: KeyboardEvent) {
|
|
137
|
+
if (e.key === 'Escape') {
|
|
138
|
+
closeDropdown()
|
|
139
|
+
inputEl.value?.blur()
|
|
140
|
+
return
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (!open.value) {
|
|
144
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
145
|
+
e.preventDefault()
|
|
146
|
+
openDropdown()
|
|
147
|
+
return
|
|
148
|
+
}
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const opts = filteredOptions.value.filter((o) => !o.disabled)
|
|
153
|
+
if (e.key === 'ArrowDown') {
|
|
154
|
+
e.preventDefault()
|
|
155
|
+
highlightIndex.value = highlightIndex.value < opts.length - 1 ? highlightIndex.value + 1 : 0
|
|
156
|
+
scrollToHighlighted()
|
|
157
|
+
} else if (e.key === 'ArrowUp') {
|
|
158
|
+
e.preventDefault()
|
|
159
|
+
highlightIndex.value = highlightIndex.value > 0 ? highlightIndex.value - 1 : opts.length - 1
|
|
160
|
+
scrollToHighlighted()
|
|
161
|
+
} else if (e.key === 'Enter') {
|
|
162
|
+
e.preventDefault()
|
|
163
|
+
const idx = highlightIndex.value >= 0 ? highlightIndex.value : 0
|
|
164
|
+
const target = opts[idx]
|
|
165
|
+
if (target) {
|
|
166
|
+
select(target)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function scrollToHighlighted() {
|
|
172
|
+
nextTick(() => {
|
|
173
|
+
if (!dropdownEl.value) return
|
|
174
|
+
const items = dropdownEl.value.querySelectorAll('[data-option]')
|
|
175
|
+
const item = items[highlightIndex.value] as HTMLElement | undefined
|
|
176
|
+
item?.scrollIntoView({ block: 'nearest' })
|
|
177
|
+
})
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Map highlight index to the full filteredOptions index (skipping disabled)
|
|
181
|
+
function getEnabledIndex(opt: SelectOption): number {
|
|
182
|
+
return filteredOptions.value.filter((o) => !o.disabled).indexOf(opt)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
onMounted(() => {
|
|
186
|
+
document.addEventListener('mousedown', onOutsideClick)
|
|
187
|
+
window.addEventListener('scroll', onScroll, true)
|
|
188
|
+
})
|
|
189
|
+
onUnmounted(() => {
|
|
190
|
+
document.removeEventListener('mousedown', onOutsideClick)
|
|
191
|
+
window.removeEventListener('scroll', onScroll, true)
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
// Recompute dropdown position when filtered options change while open
|
|
195
|
+
watch(filteredOptions, () => {
|
|
196
|
+
if (open.value) nextTick(computeDropPos)
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
const displayValue = computed(() => {
|
|
200
|
+
if (open.value) return search.value
|
|
201
|
+
return selectedLabel.value
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
const triggerClasses = computed(() => {
|
|
205
|
+
const pl = props.leadingIcon ? 'pl-12' : 'pl-4'
|
|
206
|
+
const base = [
|
|
207
|
+
'flex w-full items-center pr-10 text-body-large transition-[border-color,border-width] duration-150',
|
|
208
|
+
pl,
|
|
209
|
+
]
|
|
210
|
+
|
|
211
|
+
if (props.variant === 'outlined') {
|
|
212
|
+
return [
|
|
213
|
+
...base,
|
|
214
|
+
'h-14 rounded-sm border bg-transparent',
|
|
215
|
+
open.value
|
|
216
|
+
? (props.error ? 'border-2 border-error' : 'border-2 border-primary')
|
|
217
|
+
: (props.error ? 'border-error' : 'border-outline hover:border-on-surface'),
|
|
218
|
+
].join(' ')
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return [
|
|
222
|
+
...base,
|
|
223
|
+
'h-14 rounded-t-sm bg-surface-container-highest border-b pt-6 pb-2',
|
|
224
|
+
open.value
|
|
225
|
+
? (props.error ? 'border-b-2 border-error' : 'border-b-2 border-primary')
|
|
226
|
+
: (props.error ? 'border-error' : 'border-on-surface-variant hover:border-on-surface'),
|
|
227
|
+
].join(' ')
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
const isFloated = computed(() => hasValue.value || open.value)
|
|
231
|
+
|
|
232
|
+
const labelClasses = computed(() => {
|
|
233
|
+
const left = props.leadingIcon
|
|
234
|
+
? (props.variant === 'outlined' ? 'left-11' : 'left-12')
|
|
235
|
+
: (props.variant === 'outlined' ? 'left-3' : 'left-4')
|
|
236
|
+
|
|
237
|
+
const floated = props.variant === 'outlined'
|
|
238
|
+
? '-top-2.5 translate-y-0 text-label-small bg-[var(--field-bg)] px-1 right-auto max-w-[calc(100%-1.5rem)]'
|
|
239
|
+
: 'top-2 translate-y-0 text-label-small'
|
|
240
|
+
|
|
241
|
+
const unFloated = props.variant === 'filled'
|
|
242
|
+
? 'top-[53%] -translate-y-1/2 text-body-large'
|
|
243
|
+
: 'top-1/2 -translate-y-1/2 text-body-large'
|
|
244
|
+
|
|
245
|
+
return [
|
|
246
|
+
'pointer-events-none absolute right-10 truncate transition-all duration-200',
|
|
247
|
+
left,
|
|
248
|
+
isFloated.value ? floated : unFloated,
|
|
249
|
+
open.value
|
|
250
|
+
? (props.error ? 'text-error' : 'text-primary')
|
|
251
|
+
: (props.error ? 'text-error' : 'text-on-surface-variant'),
|
|
252
|
+
].join(' ')
|
|
253
|
+
})
|
|
254
|
+
</script>
|
|
255
|
+
|
|
256
|
+
<template>
|
|
257
|
+
<div class="flex flex-col gap-1">
|
|
258
|
+
<div
|
|
259
|
+
ref="fieldEl"
|
|
260
|
+
class="relative"
|
|
261
|
+
:class="variant === 'outlined' ? 'mt-2' : ''"
|
|
262
|
+
:style="variant === 'outlined' ? { '--field-bg': resolvedFieldBg } : undefined"
|
|
263
|
+
>
|
|
264
|
+
<!-- Leading icon -->
|
|
265
|
+
<div
|
|
266
|
+
v-if="leadingIcon"
|
|
267
|
+
class="pointer-events-none absolute left-3.5 text-on-surface-variant"
|
|
268
|
+
:class="variant === 'filled' ? 'top-5' : 'top-4.5'"
|
|
269
|
+
>
|
|
270
|
+
<MIcon :name="leadingIcon" :size="20" />
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
<!-- Input trigger -->
|
|
274
|
+
<input
|
|
275
|
+
:id="id"
|
|
276
|
+
ref="inputEl"
|
|
277
|
+
type="text"
|
|
278
|
+
:value="displayValue"
|
|
279
|
+
:placeholder="!label ? placeholder : undefined"
|
|
280
|
+
:disabled="disabled"
|
|
281
|
+
autocomplete="off"
|
|
282
|
+
role="combobox"
|
|
283
|
+
:aria-expanded="open"
|
|
284
|
+
:aria-disabled="disabled"
|
|
285
|
+
:class="[
|
|
286
|
+
triggerClasses,
|
|
287
|
+
'outline-none text-on-surface',
|
|
288
|
+
disabled ? 'pointer-events-none opacity-[0.38]' : 'cursor-text',
|
|
289
|
+
]"
|
|
290
|
+
@focus="onInputFocus"
|
|
291
|
+
@blur="onInputBlur"
|
|
292
|
+
@input="onInput"
|
|
293
|
+
@keydown="onKeydown"
|
|
294
|
+
/>
|
|
295
|
+
|
|
296
|
+
<!-- Floating label -->
|
|
297
|
+
<label :for="id" :class="labelClasses">
|
|
298
|
+
{{ label }}<span v-if="required" class="text-error"> *</span>
|
|
299
|
+
</label>
|
|
300
|
+
|
|
301
|
+
<!-- Clear button -->
|
|
302
|
+
<button
|
|
303
|
+
v-if="clearable && hasValue && !disabled"
|
|
304
|
+
type="button"
|
|
305
|
+
class="absolute right-9 top-1/2 -translate-y-1/2 flex h-6 w-6 cursor-pointer items-center justify-center rounded-full text-on-surface-variant transition-colors hover:bg-on-surface/8 hover:text-on-surface"
|
|
306
|
+
@click.stop="emit('update:modelValue', undefined as any); closeDropdown()"
|
|
307
|
+
>
|
|
308
|
+
<MIcon name="close" :size="18" />
|
|
309
|
+
</button>
|
|
310
|
+
|
|
311
|
+
<!-- Arrow icon -->
|
|
312
|
+
<div class="pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 flex h-6 items-center">
|
|
313
|
+
<MIcon
|
|
314
|
+
:name="open ? 'arrow_drop_up' : 'arrow_drop_down'"
|
|
315
|
+
:size="24"
|
|
316
|
+
class="text-on-surface-variant transition-transform duration-200"
|
|
317
|
+
/>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
<p v-if="error" class="px-4 text-body-small text-error">{{ error }}</p>
|
|
322
|
+
<p v-else-if="hint" class="px-4 text-body-small text-on-surface-variant">{{ hint }}</p>
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
<!-- Dropdown teleported to body to escape overflow clipping -->
|
|
326
|
+
<Teleport to="body">
|
|
327
|
+
<Transition
|
|
328
|
+
enter-active-class="transition-[opacity,transform] duration-150"
|
|
329
|
+
enter-from-class="opacity-0 -translate-y-1 scale-[0.98]"
|
|
330
|
+
enter-to-class="opacity-100 translate-y-0 scale-100"
|
|
331
|
+
leave-active-class="transition-[opacity,transform] duration-100"
|
|
332
|
+
leave-from-class="opacity-100 translate-y-0 scale-100"
|
|
333
|
+
leave-to-class="opacity-0 -translate-y-1 scale-[0.98]"
|
|
334
|
+
>
|
|
335
|
+
<div
|
|
336
|
+
v-if="open"
|
|
337
|
+
ref="dropdownEl"
|
|
338
|
+
class="fixed z-500 max-h-60 overflow-auto rounded-sm bg-surface-container py-1 shadow-elevation-2"
|
|
339
|
+
:style="dropPos"
|
|
340
|
+
>
|
|
341
|
+
<div
|
|
342
|
+
v-for="(opt, i) in filteredOptions"
|
|
343
|
+
:key="i"
|
|
344
|
+
data-option
|
|
345
|
+
class="flex cursor-pointer items-center gap-3 px-4 py-3 text-body-large"
|
|
346
|
+
:class="[
|
|
347
|
+
opt.disabled
|
|
348
|
+
? 'cursor-not-allowed opacity-38 text-on-surface'
|
|
349
|
+
: 'text-on-surface hover:bg-on-surface/8',
|
|
350
|
+
eq(opt.value, modelValue) ? 'bg-primary/8 text-primary font-medium' : '',
|
|
351
|
+
getEnabledIndex(opt) === highlightIndex && !opt.disabled ? 'bg-on-surface/12' : '',
|
|
352
|
+
]"
|
|
353
|
+
@mousedown.prevent="select(opt)"
|
|
354
|
+
>
|
|
355
|
+
<MIcon
|
|
356
|
+
v-if="eq(opt.value, modelValue)"
|
|
357
|
+
name="check"
|
|
358
|
+
:size="18"
|
|
359
|
+
class="shrink-0 text-primary"
|
|
360
|
+
/>
|
|
361
|
+
<span v-else class="w-[18px] shrink-0" />
|
|
362
|
+
{{ opt.label }}
|
|
363
|
+
</div>
|
|
364
|
+
<p
|
|
365
|
+
v-if="!filteredOptions.length"
|
|
366
|
+
class="px-4 py-3 text-center text-body-small text-on-surface-variant"
|
|
367
|
+
>
|
|
368
|
+
{{ resolvedNoResultsText }}
|
|
369
|
+
</p>
|
|
370
|
+
</div>
|
|
371
|
+
</Transition>
|
|
372
|
+
</Teleport>
|
|
373
|
+
</template>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import MAvatar from './MAvatar.vue'
|
|
4
|
+
import MIcon from './MIcon.vue'
|
|
5
|
+
|
|
6
|
+
const props = withDefaults(
|
|
7
|
+
defineProps<{
|
|
8
|
+
text?: string
|
|
9
|
+
sender?: string
|
|
10
|
+
time?: string
|
|
11
|
+
side?: 'left' | 'right'
|
|
12
|
+
avatar?: string
|
|
13
|
+
avatarSrc?: string
|
|
14
|
+
status?: 'sent' | 'delivered' | 'read'
|
|
15
|
+
color?: 'primary' | 'secondary' | 'tertiary'
|
|
16
|
+
tail?: boolean
|
|
17
|
+
size?: 'small' | 'medium' | 'large'
|
|
18
|
+
maxWidth?: string
|
|
19
|
+
}>(),
|
|
20
|
+
{ side: 'left', color: 'primary', tail: true, size: 'medium', maxWidth: '320px' },
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
const isRight = computed(() => props.side === 'right')
|
|
24
|
+
|
|
25
|
+
const sizeClass = computed(() => {
|
|
26
|
+
if (props.size === 'small') return 'text-body-small'
|
|
27
|
+
if (props.size === 'large') return 'text-body-large'
|
|
28
|
+
return 'text-body-medium'
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const colorMap: Record<string, { bg: string; text: string; timeCls: string }> = {
|
|
32
|
+
primary: { bg: 'bg-primary', text: 'text-on-primary', timeCls: 'text-on-primary/60' },
|
|
33
|
+
secondary: { bg: 'bg-secondary', text: 'text-on-secondary', timeCls: 'text-on-secondary/60' },
|
|
34
|
+
tertiary: { bg: 'bg-tertiary', text: 'text-on-tertiary', timeCls: 'text-on-tertiary/60' },
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const bubbleClasses = computed(() => {
|
|
38
|
+
const classes = ['rounded-2xl', 'px-3', 'py-2']
|
|
39
|
+
|
|
40
|
+
if (isRight.value) {
|
|
41
|
+
const c = colorMap[props.color]!
|
|
42
|
+
classes.push(c.bg, c.text)
|
|
43
|
+
if (props.tail) classes.push('rounded-br-sm')
|
|
44
|
+
} else {
|
|
45
|
+
classes.push('bg-surface-container-high', 'text-on-surface')
|
|
46
|
+
if (props.tail) classes.push('rounded-bl-sm')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return classes
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const timeClasses = computed(() =>
|
|
53
|
+
isRight.value ? colorMap[props.color]!.timeCls : 'text-on-surface-variant',
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
const statusIcon = computed(() => {
|
|
57
|
+
if (!props.status) return null
|
|
58
|
+
return props.status === 'sent' ? 'check' : 'done_all'
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
const statusClasses = computed(() => {
|
|
62
|
+
if (props.status === 'sent') return 'text-on-primary/40'
|
|
63
|
+
if (props.status === 'delivered') return 'text-on-primary/60'
|
|
64
|
+
if (props.status === 'read') return 'text-on-primary'
|
|
65
|
+
return ''
|
|
66
|
+
})
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<template>
|
|
70
|
+
<div class="flex gap-2" :class="isRight ? 'justify-end' : 'justify-start'">
|
|
71
|
+
<MAvatar
|
|
72
|
+
v-if="avatar && !isRight"
|
|
73
|
+
:name="avatar"
|
|
74
|
+
:size="32"
|
|
75
|
+
class="shrink-0 mt-auto"
|
|
76
|
+
/>
|
|
77
|
+
|
|
78
|
+
<div class="w-fit" :style="{ maxWidth: maxWidth }">
|
|
79
|
+
<p v-if="sender && !isRight" class="text-label-small font-medium text-on-surface-variant mb-0.5 ml-1">
|
|
80
|
+
{{ sender }}
|
|
81
|
+
</p>
|
|
82
|
+
|
|
83
|
+
<div :class="bubbleClasses">
|
|
84
|
+
<p :class="sizeClass"><slot>{{ text }}</slot></p>
|
|
85
|
+
|
|
86
|
+
<div v-if="time || (status && isRight)" class="flex items-center justify-end gap-1 mt-0.5">
|
|
87
|
+
<span v-if="time" class="text-label-small" :class="timeClasses">{{ time }}</span>
|
|
88
|
+
<MIcon
|
|
89
|
+
v-if="status && isRight"
|
|
90
|
+
:name="statusIcon!"
|
|
91
|
+
:size="14"
|
|
92
|
+
:class="statusClasses"
|
|
93
|
+
/>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</template>
|
|
@@ -158,7 +158,7 @@ const labelClasses = computed(() => {
|
|
|
158
158
|
<div
|
|
159
159
|
v-if="leadingIcon"
|
|
160
160
|
class="pointer-events-none absolute left-3.5 text-on-surface-variant"
|
|
161
|
-
:class="variant === 'filled' ? 'top-
|
|
161
|
+
:class="variant === 'filled' ? 'top-5' : 'top-4.5'"
|
|
162
162
|
>
|
|
163
163
|
<MIcon :name="leadingIcon" :size="20" />
|
|
164
164
|
</div>
|
|
@@ -184,8 +184,7 @@ const labelClasses = computed(() => {
|
|
|
184
184
|
<button
|
|
185
185
|
v-if="showClear"
|
|
186
186
|
type="button"
|
|
187
|
-
class="absolute right-3 flex h-6 w-6 cursor-pointer items-center justify-center rounded-full text-on-surface-variant transition-colors hover:bg-on-surface/8 hover:text-on-surface"
|
|
188
|
-
:class="variant === 'filled' ? 'top-[57%] -translate-y-1/2' : 'top-[55%] -translate-y-1/2'"
|
|
187
|
+
class="absolute right-3 top-1/2 -translate-y-1/2 flex h-6 w-6 cursor-pointer items-center justify-center rounded-full text-on-surface-variant transition-colors hover:bg-on-surface/8 hover:text-on-surface"
|
|
189
188
|
@click="emit('update:modelValue', '')"
|
|
190
189
|
>
|
|
191
190
|
<MIcon name="close" :size="18" />
|