create-vitrify 0.6.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/templates.js +272 -46
  2. package/package.json +7 -7
  3. package/templates/fastify/_gitignore +3 -0
  4. package/templates/fastify/_prettierignore +3 -0
  5. package/templates/fastify/_prettierrc.json +22 -0
  6. package/templates/fastify/eslint.config.js +27 -0
  7. package/templates/fastify/src/setup.ts +12 -0
  8. package/templates/fastify/vitrify.config.ts +21 -0
  9. package/templates/quasar/eslint.config.js +27 -0
  10. package/templates/quasar/src/pages/IndexPage.vue +1 -1
  11. package/templates/quasar/src/router/routes.ts +3 -3
  12. package/templates/quasar/src/setup.ts +2 -1
  13. package/templates/quasar/vitrify.config.ts +9 -14
  14. package/templates/quasarmd3/.vscode/extensions.json +3 -0
  15. package/templates/quasarmd3/_gitignore +3 -0
  16. package/templates/quasarmd3/_prettierignore +3 -0
  17. package/templates/quasarmd3/_prettierrc.json +22 -0
  18. package/templates/quasarmd3/eslint.config.js +27 -0
  19. package/templates/quasarmd3/index.html +14 -0
  20. package/templates/quasarmd3/src/App.test.js +3 -0
  21. package/templates/quasarmd3/src/App.vue +35 -0
  22. package/templates/quasarmd3/src/assets/quasar-logo-vertical.svg +15 -0
  23. package/templates/quasarmd3/src/components/HelloWorld.vue +21 -0
  24. package/templates/quasarmd3/src/lang/en-US.ts +8 -0
  25. package/templates/quasarmd3/src/lang/index.ts +40 -0
  26. package/templates/quasarmd3/src/lang/nl.ts +8 -0
  27. package/templates/quasarmd3/src/layouts/MainLayout.vue +115 -0
  28. package/templates/quasarmd3/src/layouts/NavigationTabs.vue +7 -0
  29. package/templates/quasarmd3/src/pages/Error404Page.vue +29 -0
  30. package/templates/quasarmd3/src/pages/IndexPage/IndexPage.vue +15 -0
  31. package/templates/quasarmd3/src/pages/IndexPage/IndexPageFabs.vue +21 -0
  32. package/templates/quasarmd3/src/pwa.ts +21 -0
  33. package/templates/quasarmd3/src/router/index.ts +17 -0
  34. package/templates/quasarmd3/src/router/routes.ts +27 -0
  35. package/templates/quasarmd3/src/setup.ts +9 -0
  36. package/templates/quasarmd3/src/shims-vue.d.ts +6 -0
  37. package/templates/quasarmd3/vitrify.config.ts +204 -0
  38. package/templates/vue/.vscode/extensions.json +3 -0
  39. package/templates/vue/_gitignore +3 -0
  40. package/templates/vue/_prettierignore +3 -0
  41. package/templates/vue/_prettierrc.json +22 -0
  42. package/templates/vue/eslint.config.js +27 -0
  43. package/templates/vue/index.html +14 -0
  44. package/templates/vue/src/App.test.js +3 -0
  45. package/templates/vue/src/App.vue +20 -0
  46. package/templates/vue/src/components/HelloWorld.vue +9 -0
  47. package/templates/vue/src/layouts/MainLayout.vue +5 -0
  48. package/templates/vue/src/pages/Error404Page.vue +9 -0
  49. package/templates/vue/src/pages/IndexPage.vue +13 -0
  50. package/templates/vue/src/router/index.ts +17 -0
  51. package/templates/vue/src/router/routes.ts +19 -0
  52. package/templates/vue/src/setup.ts +9 -0
  53. package/templates/vue/src/shims-vue.d.ts +6 -0
  54. package/templates/vue/vitrify.config.ts +21 -0
  55. package/templates/quasar/_eslint.config.ts +0 -0
  56. package/templates/quasar/_eslintrc.cjs +0 -19
@@ -0,0 +1,22 @@
1
+ {
2
+ "semi": false,
3
+ "tabWidth": 2,
4
+ "singleQuote": true,
5
+ "printWidth": 80,
6
+ "trailingComma": "none",
7
+ "overrides": [
8
+ {
9
+ "files": ["*.json5"],
10
+ "options": {
11
+ "singleQuote": false,
12
+ "quoteProps": "preserve"
13
+ }
14
+ },
15
+ {
16
+ "files": ["*.yml"],
17
+ "options": {
18
+ "singleQuote": false
19
+ }
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,27 @@
1
+ import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
2
+ import pluginVue from 'eslint-plugin-vue'
3
+ import typescriptEslint from 'typescript-eslint'
4
+ import vueParser from 'vue-eslint-parser'
5
+
6
+ export default typescriptEslint.config(
7
+ ...typescriptEslint.configs.recommended,
8
+ ...pluginVue.configs['flat/recommended'],
9
+
10
+ {
11
+ files: ['**/*.vue'],
12
+ languageOptions: {
13
+ parser: vueParser,
14
+ parserOptions: {
15
+ sourceType: 'module',
16
+ parser: {
17
+ ts: typescriptEslint.parser
18
+ }
19
+ }
20
+ }
21
+ },
22
+
23
+ /**
24
+ * end
25
+ */
26
+ eslintPluginPrettierRecommended
27
+ )
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="icon" href="/favicon.ico" />
7
+ <title></title>
8
+ </head>
9
+
10
+ <body>
11
+ <!-- A body opening and closing tag is sufficient for Vitrify -->
12
+ <div id="app"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,3 @@
1
+ test('App', async () => {
2
+ expect(true).toBeTruthy()
3
+ })
@@ -0,0 +1,35 @@
1
+ <template>
2
+ <router-view v-slot="{ Component }">
3
+ <Suspense>
4
+ <template #default>
5
+ <component :is="Component" />
6
+ </template>
7
+ <template #fallback>
8
+ <div>Loading...</div>
9
+ </template>
10
+ </Suspense>
11
+ </router-view>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ export default {
16
+ name: 'App'
17
+ }
18
+ </script>
19
+
20
+ <script setup lang="ts">
21
+ import { provide } from 'vue'
22
+ import { EventBus, useQuasar } from 'quasar'
23
+ const $q = useQuasar()
24
+ const bus = new EventBus<{
25
+ 'index-add': () => void
26
+ }>()
27
+
28
+ bus.on('index-add', () =>
29
+ $q.notify({
30
+ message: 'Add button clicked'
31
+ })
32
+ )
33
+
34
+ provide<EventBus>('bus', bus)
35
+ </script>
@@ -0,0 +1,15 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 356 360">
2
+ <path
3
+ d="M43.4 303.4c0 3.8-2.3 6.3-7.1 6.3h-15v-22h14.4c4.3 0 6.2 2.2 6.2 5.2 0 2.6-1.5 4.4-3.4 5 2.8.4 4.9 2.5 4.9 5.5zm-8-13H24.1v6.9H35c2.1 0 4-1.3 4-3.8 0-2.2-1.3-3.1-3.7-3.1zm5.1 12.6c0-2.3-1.8-3.7-4-3.7H24.2v7.7h11.7c3.4 0 4.6-1.8 4.6-4zm36.3 4v2.7H56v-22h20.6v2.7H58.9v6.8h14.6v2.3H58.9v7.5h17.9zm23-5.8v8.5H97v-8.5l-11-13.4h3.4l8.9 11 8.8-11h3.4l-10.8 13.4zm19.1-1.8V298c0-7.9 5.2-10.7 12.7-10.7 7.5 0 13 2.8 13 10.7v1.4c0 7.9-5.5 10.8-13 10.8s-12.7-3-12.7-10.8zm22.7 0V298c0-5.7-3.9-8-10-8-6 0-9.8 2.3-9.8 8v1.4c0 5.8 3.8 8.1 9.8 8.1 6 0 10-2.3 10-8.1zm37.2-11.6v21.9h-2.9l-15.8-17.9v17.9h-2.8v-22h3l15.6 18v-18h2.9zm37.9 10.2v1.3c0 7.8-5.2 10.4-12.4 10.4H193v-22h11.2c7.2 0 12.4 2.8 12.4 10.3zm-3 0c0-5.3-3.3-7.6-9.4-7.6h-8.4V307h8.4c6 0 9.5-2 9.5-7.7V298zm50.8-7.6h-9.7v19.3h-3v-19.3h-9.7v-2.6h22.4v2.6zm34.4-2.6v21.9h-3v-10.1h-16.8v10h-2.8v-21.8h2.8v9.2H296v-9.2h2.9zm34.9 19.2v2.7h-20.7v-22h20.6v2.7H316v6.8h14.5v2.3H316v7.5h17.8zM24 340.2v7.3h13.9v2.4h-14v9.6H21v-22h20v2.7H24zm41.5 11.4h-9.8v7.9H53v-22h13.3c5.1 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6H66c3.1 0 5.3-1.5 5.3-4.7 0-3.3-2.2-4.1-5.3-4.1H55.7v8.8zm47.9 6.2H89l-2 4.3h-3.2l10.7-22.2H98l10.7 22.2h-3.2l-2-4.3zm-1-2.3l-6.3-13-6 13h12.2zm46.3-15.3v21.9H146v-17.2L135.7 358h-2.1l-10.2-15.6v17h-2.8v-21.8h3l11 16.9 11.3-17h3zm35 19.3v2.6h-20.7v-22h20.6v2.7H166v6.8h14.5v2.3H166v7.6h17.8zm47-19.3l-8.3 22h-3l-7.1-18.6-7 18.6h-3l-8.2-22h3.3L204 356l6.8-18.5h3.4L221 356l6.6-18.5h3.3zm10 11.6v-1.4c0-7.8 5.2-10.7 12.7-10.7 7.6 0 13 2.9 13 10.7v1.4c0 7.9-5.4 10.8-13 10.8-7.5 0-12.7-3-12.7-10.8zm22.8 0v-1.4c0-5.7-4-8-10-8s-9.9 2.3-9.9 8v1.4c0 5.8 3.8 8.2 9.8 8.2 6.1 0 10-2.4 10-8.2zm28.3 2.4h-9.8v7.9h-2.8v-22h13.2c5.2 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6h10.2c3 0 5.2-1.5 5.2-4.7 0-3.3-2.1-4.1-5.2-4.1h-10.2v8.8zm40.3-1.5l-6.8 5.6v6.4h-2.9v-22h2.9v12.3l15.2-12.2h3.7l-9.9 8.1 10.3 13.8h-3.6l-8.9-12z" />
4
+ <path fill="#050A14"
5
+ d="M188.4 71.7a10.4 10.4 0 01-20.8 0 10.4 10.4 0 1120.8 0zM224.2 45c-2.2-3.9-5-7.5-8.2-10.7l-12 7c-3.7-3.2-8-5.7-12.6-7.3a49.4 49.4 0 00-9.7 13.9 59 59 0 0140.1 14l7.6-4.4a57 57 0 00-5.2-12.5zM178 125.1c4.5 0 9-.6 13.4-1.7v-14a40 40 0 0012.5-7.2 47.7 47.7 0 00-7.1-15.3 59 59 0 01-32.2 27.7v8.7c4.4 1.2 8.9 1.8 13.4 1.8zM131.8 45c-2.3 4-4 8.1-5.2 12.5l12 7a40 40 0 000 14.4c5.7 1.5 11.3 2 16.9 1.5a59 59 0 01-8-41.7l-7.5-4.3c-3.2 3.2-6 6.7-8.2 10.6z" />
6
+ <path fill="#00B4FF"
7
+ d="M224.2 98.4c2.3-3.9 4-8 5.2-12.4l-12-7a40 40 0 000-14.5c-5.7-1.5-11.3-2-16.9-1.5a59 59 0 018 41.7l7.5 4.4c3.2-3.2 6-6.8 8.2-10.7zm-92.4 0c2.2 4 5 7.5 8.2 10.7l12-7a40 40 0 0012.6 7.3c4-4.1 7.3-8.8 9.7-13.8a59 59 0 01-40-14l-7.7 4.4c1.2 4.3 3 8.5 5.2 12.4zm46.2-80c-4.5 0-9 .5-13.4 1.7V34a40 40 0 00-12.5 7.2c1.5 5.7 4 10.8 7.1 15.4a59 59 0 0132.2-27.7V20a53.3 53.3 0 00-13.4-1.8z" />
8
+ <path fill="#00B4FF"
9
+ d="M178 9.2a62.6 62.6 0 11-.1 125.2A62.6 62.6 0 01178 9.2m0-9.2a71.7 71.7 0 100 143.5A71.7 71.7 0 00178 0z" />
10
+ <path fill="#050A14"
11
+ d="M96.6 212v4.3c-9.2-.8-15.4-5.8-15.4-17.8V180h4.6v18.4c0 8.6 4 12.6 10.8 13.5zm16-31.9v18.4c0 8.9-4.3 12.8-10.9 13.5v4.4c9.2-.7 15.5-5.6 15.5-18v-18.3h-4.7zM62.2 199v-2.2c0-12.7-8.8-17.4-21-17.4-12.1 0-20.7 4.7-20.7 17.4v2.2c0 12.8 8.6 17.6 20.7 17.6 1.5 0 3-.1 4.4-.3l11.8 6.2 2-3.3-8.2-4-6.4-3.1a32 32 0 01-3.6.2c-9.8 0-16-3.9-16-13.3v-2.2c0-9.3 6.2-13.1 16-13.1 9.9 0 16.3 3.8 16.3 13.1v2.2c0 5.3-2.1 8.7-5.6 10.8l4.8 2.4c3.4-2.8 5.5-7 5.5-13.2zM168 215.6h5.1L156 179.7h-4.8l17 36zM143 205l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.8-3.7H143zm133.7 10.7h5.2l-17.3-35.9h-4.8l17 36zm-25-10.7l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.7-3.7h-14.8zm73.8-2.5c6-1.2 9-5.4 9-11.4 0-8-4.5-10.9-12.9-10.9h-21.4v35.5h4.6v-31.3h16.5c5 0 8.5 1.4 8.5 6.7 0 5.2-3.5 7.7-8.5 7.7h-11.4v4.1h10.7l9.3 12.8h5.5l-9.9-13.2zm-117.4 9.9c-9.7 0-14.7-2.5-18.6-6.3l-2.2 3.8c5.1 5 11 6.7 21 6.7 1.6 0 3.1-.1 4.6-.3l-1.9-4h-3zm18.4-7c0-6.4-4.7-8.6-13.8-9.4l-10.1-1c-6.7-.7-9.3-2.2-9.3-5.6 0-2.5 1.4-4 4.6-5l-1.8-3.8c-4.7 1.4-7.5 4.2-7.5 8.9 0 5.2 3.4 8.7 13 9.6l11.3 1.2c6.4.6 8.9 2 8.9 5.4 0 2.7-2.1 4.7-6 5.8l1.8 3.9c5.3-1.6 8.9-4.7 8.9-10zm-20.3-21.9c7.9 0 13.3 1.8 18.1 5.7l1.8-3.9a30 30 0 00-19.6-5.9c-2 0-4 .1-5.7.3l1.9 4 3.5-.2z" />
12
+ <path fill="#00B4FF"
13
+ d="M.5 251.9c29.6-.5 59.2-.8 88.8-1l88.7-.3 88.7.3 44.4.4 44.4.6-44.4.6-44.4.4-88.7.3-88.7-.3a7981 7981 0 01-88.8-1z" />
14
+ <path fill="none" d="M-565.2 324H-252v15.8h-313.2z" />
15
+ </svg>
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <q-card>
3
+ <q-card-section>
4
+ <div class="row no-wrap items-center">
5
+ <q-avatar square style="height: 300px; width: 300px">
6
+ <img alt="Logo" :src="logo" />
7
+ </q-avatar>
8
+ </div>
9
+ </q-card-section>
10
+ </q-card>
11
+ </template>
12
+
13
+ <script lang="ts">
14
+ export default {
15
+ name: 'HelloWorldComponent'
16
+ }
17
+ </script>
18
+
19
+ <script lang="ts" setup>
20
+ import logo from 'src/assets/quasar-logo-vertical.svg'
21
+ </script>
@@ -0,0 +1,8 @@
1
+ import type { Language } from './index.js'
2
+
3
+ const lang: Language = {
4
+ isoName: 'en-US',
5
+ darkMode: 'Dark mode'
6
+ }
7
+
8
+ export default lang
@@ -0,0 +1,40 @@
1
+ export interface Language {
2
+ isoName: string
3
+ darkMode: string
4
+ }
5
+
6
+ import type { Ref } from 'vue'
7
+ import { ref } from 'vue'
8
+ import en from './en-US.js'
9
+ export const lang = ref(en)
10
+
11
+ const locales = import.meta.glob<{ default: Language }>([
12
+ './*.ts',
13
+ '!./index.ts'
14
+ ])
15
+
16
+ export const defineLang = (lang: Language) => {
17
+ return lang
18
+ }
19
+
20
+ export const useLang = () => {
21
+ return lang as Ref<Language>
22
+ }
23
+
24
+ let loadingLanguage = false
25
+ export const loadLang = async (isoName: string) => {
26
+ if (!loadingLanguage) {
27
+ loadingLanguage = true
28
+ try {
29
+ const data = (await locales[`./${isoName}.ts`]()).default
30
+
31
+ if (data) {
32
+ lang.value = data
33
+ }
34
+ } catch (e) {
35
+ if (import.meta.env.DEBUG) console.error(e)
36
+ throw new Error(`[petboarding] Failed to load ${isoName} language file.`)
37
+ }
38
+ loadingLanguage = false
39
+ }
40
+ }
@@ -0,0 +1,8 @@
1
+ import type { Language } from './index.js'
2
+
3
+ const lang: Language = {
4
+ isoName: 'nl',
5
+ darkMode: 'Donkere modus'
6
+ }
7
+
8
+ export default lang
@@ -0,0 +1,115 @@
1
+ <template>
2
+ <md3-layout :ready="ready">
3
+ <template #header-toolbar>
4
+ <q-toolbar-title> {{ title }} </q-toolbar-title>
5
+
6
+ <q-btn icon="i-mdi-more-vert" flat>
7
+ <q-menu>
8
+ <q-list>
9
+ <q-language-select
10
+ v-model="language"
11
+ :language-imports="languageImports"
12
+ :locales="languageLocales"
13
+ />
14
+ <q-item>
15
+ <q-item-section label>
16
+ {{ lang.darkMode }}
17
+ </q-item-section>
18
+ <q-item-section side>
19
+ <q-toggle
20
+ :model-value="$q.dark.isActive"
21
+ checked-icon="i-mdi-moon-and-stars"
22
+ unchecked-icon="i-mdi-brightness-7"
23
+ size="2em"
24
+ @update:model-value="$q.dark.set"
25
+ />
26
+ </q-item-section>
27
+ </q-item>
28
+ </q-list>
29
+ </q-menu>
30
+ </q-btn>
31
+ </template>
32
+
33
+ <template #drawer-mini-navigation>
34
+ <div class="col">
35
+ <navigation-tabs vertical dense />
36
+ </div>
37
+ </template>
38
+
39
+ <template #drawer>
40
+ <q-scroll-area class="fit">
41
+ <div class="q-px-md">
42
+ <div class="text-overline">{{ title }}</div>
43
+ <q-list>
44
+ <q-item to="/" exact>
45
+ <q-item-section avatar>
46
+ <q-icon color="primary" name="i-mdi-home" />
47
+ </q-item-section>
48
+
49
+ <q-item-section>Home</q-item-section>
50
+ </q-item>
51
+ </q-list>
52
+ </div>
53
+ </q-scroll-area>
54
+ </template>
55
+
56
+ <template #footer>
57
+ <div class="column fit items-center justify-center">
58
+ <navigation-tabs dense class="col-12 lt-md" />
59
+ </div>
60
+ </template>
61
+
62
+ <template #fabs="{ showSticky }">
63
+ <router-view name="fabs" :show-sticky="showSticky" />
64
+ </template>
65
+ </md3-layout>
66
+ </template>
67
+
68
+ <script setup lang="ts">
69
+ import { ref, onMounted, watch } from 'vue'
70
+ import { useQuasar } from 'quasar'
71
+ import { QLanguageSelect } from '@simsustech/quasar-components'
72
+ import { Md3Layout } from '@simsustech/quasar-components/md3'
73
+ import { useLang, loadLang } from '../lang/index.js'
74
+ import { loadLang as loadComponentsFormLang } from '@simsustech/quasar-components/form'
75
+ import NavigationTabs from './NavigationTabs.vue'
76
+
77
+ const lang = useLang()
78
+
79
+ const $q = useQuasar()
80
+
81
+ const language = ref($q.lang.isoName)
82
+
83
+ const title = ref('Quasar MD3')
84
+
85
+ const languageLocales = ref([
86
+ {
87
+ icon: 'i-flagpack-nl',
88
+ isoName: 'nl'
89
+ },
90
+ {
91
+ icon: 'i-flagpack-us',
92
+ isoName: 'en-US'
93
+ }
94
+ ])
95
+
96
+ const languageImports = ref({
97
+ nl: () => import(`quasar/lang/nl.js`),
98
+ 'en-US': () => import(`quasar/lang/en-US.js`)
99
+ })
100
+
101
+ if (lang.value.isoName !== $q.lang.isoName) loadLang($q.lang.isoName)
102
+ watch($q.lang, () => {
103
+ loadLang($q.lang.isoName)
104
+ loadComponentsFormLang($q.lang.isoName)
105
+ })
106
+
107
+ const ready = ref(false)
108
+ onMounted(async () => {
109
+ if (__IS_PWA__) {
110
+ await import('../pwa.js')
111
+ }
112
+
113
+ ready.value = true
114
+ })
115
+ </script>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <q-tabs>
3
+ <q-route-tab icon="i-mdi-home" to="/" label="Home" />
4
+ </q-tabs>
5
+ </template>
6
+
7
+ <script setup lang="ts"></script>
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <div
3
+ class="fullscreen bg-blue text-white text-center q-pa-md flex flex-center"
4
+ >
5
+ <div>
6
+ <div style="font-size: 30vh">404</div>
7
+
8
+ <div class="text-h2" style="opacity: 0.4">Oops. Nothing here...</div>
9
+
10
+ <q-btn
11
+ class="q-mt-xl"
12
+ color="white"
13
+ text-color="blue"
14
+ unelevated
15
+ to="/"
16
+ label="Go Home"
17
+ no-caps
18
+ />
19
+ </div>
20
+ </div>
21
+ </template>
22
+
23
+ <scirpt lang="ts">
24
+ export default {
25
+ name: 'Error404Page'
26
+ }
27
+ </scirpt>
28
+
29
+ <script setup lang="ts"></script>
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <q-page class="row items-center justify-evenly">
3
+ <hello-world> </hello-world>
4
+ </q-page>
5
+ </template>
6
+
7
+ <scirpt lang="ts">
8
+ export default {
9
+ name: 'IndexPage'
10
+ }
11
+ </scirpt>
12
+
13
+ <script setup lang="ts">
14
+ import HelloWorld from '../../components/HelloWorld.vue'
15
+ </script>
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <navigation-rail-fabs
3
+ :bus-emits="busEmits"
4
+ :icons="icons"
5
+ :seek-attention="!customer"
6
+ type="add"
7
+ />
8
+ </template>
9
+
10
+ <script lang="ts" setup>
11
+ import { NavigationRailFabs } from '@simsustech/quasar-components/md3'
12
+ import { ref } from 'vue'
13
+
14
+ const busEmits = ref({
15
+ add: 'index-add'
16
+ })
17
+
18
+ const icons = ref({
19
+ add: 'i-mdi-add'
20
+ })
21
+ </script>
@@ -0,0 +1,21 @@
1
+ import { useRegisterSW } from 'virtual:pwa-register/vue'
2
+ import { watch } from 'vue'
3
+ import { Notify } from 'quasar'
4
+ import { useLang } from './lang/index.js'
5
+
6
+ const { needRefresh, updateServiceWorker } = useRegisterSW()
7
+ const lang = useLang()
8
+
9
+ watch(needRefresh, (val) => {
10
+ if (val) {
11
+ Notify.create({
12
+ icon: 'i-mdi-warning',
13
+ color: 'warning',
14
+ textColor: 'dark',
15
+ message: lang.value.updateAvailable,
16
+ closeBtn: lang.value.refresh,
17
+ onDismiss: updateServiceWorker,
18
+ timeout: 0
19
+ })
20
+ }
21
+ })
@@ -0,0 +1,17 @@
1
+ import {
2
+ createMemoryHistory,
3
+ createRouter as _createRouter,
4
+ createWebHistory
5
+ } from 'vue-router'
6
+ import routes from './routes'
7
+
8
+ export default function createRouter() {
9
+ return _createRouter({
10
+ // use appropriate history implementation for server/client
11
+ // import.meta.env.SSR is injected by Vite.
12
+ history: import.meta.env.SSR
13
+ ? createMemoryHistory(__BASE_URL__)
14
+ : createWebHistory(__BASE_URL__),
15
+ routes
16
+ })
17
+ }
@@ -0,0 +1,27 @@
1
+ import { RouteRecordRaw } from 'vue-router'
2
+
3
+ const routes: RouteRecordRaw[] = [
4
+ {
5
+ path: '/',
6
+ component: () => import('../layouts/MainLayout.vue'),
7
+ children: [
8
+ {
9
+ path: '',
10
+ components: {
11
+ default: () => import('../pages/IndexPage/IndexPage.vue'),
12
+ fabs: () => import('../pages/IndexPage/IndexPageFabs.vue')
13
+ }
14
+ }
15
+ ]
16
+ },
17
+
18
+ // Always leave this as last one,
19
+ // but you can also remove it
20
+ {
21
+ path: '/404',
22
+ alias: '/:catchAll(.*)*',
23
+ component: () => import('../pages/Error404Page.vue')
24
+ }
25
+ ]
26
+
27
+ export default routes
@@ -0,0 +1,9 @@
1
+ import type { FastifyInstance } from 'fastify'
2
+
3
+ /**
4
+ * Only used in SSR/SSG
5
+ */
6
+ export default async function (fastify: FastifyInstance) {
7
+ fastify.log('Running setup function...')
8
+ console.log('Running setup function...')
9
+ }
@@ -0,0 +1,6 @@
1
+ // Mocks all files ending in `.vue` showing them as plain Vue instances
2
+ declare module '*.vue' {
3
+ import type { ComponentOptions } from 'vue'
4
+ const component: ComponentOptions
5
+ export default component
6
+ }