@m3ui-vue/m3ui-vue 0.4.6 → 0.4.7
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/components/MCircleProgressBar.vue.d.ts +27 -0
- package/dist/components/MProgressBar.vue.d.ts +1 -0
- package/dist/composables/useNotification.d.ts +7 -4
- package/dist/composables/useToast.d.ts +7 -4
- package/dist/index.d.ts +1 -0
- package/dist/m3ui-vue.css +1 -1
- package/dist/m3ui.js +1316 -983
- package/dist/m3ui.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/MCircleProgressBar.vue +352 -0
- package/src/components/MColorPicker.vue +1 -1
- package/src/components/MColorPickerModal.vue +1 -1
- package/src/components/MNotificationHost.vue +22 -2
- package/src/components/MProgressBar.vue +200 -75
- package/src/components/MSnackbar.vue +24 -2
- package/src/composables/useNotification.ts +21 -4
- package/src/composables/useToast.ts +21 -4
- package/src/index.ts +1 -0
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-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-2210a491]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-2210a491],.nd-leave-to .nd-scrim[data-v-2210a491]{opacity:0}.nd-panel[data-v-2210a491]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel-left[data-v-2210a491],.nd-leave-to .nd-panel-left[data-v-2210a491]{transform:translate(-100%)}.nd-enter-from .nd-panel-right[data-v-2210a491],.nd-leave-to .nd-panel-right[data-v-2210a491]{transform:translate(100%)}.nd-enter-from .nd-panel-top[data-v-2210a491],.nd-leave-to .nd-panel-top[data-v-2210a491]{transform:translateY(-100%)}.nd-enter-from .nd-panel-bottom[data-v-2210a491],.nd-leave-to .nd-panel-bottom[data-v-2210a491]{transform:translateY(100%)}.nd-section-grid[data-v-2210a491]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-2210a491]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-2210a491]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-2210a491]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-2210a491]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-2210a491]{opacity:0}.nd-section-leave-active[data-v-2210a491]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-2210a491]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-2210a491]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-2210a491]{opacity:0}.nd-inline[data-v-2210a491]{transition:width .3s cubic-bezier(.2,0,0,1);overflow:hidden}.nd-inline[data-v-2210a491]>*{min-width:var(--nd-width,18rem)}.nd-inline.nd-collapsed[data-v-2210a491]>*{min-width:0}.nd-toggle[data-v-2210a491]{align-items:center;display:flex}.nd-toggle-inner[data-v-2210a491]{flex-shrink:0;justify-content:center;align-items:center;width:72px;height:64px;display:flex}.nd-label[data-v-2210a491]{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.nd-inline.nd-collapsed .nd-label[data-v-2210a491],.nd-inline.nd-collapsed[data-v-2210a491] .nd-label{opacity:0;transition:opacity .1s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-2210a491]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-2210a491]{max-height:0}.nd-inline .nd-section-body[data-v-2210a491]>*,.nd-inline[data-v-2210a491] .nd-section-body>*{transition:padding .3s cubic-bezier(.2,0,0,1)}.nd-children-divider[data-v-2210a491]{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-2210a491]{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-741c7e4a]{grid-template-rows:1fr;padding-bottom:8px;display:grid}.toast-row>.toast-inner[data-v-741c7e4a]{min-height:0}.m3-toast-bot-enter-active[data-v-741c7e4a]{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-741c7e4a]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-bot-enter-from[data-v-741c7e4a]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-enter-from>.toast-inner[data-v-741c7e4a]{opacity:0;transform:translateY(20px)scale(.94)}.m3-toast-bot-leave-active[data-v-741c7e4a]{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-741c7e4a]{transition:opacity .18s,transform .18s}.m3-toast-bot-leave-to[data-v-741c7e4a]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-bot-leave-to>.toast-inner[data-v-741c7e4a]{opacity:0;transform:scale(.92)}.m3-toast-top-enter-active[data-v-741c7e4a]{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-741c7e4a]{transition:opacity .18s,transform .22s cubic-bezier(.2,0,0,1)}.m3-toast-top-enter-from[data-v-741c7e4a]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-enter-from>.toast-inner[data-v-741c7e4a]{opacity:0;transform:translateY(-20px)scale(.94)}.m3-toast-top-leave-active[data-v-741c7e4a]{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-741c7e4a]{transition:opacity .18s,transform .18s}.m3-toast-top-leave-to[data-v-741c7e4a]{grid-template-rows:0fr;padding-bottom:0}.m3-toast-top-leave-to>.toast-inner[data-v-741c7e4a]{opacity:0;transform:scale(.92)}.m3-badge-enter-active[data-v-741c7e4a]{transition:opacity .2s,transform .2s cubic-bezier(.34,1.56,.64,1)}.m3-badge-leave-active[data-v-741c7e4a]{transition:opacity .15s,transform .15s}.m3-badge-enter-from[data-v-741c7e4a],.m3-badge-leave-to[data-v-741c7e4a]{opacity:0;transform:scale(.5)}.m3-count-enter-active[data-v-741c7e4a]{transition:opacity .12s,transform .12s}.m3-count-leave-active[data-v-741c7e4a]{transition:opacity 80ms,transform 80ms}.m3-count-enter-from[data-v-741c7e4a]{opacity:0;transform:scale(1.5)translateY(-3px)}.m3-count-leave-to[data-v-741c7e4a]{opacity:0;transform:scale(.6)translateY(2px)}@keyframes m3-toast-progress-741c7e4a{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.notif-row[data-v-1b0d900b]{grid-template-rows:1fr;padding-bottom:6px;display:grid}.notif-row>.notif-inner[data-v-1b0d900b]{min-height:0}.m3-notif-bot-enter-active[data-v-1b0d900b]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-bot-enter-active>.notif-inner[data-v-1b0d900b]{transition:opacity .15s,transform .2s}.m3-notif-bot-enter-from[data-v-1b0d900b]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-enter-from>.notif-inner[data-v-1b0d900b]{opacity:0;transform:translateY(12px)scale(.95)}.m3-notif-bot-leave-active[data-v-1b0d900b]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-bot-leave-active>.notif-inner[data-v-1b0d900b]{transition:opacity .15s,transform .15s}.m3-notif-bot-leave-to[data-v-1b0d900b]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-bot-leave-to>.notif-inner[data-v-1b0d900b]{opacity:0;transform:scale(.93)}.m3-notif-top-enter-active[data-v-1b0d900b]{transition:grid-template-rows .2s,padding-bottom .2s;overflow:hidden}.m3-notif-top-enter-active>.notif-inner[data-v-1b0d900b]{transition:opacity .15s,transform .2s}.m3-notif-top-enter-from[data-v-1b0d900b]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-enter-from>.notif-inner[data-v-1b0d900b]{opacity:0;transform:translateY(-12px)scale(.95)}.m3-notif-top-leave-active[data-v-1b0d900b]{transition:grid-template-rows .25s,padding-bottom .25s;overflow:hidden}.m3-notif-top-leave-active>.notif-inner[data-v-1b0d900b]{transition:opacity .15s,transform .15s}.m3-notif-top-leave-to[data-v-1b0d900b]{grid-template-rows:0fr;padding-bottom:0}.m3-notif-top-leave-to>.notif-inner[data-v-1b0d900b]{opacity:0;transform:scale(.93)}.m3-badge-enter-active[data-v-1b0d900b]{transition:opacity .2s,transform .2s cubic-bezier(.34,1.56,.64,1)}.m3-badge-leave-active[data-v-1b0d900b]{transition:opacity .15s,transform .15s}.m3-badge-enter-from[data-v-1b0d900b],.m3-badge-leave-to[data-v-1b0d900b]{opacity:0;transform:scale(.5)}.m3-count-enter-active[data-v-1b0d900b]{transition:opacity .12s,transform .12s}.m3-count-leave-active[data-v-1b0d900b]{transition:opacity 80ms,transform 80ms}.m3-count-enter-from[data-v-1b0d900b]{opacity:0;transform:scale(1.5)translateY(-3px)}.m3-count-leave-to[data-v-1b0d900b]{opacity:0;transform:scale(.6)translateY(2px)}.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-6c22bde9]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-6c22bde9]::-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-6c22bde9]::-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-5b1c3387]{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.hue-slider[data-v-5b1c3387]::-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-5b1c3387]::-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-5b1c3387],.m3-cp-modal-leave-active[data-v-5b1c3387]{transition:opacity .15s}.m3-cp-modal-enter-from[data-v-5b1c3387],.m3-cp-modal-leave-to[data-v-5b1c3387]{opacity:0}.m3-cp-modal-enter-active .cp-box[data-v-5b1c3387],.m3-cp-modal-leave-active .cp-box[data-v-5b1c3387]{transition:transform .15s}.m3-cp-modal-enter-from .cp-box[data-v-5b1c3387],.m3-cp-modal-leave-to .cp-box[data-v-5b1c3387]{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-2210a491]{transition:opacity .28s}.nd-enter-from .nd-scrim[data-v-2210a491],.nd-leave-to .nd-scrim[data-v-2210a491]{opacity:0}.nd-panel[data-v-2210a491]{transition:transform .3s cubic-bezier(.2,0,0,1)}.nd-enter-from .nd-panel-left[data-v-2210a491],.nd-leave-to .nd-panel-left[data-v-2210a491]{transform:translate(-100%)}.nd-enter-from .nd-panel-right[data-v-2210a491],.nd-leave-to .nd-panel-right[data-v-2210a491]{transform:translate(100%)}.nd-enter-from .nd-panel-top[data-v-2210a491],.nd-leave-to .nd-panel-top[data-v-2210a491]{transform:translateY(-100%)}.nd-enter-from .nd-panel-bottom[data-v-2210a491],.nd-leave-to .nd-panel-bottom[data-v-2210a491]{transform:translateY(100%)}.nd-section-grid[data-v-2210a491]{grid-template-rows:1fr;display:grid}.nd-section-body[data-v-2210a491]{min-height:0;overflow:hidden}.nd-section-enter-active[data-v-2210a491]{transition:grid-template-rows .35s cubic-bezier(.2,0,0,1)}.nd-section-enter-active>.nd-section-body[data-v-2210a491]{transition:opacity .25s cubic-bezier(.2,0,0,1) 80ms}.nd-section-enter-from[data-v-2210a491]{grid-template-rows:0fr}.nd-section-enter-from>.nd-section-body[data-v-2210a491]{opacity:0}.nd-section-leave-active[data-v-2210a491]{transition:grid-template-rows .28s cubic-bezier(.4,0,1,1)}.nd-section-leave-active>.nd-section-body[data-v-2210a491]{transition:opacity .15s cubic-bezier(.4,0,1,1)}.nd-section-leave-to[data-v-2210a491]{grid-template-rows:0fr}.nd-section-leave-to>.nd-section-body[data-v-2210a491]{opacity:0}.nd-inline[data-v-2210a491]{transition:width .3s cubic-bezier(.2,0,0,1);overflow:hidden}.nd-inline[data-v-2210a491]>*{min-width:var(--nd-width,18rem)}.nd-inline.nd-collapsed[data-v-2210a491]>*{min-width:0}.nd-toggle[data-v-2210a491]{align-items:center;display:flex}.nd-toggle-inner[data-v-2210a491]{flex-shrink:0;justify-content:center;align-items:center;width:72px;height:64px;display:flex}.nd-label[data-v-2210a491]{transition:opacity .2s cubic-bezier(.2,0,0,1) 80ms}.nd-inline.nd-collapsed .nd-label[data-v-2210a491],.nd-inline.nd-collapsed[data-v-2210a491] .nd-label{opacity:0;transition:opacity .1s cubic-bezier(.2,0,0,1)}.nd-inline .nd-collapse-h[data-v-2210a491]{max-height:80px;transition:max-height .3s cubic-bezier(.2,0,0,1)}.nd-inline.nd-collapsed .nd-collapse-h[data-v-2210a491]{max-height:0}.nd-inline .nd-section-body[data-v-2210a491]>*,.nd-inline[data-v-2210a491] .nd-section-body>*{transition:padding .3s cubic-bezier(.2,0,0,1)}.nd-children-divider[data-v-2210a491]{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-2210a491]{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}}@keyframes m3-cpb-spin{0%{transform:rotate(-90deg)}to{transform:rotate(270deg)}}@keyframes m3-cpb-arc{0%,to{stroke-dasharray:18.8 232.5}50%{stroke-dasharray:176 75.3}}.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,352 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, ref, watch, onMounted, onUnmounted, useId } from "vue";
|
|
3
|
+
|
|
4
|
+
const props = withDefaults(
|
|
5
|
+
defineProps<{
|
|
6
|
+
value?: number;
|
|
7
|
+
indeterminate?: boolean;
|
|
8
|
+
color?: "primary" | "secondary" | "tertiary" | "error";
|
|
9
|
+
variant?: "circle" | "wavy";
|
|
10
|
+
label?: string;
|
|
11
|
+
size?: number;
|
|
12
|
+
thickness?: number;
|
|
13
|
+
}>(),
|
|
14
|
+
{
|
|
15
|
+
color: "primary",
|
|
16
|
+
variant: "wavy",
|
|
17
|
+
size: 80,
|
|
18
|
+
thickness: 3,
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const clampedValue = computed(() => Math.min(100, Math.max(0, props.value ?? 0)));
|
|
23
|
+
|
|
24
|
+
const svgColorMap: Record<"primary" | "secondary" | "tertiary" | "error", { fill: string; track: string }> = {
|
|
25
|
+
primary: { fill: "var(--color-primary)", track: "var(--color-primary-container)" },
|
|
26
|
+
secondary: { fill: "var(--color-secondary)", track: "var(--color-secondary-container)" },
|
|
27
|
+
tertiary: { fill: "var(--color-tertiary)", track: "var(--color-tertiary-container)" },
|
|
28
|
+
error: { fill: "var(--color-error)", track: "var(--color-error-container)" },
|
|
29
|
+
};
|
|
30
|
+
const svgColor = computed(() => svgColorMap[props.color]);
|
|
31
|
+
|
|
32
|
+
// ── Geometry ─────────────────────────────────────────────────────────────
|
|
33
|
+
const R = 40;
|
|
34
|
+
const CIRC = 2 * Math.PI * R;
|
|
35
|
+
const BUMPS = 12;
|
|
36
|
+
const SEGS = BUMPS * 20;
|
|
37
|
+
const AMP_FRAC = 0.055;
|
|
38
|
+
const WAVE_START = 10;
|
|
39
|
+
|
|
40
|
+
// thickness-derived values (all scale together)
|
|
41
|
+
const strokeW = computed(() => props.thickness);
|
|
42
|
+
// mask must cover: stroke/2 + wave amplitude (R*AMP_FRAC) on each side + small padding
|
|
43
|
+
const maskSW = computed(() => props.thickness + Math.ceil(2 * R * AMP_FRAC) + 2); // ≥ stroke+7
|
|
44
|
+
const edgeGap = computed(() => 0.75 + props.thickness * 0.25);
|
|
45
|
+
|
|
46
|
+
// Vue computed — the TARGET arc length the animation follows
|
|
47
|
+
const arcLen = computed(() => (clampedValue.value / 100) * CIRC);
|
|
48
|
+
|
|
49
|
+
function easeInOut(t: number) {
|
|
50
|
+
return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ── All animation state as plain JS variables (no Vue refs) ───────────────
|
|
54
|
+
//
|
|
55
|
+
// Why plain JS and not Vue refs?
|
|
56
|
+
// maskArcLen = displayedArcLen − 2*effGap. It combines:
|
|
57
|
+
// • displayedArcLen — must follow props.value smoothly (always)
|
|
58
|
+
// • effGap — driven by appearance/completion animations
|
|
59
|
+
// If we use CSS transitions for one part and rAF for the other they fight.
|
|
60
|
+
// Solution: run EVERYTHING in the same rAF tick.
|
|
61
|
+
// • displayedArcLen uses exponential smoothing (~300ms feel, matches CSS ease)
|
|
62
|
+
// • effGap changes come from the animation factors below
|
|
63
|
+
// DOM is updated via template refs (setAttribute), bypassing Vue's scheduler.
|
|
64
|
+
|
|
65
|
+
let displayedArcLen = 0; // smoothly follows arcLen.value (exponential, τ=130ms)
|
|
66
|
+
let appearanceF = 0; // 0=hidden 1=visible, animated at WAVE_START threshold
|
|
67
|
+
let gapF = 1; // 1=open 0=closed, animated during completion phase 1
|
|
68
|
+
let collapseF = 1; // 1=full 0=circle, animated during completion phase 2
|
|
69
|
+
let animPhase = 0;
|
|
70
|
+
|
|
71
|
+
// Per-animation: { from, to, t0 (startTime, -1=idle), dur }
|
|
72
|
+
type Anim = { from: number; to: number; t0: number; dur: number };
|
|
73
|
+
const appearAnim: Anim = { from: 0, to: 0, t0: -1, dur: 500 };
|
|
74
|
+
const gapAnim: Anim = { from: 1, to: 1, t0: -1, dur: 300 };
|
|
75
|
+
const collapseAnim:Anim = { from: 1, to: 1, t0: -1, dur: 800 };
|
|
76
|
+
const restoreAnim: Anim = { from: 1, to: 1, t0: -1, dur: 400 };
|
|
77
|
+
|
|
78
|
+
function startAnim(a: Anim, from: number, to: number, now: number) {
|
|
79
|
+
a.from = from; a.to = to; a.t0 = now;
|
|
80
|
+
}
|
|
81
|
+
function tickAnim(a: Anim, now: number): number {
|
|
82
|
+
if (a.t0 < 0) return a.to;
|
|
83
|
+
const t = Math.min(1, (now - a.t0) / a.dur);
|
|
84
|
+
const v = a.from + (a.to - a.from) * easeInOut(t);
|
|
85
|
+
if (t >= 1) a.t0 = -1;
|
|
86
|
+
return v;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ── Watchers — write to plain JS anim objects, NOT to Vue refs ────────────
|
|
90
|
+
watch(clampedValue, (v, prev) => {
|
|
91
|
+
if (props.indeterminate) return;
|
|
92
|
+
if (prev <= WAVE_START && v > WAVE_START) startAnim(appearAnim, appearanceF, 1, performance.now());
|
|
93
|
+
if (prev > WAVE_START && v <= WAVE_START) startAnim(appearAnim, appearanceF, 0, performance.now());
|
|
94
|
+
|
|
95
|
+
if (v === 100) {
|
|
96
|
+
// Snap appearance so collapse never starts mid-appear
|
|
97
|
+
appearanceF = 1; appearAnim.t0 = -1;
|
|
98
|
+
// Phase 1: close gap; tick will chain to phase 2 automatically
|
|
99
|
+
restoreAnim.t0 = -1;
|
|
100
|
+
startAnim(gapAnim, gapF, 0, performance.now());
|
|
101
|
+
collapseAnim.t0 = -1; collapseAnim.to = 1; collapseF = 1; // reset phase 2
|
|
102
|
+
} else if (prev === 100) {
|
|
103
|
+
gapAnim.t0 = -1; gapAnim.to = 1; // clear "to===0" sentinel
|
|
104
|
+
collapseAnim.t0 = -1; collapseAnim.to = 1;
|
|
105
|
+
restoreAnim.t0 = -1;
|
|
106
|
+
// Restore gap and collapse simultaneously from wherever they are
|
|
107
|
+
startAnim(restoreAnim, Math.min(gapF, collapseF), 1, performance.now());
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// ── Template refs for direct DOM updates ─────────────────────────────────
|
|
112
|
+
const maskCircleEl = ref<SVGCircleElement | null>(null);
|
|
113
|
+
const trackCircleEl = ref<SVGCircleElement | null>(null);
|
|
114
|
+
const wavePath = ref(buildPath(R * AMP_FRAC, 0));
|
|
115
|
+
|
|
116
|
+
// ── rAF tick — single source of truth for all visual updates ─────────────
|
|
117
|
+
let lastTime: number | null = null;
|
|
118
|
+
let rafId = 0;
|
|
119
|
+
const PHASE_PER_MS = (2 * Math.PI / BUMPS) / 90;
|
|
120
|
+
const ARC_TAU = 130; // ms time-constant for displayedArcLen smoothing
|
|
121
|
+
|
|
122
|
+
function tick(now: number) {
|
|
123
|
+
const dt = lastTime !== null ? now - lastTime : 0;
|
|
124
|
+
lastTime = now;
|
|
125
|
+
|
|
126
|
+
// 1. Advance wave phase
|
|
127
|
+
animPhase -= dt * PHASE_PER_MS;
|
|
128
|
+
|
|
129
|
+
// 2. Smooth arc (exponential: 90% in ≈300ms, equivalent feel to CSS ease-out)
|
|
130
|
+
if (dt > 0) {
|
|
131
|
+
const k = 1 - Math.exp(-dt / ARC_TAU);
|
|
132
|
+
displayedArcLen += (arcLen.value - displayedArcLen) * k;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// 3. Advance appearance animation
|
|
136
|
+
appearanceF = tickAnim(appearAnim, now);
|
|
137
|
+
|
|
138
|
+
// 4. Advance completion sequence
|
|
139
|
+
// Phase 1 (gap closing) chains automatically into Phase 2 (wave collapse)
|
|
140
|
+
if (gapAnim.t0 >= 0 || gapAnim.to === 0) {
|
|
141
|
+
gapF = tickAnim(gapAnim, now);
|
|
142
|
+
if (gapAnim.t0 < 0 && gapF <= 0 && collapseAnim.t0 < 0 && collapseAnim.to !== 0) {
|
|
143
|
+
// Phase 1 done — start phase 2
|
|
144
|
+
startAnim(collapseAnim, collapseF, 0, now);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (collapseAnim.t0 >= 0 || collapseAnim.to === 0) {
|
|
148
|
+
collapseF = tickAnim(collapseAnim, now);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// 5. Advance restore animation (undoes both gap and collapse)
|
|
152
|
+
if (restoreAnim.t0 >= 0) {
|
|
153
|
+
const r = tickAnim(restoreAnim, now);
|
|
154
|
+
gapF = r; collapseF = r;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 6. Compute derived visual values
|
|
158
|
+
const combined = appearanceF * collapseF;
|
|
159
|
+
const gap = edgeGap.value * combined * gapF;
|
|
160
|
+
const disp = displayedArcLen;
|
|
161
|
+
const dispGap = CIRC - disp;
|
|
162
|
+
|
|
163
|
+
// Mask circle
|
|
164
|
+
const maskedArc = Math.max(0, disp - 2 * gap);
|
|
165
|
+
const maskAngle = -90 + (gap / CIRC) * 360;
|
|
166
|
+
const mc = maskCircleEl.value;
|
|
167
|
+
if (mc) {
|
|
168
|
+
mc.setAttribute('stroke-dasharray', `${maskedArc.toFixed(2)} ${(CIRC - maskedArc).toFixed(2)}`);
|
|
169
|
+
mc.setAttribute('transform', `rotate(${maskAngle.toFixed(3)}, 50, 50)`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Track circle
|
|
173
|
+
const trackLen = Math.max(0, dispGap - 2 * gap);
|
|
174
|
+
const trackOff = Math.max(0, dispGap - gap);
|
|
175
|
+
const tc = trackCircleEl.value;
|
|
176
|
+
if (tc) {
|
|
177
|
+
tc.setAttribute('stroke-dasharray', `${trackLen.toFixed(2)} ${(CIRC - trackLen).toFixed(2)}`);
|
|
178
|
+
tc.setAttribute('stroke-dashoffset', trackOff.toFixed(2));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Wave path
|
|
182
|
+
wavePath.value = buildPath(R * AMP_FRAC * combined, animPhase);
|
|
183
|
+
|
|
184
|
+
rafId = requestAnimationFrame(tick);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function buildPath(amp: number, phase: number): string {
|
|
188
|
+
const pts: string[] = [];
|
|
189
|
+
for (let i = 0; i <= SEGS; i++) {
|
|
190
|
+
const theta = (2 * Math.PI * i) / SEGS - Math.PI / 2;
|
|
191
|
+
const rr = R + amp * Math.sin(BUMPS * theta + phase);
|
|
192
|
+
const x = 50 + rr * Math.cos(theta);
|
|
193
|
+
const y = 50 + rr * Math.sin(theta);
|
|
194
|
+
pts.push(`${i === 0 ? "M" : "L"}${x.toFixed(2)},${y.toFixed(2)}`);
|
|
195
|
+
}
|
|
196
|
+
return pts.join("") + "Z";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function startRaf() { if (!rafId) rafId = requestAnimationFrame(tick); }
|
|
200
|
+
function stopRaf() {
|
|
201
|
+
cancelAnimationFrame(rafId);
|
|
202
|
+
rafId = 0; lastTime = null;
|
|
203
|
+
// Reset anim objects
|
|
204
|
+
appearAnim.t0 = gapAnim.t0 = collapseAnim.t0 = restoreAnim.t0 = -1;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function initWavy() {
|
|
208
|
+
const v = clampedValue.value;
|
|
209
|
+
displayedArcLen = arcLen.value;
|
|
210
|
+
appearanceF = 0; gapF = 1; collapseF = 1;
|
|
211
|
+
appearAnim.t0 = gapAnim.t0 = collapseAnim.t0 = restoreAnim.t0 = -1;
|
|
212
|
+
appearAnim.to = 0; gapAnim.to = 1; collapseAnim.to = 1;
|
|
213
|
+
if (v === 100) { appearanceF = 1; gapF = 0; collapseF = 0; gapAnim.to = 0; collapseAnim.to = 0; }
|
|
214
|
+
else if (v > WAVE_START) { appearanceF = 1; appearAnim.to = 1; }
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
onMounted(() => {
|
|
218
|
+
if (props.variant === "wavy" && !props.indeterminate) {
|
|
219
|
+
initWavy();
|
|
220
|
+
startRaf();
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
onUnmounted(stopRaf);
|
|
224
|
+
watch(() => props.variant, (v) => {
|
|
225
|
+
if (v === "wavy" && !props.indeterminate) { initWavy(); startRaf(); }
|
|
226
|
+
else stopRaf();
|
|
227
|
+
});
|
|
228
|
+
watch(() => props.indeterminate, (v) => {
|
|
229
|
+
if (v) stopRaf();
|
|
230
|
+
else if (props.variant === "wavy") { initWavy(); startRaf(); }
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
const maskId = useId();
|
|
234
|
+
</script>
|
|
235
|
+
|
|
236
|
+
<template>
|
|
237
|
+
<div class="inline-flex flex-col items-center gap-1">
|
|
238
|
+
<span v-if="label" class="text-label-small text-on-surface-variant">{{ label }}</span>
|
|
239
|
+
|
|
240
|
+
<div class="relative">
|
|
241
|
+
<svg
|
|
242
|
+
:width="size" :height="size"
|
|
243
|
+
viewBox="0 0 100 100"
|
|
244
|
+
fill="none"
|
|
245
|
+
role="progressbar"
|
|
246
|
+
:aria-valuenow="indeterminate ? undefined : clampedValue"
|
|
247
|
+
aria-valuemin="0" aria-valuemax="100"
|
|
248
|
+
>
|
|
249
|
+
<!-- ── Indeterminate — same for both variants ─────────────────── -->
|
|
250
|
+
<template v-if="indeterminate">
|
|
251
|
+
<circle cx="50" cy="50" :r="R" fill="none" :stroke-width="strokeW"
|
|
252
|
+
:style="{ stroke: svgColor.track }"
|
|
253
|
+
/>
|
|
254
|
+
<circle cx="50" cy="50" :r="R" fill="none" :stroke-width="strokeW"
|
|
255
|
+
stroke-linecap="round"
|
|
256
|
+
:style="{ stroke: svgColor.fill, transformOrigin: '50px 50px', animation: 'm3-cpb-spin 1.4s linear infinite, m3-cpb-arc 3s ease-in-out infinite' }"
|
|
257
|
+
/>
|
|
258
|
+
</template>
|
|
259
|
+
|
|
260
|
+
<!-- ── Wavy variant ────────────────────────────────────────────── -->
|
|
261
|
+
<template v-else-if="variant === 'wavy'">
|
|
262
|
+
<defs>
|
|
263
|
+
<mask :id="maskId" maskUnits="userSpaceOnUse">
|
|
264
|
+
<rect x="0" y="0" width="100" height="100" fill="black" />
|
|
265
|
+
<circle
|
|
266
|
+
ref="maskCircleEl"
|
|
267
|
+
cx="50" cy="50" :r="R"
|
|
268
|
+
fill="none" :stroke-width="maskSW" stroke="white"
|
|
269
|
+
stroke-dasharray="0 251"
|
|
270
|
+
transform="rotate(-90, 50, 50)"
|
|
271
|
+
/>
|
|
272
|
+
</mask>
|
|
273
|
+
</defs>
|
|
274
|
+
|
|
275
|
+
<circle
|
|
276
|
+
ref="trackCircleEl"
|
|
277
|
+
cx="50" cy="50" :r="R"
|
|
278
|
+
fill="none" :stroke-width="strokeW"
|
|
279
|
+
:style="{ stroke: svgColor.track }"
|
|
280
|
+
stroke-dasharray="251 0"
|
|
281
|
+
transform="rotate(-90, 50, 50)"
|
|
282
|
+
/>
|
|
283
|
+
|
|
284
|
+
<path
|
|
285
|
+
:d="wavePath"
|
|
286
|
+
fill="none" :stroke-width="strokeW"
|
|
287
|
+
stroke-linecap="round" stroke-linejoin="round"
|
|
288
|
+
:mask="`url(#${maskId})`"
|
|
289
|
+
:style="{ stroke: svgColor.fill }"
|
|
290
|
+
/>
|
|
291
|
+
</template>
|
|
292
|
+
|
|
293
|
+
<!-- ── Circle variant ────────────────────────────────────────── -->
|
|
294
|
+
<template v-else-if="!indeterminate">
|
|
295
|
+
<circle cx="50" cy="50" :r="R" fill="none"
|
|
296
|
+
:stroke-width="strokeW" :style="{ stroke: svgColor.track }"
|
|
297
|
+
/>
|
|
298
|
+
<circle cx="50" cy="50" :r="R" fill="none"
|
|
299
|
+
:stroke-width="strokeW"
|
|
300
|
+
stroke-linecap="round"
|
|
301
|
+
:style="{
|
|
302
|
+
stroke: svgColor.fill,
|
|
303
|
+
strokeDasharray: `${arcLen.toFixed(2)} ${CIRC}`,
|
|
304
|
+
transform: 'rotate(-90deg)',
|
|
305
|
+
transformOrigin: '50px 50px',
|
|
306
|
+
transition: 'stroke-dasharray 300ms ease',
|
|
307
|
+
}"
|
|
308
|
+
/>
|
|
309
|
+
</template>
|
|
310
|
+
|
|
311
|
+
<!-- Percentage label — hidden when indeterminate or slot content provided -->
|
|
312
|
+
<text
|
|
313
|
+
v-if="!indeterminate && !$slots.default"
|
|
314
|
+
x="50" y="50"
|
|
315
|
+
text-anchor="middle" dominant-baseline="middle"
|
|
316
|
+
:style="{
|
|
317
|
+
fill: svgColor.fill,
|
|
318
|
+
fontSize: `${size < 60 ? 11 : 14}px`,
|
|
319
|
+
fontWeight: '600',
|
|
320
|
+
fontFamily: 'Roboto, sans-serif',
|
|
321
|
+
}"
|
|
322
|
+
>{{ clampedValue }}%</text>
|
|
323
|
+
</svg>
|
|
324
|
+
|
|
325
|
+
<!-- Slot content centered inside the ring -->
|
|
326
|
+
<div
|
|
327
|
+
v-if="$slots.default"
|
|
328
|
+
class="absolute inset-0 flex items-center justify-center"
|
|
329
|
+
>
|
|
330
|
+
<slot />
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</template>
|
|
335
|
+
|
|
336
|
+
<style>
|
|
337
|
+
/* Continuous rotation — linear so speed never changes */
|
|
338
|
+
@keyframes m3-cpb-spin {
|
|
339
|
+
from { transform: rotate(-90deg); }
|
|
340
|
+
to { transform: rotate(270deg); }
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
Arc size oscillates between ~7 % and ~70 % of the circumference (CIRC ≈ 251.3).
|
|
345
|
+
Combined with the spin at a different period (1.4 s vs 1.05 s, ratio 4:3),
|
|
346
|
+
head and tail appear to move independently — matching the M3 indeterminate feel.
|
|
347
|
+
*/
|
|
348
|
+
@keyframes m3-cpb-arc {
|
|
349
|
+
0%, 100% { stroke-dasharray: 18.8 232.5; }
|
|
350
|
+
50% { stroke-dasharray: 176 75.3; }
|
|
351
|
+
}
|
|
352
|
+
</style>
|
|
@@ -215,7 +215,7 @@ onUnmounted(() => {
|
|
|
215
215
|
<div
|
|
216
216
|
ref="satBrightEl"
|
|
217
217
|
class="relative mb-3 h-40 w-full cursor-crosshair overflow-hidden rounded-lg"
|
|
218
|
-
:style="{ background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${hueColor})
|
|
218
|
+
:style="{ background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${hueColor})`, touchAction: 'none' }"
|
|
219
219
|
@pointerdown="onSBPointerDown"
|
|
220
220
|
@pointermove="onSBPointerMove"
|
|
221
221
|
@pointerup="onSBPointerUp"
|
|
@@ -171,7 +171,7 @@ function onKeydown(e: KeyboardEvent) { if (e.key === 'Escape') cancel() }
|
|
|
171
171
|
<div
|
|
172
172
|
ref="satBrightEl"
|
|
173
173
|
class="relative mb-3 h-44 w-full cursor-crosshair overflow-hidden rounded-lg"
|
|
174
|
-
:style="{ background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${hueColor})
|
|
174
|
+
:style="{ background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${hueColor})`, touchAction: 'none' }"
|
|
175
175
|
@pointerdown="onSBPointerDown"
|
|
176
176
|
@pointermove="onSBPointerMove"
|
|
177
177
|
@pointerup="onSBPointerUp"
|
|
@@ -49,14 +49,25 @@ const getStyle = (variant: string) => variantStyles[variant] ?? variantStyles.in
|
|
|
49
49
|
<template>
|
|
50
50
|
<div :class="containerClass">
|
|
51
51
|
<TransitionGroup :name="isTop ? 'm3-notif-top' : 'm3-notif-bot'">
|
|
52
|
-
<div v-for="n in notifications" :key="n.id" class="notif-row w-full min-w-56 max-w-sm">
|
|
52
|
+
<div v-for="n in notifications" :key="n.id" class="notif-row relative w-full min-w-56 max-w-sm">
|
|
53
|
+
<Transition name="m3-badge">
|
|
54
|
+
<span
|
|
55
|
+
v-if="n.count >= 2"
|
|
56
|
+
class="absolute -top-1.5 -right-1.5 z-10 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-none text-on-primary shadow-elevation-1"
|
|
57
|
+
>
|
|
58
|
+
<Transition name="m3-count" mode="out-in">
|
|
59
|
+
<span :key="n.count">{{ n.count }}</span>
|
|
60
|
+
</Transition>
|
|
61
|
+
</span>
|
|
62
|
+
</Transition>
|
|
63
|
+
|
|
53
64
|
<div
|
|
54
65
|
class="notif-inner pointer-events-auto flex items-center gap-2.5 rounded px-4 py-3 shadow-elevation-2"
|
|
55
66
|
:class="getStyle(n.variant).bg"
|
|
56
67
|
>
|
|
57
68
|
<MSpinner v-if="n.loading" :size="18" class="shrink-0" />
|
|
58
69
|
<MIcon
|
|
59
|
-
v-else
|
|
70
|
+
v-else-if="n.icon !== null"
|
|
60
71
|
:name="n.icon ?? getStyle(n.variant).iconName"
|
|
61
72
|
:size="18"
|
|
62
73
|
class="shrink-0"
|
|
@@ -160,4 +171,13 @@ const getStyle = (variant: string) => variantStyles[variant] ?? variantStyles.in
|
|
|
160
171
|
opacity: 0;
|
|
161
172
|
transform: scale(0.93);
|
|
162
173
|
}
|
|
174
|
+
|
|
175
|
+
.m3-badge-enter-active { transition: opacity 0.2s ease, transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1); }
|
|
176
|
+
.m3-badge-leave-active { transition: opacity 0.15s ease, transform 0.15s ease; }
|
|
177
|
+
.m3-badge-enter-from, .m3-badge-leave-to { opacity: 0; transform: scale(0.5); }
|
|
178
|
+
|
|
179
|
+
.m3-count-enter-active { transition: opacity 0.12s ease, transform 0.12s ease; }
|
|
180
|
+
.m3-count-leave-active { transition: opacity 0.08s ease, transform 0.08s ease; }
|
|
181
|
+
.m3-count-enter-from { opacity: 0; transform: scale(1.5) translateY(-3px); }
|
|
182
|
+
.m3-count-leave-to { opacity: 0; transform: scale(0.6) translateY(2px); }
|
|
163
183
|
</style>
|