@hobui/viui-cli 0.0.5 → 0.0.7
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 +138 -139
- package/dist/adapters/adapter-registry.d.ts +12 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +49 -0
- package/dist/adapters/adapter-types.d.ts +20 -0
- package/dist/adapters/adapter-types.d.ts.map +1 -0
- package/dist/adapters/adapter-types.js +1 -0
- package/dist/adapters/aider-adapter.d.ts +3 -0
- package/dist/adapters/aider-adapter.d.ts.map +1 -0
- package/dist/adapters/aider-adapter.js +8 -0
- package/dist/adapters/claude-adapter.d.ts +3 -0
- package/dist/adapters/claude-adapter.d.ts.map +1 -0
- package/dist/adapters/claude-adapter.js +15 -0
- package/dist/adapters/cline-adapter.d.ts +3 -0
- package/dist/adapters/cline-adapter.d.ts.map +1 -0
- package/dist/adapters/cline-adapter.js +8 -0
- package/dist/adapters/copilot-adapter.d.ts +5 -0
- package/dist/adapters/copilot-adapter.d.ts.map +1 -0
- package/dist/adapters/copilot-adapter.js +20 -0
- package/dist/adapters/cursor-adapter.d.ts +3 -0
- package/dist/adapters/cursor-adapter.d.ts.map +1 -0
- package/dist/adapters/cursor-adapter.js +18 -0
- package/dist/adapters/external/bolt-adapter.d.ts +3 -0
- package/dist/adapters/external/bolt-adapter.d.ts.map +1 -0
- package/dist/adapters/external/bolt-adapter.js +15 -0
- package/dist/adapters/external/chatgpt-adapter.d.ts +3 -0
- package/dist/adapters/external/chatgpt-adapter.d.ts.map +1 -0
- package/dist/adapters/external/chatgpt-adapter.js +14 -0
- package/dist/adapters/external/external-adapter-base.d.ts +15 -0
- package/dist/adapters/external/external-adapter-base.d.ts.map +1 -0
- package/dist/adapters/external/external-adapter-base.js +92 -0
- package/dist/adapters/external/gemini-adapter.d.ts +3 -0
- package/dist/adapters/external/gemini-adapter.d.ts.map +1 -0
- package/dist/adapters/external/gemini-adapter.js +14 -0
- package/dist/adapters/external/lovable-adapter.d.ts +3 -0
- package/dist/adapters/external/lovable-adapter.d.ts.map +1 -0
- package/dist/adapters/external/lovable-adapter.js +14 -0
- package/dist/adapters/external/v0-adapter.d.ts +3 -0
- package/dist/adapters/external/v0-adapter.d.ts.map +1 -0
- package/dist/adapters/external/v0-adapter.js +15 -0
- package/dist/adapters/windsurf-adapter.d.ts +3 -0
- package/dist/adapters/windsurf-adapter.d.ts.map +1 -0
- package/dist/adapters/windsurf-adapter.js +23 -0
- package/dist/assets/plugins/viui-conf/apply-theme-body.ts +23 -4
- package/dist/assets/plugins/viui-conf/defaults/README.md +2 -0
- package/dist/assets/plugins/viui-conf/defaults/app-bar.ts +1 -1
- package/dist/assets/plugins/viui-conf/defaults/buttons.ts +1 -1
- package/dist/assets/plugins/viui-conf/defaults/by-theme/minimalist-2.ts +1 -1
- package/dist/assets/plugins/viui-conf/defaults/cards.ts +1 -1
- package/dist/assets/plugins/viui-conf/defaults/expansion-panels.ts +16 -0
- package/dist/assets/plugins/viui-conf/defaults/index.ts +3 -0
- package/dist/assets/plugins/viui-conf/defaults/inputs.ts +11 -1
- package/dist/assets/plugins/viui-conf/design-tokens.ts +135 -0
- package/dist/assets/plugins/viui-conf/theme-base.ts +1 -1
- package/dist/assets/plugins/viui-conf/v-dark.ts +3 -5
- package/dist/assets/plugins/viui-conf/v-light.ts +3 -5
- package/dist/assets/plugins/vuetify.ts +36 -0
- package/dist/assets/prompt-data/components.json +106 -0
- package/dist/assets/prompt-data/tokens.json +83 -0
- package/dist/assets/themes/_bento-grid.scss +8 -0
- package/dist/assets/themes/_glassmorphism.scss +8 -0
- package/dist/assets/themes/_material.scss +8 -0
- package/dist/assets/themes/_minimalist-2.scss +375 -0
- package/dist/assets/themes/_minimalist.scss +9 -0
- package/dist/assets/themes/_neo-brutalism.scss +199 -0
- package/dist/assets/themes/bento-grid.scss +4 -0
- package/dist/assets/themes/glassmorphism.scss +4 -0
- package/dist/assets/themes/index.scss +11 -0
- package/dist/assets/themes/material.scss +4 -0
- package/dist/assets/themes/minimalist-2.scss +5 -0
- package/dist/assets/themes/minimalist.scss +4 -0
- package/dist/assets/themes/neo-brutalism.scss +5 -0
- package/dist/assets/viui-themes/_neo-brutalism.scss +70 -152
- package/dist/cli-paths.d.ts +7 -0
- package/dist/cli-paths.d.ts.map +1 -0
- package/dist/cli-paths.js +19 -0
- package/dist/cli.js +28 -450
- package/dist/cli.legacy.d.ts +3 -0
- package/dist/cli.legacy.d.ts.map +1 -0
- package/dist/cli.legacy.js +597 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +152 -0
- package/dist/commands/config/config-export.d.ts +6 -0
- package/dist/commands/config/config-export.d.ts.map +1 -0
- package/dist/commands/config/config-export.js +23 -0
- package/dist/commands/config/config-health.d.ts +6 -0
- package/dist/commands/config/config-health.d.ts.map +1 -0
- package/dist/commands/config/config-health.js +42 -0
- package/dist/commands/config/config-import.d.ts +6 -0
- package/dist/commands/config/config-import.d.ts.map +1 -0
- package/dist/commands/config/config-import.js +63 -0
- package/dist/commands/config/config-rollback.d.ts +6 -0
- package/dist/commands/config/config-rollback.d.ts.map +1 -0
- package/dist/commands/config/config-rollback.js +47 -0
- package/dist/commands/config/config-setup.d.ts +6 -0
- package/dist/commands/config/config-setup.d.ts.map +1 -0
- package/dist/commands/config/config-setup.js +103 -0
- package/dist/commands/config/config-status.d.ts +6 -0
- package/dist/commands/config/config-status.d.ts.map +1 -0
- package/dist/commands/config/config-status.js +42 -0
- package/dist/commands/config/config-uninstall.d.ts +6 -0
- package/dist/commands/config/config-uninstall.d.ts.map +1 -0
- package/dist/commands/config/config-uninstall.js +74 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +19 -0
- package/dist/commands/docs.d.ts +3 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +17 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +93 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +183 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +73 -0
- package/dist/commands/theme.d.ts +3 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +86 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +97 -0
- package/dist/prompts/prompt-builder.d.ts +4 -0
- package/dist/prompts/prompt-builder.d.ts.map +1 -0
- package/dist/prompts/prompt-builder.js +18 -0
- package/dist/prompts/prompt-data-loader.d.ts +11 -0
- package/dist/prompts/prompt-data-loader.d.ts.map +1 -0
- package/dist/prompts/prompt-data-loader.js +15 -0
- package/dist/prompts/prompt-sections/section-code-examples.d.ts +2 -0
- package/dist/prompts/prompt-sections/section-code-examples.d.ts.map +1 -0
- package/dist/prompts/prompt-sections/section-code-examples.js +36 -0
- package/dist/prompts/prompt-sections/section-color-tokens.d.ts +2 -0
- package/dist/prompts/prompt-sections/section-color-tokens.d.ts.map +1 -0
- package/dist/prompts/prompt-sections/section-color-tokens.js +19 -0
- package/dist/prompts/prompt-sections/section-component-map.d.ts +3 -0
- package/dist/prompts/prompt-sections/section-component-map.d.ts.map +1 -0
- package/dist/prompts/prompt-sections/section-component-map.js +12 -0
- package/dist/prompts/prompt-sections/section-typography-spacing.d.ts +2 -0
- package/dist/prompts/prompt-sections/section-typography-spacing.d.ts.map +1 -0
- package/dist/prompts/prompt-sections/section-typography-spacing.js +29 -0
- package/dist/services/backup-service.d.ts +7 -0
- package/dist/services/backup-service.d.ts.map +1 -0
- package/dist/services/backup-service.js +54 -0
- package/dist/services/config-service.d.ts +17 -0
- package/dist/services/config-service.d.ts.map +1 -0
- package/dist/services/config-service.js +64 -0
- package/dist/services/diff-engine.d.ts +13 -0
- package/dist/services/diff-engine.d.ts.map +1 -0
- package/dist/services/diff-engine.js +59 -0
- package/dist/services/ide-detector.d.ts +9 -0
- package/dist/services/ide-detector.d.ts.map +1 -0
- package/dist/services/ide-detector.js +113 -0
- package/dist/services/ide-detector.spec.d.ts +2 -0
- package/dist/services/ide-detector.spec.d.ts.map +1 -0
- package/dist/services/ide-detector.spec.js +108 -0
- package/dist/services/lock-file-service.d.ts +15 -0
- package/dist/services/lock-file-service.d.ts.map +1 -0
- package/dist/services/lock-file-service.js +74 -0
- package/dist/services/mcp-config-reader.d.ts +11 -0
- package/dist/services/mcp-config-reader.d.ts.map +1 -0
- package/dist/services/mcp-config-reader.js +40 -0
- package/dist/services/mcp-config-reader.spec.d.ts +2 -0
- package/dist/services/mcp-config-reader.spec.d.ts.map +1 -0
- package/dist/services/mcp-config-reader.spec.js +125 -0
- package/dist/services/mcp-config-writer.d.ts +11 -0
- package/dist/services/mcp-config-writer.d.ts.map +1 -0
- package/dist/services/mcp-config-writer.js +98 -0
- package/dist/services/mcp-config-writer.spec.d.ts +2 -0
- package/dist/services/mcp-config-writer.spec.d.ts.map +1 -0
- package/dist/services/mcp-config-writer.spec.js +162 -0
- package/dist/services/merge-engine.d.ts +12 -0
- package/dist/services/merge-engine.d.ts.map +1 -0
- package/dist/services/merge-engine.js +54 -0
- package/dist/services/vuetify-scaffold-service.d.ts +5 -0
- package/dist/services/vuetify-scaffold-service.d.ts.map +1 -0
- package/dist/services/vuetify-scaffold-service.js +67 -0
- package/dist/templates/vuetify-plugin.d.ts +90 -0
- package/dist/templates/vuetify-plugin.d.ts.map +1 -0
- package/dist/templates/vuetify-plugin.js +33 -0
- package/dist/types/command-types.d.ts +15 -0
- package/dist/types/command-types.d.ts.map +1 -0
- package/dist/types/command-types.js +2 -0
- package/dist/types/config-types.d.ts +29 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +10 -0
- package/dist/types/ide-types.d.ts +29 -0
- package/dist/types/ide-types.d.ts.map +1 -0
- package/dist/types/ide-types.js +4 -0
- package/dist/types/lock-file-types.d.ts +27 -0
- package/dist/types/lock-file-types.d.ts.map +1 -0
- package/dist/types/lock-file-types.js +2 -0
- package/dist/utils/diff-display.d.ts +18 -0
- package/dist/utils/diff-display.d.ts.map +1 -0
- package/dist/utils/diff-display.js +61 -0
- package/dist/utils/fs-safe.d.ts +9 -0
- package/dist/utils/fs-safe.d.ts.map +1 -0
- package/dist/utils/fs-safe.js +44 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/open-browser.d.ts +3 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +13 -0
- package/package.json +11 -6
- package/dist/assets/cursor/.design-system-version +0 -1
- package/dist/assets/cursor/commands/audit-accessibility.md +0 -25
- package/dist/assets/cursor/commands/audit-ui.md +0 -35
- package/dist/assets/cursor/commands/component.md +0 -18
- package/dist/assets/cursor/commands/fix-storybook.md +0 -24
- package/dist/assets/cursor/commands/generate-component-from-figma.md +0 -26
- package/dist/assets/cursor/commands/generate-page-from-figma.md +0 -26
- package/dist/assets/cursor/plans/DESIGN_SYSTEM_PLAN.md +0 -177
- package/dist/assets/cursor/plans/PLANS_INDEX.md +0 -35
- package/dist/assets/cursor/rules/accessibility-contrast.mdc +0 -38
- package/dist/assets/cursor/rules/bem-class-style.mdc +0 -107
- package/dist/assets/cursor/rules/component-naming.mdc +0 -57
- package/dist/assets/cursor/rules/design-system-component-library.mdc +0 -59
- package/dist/assets/cursor/rules/design-system-workflow.mdc +0 -48
- package/dist/assets/cursor/rules/figma-mapping.mdc +0 -37
- package/dist/assets/cursor/rules/icons.mdc +0 -42
- package/dist/assets/cursor/rules/project-structure.mdc +0 -137
- package/dist/assets/cursor/rules/storybook-component-template.mdc +0 -103
- package/dist/assets/cursor/rules/storybook.mdc +0 -68
- package/dist/assets/cursor/rules/tokens.mdc +0 -32
- package/dist/assets/cursor/rules/viui-themes.mdc +0 -53
- package/dist/assets/cursor/rules/vuetify-layout.mdc +0 -52
- package/dist/assets/cursor/skills/accessibility.md +0 -75
- package/dist/assets/cursor/skills/design-system-thinking.md +0 -40
- package/dist/assets/cursor/skills/figma-interpretation.md +0 -38
- package/dist/assets/cursor/skills/vue-vuetify-design-system-architect.md +0 -60
- package/dist/assets/cursor/sync-manifest.json +0 -6
- package/dist/assets/viui-themes/bento-grid-global.scss +0 -5
- package/dist/assets/viui-themes/glassmorphism-global.scss +0 -5
- package/dist/assets/viui-themes/material-global.scss +0 -5
- package/dist/assets/viui-themes/minimalist-2-global.scss +0 -5
- package/dist/assets/viui-themes/minimalist-global.scss +0 -5
- package/dist/assets/viui-themes/neo-brutalism-global.scss +0 -5
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Strip import lines referencing internal paths */
|
|
2
|
+
export function stripImportPaths(md) {
|
|
3
|
+
return md.replace(/^.*import\s+.*from\s+['"]@[/'].*['"].*$/gm, '')
|
|
4
|
+
.replace(/^\s*[-*]\s*(Design System repo|Consumer app|Tokens):.*@.*$/gm, '')
|
|
5
|
+
.replace(/^\s*[-*]\s*Import path:?\s*$/gm, '');
|
|
6
|
+
}
|
|
7
|
+
/** Compact color table (12 rows) — extracted from COLORS_JSON */
|
|
8
|
+
export const COLORS_TABLE = `| Token | Light | Dark |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| primary | #024799 | #619ee9 |
|
|
11
|
+
| accent | #cc0e0e | #ed7b7b |
|
|
12
|
+
| neutral-bg | #F4F7FA | #0D1117 |
|
|
13
|
+
| neutral-text | #0F1E2D | #E6EDF3 |
|
|
14
|
+
| neutral-border | #D0DAE6 | #21262D |
|
|
15
|
+
| success | #0E9F6E | #34D399 |
|
|
16
|
+
| warning | #D47B0A | #FBBF24 |
|
|
17
|
+
| error | #B91C1C | #F87171 |
|
|
18
|
+
| info | #8abdef | #619ee9 |
|
|
19
|
+
| surface-bg | #FFFFFF | #121212 |
|
|
20
|
+
| surface-card | #FFFFFF | #2a2a2a |
|
|
21
|
+
| surface-elev | #FFFFFF | #1e1e1e |`;
|
|
22
|
+
/** CSS vars block for embedded use */
|
|
23
|
+
export const CSS_VARS_BLOCK = `:root {
|
|
24
|
+
--color-primary: #024799;
|
|
25
|
+
--color-accent: #cc0e0e;
|
|
26
|
+
--neutral-bg: #F4F7FA;
|
|
27
|
+
--neutral-text: #0F1E2D;
|
|
28
|
+
--neutral-border: #D0DAE6;
|
|
29
|
+
--color-success: #0E9F6E;
|
|
30
|
+
--color-warning: #D47B0A;
|
|
31
|
+
--color-error: #B91C1C;
|
|
32
|
+
--color-info: #8abdef;
|
|
33
|
+
}
|
|
34
|
+
.dark {
|
|
35
|
+
--color-primary: #619ee9;
|
|
36
|
+
--color-accent: #ed7b7b;
|
|
37
|
+
--neutral-bg: #0D1117;
|
|
38
|
+
--neutral-text: #E6EDF3;
|
|
39
|
+
--neutral-border: #21262D;
|
|
40
|
+
--color-success: #34D399;
|
|
41
|
+
--color-warning: #FBBF24;
|
|
42
|
+
--color-error: #F87171;
|
|
43
|
+
--color-info: #619ee9;
|
|
44
|
+
}`;
|
|
45
|
+
/** Tailwind extend config */
|
|
46
|
+
export const TAILWIND_CONFIG = `extend: {
|
|
47
|
+
colors: {
|
|
48
|
+
'primary': '#024799',
|
|
49
|
+
'accent': '#cc0e0e',
|
|
50
|
+
'neutral-bg': '#F4F7FA',
|
|
51
|
+
'neutral-text': '#0F1E2D',
|
|
52
|
+
'success': '#0E9F6E',
|
|
53
|
+
'warning': '#D47B0A',
|
|
54
|
+
'error': '#B91C1C',
|
|
55
|
+
'info': '#8abdef'
|
|
56
|
+
}
|
|
57
|
+
}`;
|
|
58
|
+
/** Replace full color JSON blob with a compact replacement */
|
|
59
|
+
export function replaceColorsWithFormat(md, replacement) {
|
|
60
|
+
return md.replace(/\{"colors":\{[^}]*(?:\{[^}]*\}[^}]*)*\}\}/g, replacement);
|
|
61
|
+
}
|
|
62
|
+
/** Vi* → shadcn component mapping */
|
|
63
|
+
const SHADCN_MAP = {
|
|
64
|
+
ViButton: '<Button>', ViCard: '<Card>', ViInput: '<Input>',
|
|
65
|
+
ViSelect: '<Select>', ViAlert: '<Alert>', ViDialog: '<Dialog>',
|
|
66
|
+
ViDataTable: '<Table>', ViChip: '<Badge>', ViAvatar: '<Avatar>',
|
|
67
|
+
ViCheckbox: '<Checkbox>', ViSwitch: '<Switch>', ViLoading: '<Skeleton>',
|
|
68
|
+
};
|
|
69
|
+
/** Vi* → HTML semantic mapping */
|
|
70
|
+
const HTML_MAP = {
|
|
71
|
+
ViButton: '<button>', ViCard: '<div class="card">', ViInput: '<input>',
|
|
72
|
+
ViSelect: '<select>', ViAlert: '<div role="alert">', ViDialog: '<dialog>',
|
|
73
|
+
ViDataTable: '<table>', ViChip: '<span class="badge">', ViAvatar: '<img>',
|
|
74
|
+
ViCheckbox: '<input type="checkbox">', ViSwitch: '<input type="checkbox" role="switch">',
|
|
75
|
+
};
|
|
76
|
+
/** Map Vi* component names to target equivalent */
|
|
77
|
+
export function mapComponents(md, target) {
|
|
78
|
+
const map = target === 'shadcn' ? SHADCN_MAP : HTML_MAP;
|
|
79
|
+
let result = md;
|
|
80
|
+
for (const [vi, replacement] of Object.entries(map)) {
|
|
81
|
+
result = result.replace(new RegExp(`\\b${vi}\\b`, 'g'), replacement);
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
/** Trim text to maxChars at last newline */
|
|
86
|
+
export function trimToLimit(text, maxChars) {
|
|
87
|
+
if (text.length <= maxChars)
|
|
88
|
+
return text;
|
|
89
|
+
const trimmed = text.slice(0, maxChars);
|
|
90
|
+
const lastNl = trimmed.lastIndexOf('\n');
|
|
91
|
+
return (lastNl > 0 ? trimmed.slice(0, lastNl) : trimmed) + '\n\n[truncated]';
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/external/gemini-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAA;AAGhE,eAAO,MAAM,aAAa,EAAE,SAY3B,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { stripImportPaths, replaceColorsWithFormat, CSS_VARS_BLOCK, trimToLimit } from './external-adapter-base.js';
|
|
2
|
+
export const geminiAdapter = {
|
|
3
|
+
name: 'Gemini',
|
|
4
|
+
category: 'external',
|
|
5
|
+
detectDirs: [],
|
|
6
|
+
outputPath: '.viui/prompts/gemini/design-system.txt',
|
|
7
|
+
maxChars: 6000,
|
|
8
|
+
transform(markdown, meta) {
|
|
9
|
+
let result = stripImportPaths(markdown);
|
|
10
|
+
result = replaceColorsWithFormat(result, CSS_VARS_BLOCK);
|
|
11
|
+
result = trimToLimit(result, 6000);
|
|
12
|
+
return `# iNET Design System (v${meta.version})\n\n` + result;
|
|
13
|
+
},
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lovable-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/external/lovable-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAA;AAGhE,eAAO,MAAM,cAAc,EAAE,SAY5B,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { stripImportPaths, replaceColorsWithFormat, TAILWIND_CONFIG, trimToLimit } from './external-adapter-base.js';
|
|
2
|
+
export const lovableAdapter = {
|
|
3
|
+
name: 'Lovable',
|
|
4
|
+
category: 'external',
|
|
5
|
+
detectDirs: [],
|
|
6
|
+
outputPath: '.viui/prompts/lovable/design-system.txt',
|
|
7
|
+
maxChars: 4000,
|
|
8
|
+
transform(markdown, meta) {
|
|
9
|
+
let result = stripImportPaths(markdown);
|
|
10
|
+
result = replaceColorsWithFormat(result, TAILWIND_CONFIG);
|
|
11
|
+
result = trimToLimit(result, 4000);
|
|
12
|
+
return `# iNET Design System (v${meta.version})\n\n` + result;
|
|
13
|
+
},
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v0-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/external/v0-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAA;AAGhE,eAAO,MAAM,SAAS,EAAE,SAavB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { stripImportPaths, replaceColorsWithFormat, TAILWIND_CONFIG, mapComponents, trimToLimit } from './external-adapter-base.js';
|
|
2
|
+
export const v0Adapter = {
|
|
3
|
+
name: 'v0',
|
|
4
|
+
category: 'external',
|
|
5
|
+
detectDirs: [],
|
|
6
|
+
outputPath: '.viui/prompts/v0/design-system.txt',
|
|
7
|
+
maxChars: 4000,
|
|
8
|
+
transform(markdown, meta) {
|
|
9
|
+
let result = stripImportPaths(markdown);
|
|
10
|
+
result = replaceColorsWithFormat(result, TAILWIND_CONFIG);
|
|
11
|
+
result = mapComponents(result, 'shadcn');
|
|
12
|
+
result = trimToLimit(result, 4000);
|
|
13
|
+
return `# iNET Design System (v${meta.version})\n\n` + result;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/windsurf-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAkBnD,eAAO,MAAM,eAAe,EAAE,SAQ7B,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Truncate markdown to fit within maxChars by removing sections from the end */
|
|
2
|
+
function truncateToFit(markdown, maxChars) {
|
|
3
|
+
if (markdown.length <= maxChars)
|
|
4
|
+
return markdown;
|
|
5
|
+
// Split into sections by ## headings
|
|
6
|
+
const sections = markdown.split(/(?=^## )/m);
|
|
7
|
+
let result = sections[0] ?? '';
|
|
8
|
+
for (let i = 1; i < sections.length; i++) {
|
|
9
|
+
if ((result + sections[i]).length > maxChars)
|
|
10
|
+
break;
|
|
11
|
+
result += sections[i];
|
|
12
|
+
}
|
|
13
|
+
return result.trimEnd() + '\n';
|
|
14
|
+
}
|
|
15
|
+
export const windsurfAdapter = {
|
|
16
|
+
name: 'Windsurf',
|
|
17
|
+
detectDirs: ['.windsurf'],
|
|
18
|
+
outputPath: '.windsurf/rules/viui-design-system.md',
|
|
19
|
+
maxChars: 6000,
|
|
20
|
+
transform(markdown) {
|
|
21
|
+
return truncateToFit(markdown, this.maxChars ?? 6000);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Áp dụng body class theo VITE_VIUI_THEME để SCSS
|
|
2
|
+
* Áp dụng body class theo VITE_VIUI_THEME để SCSS themes (design-style-*) có hiệu lực toàn app.
|
|
3
3
|
* Import file này trong vuetify.ts (hoặc main.ts) để tự động gắn class khi load; export để gọi khi đổi theme tại runtime.
|
|
4
4
|
*/
|
|
5
5
|
import { VIUI_DEFAULT_THEME_ID } from './defaults/index'
|
|
@@ -11,16 +11,35 @@ const DESIGN_STYLE_PREFIX = 'design-style-'
|
|
|
11
11
|
/**
|
|
12
12
|
* Gắn class `design-style-<id>` lên body, gỡ mọi class `design-style-*` cũ.
|
|
13
13
|
* Gọi khi khởi động app hoặc khi user đổi theme (vd. từ settings).
|
|
14
|
+
* Hai vòng lặp: (1) gỡ hết design-style-* rồi add một class; (2) gỡ mọi design-style-* khác toAdd (tránh race khi module chạy hai lần hoặc script khác thêm class).
|
|
14
15
|
*/
|
|
15
16
|
export function applyViuiThemeBodyClass(id: string): void {
|
|
16
17
|
if (typeof document === 'undefined') return
|
|
17
18
|
const body = document.body
|
|
18
19
|
if (!body) return
|
|
19
20
|
const toAdd = DESIGN_STYLE_PREFIX + id
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
for (;;) {
|
|
22
|
+
const toRemove = Array.from(body.classList).find((c) => c.startsWith(DESIGN_STYLE_PREFIX))
|
|
23
|
+
if (!toRemove) break
|
|
24
|
+
body.classList.remove(toRemove)
|
|
25
|
+
}
|
|
23
26
|
body.classList.add(toAdd)
|
|
27
|
+
for (;;) {
|
|
28
|
+
const other = Array.from(body.classList).find((c) => c.startsWith(DESIGN_STYLE_PREFIX) && c !== toAdd)
|
|
29
|
+
if (!other) break
|
|
30
|
+
body.classList.remove(other)
|
|
31
|
+
}
|
|
24
32
|
}
|
|
25
33
|
|
|
26
34
|
applyViuiThemeBodyClass(themeId)
|
|
35
|
+
|
|
36
|
+
// Dev-only: giúp debug khi theme không áp dụng (giao diện vẫn mặc định)
|
|
37
|
+
try {
|
|
38
|
+
if ((import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV) {
|
|
39
|
+
console.info(
|
|
40
|
+
`[ViUI] Theme: ${themeId} → body class "design-style-${themeId}". Nếu style vẫn mặc định: kiểm tra main.scss có import themes-entry và app có import main.scss.`
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
} catch {
|
|
44
|
+
/* no import.meta.env */
|
|
45
|
+
}
|
|
@@ -25,6 +25,8 @@ Khi chạy `viui-cli init` hoặc `viui-cli sync`, CLI đồng bộ **viui-theme
|
|
|
25
25
|
|
|
26
26
|
**Body class (tự động):** Trong `vuetify.ts` (hoặc `main.ts`), thêm một dòng: `import './viui-conf/apply-theme-body'` (hoặc `import '@/plugins/viui-conf/apply-theme-body'`). Khi load, module sẽ đọc `VITE_VIUI_THEME` và gắn class `design-style-<themeId>` lên `body`, nhờ đó style SCSS theme áp toàn app. Đổi theme tại runtime: gọi `import { applyViuiThemeBodyClass } from '@/plugins/viui-conf/apply-theme-body'; applyViuiThemeBodyClass('neo-brutalism')`.
|
|
27
27
|
|
|
28
|
+
**Theme không áp dụng (giao diện vẫn mặc định)?** (1) `.env` có `VITE_VIUI_THEME=neo-brutalism` và **restart dev server**. (2) `vuetify.ts` có `import './viui-conf/apply-theme-body'`. (3) Có `src/assets/styles/main.scss` với `@use './viui-themes-entry' as *;` và **app entry (main.ts) import main.scss**. (4) Đã chạy `viui-cli sync` để có `src/assets/styles/viui-themes/`. Console (dev) có log `[ViUI] Theme: neo-brutalism → body class "design-style-neo-brutalism"` nếu body class đã chạy; có log mà style vẫn mặc định → SCSS chưa load (kiểm tra bước 3).
|
|
29
|
+
|
|
28
30
|
## Cấu trúc
|
|
29
31
|
|
|
30
32
|
- `index.ts` — merge base + export `getDefaults(themeId?)`, `defaults` (= getDefaults()).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iNET Design System — Vuetify defaults cho Expansion Panels (VExpansionPanels, VExpansionPanel).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { VuetifyOptions } from 'vuetify'
|
|
6
|
+
|
|
7
|
+
export const expansionPanelDefaults: NonNullable<VuetifyOptions['defaults']> = {
|
|
8
|
+
VExpansionPanels: {
|
|
9
|
+
variant: 'default',
|
|
10
|
+
eager: false,
|
|
11
|
+
flat: false,
|
|
12
|
+
},
|
|
13
|
+
VExpansionPanel: {
|
|
14
|
+
rounded: 'lg',
|
|
15
|
+
},
|
|
16
|
+
}
|
|
@@ -20,6 +20,7 @@ import { mainDefaults } from './main'
|
|
|
20
20
|
import { chipDefaults } from './chips'
|
|
21
21
|
import { avatarDefaults } from './avatars'
|
|
22
22
|
import { menuDefaults } from './menus'
|
|
23
|
+
import { expansionPanelDefaults } from './expansion-panels'
|
|
23
24
|
import { getThemeDefaults } from './by-theme'
|
|
24
25
|
|
|
25
26
|
type DefaultsConfig = NonNullable<VuetifyOptions['defaults']>
|
|
@@ -59,6 +60,7 @@ const baseDefaults: DefaultsConfig = mergeDefaults(
|
|
|
59
60
|
chipDefaults,
|
|
60
61
|
avatarDefaults,
|
|
61
62
|
menuDefaults,
|
|
63
|
+
expansionPanelDefaults,
|
|
62
64
|
)
|
|
63
65
|
|
|
64
66
|
/**
|
|
@@ -89,5 +91,6 @@ export { mainDefaults } from './main'
|
|
|
89
91
|
export { chipDefaults } from './chips'
|
|
90
92
|
export { avatarDefaults } from './avatars'
|
|
91
93
|
export { menuDefaults } from './menus'
|
|
94
|
+
export { expansionPanelDefaults } from './expansion-panels'
|
|
92
95
|
export { getThemeDefaults, VIUI_DEFAULT_THEME_ID } from './by-theme'
|
|
93
96
|
export type { ViuiThemeId } from './by-theme'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* iNET Design System — Vuetify defaults cho form inputs:
|
|
3
|
-
* VTextField, VTextarea, VSelect, VAutocomplete, VCheckbox, VRadioGroup, VSwitch.
|
|
3
|
+
* VTextField, VTextarea, VSelect, VAutocomplete, VCheckbox, VRadioGroup, VSwitch, VColorInput (labs).
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { VuetifyOptions } from 'vuetify'
|
|
@@ -39,4 +39,14 @@ export const inputDefaults: NonNullable<VuetifyOptions['defaults']> = {
|
|
|
39
39
|
VSwitch: {
|
|
40
40
|
hideDetails: true,
|
|
41
41
|
},
|
|
42
|
+
/** Labs — https://vuetifyjs.com/en/components/color-inputs/ */
|
|
43
|
+
VColorInput: {
|
|
44
|
+
variant: 'outlined',
|
|
45
|
+
density: 'default',
|
|
46
|
+
hideDetails: 'auto',
|
|
47
|
+
rounded: 'lg',
|
|
48
|
+
hideActions: true,
|
|
49
|
+
colorPip: true,
|
|
50
|
+
pipLocation: 'prepend-inner',
|
|
51
|
+
},
|
|
42
52
|
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iNET Design System - Design Tokens (Standalone for consumer apps)
|
|
3
|
+
* Replaces the monorepo re-export version that uses @/ alias paths.
|
|
4
|
+
* Sync with src/tokens/design-tokens.ts + src/tokens/inet-design-tokens.ts when tokens change.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const colorTokens = {
|
|
8
|
+
brand: {
|
|
9
|
+
primary: '#0582D4',
|
|
10
|
+
secondary: '#6c757d',
|
|
11
|
+
accent: '#E8353C',
|
|
12
|
+
logo: '#E8353C',
|
|
13
|
+
},
|
|
14
|
+
semantic: {
|
|
15
|
+
success: '#1EE5B8',
|
|
16
|
+
warning: '#FFB74D',
|
|
17
|
+
error: '#B91C1C',
|
|
18
|
+
info: '#2196F3',
|
|
19
|
+
},
|
|
20
|
+
surface: {
|
|
21
|
+
background: '#121212',
|
|
22
|
+
elevated: '#1e1e1e',
|
|
23
|
+
card: '#2a2a2a',
|
|
24
|
+
overlay: 'rgba(0, 0, 0, 0.5)',
|
|
25
|
+
},
|
|
26
|
+
border: {
|
|
27
|
+
default: '#424242',
|
|
28
|
+
subtle: '#303030',
|
|
29
|
+
focus: '#0582D4',
|
|
30
|
+
error: '#B91C1C',
|
|
31
|
+
},
|
|
32
|
+
text: {
|
|
33
|
+
primary: '#e0e0e0',
|
|
34
|
+
secondary: '#b0b0b0',
|
|
35
|
+
disabled: '#6c757d',
|
|
36
|
+
placeholder: '#6c757d',
|
|
37
|
+
inverse: '#121212',
|
|
38
|
+
link: '#2196F3',
|
|
39
|
+
},
|
|
40
|
+
neutral: {
|
|
41
|
+
0: '#ffffff',
|
|
42
|
+
50: '#F5F7FA',
|
|
43
|
+
100: '#e0e0e0',
|
|
44
|
+
200: '#b0b0b0',
|
|
45
|
+
300: '#8c8c8c',
|
|
46
|
+
400: '#6c757d',
|
|
47
|
+
500: '#4a4a4a',
|
|
48
|
+
600: '#424242',
|
|
49
|
+
700: '#303030',
|
|
50
|
+
800: '#2a2a2a',
|
|
51
|
+
900: '#1e1e1e',
|
|
52
|
+
950: '#121212',
|
|
53
|
+
},
|
|
54
|
+
state: {
|
|
55
|
+
hover: 'rgba(255, 255, 255, 0.08)',
|
|
56
|
+
focus: 'rgba(5, 130, 212, 0.24)',
|
|
57
|
+
selected: 'rgba(5, 130, 212, 0.16)',
|
|
58
|
+
pressed: 'rgba(255, 255, 255, 0.12)',
|
|
59
|
+
disabled: 'rgba(255, 255, 255, 0.12)',
|
|
60
|
+
},
|
|
61
|
+
special: {
|
|
62
|
+
glowOrange: '#ff7b00',
|
|
63
|
+
glowPink: '#ff00ff',
|
|
64
|
+
glowCyan: '#00ffff',
|
|
65
|
+
gradientStart: '#0582D4',
|
|
66
|
+
gradientEnd: '#619ee9',
|
|
67
|
+
},
|
|
68
|
+
} as const
|
|
69
|
+
|
|
70
|
+
export const shapeTokens = {
|
|
71
|
+
borderRadius: {
|
|
72
|
+
none: '0',
|
|
73
|
+
sm: '4px',
|
|
74
|
+
base: '8px',
|
|
75
|
+
md: '12px',
|
|
76
|
+
lg: '16px',
|
|
77
|
+
xl: '24px',
|
|
78
|
+
'2xl': '32px',
|
|
79
|
+
full: '9999px',
|
|
80
|
+
},
|
|
81
|
+
} as const
|
|
82
|
+
|
|
83
|
+
export const inetDesignTokens = {
|
|
84
|
+
design_philosophy_title: 'triết lý thiết kế [Simple – Secure – Stable]',
|
|
85
|
+
colors: {
|
|
86
|
+
primary: {
|
|
87
|
+
light: '#024799', dark: '#619ee9', origin: '#0074BC', 500: '#0582D4',
|
|
88
|
+
scaleLight: ['#8abdef','#7eb3e7','#72a8e0','#669ed8','#5a93d0','#4c88c8','#3f7cbf','#3170b7','#2363ae','#1256a4','#024799'],
|
|
89
|
+
scaleDark: ['#619ee9','#5996e1','#528ed9','#4a86d1','#427ec8','#3a76c0','#316eb7','#2965af','#205ca5','#17539c','#0d4992'],
|
|
90
|
+
},
|
|
91
|
+
secondary: { light: '#024799', dark: '#5b4964' },
|
|
92
|
+
accent: {
|
|
93
|
+
light: '#cc0e0e', dark: '#ed7b7b', origin: '#ED1C24', 500: '#E8353C',
|
|
94
|
+
scaleLight: ['#f47e7e','#f17575','#ee6c6c','#eb6464','#e85b5b','#e45151','#e04646','#dc3b3b','#d82e2e','#d21f1f','#cc0e0e'],
|
|
95
|
+
scaleDark: ['#ed7b7b','#e77272','#e16868','#da5f5f','#d45555','#cd4a4a','#c63f3f','#be3333','#b62525','#ac1717','#a10606'],
|
|
96
|
+
},
|
|
97
|
+
tech: { 500: '#22D3EE' },
|
|
98
|
+
neutral: {
|
|
99
|
+
light: {
|
|
100
|
+
50: '#F4F7FA', 100: '#E8EEF4', 200: '#D0DAE6', 300: '#B0C2D4', 400: '#8FA3B8',
|
|
101
|
+
500: '#6D8599', 600: '#4A6278', 700: '#2E4A5C', 800: '#1A2F40', 900: '#0F1E2D',
|
|
102
|
+
},
|
|
103
|
+
dark: {
|
|
104
|
+
50: '#0D1117', 100: '#161B22', 200: '#21262D', 300: '#2D333B', 400: '#3D444D',
|
|
105
|
+
500: '#545D68', 600: '#768390', 700: '#8B949E', 800: '#B1BAC4', 900: '#E6EDF3',
|
|
106
|
+
},
|
|
107
|
+
keyTokens: {
|
|
108
|
+
light: { bg: '#F4F7FA', border: '#D0DAE6', subtle: '#4A6278', text: '#0F1E2D' },
|
|
109
|
+
dark: { bg: '#0D1117', border: '#21262D', subtle: '#8B949E', text: '#E6EDF3' },
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
success: {
|
|
113
|
+
light: { default: '#0E9F6E', surface: '#ECFDF5', border: '#A7F3D0', text: '#065F46' },
|
|
114
|
+
dark: { default: '#34D399', surface: '#0A2A1F', border: '#064E3B', text: '#34D399' },
|
|
115
|
+
},
|
|
116
|
+
warning: {
|
|
117
|
+
light: { default: '#D47B0A', surface: '#FFFBEB', border: '#FDE68A', text: '#92400E' },
|
|
118
|
+
dark: { default: '#FBBF24', surface: '#2A1F06', border: '#78350F', text: '#FBBF24' },
|
|
119
|
+
},
|
|
120
|
+
info: {
|
|
121
|
+
light: { default: '#8abdef', surface: '#EFF6FF', border: '#BFDBFE', text: '#1E40AF' },
|
|
122
|
+
dark: { default: '#619ee9', surface: '#0A1628', border: '#1E3A5F', text: '#93C5FD' },
|
|
123
|
+
},
|
|
124
|
+
error: {
|
|
125
|
+
light: { default: '#B91C1C', surface: '#FEF2F2', border: '#FECACA', text: '#991B1B' },
|
|
126
|
+
dark: { default: '#F87171', surface: '#450A0A', border: '#7F1D1D', text: '#FECACA' },
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
typography: {
|
|
130
|
+
'font-family': "'Be Vietnam Pro', sans-serif",
|
|
131
|
+
'font-size': { xs: '0.75rem', sm: '0.875rem', base: '1rem', lg: '1.125rem' },
|
|
132
|
+
},
|
|
133
|
+
spacing: { xs: '0.25rem', sm: '0.5rem', md: '1rem', lg: '1.5rem' },
|
|
134
|
+
brand: { 'logo-width': '200px', 'logo-min-height': '38px' },
|
|
135
|
+
} as const
|
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { ThemeDefinition } from 'vuetify'
|
|
7
|
-
import ThemeBase from './theme-base
|
|
8
|
-
import { colorTokens } from '
|
|
9
|
-
import { shapeTokens } from '@/tokens/design-tokens'
|
|
10
|
-
import inetDesignTokens from '@/tokens/inet-design-tokens'
|
|
7
|
+
import ThemeBase from './theme-base'
|
|
8
|
+
import { colorTokens, shapeTokens, inetDesignTokens } from './design-tokens'
|
|
11
9
|
|
|
12
10
|
const DarkTheme: ThemeDefinition = {
|
|
13
11
|
dark: true,
|
|
@@ -27,7 +25,7 @@ const DarkTheme: ThemeDefinition = {
|
|
|
27
25
|
'outline-variant': colorTokens.border.subtle,
|
|
28
26
|
},
|
|
29
27
|
variables: {
|
|
30
|
-
'border-opacity': 0.
|
|
28
|
+
'border-opacity': 0.6,
|
|
31
29
|
'high-emphasis-opacity': 0.87,
|
|
32
30
|
'medium-emphasis-opacity': 0.60,
|
|
33
31
|
'disabled-opacity': 0.38,
|
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { ThemeDefinition } from 'vuetify'
|
|
7
|
-
import ThemeBase from './theme-base
|
|
8
|
-
import { colorTokens } from '
|
|
9
|
-
import { shapeTokens } from '@/tokens/design-tokens'
|
|
10
|
-
import inetDesignTokens from '@/tokens/inet-design-tokens'
|
|
7
|
+
import ThemeBase from './theme-base'
|
|
8
|
+
import { colorTokens, shapeTokens, inetDesignTokens } from './design-tokens'
|
|
11
9
|
|
|
12
10
|
const LightTheme: ThemeDefinition = {
|
|
13
11
|
dark: false,
|
|
@@ -30,7 +28,7 @@ const LightTheme: ThemeDefinition = {
|
|
|
30
28
|
accent: colorTokens.brand.accent,
|
|
31
29
|
},
|
|
32
30
|
variables: {
|
|
33
|
-
'border-opacity': 0.
|
|
31
|
+
'border-opacity': 0.35,
|
|
34
32
|
'high-emphasis-opacity': 0.87,
|
|
35
33
|
'medium-emphasis-opacity': 0.60,
|
|
36
34
|
'disabled-opacity': 0.38,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// src/plugins/vuetify.ts — Auto-generated by viui-cli init
|
|
2
|
+
// Modify freely; viui sync will NOT overwrite this file.
|
|
3
|
+
import 'vuetify/styles'
|
|
4
|
+
import '@mdi/font/css/materialdesignicons.css'
|
|
5
|
+
import { createVuetify } from 'vuetify'
|
|
6
|
+
import { aliases, mdi } from 'vuetify/iconsets/mdi'
|
|
7
|
+
import * as components from 'vuetify/components'
|
|
8
|
+
import * as directives from 'vuetify/directives'
|
|
9
|
+
import LightTheme from './viui-conf/v-light'
|
|
10
|
+
import DarkTheme from './viui-conf/v-dark'
|
|
11
|
+
import { getDefaults, VIUI_DEFAULT_THEME_ID } from './viui-conf/defaults/index'
|
|
12
|
+
import { applyViuiThemeBodyClass } from './viui-conf/apply-theme-body'
|
|
13
|
+
|
|
14
|
+
/** Read theme from env, fallback to default (minimalist-2). */
|
|
15
|
+
const themeId = import.meta.env.VITE_VIUI_THEME ?? VIUI_DEFAULT_THEME_ID
|
|
16
|
+
|
|
17
|
+
/** Re-export for runtime theme switching (e.g. from a settings page). */
|
|
18
|
+
export { applyViuiThemeBodyClass }
|
|
19
|
+
|
|
20
|
+
export const vuetify = createVuetify({
|
|
21
|
+
components,
|
|
22
|
+
directives,
|
|
23
|
+
defaults: getDefaults(themeId),
|
|
24
|
+
icons: {
|
|
25
|
+
defaultSet: 'mdi',
|
|
26
|
+
aliases,
|
|
27
|
+
sets: { mdi },
|
|
28
|
+
},
|
|
29
|
+
theme: {
|
|
30
|
+
defaultTheme: 'light',
|
|
31
|
+
themes: {
|
|
32
|
+
light: LightTheme,
|
|
33
|
+
dark: DarkTheme,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
})
|