@bitrix24/b24ui-nuxt 0.5.9 → 0.5.10
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/.nuxt/b24ui/navigation-menu.ts +0 -2
- package/.nuxt/b24ui/popover.ts +1 -1
- package/dist/meta.d.mts +4789 -4897
- package/dist/meta.mjs +4789 -4897
- package/dist/module.json +5 -5
- package/dist/module.mjs +11 -7
- package/dist/runtime/components/Advice.vue +47 -54
- package/dist/runtime/components/Advice.vue.d.ts +170 -0
- package/dist/runtime/components/Alert.vue +71 -96
- package/dist/runtime/components/Alert.vue.d.ts +464 -0
- package/dist/runtime/components/App.vue +37 -34
- package/dist/runtime/components/App.vue.d.ts +23 -0
- package/dist/runtime/components/Avatar.vue +69 -81
- package/dist/runtime/components/Avatar.vue.d.ts +281 -0
- package/dist/runtime/components/AvatarGroup.vue +53 -76
- package/dist/runtime/components/AvatarGroup.vue.d.ts +204 -0
- package/dist/runtime/components/Badge.vue +83 -83
- package/dist/runtime/components/Badge.vue.d.ts +517 -0
- package/dist/runtime/components/Button.vue +219 -149
- package/dist/runtime/components/Button.vue.d.ts +640 -0
- package/dist/runtime/components/ButtonGroup.vue +35 -51
- package/dist/runtime/components/ButtonGroup.vue.d.ts +116 -0
- package/dist/runtime/components/Calendar.vue +186 -152
- package/dist/runtime/components/Calendar.vue.d.ts +437 -0
- package/dist/runtime/components/Checkbox.vue +84 -73
- package/dist/runtime/components/Checkbox.vue.d.ts +354 -0
- package/dist/runtime/components/Chip.vue +59 -74
- package/dist/runtime/components/Chip.vue.d.ts +271 -0
- package/dist/runtime/components/Collapsible.vue +44 -41
- package/dist/runtime/components/Collapsible.vue.d.ts +118 -0
- package/dist/runtime/components/Container.vue +18 -27
- package/dist/runtime/components/Container.vue.d.ts +27 -0
- package/dist/runtime/components/Countdown.vue +198 -378
- package/dist/runtime/components/Countdown.vue.d.ts +356 -0
- package/dist/runtime/components/DescriptionList.vue +102 -149
- package/dist/runtime/components/DescriptionList.vue.d.ts +379 -0
- package/dist/runtime/components/DropdownMenu.vue +83 -139
- package/dist/runtime/components/DropdownMenu.vue.d.ts +533 -0
- package/dist/runtime/components/DropdownMenuContent.vue +137 -81
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +228 -0
- package/dist/runtime/components/Form.vue +162 -216
- package/dist/runtime/components/Form.vue.d.ts +55 -0
- package/dist/runtime/components/FormField.vue +76 -80
- package/dist/runtime/components/FormField.vue.d.ts +282 -0
- package/dist/runtime/components/Input.vue +160 -179
- package/dist/runtime/components/Input.vue.d.ts +755 -0
- package/dist/runtime/components/InputMenu.vue +300 -381
- package/dist/runtime/components/InputMenu.vue.d.ts +1504 -0
- package/dist/runtime/components/InputNumber.vue +178 -175
- package/dist/runtime/components/InputNumber.vue.d.ts +658 -0
- package/dist/runtime/components/Kbd.vue +33 -45
- package/dist/runtime/components/Kbd.vue.d.ts +109 -0
- package/dist/runtime/components/Link.vue +179 -173
- package/dist/runtime/components/Link.vue.d.ts +129 -0
- package/dist/runtime/components/LinkBase.vue +64 -42
- package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
- package/dist/runtime/components/Modal.vue +105 -127
- package/dist/runtime/components/Modal.vue.d.ts +327 -0
- package/dist/runtime/components/ModalDialogClose.vue +4 -8
- package/dist/runtime/components/ModalDialogClose.vue.d.ts +10 -0
- package/dist/runtime/components/Navbar.vue +24 -33
- package/dist/runtime/components/Navbar.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarDivider.vue +24 -33
- package/dist/runtime/components/NavbarDivider.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarSection.vue +24 -33
- package/dist/runtime/components/NavbarSection.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarSpacer.vue +24 -33
- package/dist/runtime/components/NavbarSpacer.vue.d.ts +101 -0
- package/dist/runtime/components/NavigationMenu.vue +152 -216
- package/dist/runtime/components/NavigationMenu.vue.d.ts +824 -0
- package/dist/runtime/components/OverlayProvider.vue +13 -17
- package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
- package/dist/runtime/components/Popover.vue +81 -81
- package/dist/runtime/components/Popover.vue.d.ts +147 -0
- package/dist/runtime/components/Progress.vue +109 -136
- package/dist/runtime/components/Progress.vue.d.ts +592 -0
- package/dist/runtime/components/RadioGroup.vue +120 -134
- package/dist/runtime/components/RadioGroup.vue.d.ts +723 -0
- package/dist/runtime/components/Range.vue +94 -85
- package/dist/runtime/components/Range.vue.d.ts +417 -0
- package/dist/runtime/components/Select.vue +212 -260
- package/dist/runtime/components/Select.vue.d.ts +1200 -0
- package/dist/runtime/components/SelectMenu.vue +272 -366
- package/dist/runtime/components/SelectMenu.vue.d.ts +1298 -0
- package/dist/runtime/components/Separator.vue +61 -71
- package/dist/runtime/components/Separator.vue.d.ts +400 -0
- package/dist/runtime/components/Sidebar.vue +24 -33
- package/dist/runtime/components/Sidebar.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarBody.vue +30 -38
- package/dist/runtime/components/SidebarBody.vue.d.ts +90 -0
- package/dist/runtime/components/SidebarFooter.vue +24 -33
- package/dist/runtime/components/SidebarFooter.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarHeader.vue +24 -33
- package/dist/runtime/components/SidebarHeader.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarHeading.vue +24 -33
- package/dist/runtime/components/SidebarHeading.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarLayout.vue +40 -70
- package/dist/runtime/components/SidebarLayout.vue.d.ts +222 -0
- package/dist/runtime/components/SidebarSection.vue +24 -33
- package/dist/runtime/components/SidebarSection.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarSpacer.vue +24 -33
- package/dist/runtime/components/SidebarSpacer.vue.d.ts +101 -0
- package/dist/runtime/components/Skeleton.vue +17 -22
- package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
- package/dist/runtime/components/Slideover.vue +108 -131
- package/dist/runtime/components/Slideover.vue.d.ts +360 -0
- package/dist/runtime/components/StackedLayout.vue +40 -73
- package/dist/runtime/components/StackedLayout.vue.d.ts +192 -0
- package/dist/runtime/components/Switch.vue +100 -95
- package/dist/runtime/components/Switch.vue.d.ts +587 -0
- package/dist/runtime/components/Tabs.vue +83 -105
- package/dist/runtime/components/Tabs.vue.d.ts +453 -0
- package/dist/runtime/components/Textarea.vue +177 -201
- package/dist/runtime/components/Textarea.vue.d.ts +601 -0
- package/dist/runtime/components/Toast.vue +94 -105
- package/dist/runtime/components/Toast.vue.d.ts +438 -0
- package/dist/runtime/components/Toaster.vue +94 -111
- package/dist/runtime/components/Toaster.vue.d.ts +219 -0
- package/dist/runtime/components/Tooltip.vue +78 -64
- package/dist/runtime/components/Tooltip.vue.d.ts +186 -0
- package/dist/runtime/components/content/TableWrapper.vue +58 -70
- package/dist/runtime/components/content/TableWrapper.vue.d.ts +237 -0
- package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
- package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
- package/dist/runtime/composables/useComponentIcons.d.ts +1 -1
- package/dist/runtime/composables/useFormField.d.ts +1 -1
- package/dist/runtime/prose/A.vue +18 -23
- package/dist/runtime/prose/A.vue.d.ts +84 -0
- package/dist/runtime/prose/Blockquote.vue +18 -23
- package/dist/runtime/prose/Blockquote.vue.d.ts +84 -0
- package/dist/runtime/prose/Code.vue +23 -31
- package/dist/runtime/prose/Code.vue.d.ts +97 -0
- package/dist/runtime/prose/Em.vue +18 -23
- package/dist/runtime/prose/Em.vue.d.ts +84 -0
- package/dist/runtime/prose/H1.vue +18 -23
- package/dist/runtime/prose/H1.vue.d.ts +97 -0
- package/dist/runtime/prose/H2.vue +18 -23
- package/dist/runtime/prose/H2.vue.d.ts +123 -0
- package/dist/runtime/prose/H3.vue +18 -23
- package/dist/runtime/prose/H3.vue.d.ts +123 -0
- package/dist/runtime/prose/H4.vue +18 -23
- package/dist/runtime/prose/H4.vue.d.ts +123 -0
- package/dist/runtime/prose/H5.vue +18 -23
- package/dist/runtime/prose/H5.vue.d.ts +123 -0
- package/dist/runtime/prose/H6.vue +18 -23
- package/dist/runtime/prose/H6.vue.d.ts +123 -0
- package/dist/runtime/prose/Hr.vue +18 -19
- package/dist/runtime/prose/Hr.vue.d.ts +74 -0
- package/dist/runtime/prose/Img.vue +18 -23
- package/dist/runtime/prose/Img.vue.d.ts +77 -0
- package/dist/runtime/prose/Li.vue +18 -23
- package/dist/runtime/prose/Li.vue.d.ts +84 -0
- package/dist/runtime/prose/Ol.vue +18 -23
- package/dist/runtime/prose/Ol.vue.d.ts +84 -0
- package/dist/runtime/prose/P.vue +18 -23
- package/dist/runtime/prose/P.vue.d.ts +84 -0
- package/dist/runtime/prose/Pre.vue +28 -33
- package/dist/runtime/prose/Pre.vue.d.ts +117 -0
- package/dist/runtime/prose/Strong.vue +18 -23
- package/dist/runtime/prose/Strong.vue.d.ts +84 -0
- package/dist/runtime/prose/Table.vue +44 -54
- package/dist/runtime/prose/Table.vue.d.ts +144 -0
- package/dist/runtime/prose/Tbody.vue +18 -23
- package/dist/runtime/prose/Tbody.vue.d.ts +84 -0
- package/dist/runtime/prose/Td.vue +18 -23
- package/dist/runtime/prose/Td.vue.d.ts +84 -0
- package/dist/runtime/prose/Th.vue +18 -23
- package/dist/runtime/prose/Th.vue.d.ts +84 -0
- package/dist/runtime/prose/Thead.vue +18 -23
- package/dist/runtime/prose/Thead.vue.d.ts +84 -0
- package/dist/runtime/prose/Tr.vue +18 -23
- package/dist/runtime/prose/Tr.vue.d.ts +84 -0
- package/dist/runtime/prose/Ul.vue +18 -23
- package/dist/runtime/prose/Ul.vue.d.ts +84 -0
- package/dist/runtime/vue/components/Link.vue +201 -202
- package/dist/runtime/vue/components/Link.vue.d.ts +129 -0
- package/dist/runtime/vue/stubs.d.ts +3 -3
- package/dist/shared/{b24ui-nuxt.C1lGF53R.mjs → b24ui-nuxt.CS9Lf0os.mjs} +4 -3
- package/dist/types.d.mts +3 -5
- package/dist/unplugin.mjs +1 -1
- package/dist/vite.mjs +1 -1
- package/package.json +59 -32
- package/dist/meta.cjs +0 -72220
- package/dist/meta.d.cts +0 -72218
- package/dist/meta.d.ts +0 -72218
- package/dist/module.cjs +0 -59
- package/dist/module.d.cts +0 -15
- package/dist/module.d.ts +0 -15
- package/dist/shared/b24ui-nuxt.BVg3rkkG.cjs +0 -7720
- package/dist/types.d.ts +0 -7
- package/dist/unplugin.cjs +0 -236
- package/dist/unplugin.d.cts +0 -33
- package/dist/unplugin.d.ts +0 -33
- package/dist/vite.cjs +0 -21
- package/dist/vite.d.cts +0 -14
- package/dist/vite.d.ts +0 -14
|
@@ -1,345 +1,205 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { tv } from '../utils/tv'
|
|
8
|
-
import type { AvatarProps } from '../types'
|
|
9
|
-
|
|
10
|
-
const appConfigCountdown = _appConfig as AppConfig & { b24ui: { countdown: Partial<typeof theme> } }
|
|
11
|
-
|
|
12
|
-
const countdown = tv({ extend: tv(theme), ...(appConfigCountdown.b24ui?.countdown || {}) })
|
|
13
|
-
|
|
14
|
-
type CountdownVariants = VariantProps<typeof countdown>
|
|
15
|
-
|
|
16
|
-
export interface CountdownData {
|
|
17
|
-
days: number
|
|
18
|
-
hours: number
|
|
19
|
-
minutes: number
|
|
20
|
-
seconds: number
|
|
21
|
-
milliseconds: number
|
|
22
|
-
totalDays: number
|
|
23
|
-
totalHours: number
|
|
24
|
-
totalMinutes: number
|
|
25
|
-
totalSeconds: number
|
|
26
|
-
totalMilliseconds: number
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface CountdownProps extends Omit<UseComponentIconsProps, 'loading' | 'trailing' | 'trailingIcon'> {
|
|
30
|
-
/**
|
|
31
|
-
* The element or component this component should render as
|
|
32
|
-
* @defaultValue 'span'
|
|
33
|
-
*/
|
|
34
|
-
as?: any
|
|
35
|
-
/**
|
|
36
|
-
* @defaultValue 'md'
|
|
37
|
-
*/
|
|
38
|
-
size?: CountdownVariants['size']
|
|
39
|
-
/**
|
|
40
|
-
* Emits the countdown events
|
|
41
|
-
* @defaultValue true
|
|
42
|
-
*/
|
|
43
|
-
emitEvents?: boolean
|
|
44
|
-
/**
|
|
45
|
-
* Number of seconds to countdown
|
|
46
|
-
* @defaultValue 0
|
|
47
|
-
*/
|
|
48
|
-
seconds?: number | string
|
|
49
|
-
/**
|
|
50
|
-
* Should seconds be divided into minutes?
|
|
51
|
-
* @defaultValue true
|
|
52
|
-
*/
|
|
53
|
-
showMinutes?: boolean
|
|
54
|
-
/**
|
|
55
|
-
* Shows a `Circle` around the countdown
|
|
56
|
-
* @defaultValue false
|
|
57
|
-
*/
|
|
58
|
-
useCircle?: boolean
|
|
59
|
-
/**
|
|
60
|
-
* The interval time (in milliseconds) of the countdown progress
|
|
61
|
-
* @defaultValue 1000
|
|
62
|
-
*/
|
|
63
|
-
interval?: number
|
|
64
|
-
/**
|
|
65
|
-
* Starts the countdown automatically when initialized
|
|
66
|
-
* @defaultValue true
|
|
67
|
-
*/
|
|
68
|
-
needStartImmediately?: boolean
|
|
69
|
-
/**
|
|
70
|
-
* Generate the current time of a specific time zone
|
|
71
|
-
* @defaultValue Date.now()
|
|
72
|
-
*/
|
|
73
|
-
now?: () => number
|
|
74
|
-
class?: any
|
|
75
|
-
b24ui?: Partial<typeof countdown.slots>
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export interface CountdownEmits {
|
|
79
|
-
(e: 'start' | 'end' | 'abort'): void
|
|
80
|
-
(e: 'progress', payload: CountdownData): void
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export interface CountdownSlots {
|
|
84
|
-
leading(props?: {}): any
|
|
85
|
-
default(props: CountdownData & { formatTime: string }): any
|
|
86
|
-
}
|
|
1
|
+
<script>
|
|
2
|
+
import _appConfig from "#build/app.config";
|
|
3
|
+
import theme from "#build/b24ui/countdown";
|
|
4
|
+
import { tv } from "../utils/tv";
|
|
5
|
+
const appConfigCountdown = _appConfig;
|
|
6
|
+
const countdown = tv({ extend: tv(theme), ...appConfigCountdown.b24ui?.countdown || {} });
|
|
87
7
|
</script>
|
|
88
8
|
|
|
89
|
-
<script setup
|
|
90
|
-
import { ref, computed, watch, onMounted, onBeforeUnmount } from
|
|
91
|
-
import { useComponentIcons } from
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
emitEvents:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
9
|
+
<script setup>
|
|
10
|
+
import { ref, computed, watch, onMounted, onBeforeUnmount } from "vue";
|
|
11
|
+
import { useComponentIcons } from "../composables/useComponentIcons";
|
|
12
|
+
const MILLISECONDS_SECOND = 1e3;
|
|
13
|
+
const MILLISECONDS_MINUTE = 60 * MILLISECONDS_SECOND;
|
|
14
|
+
const MILLISECONDS_HOUR = 60 * MILLISECONDS_MINUTE;
|
|
15
|
+
const MILLISECONDS_DAY = 24 * MILLISECONDS_HOUR;
|
|
16
|
+
defineOptions({ inheritAttrs: false });
|
|
17
|
+
const props = defineProps({
|
|
18
|
+
as: {
|
|
19
|
+
type: null,
|
|
20
|
+
required: false,
|
|
21
|
+
default: "span"
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
type: null,
|
|
25
|
+
required: false
|
|
26
|
+
},
|
|
27
|
+
emitEvents: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
required: false,
|
|
30
|
+
default: true
|
|
31
|
+
},
|
|
32
|
+
seconds: {
|
|
33
|
+
type: [Number, String],
|
|
34
|
+
required: false,
|
|
35
|
+
default: 0
|
|
36
|
+
},
|
|
37
|
+
showMinutes: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
required: false,
|
|
40
|
+
default: true
|
|
41
|
+
},
|
|
42
|
+
useCircle: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
required: false,
|
|
45
|
+
default: false
|
|
46
|
+
},
|
|
47
|
+
interval: {
|
|
48
|
+
type: Number,
|
|
49
|
+
required: false,
|
|
50
|
+
default: 1e3
|
|
51
|
+
},
|
|
52
|
+
needStartImmediately: {
|
|
53
|
+
type: Boolean,
|
|
54
|
+
required: false,
|
|
55
|
+
default: true
|
|
56
|
+
},
|
|
57
|
+
now: {
|
|
58
|
+
type: Function,
|
|
59
|
+
required: false,
|
|
60
|
+
default: () => Date.now()
|
|
61
|
+
},
|
|
62
|
+
class: {
|
|
63
|
+
type: null,
|
|
64
|
+
required: false
|
|
65
|
+
},
|
|
66
|
+
b24ui: {
|
|
67
|
+
type: Object,
|
|
68
|
+
required: false
|
|
69
|
+
},
|
|
70
|
+
icon: {
|
|
71
|
+
type: [Function, Object],
|
|
72
|
+
required: false
|
|
73
|
+
},
|
|
74
|
+
avatar: {
|
|
75
|
+
type: Object,
|
|
76
|
+
required: false
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const emits = defineEmits(["start", "end", "abort", "progress"]);
|
|
80
|
+
defineSlots();
|
|
118
81
|
const { isLeading, leadingIconName } = useComponentIcons(
|
|
119
82
|
computed(() => ({ ...props, loading: false }))
|
|
120
|
-
)
|
|
121
|
-
|
|
83
|
+
);
|
|
122
84
|
const b24ui = computed(() => countdown({
|
|
123
85
|
size: props.size,
|
|
124
86
|
leading: Boolean(isLeading.value),
|
|
125
87
|
useCircle: Boolean(props.useCircle)
|
|
126
|
-
}))
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const counting = ref<boolean>(false)
|
|
132
|
-
/**
|
|
133
|
-
* The absolute end time.
|
|
134
|
-
*/
|
|
135
|
-
const endTime = ref<number>(0)
|
|
136
|
-
/**
|
|
137
|
-
* The remaining milliseconds.
|
|
138
|
-
*/
|
|
139
|
-
const totalMilliseconds = ref<number>(0)
|
|
140
|
-
/**
|
|
141
|
-
* The request ID of the requestAnimationFrame.
|
|
142
|
-
*/
|
|
143
|
-
const requestId = ref<number>(0)
|
|
144
|
-
// endregion ////
|
|
145
|
-
|
|
146
|
-
// region events ////
|
|
88
|
+
}));
|
|
89
|
+
const counting = ref(false);
|
|
90
|
+
const endTime = ref(0);
|
|
91
|
+
const totalMilliseconds = ref(0);
|
|
92
|
+
const requestId = ref(0);
|
|
147
93
|
onMounted(() => {
|
|
148
|
-
document.addEventListener(
|
|
149
|
-
})
|
|
150
|
-
|
|
94
|
+
document.addEventListener("visibilitychange", handleVisibilityChange.bind(this));
|
|
95
|
+
});
|
|
151
96
|
onBeforeUnmount(() => {
|
|
152
|
-
document.removeEventListener(
|
|
153
|
-
pause()
|
|
154
|
-
})
|
|
155
|
-
// endregion ////
|
|
156
|
-
|
|
157
|
-
// region watch ////
|
|
158
|
-
/**
|
|
159
|
-
* Update the countdown when props changed.
|
|
160
|
-
*/
|
|
97
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange.bind(this));
|
|
98
|
+
pause();
|
|
99
|
+
});
|
|
161
100
|
watch(
|
|
162
101
|
() => props,
|
|
163
102
|
() => {
|
|
164
|
-
totalMilliseconds.value = Number(props.seconds) *
|
|
165
|
-
endTime.value = props.now() + Number(props.seconds) *
|
|
166
|
-
|
|
103
|
+
totalMilliseconds.value = Number(props.seconds) * 1e3;
|
|
104
|
+
endTime.value = props.now() + Number(props.seconds) * 1e3;
|
|
167
105
|
if (props.needStartImmediately) {
|
|
168
|
-
start()
|
|
106
|
+
start();
|
|
169
107
|
}
|
|
170
108
|
},
|
|
171
109
|
{
|
|
172
110
|
deep: true,
|
|
173
111
|
immediate: true
|
|
174
112
|
}
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
return Math.floor(totalMilliseconds.value /
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const
|
|
204
|
-
return Math.floor((totalMilliseconds.value % MILLISECONDS_MINUTE) / MILLISECONDS_SECOND)
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Remaining milliseconds.
|
|
209
|
-
*/
|
|
210
|
-
const milliseconds = computed((): number => {
|
|
211
|
-
return Math.floor(totalMilliseconds.value % MILLISECONDS_SECOND)
|
|
212
|
-
})
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Total remaining days.
|
|
216
|
-
*/
|
|
217
|
-
const totalDays = computed((): number => {
|
|
218
|
-
return days.value
|
|
219
|
-
})
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Total remaining hours.
|
|
223
|
-
*/
|
|
224
|
-
const totalHours = computed((): number => {
|
|
225
|
-
return Math.floor(totalMilliseconds.value / MILLISECONDS_HOUR)
|
|
226
|
-
})
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Total remaining minutes.
|
|
230
|
-
*/
|
|
231
|
-
const totalMinutes = computed((): number => {
|
|
232
|
-
return Math.floor(totalMilliseconds.value / MILLISECONDS_MINUTE)
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Total remaining seconds.
|
|
237
|
-
*/
|
|
238
|
-
const totalSeconds = computed((): number => {
|
|
239
|
-
return Math.floor(totalMilliseconds.value / MILLISECONDS_SECOND)
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
const formatTime = computed((): string => {
|
|
113
|
+
);
|
|
114
|
+
const days = computed(() => {
|
|
115
|
+
return Math.floor(totalMilliseconds.value / MILLISECONDS_DAY);
|
|
116
|
+
});
|
|
117
|
+
const hours = computed(() => {
|
|
118
|
+
return Math.floor(totalMilliseconds.value % MILLISECONDS_DAY / MILLISECONDS_HOUR);
|
|
119
|
+
});
|
|
120
|
+
const minutes = computed(() => {
|
|
121
|
+
return Math.floor(totalMilliseconds.value % MILLISECONDS_HOUR / MILLISECONDS_MINUTE);
|
|
122
|
+
});
|
|
123
|
+
const secondsValue = computed(() => {
|
|
124
|
+
return Math.floor(totalMilliseconds.value % MILLISECONDS_MINUTE / MILLISECONDS_SECOND);
|
|
125
|
+
});
|
|
126
|
+
const milliseconds = computed(() => {
|
|
127
|
+
return Math.floor(totalMilliseconds.value % MILLISECONDS_SECOND);
|
|
128
|
+
});
|
|
129
|
+
const totalDays = computed(() => {
|
|
130
|
+
return days.value;
|
|
131
|
+
});
|
|
132
|
+
const totalHours = computed(() => {
|
|
133
|
+
return Math.floor(totalMilliseconds.value / MILLISECONDS_HOUR);
|
|
134
|
+
});
|
|
135
|
+
const totalMinutes = computed(() => {
|
|
136
|
+
return Math.floor(totalMilliseconds.value / MILLISECONDS_MINUTE);
|
|
137
|
+
});
|
|
138
|
+
const totalSeconds = computed(() => {
|
|
139
|
+
return Math.floor(totalMilliseconds.value / MILLISECONDS_SECOND);
|
|
140
|
+
});
|
|
141
|
+
const formatTime = computed(() => {
|
|
243
142
|
if (props.showMinutes && !props.useCircle) {
|
|
244
|
-
return `${totalMinutes.value < 10 ?
|
|
143
|
+
return `${totalMinutes.value < 10 ? "0" : ""}${totalMinutes.value}:${secondsValue.value < 10 ? "0" : ""}${secondsValue.value}`;
|
|
245
144
|
} else if (props.useCircle) {
|
|
246
|
-
return `:${totalSeconds.value}
|
|
145
|
+
return `:${totalSeconds.value}`;
|
|
247
146
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
// endregion ////
|
|
252
|
-
|
|
253
|
-
// region actions ////
|
|
254
|
-
/**
|
|
255
|
-
* Starts to countdown.
|
|
256
|
-
*/
|
|
257
|
-
function start(): void {
|
|
147
|
+
return String(totalSeconds.value);
|
|
148
|
+
});
|
|
149
|
+
function start() {
|
|
258
150
|
if (counting.value) {
|
|
259
|
-
return
|
|
151
|
+
return;
|
|
260
152
|
}
|
|
261
|
-
|
|
262
|
-
counting.value = true
|
|
263
|
-
|
|
153
|
+
counting.value = true;
|
|
264
154
|
if (!props.needStartImmediately) {
|
|
265
|
-
totalMilliseconds.value = Number(props.seconds) *
|
|
266
|
-
endTime.value = props.now() + Number(props.seconds) *
|
|
155
|
+
totalMilliseconds.value = Number(props.seconds) * 1e3;
|
|
156
|
+
endTime.value = props.now() + Number(props.seconds) * 1e3;
|
|
267
157
|
}
|
|
268
|
-
|
|
269
158
|
if (props.emitEvents) {
|
|
270
|
-
emits(
|
|
159
|
+
emits("start");
|
|
271
160
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
continueProcess()
|
|
161
|
+
if (document?.visibilityState === "visible") {
|
|
162
|
+
continueProcess();
|
|
275
163
|
}
|
|
276
164
|
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Continues the countdown.
|
|
280
|
-
*/
|
|
281
|
-
function continueProcess(): void {
|
|
165
|
+
function continueProcess() {
|
|
282
166
|
if (!counting.value) {
|
|
283
|
-
return
|
|
167
|
+
return;
|
|
284
168
|
}
|
|
285
|
-
|
|
286
|
-
const delay = Math.min(totalMilliseconds.value, props.interval)
|
|
287
|
-
|
|
169
|
+
const delay = Math.min(totalMilliseconds.value, props.interval);
|
|
288
170
|
if (delay > 0) {
|
|
289
|
-
let init
|
|
290
|
-
let prev
|
|
291
|
-
const step = (now
|
|
171
|
+
let init;
|
|
172
|
+
let prev;
|
|
173
|
+
const step = (now) => {
|
|
292
174
|
if (!init) {
|
|
293
|
-
init = now
|
|
175
|
+
init = now;
|
|
294
176
|
}
|
|
295
|
-
|
|
296
177
|
if (!prev) {
|
|
297
|
-
prev = now
|
|
178
|
+
prev = now;
|
|
298
179
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
range >= delay
|
|
304
|
-
// Avoid losing time about one second per minute (now - prev ≈ 16ms)
|
|
305
|
-
|| range + ((now - prev) / 2) >= delay
|
|
306
|
-
) {
|
|
307
|
-
progress()
|
|
180
|
+
const range = now - init;
|
|
181
|
+
if (range >= delay || range + (now - prev) / 2 >= delay) {
|
|
182
|
+
progress();
|
|
308
183
|
} else {
|
|
309
|
-
requestId.value = requestAnimationFrame(step)
|
|
184
|
+
requestId.value = requestAnimationFrame(step);
|
|
310
185
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
requestId.value = requestAnimationFrame(step)
|
|
186
|
+
prev = now;
|
|
187
|
+
};
|
|
188
|
+
requestId.value = requestAnimationFrame(step);
|
|
316
189
|
} else {
|
|
317
|
-
stop()
|
|
190
|
+
stop();
|
|
318
191
|
}
|
|
319
192
|
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
* Pauses the countdown.
|
|
323
|
-
*/
|
|
324
|
-
function pause(): void {
|
|
325
|
-
cancelAnimationFrame(requestId.value)
|
|
193
|
+
function pause() {
|
|
194
|
+
cancelAnimationFrame(requestId.value);
|
|
326
195
|
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Progresses to countdown.
|
|
330
|
-
*/
|
|
331
|
-
function progress(): void {
|
|
196
|
+
function progress() {
|
|
332
197
|
if (!counting.value) {
|
|
333
|
-
return
|
|
198
|
+
return;
|
|
334
199
|
}
|
|
335
|
-
|
|
336
|
-
update()
|
|
337
|
-
|
|
200
|
+
update();
|
|
338
201
|
if (props.emitEvents && totalMilliseconds.value > 0) {
|
|
339
|
-
|
|
340
|
-
* Countdown progress event.
|
|
341
|
-
*/
|
|
342
|
-
emits('progress', {
|
|
202
|
+
emits("progress", {
|
|
343
203
|
days: days.value,
|
|
344
204
|
hours: hours.value,
|
|
345
205
|
minutes: minutes.value,
|
|
@@ -350,114 +210,74 @@ function progress(): void {
|
|
|
350
210
|
totalMinutes: totalMinutes.value,
|
|
351
211
|
totalSeconds: totalSeconds.value,
|
|
352
212
|
totalMilliseconds: totalMilliseconds.value
|
|
353
|
-
})
|
|
213
|
+
});
|
|
354
214
|
}
|
|
355
|
-
|
|
356
|
-
continueProcess()
|
|
215
|
+
continueProcess();
|
|
357
216
|
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Aborts the countdown.
|
|
361
|
-
*/
|
|
362
|
-
function abort(): void {
|
|
217
|
+
function abort() {
|
|
363
218
|
if (!counting.value) {
|
|
364
|
-
return
|
|
219
|
+
return;
|
|
365
220
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
counting.value = false
|
|
369
|
-
|
|
221
|
+
pause();
|
|
222
|
+
counting.value = false;
|
|
370
223
|
if (props.emitEvents) {
|
|
371
|
-
|
|
372
|
-
* Countdown abort event.
|
|
373
|
-
*/
|
|
374
|
-
emits('abort')
|
|
224
|
+
emits("abort");
|
|
375
225
|
}
|
|
376
226
|
}
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* Stop the countdown.
|
|
380
|
-
*/
|
|
381
|
-
function stop(): void {
|
|
227
|
+
function stop() {
|
|
382
228
|
if (!counting.value) {
|
|
383
|
-
return
|
|
229
|
+
return;
|
|
384
230
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
counting.value = false
|
|
389
|
-
|
|
231
|
+
pause();
|
|
232
|
+
totalMilliseconds.value = 0;
|
|
233
|
+
counting.value = false;
|
|
390
234
|
if (props.emitEvents) {
|
|
391
|
-
|
|
392
|
-
* Countdown end event.
|
|
393
|
-
*/
|
|
394
|
-
emits('end')
|
|
235
|
+
emits("end");
|
|
395
236
|
}
|
|
396
237
|
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Updates the count.
|
|
400
|
-
*/
|
|
401
|
-
function update(): void {
|
|
238
|
+
function update() {
|
|
402
239
|
if (counting.value) {
|
|
403
|
-
totalMilliseconds.value = Math.max(0, endTime.value - props.now())
|
|
240
|
+
totalMilliseconds.value = Math.max(0, endTime.value - props.now());
|
|
404
241
|
}
|
|
405
242
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
totalMilliseconds.value = Number(props.seconds) * 1000
|
|
413
|
-
endTime.value = props.now() + Number(props.seconds) * 1000
|
|
414
|
-
counting.value = false
|
|
415
|
-
start()
|
|
243
|
+
function restart() {
|
|
244
|
+
pause();
|
|
245
|
+
totalMilliseconds.value = Number(props.seconds) * 1e3;
|
|
246
|
+
endTime.value = props.now() + Number(props.seconds) * 1e3;
|
|
247
|
+
counting.value = false;
|
|
248
|
+
start();
|
|
416
249
|
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Visibility change event handler.
|
|
420
|
-
*/
|
|
421
|
-
function handleVisibilityChange(): void {
|
|
250
|
+
function handleVisibilityChange() {
|
|
422
251
|
switch (document?.visibilityState) {
|
|
423
|
-
case
|
|
424
|
-
update()
|
|
425
|
-
continueProcess()
|
|
426
|
-
break
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
break
|
|
252
|
+
case "visible":
|
|
253
|
+
update();
|
|
254
|
+
continueProcess();
|
|
255
|
+
break;
|
|
256
|
+
case "hidden":
|
|
257
|
+
pause();
|
|
258
|
+
break;
|
|
431
259
|
}
|
|
432
260
|
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
const fullDashArray = computed((): string => {
|
|
437
|
-
const fullDashArray = 283
|
|
438
|
-
|
|
439
|
-
const calculateTimeFraction = (): number => {
|
|
261
|
+
const fullDashArray = computed(() => {
|
|
262
|
+
const fullDashArray2 = 283;
|
|
263
|
+
const calculateTimeFraction = () => {
|
|
440
264
|
if (Number(props.seconds) < 0) {
|
|
441
|
-
return 1
|
|
265
|
+
return 1;
|
|
442
266
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
447
|
-
|
|
267
|
+
const rawTimeFraction = totalSeconds.value / Number(props.seconds);
|
|
268
|
+
return rawTimeFraction - 1 / Number(props.seconds) * (1 - rawTimeFraction);
|
|
269
|
+
};
|
|
448
270
|
return [
|
|
449
|
-
(calculateTimeFraction() *
|
|
450
|
-
|
|
451
|
-
].join(
|
|
452
|
-
})
|
|
453
|
-
// endregion ////
|
|
454
|
-
|
|
271
|
+
(calculateTimeFraction() * fullDashArray2).toFixed(0),
|
|
272
|
+
fullDashArray2
|
|
273
|
+
].join(" ");
|
|
274
|
+
});
|
|
455
275
|
defineExpose({
|
|
456
276
|
start,
|
|
457
277
|
abort,
|
|
458
278
|
stop,
|
|
459
279
|
restart
|
|
460
|
-
})
|
|
280
|
+
});
|
|
461
281
|
</script>
|
|
462
282
|
|
|
463
283
|
<template>
|
|
@@ -491,12 +311,12 @@ defineExpose({
|
|
|
491
311
|
<slot name="leading">
|
|
492
312
|
<Component
|
|
493
313
|
:is="leadingIconName"
|
|
494
|
-
v-if="isLeading &&
|
|
314
|
+
v-if="isLeading && typeof leadingIconName !== 'undefined'"
|
|
495
315
|
:class="b24ui.leadingIcon({ class: props.b24ui?.leadingIcon })"
|
|
496
316
|
/>
|
|
497
317
|
<B24Avatar
|
|
498
318
|
v-else-if="!!avatar"
|
|
499
|
-
:size="
|
|
319
|
+
:size="props.b24ui?.leadingAvatarSize || b24ui.leadingAvatarSize()"
|
|
500
320
|
v-bind="avatar"
|
|
501
321
|
:class="b24ui.leadingAvatar({ class: props.b24ui?.leadingAvatar })"
|
|
502
322
|
/>
|