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