feat: update PWA assets and improve input field styles

This commit is contained in:
2026-08-07 16:35:23 +07:00
parent 96cb8d728b
commit 6f613139f7
20 changed files with 3713 additions and 55 deletions
+42 -1
View File
@@ -3,13 +3,54 @@ import { defineConfig } from 'vitest/config';
import vueJsxVapor from 'vue-jsx-vapor/vite';
import tailwindcss from '@tailwindcss/vite';
import { syncEnginePlugin } from 'vue-sync-engine/plugin';
import { VitePWA } from 'vite-plugin-pwa';
// JSX компилируется сразу в Vapor-код (без interop и virtual DOM).
// Tailwind v4 подключён как Vite-плагин, конфиг живёт в src/app.css (@theme).
// syncEnginePlugin собирает дефы в virtual:sync-engine-registry — его требует
// DevTools-ветка движка в dev-режиме.
export default defineConfig({
plugins: [vueJsxVapor(), tailwindcss(), syncEnginePlugin({ definitions: ['/src/data/defs.ts'] })],
plugins: [
vueJsxVapor(),
tailwindcss(),
syncEnginePlugin({ definitions: ['/src/data/defs.ts'] }),
// Установка на домашний экран — единственный способ вывести IndexedDB
// из-под 7-дневной очистки ITP в WebKit (Safari и Chrome на iOS).
VitePWA({
registerType: 'autoUpdate',
injectRegister: 'auto',
// Иконки и <link>-теги берутся из pwa-assets.config.ts.
pwaAssets: { config: true },
manifest: {
name: 'Ккал — дневник питания',
short_name: 'Ккал',
description: 'Локальный дневник питания: калории, БЖУ, вес. Данные хранятся только на устройстве.',
lang: 'ru',
display: 'standalone',
orientation: 'portrait',
start_url: '/',
scope: '/',
theme_color: '#12100d',
background_color: '#12100d',
},
workbox: {
// woff тут дубли woff2 от fontsource — в прекеш идёт только woff2.
globPatterns: ['**/*.{js,css,html,woff2,svg,png,ico}'],
// Штрихкоды из Open Food Facts: сеть свежее, но офлайн отдаём кэш.
runtimeCaching: [
{
urlPattern: /^https:\/\/world\.openfoodfacts\.org\/.*/,
handler: 'NetworkFirst',
options: {
cacheName: 'off-api',
expiration: { maxEntries: 200, maxAgeSeconds: 60 * 60 * 24 * 30 },
cacheableResponse: { statuses: [0, 200] },
},
},
],
},
}),
],
resolve: {
// vue-sync-engine подключён симлинком (link:), поэтому его импорты `vue`
// уходят в собственную vue из devDependencies движка. Без dedupe в бандл