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