From 727fa976bd6e2967a867c81d3ac090befac7c99c Mon Sep 17 00:00:00 2001 From: koziavin Date: Tue, 17 Jun 2025 17:46:03 +0400 Subject: [PATCH] migrate on nuxt3 --- .data/content/contents.sqlite | Bin 0 -> 40960 bytes .gitea/workflows/deploy.yml | 34 - .husky/pre-commit | 2 - .nuxt/app.config.mjs | 212 + .nuxt/component-chunk.mjs | 1 + .nuxt/components.d.ts | 262 + .nuxt/content/components.ts | 35 + .nuxt/content/database.compressed.mjs | 1 + .nuxt/content/manifest.ts | 33 + .nuxt/content/sql_dump.txt | 5 + .nuxt/content/types.d.ts | 21 + .nuxt/dev/index.mjs | 2640 +++ .nuxt/dev/index.mjs.map | 1 + .nuxt/eslint.config.d.mts | 9 + .nuxt/eslint.config.mjs | 52 + .nuxt/imports.d.ts | 38 + .nuxt/manifest/latest.json | 1 + .../1d6a6cfb-cc43-4977-8af9-3cdf26abea84.json | 1 + .nuxt/manifest/meta/dev.json | 1 + .nuxt/mdc-configs.mjs | 8 + .nuxt/mdc-highlighter.mjs | 213 + .nuxt/mdc-image-component.mjs | 1 + .nuxt/mdc-imports.mjs | 12 + .nuxt/nitro.json | 17 + .nuxt/nuxt-fonts-global.css | 0 .nuxt/nuxt-icon-client-bundle.mjs | 1 + .nuxt/nuxt-icon-server-bundle.mjs | 15 + .nuxt/nuxt.d.ts | 31 + .nuxt/nuxt.json | 9 + .nuxt/schema/nuxt.schema.d.ts | 210 + .nuxt/schema/nuxt.schema.json | 263 + .nuxt/tailwind/postcss.mjs | 14 + .nuxt/tsconfig.json | 239 + .nuxt/tsconfig.server.json | 184 + .nuxt/types/app-defaults.d.ts | 7 + .nuxt/types/app.config.d.ts | 225 + .nuxt/types/build.d.ts | 25 + .nuxt/types/builder-env.d.ts | 1 + .nuxt/types/imports.d.ts | 380 + .nuxt/types/layouts.d.ts | 7 + .nuxt/types/middleware.d.ts | 7 + .nuxt/types/nitro-config.d.ts | 14 + .nuxt/types/nitro-imports.d.ts | 150 + .nuxt/types/nitro-middleware.d.ts | 6 + .nuxt/types/nitro-nuxt.d.ts | 34 + .nuxt/types/nitro-routes.d.ts | 26 + .nuxt/types/nitro.d.ts | 3 + .nuxt/types/plugins.d.ts | 40 + .nuxt/types/schema.d.ts | 268 + .nuxt/types/vue-shim.d.ts | 0 .prettierrc.json | 7 - .vscode/extensions.json | 3 - README.md | 76 +- app.vue | 18 + assets/css/tailwind.css | 42 + {src/assets => assets}/img/png/bg.png | Bin {src/assets => assets}/img/png/shadow.png | Bin .../img/webp/footer-flowers.webp | Bin {src/assets => assets}/img/webp/gradient.webp | Bin .../img/webp/group-flowers.webp | Bin .../img/webp/header-flowers-1.webp | Bin .../img/webp/header-flowers-2.webp | Bin .../img/webp/header-flowers-3.webp | Bin .../img/webp/header-flowers-4.webp | Bin .../img/webp/hero-banner-content.webp | Bin .../img/webp/hero-flowers.webp | Bin .../img/webp/vino-galante.webp | Bin {src/assets => assets}/vue.svg | 0 .../Typography/UiHeading.vue | 0 .../Typography/UiParagraph.vue | 0 .../UiButton/UiButton.params.ts | 0 .../UiButton/UiButton.vue | 2 +- .../components => components}/UiNav/UiNav.vue | 0 config/index.ts | 11 + config/modules.ts | 12 + config/sitemap.ts | 12 + index.html | 21 - {src/layout => layouts}/UiFooter/UiFooter.vue | 2 +- .../UiFooter/_data/footer-navigation.data.ts | 0 layouts/UiFooter/_data/index.ts | 3 + .../UiFooter/_data/ref-litres.data.ts | 0 {src/layout => layouts}/UiHeader/UiHeader.vue | 0 .../UiHeader/_data/header-navigation.data.ts | 0 layouts/UiHeader/_data/index.ts | 1 + {src/layout => layouts}/UiMain/UiMain.vue | 0 .../UiLayout.vue => layouts/default.vue | 8 +- nuxt.config.ts | 25 + package-lock.json | 15870 ++++++++++++++-- package.json | 54 +- .../books/[slug].vue | 194 +- .../books/[titlesSlug]/[titlesSlug].vue | 108 +- .../books/[titlesSlug]}/_data/title-1.json | 0 .../books/[titlesSlug]}/_data/title-2.json | 0 .../books/_slug => pages/books}/_data/1.json | 0 .../books/_slug => pages/books}/_data/2.json | 0 .../feedbackSection/_data/feedback.data.ts | 0 .../_ui/feedbackSection/feedbackSection.vue | 2 +- .../_ui/forYouSection/forYouSection.vue | 0 .../index}/_ui/heroBanner/_ui/buyContent.vue | 0 .../index}/_ui/heroBanner/heroBanner.vue | 2 +- .../youNotAloneSection/youNotAloneSection.vue | 10 +- pages/index/index.vue | 31 + pages/privacy/index.vue | 104 + postcss.config.mjs | 5 + public/favicon.ico | Bin 0 -> 4286 bytes .../img/svg/books/{titles.svg => down2.svg} | 0 public/vite.svg | 1 - server/tsconfig.json | 3 + src/App.vue | 10 - src/config/router/index.ts | 9 - src/config/router/routes.ts | 43 - src/layout/UiFooter/_data/index.ts | 3 - src/layout/UiHeader/_data/index.ts | 1 - src/main.ts | 16 - src/pages/mainPage/indexPage.vue | 31 - src/pages/privacy/privacyPage.vue | 87 - src/style.css | 87 - src/vite-env.d.ts | 1 - tailwind.config.ts | 38 + tsconfig.app.json | 12 - tsconfig.json | 11 +- tsconfig.node.json | 19 - vite.config.ts | 24 - 123 files changed, 20963 insertions(+), 1815 deletions(-) create mode 100644 .data/content/contents.sqlite delete mode 100644 .gitea/workflows/deploy.yml delete mode 100644 .husky/pre-commit create mode 100644 .nuxt/app.config.mjs create mode 100644 .nuxt/component-chunk.mjs create mode 100644 .nuxt/components.d.ts create mode 100644 .nuxt/content/components.ts create mode 100644 .nuxt/content/database.compressed.mjs create mode 100644 .nuxt/content/manifest.ts create mode 100644 .nuxt/content/sql_dump.txt create mode 100644 .nuxt/content/types.d.ts create mode 100644 .nuxt/dev/index.mjs create mode 100644 .nuxt/dev/index.mjs.map create mode 100644 .nuxt/eslint.config.d.mts create mode 100644 .nuxt/eslint.config.mjs create mode 100644 .nuxt/imports.d.ts create mode 100644 .nuxt/manifest/latest.json create mode 100644 .nuxt/manifest/meta/1d6a6cfb-cc43-4977-8af9-3cdf26abea84.json create mode 100644 .nuxt/manifest/meta/dev.json create mode 100644 .nuxt/mdc-configs.mjs create mode 100644 .nuxt/mdc-highlighter.mjs create mode 100644 .nuxt/mdc-image-component.mjs create mode 100644 .nuxt/mdc-imports.mjs create mode 100644 .nuxt/nitro.json create mode 100644 .nuxt/nuxt-fonts-global.css create mode 100644 .nuxt/nuxt-icon-client-bundle.mjs create mode 100644 .nuxt/nuxt-icon-server-bundle.mjs create mode 100644 .nuxt/nuxt.d.ts create mode 100644 .nuxt/nuxt.json create mode 100644 .nuxt/schema/nuxt.schema.d.ts create mode 100644 .nuxt/schema/nuxt.schema.json create mode 100644 .nuxt/tailwind/postcss.mjs create mode 100644 .nuxt/tsconfig.json create mode 100644 .nuxt/tsconfig.server.json create mode 100644 .nuxt/types/app-defaults.d.ts create mode 100644 .nuxt/types/app.config.d.ts create mode 100644 .nuxt/types/build.d.ts create mode 100644 .nuxt/types/builder-env.d.ts create mode 100644 .nuxt/types/imports.d.ts create mode 100644 .nuxt/types/layouts.d.ts create mode 100644 .nuxt/types/middleware.d.ts create mode 100644 .nuxt/types/nitro-config.d.ts create mode 100644 .nuxt/types/nitro-imports.d.ts create mode 100644 .nuxt/types/nitro-middleware.d.ts create mode 100644 .nuxt/types/nitro-nuxt.d.ts create mode 100644 .nuxt/types/nitro-routes.d.ts create mode 100644 .nuxt/types/nitro.d.ts create mode 100644 .nuxt/types/plugins.d.ts create mode 100644 .nuxt/types/schema.d.ts create mode 100644 .nuxt/types/vue-shim.d.ts delete mode 100644 .prettierrc.json delete mode 100644 .vscode/extensions.json create mode 100644 app.vue create mode 100644 assets/css/tailwind.css rename {src/assets => assets}/img/png/bg.png (100%) rename {src/assets => assets}/img/png/shadow.png (100%) rename {src/assets => assets}/img/webp/footer-flowers.webp (100%) rename {src/assets => assets}/img/webp/gradient.webp (100%) rename {src/assets => assets}/img/webp/group-flowers.webp (100%) rename {src/assets => assets}/img/webp/header-flowers-1.webp (100%) rename {src/assets => assets}/img/webp/header-flowers-2.webp (100%) rename {src/assets => assets}/img/webp/header-flowers-3.webp (100%) rename {src/assets => assets}/img/webp/header-flowers-4.webp (100%) rename {src/assets => assets}/img/webp/hero-banner-content.webp (100%) rename {src/assets => assets}/img/webp/hero-flowers.webp (100%) rename {src/assets => assets}/img/webp/vino-galante.webp (100%) rename {src/assets => assets}/vue.svg (100%) rename {src/components => components}/Typography/UiHeading.vue (100%) rename {src/components => components}/Typography/UiParagraph.vue (100%) rename {src/components => components}/UiButton/UiButton.params.ts (100%) rename {src/components => components}/UiButton/UiButton.vue (94%) rename {src/components => components}/UiNav/UiNav.vue (100%) create mode 100644 config/index.ts create mode 100644 config/modules.ts create mode 100644 config/sitemap.ts delete mode 100644 index.html rename {src/layout => layouts}/UiFooter/UiFooter.vue (93%) rename {src/layout => layouts}/UiFooter/_data/footer-navigation.data.ts (100%) create mode 100644 layouts/UiFooter/_data/index.ts rename {src/layout => layouts}/UiFooter/_data/ref-litres.data.ts (100%) rename {src/layout => layouts}/UiHeader/UiHeader.vue (100%) rename {src/layout => layouts}/UiHeader/_data/header-navigation.data.ts (100%) create mode 100644 layouts/UiHeader/_data/index.ts rename {src/layout => layouts}/UiMain/UiMain.vue (100%) rename src/layout/UiLayout.vue => layouts/default.vue (73%) create mode 100644 nuxt.config.ts rename src/pages/books/_slug/indexBookPage.vue => pages/books/[slug].vue (56%) rename src/pages/books/_slug/_titlesSlug/indexTitlesPage.vue => pages/books/[titlesSlug]/[titlesSlug].vue (55%) rename {src/pages/books/_slug/_titlesSlug => pages/books/[titlesSlug]}/_data/title-1.json (100%) rename {src/pages/books/_slug/_titlesSlug => pages/books/[titlesSlug]}/_data/title-2.json (100%) rename {src/pages/books/_slug => pages/books}/_data/1.json (100%) rename {src/pages/books/_slug => pages/books}/_data/2.json (100%) rename {src/pages/mainPage => pages/index}/_ui/feedbackSection/_data/feedback.data.ts (100%) rename {src/pages/mainPage => pages/index}/_ui/feedbackSection/feedbackSection.vue (97%) rename {src/pages/mainPage => pages/index}/_ui/forYouSection/forYouSection.vue (100%) rename {src/pages/mainPage => pages/index}/_ui/heroBanner/_ui/buyContent.vue (100%) rename {src/pages/mainPage => pages/index}/_ui/heroBanner/heroBanner.vue (85%) rename {src/pages/mainPage => pages/index}/_ui/youNotAloneSection/youNotAloneSection.vue (87%) create mode 100644 pages/index/index.vue create mode 100644 pages/privacy/index.vue create mode 100644 postcss.config.mjs create mode 100644 public/favicon.ico rename public/img/svg/books/{titles.svg => down2.svg} (100%) delete mode 100644 public/vite.svg create mode 100644 server/tsconfig.json delete mode 100644 src/App.vue delete mode 100644 src/config/router/index.ts delete mode 100644 src/config/router/routes.ts delete mode 100644 src/layout/UiFooter/_data/index.ts delete mode 100644 src/layout/UiHeader/_data/index.ts delete mode 100644 src/main.ts delete mode 100644 src/pages/mainPage/indexPage.vue delete mode 100644 src/pages/privacy/privacyPage.vue delete mode 100644 src/style.css delete mode 100644 src/vite-env.d.ts create mode 100644 tailwind.config.ts delete mode 100644 tsconfig.app.json delete mode 100644 tsconfig.node.json delete mode 100644 vite.config.ts diff --git a/.data/content/contents.sqlite b/.data/content/contents.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..e56eba5f87a22c0a4fdcde1e159e45fb9a7a9f19 GIT binary patch literal 40960 zcmeI)&u`jR0Kjp(BoJB=D(ygfSZ8Gix@lx3X{vH+9pWq`X;O?sN)EM*G2n(@0YgHj z9a2rZ?SI%`u*?35UHf0`&|5D%&W6$^5ZWOjHC4YBhWDP|d%X8~7LxtU%cQq$$C8Tm zX4P<{W#OhEio#<_5(MFvyI*(r!4`G{GlPixDV__D3*HhIfBQZZ{#OXzcq7dJ9sVm^ z3;i+w`@DMNO-K*j8CQ&S1Q0*~0R#|0009ILn3BNDyMaI?788H>1Ms=ST$$d zXE3QMvZhFyyt=JO!?~opc0tmVXPWd>O+As-oV2CnevlR%+o@O!QdU-z8?x#q{`J(X&qJE zOC{ZCJM~^%AGXk!hEoEM<|e8jK3u`|vma*yk!VzW`Sr!YvTMcqyUbo>_VQu!4vib5 zre%0zvbwvwt;jn)lxEv>+D$8KHHU|xGn#a{S;Fs+Jc)kPtk;3}U|w`CG5i0EzNhkv z`p>=<1Ce-KJUi+;6|9a`sW+;<6WcJ$mOhel?V{Mo@o{W!W#(b4ec|-!7?t*g)BSRr zq|YDOkB_w(X@Yx3jik*auT5A=l`Dz z;pblx5`9Gg0R#|0009ILKmY**5I|s>0%zZd{#ej#nS(V021_>NOQ~GB@j`89AD-qn zHWfWtv?|A2jZIxEJjk_w+B~*TZ0qo0rJCwL(jSXWP$aj!pU68K+P+a-*W$VRg@aBi zdHf=AFOj>S?iMZk_(AR2dS31xn*I6z*FyO9H2Y0m2q1s}0tg_000IagfB*srAn>UK zzVf;EBHk`uIJgnfTj2j@uSH&Pum|06Z+*Z|)mFY20R#|0009ILKmY**5I_I{1U?|( zJ^w%P{6GKy|9~im5I_I{1Q0*~0R#|0009ILxOxH;UjKXl{}=l6|5vXsv~c|EbhRB?usZ00IagfB*srAb /dev/null; then - apt-get update && apt-get install -y curl - elif command -v apk &> /dev/null; then - apk add --no-cache curl - elif command -v yum &> /dev/null; then - yum install -y curl - fi - - - name: Upload config files to server - env: - GITEA_API: 'https://gitea.miduway.space/api/v1/repos/levis/ebook/raw/main' - GITEA_TOKEN: '0406afe7de6547e850dd62c84976c6def23a5193' - run: | - for file in docker-compose.yml Dockerfile; do - echo "Uploading $file" - curl -X PUT \ - -H "Authorization: token $GITEA_TOKEN" \ - -T "$file" \ - "$GITEA_API/$file" - done \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 8fa526c..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,2 +0,0 @@ -npm run lint -npm run format diff --git a/.nuxt/app.config.mjs b/.nuxt/app.config.mjs new file mode 100644 index 0000000..5ea6c31 --- /dev/null +++ b/.nuxt/app.config.mjs @@ -0,0 +1,212 @@ + +import { _replaceAppConfig } from '#app/config' +import { defuFn } from 'defu' + +const inlineConfig = { + "nuxt": {}, + "icon": { + "provider": "server", + "class": "", + "aliases": {}, + "iconifyApiEndpoint": "https://api.iconify.design", + "localApiEndpoint": "/api/_nuxt_icon", + "fallbackToApi": true, + "cssSelectorPrefix": "i-", + "cssWherePseudo": true, + "mode": "css", + "attrs": { + "aria-hidden": true + }, + "collections": [ + "academicons", + "akar-icons", + "ant-design", + "arcticons", + "basil", + "bi", + "bitcoin-icons", + "bpmn", + "brandico", + "bx", + "bxl", + "bxs", + "bytesize", + "carbon", + "catppuccin", + "cbi", + "charm", + "ci", + "cib", + "cif", + "cil", + "circle-flags", + "circum", + "clarity", + "codicon", + "covid", + "cryptocurrency", + "cryptocurrency-color", + "dashicons", + "devicon", + "devicon-plain", + "ei", + "el", + "emojione", + "emojione-monotone", + "emojione-v1", + "entypo", + "entypo-social", + "eos-icons", + "ep", + "et", + "eva", + "f7", + "fa", + "fa-brands", + "fa-regular", + "fa-solid", + "fa6-brands", + "fa6-regular", + "fa6-solid", + "fad", + "fe", + "feather", + "file-icons", + "flag", + "flagpack", + "flat-color-icons", + "flat-ui", + "flowbite", + "fluent", + "fluent-emoji", + "fluent-emoji-flat", + "fluent-emoji-high-contrast", + "fluent-mdl2", + "fontelico", + "fontisto", + "formkit", + "foundation", + "fxemoji", + "gala", + "game-icons", + "geo", + "gg", + "gis", + "gravity-ui", + "gridicons", + "grommet-icons", + "guidance", + "healthicons", + "heroicons", + "heroicons-outline", + "heroicons-solid", + "hugeicons", + "humbleicons", + "ic", + "icomoon-free", + "icon-park", + "icon-park-outline", + "icon-park-solid", + "icon-park-twotone", + "iconamoon", + "iconoir", + "icons8", + "il", + "ion", + "iwwa", + "jam", + "la", + "lets-icons", + "line-md", + "logos", + "ls", + "lucide", + "lucide-lab", + "mage", + "majesticons", + "maki", + "map", + "marketeq", + "material-symbols", + "material-symbols-light", + "mdi", + "mdi-light", + "medical-icon", + "memory", + "meteocons", + "mi", + "mingcute", + "mono-icons", + "mynaui", + "nimbus", + "nonicons", + "noto", + "noto-v1", + "octicon", + "oi", + "ooui", + "openmoji", + "oui", + "pajamas", + "pepicons", + "pepicons-pencil", + "pepicons-pop", + "pepicons-print", + "ph", + "pixelarticons", + "prime", + "ps", + "quill", + "radix-icons", + "raphael", + "ri", + "rivet-icons", + "si-glyph", + "simple-icons", + "simple-line-icons", + "skill-icons", + "solar", + "streamline", + "streamline-emojis", + "subway", + "svg-spinners", + "system-uicons", + "tabler", + "tdesign", + "teenyicons", + "token", + "token-branded", + "topcoat", + "twemoji", + "typcn", + "uil", + "uim", + "uis", + "uit", + "uiw", + "unjs", + "vaadin", + "vs", + "vscode-icons", + "websymbol", + "weui", + "whh", + "wi", + "wpf", + "zmdi", + "zondicons" + ], + "fetchTimeout": 1500 + } +} + +// Vite - webpack is handled directly in #app/config +if (import.meta.hot) { + import.meta.hot.accept((newModule) => { + _replaceAppConfig(newModule.default) + }) +} + + + +export default /*@__PURE__*/ defuFn(inlineConfig) diff --git a/.nuxt/component-chunk.mjs b/.nuxt/component-chunk.mjs new file mode 100644 index 0000000..56004c9 --- /dev/null +++ b/.nuxt/component-chunk.mjs @@ -0,0 +1 @@ +export default {} \ No newline at end of file diff --git a/.nuxt/components.d.ts b/.nuxt/components.d.ts new file mode 100644 index 0000000..92cdd74 --- /dev/null +++ b/.nuxt/components.d.ts @@ -0,0 +1,262 @@ + +import type { DefineComponent, SlotsType } from 'vue' +type IslandComponent = T & DefineComponent<{}, {refresh: () => Promise}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> +type HydrationStrategies = { + hydrateOnVisible?: IntersectionObserverInit | true + hydrateOnIdle?: number | true + hydrateOnInteraction?: keyof HTMLElementEventMap | Array | true + hydrateOnMediaQuery?: string + hydrateAfter?: number + hydrateWhen?: boolean + hydrateNever?: true +} +type LazyComponent = (T & DefineComponent void }>) +interface _GlobalComponents { + 'TypographyUiHeading': typeof import("../components/Typography/UiHeading.vue")['default'] + 'TypographyUiParagraph': typeof import("../components/Typography/UiParagraph.vue")['default'] + 'UiButtonParams': typeof import("../components/UiButton/UiButton.params")['default'] + 'UiButton': typeof import("../components/UiButton/UiButton.vue")['default'] + 'UiNav': typeof import("../components/UiNav/UiNav.vue")['default'] + 'ProseA': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue")['default'] + 'ProseBlockquote': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue")['default'] + 'ProseCode': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue")['default'] + 'ProseEm': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue")['default'] + 'ProseH1': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue")['default'] + 'ProseH2': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue")['default'] + 'ProseH3': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue")['default'] + 'ProseH4': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue")['default'] + 'ProseH5': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue")['default'] + 'ProseH6': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue")['default'] + 'ProseHr': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue")['default'] + 'ProseImg': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue")['default'] + 'ProseLi': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue")['default'] + 'ProseOl': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue")['default'] + 'ProseP': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue")['default'] + 'ProsePre': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue")['default'] + 'ProseScript': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue")['default'] + 'ProseStrong': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue")['default'] + 'ProseTable': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue")['default'] + 'ProseTbody': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue")['default'] + 'ProseTd': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue")['default'] + 'ProseTh': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue")['default'] + 'ProseThead': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue")['default'] + 'ProseTr': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue")['default'] + 'ProseUl': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue")['default'] + 'NuxtWelcome': typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default'] + 'NuxtLayout': typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default'] + 'NuxtErrorBoundary': typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default'] + 'ClientOnly': typeof import("../node_modules/nuxt/dist/app/components/client-only")['default'] + 'DevOnly': typeof import("../node_modules/nuxt/dist/app/components/dev-only")['default'] + 'ServerPlaceholder': typeof import("../node_modules/nuxt/dist/app/components/server-placeholder")['default'] + 'NuxtLink': typeof import("../node_modules/nuxt/dist/app/components/nuxt-link")['default'] + 'NuxtLoadingIndicator': typeof import("../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default'] + 'NuxtTime': typeof import("../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default'] + 'NuxtRouteAnnouncer': typeof import("../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default'] + 'NuxtImg': typeof import("../node_modules/@nuxt/image/dist/runtime/components/NuxtImg.vue")['default'] + 'NuxtPicture': typeof import("../node_modules/@nuxt/image/dist/runtime/components/NuxtPicture.vue")['default'] + 'Icon': typeof import("../node_modules/@nuxt/icon/dist/runtime/components/index")['default'] + 'ContentRenderer': typeof import("../node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue")['default'] + 'MDC': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue")['default'] + 'MDCCached': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue")['default'] + 'MDCRenderer': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue")['default'] + 'MDCSlot': typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue")['default'] + 'NuxtPage': typeof import("../node_modules/nuxt/dist/pages/runtime/page")['default'] + 'NoScript': typeof import("../node_modules/nuxt/dist/head/runtime/components")['NoScript'] + 'Link': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Link'] + 'Base': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Base'] + 'Title': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Title'] + 'Meta': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Meta'] + 'Style': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Style'] + 'Head': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Head'] + 'Html': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Html'] + 'Body': typeof import("../node_modules/nuxt/dist/head/runtime/components")['Body'] + 'NuxtIsland': typeof import("../node_modules/nuxt/dist/app/components/nuxt-island")['default'] + 'NuxtRouteAnnouncer': IslandComponent + 'LazyTypographyUiHeading': LazyComponent + 'LazyTypographyUiParagraph': LazyComponent + 'LazyUiButtonParams': LazyComponent + 'LazyUiButton': LazyComponent + 'LazyUiNav': LazyComponent + 'LazyProseA': LazyComponent + 'LazyProseBlockquote': LazyComponent + 'LazyProseCode': LazyComponent + 'LazyProseEm': LazyComponent + 'LazyProseH1': LazyComponent + 'LazyProseH2': LazyComponent + 'LazyProseH3': LazyComponent + 'LazyProseH4': LazyComponent + 'LazyProseH5': LazyComponent + 'LazyProseH6': LazyComponent + 'LazyProseHr': LazyComponent + 'LazyProseImg': LazyComponent + 'LazyProseLi': LazyComponent + 'LazyProseOl': LazyComponent + 'LazyProseP': LazyComponent + 'LazyProsePre': LazyComponent + 'LazyProseScript': LazyComponent + 'LazyProseStrong': LazyComponent + 'LazyProseTable': LazyComponent + 'LazyProseTbody': LazyComponent + 'LazyProseTd': LazyComponent + 'LazyProseTh': LazyComponent + 'LazyProseThead': LazyComponent + 'LazyProseTr': LazyComponent + 'LazyProseUl': LazyComponent + 'LazyNuxtWelcome': LazyComponent + 'LazyNuxtLayout': LazyComponent + 'LazyNuxtErrorBoundary': LazyComponent + 'LazyClientOnly': LazyComponent + 'LazyDevOnly': LazyComponent + 'LazyServerPlaceholder': LazyComponent + 'LazyNuxtLink': LazyComponent + 'LazyNuxtLoadingIndicator': LazyComponent + 'LazyNuxtTime': LazyComponent + 'LazyNuxtRouteAnnouncer': LazyComponent + 'LazyNuxtImg': LazyComponent + 'LazyNuxtPicture': LazyComponent + 'LazyIcon': LazyComponent + 'LazyContentRenderer': LazyComponent + 'LazyMDC': LazyComponent + 'LazyMDCCached': LazyComponent + 'LazyMDCRenderer': LazyComponent + 'LazyMDCSlot': LazyComponent + 'LazyNuxtPage': LazyComponent + 'LazyNoScript': LazyComponent + 'LazyLink': LazyComponent + 'LazyBase': LazyComponent + 'LazyTitle': LazyComponent + 'LazyMeta': LazyComponent + 'LazyStyle': LazyComponent + 'LazyHead': LazyComponent + 'LazyHtml': LazyComponent + 'LazyBody': LazyComponent + 'LazyNuxtIsland': LazyComponent + 'LazyNuxtRouteAnnouncer': LazyComponent> +} + +declare module 'vue' { + export interface GlobalComponents extends _GlobalComponents { } +} + +export const TypographyUiHeading: typeof import("../components/Typography/UiHeading.vue")['default'] +export const TypographyUiParagraph: typeof import("../components/Typography/UiParagraph.vue")['default'] +export const UiButtonParams: typeof import("../components/UiButton/UiButton.params")['default'] +export const UiButton: typeof import("../components/UiButton/UiButton.vue")['default'] +export const UiNav: typeof import("../components/UiNav/UiNav.vue")['default'] +export const ProseA: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseA.vue")['default'] +export const ProseBlockquote: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseBlockquote.vue")['default'] +export const ProseCode: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseCode.vue")['default'] +export const ProseEm: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseEm.vue")['default'] +export const ProseH1: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH1.vue")['default'] +export const ProseH2: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH2.vue")['default'] +export const ProseH3: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH3.vue")['default'] +export const ProseH4: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH4.vue")['default'] +export const ProseH5: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH5.vue")['default'] +export const ProseH6: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseH6.vue")['default'] +export const ProseHr: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseHr.vue")['default'] +export const ProseImg: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseImg.vue")['default'] +export const ProseLi: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseLi.vue")['default'] +export const ProseOl: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseOl.vue")['default'] +export const ProseP: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseP.vue")['default'] +export const ProsePre: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProsePre.vue")['default'] +export const ProseScript: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseScript.vue")['default'] +export const ProseStrong: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseStrong.vue")['default'] +export const ProseTable: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTable.vue")['default'] +export const ProseTbody: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTbody.vue")['default'] +export const ProseTd: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTd.vue")['default'] +export const ProseTh: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTh.vue")['default'] +export const ProseThead: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseThead.vue")['default'] +export const ProseTr: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseTr.vue")['default'] +export const ProseUl: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/prose/ProseUl.vue")['default'] +export const NuxtWelcome: typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default'] +export const NuxtLayout: typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default'] +export const NuxtErrorBoundary: typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default'] +export const ClientOnly: typeof import("../node_modules/nuxt/dist/app/components/client-only")['default'] +export const DevOnly: typeof import("../node_modules/nuxt/dist/app/components/dev-only")['default'] +export const ServerPlaceholder: typeof import("../node_modules/nuxt/dist/app/components/server-placeholder")['default'] +export const NuxtLink: typeof import("../node_modules/nuxt/dist/app/components/nuxt-link")['default'] +export const NuxtLoadingIndicator: typeof import("../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default'] +export const NuxtTime: typeof import("../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default'] +export const NuxtRouteAnnouncer: typeof import("../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default'] +export const NuxtImg: typeof import("../node_modules/@nuxt/image/dist/runtime/components/NuxtImg.vue")['default'] +export const NuxtPicture: typeof import("../node_modules/@nuxt/image/dist/runtime/components/NuxtPicture.vue")['default'] +export const Icon: typeof import("../node_modules/@nuxt/icon/dist/runtime/components/index")['default'] +export const ContentRenderer: typeof import("../node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue")['default'] +export const MDC: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue")['default'] +export const MDCCached: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue")['default'] +export const MDCRenderer: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue")['default'] +export const MDCSlot: typeof import("../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue")['default'] +export const NuxtPage: typeof import("../node_modules/nuxt/dist/pages/runtime/page")['default'] +export const NoScript: typeof import("../node_modules/nuxt/dist/head/runtime/components")['NoScript'] +export const Link: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Link'] +export const Base: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Base'] +export const Title: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Title'] +export const Meta: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Meta'] +export const Style: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Style'] +export const Head: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Head'] +export const Html: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Html'] +export const Body: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Body'] +export const NuxtIsland: typeof import("../node_modules/nuxt/dist/app/components/nuxt-island")['default'] +export const NuxtRouteAnnouncer: IslandComponent +export const LazyTypographyUiHeading: LazyComponent +export const LazyTypographyUiParagraph: LazyComponent +export const LazyUiButtonParams: LazyComponent +export const LazyUiButton: LazyComponent +export const LazyUiNav: LazyComponent +export const LazyProseA: LazyComponent +export const LazyProseBlockquote: LazyComponent +export const LazyProseCode: LazyComponent +export const LazyProseEm: LazyComponent +export const LazyProseH1: LazyComponent +export const LazyProseH2: LazyComponent +export const LazyProseH3: LazyComponent +export const LazyProseH4: LazyComponent +export const LazyProseH5: LazyComponent +export const LazyProseH6: LazyComponent +export const LazyProseHr: LazyComponent +export const LazyProseImg: LazyComponent +export const LazyProseLi: LazyComponent +export const LazyProseOl: LazyComponent +export const LazyProseP: LazyComponent +export const LazyProsePre: LazyComponent +export const LazyProseScript: LazyComponent +export const LazyProseStrong: LazyComponent +export const LazyProseTable: LazyComponent +export const LazyProseTbody: LazyComponent +export const LazyProseTd: LazyComponent +export const LazyProseTh: LazyComponent +export const LazyProseThead: LazyComponent +export const LazyProseTr: LazyComponent +export const LazyProseUl: LazyComponent +export const LazyNuxtWelcome: LazyComponent +export const LazyNuxtLayout: LazyComponent +export const LazyNuxtErrorBoundary: LazyComponent +export const LazyClientOnly: LazyComponent +export const LazyDevOnly: LazyComponent +export const LazyServerPlaceholder: LazyComponent +export const LazyNuxtLink: LazyComponent +export const LazyNuxtLoadingIndicator: LazyComponent +export const LazyNuxtTime: LazyComponent +export const LazyNuxtRouteAnnouncer: LazyComponent +export const LazyNuxtImg: LazyComponent +export const LazyNuxtPicture: LazyComponent +export const LazyIcon: LazyComponent +export const LazyContentRenderer: LazyComponent +export const LazyMDC: LazyComponent +export const LazyMDCCached: LazyComponent +export const LazyMDCRenderer: LazyComponent +export const LazyMDCSlot: LazyComponent +export const LazyNuxtPage: LazyComponent +export const LazyNoScript: LazyComponent +export const LazyLink: LazyComponent +export const LazyBase: LazyComponent +export const LazyTitle: LazyComponent +export const LazyMeta: LazyComponent +export const LazyStyle: LazyComponent +export const LazyHead: LazyComponent +export const LazyHtml: LazyComponent +export const LazyBody: LazyComponent +export const LazyNuxtIsland: LazyComponent +export const LazyNuxtRouteAnnouncer: LazyComponent> + +export const componentNames: string[] diff --git a/.nuxt/content/components.ts b/.nuxt/content/components.ts new file mode 100644 index 0000000..153a845 --- /dev/null +++ b/.nuxt/content/components.ts @@ -0,0 +1,35 @@ +export const TypographyUiHeading = () => import('./../../components/Typography/UiHeading.vue') +export const TypographyUiParagraph = () => import('./../../components/Typography/UiParagraph.vue') +export const UiButtonParams = () => import('./../../components/UiButton/UiButton.params') +export const UiButton = () => import('./../../components/UiButton/UiButton.vue') +export const UiNav = () => import('./../../components/UiNav/UiNav.vue') +export const NuxtWelcome = () => import('./../../node_modules/nuxt/dist/app/components/welcome.vue') +export const NuxtLayout = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-layout') +export const NuxtErrorBoundary = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue') +export const ClientOnly = () => import('./../../node_modules/nuxt/dist/app/components/client-only') +export const DevOnly = () => import('./../../node_modules/nuxt/dist/app/components/dev-only') +export const ServerPlaceholder = () => import('./../../node_modules/nuxt/dist/app/components/server-placeholder') +export const NuxtLink = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-link') +export const NuxtLoadingIndicator = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-loading-indicator') +export const NuxtTime = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-time.vue') +export const NuxtRouteAnnouncer = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-route-announcer') +export const NuxtImg = () => import('./../../node_modules/@nuxt/image/dist/runtime/components/NuxtImg.vue') +export const NuxtPicture = () => import('./../../node_modules/@nuxt/image/dist/runtime/components/NuxtPicture.vue') +export const ContentRenderer = () => import('./../../node_modules/@nuxt/content/dist/runtime/components/ContentRenderer.vue') +export const MDC = () => import('./../../node_modules/@nuxtjs/mdc/dist/runtime/components/MDC.vue') +export const MDCCached = () => import('./../../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCCached.vue') +export const MDCRenderer = () => import('./../../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCRenderer.vue') +export const MDCSlot = () => import('./../../node_modules/@nuxtjs/mdc/dist/runtime/components/MDCSlot.vue') +export const NuxtPage = () => import('./../../node_modules/nuxt/dist/pages/runtime/page') +export const NoScript = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Link = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Base = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Title = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Meta = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Style = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Head = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Html = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const Body = () => import('./../../node_modules/nuxt/dist/head/runtime/components') +export const NuxtIsland = () => import('./../../node_modules/nuxt/dist/app/components/nuxt-island') +export const globalComponents: string[] = ["ProseA","ProseBlockquote","ProseCode","ProseEm","ProseH1","ProseH2","ProseH3","ProseH4","ProseH5","ProseH6","ProseHr","ProseImg","ProseLi","ProseOl","ProseP","ProsePre","ProseScript","ProseStrong","ProseTable","ProseTbody","ProseTd","ProseTh","ProseThead","ProseTr","ProseUl","Icon"] +export const localComponents: string[] = ["TypographyUiHeading","TypographyUiParagraph","UiButtonParams","UiButton","UiNav","NuxtWelcome","NuxtLayout","NuxtErrorBoundary","ClientOnly","DevOnly","ServerPlaceholder","NuxtLink","NuxtLoadingIndicator","NuxtTime","NuxtRouteAnnouncer","NuxtImg","NuxtPicture","ContentRenderer","MDC","MDCCached","MDCRenderer","MDCSlot","NuxtPage","NoScript","Link","Base","Title","Meta","Style","Head","Html","Body","NuxtIsland"] \ No newline at end of file diff --git a/.nuxt/content/database.compressed.mjs b/.nuxt/content/database.compressed.mjs new file mode 100644 index 0000000..179391e --- /dev/null +++ b/.nuxt/content/database.compressed.mjs @@ -0,0 +1 @@ +export const content = "H4sIAAAAAAAAE52SbW/aMBDHv8rJb9JJoerUriqq+sIFM0xZQh0HyMYU5eHSuECCEgdKq333KcDWAa207dXJ9+S7+/2/kZZgVDKQ9LbPgHfAsiWwMXekA36UZxoz7assyeFExSDZWMJA8C9UeHDHPBMmpMAgXk8I3Np2n1GrdpW6qCJdFTjEolR5NiEwpKLVpaKOLt9y+n4alKnvT8j2E9fi9y77cA2NBvxuR0zCLYcJCdyS9sF8Q9p3mQMnRpRiNC2r+a+wYUISzEo0wQgfuJcuHkU1vHoOuz3mtxKcre4WPV/Gl171ubdSTwqnV7M5N0wwluenn07PGo1/LPPOR81Qd+UoSDryo3cRf13y1uqxedb0Lu7XCarVZTbuhHQ9jYzthnPUATFJW9iDVxKHFHb26CR/Q3Bn34WolZ7hPpEw32Cts+tnjGVUqIU+IodPGrNjoPVKf5RnwVI9BLvqzQRt1qFuX4IuKqwzFoFO91uUmB8mGy8/jK3CcP5/AnIH7fpa+9pxmISNjuFmMw+MukwwUDHcwLGeXpF9/wnYnmiHQAMAAA==" \ No newline at end of file diff --git a/.nuxt/content/manifest.ts b/.nuxt/content/manifest.ts new file mode 100644 index 0000000..74664ad --- /dev/null +++ b/.nuxt/content/manifest.ts @@ -0,0 +1,33 @@ +export const checksums = { + "content": "v3.5.0--bgIYhpjRuV8zbHJE_CfelwKpJ_Td6YuGJwixiek8lmI" +} +export const checksumsStructure = { + "content": "bgIYhpjRuV8zbHJE_CfelwKpJ_Td6YuGJwixiek8lmI" +} + +export const tables = { + "content": "_content_content", + "info": "_content_info" +} + +export default { + "content": { + "type": "page", + "fields": { + "id": "string", + "title": "string", + "body": "json", + "description": "string", + "extension": "string", + "meta": "json", + "navigation": "json", + "path": "string", + "seo": "json", + "stem": "string" + } + }, + "info": { + "type": "data", + "fields": {} + } +} \ No newline at end of file diff --git a/.nuxt/content/sql_dump.txt b/.nuxt/content/sql_dump.txt new file mode 100644 index 0000000..033fc88 --- /dev/null +++ b/.nuxt/content/sql_dump.txt @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS _content_info (id TEXT PRIMARY KEY, "ready" BOOLEAN, "structureVersion" VARCHAR, "version" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +INSERT INTO _content_info VALUES ('checksum_content', false, 'bgIYhpjRuV8zbHJE_CfelwKpJ_Td6YuGJwixiek8lmI', 'v3.5.0--bgIYhpjRuV8zbHJE_CfelwKpJ_Td6YuGJwixiek8lmI', 'Y3W9btHTWafFT1Y4dZvICwj909Y4Qyfeiw6nXFbAykc'); -- meta +DROP TABLE IF EXISTS _content_content; -- structure +CREATE TABLE IF NOT EXISTS _content_content (id TEXT PRIMARY KEY, "title" VARCHAR, "body" TEXT, "description" VARCHAR, "extension" VARCHAR, "meta" TEXT, "navigation" TEXT DEFAULT true, "path" VARCHAR, "seo" TEXT DEFAULT '{}', "stem" VARCHAR, "__hash__" TEXT UNIQUE); -- structure +UPDATE _content_info SET ready = true WHERE id = 'checksum_content'; -- meta \ No newline at end of file diff --git a/.nuxt/content/types.d.ts b/.nuxt/content/types.d.ts new file mode 100644 index 0000000..ca21356 --- /dev/null +++ b/.nuxt/content/types.d.ts @@ -0,0 +1,21 @@ +import type { PageCollectionItemBase, DataCollectionItemBase } from '@nuxt/content' + +declare module '@nuxt/content' { + /* eslint-disable */ + /** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + + interface ContentCollectionItem extends PageCollectionItemBase {} + + + interface PageCollections { + content: ContentCollectionItem + } + + interface Collections { + content: ContentCollectionItem + } +} diff --git a/.nuxt/dev/index.mjs b/.nuxt/dev/index.mjs new file mode 100644 index 0000000..ce3f3e1 --- /dev/null +++ b/.nuxt/dev/index.mjs @@ -0,0 +1,2640 @@ +import process from 'node:process';globalThis._importMeta_={url:import.meta.url,env:process.env};import { tmpdir } from 'node:os'; +import { defineEventHandler, handleCacheHeaders, splitCookiesString, createEvent, fetchWithEvent, isEvent, eventHandler, setHeaders, sendRedirect, proxyRequest, getRequestHeader, setResponseHeaders, setResponseStatus, send, getRequestHeaders, setResponseHeader, getRequestURL, getResponseHeader, getResponseStatus, createError, getQuery as getQuery$1, readBody, getRouterParam, setHeader, lazyEventHandler, useBase, createApp, createRouter as createRouter$1, toNodeListener, getResponseStatusText } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/h3/dist/index.mjs'; +import { Server } from 'node:http'; +import { resolve, dirname, join } from 'node:path'; +import nodeCrypto from 'node:crypto'; +import { parentPort, threadId } from 'node:worker_threads'; +import { escapeHtml } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/@vue/shared/dist/shared.cjs.js'; +import { createRenderer, getRequestDependencies, getPreloadLinks, getPrefetchLinks } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/vue-bundle-renderer/dist/runtime.mjs'; +import { parseURL, withoutBase, joinURL, getQuery, withQuery, withTrailingSlash, joinRelativeURL } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/ufo/dist/index.mjs'; +import { renderToString } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/vue/server-renderer/index.mjs'; +import destr, { destr as destr$1 } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/destr/dist/index.mjs'; +import { createHooks } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/hookable/dist/index.mjs'; +import { createFetch, Headers as Headers$1 } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/ofetch/dist/node.mjs'; +import { fetchNodeRequestHandler, callNodeRequestHandler } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/node-mock-http/dist/index.mjs'; +import { createStorage, prefixStorage } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unstorage/dist/index.mjs'; +import unstorage_47drivers_47fs from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unstorage/drivers/fs.mjs'; +import { digest, hash as hash$1 } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/ohash/dist/index.mjs'; +import { klona } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/klona/dist/index.mjs'; +import defu, { defuFn } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/defu/dist/defu.mjs'; +import { snakeCase } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/scule/dist/index.mjs'; +import { getContext } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unctx/dist/index.mjs'; +import { toRouteMatcher, createRouter } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/radix3/dist/index.mjs'; +import { readFile } from 'node:fs/promises'; +import consola, { consola as consola$1 } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/consola/dist/index.mjs'; +import { ErrorParser } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/youch-core/build/index.js'; +import { Youch } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/youch/build/index.js'; +import { SourceMapConsumer } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/source-map/source-map.js'; +import { AsyncLocalStorage } from 'node:async_hooks'; +import { stringify, uneval } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/devalue/index.js'; +import { captureRawStackTrace, parseRawStackTrace } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/errx/dist/index.js'; +import { isVNode, toValue, isRef } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/vue/index.mjs'; +import { basename, isAbsolute } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/pathe/dist/index.mjs'; +import { getIcons } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/@iconify/utils/lib/index.mjs'; +import { collections } from 'file:///Users/dkoziavin/code/sub-projects/e-book/.nuxt/nuxt-icon-server-bundle.mjs'; +import { createHead as createHead$1, propsToString, renderSSRHead } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unhead/dist/server.mjs'; +import { DeprecationsPlugin, PromisesPlugin, TemplateParamsPlugin, AliasSortingPlugin } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unhead/dist/plugins.mjs'; +import { walkResolver } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/unhead/dist/utils.mjs'; +import localAdapter from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/db0/dist/connectors/better-sqlite3.mjs'; +import { fileURLToPath } from 'node:url'; +import { ipxFSStorage, ipxHttpStorage, createIPX, createIPXH3Handler } from 'file:///Users/dkoziavin/code/sub-projects/e-book/node_modules/ipx/dist/index.mjs'; + +const serverAssets = [{"baseName":"server","dir":"/Users/dkoziavin/code/sub-projects/e-book/server/assets"}]; + +const assets = createStorage(); + +for (const asset of serverAssets) { + assets.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir, ignore: (asset?.ignore || []) })); +} + +const storage = createStorage({}); + +storage.mount('/assets', assets); + +storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/dkoziavin/code/sub-projects/e-book","watchOptions":{"ignored":[null]}})); +storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/dkoziavin/code/sub-projects/e-book/server","watchOptions":{"ignored":[null]}})); +storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/dkoziavin/code/sub-projects/e-book/.nuxt"})); +storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/dkoziavin/code/sub-projects/e-book/.nuxt/cache"})); +storage.mount('data', unstorage_47drivers_47fs({"driver":"fs","base":"/Users/dkoziavin/code/sub-projects/e-book/.data/kv"})); + +function useStorage(base = "") { + return base ? prefixStorage(storage, base) : storage; +} + +const Hasher = /* @__PURE__ */ (() => { + class Hasher2 { + buff = ""; + #context = /* @__PURE__ */ new Map(); + write(str) { + this.buff += str; + } + dispatch(value) { + const type = value === null ? "null" : typeof value; + return this[type](value); + } + object(object) { + if (object && typeof object.toJSON === "function") { + return this.object(object.toJSON()); + } + const objString = Object.prototype.toString.call(object); + let objType = ""; + const objectLength = objString.length; + objType = objectLength < 10 ? "unknown:[" + objString + "]" : objString.slice(8, objectLength - 1); + objType = objType.toLowerCase(); + let objectNumber = null; + if ((objectNumber = this.#context.get(object)) === void 0) { + this.#context.set(object, this.#context.size); + } else { + return this.dispatch("[CIRCULAR:" + objectNumber + "]"); + } + if (typeof Buffer !== "undefined" && Buffer.isBuffer && Buffer.isBuffer(object)) { + this.write("buffer:"); + return this.write(object.toString("utf8")); + } + if (objType !== "object" && objType !== "function" && objType !== "asyncfunction") { + if (this[objType]) { + this[objType](object); + } else { + this.unknown(object, objType); + } + } else { + const keys = Object.keys(object).sort(); + const extraKeys = []; + this.write("object:" + (keys.length + extraKeys.length) + ":"); + const dispatchForKey = (key) => { + this.dispatch(key); + this.write(":"); + this.dispatch(object[key]); + this.write(","); + }; + for (const key of keys) { + dispatchForKey(key); + } + for (const key of extraKeys) { + dispatchForKey(key); + } + } + } + array(arr, unordered) { + unordered = unordered === void 0 ? false : unordered; + this.write("array:" + arr.length + ":"); + if (!unordered || arr.length <= 1) { + for (const entry of arr) { + this.dispatch(entry); + } + return; + } + const contextAdditions = /* @__PURE__ */ new Map(); + const entries = arr.map((entry) => { + const hasher = new Hasher2(); + hasher.dispatch(entry); + for (const [key, value] of hasher.#context) { + contextAdditions.set(key, value); + } + return hasher.toString(); + }); + this.#context = contextAdditions; + entries.sort(); + return this.array(entries, false); + } + date(date) { + return this.write("date:" + date.toJSON()); + } + symbol(sym) { + return this.write("symbol:" + sym.toString()); + } + unknown(value, type) { + this.write(type); + if (!value) { + return; + } + this.write(":"); + if (value && typeof value.entries === "function") { + return this.array( + [...value.entries()], + true + /* ordered */ + ); + } + } + error(err) { + return this.write("error:" + err.toString()); + } + boolean(bool) { + return this.write("bool:" + bool); + } + string(string) { + this.write("string:" + string.length + ":"); + this.write(string); + } + function(fn) { + this.write("fn:"); + if (isNativeFunction(fn)) { + this.dispatch("[native]"); + } else { + this.dispatch(fn.toString()); + } + } + number(number) { + return this.write("number:" + number); + } + null() { + return this.write("Null"); + } + undefined() { + return this.write("Undefined"); + } + regexp(regex) { + return this.write("regex:" + regex.toString()); + } + arraybuffer(arr) { + this.write("arraybuffer:"); + return this.dispatch(new Uint8Array(arr)); + } + url(url) { + return this.write("url:" + url.toString()); + } + map(map) { + this.write("map:"); + const arr = [...map]; + return this.array(arr, false); + } + set(set) { + this.write("set:"); + const arr = [...set]; + return this.array(arr, false); + } + bigint(number) { + return this.write("bigint:" + number.toString()); + } + } + for (const type of [ + "uint8array", + "uint8clampedarray", + "unt8array", + "uint16array", + "unt16array", + "uint32array", + "unt32array", + "float32array", + "float64array" + ]) { + Hasher2.prototype[type] = function(arr) { + this.write(type + ":"); + return this.array([...arr], false); + }; + } + function isNativeFunction(f) { + if (typeof f !== "function") { + return false; + } + return Function.prototype.toString.call(f).slice( + -15 + /* "[native code] }".length */ + ) === "[native code] }"; + } + return Hasher2; +})(); +function serialize(object) { + const hasher = new Hasher(); + hasher.dispatch(object); + return hasher.buff; +} +function hash(value) { + return digest(typeof value === "string" ? value : serialize(value)).replace(/[-_]/g, "").slice(0, 10); +} + +function defaultCacheOptions() { + return { + name: "_", + base: "/cache", + swr: true, + maxAge: 1 + }; +} +function defineCachedFunction(fn, opts = {}) { + opts = { ...defaultCacheOptions(), ...opts }; + const pending = {}; + const group = opts.group || "nitro/functions"; + const name = opts.name || fn.name || "_"; + const integrity = opts.integrity || hash([fn, opts]); + const validate = opts.validate || ((entry) => entry.value !== void 0); + async function get(key, resolver, shouldInvalidateCache, event) { + const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index"); + let entry = await useStorage().getItem(cacheKey).catch((error) => { + console.error(`[cache] Cache read error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }) || {}; + if (typeof entry !== "object") { + entry = {}; + const error = new Error("Malformed data read from cache."); + console.error("[cache]", error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + } + const ttl = (opts.maxAge ?? 0) * 1e3; + if (ttl) { + entry.expires = Date.now() + ttl; + } + const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false; + const _resolve = async () => { + const isPending = pending[key]; + if (!isPending) { + if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) { + entry.value = void 0; + entry.integrity = void 0; + entry.mtime = void 0; + entry.expires = void 0; + } + pending[key] = Promise.resolve(resolver()); + } + try { + entry.value = await pending[key]; + } catch (error) { + if (!isPending) { + delete pending[key]; + } + throw error; + } + if (!isPending) { + entry.mtime = Date.now(); + entry.integrity = integrity; + delete pending[key]; + if (validate(entry) !== false) { + let setOpts; + if (opts.maxAge && !opts.swr) { + setOpts = { ttl: opts.maxAge }; + } + const promise = useStorage().setItem(cacheKey, entry, setOpts).catch((error) => { + console.error(`[cache] Cache write error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }); + if (event?.waitUntil) { + event.waitUntil(promise); + } + } + } + }; + const _resolvePromise = expired ? _resolve() : Promise.resolve(); + if (entry.value === void 0) { + await _resolvePromise; + } else if (expired && event && event.waitUntil) { + event.waitUntil(_resolvePromise); + } + if (opts.swr && validate(entry) !== false) { + _resolvePromise.catch((error) => { + console.error(`[cache] SWR handler error.`, error); + useNitroApp().captureError(error, { event, tags: ["cache"] }); + }); + return entry; + } + return _resolvePromise.then(() => entry); + } + return async (...args) => { + const shouldBypassCache = await opts.shouldBypassCache?.(...args); + if (shouldBypassCache) { + return fn(...args); + } + const key = await (opts.getKey || getKey)(...args); + const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args); + const entry = await get( + key, + () => fn(...args), + shouldInvalidateCache, + args[0] && isEvent(args[0]) ? args[0] : void 0 + ); + let value = entry.value; + if (opts.transform) { + value = await opts.transform(entry, ...args) || value; + } + return value; + }; +} +function cachedFunction(fn, opts = {}) { + return defineCachedFunction(fn, opts); +} +function getKey(...args) { + return args.length > 0 ? hash(args) : ""; +} +function escapeKey(key) { + return String(key).replace(/\W/g, ""); +} +function defineCachedEventHandler(handler, opts = defaultCacheOptions()) { + const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort(); + const _opts = { + ...opts, + getKey: async (event) => { + const customKey = await opts.getKey?.(event); + if (customKey) { + return escapeKey(customKey); + } + const _path = event.node.req.originalUrl || event.node.req.url || event.path; + let _pathname; + try { + _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index"; + } catch { + _pathname = "-"; + } + const _hashedPath = `${_pathname}.${hash(_path)}`; + const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`); + return [_hashedPath, ..._headers].join(":"); + }, + validate: (entry) => { + if (!entry.value) { + return false; + } + if (entry.value.code >= 400) { + return false; + } + if (entry.value.body === void 0) { + return false; + } + if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") { + return false; + } + return true; + }, + group: opts.group || "nitro/handlers", + integrity: opts.integrity || hash([handler, opts]) + }; + const _cachedHandler = cachedFunction( + async (incomingEvent) => { + const variableHeaders = {}; + for (const header of variableHeaderNames) { + const value = incomingEvent.node.req.headers[header]; + if (value !== void 0) { + variableHeaders[header] = value; + } + } + const reqProxy = cloneWithProxy(incomingEvent.node.req, { + headers: variableHeaders + }); + const resHeaders = {}; + let _resSendBody; + const resProxy = cloneWithProxy(incomingEvent.node.res, { + statusCode: 200, + writableEnded: false, + writableFinished: false, + headersSent: false, + closed: false, + getHeader(name) { + return resHeaders[name]; + }, + setHeader(name, value) { + resHeaders[name] = value; + return this; + }, + getHeaderNames() { + return Object.keys(resHeaders); + }, + hasHeader(name) { + return name in resHeaders; + }, + removeHeader(name) { + delete resHeaders[name]; + }, + getHeaders() { + return resHeaders; + }, + end(chunk, arg2, arg3) { + if (typeof chunk === "string") { + _resSendBody = chunk; + } + if (typeof arg2 === "function") { + arg2(); + } + if (typeof arg3 === "function") { + arg3(); + } + return this; + }, + write(chunk, arg2, arg3) { + if (typeof chunk === "string") { + _resSendBody = chunk; + } + if (typeof arg2 === "function") { + arg2(void 0); + } + if (typeof arg3 === "function") { + arg3(); + } + return true; + }, + writeHead(statusCode, headers2) { + this.statusCode = statusCode; + if (headers2) { + if (Array.isArray(headers2) || typeof headers2 === "string") { + throw new TypeError("Raw headers is not supported."); + } + for (const header in headers2) { + const value = headers2[header]; + if (value !== void 0) { + this.setHeader( + header, + value + ); + } + } + } + return this; + } + }); + const event = createEvent(reqProxy, resProxy); + event.fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, { + fetch: useNitroApp().localFetch + }); + event.$fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, { + fetch: globalThis.$fetch + }); + event.waitUntil = incomingEvent.waitUntil; + event.context = incomingEvent.context; + event.context.cache = { + options: _opts + }; + const body = await handler(event) || _resSendBody; + const headers = event.node.res.getHeaders(); + headers.etag = String( + headers.Etag || headers.etag || `W/"${hash(body)}"` + ); + headers["last-modified"] = String( + headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString() + ); + const cacheControl = []; + if (opts.swr) { + if (opts.maxAge) { + cacheControl.push(`s-maxage=${opts.maxAge}`); + } + if (opts.staleMaxAge) { + cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`); + } else { + cacheControl.push("stale-while-revalidate"); + } + } else if (opts.maxAge) { + cacheControl.push(`max-age=${opts.maxAge}`); + } + if (cacheControl.length > 0) { + headers["cache-control"] = cacheControl.join(", "); + } + const cacheEntry = { + code: event.node.res.statusCode, + headers, + body + }; + return cacheEntry; + }, + _opts + ); + return defineEventHandler(async (event) => { + if (opts.headersOnly) { + if (handleCacheHeaders(event, { maxAge: opts.maxAge })) { + return; + } + return handler(event); + } + const response = await _cachedHandler( + event + ); + if (event.node.res.headersSent || event.node.res.writableEnded) { + return response.body; + } + if (handleCacheHeaders(event, { + modifiedTime: new Date(response.headers["last-modified"]), + etag: response.headers.etag, + maxAge: opts.maxAge + })) { + return; + } + event.node.res.statusCode = response.code; + for (const name in response.headers) { + const value = response.headers[name]; + if (name === "set-cookie") { + event.node.res.appendHeader( + name, + splitCookiesString(value) + ); + } else { + if (value !== void 0) { + event.node.res.setHeader(name, value); + } + } + } + return response.body; + }); +} +function cloneWithProxy(obj, overrides) { + return new Proxy(obj, { + get(target, property, receiver) { + if (property in overrides) { + return overrides[property]; + } + return Reflect.get(target, property, receiver); + }, + set(target, property, value, receiver) { + if (property in overrides) { + overrides[property] = value; + return true; + } + return Reflect.set(target, property, value, receiver); + } + }); +} +const cachedEventHandler = defineCachedEventHandler; + +const inlineAppConfig = { + "nuxt": {}, + "icon": { + "provider": "server", + "class": "", + "aliases": {}, + "iconifyApiEndpoint": "https://api.iconify.design", + "localApiEndpoint": "/api/_nuxt_icon", + "fallbackToApi": true, + "cssSelectorPrefix": "i-", + "cssWherePseudo": true, + "mode": "css", + "attrs": { + "aria-hidden": true + }, + "collections": [ + "academicons", + "akar-icons", + "ant-design", + "arcticons", + "basil", + "bi", + "bitcoin-icons", + "bpmn", + "brandico", + "bx", + "bxl", + "bxs", + "bytesize", + "carbon", + "catppuccin", + "cbi", + "charm", + "ci", + "cib", + "cif", + "cil", + "circle-flags", + "circum", + "clarity", + "codicon", + "covid", + "cryptocurrency", + "cryptocurrency-color", + "dashicons", + "devicon", + "devicon-plain", + "ei", + "el", + "emojione", + "emojione-monotone", + "emojione-v1", + "entypo", + "entypo-social", + "eos-icons", + "ep", + "et", + "eva", + "f7", + "fa", + "fa-brands", + "fa-regular", + "fa-solid", + "fa6-brands", + "fa6-regular", + "fa6-solid", + "fad", + "fe", + "feather", + "file-icons", + "flag", + "flagpack", + "flat-color-icons", + "flat-ui", + "flowbite", + "fluent", + "fluent-emoji", + "fluent-emoji-flat", + "fluent-emoji-high-contrast", + "fluent-mdl2", + "fontelico", + "fontisto", + "formkit", + "foundation", + "fxemoji", + "gala", + "game-icons", + "geo", + "gg", + "gis", + "gravity-ui", + "gridicons", + "grommet-icons", + "guidance", + "healthicons", + "heroicons", + "heroicons-outline", + "heroicons-solid", + "hugeicons", + "humbleicons", + "ic", + "icomoon-free", + "icon-park", + "icon-park-outline", + "icon-park-solid", + "icon-park-twotone", + "iconamoon", + "iconoir", + "icons8", + "il", + "ion", + "iwwa", + "jam", + "la", + "lets-icons", + "line-md", + "logos", + "ls", + "lucide", + "lucide-lab", + "mage", + "majesticons", + "maki", + "map", + "marketeq", + "material-symbols", + "material-symbols-light", + "mdi", + "mdi-light", + "medical-icon", + "memory", + "meteocons", + "mi", + "mingcute", + "mono-icons", + "mynaui", + "nimbus", + "nonicons", + "noto", + "noto-v1", + "octicon", + "oi", + "ooui", + "openmoji", + "oui", + "pajamas", + "pepicons", + "pepicons-pencil", + "pepicons-pop", + "pepicons-print", + "ph", + "pixelarticons", + "prime", + "ps", + "quill", + "radix-icons", + "raphael", + "ri", + "rivet-icons", + "si-glyph", + "simple-icons", + "simple-line-icons", + "skill-icons", + "solar", + "streamline", + "streamline-emojis", + "subway", + "svg-spinners", + "system-uicons", + "tabler", + "tdesign", + "teenyicons", + "token", + "token-branded", + "topcoat", + "twemoji", + "typcn", + "uil", + "uim", + "uis", + "uit", + "uiw", + "unjs", + "vaadin", + "vs", + "vscode-icons", + "websymbol", + "weui", + "whh", + "wi", + "wpf", + "zmdi", + "zondicons" + ], + "fetchTimeout": 1500 + } +}; + + + +const appConfig = defuFn(inlineAppConfig); + +function getEnv(key, opts) { + const envKey = snakeCase(key).toUpperCase(); + return destr( + process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey] + ); +} +function _isObject(input) { + return typeof input === "object" && !Array.isArray(input); +} +function applyEnv(obj, opts, parentKey = "") { + for (const key in obj) { + const subKey = parentKey ? `${parentKey}_${key}` : key; + const envValue = getEnv(subKey, opts); + if (_isObject(obj[key])) { + if (_isObject(envValue)) { + obj[key] = { ...obj[key], ...envValue }; + applyEnv(obj[key], opts, subKey); + } else if (envValue === void 0) { + applyEnv(obj[key], opts, subKey); + } else { + obj[key] = envValue ?? obj[key]; + } + } else { + obj[key] = envValue ?? obj[key]; + } + if (opts.envExpansion && typeof obj[key] === "string") { + obj[key] = _expandFromEnv(obj[key]); + } + } + return obj; +} +const envExpandRx = /\{\{([^{}]*)\}\}/g; +function _expandFromEnv(value) { + return value.replace(envExpandRx, (match, key) => { + return process.env[key] || match; + }); +} + +const _inlineRuntimeConfig = { + "app": { + "baseURL": "/", + "buildId": "dev", + "buildAssetsDir": "/_nuxt/", + "cdnURL": "" + }, + "nitro": { + "envPrefix": "NUXT_", + "routeRules": { + "/__nuxt_error": { + "cache": false + }, + "/__nuxt_content/**": { + "robots": false + }, + "/__nuxt_content/content/sql_dump.txt": { + "prerender": true + }, + "/_fonts/**": { + "headers": { + "cache-control": "public, max-age=31536000, immutable" + }, + "cache": { + "maxAge": 31536000 + } + }, + "/_nuxt/builds/meta/**": { + "headers": { + "cache-control": "public, max-age=31536000, immutable" + } + }, + "/_nuxt/builds/**": { + "headers": { + "cache-control": "public, max-age=1, immutable" + } + } + } + }, + "public": { + "content": { + "wsUrl": "ws://localhost:4000/" + }, + "mdc": { + "components": { + "prose": true, + "map": {} + }, + "headings": { + "anchorLinks": { + "h1": false, + "h2": true, + "h3": true, + "h4": true, + "h5": false, + "h6": false + } + } + } + }, + "icon": { + "serverKnownCssClasses": [] + }, + "content": { + "databaseVersion": "v3.5.0", + "version": "3.6.0", + "database": { + "type": "sqlite", + "filename": "./contents.sqlite" + }, + "localDatabase": { + "type": "sqlite", + "filename": "/Users/dkoziavin/code/sub-projects/e-book/.data/content/contents.sqlite" + }, + "integrityCheck": true + }, + "ipx": { + "baseURL": "/_ipx", + "alias": {}, + "fs": { + "dir": [ + "/Users/dkoziavin/code/sub-projects/e-book/public" + ] + }, + "http": { + "domains": [] + } + } +}; +const envOptions = { + prefix: "NITRO_", + altPrefix: _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_", + envExpansion: _inlineRuntimeConfig.nitro.envExpansion ?? process.env.NITRO_ENV_EXPANSION ?? false +}; +const _sharedRuntimeConfig = _deepFreeze( + applyEnv(klona(_inlineRuntimeConfig), envOptions) +); +function useRuntimeConfig(event) { + if (!event) { + return _sharedRuntimeConfig; + } + if (event.context.nitro.runtimeConfig) { + return event.context.nitro.runtimeConfig; + } + const runtimeConfig = klona(_inlineRuntimeConfig); + applyEnv(runtimeConfig, envOptions); + event.context.nitro.runtimeConfig = runtimeConfig; + return runtimeConfig; +} +const _sharedAppConfig = _deepFreeze(klona(appConfig)); +function useAppConfig(event) { + { + return _sharedAppConfig; + } +} +function _deepFreeze(object) { + const propNames = Object.getOwnPropertyNames(object); + for (const name of propNames) { + const value = object[name]; + if (value && typeof value === "object") { + _deepFreeze(value); + } + } + return Object.freeze(object); +} +new Proxy(/* @__PURE__ */ Object.create(null), { + get: (_, prop) => { + console.warn( + "Please use `useRuntimeConfig()` instead of accessing config directly." + ); + const runtimeConfig = useRuntimeConfig(); + if (prop in runtimeConfig) { + return runtimeConfig[prop]; + } + return void 0; + } +}); + +getContext("nitro-app", { + asyncContext: false, + AsyncLocalStorage: void 0 +}); + +const config = useRuntimeConfig(); +const _routeRulesMatcher = toRouteMatcher( + createRouter({ routes: config.nitro.routeRules }) +); +function createRouteRulesHandler(ctx) { + return eventHandler((event) => { + const routeRules = getRouteRules(event); + if (routeRules.headers) { + setHeaders(event, routeRules.headers); + } + if (routeRules.redirect) { + let target = routeRules.redirect.to; + if (target.endsWith("/**")) { + let targetPath = event.path; + const strpBase = routeRules.redirect._redirectStripBase; + if (strpBase) { + targetPath = withoutBase(targetPath, strpBase); + } + target = joinURL(target.slice(0, -3), targetPath); + } else if (event.path.includes("?")) { + const query = getQuery(event.path); + target = withQuery(target, query); + } + return sendRedirect(event, target, routeRules.redirect.statusCode); + } + if (routeRules.proxy) { + let target = routeRules.proxy.to; + if (target.endsWith("/**")) { + let targetPath = event.path; + const strpBase = routeRules.proxy._proxyStripBase; + if (strpBase) { + targetPath = withoutBase(targetPath, strpBase); + } + target = joinURL(target.slice(0, -3), targetPath); + } else if (event.path.includes("?")) { + const query = getQuery(event.path); + target = withQuery(target, query); + } + return proxyRequest(event, target, { + fetch: ctx.localFetch, + ...routeRules.proxy + }); + } + }); +} +function getRouteRules(event) { + event.context._nitro = event.context._nitro || {}; + if (!event.context._nitro.routeRules) { + event.context._nitro.routeRules = getRouteRulesForPath( + withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL) + ); + } + return event.context._nitro.routeRules; +} +function getRouteRulesForPath(path) { + return defu({}, ..._routeRulesMatcher.matchAll(path).reverse()); +} + +function _captureError(error, type) { + console.error(`[${type}]`, error); + useNitroApp().captureError(error, { tags: [type] }); +} +function trapUnhandledNodeErrors() { + process.on( + "unhandledRejection", + (error) => _captureError(error, "unhandledRejection") + ); + process.on( + "uncaughtException", + (error) => _captureError(error, "uncaughtException") + ); +} +function joinHeaders(value) { + return Array.isArray(value) ? value.join(", ") : String(value); +} +function normalizeFetchResponse(response) { + if (!response.headers.has("set-cookie")) { + return response; + } + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: normalizeCookieHeaders(response.headers) + }); +} +function normalizeCookieHeader(header = "") { + return splitCookiesString(joinHeaders(header)); +} +function normalizeCookieHeaders(headers) { + const outgoingHeaders = new Headers(); + for (const [name, header] of headers) { + if (name === "set-cookie") { + for (const cookie of normalizeCookieHeader(header)) { + outgoingHeaders.append("set-cookie", cookie); + } + } else { + outgoingHeaders.set(name, joinHeaders(header)); + } + } + return outgoingHeaders; +} + +function isJsonRequest(event) { + if (hasReqHeader(event, "accept", "text/html")) { + return false; + } + return hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || hasReqHeader(event, "sec-fetch-mode", "cors") || event.path.startsWith("/api/") || event.path.endsWith(".json"); +} +function hasReqHeader(event, name, includes) { + const value = getRequestHeader(event, name); + return value && typeof value === "string" && value.toLowerCase().includes(includes); +} + +const errorHandler$0 = (async function errorhandler(error, event, { defaultHandler }) { + if (event.handled || isJsonRequest(event)) { + return; + } + const defaultRes = await defaultHandler(error, event, { json: true }); + const statusCode = error.statusCode || 500; + if (statusCode === 404 && defaultRes.status === 302) { + setResponseHeaders(event, defaultRes.headers); + setResponseStatus(event, defaultRes.status, defaultRes.statusText); + return send(event, JSON.stringify(defaultRes.body, null, 2)); + } + if (typeof defaultRes.body !== "string" && Array.isArray(defaultRes.body.stack)) { + defaultRes.body.stack = defaultRes.body.stack.join("\n"); + } + const errorObject = defaultRes.body; + const url = new URL(errorObject.url); + errorObject.url = withoutBase(url.pathname, useRuntimeConfig(event).app.baseURL) + url.search + url.hash; + errorObject.message ||= "Server Error"; + errorObject.data ||= error.data; + errorObject.statusMessage ||= error.statusMessage; + delete defaultRes.headers["content-type"]; + delete defaultRes.headers["content-security-policy"]; + setResponseHeaders(event, defaultRes.headers); + const reqHeaders = getRequestHeaders(event); + const isRenderingError = event.path.startsWith("/__nuxt_error") || !!reqHeaders["x-nuxt-error"]; + const res = isRenderingError ? null : await useNitroApp().localFetch( + withQuery(joinURL(useRuntimeConfig(event).app.baseURL, "/__nuxt_error"), errorObject), + { + headers: { ...reqHeaders, "x-nuxt-error": "true" }, + redirect: "manual" + } + ).catch(() => null); + if (event.handled) { + return; + } + if (!res) { + const { template } = await Promise.resolve().then(function () { return errorDev; }) ; + { + errorObject.description = errorObject.message; + } + setResponseHeader(event, "Content-Type", "text/html;charset=UTF-8"); + return send(event, template(errorObject)); + } + const html = await res.text(); + for (const [header, value] of res.headers.entries()) { + setResponseHeader(event, header, value); + } + setResponseStatus(event, res.status && res.status !== 200 ? res.status : defaultRes.status, res.statusText || defaultRes.statusText); + return send(event, html); +}); + +function defineNitroErrorHandler(handler) { + return handler; +} + +const errorHandler$1 = defineNitroErrorHandler( + async function defaultNitroErrorHandler(error, event) { + const res = await defaultHandler(error, event); + if (!event.node?.res.headersSent) { + setResponseHeaders(event, res.headers); + } + setResponseStatus(event, res.status, res.statusText); + return send( + event, + typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2) + ); + } +); +async function defaultHandler(error, event, opts) { + const isSensitive = error.unhandled || error.fatal; + const statusCode = error.statusCode || 500; + const statusMessage = error.statusMessage || "Server Error"; + const url = getRequestURL(event, { xForwardedHost: true, xForwardedProto: true }); + if (statusCode === 404) { + const baseURL = "/"; + if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) { + const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`; + return { + status: 302, + statusText: "Found", + headers: { location: redirectTo }, + body: `Redirecting...` + }; + } + } + await loadStackTrace(error).catch(consola.error); + const youch = new Youch(); + if (isSensitive && !opts?.silent) { + const tags = [error.unhandled && "[unhandled]", error.fatal && "[fatal]"].filter(Boolean).join(" "); + const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), "."); + consola.error( + `[request error] ${tags} [${event.method}] ${url} + +`, + ansiError + ); + } + const useJSON = opts?.json || !getRequestHeader(event, "accept")?.includes("text/html"); + const headers = { + "content-type": useJSON ? "application/json" : "text/html", + // Prevent browser from guessing the MIME types of resources. + "x-content-type-options": "nosniff", + // Prevent error page from being embedded in an iframe + "x-frame-options": "DENY", + // Prevent browsers from sending the Referer header + "referrer-policy": "no-referrer", + // Disable the execution of any js + "content-security-policy": "script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';" + }; + if (statusCode === 404 || !getResponseHeader(event, "cache-control")) { + headers["cache-control"] = "no-cache"; + } + const body = useJSON ? { + error: true, + url, + statusCode, + statusMessage, + message: error.message, + data: error.data, + stack: error.stack?.split("\n").map((line) => line.trim()) + } : await youch.toHTML(error, { + request: { + url: url.href, + method: event.method, + headers: getRequestHeaders(event) + } + }); + return { + status: statusCode, + statusText: statusMessage, + headers, + body + }; +} +async function loadStackTrace(error) { + if (!(error instanceof Error)) { + return; + } + const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error); + const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n"); + Object.defineProperty(error, "stack", { value: stack }); + if (error.cause) { + await loadStackTrace(error.cause).catch(consola.error); + } +} +async function sourceLoader(frame) { + if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") { + return; + } + if (frame.type === "app") { + const rawSourceMap = await readFile(`${frame.fileName}.map`, "utf8").catch(() => { + }); + if (rawSourceMap) { + const consumer = await new SourceMapConsumer(rawSourceMap); + const originalPosition = consumer.originalPositionFor({ line: frame.lineNumber, column: frame.columnNumber }); + if (originalPosition.source && originalPosition.line) { + frame.fileName = resolve(dirname(frame.fileName), originalPosition.source); + frame.lineNumber = originalPosition.line; + frame.columnNumber = originalPosition.column || 0; + } + } + } + const contents = await readFile(frame.fileName, "utf8").catch(() => { + }); + return contents ? { contents } : void 0; +} +function fmtFrame(frame) { + if (frame.type === "native") { + return frame.raw; + } + const src = `${frame.fileName || ""}:${frame.lineNumber}:${frame.columnNumber})`; + return frame.functionName ? `at ${frame.functionName} (${src}` : `at ${src}`; +} + +const errorHandlers = [errorHandler$0, errorHandler$1]; + +async function errorHandler(error, event) { + for (const handler of errorHandlers) { + try { + await handler(error, event, { defaultHandler }); + if (event.handled) { + return; // Response handled + } + } catch(error) { + // Handler itself thrown, log and continue + console.error(error); + } + } + // H3 will handle fallback +} + +const script = ` +if (!window.__NUXT_DEVTOOLS_TIME_METRIC__) { + Object.defineProperty(window, '__NUXT_DEVTOOLS_TIME_METRIC__', { + value: {}, + enumerable: false, + configurable: true, + }) +} +window.__NUXT_DEVTOOLS_TIME_METRIC__.appInit = Date.now() +`; + +const _cd6pjli97eqk3rtBCICyBsTCAUr095T92PTTK3VSI = (function(nitro) { + nitro.hooks.hook("render:html", (htmlContext) => { + htmlContext.head.push(` diff --git a/assets/css/tailwind.css b/assets/css/tailwind.css new file mode 100644 index 0000000..66f3a69 --- /dev/null +++ b/assets/css/tailwind.css @@ -0,0 +1,42 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --color-primary: rgba(255, 255, 255, 1); + --color-secondary: rgba(229, 30, 125, 1); + --color-three: rgba(245, 75, 126, 1); + + --color-accent-50: #f54378; + --color-accent-100: #e51e7d; + --color-accent-150: #c4035f; + + --color-black-50: #0c1018; + + /* system colors */ + --color-error: oklch(57.7% 0.245 27.325); + --color-warning: oklch(76.9% 0.188 70.08); + + /* disabled */ + --color-text-disabled: oklch(55.1% 0.027 264.364); + --color-bg-disabled: oklch(92.8% 0.006 264.531); +} + +/* Кастомные классы шрифтов */ +.lato-thin { font-family: 'Lato', sans-serif; font-weight: 100; font-style: normal; } +.lato-light { font-family: 'Lato', sans-serif; font-weight: 300; font-style: normal; } +.lato-regular { font-family: 'Lato', sans-serif; font-weight: 400; font-style: normal; } +.lato-bold { font-family: 'Lato', sans-serif; font-weight: 700; font-style: normal; } +.lato-black { font-family: 'Lato', sans-serif; font-weight: 900; font-style: normal; } + +.lato-thin-italic { font-family: 'Lato', sans-serif; font-weight: 100; font-style: italic; } +.lato-light-italic { font-family: 'Lato', sans-serif; font-weight: 300; font-style: italic; } +.lato-regular-italic { font-family: 'Lato', sans-serif; font-weight: 400; font-style: italic; } +.lato-bold-italic { font-family: 'Lato', sans-serif; font-weight: 700; font-style: italic; } +.lato-black-italic { font-family: 'Lato', sans-serif; font-weight: 900; font-style: italic; } + +.russo-one-regular { + font-family: 'Russo One', sans-serif; + font-weight: 700; + font-style: normal; +} \ No newline at end of file diff --git a/src/assets/img/png/bg.png b/assets/img/png/bg.png similarity index 100% rename from src/assets/img/png/bg.png rename to assets/img/png/bg.png diff --git a/src/assets/img/png/shadow.png b/assets/img/png/shadow.png similarity index 100% rename from src/assets/img/png/shadow.png rename to assets/img/png/shadow.png diff --git a/src/assets/img/webp/footer-flowers.webp b/assets/img/webp/footer-flowers.webp similarity index 100% rename from src/assets/img/webp/footer-flowers.webp rename to assets/img/webp/footer-flowers.webp diff --git a/src/assets/img/webp/gradient.webp b/assets/img/webp/gradient.webp similarity index 100% rename from src/assets/img/webp/gradient.webp rename to assets/img/webp/gradient.webp diff --git a/src/assets/img/webp/group-flowers.webp b/assets/img/webp/group-flowers.webp similarity index 100% rename from src/assets/img/webp/group-flowers.webp rename to assets/img/webp/group-flowers.webp diff --git a/src/assets/img/webp/header-flowers-1.webp b/assets/img/webp/header-flowers-1.webp similarity index 100% rename from src/assets/img/webp/header-flowers-1.webp rename to assets/img/webp/header-flowers-1.webp diff --git a/src/assets/img/webp/header-flowers-2.webp b/assets/img/webp/header-flowers-2.webp similarity index 100% rename from src/assets/img/webp/header-flowers-2.webp rename to assets/img/webp/header-flowers-2.webp diff --git a/src/assets/img/webp/header-flowers-3.webp b/assets/img/webp/header-flowers-3.webp similarity index 100% rename from src/assets/img/webp/header-flowers-3.webp rename to assets/img/webp/header-flowers-3.webp diff --git a/src/assets/img/webp/header-flowers-4.webp b/assets/img/webp/header-flowers-4.webp similarity index 100% rename from src/assets/img/webp/header-flowers-4.webp rename to assets/img/webp/header-flowers-4.webp diff --git a/src/assets/img/webp/hero-banner-content.webp b/assets/img/webp/hero-banner-content.webp similarity index 100% rename from src/assets/img/webp/hero-banner-content.webp rename to assets/img/webp/hero-banner-content.webp diff --git a/src/assets/img/webp/hero-flowers.webp b/assets/img/webp/hero-flowers.webp similarity index 100% rename from src/assets/img/webp/hero-flowers.webp rename to assets/img/webp/hero-flowers.webp diff --git a/src/assets/img/webp/vino-galante.webp b/assets/img/webp/vino-galante.webp similarity index 100% rename from src/assets/img/webp/vino-galante.webp rename to assets/img/webp/vino-galante.webp diff --git a/src/assets/vue.svg b/assets/vue.svg similarity index 100% rename from src/assets/vue.svg rename to assets/vue.svg diff --git a/src/components/Typography/UiHeading.vue b/components/Typography/UiHeading.vue similarity index 100% rename from src/components/Typography/UiHeading.vue rename to components/Typography/UiHeading.vue diff --git a/src/components/Typography/UiParagraph.vue b/components/Typography/UiParagraph.vue similarity index 100% rename from src/components/Typography/UiParagraph.vue rename to components/Typography/UiParagraph.vue diff --git a/src/components/UiButton/UiButton.params.ts b/components/UiButton/UiButton.params.ts similarity index 100% rename from src/components/UiButton/UiButton.params.ts rename to components/UiButton/UiButton.params.ts diff --git a/src/components/UiButton/UiButton.vue b/components/UiButton/UiButton.vue similarity index 94% rename from src/components/UiButton/UiButton.vue rename to components/UiButton/UiButton.vue index f68f815..37c8a4e 100644 --- a/src/components/UiButton/UiButton.vue +++ b/components/UiButton/UiButton.vue @@ -11,7 +11,7 @@ - - diff --git a/src/layout/UiFooter/UiFooter.vue b/layouts/UiFooter/UiFooter.vue similarity index 93% rename from src/layout/UiFooter/UiFooter.vue rename to layouts/UiFooter/UiFooter.vue index da17f31..22051c4 100644 --- a/src/layout/UiFooter/UiFooter.vue +++ b/layouts/UiFooter/UiFooter.vue @@ -25,7 +25,7 @@ diff --git a/src/pages/books/_slug/_titlesSlug/indexTitlesPage.vue b/pages/books/[titlesSlug]/[titlesSlug].vue similarity index 55% rename from src/pages/books/_slug/_titlesSlug/indexTitlesPage.vue rename to pages/books/[titlesSlug]/[titlesSlug].vue index 439dac2..d7bd61a 100644 --- a/src/pages/books/_slug/_titlesSlug/indexTitlesPage.vue +++ b/pages/books/[titlesSlug]/[titlesSlug].vue @@ -1,12 +1,20 @@ diff --git a/src/pages/books/_slug/_titlesSlug/_data/title-1.json b/pages/books/[titlesSlug]/_data/title-1.json similarity index 100% rename from src/pages/books/_slug/_titlesSlug/_data/title-1.json rename to pages/books/[titlesSlug]/_data/title-1.json diff --git a/src/pages/books/_slug/_titlesSlug/_data/title-2.json b/pages/books/[titlesSlug]/_data/title-2.json similarity index 100% rename from src/pages/books/_slug/_titlesSlug/_data/title-2.json rename to pages/books/[titlesSlug]/_data/title-2.json diff --git a/src/pages/books/_slug/_data/1.json b/pages/books/_data/1.json similarity index 100% rename from src/pages/books/_slug/_data/1.json rename to pages/books/_data/1.json diff --git a/src/pages/books/_slug/_data/2.json b/pages/books/_data/2.json similarity index 100% rename from src/pages/books/_slug/_data/2.json rename to pages/books/_data/2.json diff --git a/src/pages/mainPage/_ui/feedbackSection/_data/feedback.data.ts b/pages/index/_ui/feedbackSection/_data/feedback.data.ts similarity index 100% rename from src/pages/mainPage/_ui/feedbackSection/_data/feedback.data.ts rename to pages/index/_ui/feedbackSection/_data/feedback.data.ts diff --git a/src/pages/mainPage/_ui/feedbackSection/feedbackSection.vue b/pages/index/_ui/feedbackSection/feedbackSection.vue similarity index 97% rename from src/pages/mainPage/_ui/feedbackSection/feedbackSection.vue rename to pages/index/_ui/feedbackSection/feedbackSection.vue index 7abb298..9e35afb 100644 --- a/src/pages/mainPage/_ui/feedbackSection/feedbackSection.vue +++ b/pages/index/_ui/feedbackSection/feedbackSection.vue @@ -36,7 +36,7 @@ diff --git a/pages/privacy/index.vue b/pages/privacy/index.vue new file mode 100644 index 0000000..4ea8eeb --- /dev/null +++ b/pages/privacy/index.vue @@ -0,0 +1,104 @@ + + + diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..820bcc8 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + "@tailwindcss/postcss": {}, + } + } \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18993ad91cfd43e03b074dd0b5cc3f37ab38e49c GIT binary patch literal 4286 zcmeHLOKuuL5PjK%MHWVi6lD zOGiREbCw`xmFozJ^aNatJY>w+g ze6a2@u~m#^BZm@8wco9#Crlli0uLb^3E$t2-WIc^#(?t)*@`UpuofJ(Uyh@F>b3Ph z$D^m8Xq~pTkGJ4Q`Q2)te3mgkWYZ^Ijq|hkiP^9`De={bQQ%heZC$QU2UpP(-tbl8 zPWD2abEew;oat@w`uP3J^YpsgT%~jT(Dk%oU}sa$7|n6hBjDj`+I;RX(>)%lm_7N{+B7Mu%H?422lE%MBJH!!YTN2oT7xr>>N-8OF$C&qU^ z>vLsa{$0X%q1fjOe3P1mCv#lN{xQ4_*HCSAZjTb1`}mlc+9rl8$B3OP%VT@mch_~G z7Y+4b{r>9e=M+7vSI;BgB?ryZDY4m>&wcHSn81VH1N~`0gvwH{ z8dv#hG|OK`>1;j7tM#B)Z7zDN?{6=dUal}$e