@opendesign-plus/components 0.0.1-rc.16

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 (168) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -0
  2. package/dist/chunk-OElCookieNotice.es.js +281 -0
  3. package/dist/components/OBanner.vue.d.ts +2 -0
  4. package/dist/components/OCookieNotice.vue.d.ts +16 -0
  5. package/dist/components/OFooter.vue.d.ts +25 -0
  6. package/dist/components/OHeader.vue.d.ts +23 -0
  7. package/dist/components/OHeaderMoblie.vue.d.ts +33 -0
  8. package/dist/components/OHeaderSearch.vue.d.ts +692 -0
  9. package/dist/components/OHeaderUser.vue.d.ts +40 -0
  10. package/dist/components/OPlusConfigProvider.vue.d.ts +23 -0
  11. package/dist/components/OSection.vue.d.ts +37 -0
  12. package/dist/components/OSourceCode.vue.d.ts +20 -0
  13. package/dist/components/OThemeSwitcher.vue.d.ts +28 -0
  14. package/dist/components/element-plus/OElCookieNotice.vue.d.ts +31 -0
  15. package/dist/components/element-plus/index.d.ts +2 -0
  16. package/dist/components/events/OEventsApply.vue.d.ts +16 -0
  17. package/dist/components/events/OEventsCalendar.vue.d.ts +5 -0
  18. package/dist/components/events/OEventsList.vue.d.ts +26 -0
  19. package/dist/components/events/config.d.ts +26 -0
  20. package/dist/components/events/index.d.ts +78 -0
  21. package/dist/components/events/types.d.ts +66 -0
  22. package/dist/components/events/utils.d.ts +7 -0
  23. package/dist/components.cjs.js +3 -0
  24. package/dist/components.css +1 -0
  25. package/dist/components.element.cjs.js +1 -0
  26. package/dist/components.element.es.js +4 -0
  27. package/dist/components.es.js +3509 -0
  28. package/dist/index.d.ts +18 -0
  29. package/docs/design.md +27 -0
  30. package/docs/design_banner.md +41 -0
  31. package/docs/design_section.md +27 -0
  32. package/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +1 -0
  33. package/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +3 -0
  34. package/npmcachae/_logs/2026-03-17T09_38_12_009Z-debug-0.log +157 -0
  35. package/npmcachae/_logs/2026-03-17T09_38_14_370Z-debug-0.log +157 -0
  36. package/npmcachae/_logs/2026-03-17T09_38_16_516Z-debug-0.log +157 -0
  37. package/npmcachae/_logs/2026-03-17T09_38_18_616Z-debug-0.log +157 -0
  38. package/npmcachae/_logs/2026-03-17T09_38_20_859Z-debug-0.log +157 -0
  39. package/npmcachae/_logs/2026-03-17T09_38_23_182Z-debug-0.log +157 -0
  40. package/npmcachae/_logs/2026-03-17T09_38_25_452Z-debug-0.log +157 -0
  41. package/npmcachae/_logs/2026-03-17T09_38_27_865Z-debug-0.log +157 -0
  42. package/npmcachae/_logs/2026-03-17T09_38_30_082Z-debug-0.log +157 -0
  43. package/npmcachae/_logs/2026-03-17T09_38_32_219Z-debug-0.log +157 -0
  44. package/npmcachae/_logs/2026-03-17T09_38_34_308Z-debug-0.log +157 -0
  45. package/npmcachae/_update-notifier-last-checked +0 -0
  46. package/package.json +53 -0
  47. package/scripts/generate-components-index.js +100 -0
  48. package/src/assets/events/city/default-cover.png +0 -0
  49. package/src/assets/events/city//344/270/212/346/265/267.png +0 -0
  50. package/src/assets/events/city//345/214/227/344/272/254.png +0 -0
  51. package/src/assets/events/city//345/215/227/344/272/254.png +0 -0
  52. package/src/assets/events/city//345/244/251/346/264/245.png +0 -0
  53. package/src/assets/events/city//345/271/277/345/267/236.png +0 -0
  54. package/src/assets/events/city//346/210/220/351/203/275.png +0 -0
  55. package/src/assets/events/city//346/227/240/351/224/241.png +0 -0
  56. package/src/assets/events/city//346/235/255/345/267/236.png +0 -0
  57. package/src/assets/events/city//346/255/246/346/261/211.png +0 -0
  58. package/src/assets/events/city//346/267/261/345/234/2631.png +0 -0
  59. package/src/assets/events/city//346/267/261/345/234/2632.png +0 -0
  60. package/src/assets/events/city//350/213/217/345/267/236.png +0 -0
  61. package/src/assets/events/city//350/245/277/345/256/211.png +0 -0
  62. package/src/assets/events/city//351/203/221/345/267/236.png +0 -0
  63. package/src/assets/events/svg-icons/icon-checked.svg +3 -0
  64. package/src/assets/events/svg-icons/icon-competition.svg +7 -0
  65. package/src/assets/events/svg-icons/icon-events.svg +4 -0
  66. package/src/assets/events/svg-icons/icon-release.svg +4 -0
  67. package/src/assets/events/svg-icons/icon-summit.svg +4 -0
  68. package/src/assets/svg-icons/icon-arrow-left.svg +3 -0
  69. package/src/assets/svg-icons/icon-avatar-line.svg +3 -0
  70. package/src/assets/svg-icons/icon-caret-left.svg +3 -0
  71. package/src/assets/svg-icons/icon-caret-right.svg +3 -0
  72. package/src/assets/svg-icons/icon-chevron-down.svg +3 -0
  73. package/src/assets/svg-icons/icon-chevron-right.svg +3 -0
  74. package/src/assets/svg-icons/icon-close.svg +3 -0
  75. package/src/assets/svg-icons/icon-delete.svg +3 -0
  76. package/src/assets/svg-icons/icon-header-back.svg +3 -0
  77. package/src/assets/svg-icons/icon-header-delete.svg +3 -0
  78. package/src/assets/svg-icons/icon-header-menu.svg +3 -0
  79. package/src/assets/svg-icons/icon-header-person.svg +3 -0
  80. package/src/assets/svg-icons/icon-header-search.svg +4 -0
  81. package/src/assets/svg-icons/icon-locale.svg +3 -0
  82. package/src/assets/svg-icons/icon-log-off.svg +3 -0
  83. package/src/assets/svg-icons/icon-message.svg +3 -0
  84. package/src/assets/svg-icons/icon-moon.svg +3 -0
  85. package/src/assets/svg-icons/icon-outlink.svg +3 -0
  86. package/src/assets/svg-icons/icon-overview.svg +3 -0
  87. package/src/assets/svg-icons/icon-setting.svg +3 -0
  88. package/src/assets/svg-icons/icon-sun.svg +3 -0
  89. package/src/components/OBanner.vue +390 -0
  90. package/src/components/OCookieNotice.vue +423 -0
  91. package/src/components/OFooter.vue +566 -0
  92. package/src/components/OHeader.vue +97 -0
  93. package/src/components/OHeaderMoblie.vue +149 -0
  94. package/src/components/OHeaderSearch.vue +601 -0
  95. package/src/components/OHeaderUser.vue +304 -0
  96. package/src/components/OPlusConfigProvider.vue +32 -0
  97. package/src/components/OSection.vue +178 -0
  98. package/src/components/OSourceCode.vue +153 -0
  99. package/src/components/OThemeSwitcher.vue +108 -0
  100. package/src/components/common/AppAvatar.vue +83 -0
  101. package/src/components/common/ClientOnlyWrapper.ts +21 -0
  102. package/src/components/common/ContentWrapper.vue +85 -0
  103. package/src/components/common/HeaderEulerNav.vue +1118 -0
  104. package/src/components/common/HeaderNavMoblie.vue +344 -0
  105. package/src/components/common/HeaderUbmcNav.vue +597 -0
  106. package/src/components/element-plus/OElCookieNotice.vue +412 -0
  107. package/src/components/element-plus/index.ts +3 -0
  108. package/src/components/events/OEventsApply.vue +487 -0
  109. package/src/components/events/OEventsCalendar.vue +611 -0
  110. package/src/components/events/OEventsList.vue +402 -0
  111. package/src/components/events/config.ts +47 -0
  112. package/src/components/events/index.ts +23 -0
  113. package/src/components/events/npmcachae/_cacache/content-v2/sha512/2c/4f/a4140bfbf374a43f7dfe71880c051f79149cd259fb1a154fb692802c7489ef2317b737e7e690a627714ba19317971f29051b3798c246297b425a626a5b7a +1 -0
  114. package/src/components/events/npmcachae/_cacache/index-v5/8e/86/70dc69f1b1592fe14da10d2516ddfaa609af0cd9054a6ebde664acc6ab12 +2 -0
  115. package/src/components/events/npmcachae/_logs/2026-03-25T09_58_33_134Z-debug-0.log +105 -0
  116. package/src/components/events/npmcachae/_update-notifier-last-checked +0 -0
  117. package/src/components/events/types.ts +80 -0
  118. package/src/components/events/utils.ts +9 -0
  119. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/3e/17/1865217b9acb9f4921c53a09b5c76587cd2ab748beb2699ff6cfb1341d73b1aa56ed91ffc5ab2c9c9b3fbe626103b35d9a79ff29ff6b8cbb8d89755fe1a2 +1 -0
  120. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/a6/15/47bb7552ec9248079e839a5feecc1742d4de19524fdf041cf581701cf4760a5025106036145e279ba193b07c8fa5b07ae3d75f1b6032f0cb2219115b6167 +1 -0
  121. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/d1/4c/133b32e09c97101a27a07cc4432f94e470cff02d120d21babcea77c3f5cd436793516dc1a8e282ee1a568f923c148b1a48f4a43233462a530d35e8b41c67 +1 -0
  122. package/src/components/meeting/npmcachae/_cacache/index-v5/54/0d/a4909047714a0a7198bb9bd37020992464e47c79a791889919b84d90aab0 +3 -0
  123. package/src/components/meeting/npmcachae/_cacache/index-v5/8e/2b/21a79778e2ac08cf5663baf83cb35f951995a496007eb2e2f7fba54021a4 +3 -0
  124. package/src/components/meeting/npmcachae/_cacache/index-v5/eb/a0/b70c8132e5b57a0f1e129b8cc941796420a9c147c0baa680710083740898 +2 -0
  125. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_54_955Z-debug-0.log +277 -0
  126. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_57_842Z-debug-0.log +277 -0
  127. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_00_016Z-debug-0.log +277 -0
  128. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_02_191Z-debug-0.log +277 -0
  129. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_04_425Z-debug-0.log +277 -0
  130. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_06_642Z-debug-0.log +277 -0
  131. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_08_826Z-debug-0.log +277 -0
  132. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_36_140Z-debug-0.log +433 -0
  133. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_39_573Z-debug-0.log +433 -0
  134. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_42_134Z-debug-0.log +212 -0
  135. package/src/components/meeting/npmcachae/_update-notifier-last-checked +0 -0
  136. package/src/draft/Banner.vue +265 -0
  137. package/src/draft/ButtonCards.vue +106 -0
  138. package/src/draft/Feature.vue +134 -0
  139. package/src/draft/Footer.vue +512 -0
  140. package/src/draft/HorizontalAnchor.vue +165 -0
  141. package/src/draft/ItemSwiper.vue +133 -0
  142. package/src/draft/Logo.vue +141 -0
  143. package/src/draft/LogoCard.vue +75 -0
  144. package/src/draft/LogoV2.vue +19 -0
  145. package/src/draft/MainCard.vue +38 -0
  146. package/src/draft/MultiCard.vue +95 -0
  147. package/src/draft/MultiIconCard.vue +74 -0
  148. package/src/draft/OInfoCard.vue +176 -0
  149. package/src/draft/Process.vue +81 -0
  150. package/src/draft/Section.vue +167 -0
  151. package/src/draft/SingleTabCard.vue +85 -0
  152. package/src/draft/SliderCard.vue +110 -0
  153. package/src/env.d.ts +1 -0
  154. package/src/i18n/en.ts +20 -0
  155. package/src/i18n/index.ts +42 -0
  156. package/src/i18n/zh.ts +14 -0
  157. package/src/index.ts +46 -0
  158. package/src/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +1 -0
  159. package/src/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +3 -0
  160. package/src/npmcachae/_logs/2026-03-17T10_53_33_398Z-debug-0.log +156 -0
  161. package/src/npmcachae/_logs/2026-03-17T10_53_35_464Z-debug-0.log +156 -0
  162. package/src/npmcachae/_logs/2026-03-17T10_53_37_852Z-debug-0.log +156 -0
  163. package/src/npmcachae/_update-notifier-last-checked +0 -0
  164. package/src/shared/provide.ts +6 -0
  165. package/src/shims-vue-dompurify-html.d.ts +17 -0
  166. package/src/vue.d.ts +10 -0
  167. package/tsconfig.json +33 -0
  168. package/vite.config.ts +102 -0
@@ -0,0 +1,1118 @@
1
+ <script setup lang="ts">
2
+ import { ref, onMounted, onUnmounted, nextTick } from 'vue';
3
+ import { OScroller, OIcon, OTag } from '@opensig/opendesign';
4
+
5
+ import IconCaretLeft from '~icons/components/icon-caret-left.svg';
6
+ import IconCaretRight from '~icons/components/icon-caret-right.svg';
7
+
8
+ import { useLocale, useTheme } from '@opendesign-plus/composables';
9
+
10
+ import { useDebounceFn } from '@vueuse/core';
11
+
12
+ const props = defineProps({
13
+ navData: undefined,
14
+ bgLeft: undefined,
15
+ bgRight: undefined,
16
+ });
17
+
18
+ const { locale } = useLocale();
19
+ const { theme, isDark } = useTheme();
20
+
21
+ const navRef = ref();
22
+ const navListRef = ref();
23
+ const resizeTimer = ref(null);
24
+ const navVisibleRight = ref(false);
25
+ const navVisibleLeft = ref(false);
26
+
27
+ // nav 鼠标滑过事件
28
+ const isShow = ref(false);
29
+ const navActive = ref();
30
+ const subNavContent = ref<any>([]);
31
+ const navShortcut = ref<any>([]);
32
+ const isPicture = ref(false);
33
+ const toggleDebounced = useDebounceFn(function (item: any | null) {
34
+ if (item === null) {
35
+ navActive.value = '';
36
+ isShow.value = false;
37
+ isPicture.value = false;
38
+ } else {
39
+ navActive.value = item.id;
40
+ isShow.value = true;
41
+ subNavContent.value = item.children;
42
+ navShortcut.value = item.shortcut;
43
+ isPicture.value = item.withPicture;
44
+ }
45
+ }, 100);
46
+
47
+ const linkClick = (url: string, target: string) => {
48
+ window.open(url, target);
49
+ navActive.value = '';
50
+ isShow.value = false;
51
+ };
52
+
53
+ const showDesc = ref(false);
54
+ const descMouseenter = (e: MouseEvent) => {
55
+ if (!e || !e.target) return;
56
+ showDesc.value = e.target.clientHeight < e.target.scrollHeight;
57
+ };
58
+
59
+ const scrollNavRight = () => {
60
+ navVisibleLeft.value = true;
61
+ nextTick(() => {
62
+ navRef.value.scrollTo({
63
+ left: navRef.value.clientWidth,
64
+ behavior: 'smooth',
65
+ });
66
+ });
67
+ };
68
+ const scrollNavLeft = () => {
69
+ navRef.value.scrollTo({
70
+ left: 0,
71
+ behavior: 'smooth',
72
+ });
73
+ navVisibleLeft.value = false;
74
+ };
75
+
76
+ const calculateLayout = () => {
77
+ if (navRef.value?.clientWidth < navListRef.value?.clientWidth) {
78
+ navVisibleRight.value = true;
79
+ }
80
+ };
81
+
82
+ onMounted(() => {
83
+ window.addEventListener('resize', calculateLayout);
84
+ // 确保 DOM 完全渲染后再计算
85
+ nextTick(() => {
86
+ calculateLayout();
87
+ resizeTimer.value = setTimeout(() => {
88
+ calculateLayout();
89
+ }, 1000);
90
+ });
91
+ });
92
+
93
+ // 清理
94
+ onUnmounted(() => {
95
+ window.removeEventListener('resize', calculateLayout);
96
+ clearTimeout(resizeTimer.value);
97
+ });
98
+ </script>
99
+
100
+ <template>
101
+ <div class="header-content">
102
+ <div class="header-nav" :class="{ 'header-nav-scroll': navVisibleLeft }">
103
+ <div class="right-icon" v-if="navVisibleLeft">
104
+ <OIcon @click="scrollNavLeft"><IconCaretLeft /></OIcon>
105
+ </div>
106
+ <nav ref="navRef" class="o-nav" :class="{ 'o-nav-scroll': navVisibleLeft || !navVisibleRight, dark: isDark }">
107
+ <ul ref="navListRef" class="o-nav-list">
108
+ <li v-for="item in navData" :key="item.id" @mouseenter="toggleDebounced(item)" @mouseleave="toggleDebounced(null)">
109
+ <span :id="'tour_headerNav_' + item.ID" class="nav-item">{{ item.label }}</span>
110
+ <transition name="transition">
111
+ <div v-if="isShow" :class="['nav-dropdown', navActive, theme, `${navActive}-${locale}`]">
112
+ <div class="nav-drop-content">
113
+ <div class="nav-background-left" :style="{ backgroundImage: `url(${props.bgLeft})` }"></div>
114
+ <div class="nav-background-right" :style="{ backgroundImage: `url(${props.bgRight})` }"></div>
115
+ <OScroller class="nav-scroller" show-type="always" size="small" disabled-y>
116
+ <div class="nav-sub-content">
117
+ <div class="content-left">
118
+ <div class="item-sub" v-for="(sub, s) in subNavContent" :key="s">
119
+ <span class="content-label">{{ sub.label }}</span>
120
+ <div class="content-container">
121
+ <div v-for="subItem in sub.children" :key="subItem.label" class="content-item">
122
+ <a @click="linkClick(subItem.href, '_self')" rel="noopener noreferrer" class="item-label">
123
+ <span class="item-name">{{ subItem.label }}</span>
124
+ <OIcon v-if="subItem.icon">
125
+ <component :is="subItem.icon" class="icon" />
126
+ </OIcon>
127
+ <OTag v-if="subItem.tag" round="pill" color="danger" size="small" class="content-tag">{{ subItem.tag }}</OTag>
128
+ </a>
129
+ <div v-if="subItem.description" class="desc-container">
130
+ <p class="item-desc" :title="showDesc ? subItem.description : null" @mouseenter="descMouseenter($event)">
131
+ {{ subItem.description }}
132
+ </p>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ <div class="split-line" v-if="navShortcut?.length"></div>
139
+ <div class="content-right" v-if="navShortcut?.length">
140
+ <span class="content-label">快捷链接</span>
141
+ <template v-if="!isPicture">
142
+ <div v-for="shortcut in navShortcut" :key="shortcut.label" class="shortcut">
143
+ <a @click="linkClick(shortcut.href, '_self')" rel="noopener noreferrer" class="shortcut-link">
144
+ <span>{{ shortcut.label }}</span>
145
+ <OIcon v-if="shortcut.icon">
146
+ <component :is="shortcut.icon" class="icon" />
147
+ </OIcon>
148
+ </a>
149
+ </div>
150
+ </template>
151
+ <template v-else>
152
+ <a
153
+ v-for="shortcut in navShortcut"
154
+ :key="shortcut.label"
155
+ @click="linkClick(shortcut.href, '_self')"
156
+ rel="noopener noreferrer"
157
+ class="review"
158
+ >
159
+ <img :src="shortcut.picture" class="review-picture" />
160
+ <div class="review-content">
161
+ <p class="review-label">
162
+ {{ shortcut.label }}
163
+ </p>
164
+ <div class="review-property">
165
+ <span>{{ shortcut.remark }}</span>
166
+ </div>
167
+ </div>
168
+ </a>
169
+ </template>
170
+ </div>
171
+ </div>
172
+ </OScroller>
173
+ </div>
174
+ </div>
175
+ </transition>
176
+ </li>
177
+ </ul>
178
+ </nav>
179
+ <div class="right-icon" v-if="navVisibleRight && !navVisibleLeft">
180
+ <OIcon @click="scrollNavRight"><IconCaretRight /></OIcon>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ </template>
185
+
186
+ <style lang="scss" scoped>
187
+ .header-content {
188
+ .header-nav {
189
+ height: 100%;
190
+ display: flex;
191
+ justify-content: space-between;
192
+ width: calc(100% - 64px);
193
+ align-items: center;
194
+ }
195
+ .header-nav-scroll {
196
+ width: calc(100% - 64px - 24px);
197
+ }
198
+ }
199
+ .o-nav {
200
+ height: 100%;
201
+ position: relative;
202
+ overflow-y: hidden;
203
+ overflow-x: auto;
204
+ &::after {
205
+ content: '';
206
+ position: absolute;
207
+ width: 50px;
208
+ height: 100%;
209
+ right: 0;
210
+ top: 0;
211
+ background-image: linear-gradient(90deg, rgba(var(--o-mixedgray-1), 0) 0%, rgba(var(--o-mixedgray-1), 1) 100%);
212
+ z-index: 0;
213
+ }
214
+ &::-webkit-scrollbar {
215
+ display: none;
216
+ }
217
+ &.dark {
218
+ &::after {
219
+ background-image: linear-gradient(90deg, rgba(var(--o-mixedgray-4), 0) 0%, rgba(var(--o-mixedgray-4), 1) 100%);
220
+ }
221
+ }
222
+
223
+ .o-nav-list {
224
+ display: flex;
225
+ height: 100%;
226
+ width: fit-content;
227
+ flex-wrap: nowrap;
228
+ white-space: nowrap;
229
+ padding: 0;
230
+ margin: 0;
231
+ > li {
232
+ position: relative;
233
+ display: inline-flex;
234
+ align-items: center;
235
+ height: 100%;
236
+ color: var(--o-color-info1);
237
+ cursor: pointer;
238
+ transition: all var(--o-duration-s) var(--o-easing-standard);
239
+ @include text1;
240
+
241
+ @include hover {
242
+ z-index: 99;
243
+ }
244
+
245
+ &::after {
246
+ content: '';
247
+ position: absolute;
248
+ left: var(--o-gap-4);
249
+ opacity: 0;
250
+ bottom: 0;
251
+ width: calc(100% - var(--o-gap-4) * 2);
252
+ height: 2px;
253
+ border-radius: 1px;
254
+ background: var(--o-color-primary1);
255
+ transition: all var(--o-duration-s) var(--o-easing-standard);
256
+ }
257
+
258
+ &.active {
259
+ color: var(--o-color-primary1);
260
+ z-index: 99;
261
+ font-weight: 500;
262
+ &::after {
263
+ content: '';
264
+ opacity: 1;
265
+ }
266
+ }
267
+ .nav-item {
268
+ display: block;
269
+ padding: 22px var(--o-gap-4);
270
+
271
+ @include respond-to('laptop') {
272
+ padding: 22px 14px;
273
+ }
274
+ @include respond-to('pad_h') {
275
+ padding: 22px 8px;
276
+ }
277
+ &.en {
278
+ @media (min-width: 841px) and (max-width: 1000px) {
279
+ padding: var(--o-gap-2);
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }
286
+ .o-nav-scroll {
287
+ &::after {
288
+ display: none;
289
+ }
290
+ }
291
+ .nav-dropdown {
292
+ position: fixed;
293
+ top: var(--o-header-height);
294
+ left: 0;
295
+ right: 0;
296
+ background: var(--o-color-fill2);
297
+ z-index: 90;
298
+ color: var(--o-color-info1);
299
+ display: flex;
300
+ font-weight: normal;
301
+ cursor: default;
302
+ overflow: hidden;
303
+
304
+ min-height: 320px;
305
+ justify-content: center;
306
+ transform-origin: top;
307
+
308
+ &.light {
309
+ box-shadow: 0 3px 6px rgba(#001255, 0.08);
310
+ }
311
+
312
+ @include respond-to('laptop') {
313
+ min-height: 300px;
314
+ }
315
+ @include respond-to('pad_h') {
316
+ min-height: 260px;
317
+ }
318
+
319
+ @include respond-to('>pad_v') {
320
+ &.dark {
321
+ &:after {
322
+ content: '';
323
+ position: absolute;
324
+ left: 0;
325
+ right: 0;
326
+ bottom: 0;
327
+ height: 1px;
328
+ background-color: var(--o-color-control4);
329
+ }
330
+ }
331
+ }
332
+
333
+ .content-container {
334
+ display: flex;
335
+ margin: 0;
336
+ padding: 0;
337
+ flex-wrap: wrap;
338
+ .content-item {
339
+ width: 200px;
340
+ margin-top: 24px;
341
+ &:nth-of-type(1) {
342
+ margin-top: 0;
343
+ }
344
+
345
+ @include respond-to('laptop') {
346
+ width: 170px;
347
+ margin-top: 16px;
348
+ }
349
+
350
+ @include respond-to('pad_h') {
351
+ width: 132px;
352
+ margin-top: 16px;
353
+ }
354
+ }
355
+ .item-label {
356
+ display: inline-flex;
357
+ align-items: center;
358
+ margin-bottom: var(--o-gap-1);
359
+ .item-name {
360
+ font-weight: 500;
361
+ white-space: nowrap;
362
+ @include text1;
363
+ }
364
+ .content-tag {
365
+ margin-left: var(--o-gap-2);
366
+ border-radius: var(--o-radius-xs);
367
+ @include respond-to('<=laptop') {
368
+ display: none;
369
+ }
370
+ }
371
+ }
372
+ .desc-container {
373
+ overflow: hidden;
374
+ position: relative;
375
+ height: 36px;
376
+ white-space: normal;
377
+
378
+ .item-desc {
379
+ color: var(--o-color-info2);
380
+ word-break: normal;
381
+ margin: 0;
382
+ @include tip2;
383
+ @include text-truncate(2);
384
+ }
385
+ }
386
+ }
387
+
388
+ &.download {
389
+ .item-sub {
390
+ margin-left: 80px;
391
+ &:nth-of-type(1) {
392
+ margin-left: 0;
393
+ .content-container {
394
+ width: 464px;
395
+ :deep(.content-item) {
396
+ margin-left: 64px;
397
+ &:nth-child(2n + 1) {
398
+ margin-left: 0;
399
+ }
400
+ &:nth-of-type(2) {
401
+ margin-top: 0;
402
+ }
403
+ }
404
+ }
405
+ }
406
+
407
+ @include respond-to('<=laptop') {
408
+ margin-left: 24px;
409
+ &:nth-of-type(1) {
410
+ .content-container {
411
+ width: 364px;
412
+ :deep(.content-item) {
413
+ margin-left: 24px;
414
+ }
415
+ }
416
+ }
417
+ &:nth-of-type(3) {
418
+ .content-container {
419
+ width: 170px;
420
+ }
421
+ }
422
+ }
423
+
424
+ @include respond-to('pad_h') {
425
+ &:nth-of-type(1) {
426
+ .content-container {
427
+ width: 344px;
428
+ }
429
+ }
430
+ }
431
+ }
432
+
433
+ @include respond-to('pad_h') {
434
+ .content-left {
435
+ .item-sub {
436
+ max-width: 25%;
437
+ flex: 1 1 auto;
438
+ .content-container {
439
+ width: auto;
440
+ :deep(.content-item) {
441
+ width: 100%;
442
+ }
443
+ }
444
+ &:nth-of-type(1) {
445
+ max-width: 50%;
446
+ .content-container {
447
+ :deep(.content-item) {
448
+ width: calc(50% - 12px);
449
+ }
450
+ }
451
+ }
452
+ }
453
+ }
454
+ }
455
+ }
456
+
457
+ &.development {
458
+ .item-sub {
459
+ margin-left: 24px;
460
+ &:nth-of-type(1) {
461
+ margin-left: 0;
462
+ }
463
+
464
+ @include respond-to('>laptop') {
465
+ width: 200px;
466
+ }
467
+
468
+ @include respond-to('laptop') {
469
+ width: 170px;
470
+ }
471
+
472
+ @include respond-to('pad_h') {
473
+ width: 132px;
474
+ }
475
+ }
476
+
477
+ @include respond-to('pad_h') {
478
+ .content-left {
479
+ .item-sub {
480
+ flex: 1 1 auto;
481
+ .content-container {
482
+ width: auto;
483
+ :deep(.content-item) {
484
+ width: 100%;
485
+ .desc-container {
486
+ width: auto;
487
+ }
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+ }
494
+
495
+ &.document {
496
+ .item-sub {
497
+ &:nth-of-type(1) {
498
+ .content-container {
499
+ :deep(.content-item) {
500
+ margin-right: 64px;
501
+ &:nth-child(-n + 4) {
502
+ margin-top: 0;
503
+ }
504
+ &:nth-of-type(4) {
505
+ margin-right: 0;
506
+ }
507
+
508
+ @include respond-to('<=laptop') {
509
+ margin-right: 24px;
510
+ }
511
+ }
512
+ @media (min-width: 1441px) and (max-width: 1505px) {
513
+ :deep(.content-item) {
514
+ margin-right: 40px;
515
+ }
516
+ }
517
+ @include respond-to('>laptop') {
518
+ width: 992px;
519
+ }
520
+ @include respond-to('laptop') {
521
+ width: 752px;
522
+ }
523
+ @include respond-to('pad_h') {
524
+ width: auto;
525
+ }
526
+ }
527
+ }
528
+ }
529
+
530
+ @include respond-to('pad_h') {
531
+ .content-left {
532
+ .item-sub {
533
+ max-width: 80%;
534
+ flex: 1 1 auto;
535
+ .content-container {
536
+ :deep(.content-item) {
537
+ width: calc(25% - 18px);
538
+ }
539
+ }
540
+ }
541
+ }
542
+ }
543
+ }
544
+
545
+ &.learn {
546
+ .item-sub {
547
+ margin-left: 48px;
548
+ &:nth-of-type(1) {
549
+ margin-left: 0;
550
+ }
551
+ &:nth-of-type(2) {
552
+ .content-container {
553
+ width: 448px;
554
+ :deep(.content-item) {
555
+ margin-left: 48px;
556
+ &:nth-child(2n + 1) {
557
+ margin-left: 0;
558
+ }
559
+ &:nth-of-type(2) {
560
+ margin-top: 0;
561
+ }
562
+ }
563
+ }
564
+ }
565
+
566
+ @include respond-to('<=laptop') {
567
+ margin-left: 24px;
568
+ &:nth-of-type(2) {
569
+ .content-container {
570
+ width: 364px;
571
+ :deep(.content-item) {
572
+ margin-left: 24px;
573
+ }
574
+ }
575
+ }
576
+ }
577
+
578
+ @include respond-to('pad_h') {
579
+ &:nth-of-type(2) {
580
+ .content-container {
581
+ width: auto;
582
+ }
583
+ }
584
+ }
585
+ }
586
+
587
+ @include respond-to('pad_h') {
588
+ .content-left {
589
+ .item-sub {
590
+ max-width: 25%;
591
+ flex: 1 1 auto;
592
+ .content-container {
593
+ width: auto;
594
+ :deep(.content-item) {
595
+ width: 100%;
596
+ }
597
+ }
598
+ &:nth-of-type(2) {
599
+ max-width: 50%;
600
+ .content-container {
601
+ :deep(.content-item) {
602
+ width: calc(50% - 12px);
603
+ }
604
+ }
605
+ }
606
+ }
607
+ }
608
+ }
609
+ }
610
+
611
+ &.approve {
612
+ .item-sub {
613
+ margin-left: 80px;
614
+ &:nth-of-type(1) {
615
+ margin-left: 0;
616
+ .content-container {
617
+ width: 440px;
618
+ :deep(.content-item) {
619
+ margin-left: 40px;
620
+ &:nth-child(2n + 1) {
621
+ margin-left: 0;
622
+ }
623
+ &:nth-of-type(2) {
624
+ margin-top: 0;
625
+ }
626
+ }
627
+ }
628
+ }
629
+
630
+ @include respond-to('<=laptop') {
631
+ margin-left: 24px;
632
+ &:nth-of-type(1) {
633
+ .content-container {
634
+ width: 364px;
635
+ :deep(.content-item) {
636
+ margin-left: 24px;
637
+ }
638
+ }
639
+ }
640
+ &:nth-of-type(2),
641
+ &:nth-of-type(3) {
642
+ .content-container {
643
+ width: 170px;
644
+ }
645
+ }
646
+ }
647
+
648
+ @include respond-to('pad_h') {
649
+ &:nth-of-type(n) {
650
+ .content-container {
651
+ width: auto;
652
+ }
653
+ }
654
+ }
655
+ }
656
+
657
+ @include respond-to('pad_h') {
658
+ .content-left {
659
+ .item-sub {
660
+ max-width: 20%;
661
+ flex: 1 1 auto;
662
+ .content-container {
663
+ width: auto;
664
+ :deep(.content-item) {
665
+ width: 100%;
666
+ }
667
+ }
668
+ &:nth-of-type(1) {
669
+ max-width: 40%;
670
+ .content-container {
671
+ :deep(.content-item) {
672
+ width: calc(50% - 12px);
673
+ }
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+ }
680
+ &.approve-en {
681
+ .item-sub {
682
+ &:nth-child(n) {
683
+ .content-container {
684
+ width: 200px;
685
+ }
686
+ }
687
+
688
+ @include respond-to('<=laptop') {
689
+ &:nth-child(n) {
690
+ .content-container {
691
+ width: 170px;
692
+ }
693
+ }
694
+ }
695
+
696
+ @include respond-to('pad_h') {
697
+ &:nth-child(n) {
698
+ .content-container {
699
+ width: 132px;
700
+ }
701
+ }
702
+ }
703
+ }
704
+
705
+ @include respond-to('pad_h') {
706
+ .content-left {
707
+ .item-sub {
708
+ .content-container {
709
+ width: auto;
710
+ }
711
+ &:nth-of-type(1) {
712
+ max-width: 20%;
713
+ .content-container {
714
+ :deep(.content-item) {
715
+ width: 100%;
716
+ }
717
+ }
718
+ }
719
+ }
720
+ }
721
+ }
722
+ }
723
+
724
+ &.community {
725
+ .item-sub {
726
+ margin-left: 48px;
727
+ &:nth-of-type(1) {
728
+ margin-left: 0;
729
+ .content-container {
730
+ width: 696px;
731
+ :deep(.content-item) {
732
+ margin-left: 48px;
733
+ &:nth-child(3n + 1) {
734
+ margin-left: 0;
735
+ }
736
+ &:nth-child(-n + 3) {
737
+ margin-top: 0;
738
+ }
739
+ }
740
+ }
741
+ }
742
+
743
+ &:nth-of-type(2) {
744
+ .content-container {
745
+ width: 200px;
746
+ }
747
+ }
748
+
749
+ @include respond-to('<=laptop') {
750
+ margin-left: 24px;
751
+ &:nth-of-type(1) {
752
+ .content-container {
753
+ :deep(.content-item) {
754
+ margin-left: 24px;
755
+ }
756
+ }
757
+ }
758
+ }
759
+
760
+ @include respond-to('laptop') {
761
+ &:nth-of-type(1) {
762
+ .content-container {
763
+ width: 558px;
764
+ }
765
+ }
766
+ &:nth-of-type(2) {
767
+ .content-container {
768
+ width: 170px;
769
+ }
770
+ }
771
+ }
772
+
773
+ @include respond-to('pad_h') {
774
+ &:nth-of-type(1) {
775
+ .content-container {
776
+ width: auto;
777
+ }
778
+ }
779
+ &:nth-of-type(2) {
780
+ .content-container {
781
+ width: 132px;
782
+ }
783
+ }
784
+ }
785
+ }
786
+
787
+ @include respond-to('pad_h') {
788
+ .content-left {
789
+ .item-sub {
790
+ max-width: 20%;
791
+ flex: 1 1 auto;
792
+ .content-container {
793
+ width: auto;
794
+ :deep(.content-item) {
795
+ width: 100%;
796
+ }
797
+ }
798
+ &:nth-of-type(1) {
799
+ max-width: 60%;
800
+ .content-container {
801
+ :deep(.content-item) {
802
+ width: calc((100% / 3) - 18px);
803
+ }
804
+ }
805
+ }
806
+ }
807
+ }
808
+ }
809
+ }
810
+
811
+ &.update {
812
+ .item-sub {
813
+ margin-left: 48px;
814
+ .content-container {
815
+ width: 448px;
816
+ :deep(.content-item) {
817
+ margin-left: 48px;
818
+ &:nth-child(2n + 1) {
819
+ margin-left: 0;
820
+ }
821
+ &:nth-child(-n + 2) {
822
+ margin-top: 0;
823
+ }
824
+ }
825
+ }
826
+ &:nth-of-type(1) {
827
+ margin-left: 0;
828
+ }
829
+
830
+ @include respond-to('<=laptop') {
831
+ margin-left: 24px;
832
+ .content-container {
833
+ :deep(.content-item) {
834
+ margin-left: 24px;
835
+ }
836
+ }
837
+ }
838
+ @include respond-to('laptop') {
839
+ .content-container {
840
+ width: 364px;
841
+ }
842
+ }
843
+
844
+ @include respond-to('pad_h') {
845
+ .content-container {
846
+ width: auto;
847
+ }
848
+ }
849
+ }
850
+
851
+ @include respond-to('pad_h') {
852
+ .content-left {
853
+ .item-sub {
854
+ max-width: 40%;
855
+ flex: 1 1 auto;
856
+ .content-container {
857
+ :deep(.content-item) {
858
+ width: calc(50% - 24px);
859
+ }
860
+ }
861
+ }
862
+ }
863
+ }
864
+ }
865
+ }
866
+
867
+ .right-icon {
868
+ display: flex;
869
+ align-items: center;
870
+ .o-icon {
871
+ --icon-size: 24px;
872
+ cursor: pointer;
873
+ }
874
+ }
875
+
876
+ .nav-drop-content {
877
+ max-width: 1416px;
878
+ width: calc(100% - 2 * var(--layout-content-padding));
879
+ display: flex;
880
+ }
881
+
882
+ .nav-background-left {
883
+ position: absolute;
884
+ left: 0;
885
+ top: -87px;
886
+ width: 173px;
887
+ height: 249px;
888
+ background-size: cover;
889
+ z-index: -1;
890
+
891
+ @include respond-to('<=laptop') {
892
+ display: none;
893
+ }
894
+ }
895
+
896
+ .nav-background-right {
897
+ position: absolute;
898
+ right: 0;
899
+ bottom: 0;
900
+ width: 173px;
901
+ height: 172px;
902
+ background-size: cover;
903
+ z-index: -1;
904
+
905
+ @include respond-to('<=laptop') {
906
+ display: none;
907
+ }
908
+ }
909
+ .nav-sub-content {
910
+ display: flex;
911
+ flex: 1;
912
+ position: relative;
913
+ }
914
+ .content-left {
915
+ padding: 32px 24px 40px 0;
916
+ display: flex;
917
+
918
+ @include respond-to('laptop') {
919
+ padding: var(--o-gap-5) var(--o-gap-4) var(--o-gap-5) 0;
920
+ }
921
+
922
+ @include respond-to('<=pad') {
923
+ padding: var(--o-gap-5) 0;
924
+ }
925
+
926
+ .icon {
927
+ width: 24px;
928
+ height: 24px;
929
+ padding-left: 8px;
930
+ }
931
+ }
932
+ .content-label {
933
+ display: inline-block;
934
+ margin-bottom: var(--o-gap-3);
935
+ color: var(--o-color-info3);
936
+ @include tip1;
937
+
938
+ @include respond-to('laptop') {
939
+ @include text1;
940
+ }
941
+ }
942
+ .split-line {
943
+ background: var(--o-color-control4);
944
+ width: 1px;
945
+ min-height: 320px;
946
+ flex-shrink: 0;
947
+
948
+ @include respond-to('laptop') {
949
+ min-height: 300px;
950
+ }
951
+ @include respond-to('<=pad') {
952
+ display: none;
953
+ }
954
+ }
955
+ .content-right {
956
+ width: 358px;
957
+ padding-top: var(--o-gap-6);
958
+ padding-bottom: var(--o-gap-6);
959
+ padding-left: var(--o-gap-4);
960
+
961
+ @include respond-to('laptop') {
962
+ width: 261px;
963
+ padding: var(--o-gap-5) 0 var(--o-gap-5) var(--o-gap-4);
964
+ }
965
+
966
+ @include respond-to('pad_h') {
967
+ width: 261px;
968
+ }
969
+
970
+ @include respond-to('<=pad') {
971
+ display: none;
972
+ }
973
+
974
+ .shortcut {
975
+ width: 342px;
976
+ min-height: 42px;
977
+ background: var(--o-color-fill3);
978
+ border-radius: var(--o-radius_control-xs);
979
+ padding: 10px 24px;
980
+ display: flex;
981
+ align-items: center;
982
+ gap: var(--o-gap-3);
983
+ cursor: pointer;
984
+ @include tip1;
985
+
986
+ @include respond-to('laptop') {
987
+ width: 245px;
988
+ @include text1;
989
+ }
990
+
991
+ @include respond-to('pad_h') {
992
+ width: 245px;
993
+ @include text1;
994
+ }
995
+
996
+ & + .shortcut {
997
+ margin-top: var(--o-gap-2);
998
+ }
999
+
1000
+ .shortcut-link {
1001
+ display: flex;
1002
+ align-items: center;
1003
+ color: var(--o-color-link1);
1004
+ word-break: normal;
1005
+ white-space: normal;
1006
+ @include hover {
1007
+ color: var(--o-color-primary2);
1008
+ }
1009
+
1010
+ span {
1011
+ @include text-truncate(1);
1012
+ }
1013
+
1014
+ .icon {
1015
+ height: 16px;
1016
+ width: 16px;
1017
+ margin-left: var(--o-gap-2);
1018
+ }
1019
+ }
1020
+ }
1021
+
1022
+ .review {
1023
+ width: 342px;
1024
+ display: flex;
1025
+ align-items: unset;
1026
+ position: relative;
1027
+
1028
+ @include respond-to('laptop') {
1029
+ width: 245px;
1030
+ }
1031
+
1032
+ @include respond-to('pad_h') {
1033
+ width: 245px;
1034
+ &:not(:last-child) {
1035
+ &:after {
1036
+ content: '';
1037
+ position: absolute;
1038
+ left: 0;
1039
+ right: 0;
1040
+ bottom: -8px;
1041
+ height: 1px;
1042
+ background: var(--o-color-control4);
1043
+ }
1044
+ }
1045
+ }
1046
+
1047
+ & + .review {
1048
+ margin-top: var(--o-gap-3);
1049
+ }
1050
+
1051
+ .review-picture {
1052
+ width: 120px;
1053
+ height: auto;
1054
+ display: block;
1055
+ object-fit: contain;
1056
+
1057
+ @include respond-to('<=laptop') {
1058
+ display: none;
1059
+ }
1060
+ }
1061
+ .review-content {
1062
+ margin-left: var(--o-gap-2);
1063
+ flex: 1;
1064
+ max-width: 212px;
1065
+ height: 68px;
1066
+ display: flex;
1067
+ flex-direction: column;
1068
+ justify-content: space-between;
1069
+ white-space: normal;
1070
+
1071
+ @include respond-to('<=laptop') {
1072
+ margin-left: unset;
1073
+ height: auto;
1074
+ }
1075
+
1076
+ .review-label {
1077
+ word-break: normal;
1078
+ max-height: 48px;
1079
+ color: var(--o-color-info1);
1080
+ font-weight: 500;
1081
+ cursor: pointer;
1082
+ @include text1;
1083
+ @include text-truncate(2);
1084
+
1085
+ @include hover {
1086
+ color: var(--o-color-primary1);
1087
+ }
1088
+ @include respond-to('pad_v-laptop') {
1089
+ max-height: 44px;
1090
+ }
1091
+ }
1092
+
1093
+ .review-property {
1094
+ color: var(--o-color-info3);
1095
+ overflow: hidden;
1096
+ white-space: nowrap;
1097
+ text-overflow: ellipsis;
1098
+ @include tip2;
1099
+ }
1100
+ }
1101
+ }
1102
+ }
1103
+ .nav-scroller {
1104
+ height: 100%;
1105
+ width: 100%;
1106
+ overflow-x: auto;
1107
+ overflow-y: auto;
1108
+ white-space: nowrap;
1109
+
1110
+ @include respond-to('<=pad_v') {
1111
+ --scroller-padding: 0 var(--layout-content-padding);
1112
+ }
1113
+
1114
+ :deep(.o-scrollbar) {
1115
+ --scrollbar-height: 100%;
1116
+ }
1117
+ }
1118
+ </style>