@funhub/platform 0.1.53 → 0.1.55

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 (83) hide show
  1. package/README.md +13 -0
  2. package/bin/index.mjs +323 -0
  3. package/dist/assets/images/user/default_avatar.mjs +2 -0
  4. package/dist/components/biz/business/banner/variants/basic-banner/material.d.mts +1 -1
  5. package/dist/components/biz/business/banner-carousel/material.d.mts +1 -1
  6. package/dist/components/biz/business/channel-list/material.d.mts +1 -1
  7. package/dist/components/biz/business/detail/materials/registry.d.mts +6 -6
  8. package/dist/components/biz/business/detail/materials/video-detail-actions/material.d.mts +1 -1
  9. package/dist/components/biz/business/detail/materials/video-detail-info/material.d.mts +1 -1
  10. package/dist/components/biz/business/detail/materials/video-detail-info-title/material.d.mts +1 -1
  11. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/material.d.mts +1 -1
  12. package/dist/components/biz/business/detail/materials/video-detail-player/material.d.mts +1 -1
  13. package/dist/components/biz/business/detail/materials/video-detail-recommend/material.d.mts +1 -1
  14. package/dist/components/biz/business/floating-ball/material.d.mts +1 -1
  15. package/dist/components/biz/business/header-search/header-avatar-icon/material.d.mts +1 -1
  16. package/dist/components/biz/business/header-search/header-avatar-logo-search/material.d.mts +1 -1
  17. package/dist/components/biz/business/header-search/header-avatar-logo-search-icon/material.d.mts +1 -1
  18. package/dist/components/biz/business/header-search/header-logo-search/material.d.mts +1 -1
  19. package/dist/components/biz/business/header-search/header-search/material.d.mts +1 -1
  20. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/material.d.mts +1 -1
  21. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/material.d.mts +1 -1
  22. package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
  23. package/dist/components/biz/business/large-feature-grid/material.d.mts +2 -2
  24. package/dist/components/biz/business/marquee/material.d.mts +1 -1
  25. package/dist/components/biz/business/profile/profile-header/material.d.mts +2 -2
  26. package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
  27. package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
  28. package/dist/components/biz/business/profile/profile-main/material.d.mts +1 -1
  29. package/dist/components/biz/business/search-history/material.d.mts +1 -1
  30. package/dist/components/biz/business/search-input/material.d.mts +1 -1
  31. package/dist/components/biz/business/shortcut-grid/material.d.mts +1 -1
  32. package/dist/components/biz/business/tab-bar/material.d.mts +2 -2
  33. package/dist/components/biz/business/tab-bar/schema.d.mts +1 -1
  34. package/dist/components/biz/business/text-recommend/material.d.mts +1 -1
  35. package/dist/components/biz/business/video-horizontal-list/material.d.mts +1 -1
  36. package/dist/components/biz/example/button/material.d.mts +1 -1
  37. package/dist/components/biz/example/button/material.mjs +1 -1
  38. package/dist/components/common/list/post-list/post-list.mjs +1 -1
  39. package/dist/components/common/list/user-activity-list/user-activity-list.d.mts +1 -1
  40. package/dist/components/common/list/user-activity-list/user-activity-list.mjs +1 -1
  41. package/dist/components/common/list/video-list/video-list.mjs +1 -1
  42. package/dist/components/pages/(follow)/_components/follow-button/index.mjs +1 -1
  43. package/dist/components/pages/login/password.mjs +1 -1
  44. package/dist/components/pages/login/register.mjs +1 -1
  45. package/dist/components/pages/login/reset-password.mjs +1 -1
  46. package/dist/components/pages/login/verify.mjs +1 -1
  47. package/dist/components/pages/search-result/page-client.mjs +1 -1
  48. package/dist/components/pages/search-result/search-all.mjs +1 -1
  49. package/dist/components/pages/search-result/search-tab.mjs +1 -1
  50. package/dist/components/pages/search-result/search-user.mjs +1 -1
  51. package/dist/components/pages/search-result/search-video.mjs +1 -1
  52. package/dist/components/pages/settings/_components/reset-password-drawer.mjs +1 -1
  53. package/dist/components/pages/settings/_components/settings.mjs +1 -1
  54. package/dist/components/ui/badge.d.mts +1 -1
  55. package/dist/components/ui/button.d.mts +2 -2
  56. package/dist/components/ui/image.d.mts +4 -4
  57. package/dist/i18n/locales/en.mjs +1 -1
  58. package/dist/i18n/locales/zh-CN.mjs +1 -1
  59. package/dist/utils/password-validator.d.mts +28 -0
  60. package/dist/utils/password-validator.mjs +2 -0
  61. package/dist/utils/schema/index.d.mts +1 -1
  62. package/dist/utils/schema/material.d.mts +7 -9
  63. package/dist/utils/schema/utils.d.mts +13 -3
  64. package/dist/utils/schema/utils.mjs +1 -1
  65. package/dist/utils.d.mts +3 -2
  66. package/dist/utils.mjs +1 -1
  67. package/package.json +7 -2
  68. package/templates/base/_meta.json +4 -0
  69. package/templates/base/template/README.md.template +32 -0
  70. package/templates/base/template/__dot__gitignore +6 -0
  71. package/templates/base/template/app/[locale]/layout.tsx.template +36 -0
  72. package/templates/base/template/app/[locale]/page.tsx.template +24 -0
  73. package/templates/base/template/app/globals.css +26 -0
  74. package/templates/base/template/app/layout.tsx.template +38 -0
  75. package/templates/base/template/eslint.config.mjs.template +68 -0
  76. package/templates/base/template/i18n/request.ts.template +3 -0
  77. package/templates/base/template/next-env.d.ts.template +4 -0
  78. package/templates/base/template/next.config.ts.template +21 -0
  79. package/templates/base/template/package.json.template +37 -0
  80. package/templates/base/template/postcss.config.js.template +18 -0
  81. package/templates/base/template/proxy.ts.template +18 -0
  82. package/templates/base/template/tailwind.config.cjs.template +13 -0
  83. package/templates/base/template/tsconfig.json.template +43 -0
package/README.md CHANGED
@@ -16,6 +16,19 @@
16
16
  pnpm add @funhub/platform
17
17
  ```
18
18
 
19
+ ## 初始化应用
20
+
21
+ ```bash
22
+ npx @funhub/platform init my-funhub-app
23
+ ```
24
+
25
+ 可选参数:
26
+
27
+ - `--template base`:使用内置最小 starter 模板
28
+ - `--pm pnpm`:指定包管理器
29
+ - `--no-install`:只生成文件,不安装依赖
30
+ - `--no-git`:跳过 Git 仓库初始化
31
+
19
32
  ## 导出模块
20
33
 
21
34
  | 模块 | 路径 | 说明 |
package/bin/index.mjs ADDED
@@ -0,0 +1,323 @@
1
+ #!/usr/bin/env node
2
+
3
+ /* eslint-disable no-console */
4
+ import { spawn } from 'node:child_process';
5
+ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs';
6
+ import path from 'node:path';
7
+ import process from 'node:process';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { cac } from 'cac';
10
+
11
+ const currentFilePath = fileURLToPath(import.meta.url);
12
+ const packageRoot = path.resolve(path.dirname(currentFilePath), '..');
13
+ const templatesRoot = path.join(packageRoot, 'templates');
14
+ const platformPackageJson = JSON.parse(readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
15
+
16
+ /**
17
+ * 获取可用模板列表。
18
+ * @returns {Array<{ name: string, title: string, description: string, directory: string }>}
19
+ */
20
+ function getAvailableTemplates() {
21
+ if (!existsSync(templatesRoot)) {
22
+ return [];
23
+ }
24
+
25
+ return readdirSync(templatesRoot)
26
+ .map((entryName) => {
27
+ const templateDir = path.join(templatesRoot, entryName);
28
+ if (!statSync(templateDir).isDirectory()) {
29
+ return null;
30
+ }
31
+
32
+ const metaFilePath = path.join(templateDir, '_meta.json');
33
+ if (!existsSync(metaFilePath)) {
34
+ return null;
35
+ }
36
+
37
+ const meta = JSON.parse(readFileSync(metaFilePath, 'utf8'));
38
+
39
+ return {
40
+ name: entryName,
41
+ title: meta.title || entryName,
42
+ description: meta.description || '',
43
+ directory: templateDir,
44
+ };
45
+ })
46
+ .filter(Boolean);
47
+ }
48
+
49
+ /**
50
+ * 解析默认包管理器。
51
+ * @returns {'pnpm' | 'npm' | 'yarn' | 'bun'}
52
+ */
53
+ function detectPackageManager() {
54
+ const userAgent = process.env.npm_config_user_agent || '';
55
+
56
+ if (userAgent.startsWith('yarn/')) {
57
+ return 'yarn';
58
+ }
59
+
60
+ if (userAgent.startsWith('bun/')) {
61
+ return 'bun';
62
+ }
63
+
64
+ if (userAgent.startsWith('npm/')) {
65
+ return 'npm';
66
+ }
67
+
68
+ return 'pnpm';
69
+ }
70
+
71
+ /**
72
+ * 根据当前平台返回命令名。
73
+ * @param {'pnpm' | 'npm' | 'yarn' | 'bun' | 'git'} command
74
+ * @returns {string}
75
+ */
76
+ function resolveCommand(command) {
77
+ return process.platform === 'win32' ? `${command}.cmd` : command;
78
+ }
79
+
80
+ /**
81
+ * 将目录名转换为 npm 包名。
82
+ * @param {string} projectName
83
+ * @returns {string}
84
+ */
85
+ function toPackageName(projectName) {
86
+ return projectName
87
+ .trim()
88
+ .toLowerCase()
89
+ .replace(/\s+/g, '-')
90
+ .replace(/[^a-z0-9-_.~/@]/g, '-')
91
+ .replace(/-+/g, '-');
92
+ }
93
+
94
+ /**
95
+ * 校验项目名是否合法。
96
+ * @param {string} projectName
97
+ */
98
+ function validateProjectName(projectName) {
99
+ if (!projectName) {
100
+ throw new Error('项目名不能为空。');
101
+ }
102
+
103
+ if (projectName === '.' || projectName === '..') {
104
+ return;
105
+ }
106
+
107
+ if (!/^[\w.-]+$/.test(projectName)) {
108
+ throw new Error('项目目录名仅支持字母、数字、点、中划线和下划线。');
109
+ }
110
+ }
111
+
112
+ /**
113
+ * 递归遍历目录文件。
114
+ * @param {string} targetDir
115
+ * @returns {string[]}
116
+ */
117
+ function collectFiles(targetDir) {
118
+ const entries = readdirSync(targetDir, { withFileTypes: true });
119
+ const filePaths = [];
120
+
121
+ for (const entry of entries) {
122
+ const entryPath = path.join(targetDir, entry.name);
123
+ if (entry.isDirectory()) {
124
+ filePaths.push(...collectFiles(entryPath));
125
+ continue;
126
+ }
127
+ filePaths.push(entryPath);
128
+ }
129
+
130
+ return filePaths;
131
+ }
132
+
133
+ /**
134
+ * 判断文件是否可按文本方式渲染。
135
+ * @param {string} filePath
136
+ * @returns {boolean}
137
+ */
138
+ function isRenderableTextFile(filePath) {
139
+ return /\.(?:json|md|tsx?|jsx?|mjs|cjs|css|txt|ya?ml|gitignore)$/i.test(filePath);
140
+ }
141
+
142
+ /**
143
+ * 渲染模板目录中的占位符文件。
144
+ * @param {string} targetDir
145
+ * @param {Record<string, string>} variables
146
+ */
147
+ function renderTemplateFiles(targetDir, variables) {
148
+ const filePaths = collectFiles(targetDir);
149
+
150
+ for (const filePath of filePaths) {
151
+ const dirName = path.dirname(filePath);
152
+ const baseName = path.basename(filePath);
153
+
154
+ if (baseName === '__dot__gitignore') {
155
+ renameSync(filePath, path.join(dirName, '.gitignore'));
156
+ continue;
157
+ }
158
+
159
+ if (baseName.endsWith('.template')) {
160
+ const nextFilePath = path.join(dirName, baseName.replace(/\.template$/, ''));
161
+ renameSync(filePath, nextFilePath);
162
+ renderSingleFile(nextFilePath, variables);
163
+ continue;
164
+ }
165
+
166
+ renderSingleFile(filePath, variables);
167
+ }
168
+ }
169
+
170
+ /**
171
+ * 渲染单个文本文件。
172
+ * @param {string} filePath
173
+ * @param {Record<string, string>} variables
174
+ */
175
+ function renderSingleFile(filePath, variables) {
176
+ if (!isRenderableTextFile(filePath)) {
177
+ return;
178
+ }
179
+
180
+ let content = readFileSync(filePath, 'utf8');
181
+ for (const [key, value] of Object.entries(variables)) {
182
+ content = content.replaceAll(`{{${key}}}`, value);
183
+ }
184
+ writeFileSync(filePath, content);
185
+ }
186
+
187
+ /**
188
+ * 执行子进程命令。
189
+ * @param {string} command
190
+ * @param {string[]} args
191
+ * @param {string} cwd
192
+ * @returns {Promise<void>}
193
+ */
194
+ function runCommand(command, args, cwd) {
195
+ return new Promise((resolve, reject) => {
196
+ const child = spawn(resolveCommand(command), args, {
197
+ cwd,
198
+ stdio: 'inherit',
199
+ shell: false,
200
+ });
201
+
202
+ child.on('close', (code) => {
203
+ if (code === 0) {
204
+ resolve();
205
+ return;
206
+ }
207
+
208
+ reject(new Error(`${command} ${args.join(' ')} 执行失败,退出码 ${code}`));
209
+ });
210
+ });
211
+ }
212
+
213
+ /**
214
+ * 获取安装命令。
215
+ * @param {'pnpm' | 'npm' | 'yarn' | 'bun'} packageManager
216
+ * @returns {{ command: string, args: string[] }}
217
+ */
218
+ function getInstallCommand(packageManager) {
219
+ switch (packageManager) {
220
+ case 'npm':
221
+ return { command: 'npm', args: ['install'] };
222
+ case 'yarn':
223
+ return { command: 'yarn', args: [] };
224
+ case 'bun':
225
+ return { command: 'bun', args: ['install'] };
226
+ default:
227
+ return { command: 'pnpm', args: ['install'] };
228
+ }
229
+ }
230
+
231
+ /**
232
+ * 初始化项目。
233
+ * @param {string | undefined} inputName
234
+ * @param {{ template?: string, pm?: 'pnpm' | 'npm' | 'yarn' | 'bun', install?: boolean, git?: boolean, force?: boolean }} options
235
+ */
236
+ async function initProject(inputName, options) {
237
+ const templateName = options.template || 'base';
238
+ const packageManager = options.pm || detectPackageManager();
239
+ const availableTemplates = getAvailableTemplates();
240
+ const matchedTemplate = availableTemplates.find(item => item.name === templateName);
241
+
242
+ if (!matchedTemplate) {
243
+ throw new Error(`未找到模板 ${templateName},可用模板:${availableTemplates.map(item => item.name).join(', ')}`);
244
+ }
245
+
246
+ const workingDir = process.cwd();
247
+ const projectName = inputName || 'funhub-app';
248
+ validateProjectName(projectName);
249
+
250
+ const targetDir = path.resolve(workingDir, projectName);
251
+ const targetExists = existsSync(targetDir);
252
+ const targetBaseName = projectName === '.' ? path.basename(workingDir) : path.basename(targetDir);
253
+ const packageName = toPackageName(targetBaseName);
254
+
255
+ if (targetExists) {
256
+ const targetEntries = readdirSync(targetDir);
257
+ if (targetEntries.length > 0) {
258
+ if (!options.force) {
259
+ throw new Error(`目标目录 ${targetDir} 非空,请改用空目录或显式传入 --force。`);
260
+ }
261
+ rmSync(targetDir, { recursive: true, force: true });
262
+ }
263
+ }
264
+
265
+ mkdirSync(targetDir, { recursive: true });
266
+
267
+ const sourceTemplateDir = path.join(matchedTemplate.directory, 'template');
268
+ cpSync(sourceTemplateDir, targetDir, { recursive: true });
269
+
270
+ renderTemplateFiles(targetDir, {
271
+ PROJECT_NAME: targetBaseName,
272
+ PACKAGE_NAME: packageName,
273
+ PLATFORM_VERSION: platformPackageJson.version,
274
+ });
275
+
276
+ console.log(`\n已创建 Funhub 项目:${targetBaseName}`);
277
+ console.log(`模板:${matchedTemplate.title}`);
278
+ console.log(`目录:${targetDir}`);
279
+
280
+ if (options.install !== false) {
281
+ const installCommand = getInstallCommand(packageManager);
282
+ console.log(`\n正在安装依赖(${packageManager})...`);
283
+ await runCommand(installCommand.command, installCommand.args, targetDir);
284
+ }
285
+
286
+ if (options.git !== false) {
287
+ console.log('\n正在初始化 Git 仓库...');
288
+ await runCommand('git', ['init'], targetDir);
289
+ }
290
+
291
+ const relativeTargetDir = path.relative(workingDir, targetDir) || '.';
292
+ console.log('\n下一步:');
293
+ if (relativeTargetDir !== '.') {
294
+ console.log(` cd ${relativeTargetDir}`);
295
+ }
296
+ if (options.install === false) {
297
+ const installCommand = getInstallCommand(packageManager);
298
+ console.log(` ${installCommand.command} ${installCommand.args.join(' ')}`.trimEnd());
299
+ }
300
+ console.log(` ${packageManager} dev`);
301
+ }
302
+
303
+ const cli = cac('@funhub/platform');
304
+
305
+ cli
306
+ .command('init [project-name]', '初始化一个 Funhub 应用')
307
+ .option('--template <template>', '模板名称,默认 base')
308
+ .option('--pm <packageManager>', '包管理器,可选 pnpm/npm/yarn/bun')
309
+ .option('--no-install', '跳过依赖安装')
310
+ .option('--no-git', '跳过 git init')
311
+ .option('--force', '强制覆盖非空目录')
312
+ .action(async (projectName, options) => {
313
+ try {
314
+ await initProject(projectName, options);
315
+ }
316
+ catch (error) {
317
+ console.error(`\n❌ ${(error && error.message) || '初始化失败'}`);
318
+ process.exit(1);
319
+ }
320
+ });
321
+
322
+ cli.help();
323
+ cli.parse();
@@ -0,0 +1,2 @@
1
+
2
+ var e=`data:image/png;base64,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`;export{e as default};
@@ -19,6 +19,6 @@ declare const basicBannerMaterial: DefineMaterialOption<typeof BasicBanner, type
19
19
  renderer: "renderer";
20
20
  editor: "editor";
21
21
  }>>;
22
- }, zod_v4_core0.$strip>, "basic-banner">;
22
+ }, zod_v4_core0.$strip>, "basic-banner", "内容组件">;
23
23
  //#endregion
24
24
  export { basicBannerMaterial };
@@ -22,6 +22,6 @@ declare const BannerCarouselMaterial: DefineMaterialOption<typeof BannerCarousel
22
22
  renderer: "renderer";
23
23
  editor: "editor";
24
24
  }>>;
25
- }, zod_v4_core0.$strip>, "banner-carousel">;
25
+ }, zod_v4_core0.$strip>, "banner-carousel", "内容组件">;
26
26
  //#endregion
27
27
  export { BannerCarouselMaterial };
@@ -18,6 +18,6 @@ declare const channelListMaterial: DefineMaterialOption<typeof BasicChannelListC
18
18
  renderer: "renderer";
19
19
  editor: "editor";
20
20
  }>>;
21
- }, zod_v4_core0.$strip>, "channel-list">;
21
+ }, zod_v4_core0.$strip>, "channel-list", "内容组件">;
22
22
  //#endregion
23
23
  export { channelListMaterial };
@@ -29,31 +29,31 @@ declare const videoDetailMaterials: MaterialMap<readonly [DefineMaterialOption<t
29
29
  renderer: "renderer";
30
30
  editor: "editor";
31
31
  }>>;
32
- }, z$1.core.$strip>, "video-detail-player">, DefineMaterialOption<typeof VideoDetailInfo, typeof VideoDetailInfoClient, z$1.ZodObject<{
32
+ }, z$1.core.$strip>, "video-detail-player", "视频模块">, DefineMaterialOption<typeof VideoDetailInfo, typeof VideoDetailInfoClient, z$1.ZodObject<{
33
33
  showTags: z$1.ZodBoolean & SchemaHasDefaultValue;
34
34
  showEpisodes: z$1.ZodBoolean & SchemaHasDefaultValue;
35
35
  mode: z$1.ZodOptional<z$1.ZodEnum<{
36
36
  renderer: "renderer";
37
37
  editor: "editor";
38
38
  }>>;
39
- }, z$1.core.$strip>, "video-detail-info">, DefineMaterialOption<typeof VideoDetailInfoTitle, typeof VideoDetailInfoTitleClient, z$1.ZodObject<{
39
+ }, z$1.core.$strip>, "video-detail-info", "内容组件">, DefineMaterialOption<typeof VideoDetailInfoTitle, typeof VideoDetailInfoTitleClient, z$1.ZodObject<{
40
40
  mode: z$1.ZodOptional<z$1.ZodEnum<{
41
41
  renderer: "renderer";
42
42
  editor: "editor";
43
43
  }>>;
44
- }, z$1.core.$strip>, "video-detail-info-title">, DefineMaterialOption<typeof VideoDetailInfoTitleTagsEpisodes, typeof VideoDetailInfoTitleTagsEpisodesClient, z$1.ZodObject<{
44
+ }, z$1.core.$strip>, "video-detail-info-title", "内容组件">, DefineMaterialOption<typeof VideoDetailInfoTitleTagsEpisodes, typeof VideoDetailInfoTitleTagsEpisodesClient, z$1.ZodObject<{
45
45
  showTags: z$1.ZodBoolean & SchemaHasDefaultValue;
46
46
  showEpisodes: z$1.ZodBoolean & SchemaHasDefaultValue;
47
47
  mode: z$1.ZodOptional<z$1.ZodEnum<{
48
48
  renderer: "renderer";
49
49
  editor: "editor";
50
50
  }>>;
51
- }, z$1.core.$strip>, "video-detail-info-title-tags-episodes">, DefineMaterialOption<typeof VideoDetailActions, typeof VideoDetailActionsClient, z$1.ZodObject<{
51
+ }, z$1.core.$strip>, "video-detail-info-title-tags-episodes", "内容组件">, DefineMaterialOption<typeof VideoDetailActions, typeof VideoDetailActionsClient, z$1.ZodObject<{
52
52
  mode: z$1.ZodOptional<z$1.ZodEnum<{
53
53
  renderer: "renderer";
54
54
  editor: "editor";
55
55
  }>>;
56
- }, z$1.core.$strip>, "video-detail-actions">, DefineMaterialOption<typeof VideoDetailRecommend, typeof VideoDetailRecommendClient, z$1.ZodObject<{
56
+ }, z$1.core.$strip>, "video-detail-actions", "行为组件">, DefineMaterialOption<typeof VideoDetailRecommend, typeof VideoDetailRecommendClient, z$1.ZodObject<{
57
57
  rows: z$1.ZodNumber & SchemaHasDefaultValue;
58
58
  columns: z$1.ZodNumber & SchemaHasDefaultValue;
59
59
  smartTagEnabled: z$1.ZodBoolean & SchemaHasDefaultValue;
@@ -84,6 +84,6 @@ declare const videoDetailMaterials: MaterialMap<readonly [DefineMaterialOption<t
84
84
  renderer: "renderer";
85
85
  editor: "editor";
86
86
  }>>;
87
- }, z$1.core.$strip>, "video-detail-recommend">]>;
87
+ }, z$1.core.$strip>, "video-detail-recommend", "详情页">]>;
88
88
  //#endregion
89
89
  export { videoDetailMaterials };
@@ -11,6 +11,6 @@ declare const videoDetailActionsMaterial: DefineMaterialOption<typeof VideoDetai
11
11
  renderer: "renderer";
12
12
  editor: "editor";
13
13
  }>>;
14
- }, zod_v4_core0.$strip>, "video-detail-actions">;
14
+ }, zod_v4_core0.$strip>, "video-detail-actions", "行为组件">;
15
15
  //#endregion
16
16
  export { videoDetailActionsMaterial };
@@ -15,6 +15,6 @@ declare const videoDetailInfoMaterial: DefineMaterialOption<typeof VideoDetailIn
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "video-detail-info">;
18
+ }, zod_v4_core0.$strip>, "video-detail-info", "内容组件">;
19
19
  //#endregion
20
20
  export { videoDetailInfoMaterial };
@@ -11,6 +11,6 @@ declare const videoDetailInfoTitleMaterial: DefineMaterialOption<typeof VideoDet
11
11
  renderer: "renderer";
12
12
  editor: "editor";
13
13
  }>>;
14
- }, zod_v4_core0.$strip>, "video-detail-info-title">;
14
+ }, zod_v4_core0.$strip>, "video-detail-info-title", "内容组件">;
15
15
  //#endregion
16
16
  export { videoDetailInfoTitleMaterial };
@@ -15,6 +15,6 @@ declare const videoDetailInfoTitleTagsEpisodesMaterial: DefineMaterialOption<typ
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "video-detail-info-title-tags-episodes">;
18
+ }, zod_v4_core0.$strip>, "video-detail-info-title-tags-episodes", "内容组件">;
19
19
  //#endregion
20
20
  export { videoDetailInfoTitleTagsEpisodesMaterial };
@@ -11,6 +11,6 @@ declare const videoDetailPlayerMaterial: DefineMaterialOption<typeof VideoDetail
11
11
  renderer: "renderer";
12
12
  editor: "editor";
13
13
  }>>;
14
- }, zod_v4_core0.$strip>, "video-detail-player">;
14
+ }, zod_v4_core0.$strip>, "video-detail-player", "视频模块">;
15
15
  //#endregion
16
16
  export { videoDetailPlayerMaterial };
@@ -39,6 +39,6 @@ declare const videoDetailRecommendMaterial: DefineMaterialOption<typeof VideoDet
39
39
  renderer: "renderer";
40
40
  editor: "editor";
41
41
  }>>;
42
- }, zod_v4_core0.$strip>, "video-detail-recommend">;
42
+ }, zod_v4_core0.$strip>, "video-detail-recommend", "详情页">;
43
43
  //#endregion
44
44
  export { videoDetailRecommendMaterial };
@@ -15,6 +15,6 @@ declare const floatingBallMaterial: DefineMaterialOption<typeof FloatingBall, ty
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "floating-ball">;
18
+ }, zod_v4_core0.$strip>, "floating-ball", "内容组件">;
19
19
  //#endregion
20
20
  export { floatingBallMaterial };
@@ -11,6 +11,6 @@ declare const headerAvatarIconMaterial: DefineMaterialOption<typeof HeaderAvatar
11
11
  renderer: "renderer";
12
12
  editor: "editor";
13
13
  }>>;
14
- }, zod_v4_core0.$strip>, "header-avatar-icon">;
14
+ }, zod_v4_core0.$strip>, "header-avatar-icon", "顶部功能">;
15
15
  //#endregion
16
16
  export { headerAvatarIconMaterial };
@@ -15,6 +15,6 @@ declare const headerAvatarLogoSearchMaterial: DefineMaterialOption<typeof Header
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "header-avatar-logo-search">;
18
+ }, zod_v4_core0.$strip>, "header-avatar-logo-search", "顶部功能">;
19
19
  //#endregion
20
20
  export { headerAvatarLogoSearchMaterial };
@@ -15,6 +15,6 @@ declare const headerAvatarLogoSearchIconMaterial: DefineMaterialOption<typeof He
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "header-avatar-logo-search-icon">;
18
+ }, zod_v4_core0.$strip>, "header-avatar-logo-search-icon", "顶部功能">;
19
19
  //#endregion
20
20
  export { headerAvatarLogoSearchIconMaterial };
@@ -15,6 +15,6 @@ declare const headerLogoSearchMaterial: DefineMaterialOption<typeof HeaderLogoSe
15
15
  renderer: "renderer";
16
16
  editor: "editor";
17
17
  }>>;
18
- }, zod_v4_core0.$strip>, "header-logo-search">;
18
+ }, zod_v4_core0.$strip>, "header-logo-search", "顶部功能">;
19
19
  //#endregion
20
20
  export { headerLogoSearchMaterial };
@@ -11,6 +11,6 @@ declare const headerSearchMaterial: DefineMaterialOption<typeof HeaderSearch, ty
11
11
  renderer: "renderer";
12
12
  editor: "editor";
13
13
  }>>;
14
- }, zod_v4_core0.$strip>, "header-search">;
14
+ }, zod_v4_core0.$strip>, "header-search", "顶部功能">;
15
15
  //#endregion
16
16
  export { headerSearchMaterial };
@@ -41,6 +41,6 @@ declare const homeRecommendGridMaterial: DefineMaterialOption<typeof HomeRecomme
41
41
  renderer: "renderer";
42
42
  editor: "editor";
43
43
  }>>;
44
- }, zod_v4_core0.$strip>, "home-recommend-grid">;
44
+ }, zod_v4_core0.$strip>, "home-recommend-grid", "内容组件">;
45
45
  //#endregion
46
46
  export { homeRecommendGridMaterial };
@@ -36,6 +36,6 @@ declare const homeRecommendWaterfallMaterial: DefineMaterialOption<typeof HomeRe
36
36
  renderer: "renderer";
37
37
  editor: "editor";
38
38
  }>>;
39
- }, zod_v4_core0.$strip>, "home-recommend-waterfall">;
39
+ }, zod_v4_core0.$strip>, "home-recommend-waterfall", "内容组件">;
40
40
  //#endregion
41
41
  export { homeRecommendWaterfallMaterial };
@@ -1,2 +1,2 @@
1
1
 
2
- import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import r from"../../../ui/link.mjs";import i from"../../../../assets/icons/view.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e){if(e.episodeText===void 0||e.episodeText===null||e.episodeText===``)return null;let t=String(e.episodeText).trim();if(!t)return null;if(t===`已完结`||t===`连载中`)return t;let n=Number(t);return Number.isFinite(n)&&n>0?`全${Math.floor(n)}集`:/^全\d+集$/.test(t)?t:null}function c(e){if(e==null||e===``)return null;let t=Number(e);if(Number.isNaN(t))return String(e);if(t<1e3)return String(t);if(t<1e6){let e=(t/1e3).toFixed(1);return e.endsWith(`.0`)?`${e.slice(0,-2)}K`:`${e}K`}else{let e=(t/1e6).toFixed(1);return e.endsWith(`.0`)?`${e.slice(0,-2)}M`:`${e}M`}}function l(e,t,n){return t===`showPlayCount`?e.showPlayCount??n:t===`showEpisode`?e.showEpisode??n:n}function u(e){if(l(e,`showPlayCount`,!0))return e.playCount}function d(e){let t=e.tagImageUrl;return t?String(t):null}function f({data:f}){return f?a(t,{children:(Array.isArray(f)?f:[f]).map(f=>{let p=f.id?`/video/${f.id}/${f.title?encodeURIComponent(f.title):``}`:`#`,m=d(f),h=l(f,`showEpisode`,!0)?s(f):null,g=c(u(f));return a(t,{children:o(r,{href:p,children:[o(t,{className:`relative w-full overflow-hidden rounded-[12px] bg-neutral-800`,style:{aspectRatio:`16/9`},children:[f.cover&&a(e,{src:f.cover,alt:f.title,fill:!0,objectFit:`cover`}),m&&a(t,{className:`absolute right-0 top-0 z-10 h-[37px] w-[20px] overflow-hidden`,style:{borderRadius:`0 8px`},children:a(e,{src:m,alt:f.title,fill:!0,objectFit:`cover`})}),a(t,{className:`absolute inset-x-0 bottom-0 h-[40px] bg-gradient-to-t from-black/80 to-transparent z-0 pointer-events-none`}),g&&o(t,{className:`absolute bottom-0 left-[8px] mb-[6px] z-10 flex items-center gap-[4px]`,children:[a(i,{className:`h-[14px] w-[14px] text-white`}),a(n,{as:`span`,className:`text-[12px] font-medium text-white drop-shadow-md`,children:g})]}),h&&a(t,{className:`absolute bottom-0 right-[8px] mb-[6px] z-10 flex items-center`,children:a(n,{as:`span`,className:`text-[12px] font-medium text-white drop-shadow-md`,children:h})})]}),o(t,{className:`flex items-center justify-between gap-[12px] pt-[10px] px-2`,children:[o(t,{className:`flex-1 min-w-0`,children:[a(n,{as:`h3`,className:`text-[16px] font-semibold leading-[24px] text-text1 line-clamp-1`,children:f.title}),f.desc&&a(n,{as:`p`,className:`mt-[4px] text-[13px] leading-[20px] text-text2 line-clamp-1`,children:f.desc})]}),a(n,{className:`shrink-0 rounded-[20px] border border-[#FD4C5E] px-[24px] py-[8px] text-[14px] font-normal text-[#FD4C5E]`,children:`观看`})]})]})},f.id||f.title)})}):null}export{f as LargeGridItemClient};
2
+ import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import r from"../../../ui/link.mjs";import i from"../../../../assets/icons/view.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s({data:s}){return s?a(t,{children:(Array.isArray(s)?s:[s]).map((s,c)=>{if(!s||typeof s!=`object`)return null;let{id:l,title:u,desc:d,cover:f,tagImageUrl:p,showEpisode:m,episodeText:h,showPlayCount:g,playCount:_}=s,v=u||``,y=l?`/video/${l}/${v?encodeURIComponent(v):``}`:`#`,b=p?String(p):null,x=h==null?``:String(h).trim(),S=_==null?``:String(_).trim(),C=(m??!0)&&x?x:null,w=(g??!0)&&S?S:null;return a(t,{children:o(r,{href:y,children:[o(t,{className:`relative w-full overflow-hidden rounded-[12px] bg-neutral-800`,style:{aspectRatio:`16/9`},children:[f&&a(e,{src:f,alt:v||`封面`,fill:!0,objectFit:`cover`}),b&&a(t,{className:`absolute top-0 right-0 z-10 w-[37px] h-[20px]`,children:a(e,{src:b,alt:v||`角标`,fill:!0,sizes:`37px`,className:`object-contain`})}),a(t,{className:`absolute inset-x-0 bottom-0 h-[40px] bg-gradient-to-t from-black/80 to-transparent z-0 pointer-events-none`}),w&&o(t,{className:`absolute bottom-0 left-[8px] mb-[6px] z-10 flex items-center gap-[4px]`,children:[a(i,{className:`h-[14px] w-[14px] text-white`}),a(n,{as:`span`,className:`text-[12px] font-medium text-white drop-shadow-md`,children:w})]}),C&&a(t,{className:`absolute bottom-0 right-[8px] mb-[6px] z-10 flex items-center`,children:a(n,{as:`span`,className:`text-[12px] font-medium text-white drop-shadow-md`,children:C})})]}),o(t,{className:`flex items-center justify-between gap-[12px] pt-[10px] px-2`,children:[o(t,{className:`flex-1 min-w-0`,children:[a(n,{as:`h3`,className:`text-[16px] font-semibold leading-[24px] text-text1 line-clamp-1`,children:v}),d&&a(n,{as:`p`,className:`mt-[4px] text-[13px] leading-[20px] text-text2 line-clamp-1`,children:d})]}),a(n,{className:`shrink-0 rounded-[20px] border border-[#FD4C5E] px-[24px] py-[8px] text-[14px] font-normal text-[#FD4C5E]`,children:`观看`})]})]})},l||v||`large-grid-item-${c}`)})}):null}export{s as LargeGridItemClient};
@@ -1,5 +1,5 @@
1
1
 
2
- import { DefineMaterialOption } from "../../../../utils/schema/material.mjs";
2
+ import { DefineMaterialOption, MaterialCategory } from "../../../../utils/schema/material.mjs";
3
3
  import * as react from "react";
4
4
  import * as zod from "zod";
5
5
  import * as zod_v4_core0 from "zod/v4/core";
@@ -7,6 +7,6 @@ import * as zod_v4_core0 from "zod/v4/core";
7
7
  //#region components/biz/business/large-feature-grid/material.d.ts
8
8
  declare const largeFeatureGridMaterial: DefineMaterialOption<react.ComponentType<any>, react.ComponentType<any>, zod.ZodObject<Readonly<{
9
9
  [k: string]: zod_v4_core0.$ZodType<unknown, unknown, zod_v4_core0.$ZodTypeInternals<unknown, unknown>>;
10
- }>, zod_v4_core0.$strip>, string>;
10
+ }>, zod_v4_core0.$strip>, string, MaterialCategory>;
11
11
  //#endregion
12
12
  export { largeFeatureGridMaterial };