morya-ui 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/Renderable-DHU4Jcfw.js +20 -0
  3. package/dist/component-registry.d.ts.map +1 -1
  4. package/dist/components/Carousel/Carousel.vue.d.ts +1 -1
  5. package/dist/components/ConfirmPopup/ConfirmPopup.vue.d.ts +1 -1
  6. package/dist/components/Loading/Loading.vue.d.ts +25 -0
  7. package/dist/components/Loading/Loading.vue.d.ts.map +1 -0
  8. package/dist/components/Loading/LoadingIndicator.vue.d.ts +13 -0
  9. package/dist/components/Loading/LoadingIndicator.vue.d.ts.map +1 -0
  10. package/dist/components/Loading/directive.d.ts +12 -0
  11. package/dist/components/Loading/directive.d.ts.map +1 -0
  12. package/dist/components/Loading/index.d.ts +8 -0
  13. package/dist/components/Loading/index.d.ts.map +1 -0
  14. package/dist/components/Loading/loading.d.ts +35 -0
  15. package/dist/components/Loading/loading.d.ts.map +1 -0
  16. package/dist/components/Loading/styles.css +386 -0
  17. package/dist/components/Loading/types.d.ts +74 -0
  18. package/dist/components/Loading/types.d.ts.map +1 -0
  19. package/dist/components/Loading/useLoading.d.ts +11 -0
  20. package/dist/components/Loading/useLoading.d.ts.map +1 -0
  21. package/dist/components/Page/PageContent.vue.d.ts +2 -2
  22. package/dist/components/ProgressSpinner/ProgressSpinner.vue.d.ts +1 -1
  23. package/dist/components/Rating/Rating.vue.d.ts +1 -1
  24. package/dist/components/Table/Table.vue.d.ts +1 -1
  25. package/dist/confirm-dialog/index.js +9 -9
  26. package/dist/content-h8POj44-.js +28 -0
  27. package/dist/index.d.ts +8 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4152 -3697
  30. package/dist/loading/index.js +467 -0
  31. package/dist/loading/style.css +1377 -0
  32. package/dist/loading/style.js +3 -0
  33. package/dist/message/index.js +7 -6
  34. package/dist/resolver-map.d.ts.map +1 -1
  35. package/dist/resolver.js +1 -0
  36. package/dist/shared/config.d.ts.map +1 -1
  37. package/dist/styles.css +1 -1
  38. package/dist/toast/index.js +12 -11
  39. package/package.json +9 -2
  40. package/dist/Renderable-BaaCI4tS.js +0 -45
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # morya-ui
2
2
 
3
+ ## 0.2.8
4
+
5
+ ### 新功能
6
+
7
+ - 新增 Loading 加载组件
8
+
9
+ ### 文档
10
+
11
+ - 补充 Loading 中英文文档与示例
12
+ - update quick start guide for kebab-case imports and dts configuration
13
+
14
+ ### 变更
15
+
16
+ - stop copying docs into consumer apps
17
+ - stop copying design tokens and page examples
18
+
3
19
  ## 0.2.7
4
20
 
5
21
  ### 新功能
@@ -0,0 +1,20 @@
1
+ import { i as e } from "./content-h8POj44-.js";
2
+ import { defineComponent as t } from "vue";
3
+ //#region src/shared/Renderable.ts
4
+ var n = t({
5
+ name: "MRenderable",
6
+ props: { value: {
7
+ type: [
8
+ String,
9
+ Number,
10
+ Object,
11
+ Function
12
+ ],
13
+ required: !0
14
+ } },
15
+ setup(t) {
16
+ return () => e(t.value);
17
+ }
18
+ });
19
+ //#endregion
20
+ export { n as t };
@@ -1 +1 @@
1
- {"version":3,"file":"component-registry.d.ts","sourceRoot":"","sources":["../src/component-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAyGpC,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAwGjD,CAAA;AAED,eAAO,MAAM,eAAe,UAA2B,CAAA"}
1
+ {"version":3,"file":"component-registry.d.ts","sourceRoot":"","sources":["../src/component-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AA0GpC,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAyGjD,CAAA;AAED,eAAO,MAAM,eAAe,UAA2B,CAAA"}
@@ -12,8 +12,8 @@ declare const __VLS_base: DefineComponent<CarouselProps, {}, {}, {}, {}, Compone
12
12
  }, string, PublicProps, Readonly<CarouselProps> & Readonly<{
13
13
  "onUpdate:page"?: ((value: number) => any) | undefined;
14
14
  }>, {
15
- numVisible: number;
16
15
  circular: boolean;
16
+ numVisible: number;
17
17
  autoplay: boolean;
18
18
  interval: number;
19
19
  showArrows: boolean;
@@ -15,12 +15,12 @@ declare const __VLS_base: DefineComponent<ConfirmPopupProps, {}, {}, {}, {}, Com
15
15
  }>, {
16
16
  modelValue: boolean;
17
17
  teleport: boolean;
18
+ target: HTMLElement | null;
18
19
  position: {
19
20
  top: number;
20
21
  left: number;
21
22
  } | null;
22
23
  placement: ConfirmPopupPlacement;
23
- target: HTMLElement | null;
24
24
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
25
25
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
26
26
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,25 @@
1
+ import { LoadingProps } from './types';
2
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
3
+ declare var __VLS_1: {}, __VLS_15: {}, __VLS_34: {};
4
+ type __VLS_Slots = {} & {
5
+ default?: (props: typeof __VLS_1) => any;
6
+ } & {
7
+ indicator?: (props: typeof __VLS_15) => any;
8
+ } & {
9
+ indicator?: (props: typeof __VLS_34) => any;
10
+ };
11
+ declare const __VLS_base: DefineComponent<LoadingProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<LoadingProps> & Readonly<{}>, {
12
+ loading: boolean;
13
+ fullscreen: boolean;
14
+ lock: boolean;
15
+ delay: number;
16
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
17
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
20
+ type __VLS_WithSlots<T, S> = T & {
21
+ new (): {
22
+ $slots: S;
23
+ };
24
+ };
25
+ //# sourceMappingURL=Loading.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.vue.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/Loading.vue"],"names":[],"mappings":";AA8JA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAmR3C,QAAA,IAAI,OAAO,IAAU,EAAE,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AAClE,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GAC5C;IAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC/C;IAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAMlD,QAAA,MAAM,UAAU;;;;;6EAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { MSizeInput } from '../../shared/types';
2
+ import { LoadingEffect } from './types';
3
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
4
+ type __VLS_Props = {
5
+ effect?: LoadingEffect;
6
+ text?: string;
7
+ ariaLabel?: string;
8
+ size?: MSizeInput;
9
+ };
10
+ declare const __VLS_export: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
13
+ //# sourceMappingURL=LoadingIndicator.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingIndicator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/LoadingIndicator.vue"],"names":[],"mappings":";AA2FA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAS5C,KAAK,WAAW,GAAG;IACjB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAC;AA8KF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,12 @@
1
+ import { Directive } from 'vue';
2
+ import { LoadingBinding } from './types';
3
+ /**
4
+ * `v-loading` directive.
5
+ *
6
+ * ```vue
7
+ * <div v-loading="loading" m-loading-text="加载中" m-loading-effect="wave" />
8
+ * <div v-loading.fullscreen.lock="loading" />
9
+ * ```
10
+ */
11
+ export declare const vLoading: Directive<HTMLElement, boolean | LoadingBinding>;
12
+ //# sourceMappingURL=directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/directive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,KAAK,CAAA;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,SAAS,CAAA;AA0F5D;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,GAAG,cAAc,CASrE,CAAA"}
@@ -0,0 +1,8 @@
1
+ export { vLoading } from './directive';
2
+ export { loading } from './loading';
3
+ export { default as MLoading } from './Loading.vue';
4
+ export type { LoadingBinding, LoadingEffect, LoadingProps, LoadingServiceInstance, LoadingServiceOptions, } from './types';
5
+ export { isLoadingEffect, LOADING_EFFECTS, normalizeLoadingEffect } from './types';
6
+ export { useLoading } from './useLoading';
7
+ export type { UseLoadingReturn } from './useLoading';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAChB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AACnD,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { AppContext } from 'vue';
2
+ import { MRenderable } from '../../shared/content';
3
+ import { MSizeInput } from '../../shared/types';
4
+ import { LoadingEffect, LoadingServiceInstance, LoadingServiceOptions } from './types';
5
+ export interface LoadingMaskInstance extends LoadingServiceInstance {
6
+ update: (next: Partial<LoadingMaskOptions>) => void;
7
+ /** Tear down without waiting for leave transition. */
8
+ destroy: () => void;
9
+ }
10
+ export interface LoadingMaskOptions {
11
+ target: HTMLElement;
12
+ text?: string;
13
+ effect?: LoadingEffect;
14
+ background?: string;
15
+ customClass?: string;
16
+ size?: MSizeInput;
17
+ fullscreen?: boolean;
18
+ lock?: boolean;
19
+ /** Position the mask over `target`, but mount it on `document.body`. */
20
+ body?: boolean;
21
+ delay?: number;
22
+ spinner?: MRenderable;
23
+ appContext?: AppContext | null;
24
+ }
25
+ export declare function lockLoadingScroll(): void;
26
+ export declare function unlockLoadingScroll(): void;
27
+ export declare function mountLoadingMask(options: LoadingMaskOptions): LoadingMaskInstance;
28
+ export declare function loadingService(options?: LoadingServiceOptions): LoadingServiceInstance;
29
+ /** Imperative loading service: `loading.service({ text: '加载中' })`. */
30
+ export declare const loading: {
31
+ service: typeof loadingService;
32
+ };
33
+ /** @internal */
34
+ export declare function resetLoadingService(): void;
35
+ //# sourceMappingURL=loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/loading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAM3F,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAA;IACnD,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAC/B;AA8BD,wBAAgB,iBAAiB,SAKhC;AAED,wBAAgB,mBAAmB,SAIlC;AA4BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CA0MjF;AAMD,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,sBAAsB,CAsB1F;AAED,sEAAsE;AACtE,eAAO,MAAM,OAAO;;CAEnB,CAAA;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,SAKlC"}
@@ -0,0 +1,386 @@
1
+ /* —— Feedback: Loading —— */
2
+
3
+ .m-loading {
4
+ position: relative;
5
+ }
6
+
7
+ .m-loading--fullscreen {
8
+ inset: 0;
9
+ position: fixed;
10
+ z-index: var(--m-loading-z-index, calc(var(--m-z-base) + 200));
11
+ }
12
+
13
+ .m-loading__content {
14
+ position: relative;
15
+ }
16
+
17
+ .m-loading--active .m-loading__content {
18
+ pointer-events: none;
19
+ user-select: none;
20
+ }
21
+
22
+ .m-loading-parent--relative {
23
+ position: relative;
24
+ }
25
+
26
+ .m-loading-mask {
27
+ --m-loading-z-index: calc(var(--m-z-base) + 200);
28
+ --m-loading-mask-bg: color-mix(in srgb, var(--m-color-surface) 80%, transparent);
29
+ align-items: center;
30
+ background: var(--m-loading-mask-bg);
31
+ display: flex;
32
+ inset: 0;
33
+ justify-content: center;
34
+ position: absolute;
35
+ z-index: 10;
36
+ }
37
+
38
+ .m-loading-mask--fullscreen,
39
+ .m-loading-mask--body {
40
+ position: fixed;
41
+ z-index: var(--m-loading-z-index);
42
+ }
43
+
44
+ .m-loading-mask--body {
45
+ inset: auto;
46
+ }
47
+
48
+ .m-loading-enter-active {
49
+ transition: opacity var(--m-motion-enter) var(--m-motion-ease);
50
+ }
51
+
52
+ .m-loading-leave-active {
53
+ transition: opacity var(--m-motion-exit) var(--m-motion-ease);
54
+ }
55
+
56
+ .m-loading-enter-from,
57
+ .m-loading-leave-to {
58
+ opacity: 0;
59
+ }
60
+
61
+ .m-loading-indicator {
62
+ --m-loading-c1: var(--m-color-primary);
63
+ --m-loading-c2: color-mix(in srgb, var(--m-color-primary) 62%, white);
64
+ --m-loading-c3: var(--m-color-success);
65
+ --m-loading-c4: var(--m-color-warning);
66
+ --m-loading-c5: var(--m-color-danger);
67
+ --m-loading-c6: var(--m-color-text-muted);
68
+ --m-loading-spin: var(--m-motion-spin);
69
+ --m-loading-aurora-glow: 3s;
70
+ --m-loading-bounce: 0.6s;
71
+ --m-loading-wave: var(--m-motion-spin-medium);
72
+ --m-loading-pulse: 1.8s;
73
+ --m-loading-stardust: 1.6s;
74
+ --m-loading-circular-rotate: 2s;
75
+ --m-loading-circular-dash: var(--m-motion-spin-dash);
76
+ --m-loading-scale: 1;
77
+
78
+ align-items: center;
79
+ display: inline-flex;
80
+ flex-direction: column;
81
+ font-family: var(--m-font-sans);
82
+ gap: var(--m-space-3);
83
+ justify-content: center;
84
+ }
85
+
86
+ .m-loading-indicator__graphic {
87
+ align-items: center;
88
+ display: inline-flex;
89
+ justify-content: center;
90
+ transform: scale(var(--m-loading-scale));
91
+ }
92
+
93
+ .m-loading-indicator__tip {
94
+ color: var(--m-color-text-muted);
95
+ font-size: var(--m-font-size-sm);
96
+ line-height: 1;
97
+ margin: 0;
98
+ }
99
+
100
+ .m-loading-indicator--small {
101
+ --m-loading-scale: 0.85;
102
+ }
103
+
104
+ .m-loading-indicator--large {
105
+ --m-loading-scale: 1.15;
106
+ }
107
+
108
+ .m-loading-aurora,
109
+ .m-loading-pulse,
110
+ .m-loading-stardust {
111
+ height: 3.75rem;
112
+ position: relative;
113
+ width: 3.75rem;
114
+ }
115
+
116
+ .m-loading-aurora__ring {
117
+ animation: m-loading-spin var(--m-loading-spin) cubic-bezier(0.5, 0, 0.5, 1) infinite;
118
+ border: 4px solid transparent;
119
+ border-bottom-color: var(--m-loading-c2);
120
+ border-left-color: var(--m-loading-c3);
121
+ border-radius: 50%;
122
+ border-right-color: var(--m-loading-c5);
123
+ border-top-color: var(--m-loading-c1);
124
+ box-sizing: border-box;
125
+ height: 100%;
126
+ position: relative;
127
+ width: 100%;
128
+ z-index: 2;
129
+ }
130
+
131
+ .m-loading-aurora__glow {
132
+ animation: m-loading-spin var(--m-loading-aurora-glow) linear infinite reverse;
133
+ background: conic-gradient(
134
+ from 0deg,
135
+ var(--m-loading-c1),
136
+ var(--m-loading-c5),
137
+ var(--m-loading-c2),
138
+ var(--m-loading-c3),
139
+ var(--m-loading-c1)
140
+ );
141
+ border-radius: 50%;
142
+ filter: blur(10px);
143
+ inset: -6px;
144
+ opacity: 0.22;
145
+ position: absolute;
146
+ z-index: 1;
147
+ }
148
+
149
+ .m-loading-bounce {
150
+ align-items: flex-end;
151
+ display: flex;
152
+ gap: var(--m-space-3);
153
+ height: 3.125rem;
154
+ }
155
+
156
+ .m-loading-bounce__ball {
157
+ animation: m-loading-bounce var(--m-loading-bounce) cubic-bezier(0.34, 1.2, 0.64, 1) infinite alternate;
158
+ background: var(--m-loading-c1);
159
+ border-radius: 50%;
160
+ display: block;
161
+ height: 1rem;
162
+ width: 1rem;
163
+ }
164
+
165
+ .m-loading-bounce__ball:nth-child(1) {
166
+ animation-delay: 0s;
167
+ background: var(--m-loading-c5);
168
+ }
169
+
170
+ .m-loading-bounce__ball:nth-child(2) {
171
+ animation-delay: 0.15s;
172
+ background: var(--m-loading-c2);
173
+ }
174
+
175
+ .m-loading-bounce__ball:nth-child(3) {
176
+ animation-delay: 0.3s;
177
+ background: var(--m-loading-c6);
178
+ }
179
+
180
+ .m-loading-wave {
181
+ align-items: center;
182
+ display: flex;
183
+ gap: 0.375rem;
184
+ height: 3.125rem;
185
+ }
186
+
187
+ .m-loading-wave__bar {
188
+ animation: m-loading-wave var(--m-loading-wave) ease-in-out infinite alternate;
189
+ background: var(--m-loading-c1);
190
+ border-radius: 0.375rem;
191
+ display: block;
192
+ height: 2.875rem;
193
+ transform-origin: center center;
194
+ width: 0.5rem;
195
+ }
196
+
197
+ .m-loading-wave__bar:nth-child(1) {
198
+ animation-delay: 0s;
199
+ background: var(--m-loading-c1);
200
+ }
201
+
202
+ .m-loading-wave__bar:nth-child(2) {
203
+ animation-delay: 0.09s;
204
+ background: var(--m-loading-c5);
205
+ }
206
+
207
+ .m-loading-wave__bar:nth-child(3) {
208
+ animation-delay: 0.18s;
209
+ background: var(--m-loading-c2);
210
+ }
211
+
212
+ .m-loading-wave__bar:nth-child(4) {
213
+ animation-delay: 0.27s;
214
+ background: var(--m-loading-c3);
215
+ }
216
+
217
+ .m-loading-wave__bar:nth-child(5) {
218
+ animation-delay: 0.36s;
219
+ background: var(--m-loading-c6);
220
+ }
221
+
222
+ .m-loading-pulse__ring {
223
+ animation: m-loading-pulse var(--m-loading-pulse) ease-out infinite;
224
+ border: 3px solid var(--m-loading-c2);
225
+ border-radius: 50%;
226
+ box-sizing: border-box;
227
+ inset: 0;
228
+ position: absolute;
229
+ }
230
+
231
+ .m-loading-pulse__ring:nth-child(1) {
232
+ animation-delay: 0s;
233
+ border-color: var(--m-loading-c1);
234
+ }
235
+
236
+ .m-loading-pulse__ring:nth-child(2) {
237
+ animation-delay: 0.45s;
238
+ border-color: var(--m-loading-c5);
239
+ }
240
+
241
+ .m-loading-pulse__ring:nth-child(3) {
242
+ animation-delay: 0.9s;
243
+ border-color: var(--m-loading-c2);
244
+ }
245
+
246
+ .m-loading-pulse__ring:nth-child(4) {
247
+ animation-delay: 1.35s;
248
+ border-color: var(--m-loading-c3);
249
+ }
250
+
251
+ .m-loading-stardust__dot {
252
+ --i: 0;
253
+ animation: m-loading-stardust var(--m-loading-stardust) ease-in-out infinite;
254
+ background: var(--m-loading-c1);
255
+ border-radius: 50%;
256
+ height: 0.5rem;
257
+ left: 50%;
258
+ position: absolute;
259
+ top: 50%;
260
+ transform: translate(-50%, -50%) rotate(calc(var(--i) * 45deg)) translateX(22px);
261
+ width: 0.5rem;
262
+ }
263
+
264
+ .m-loading-stardust__dot:nth-child(1) { animation-delay: 0s; background: var(--m-loading-c1); }
265
+ .m-loading-stardust__dot:nth-child(2) { animation-delay: 0.08s; background: var(--m-loading-c5); }
266
+ .m-loading-stardust__dot:nth-child(3) { animation-delay: 0.16s; background: var(--m-loading-c4); }
267
+ .m-loading-stardust__dot:nth-child(4) { animation-delay: 0.24s; background: var(--m-loading-c2); }
268
+ .m-loading-stardust__dot:nth-child(5) { animation-delay: 0.32s; background: var(--m-loading-c3); }
269
+ .m-loading-stardust__dot:nth-child(6) { animation-delay: 0.4s; background: var(--m-loading-c6); }
270
+ .m-loading-stardust__dot:nth-child(7) { animation-delay: 0.48s; background: color-mix(in srgb, var(--m-loading-c1) 55%, white); }
271
+ .m-loading-stardust__dot:nth-child(8) { animation-delay: 0.56s; background: var(--m-loading-c2); }
272
+
273
+ .m-loading-circular {
274
+ align-items: center;
275
+ display: inline-flex;
276
+ justify-content: center;
277
+ }
278
+
279
+ .m-loading-circular__svg {
280
+ animation: m-loading-circular-rotate var(--m-loading-circular-rotate) linear infinite;
281
+ display: inline-block;
282
+ height: 2.625rem;
283
+ width: 2.625rem;
284
+ }
285
+
286
+ .m-loading-circular__path {
287
+ animation: m-loading-circular-dash var(--m-loading-circular-dash) ease-in-out infinite;
288
+ fill: none;
289
+ stroke: var(--m-loading-c1);
290
+ stroke-linecap: round;
291
+ stroke-width: 2;
292
+ }
293
+
294
+ @keyframes m-loading-spin {
295
+ from { transform: rotate(0deg); }
296
+ to { transform: rotate(360deg); }
297
+ }
298
+
299
+ @keyframes m-loading-bounce {
300
+ from { transform: translateY(0) scale(1); }
301
+ to { transform: translateY(-34px) scale(1.1); }
302
+ }
303
+
304
+ @keyframes m-loading-wave {
305
+ from { transform: scaleY(0.26); }
306
+ to { transform: scaleY(1); }
307
+ }
308
+
309
+ @keyframes m-loading-pulse {
310
+ from { opacity: 1; transform: scale(0.15); }
311
+ to { opacity: 0; transform: scale(1.6); }
312
+ }
313
+
314
+ @keyframes m-loading-stardust {
315
+ 0%,
316
+ 100% {
317
+ opacity: 0.2;
318
+ transform: translate(-50%, -50%) rotate(calc(var(--i) * 45deg)) translateX(22px) scale(0.3);
319
+ }
320
+
321
+ 50% {
322
+ opacity: 1;
323
+ transform: translate(-50%, -50%) rotate(calc(var(--i) * 45deg + 180deg)) translateX(28px) scale(1.2);
324
+ }
325
+ }
326
+
327
+ @keyframes m-loading-circular-rotate {
328
+ to { transform: rotate(360deg); }
329
+ }
330
+
331
+ @keyframes m-loading-circular-dash {
332
+ 0% {
333
+ stroke-dasharray: 1, 200;
334
+ stroke-dashoffset: 0;
335
+ }
336
+
337
+ 50% {
338
+ stroke-dasharray: 90, 150;
339
+ stroke-dashoffset: -40px;
340
+ }
341
+
342
+ 100% {
343
+ stroke-dasharray: 90, 150;
344
+ stroke-dashoffset: -120px;
345
+ }
346
+ }
347
+
348
+ @media (prefers-reduced-motion: reduce) {
349
+ html:not([data-m-ignore-reduced-motion]) .m-loading-aurora__ring,
350
+ html:not([data-m-ignore-reduced-motion]) .m-loading-aurora__glow,
351
+ html:not([data-m-ignore-reduced-motion]) .m-loading-bounce__ball,
352
+ html:not([data-m-ignore-reduced-motion]) .m-loading-wave__bar,
353
+ html:not([data-m-ignore-reduced-motion]) .m-loading-pulse__ring,
354
+ html:not([data-m-ignore-reduced-motion]) .m-loading-stardust__dot,
355
+ html:not([data-m-ignore-reduced-motion]) .m-loading-circular__svg,
356
+ html:not([data-m-ignore-reduced-motion]) .m-loading-circular__path,
357
+ html:not([data-m-ignore-reduced-motion]) .m-loading-enter-active,
358
+ html:not([data-m-ignore-reduced-motion]) .m-loading-leave-active {
359
+ animation: none;
360
+ transition: none;
361
+ }
362
+ }
363
+
364
+ [data-m-motion="reduced"] .m-loading-aurora__ring,
365
+ [data-m-motion="reduced"] .m-loading-aurora__glow,
366
+ [data-m-motion="reduced"] .m-loading-bounce__ball,
367
+ [data-m-motion="reduced"] .m-loading-wave__bar,
368
+ [data-m-motion="reduced"] .m-loading-pulse__ring,
369
+ [data-m-motion="reduced"] .m-loading-stardust__dot,
370
+ [data-m-motion="reduced"] .m-loading-circular__svg,
371
+ [data-m-motion="reduced"] .m-loading-circular__path,
372
+ [data-m-motion="reduced"] .m-loading-enter-active,
373
+ [data-m-motion="reduced"] .m-loading-leave-active,
374
+ [data-m-motion="none"] .m-loading-aurora__ring,
375
+ [data-m-motion="none"] .m-loading-aurora__glow,
376
+ [data-m-motion="none"] .m-loading-bounce__ball,
377
+ [data-m-motion="none"] .m-loading-wave__bar,
378
+ [data-m-motion="none"] .m-loading-pulse__ring,
379
+ [data-m-motion="none"] .m-loading-stardust__dot,
380
+ [data-m-motion="none"] .m-loading-circular__svg,
381
+ [data-m-motion="none"] .m-loading-circular__path,
382
+ [data-m-motion="none"] .m-loading-enter-active,
383
+ [data-m-motion="none"] .m-loading-leave-active {
384
+ animation: none;
385
+ transition: none;
386
+ }
@@ -0,0 +1,74 @@
1
+ import { MRenderable } from '../../shared/content';
2
+ import { RootPassThrough } from '../../shared/passThrough';
3
+ import { MSizeInput } from '../../shared/types';
4
+ /** Built-in spinner graphics. */
5
+ export declare const LOADING_EFFECTS: readonly ["circular", "aurora", "bounce", "wave", "pulse", "stardust"];
6
+ export type LoadingEffect = (typeof LOADING_EFFECTS)[number];
7
+ export declare function isLoadingEffect(value: unknown): value is LoadingEffect;
8
+ export declare function normalizeLoadingEffect(value: unknown): LoadingEffect;
9
+ export interface LoadingProps {
10
+ pt?: RootPassThrough;
11
+ /**
12
+ * Whether the mask is visible when wrapping content or using `fullscreen`.
13
+ * A bare indicator (no default slot and not fullscreen) is always shown.
14
+ */
15
+ loading?: boolean;
16
+ /** Spinner graphic. Defaults to `circular`. */
17
+ effect?: LoadingEffect;
18
+ /** Caption under the spinner. Hidden when omitted. */
19
+ text?: string;
20
+ /** Accessible name. Falls back to `text`, then the locale `loading` string. */
21
+ ariaLabel?: string;
22
+ size?: MSizeInput;
23
+ /** Mask background. Any CSS color. */
24
+ background?: string;
25
+ /** Extra class on the mask. */
26
+ customClass?: string;
27
+ /** Cover the viewport (teleported to `body`). */
28
+ fullscreen?: boolean;
29
+ /** Prevent document scrolling while the mask is visible. */
30
+ lock?: boolean;
31
+ /** Delay in ms before showing the mask. */
32
+ delay?: number;
33
+ }
34
+ /** Options for `v-loading` when the binding is an object. */
35
+ export interface LoadingBinding {
36
+ loading?: boolean;
37
+ text?: string;
38
+ effect?: LoadingEffect;
39
+ background?: string;
40
+ customClass?: string;
41
+ size?: MSizeInput;
42
+ fullscreen?: boolean;
43
+ lock?: boolean;
44
+ body?: boolean;
45
+ delay?: number;
46
+ /** Custom indicator content. */
47
+ spinner?: MRenderable;
48
+ }
49
+ /** Options for `loading.service()`. */
50
+ export interface LoadingServiceOptions {
51
+ /** Element or selector to cover. Omitted means fullscreen. */
52
+ target?: string | HTMLElement;
53
+ /** Mount the mask on `document.body`, positioned over `target`. */
54
+ body?: boolean;
55
+ /** Cover the viewport. Defaults to `true` when `target` is omitted. */
56
+ fullscreen?: boolean;
57
+ /** Prevent document scrolling while open. */
58
+ lock?: boolean;
59
+ text?: string;
60
+ effect?: LoadingEffect;
61
+ background?: string;
62
+ customClass?: string;
63
+ size?: MSizeInput;
64
+ delay?: number;
65
+ /** Custom indicator content. When set, built-in effects are skipped. */
66
+ spinner?: MRenderable;
67
+ }
68
+ export interface LoadingServiceInstance {
69
+ close: () => void;
70
+ setText: (text: string) => void;
71
+ /** Immediate teardown without the leave transition. */
72
+ destroy: () => void;
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,iCAAiC;AACjC,eAAO,MAAM,eAAe,wEAAyE,CAAA;AAErG,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAI5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,eAAe,CAAA;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IAC7B,mEAAmE;IACnE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,uDAAuD;IACvD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB"}
@@ -0,0 +1,11 @@
1
+ import { LoadingServiceInstance, LoadingServiceOptions } from './types';
2
+ export interface UseLoadingReturn {
3
+ open: (options?: LoadingServiceOptions) => LoadingServiceInstance;
4
+ close: () => void;
5
+ setText: (text: string) => void;
6
+ }
7
+ /**
8
+ * Imperative loading helper that closes automatically when the caller unmounts.
9
+ */
10
+ export declare function useLoading(defaults?: LoadingServiceOptions): UseLoadingReturn;
11
+ //# sourceMappingURL=useLoading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoading.d.ts","sourceRoot":"","sources":["../../../src/components/Loading/useLoading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAI5E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,sBAAsB,CAAA;IACjE,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAE,qBAA0B,GAAG,gBAAgB,CAwBjF"}