@utogether/udp-core 1.0.1-beta.1 → 1.0.1-beta.11

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.
Files changed (147) hide show
  1. package/build/plugins.ts +39 -32
  2. package/dist/{403-Dp617CWX.js → 403-Dsgsr2M-.js} +1 -1
  3. package/dist/{404-Cz_Axb6Y.js → 404-DmPHEfqM.js} +1 -1
  4. package/dist/{500-BGCtRNse.js → 500-OYEgHR2a.js} +1 -1
  5. package/dist/{AuthorityInfo-DGGfm7IS.js → AuthorityInfo-B1H1txG-.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BUlmQtjQ.js +100 -0
  7. package/dist/{Company-IV3GTnzY.js → Company-C8ojgx93.js} +3 -3
  8. package/dist/{CompanyPanel-qV-_VtoL.js → CompanyPanel-Dageer1t.js} +16 -16
  9. package/dist/{Department-B3W-OxW8.js → Department-Dr94_85I.js} +3 -3
  10. package/dist/{DepartmentPanel-Cw3OWxE7.js → DepartmentPanel-Bc5r1HpT.js} +1 -1
  11. package/dist/{DesignPanel-BFxR2fHJ.js → DesignPanel-CcWt1Myp.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DljbeFba.js → DesignPanel.vue_vue_type_style_index_0_lang-CKA6nx1l.js} +24 -26
  13. package/dist/DictView-BHj6wexC.js +110 -0
  14. package/dist/InvOrganization-DP3Le9g-.js +72 -0
  15. package/dist/Org-BRGHTwsw.js +39 -0
  16. package/dist/{Preview-BlDMmpdR.js → Preview-CqMaUD_3.js} +1 -1
  17. package/dist/{ReportDefine-Cub_85LA.js → ReportDefine-PEQdTCOY.js} +1 -1
  18. package/dist/{ReportDesign-hFhq5UVE.js → ReportDesign-CB4bv8ba.js} +43 -43
  19. package/dist/{ReportQuery-ChkWEyxT.js → ReportQuery-B7t4lMK0.js} +1 -1
  20. package/dist/{ReportQueryFrom-KVyD_8Dj.js → ReportQueryFrom-VBxUIMRJ.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CLNODquq.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-HeLA4Qs5.js} +1 -1
  22. package/dist/{ReportTemplate-ag9NDvh2.js → ReportTemplate-DNkv7F5p.js} +28 -28
  23. package/dist/{Role-_q3lQ8CZ.js → Role-BGfTpZK4.js} +6 -6
  24. package/dist/{RoleAssign-DZb9IRsm.js → RoleAssign-DrKFWZzA.js} +8 -8
  25. package/dist/{RolePanel-CsLsz-Ds.js → RolePanel-3lvRh7aS.js} +1 -1
  26. package/dist/{RolePanel-BQb1LlhD.js → RolePanel-BRI5QYe4.js} +1 -1
  27. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-BXKZb7yt.js +132 -0
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BrnRgHEk.js → RolePanel.vue_vue_type_script_setup_true_lang-Cci_Ysty.js} +44 -38
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CaFKRwXu.js → ScrollPanel.vue_vue_type_style_index_0_lang-BmId6zzA.js} +21 -21
  30. package/dist/{Staff-BSf9Ypbk.js → Staff-Dr0dq3fW.js} +3 -3
  31. package/dist/{StaffInfo-BNKasyMF.js → StaffInfo-_N9g2hPa.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DDZ7ukd0.js → StaffInfo.vue_vue_type_script_setup_true_lang-DiTJY2ug.js} +11 -11
  33. package/dist/{StaffPanel-Bpq0WVlH.js → StaffPanel-mxJQiW3G.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-BhiJ0Q-Q.js → StaffPanel.vue_vue_type_script_setup_true_lang-GRGn-5t6.js} +2 -2
  35. package/dist/{SysUser-FAABuNti.js → SysUser-DgA19hZE.js} +2 -2
  36. package/dist/{SysUserPanel-PxJeOgHm.js → SysUserPanel-Bc85z5_K.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-BHDrP1Pk.js +294 -0
  38. package/dist/{SystemMenu-C-7NAGon.js → SystemMenu-Be-gFIie.js} +26 -26
  39. package/dist/{UserInfo-ClXKtyGo.js → UserInfo-BCYuwFmr.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-8N7P4Hl7.js → UserInfo.vue_vue_type_style_index_0_lang-B1lgokO6.js} +39 -37
  41. package/dist/{childView-C_HmDQNd.js → childView-DhcBr1UA.js} +1 -1
  42. package/dist/{childView-uUlBcTza.js → childView-Dk4zZoXd.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-Ckjmw6wJ.js → childView.vue_vue_type_style_index_0_lang-CVnLnl03.js} +40 -40
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-y0sDvYx5.js → childView.vue_vue_type_style_index_0_lang-D4GYVhOc.js} +1 -1
  45. package/dist/{code-rule-AgCVDKFy.js → code-rule-BSwPwuAL.js} +9 -10
  46. package/dist/core.es.js +14 -11
  47. package/dist/{cron-task-C6FgQxTi.js → cron-task-T1ztyra7.js} +1 -1
  48. package/dist/{frameView-BDgISK7N.js → frameView-BDgngiBq.js} +1 -1
  49. package/dist/img/l_img.svg +1 -1
  50. package/dist/img/minicolors.png +0 -0
  51. package/dist/img/v_img.svg +1 -1
  52. package/dist/index-BSj2AtVL.js +4468 -0
  53. package/dist/{layoutView-yb3DV2DQ.js → layoutView-i7dLLBzJ.js} +1181 -1176
  54. package/dist/{login-RRpljbkm.js → login-K5Ludp8x.js} +105 -113
  55. package/dist/{login-log-CvVnyGi3.js → login-log-kqKzKTto.js} +1 -1
  56. package/dist/{lov-view-C9-rjzZR.js → lov-view-lAexiucu.js} +2 -2
  57. package/dist/{menuInfo-CzPQyFhp.js → menuInfo-BaN5YZPp.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BumXunCg.js → menuInfo.vue_vue_type_style_index_0_lang-yI4QOYxG.js} +100 -97
  59. package/dist/{pda-app-Dvy3U-b6.js → pda-app-DEtDXFvM.js} +211 -197
  60. package/dist/{resource-Fy0lFkSV.js → resource-Bztmz7pn.js} +15 -15
  61. package/dist/{su-welcome-DYvSCUST.js → su-welcome-Bx8nBPi9.js} +109 -110
  62. package/dist/sys-config-nvrtYGgi.js +290 -0
  63. package/dist/udp-core.css +2 -2
  64. package/dist/{utogether-CjmJiHoE.js → utogether-yPnwDAIH.js} +1 -1
  65. package/index.ts +40 -36
  66. package/package.json +18 -18
  67. package/src/App.vue +65 -70
  68. package/src/api/index.ts +31 -31
  69. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  70. package/src/components/SuScrollTree/ScrollPanel.vue +3 -3
  71. package/src/components/udp/count-down.vue +536 -0
  72. package/src/components/udp/flip-down/FlipCard/flip-card.vue +251 -0
  73. package/src/components/udp/flip-down/FlipCard/interfaces.ts +4 -0
  74. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +113 -0
  75. package/src/components/udp/form-upload.vue +414 -64
  76. package/src/components/udp/form.vue +112 -0
  77. package/src/components/udp/grid.vue +495 -0
  78. package/src/components/udp/index.ts +10 -4
  79. package/src/components/udp/lov.vue +388 -0
  80. package/src/components/udp/modal-form.vue +13 -3
  81. package/src/components/udp/modal-grid.vue +298 -0
  82. package/src/components/udp/upload.vue +423 -0
  83. package/src/components/udp/utils.ts +447 -40
  84. package/src/directives/permission/index.ts +1 -1
  85. package/src/layout/components/lay-navbar/index.vue +239 -237
  86. package/src/layout/components/lay-panel/index.vue +150 -150
  87. package/src/layout/components/lay-search/index.vue +25 -25
  88. package/src/layout/components/lay-select-org/index.vue +64 -69
  89. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  90. package/src/layout/components/lay-sidebar/horizontal.vue +190 -191
  91. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  92. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -98
  93. package/src/layout/components/lay-tag/index.vue +625 -625
  94. package/src/layout/hooks/useNav.ts +173 -173
  95. package/src/layout/layoutView.vue +215 -215
  96. package/src/main.ts +119 -109
  97. package/src/plugins/i18n/en.ts +302 -289
  98. package/src/plugins/i18n/zh.ts +349 -337
  99. package/src/plugins/vxe-table/index.ts +53 -46
  100. package/src/plugins/vxe-table/render.tsx +956 -817
  101. package/src/router/index.ts +177 -183
  102. package/src/router/modules/remaining.ts +58 -83
  103. package/src/store/modules/permission.ts +1 -4
  104. package/src/style/button.scss +85 -78
  105. package/src/style/tailwind.css +1 -68
  106. package/src/style/vxetable.scss +44 -11
  107. package/src/utils/authority/index.ts +1 -1
  108. package/src/utils/{http → udp/http}/index.ts +283 -297
  109. package/src/utils/{http → udp/http}/types.d.ts +8 -5
  110. package/src/utils/udp/useRender.ts +17 -6
  111. package/src/views/login/login-view.vue +300 -314
  112. package/src/views/organization/company/CompanyPanel.vue +259 -259
  113. package/src/views/organization/inv-org/InvOrganization.vue +68 -54
  114. package/src/views/organization/org/Org.vue +9 -5
  115. package/src/views/system/menu/SystemMenu.vue +183 -197
  116. package/src/views/system/menu/menuInfo.vue +363 -371
  117. package/src/views/system/role/AuthorityInfo.vue +19 -15
  118. package/src/views/system/role/Role.vue +1 -5
  119. package/src/views/system/role/RolePanel.vue +11 -2
  120. package/src/views/system/role/UserInfo.vue +195 -193
  121. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  122. package/src/views/system/role-assign/RolePanel.vue +139 -136
  123. package/src/views/system/sys/sys-config.vue +287 -291
  124. package/src/views/system/sysUser/SysUserPanel.vue +278 -278
  125. package/src/views/uapp/pda/pda-app.vue +208 -176
  126. package/src/views/udev/dict/DictView.vue +118 -106
  127. package/src/views/udev/dict/childView.vue +7 -7
  128. package/src/views/udev/lov/lov-view.vue +91 -91
  129. package/src/views/ufile/aggregation/File.vue +5 -5
  130. package/src/views/ufile/file/water-mark.vue +14 -14
  131. package/src/views/uhome/su-welcome.vue +3 -3
  132. package/src/views/ulogin/login.vue +12 -8
  133. package/src/views/upms/user/login-log.vue +1 -1
  134. package/src/views/urpt/design/DesignPanel.vue +507 -526
  135. package/src/views/urpt/design/ReportDesign.vue +15 -19
  136. package/src/views/urpt/static-resource/resource.vue +3 -3
  137. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  138. package/types/global.d.ts +2 -1
  139. package/vite.config.ts +6 -2
  140. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BqccGW7v.js +0 -102
  141. package/dist/DictView-C-i7e4hZ.js +0 -95
  142. package/dist/InvOrganization-cfT6riGU.js +0 -260
  143. package/dist/Org-CA7vTDIF.js +0 -35
  144. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-cmW7zBLu.js +0 -126
  145. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-njefUln5.js +0 -288
  146. package/dist/index-DzOzUkf6.js +0 -3388
  147. package/dist/sys-config-DJ1vNQTy.js +0 -277
@@ -0,0 +1,536 @@
1
+ <template>
2
+ <div class="flip-clock">
3
+ <template v-for="data in timeData" :key="data.label">
4
+ <span v-show="data.show" :id="data.elementId" class="flip-clock__piece">
5
+ <div v-if="flipAnimation">
6
+ <span
7
+ class="flip-clock__card flip-card"
8
+ :style="countdownSize ? `font-size:${countdownSize}` : ''"
9
+ >
10
+ <b class="flip-card__top">{{ twoDigits(data.current) }}</b>
11
+ <b class="flip-card__bottom" :data-value="twoDigits(data.current)" />
12
+ <b class="flip-card__back" :data-value="twoDigits(data.previous)" />
13
+ <b class="flip-card__back-bottom" :data-value="twoDigits(data.previous)" />
14
+ </span>
15
+ </div>
16
+ <div v-else>
17
+ <span class="no-animation__card">{{ twoDigits(data.current) }}</span>
18
+ </div>
19
+ <span
20
+ v-if="showLabels"
21
+ class="flip-clock__slot"
22
+ :style="labelSize ? `font-size:${labelSize}` : ''"
23
+ >{{ data.label }}</span
24
+ >
25
+ </span>
26
+ </template>
27
+ </div>
28
+ </template>
29
+
30
+ <script lang="ts">
31
+ export default {
32
+ name: 'SuCountdown'
33
+ };
34
+ </script>
35
+
36
+ <script setup lang="ts">
37
+ import { computed, onBeforeMount, onMounted, onUnmounted, ref, watch } from 'vue';
38
+ import dayjs from 'dayjs';
39
+
40
+ const props = defineProps({
41
+ countdown: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ deadline: {
46
+ type: String,
47
+ required: false,
48
+ default: dayjs().add(5, 'days').format('YYYY-MM-DD HH:mm:ss')
49
+ },
50
+ deadlineISO: {
51
+ type: String,
52
+ required: false
53
+ },
54
+ deadlineDate: {
55
+ type: Date,
56
+ required: false
57
+ },
58
+ countdownSize: {
59
+ type: String,
60
+ required: false
61
+ // default:"2.2rem"
62
+ },
63
+
64
+ labelSize: {
65
+ type: String,
66
+ required: false
67
+ // default:"2.2rem"
68
+ },
69
+ stop: {
70
+ type: Boolean,
71
+ required: false
72
+ },
73
+ flipAnimation: {
74
+ type: Boolean,
75
+ required: false,
76
+ default: true
77
+ },
78
+ showDays: {
79
+ type: Boolean,
80
+ required: false,
81
+ default: true
82
+ },
83
+ showHours: {
84
+ type: Boolean,
85
+ required: false,
86
+ default: true
87
+ },
88
+ showMinutes: {
89
+ type: Boolean,
90
+ required: false,
91
+ default: true
92
+ },
93
+ showSeconds: {
94
+ type: Boolean,
95
+ required: false,
96
+ default: true
97
+ },
98
+ showLabels: {
99
+ type: Boolean,
100
+ required: false,
101
+ default: true
102
+ },
103
+ labels: {
104
+ type: Object,
105
+ required: false,
106
+ default: function () {
107
+ return {
108
+ days: 'Days',
109
+ hours: 'Hours',
110
+ minutes: 'Minutes',
111
+ seconds: 'Seconds'
112
+ };
113
+ }
114
+ },
115
+ mainColor: {
116
+ type: String,
117
+ default: '#EC685C'
118
+ },
119
+ secondFlipColor: {
120
+ type: String,
121
+ default: props => props.mainColor
122
+ },
123
+ mainFlipBackgroundColor: {
124
+ type: String,
125
+ default: '#222222'
126
+ },
127
+ secondFlipBackgroundColor: {
128
+ type: String,
129
+ default: '#393939'
130
+ },
131
+ labelColor: {
132
+ type: String,
133
+ default: '#222222'
134
+ }
135
+ });
136
+
137
+ const now = ref(Math.trunc(new Date().getTime() / 1000));
138
+ const date = ref<number>(0);
139
+ const interval = ref();
140
+ const diff = ref(0);
141
+ const show = ref(false);
142
+ const timeData = ref([
143
+ {
144
+ current: 0,
145
+ previous: 0,
146
+ label: props.labels.days,
147
+ elementId: 'flip-card-days-' + Date.now(),
148
+ show: props.showDays
149
+ },
150
+ {
151
+ current: 0,
152
+ previous: 0,
153
+ label: props.labels.hours,
154
+ elementId: 'flip-card-hours-' + Date.now(),
155
+ show: props.showHours
156
+ },
157
+ {
158
+ current: 0,
159
+ previous: 0,
160
+ label: props.labels.minutes,
161
+ elementId: 'flip-card-minutes-' + Date.now(),
162
+ show: props.showMinutes
163
+ },
164
+ {
165
+ current: 0,
166
+ previous: 0,
167
+ label: props.labels.seconds,
168
+ elementId: 'flip-card-seconds-' + Date.now(),
169
+ show: props.showSeconds
170
+ }
171
+ ]);
172
+
173
+ const updateAllCards = () => {
174
+ updateTime(0, days);
175
+ updateTime(1, hours);
176
+ updateTime(2, minutes);
177
+ updateTime(3, seconds);
178
+ };
179
+
180
+ const twoDigits = value => {
181
+ if (value != undefined) {
182
+ if (value.toString().length <= 1) {
183
+ return '0' + value.toString();
184
+ }
185
+ return value.toString();
186
+ } else {
187
+ return '00';
188
+ }
189
+ };
190
+
191
+ const updateTime = (idx, newValue) => {
192
+ if (idx >= timeData.value.length || newValue === undefined) {
193
+ return;
194
+ }
195
+
196
+ // if (window['requestAnimationFrame']) {
197
+ // frame = requestAnimationFrame(updateTime.bind(this));
198
+ // }
199
+
200
+ const d = timeData.value[idx];
201
+ const val = newValue.value < 0 ? 0 : newValue.value;
202
+ const el = document.querySelector(`#${d.elementId}`);
203
+
204
+ if (val !== d.current) {
205
+ d.previous = d.current;
206
+ d.current = val;
207
+
208
+ if (el) {
209
+ el.classList.remove('flip');
210
+ // @ts-ignore
211
+ void el.offsetWidth;
212
+ el.classList.add('flip');
213
+ }
214
+
215
+ if (idx === 0) {
216
+ const els = el!.querySelectorAll('span b');
217
+ if (els) {
218
+ //@ts-ignore
219
+ for (const e of els) {
220
+ const cls = e.classList[0];
221
+ if (newValue.value / 1000 >= 1) {
222
+ if (!cls.includes('-4digits')) {
223
+ const newCls = cls + '-4digits';
224
+ e.classList.add(newCls);
225
+ e.classList.remove(cls);
226
+ }
227
+ } else {
228
+ if (cls.includes('-4digits')) {
229
+ const newCls = cls.replace('-4digits', '');
230
+ e.classList.add(newCls);
231
+ e.classList.remove(cls);
232
+ }
233
+ }
234
+ }
235
+ } else {
236
+ console.log('....');
237
+ }
238
+ }
239
+ }
240
+ };
241
+
242
+ const seconds = computed(() => {
243
+ if (props.countdown) {
244
+ return Math.trunc(diff.value) % 60;
245
+ }
246
+ return Math.trunc(now.value) % 60;
247
+ });
248
+
249
+ const minutes = computed(() => {
250
+ if (props.countdown) {
251
+ return Math.trunc(diff.value / 60) % 60;
252
+ }
253
+ return Math.trunc(now.value / 60) % 60;
254
+ });
255
+ const hours = computed(() => {
256
+ if (props.countdown) {
257
+ return Math.trunc(diff.value / 60 / 60) % 24;
258
+ }
259
+ return new Date(now.value * 1000).getHours();
260
+ // return Math.trunc(now.value / 60 / 60) % 24;
261
+ });
262
+ const days = computed(() => {
263
+ if (props.countdown) {
264
+ return Math.trunc(diff.value / 60 / 60 / 24);
265
+ }
266
+ return Math.trunc(now.value / 60 / 60 / 24);
267
+ });
268
+
269
+ watch(
270
+ () => props.deadline,
271
+ newVal => {
272
+ const endTime = newVal as unknown as String;
273
+ date.value = Math.trunc(Date.parse(endTime.replace(/-/g, '/')) / 1000);
274
+ if (!date.value) {
275
+ throw new Error("Invalid props value, correct the 'deadline'");
276
+ }
277
+ }
278
+ );
279
+
280
+ watch(now, () => {
281
+ if (props.countdown) {
282
+ diff.value = date.value - now.value;
283
+ if (diff.value <= 0 || props.stop) {
284
+ diff.value = 0;
285
+ updateTime(3, 0);
286
+ } else {
287
+ updateAllCards();
288
+ }
289
+ } else {
290
+ updateAllCards();
291
+ }
292
+ });
293
+
294
+ watch(diff, newVal => {
295
+ if (newVal == 0) {
296
+ // emit('timeElapsed');
297
+ updateAllCards();
298
+ }
299
+ });
300
+
301
+ onMounted(() => {
302
+ if (diff.value !== 0) {
303
+ show.value = true;
304
+ }
305
+ });
306
+
307
+ onBeforeMount(() => {
308
+ if (props.countdown) {
309
+ if (!props.deadline) {
310
+ throw new Error("Missing props 'deadline'");
311
+ }
312
+ const endTime = props.deadline;
313
+ let epoch = Date.parse(endTime.replace(/-/g, '/'));
314
+ if (props.deadlineDate != null) {
315
+ epoch = Date.parse(props.deadlineDate.toDateString());
316
+ }
317
+ if (props.deadlineISO) {
318
+ epoch = Date.parse(props.deadlineISO);
319
+ }
320
+ date.value = Math.trunc(epoch / 1000);
321
+ if (!date.value) {
322
+ throw new Error("Invalid props value, correct the 'deadline'");
323
+ }
324
+ }
325
+ interval.value = setInterval(() => {
326
+ now.value = Math.trunc(new Date().getTime() / 1000);
327
+ }, 1000);
328
+ });
329
+
330
+ onUnmounted(() => {
331
+ // if (window['cancelAnimationFrame']) {
332
+ // cancelAnimationFrame(frame);
333
+ // }
334
+ clearInterval(interval.value);
335
+ });
336
+ </script>
337
+
338
+ <style lang="scss">
339
+ .no-animation__card {
340
+ font-weight: 500;
341
+ font-size: 2rem;
342
+ line-height: 1.5;
343
+ display: block;
344
+ color: v-bind(mainColor);
345
+ }
346
+
347
+ .flip-clock {
348
+ text-align: center;
349
+ perspective: 600px;
350
+ margin: 0 auto;
351
+
352
+ *,
353
+ *:before,
354
+ *:after {
355
+ box-sizing: border-box;
356
+ }
357
+ }
358
+
359
+ .flip-clock__piece {
360
+ display: inline-block;
361
+ margin: 0 0.2vw;
362
+
363
+ @media (min-width: 1000px) {
364
+ margin: 0 5px;
365
+ }
366
+ }
367
+
368
+ .flip-clock__slot {
369
+ font-size: 1rem;
370
+ line-height: 1.5;
371
+ display: block;
372
+ color: v-bind(labelColor);
373
+ }
374
+
375
+ $halfHeight: 0.72em;
376
+ $borderRadius: 0.15em;
377
+
378
+ .flip-card {
379
+ display: block;
380
+ position: relative;
381
+ padding-bottom: $halfHeight;
382
+ font-size: 2.25rem;
383
+ line-height: 0.95;
384
+ }
385
+
386
+ @media (min-width: 1000px) {
387
+ .flip-clock__slot {
388
+ font-size: 1.2rem;
389
+ }
390
+
391
+ .flip-card {
392
+ font-size: 3rem;
393
+ }
394
+ }
395
+
396
+ .flip-card__top,
397
+ .flip-card__bottom,
398
+ .flip-card__back-bottom,
399
+ .flip-card__back::before,
400
+ .flip-card__back::after {
401
+ display: block;
402
+ height: $halfHeight;
403
+ color: v-bind(mainColor);
404
+ background: v-bind(mainFlipBackgroundColor);
405
+ padding: 0.23em 0.15em 0.4em;
406
+ border-radius: $borderRadius $borderRadius 0 0;
407
+ backface-visibility: hidden;
408
+ -webkit-backface-visibility: hidden;
409
+ transform-style: preserve-3d;
410
+ width: 2.1em;
411
+ height: $halfHeight;
412
+ }
413
+
414
+ .flip-card__top-4digits,
415
+ .flip-card__bottom-4digits,
416
+ .flip-card__back-bottom-4digits,
417
+ .flip-card__back-4digits::before,
418
+ .flip-card__back-4digits::after {
419
+ display: block;
420
+ height: $halfHeight;
421
+ color: v-bind(mainColor);
422
+ background: v-bind(mainFlipBackgroundColor);
423
+ padding: 0.23em 0.15em 0.4em;
424
+ border-radius: $borderRadius $borderRadius 0 0;
425
+ backface-visibility: hidden;
426
+ -webkit-backface-visibility: hidden;
427
+ transform-style: preserve-3d;
428
+ width: 2.65em;
429
+ height: $halfHeight;
430
+ }
431
+
432
+ .flip-card__bottom,
433
+ .flip-card__back-bottom,
434
+ .flip-card__bottom-4digits,
435
+ .flip-card__back-bottom-4digits {
436
+ color: v-bind(secondFlipColor);
437
+ position: absolute;
438
+ top: 50%;
439
+ left: 0;
440
+ border-top: solid 1px #000;
441
+ background: v-bind(secondFlipBackgroundColor);
442
+ border-radius: 0 0 $borderRadius $borderRadius;
443
+ pointer-events: none;
444
+ overflow: hidden;
445
+ z-index: 2;
446
+ }
447
+
448
+ .flip-card__back-bottom,
449
+ .flip-card__back-bottom-4digits {
450
+ z-index: 1;
451
+ }
452
+
453
+ .flip-card__bottom::after,
454
+ .flip-card__back-bottom::after,
455
+ .flip-card__bottom-4digits::after,
456
+ .flip-card__back-bottom-4digits::after {
457
+ display: block;
458
+ margin-top: -$halfHeight;
459
+ }
460
+
461
+ .flip-card__back::before,
462
+ .flip-card__bottom::after,
463
+ .flip-card__back-bottom::after,
464
+ .flip-card__back-4digits::before,
465
+ .flip-card__bottom-4digits::after,
466
+ .flip-card__back-bottom-4digits::after {
467
+ content: attr(data-value);
468
+ }
469
+
470
+ .flip-card__back,
471
+ .flip-card__back-4digits {
472
+ position: absolute;
473
+ top: 0;
474
+ height: 100%;
475
+ left: 0%;
476
+ pointer-events: none;
477
+ }
478
+
479
+ .flip-card__back::before,
480
+ .flip-card__back-4digits::before {
481
+ position: relative;
482
+ overflow: hidden;
483
+ z-index: -1;
484
+ }
485
+
486
+ .flip .flip-card__back::before,
487
+ .flip .flip-card__back-4digits::before {
488
+ z-index: 1;
489
+ animation: flipTop 0.3s cubic-bezier(0.37, 0.01, 0.94, 0.35);
490
+ animation-fill-mode: both;
491
+ transform-origin: center bottom;
492
+ }
493
+
494
+ .flip .flip-card__bottom,
495
+ .flip .flip-card__bottom-4digits {
496
+ transform-origin: center top;
497
+ animation-fill-mode: both;
498
+ animation: flipBottom 0.6s cubic-bezier(0.15, 0.45, 0.28, 1);
499
+ }
500
+
501
+ @keyframes flipTop {
502
+ 0% {
503
+ transform: rotateX(0deg);
504
+ z-index: 2;
505
+ }
506
+
507
+ 0%,
508
+ 99% {
509
+ opacity: 1;
510
+ }
511
+
512
+ 100% {
513
+ transform: rotateX(-90deg);
514
+ opacity: 0;
515
+ }
516
+ }
517
+
518
+ @keyframes flipBottom {
519
+ 0%,
520
+ 50% {
521
+ z-index: -1;
522
+ transform: rotateX(90deg);
523
+ opacity: 0;
524
+ }
525
+
526
+ 51% {
527
+ opacity: 1;
528
+ }
529
+
530
+ 100% {
531
+ opacity: 1;
532
+ transform: rotateX(0deg);
533
+ z-index: 5;
534
+ }
535
+ }
536
+ </style>