vueless 0.0.530 → 0.0.532
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/package.json +1 -1
- package/types.ts +6 -0
- package/ui.button/storybook/stories.ts +2 -2
- package/ui.container-group/types.ts +0 -1
- package/ui.loader/ULoader.vue +21 -41
- package/ui.loader/storybook/Docs.mdx +2 -2
- package/ui.loader/storybook/{stories.js → stories.ts} +15 -7
- package/ui.loader/types.ts +47 -0
- package/ui.loader/{useAttrs.js → useAttrs.ts} +6 -3
- package/ui.loader-overlay/ULoaderOverlay.vue +23 -35
- package/ui.loader-overlay/storybook/Docs.mdx +2 -2
- package/ui.loader-overlay/storybook/{stories.js → stories.ts} +22 -7
- package/ui.loader-overlay/types.ts +42 -0
- package/ui.loader-overlay/{useAttrs.js → useAttrs.ts} +5 -2
- package/ui.loader-overlay/useLoaderOverlay.ts +42 -0
- package/ui.loader-overlay/{utilLoaderOverlay.js → utilLoaderOverlay.ts} +2 -2
- package/ui.loader-progress/ULoaderProgress.vue +34 -49
- package/ui.loader-progress/{config.js → config.ts} +1 -0
- package/ui.loader-progress/storybook/Docs.mdx +2 -2
- package/ui.loader-progress/storybook/{stories.js → stories.ts} +24 -7
- package/ui.loader-progress/types.ts +46 -0
- package/ui.loader-progress/useAttrs.ts +36 -0
- package/ui.loader-progress/useLoaderProgress.ts +81 -0
- package/ui.loader-progress/utilLoaderProgress.ts +49 -0
- package/web-types.json +55 -8
- package/ui.loader-overlay/useLoaderOverlay.js +0 -25
- package/ui.loader-progress/useAttrs.js +0 -15
- package/ui.loader-progress/useLoaderProgress.js +0 -65
- package/ui.loader-progress/utilLoaderProgress.js +0 -49
- /package/ui.loader/{config.js → config.ts} +0 -0
- /package/ui.loader/{constants.js → constants.ts} +0 -0
- /package/ui.loader-overlay/{config.js → config.ts} +0 -0
- /package/ui.loader-overlay/{constants.js → constants.ts} +0 -0
- /package/ui.loader-progress/{constants.js → constants.ts} +0 -0
package/package.json
CHANGED
package/types.ts
CHANGED
|
@@ -32,6 +32,9 @@ import UModalConfig from "./ui.container-modal/config.ts";
|
|
|
32
32
|
import UModalConfirmConfig from "./ui.container-modal-confirm/config.ts";
|
|
33
33
|
import UPageConfig from "./ui.container-page/config.ts";
|
|
34
34
|
import URowConfig from "./ui.container-row/config.ts";
|
|
35
|
+
import ULoaderConfig from "./ui.loader/config.ts";
|
|
36
|
+
import ULoaderOverlayConfig from "./ui.loader-overlay/config.ts";
|
|
37
|
+
import ULoaderProgressConfig from "./ui.loader-progress/config.ts";
|
|
35
38
|
|
|
36
39
|
import type { ComputedRef, MaybeRef, Ref } from "vue";
|
|
37
40
|
import type { Props } from "tippy.js";
|
|
@@ -175,6 +178,9 @@ export interface Components {
|
|
|
175
178
|
UModalConfirm?: Partial<typeof UModalConfirmConfig>;
|
|
176
179
|
UPage?: Partial<typeof UPageConfig>;
|
|
177
180
|
URow?: Partial<typeof URowConfig>;
|
|
181
|
+
ULoader?: Partial<typeof ULoaderConfig>;
|
|
182
|
+
ULoaderOverlay?: Partial<typeof ULoaderOverlayConfig>;
|
|
183
|
+
ULoaderProgress?: Partial<typeof ULoaderProgressConfig>;
|
|
178
184
|
}
|
|
179
185
|
|
|
180
186
|
export interface Directives {
|
|
@@ -170,11 +170,11 @@ export const IconProps: StoryFn<UButtonArgs> = (args) => ({
|
|
|
170
170
|
template: `
|
|
171
171
|
<URow no-mobile>
|
|
172
172
|
<UButton
|
|
173
|
-
|
|
173
|
+
left-icon="download"
|
|
174
174
|
label="Download"
|
|
175
175
|
/>
|
|
176
176
|
<UButton
|
|
177
|
-
|
|
177
|
+
right-icon="menu"
|
|
178
178
|
label="Menu"
|
|
179
179
|
/>
|
|
180
180
|
</URow>
|
package/ui.loader/ULoader.vue
CHANGED
|
@@ -1,54 +1,34 @@
|
|
|
1
|
-
<
|
|
2
|
-
<Transition v-bind="config.transition">
|
|
3
|
-
<div v-if="loading" v-bind="loaderAttrs">
|
|
4
|
-
<!-- @slot Use it to add something instead of the default loader. -->
|
|
5
|
-
<slot>
|
|
6
|
-
<div v-for="ellipse in ELLIPSES_AMOUNT" :key="ellipse" v-bind="ellipseAttrs" />
|
|
7
|
-
</slot>
|
|
8
|
-
</div>
|
|
9
|
-
</Transition>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script setup>
|
|
1
|
+
<script lang="ts" setup>
|
|
13
2
|
import { getDefault } from "../utils/ui.ts";
|
|
14
3
|
|
|
15
|
-
import { ULoader, ELLIPSES_AMOUNT } from "./constants.
|
|
16
|
-
import defaultConfig from "./config.
|
|
17
|
-
import useAttrs from "./useAttrs.
|
|
4
|
+
import { ULoader, ELLIPSES_AMOUNT } from "./constants.ts";
|
|
5
|
+
import defaultConfig from "./config.ts";
|
|
6
|
+
import useAttrs from "./useAttrs.ts";
|
|
7
|
+
|
|
8
|
+
import type { ULoaderProps } from "./types.ts";
|
|
18
9
|
|
|
19
10
|
defineOptions({ inheritAttrs: false });
|
|
20
11
|
|
|
21
|
-
const props = defineProps({
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
loading: {
|
|
26
|
-
type: Boolean,
|
|
27
|
-
default: getDefault(defaultConfig, ULoader).loading,
|
|
28
|
-
},
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Loader color.
|
|
32
|
-
* @values brand, grayscale, gray, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose, black, white
|
|
33
|
-
*/
|
|
34
|
-
color: {
|
|
35
|
-
type: String,
|
|
36
|
-
default: getDefault(defaultConfig, ULoader).color,
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Loader size.
|
|
41
|
-
* @values sm, md, lg
|
|
42
|
-
*/
|
|
43
|
-
size: {
|
|
44
|
-
type: String,
|
|
45
|
-
default: getDefault(defaultConfig, ULoader).size,
|
|
46
|
-
},
|
|
12
|
+
const props = withDefaults(defineProps<ULoaderProps>(), {
|
|
13
|
+
loading: getDefault<ULoaderProps>(defaultConfig, ULoader).loading,
|
|
14
|
+
color: getDefault<ULoaderProps>(defaultConfig, ULoader).color,
|
|
15
|
+
size: getDefault<ULoaderProps>(defaultConfig, ULoader).size,
|
|
47
16
|
});
|
|
48
17
|
|
|
49
18
|
const { loaderAttrs, ellipseAttrs, config } = useAttrs(props);
|
|
50
19
|
</script>
|
|
51
20
|
|
|
21
|
+
<template>
|
|
22
|
+
<Transition v-bind="config?.transition">
|
|
23
|
+
<div v-if="loading" v-bind="loaderAttrs">
|
|
24
|
+
<!-- @slot Use it to add something instead of the default loader. -->
|
|
25
|
+
<slot>
|
|
26
|
+
<div v-for="ellipse in ELLIPSES_AMOUNT" :key="ellipse" v-bind="ellipseAttrs" />
|
|
27
|
+
</slot>
|
|
28
|
+
</div>
|
|
29
|
+
</Transition>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
52
32
|
<style scoped lang="postcss">
|
|
53
33
|
.vueless-loader-ellipse:nth-child(1) {
|
|
54
34
|
animation: ellipse-1 0.6s infinite;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
|
|
2
2
|
import { getSource } from "../../utils/storybook.ts";
|
|
3
3
|
|
|
4
|
-
import * as stories from "./stories.
|
|
5
|
-
import defaultConfig from "../config.
|
|
4
|
+
import * as stories from "./stories.ts";
|
|
5
|
+
import defaultConfig from "../config.ts?raw"
|
|
6
6
|
|
|
7
7
|
<Meta of={stories} />
|
|
8
8
|
<Title of={stories} />
|
|
@@ -5,6 +5,14 @@ import URow from "../../ui.container-row/URow.vue";
|
|
|
5
5
|
import UButton from "../../ui.button/UButton.vue";
|
|
6
6
|
import { ref } from "vue";
|
|
7
7
|
|
|
8
|
+
import type { Meta, StoryFn } from "@storybook/vue3";
|
|
9
|
+
import type { ULoaderProps } from "../types.ts";
|
|
10
|
+
|
|
11
|
+
interface ULoaderArgs extends ULoaderProps {
|
|
12
|
+
slotTemplate?: string;
|
|
13
|
+
enum: "size" | "color";
|
|
14
|
+
}
|
|
15
|
+
|
|
8
16
|
/**
|
|
9
17
|
* The `ULoader` component. | [View on GitHub](https://github.com/vuelessjs/vueless/tree/main/src/ui.loader)
|
|
10
18
|
*/
|
|
@@ -18,9 +26,9 @@ export default {
|
|
|
18
26
|
argTypes: {
|
|
19
27
|
...getArgTypes(ULoader.__name),
|
|
20
28
|
},
|
|
21
|
-
};
|
|
29
|
+
} as Meta;
|
|
22
30
|
|
|
23
|
-
const DefaultTemplate = (args) => ({
|
|
31
|
+
const DefaultTemplate: StoryFn<ULoaderArgs> = (args: ULoaderArgs) => ({
|
|
24
32
|
components: { ULoader },
|
|
25
33
|
setup() {
|
|
26
34
|
const slots = getSlotNames(ULoader.__name);
|
|
@@ -29,17 +37,17 @@ const DefaultTemplate = (args) => ({
|
|
|
29
37
|
},
|
|
30
38
|
template: `
|
|
31
39
|
<ULoader v-bind="args">
|
|
32
|
-
${args.slotTemplate || getSlotsFragment()}
|
|
40
|
+
${args.slotTemplate || getSlotsFragment("")}
|
|
33
41
|
</ULoader>
|
|
34
42
|
`,
|
|
35
43
|
});
|
|
36
44
|
|
|
37
|
-
const EnumVariantTemplate = (args, { argTypes }) => ({
|
|
45
|
+
const EnumVariantTemplate: StoryFn<ULoaderArgs> = (args: ULoaderArgs, { argTypes }) => ({
|
|
38
46
|
components: { ULoader, URow },
|
|
39
47
|
setup() {
|
|
40
48
|
return {
|
|
41
49
|
args,
|
|
42
|
-
options: argTypes[args.enum]
|
|
50
|
+
options: argTypes?.[args.enum]?.options,
|
|
43
51
|
};
|
|
44
52
|
},
|
|
45
53
|
template: `
|
|
@@ -54,7 +62,7 @@ const EnumVariantTemplate = (args, { argTypes }) => ({
|
|
|
54
62
|
`,
|
|
55
63
|
});
|
|
56
64
|
|
|
57
|
-
const LoadingTemplate = (args) => ({
|
|
65
|
+
const LoadingTemplate: StoryFn<ULoaderArgs> = (args: ULoaderArgs) => ({
|
|
58
66
|
components: { ULoader, UButton, URow },
|
|
59
67
|
setup() {
|
|
60
68
|
function toggleLoader() {
|
|
@@ -66,7 +74,7 @@ const LoadingTemplate = (args) => ({
|
|
|
66
74
|
return { args, isLoading, toggleLoader };
|
|
67
75
|
},
|
|
68
76
|
template: `
|
|
69
|
-
<URow>
|
|
77
|
+
<URow align="center">
|
|
70
78
|
<ULoader v-bind="args" :loading="isLoading" />
|
|
71
79
|
<UButton @click="toggleLoader" size="sm">ToggleLoader</UButton>
|
|
72
80
|
</URow>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import defaultConfig from "./config.ts";
|
|
2
|
+
|
|
3
|
+
export type Config = Partial<typeof defaultConfig>;
|
|
4
|
+
|
|
5
|
+
export interface ULoaderProps {
|
|
6
|
+
/**
|
|
7
|
+
* Loader state (shown / hidden).
|
|
8
|
+
*/
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Loader color.
|
|
13
|
+
*/
|
|
14
|
+
color?:
|
|
15
|
+
| "brand"
|
|
16
|
+
| "grayscale"
|
|
17
|
+
| "gray"
|
|
18
|
+
| "red"
|
|
19
|
+
| "orange"
|
|
20
|
+
| "amber"
|
|
21
|
+
| "yellow"
|
|
22
|
+
| "lime"
|
|
23
|
+
| "green"
|
|
24
|
+
| "emerald"
|
|
25
|
+
| "teal"
|
|
26
|
+
| "cyan"
|
|
27
|
+
| "sky"
|
|
28
|
+
| "blue"
|
|
29
|
+
| "indigo"
|
|
30
|
+
| "violet"
|
|
31
|
+
| "purple"
|
|
32
|
+
| "fuchsia"
|
|
33
|
+
| "pink"
|
|
34
|
+
| "rose"
|
|
35
|
+
| "black"
|
|
36
|
+
| "white";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Loader size.
|
|
40
|
+
*/
|
|
41
|
+
size?: "sm" | "md" | "lg";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Component config object.
|
|
45
|
+
*/
|
|
46
|
+
config?: Partial<typeof defaultConfig>;
|
|
47
|
+
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { computed } from "vue";
|
|
2
2
|
import useUI from "../composables/useUI.ts";
|
|
3
3
|
|
|
4
|
-
import defaultConfig from "./config.
|
|
4
|
+
import defaultConfig from "./config.ts";
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import type { UseAttrs } from "../types.ts";
|
|
7
|
+
import type { ULoaderProps, Config } from "./types.ts";
|
|
8
|
+
|
|
9
|
+
export default function useAttrs(props: ULoaderProps): UseAttrs<Config> {
|
|
10
|
+
const { config, getKeysAttrs, hasSlotContent } = useUI<Config>(
|
|
8
11
|
defaultConfig,
|
|
9
12
|
() => props.config,
|
|
10
13
|
"loader",
|
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
<
|
|
2
|
-
<Transition v-bind="config.transition">
|
|
3
|
-
<div v-if="showLoader" v-bind="overlayAttrs">
|
|
4
|
-
<!-- @slot Use it to add something instead of the default loader. -->
|
|
5
|
-
<slot>
|
|
6
|
-
<ULoader :loading="showLoader" size="lg" :color="loaderColor" v-bind="nestedLoaderAttrs" />
|
|
7
|
-
</slot>
|
|
8
|
-
</div>
|
|
9
|
-
</Transition>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script setup>
|
|
1
|
+
<script lang="ts" setup>
|
|
13
2
|
import { computed, onMounted, onUnmounted } from "vue";
|
|
14
3
|
|
|
15
4
|
import { getDefault } from "../utils/ui.ts";
|
|
@@ -17,34 +6,22 @@ import { useDarkMode } from "../composables/useDarkMode.ts";
|
|
|
17
6
|
|
|
18
7
|
import ULoader from "../ui.loader/ULoader.vue";
|
|
19
8
|
|
|
20
|
-
import { ULoaderOverlay } from "./constants.
|
|
21
|
-
import defaultConfig from "./config.
|
|
22
|
-
import useAttrs from "./useAttrs.
|
|
23
|
-
import { useLoaderOverlay } from "./useLoaderOverlay.
|
|
9
|
+
import { ULoaderOverlay } from "./constants.ts";
|
|
10
|
+
import defaultConfig from "./config.ts";
|
|
11
|
+
import useAttrs from "./useAttrs.ts";
|
|
12
|
+
import { useLoaderOverlay } from "./useLoaderOverlay.ts";
|
|
24
13
|
|
|
25
|
-
|
|
14
|
+
import type { ULoaderOverlayProps } from "./types.ts";
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Loader state (shown / hidden).
|
|
30
|
-
*/
|
|
31
|
-
loading: {
|
|
32
|
-
type: Boolean,
|
|
33
|
-
default: getDefault(defaultConfig, ULoaderOverlay).loading,
|
|
34
|
-
},
|
|
16
|
+
defineOptions({ inheritAttrs: false });
|
|
35
17
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*/
|
|
40
|
-
color: {
|
|
41
|
-
type: String,
|
|
42
|
-
default: getDefault(defaultConfig, ULoaderOverlay).color,
|
|
43
|
-
},
|
|
18
|
+
const props = withDefaults(defineProps<ULoaderOverlayProps>(), {
|
|
19
|
+
loading: getDefault<ULoaderOverlayProps>(defaultConfig, ULoaderOverlay).loading,
|
|
20
|
+
color: getDefault<ULoaderOverlayProps>(defaultConfig, ULoaderOverlay).color,
|
|
44
21
|
});
|
|
45
22
|
|
|
46
23
|
const { overlayAttrs, nestedLoaderAttrs, config } = useAttrs(props);
|
|
47
|
-
const {
|
|
24
|
+
const { loaderOverlayOn, loaderOverlayOff, isLoading } = useLoaderOverlay();
|
|
48
25
|
const { isDarkMode } = useDarkMode();
|
|
49
26
|
|
|
50
27
|
const loaderColor = computed(() => {
|
|
@@ -65,6 +42,17 @@ onUnmounted(() => {
|
|
|
65
42
|
});
|
|
66
43
|
|
|
67
44
|
const showLoader = computed(() => {
|
|
68
|
-
return props.loading === undefined ? isLoading.value : props.loading;
|
|
45
|
+
return props.loading === undefined ? (isLoading.value ?? false) : props.loading;
|
|
69
46
|
});
|
|
70
47
|
</script>
|
|
48
|
+
|
|
49
|
+
<template>
|
|
50
|
+
<Transition v-bind="config?.transition">
|
|
51
|
+
<div v-if="showLoader" v-bind="overlayAttrs">
|
|
52
|
+
<!-- @slot Use it to add something instead of the default loader. -->
|
|
53
|
+
<slot>
|
|
54
|
+
<ULoader :loading="showLoader" size="lg" :color="loaderColor" v-bind="nestedLoaderAttrs" />
|
|
55
|
+
</slot>
|
|
56
|
+
</div>
|
|
57
|
+
</Transition>
|
|
58
|
+
</template>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
|
|
2
2
|
import { getSource } from "../../utils/storybook.ts";
|
|
3
3
|
|
|
4
|
-
import * as stories from "./stories.
|
|
5
|
-
import defaultConfig from "../config.
|
|
4
|
+
import * as stories from "./stories.ts";
|
|
5
|
+
import defaultConfig from "../config.ts?raw"
|
|
6
6
|
|
|
7
7
|
<Meta of={stories} />
|
|
8
8
|
<Title of={stories} />
|
|
@@ -4,7 +4,14 @@ import ULoaderOverlay from "../ULoaderOverlay.vue";
|
|
|
4
4
|
import UButton from "../../ui.button/UButton.vue";
|
|
5
5
|
import UCol from "../../ui.container-col/UCol.vue";
|
|
6
6
|
|
|
7
|
-
import { useLoaderOverlay } from "../useLoaderOverlay.
|
|
7
|
+
import { useLoaderOverlay } from "../useLoaderOverlay.ts";
|
|
8
|
+
|
|
9
|
+
import type { Meta, StoryFn } from "@storybook/vue3";
|
|
10
|
+
import type { ULoaderOverlayProps } from "../types.ts";
|
|
11
|
+
|
|
12
|
+
interface ULoaderOverlayArgs extends ULoaderOverlayProps {
|
|
13
|
+
slotTemplate?: string;
|
|
14
|
+
}
|
|
8
15
|
|
|
9
16
|
/**
|
|
10
17
|
* The `ULoaderOverlay` component. | [View on GitHub](https://github.com/vuelessjs/vueless/tree/main/src/ui.loader-overlay)
|
|
@@ -23,9 +30,9 @@ export default {
|
|
|
23
30
|
},
|
|
24
31
|
},
|
|
25
32
|
},
|
|
26
|
-
};
|
|
33
|
+
} as Meta;
|
|
27
34
|
|
|
28
|
-
const DefaultTemplate = (args) => ({
|
|
35
|
+
const DefaultTemplate: StoryFn<ULoaderOverlayArgs> = (args: ULoaderOverlayArgs) => ({
|
|
29
36
|
components: { ULoaderOverlay },
|
|
30
37
|
setup() {
|
|
31
38
|
const slots = getSlotNames(ULoaderOverlay.__name);
|
|
@@ -34,18 +41,26 @@ const DefaultTemplate = (args) => ({
|
|
|
34
41
|
},
|
|
35
42
|
template: `
|
|
36
43
|
<ULoaderOverlay v-bind="args" class="w-full h-full">
|
|
37
|
-
${args.slotTemplate || getSlotsFragment()}
|
|
44
|
+
${args.slotTemplate || getSlotsFragment("")}
|
|
38
45
|
</ULoaderOverlay>
|
|
39
46
|
`,
|
|
40
47
|
});
|
|
41
48
|
|
|
42
|
-
const LoadingTemplate = (args) => ({
|
|
49
|
+
const LoadingTemplate: StoryFn<ULoaderOverlayArgs> = (args: ULoaderOverlayArgs) => ({
|
|
43
50
|
components: { ULoaderOverlay, UButton, UCol },
|
|
44
51
|
setup() {
|
|
45
|
-
const
|
|
52
|
+
const loaderOverlay = useLoaderOverlay();
|
|
53
|
+
|
|
54
|
+
const loaderOverlayOn = loaderOverlay?.loaderOverlayOn || (() => {});
|
|
55
|
+
const loaderOverlayOff = loaderOverlay?.loaderOverlayOff || (() => {});
|
|
56
|
+
const isLoading = loaderOverlay?.isLoading || { value: false };
|
|
46
57
|
|
|
47
58
|
function toggleLoading() {
|
|
48
|
-
isLoading.value
|
|
59
|
+
if (isLoading.value) {
|
|
60
|
+
loaderOverlayOff();
|
|
61
|
+
} else {
|
|
62
|
+
loaderOverlayOn();
|
|
63
|
+
}
|
|
49
64
|
}
|
|
50
65
|
|
|
51
66
|
return { args, loaderOverlayOn, loaderOverlayOff, isLoading, toggleLoading };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import defaultConfig from "./config.ts";
|
|
2
|
+
|
|
3
|
+
export type Config = Partial<typeof defaultConfig>;
|
|
4
|
+
|
|
5
|
+
export interface ULoaderOverlayProps {
|
|
6
|
+
/**
|
|
7
|
+
* Loader state (shown / hidden).
|
|
8
|
+
*/
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Loader color.
|
|
13
|
+
*/
|
|
14
|
+
color?:
|
|
15
|
+
| "brand"
|
|
16
|
+
| "grayscale"
|
|
17
|
+
| "gray"
|
|
18
|
+
| "red"
|
|
19
|
+
| "orange"
|
|
20
|
+
| "amber"
|
|
21
|
+
| "yellow"
|
|
22
|
+
| "lime"
|
|
23
|
+
| "green"
|
|
24
|
+
| "emerald"
|
|
25
|
+
| "teal"
|
|
26
|
+
| "cyan"
|
|
27
|
+
| "sky"
|
|
28
|
+
| "blue"
|
|
29
|
+
| "indigo"
|
|
30
|
+
| "violet"
|
|
31
|
+
| "purple"
|
|
32
|
+
| "fuchsia"
|
|
33
|
+
| "pink"
|
|
34
|
+
| "rose"
|
|
35
|
+
| "black"
|
|
36
|
+
| "white";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Component config object.
|
|
40
|
+
*/
|
|
41
|
+
config?: Partial<typeof defaultConfig>;
|
|
42
|
+
}
|
|
@@ -2,8 +2,11 @@ import useUI from "../composables/useUI.ts";
|
|
|
2
2
|
|
|
3
3
|
import defaultConfig from "./config.js";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import type { UseAttrs } from "../types.ts";
|
|
6
|
+
import type { ULoaderOverlayProps, Config } from "./types.ts";
|
|
7
|
+
|
|
8
|
+
export default function useAttrs(props: ULoaderOverlayProps): UseAttrs<Config> {
|
|
9
|
+
const { config, getKeysAttrs, hasSlotContent } = useUI<Config>(
|
|
7
10
|
defaultConfig,
|
|
8
11
|
() => props.config,
|
|
9
12
|
"overlay",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { inject, readonly, ref } from "vue";
|
|
2
|
+
|
|
3
|
+
import type { Ref, InjectionKey } from "vue";
|
|
4
|
+
|
|
5
|
+
export const LoaderOverlaySymbol: InjectionKey<LoaderOverlay> =
|
|
6
|
+
Symbol.for("vueless:loader-overlay");
|
|
7
|
+
|
|
8
|
+
interface LoaderOverlay {
|
|
9
|
+
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
10
|
+
loaderOverlayOn: () => void;
|
|
11
|
+
loaderOverlayOff: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const isLoading = ref(true);
|
|
15
|
+
|
|
16
|
+
function loaderOverlayOn(): void {
|
|
17
|
+
isLoading.value = true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function loaderOverlayOff(): void {
|
|
21
|
+
isLoading.value = false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createLoaderOverlay(): LoaderOverlay {
|
|
25
|
+
return {
|
|
26
|
+
isLoading: readonly(isLoading),
|
|
27
|
+
loaderOverlayOn,
|
|
28
|
+
loaderOverlayOff,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function useLoaderOverlay(): LoaderOverlay {
|
|
33
|
+
const loaderOverlay = inject(LoaderOverlaySymbol);
|
|
34
|
+
|
|
35
|
+
if (!loaderOverlay) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
"LoaderOverlay not provided. Ensure you are using `provide` with `LoaderOverlaySymbol`.",
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return loaderOverlay;
|
|
42
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export function loaderOverlayOn() {
|
|
1
|
+
export function loaderOverlayOn(): void {
|
|
2
2
|
window.dispatchEvent(new Event("loaderOverlayOn"));
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
export function loaderOverlayOff() {
|
|
5
|
+
export function loaderOverlayOff(): void {
|
|
6
6
|
window.dispatchEvent(new Event("loaderOverlayOff"));
|
|
7
7
|
}
|