@melt-js/libs-vben 0.0.0-stage → 2026.11.8-2

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 (174) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +86 -2
  3. package/package.json +98 -3
  4. package/src/access/access-control.vue +47 -0
  5. package/src/access/accessible.ts +236 -0
  6. package/src/access/directive.ts +42 -0
  7. package/src/access/index.ts +4 -0
  8. package/src/access/use-access.ts +53 -0
  9. package/src/composables/index.ts +14 -0
  10. package/src/composables/use-is-mobile.ts +7 -0
  11. package/src/composables/use-layout-style.ts +51 -0
  12. package/src/composables/use-layout-viewport-height.ts +71 -0
  13. package/src/composables/use-namespace.ts +106 -0
  14. package/src/composables/use-priority-value.ts +96 -0
  15. package/src/composables/use-scroll-lock.ts +151 -0
  16. package/src/composables/use-simple-locale/README.md +3 -0
  17. package/src/composables/use-simple-locale/index.ts +27 -0
  18. package/src/composables/use-simple-locale/messages.ts +31 -0
  19. package/src/composables/use-sortable.ts +32 -0
  20. package/src/constants/core.ts +76 -0
  21. package/src/constants/index.ts +2 -0
  22. package/src/core-icons/create-icon.ts +14 -0
  23. package/src/core-icons/index.ts +11 -0
  24. package/src/core-icons/lucide.ts +95 -0
  25. package/src/core-preferences/config.ts +172 -0
  26. package/src/core-preferences/constants.ts +116 -0
  27. package/src/core-preferences/index.ts +24 -0
  28. package/src/core-preferences/preferences.ts +503 -0
  29. package/src/core-preferences/types.ts +471 -0
  30. package/src/core-preferences/update-css-variables.ts +129 -0
  31. package/src/core-preferences/use-preferences.ts +282 -0
  32. package/src/design/css/global.css +1 -0
  33. package/src/design/css/nprogress.css +61 -0
  34. package/src/design/css/transition.css +238 -0
  35. package/src/design/css/ui.css +101 -0
  36. package/src/design/design-tokens/dark.css +446 -0
  37. package/src/design/design-tokens/default.css +491 -0
  38. package/src/design/design-tokens/index.ts +2 -0
  39. package/src/design/index.ts +6 -0
  40. package/src/design/scss-bem/bem.scss +34 -0
  41. package/src/design/scss-bem/constants.scss +5 -0
  42. package/src/hooks/index.ts +9 -0
  43. package/src/hooks/use-app-config.ts +39 -0
  44. package/src/hooks/use-content-maximize.ts +24 -0
  45. package/src/hooks/use-design-tokens.ts +421 -0
  46. package/src/hooks/use-hover-toggle.ts +163 -0
  47. package/src/hooks/use-pagination.ts +72 -0
  48. package/src/hooks/use-refresh.ts +16 -0
  49. package/src/hooks/use-tabs.ts +143 -0
  50. package/src/hooks/use-watermark.ts +84 -0
  51. package/src/icons/iconify/index.ts +5 -0
  52. package/src/icons/icons/empty-icon.vue +27 -0
  53. package/src/icons/index.ts +3 -0
  54. package/src/icons/svg/icons/antdv-logo.svg +29 -0
  55. package/src/icons/svg/icons/antdv-next-logo.svg +1 -0
  56. package/src/icons/svg/icons/avatar-1.svg +1 -0
  57. package/src/icons/svg/icons/avatar-2.svg +1 -0
  58. package/src/icons/svg/icons/avatar-3.svg +1 -0
  59. package/src/icons/svg/icons/avatar-4.svg +1 -0
  60. package/src/icons/svg/icons/bell.svg +1 -0
  61. package/src/icons/svg/icons/cake.svg +1 -0
  62. package/src/icons/svg/icons/card.svg +1 -0
  63. package/src/icons/svg/icons/dingding.svg +1 -0
  64. package/src/icons/svg/icons/download.svg +1 -0
  65. package/src/icons/svg/icons/github.svg +1 -0
  66. package/src/icons/svg/icons/google.svg +1 -0
  67. package/src/icons/svg/icons/qqchat.svg +1 -0
  68. package/src/icons/svg/icons/tdesign-logo.svg +39 -0
  69. package/src/icons/svg/icons/wechat.svg +1 -0
  70. package/src/icons/svg/index.ts +39 -0
  71. package/src/icons/svg/load.ts +81 -0
  72. package/src/locales/i18n.ts +147 -0
  73. package/src/locales/index.ts +30 -0
  74. package/src/locales/langs/en-US/authentication.json +65 -0
  75. package/src/locales/langs/en-US/common.json +27 -0
  76. package/src/locales/langs/en-US/preferences.json +245 -0
  77. package/src/locales/langs/en-US/profile.json +4 -0
  78. package/src/locales/langs/en-US/ui.json +165 -0
  79. package/src/locales/langs/zh-CN/authentication.json +65 -0
  80. package/src/locales/langs/zh-CN/common.json +27 -0
  81. package/src/locales/langs/zh-CN/preferences.json +245 -0
  82. package/src/locales/langs/zh-CN/profile.json +4 -0
  83. package/src/locales/langs/zh-CN/ui.json +165 -0
  84. package/src/locales/langs/zh-TW/authentication.json +65 -0
  85. package/src/locales/langs/zh-TW/common.json +27 -0
  86. package/src/locales/langs/zh-TW/preferences.json +245 -0
  87. package/src/locales/langs/zh-TW/profile.json +4 -0
  88. package/src/locales/langs/zh-TW/ui.json +165 -0
  89. package/src/locales/typing.ts +27 -0
  90. package/src/preferences/index.ts +42 -0
  91. package/src/request/index.ts +2 -0
  92. package/src/request/request-client/index.ts +3 -0
  93. package/src/request/request-client/modules/downloader.ts +60 -0
  94. package/src/request/request-client/modules/interceptor.ts +40 -0
  95. package/src/request/request-client/modules/sse.ts +134 -0
  96. package/src/request/request-client/modules/uploader.ts +79 -0
  97. package/src/request/request-client/preset-interceptors.ts +178 -0
  98. package/src/request/request-client/request-client.ts +163 -0
  99. package/src/request/request-client/types.ts +90 -0
  100. package/src/shared/cache/README.md +418 -0
  101. package/src/shared/cache/index.ts +5 -0
  102. package/src/shared/cache/indexeddb-driver.ts +137 -0
  103. package/src/shared/cache/local-storage-driver.ts +70 -0
  104. package/src/shared/cache/memory-storage-driver.ts +32 -0
  105. package/src/shared/cache/storage-manager.ts +146 -0
  106. package/src/shared/cache/types.ts +39 -0
  107. package/src/shared/color/color.ts +9 -0
  108. package/src/shared/color/convert.ts +62 -0
  109. package/src/shared/color/generator.ts +45 -0
  110. package/src/shared/color/index.ts +3 -0
  111. package/src/shared/constants/globals.ts +20 -0
  112. package/src/shared/constants/index.ts +2 -0
  113. package/src/shared/constants/vben.ts +30 -0
  114. package/src/shared/global-state.ts +45 -0
  115. package/src/shared/store.ts +1 -0
  116. package/src/shared/utils/cn.ts +10 -0
  117. package/src/shared/utils/date.ts +80 -0
  118. package/src/shared/utils/diff.ts +114 -0
  119. package/src/shared/utils/dom.ts +126 -0
  120. package/src/shared/utils/download.ts +186 -0
  121. package/src/shared/utils/error.ts +19 -0
  122. package/src/shared/utils/index.ts +22 -0
  123. package/src/shared/utils/inference.ts +164 -0
  124. package/src/shared/utils/letter.ts +47 -0
  125. package/src/shared/utils/merge.ts +11 -0
  126. package/src/shared/utils/nprogress.ts +52 -0
  127. package/src/shared/utils/resources.ts +21 -0
  128. package/src/shared/utils/stack.ts +103 -0
  129. package/src/shared/utils/state-handler.ts +61 -0
  130. package/src/shared/utils/to.ts +21 -0
  131. package/src/shared/utils/tree.ts +159 -0
  132. package/src/shared/utils/unique.ts +15 -0
  133. package/src/shared/utils/update-css-variables.ts +47 -0
  134. package/src/shared/utils/util.ts +50 -0
  135. package/src/shared/utils/window.ts +37 -0
  136. package/src/stores/index.ts +3 -0
  137. package/src/stores/modules/access.ts +130 -0
  138. package/src/stores/modules/dict.ts +244 -0
  139. package/src/stores/modules/index.ts +5 -0
  140. package/src/stores/modules/tabbar.ts +797 -0
  141. package/src/stores/modules/timezone.ts +132 -0
  142. package/src/stores/modules/user.ts +42 -0
  143. package/src/stores/setup.ts +79 -0
  144. package/src/stores/shim-pinia.d.ts +11 -0
  145. package/src/styles/antd/index.css +78 -0
  146. package/src/styles/antdv-next/index.css +90 -0
  147. package/src/styles/ele/index.css +44 -0
  148. package/src/styles/global/index.scss +1 -0
  149. package/src/styles/index.ts +1 -0
  150. package/src/styles/naive/index.css +26 -0
  151. package/src/styles/style-exports.d.ts +3 -0
  152. package/src/theme.css +592 -0
  153. package/src/types/global.d.ts +28 -0
  154. package/src/types/index.ts +2 -0
  155. package/src/types/shims.d.ts +1 -0
  156. package/src/types/user.ts +20 -0
  157. package/src/typings/app.d.ts +128 -0
  158. package/src/typings/basic.d.ts +42 -0
  159. package/src/typings/helper.d.ts +147 -0
  160. package/src/typings/index.ts +16 -0
  161. package/src/typings/languages.ts +28 -0
  162. package/src/typings/menu-record.ts +82 -0
  163. package/src/typings/tabs.ts +8 -0
  164. package/src/typings/vue-router.d.ts +169 -0
  165. package/src/utils/helpers/find-menu-by-path.ts +37 -0
  166. package/src/utils/helpers/generate-menus.ts +89 -0
  167. package/src/utils/helpers/generate-routes-backend.ts +108 -0
  168. package/src/utils/helpers/generate-routes-frontend.ts +58 -0
  169. package/src/utils/helpers/get-popup-container.ts +10 -0
  170. package/src/utils/helpers/index.ts +8 -0
  171. package/src/utils/helpers/merge-route-modules.ts +28 -0
  172. package/src/utils/helpers/reset-routes.ts +30 -0
  173. package/src/utils/helpers/unmount-global-loading.ts +31 -0
  174. package/src/utils/index.ts +4 -0
@@ -0,0 +1,282 @@
1
+ import { computed } from 'vue';
2
+
3
+ import { diff, diffStrict } from '@melt-js/libs-vben/shared/utils';
4
+
5
+ import { preferencesManager } from './preferences';
6
+ import { isDarkTheme } from './update-css-variables';
7
+
8
+ function usePreferences() {
9
+ const preferences = preferencesManager.getPreferences();
10
+ const customPreferences = preferencesManager.getCustomPreferences();
11
+ const initialPreferences = preferencesManager.getInitialPreferences();
12
+ const initialCustomPreferences =
13
+ preferencesManager.getInitialCustomPreferences();
14
+ const preferencesExtension = computed(() =>
15
+ preferencesManager.getPreferencesExtension(),
16
+ );
17
+ /**
18
+ * @zh_CN 计算偏好设置的变化
19
+ * @zh_CN 使用 diffStrict:图标排序等数组字段需顺序敏感比较
20
+ */
21
+ const diffPreference = computed(() => {
22
+ return diffStrict(initialPreferences, preferences);
23
+ });
24
+
25
+ const diffCustomPreference = computed(() => {
26
+ return diff(initialCustomPreferences, customPreferences);
27
+ });
28
+
29
+ const appPreferences = computed(() => preferences.app);
30
+
31
+ const shortcutKeysPreferences = computed(() => preferences.shortcutKeys);
32
+
33
+ /**
34
+ * @zh_CN 判断是否为暗黑模式
35
+ * @param preferences - 当前偏好设置对象,它的主题值将被用来判断是否为暗黑模式。
36
+ * @returns 如果主题为暗黑模式,返回 true,否则返回 false。
37
+ */
38
+ const isDark = computed(() => {
39
+ return isDarkTheme(preferences.theme.mode);
40
+ });
41
+
42
+ const locale = computed(() => {
43
+ return appPreferences.value.locale;
44
+ });
45
+
46
+ const isMobile = computed(() => {
47
+ return appPreferences.value.isMobile;
48
+ });
49
+
50
+ const theme = computed(() => {
51
+ return isDark.value ? 'dark' : 'light';
52
+ });
53
+
54
+ /**
55
+ * @zh_CN 布局方式
56
+ */
57
+ const layout = computed(() =>
58
+ isMobile.value ? 'sidebar-nav' : appPreferences.value.layout,
59
+ );
60
+
61
+ /**
62
+ * @zh_CN 是否显示顶栏
63
+ */
64
+ const isShowHeaderNav = computed(() => {
65
+ return preferences.header.enable;
66
+ });
67
+
68
+ /**
69
+ * @zh_CN 是否全屏显示content,不需要侧边、底部、顶部、tab区域
70
+ */
71
+ const isFullContent = computed(
72
+ () => appPreferences.value.layout === 'full-content',
73
+ );
74
+
75
+ /**
76
+ * @zh_CN 是否侧边导航模式
77
+ */
78
+ const isSideNav = computed(
79
+ () => appPreferences.value.layout === 'sidebar-nav',
80
+ );
81
+
82
+ /**
83
+ * @zh_CN 是否侧边混合模式
84
+ */
85
+ const isSideMixedNav = computed(
86
+ () => appPreferences.value.layout === 'sidebar-mixed-nav',
87
+ );
88
+
89
+ /**
90
+ * @zh_CN 是否为头部导航模式
91
+ */
92
+ const isHeaderNav = computed(
93
+ () => appPreferences.value.layout === 'header-nav',
94
+ );
95
+
96
+ /**
97
+ * @zh_CN 是否为头部混合导航模式
98
+ */
99
+ const isHeaderMixedNav = computed(
100
+ () => appPreferences.value.layout === 'header-mixed-nav',
101
+ );
102
+
103
+ /**
104
+ * @zh_CN 是否为顶部通栏+侧边导航模式
105
+ */
106
+ const isHeaderSidebarNav = computed(
107
+ () => appPreferences.value.layout === 'header-sidebar-nav',
108
+ );
109
+
110
+ /**
111
+ * @zh_CN 是否为混合导航模式
112
+ */
113
+ const isMixedNav = computed(
114
+ () => appPreferences.value.layout === 'mixed-nav',
115
+ );
116
+
117
+ /**
118
+ * @zh_CN 是否包含侧边导航模式
119
+ */
120
+ const isSideMode = computed(() => {
121
+ return (
122
+ isMixedNav.value ||
123
+ isSideMixedNav.value ||
124
+ isSideNav.value ||
125
+ isHeaderMixedNav.value ||
126
+ isHeaderSidebarNav.value
127
+ );
128
+ });
129
+
130
+ const sidebarCollapsed = computed(() => {
131
+ return preferences.sidebar.collapsed;
132
+ });
133
+
134
+ /**
135
+ * @zh_CN 是否开启keep-alive
136
+ * 在tabs可见以及开启keep-alive的情况下才开启
137
+ */
138
+ const keepAlive = computed(
139
+ () => preferences.tabbar.enable && preferences.tabbar.keepAlive,
140
+ );
141
+
142
+ /**
143
+ * @zh_CN 登录注册页面布局是否为左侧
144
+ */
145
+ const authPanelLeft = computed(() => {
146
+ return appPreferences.value.authPageLayout === 'panel-left';
147
+ });
148
+
149
+ /**
150
+ * @zh_CN 登录注册页面布局是否为右侧
151
+ */
152
+ const authPanelRight = computed(() => {
153
+ return appPreferences.value.authPageLayout === 'panel-right';
154
+ });
155
+
156
+ /**
157
+ * @zh_CN 登录注册页面布局是否为中间
158
+ */
159
+ const authPanelCenter = computed(() => {
160
+ return appPreferences.value.authPageLayout === 'panel-center';
161
+ });
162
+
163
+ /**
164
+ * @zh_CN 内容是否已经最大化
165
+ * 排除 full-content模式
166
+ */
167
+ const contentIsMaximize = computed(() => {
168
+ const headerIsHidden = preferences.header.hidden;
169
+ const sidebarIsHidden = preferences.sidebar.hidden;
170
+ return headerIsHidden && sidebarIsHidden && !isFullContent.value;
171
+ });
172
+
173
+ /**
174
+ * @zh_CN 是否启用全局搜索快捷键
175
+ */
176
+ const globalSearchShortcutKey = computed(() => {
177
+ const { enable, globalSearch } = shortcutKeysPreferences.value;
178
+ return enable && globalSearch;
179
+ });
180
+
181
+ /**
182
+ * @zh_CN 是否启用全局注销快捷键
183
+ */
184
+ const globalLogoutShortcutKey = computed(() => {
185
+ const { enable, globalLogout } = shortcutKeysPreferences.value;
186
+ return enable && globalLogout;
187
+ });
188
+
189
+ /**
190
+ * @zh_CN 是否启用全局注销快捷键
191
+ */
192
+ const globalEscapeShortcutKey = computed(() => {
193
+ const { enable, globalEscape } = shortcutKeysPreferences.value;
194
+ return enable && globalEscape;
195
+ });
196
+
197
+ const globalLockScreenShortcutKey = computed(() => {
198
+ const { enable, globalLockScreen } = shortcutKeysPreferences.value;
199
+ return enable && globalLockScreen;
200
+ });
201
+
202
+ /**
203
+ * @zh_CN 偏好设置按钮位置
204
+ */
205
+ const preferencesButtonPosition = computed(() => {
206
+ const { enablePreferences, preferencesButtonPosition } = preferences.app;
207
+ // 如果没有启用偏好设置按钮
208
+ if (!enablePreferences) {
209
+ return {
210
+ fixed: false,
211
+ header: false,
212
+ userDropdown: false,
213
+ };
214
+ }
215
+
216
+ const { header, sidebar } = preferences;
217
+ const headerHidden = header.hidden;
218
+ const sidebarHidden = sidebar.hidden;
219
+
220
+ const contentIsMaximize = headerHidden && sidebarHidden;
221
+
222
+ const isHeaderPosition = preferencesButtonPosition === 'header';
223
+ const isUserDropdownPosition =
224
+ preferencesButtonPosition === 'user-dropdown';
225
+
226
+ // 如果设置了固定位置
227
+ if (preferencesButtonPosition !== 'auto') {
228
+ return {
229
+ fixed: preferencesButtonPosition === 'fixed',
230
+ header: isHeaderPosition,
231
+ userDropdown: isUserDropdownPosition,
232
+ };
233
+ }
234
+
235
+ // 如果是全屏模式或者没有固定在顶部,
236
+ const fixed =
237
+ contentIsMaximize ||
238
+ isFullContent.value ||
239
+ isMobile.value ||
240
+ !isShowHeaderNav.value;
241
+
242
+ return {
243
+ fixed,
244
+ header: !fixed,
245
+ userDropdown: !fixed && isUserDropdownPosition,
246
+ };
247
+ });
248
+
249
+ return {
250
+ authPanelCenter,
251
+ authPanelLeft,
252
+ authPanelRight,
253
+ contentIsMaximize,
254
+ customPreferences,
255
+ diffPreference,
256
+ diffCustomPreference,
257
+ globalLockScreenShortcutKey,
258
+ globalLogoutShortcutKey,
259
+ globalEscapeShortcutKey,
260
+ globalSearchShortcutKey,
261
+ isDark,
262
+ isFullContent,
263
+ isHeaderMixedNav,
264
+ isHeaderNav,
265
+ isHeaderSidebarNav,
266
+ isMixedNav,
267
+ isMobile,
268
+ isSideMixedNav,
269
+ isSideMode,
270
+ isSideNav,
271
+ keepAlive,
272
+ layout,
273
+ locale,
274
+ preferencesExtension,
275
+ preferencesButtonPosition,
276
+ sidebarCollapsed,
277
+ theme,
278
+ app: appPreferences.value,
279
+ };
280
+ }
281
+
282
+ export { usePreferences };
@@ -0,0 +1 @@
1
+ @import '@melt-js/libs-vben/theme';
@@ -0,0 +1,61 @@
1
+ @reference "@melt-js/libs-vben/theme";
2
+
3
+ /* Make clicks pass-through */
4
+ #nprogress {
5
+ @apply pointer-events-none;
6
+ }
7
+
8
+ #nprogress .bar {
9
+ @apply bg-primary fixed top-0 left-0 z-1031 h-0.5 w-full;
10
+ }
11
+
12
+ /* Fancy blur effect */
13
+ #nprogress .peg {
14
+ @apply absolute right-0 block h-full w-25;
15
+
16
+ box-shadow:
17
+ 0 0 10px hsl(var(--primary)),
18
+ 0 0 5px hsl(var(--primary));
19
+ opacity: 1;
20
+ transform: rotate(3deg) translate(0, -4px);
21
+ }
22
+
23
+ /* Remove these to get rid of the spinner */
24
+ #nprogress .spinner {
25
+ @apply fixed top-4 right-4 z-1031 block;
26
+ }
27
+
28
+ #nprogress .spinner-icon {
29
+ @apply border-t-primary border-l-primary size-4 rounded-full border-2 border-solid border-transparent;
30
+
31
+ animation: nprogress-spinner 400ms linear infinite;
32
+ }
33
+
34
+ .nprogress-custom-parent {
35
+ @apply relative overflow-hidden;
36
+ }
37
+
38
+ .nprogress-custom-parent #nprogress .spinner,
39
+ .nprogress-custom-parent #nprogress .bar {
40
+ @apply absolute;
41
+ }
42
+
43
+ @keyframes nprogress-spinner {
44
+ 0% {
45
+ transform: rotate(0deg);
46
+ }
47
+
48
+ 100% {
49
+ transform: rotate(360deg);
50
+ }
51
+ }
52
+
53
+ @keyframes nprogress-spinner {
54
+ 0% {
55
+ transform: rotate(0deg);
56
+ }
57
+
58
+ 100% {
59
+ transform: rotate(360deg);
60
+ }
61
+ }
@@ -0,0 +1,238 @@
1
+ .slide-up-enter-active,
2
+ .slide-up-leave-active {
3
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
4
+ }
5
+
6
+ .slide-up-move {
7
+ transition: transform 0.3s;
8
+ }
9
+
10
+ .slide-up-enter-from,
11
+ .slide-up-leave-to {
12
+ opacity: 0;
13
+ transform: translateY(-15px);
14
+ }
15
+
16
+ .slide-down-enter-active,
17
+ .slide-down-leave-active {
18
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
19
+ }
20
+
21
+ .slide-down-move {
22
+ transition: transform 0.3s;
23
+ }
24
+
25
+ .slide-down-enter-from,
26
+ .slide-down-leave-to {
27
+ opacity: 0;
28
+ transform: translateY(15px);
29
+ }
30
+
31
+ .slide-left-enter-active,
32
+ .slide-left-leave-active {
33
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
34
+ }
35
+
36
+ .slide-left-move {
37
+ transition: transform 0.3s;
38
+ }
39
+
40
+ .slide-left-enter-from,
41
+ .slide-left-leave-to {
42
+ opacity: 0;
43
+ transform: translate(-15px);
44
+ }
45
+
46
+ .slide-right-enter-active,
47
+ .slide-right-leave-active {
48
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
49
+ }
50
+
51
+ .slide-right-move {
52
+ transition: transform 0.3s;
53
+ }
54
+
55
+ .slide-right-enter-from,
56
+ .slide-right-leave-to {
57
+ opacity: 0;
58
+ transform: translate(15px);
59
+ }
60
+
61
+ .fade-transition-enter-active,
62
+ .fade-transition-leave-active {
63
+ transition: opacity 0.2s ease-in-out;
64
+ }
65
+
66
+ .fade-transition-enter-from,
67
+ .fade-transition-leave-to {
68
+ opacity: 0;
69
+ }
70
+
71
+ .fade-enter-active,
72
+ .fade-leave-active {
73
+ transition: opacity 0.2s ease-in-out;
74
+ }
75
+
76
+ .fade-enter-from,
77
+ .fade-leave-to {
78
+ opacity: 0;
79
+ }
80
+
81
+ .fade-slide-leave-active,
82
+ .fade-slide-enter-active {
83
+ transition:
84
+ opacity 0.3s,
85
+ transform 0.3s;
86
+ }
87
+
88
+ .fade-slide-enter-from {
89
+ opacity: 0;
90
+ transform: translate(-30px);
91
+ }
92
+
93
+ .fade-slide-leave-to {
94
+ opacity: 0;
95
+ transform: translate(30px);
96
+ }
97
+
98
+ .fade-down-enter-active,
99
+ .fade-down-leave-active {
100
+ transition:
101
+ opacity 0.25s,
102
+ transform 0.3s;
103
+ }
104
+
105
+ .fade-down-enter-from {
106
+ opacity: 0;
107
+ transform: translateY(-10%);
108
+ }
109
+
110
+ .fade-down-leave-to {
111
+ opacity: 0;
112
+ transform: translateY(10%);
113
+ }
114
+
115
+ .fade-scale-leave-active,
116
+ .fade-scale-enter-active {
117
+ transition: all 0.28s;
118
+ }
119
+
120
+ .fade-scale-enter-from {
121
+ opacity: 0;
122
+ transform: scale(1.2);
123
+ }
124
+
125
+ .fade-scale-leave-to {
126
+ opacity: 0;
127
+ transform: scale(0.8);
128
+ }
129
+
130
+ .fade-up-enter-active,
131
+ .fade-up-leave-active {
132
+ transition:
133
+ opacity 0.2s,
134
+ transform 0.25s;
135
+ }
136
+
137
+ .fade-up-enter-from {
138
+ opacity: 0;
139
+ transform: translateY(10%);
140
+ }
141
+
142
+ .fade-up-leave-to {
143
+ opacity: 0;
144
+ transform: translateY(-10%);
145
+ }
146
+
147
+ @keyframes fade-slide {
148
+ 0% {
149
+ opacity: 0;
150
+ transform: translate(-30px);
151
+ }
152
+
153
+ 50% {
154
+ opacity: 1;
155
+ }
156
+
157
+ 100% {
158
+ opacity: 0;
159
+ transform: translate(30px);
160
+ }
161
+ }
162
+
163
+ @keyframes fade {
164
+ 0% {
165
+ opacity: 0;
166
+ }
167
+
168
+ 50% {
169
+ opacity: 1;
170
+ }
171
+
172
+ 100% {
173
+ opacity: 0;
174
+ }
175
+ }
176
+
177
+ @keyframes fade-up {
178
+ 0% {
179
+ opacity: 0;
180
+ transform: translateY(10%);
181
+ }
182
+
183
+ 50% {
184
+ opacity: 1;
185
+ }
186
+
187
+ 100% {
188
+ opacity: 0;
189
+ transform: translateY(-10%);
190
+ }
191
+ }
192
+
193
+ @keyframes fade-down {
194
+ 0% {
195
+ opacity: 0;
196
+ transform: translateY(-10%);
197
+ }
198
+
199
+ 50% {
200
+ opacity: 1;
201
+ }
202
+
203
+ 100% {
204
+ opacity: 0;
205
+ transform: translateY(10%);
206
+ }
207
+ }
208
+
209
+ .fade-slow {
210
+ animation: fade 3s infinite;
211
+ }
212
+
213
+ .fade-slide-slow {
214
+ animation: fade-slide 3s infinite;
215
+ }
216
+
217
+ .fade-up-slow {
218
+ animation: fade-up 3s infinite;
219
+ }
220
+
221
+ .fade-down-slow {
222
+ animation: fade-down 3s infinite;
223
+ }
224
+
225
+ .collapse-transition {
226
+ transition:
227
+ 0.2s height ease-in-out,
228
+ 0.2s padding-top ease-in-out,
229
+ 0.2s padding-bottom ease-in-out;
230
+ }
231
+
232
+ .collapse-transition-leave-active,
233
+ .collapse-transition-enter-active {
234
+ transition:
235
+ 0.2s max-height ease-in-out,
236
+ 0.2s padding-top ease-in-out,
237
+ 0.2s margin-top ease-in-out;
238
+ }
@@ -0,0 +1,101 @@
1
+ .side-content {
2
+ animation-duration: 0.3s;
3
+ animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
4
+ }
5
+
6
+ .side-content[data-side='top'] {
7
+ animation-name: slide-up;
8
+ }
9
+
10
+ .side-content[data-side='bottom'] {
11
+ animation-name: slide-down;
12
+ }
13
+
14
+ .side-content[data-side='left'] {
15
+ animation-name: slide-left;
16
+ }
17
+
18
+ .side-content[data-side='right'] {
19
+ animation-name: slide-right;
20
+ }
21
+
22
+ .breadcrumb-transition-enter-active {
23
+ transition:
24
+ transform 0.4s cubic-bezier(0.76, 0, 0.24, 1),
25
+ opacity 0.4s cubic-bezier(0.76, 0, 0.24, 1);
26
+ }
27
+
28
+ .breadcrumb-transition-leave-active {
29
+ display: none;
30
+ }
31
+
32
+ .breadcrumb-transition-enter-from {
33
+ opacity: 0;
34
+ transform: translateX(30px) skewX(-30deg);
35
+ }
36
+
37
+ @keyframes slide-down {
38
+ from {
39
+ opacity: 0;
40
+ transform: translateY(50px);
41
+ }
42
+
43
+ to {
44
+ opacity: 1;
45
+ transform: translateY(0);
46
+ }
47
+ }
48
+
49
+ @keyframes slide-left {
50
+ from {
51
+ opacity: 0;
52
+ transform: translateX(-50px);
53
+ }
54
+
55
+ to {
56
+ opacity: 1;
57
+ transform: translateX(0);
58
+ }
59
+ }
60
+
61
+ @keyframes slide-right {
62
+ from {
63
+ opacity: 0;
64
+ transform: translateX(50px);
65
+ }
66
+
67
+ to {
68
+ opacity: 1;
69
+ transform: translateX(0);
70
+ }
71
+ }
72
+
73
+ @keyframes slide-up {
74
+ from {
75
+ opacity: 0;
76
+ transform: translateY(-50px);
77
+ }
78
+
79
+ to {
80
+ opacity: 1;
81
+ transform: translateY(0);
82
+ }
83
+ }
84
+
85
+ .z-popup {
86
+ z-index: var(--popup-z-index);
87
+ }
88
+
89
+ @keyframes shrink {
90
+ 0% {
91
+ transform: scale(1);
92
+ }
93
+
94
+ 50% {
95
+ transform: scale(0.9);
96
+ }
97
+
98
+ 100% {
99
+ transform: scale(1);
100
+ }
101
+ }