@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.
Files changed (240) hide show
  1. package/README.md +138 -139
  2. package/dist/adapters/adapter-registry.d.ts +12 -0
  3. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  4. package/dist/adapters/adapter-registry.js +49 -0
  5. package/dist/adapters/adapter-types.d.ts +20 -0
  6. package/dist/adapters/adapter-types.d.ts.map +1 -0
  7. package/dist/adapters/adapter-types.js +1 -0
  8. package/dist/adapters/aider-adapter.d.ts +3 -0
  9. package/dist/adapters/aider-adapter.d.ts.map +1 -0
  10. package/dist/adapters/aider-adapter.js +8 -0
  11. package/dist/adapters/claude-adapter.d.ts +3 -0
  12. package/dist/adapters/claude-adapter.d.ts.map +1 -0
  13. package/dist/adapters/claude-adapter.js +15 -0
  14. package/dist/adapters/cline-adapter.d.ts +3 -0
  15. package/dist/adapters/cline-adapter.d.ts.map +1 -0
  16. package/dist/adapters/cline-adapter.js +8 -0
  17. package/dist/adapters/copilot-adapter.d.ts +5 -0
  18. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  19. package/dist/adapters/copilot-adapter.js +20 -0
  20. package/dist/adapters/cursor-adapter.d.ts +3 -0
  21. package/dist/adapters/cursor-adapter.d.ts.map +1 -0
  22. package/dist/adapters/cursor-adapter.js +18 -0
  23. package/dist/adapters/external/bolt-adapter.d.ts +3 -0
  24. package/dist/adapters/external/bolt-adapter.d.ts.map +1 -0
  25. package/dist/adapters/external/bolt-adapter.js +15 -0
  26. package/dist/adapters/external/chatgpt-adapter.d.ts +3 -0
  27. package/dist/adapters/external/chatgpt-adapter.d.ts.map +1 -0
  28. package/dist/adapters/external/chatgpt-adapter.js +14 -0
  29. package/dist/adapters/external/external-adapter-base.d.ts +15 -0
  30. package/dist/adapters/external/external-adapter-base.d.ts.map +1 -0
  31. package/dist/adapters/external/external-adapter-base.js +92 -0
  32. package/dist/adapters/external/gemini-adapter.d.ts +3 -0
  33. package/dist/adapters/external/gemini-adapter.d.ts.map +1 -0
  34. package/dist/adapters/external/gemini-adapter.js +14 -0
  35. package/dist/adapters/external/lovable-adapter.d.ts +3 -0
  36. package/dist/adapters/external/lovable-adapter.d.ts.map +1 -0
  37. package/dist/adapters/external/lovable-adapter.js +14 -0
  38. package/dist/adapters/external/v0-adapter.d.ts +3 -0
  39. package/dist/adapters/external/v0-adapter.d.ts.map +1 -0
  40. package/dist/adapters/external/v0-adapter.js +15 -0
  41. package/dist/adapters/windsurf-adapter.d.ts +3 -0
  42. package/dist/adapters/windsurf-adapter.d.ts.map +1 -0
  43. package/dist/adapters/windsurf-adapter.js +23 -0
  44. package/dist/assets/plugins/viui-conf/apply-theme-body.ts +23 -4
  45. package/dist/assets/plugins/viui-conf/defaults/README.md +2 -0
  46. package/dist/assets/plugins/viui-conf/defaults/app-bar.ts +1 -1
  47. package/dist/assets/plugins/viui-conf/defaults/buttons.ts +1 -1
  48. package/dist/assets/plugins/viui-conf/defaults/by-theme/minimalist-2.ts +1 -1
  49. package/dist/assets/plugins/viui-conf/defaults/cards.ts +1 -1
  50. package/dist/assets/plugins/viui-conf/defaults/expansion-panels.ts +16 -0
  51. package/dist/assets/plugins/viui-conf/defaults/index.ts +3 -0
  52. package/dist/assets/plugins/viui-conf/defaults/inputs.ts +11 -1
  53. package/dist/assets/plugins/viui-conf/design-tokens.ts +135 -0
  54. package/dist/assets/plugins/viui-conf/theme-base.ts +1 -1
  55. package/dist/assets/plugins/viui-conf/v-dark.ts +3 -5
  56. package/dist/assets/plugins/viui-conf/v-light.ts +3 -5
  57. package/dist/assets/plugins/vuetify.ts +36 -0
  58. package/dist/assets/prompt-data/components.json +106 -0
  59. package/dist/assets/prompt-data/tokens.json +83 -0
  60. package/dist/assets/themes/_bento-grid.scss +8 -0
  61. package/dist/assets/themes/_glassmorphism.scss +8 -0
  62. package/dist/assets/themes/_material.scss +8 -0
  63. package/dist/assets/themes/_minimalist-2.scss +375 -0
  64. package/dist/assets/themes/_minimalist.scss +9 -0
  65. package/dist/assets/themes/_neo-brutalism.scss +199 -0
  66. package/dist/assets/themes/bento-grid.scss +4 -0
  67. package/dist/assets/themes/glassmorphism.scss +4 -0
  68. package/dist/assets/themes/index.scss +11 -0
  69. package/dist/assets/themes/material.scss +4 -0
  70. package/dist/assets/themes/minimalist-2.scss +5 -0
  71. package/dist/assets/themes/minimalist.scss +4 -0
  72. package/dist/assets/themes/neo-brutalism.scss +5 -0
  73. package/dist/assets/viui-themes/_neo-brutalism.scss +70 -152
  74. package/dist/cli-paths.d.ts +7 -0
  75. package/dist/cli-paths.d.ts.map +1 -0
  76. package/dist/cli-paths.js +19 -0
  77. package/dist/cli.js +28 -450
  78. package/dist/cli.legacy.d.ts +3 -0
  79. package/dist/cli.legacy.d.ts.map +1 -0
  80. package/dist/cli.legacy.js +597 -0
  81. package/dist/commands/audit.d.ts +3 -0
  82. package/dist/commands/audit.d.ts.map +1 -0
  83. package/dist/commands/audit.js +152 -0
  84. package/dist/commands/config/config-export.d.ts +6 -0
  85. package/dist/commands/config/config-export.d.ts.map +1 -0
  86. package/dist/commands/config/config-export.js +23 -0
  87. package/dist/commands/config/config-health.d.ts +6 -0
  88. package/dist/commands/config/config-health.d.ts.map +1 -0
  89. package/dist/commands/config/config-health.js +42 -0
  90. package/dist/commands/config/config-import.d.ts +6 -0
  91. package/dist/commands/config/config-import.d.ts.map +1 -0
  92. package/dist/commands/config/config-import.js +63 -0
  93. package/dist/commands/config/config-rollback.d.ts +6 -0
  94. package/dist/commands/config/config-rollback.d.ts.map +1 -0
  95. package/dist/commands/config/config-rollback.js +47 -0
  96. package/dist/commands/config/config-setup.d.ts +6 -0
  97. package/dist/commands/config/config-setup.d.ts.map +1 -0
  98. package/dist/commands/config/config-setup.js +103 -0
  99. package/dist/commands/config/config-status.d.ts +6 -0
  100. package/dist/commands/config/config-status.d.ts.map +1 -0
  101. package/dist/commands/config/config-status.js +42 -0
  102. package/dist/commands/config/config-uninstall.d.ts +6 -0
  103. package/dist/commands/config/config-uninstall.d.ts.map +1 -0
  104. package/dist/commands/config/config-uninstall.js +74 -0
  105. package/dist/commands/config.d.ts +6 -0
  106. package/dist/commands/config.d.ts.map +1 -0
  107. package/dist/commands/config.js +19 -0
  108. package/dist/commands/docs.d.ts +3 -0
  109. package/dist/commands/docs.d.ts.map +1 -0
  110. package/dist/commands/docs.js +17 -0
  111. package/dist/commands/doctor.d.ts +3 -0
  112. package/dist/commands/doctor.d.ts.map +1 -0
  113. package/dist/commands/doctor.js +93 -0
  114. package/dist/commands/init.d.ts +3 -0
  115. package/dist/commands/init.d.ts.map +1 -0
  116. package/dist/commands/init.js +183 -0
  117. package/dist/commands/sync.d.ts +3 -0
  118. package/dist/commands/sync.d.ts.map +1 -0
  119. package/dist/commands/sync.js +73 -0
  120. package/dist/commands/theme.d.ts +3 -0
  121. package/dist/commands/theme.d.ts.map +1 -0
  122. package/dist/commands/theme.js +86 -0
  123. package/dist/commands/update.d.ts +3 -0
  124. package/dist/commands/update.d.ts.map +1 -0
  125. package/dist/commands/update.js +97 -0
  126. package/dist/prompts/prompt-builder.d.ts +4 -0
  127. package/dist/prompts/prompt-builder.d.ts.map +1 -0
  128. package/dist/prompts/prompt-builder.js +18 -0
  129. package/dist/prompts/prompt-data-loader.d.ts +11 -0
  130. package/dist/prompts/prompt-data-loader.d.ts.map +1 -0
  131. package/dist/prompts/prompt-data-loader.js +15 -0
  132. package/dist/prompts/prompt-sections/section-code-examples.d.ts +2 -0
  133. package/dist/prompts/prompt-sections/section-code-examples.d.ts.map +1 -0
  134. package/dist/prompts/prompt-sections/section-code-examples.js +36 -0
  135. package/dist/prompts/prompt-sections/section-color-tokens.d.ts +2 -0
  136. package/dist/prompts/prompt-sections/section-color-tokens.d.ts.map +1 -0
  137. package/dist/prompts/prompt-sections/section-color-tokens.js +19 -0
  138. package/dist/prompts/prompt-sections/section-component-map.d.ts +3 -0
  139. package/dist/prompts/prompt-sections/section-component-map.d.ts.map +1 -0
  140. package/dist/prompts/prompt-sections/section-component-map.js +12 -0
  141. package/dist/prompts/prompt-sections/section-typography-spacing.d.ts +2 -0
  142. package/dist/prompts/prompt-sections/section-typography-spacing.d.ts.map +1 -0
  143. package/dist/prompts/prompt-sections/section-typography-spacing.js +29 -0
  144. package/dist/services/backup-service.d.ts +7 -0
  145. package/dist/services/backup-service.d.ts.map +1 -0
  146. package/dist/services/backup-service.js +54 -0
  147. package/dist/services/config-service.d.ts +17 -0
  148. package/dist/services/config-service.d.ts.map +1 -0
  149. package/dist/services/config-service.js +64 -0
  150. package/dist/services/diff-engine.d.ts +13 -0
  151. package/dist/services/diff-engine.d.ts.map +1 -0
  152. package/dist/services/diff-engine.js +59 -0
  153. package/dist/services/ide-detector.d.ts +9 -0
  154. package/dist/services/ide-detector.d.ts.map +1 -0
  155. package/dist/services/ide-detector.js +113 -0
  156. package/dist/services/ide-detector.spec.d.ts +2 -0
  157. package/dist/services/ide-detector.spec.d.ts.map +1 -0
  158. package/dist/services/ide-detector.spec.js +108 -0
  159. package/dist/services/lock-file-service.d.ts +15 -0
  160. package/dist/services/lock-file-service.d.ts.map +1 -0
  161. package/dist/services/lock-file-service.js +74 -0
  162. package/dist/services/mcp-config-reader.d.ts +11 -0
  163. package/dist/services/mcp-config-reader.d.ts.map +1 -0
  164. package/dist/services/mcp-config-reader.js +40 -0
  165. package/dist/services/mcp-config-reader.spec.d.ts +2 -0
  166. package/dist/services/mcp-config-reader.spec.d.ts.map +1 -0
  167. package/dist/services/mcp-config-reader.spec.js +125 -0
  168. package/dist/services/mcp-config-writer.d.ts +11 -0
  169. package/dist/services/mcp-config-writer.d.ts.map +1 -0
  170. package/dist/services/mcp-config-writer.js +98 -0
  171. package/dist/services/mcp-config-writer.spec.d.ts +2 -0
  172. package/dist/services/mcp-config-writer.spec.d.ts.map +1 -0
  173. package/dist/services/mcp-config-writer.spec.js +162 -0
  174. package/dist/services/merge-engine.d.ts +12 -0
  175. package/dist/services/merge-engine.d.ts.map +1 -0
  176. package/dist/services/merge-engine.js +54 -0
  177. package/dist/services/vuetify-scaffold-service.d.ts +5 -0
  178. package/dist/services/vuetify-scaffold-service.d.ts.map +1 -0
  179. package/dist/services/vuetify-scaffold-service.js +67 -0
  180. package/dist/templates/vuetify-plugin.d.ts +90 -0
  181. package/dist/templates/vuetify-plugin.d.ts.map +1 -0
  182. package/dist/templates/vuetify-plugin.js +33 -0
  183. package/dist/types/command-types.d.ts +15 -0
  184. package/dist/types/command-types.d.ts.map +1 -0
  185. package/dist/types/command-types.js +2 -0
  186. package/dist/types/config-types.d.ts +29 -0
  187. package/dist/types/config-types.d.ts.map +1 -0
  188. package/dist/types/config-types.js +10 -0
  189. package/dist/types/ide-types.d.ts +29 -0
  190. package/dist/types/ide-types.d.ts.map +1 -0
  191. package/dist/types/ide-types.js +4 -0
  192. package/dist/types/lock-file-types.d.ts +27 -0
  193. package/dist/types/lock-file-types.d.ts.map +1 -0
  194. package/dist/types/lock-file-types.js +2 -0
  195. package/dist/utils/diff-display.d.ts +18 -0
  196. package/dist/utils/diff-display.d.ts.map +1 -0
  197. package/dist/utils/diff-display.js +61 -0
  198. package/dist/utils/fs-safe.d.ts +9 -0
  199. package/dist/utils/fs-safe.d.ts.map +1 -0
  200. package/dist/utils/fs-safe.js +44 -0
  201. package/dist/utils/logger.d.ts +14 -0
  202. package/dist/utils/logger.d.ts.map +1 -0
  203. package/dist/utils/logger.js +28 -0
  204. package/dist/utils/open-browser.d.ts +3 -0
  205. package/dist/utils/open-browser.d.ts.map +1 -0
  206. package/dist/utils/open-browser.js +13 -0
  207. package/package.json +11 -6
  208. package/dist/assets/cursor/.design-system-version +0 -1
  209. package/dist/assets/cursor/commands/audit-accessibility.md +0 -25
  210. package/dist/assets/cursor/commands/audit-ui.md +0 -35
  211. package/dist/assets/cursor/commands/component.md +0 -18
  212. package/dist/assets/cursor/commands/fix-storybook.md +0 -24
  213. package/dist/assets/cursor/commands/generate-component-from-figma.md +0 -26
  214. package/dist/assets/cursor/commands/generate-page-from-figma.md +0 -26
  215. package/dist/assets/cursor/plans/DESIGN_SYSTEM_PLAN.md +0 -177
  216. package/dist/assets/cursor/plans/PLANS_INDEX.md +0 -35
  217. package/dist/assets/cursor/rules/accessibility-contrast.mdc +0 -38
  218. package/dist/assets/cursor/rules/bem-class-style.mdc +0 -107
  219. package/dist/assets/cursor/rules/component-naming.mdc +0 -57
  220. package/dist/assets/cursor/rules/design-system-component-library.mdc +0 -59
  221. package/dist/assets/cursor/rules/design-system-workflow.mdc +0 -48
  222. package/dist/assets/cursor/rules/figma-mapping.mdc +0 -37
  223. package/dist/assets/cursor/rules/icons.mdc +0 -42
  224. package/dist/assets/cursor/rules/project-structure.mdc +0 -137
  225. package/dist/assets/cursor/rules/storybook-component-template.mdc +0 -103
  226. package/dist/assets/cursor/rules/storybook.mdc +0 -68
  227. package/dist/assets/cursor/rules/tokens.mdc +0 -32
  228. package/dist/assets/cursor/rules/viui-themes.mdc +0 -53
  229. package/dist/assets/cursor/rules/vuetify-layout.mdc +0 -52
  230. package/dist/assets/cursor/skills/accessibility.md +0 -75
  231. package/dist/assets/cursor/skills/design-system-thinking.md +0 -40
  232. package/dist/assets/cursor/skills/figma-interpretation.md +0 -38
  233. package/dist/assets/cursor/skills/vue-vuetify-design-system-architect.md +0 -60
  234. package/dist/assets/cursor/sync-manifest.json +0 -6
  235. package/dist/assets/viui-themes/bento-grid-global.scss +0 -5
  236. package/dist/assets/viui-themes/glassmorphism-global.scss +0 -5
  237. package/dist/assets/viui-themes/material-global.scss +0 -5
  238. package/dist/assets/viui-themes/minimalist-2-global.scss +0 -5
  239. package/dist/assets/viui-themes/minimalist-global.scss +0 -5
  240. package/dist/assets/viui-themes/neo-brutalism-global.scss +0 -5
@@ -0,0 +1,106 @@
1
+ [
2
+ {
3
+ "vi": "ViButton",
4
+ "vuetify": "v-btn"
5
+ },
6
+ {
7
+ "vi": "ViButtonToggle",
8
+ "vuetify": "v-btn-toggle"
9
+ },
10
+ {
11
+ "vi": "ViInput",
12
+ "vuetify": "v-text-field"
13
+ },
14
+ {
15
+ "vi": "ViColorInput",
16
+ "vuetify": "v-color-input"
17
+ },
18
+ {
19
+ "vi": "ViTextarea",
20
+ "vuetify": "v-textarea"
21
+ },
22
+ {
23
+ "vi": "ViSelect",
24
+ "vuetify": "v-select"
25
+ },
26
+ {
27
+ "vi": "ViAutocomplete",
28
+ "vuetify": "v-autocomplete"
29
+ },
30
+ {
31
+ "vi": "ViCheckbox",
32
+ "vuetify": "v-checkbox"
33
+ },
34
+ {
35
+ "vi": "ViRadioGroup",
36
+ "vuetify": "v-radio-group"
37
+ },
38
+ {
39
+ "vi": "ViSwitch",
40
+ "vuetify": "v-switch"
41
+ },
42
+ {
43
+ "vi": "ViCard",
44
+ "vuetify": "v-card"
45
+ },
46
+ {
47
+ "vi": "ViList",
48
+ "vuetify": "v-list"
49
+ },
50
+ {
51
+ "vi": "ViChip",
52
+ "vuetify": "v-chip"
53
+ },
54
+ {
55
+ "vi": "ViAvatar",
56
+ "vuetify": "v-avatar"
57
+ },
58
+ {
59
+ "vi": "ViMenu",
60
+ "vuetify": "v-menu"
61
+ },
62
+ {
63
+ "vi": "ViAppBar",
64
+ "vuetify": "v-app-bar"
65
+ },
66
+ {
67
+ "vi": "ViNavigationDrawer",
68
+ "vuetify": "v-navigation-drawer"
69
+ },
70
+ {
71
+ "vi": "ViMain",
72
+ "vuetify": "v-main"
73
+ },
74
+ {
75
+ "vi": "ViAlert",
76
+ "vuetify": "v-alert"
77
+ },
78
+ {
79
+ "vi": "ViDialog",
80
+ "vuetify": "v-dialog"
81
+ },
82
+ {
83
+ "vi": "ViToast",
84
+ "vuetify": "v-snackbar"
85
+ },
86
+ {
87
+ "vi": "ViLoading",
88
+ "vuetify": "v-skeleton-loader"
89
+ },
90
+ {
91
+ "vi": "ViDataTable",
92
+ "vuetify": "v-data-table"
93
+ },
94
+ {
95
+ "vi": "ViPagination",
96
+ "vuetify": "v-pagination"
97
+ },
98
+ {
99
+ "vi": "ViSparkline",
100
+ "vuetify": "v-sparkline"
101
+ },
102
+ {
103
+ "vi": "ViChart",
104
+ "vuetify": "apexchart"
105
+ }
106
+ ]
@@ -0,0 +1,83 @@
1
+ {
2
+ "colors": {
3
+ "brand": {
4
+ "inet-primary": {
5
+ "css": "--inet-primary",
6
+ "value": "#1565C0"
7
+ },
8
+ "inet-secondary": {
9
+ "css": "--inet-secondary",
10
+ "value": "#00897B"
11
+ },
12
+ "inet-accent": {
13
+ "css": "--inet-accent",
14
+ "value": "#FF6F00"
15
+ },
16
+ "inet-info": {
17
+ "css": "--inet-info",
18
+ "value": "#0288D1"
19
+ },
20
+ "inet-success": {
21
+ "css": "--inet-success",
22
+ "value": "#2E7D32"
23
+ },
24
+ "inet-warning": {
25
+ "css": "--inet-warning",
26
+ "value": "#F9A825"
27
+ },
28
+ "inet-error": {
29
+ "css": "--inet-error",
30
+ "value": "#C62828"
31
+ }
32
+ },
33
+ "semantic": {
34
+ "surface": {
35
+ "css": "--inet-surface",
36
+ "value": "#FFFFFF"
37
+ },
38
+ "background": {
39
+ "css": "--inet-background",
40
+ "value": "#FAFAFA"
41
+ },
42
+ "on-surface": {
43
+ "css": "--inet-on-surface",
44
+ "value": "#212121"
45
+ },
46
+ "on-primary": {
47
+ "css": "--inet-on-primary",
48
+ "value": "#FFFFFF"
49
+ }
50
+ }
51
+ },
52
+ "spacing": {
53
+ "system": "8pt grid",
54
+ "values": {
55
+ "xs": "4px",
56
+ "sm": "8px",
57
+ "md": "16px",
58
+ "lg": "24px",
59
+ "xl": "32px",
60
+ "2xl": "48px"
61
+ }
62
+ },
63
+ "shape": {
64
+ "borderRadius": {
65
+ "sm": "4px",
66
+ "md": "8px",
67
+ "lg": "16px",
68
+ "xl": "24px",
69
+ "pill": "9999px"
70
+ }
71
+ },
72
+ "typography": {
73
+ "fontFamily": "'Inter', 'Roboto', sans-serif",
74
+ "scale": {
75
+ "caption": "12px",
76
+ "body2": "14px",
77
+ "body1": "16px",
78
+ "h6": "20px",
79
+ "h5": "24px",
80
+ "h4": "34px"
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bento Grid design style — một file duy nhất: scoped + body. Entry: bento-grid.scss; *-global alias.
3
+ * TODO: grid layout, card tiles, spacing tokens.
4
+ */
5
+ .components-overview-wrapper.design-style-bento-grid,
6
+ body.design-style-bento-grid {
7
+ /* Bento Grid styles — use design tokens */
8
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Glassmorphism design style — một file duy nhất: scoped + body. Entry: glassmorphism.scss; *-global alias.
3
+ * TODO: backdrop-filter, semi-transparent surfaces, blur.
4
+ */
5
+ .components-overview-wrapper.design-style-glassmorphism,
6
+ body.design-style-glassmorphism {
7
+ /* Glassmorphism styles — use design tokens */
8
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Material design style — một file duy nhất: scoped + body. Entry: material.scss; *-global alias.
3
+ * TODO: Material 3 / M3-like elevation, shapes, motion.
4
+ */
5
+ .components-overview-wrapper.design-style-material,
6
+ body.design-style-material {
7
+ /* Material styles — use design tokens */
8
+ }
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Minimalist 2.0 — scoped `.design-style-minimalist-2` + `body.design-style-minimalist-2` (teleport).
3
+ * Glassmorphism surfaces, soft elevation shadows, technical typography.
4
+ * Màu theo props Vi* / Vuetify.
5
+ */
6
+ $min2-border-width: 1px;
7
+ $min2-radius: var(--radius-base);
8
+
9
+ // ── Glass Surface Mixin ──
10
+ // Apply to cards, dialogs, menus, app-bar, navigation-drawer
11
+ @mixin glass-surface($elevation: 3) {
12
+ background: var(--min2-glass-bg);
13
+ backdrop-filter: blur(var(--min2-glass-blur));
14
+ -webkit-backdrop-filter: blur(var(--min2-glass-blur));
15
+ border: var(--min2-glass-border);
16
+ box-shadow: var(--min2-shadow-el-#{$elevation}), var(--min2-glass-glow);
17
+ transition: background var(--min2-transition-base),
18
+ box-shadow var(--min2-transition-base);
19
+
20
+ @supports not (backdrop-filter: blur(1px)) {
21
+ background: var(--color-surface-card);
22
+ border: $min2-border-width solid var(--color-border-default);
23
+ }
24
+ }
25
+
26
+ /** Dialog / toast / nút trong dialog — dùng chung trong canvas và trên body (teleport). */
27
+ @mixin min2-overlay-chrome {
28
+ .vi-dialog-card {
29
+ @include glass-surface(4);
30
+ border-radius: $min2-radius;
31
+ }
32
+
33
+ .vi-dialog-title {
34
+ font-weight: var(--font-weight-medium);
35
+ border-bottom-width: $min2-border-width;
36
+ }
37
+
38
+ .vi-dialog-actions {
39
+ border-top-width: $min2-border-width;
40
+ }
41
+
42
+ .vi-toast.v-snackbar .v-snackbar__wrapper {
43
+ @include glass-surface(3);
44
+ border-radius: $min2-radius;
45
+ font-weight: var(--font-weight-regular);
46
+ }
47
+
48
+ /* Menu overlay — glass surface */
49
+ .v-overlay__content > .v-list {
50
+ @include glass-surface(3);
51
+ border-radius: $min2-radius;
52
+ }
53
+ }
54
+
55
+ .design-style-minimalist-2 {
56
+ --min2-border-width: #{$min2-border-width};
57
+ --min2-radius: #{$min2-radius};
58
+ --min2-spacing-section: var(--space-8pt-2);
59
+
60
+ /* iNET DNA — scoped override, không ảnh hưởng global tokens */
61
+ --color-brand-primary: #024799;
62
+ --color-brand-accent: #cc0e0e;
63
+
64
+ /* Derived tokens — dual-tone Blue + Red, không blend */
65
+ --min2-gradient-subtle: linear-gradient(135deg, #fff 0%, #F4F7FA 100%);
66
+ --min2-hover-overlay: color-mix(in srgb, var(--color-brand-primary) 6%, transparent);
67
+ --min2-accent-border: var(--color-brand-accent);
68
+
69
+ /* Motion tokens */
70
+ --min2-transition-fast: 150ms ease-out;
71
+ --min2-transition-base: 200ms ease-out;
72
+
73
+ /* Glass surface tokens — medium glassmorphism */
74
+ --min2-glass-bg: rgba(255, 255, 255, 0.78);
75
+ --min2-glass-bg-hover: rgba(255, 255, 255, 0.85);
76
+ --min2-glass-blur: 16px;
77
+ --min2-glass-border: 1px solid rgba(0, 0, 0, 0.06);
78
+ --min2-glass-glow: 0 0 0 1px rgba(255, 255, 255, 0.1) inset;
79
+
80
+ /* Elevation shadow aliases — auto-switch light/dark */
81
+ --min2-shadow-el-0: var(--shadow-elevation-0);
82
+ --min2-shadow-el-1: var(--shadow-elevation-1);
83
+ --min2-shadow-el-2: var(--shadow-elevation-2);
84
+ --min2-shadow-el-3: var(--shadow-elevation-3);
85
+ --min2-shadow-el-4: var(--shadow-elevation-4);
86
+ --min2-shadow-el-5: var(--shadow-elevation-5);
87
+
88
+ /* Dark mode overrides */
89
+ .v-theme--dark & {
90
+ --min2-glass-bg: rgba(42, 42, 42, 0.72);
91
+ --min2-glass-bg-hover: rgba(42, 42, 42, 0.80);
92
+ --min2-glass-border: 1px solid rgba(255, 255, 255, 0.06);
93
+ --min2-glass-glow: 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
94
+
95
+ --min2-shadow-el-1: var(--shadow-elevation-dark-1);
96
+ --min2-shadow-el-2: var(--shadow-elevation-dark-2);
97
+ --min2-shadow-el-3: var(--shadow-elevation-dark-3);
98
+ --min2-shadow-el-4: var(--shadow-elevation-dark-4);
99
+ --min2-shadow-el-5: var(--shadow-elevation-dark-5);
100
+ }
101
+
102
+ // ── AppBar — glass + accent red bottom-line (iNET DNA) ──
103
+ .vi-app-bar.v-toolbar {
104
+ @include glass-surface(2);
105
+ position: relative;
106
+
107
+ &::after {
108
+ content: '';
109
+ position: absolute;
110
+ bottom: 0;
111
+ left: 0;
112
+ right: 0;
113
+ height: 2px;
114
+ background: var(--min2-accent-border);
115
+ }
116
+ }
117
+
118
+ // ── Button Toggle ──
119
+ .vi-button-toggle.v-btn-toggle {
120
+ border: $min2-border-width solid var(--color-border-default);
121
+ border-radius: $min2-radius;
122
+ box-shadow: none;
123
+ }
124
+
125
+ // ── Cards — glass surfaces ──
126
+ .vi-card {
127
+ @include glass-surface(3);
128
+ text-align: left;
129
+
130
+ /* Outlined variant — no glass, solid border */
131
+ &.outlined {
132
+ background: transparent;
133
+ backdrop-filter: none;
134
+ -webkit-backdrop-filter: none;
135
+ border: $min2-border-width solid var(--color-border-default);
136
+ border-radius: $min2-radius;
137
+ box-shadow: none;
138
+ }
139
+
140
+ .v-card-title {
141
+ font-weight: var(--font-weight-semibold);
142
+ font-size: var(--font-size-base);
143
+ letter-spacing: var(--letter-spacing-tight);
144
+ }
145
+
146
+ .v-card-text {
147
+ font-size: var(--font-size-sm);
148
+ line-height: var(--line-height-normal);
149
+ }
150
+
151
+ &:focus-visible {
152
+ outline: 2px solid var(--color-brand-primary);
153
+ outline-offset: 2px;
154
+ }
155
+ }
156
+
157
+ /* Interactive card — enhanced hover */
158
+ .vi-card--interactive {
159
+ cursor: pointer;
160
+ transition: box-shadow var(--min2-transition-base),
161
+ transform var(--min2-transition-base),
162
+ background var(--min2-transition-base);
163
+
164
+ &:hover {
165
+ background: var(--min2-glass-bg-hover);
166
+ box-shadow: var(--min2-shadow-el-4), var(--min2-glass-glow);
167
+ transform: translateY(-2px);
168
+ }
169
+
170
+ &:active {
171
+ transform: translateY(0);
172
+ box-shadow: var(--min2-shadow-el-2);
173
+ }
174
+ }
175
+
176
+ /* Stripe-like semantic cards: subtle surface bg + left accent border */
177
+ .themes-minimalist-2__card {
178
+ &--primary {
179
+ border-left: 3px solid var(--color-primary) !important;
180
+ background-color: var(--color-info-surface, #EFF6FF) !important;
181
+
182
+ .v-card-title { color: var(--color-info-text, #1E40AF); }
183
+ }
184
+
185
+ &--success {
186
+ border-left: 3px solid var(--color-success-default, #0E9F6E) !important;
187
+ background-color: var(--color-success-surface, #ECFDF5) !important;
188
+
189
+ .v-card-title { color: var(--color-success-text, #065F46); }
190
+ }
191
+
192
+ &--warning {
193
+ border-left: 3px solid var(--color-warning-default, #D47B0A) !important;
194
+ background-color: var(--color-warning-surface, #FFFBEB) !important;
195
+
196
+ .v-card-title { color: var(--color-warning-text, #92400E); }
197
+ }
198
+
199
+ &--error {
200
+ border-left: 3px solid var(--color-error-default, #B91C1C) !important;
201
+ background-color: var(--color-error-surface, #FEF2F2) !important;
202
+
203
+ .v-card-title { color: var(--color-error-text, #991B1B); }
204
+ }
205
+
206
+ &--info {
207
+ border-left: 3px solid var(--color-info-default, #8abdef) !important;
208
+ background-color: var(--color-info-surface, #EFF6FF) !important;
209
+
210
+ .v-card-title { color: var(--color-info-text, #1E40AF); }
211
+ }
212
+
213
+ /* iNET DNA accent card — red left-border */
214
+ &--accent {
215
+ border-left: 3px solid var(--min2-accent-border) !important;
216
+ }
217
+ }
218
+
219
+ // ── Navigation Drawer — glass ──
220
+ .vi-navigation-drawer .v-navigation-drawer__content {
221
+ @include glass-surface(2);
222
+ }
223
+
224
+ // ── Sections ──
225
+ .vi-section__title {
226
+ font-weight: var(--font-weight-medium);
227
+ text-align: left;
228
+ border-bottom: $min2-border-width solid var(--color-brand-primary);
229
+ padding-bottom: var(--min2-spacing-section);
230
+ }
231
+
232
+ .vi-section__content {
233
+ text-align: left;
234
+ }
235
+
236
+ .themes-minimalist-2__area {
237
+ background: var(--color-surface-background);
238
+ }
239
+
240
+ // ── Form fields ──
241
+ .vi-input .v-field,
242
+ .vi-select .v-field,
243
+ .vi-autocomplete .v-field,
244
+ .v-field {
245
+ --v-field-border-width: #{$min2-border-width};
246
+ --v-field-border-opacity: 1;
247
+ border-radius: $min2-radius !important;
248
+ box-shadow: none !important;
249
+
250
+ .v-field__outline {
251
+ color: var(--color-border-default) !important;
252
+ }
253
+
254
+ &.v-field--focused {
255
+ .v-field__outline {
256
+ --v-field-border-width: #{$min2-border-width};
257
+ color: var(--color-border-focus) !important;
258
+ }
259
+ }
260
+
261
+ &.v-field--error .v-field__outline {
262
+ color: rgb(var(--v-theme-error)) !important;
263
+ }
264
+ }
265
+
266
+ .vi-checkbox .v-selection-control .v-checkbox-btn {
267
+ border-width: $min2-border-width;
268
+ border-style: solid;
269
+ border-color: var(--color-border-default);
270
+ border-radius: var(--radius-sm);
271
+ }
272
+
273
+ .vi-alert {
274
+ border: $min2-border-width solid currentColor;
275
+ border-radius: $min2-radius;
276
+ }
277
+
278
+ @include min2-overlay-chrome;
279
+
280
+ .themes-minimalist-2__progress.v-progress-linear {
281
+ border: none;
282
+ border-radius: $min2-radius;
283
+ }
284
+
285
+ // ── Data Table ──
286
+ .vi-data-table .v-table {
287
+ border: $min2-border-width solid var(--color-border-default);
288
+ border-radius: $min2-radius;
289
+ overflow: hidden;
290
+
291
+ th {
292
+ border: none;
293
+ border-bottom: $min2-border-width solid var(--color-border-default);
294
+ font-size: var(--font-size-xs);
295
+ font-weight: var(--font-weight-semibold);
296
+ text-transform: uppercase;
297
+ letter-spacing: var(--letter-spacing-wider);
298
+ color: var(--color-text-secondary);
299
+ background: var(--color-neutral-50, #F4F7FA);
300
+ font-feature-settings: var(--font-feature-tabular);
301
+ }
302
+
303
+ td {
304
+ border: none;
305
+ border-bottom: $min2-border-width solid var(--color-border-subtle);
306
+ font-size: var(--font-size-sm);
307
+ font-feature-settings: var(--font-feature-tabular);
308
+ }
309
+
310
+ .v-data-table__tr:hover td {
311
+ background: var(--color-neutral-50, #F4F7FA);
312
+ }
313
+
314
+ .v-data-table__tr:last-child td {
315
+ border-bottom: none;
316
+ }
317
+
318
+ .v-data-table-footer {
319
+ border-top: $min2-border-width solid var(--color-border-default);
320
+ font-size: var(--font-size-sm);
321
+ }
322
+ }
323
+
324
+ // ── Pagination ──
325
+ .vi-pagination .v-pagination__list {
326
+ gap: var(--space-8pt-1);
327
+ }
328
+
329
+ // ── Technical Typography (Minimalist 2.0) ──
330
+
331
+ /* Heading hierarchy — tighter spacing for headings */
332
+ h1, .text-h1 {
333
+ letter-spacing: var(--letter-spacing-tighter);
334
+ font-weight: var(--font-weight-bold);
335
+ line-height: var(--line-height-tight);
336
+ }
337
+
338
+ h2, .text-h2 {
339
+ letter-spacing: var(--letter-spacing-tight);
340
+ font-weight: var(--font-weight-semibold);
341
+ line-height: var(--line-height-tight);
342
+ }
343
+
344
+ h3, h4, .text-h3, .text-h4 {
345
+ letter-spacing: var(--letter-spacing-tight);
346
+ font-weight: var(--font-weight-semibold);
347
+ line-height: var(--line-height-snug);
348
+ }
349
+
350
+ /* Labels & badges — wider spacing for readability at small sizes */
351
+ .vi-chip .v-chip__content {
352
+ letter-spacing: var(--letter-spacing-wide);
353
+ }
354
+
355
+ /* Monospace zones — strategic monospace placement */
356
+ pre, code {
357
+ font-family: var(--font-family-mono);
358
+ font-feature-settings: var(--font-feature-tabular);
359
+ line-height: var(--line-height-relaxed);
360
+ }
361
+
362
+ /* Stats/metrics — large tabular numbers */
363
+ [class*="stat-value"],
364
+ [class*="metric-value"],
365
+ [class*="kpi-value"] {
366
+ font-family: var(--font-family-primary);
367
+ font-feature-settings: var(--font-feature-tabular);
368
+ font-weight: var(--font-weight-bold);
369
+ letter-spacing: var(--letter-spacing-tight);
370
+ }
371
+ }
372
+
373
+ body.design-style-minimalist-2 {
374
+ @include min2-overlay-chrome;
375
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Minimalist design style — scoped + global (body).
3
+ * Một file duy nhất: wrapper + body (teleport + toàn app). Entry: minimalist.scss; *-global alias tới đó.
4
+ * TODO: clean lines, reduced chrome, generous whitespace.
5
+ */
6
+ .components-overview-wrapper.design-style-minimalist,
7
+ body.design-style-minimalist {
8
+ /* Minimalist styles — use design tokens */
9
+ }