@maple-design/cli-vue 0.0.0-stage → 1.1.0
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.
- package/README.md +305 -2
- package/README.zh-CN.md +305 -0
- package/bin/cli.mjs +5 -0
- package/client.d.ts +1 -0
- package/client.js +1 -0
- package/lib/client/appType.d.ts +4 -0
- package/lib/client/appType.js +7 -0
- package/lib/client/index.d.ts +29 -0
- package/lib/client/index.js +170 -0
- package/lib/client/language.d.ts +11 -0
- package/lib/client/language.js +52 -0
- package/lib/client/theme-state.d.ts +3 -0
- package/lib/client/theme-state.js +6 -0
- package/lib/node/bin.d.ts +2 -0
- package/lib/node/bin.js +154 -0
- package/lib/node/commands/build.d.ts +1 -0
- package/lib/node/commands/build.js +15 -0
- package/lib/node/commands/checklist.d.ts +6 -0
- package/lib/node/commands/checklist.js +59 -0
- package/lib/node/commands/compile.d.ts +3 -0
- package/lib/node/commands/compile.js +41 -0
- package/lib/node/commands/create.d.ts +8 -0
- package/lib/node/commands/create.js +91 -0
- package/lib/node/commands/dev.d.ts +6 -0
- package/lib/node/commands/dev.js +58 -0
- package/lib/node/commands/extension.d.ts +3 -0
- package/lib/node/commands/extension.js +5 -0
- package/lib/node/commands/gen.d.ts +24 -0
- package/lib/node/commands/gen.js +91 -0
- package/lib/node/commands/icons.d.ts +4 -0
- package/lib/node/commands/icons.js +15 -0
- package/lib/node/commands/preview.d.ts +4 -0
- package/lib/node/commands/preview.js +18 -0
- package/lib/node/commands/styleVars.d.ts +1 -0
- package/lib/node/commands/styleVars.js +6 -0
- package/lib/node/commands/test.d.ts +7 -0
- package/lib/node/commands/test.js +16 -0
- package/lib/node/commands/vite.d.ts +2 -0
- package/lib/node/commands/vite.js +14 -0
- package/lib/node/compiler/compileModule.d.ts +4 -0
- package/lib/node/compiler/compileModule.js +78 -0
- package/lib/node/compiler/compileSFC.d.ts +6 -0
- package/lib/node/compiler/compileSFC.js +119 -0
- package/lib/node/compiler/compileScript.d.ts +27 -0
- package/lib/node/compiler/compileScript.js +221 -0
- package/lib/node/compiler/compileSiteEntry.d.ts +19 -0
- package/lib/node/compiler/compileSiteEntry.js +164 -0
- package/lib/node/compiler/compileStyle.d.ts +14 -0
- package/lib/node/compiler/compileStyle.js +55 -0
- package/lib/node/compiler/compileStyleVars.d.ts +3 -0
- package/lib/node/compiler/compileStyleVars.js +46 -0
- package/lib/node/compiler/compileTemplateHighlight.d.ts +18 -0
- package/lib/node/compiler/compileTemplateHighlight.js +133 -0
- package/lib/node/compiler/compileTypes.d.ts +2 -0
- package/lib/node/compiler/compileTypes.js +58 -0
- package/lib/node/compiler/generateLibraryEntry.d.ts +3 -0
- package/lib/node/compiler/generateLibraryEntry.js +152 -0
- package/lib/node/compiler/siteRoutes.d.ts +4 -0
- package/lib/node/compiler/siteRoutes.js +9 -0
- package/lib/node/config/maple.config.d.ts +215 -0
- package/lib/node/config/maple.config.js +32 -0
- package/lib/node/config/maple.default.config.d.ts +2 -0
- package/lib/node/config/maple.default.config.js +386 -0
- package/lib/node/config/site-resolver.d.ts +25 -0
- package/lib/node/config/site-resolver.js +138 -0
- package/lib/node/config/vite.config.d.ts +28 -0
- package/lib/node/config/vite.config.js +209 -0
- package/lib/node/config/vitest.config.d.ts +2 -0
- package/lib/node/config/vitest.config.js +54 -0
- package/lib/node/config/vitest.setup.d.ts +1 -0
- package/lib/node/config/vitest.setup.js +8 -0
- package/lib/node/index.d.ts +13 -0
- package/lib/node/index.js +13 -0
- package/lib/node/release/index.d.ts +20 -0
- package/lib/node/release/index.js +147 -0
- package/lib/node/shared/constant.d.ts +47 -0
- package/lib/node/shared/constant.js +53 -0
- package/lib/node/shared/fsUtils.d.ts +18 -0
- package/lib/node/shared/fsUtils.js +57 -0
- package/lib/node/shared/logger.d.ts +8 -0
- package/lib/node/shared/logger.js +18 -0
- package/lib/node/shared/serial-task.d.ts +2 -0
- package/lib/node/shared/serial-task.js +9 -0
- package/package.json +111 -3
- package/site/documentation-sections.spec.ts +45 -0
- package/site/documentation-sections.ts +48 -0
- package/site/index.html +89 -0
- package/site/mobile/App.vue +437 -0
- package/site/mobile/AppHome.vue +154 -0
- package/site/mobile/main.ts +99 -0
- package/site/mobile/route-sync.spec.ts +34 -0
- package/site/mobile/route-sync.ts +10 -0
- package/site/mobile.html +70 -0
- package/site/module.d.ts +5 -0
- package/site/pc/App.vue +44 -0
- package/site/pc/Layout.vue +641 -0
- package/site/pc/components/AppAd.vue +117 -0
- package/site/pc/components/AppHeader.vue +459 -0
- package/site/pc/components/AppMobile.spec.ts +204 -0
- package/site/pc/components/AppMobile.vue +201 -0
- package/site/pc/components/AppOutline.spec.ts +89 -0
- package/site/pc/components/AppOutline.vue +161 -0
- package/site/pc/components/AppSidebar.vue +144 -0
- package/site/pc/components/code-example/CodeExample.spec.ts +36 -0
- package/site/pc/components/code-example/CodeExample.vue +164 -0
- package/site/pc/components/code-example/codeExample.less +88 -0
- package/site/pc/components/code-example/index.ts +10 -0
- package/site/pc/components/demo-preview/DemoPreview.vue +92 -0
- package/site/pc/components/demo-preview/index.ts +8 -0
- package/site/pc/components/mobile-preview-url.ts +17 -0
- package/site/pc/components/preview-section.spec.ts +24 -0
- package/site/pc/components/preview-section.ts +23 -0
- package/site/pc/main.ts +108 -0
- package/site/pc/pages/index/index.vue +421 -0
- package/site/pc/pages/index/locale/en-US.ts +1 -0
- package/site/pc/pages/index/locale/zh-CN.ts +1 -0
- package/site/pc/responsive-layout.spec.ts +40 -0
- package/site/pc/route-state.spec.ts +34 -0
- package/site/pc/route-state.ts +25 -0
- package/site/pc/scroll-hash.spec.ts +49 -0
- package/site/pc/scroll-hash.ts +25 -0
- package/site/route-recovery.spec.ts +51 -0
- package/site/route-recovery.ts +38 -0
- package/site/tsconfig.json +16 -0
- package/site/types.ts +6 -0
- package/site/utils.ts +45 -0
- package/template/create/[ComponentName].tsx.ejs +16 -0
- package/template/create/[ComponentName].vue.ejs +21 -0
- package/template/create/[componentName].d.ts.ejs +13 -0
- package/template/create/__tests__/index.spec.js.ejs +10 -0
- package/template/create/docs/en-US.md +0 -0
- package/template/create/docs/zh-CN.md +0 -0
- package/template/create/example/index.vue.ejs +17 -0
- package/template/create/example/locale/_index.ts +17 -0
- package/template/create/example/locale/en-US.ts +3 -0
- package/template/create/example/locale/index.ts +24 -0
- package/template/create/example/locale/zh-CN.ts +3 -0
- package/template/create/index.ts.ejs +12 -0
- package/template/create/props.ts +1 -0
- package/template/create/style/[componentName].less.ejs +5 -0
- package/template/create/style/index.less.ejs +1 -0
- package/template/create/style/index.ts.ejs +1 -0
- package/template/generators/base/.browserslistrc +2 -0
- package/template/generators/base/.prettierignore +14 -0
- package/template/generators/base/README.md +90 -0
- package/template/generators/base/_gitignore +19 -0
- package/template/generators/base/eslint.config.js +15 -0
- package/template/generators/base/package.json +97 -0
- package/template/generators/base/prettier.config.js +3 -0
- package/template/generators/base/public/logo.svg +30 -0
- package/template/generators/base/shims/shims-md.d.ts +4 -0
- package/template/generators/base/shims/shims-vue.d.ts +6 -0
- package/template/generators/base/tsconfig.declaration.json +21 -0
- package/template/generators/base/tsconfig.json +28 -0
- package/template/generators/base/ui-build.config.mjs +16 -0
- package/template/generators/config/default/base/docs/home.zh-CN.md +3 -0
- package/template/generators/config/default/base/maple.config.mjs +49 -0
- package/template/generators/config/default/sfc/src/button/Button.vue +34 -0
- package/template/generators/config/default/sfc/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/default/sfc/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -0
- package/template/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -0
- package/template/generators/config/default/sfc/src/button/example/index.vue +12 -0
- package/template/generators/config/default/sfc/src/button/index.ts +8 -0
- package/template/generators/config/default/sfc/src/button/style/button.less +14 -0
- package/template/generators/config/default/sfc/src/button/style/index.less +1 -0
- package/template/generators/config/default/sfc/src/button/style/index.ts +1 -0
- package/template/generators/config/default/sfc/src/utils/components.ts +20 -0
- package/template/generators/config/default/tsx/src/button/Button.tsx +30 -0
- package/template/generators/config/default/tsx/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/default/tsx/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -0
- package/template/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -0
- package/template/generators/config/default/tsx/src/button/example/index.vue +12 -0
- package/template/generators/config/default/tsx/src/button/index.ts +8 -0
- package/template/generators/config/default/tsx/src/button/style/button.less +14 -0
- package/template/generators/config/default/tsx/src/button/style/index.less +1 -0
- package/template/generators/config/default/tsx/src/button/style/index.ts +1 -0
- package/template/generators/config/default/tsx/src/utils/components.ts +20 -0
- package/template/generators/config/i18n/base/docs/home.en-US.md +3 -0
- package/template/generators/config/i18n/base/docs/home.zh-CN.md +3 -0
- package/template/generators/config/i18n/base/maple.config.mjs +51 -0
- package/template/generators/config/i18n/sfc/src/button/Button.vue +38 -0
- package/template/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/i18n/sfc/src/button/docs/en-US.md +39 -0
- package/template/generators/config/i18n/sfc/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -0
- package/template/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -0
- package/template/generators/config/i18n/sfc/src/button/example/index.vue +15 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -0
- package/template/generators/config/i18n/sfc/src/button/index.ts +8 -0
- package/template/generators/config/i18n/sfc/src/button/style/button.less +14 -0
- package/template/generators/config/i18n/sfc/src/button/style/index.less +1 -0
- package/template/generators/config/i18n/sfc/src/button/style/index.ts +1 -0
- package/template/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +52 -0
- package/template/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -0
- package/template/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -0
- package/template/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -0
- package/template/generators/config/i18n/sfc/src/locale/en-US.ts +7 -0
- package/template/generators/config/i18n/sfc/src/locale/index.ts +82 -0
- package/template/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -0
- package/template/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -0
- package/template/generators/config/i18n/sfc/src/utils/components.ts +20 -0
- package/template/generators/config/i18n/tsx/src/button/Button.tsx +35 -0
- package/template/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/i18n/tsx/src/button/docs/en-US.md +39 -0
- package/template/generators/config/i18n/tsx/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -0
- package/template/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -0
- package/template/generators/config/i18n/tsx/src/button/example/index.vue +15 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -0
- package/template/generators/config/i18n/tsx/src/button/index.ts +8 -0
- package/template/generators/config/i18n/tsx/src/button/style/button.less +14 -0
- package/template/generators/config/i18n/tsx/src/button/style/index.less +1 -0
- package/template/generators/config/i18n/tsx/src/button/style/index.ts +1 -0
- package/template/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +52 -0
- package/template/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -0
- package/template/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -0
- package/template/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -0
- package/template/generators/config/i18n/tsx/src/locale/en-US.ts +7 -0
- package/template/generators/config/i18n/tsx/src/locale/index.ts +82 -0
- package/template/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -0
- package/template/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -0
- package/template/generators/config/i18n/tsx/src/utils/components.ts +20 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { defineConfig } from './maple.config.js';
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
name: 'Maple',
|
|
4
|
+
namespace: 'mp',
|
|
5
|
+
host: 'localhost',
|
|
6
|
+
port: 8080,
|
|
7
|
+
title: 'Maple Design Mobile',
|
|
8
|
+
logo: 'maple_icon.png',
|
|
9
|
+
defaultLanguage: 'zh-CN',
|
|
10
|
+
themeKey: 'MAPLE_V3_THEME',
|
|
11
|
+
defaultLightTheme: 'lightTheme',
|
|
12
|
+
defaultDarkTheme: 'darkTheme',
|
|
13
|
+
useMobile: false,
|
|
14
|
+
_cf: ['pages.dev', 'maplejs.org'],
|
|
15
|
+
analysis: { baidu: '' },
|
|
16
|
+
pc: {
|
|
17
|
+
title: {
|
|
18
|
+
'zh-CN': 'Maple Design Mobile · 与 Cedar 同构的移动端组件库',
|
|
19
|
+
'en-US': 'Maple Design Mobile · Cedar’s Mobile Counterpart',
|
|
20
|
+
},
|
|
21
|
+
menu: [],
|
|
22
|
+
redirect: '/index',
|
|
23
|
+
indexPage: {
|
|
24
|
+
eyebrow: { 'zh-CN': 'CEDAR × MAPLE · 双端同构', 'en-US': 'CEDAR × MAPLE · ONE ARCHITECTURE' },
|
|
25
|
+
headline: { 'zh-CN': '同一套设计语言,\n从桌面到移动。', 'en-US': 'One design language.\nDesktop to mobile.' },
|
|
26
|
+
description: {
|
|
27
|
+
'zh-CN': 'Maple 是 Cedar 的移动端同构组件库。两端对齐组件 API、交互语义与设计 Token,让已有的组件使用经验延续到另一端,同时为触控场景提供合适的布局与交互。',
|
|
28
|
+
'en-US': 'Maple is the mobile counterpart to Cedar. The two libraries align component APIs, interaction semantics and design tokens, so familiar patterns carry across platforms with layouts and interactions suited to touch.',
|
|
29
|
+
},
|
|
30
|
+
companion: {
|
|
31
|
+
name: 'Cedar Design Web',
|
|
32
|
+
label: { 'zh-CN': '探索桌面端 Cedar ↗', 'en-US': 'Explore Cedar for desktop ↗' },
|
|
33
|
+
href: 'https://cedar.show',
|
|
34
|
+
title: { 'zh-CN': 'Cedar × Maple,同构的两端。', 'en-US': 'Cedar × Maple. Two platforms, one architecture.' },
|
|
35
|
+
description: {
|
|
36
|
+
'zh-CN': '桌面端用 Cedar,移动端用 Maple。共享 API 约定与主题语言,保留各自的交互体验。',
|
|
37
|
+
'en-US': 'Cedar for desktop. Maple for mobile. Shared API conventions and theme language, with interactions tailored to each platform.',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
started: {
|
|
41
|
+
'zh-CN': '快速开始',
|
|
42
|
+
'en-US': 'Get Started',
|
|
43
|
+
},
|
|
44
|
+
viewOnGithub: {
|
|
45
|
+
'zh-CN': '查看源码',
|
|
46
|
+
'en-US': 'View On Github',
|
|
47
|
+
},
|
|
48
|
+
features: [
|
|
49
|
+
{
|
|
50
|
+
name: { 'zh-CN': '双端同构', 'en-US': 'One architecture' },
|
|
51
|
+
description: {
|
|
52
|
+
'zh-CN': '与 Cedar 对齐组件结构、公共 API 与行为约定,跨端开发沿用熟悉的组件模型。',
|
|
53
|
+
'en-US': 'Aligned component structure, public APIs and behavior conventions make familiar patterns reusable across platforms.',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: { 'zh-CN': '统一 API', 'en-US': 'Consistent APIs' },
|
|
58
|
+
description: {
|
|
59
|
+
'zh-CN': '相同能力保持一致的属性、事件与类型语义,减少桌面与移动之间的切换成本。',
|
|
60
|
+
'en-US': 'Shared capabilities follow consistent prop, event and type semantics across desktop and mobile.',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: { 'zh-CN': '统一主题', 'en-US': 'Shared theme language' },
|
|
65
|
+
description: {
|
|
66
|
+
'zh-CN': '使用语义 Token 管理颜色、间距与状态,支持品牌定制和亮暗主题。',
|
|
67
|
+
'en-US': 'Semantic tokens define colors, spacing and states, with brand customization and light and dark themes.',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: { 'zh-CN': '移动端体验', 'en-US': 'Made for touch' },
|
|
72
|
+
description: {
|
|
73
|
+
'zh-CN': '针对触控操作、移动布局与全屏浮层优化交互,让同构能力适配移动场景。',
|
|
74
|
+
'en-US': 'Touch interactions, mobile layouts and fullscreen overlays adapt shared capabilities to mobile use.',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: { 'zh-CN': '按需组合', 'en-US': 'Import what you use' },
|
|
79
|
+
description: {
|
|
80
|
+
'zh-CN': '组件、图标与样式支持按需引入,配套解析器和 CSS 预设。',
|
|
81
|
+
'en-US': 'Import components, icons and styles on demand, with resolvers and CSS presets.',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: { 'zh-CN': '类型与文档', 'en-US': 'Types and documentation' },
|
|
86
|
+
description: {
|
|
87
|
+
'zh-CN': '基于 Vue 3 与 TypeScript,提供类型提示、中英文文档与组件示例。',
|
|
88
|
+
'en-US': 'Built with Vue 3 and TypeScript, with type definitions, bilingual documentation and component examples.',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
teamMembers: {
|
|
93
|
+
label: {
|
|
94
|
+
'zh-CN': '贡献者',
|
|
95
|
+
'en-US': 'Contributors',
|
|
96
|
+
},
|
|
97
|
+
members: [
|
|
98
|
+
{
|
|
99
|
+
name: { 'zh-CN': '孟帅', 'en-US': '孟帅' },
|
|
100
|
+
title: { 'zh-CN': '项目维护者', 'en-US': 'Maintainer' },
|
|
101
|
+
description: { 'zh-CN': 'Maple Design Mobile 贡献者', 'en-US': 'Maple Design Mobile contributor' },
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: { 'zh-CN': '吴甲明', 'en-US': '吴甲明' },
|
|
105
|
+
title: { 'zh-CN': '项目维护者', 'en-US': 'Maintainer' },
|
|
106
|
+
description: { 'zh-CN': 'Maple Design Mobile 贡献者', 'en-US': 'Maple Design Mobile contributor' },
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
license: {
|
|
111
|
+
'zh-CN': '组件库基于 MIT 协议,您可以自由的使用和分享',
|
|
112
|
+
'en-US': 'Released under the MIT License, You can use and share freely.',
|
|
113
|
+
},
|
|
114
|
+
copyright: {
|
|
115
|
+
'zh-CN': 'Copyright © 2026 孟帅、吴甲明',
|
|
116
|
+
'en-US': 'Copyright © 2026 孟帅、吴甲明',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
header: {
|
|
120
|
+
i18n: {
|
|
121
|
+
'zh-CN': '中文',
|
|
122
|
+
'en-US': 'English',
|
|
123
|
+
},
|
|
124
|
+
currentVersion: 'v1.x',
|
|
125
|
+
versions: [],
|
|
126
|
+
github: 'https://github.com/loca-spirit/maple-design-mobile',
|
|
127
|
+
changelog: 'https://github.com/loca-spirit/maple-design-mobile/blob/main/CHANGELOG.md',
|
|
128
|
+
playground: 'https://maplejs.org/playground',
|
|
129
|
+
themes: [
|
|
130
|
+
{ 'zh-CN': '默认亮色', 'en-US': 'Default Light', value: 'lightTheme' },
|
|
131
|
+
{ 'zh-CN': '默认暗色', 'en-US': 'Default Dark', value: 'darkTheme' },
|
|
132
|
+
{ 'zh-CN': '枫叶亮色', 'en-US': 'Maple Light', value: 'mapleLightTheme' },
|
|
133
|
+
{ 'zh-CN': '枫叶暗色', 'en-US': 'Maple Dark', value: 'mapleDarkTheme' },
|
|
134
|
+
{ 'zh-CN': 'Alps 乐道', 'en-US': 'Alps Light', value: 'alpsLightTheme' },
|
|
135
|
+
{ 'zh-CN': 'Firefly 萤火虫', 'en-US': 'Firefly Light', value: 'fireflyLightTheme' },
|
|
136
|
+
{ 'zh-CN': 'Alps 乐道暗色', 'en-US': 'Alps Dark', value: 'alpsDarkTheme' },
|
|
137
|
+
{ 'zh-CN': 'Firefly 萤火虫暗色', 'en-US': 'Firefly Dark', value: 'fireflyDarkTheme' },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
clipboard: {
|
|
141
|
+
'zh-CN': '代码已复制到剪切板',
|
|
142
|
+
'en-US': 'The code has been copied to the clipboard',
|
|
143
|
+
},
|
|
144
|
+
fold: {
|
|
145
|
+
defaultFold: false,
|
|
146
|
+
foldHeight: 0,
|
|
147
|
+
},
|
|
148
|
+
htmlInject: {
|
|
149
|
+
head: [],
|
|
150
|
+
body: [],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
mobile: {
|
|
154
|
+
title: {
|
|
155
|
+
'zh-CN': 'Maple Design Mobile · 与 Cedar 同构的移动端组件库',
|
|
156
|
+
'en-US': 'Maple Design Mobile · Cedar’s Mobile Counterpart',
|
|
157
|
+
},
|
|
158
|
+
redirect: '/home',
|
|
159
|
+
header: {
|
|
160
|
+
i18n: {
|
|
161
|
+
'zh-CN': '中文',
|
|
162
|
+
'en-US': 'English',
|
|
163
|
+
},
|
|
164
|
+
github: 'https://github.com/loca-spirit/maple-design-mobile',
|
|
165
|
+
themes: [
|
|
166
|
+
{ 'zh-CN': '默认亮色', 'en-US': 'Default Light', value: 'lightTheme' },
|
|
167
|
+
{ 'zh-CN': '默认暗色', 'en-US': 'Default Dark', value: 'darkTheme' },
|
|
168
|
+
{ 'zh-CN': '枫叶亮色', 'en-US': 'Maple Light', value: 'mapleLightTheme' },
|
|
169
|
+
{ 'zh-CN': '枫叶暗色', 'en-US': 'Maple Dark', value: 'mapleDarkTheme' },
|
|
170
|
+
{ 'zh-CN': 'Alps 乐道', 'en-US': 'Alps Light', value: 'alpsLightTheme' },
|
|
171
|
+
{ 'zh-CN': 'Firefly 萤火虫', 'en-US': 'Firefly Light', value: 'fireflyLightTheme' },
|
|
172
|
+
{ 'zh-CN': 'Alps 乐道暗色', 'en-US': 'Alps Dark', value: 'alpsDarkTheme' },
|
|
173
|
+
{ 'zh-CN': 'Firefly 萤火虫暗色', 'en-US': 'Firefly Dark', value: 'fireflyDarkTheme' },
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
htmlInject: {
|
|
177
|
+
head: [],
|
|
178
|
+
body: [],
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
seo: {
|
|
182
|
+
title: 'Maple Design Mobile · Cedar’s Mobile Counterpart',
|
|
183
|
+
description: 'Maple Design Mobile is a mobile component library built with Vue 3 and TypeScript, maintained by 孟帅 and 吴甲明. It shares semantic tokens and component API conventions with Cedar Design Web and supports on-demand imports, theming and internationalization.',
|
|
184
|
+
keywords: [
|
|
185
|
+
'Maple Design Mobile',
|
|
186
|
+
'Cedar Design Web',
|
|
187
|
+
'Vue 3',
|
|
188
|
+
'TypeScript',
|
|
189
|
+
'移动端组件库',
|
|
190
|
+
'语义 Token',
|
|
191
|
+
'主题定制',
|
|
192
|
+
].join(','),
|
|
193
|
+
},
|
|
194
|
+
lightTheme: {
|
|
195
|
+
'color-body': '#fff',
|
|
196
|
+
'color-index-page-background': '#fff',
|
|
197
|
+
'color-index-page-feature-background': '#fff',
|
|
198
|
+
'color-index-page-logo-mask-background': 'linear-gradient(-45deg, #4ddada 50%, #84e0ff 50%)',
|
|
199
|
+
'color-index-page-second-text-color': 'rgba(60, 60, 60, .7)',
|
|
200
|
+
'color-index-page-divider-color': '#ddd',
|
|
201
|
+
'card-border-radius': '12px',
|
|
202
|
+
'code-example-border-radius': '8px',
|
|
203
|
+
'color-bar': '#fff',
|
|
204
|
+
'color-text': '#555',
|
|
205
|
+
'color-sub-text': '#888',
|
|
206
|
+
'color-border': 'rgba(0, 0, 0, 0.12)',
|
|
207
|
+
'color-shadow': '#eee',
|
|
208
|
+
'color-introduce-border': '#00bebe',
|
|
209
|
+
'color-primary': '#00bebe',
|
|
210
|
+
'color-link': '#00c48f',
|
|
211
|
+
'color-type': '#00c48f',
|
|
212
|
+
'color-loading-bar': '#00bebe',
|
|
213
|
+
'color-side-bar': '#00bebe',
|
|
214
|
+
'color-side-bar-active-background': '#00bebe1a',
|
|
215
|
+
'color-app-bar': '#00bebe',
|
|
216
|
+
'color-nav-button-hover-background': 'rgba(0, 0, 0, 0.08)',
|
|
217
|
+
'color-mobile-cell-hover': '#00bebe',
|
|
218
|
+
'color-pc-language-active': '#00bebe',
|
|
219
|
+
'color-pc-language-active-background': '#e6fafa',
|
|
220
|
+
'color-mobile-language-active': '#00bebe',
|
|
221
|
+
'color-mobile-language-active-background': '#e6fafa',
|
|
222
|
+
'color-pc-theme-active': '#00bebe',
|
|
223
|
+
'color-pc-theme-active-background': '#e6fafa',
|
|
224
|
+
'color-mobile-theme-active': '#00bebe',
|
|
225
|
+
'color-mobile-theme-active-background': '#e6fafa',
|
|
226
|
+
'color-mobile-body': '#fff',
|
|
227
|
+
'color-hl-background': '#fafafa',
|
|
228
|
+
'color-hl-code': '#58727e',
|
|
229
|
+
'color-hl-border': '#f3f3f3',
|
|
230
|
+
'color-hl-group-a': '#7c7c7c',
|
|
231
|
+
'color-hl-group-b': '#00bebe',
|
|
232
|
+
'color-hl-group-c': '#ff9422',
|
|
233
|
+
'color-hl-group-d': '#58c193',
|
|
234
|
+
'color-hl-group-e': '#ff9422',
|
|
235
|
+
'color-hl-group-f': '#ff9422',
|
|
236
|
+
'color-hl-group-g': '#ff9422',
|
|
237
|
+
'color-hl-group-h': '#06a6e9',
|
|
238
|
+
'color-hl-group-i': '#00bebe',
|
|
239
|
+
},
|
|
240
|
+
darkTheme: {
|
|
241
|
+
'color-body': '#121212',
|
|
242
|
+
'color-index-page-background': '#1e1e1e',
|
|
243
|
+
'color-index-page-feature-background': '#303030',
|
|
244
|
+
'color-index-page-logo-mask-background': 'linear-gradient(-45deg, #4ddada 50%, #00bebe 50%)',
|
|
245
|
+
'color-index-page-second-text-color': 'rgba(255, 255, 255, .75)',
|
|
246
|
+
'color-index-page-divider-color': 'rgba(84, 84, 84, .8)',
|
|
247
|
+
'card-border-radius': '12px',
|
|
248
|
+
'code-example-border-radius': '8px',
|
|
249
|
+
'color-bar': '#1e1e1e',
|
|
250
|
+
'color-text': '#fff',
|
|
251
|
+
'color-sub-text': '#aaa',
|
|
252
|
+
'color-border': '#333',
|
|
253
|
+
'color-shadow': '#121212',
|
|
254
|
+
'color-introduce-border': '#4ddada',
|
|
255
|
+
'color-primary': '#4ddada',
|
|
256
|
+
'color-link': '#A8FFC4',
|
|
257
|
+
'color-type': '#A8FFC4',
|
|
258
|
+
'color-loading-bar': '#00bebe',
|
|
259
|
+
'color-side-bar': '#4ddada',
|
|
260
|
+
'color-side-bar-active-background': '#00bebe1a',
|
|
261
|
+
'color-app-bar': '#272727',
|
|
262
|
+
'color-nav-button-hover-background': 'rgba(255, 255, 255, 0.08)',
|
|
263
|
+
'color-mobile-cell-hover': '#4ddada',
|
|
264
|
+
'color-pc-language-active': '#4ddada',
|
|
265
|
+
'color-pc-language-active-background': '#00bebe20',
|
|
266
|
+
'color-mobile-language-active': '#4ddada',
|
|
267
|
+
'color-mobile-language-active-background': '#00bebe20',
|
|
268
|
+
'color-pc-theme-active': '#4ddada',
|
|
269
|
+
'color-pc-theme-active-background': '#00bebe20',
|
|
270
|
+
'color-mobile-theme-active': '#4ddada',
|
|
271
|
+
'color-mobile-theme-active-background': '#00bebe20',
|
|
272
|
+
'color-mobile-body': '#1e1e1e',
|
|
273
|
+
'color-hl-background': '#272727',
|
|
274
|
+
'color-hl-code': '#fff',
|
|
275
|
+
'color-hl-border': '#272727',
|
|
276
|
+
'color-hl-group-a': '#7c7c7c',
|
|
277
|
+
'color-hl-group-b': '#4ddada',
|
|
278
|
+
'color-hl-group-c': '#ff7b1e',
|
|
279
|
+
'color-hl-group-d': '#A8FFC4',
|
|
280
|
+
'color-hl-group-e': '#ff7b1e',
|
|
281
|
+
'color-hl-group-f': '#ff7b1e',
|
|
282
|
+
'color-hl-group-g': '#ff7b1e',
|
|
283
|
+
'color-hl-group-h': '#14a6e9',
|
|
284
|
+
'color-hl-group-i': '#4ddada',
|
|
285
|
+
},
|
|
286
|
+
mapleLightTheme: {
|
|
287
|
+
'color-body': '#fff',
|
|
288
|
+
'color-index-page-background': '#fff',
|
|
289
|
+
'color-index-page-feature-background': '#fff',
|
|
290
|
+
'color-index-page-logo-mask-background': 'linear-gradient(-45deg, #fb923c 50%, #fdba74 50%)',
|
|
291
|
+
'color-index-page-second-text-color': 'rgba(60, 60, 60, .7)',
|
|
292
|
+
'color-index-page-divider-color': '#ddd',
|
|
293
|
+
'card-border-radius': '12px',
|
|
294
|
+
'code-example-border-radius': '8px',
|
|
295
|
+
'color-bar': '#fff',
|
|
296
|
+
'color-text': '#555',
|
|
297
|
+
'color-sub-text': '#888',
|
|
298
|
+
'color-border': 'rgba(0, 0, 0, 0.12)',
|
|
299
|
+
'color-shadow': '#eee',
|
|
300
|
+
'color-introduce-border': '#c2410c',
|
|
301
|
+
'color-primary': '#c2410c',
|
|
302
|
+
'color-link': '#9a3412',
|
|
303
|
+
'color-type': '#9a3412',
|
|
304
|
+
'color-loading-bar': '#c2410c',
|
|
305
|
+
'color-side-bar': '#c2410c',
|
|
306
|
+
'color-side-bar-active-background': '#fff7ed',
|
|
307
|
+
'color-app-bar': '#c2410c',
|
|
308
|
+
'color-nav-button-hover-background': 'rgba(0, 0, 0, 0.08)',
|
|
309
|
+
'color-mobile-cell-hover': '#c2410c',
|
|
310
|
+
'color-pc-language-active': '#c2410c',
|
|
311
|
+
'color-pc-language-active-background': '#fff7ed',
|
|
312
|
+
'color-mobile-language-active': '#c2410c',
|
|
313
|
+
'color-mobile-language-active-background': '#fff7ed',
|
|
314
|
+
'color-pc-theme-active': '#c2410c',
|
|
315
|
+
'color-pc-theme-active-background': '#fff7ed',
|
|
316
|
+
'color-mobile-theme-active': '#c2410c',
|
|
317
|
+
'color-mobile-theme-active-background': '#fff7ed',
|
|
318
|
+
'color-mobile-body': '#fff7ed',
|
|
319
|
+
'color-hl-background': '#fafafa',
|
|
320
|
+
'color-hl-code': '#58727e',
|
|
321
|
+
'color-hl-border': '#f3f3f3',
|
|
322
|
+
'color-hl-group-a': '#7c7c7c',
|
|
323
|
+
'color-hl-group-b': '#c2410c',
|
|
324
|
+
'color-hl-group-c': '#7D5260',
|
|
325
|
+
'color-hl-group-d': '#B3261E',
|
|
326
|
+
'color-hl-group-e': '#7D5260',
|
|
327
|
+
'color-hl-group-f': '#7D5260',
|
|
328
|
+
'color-hl-group-g': '#7D5260',
|
|
329
|
+
'color-hl-group-h': '#9a3412',
|
|
330
|
+
'color-hl-group-i': '#9a3412',
|
|
331
|
+
},
|
|
332
|
+
mapleDarkTheme: {
|
|
333
|
+
'color-body': '#050505',
|
|
334
|
+
'color-index-page-background': '#1e1e1e',
|
|
335
|
+
'color-index-page-feature-background': '#303030',
|
|
336
|
+
'color-index-page-logo-mask-background': 'linear-gradient(-45deg, #fb923c 50%, #c2410c 50%)',
|
|
337
|
+
'color-index-page-second-text-color': 'rgba(255, 255, 255, .75)',
|
|
338
|
+
'color-index-page-divider-color': 'rgba(84, 84, 84, .8)',
|
|
339
|
+
'card-border-radius': '12px',
|
|
340
|
+
'code-example-border-radius': '8px',
|
|
341
|
+
'color-bar': '#1e1e1e',
|
|
342
|
+
'color-text': '#fff',
|
|
343
|
+
'color-sub-text': '#aaa',
|
|
344
|
+
'color-border': '#333',
|
|
345
|
+
'color-shadow': '#090909',
|
|
346
|
+
'color-introduce-border': '#fb923c',
|
|
347
|
+
'color-primary': '#fb923c',
|
|
348
|
+
'color-link': '#fdba74',
|
|
349
|
+
'color-type': '#fdba74',
|
|
350
|
+
'color-loading-bar': '#fb923c',
|
|
351
|
+
'color-side-bar': '#fb923c',
|
|
352
|
+
'color-side-bar-active-background': '#431407',
|
|
353
|
+
'color-app-bar': '#24140f',
|
|
354
|
+
'color-nav-button-hover-background': 'rgba(255, 255, 255, 0.08)',
|
|
355
|
+
'color-mobile-cell-hover': '#fb923c',
|
|
356
|
+
'color-pc-language-active': '#fb923c',
|
|
357
|
+
'color-pc-language-active-background': '#431407',
|
|
358
|
+
'color-mobile-language-active': '#fb923c',
|
|
359
|
+
'color-mobile-language-active-background': '#431407',
|
|
360
|
+
'color-pc-theme-active': '#fb923c',
|
|
361
|
+
'color-pc-theme-active-background': '#431407',
|
|
362
|
+
'color-mobile-theme-active': '#fb923c',
|
|
363
|
+
'color-mobile-theme-active-background': '#431407',
|
|
364
|
+
'color-mobile-body': '#1c0f0a',
|
|
365
|
+
'color-hl-background': '#272727',
|
|
366
|
+
'color-hl-code': '#fff',
|
|
367
|
+
'color-hl-border': '#272727',
|
|
368
|
+
'color-hl-group-a': '#7c7c7c',
|
|
369
|
+
'color-hl-group-b': '#fb923c',
|
|
370
|
+
'color-hl-group-c': '#EFB8C8',
|
|
371
|
+
'color-hl-group-d': '#F2B8B5',
|
|
372
|
+
'color-hl-group-e': '#EFB8C8',
|
|
373
|
+
'color-hl-group-f': '#EFB8C8',
|
|
374
|
+
'color-hl-group-g': '#EFB8C8',
|
|
375
|
+
'color-hl-group-h': '#fdba74',
|
|
376
|
+
'color-hl-group-i': '#fdba74',
|
|
377
|
+
},
|
|
378
|
+
icons: {
|
|
379
|
+
entry: 'packages/icons/svg',
|
|
380
|
+
output: 'packages/icons/src',
|
|
381
|
+
},
|
|
382
|
+
esbuild: {
|
|
383
|
+
target: 'es2016',
|
|
384
|
+
},
|
|
385
|
+
directives: [],
|
|
386
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type MapleResolverOptions } from '@maple-design/resolver-vue';
|
|
2
|
+
import type { Plugin } from 'vite';
|
|
3
|
+
/** Browser dev must not depend on directories removed by a parallel package build. */
|
|
4
|
+
export declare function getWorkspaceSourceAliases(sourceDir: string): {
|
|
5
|
+
find: RegExp;
|
|
6
|
+
replacement: string;
|
|
7
|
+
}[];
|
|
8
|
+
export declare function getSiteComponentExcludes(sourceDir: string): RegExp[];
|
|
9
|
+
export declare function createSiteResolver(sourceDir: string, options?: MapleResolverOptions): ({
|
|
10
|
+
resolve(name: string): {
|
|
11
|
+
from: string;
|
|
12
|
+
name: string;
|
|
13
|
+
sideEffects: string[] | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
type: "component";
|
|
16
|
+
} | {
|
|
17
|
+
resolve(name: string): {
|
|
18
|
+
from: string;
|
|
19
|
+
name: string;
|
|
20
|
+
sideEffects: string[] | undefined;
|
|
21
|
+
} | undefined;
|
|
22
|
+
type: "directive";
|
|
23
|
+
})[];
|
|
24
|
+
/** Keep demo root imports authored as-is; route direct re-exports after style injection. */
|
|
25
|
+
export declare function createSiteImportPlugin(sourceDir: string): Plugin;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { MapleResolver } from '@maple-design/resolver-vue';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
/** Browser dev must not depend on directories removed by a parallel package build. */
|
|
6
|
+
export function getWorkspaceSourceAliases(sourceDir) {
|
|
7
|
+
return [
|
|
8
|
+
['@maple-design/shared-vue', 'shared/src/index.ts'],
|
|
9
|
+
['@maple-design/use-vue', 'use/src/index.ts'],
|
|
10
|
+
['@maple-design/cli-vue/client', 'cli/src/client/index.ts'],
|
|
11
|
+
].flatMap(([name, relative]) => {
|
|
12
|
+
const replacement = resolve(sourceDir, '../..', relative);
|
|
13
|
+
return existsSync(replacement) ? [{ find: new RegExp(`^${name}$`), replacement }] : [];
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Resolve documentation templates without re-entering the library barrel. */
|
|
17
|
+
function readPublicModules(sourceDir) {
|
|
18
|
+
const entry = resolve(sourceDir, 'index.ts');
|
|
19
|
+
const source = ts.createSourceFile(entry, readFileSync(entry, 'utf8'), ts.ScriptTarget.Latest, true);
|
|
20
|
+
const modules = new Map();
|
|
21
|
+
const aggregate = ts.createSourceFile('maple-vue.ts', readFileSync(resolve(sourceDir, 'maple-vue.ts'), 'utf8'), ts.ScriptTarget.Latest, true);
|
|
22
|
+
const defaults = new Map();
|
|
23
|
+
for (const statement of aggregate.statements) {
|
|
24
|
+
if (ts.isImportDeclaration(statement) &&
|
|
25
|
+
ts.isStringLiteral(statement.moduleSpecifier) &&
|
|
26
|
+
statement.importClause?.name) {
|
|
27
|
+
defaults.set(statement.importClause.name.text, resolve(sourceDir, statement.moduleSpecifier.text));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (const statement of source.statements) {
|
|
31
|
+
if (!ts.isExportDeclaration(statement) ||
|
|
32
|
+
statement.isTypeOnly ||
|
|
33
|
+
!statement.moduleSpecifier ||
|
|
34
|
+
!ts.isStringLiteral(statement.moduleSpecifier) ||
|
|
35
|
+
!statement.exportClause ||
|
|
36
|
+
!ts.isNamedExports(statement.exportClause)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
for (const item of statement.exportClause.elements) {
|
|
40
|
+
if (item.isTypeOnly) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const original = (item.propertyName ?? item.name).text;
|
|
44
|
+
if (statement.moduleSpecifier.text === './maple-vue') {
|
|
45
|
+
const from = defaults.get(original);
|
|
46
|
+
if (from) {
|
|
47
|
+
modules.set(item.name.text, { from, name: 'default' });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
modules.set(item.name.text, { from: resolve(sourceDir, statement.moduleSpecifier.text), name: original });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return modules;
|
|
56
|
+
}
|
|
57
|
+
export function getSiteComponentExcludes(sourceDir) {
|
|
58
|
+
const source = sourceDir.replace(/\\/g, '/').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
59
|
+
return [
|
|
60
|
+
/node_modules/,
|
|
61
|
+
new RegExp(`^(?:/@fs)?${source}/(?!(?:[^/]+/)*(?:example|examples|__demos__|docs)/).*\\.(?:vue|[cm]?[jt]sx?)(?:\\?|$)`),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
export function createSiteResolver(sourceDir, options = {}) {
|
|
65
|
+
const modules = readPublicModules(sourceDir);
|
|
66
|
+
return MapleResolver(options).map((resolver) => ({
|
|
67
|
+
...resolver,
|
|
68
|
+
resolve(name) {
|
|
69
|
+
const result = resolver.resolve(name);
|
|
70
|
+
if (result?.from !== '@maple-design/ui-vue') {
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
const target = modules.get(result.name);
|
|
74
|
+
if (!target) {
|
|
75
|
+
if (!result.name.startsWith('_') && result.name !== 'vLoading') {
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`[Maple docs] Missing public component export: ${result.name}`);
|
|
79
|
+
}
|
|
80
|
+
return { ...result, from: target.from, name: target.name };
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
/** Keep demo root imports authored as-is; route direct re-exports after style injection. */
|
|
85
|
+
export function createSiteImportPlugin(sourceDir) {
|
|
86
|
+
const modules = readPublicModules(sourceDir);
|
|
87
|
+
return {
|
|
88
|
+
name: 'maple:site-source-imports',
|
|
89
|
+
enforce: 'post',
|
|
90
|
+
transform(code, id) {
|
|
91
|
+
if (!/\.(?:[cm]?[jt]sx?|vue|md)(?:\?|$)/.test(id) || !code.includes('@maple-design/ui-vue')) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const source = ts.createSourceFile(id, code, ts.ScriptTarget.Latest, true);
|
|
95
|
+
const replacements = [];
|
|
96
|
+
for (const statement of source.statements) {
|
|
97
|
+
if (!ts.isImportDeclaration(statement) ||
|
|
98
|
+
!ts.isStringLiteral(statement.moduleSpecifier) ||
|
|
99
|
+
statement.moduleSpecifier.text !== '@maple-design/ui-vue' ||
|
|
100
|
+
!statement.importClause ||
|
|
101
|
+
statement.importClause.isTypeOnly ||
|
|
102
|
+
statement.importClause.name ||
|
|
103
|
+
!statement.importClause.namedBindings ||
|
|
104
|
+
!ts.isNamedImports(statement.importClause.namedBindings)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const items = statement.importClause.namedBindings.elements;
|
|
108
|
+
if (items.some((item) => item.isTypeOnly)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const targets = items.map((item) => modules.get((item.propertyName ?? item.name).text));
|
|
112
|
+
if (!targets.length || targets.some((target) => !target)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
replacements.push({
|
|
116
|
+
start: statement.getStart(source),
|
|
117
|
+
end: statement.end,
|
|
118
|
+
value: items
|
|
119
|
+
.map((item, index) => {
|
|
120
|
+
const target = targets[index];
|
|
121
|
+
const local = item.name.text;
|
|
122
|
+
const specifier = target.name === local ? local : `${target.name} as ${local}`;
|
|
123
|
+
return `import { ${specifier} } from ${JSON.stringify(target.from.replaceAll('\\', '/'))};`;
|
|
124
|
+
})
|
|
125
|
+
.join('\n'),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (!replacements.length) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
let result = code;
|
|
132
|
+
for (const replacement of replacements.reverse()) {
|
|
133
|
+
result = result.slice(0, replacement.start) + replacement.value + result.slice(replacement.end);
|
|
134
|
+
}
|
|
135
|
+
return { code: result, map: null };
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InlineConfig, Plugin } from 'vite';
|
|
2
|
+
import { MapleConfig, type MapleConfigHtmlInject } from './maple.config.js';
|
|
3
|
+
export declare function getHtmlInject(inject: MapleConfigHtmlInject): {
|
|
4
|
+
head: {
|
|
5
|
+
start: (string | undefined)[];
|
|
6
|
+
end: (string | undefined)[];
|
|
7
|
+
scriptStart: (string | undefined)[];
|
|
8
|
+
};
|
|
9
|
+
body: {
|
|
10
|
+
start: (string | undefined)[];
|
|
11
|
+
end: (string | undefined)[];
|
|
12
|
+
scriptStart: (string | undefined)[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare function getPlugins(mapleConfig: Required<MapleConfig>): Plugin[];
|
|
16
|
+
export declare function getDevConfig(mapleConfig: Required<MapleConfig>): InlineConfig;
|
|
17
|
+
export declare function getBuildConfig(mapleConfig: Required<MapleConfig>): InlineConfig;
|
|
18
|
+
export interface BundleBuildOptions {
|
|
19
|
+
fileName: string;
|
|
20
|
+
cssFileName: string;
|
|
21
|
+
output: string;
|
|
22
|
+
format: 'es' | 'cjs' | 'umd';
|
|
23
|
+
removeEnv: boolean;
|
|
24
|
+
emptyOutDir: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function getBundleConfig(mapleConfig: Required<MapleConfig>, buildOptions: BundleBuildOptions): InlineConfig;
|
|
27
|
+
export type ExtensionMode = 'dev' | 'build';
|
|
28
|
+
export declare function getExtensionConfig(mode: ExtensionMode): InlineConfig;
|