@m3ui-vue/m3ui-vue 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MMenuItem-FyttjOj_.js → MMenuItem-COdgD4m7.js} +133 -114
- package/dist/MMenuItem-COdgD4m7.js.map +1 -0
- package/dist/components/MAutocomplete.vue.d.ts +4 -0
- package/dist/components/MMaskField.vue.d.ts +4 -0
- package/dist/components/MMultiAutocomplete.vue.d.ts +4 -0
- package/dist/components/MNumberField.vue.d.ts +4 -0
- package/dist/components/MSpotlightSearch.vue.d.ts +1 -1
- package/dist/components/MTagInput.vue.d.ts +4 -0
- package/dist/components/MTextField.vue.d.ts +4 -0
- package/dist/composables/useDebounce.d.ts +4 -0
- package/dist/composables/useLocale.d.ts +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/m3ui-vue.css +1 -1
- package/dist/m3ui.js +3362 -3324
- package/dist/m3ui.js.map +1 -1
- package/dist/plugin.d.ts +2 -2
- package/dist/rich-text-editor.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/__tests__/useDebounce.test.ts +75 -0
- package/src/__tests__/useLocale.test.ts +17 -1
- package/src/components/MAutocomplete.vue +30 -7
- package/src/components/MMaskField.vue +9 -2
- package/src/components/MMultiAutocomplete.vue +30 -7
- package/src/components/MNumberField.vue +22 -7
- package/src/components/MSlider.vue +1 -1
- package/src/components/MTagInput.vue +11 -3
- package/src/components/MTextField.vue +8 -2
- package/src/composables/useDebounce.ts +24 -0
- package/src/composables/useLocale.ts +9 -3
- package/src/index.ts +1 -0
- package/src/plugin.ts +2 -2
- package/dist/MMenuItem-FyttjOj_.js.map +0 -1
package/dist/plugin.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { App } from 'vue';
|
|
1
|
+
import type { App, MaybeRef } from 'vue';
|
|
2
2
|
import type { Palette } from './composables/useColorPalette';
|
|
3
3
|
import type { M3Locale } from './composables/useLocale';
|
|
4
4
|
export interface M3UIOptions {
|
|
5
5
|
palette?: string;
|
|
6
6
|
customPalettes?: Palette[];
|
|
7
|
-
locale?: Partial<M3Locale
|
|
7
|
+
locale?: MaybeRef<Partial<M3Locale>>;
|
|
8
8
|
}
|
|
9
9
|
export declare function createM3UI(options?: M3UIOptions): {
|
|
10
10
|
install(app: App): void;
|
package/dist/rich-text-editor.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as e,
|
|
1
|
+
import { a as e, f as t, i as n, n as r, r as i, t as a } from "./MMenuItem-COdgD4m7.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-2e3c3567],.m3-dialog-leave-active[data-v-2e3c3567]{transition:opacity .15s}.m3-dialog-enter-from[data-v-2e3c3567],.m3-dialog-leave-to[data-v-2e3c3567]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-2e3c3567],.m3-dialog-leave-active .dialog-box[data-v-2e3c3567]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-2e3c3567],.m3-dialog-leave-to .dialog-box[data-v-2e3c3567]{transform:scale(.95)}.m3-dialog-fs-enter-active[data-v-2e3c3567],.m3-dialog-fs-leave-active[data-v-2e3c3567]{transition:transform .25s cubic-bezier(.2,0,0,1),opacity .15s}.m3-dialog-fs-enter-from[data-v-2e3c3567],.m3-dialog-fs-leave-to[data-v-2e3c3567]{opacity:0;transform:translateY(100%)}.toast-row[data-v-0859cf20]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-0859cf20]{min-height:0}.m3-toast-bot-enter-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-0859cf20]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-0859cf20]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-0859cf20]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-0859cf20]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-0859cf20{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.notif-row[data-v-6eb78ef7]{grid-template-rows:1fr;padding-bottom:6px;display:grid}.notif-row>.notif-inner[data-v-6eb78ef7]{min-height:0}.m3-notif-bot-enter-active[data-v-6eb78ef7]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-bot-enter-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .2s}.m3-notif-bot-enter-from[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-enter-from>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:translateY(12px)scale(.95)}.m3-notif-bot-leave-active[data-v-6eb78ef7]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-bot-leave-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .15s}.m3-notif-bot-leave-to[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-leave-to>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:scale(.93)}.m3-notif-top-enter-active[data-v-6eb78ef7]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-top-enter-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .2s}.m3-notif-top-enter-from[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-enter-from>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:translateY(-12px)scale(.95)}.m3-notif-top-leave-active[data-v-6eb78ef7]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-top-leave-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .15s}.m3-notif-top-leave-to[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-leave-to>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:scale(.93)}.m3-ac-modal-enter-active[data-v-09d3e71c],.m3-ac-modal-leave-active[data-v-09d3e71c]{transition:opacity .15s}.m3-ac-modal-enter-from[data-v-09d3e71c],.m3-ac-modal-leave-to[data-v-09d3e71c]{opacity:0}.m3-ac-modal-enter-active .ac-modal-box[data-v-09d3e71c],.m3-ac-modal-leave-active .ac-modal-box[data-v-09d3e71c]{transition:transform .15s}.m3-ac-modal-enter-from .ac-modal-box[data-v-09d3e71c],.m3-ac-modal-leave-to .ac-modal-box[data-v-09d3e71c]{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}.carousel-track[data-v-f1acc440]{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}.carousel-track[data-v-f1acc440]::-webkit-scrollbar{display:none}.snap-center[data-v-f1acc440]>*{scroll-snap-align:center}.snap-start[data-v-f1acc440]>*{scroll-snap-align:start}.hue-slider[data-v-cf276414]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-cf276414]::-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-cf276414]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.hue-slider[data-v-59c0237f]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-59c0237f]::-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-59c0237f]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.m3-cp-modal-enter-active[data-v-59c0237f],.m3-cp-modal-leave-active[data-v-59c0237f]{transition:opacity .15s}.m3-cp-modal-enter-from[data-v-59c0237f],.m3-cp-modal-leave-to[data-v-59c0237f]{opacity:0}.m3-cp-modal-enter-active .cp-box[data-v-59c0237f],.m3-cp-modal-leave-active .cp-box[data-v-59c0237f]{transition:transform .15s}.m3-cp-modal-enter-from .cp-box[data-v-59c0237f],.m3-cp-modal-leave-to .cp-box[data-v-59c0237f]{transform:scale(.95)}.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}.m3-dp-modal-enter-active[data-v-ac5f05d4],.m3-dp-modal-leave-active[data-v-ac5f05d4]{transition:opacity .15s}.m3-dp-modal-enter-from[data-v-ac5f05d4],.m3-dp-modal-leave-to[data-v-ac5f05d4]{opacity:0}.m3-dp-modal-enter-active .dp-box[data-v-ac5f05d4],.m3-dp-modal-leave-active .dp-box[data-v-ac5f05d4]{transition:transform .15s}.m3-dp-modal-enter-from .dp-box[data-v-ac5f05d4],.m3-dp-modal-leave-to .dp-box[data-v-ac5f05d4]{transform:scale(.95)}.m3-drp-modal-enter-active[data-v-fcb7a791],.m3-drp-modal-leave-active[data-v-fcb7a791]{transition:opacity .15s}.m3-drp-modal-enter-from[data-v-fcb7a791],.m3-drp-modal-leave-to[data-v-fcb7a791]{opacity:0}.m3-drp-modal-enter-active .drp-box[data-v-fcb7a791],.m3-drp-modal-leave-active .drp-box[data-v-fcb7a791]{transition:transform .15s}.m3-drp-modal-enter-from .drp-box[data-v-fcb7a791],.m3-drp-modal-leave-to .drp-box[data-v-fcb7a791]{transform:scale(.95)}.expand-grid[data-v-31731809]{grid-template-rows:0fr;transition:grid-template-rows .3s ease-in-out;display:grid}.expand-grid.expand-open[data-v-31731809]{grid-template-rows:1fr}.expand-body[data-v-31731809]{min-height:0;overflow:hidden}.m3-fab-content-enter-active[data-v-02ba313e]{transition:opacity .2s,transform .2s cubic-bezier(.2,0,0,1)}.m3-fab-content-leave-active[data-v-02ba313e]{transition:opacity .15s,transform .15s}.m3-fab-content-enter-from[data-v-02ba313e]{opacity:0;transform:scale(.85)}.m3-fab-content-leave-to[data-v-02ba313e]{opacity:0;transform:scale(.9)}.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}.m3-mac-modal-enter-active[data-v-a848fbd2],.m3-mac-modal-leave-active[data-v-a848fbd2]{transition:opacity .15s}.m3-mac-modal-enter-from[data-v-a848fbd2],.m3-mac-modal-leave-to[data-v-a848fbd2]{opacity:0}.m3-mac-modal-enter-active .mac-modal-box[data-v-a848fbd2],.m3-mac-modal-leave-active .mac-modal-box[data-v-a848fbd2]{transition:transform .15s}.m3-mac-modal-enter-from .mac-modal-box[data-v-a848fbd2],.m3-mac-modal-leave-to .mac-modal-box[data-v-a848fbd2]{transform:scale(.95)}.m3-ms-modal-enter-active[data-v-fc4bb9ca],.m3-ms-modal-leave-active[data-v-fc4bb9ca]{transition:opacity .15s}.m3-ms-modal-enter-from[data-v-fc4bb9ca],.m3-ms-modal-leave-to[data-v-fc4bb9ca]{opacity:0}.m3-ms-modal-enter-active .ms-modal-box[data-v-fc4bb9ca],.m3-ms-modal-leave-active .ms-modal-box[data-v-fc4bb9ca]{transition:transform .15s}.m3-ms-modal-enter-from .ms-modal-box[data-v-fc4bb9ca],.m3-ms-modal-leave-to .ms-modal-box[data-v-fc4bb9ca]{transform:scale(.95)}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)}.m3-select-modal-enter-active[data-v-bc6f9740],.m3-select-modal-leave-active[data-v-bc6f9740]{transition:opacity .15s}.m3-select-modal-enter-from[data-v-bc6f9740],.m3-select-modal-leave-to[data-v-bc6f9740]{opacity:0}.m3-select-modal-enter-active .select-modal-box[data-v-bc6f9740],.m3-select-modal-leave-active .select-modal-box[data-v-bc6f9740]{transition:transform .15s}.m3-select-modal-enter-from .select-modal-box[data-v-bc6f9740],.m3-select-modal-leave-to .select-modal-box[data-v-bc6f9740]{transform:scale(.95)}.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}.toggle-btn[data-v-ec1435bc]{transition:border-radius .25s,background-color .15s}.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-tp-modal-enter-active[data-v-a2a090e9],.m3-tp-modal-leave-active[data-v-a2a090e9]{transition:opacity .15s}.m3-tp-modal-enter-from[data-v-a2a090e9],.m3-tp-modal-leave-to[data-v-a2a090e9]{opacity:0}.m3-tp-modal-enter-active .tp-box[data-v-a2a090e9],.m3-tp-modal-leave-active .tp-box[data-v-a2a090e9]{transition:transform .15s}.m3-tp-modal-enter-from .tp-box[data-v-a2a090e9],.m3-tp-modal-leave-to .tp-box[data-v-a2a090e9]{transform:scale(.95)}.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-2e3c3567],.m3-dialog-leave-active[data-v-2e3c3567]{transition:opacity .15s}.m3-dialog-enter-from[data-v-2e3c3567],.m3-dialog-leave-to[data-v-2e3c3567]{opacity:0}.m3-dialog-enter-active .dialog-box[data-v-2e3c3567],.m3-dialog-leave-active .dialog-box[data-v-2e3c3567]{transition:transform .15s}.m3-dialog-enter-from .dialog-box[data-v-2e3c3567],.m3-dialog-leave-to .dialog-box[data-v-2e3c3567]{transform:scale(.95)}.m3-dialog-fs-enter-active[data-v-2e3c3567],.m3-dialog-fs-leave-active[data-v-2e3c3567]{transition:transform .25s cubic-bezier(.2,0,0,1),opacity .15s}.m3-dialog-fs-enter-from[data-v-2e3c3567],.m3-dialog-fs-leave-to[data-v-2e3c3567]{opacity:0;transform:translateY(100%)}.toast-row[data-v-0859cf20]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-0859cf20]{min-height:0}.m3-toast-bot-enter-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-0859cf20]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-0859cf20]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-0859cf20]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-0859cf20]{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-0859cf20]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-0859cf20]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-0859cf20]{opacity:0;transform:scale(.92)}@keyframes m3-toast-progress-0859cf20{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.notif-row[data-v-6eb78ef7]{grid-template-rows:1fr;padding-bottom:6px;display:grid}.notif-row>.notif-inner[data-v-6eb78ef7]{min-height:0}.m3-notif-bot-enter-active[data-v-6eb78ef7]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-bot-enter-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .2s}.m3-notif-bot-enter-from[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-enter-from>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:translateY(12px)scale(.95)}.m3-notif-bot-leave-active[data-v-6eb78ef7]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-bot-leave-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .15s}.m3-notif-bot-leave-to[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-leave-to>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:scale(.93)}.m3-notif-top-enter-active[data-v-6eb78ef7]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-top-enter-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .2s}.m3-notif-top-enter-from[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-enter-from>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:translateY(-12px)scale(.95)}.m3-notif-top-leave-active[data-v-6eb78ef7]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-top-leave-active>.notif-inner[data-v-6eb78ef7]{transition:opacity .15s,transform .15s}.m3-notif-top-leave-to[data-v-6eb78ef7]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-leave-to>.notif-inner[data-v-6eb78ef7]{opacity:0;transform:scale(.93)}.m3-ac-modal-enter-active[data-v-4ee54742],.m3-ac-modal-leave-active[data-v-4ee54742]{transition:opacity .15s}.m3-ac-modal-enter-from[data-v-4ee54742],.m3-ac-modal-leave-to[data-v-4ee54742]{opacity:0}.m3-ac-modal-enter-active .ac-modal-box[data-v-4ee54742],.m3-ac-modal-leave-active .ac-modal-box[data-v-4ee54742]{transition:transform .15s}.m3-ac-modal-enter-from .ac-modal-box[data-v-4ee54742],.m3-ac-modal-leave-to .ac-modal-box[data-v-4ee54742]{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}.carousel-track[data-v-f1acc440]{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}.carousel-track[data-v-f1acc440]::-webkit-scrollbar{display:none}.snap-center[data-v-f1acc440]>*{scroll-snap-align:center}.snap-start[data-v-f1acc440]>*{scroll-snap-align:start}.hue-slider[data-v-cf276414]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-cf276414]::-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-cf276414]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.hue-slider[data-v-59c0237f]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-59c0237f]::-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-59c0237f]::-moz-range-thumb{cursor:pointer;background:#fff;border:none;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0006}.m3-cp-modal-enter-active[data-v-59c0237f],.m3-cp-modal-leave-active[data-v-59c0237f]{transition:opacity .15s}.m3-cp-modal-enter-from[data-v-59c0237f],.m3-cp-modal-leave-to[data-v-59c0237f]{opacity:0}.m3-cp-modal-enter-active .cp-box[data-v-59c0237f],.m3-cp-modal-leave-active .cp-box[data-v-59c0237f]{transition:transform .15s}.m3-cp-modal-enter-from .cp-box[data-v-59c0237f],.m3-cp-modal-leave-to .cp-box[data-v-59c0237f]{transform:scale(.95)}.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}.m3-dp-modal-enter-active[data-v-ac5f05d4],.m3-dp-modal-leave-active[data-v-ac5f05d4]{transition:opacity .15s}.m3-dp-modal-enter-from[data-v-ac5f05d4],.m3-dp-modal-leave-to[data-v-ac5f05d4]{opacity:0}.m3-dp-modal-enter-active .dp-box[data-v-ac5f05d4],.m3-dp-modal-leave-active .dp-box[data-v-ac5f05d4]{transition:transform .15s}.m3-dp-modal-enter-from .dp-box[data-v-ac5f05d4],.m3-dp-modal-leave-to .dp-box[data-v-ac5f05d4]{transform:scale(.95)}.m3-drp-modal-enter-active[data-v-fcb7a791],.m3-drp-modal-leave-active[data-v-fcb7a791]{transition:opacity .15s}.m3-drp-modal-enter-from[data-v-fcb7a791],.m3-drp-modal-leave-to[data-v-fcb7a791]{opacity:0}.m3-drp-modal-enter-active .drp-box[data-v-fcb7a791],.m3-drp-modal-leave-active .drp-box[data-v-fcb7a791]{transition:transform .15s}.m3-drp-modal-enter-from .drp-box[data-v-fcb7a791],.m3-drp-modal-leave-to .drp-box[data-v-fcb7a791]{transform:scale(.95)}.expand-grid[data-v-31731809]{grid-template-rows:0fr;transition:grid-template-rows .3s ease-in-out;display:grid}.expand-grid.expand-open[data-v-31731809]{grid-template-rows:1fr}.expand-body[data-v-31731809]{min-height:0;overflow:hidden}.m3-fab-content-enter-active[data-v-02ba313e]{transition:opacity .2s,transform .2s cubic-bezier(.2,0,0,1)}.m3-fab-content-leave-active[data-v-02ba313e]{transition:opacity .15s,transform .15s}.m3-fab-content-enter-from[data-v-02ba313e]{opacity:0;transform:scale(.85)}.m3-fab-content-leave-to[data-v-02ba313e]{opacity:0;transform:scale(.9)}.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}.m3-mac-modal-enter-active[data-v-1c95b672],.m3-mac-modal-leave-active[data-v-1c95b672]{transition:opacity .15s}.m3-mac-modal-enter-from[data-v-1c95b672],.m3-mac-modal-leave-to[data-v-1c95b672]{opacity:0}.m3-mac-modal-enter-active .mac-modal-box[data-v-1c95b672],.m3-mac-modal-leave-active .mac-modal-box[data-v-1c95b672]{transition:transform .15s}.m3-mac-modal-enter-from .mac-modal-box[data-v-1c95b672],.m3-mac-modal-leave-to .mac-modal-box[data-v-1c95b672]{transform:scale(.95)}.m3-ms-modal-enter-active[data-v-fc4bb9ca],.m3-ms-modal-leave-active[data-v-fc4bb9ca]{transition:opacity .15s}.m3-ms-modal-enter-from[data-v-fc4bb9ca],.m3-ms-modal-leave-to[data-v-fc4bb9ca]{opacity:0}.m3-ms-modal-enter-active .ms-modal-box[data-v-fc4bb9ca],.m3-ms-modal-leave-active .ms-modal-box[data-v-fc4bb9ca]{transition:transform .15s}.m3-ms-modal-enter-from .ms-modal-box[data-v-fc4bb9ca],.m3-ms-modal-leave-to .ms-modal-box[data-v-fc4bb9ca]{transform:scale(.95)}input[type=number][data-v-d624d5b1]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-d624d5b1]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-d624d5b1]{-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)}.m3-select-modal-enter-active[data-v-bc6f9740],.m3-select-modal-leave-active[data-v-bc6f9740]{transition:opacity .15s}.m3-select-modal-enter-from[data-v-bc6f9740],.m3-select-modal-leave-to[data-v-bc6f9740]{opacity:0}.m3-select-modal-enter-active .select-modal-box[data-v-bc6f9740],.m3-select-modal-leave-active .select-modal-box[data-v-bc6f9740]{transition:transform .15s}.m3-select-modal-enter-from .select-modal-box[data-v-bc6f9740],.m3-select-modal-leave-to .select-modal-box[data-v-bc6f9740]{transform:scale(.95)}.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}.toggle-btn[data-v-ec1435bc]{transition:border-radius .25s,background-color .15s}.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-tp-modal-enter-active[data-v-a2a090e9],.m3-tp-modal-leave-active[data-v-a2a090e9]{transition:opacity .15s}.m3-tp-modal-enter-from[data-v-a2a090e9],.m3-tp-modal-leave-to[data-v-a2a090e9]{opacity:0}.m3-tp-modal-enter-active .tp-box[data-v-a2a090e9],.m3-tp-modal-leave-active .tp-box[data-v-a2a090e9]{transition:transform .15s}.m3-tp-modal-enter-from .tp-box[data-v-a2a090e9],.m3-tp-modal-leave-to .tp-box[data-v-a2a090e9]{transform:scale(.95)}.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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
2
|
+
import { mount, flushPromises } from '@vue/test-utils'
|
|
3
|
+
import { defineComponent, h } from 'vue'
|
|
4
|
+
import { useDebounce } from '../composables/useDebounce'
|
|
5
|
+
|
|
6
|
+
function withSetup<T>(fn: () => T): { result: T; unmount: () => void } {
|
|
7
|
+
let result!: T
|
|
8
|
+
const wrapper = mount(defineComponent({
|
|
9
|
+
setup() {
|
|
10
|
+
result = fn()
|
|
11
|
+
return () => h('div')
|
|
12
|
+
},
|
|
13
|
+
}))
|
|
14
|
+
return { result, unmount: () => wrapper.unmount() }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe('useDebounce', () => {
|
|
18
|
+
it('delays execution by the given ms', () => {
|
|
19
|
+
vi.useFakeTimers()
|
|
20
|
+
const spy = vi.fn()
|
|
21
|
+
const { result } = withSetup(() => useDebounce(spy, 300))
|
|
22
|
+
|
|
23
|
+
result.debounced('a')
|
|
24
|
+
expect(spy).not.toHaveBeenCalled()
|
|
25
|
+
|
|
26
|
+
vi.advanceTimersByTime(200)
|
|
27
|
+
expect(spy).not.toHaveBeenCalled()
|
|
28
|
+
|
|
29
|
+
vi.advanceTimersByTime(100)
|
|
30
|
+
expect(spy).toHaveBeenCalledWith('a')
|
|
31
|
+
vi.useRealTimers()
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('resets the timer on subsequent calls', () => {
|
|
35
|
+
vi.useFakeTimers()
|
|
36
|
+
const spy = vi.fn()
|
|
37
|
+
const { result } = withSetup(() => useDebounce(spy, 300))
|
|
38
|
+
|
|
39
|
+
result.debounced('a')
|
|
40
|
+
vi.advanceTimersByTime(200)
|
|
41
|
+
result.debounced('b')
|
|
42
|
+
vi.advanceTimersByTime(200)
|
|
43
|
+
expect(spy).not.toHaveBeenCalled()
|
|
44
|
+
|
|
45
|
+
vi.advanceTimersByTime(100)
|
|
46
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
47
|
+
expect(spy).toHaveBeenCalledWith('b')
|
|
48
|
+
vi.useRealTimers()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('cancel prevents pending execution', () => {
|
|
52
|
+
vi.useFakeTimers()
|
|
53
|
+
const spy = vi.fn()
|
|
54
|
+
const { result } = withSetup(() => useDebounce(spy, 300))
|
|
55
|
+
|
|
56
|
+
result.debounced('a')
|
|
57
|
+
vi.advanceTimersByTime(100)
|
|
58
|
+
result.cancel()
|
|
59
|
+
vi.advanceTimersByTime(300)
|
|
60
|
+
expect(spy).not.toHaveBeenCalled()
|
|
61
|
+
vi.useRealTimers()
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('cleans up on unmount', () => {
|
|
65
|
+
vi.useFakeTimers()
|
|
66
|
+
const spy = vi.fn()
|
|
67
|
+
const { result, unmount } = withSetup(() => useDebounce(spy, 300))
|
|
68
|
+
|
|
69
|
+
result.debounced('a')
|
|
70
|
+
unmount()
|
|
71
|
+
vi.advanceTimersByTime(300)
|
|
72
|
+
expect(spy).not.toHaveBeenCalled()
|
|
73
|
+
vi.useRealTimers()
|
|
74
|
+
})
|
|
75
|
+
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest'
|
|
2
2
|
import { mount } from '@vue/test-utils'
|
|
3
|
-
import { defineComponent, h } from 'vue'
|
|
3
|
+
import { defineComponent, h, ref, nextTick } from 'vue'
|
|
4
4
|
import { useLocale, defaultLocale, M3_LOCALE_KEY } from '../composables/useLocale'
|
|
5
5
|
|
|
6
6
|
function withSetup<T>(fn: () => T, provide?: Record<symbol, unknown>): T {
|
|
@@ -40,6 +40,22 @@ describe('useLocale', () => {
|
|
|
40
40
|
expect(locale.next).toBe('Next')
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
+
it('reacts to ref-based locale changes', async () => {
|
|
44
|
+
const localeRef = ref<Partial<typeof defaultLocale>>({ search: 'Buscar...' })
|
|
45
|
+
const locale = withSetup(
|
|
46
|
+
() => useLocale(),
|
|
47
|
+
{ [M3_LOCALE_KEY as symbol]: localeRef },
|
|
48
|
+
)
|
|
49
|
+
expect(locale.search).toBe('Buscar...')
|
|
50
|
+
expect(locale.close).toBe('Close')
|
|
51
|
+
|
|
52
|
+
localeRef.value = { search: 'Rechercher...', close: 'Fermer' }
|
|
53
|
+
await nextTick()
|
|
54
|
+
expect(locale.search).toBe('Rechercher...')
|
|
55
|
+
expect(locale.close).toBe('Fermer')
|
|
56
|
+
expect(locale.cancel).toBe('Cancel')
|
|
57
|
+
})
|
|
58
|
+
|
|
43
59
|
it('defaultLocale has all keys defined', () => {
|
|
44
60
|
const keys = Object.keys(defaultLocale)
|
|
45
61
|
expect(keys.length).toBeGreaterThan(50)
|
|
@@ -4,6 +4,7 @@ import MIcon from './MIcon.vue'
|
|
|
4
4
|
import MIconButton from './MIconButton.vue'
|
|
5
5
|
import { useFieldBg } from '../composables/useFieldBg'
|
|
6
6
|
import { useLocale } from '../composables/useLocale'
|
|
7
|
+
import { useDebounce } from '../composables/useDebounce'
|
|
7
8
|
import type { SelectOption } from './MSelect.vue'
|
|
8
9
|
|
|
9
10
|
const props = withDefaults(
|
|
@@ -22,6 +23,7 @@ const props = withDefaults(
|
|
|
22
23
|
clearable?: boolean
|
|
23
24
|
fieldBg?: string
|
|
24
25
|
noResultsText?: string
|
|
26
|
+
debounce?: number
|
|
25
27
|
}>(),
|
|
26
28
|
{
|
|
27
29
|
modelValue: undefined,
|
|
@@ -30,10 +32,11 @@ const props = withDefaults(
|
|
|
30
32
|
disabled: false,
|
|
31
33
|
required: false,
|
|
32
34
|
clearable: false,
|
|
35
|
+
debounce: 0,
|
|
33
36
|
},
|
|
34
37
|
)
|
|
35
38
|
|
|
36
|
-
const emit = defineEmits<{ 'update:modelValue': [unknown] }>()
|
|
39
|
+
const emit = defineEmits<{ 'update:modelValue': [unknown]; debounced: [string] }>()
|
|
37
40
|
|
|
38
41
|
const locale = useLocale()
|
|
39
42
|
const id = useId()
|
|
@@ -47,6 +50,23 @@ const inputEl = ref<HTMLInputElement | null>(null)
|
|
|
47
50
|
const { resolvedFieldBg } = useFieldBg(fieldEl, () => props.fieldBg)
|
|
48
51
|
const dropdownEl = ref<HTMLElement | null>(null)
|
|
49
52
|
const dropPos = ref({ top: '0px', left: '0px', width: '0px' })
|
|
53
|
+
const filterQuery = ref('')
|
|
54
|
+
const modalFilterQuery = ref('')
|
|
55
|
+
|
|
56
|
+
const { debounced: setFilterQuery } = useDebounce((v: string) => { filterQuery.value = v; emit('debounced', v) }, props.debounce)
|
|
57
|
+
const { debounced: setModalFilterQuery } = useDebounce((v: string) => { modalFilterQuery.value = v; emit('debounced', v) }, props.debounce)
|
|
58
|
+
|
|
59
|
+
function updateSearch(v: string) {
|
|
60
|
+
search.value = v
|
|
61
|
+
if (props.debounce > 0) setFilterQuery(v)
|
|
62
|
+
else filterQuery.value = v
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function updateModalSearch(v: string) {
|
|
66
|
+
modalSearch.value = v
|
|
67
|
+
if (props.debounce > 0) setModalFilterQuery(v)
|
|
68
|
+
else modalFilterQuery.value = v
|
|
69
|
+
}
|
|
50
70
|
|
|
51
71
|
function eq(a: unknown, b: unknown): boolean {
|
|
52
72
|
if (a === b) return true
|
|
@@ -60,8 +80,8 @@ const selectedLabel = computed(
|
|
|
60
80
|
)
|
|
61
81
|
|
|
62
82
|
const filteredOptions = computed(() => {
|
|
63
|
-
if (!
|
|
64
|
-
const q =
|
|
83
|
+
if (!filterQuery.value) return props.options
|
|
84
|
+
const q = filterQuery.value.toLowerCase()
|
|
65
85
|
return props.options.filter((o) => o.label.toLowerCase().includes(q))
|
|
66
86
|
})
|
|
67
87
|
|
|
@@ -81,8 +101,8 @@ function computeDropPos() {
|
|
|
81
101
|
}
|
|
82
102
|
|
|
83
103
|
const modalFilteredOptions = computed(() => {
|
|
84
|
-
if (!
|
|
85
|
-
const q =
|
|
104
|
+
if (!modalFilterQuery.value) return props.options
|
|
105
|
+
const q = modalFilterQuery.value.toLowerCase()
|
|
86
106
|
return props.options.filter((o) => o.label.toLowerCase().includes(q))
|
|
87
107
|
})
|
|
88
108
|
|
|
@@ -103,6 +123,8 @@ function closeDropdown() {
|
|
|
103
123
|
modalOpen.value = false
|
|
104
124
|
search.value = ''
|
|
105
125
|
modalSearch.value = ''
|
|
126
|
+
filterQuery.value = ''
|
|
127
|
+
modalFilterQuery.value = ''
|
|
106
128
|
highlightIndex.value = -1
|
|
107
129
|
}
|
|
108
130
|
|
|
@@ -130,7 +152,7 @@ function onInputBlur(e: FocusEvent) {
|
|
|
130
152
|
}
|
|
131
153
|
|
|
132
154
|
function onInput(e: Event) {
|
|
133
|
-
|
|
155
|
+
updateSearch((e.target as HTMLInputElement).value)
|
|
134
156
|
if (!open.value) openDropdown()
|
|
135
157
|
highlightIndex.value = -1
|
|
136
158
|
nextTick(computeDropPos)
|
|
@@ -404,10 +426,11 @@ const labelClasses = computed(() => {
|
|
|
404
426
|
<div class="flex items-center gap-2 rounded-full bg-surface-container-highest px-3 py-2">
|
|
405
427
|
<MIcon name="search" :size="16" class="shrink-0 text-on-surface-variant" />
|
|
406
428
|
<input
|
|
407
|
-
|
|
429
|
+
:value="modalSearch"
|
|
408
430
|
type="text"
|
|
409
431
|
:placeholder="locale.search"
|
|
410
432
|
class="w-full bg-transparent text-body-medium text-on-surface outline-none placeholder:text-on-surface-variant"
|
|
433
|
+
@input="updateModalSearch(($event.target as HTMLInputElement).value)"
|
|
411
434
|
/>
|
|
412
435
|
</div>
|
|
413
436
|
</div>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { computed, ref, useId, watch } from 'vue'
|
|
3
3
|
import MIcon from './MIcon.vue'
|
|
4
4
|
import { useFieldBg } from '../composables/useFieldBg'
|
|
5
|
+
import { useDebounce } from '../composables/useDebounce'
|
|
5
6
|
|
|
6
7
|
export type MaskPreset = 'credit-card' | 'phone' | 'date' | 'time' | 'cpf' | 'cnpj' | 'zip'
|
|
7
8
|
|
|
@@ -28,14 +29,16 @@ const props = withDefaults(
|
|
|
28
29
|
leadingIcon?: string
|
|
29
30
|
clearable?: boolean
|
|
30
31
|
fieldBg?: string
|
|
32
|
+
debounce?: number
|
|
31
33
|
}>(),
|
|
32
34
|
{
|
|
33
35
|
variant: 'filled',
|
|
34
36
|
clearable: false,
|
|
37
|
+
debounce: 0,
|
|
35
38
|
},
|
|
36
39
|
)
|
|
37
40
|
|
|
38
|
-
const emit = defineEmits<{ 'update:modelValue': [string] }>()
|
|
41
|
+
const emit = defineEmits<{ 'update:modelValue': [string]; debounced: [string] }>()
|
|
39
42
|
|
|
40
43
|
const id = useId()
|
|
41
44
|
const fieldBgEl = ref<HTMLElement | null>(null)
|
|
@@ -44,6 +47,8 @@ const inputEl = ref<HTMLInputElement | null>(null)
|
|
|
44
47
|
|
|
45
48
|
const resolvedMask = computed(() => PRESETS[props.mask as MaskPreset] ?? props.mask)
|
|
46
49
|
|
|
50
|
+
const { debounced: emitDebounced, cancel: cancelDebounce } = useDebounce((v: string) => emit('debounced', v), props.debounce)
|
|
51
|
+
|
|
47
52
|
const showClear = computed(() => props.clearable && props.modelValue.length > 0 && !props.disabled)
|
|
48
53
|
|
|
49
54
|
function rawToMasked(raw: string, mask: string): string {
|
|
@@ -74,6 +79,7 @@ function onInput(e: Event) {
|
|
|
74
79
|
const raw = input.value.replace(/[^\d]/g, '')
|
|
75
80
|
const masked = rawToMasked(raw, resolvedMask.value)
|
|
76
81
|
emit('update:modelValue', masked)
|
|
82
|
+
if (props.debounce > 0) emitDebounced(masked)
|
|
77
83
|
|
|
78
84
|
requestAnimationFrame(() => {
|
|
79
85
|
if (inputEl.value) inputEl.value.value = masked
|
|
@@ -88,6 +94,7 @@ function onKeydown(e: KeyboardEvent) {
|
|
|
88
94
|
const newRaw = raw.slice(0, -1)
|
|
89
95
|
const masked = rawToMasked(newRaw, resolvedMask.value)
|
|
90
96
|
emit('update:modelValue', masked)
|
|
97
|
+
if (props.debounce > 0) emitDebounced(masked)
|
|
91
98
|
requestAnimationFrame(() => {
|
|
92
99
|
if (inputEl.value) inputEl.value.value = masked
|
|
93
100
|
})
|
|
@@ -185,7 +192,7 @@ const labelClasses = computed(() => {
|
|
|
185
192
|
v-if="showClear"
|
|
186
193
|
type="button"
|
|
187
194
|
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"
|
|
188
|
-
@click="emit('update:modelValue', '')"
|
|
195
|
+
@click="cancelDebounce(); emit('update:modelValue', '')"
|
|
189
196
|
>
|
|
190
197
|
<MIcon name="close" :size="18" />
|
|
191
198
|
</button>
|
|
@@ -5,6 +5,7 @@ import MIconButton from './MIconButton.vue'
|
|
|
5
5
|
import MCheckbox from './MCheckbox.vue'
|
|
6
6
|
import { useFieldBg } from '../composables/useFieldBg'
|
|
7
7
|
import { useLocale } from '../composables/useLocale'
|
|
8
|
+
import { useDebounce } from '../composables/useDebounce'
|
|
8
9
|
import type { MultiSelectOption } from './MMultiSelect.vue'
|
|
9
10
|
|
|
10
11
|
const props = withDefaults(
|
|
@@ -25,6 +26,7 @@ const props = withDefaults(
|
|
|
25
26
|
maxChips?: number
|
|
26
27
|
noResultsText?: string
|
|
27
28
|
hideSelected?: boolean
|
|
29
|
+
debounce?: number
|
|
28
30
|
}>(),
|
|
29
31
|
{
|
|
30
32
|
modelValue: () => [],
|
|
@@ -35,10 +37,11 @@ const props = withDefaults(
|
|
|
35
37
|
clearable: false,
|
|
36
38
|
maxChips: 3,
|
|
37
39
|
hideSelected: false,
|
|
40
|
+
debounce: 0,
|
|
38
41
|
},
|
|
39
42
|
)
|
|
40
43
|
|
|
41
|
-
const emit = defineEmits<{ 'update:modelValue': [unknown[]] }>()
|
|
44
|
+
const emit = defineEmits<{ 'update:modelValue': [unknown[]]; debounced: [string] }>()
|
|
42
45
|
|
|
43
46
|
const locale = useLocale()
|
|
44
47
|
const id = useId()
|
|
@@ -52,6 +55,23 @@ const inputEl = ref<HTMLInputElement | null>(null)
|
|
|
52
55
|
const { resolvedFieldBg } = useFieldBg(fieldEl, () => props.fieldBg)
|
|
53
56
|
const dropdownEl = ref<HTMLElement | null>(null)
|
|
54
57
|
const dropPos = ref({ top: '0px', left: '0px', width: '0px' })
|
|
58
|
+
const filterQuery = ref('')
|
|
59
|
+
const modalFilterQuery = ref('')
|
|
60
|
+
|
|
61
|
+
const { debounced: setFilterQuery } = useDebounce((v: string) => { filterQuery.value = v; emit('debounced', v) }, props.debounce)
|
|
62
|
+
const { debounced: setModalFilterQuery } = useDebounce((v: string) => { modalFilterQuery.value = v; emit('debounced', v) }, props.debounce)
|
|
63
|
+
|
|
64
|
+
function updateSearch(v: string) {
|
|
65
|
+
search.value = v
|
|
66
|
+
if (props.debounce > 0) setFilterQuery(v)
|
|
67
|
+
else filterQuery.value = v
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function updateModalSearch(v: string) {
|
|
71
|
+
modalSearch.value = v
|
|
72
|
+
if (props.debounce > 0) setModalFilterQuery(v)
|
|
73
|
+
else modalFilterQuery.value = v
|
|
74
|
+
}
|
|
55
75
|
|
|
56
76
|
function eq(a: unknown, b: unknown): boolean {
|
|
57
77
|
if (a === b) return true
|
|
@@ -70,8 +90,8 @@ const filteredOptions = computed(() => {
|
|
|
70
90
|
if (props.hideSelected) {
|
|
71
91
|
opts = opts.filter((o) => !includes(props.modelValue, o.value))
|
|
72
92
|
}
|
|
73
|
-
if (!
|
|
74
|
-
const q =
|
|
93
|
+
if (!filterQuery.value) return opts
|
|
94
|
+
const q = filterQuery.value.toLowerCase()
|
|
75
95
|
return opts.filter((o) => o.label.toLowerCase().includes(q))
|
|
76
96
|
})
|
|
77
97
|
|
|
@@ -136,8 +156,8 @@ const modalFilteredOptions = computed(() => {
|
|
|
136
156
|
if (props.hideSelected) {
|
|
137
157
|
opts = opts.filter((o) => !includes(props.modelValue, o.value))
|
|
138
158
|
}
|
|
139
|
-
if (!
|
|
140
|
-
const q =
|
|
159
|
+
if (!modalFilterQuery.value) return opts
|
|
160
|
+
const q = modalFilterQuery.value.toLowerCase()
|
|
141
161
|
return opts.filter((o) => o.label.toLowerCase().includes(q))
|
|
142
162
|
})
|
|
143
163
|
|
|
@@ -158,6 +178,8 @@ function closeDropdown() {
|
|
|
158
178
|
modalOpen.value = false
|
|
159
179
|
search.value = ''
|
|
160
180
|
modalSearch.value = ''
|
|
181
|
+
filterQuery.value = ''
|
|
182
|
+
modalFilterQuery.value = ''
|
|
161
183
|
highlightIndex.value = -1
|
|
162
184
|
}
|
|
163
185
|
|
|
@@ -177,7 +199,7 @@ function onInputBlur(e: FocusEvent) {
|
|
|
177
199
|
}
|
|
178
200
|
|
|
179
201
|
function onInput(e: Event) {
|
|
180
|
-
|
|
202
|
+
updateSearch((e.target as HTMLInputElement).value)
|
|
181
203
|
if (!open.value) openDropdown()
|
|
182
204
|
highlightIndex.value = -1
|
|
183
205
|
nextTick(computeDropPos)
|
|
@@ -484,10 +506,11 @@ const labelClasses = computed(() => {
|
|
|
484
506
|
<div class="flex items-center gap-2 rounded-full bg-surface-container-highest px-3 py-2">
|
|
485
507
|
<MIcon name="search" :size="16" class="shrink-0 text-on-surface-variant" />
|
|
486
508
|
<input
|
|
487
|
-
|
|
509
|
+
:value="modalSearch"
|
|
488
510
|
type="text"
|
|
489
511
|
:placeholder="locale.search"
|
|
490
512
|
class="w-full bg-transparent text-body-medium text-on-surface outline-none placeholder:text-on-surface-variant"
|
|
513
|
+
@input="updateModalSearch(($event.target as HTMLInputElement).value)"
|
|
491
514
|
/>
|
|
492
515
|
</div>
|
|
493
516
|
</div>
|
|
@@ -3,6 +3,7 @@ import { computed, ref, useId } from 'vue'
|
|
|
3
3
|
import MIcon from './MIcon.vue'
|
|
4
4
|
import MIconButton from './MIconButton.vue'
|
|
5
5
|
import { useFieldBg } from '../composables/useFieldBg'
|
|
6
|
+
import { useDebounce } from '../composables/useDebounce'
|
|
6
7
|
|
|
7
8
|
const props = withDefaults(
|
|
8
9
|
defineProps<{
|
|
@@ -19,21 +20,25 @@ const props = withDefaults(
|
|
|
19
20
|
leadingIcon?: string
|
|
20
21
|
stepper?: boolean
|
|
21
22
|
fieldBg?: string
|
|
23
|
+
debounce?: number
|
|
22
24
|
}>(),
|
|
23
25
|
{
|
|
24
26
|
variant: 'filled',
|
|
25
27
|
step: 1,
|
|
26
28
|
stepper: true,
|
|
27
29
|
modelValue: null,
|
|
30
|
+
debounce: 0,
|
|
28
31
|
},
|
|
29
32
|
)
|
|
30
33
|
|
|
31
|
-
const emit = defineEmits<{ 'update:modelValue': [number | null] }>()
|
|
34
|
+
const emit = defineEmits<{ 'update:modelValue': [number | null]; debounced: [number | null] }>()
|
|
32
35
|
|
|
33
36
|
const id = useId()
|
|
34
37
|
const fieldBgEl = ref<HTMLElement | null>(null)
|
|
35
38
|
const { resolvedFieldBg } = useFieldBg(fieldBgEl, () => props.fieldBg)
|
|
36
39
|
|
|
40
|
+
const { debounced: emitDebounced } = useDebounce((v: number | null) => emit('debounced', v), props.debounce)
|
|
41
|
+
|
|
37
42
|
const hasValue = computed(() => props.modelValue !== null && props.modelValue !== undefined)
|
|
38
43
|
|
|
39
44
|
function clamp(val: number): number {
|
|
@@ -44,21 +49,31 @@ function clamp(val: number): number {
|
|
|
44
49
|
|
|
45
50
|
function onInput(e: Event) {
|
|
46
51
|
const raw = (e.target as HTMLInputElement).value
|
|
47
|
-
if (raw === '') {
|
|
52
|
+
if (raw === '') {
|
|
53
|
+
emit('update:modelValue', null)
|
|
54
|
+
if (props.debounce > 0) emitDebounced(null)
|
|
55
|
+
return
|
|
56
|
+
}
|
|
48
57
|
const n = Number(raw)
|
|
49
|
-
if (!Number.isNaN(n))
|
|
58
|
+
if (!Number.isNaN(n)) {
|
|
59
|
+
const v = clamp(n)
|
|
60
|
+
emit('update:modelValue', v)
|
|
61
|
+
if (props.debounce > 0) emitDebounced(v)
|
|
62
|
+
}
|
|
50
63
|
}
|
|
51
64
|
|
|
52
65
|
function increment() {
|
|
53
66
|
if (props.disabled) return
|
|
54
|
-
const
|
|
55
|
-
emit('update:modelValue',
|
|
67
|
+
const v = clamp((props.modelValue ?? 0) + props.step)
|
|
68
|
+
emit('update:modelValue', v)
|
|
69
|
+
if (props.debounce > 0) emitDebounced(v)
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
function decrement() {
|
|
59
73
|
if (props.disabled) return
|
|
60
|
-
const
|
|
61
|
-
emit('update:modelValue',
|
|
74
|
+
const v = clamp((props.modelValue ?? 0) - props.step)
|
|
75
|
+
emit('update:modelValue', v)
|
|
76
|
+
if (props.debounce > 0) emitDebounced(v)
|
|
62
77
|
}
|
|
63
78
|
|
|
64
79
|
function onKeydown(e: KeyboardEvent) {
|
|
@@ -170,7 +170,7 @@ const stopPositions = computed(() => {
|
|
|
170
170
|
|
|
171
171
|
const r = computed(() => s.value.radius)
|
|
172
172
|
const nd = computed(() => !dragging.value)
|
|
173
|
-
const tr = computed(() => nd.value ? '75ms ease' : '
|
|
173
|
+
const tr = computed(() => nd.value ? '75ms ease' : '0s')
|
|
174
174
|
|
|
175
175
|
function thumbPos(pct: number) {
|
|
176
176
|
const tw = isVertical.value ? s.value.thumbH : s.value.thumbW
|