@coffic/cosy-ui 0.6.12 → 0.6.14

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 (149) hide show
  1. package/dist/app.css +1 -1
  2. package/dist/assets/iconData.ts +93 -0
  3. package/dist/components/base/Alert.astro +1 -1
  4. package/dist/components/base/Button.astro +102 -91
  5. package/dist/components/base/Image.astro +1 -1
  6. package/dist/components/base/Link.astro +1 -1
  7. package/dist/components/containers/Container.astro +1 -1
  8. package/dist/components/containers/Main.astro +1 -1
  9. package/dist/components/containers/Section.astro +96 -94
  10. package/dist/components/data-display/Blog.astro +1 -1
  11. package/dist/components/data-display/ProductCard.astro +2 -4
  12. package/dist/components/data-display/Products.astro +2 -2
  13. package/dist/components/data-display/TeamMember.astro +2 -4
  14. package/dist/components/data-display/TeamMembers.astro +1 -1
  15. package/dist/components/display/Banner.astro +1 -1
  16. package/dist/components/display/Card.astro +1 -1
  17. package/dist/components/display/CodeBlock.astro +1 -1
  18. package/dist/components/display/CodeExample.astro +1 -1
  19. package/dist/components/display/Hero.astro +1 -1
  20. package/dist/components/display/Modal.astro +1 -1
  21. package/dist/components/layouts/AppLayout.astro +2 -6
  22. package/dist/components/layouts/BaseLayout.astro +1 -1
  23. package/dist/components/layouts/DashboardLayout.astro +1 -1
  24. package/dist/components/layouts/Footer.astro +2 -5
  25. package/dist/components/layouts/Grid.astro +1 -1
  26. package/dist/components/layouts/Header.astro +1 -1
  27. package/dist/components/layouts/NavItems.astro +1 -1
  28. package/dist/components/layouts/Sidebar.astro +2 -2
  29. package/dist/components/layouts/SidebarNav.astro +1 -1
  30. package/dist/components/layouts/Stack.astro +72 -70
  31. package/dist/components/navigation/LanguageSwitcher.astro +2 -2
  32. package/dist/components/navigation/TableOfContents.astro +1 -1
  33. package/dist/components/navigation/ThemeSwitcher.astro +2 -2
  34. package/dist/components/typography/Article.astro +2 -2
  35. package/dist/components/typography/Heading.astro +2 -2
  36. package/dist/components/typography/Text.astro +1 -1
  37. package/dist/icons/AlertTriangle.astro +24 -0
  38. package/dist/icons/AstroIcon.astro +46 -0
  39. package/dist/icons/CalendarIcon.astro +24 -0
  40. package/dist/icons/CheckCircle.astro +23 -0
  41. package/dist/icons/CheckIcon.astro +27 -0
  42. package/dist/{components/icons → icons}/ChevronDownIcon.astro +3 -13
  43. package/dist/icons/ClipboardIcon.astro +27 -0
  44. package/dist/icons/CloseIcon.astro +27 -0
  45. package/dist/icons/ErrorIcon.astro +24 -0
  46. package/dist/icons/GithubIcon.astro +24 -0
  47. package/dist/icons/InfoCircle.astro +24 -0
  48. package/dist/icons/InfoIcon.astro +26 -0
  49. package/dist/icons/LinkIcon.astro +27 -0
  50. package/dist/icons/LinkedinIcon.astro +23 -0
  51. package/dist/icons/MenuIcon.astro +27 -0
  52. package/dist/icons/SearchIcon.astro +23 -0
  53. package/dist/icons/SettingsIcon.astro +18 -0
  54. package/dist/{components/icons → icons}/SocialIcon.astro +14 -14
  55. package/dist/icons/SuccessIcon.astro +24 -0
  56. package/dist/icons/SunCloudyIcon.astro +23 -0
  57. package/dist/icons/TwitterIcon.astro +24 -0
  58. package/dist/icons/UserIcon.astro +24 -0
  59. package/dist/icons/WarningIcon.astro +27 -0
  60. package/dist/icons/XCircle.astro +24 -0
  61. package/dist/index.ts +1 -1
  62. package/dist/index_icons.ts +23 -0
  63. package/dist/index_vue.ts +41 -0
  64. package/dist/vue/{AlertDialog.vue → AlertDialog/AlertDialog.vue} +1 -1
  65. package/dist/vue/AlertDialog/Basic.vue +38 -0
  66. package/dist/vue/AlertDialog/Multilang.vue +48 -0
  67. package/dist/vue/AlertDialog/index.ts +58 -0
  68. package/dist/vue/BannerBox/BannerBox.vue +435 -0
  69. package/dist/vue/BannerBox/Basic.vue +32 -0
  70. package/dist/vue/BannerBox/CustomBg.vue +32 -0
  71. package/dist/vue/BannerBox/CustomComponent.vue +60 -0
  72. package/dist/vue/BannerBox/DisplayMode.vue +49 -0
  73. package/dist/vue/{FeatureCard.vue → BannerBox/FeatureCard.vue} +23 -42
  74. package/dist/vue/BannerBox/ImageExport.vue +37 -0
  75. package/dist/vue/BannerBox/SizePreset.vue +35 -0
  76. package/dist/vue/BannerBox/SmartBanner.vue +44 -0
  77. package/dist/vue/BannerBox/index.ts +76 -0
  78. package/dist/vue/FeatureButton.vue +25 -26
  79. package/dist/vue/Icons/AlertTriangleIcon.vue +30 -0
  80. package/dist/vue/Icons/CalendarIcon.vue +30 -0
  81. package/dist/vue/Icons/CheckCircleIcon.vue +30 -0
  82. package/dist/vue/Icons/CheckIcon.vue +30 -0
  83. package/dist/vue/Icons/ChevronDownIcon.vue +30 -0
  84. package/dist/vue/Icons/ClipboardIcon.vue +30 -0
  85. package/dist/vue/Icons/CloseIcon.vue +30 -0
  86. package/dist/vue/Icons/InfoCircleIcon.vue +30 -0
  87. package/dist/vue/Icons/InfoIcon.vue +30 -0
  88. package/dist/vue/Icons/LinkIcon.vue +30 -0
  89. package/dist/vue/Icons/MenuIcon.vue +30 -0
  90. package/dist/vue/Icons/SearchIcon.vue +30 -0
  91. package/dist/vue/Icons/SettingsIcon.vue +30 -0
  92. package/dist/vue/Icons/UserIcon.vue +30 -0
  93. package/dist/vue/Icons/VueIcon.vue +76 -0
  94. package/dist/vue/Icons/XCircleIcon.vue +30 -0
  95. package/dist/vue/MacWindow/Basic.vue +11 -0
  96. package/dist/vue/MacWindow/CustomHeight.vue +13 -0
  97. package/dist/vue/{MacWindow.vue → MacWindow/MacWindow.vue} +70 -38
  98. package/dist/vue/MacWindow/WithEvents.vue +34 -0
  99. package/dist/vue/MacWindow/WithSidebar.vue +21 -0
  100. package/dist/vue/MacWindow/WithTabs.vue +21 -0
  101. package/dist/vue/MacWindow/WithToolbar.vue +43 -0
  102. package/dist/vue/MacWindow/index.ts +50 -0
  103. package/dist/vue/SmartHero.vue +28 -34
  104. package/dist/vue/VueCounter.vue +29 -0
  105. package/dist/vue/iPhone/Basic.vue +33 -0
  106. package/dist/vue/iPhone/CustomBackground.vue +33 -0
  107. package/dist/vue/iPhone/NoFrame.vue +33 -0
  108. package/dist/vue/iPhone/WeatherApp.vue +97 -0
  109. package/dist/vue/iPhone/assets/iPhone 14 Pro - Deep Purple - Landscape.png +0 -0
  110. package/dist/vue/iPhone/assets/iPhone 14 Pro - Deep Purple - Portrait.png +0 -0
  111. package/dist/vue/iPhone/assets/iPhone 14 Pro - Gold - Landscape.png +0 -0
  112. package/dist/vue/iPhone/assets/iPhone 14 Pro - Gold - Portrait.png +0 -0
  113. package/dist/vue/iPhone/assets/iPhone 14 Pro - Silver - Landscape.png +0 -0
  114. package/dist/vue/iPhone/assets/iPhone 14 Pro - Silver - Portrait.png +0 -0
  115. package/dist/vue/iPhone/assets/iPhone 14 Pro - Space Black - Landscape.png +0 -0
  116. package/dist/vue/iPhone/assets/iPhone 14 Pro - Space Black - Portrait.png +0 -0
  117. package/dist/vue/{iPhoneWindow.vue → iPhone/iPhoneWindow.vue} +11 -7
  118. package/dist/vue/iPhone/index.ts +41 -0
  119. package/dist/vue/shims-vue.d.ts +5 -0
  120. package/package.json +13 -12
  121. package/dist/components/icons/AlertTriangle.astro +0 -35
  122. package/dist/components/icons/CalendarIcon.astro +0 -38
  123. package/dist/components/icons/CheckCircle.astro +0 -36
  124. package/dist/components/icons/CheckIcon.astro +0 -38
  125. package/dist/components/icons/ClipboardIcon.astro +0 -39
  126. package/dist/components/icons/CloseIcon.astro +0 -38
  127. package/dist/components/icons/ErrorIcon.astro +0 -35
  128. package/dist/components/icons/GithubIcon.astro +0 -31
  129. package/dist/components/icons/InfoCircle.astro +0 -37
  130. package/dist/components/icons/InfoIcon.astro +0 -38
  131. package/dist/components/icons/LinkIcon.astro +0 -39
  132. package/dist/components/icons/LinkedinIcon.astro +0 -31
  133. package/dist/components/icons/MenuIcon.astro +0 -38
  134. package/dist/components/icons/SearchIcon.astro +0 -36
  135. package/dist/components/icons/SettingsIcon.astro +0 -36
  136. package/dist/components/icons/SuccessIcon.astro +0 -35
  137. package/dist/components/icons/SunCloudyIcon.astro +0 -41
  138. package/dist/components/icons/TwitterIcon.astro +0 -31
  139. package/dist/components/icons/UserIcon.astro +0 -35
  140. package/dist/components/icons/WarningIcon.astro +0 -38
  141. package/dist/components/icons/XCircle.astro +0 -37
  142. package/dist/entities/Banner.ts +0 -105
  143. package/dist/icons.ts +0 -22
  144. package/dist/vue/BannerBox.vue +0 -267
  145. package/dist/vue/FeatureGroup.vue +0 -22
  146. package/dist/vue/SmartBanner.vue +0 -45
  147. package/dist/vue/WildBanner.vue +0 -15
  148. package/dist/vue.ts +0 -14
  149. /package/dist/{collection.ts → index_collection.ts} +0 -0
@@ -1,267 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref, onMounted, watch, onUnmounted } from 'vue';
3
- import { RiDownloadLine } from '@remixicon/vue';
4
- import { toPng } from 'html-to-image';
5
-
6
- const props = defineProps({
7
- showDownloadButton: {
8
- type: Boolean,
9
- default: true
10
- },
11
- backgroundClassIndex: {
12
- type: Number,
13
- default: 0
14
- }
15
- })
16
-
17
- const componentRef = ref<HTMLElement | null>(null);
18
-
19
- const isDropdownOpen = ref(false);
20
-
21
- const sizePresets = [
22
- { name: 'Default', width: 'w-full', height: 'h-full' },
23
- { name: 'Square', width: 'w-[600px]', height: 'h-[600px]' },
24
- { name: 'Landscape', width: 'w-[800px]', height: 'h-[450px]' },
25
- { name: 'Portrait', width: 'w-[450px]', height: 'h-[800px]' },
26
- { name: 'Wide', width: 'w-[1200px]', height: 'h-[675px]' },
27
- { name: 'Banner', width: 'w-[1200px]', height: 'h-[300px]' },
28
- { name: '1280 × 800', width: 'w-[1280px]', height: 'h-[800px]' },
29
- { name: '1440 × 900', width: 'w-[1440px]', height: 'h-[900px]' },
30
- { name: '2560 × 1600', width: 'w-[2560px]', height: 'h-[1600px]' },
31
- { name: '2880 × 1800', width: 'w-[2880px]', height: 'h-[1800px]' },
32
- ];
33
-
34
- const selectedSize = ref(sizePresets[0]);
35
-
36
- const toggleDropdown = () => {
37
- isDropdownOpen.value = !isDropdownOpen.value;
38
- };
39
-
40
- // Add new ref for tracking if size was loaded from storage
41
- const isLoadedFromStorage = ref(false);
42
-
43
- // 监听尺寸变化并保存到 localStorage
44
- watch(selectedSize, (newSize) => {
45
- localStorage.setItem('bannerBoxSize', JSON.stringify(newSize));
46
- // 当尺寸改变时,发出事件通知其他组件
47
- window.dispatchEvent(new CustomEvent('bannerBoxSizeChange', {
48
- detail: newSize
49
- }));
50
- // 设置为已加载状态,显示尺寸标签
51
- isLoadedFromStorage.value = true;
52
- });
53
-
54
- // 创建自定义事件处理函数
55
- const handleSizeClear = () => {
56
- selectedSize.value = sizePresets[0];
57
- isLoadedFromStorage.value = false;
58
- };
59
-
60
- // 处理尺寸变化的事件
61
- const handleSizeChange = (event: Event) => {
62
- const customEvent = event as CustomEvent;
63
- selectedSize.value = customEvent.detail;
64
- isLoadedFromStorage.value = true;
65
- };
66
-
67
- onMounted(() => {
68
- const savedSize = localStorage.getItem('bannerBoxSize');
69
- if (savedSize) {
70
- const parsed = JSON.parse(savedSize);
71
- const found = sizePresets.find(preset => preset.name === parsed.name);
72
- if (found) {
73
- selectedSize.value = found;
74
- isLoadedFromStorage.value = true;
75
- }
76
- }
77
-
78
- // 添加事件监听
79
- window.addEventListener('bannerBoxClear', handleSizeClear);
80
- window.addEventListener('bannerBoxSizeChange', handleSizeChange);
81
-
82
- document.addEventListener('click', (event) => {
83
- const target = event.target as HTMLElement;
84
- if (!target.closest('.relative')) {
85
- isDropdownOpen.value = false;
86
- }
87
- });
88
- });
89
-
90
- // Update downloadAsImage function to accept scale parameter
91
- const downloadAsImage = async () => {
92
- try {
93
- const element = componentRef.value;
94
- if (!element) {
95
- console.error('Component reference is null');
96
- return;
97
- }
98
-
99
- const dataUrl = await toPng(element, {
100
- backgroundColor: undefined,
101
- style: {
102
- transform: 'scale(1)',
103
- transformOrigin: 'top left'
104
- }
105
- });
106
-
107
- const link = document.createElement('a');
108
- const fileName = `feature-${element.offsetWidth}x${element.offsetHeight}.png`;
109
- link.download = fileName;
110
- link.href = dataUrl;
111
- link.click();
112
- isDropdownOpen.value = false;
113
- } catch (error) {
114
- console.error('Failed to download image:', error);
115
- }
116
- };
117
-
118
- const bgClasses = [
119
- 'bg-gradient-to-b from-blue-100/50 to-blue-200/50 dark:from-blue-500/10 dark:to-blue-200/10',
120
- 'bg-gradient-to-b from-blue-200/50 to-purple-200/50 dark:from-blue-500/10 dark:to-purple-200/10',
121
- 'bg-gradient-to-b from-yellow-200/50 to-green-200/50 dark:from-yellow-500/10 dark:to-green-200/10',
122
- 'bg-gradient-to-b from-teal-200/50 to-blue-200/50 dark:from-teal-500/10 dark:to-blue-200/10',
123
- 'bg-gradient-to-b from-pink-200/50 to-indigo-200/20 dark:from-pink-500/10 dark:to-indigo-200/10',
124
- 'bg-gradient-to-b from-red-200/50 to-orange-200/50 dark:from-red-500/10 dark:to-orange-200/10',
125
- 'bg-gradient-to-b from-orange-200/50 to-yellow-200/50 dark:from-orange-500/10 dark:to-yellow-200/10',
126
- 'bg-gradient-to-b from-green-200/50 to-teal-200/50 dark:from-green-500/10 dark:to-teal-200/10',
127
-
128
- // 不透明的背景
129
- 'bg-gradient-to-b from-blue-100 to-blue-200 dark:from-blue-500 dark:to-blue-200',
130
- 'bg-gradient-to-b from-blue-200 to-purple-200 dark:from-blue-500 dark:to-purple-200',
131
- 'bg-gradient-to-b from-yellow-200 to-green-200 dark:from-yellow-500 dark:to-green-200',
132
- 'bg-gradient-to-b from-teal-200 to-blue-200 dark:from-teal-500 dark:to-blue-200',
133
- 'bg-gradient-to-b from-pink-200 to-red-200 dark:from-pink-500 dark:to-red-200',
134
- 'bg-gradient-to-b from-red-200 to-orange-200 dark:from-red-500 dark:to-orange-200',
135
- 'bg-gradient-to-b from-orange-200 to-yellow-200 dark:from-orange-500 dark:to-yellow-200',
136
- 'bg-gradient-to-b from-green-200 to-teal-200 dark:from-green-500 dark:to-teal-200',
137
-
138
- // 不透明的深色背景
139
- 'bg-gradient-to-b from-blue-900 to-blue-200 dark:from-blue-900 dark:to-blue-200',
140
- 'bg-gradient-to-b from-blue-900 to-purple-200 dark:from-blue-900 dark:to-purple-200',
141
- 'bg-gradient-to-b from-yellow-900 to-green-200 dark:from-yellow-900 dark:to-green-200',
142
- 'bg-gradient-to-b from-teal-900 to-blue-200 dark:from-teal-900 dark:to-blue-200',
143
- 'bg-gradient-to-b from-pink-900 to-red-200 dark:from-pink-900 dark:to-red-200',
144
- 'bg-gradient-to-b from-red-900 to-orange-200 dark:from-red-900 dark:to-orange-200',
145
- 'bg-gradient-to-b from-orange-900 to-yellow-200 dark:from-orange-900 dark:to-yellow-200',
146
- 'bg-gradient-to-b from-green-900 to-teal-900 dark:from-green-900 dark:to-teal-900',
147
- // 不透明的渐变背景
148
- 'bg-gradient-to-br from-emerald-400 to-cyan-400 dark:from-emerald-600 dark:to-cyan-600',
149
- 'bg-gradient-to-br from-violet-400 to-fuchsia-400 dark:from-violet-600 dark:to-fuchsia-600',
150
- 'bg-gradient-to-br from-amber-400 to-orange-400 dark:from-amber-600 dark:to-orange-600',
151
- 'bg-gradient-to-br from-rose-400 to-pink-400 dark:from-rose-600 dark:to-pink-600',
152
- 'bg-gradient-to-br from-sky-400 to-indigo-400 dark:from-sky-600 dark:to-indigo-600',
153
- 'bg-gradient-to-br from-lime-400 to-emerald-400 dark:from-lime-600 dark:to-emerald-600',
154
- 'bg-gradient-to-br from-purple-400 to-indigo-400 dark:from-purple-600 dark:to-indigo-600',
155
- 'bg-gradient-to-br from-blue-400 to-violet-400 dark:from-blue-600 dark:to-violet-600',
156
-
157
- // 纯色背景
158
- 'bg-emerald-400 dark:bg-emerald-600',
159
- 'bg-violet-400 dark:bg-violet-600',
160
- 'bg-amber-400 dark:bg-amber-600',
161
- 'bg-rose-400 dark:bg-rose-600',
162
- 'bg-sky-400 dark:bg-sky-600',
163
- 'bg-lime-400 dark:bg-lime-600',
164
- 'bg-purple-400 dark:bg-purple-600',
165
- 'bg-blue-400 dark:bg-blue-600'
166
-
167
- ]
168
-
169
- const selectedBgIndex = ref(props.backgroundClassIndex);
170
-
171
- const getBackgroundClass = (): string => {
172
- return bgClasses[selectedBgIndex.value % bgClasses.length];
173
- }
174
-
175
- const clearStoredSize = () => {
176
- localStorage.removeItem('bannerBoxSize');
177
- // 触发自定义事件
178
- window.dispatchEvent(new CustomEvent('bannerBoxClear'));
179
- isDropdownOpen.value = false;
180
- };
181
-
182
- // 清理事件监听
183
- onUnmounted(() => {
184
- window.removeEventListener('bannerBoxClear', handleSizeClear);
185
- window.removeEventListener('bannerBoxSizeChange', handleSizeChange);
186
- });
187
- </script>
188
-
189
- <template>
190
- <div class="relative w-full rounded-2xl max-w-7xl mx-auto">
191
- <!-- Add size indicator -->
192
- <div v-if="isLoadedFromStorage"
193
- class="absolute top-4 right-4 bg-yellow-500/30 backdrop-blur-sm px-3 py-1 rounded-lg text-sm text-white">
194
- {{ selectedSize.name }}
195
- </div>
196
-
197
- <!-- Download button with dropdown menu -->
198
- <div v-if="showDownloadButton" class="absolute top-4 left-4 opacity-0 hover:opacity-100 transition-opacity">
199
- <div class="relative">
200
- <button class="bg-yellow-500/30 backdrop-blur-sm p-2 rounded-lg hover:bg-yellow-500/40"
201
- @click="toggleDropdown">
202
- <RiDownloadLine class="w-6 h-6 text-white" />
203
- </button>
204
- <!-- Size selection dropdown -->
205
- <div v-if="isDropdownOpen"
206
- class="absolute left-0 mt-2 w-96 bg-white dark:bg-gray-800 rounded-lg shadow-lg py-2 z-50">
207
- <!-- Component size presets -->
208
- <div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700">
209
- <div class="grid grid-cols-3 gap-2">
210
- <button v-for="preset in sizePresets" :key="preset.name" :class="[
211
- 'p-2 text-left rounded text-sm',
212
- selectedSize.name === preset.name
213
- ? 'bg-yellow-500/30 text-yellow-900 dark:text-yellow-100'
214
- : 'hover:bg-gray-100 dark:hover:bg-gray-700'
215
- ]" @click="selectedSize = preset">
216
- <div class="flex flex-col">
217
- <span class="font-medium">{{ preset.name }}</span>
218
- <span class="text-xs text-gray-500 dark:text-gray-400">
219
- {{ preset.width.replace('w-[', '').replace(']', '') }}
220
- </span>
221
- </div>
222
- </button>
223
- <!-- Clear size button -->
224
- <button class="p-2 text-left rounded text-sm hover:bg-gray-100 dark:hover:bg-gray-700"
225
- @click="clearStoredSize">
226
- <div class="flex flex-col">
227
- <span class="font-medium text-red-600 dark:text-red-400">清除记住的尺寸</span>
228
- <span class="text-xs text-gray-500 dark:text-gray-400">重置为默认尺寸</span>
229
- </div>
230
- </button>
231
- </div>
232
- </div>
233
- <!-- Background settings -->
234
- <div class="px-4 py-2 border-b border-gray-200 dark:border-gray-700">
235
- <div class="mt-2">
236
- <div class="grid grid-cols-8 gap-2">
237
- <button v-for="(_, index) in bgClasses" :key="index" :class="[
238
- bgClasses[index],
239
- 'w-8 h-8 rounded-lg border-2',
240
- selectedBgIndex === index ? 'border-yellow-500' : 'border-transparent'
241
- ]" @click="selectedBgIndex = index" />
242
- </div>
243
- </div>
244
- </div>
245
- <!-- Size options -->
246
- <div class="p-4">
247
- <button class="w-full p-2 text-center rounded hover:bg-gray-100 dark:hover:bg-gray-700"
248
- @click="downloadAsImage()">
249
- <div class="flex items-center justify-center gap-2">
250
- <RiDownloadLine class="w-4 h-4" />
251
- <span class="font-medium">下载图片</span>
252
- </div>
253
- </button>
254
- </div>
255
- </div>
256
- </div>
257
- </div>
258
-
259
- <div ref="componentRef" class="flex p-8 rounded-2xl shadow" :class="[
260
- getBackgroundClass(),
261
- selectedSize.width,
262
- selectedSize.height
263
- ]">
264
- <slot />
265
- </div>
266
- </div>
267
- </template>
@@ -1,22 +0,0 @@
1
- <template>
2
- <div
3
- data-type="feature-group"
4
- class="flex mt-8 flex-col items-center container mx-auto justify-center my-2 gap-24 w-full"
5
- >
6
- <div
7
- v-for="(component, index) in $slots.default?.() || []"
8
- :key="index"
9
- class="w-full relative group"
10
- >
11
- <div class="relative">
12
- <BaseFeature :background-class-index="index">
13
- <component :is="component" />
14
- </BaseFeature>
15
- </div>
16
- </div>
17
- </div>
18
- </template>
19
-
20
- <script setup>
21
- import BaseFeature from './BannerBox.vue'
22
- </script>
@@ -1,45 +0,0 @@
1
- <script setup lang="ts">
2
- import Banner from '../entities/Banner';
3
- import BannerBox from './BannerBox.vue';
4
- import FeatureCard from './FeatureCard.vue';
5
-
6
- defineProps({
7
- lang: {
8
- type: String,
9
- default: 'en',
10
- validator: (value: string) => ['en', 'zh-cn'].includes(value)
11
- },
12
- banner: {
13
- type: Banner,
14
- required: true
15
- },
16
- backgroundClassIndex: {
17
- type: Number,
18
- default: 0
19
- }
20
- })
21
- </script>
22
-
23
- <template>
24
- <BannerBox :background-class-index="backgroundClassIndex">
25
- <div class="py-16 px-8 text-center w-full rounded-2xl" data-type="smart-banner">
26
- <h2 class="text-4xl mb-4">
27
- {{ banner.getTitle(lang) }}
28
- </h2>
29
-
30
- <p v-if="banner.getDescription(lang).length > 0" class="text-lg text-center max-w-2xl mx-auto">
31
- {{ banner.getDescription(lang) }}
32
- </p>
33
-
34
- <div class="flex flex-row justify-center gap-8 mx-auto w-full mt-24">
35
- <FeatureCard v-for="feature in banner.getFeatures()" :key="feature.getTitle(lang)"
36
- :emoji="feature.emoji" :title="feature.getTitle(lang)" :link="feature.link" />
37
- </div>
38
-
39
- <div class="mt-12">
40
- <component :is="banner.getComponent()" v-if="banner.getComponent()"
41
- v-bind="banner.getComponentProps()" />
42
- </div>
43
- </div>
44
- </BannerBox>
45
- </template>
@@ -1,15 +0,0 @@
1
- <template>
2
- <div class="w-full px-8 z-50 mx-auto">
3
- <div
4
- class="mt-0 hero p-4 rounded-2xl bg-base-300/50 dark:bg-base-200/50 backdrop-blur-xl hover:shadow-2xl transform duration-100"
5
- >
6
- <div class="text-center hero-content">
7
- <div class="max-w-md flex flex-row justify-center items-center mx-auto">
8
- <p class="text-2xl md:text-3xl font-bold text-base-content">
9
- <slot />
10
- </p>
11
- </div>
12
- </div>
13
- </div>
14
- </div>
15
- </template>
package/dist/vue.ts DELETED
@@ -1,14 +0,0 @@
1
- export * from './vue/TagList.vue';
2
- export { default as AlertDialog } from './vue/AlertDialog.vue';
3
- export * from './vue/BannerBox.vue';
4
- export * from './vue/SmartHero.vue';
5
- export * from './vue/ConfirmDialog.vue';
6
- export * from './vue/FeatureButton.vue';
7
- export * from './vue/FeatureCard.vue';
8
- export * from './vue/FeatureGroup.vue';
9
- export { default as iPhoneWindow } from './vue/iPhoneWindow.vue';
10
- export * from './vue/ListItem.vue';
11
- export { default as MacWindow } from './vue/MacWindow.vue';
12
- export * from './vue/SmartBanner.vue';
13
- export * from './vue/SmartLink.vue';
14
- export * from './vue/WildBanner.vue';
File without changes