@dengzhibo/create-vue-template 0.0.0-stage → 0.0.2

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 (53) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +62 -2
  4. package/bin/index.js +39 -0
  5. package/lib/generate.js +100 -0
  6. package/lib/options.js +53 -0
  7. package/lib/prompts.js +317 -0
  8. package/package.json +46 -3
  9. package/templates/base/.gitattributes +1 -0
  10. package/templates/base/.vscode/extensions.json +5 -0
  11. package/templates/base/.vscode/settings.json +10 -0
  12. package/templates/base/README.md +75 -0
  13. package/templates/base/_gitignore +44 -0
  14. package/templates/base/env.d.ts +1 -0
  15. package/templates/base/index.html +13 -0
  16. package/templates/base/package.json +32 -0
  17. package/templates/base/pnpm-workspace.yaml +19 -0
  18. package/templates/base/public/favicon.ico +0 -0
  19. package/templates/base/src/App.vue +85 -0
  20. package/templates/base/src/assets/base.css +86 -0
  21. package/templates/base/src/assets/logo.svg +1 -0
  22. package/templates/base/src/assets/main.css +35 -0
  23. package/templates/base/src/components/HelloWorld.vue +41 -0
  24. package/templates/base/src/components/TheWelcome.vue +95 -0
  25. package/templates/base/src/components/WelcomeItem.vue +87 -0
  26. package/templates/base/src/components/icons/IconCommunity.vue +7 -0
  27. package/templates/base/src/components/icons/IconDocumentation.vue +7 -0
  28. package/templates/base/src/components/icons/IconEcosystem.vue +7 -0
  29. package/templates/base/src/components/icons/IconSupport.vue +7 -0
  30. package/templates/base/src/components/icons/IconTooling.vue +19 -0
  31. package/templates/base/src/main.ts +14 -0
  32. package/templates/base/src/router/index.ts +23 -0
  33. package/templates/base/src/stores/counter.ts +12 -0
  34. package/templates/base/src/views/AboutView.vue +15 -0
  35. package/templates/base/src/views/HomeView.vue +9 -0
  36. package/templates/base/tsconfig.app.json +18 -0
  37. package/templates/base/tsconfig.json +11 -0
  38. package/templates/base/tsconfig.node.json +28 -0
  39. package/templates/base/vite.config.ts +18 -0
  40. package/templates/features/code-quality/.editorconfig +8 -0
  41. package/templates/features/code-quality/.oxfmtrc.json +5 -0
  42. package/templates/features/code-quality/.oxlintrc.json +10 -0
  43. package/templates/features/code-quality/eslint.config.ts +38 -0
  44. package/templates/features/code-quality/package.fragment.json +21 -0
  45. package/templates/features/code-quality/settings.fragment.json +7 -0
  46. package/templates/features/e2e/e2e/tsconfig.json +4 -0
  47. package/templates/features/e2e/e2e/vue.spec.ts +8 -0
  48. package/templates/features/e2e/package.fragment.json +8 -0
  49. package/templates/features/e2e/playwright.config.ts +110 -0
  50. package/templates/features/unit-test/package.fragment.json +11 -0
  51. package/templates/features/unit-test/src/components/__tests__/HelloWorld.spec.ts +11 -0
  52. package/templates/features/unit-test/tsconfig.vitest.json +19 -0
  53. package/templates/features/unit-test/vitest.config.ts +14 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "explorer.fileNesting.enabled": true,
3
+ "explorer.fileNesting.patterns": {
4
+ "tsconfig.json": "tsconfig.*.json, env.d.ts, typed-router.d.ts",
5
+ "vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
6
+ "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .oxfmt*, .prettier*, prettier*, .editorconfig, bun.lock, nub.lock"
7
+ },
8
+ "js/ts.tsdk.path": "node_modules/typescript/lib",
9
+ "js/ts.tsdk.promptToUseWorkspaceVersion": true
10
+ }
@@ -0,0 +1,75 @@
1
+ # base
2
+
3
+ This template should help get you started developing with Vue 3 in Vite.
4
+
5
+ ## Recommended IDE Setup
6
+
7
+ [VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
8
+
9
+ This project replaces its workspace TypeScript package with [typescript-native-bridge](https://github.com/johnsoncodehk/typescript-native-bridge). Command-line tools use the bridge automatically. To use it in VS Code after installing dependencies, accept the prompt to use the workspace TypeScript version. If the prompt does not appear, run **TypeScript: Select TypeScript Version** and choose **Use Workspace Version**.
10
+
11
+ ## Recommended Browser Setup
12
+
13
+ - Chromium-based browsers (Chrome, Edge, Brave, etc.):
14
+ - [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)
15
+ - [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters)
16
+ - Firefox:
17
+ - [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)
18
+ - [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/)
19
+
20
+ ## Type Support for `.vue` Imports in TS
21
+
22
+ TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
23
+
24
+ ## Customize configuration
25
+
26
+ See [Vite Configuration Reference](https://vite.dev/config/).
27
+
28
+ ## Project Setup
29
+
30
+ ```sh
31
+ pnpm install
32
+ ```
33
+
34
+ ### Compile and Hot-Reload for Development
35
+
36
+ ```sh
37
+ pnpm dev
38
+ ```
39
+
40
+ ### Type-Check, Compile and Minify for Production
41
+
42
+ ```sh
43
+ pnpm build
44
+ ```
45
+
46
+ ### Run Unit Tests with [Vitest](https://vitest.dev/)
47
+
48
+ ```sh
49
+ pnpm test:unit
50
+ ```
51
+
52
+ ### Run End-to-End Tests with [Playwright](https://playwright.dev)
53
+
54
+ ```sh
55
+ # Install browsers for the first run
56
+ pnpm exec playwright install
57
+
58
+ # When testing on CI, must build the project first
59
+ pnpm build
60
+
61
+ # Runs the end-to-end tests
62
+ pnpm test:e2e
63
+ # Runs the tests only on Chromium
64
+ pnpm test:e2e --project=chromium
65
+ # Runs the tests of a specific file
66
+ pnpm test:e2e e2e/vue.spec.ts
67
+ # Runs the tests in debug mode
68
+ pnpm test:e2e --debug
69
+ ```
70
+
71
+ ### Lint with [ESLint](https://eslint.org/)
72
+
73
+ ```sh
74
+ pnpm lint
75
+ ```
@@ -0,0 +1,44 @@
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ .DS_Store
12
+ dist
13
+ dist-ssr
14
+ coverage
15
+ *.local
16
+
17
+ # Editor directories and files
18
+ .vscode/*
19
+ !.vscode/extensions.json
20
+ .idea
21
+ *.suo
22
+ *.ntvs*
23
+ *.njsproj
24
+ *.sln
25
+ *.sw?
26
+
27
+ *.tsbuildinfo
28
+
29
+ .eslintcache
30
+
31
+ # Cypress
32
+ /cypress/videos/
33
+ /cypress/screenshots/
34
+
35
+ # Vitest
36
+ __screenshots__/
37
+
38
+ # Vite
39
+ *.timestamp-*-*.mjs
40
+
41
+ test-results/
42
+ playwright-report/
43
+
44
+ !.vscode/settings.json
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <link rel="icon" href="/favicon.ico">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Vite App</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/main.ts"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "base",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "run-p type-check \"build-only {@}\" --",
9
+ "preview": "vite preview",
10
+ "build-only": "vite build",
11
+ "type-check": "vue-tsc --build"
12
+ },
13
+ "dependencies": {
14
+ "pinia": "^4.0.3",
15
+ "vue": "^3.5.42",
16
+ "vue-router": "^5.3.1"
17
+ },
18
+ "devDependencies": {
19
+ "@tsconfig/node24": "^24.0.5",
20
+ "@types/node": "^24.13.4",
21
+ "@vitejs/plugin-vue": "^6.0.8",
22
+ "@vue/tsconfig": "^0.9.1",
23
+ "npm-run-all2": "^9.0.3",
24
+ "typescript": "~6.0.0",
25
+ "vite": "^8.2.2",
26
+ "vite-plugin-vue-devtools": "^8.2.1",
27
+ "vue-tsc": "^3.3.11"
28
+ },
29
+ "engines": {
30
+ "node": "^22.18.0 || >=24.12.0"
31
+ }
32
+ }
@@ -0,0 +1,19 @@
1
+ overrides:
2
+ 'vue': 'rc'
3
+ '@vue/compiler-core': 'rc'
4
+ '@vue/compiler-dom': 'rc'
5
+ '@vue/compiler-sfc': 'rc'
6
+ '@vue/compiler-ssr': 'rc'
7
+ '@vue/compiler-vapor': 'rc'
8
+ '@vue/reactivity': 'rc'
9
+ '@vue/runtime-core': 'rc'
10
+ '@vue/runtime-dom': 'rc'
11
+ '@vue/runtime-vapor': 'rc'
12
+ '@vue/server-renderer': 'rc'
13
+ '@vue/shared': 'rc'
14
+ '@vue/compat': 'rc'
15
+ 'typescript': 'npm:typescript-native-bridge@latest'
16
+
17
+ peerDependencyRules:
18
+ allowAny:
19
+ - 'vue'
@@ -0,0 +1,85 @@
1
+ <script setup lang="ts">
2
+ import { RouterLink, RouterView } from 'vue-router'
3
+ import HelloWorld from './components/HelloWorld.vue'
4
+ </script>
5
+
6
+ <template>
7
+ <header>
8
+ <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
9
+
10
+ <div class="wrapper">
11
+ <HelloWorld msg="You did it!" />
12
+
13
+ <nav>
14
+ <RouterLink to="/">Home</RouterLink>
15
+ <RouterLink to="/about">About</RouterLink>
16
+ </nav>
17
+ </div>
18
+ </header>
19
+
20
+ <RouterView />
21
+ </template>
22
+
23
+ <style scoped>
24
+ header {
25
+ line-height: 1.5;
26
+ max-height: 100vh;
27
+ }
28
+
29
+ .logo {
30
+ display: block;
31
+ margin: 0 auto 2rem;
32
+ }
33
+
34
+ nav {
35
+ width: 100%;
36
+ font-size: 12px;
37
+ text-align: center;
38
+ margin-top: 2rem;
39
+ }
40
+
41
+ nav a.router-link-exact-active {
42
+ color: var(--color-text);
43
+ }
44
+
45
+ nav a.router-link-exact-active:hover {
46
+ background-color: transparent;
47
+ }
48
+
49
+ nav a {
50
+ display: inline-block;
51
+ padding: 0 1rem;
52
+ border-left: 1px solid var(--color-border);
53
+ }
54
+
55
+ nav a:first-of-type {
56
+ border: 0;
57
+ }
58
+
59
+ @media (min-width: 1024px) {
60
+ header {
61
+ display: flex;
62
+ place-items: center;
63
+ padding-right: calc(var(--section-gap) / 2);
64
+ }
65
+
66
+ .logo {
67
+ margin: 0 2rem 0 0;
68
+ }
69
+
70
+ header .wrapper {
71
+ display: flex;
72
+ place-items: flex-start;
73
+ flex-wrap: wrap;
74
+ }
75
+
76
+ nav {
77
+ text-align: left;
78
+ margin-left: -1rem;
79
+ font-size: 1rem;
80
+
81
+ padding: 1rem 0;
82
+ margin-top: 1rem;
83
+ }
84
+ }
85
+ </style>
@@ -0,0 +1,86 @@
1
+ /* color palette from <https://github.com/vuejs/theme> */
2
+ :root {
3
+ --vt-c-white: #ffffff;
4
+ --vt-c-white-soft: #f8f8f8;
5
+ --vt-c-white-mute: #f2f2f2;
6
+
7
+ --vt-c-black: #181818;
8
+ --vt-c-black-soft: #222222;
9
+ --vt-c-black-mute: #282828;
10
+
11
+ --vt-c-indigo: #2c3e50;
12
+
13
+ --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
14
+ --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
15
+ --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
16
+ --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
17
+
18
+ --vt-c-text-light-1: var(--vt-c-indigo);
19
+ --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
20
+ --vt-c-text-dark-1: var(--vt-c-white);
21
+ --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
22
+ }
23
+
24
+ /* semantic color variables for this project */
25
+ :root {
26
+ --color-background: var(--vt-c-white);
27
+ --color-background-soft: var(--vt-c-white-soft);
28
+ --color-background-mute: var(--vt-c-white-mute);
29
+
30
+ --color-border: var(--vt-c-divider-light-2);
31
+ --color-border-hover: var(--vt-c-divider-light-1);
32
+
33
+ --color-heading: var(--vt-c-text-light-1);
34
+ --color-text: var(--vt-c-text-light-1);
35
+
36
+ --section-gap: 160px;
37
+ }
38
+
39
+ @media (prefers-color-scheme: dark) {
40
+ :root {
41
+ --color-background: var(--vt-c-black);
42
+ --color-background-soft: var(--vt-c-black-soft);
43
+ --color-background-mute: var(--vt-c-black-mute);
44
+
45
+ --color-border: var(--vt-c-divider-dark-2);
46
+ --color-border-hover: var(--vt-c-divider-dark-1);
47
+
48
+ --color-heading: var(--vt-c-text-dark-1);
49
+ --color-text: var(--vt-c-text-dark-2);
50
+ }
51
+ }
52
+
53
+ *,
54
+ *::before,
55
+ *::after {
56
+ box-sizing: border-box;
57
+ margin: 0;
58
+ font-weight: normal;
59
+ }
60
+
61
+ body {
62
+ min-height: 100vh;
63
+ color: var(--color-text);
64
+ background: var(--color-background);
65
+ transition:
66
+ color 0.5s,
67
+ background-color 0.5s;
68
+ line-height: 1.6;
69
+ font-family:
70
+ Inter,
71
+ -apple-system,
72
+ BlinkMacSystemFont,
73
+ 'Segoe UI',
74
+ Roboto,
75
+ Oxygen,
76
+ Ubuntu,
77
+ Cantarell,
78
+ 'Fira Sans',
79
+ 'Droid Sans',
80
+ 'Helvetica Neue',
81
+ sans-serif;
82
+ font-size: 15px;
83
+ text-rendering: optimizeLegibility;
84
+ -webkit-font-smoothing: antialiased;
85
+ -moz-osx-font-smoothing: grayscale;
86
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
@@ -0,0 +1,35 @@
1
+ @import './base.css';
2
+
3
+ #app {
4
+ max-width: 1280px;
5
+ margin: 0 auto;
6
+ padding: 2rem;
7
+ font-weight: normal;
8
+ }
9
+
10
+ a,
11
+ .green {
12
+ text-decoration: none;
13
+ color: hsla(160, 100%, 37%, 1);
14
+ transition: 0.4s;
15
+ padding: 3px;
16
+ }
17
+
18
+ @media (hover: hover) {
19
+ a:hover {
20
+ background-color: hsla(160, 100%, 37%, 0.2);
21
+ }
22
+ }
23
+
24
+ @media (min-width: 1024px) {
25
+ body {
26
+ display: flex;
27
+ place-items: center;
28
+ }
29
+
30
+ #app {
31
+ display: grid;
32
+ grid-template-columns: 1fr 1fr;
33
+ padding: 0 2rem;
34
+ }
35
+ }
@@ -0,0 +1,41 @@
1
+ <script setup lang="ts">
2
+ defineProps<{
3
+ msg: string
4
+ }>()
5
+ </script>
6
+
7
+ <template>
8
+ <div class="greetings">
9
+ <h1 class="green">{{ msg }}</h1>
10
+ <h3>
11
+ You’ve successfully created a project with
12
+ <a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
13
+ <a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>. What's next?
14
+ </h3>
15
+ </div>
16
+ </template>
17
+
18
+ <style scoped>
19
+ h1 {
20
+ font-weight: 500;
21
+ font-size: 2.6rem;
22
+ position: relative;
23
+ top: -10px;
24
+ }
25
+
26
+ h3 {
27
+ font-size: 1.2rem;
28
+ }
29
+
30
+ .greetings h1,
31
+ .greetings h3 {
32
+ text-align: center;
33
+ }
34
+
35
+ @media (min-width: 1024px) {
36
+ .greetings h1,
37
+ .greetings h3 {
38
+ text-align: left;
39
+ }
40
+ }
41
+ </style>
@@ -0,0 +1,95 @@
1
+ <script setup lang="ts">
2
+ import WelcomeItem from './WelcomeItem.vue'
3
+ import DocumentationIcon from './icons/IconDocumentation.vue'
4
+ import ToolingIcon from './icons/IconTooling.vue'
5
+ import EcosystemIcon from './icons/IconEcosystem.vue'
6
+ import CommunityIcon from './icons/IconCommunity.vue'
7
+ import SupportIcon from './icons/IconSupport.vue'
8
+
9
+ const openReadmeInEditor = () => fetch('/__open-in-editor?file=README.md')
10
+ </script>
11
+
12
+ <template>
13
+ <WelcomeItem>
14
+ <template #icon>
15
+ <DocumentationIcon />
16
+ </template>
17
+ <template #heading>Documentation</template>
18
+
19
+ Vue’s
20
+ <a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a>
21
+ provides you with all information you need to get started.
22
+ </WelcomeItem>
23
+
24
+ <WelcomeItem>
25
+ <template #icon>
26
+ <ToolingIcon />
27
+ </template>
28
+ <template #heading>Tooling</template>
29
+
30
+ This project is served and bundled with
31
+ <a href="https://vite.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The
32
+ recommended IDE setup is
33
+ <a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a>
34
+ +
35
+ <a href="https://github.com/vuejs/language-tools" target="_blank" rel="noopener"
36
+ >Vue - Official</a
37
+ >. If you need to test your components and web pages, check out
38
+ <a href="https://vitest.dev/" target="_blank" rel="noopener">Vitest</a>
39
+ and
40
+ <a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a>
41
+ /
42
+ <a href="https://playwright.dev/" target="_blank" rel="noopener">Playwright</a>.
43
+
44
+ <br />
45
+
46
+ More instructions are available in
47
+ <a href="javascript:void(0)" @click="openReadmeInEditor"><code>README.md</code></a
48
+ >.
49
+ </WelcomeItem>
50
+
51
+ <WelcomeItem>
52
+ <template #icon>
53
+ <EcosystemIcon />
54
+ </template>
55
+ <template #heading>Ecosystem</template>
56
+
57
+ Get official tools and libraries for your project:
58
+ <a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>,
59
+ <a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>,
60
+ <a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and
61
+ <a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If
62
+ you need more resources, we suggest paying
63
+ <a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a>
64
+ a visit.
65
+ </WelcomeItem>
66
+
67
+ <WelcomeItem>
68
+ <template #icon>
69
+ <CommunityIcon />
70
+ </template>
71
+ <template #heading>Community</template>
72
+
73
+ Got stuck? Ask your question on
74
+ <a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>
75
+ (our official Discord server), or
76
+ <a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener"
77
+ >StackOverflow</a
78
+ >. You should also follow the official
79
+ <a href="https://bsky.app/profile/vuejs.org" target="_blank" rel="noopener">@vuejs.org</a>
80
+ Bluesky account or the
81
+ <a href="https://x.com/vuejs" target="_blank" rel="noopener">@vuejs</a>
82
+ X account for latest news in the Vue world.
83
+ </WelcomeItem>
84
+
85
+ <WelcomeItem>
86
+ <template #icon>
87
+ <SupportIcon />
88
+ </template>
89
+ <template #heading>Support Vue</template>
90
+
91
+ As an independent project, Vue relies on community backing for its sustainability. You can help
92
+ us by
93
+ <a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>.
94
+ </WelcomeItem>
95
+ </template>
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div class="item">
3
+ <i>
4
+ <slot name="icon"></slot>
5
+ </i>
6
+ <div class="details">
7
+ <h3>
8
+ <slot name="heading"></slot>
9
+ </h3>
10
+ <slot></slot>
11
+ </div>
12
+ </div>
13
+ </template>
14
+
15
+ <style scoped>
16
+ .item {
17
+ margin-top: 2rem;
18
+ display: flex;
19
+ position: relative;
20
+ }
21
+
22
+ .details {
23
+ flex: 1;
24
+ margin-left: 1rem;
25
+ }
26
+
27
+ i {
28
+ display: flex;
29
+ place-items: center;
30
+ place-content: center;
31
+ width: 32px;
32
+ height: 32px;
33
+
34
+ color: var(--color-text);
35
+ }
36
+
37
+ h3 {
38
+ font-size: 1.2rem;
39
+ font-weight: 500;
40
+ margin-bottom: 0.4rem;
41
+ color: var(--color-heading);
42
+ }
43
+
44
+ @media (min-width: 1024px) {
45
+ .item {
46
+ margin-top: 0;
47
+ padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
48
+ }
49
+
50
+ i {
51
+ top: calc(50% - 25px);
52
+ left: -26px;
53
+ position: absolute;
54
+ border: 1px solid var(--color-border);
55
+ background: var(--color-background);
56
+ border-radius: 8px;
57
+ width: 50px;
58
+ height: 50px;
59
+ }
60
+
61
+ .item:before {
62
+ content: ' ';
63
+ border-left: 1px solid var(--color-border);
64
+ position: absolute;
65
+ left: 0;
66
+ bottom: calc(50% + 25px);
67
+ height: calc(50% - 25px);
68
+ }
69
+
70
+ .item:after {
71
+ content: ' ';
72
+ border-left: 1px solid var(--color-border);
73
+ position: absolute;
74
+ left: 0;
75
+ top: calc(50% + 25px);
76
+ height: calc(50% - 25px);
77
+ }
78
+
79
+ .item:first-of-type:before {
80
+ display: none;
81
+ }
82
+
83
+ .item:last-of-type:after {
84
+ display: none;
85
+ }
86
+ }
87
+ </style>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
3
+ <path
4
+ d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
5
+ />
6
+ </svg>
7
+ </template>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
3
+ <path
4
+ d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
5
+ />
6
+ </svg>
7
+ </template>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
3
+ <path
4
+ d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
5
+ />
6
+ </svg>
7
+ </template>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
3
+ <path
4
+ d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
5
+ />
6
+ </svg>
7
+ </template>