nuance-ui 0.1.7 → 0.1.9
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/module.json +1 -1
- package/dist/module.mjs +1 -20
- package/dist/runtime/components/action-icon/action-icon.d.vue.ts +1 -0
- package/dist/runtime/components/action-icon/action-icon.vue.d.ts +1 -0
- package/dist/runtime/components/alert.d.vue.ts +48 -0
- package/dist/runtime/components/alert.vue +178 -0
- package/dist/runtime/components/alert.vue.d.ts +48 -0
- package/dist/runtime/components/app-shell/app-shell-main.vue +1 -0
- package/dist/runtime/components/box.d.vue.ts +1 -1
- package/dist/runtime/components/box.vue +10 -2
- package/dist/runtime/components/box.vue.d.ts +1 -1
- package/dist/runtime/components/button/button.d.vue.ts +1 -0
- package/dist/runtime/components/button/button.vue +3 -3
- package/dist/runtime/components/button/button.vue.d.ts +1 -0
- package/dist/runtime/components/checkbox/checkbox-card.d.vue.ts +1 -1
- package/dist/runtime/components/checkbox/checkbox-card.vue.d.ts +1 -1
- package/dist/runtime/components/index.d.ts +3 -0
- package/dist/runtime/components/index.js +3 -0
- package/dist/runtime/components/input/number-input.vue +12 -16
- package/dist/runtime/components/input/ui/input-base.d.vue.ts +3 -3
- package/dist/runtime/components/input/ui/input-base.vue +2 -2
- package/dist/runtime/components/input/ui/input-base.vue.d.ts +3 -3
- package/dist/runtime/components/link/lib.d.ts +2 -2
- package/dist/runtime/components/nav-link/nav-link.vue +10 -10
- package/dist/runtime/components/progress/index.d.ts +3 -0
- package/dist/runtime/components/progress/index.js +0 -0
- package/dist/runtime/components/progress/progress-label.d.vue.ts +14 -0
- package/dist/runtime/components/progress/progress-label.vue +14 -0
- package/dist/runtime/components/progress/progress-label.vue.d.ts +14 -0
- package/dist/runtime/components/progress/progress-root.d.vue.ts +25 -0
- package/dist/runtime/components/progress/progress-root.vue +31 -0
- package/dist/runtime/components/progress/progress-root.vue.d.ts +25 -0
- package/dist/runtime/components/progress/progress-section.d.vue.ts +25 -0
- package/dist/runtime/components/progress/progress-section.vue +42 -0
- package/dist/runtime/components/progress/progress-section.vue.d.ts +25 -0
- package/dist/runtime/components/progress/progress.d.vue.ts +16 -0
- package/dist/runtime/components/progress/progress.module.css +1 -0
- package/dist/runtime/components/progress/progress.vue +39 -0
- package/dist/runtime/components/progress/progress.vue.d.ts +16 -0
- package/dist/runtime/components/roving-focus/_lib/context.d.ts +51 -0
- package/dist/runtime/components/roving-focus/_lib/context.js +90 -0
- package/dist/runtime/components/roving-focus/index.d.ts +1 -0
- package/dist/runtime/components/roving-focus/index.js +1 -0
- package/dist/runtime/components/roving-focus/roving-focus-item.d.vue.ts +13 -0
- package/dist/runtime/components/roving-focus/roving-focus-item.vue +32 -0
- package/dist/runtime/components/roving-focus/roving-focus-item.vue.d.ts +13 -0
- package/dist/runtime/components/roving-focus/roving-focus.d.vue.ts +21 -0
- package/dist/runtime/components/roving-focus/roving-focus.vue +23 -0
- package/dist/runtime/components/roving-focus/roving-focus.vue.d.ts +21 -0
- package/dist/runtime/components/select/select.d.vue.ts +2 -2
- package/dist/runtime/components/select/select.vue.d.ts +2 -2
- package/dist/runtime/components/tabs/tabs-tab.d.vue.ts +1 -1
- package/dist/runtime/components/tabs/tabs-tab.vue.d.ts +1 -1
- package/dist/runtime/components/tree/_ui/tree-item.d.vue.ts +0 -0
- package/dist/runtime/components/tree/_ui/tree-item.vue +172 -0
- package/dist/runtime/components/tree/_ui/tree-item.vue.d.ts +0 -0
- package/dist/runtime/components/tree/_ui/tree-root.d.vue.ts +39 -0
- package/dist/runtime/components/tree/_ui/tree-root.vue +87 -0
- package/dist/runtime/components/tree/_ui/tree-root.vue.d.ts +39 -0
- package/dist/runtime/components/tree/index.d.ts +1 -0
- package/dist/runtime/components/tree/index.js +1 -0
- package/dist/runtime/components/tree/lib/context.d.ts +32 -0
- package/dist/runtime/components/tree/lib/context.js +103 -0
- package/dist/runtime/components/tree/lib/get-default.d.ts +7 -0
- package/dist/runtime/components/tree/lib/get-default.js +10 -0
- package/dist/runtime/components/tree/model.d.ts +33 -0
- package/dist/runtime/components/tree/model.js +0 -0
- package/dist/runtime/components/tree/tree.d.vue.ts +23 -0
- package/dist/runtime/components/tree/tree.vue +46 -0
- package/dist/runtime/components/tree/tree.vue.d.ts +23 -0
- package/dist/runtime/composals/index.d.ts +0 -1
- package/dist/runtime/composals/index.js +0 -1
- package/dist/runtime/styles/colors.css +1 -1
- package/dist/runtime/styles/light-theme.css +1 -1
- package/dist/runtime/utils/get-mod.d.ts +2 -0
- package/dist/runtime/{composals/use-mod.js → utils/get-mod.js} +2 -13
- package/dist/runtime/utils/index.d.ts +2 -0
- package/dist/runtime/utils/index.js +2 -0
- package/dist/runtime/utils/tree.d.ts +107 -0
- package/dist/runtime/utils/tree.js +85 -0
- package/package.json +1 -1
- package/dist/runtime/composals/use-mod.d.ts +0 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
declare var __VLS_6: {};
|
|
3
|
+
type __VLS_Slots = {} & {
|
|
4
|
+
default?: (props: typeof __VLS_6) => any;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<BoxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BoxProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
8
|
+
declare const _default: typeof __VLS_export;
|
|
9
|
+
export default _default;
|
|
10
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
11
|
+
new (): {
|
|
12
|
+
$slots: S;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import Box from "../box.vue";
|
|
3
|
+
import css from "./progress.module.css";
|
|
4
|
+
const props = defineProps({
|
|
5
|
+
is: { type: null, required: false },
|
|
6
|
+
mod: { type: [Object, Array, null], required: false }
|
|
7
|
+
});
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<Box v-bind='props' :class='css.label'>
|
|
12
|
+
<slot />
|
|
13
|
+
</Box>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
declare var __VLS_6: {};
|
|
3
|
+
type __VLS_Slots = {} & {
|
|
4
|
+
default?: (props: typeof __VLS_6) => any;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<BoxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BoxProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
8
|
+
declare const _default: typeof __VLS_export;
|
|
9
|
+
export default _default;
|
|
10
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
11
|
+
new (): {
|
|
12
|
+
$slots: S;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
import type { NuanceRadius, NuanceSize } from '@nui/types';
|
|
3
|
+
export interface ProgressRootProps extends BoxProps {
|
|
4
|
+
/** Controls track height @default `'md'` */
|
|
5
|
+
size?: NuanceSize | string;
|
|
6
|
+
/** Key of `theme.radius` or any valid CSS value to set `border-radius` @default `theme.defaultRadius` */
|
|
7
|
+
radius?: NuanceRadius;
|
|
8
|
+
/** Controls sections width transition duration, value is specified in ms @default `100` */
|
|
9
|
+
transitionDuration?: number;
|
|
10
|
+
/** Controls orientation @default `'horizontal'` */
|
|
11
|
+
orientation?: 'horizontal' | 'vertical';
|
|
12
|
+
}
|
|
13
|
+
declare var __VLS_6: {};
|
|
14
|
+
type __VLS_Slots = {} & {
|
|
15
|
+
default?: (props: typeof __VLS_6) => any;
|
|
16
|
+
};
|
|
17
|
+
declare const __VLS_base: import("vue").DefineComponent<ProgressRootProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ProgressRootProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
19
|
+
declare const _default: typeof __VLS_export;
|
|
20
|
+
export default _default;
|
|
21
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
22
|
+
new (): {
|
|
23
|
+
$slots: S;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { getRadius, getSize } from "@nui/utils";
|
|
3
|
+
import { computed } from "vue";
|
|
4
|
+
import Box from "../box.vue";
|
|
5
|
+
import css from "./progress.module.css";
|
|
6
|
+
const {
|
|
7
|
+
orientation,
|
|
8
|
+
mod,
|
|
9
|
+
size,
|
|
10
|
+
radius,
|
|
11
|
+
transitionDuration
|
|
12
|
+
} = defineProps({
|
|
13
|
+
size: { type: String, required: false },
|
|
14
|
+
radius: { type: [String, Number], required: false },
|
|
15
|
+
transitionDuration: { type: Number, required: false },
|
|
16
|
+
orientation: { type: String, required: false },
|
|
17
|
+
is: { type: null, required: false },
|
|
18
|
+
mod: { type: [Object, Array, null], required: false }
|
|
19
|
+
});
|
|
20
|
+
const style = computed(() => ({
|
|
21
|
+
"--progress-size": getSize(size, "progress-size"),
|
|
22
|
+
"--progress-radius": radius === void 0 ? void 0 : getRadius(radius),
|
|
23
|
+
"--progress-transition-duration": typeof transitionDuration === "number" ? `${transitionDuration}ms` : void 0
|
|
24
|
+
}));
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<Box :style :class='css.root' :mod='[{ orientation }, mod]'>
|
|
29
|
+
<slot />
|
|
30
|
+
</Box>
|
|
31
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
import type { NuanceRadius, NuanceSize } from '@nui/types';
|
|
3
|
+
export interface ProgressRootProps extends BoxProps {
|
|
4
|
+
/** Controls track height @default `'md'` */
|
|
5
|
+
size?: NuanceSize | string;
|
|
6
|
+
/** Key of `theme.radius` or any valid CSS value to set `border-radius` @default `theme.defaultRadius` */
|
|
7
|
+
radius?: NuanceRadius;
|
|
8
|
+
/** Controls sections width transition duration, value is specified in ms @default `100` */
|
|
9
|
+
transitionDuration?: number;
|
|
10
|
+
/** Controls orientation @default `'horizontal'` */
|
|
11
|
+
orientation?: 'horizontal' | 'vertical';
|
|
12
|
+
}
|
|
13
|
+
declare var __VLS_6: {};
|
|
14
|
+
type __VLS_Slots = {} & {
|
|
15
|
+
default?: (props: typeof __VLS_6) => any;
|
|
16
|
+
};
|
|
17
|
+
declare const __VLS_base: import("vue").DefineComponent<ProgressRootProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ProgressRootProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
19
|
+
declare const _default: typeof __VLS_export;
|
|
20
|
+
export default _default;
|
|
21
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
22
|
+
new (): {
|
|
23
|
+
$slots: S;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
import type { NuanceColor } from '@nui/types';
|
|
3
|
+
export interface ProgressSectionProps extends BoxProps {
|
|
4
|
+
/** Determines whether `aria-*` props should be added to the root element @default `true` */
|
|
5
|
+
withAria?: boolean;
|
|
6
|
+
/** Key of `theme.colors` or any valid CSS value @default `theme.primaryColor` */
|
|
7
|
+
color?: NuanceColor;
|
|
8
|
+
/** If set, the section has stripes @default `false` */
|
|
9
|
+
striped?: boolean;
|
|
10
|
+
/** If set, the sections stripes are animated, `striped` prop is ignored @default `false` */
|
|
11
|
+
animated?: boolean;
|
|
12
|
+
}
|
|
13
|
+
type __VLS_Props = ProgressSectionProps;
|
|
14
|
+
type __VLS_ModelProps = {
|
|
15
|
+
/** Value of the section in 0–100 range */
|
|
16
|
+
modelValue: number;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
19
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
20
|
+
"update:modelValue": (value: number) => any;
|
|
21
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
22
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
declare const _default: typeof __VLS_export;
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { useStyleResolver } from "@nui/composals";
|
|
3
|
+
import { getThemeColor } from "@nui/utils";
|
|
4
|
+
import { computed } from "vue";
|
|
5
|
+
import Box from "../box.vue";
|
|
6
|
+
import css from "./progress.module.css";
|
|
7
|
+
const {
|
|
8
|
+
withAria,
|
|
9
|
+
animated,
|
|
10
|
+
striped,
|
|
11
|
+
color,
|
|
12
|
+
mod
|
|
13
|
+
} = defineProps({
|
|
14
|
+
withAria: { type: Boolean, required: false },
|
|
15
|
+
color: { type: null, required: false },
|
|
16
|
+
striped: { type: Boolean, required: false },
|
|
17
|
+
animated: { type: Boolean, required: false },
|
|
18
|
+
is: { type: null, required: false },
|
|
19
|
+
mod: { type: [Object, Array, null], required: false }
|
|
20
|
+
});
|
|
21
|
+
const value = defineModel({ type: Number, ...{ required: true } });
|
|
22
|
+
const ariaAttributes = computed(() => withAria ? {
|
|
23
|
+
"role": "progressbar",
|
|
24
|
+
"aria-valuemax": 100,
|
|
25
|
+
"aria-valuemin": 0,
|
|
26
|
+
"aria-valuenow": value.value,
|
|
27
|
+
"aria-valuetext": `${value.value}%`
|
|
28
|
+
} : {});
|
|
29
|
+
const style = computed(() => useStyleResolver((theme) => ({
|
|
30
|
+
"--progress-section-size": `${value.value}%`,
|
|
31
|
+
"--progress-section-color": getThemeColor(color, theme)
|
|
32
|
+
})));
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<Box
|
|
37
|
+
:style
|
|
38
|
+
v-bind='ariaAttributes'
|
|
39
|
+
:class='css.section'
|
|
40
|
+
:mod='[{ striped: striped || animated, animated }, mod]'
|
|
41
|
+
/>
|
|
42
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BoxProps } from '@nui/components';
|
|
2
|
+
import type { NuanceColor } from '@nui/types';
|
|
3
|
+
export interface ProgressSectionProps extends BoxProps {
|
|
4
|
+
/** Determines whether `aria-*` props should be added to the root element @default `true` */
|
|
5
|
+
withAria?: boolean;
|
|
6
|
+
/** Key of `theme.colors` or any valid CSS value @default `theme.primaryColor` */
|
|
7
|
+
color?: NuanceColor;
|
|
8
|
+
/** If set, the section has stripes @default `false` */
|
|
9
|
+
striped?: boolean;
|
|
10
|
+
/** If set, the sections stripes are animated, `striped` prop is ignored @default `false` */
|
|
11
|
+
animated?: boolean;
|
|
12
|
+
}
|
|
13
|
+
type __VLS_Props = ProgressSectionProps;
|
|
14
|
+
type __VLS_ModelProps = {
|
|
15
|
+
/** Value of the section in 0–100 range */
|
|
16
|
+
modelValue: number;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
19
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
20
|
+
"update:modelValue": (value: number) => any;
|
|
21
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
22
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
declare const _default: typeof __VLS_export;
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ProgressRootProps } from './progress-root.vue.js';
|
|
2
|
+
import type { ProgressSectionProps } from './progress-section.vue.js';
|
|
3
|
+
export interface ProgressProps extends ProgressRootProps, ProgressSectionProps {
|
|
4
|
+
}
|
|
5
|
+
type __VLS_Props = ProgressProps;
|
|
6
|
+
type __VLS_ModelProps = {
|
|
7
|
+
modelValue: number;
|
|
8
|
+
};
|
|
9
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
10
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"update:modelValue": (value: number) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
13
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const _default: typeof __VLS_export;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.root{--progress-radius:var(--radius-default);--progress-size:var(--progress-size-md);--progress-size-xs:rem(8px);--progress-size-sm:rem(12px);--progress-size-md:rem(16px);--progress-size-lg:rem(20px);--progress-size-xl:rem(24px);border-radius:var(--progress-radius);display:flex;height:var(--progress-size);overflow:hidden;position:relative;@mixin where-light{background-color:var(--color-gray-2)}@mixin where-dark{background-color:var(--color-dark-4)}}.root:where([data-orientation=vertical]){flex-direction:column-reverse;height:auto;width:var(--progress-size)}.section{--progress-section-size:var(--progress-size-sm);--progress-section-color:var(--color-primary-4);--progress-transition-duration:100ms;align-items:center;background-color:var(--progress-section-color);background-size:20px 20px;display:flex;height:100%;justify-content:center;overflow:hidden;transition:width var(--progress-transition-duration) ease;width:var(--progress-section-size)}.section:where([data-striped]){background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.section:where([data-animated]){animation:stripes-animation 1s linear infinite}.section:where(:last-of-type){border-radius:0;border-end-end-radius:var(--progress-radius);border-start-end-radius:var(--progress-radius)}.section:where(:first-of-type){border-radius:0;border-end-start-radius:var(--progress-radius);border-start-start-radius:var(--progress-radius)}.root:where([data-orientation=vertical]) .section{height:var(--progress-section-size);transition:height var(--progress-transition-duration,.1s) ease;width:100%}.root:where([data-orientation=vertical]) .section:where([data-striped]){background-image:linear-gradient(135deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.root:where([data-orientation=vertical]) .section:where([data-animated]){animation:stripes-animation-vertical 1s linear infinite}.root:where([data-orientation=vertical]) .section:where(:last-of-type){border-radius:0;border-start-end-radius:var(--progress-radius);border-start-start-radius:var(--progress-radius)}.root:where([data-orientation=vertical]) .section:where(:first-of-type){border-radius:0;border-end-end-radius:var(--progress-radius);border-end-start-radius:var(--progress-radius)}.label{--progress-label-color:var(--color-white);color:var(--progress-label-color);font-size:min(calc(var(--progress-size)*.65));font-weight:700;line-height:1;overflow:hidden;padding-inline:4px;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.root:where([data-orientation=vertical]) .label{writing-mode:vertical-rl}@keyframes stripes-animation{0%{background-position:0 0}to{background-position:40px 0}}@keyframes stripes-animation-vertical{0%{background-position:0 0}to{background-position:0 40px}}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import ProgressRoot from "./progress-root.vue";
|
|
3
|
+
import ProgressSection from "./progress-section.vue";
|
|
4
|
+
const {
|
|
5
|
+
mod,
|
|
6
|
+
size,
|
|
7
|
+
color,
|
|
8
|
+
radius,
|
|
9
|
+
striped,
|
|
10
|
+
animated,
|
|
11
|
+
withAria,
|
|
12
|
+
orientation,
|
|
13
|
+
transitionDuration
|
|
14
|
+
} = defineProps({
|
|
15
|
+
size: { type: String, required: false },
|
|
16
|
+
radius: { type: [String, Number], required: false },
|
|
17
|
+
transitionDuration: { type: Number, required: false },
|
|
18
|
+
orientation: { type: String, required: false },
|
|
19
|
+
is: { type: null, required: false },
|
|
20
|
+
mod: { type: [Object, Array, null], required: false },
|
|
21
|
+
withAria: { type: Boolean, required: false },
|
|
22
|
+
color: { type: null, required: false },
|
|
23
|
+
striped: { type: Boolean, required: false },
|
|
24
|
+
animated: { type: Boolean, required: false }
|
|
25
|
+
});
|
|
26
|
+
const value = defineModel({ type: Number, ...{ required: true } });
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<ProgressRoot :size :radius :orientation :transition-duration :mod>
|
|
31
|
+
<ProgressSection
|
|
32
|
+
v-model='value'
|
|
33
|
+
:striped
|
|
34
|
+
:animated
|
|
35
|
+
:color
|
|
36
|
+
:with-aria
|
|
37
|
+
/>
|
|
38
|
+
</ProgressRoot>
|
|
39
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ProgressRootProps } from './progress-root.vue.js';
|
|
2
|
+
import type { ProgressSectionProps } from './progress-section.vue.js';
|
|
3
|
+
export interface ProgressProps extends ProgressRootProps, ProgressSectionProps {
|
|
4
|
+
}
|
|
5
|
+
type __VLS_Props = ProgressProps;
|
|
6
|
+
type __VLS_ModelProps = {
|
|
7
|
+
modelValue: number;
|
|
8
|
+
};
|
|
9
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
10
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"update:modelValue": (value: number) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
13
|
+
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const _default: typeof __VLS_export;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ShallowRef } from 'vue';
|
|
2
|
+
interface State {
|
|
3
|
+
/** Ref to the container that holds all roving items */
|
|
4
|
+
list: Readonly<ShallowRef<HTMLElement | null>>;
|
|
5
|
+
/** Whether focus should loop from last to first and vice versa */
|
|
6
|
+
loop?: boolean;
|
|
7
|
+
/** Keyboard navigation direction */
|
|
8
|
+
orientation?: 'vertical' | 'horizontal' | 'both';
|
|
9
|
+
/** Custom attribute to mark items instead of data-roving-item */
|
|
10
|
+
attr?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Provides the roving focus context to descendants.
|
|
14
|
+
* Must be called in the parent component that wraps the roving items.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const { init } = useProvideRovingFocus({ list: containerRef, loop: true })
|
|
18
|
+
*/
|
|
19
|
+
export declare const useProvideRovingFocus: (args_0: State) => {
|
|
20
|
+
attr: string;
|
|
21
|
+
list: Readonly<ShallowRef<HTMLElement | null>>;
|
|
22
|
+
loop: boolean | undefined;
|
|
23
|
+
orientation: "both" | "horizontal" | "vertical" | undefined;
|
|
24
|
+
init: () => number;
|
|
25
|
+
focus: {
|
|
26
|
+
(dir: "first" | "last"): void;
|
|
27
|
+
(dir: "prev" | "next", element: HTMLElement | undefined | null): void;
|
|
28
|
+
};
|
|
29
|
+
getItems: () => HTMLElement[];
|
|
30
|
+
focusElement: (element?: HTMLElement) => void;
|
|
31
|
+
onItemUnmount: (element: HTMLElement | null | undefined) => void;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Consumes the roving focus context.
|
|
35
|
+
* Use inside each roving focus item to get access to navigation methods.
|
|
36
|
+
*/
|
|
37
|
+
export declare const useRovingFocus: () => {
|
|
38
|
+
attr: string;
|
|
39
|
+
list: Readonly<ShallowRef<HTMLElement | null>>;
|
|
40
|
+
loop: boolean | undefined;
|
|
41
|
+
orientation: "both" | "horizontal" | "vertical" | undefined;
|
|
42
|
+
init: () => number;
|
|
43
|
+
focus: {
|
|
44
|
+
(dir: "first" | "last"): void;
|
|
45
|
+
(dir: "prev" | "next", element: HTMLElement | undefined | null): void;
|
|
46
|
+
};
|
|
47
|
+
getItems: () => HTMLElement[];
|
|
48
|
+
focusElement: (element?: HTMLElement) => void;
|
|
49
|
+
onItemUnmount: (element: HTMLElement | null | undefined) => void;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createStrictInjection } from "@nui/helpers";
|
|
2
|
+
import { unrefElement } from "@vueuse/core";
|
|
3
|
+
import { nextTick, ref, watch } from "vue";
|
|
4
|
+
const SELECT_ATTR = "data-roving-item";
|
|
5
|
+
const injectionKey = Symbol("roving-focus");
|
|
6
|
+
const [useProvide, useState] = createStrictInjection(({ list, loop, orientation, attr = SELECT_ATTR }) => {
|
|
7
|
+
const activeIx = ref(-1);
|
|
8
|
+
const init = () => activeIx.value = 0;
|
|
9
|
+
const getItems = () => Array.from(
|
|
10
|
+
unrefElement(list)?.querySelectorAll(`[${attr}]:not(:disabled)`) ?? []
|
|
11
|
+
);
|
|
12
|
+
watch(activeIx, (ix, oldIx) => {
|
|
13
|
+
const items = getItems();
|
|
14
|
+
if (ix !== oldIx) {
|
|
15
|
+
items[oldIx]?.setAttribute("tabindex", "-1");
|
|
16
|
+
items[ix]?.setAttribute("tabindex", "0");
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const focusElement = (element) => {
|
|
20
|
+
if (!element)
|
|
21
|
+
return;
|
|
22
|
+
activeIx.value = getItems().indexOf(element);
|
|
23
|
+
nextTick(() => element.focus());
|
|
24
|
+
};
|
|
25
|
+
function focus(dir, element) {
|
|
26
|
+
if (!element && dir !== "first" && dir !== "last")
|
|
27
|
+
return;
|
|
28
|
+
const items = getItems();
|
|
29
|
+
const ix = element ? items.indexOf(element) : -1;
|
|
30
|
+
let nextIndex = ix;
|
|
31
|
+
switch (dir) {
|
|
32
|
+
case "first":
|
|
33
|
+
nextIndex = 0;
|
|
34
|
+
break;
|
|
35
|
+
case "last":
|
|
36
|
+
nextIndex = items.length - 1;
|
|
37
|
+
break;
|
|
38
|
+
case "next": {
|
|
39
|
+
nextIndex = ix + 1;
|
|
40
|
+
if (nextIndex >= items.length)
|
|
41
|
+
nextIndex = loop ? 0 : items.length - 1;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "prev": {
|
|
45
|
+
nextIndex = ix - 1;
|
|
46
|
+
if (nextIndex < 0)
|
|
47
|
+
nextIndex = loop ? items.length - 1 : 0;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (nextIndex !== ix && items[nextIndex] !== void 0) {
|
|
52
|
+
activeIx.value = nextIndex;
|
|
53
|
+
focusElement(items[nextIndex]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const onItemUnmount = (element) => {
|
|
57
|
+
if (!element)
|
|
58
|
+
return;
|
|
59
|
+
const items = getItems();
|
|
60
|
+
const currentIndex = items.indexOf(element);
|
|
61
|
+
if (currentIndex === activeIx.value) {
|
|
62
|
+
nextTick(() => {
|
|
63
|
+
const newItems = getItems();
|
|
64
|
+
if (newItems.length === 0)
|
|
65
|
+
return activeIx.value = -1;
|
|
66
|
+
const nextIndex = currentIndex < newItems.length ? currentIndex : newItems.length - 1;
|
|
67
|
+
activeIx.value = nextIndex;
|
|
68
|
+
newItems[nextIndex]?.focus();
|
|
69
|
+
});
|
|
70
|
+
} else if (currentIndex < activeIx.value) {
|
|
71
|
+
activeIx.value--;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
attr,
|
|
76
|
+
list,
|
|
77
|
+
loop,
|
|
78
|
+
orientation,
|
|
79
|
+
init,
|
|
80
|
+
focus,
|
|
81
|
+
getItems,
|
|
82
|
+
focusElement,
|
|
83
|
+
onItemUnmount
|
|
84
|
+
};
|
|
85
|
+
}, {
|
|
86
|
+
injectionKey,
|
|
87
|
+
name: "RovingFocus"
|
|
88
|
+
});
|
|
89
|
+
export const useProvideRovingFocus = useProvide;
|
|
90
|
+
export const useRovingFocus = useState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useRovingFocus } from './_lib/context.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useRovingFocus } from "./_lib/context.js";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare var __VLS_16: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
default?: (props: typeof __VLS_16) => any;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
9
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
10
|
+
new (): {
|
|
11
|
+
$slots: S;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { unrefElement } from "@vueuse/core";
|
|
3
|
+
import { computed, onBeforeUnmount, useTemplateRef } from "vue";
|
|
4
|
+
import Renderless from "../renderless/renderless.vue";
|
|
5
|
+
import { useRovingFocus } from "./_lib/context";
|
|
6
|
+
const { focus, focusElement, orientation, attr, onItemUnmount } = useRovingFocus();
|
|
7
|
+
const isVertical = computed(() => orientation === "vertical" || orientation === "both");
|
|
8
|
+
const isHorizontal = computed(() => orientation === "horizontal" || orientation === "both");
|
|
9
|
+
const attrs = computed(() => ({ [attr]: "" }));
|
|
10
|
+
const ref = useTemplateRef("item");
|
|
11
|
+
onBeforeUnmount(() => {
|
|
12
|
+
const el = unrefElement(ref);
|
|
13
|
+
onItemUnmount(el);
|
|
14
|
+
});
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Renderless
|
|
19
|
+
v-bind='attrs'
|
|
20
|
+
ref='item'
|
|
21
|
+
:tabindex='-1'
|
|
22
|
+
@keydown.up.prevent='isVertical && focus("prev", $event.currentTarget)'
|
|
23
|
+
@keydown.down.prevent='isVertical && focus("next", $event.currentTarget)'
|
|
24
|
+
@keydown.left.prevent='isHorizontal && focus("prev", $event.currentTarget)'
|
|
25
|
+
@keydown.right.prevent='isHorizontal && focus("next", $event.currentTarget)'
|
|
26
|
+
@keydown.home.prevent='focus("first")'
|
|
27
|
+
@keydown.end.prevent='focus("last")'
|
|
28
|
+
@click.prevent='focusElement($event.currentTarget)'
|
|
29
|
+
>
|
|
30
|
+
<slot />
|
|
31
|
+
</Renderless>
|
|
32
|
+
</template>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare var __VLS_16: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
default?: (props: typeof __VLS_16) => any;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
9
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
10
|
+
new (): {
|
|
11
|
+
$slots: S;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RovingFocusProps {
|
|
2
|
+
/** Loop focus from last to first and vice versa */
|
|
3
|
+
loop?: boolean;
|
|
4
|
+
/** Allowed arrow key directions */
|
|
5
|
+
orientation?: 'vertical' | 'horizontal' | 'both';
|
|
6
|
+
/** Custom attribute instead of data-roving-item */
|
|
7
|
+
attr?: string;
|
|
8
|
+
}
|
|
9
|
+
declare var __VLS_7: {};
|
|
10
|
+
type __VLS_Slots = {} & {
|
|
11
|
+
default?: (props: typeof __VLS_7) => any;
|
|
12
|
+
};
|
|
13
|
+
declare const __VLS_base: import("vue").DefineComponent<RovingFocusProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<RovingFocusProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
15
|
+
declare const _default: typeof __VLS_export;
|
|
16
|
+
export default _default;
|
|
17
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
18
|
+
new (): {
|
|
19
|
+
$slots: S;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { nextTick, onMounted, useTemplateRef } from "vue";
|
|
3
|
+
import Renderless from "../renderless/renderless.vue";
|
|
4
|
+
import { useProvideRovingFocus } from "./_lib/context";
|
|
5
|
+
const { loop = false, orientation = "vertical" } = defineProps({
|
|
6
|
+
loop: { type: Boolean, required: false },
|
|
7
|
+
orientation: { type: String, required: false },
|
|
8
|
+
attr: { type: String, required: false }
|
|
9
|
+
});
|
|
10
|
+
const list = useTemplateRef("list");
|
|
11
|
+
const { init } = useProvideRovingFocus({
|
|
12
|
+
list,
|
|
13
|
+
loop,
|
|
14
|
+
orientation
|
|
15
|
+
});
|
|
16
|
+
onMounted(() => nextTick(() => init()));
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<Renderless ref='list'>
|
|
21
|
+
<slot />
|
|
22
|
+
</Renderless>
|
|
23
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RovingFocusProps {
|
|
2
|
+
/** Loop focus from last to first and vice versa */
|
|
3
|
+
loop?: boolean;
|
|
4
|
+
/** Allowed arrow key directions */
|
|
5
|
+
orientation?: 'vertical' | 'horizontal' | 'both';
|
|
6
|
+
/** Custom attribute instead of data-roving-item */
|
|
7
|
+
attr?: string;
|
|
8
|
+
}
|
|
9
|
+
declare var __VLS_7: {};
|
|
10
|
+
type __VLS_Slots = {} & {
|
|
11
|
+
default?: (props: typeof __VLS_7) => any;
|
|
12
|
+
};
|
|
13
|
+
declare const __VLS_base: import("vue").DefineComponent<RovingFocusProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<RovingFocusProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
15
|
+
declare const _default: typeof __VLS_export;
|
|
16
|
+
export default _default;
|
|
17
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
18
|
+
new (): {
|
|
19
|
+
$slots: S;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -23,7 +23,7 @@ declare const __VLS_export: <Value extends string = string, Ext extends Combobox
|
|
|
23
23
|
open?: boolean;
|
|
24
24
|
modelValue?: ComboboxItem<Value, Ext> | null;
|
|
25
25
|
search?: string;
|
|
26
|
-
}) & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("
|
|
26
|
+
}) & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "submit", args_0: string, args_1: ComboboxItem) => void) & ((evt: "open", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "update:modelValue", value: ComboboxItem<Value, Ext> | null) => void) & ((evt: "update:search", value: string) => void) & ((evt: "update:open", value: boolean) => void)>>> & import("vue").PublicProps;
|
|
27
27
|
expose: (exposed: {}) => void;
|
|
28
28
|
attrs: any;
|
|
29
29
|
slots: {
|
|
@@ -37,7 +37,7 @@ declare const __VLS_export: <Value extends string = string, Ext extends Combobox
|
|
|
37
37
|
} & {
|
|
38
38
|
rightSection?: (props: {}) => any;
|
|
39
39
|
};
|
|
40
|
-
emit: (((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("
|
|
40
|
+
emit: (((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "submit", args_0: string, args_1: ComboboxItem) => void) & ((evt: "open", args_0: import("..").ComboboxDropdownEventSource) => void)) & (((evt: "update:modelValue", value: ComboboxItem<Value, Ext> | null) => void) & ((evt: "update:search", value: string) => void) & ((evt: "update:open", value: boolean) => void));
|
|
41
41
|
}>) => import("vue").VNode & {
|
|
42
42
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
43
43
|
};
|
|
@@ -23,7 +23,7 @@ declare const __VLS_export: <Value extends string = string, Ext extends Combobox
|
|
|
23
23
|
open?: boolean;
|
|
24
24
|
modelValue?: ComboboxItem<Value, Ext> | null;
|
|
25
25
|
search?: string;
|
|
26
|
-
}) & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("
|
|
26
|
+
}) & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "submit", args_0: string, args_1: ComboboxItem) => void) & ((evt: "open", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "update:modelValue", value: ComboboxItem<Value, Ext> | null) => void) & ((evt: "update:search", value: string) => void) & ((evt: "update:open", value: boolean) => void)>>> & import("vue").PublicProps;
|
|
27
27
|
expose: (exposed: {}) => void;
|
|
28
28
|
attrs: any;
|
|
29
29
|
slots: {
|
|
@@ -37,7 +37,7 @@ declare const __VLS_export: <Value extends string = string, Ext extends Combobox
|
|
|
37
37
|
} & {
|
|
38
38
|
rightSection?: (props: {}) => any;
|
|
39
39
|
};
|
|
40
|
-
emit: (((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("
|
|
40
|
+
emit: (((evt: "select", args_0: number) => void) & ((evt: "clear") => void) & ((evt: "close", args_0: import("..").ComboboxDropdownEventSource) => void) & ((evt: "submit", args_0: string, args_1: ComboboxItem) => void) & ((evt: "open", args_0: import("..").ComboboxDropdownEventSource) => void)) & (((evt: "update:modelValue", value: ComboboxItem<Value, Ext> | null) => void) & ((evt: "update:search", value: string) => void) & ((evt: "update:open", value: boolean) => void));
|
|
41
41
|
}>) => import("vue").VNode & {
|
|
42
42
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
43
43
|
};
|