Przeniesienie autogenerowanych typów do oddzielnego folderu. Dodanie własnego tooltipa do wykresów, a przywrócenie oryginalnego kodu do porządku. Praca nad wykresami była już ukończona, ale przez sugestie Bartka zostałem zmuszony do wzięcia się jeszcze raz za wykresy.

This commit is contained in:
installer
2024-11-22 02:16:17 +01:00
parent 2dea6feee7
commit 7decc31bd4
35 changed files with 1788 additions and 941 deletions

View File

@@ -420,6 +420,57 @@
"useToast": true,
"cacheFullListResponsesStore": true,
"cacheFullListResponsesStores": true,
"listenCurrentUserStore": true
"listenCurrentUserStore": true,
"useDataFetch": true,
"usePBDataFetch": true,
"tabsConfig": true,
"dataForCharts": true,
"useChartData": true,
"Collections": true,
"CulturesNamesbaseOptions": true,
"CulturesTypeOptions": true,
"ProvincesFormOptions": true,
"ReligionsTypeOptions": true,
"StatesFormOptions": true,
"UsersRoleOptions": true,
".": true,
"/": true,
"T": true,
"a": true,
"c": true,
"e": true,
"p": true,
"r": true,
"s": true,
"t": true,
"y": true,
"ChartData": true,
"Config": true,
"ChartConfig": true,
"DataForCharts": true,
"AdminService": true,
"AsyncAuthStore": true,
"BaseAuthStore": true,
"ClientResponseError": true,
"CollectionService": true,
"CrudService": true,
"HealthService": true,
"LocalAuthStore": true,
"LogService": true,
"RealtimeService": true,
"RecordService": true,
"cookieParse": true,
"cookieSerialize": true,
"default": true,
"getTokenPayload": true,
"isTokenExpired": true,
"normalizeUnknownQueryParams": true,
"dFCh": true,
"Progress": true,
"chartsConfig": true,
"useFetchData": true,
"function": true,
"useChartDataFetch": true,
"chartsCategories": true
}
}

BIN
bun.lockb

Binary file not shown.

View File

@@ -11,7 +11,7 @@ RUN bun run build-only
FROM alpine:latest
LABEL maintainer="garandplg@garandplg.com"
LABEL version="0.0.18"
LABEL version="0.0.19"
LABEL description="Garand's WG. Pocketbase + Bun + Vue3 + Vite + TypeScript + TailwindCSS + Shadcn-vue"
ARG PB_VERSION=0.22.26

View File

@@ -1,6 +1,6 @@
{
"name": "garands-world-game",
"version": "0.0.18",
"version": "0.0.19",
"private": true,
"type": "module",
"scripts": {
@@ -17,21 +17,21 @@
"dependencies": {
"@types/bun": "^1.1.13",
"@unhead/vue": "^1.11.11",
"@unovis/ts": "^1.5.0-beta.0",
"@unovis/vue": "^1.5.0-beta.0",
"@vee-validate/zod": "^4.14.4",
"@unovis/ts": "^1.5.0-version.9",
"@unovis/vue": "^1.5.0-beta.3",
"@vee-validate/zod": "^4.14.7",
"@vueuse/core": "^11.2.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"dotenv": "^16.4.5",
"lucide-vue-next": "^0.453.0",
"pinia": "^2.2.4",
"pinia": "^2.2.6",
"pocketbase": "^0.21.5",
"radix-vue": "^1.9.7",
"radix-vue": "^1.9.10",
"tailwind-merge": "^2.5.4",
"tailwindcss-animate": "^1.0.7",
"vee-validate": "^4.14.4",
"vue": "^3.5.12",
"vee-validate": "^4.14.7",
"vue": "^3.5.13",
"vue-router": "^4.4.5",
"zod": "^3.23.8"
},
@@ -42,32 +42,32 @@
"@std/csv": "npm:@jsr/std__csv",
"@tsconfig/node20": "^20.1.4",
"@types/jsdom": "^21.1.7",
"@types/node": "^22.7.9",
"@vitejs/plugin-vue": "^5.1.4",
"@types/node": "^22.9.1",
"@vitejs/plugin-vue": "^5.2.0",
"@vue/eslint-config-prettier": "^10.1.0",
"@vue/eslint-config-typescript": "^14.1.3",
"@vue/test-utils": "^2.4.6",
"@vue/tsconfig": "^0.5.1",
"autoprefixer": "^10.4.20",
"date-fns": "^4.1.0",
"eslint": "^9.13.0",
"eslint-plugin-vue": "^9.29.1",
"eslint": "^9.15.0",
"eslint-plugin-vue": "^9.31.0",
"jsdom": "^25.0.1",
"npm-run-all2": "^7.0.1",
"pocketbase-typegen": "^1.2.1",
"prettier": "^3.3.3",
"prettier-plugin-classnames": "^0.7.3",
"prettier-plugin-classnames": "^0.7.4",
"prettier-plugin-organize-imports": "^4.1.0",
"prettier-plugin-tailwindcss": "^0.6.8",
"prettier-plugin-tailwindcss": "^0.6.9",
"start-server-and-test": "^2.0.8",
"tailwindcss": "^3.4.14",
"tailwindcss": "^3.4.15",
"typescript": "~5.6.3",
"unplugin-auto-import": "^0.18.3",
"unplugin-auto-import": "^0.18.5",
"unplugin-vue-components": "^0.27.4",
"unplugin-vue-router": "^0.10.8",
"vite": "^5.4.10",
"vite-plugin-vue-devtools": "^7.5.3",
"vitest": "^2.1.3",
"vue-tsc": "^2.1.6"
"vite": "^5.4.11",
"vite-plugin-vue-devtools": "^7.6.4",
"vitest": "^2.1.5",
"vue-tsc": "^2.1.10"
}
}

895
src/auto-types/auto-imports.d.ts vendored Normal file
View File

@@ -0,0 +1,895 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
// biome-ignore lint: disable
export {}
declare global {
const AdminService: typeof import('pocketbase')['AdminService']
const AsyncAuthStore: typeof import('pocketbase')['AsyncAuthStore']
const BaseAuthStore: typeof import('pocketbase')['BaseAuthStore']
const Button: typeof import('../components/ui/button/index')['Button']
const Card: typeof import('../components/ui/card/index')['Card']
const CardContent: typeof import('../components/ui/card/index')['CardContent']
const CardDescription: typeof import('../components/ui/card/index')['CardDescription']
const CardFooter: typeof import('../components/ui/card/index')['CardFooter']
const CardHeader: typeof import('../components/ui/card/index')['CardHeader']
const CardTitle: typeof import('../components/ui/card/index')['CardTitle']
const ChartCrosshair: typeof import('../components/ui/chart/index')['ChartCrosshair']
const ChartLegend: typeof import('../components/ui/chart/index')['ChartLegend']
const ChartSingleTooltip: typeof import('../components/ui/chart/index')['ChartSingleTooltip']
const ChartTooltip: typeof import('../components/ui/chart/index')['ChartTooltip']
const ClientResponseError: typeof import('pocketbase')['ClientResponseError']
const CollectionService: typeof import('pocketbase')['CollectionService']
const Collections: typeof import('../types/pb-types')['Collections']
const CrudService: typeof import('pocketbase')['CrudService']
const CulturesNamesbaseOptions: typeof import('../types/pb-types')['CulturesNamesbaseOptions']
const CulturesTypeOptions: typeof import('../types/pb-types')['CulturesTypeOptions']
const Dialog: typeof import('../components/ui/dialog/index')['Dialog']
const DialogClose: typeof import('../components/ui/dialog/index')['DialogClose']
const DialogContent: typeof import('../components/ui/dialog/index')['DialogContent']
const DialogDescription: typeof import('../components/ui/dialog/index')['DialogDescription']
const DialogFooter: typeof import('../components/ui/dialog/index')['DialogFooter']
const DialogHeader: typeof import('../components/ui/dialog/index')['DialogHeader']
const DialogScrollContent: typeof import('../components/ui/dialog/index')['DialogScrollContent']
const DialogTitle: typeof import('../components/ui/dialog/index')['DialogTitle']
const DialogTrigger: typeof import('../components/ui/dialog/index')['DialogTrigger']
const DropdownMenu: typeof import('../components/ui/dropdown-menu/index')['DropdownMenu']
const DropdownMenuCheckboxItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuCheckboxItem']
const DropdownMenuContent: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuContent']
const DropdownMenuGroup: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuGroup']
const DropdownMenuItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuItem']
const DropdownMenuLabel: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuLabel']
const DropdownMenuPortal: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuPortal']
const DropdownMenuRadioGroup: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioGroup']
const DropdownMenuRadioItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioItem']
const DropdownMenuSeparator: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSeparator']
const DropdownMenuShortcut: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuShortcut']
const DropdownMenuSub: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSub']
const DropdownMenuSubContent: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubContent']
const DropdownMenuSubTrigger: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubTrigger']
const DropdownMenuTrigger: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuTrigger']
const EffectScope: typeof import('vue')['EffectScope']
const FORM_ITEM_INJECTION_KEY: typeof import('../components/ui/form/injectionKeys')['FORM_ITEM_INJECTION_KEY']
const Form: typeof import('../components/ui/form/index')['Form']
const FormControl: typeof import('../components/ui/form/index')['FormControl']
const FormDescription: typeof import('../components/ui/form/index')['FormDescription']
const FormField: typeof import('../components/ui/form/index')['FormField']
const FormItem: typeof import('../components/ui/form/index')['FormItem']
const FormLabel: typeof import('../components/ui/form/index')['FormLabel']
const FormMessage: typeof import('../components/ui/form/index')['FormMessage']
const HealthService: typeof import('pocketbase')['HealthService']
const Input: typeof import('../components/ui/input/index')['Input']
const Label: typeof import('../components/ui/label/index')['Label']
const LineChart: typeof import('../components/ui/chart-line/index')['LineChart']
const LocalAuthStore: typeof import('pocketbase')['LocalAuthStore']
const LogService: typeof import('pocketbase')['LogService']
const NavigationMenu: typeof import('../components/ui/navigation-menu/index')['NavigationMenu']
const NavigationMenuContent: typeof import('../components/ui/navigation-menu/index')['NavigationMenuContent']
const NavigationMenuItem: typeof import('../components/ui/navigation-menu/index')['NavigationMenuItem']
const NavigationMenuLink: typeof import('../components/ui/navigation-menu/index')['NavigationMenuLink']
const NavigationMenuList: typeof import('../components/ui/navigation-menu/index')['NavigationMenuList']
const NavigationMenuTrigger: typeof import('../components/ui/navigation-menu/index')['NavigationMenuTrigger']
const NumberField: typeof import('../components/ui/number-field/index')['NumberField']
const NumberFieldContent: typeof import('../components/ui/number-field/index')['NumberFieldContent']
const NumberFieldDecrement: typeof import('../components/ui/number-field/index')['NumberFieldDecrement']
const NumberFieldIncrement: typeof import('../components/ui/number-field/index')['NumberFieldIncrement']
const NumberFieldInput: typeof import('../components/ui/number-field/index')['NumberFieldInput']
const Popover: typeof import('../components/ui/popover/index')['Popover']
const PopoverContent: typeof import('../components/ui/popover/index')['PopoverContent']
const PopoverTrigger: typeof import('../components/ui/popover/index')['PopoverTrigger']
const Progress: typeof import('../components/ui/progress/index')['Progress']
const ProvincesFormOptions: typeof import('../types/pb-types')['ProvincesFormOptions']
const RadioGroup: typeof import('../components/ui/radio-group/index')['RadioGroup']
const RadioGroupItem: typeof import('../components/ui/radio-group/index')['RadioGroupItem']
const RealtimeService: typeof import('pocketbase')['RealtimeService']
const RecordService: typeof import('pocketbase')['RecordService']
const ReligionsTypeOptions: typeof import('../types/pb-types')['ReligionsTypeOptions']
const ScrollArea: typeof import('../components/ui/scroll-area/index')['ScrollArea']
const ScrollBar: typeof import('../components/ui/scroll-area/index')['ScrollBar']
const Separator: typeof import('../components/ui/separator/index')['Separator']
const StatesFormOptions: typeof import('../types/pb-types')['StatesFormOptions']
const Switch: typeof import('../components/ui/switch/index')['Switch']
const Tabs: typeof import('../components/ui/tabs/index')['Tabs']
const TabsContent: typeof import('../components/ui/tabs/index')['TabsContent']
const TabsList: typeof import('../components/ui/tabs/index')['TabsList']
const TabsTrigger: typeof import('../components/ui/tabs/index')['TabsTrigger']
const Toast: typeof import('../components/ui/toast/index')['Toast']
const ToastAction: typeof import('../components/ui/toast/index')['ToastAction']
const ToastClose: typeof import('../components/ui/toast/index')['ToastClose']
const ToastDescription: typeof import('../components/ui/toast/index')['ToastDescription']
const ToastProvider: typeof import('../components/ui/toast/index')['ToastProvider']
const ToastTitle: typeof import('../components/ui/toast/index')['ToastTitle']
const ToastViewport: typeof import('../components/ui/toast/index')['ToastViewport']
const Toaster: typeof import('../components/ui/toast/index')['Toaster']
const UsersRoleOptions: typeof import('../types/pb-types')['UsersRoleOptions']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const afterAll: typeof import('vitest')['afterAll']
const afterEach: typeof import('vitest')['afterEach']
const assert: typeof import('vitest')['assert']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
const beforeAll: typeof import('vitest')['beforeAll']
const beforeEach: typeof import('vitest')['beforeEach']
const buttonVariants: typeof import('../components/ui/button/index')['buttonVariants']
const cacheFullListResponsesStore: typeof import('../stores/cacheFullListResponsesStore')['cacheFullListResponsesStore']
const chai: typeof import('vitest')['chai']
const chartsCategories: typeof import('../data/chartsConfig')['chartsCategories']
const chartsConfig: typeof import('../data/chartsConfig')['chartsConfig']
const computed: typeof import('vue')['computed']
const computedAsync: typeof import('@vueuse/core')['computedAsync']
const computedEager: typeof import('@vueuse/core')['computedEager']
const computedInject: typeof import('@vueuse/core')['computedInject']
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
const controlledRef: typeof import('@vueuse/core')['controlledRef']
const cookieParse: typeof import('pocketbase')['cookieParse']
const cookieSerialize: typeof import('pocketbase')['cookieSerialize']
const createApp: typeof import('vue')['createApp']
const createEventHook: typeof import('@vueuse/core')['createEventHook']
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
const createPinia: typeof import('pinia')['createPinia']
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
const customRef: typeof import('vue')['customRef']
const dFCh: typeof import('../data/dataForCharts')['dFCh']
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
const default: typeof import('pocketbase')['default']
const defaultColors: typeof import('../components/ui/chart/index')['defaultColors']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const defineStore: typeof import('pinia')['defineStore']
const describe: typeof import('vitest')['describe']
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
const effectScope: typeof import('vue')['effectScope']
const expect: typeof import('vitest')['expect']
const extendRef: typeof import('@vueuse/core')['extendRef']
const getActiveHead: typeof import('@unhead/vue')['getActiveHead']
const getActivePinia: typeof import('pinia')['getActivePinia']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const getTokenPayload: typeof import('pocketbase')['getTokenPayload']
const h: typeof import('vue')['h']
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
const inject: typeof import('vue')['inject']
const injectHead: typeof import('@unhead/vue')['injectHead']
const injectLocal: typeof import('@vueuse/core')['injectLocal']
const isDefined: typeof import('@vueuse/core')['isDefined']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const isTokenExpired: typeof import('pocketbase')['isTokenExpired']
const it: typeof import('vitest')['it']
const listenCurrentUserStore: typeof import('../stores/listenCurrentUseStore')['listenCurrentUserStore']
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
const mapActions: typeof import('pinia')['mapActions']
const mapGetters: typeof import('pinia')['mapGetters']
const mapState: typeof import('pinia')['mapState']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const navigationMenuTriggerStyle: typeof import('../components/ui/navigation-menu/index')['navigationMenuTriggerStyle']
const nextTick: typeof import('vue')['nextTick']
const normalizeUnknownQueryParams: typeof import('pocketbase')['normalizeUnknownQueryParams']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
const onLongPress: typeof import('@vueuse/core')['onLongPress']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
const provide: typeof import('vue')['provide']
const provideLocal: typeof import('@vueuse/core')['provideLocal']
const reactify: typeof import('@vueuse/core')['reactify']
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
const reactive: typeof import('vue')['reactive']
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
const reactivePick: typeof import('@vueuse/core')['reactivePick']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
const refDebounced: typeof import('@vueuse/core')['refDebounced']
const refDefault: typeof import('@vueuse/core')['refDefault']
const refThrottled: typeof import('@vueuse/core')['refThrottled']
const refWithControl: typeof import('@vueuse/core')['refWithControl']
const resolveComponent: typeof import('vue')['resolveComponent']
const resolveRef: typeof import('@vueuse/core')['resolveRef']
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
const setActivePinia: typeof import('pinia')['setActivePinia']
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const storeToRefs: typeof import('pinia')['storeToRefs']
const suite: typeof import('vitest')['suite']
const syncRef: typeof import('@vueuse/core')['syncRef']
const syncRefs: typeof import('@vueuse/core')['syncRefs']
const templateRef: typeof import('@vueuse/core')['templateRef']
const test: typeof import('vitest')['test']
const throttledRef: typeof import('@vueuse/core')['throttledRef']
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
const toRaw: typeof import('vue')['toRaw']
const toReactive: typeof import('@vueuse/core')['toReactive']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const toValue: typeof import('vue')['toValue']
const toast: typeof import('../components/ui/toast/use-toast')['toast']
const toastVariants: typeof import('../components/ui/toast/index')['toastVariants']
const triggerRef: typeof import('vue')['triggerRef']
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
const unref: typeof import('vue')['unref']
const unrefElement: typeof import('@vueuse/core')['unrefElement']
const until: typeof import('@vueuse/core')['until']
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
const useAnimate: typeof import('@vueuse/core')['useAnimate']
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
const useArraySome: typeof import('@vueuse/core')['useArraySome']
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
const useAttrs: typeof import('vue')['useAttrs']
const useBase64: typeof import('@vueuse/core')['useBase64']
const useBattery: typeof import('@vueuse/core')['useBattery']
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
const useCached: typeof import('@vueuse/core')['useCached']
const useChartData: typeof import('../composables/useChartData')['useChartData']
const useChartDataFetch: typeof import('../composables/useChartDataFetch')['useChartDataFetch']
const useClipboard: typeof import('@vueuse/core')['useClipboard']
const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems']
const useCloned: typeof import('@vueuse/core')['useCloned']
const useColorMode: typeof import('@vueuse/core')['useColorMode']
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
const useCounter: typeof import('@vueuse/core')['useCounter']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVar: typeof import('@vueuse/core')['useCssVar']
const useCssVars: typeof import('vue')['useCssVars']
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
const useCycleList: typeof import('@vueuse/core')['useCycleList']
const useDark: typeof import('@vueuse/core')['useDark']
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
const useDebounce: typeof import('@vueuse/core')['useDebounce']
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
const useDraggable: typeof import('@vueuse/core')['useDraggable']
const useDropZone: typeof import('@vueuse/core')['useDropZone']
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
const useElementHover: typeof import('@vueuse/core')['useElementHover']
const useElementSize: typeof import('@vueuse/core')['useElementSize']
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
const useEventBus: typeof import('@vueuse/core')['useEventBus']
const useEventListener: typeof import('@vueuse/core')['useEventListener']
const useEventSource: typeof import('@vueuse/core')['useEventSource']
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
const useFavicon: typeof import('@vueuse/core')['useFavicon']
const useFetch: typeof import('@vueuse/core')['useFetch']
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
const useFocus: typeof import('@vueuse/core')['useFocus']
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
const useFormField: typeof import('../components/ui/form/useFormField')['useFormField']
const useFps: typeof import('@vueuse/core')['useFps']
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
const useGamepad: typeof import('@vueuse/core')['useGamepad']
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
const useHead: typeof import('@unhead/vue')['useHead']
const useHeadSafe: typeof import('@unhead/vue')['useHeadSafe']
const useId: typeof import('vue')['useId']
const useIdle: typeof import('@vueuse/core')['useIdle']
const useImage: typeof import('@vueuse/core')['useImage']
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
const useInterval: typeof import('@vueuse/core')['useInterval']
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
const useLink: typeof import('vue-router')['useLink']
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
const useMemoize: typeof import('@vueuse/core')['useMemoize']
const useMemory: typeof import('@vueuse/core')['useMemory']
const useModel: typeof import('vue')['useModel']
const useMounted: typeof import('@vueuse/core')['useMounted']
const useMouse: typeof import('@vueuse/core')['useMouse']
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
const useNetwork: typeof import('@vueuse/core')['useNetwork']
const useNow: typeof import('@vueuse/core')['useNow']
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
const useOnline: typeof import('@vueuse/core')['useOnline']
const usePBDataFetch: typeof import('../composables/usePBDataFetch')['usePBDataFetch']
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
const useParallax: typeof import('@vueuse/core')['useParallax']
const useParentElement: typeof import('@vueuse/core')['useParentElement']
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
const usePermission: typeof import('@vueuse/core')['usePermission']
const usePocketBase: typeof import('../composables/usePocketBase')['default']
const usePointer: typeof import('@vueuse/core')['usePointer']
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
const usePrevious: typeof import('@vueuse/core')['usePrevious']
const useRafFn: typeof import('@vueuse/core')['useRafFn']
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
const useScroll: typeof import('@vueuse/core')['useScroll']
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
const useSeoMeta: typeof import('@unhead/vue')['useSeoMeta']
const useServerHead: typeof import('@unhead/vue')['useServerHead']
const useServerHeadSafe: typeof import('@unhead/vue')['useServerHeadSafe']
const useServerSeoMeta: typeof import('@unhead/vue')['useServerSeoMeta']
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
const useShare: typeof import('@vueuse/core')['useShare']
const useSlots: typeof import('vue')['useSlots']
const useSorted: typeof import('@vueuse/core')['useSorted']
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
const useStepper: typeof import('@vueuse/core')['useStepper']
const useStorage: typeof import('@vueuse/core')['useStorage']
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
const useSupported: typeof import('@vueuse/core')['useSupported']
const useSwipe: typeof import('@vueuse/core')['useSwipe']
const useTemplateRef: typeof import('vue')['useTemplateRef']
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
const useThemeStore: typeof import('../stores/themeStore')['useThemeStore']
const useThrottle: typeof import('@vueuse/core')['useThrottle']
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
const useTimeout: typeof import('@vueuse/core')['useTimeout']
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
const useTitle: typeof import('@vueuse/core')['useTitle']
const useToNumber: typeof import('@vueuse/core')['useToNumber']
const useToString: typeof import('@vueuse/core')['useToString']
const useToast: typeof import('../components/ui/toast/use-toast')['useToast']
const useToggle: typeof import('@vueuse/core')['useToggle']
const useTransition: typeof import('@vueuse/core')['useTransition']
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
const useVModel: typeof import('@vueuse/core')['useVModel']
const useVModels: typeof import('@vueuse/core')['useVModels']
const useVibrate: typeof import('@vueuse/core')['useVibrate']
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
const vi: typeof import('vitest')['vi']
const vitest: typeof import('vitest')['vitest']
const watch: typeof import('vue')['watch']
const watchArray: typeof import('@vueuse/core')['watchArray']
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
const watchDeep: typeof import('@vueuse/core')['watchDeep']
const watchEffect: typeof import('vue')['watchEffect']
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
const watchOnce: typeof import('@vueuse/core')['watchOnce']
const watchPausable: typeof import('@vueuse/core')['watchPausable']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
const whenever: typeof import('@vueuse/core')['whenever']
}
// for type re-export
declare global {
// @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
// @ts-ignore
export type { Collections, CulturesTypeOptions, CulturesNamesbaseOptions, ProvincesFormOptions, ReligionsTypeOptions, StatesFormOptions, UsersRoleOptions } from '../types/pb-types'
import('../types/pb-types')
}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface GlobalComponents {}
interface ComponentCustomProperties {
readonly AdminService: UnwrapRef<typeof import('pocketbase')['AdminService']>
readonly AsyncAuthStore: UnwrapRef<typeof import('pocketbase')['AsyncAuthStore']>
readonly BaseAuthStore: UnwrapRef<typeof import('pocketbase')['BaseAuthStore']>
readonly Button: UnwrapRef<typeof import('../components/ui/button/index')['Button']>
readonly Card: UnwrapRef<typeof import('../components/ui/card/index')['Card']>
readonly CardContent: UnwrapRef<typeof import('../components/ui/card/index')['CardContent']>
readonly CardDescription: UnwrapRef<typeof import('../components/ui/card/index')['CardDescription']>
readonly CardFooter: UnwrapRef<typeof import('../components/ui/card/index')['CardFooter']>
readonly CardHeader: UnwrapRef<typeof import('../components/ui/card/index')['CardHeader']>
readonly CardTitle: UnwrapRef<typeof import('../components/ui/card/index')['CardTitle']>
readonly ChartCrosshair: UnwrapRef<typeof import('../components/ui/chart/index')['ChartCrosshair']>
readonly ChartLegend: UnwrapRef<typeof import('../components/ui/chart/index')['ChartLegend']>
readonly ChartSingleTooltip: UnwrapRef<typeof import('../components/ui/chart/index')['ChartSingleTooltip']>
readonly ChartTooltip: UnwrapRef<typeof import('../components/ui/chart/index')['ChartTooltip']>
readonly ClientResponseError: UnwrapRef<typeof import('pocketbase')['ClientResponseError']>
readonly CollectionService: UnwrapRef<typeof import('pocketbase')['CollectionService']>
readonly Collections: UnwrapRef<typeof import('../types/pb-types')['Collections']>
readonly CrudService: UnwrapRef<typeof import('pocketbase')['CrudService']>
readonly CulturesNamesbaseOptions: UnwrapRef<typeof import('../types/pb-types')['CulturesNamesbaseOptions']>
readonly CulturesTypeOptions: UnwrapRef<typeof import('../types/pb-types')['CulturesTypeOptions']>
readonly Dialog: UnwrapRef<typeof import('../components/ui/dialog/index')['Dialog']>
readonly DialogClose: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogClose']>
readonly DialogContent: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogContent']>
readonly DialogDescription: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogDescription']>
readonly DialogFooter: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogFooter']>
readonly DialogHeader: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogHeader']>
readonly DialogScrollContent: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogScrollContent']>
readonly DialogTitle: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogTitle']>
readonly DialogTrigger: UnwrapRef<typeof import('../components/ui/dialog/index')['DialogTrigger']>
readonly DropdownMenu: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenu']>
readonly DropdownMenuCheckboxItem: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuCheckboxItem']>
readonly DropdownMenuContent: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuContent']>
readonly DropdownMenuGroup: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuGroup']>
readonly DropdownMenuItem: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuItem']>
readonly DropdownMenuLabel: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuLabel']>
readonly DropdownMenuPortal: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuPortal']>
readonly DropdownMenuRadioGroup: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioGroup']>
readonly DropdownMenuRadioItem: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioItem']>
readonly DropdownMenuSeparator: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSeparator']>
readonly DropdownMenuShortcut: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuShortcut']>
readonly DropdownMenuSub: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSub']>
readonly DropdownMenuSubContent: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubContent']>
readonly DropdownMenuSubTrigger: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubTrigger']>
readonly DropdownMenuTrigger: UnwrapRef<typeof import('../components/ui/dropdown-menu/index')['DropdownMenuTrigger']>
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
readonly FORM_ITEM_INJECTION_KEY: UnwrapRef<typeof import('../components/ui/form/injectionKeys')['FORM_ITEM_INJECTION_KEY']>
readonly Form: UnwrapRef<typeof import('../components/ui/form/index')['Form']>
readonly FormControl: UnwrapRef<typeof import('../components/ui/form/index')['FormControl']>
readonly FormDescription: UnwrapRef<typeof import('../components/ui/form/index')['FormDescription']>
readonly FormField: UnwrapRef<typeof import('../components/ui/form/index')['FormField']>
readonly FormItem: UnwrapRef<typeof import('../components/ui/form/index')['FormItem']>
readonly FormLabel: UnwrapRef<typeof import('../components/ui/form/index')['FormLabel']>
readonly FormMessage: UnwrapRef<typeof import('../components/ui/form/index')['FormMessage']>
readonly HealthService: UnwrapRef<typeof import('pocketbase')['HealthService']>
readonly Input: UnwrapRef<typeof import('../components/ui/input/index')['Input']>
readonly Label: UnwrapRef<typeof import('../components/ui/label/index')['Label']>
readonly LineChart: UnwrapRef<typeof import('../components/ui/chart-line/index')['LineChart']>
readonly LocalAuthStore: UnwrapRef<typeof import('pocketbase')['LocalAuthStore']>
readonly LogService: UnwrapRef<typeof import('pocketbase')['LogService']>
readonly NavigationMenu: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenu']>
readonly NavigationMenuContent: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenuContent']>
readonly NavigationMenuItem: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenuItem']>
readonly NavigationMenuLink: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenuLink']>
readonly NavigationMenuList: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenuList']>
readonly NavigationMenuTrigger: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['NavigationMenuTrigger']>
readonly NumberField: UnwrapRef<typeof import('../components/ui/number-field/index')['NumberField']>
readonly NumberFieldContent: UnwrapRef<typeof import('../components/ui/number-field/index')['NumberFieldContent']>
readonly NumberFieldDecrement: UnwrapRef<typeof import('../components/ui/number-field/index')['NumberFieldDecrement']>
readonly NumberFieldIncrement: UnwrapRef<typeof import('../components/ui/number-field/index')['NumberFieldIncrement']>
readonly NumberFieldInput: UnwrapRef<typeof import('../components/ui/number-field/index')['NumberFieldInput']>
readonly Popover: UnwrapRef<typeof import('../components/ui/popover/index')['Popover']>
readonly PopoverContent: UnwrapRef<typeof import('../components/ui/popover/index')['PopoverContent']>
readonly PopoverTrigger: UnwrapRef<typeof import('../components/ui/popover/index')['PopoverTrigger']>
readonly Progress: UnwrapRef<typeof import('../components/ui/progress/index')['Progress']>
readonly ProvincesFormOptions: UnwrapRef<typeof import('../types/pb-types')['ProvincesFormOptions']>
readonly RadioGroup: UnwrapRef<typeof import('../components/ui/radio-group/index')['RadioGroup']>
readonly RadioGroupItem: UnwrapRef<typeof import('../components/ui/radio-group/index')['RadioGroupItem']>
readonly RealtimeService: UnwrapRef<typeof import('pocketbase')['RealtimeService']>
readonly RecordService: UnwrapRef<typeof import('pocketbase')['RecordService']>
readonly ReligionsTypeOptions: UnwrapRef<typeof import('../types/pb-types')['ReligionsTypeOptions']>
readonly ScrollArea: UnwrapRef<typeof import('../components/ui/scroll-area/index')['ScrollArea']>
readonly ScrollBar: UnwrapRef<typeof import('../components/ui/scroll-area/index')['ScrollBar']>
readonly Separator: UnwrapRef<typeof import('../components/ui/separator/index')['Separator']>
readonly StatesFormOptions: UnwrapRef<typeof import('../types/pb-types')['StatesFormOptions']>
readonly Switch: UnwrapRef<typeof import('../components/ui/switch/index')['Switch']>
readonly Tabs: UnwrapRef<typeof import('../components/ui/tabs/index')['Tabs']>
readonly TabsContent: UnwrapRef<typeof import('../components/ui/tabs/index')['TabsContent']>
readonly TabsList: UnwrapRef<typeof import('../components/ui/tabs/index')['TabsList']>
readonly TabsTrigger: UnwrapRef<typeof import('../components/ui/tabs/index')['TabsTrigger']>
readonly Toast: UnwrapRef<typeof import('../components/ui/toast/index')['Toast']>
readonly ToastAction: UnwrapRef<typeof import('../components/ui/toast/index')['ToastAction']>
readonly ToastClose: UnwrapRef<typeof import('../components/ui/toast/index')['ToastClose']>
readonly ToastDescription: UnwrapRef<typeof import('../components/ui/toast/index')['ToastDescription']>
readonly ToastProvider: UnwrapRef<typeof import('../components/ui/toast/index')['ToastProvider']>
readonly ToastTitle: UnwrapRef<typeof import('../components/ui/toast/index')['ToastTitle']>
readonly ToastViewport: UnwrapRef<typeof import('../components/ui/toast/index')['ToastViewport']>
readonly Toaster: UnwrapRef<typeof import('../components/ui/toast/index')['Toaster']>
readonly UsersRoleOptions: UnwrapRef<typeof import('../types/pb-types')['UsersRoleOptions']>
readonly acceptHMRUpdate: UnwrapRef<typeof import('pinia')['acceptHMRUpdate']>
readonly afterAll: UnwrapRef<typeof import('vitest')['afterAll']>
readonly afterEach: UnwrapRef<typeof import('vitest')['afterEach']>
readonly assert: UnwrapRef<typeof import('vitest')['assert']>
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
readonly beforeAll: UnwrapRef<typeof import('vitest')['beforeAll']>
readonly beforeEach: UnwrapRef<typeof import('vitest')['beforeEach']>
readonly buttonVariants: UnwrapRef<typeof import('../components/ui/button/index')['buttonVariants']>
readonly cacheFullListResponsesStore: UnwrapRef<typeof import('../stores/cacheFullListResponsesStore')['cacheFullListResponsesStore']>
readonly chai: UnwrapRef<typeof import('vitest')['chai']>
readonly chartsCategories: UnwrapRef<typeof import('../data/chartsConfig')['chartsCategories']>
readonly computed: UnwrapRef<typeof import('vue')['computed']>
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
readonly cookieParse: UnwrapRef<typeof import('pocketbase')['cookieParse']>
readonly cookieSerialize: UnwrapRef<typeof import('pocketbase')['cookieSerialize']>
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
readonly createPinia: UnwrapRef<typeof import('pinia')['createPinia']>
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
readonly createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
readonly dFCh: UnwrapRef<typeof import('../data/dataForCharts')['dFCh']>
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
readonly default: UnwrapRef<typeof import('pocketbase')['default']>
readonly defaultColors: UnwrapRef<typeof import('../components/ui/chart/index')['defaultColors']>
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
readonly defineStore: UnwrapRef<typeof import('pinia')['defineStore']>
readonly describe: UnwrapRef<typeof import('vitest')['describe']>
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
readonly expect: UnwrapRef<typeof import('vitest')['expect']>
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
readonly getActiveHead: UnwrapRef<typeof import('@unhead/vue')['getActiveHead']>
readonly getActivePinia: UnwrapRef<typeof import('pinia')['getActivePinia']>
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
readonly getTokenPayload: UnwrapRef<typeof import('pocketbase')['getTokenPayload']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly injectHead: UnwrapRef<typeof import('@unhead/vue')['injectHead']>
readonly injectLocal: UnwrapRef<typeof import('@vueuse/core')['injectLocal']>
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
readonly isTokenExpired: UnwrapRef<typeof import('pocketbase')['isTokenExpired']>
readonly it: UnwrapRef<typeof import('vitest')['it']>
readonly listenCurrentUserStore: UnwrapRef<typeof import('../stores/listenCurrentUseStore')['listenCurrentUserStore']>
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
readonly mapActions: UnwrapRef<typeof import('pinia')['mapActions']>
readonly mapGetters: UnwrapRef<typeof import('pinia')['mapGetters']>
readonly mapState: UnwrapRef<typeof import('pinia')['mapState']>
readonly mapStores: UnwrapRef<typeof import('pinia')['mapStores']>
readonly mapWritableState: UnwrapRef<typeof import('pinia')['mapWritableState']>
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
readonly navigationMenuTriggerStyle: UnwrapRef<typeof import('../components/ui/navigation-menu/index')['navigationMenuTriggerStyle']>
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
readonly normalizeUnknownQueryParams: UnwrapRef<typeof import('pocketbase')['normalizeUnknownQueryParams']>
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly provideLocal: UnwrapRef<typeof import('@vueuse/core')['provideLocal']>
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
readonly ref: UnwrapRef<typeof import('vue')['ref']>
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
readonly setActivePinia: UnwrapRef<typeof import('pinia')['setActivePinia']>
readonly setMapStoreSuffix: UnwrapRef<typeof import('pinia')['setMapStoreSuffix']>
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
readonly storeToRefs: UnwrapRef<typeof import('pinia')['storeToRefs']>
readonly suite: UnwrapRef<typeof import('vitest')['suite']>
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
readonly test: UnwrapRef<typeof import('vitest')['test']>
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
readonly toast: UnwrapRef<typeof import('../components/ui/toast/use-toast')['toast']>
readonly toastVariants: UnwrapRef<typeof import('../components/ui/toast/index')['toastVariants']>
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
readonly unref: UnwrapRef<typeof import('vue')['unref']>
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
readonly useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
readonly useChartData: UnwrapRef<typeof import('../composables/useChartData')['useChartData']>
readonly useChartDataFetch: UnwrapRef<typeof import('../composables/useChartDataFetch')['useChartDataFetch']>
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
readonly useClipboardItems: UnwrapRef<typeof import('@vueuse/core')['useClipboardItems']>
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
readonly useFormField: UnwrapRef<typeof import('../components/ui/form/useFormField')['useFormField']>
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
readonly useHead: UnwrapRef<typeof import('@unhead/vue')['useHead']>
readonly useHeadSafe: UnwrapRef<typeof import('@unhead/vue')['useHeadSafe']>
readonly useId: UnwrapRef<typeof import('vue')['useId']>
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
readonly usePBDataFetch: UnwrapRef<typeof import('../composables/usePBDataFetch')['usePBDataFetch']>
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
readonly useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
readonly usePocketBase: UnwrapRef<typeof import('../composables/usePocketBase')['default']>
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
readonly useSeoMeta: UnwrapRef<typeof import('@unhead/vue')['useSeoMeta']>
readonly useServerHead: UnwrapRef<typeof import('@unhead/vue')['useServerHead']>
readonly useServerHeadSafe: UnwrapRef<typeof import('@unhead/vue')['useServerHeadSafe']>
readonly useServerSeoMeta: UnwrapRef<typeof import('@unhead/vue')['useServerSeoMeta']>
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
readonly useThemeStore: UnwrapRef<typeof import('../stores/themeStore')['useThemeStore']>
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
readonly useToast: UnwrapRef<typeof import('../components/ui/toast/use-toast')['useToast']>
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
readonly vi: UnwrapRef<typeof import('vitest')['vi']>
readonly vitest: UnwrapRef<typeof import('vitest')['vitest']>
readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
readonly watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
}
}

View File

@@ -19,6 +19,7 @@ declare module 'vue' {
ChartLegend: typeof import('./../components/ui/chart/ChartLegend.vue')['default']
ChartSingleTooltip: typeof import('./../components/ui/chart/ChartSingleTooltip.vue')['default']
ChartTooltip: typeof import('./../components/ui/chart/ChartTooltip.vue')['default']
CustomChartTooltip: typeof import('./../components/charts-and-stats/customChartTooltip.vue')['default']
Dialog: typeof import('./../components/ui/dialog/Dialog.vue')['default']
DialogClose: typeof import('./../components/ui/dialog/DialogClose.vue')['default']
DialogContent: typeof import('./../components/ui/dialog/DialogContent.vue')['default']
@@ -68,6 +69,7 @@ declare module 'vue' {
PopoverContent: typeof import('./../components/ui/popover/PopoverContent.vue')['default']
PopoverTrigger: typeof import('./../components/ui/popover/PopoverTrigger.vue')['default']
PreviewReportTab: typeof import('./../components/admin-panel/previewReportTab.vue')['default']
Progress: typeof import('./../components/ui/progress/Progress.vue')['default']
RadioGroup: typeof import('./../components/ui/radio-group/RadioGroup.vue')['default']
RadioGroupItem: typeof import('./../components/ui/radio-group/RadioGroupItem.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
@@ -75,8 +77,6 @@ declare module 'vue' {
ScrollArea: typeof import('./../components/ui/scroll-area/ScrollArea.vue')['default']
ScrollBar: typeof import('./../components/ui/scroll-area/ScrollBar.vue')['default']
Separator: typeof import('./../components/ui/separator/Separator.vue')['default']
SimplifedChartTooltip: typeof import('../components/charts-and-stats/simplifiedChartTooltip.vue')['default']
SimplifiedChartTooltip: typeof import('./../components/charts-and-stats/simplifiedChartTooltip.vue')['default']
Switch: typeof import('./../components/ui/switch/Switch.vue')['default']
Tabs: typeof import('./../components/ui/tabs/Tabs.vue')['default']
TabsContent: typeof import('./../components/ui/tabs/TabsContent.vue')['default']

View File

@@ -20,7 +20,12 @@ declare module 'vue-router/auto-routes' {
export interface RouteNamedMap {
'/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
'/admin-panel': RouteRecordInfo<'/admin-panel', '/admin-panel', Record<never, never>, Record<never, never>>,
'/charts-and-stats': RouteRecordInfo<'/charts-and-stats', '/charts-and-stats', Record<never, never>, Record<never, never>>,
'/charts-and-stats/burgs/[subgroup]': RouteRecordInfo<'/charts-and-stats/burgs/[subgroup]', '/charts-and-stats/burgs/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/charts-and-stats/cultures/[subgroup]': RouteRecordInfo<'/charts-and-stats/cultures/[subgroup]', '/charts-and-stats/cultures/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/charts-and-stats/misc/[subgroup]': RouteRecordInfo<'/charts-and-stats/misc/[subgroup]', '/charts-and-stats/misc/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/charts-and-stats/provinces/[subgroup]': RouteRecordInfo<'/charts-and-stats/provinces/[subgroup]', '/charts-and-stats/provinces/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/charts-and-stats/religions/[subgroup]': RouteRecordInfo<'/charts-and-stats/religions/[subgroup]', '/charts-and-stats/religions/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/charts-and-stats/states/[subgroup]': RouteRecordInfo<'/charts-and-stats/states/[subgroup]', '/charts-and-stats/states/:subgroup', { subgroup: ParamValue<true> }, { subgroup: ParamValue<false> }>,
'/login': RouteRecordInfo<'/login', '/login', Record<never, never>, Record<never, never>>,
'/map': RouteRecordInfo<'/map', '/map', Record<never, never>, Record<never, never>>,
'/profile': RouteRecordInfo<'/profile', '/profile', Record<never, never>, Record<never, never>>,

View File

@@ -104,7 +104,7 @@ const pb_url = import.meta.env.PROD ? '/_/' : '/pb/_/';
<NavigationMenuLink :class="navigationMenuTriggerStyle()" class="flex items-center gap-1">
<Icon icon="majesticons:presentation-chart" class="h-4 w-4 text-primary" />
<RouterLink to="/charts-and-stats">Wykresy i statystyki</RouterLink>
<RouterLink to="/charts-and-stats/states/cells">Wykresy i statystyki</RouterLink>
</NavigationMenuLink>
</NavigationMenuItem>

View File

@@ -13,10 +13,9 @@ const props = defineProps<{
const pb = usePocketBase();
const { toast } = useToast();
const cd = cacheFullListResponsesStore();
const { cd, fetchDataForTurnEndTab } = usePBDataFetch();
if (!cd.turnsData.length) await cd.fetchTurnsData();
if (!cd.statesData.length) await cd.fetchStatesData();
await fetchDataForTurnEndTab();
const turns = ref(cd.turnsData.slice().reverse());
const turn = ref(turns[0]);

View File

@@ -1,26 +0,0 @@
<script lang="ts" setup>
import type { ChartData, Config } from '@/types/chartsTypes';
defineProps<{
config: Config;
labels: string[];
charts: Record<string, ChartData[]>;
}>();
</script>
<template>
<div v-for="(chart, _, index) in charts" :key="index" class="mb-4 flex flex-col">
<Label class="my-4 text-center text-5xl font-bold text-primary"> {{ labels[index] }} </Label>
<LineChart
v-once
:categories="config.categories"
index="turn"
:colors="config.colors"
:data="chart"
class="h-[900px]"
:show-legend="true"
:show-tooltip="true"
/>
</div>
</template>

View File

@@ -0,0 +1,63 @@
<script setup lang="ts">
const props = defineProps<{
title?: string;
data: {
name: string;
color: string;
value: any;
}[];
}>();
props.data.sort((a, b) => b.value - a.value);
// const paginatedData = ref(props.data.slice(0, 70));
// const pagination = ref([paginatedData.value]);
// if (props.data.length > 70) {
// for (let i = 70; i < props.data.length; i += 70) {
// pagination.value.push(props.data.slice(i, i + 70));
// }
// }
// const selectedPagination = ref(0);
</script>
<template>
<Card class="text-sm opacity-75">
<CardHeader v-if="title" class="border-b p-3">
<CardTitle> <span class="text-primary">Tura</span>: {{ title }} </CardTitle>
<!-- <CardDescription v-if="pagination.length > 1">
Strona {{ selectedPagination + 1 }} / {{ pagination.length }}
</CardDescription> -->
</CardHeader>
<CardContent class="flex min-w-[180px] flex-col gap-1 p-3">
<!-- <div
v-if="pagination[selectedPagination]"
:key="selectedPagination"
class="grid max-w-[1300px] grid-cols-5 gap-3"
> -->
<div class="grid max-w-[1300px] grid-cols-5 gap-3">
<div
v-for="(item, key) in data"
:key="key"
class="bottom-1 flex justify-between rounded-md border p-2"
>
<div class="flex items-center">
<span class="mr-2 h-2.5 w-2.5">
<svg width="100%" height="100%" viewBox="0 0 30 30">
<path
d="M 15 15 m -14, 0 a 14,14 0 1,1 28,0 a 14,14 0 1,1 -28,0"
:stroke="item.color"
:fill="item.color"
stroke-width="1"
/>
</svg>
</span>
<span>{{ item.name }}</span>
</div>
<span class="ml-4 flex items-center font-semibold">{{ item.value }}</span>
</div>
</div>
</CardContent>
</Card>
</template>

View File

@@ -49,7 +49,7 @@ function onLegendItemClick(d: BulletLegendItemInterface, i: number) {
<template>
<div ref="elRef" class="w-max">
<ScrollArea class="mb-2 ms-40 w-screen whitespace-nowrap rounded-md border">
<ScrollArea class="mb-2 w-screen whitespace-nowrap rounded-md border">
<VisBulletLegend :items="items" :on-legend-item-click="onLegendItemClick" class="ms-10" />
<ScrollBar orientation="horizontal" />
</ScrollArea>

View File

@@ -1,7 +1,7 @@
<script setup lang="ts">
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
const props = defineProps<{
defineProps<{
title?: string;
data: {
name: string;
@@ -9,42 +9,32 @@ const props = defineProps<{
value: any;
}[];
}>();
props.data.sort((a, b) => b.value - a.value);
</script>
<template>
<Card class="text-sm">
<CardHeader v-if="title" class="border-b p-3">
<CardTitle> <span class="text-primary">Tura</span>: {{ title }} </CardTitle>
<CardTitle>
{{ title }}
</CardTitle>
</CardHeader>
<CardContent class="flex min-w-[180px] flex-col gap-1 p-3">
<ScrollArea class="h-full w-full">
<div class="grid max-w-[1300px] grid-cols-5 gap-3">
<div
v-for="(item, key) in data"
:key="key"
class="bottom-1 flex justify-between rounded-md border p-2"
>
<div class="flex items-center">
<span class="mr-2 h-2.5 w-2.5">
<svg width="100%" height="100%" viewBox="0 0 30 30">
<path
d=" M 15 15 m -14, 0 a 14,14 0 1,1 28,0 a 14,14 0 1,1 -28,0"
:stroke="item.color"
:fill="item.color"
stroke-width="1"
/>
</svg>
</span>
<span>{{ item.name }}</span>
</div>
<span class="ml-4 flex items-center font-semibold">{{ item.value }}</span>
</div>
<div v-for="(item, key) in data" :key="key" class="flex justify-between">
<div class="flex items-center">
<span class="mr-2 h-2.5 w-2.5">
<svg width="100%" height="100%" viewBox="0 0 30 30">
<path
d=" M 15 15 m -14, 0 a 14,14 0 1,1 28,0 a 14,14 0 1,1 -28,0"
:stroke="item.color"
:fill="item.color"
stroke-width="1"
/>
</svg>
</span>
<span>{{ item.name }}</span>
</div>
<ScrollBar orientation="vertical" />
</ScrollArea>
<span class="ml-4 font-semibold">{{ item.value }}</span>
</div>
</CardContent>
</Card>
</template>

View File

@@ -0,0 +1,27 @@
<script setup lang="ts">
import { cn } from '@/lib/utils';
import { ProgressIndicator, ProgressRoot, type ProgressRootProps } from 'radix-vue';
import { computed, type HTMLAttributes } from 'vue';
const props = withDefaults(defineProps<ProgressRootProps & { class?: HTMLAttributes['class'] }>(), {
modelValue: 0
});
const delegatedProps = computed(() => {
const { class: _, ...delegated } = props;
return delegated;
});
</script>
<template>
<ProgressRoot
v-bind="delegatedProps"
:class="cn('relative h-4 w-full overflow-hidden rounded-full bg-secondary', props.class)"
>
<ProgressIndicator
class="h-full w-full flex-1 bg-primary transition-all"
:style="`transform: translateX(-${100 - (props.modelValue ?? 0)}%);`"
/>
</ProgressRoot>
</template>

View File

@@ -0,0 +1 @@
export { default as Progress } from './Progress.vue';

View File

@@ -0,0 +1,98 @@
import type { ChartData, DataForChart } from '@/types/chartsTypes';
// TODO: dodać specjalne przypadki
export const useChartData = (cd: any, dataForChart: globalThis.ComputedRef<DataForChart>) => {
const generateChartContent = () => {
for (let i = 0; i < cd.turnsData.value.length - 1; i++) {
const turn = cd.turnsData.value[i];
const dataInTurn = cd[`${dataForChart.value.group}Data`].value.filter(
item => item.turn === turn.id
);
const dataItem = { turn: turn.value } as ChartData;
for (let j = 0; j < dataInTurn.length; j++) {
const item = dataInTurn[j];
dataItem[item.name] = item[dataForChart.value.subgroup];
}
dataForChart.value.chart.push(dataItem);
// metrics.forEach(metric => {
// const dataItem = { turn: turn.value };
// if (metric === 'burgs' && (key === 'states' || key === 'religions' || key === 'cultures')) {
// dataInTurn.forEach(item => {
// const burgsCount = cd.burgsData.value.filter(
// burg => burg[key.slice(0, -1)] === item.id
// ).length;
// dataItem[item.name] = burgsCount || 0;
// });
// } else {
// dataInTurn.forEach(item => {
// dataItem[item.name] = item[metric] || 0;
// });
// }
// dataForCharts.value[key].charts[metric].push(dataItem);
// });
}
// Object.entries(chartMappings).forEach(([key, metrics]) => {
// for (let i = 0; i < cd.turnsData.value.length - 1; i++) {
// const turn = cd.turnsData.value[i];
// const dataInTurn = cd[`${key}Data`].value.filter(item => item.turn === turn.id);
// metrics.forEach(metric => {
// const dataItem = { turn: turn.value };
// if (
// metric === 'burgs' &&
// (key === 'states' || key === 'religions' || key === 'cultures')
// ) {
// dataInTurn.forEach(item => {
// const burgsCount = cd.burgsData.value.filter(
// burg => burg[key.slice(0, -1)] === item.id
// ).length;
// dataItem[item.name] = burgsCount || 0;
// });
// } else {
// dataInTurn.forEach(item => {
// dataItem[item.name] = item[metric] || 0;
// });
// }
// dataForCharts.value[key].charts[metric].push(dataItem);
// });
// }
// });
// for (let i = 0; i < cd.turnsData.value.length - 1; i++) {
// const turn = cd.turnsData.value[i];
// const statesDataInTurn = cd.statesData.value.filter(state => state.turn === turn.id);
// const dataItem = { turn: turn.value };
// statesDataInTurn.forEach(state => {
// const provincesCount = cd.provincesData.value.filter(
// province => province.state === state.id
// ).length;
// dataItem[state.name] = provincesCount;
// });
// dataForCharts.value.states.charts.provinces.push(dataItem);
// }
// for (let i = 0; i < cd.turnsData.value.length - 1; i++) {
// const turn = cd.turnsData.value[i];
// const burgsDataInTurn = cd.burgsData.value.filter(burg => burg.turn === turn.id);
// const populationDataItem = { turn: turn.value };
// const buildingsFeatures = [0, 0, 0, 0, 0, 0, 0];
// burgsDataInTurn.forEach(burg => {
// populationDataItem[burg.name] = burg.population || 0;
// if (burg.isCapital) buildingsFeatures[0]++;
// if (burg.isPort) buildingsFeatures[1]++;
// if (burg.isCitadel) buildingsFeatures[2]++;
// if (burg.isWalls) buildingsFeatures[3]++;
// if (burg.isPlaza) buildingsFeatures[4]++;
// if (burg.isTemple) buildingsFeatures[5]++;
// if (burg.isShantyTown) buildingsFeatures[6]++;
// });
// dataForCharts.value.burgs.charts.population.push(populationDataItem);
// const featuresDataItem = { turn: turn.value };
// dataForCharts.value.misc.config.categories.forEach((category, index) => {
// featuresDataItem[category] = buildingsFeatures[index];
// });
// dataForCharts.value.misc.charts.features.push(featuresDataItem);
// }
};
return { generateChartContent };
};

View File

@@ -0,0 +1,36 @@
export async function useChartDataFetch(group: globalThis.ComputedRef<any>) {
const {
fetchStatesData,
fetchProvincesData,
fetchBurgsData,
fetchCulturesData,
fetchReligionsData
} = cacheFullListResponsesStore();
const cd = storeToRefs(cacheFullListResponsesStore());
const chartDataFetch = async () => {
switch (group.value) {
case 'states':
if (!cd.statesData.value.length) await fetchStatesData();
break;
case 'provinces':
if (!cd.provincesData.value.length) await fetchProvincesData();
break;
case 'burgs':
if (!cd.burgsData.value.length) await fetchBurgsData();
break;
case 'cultures':
if (!cd.culturesData.value.length) await fetchCulturesData();
break;
case 'religions':
if (!cd.religionsData.value.length) await fetchReligionsData();
break;
case 'misc':
if (!cd.burgsData.value.length) await fetchBurgsData();
break;
}
};
return { chartDataFetch };
}

View File

@@ -0,0 +1,28 @@
export function usePBDataFetch() {
const {
fetchTurnsData,
fetchStatesData,
fetchProvincesData,
fetchBurgsData,
fetchCulturesData,
fetchReligionsData
} = cacheFullListResponsesStore();
const cd = storeToRefs(cacheFullListResponsesStore());
const fetchAllData = async () => {
if (!cd.turnsData.value.length) await fetchTurnsData();
if (!cd.statesData.value.length) await fetchStatesData();
if (!cd.provincesData.value.length) await fetchProvincesData();
if (!cd.burgsData.value.length) await fetchBurgsData();
if (!cd.culturesData.value.length) await fetchCulturesData();
if (!cd.religionsData.value.length) await fetchReligionsData();
};
const fetchDataForTurnEndTab = async () => {
if (!cd.turnsData.value.length) await fetchTurnsData();
if (!cd.statesData.value.length) await fetchStatesData();
};
return { cd, fetchAllData, fetchDataForTurnEndTab };
}

49
src/data/chartsConfig.ts Normal file
View File

@@ -0,0 +1,49 @@
export const chartsCategories = [
{
name: 'states',
label: 'Państwa',
description: 'Statystyki państw',
labels: {
cells: 'Ilość kratek',
burgs: 'Ilość miast',
provinces: 'Ilość prowincji',
ruralPopulation: 'Ilość populacji wiejskiej ',
urbanPopulation: 'Ilość populacji miejskiej'
}
},
{
name: 'provinces',
label: 'Prowincje',
description: 'Statystyki prowincji',
labels: {
cells: 'Ilość kratek',
burgs: 'Ilość miast',
ruralPopulation: 'Ilość populacji wiejskiej ',
urbanPopulation: 'Ilość populacji miejskiej'
}
},
{
name: 'burgs',
label: 'Miasta',
description: 'Statystyki miast',
labels: { population: 'Ilość populacji' }
},
{
name: 'cultures',
label: 'Kultury',
description: 'Statystyki kultur',
labels: { cells: 'Ilość kratek', population: 'Ilość populacji', burgs: 'Ilość miast' }
},
{
name: 'religions',
label: 'Religie',
description: 'Statystyki religii',
labels: { cells: 'Ilość kratek', population: 'Ilość populacji', burgs: 'Ilość miast' }
},
{
name: 'misc',
label: 'Pozostałe',
description: 'pozostałe statystyki',
labels: { features: 'Własności miast' }
}
];

54
src/data/dataForCharts.ts Normal file
View File

@@ -0,0 +1,54 @@
import type { DataForCharts } from '@/types/chartsTypes';
export const dFCh: DataForCharts = {
states: {
config: { categories: [], colors: [] },
charts: {
burgs: [],
provinces: [],
cells: [],
ruralPopulation: [],
urbanPopulation: []
}
},
provinces: {
config: { categories: [], colors: [] },
charts: {
burgs: [],
cells: [],
ruralPopulation: [],
urbanPopulation: []
}
},
burgs: {
config: { categories: [], colors: [] },
charts: {
population: []
}
},
cultures: {
config: { categories: [], colors: [] },
charts: {
cells: [],
population: [],
burgs: []
}
},
religions: {
config: { categories: [], colors: [] },
charts: {
cells: [],
population: [],
burgs: []
}
},
misc: {
config: {
categories: ['Capitals', 'Ports', 'Citadels', 'Walls', 'Plazas', 'Temples', 'Shanty Towns'],
colors: ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#FFFFFF']
},
charts: {
features: []
}
}
};

View File

@@ -1,341 +0,0 @@
<script setup lang="ts">
useHead({
title: "Garand's WG | Wykresy i statystyki"
});
import type { ChartData, Config, DataForCharts } from '@/types/chartsTypes';
import type { BurgsResponse } from '@/types/pb-types';
const cd = cacheFullListResponsesStore();
if (!cd.turnsData.length) await cd.fetchTurnsData();
if (!cd.statesData.length) await cd.fetchStatesData();
if (!cd.provincesData.length) await cd.fetchProvincesData();
if (!cd.burgsData.length) await cd.fetchBurgsData();
if (!cd.culturesData.length) await cd.fetchCulturesData();
if (!cd.religionsData.length) await cd.fetchReligionsData();
const turnsData = cd.turnsData;
const statesData = cd.statesData;
const provincesData = cd.provincesData;
const burgsData = cd.burgsData;
const culturesData = cd.culturesData;
const religionsData = cd.religionsData;
const dataForCharts: DataForCharts = {
states: {
config: { categories: [], colors: [] },
charts: {
burgs: [],
provinces: [],
cells: [],
ruralPopulation: [],
urbanPopulation: []
}
},
provinces: {
config: { categories: [], colors: [] },
charts: {
burgs: [],
cells: [],
ruralPopulation: [],
urbanPopulation: []
}
},
burgs: {
config: { categories: [], colors: [] },
charts: {
population: []
// features: []
}
},
cultures: {
config: { categories: [], colors: [] },
charts: {
cells: [],
population: [],
burgs: []
}
},
religions: {
config: { categories: [], colors: [] },
charts: {
cells: [],
population: [],
burgs: []
}
},
misc: {
config: {
categories: ['Capitals', 'Ports', 'Citadels', 'Walls', 'Plazas', 'Temples', 'Shanty Towns'],
colors: ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#FFFFFF']
},
charts: {
features: []
}
}
};
const configsDataSets = [
{ data: statesData, key: 'states' },
{ data: provincesData, key: 'provinces' },
{ data: burgsData, key: 'burgs' },
{ data: culturesData, key: 'cultures' },
{ data: religionsData, key: 'religions' }
];
for (let i = 0; i < configsDataSets.length; i++) {
const dataset = configsDataSets[i];
const config = dataForCharts[dataset.key].config;
config.categories = dataset.data.map(item => item.name);
if (dataset.data[0].color) config.colors = dataset.data.map(item => item.color);
else if (!dataset.data[0].color && dataset.key === 'burgs')
config.colors = dataset.data.map(
burg => statesData.find(state => state.id === (burg as BurgsResponse).state)?.color
);
}
for (let i = 0; i < turnsData.length - 1; i++) {
const turn = turnsData[i];
const statesDataInTurn = statesData.filter(state => state.turn === turn.id);
const provincesDataInTurn = provincesData.filter(province => province.turn === turn.id);
const buildingsFeaturesDataItems: ChartData[] = [{ turn: turn.value }];
const burgsDataInTurn = burgsData.filter(burg => burg.turn === turn.id);
const culturesDataInTurn = culturesData.filter(culture => culture.turn === turn.id);
const religionsDataInTurn = religionsData.filter(religion => religion.turn === turn.id);
const statesDataItems: ChartData[] = [
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value }
];
for (let j = 0; j < statesDataInTurn.length; j++) {
const state = statesDataInTurn[j];
statesDataItems[0][state.name] = state.burgs;
statesDataItems[1][state.name] = provincesData.filter(
province => province.state === state.id
).length;
statesDataItems[2][state.name] = state.cells;
statesDataItems[3][state.name] = state.ruralPopulation;
statesDataItems[4][state.name] = state.urbanPopulation;
}
dataForCharts.states.charts.burgs.push(statesDataItems[0]);
dataForCharts.states.charts.provinces.push(statesDataItems[1]);
dataForCharts.states.charts.cells.push(statesDataItems[2]);
dataForCharts.states.charts.ruralPopulation.push(statesDataItems[3]);
dataForCharts.states.charts.urbanPopulation.push(statesDataItems[4]);
const provincesDataItems: ChartData[] = [
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value }
];
for (let j = 0; j < provincesDataInTurn.length; j++) {
const province = provincesDataInTurn[j];
provincesDataItems[0][province.name] = province.burgs;
provincesDataItems[1][province.name] = province.cells;
provincesDataItems[2][province.name] = province.ruralPopulation;
provincesDataItems[3][province.name] = province.urbanPopulation;
}
dataForCharts.provinces.charts.burgs.push(provincesDataItems[0]);
dataForCharts.provinces.charts.cells.push(provincesDataItems[1]);
dataForCharts.provinces.charts.ruralPopulation.push(provincesDataItems[2]);
dataForCharts.provinces.charts.urbanPopulation.push(provincesDataItems[3]);
const burgsDataItems: ChartData[] = [{ turn: turn.value }];
const buildingsFeatures = [0, 0, 0, 0, 0, 0, 0];
for (let j = 0; j < burgsDataInTurn.length; j++) {
const burg = burgsData[j];
burgsDataItems[0][burg.name] = burg.population;
if (burg.isCapital) buildingsFeatures[0]++;
if (burg.isPort) buildingsFeatures[1]++;
if (burg.isCitadel) buildingsFeatures[2]++;
if (burg.isWalls) buildingsFeatures[3]++;
if (burg.isPlaza) buildingsFeatures[4]++;
if (burg.isTemple) buildingsFeatures[5]++;
if (burg.isShantyTown) buildingsFeatures[6]++;
const categories = dataForCharts.misc.config.categories;
for (let k = 0; k < categories.length; k++) {
buildingsFeaturesDataItems[0][categories[k]] = buildingsFeatures[k];
}
}
dataForCharts.burgs.charts.population.push(burgsDataItems[0]);
dataForCharts.misc.charts.features.push(buildingsFeaturesDataItems[0]);
const culturesDataItems: ChartData[] = [
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value }
];
for (let j = 0; j < culturesDataInTurn.length; j++) {
const culture = culturesDataInTurn[j];
const burgsCount = burgsDataInTurn.filter(burg => burg.culture === culture.id).length;
culturesDataItems[0][culture.name] = culture.cells;
culturesDataItems[1][culture.name] = culture.population;
culturesDataItems[2][culture.name] = burgsCount;
}
dataForCharts.cultures.charts.cells.push(culturesDataItems[0]);
dataForCharts.cultures.charts.population.push(culturesDataItems[1]);
dataForCharts.cultures.charts.burgs.push(culturesDataItems[2]);
const religionsDataItems: ChartData[] = [
{ turn: turn.value },
{ turn: turn.value },
{ turn: turn.value }
];
for (let j = 0; j < religionsDataInTurn.length; j++) {
const religion = religionsDataInTurn[j];
const burgsCount = burgsDataInTurn.filter(burg => burg.religion === religion.id).length;
religionsDataItems[0][religion.name] = religion.cells;
religionsDataItems[1][religion.name] = religion.population;
religionsDataItems[2][religion.name] = burgsCount;
}
dataForCharts.religions.charts.cells.push(religionsDataItems[0]);
dataForCharts.religions.charts.population.push(religionsDataItems[1]);
dataForCharts.religions.charts.burgs.push(religionsDataItems[2]);
}
const tabs: {
name: string;
label: string;
description: string;
props: {
config: Config;
labels: string[];
charts: Record<string, ChartData[]>;
};
}[] = [
{
name: 'states',
label: 'Państwa',
description: 'Statystyki państw',
props: {
config: dataForCharts.states.config,
labels: [
'Ilość miast',
'Ilość prowincji',
'Ilość kratek',
'Ilość populacji wiejskiej ',
'Ilość populacji miejskiej'
],
charts: dataForCharts.states.charts
}
},
{
name: 'provinces',
label: 'Prowincje',
description: 'Statystyki prowincji',
props: {
config: dataForCharts.provinces.config,
labels: [
'Ilość miast',
'Ilość kratek',
'Ilość populacji wiejskiej ',
'Ilość populacji miejskiej'
],
charts: dataForCharts.provinces.charts
}
},
{
name: 'burgs',
label: 'Miasta',
description: 'Statystyki miast',
props: {
config: dataForCharts.burgs.config,
labels: ['Ilość populacji', 'Ilość specjalnych budynków'],
charts: dataForCharts.burgs.charts
}
},
{
name: 'cultures',
label: 'Kultury',
description: 'Statystyki kultur',
props: {
config: dataForCharts.cultures.config,
labels: ['Ilość kratek', 'Ilość populacji', 'Ilość miast'],
charts: dataForCharts.cultures.charts
}
},
{
name: 'religions',
label: 'Religie',
description: 'Statystyki religii',
props: {
config: dataForCharts.religions.config,
labels: ['Ilość kratek', 'Ilość populacji', 'Ilość miast'],
charts: dataForCharts.religions.charts
}
},
{
name: 'misc',
label: 'Pozostałe',
description: 'pozostałe statystyki',
props: {
config: dataForCharts.misc.config,
labels: ['Własności miast'],
charts: dataForCharts.misc.charts
}
}
];
</script>
<template>
<div class="mt-12 flex h-screen items-center justify-center">
<Tabs class="flex w-full flex-col items-center justify-center" :default-value="tabs[0].name">
<TabsList class="w-full items-center justify-center">
<TabsTrigger v-for="tab in tabs" :key="tab.name" :value="tab.name">
{{ tab.label }}
</TabsTrigger>
</TabsList>
<TabsContent
v-for="tab in tabs"
:key="tab.name"
:value="tab.name"
class="h-screen w-full flex-col items-center justify-center"
>
<Card>
<CardHeader>
<CardTitle>
{{ tab.label }}
</CardTitle>
<CardDescription class="flex flex-col">
{{ tab.description }}
</CardDescription>
</CardHeader>
<Separator />
<CardContent class="space-y-2 py-6">
<ChartComponent
:config="tab.props.config"
:charts="tab.props.charts"
:labels="tab.props.labels"
/>
</CardContent>
</Card>
</TabsContent>
</Tabs>
</div>
</template>

View File

@@ -0,0 +1,132 @@
<script setup lang="ts">
import customChartTooltip from '@/components/charts-and-stats/customChartTooltip.vue';
import type { DataForChart } from '@/types/chartsTypes';
useHead({
title: `Garand's WG | Wykresy i statystyki | Państwa`
});
// TODO: przenieść subskrypcję z cache do tego pliku
// TODO: dokończyć resztę plików
const route = useRoute();
const group = ref('states');
const subgroup = computed(() => route.params.subgroup);
const chartsSubcategories = computed(
() => chartsCategories.filter(category => category.name === group.value)[0].labels
);
const { fetchTurnsData, fetchStatesData } = cacheFullListResponsesStore();
const cd = storeToRefs(cacheFullListResponsesStore());
if (!cd.turnsData.value.length) await fetchTurnsData();
if (!cd.statesData.value.length) await fetchStatesData();
const dataForCharts = computed<DataForChart>(() => ({
group: group.value,
subgroup: subgroup.value,
config: dFCh[group.value].config,
chart: dFCh[group.value].charts[subgroup.value]
}));
const statesDataItem = cd.statesData.value.filter(
item => item.turn === cd.turnsData.value[cd.turnsData.value.length - 2].id
);
dataForCharts.value.config.categories = statesDataItem.map(item => item.name);
dataForCharts.value.config.colors = statesDataItem[0]?.color
? statesDataItem.map(item => item.color)
: statesDataItem.map(item => {
return cd.statesData.value.find(state => state.id === item.state)?.color || '#000';
});
const { generateChartContent } = useChartData(cd, dataForCharts);
generateChartContent();
const chartData = computed(() => {
dataForCharts.value.chart = [];
generateChartContent();
return dataForCharts.value.chart;
});
watch(
[cd.turnsData, cd.statesData, cd.provincesData, cd.burgsData, cd.culturesData, cd.religionsData],
() => {
dataForCharts.value.chart = [];
generateChartContent();
},
{ deep: true }
);
watch([subgroup], () => {
dataForCharts.value.chart = [];
generateChartContent();
});
</script>
<template>
<div class="mt-2 flex h-screen flex-col items-center">
<NavigationMenu class="max-h-10">
<NavigationMenuList>
<NavigationMenuItem
v-for="category in chartsCategories"
:key="category.name"
class="mb-4 gap-5"
>
<NavigationMenuLink :class="navigationMenuTriggerStyle()" class="flex items-center gap-1">
<RouterLink
:to="`/charts-and-stats/${category.name}/${Object.keys(category.labels)[0]}/`"
>
{{ category.label }}
</RouterLink>
</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
<NavigationMenu class="max-h-10">
<NavigationMenuList>
<NavigationMenuItem
v-for="(subcategory, subcategoryKey) in chartsSubcategories"
:key="subcategory"
class="gap-5"
>
<NavigationMenuLink :class="navigationMenuTriggerStyle()" class="flex items-center gap-1">
<RouterLink :to="`/charts-and-stats/${group}/${subcategoryKey}/`">
{{ subcategory }}
</RouterLink>
</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
<Card class="mx-10 w-screen">
<CardHeader>
<CardTitle class="ps-10 text-primary">
{{ chartsCategories.find(config => config.name === group)?.label }}
</CardTitle>
<CardDescription class="flex flex-col ps-10">
{{ chartsSubcategories[subgroup] }}
</CardDescription>
</CardHeader>
<Separator />
<CardContent class="space-y-2 overflow-x-auto py-6">
<LineChart
:categories="dataForCharts.config.categories"
index="turn"
:colors="dataForCharts.config.colors"
:data="chartData"
class="mb-3 mt-6 h-[800px]"
:custom-tooltip="customChartTooltip"
/>
</CardContent>
</Card>
</div>
</template>

View File

@@ -13,7 +13,7 @@ const { toast } = useToast();
>Witaj na <span class="text-primary">Garandowym WG</span>!</h1
>
<p class="mb-4 text-sm">Wersja: <span class="text-primary">0.0.18 Indev</span></p>
<p class="mb-4 text-sm">Wersja: <span class="text-primary">0.0.19 Indev</span></p>
<a
href="https://discord.gg/vhBmFVpR3w"

View File

@@ -6,10 +6,12 @@ import type {
StatesResponse,
TurnsResponse
} from '@/types/pb-types';
import type { UnsubscribeFunc } from 'pocketbase';
const ONE_HOUR = 60 * 60 * 1000; // 1 godzina w milisekundach
export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesStore', () => {
const pb = usePocketBase();
const { toast } = useToast();
const turnsData = ref<TurnsResponse<unknown>[]>([]);
const statesData = ref<StatesResponse<unknown, unknown, unknown, unknown, unknown>[]>([]);
@@ -19,7 +21,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
const religionsData = ref<ReligionsResponse<unknown>[]>([]);
const fetchTurnsData = async () => {
if (turnsData.value.length && isCached('turnsData')) return turnsData.value;
if (isCached('turnsData') && turnsData.value.length) {
readCached('turnsData', turnsData);
return turnsData.value;
}
try {
const data = await pb.collection('turns').getFullList();
turnsData.value = data;
@@ -35,7 +41,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
};
const fetchStatesData = async () => {
if (statesData.value.length && isCached('statesData')) return statesData.value;
if (isCached('statesData') && statesData.value.length) {
readCached('statesData', statesData);
return statesData.value;
}
try {
const data = await pb.collection('states').getFullList();
statesData.value = data;
@@ -51,7 +61,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
};
const fetchProvincesData = async () => {
if (provincesData.value.length && isCached('provincesData')) return provincesData.value;
if (isCached('provincesData') && provincesData.value.length) {
readCached('provincesData', provincesData);
return provincesData.value;
}
try {
const data = await pb.collection('provinces').getFullList();
provincesData.value = data;
@@ -67,7 +81,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
};
const fetchBurgsData = async () => {
if (burgsData.value.length && isCached('burgsData')) return burgsData.value;
if (isCached('burgsData') && burgsData.value.length) {
readCached('burgsData', burgsData);
return burgsData.value;
}
try {
const data = await pb.collection('burgs').getFullList();
burgsData.value = data;
@@ -83,7 +101,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
};
const fetchCulturesData = async () => {
if (culturesData.value.length && isCached('culturesData')) return culturesData.value;
if (isCached('culturesData') && culturesData.value.length) {
readCached('culturesData', culturesData);
return culturesData.value;
}
try {
const data = await pb.collection('cultures').getFullList();
culturesData.value = data;
@@ -99,7 +121,11 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
};
const fetchReligionsData = async () => {
if (religionsData.value.length && isCached('religionsData')) return religionsData.value;
if (isCached('religionsData') && religionsData.value.length) {
readCached('religionsData', religionsData);
return religionsData.value;
}
try {
const data = await pb.collection('religions').getFullList();
religionsData.value = data;
@@ -114,20 +140,176 @@ export const cacheFullListResponsesStore = defineStore('cacheFullListResponsesSt
}
};
const cacheData = (key, data) => {
const cacheData = (key: string, data: unknown[]) => {
const now = new Date().getTime();
localStorage.setItem(key, JSON.stringify({ data, timestamp: now }));
};
const isCached = key => {
const isCached = (key: string) => {
const cachedData = localStorage.getItem(key);
if (!cachedData) return false;
console.log(cachedData);
const { timestamp } = JSON.parse(cachedData);
return new Date().getTime() - timestamp < ONE_HOUR;
};
// TODO: Funkcja czytająca z localstorage i wpisująca w fetcha jego zawartość
const readCached = (key: string, ref: Ref<unknown[]>) => {
const cachedData = localStorage.getItem(key);
if (cachedData) {
const { data } = JSON.parse(cachedData);
ref.value = data;
}
};
let turnsSubscription: UnsubscribeFunc;
let statesSubscription: UnsubscribeFunc;
let provincesSubscription: UnsubscribeFunc;
let burgsSubscription: UnsubscribeFunc;
let culturesSubscription: UnsubscribeFunc;
let religionsSubscription: UnsubscribeFunc;
onMounted(async () => {
turnsSubscription = await pb.collection('turns').subscribe('*', e => {
switch (e.action) {
case 'create':
turnsData.value.push(e.record);
cacheData('turnsData', turnsData.value);
break;
case 'update':
turnsData.value = turnsData.value.map(turn => {
if (turn.id === e.record.id) return e.record;
return turn;
});
cacheData('turnsData', turnsData.value);
break;
case 'delete':
turnsData.value = turnsData.value.filter(turn => turn.id !== e.record.id);
cacheData('turnsData', turnsData.value);
break;
}
});
statesSubscription = await pb.collection('states').subscribe('*', e => {
switch (e.action) {
case 'create':
statesData.value.push(e.record);
cacheData('statesData', statesData.value);
break;
case 'update':
statesData.value = statesData.value.map(state => {
if (state.id === e.record.id) return e.record;
return state;
});
cacheData('statesData', statesData.value);
break;
case 'delete':
statesData.value = statesData.value.filter(state => state.id !== e.record.id);
cacheData('statesData', statesData.value);
break;
}
});
provincesSubscription = await pb.collection('provinces').subscribe('*', e => {
switch (e.action) {
case 'create':
provincesData.value.push(e.record);
cacheData('provincesData', provincesData.value);
break;
case 'update':
provincesData.value = provincesData.value.map(province => {
if (province.id === e.record.id) return e.record;
return province;
});
cacheData('provincesData', provincesData.value);
break;
case 'delete':
provincesData.value = provincesData.value.filter(province => province.id !== e.record.id);
cacheData('provincesData', provincesData.value);
break;
}
});
burgsSubscription = await pb.collection('burgs').subscribe('*', e => {
switch (e.action) {
case 'create':
burgsData.value.push(e.record);
cacheData('burgsData', burgsData.value);
break;
case 'update':
burgsData.value = burgsData.value.map(burg => {
if (burg.id === e.record.id) return e.record;
return burg;
});
cacheData('burgsData', burgsData.value);
break;
case 'delete':
burgsData.value = burgsData.value.filter(burg => burg.id !== e.record.id);
cacheData('burgsData', burgsData.value);
break;
}
});
culturesSubscription = await pb.collection('cultures').subscribe('*', e => {
switch (e.action) {
case 'create':
culturesData.value.push(e.record);
cacheData('culturesData', culturesData.value);
break;
case 'update':
culturesData.value = culturesData.value.map(culture => {
if (culture.id === e.record.id) return e.record;
return culture;
});
cacheData('culturesData', culturesData.value);
break;
case 'delete':
culturesData.value = culturesData.value.filter(culture => culture.id !== e.record.id);
cacheData('culturesData', culturesData.value);
break;
}
});
religionsSubscription = await pb.collection('religions').subscribe('*', e => {
switch (e.action) {
case 'create':
religionsData.value.push(e.record);
cacheData('religionsData', religionsData.value);
break;
case 'update':
religionsData.value = religionsData.value.map(religion => {
if (religion.id === e.record.id) return e.record;
return religion;
});
cacheData('religionsData', religionsData.value);
break;
case 'delete':
religionsData.value = religionsData.value.filter(religion => religion.id !== e.record.id);
cacheData('religionsData', religionsData.value);
break;
}
});
});
onUnmounted(() => {
turnsSubscription();
statesSubscription();
provincesSubscription();
burgsSubscription();
culturesSubscription();
religionsSubscription();
});
// TODO: Subskrypcja in real time aktualizująca localstorage jeżeli się zmieni kolekcja
return {

View File

@@ -1,432 +0,0 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
// biome-ignore lint: disable
export {}
declare global {
const BarChart: (typeof import('../components/ui/chart-bar/index'))['BarChart']
const Button: typeof import('../components/ui/button/index')['Button']
const Card: typeof import('../components/ui/card/index')['Card']
const CardContent: typeof import('../components/ui/card/index')['CardContent']
const CardDescription: typeof import('../components/ui/card/index')['CardDescription']
const CardFooter: typeof import('../components/ui/card/index')['CardFooter']
const CardHeader: typeof import('../components/ui/card/index')['CardHeader']
const CardTitle: typeof import('../components/ui/card/index')['CardTitle']
const ChartCrosshair: typeof import('../components/ui/chart/index')['ChartCrosshair']
const ChartLegend: typeof import('../components/ui/chart/index')['ChartLegend']
const ChartSingleTooltip: typeof import('../components/ui/chart/index')['ChartSingleTooltip']
const ChartTooltip: typeof import('../components/ui/chart/index')['ChartTooltip']
const Dialog: typeof import('../components/ui/dialog/index')['Dialog']
const DialogClose: typeof import('../components/ui/dialog/index')['DialogClose']
const DialogContent: typeof import('../components/ui/dialog/index')['DialogContent']
const DialogDescription: typeof import('../components/ui/dialog/index')['DialogDescription']
const DialogFooter: typeof import('../components/ui/dialog/index')['DialogFooter']
const DialogHeader: typeof import('../components/ui/dialog/index')['DialogHeader']
const DialogScrollContent: typeof import('../components/ui/dialog/index')['DialogScrollContent']
const DialogTitle: typeof import('../components/ui/dialog/index')['DialogTitle']
const DialogTrigger: typeof import('../components/ui/dialog/index')['DialogTrigger']
const DropdownMenu: typeof import('../components/ui/dropdown-menu/index')['DropdownMenu']
const DropdownMenuCheckboxItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuCheckboxItem']
const DropdownMenuContent: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuContent']
const DropdownMenuGroup: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuGroup']
const DropdownMenuItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuItem']
const DropdownMenuLabel: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuLabel']
const DropdownMenuPortal: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuPortal']
const DropdownMenuRadioGroup: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioGroup']
const DropdownMenuRadioItem: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuRadioItem']
const DropdownMenuSeparator: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSeparator']
const DropdownMenuShortcut: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuShortcut']
const DropdownMenuSub: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSub']
const DropdownMenuSubContent: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubContent']
const DropdownMenuSubTrigger: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuSubTrigger']
const DropdownMenuTrigger: typeof import('../components/ui/dropdown-menu/index')['DropdownMenuTrigger']
const EffectScope: typeof import('vue')['EffectScope']
const FORM_ITEM_INJECTION_KEY: typeof import('../components/ui/form/injectionKeys')['FORM_ITEM_INJECTION_KEY']
const Form: typeof import('../components/ui/form/index')['Form']
const FormControl: typeof import('../components/ui/form/index')['FormControl']
const FormDescription: typeof import('../components/ui/form/index')['FormDescription']
const FormField: typeof import('../components/ui/form/index')['FormField']
const FormItem: typeof import('../components/ui/form/index')['FormItem']
const FormLabel: typeof import('../components/ui/form/index')['FormLabel']
const FormMessage: typeof import('../components/ui/form/index')['FormMessage']
const Input: typeof import('../components/ui/input/index')['Input']
const Label: typeof import('../components/ui/label/index')['Label']
const LineChart: typeof import('../components/ui/chart-line/index')['LineChart']
const NavigationMenu: typeof import('../components/ui/navigation-menu/index')['NavigationMenu']
const NavigationMenuContent: typeof import('../components/ui/navigation-menu/index')['NavigationMenuContent']
const NavigationMenuItem: typeof import('../components/ui/navigation-menu/index')['NavigationMenuItem']
const NavigationMenuLink: typeof import('../components/ui/navigation-menu/index')['NavigationMenuLink']
const NavigationMenuList: typeof import('../components/ui/navigation-menu/index')['NavigationMenuList']
const NavigationMenuTrigger: typeof import('../components/ui/navigation-menu/index')['NavigationMenuTrigger']
const NumberField: typeof import('../components/ui/number-field/index')['NumberField']
const NumberFieldContent: typeof import('../components/ui/number-field/index')['NumberFieldContent']
const NumberFieldDecrement: typeof import('../components/ui/number-field/index')['NumberFieldDecrement']
const NumberFieldIncrement: typeof import('../components/ui/number-field/index')['NumberFieldIncrement']
const NumberFieldInput: typeof import('../components/ui/number-field/index')['NumberFieldInput']
const Popover: typeof import('../components/ui/popover/index')['Popover']
const PopoverContent: typeof import('../components/ui/popover/index')['PopoverContent']
const PopoverTrigger: typeof import('../components/ui/popover/index')['PopoverTrigger']
const RadioGroup: typeof import('../components/ui/radio-group/index')['RadioGroup']
const RadioGroupItem: typeof import('../components/ui/radio-group/index')['RadioGroupItem']
const ResizableHandle: (typeof import('../components/ui/resizable/index'))['ResizableHandle']
const ResizablePanel: (typeof import('../components/ui/resizable/index'))['ResizablePanel']
const ResizablePanelGroup: (typeof import('../components/ui/resizable/index'))['ResizablePanelGroup']
const ScrollArea: typeof import('../components/ui/scroll-area/index')['ScrollArea']
const ScrollBar: typeof import('../components/ui/scroll-area/index')['ScrollBar']
const Separator: typeof import('../components/ui/separator/index')['Separator']
const Switch: typeof import('../components/ui/switch/index')['Switch']
const Tabs: typeof import('../components/ui/tabs/index')['Tabs']
const TabsContent: typeof import('../components/ui/tabs/index')['TabsContent']
const TabsList: typeof import('../components/ui/tabs/index')['TabsList']
const TabsTrigger: typeof import('../components/ui/tabs/index')['TabsTrigger']
const Toast: typeof import('../components/ui/toast/index')['Toast']
const ToastAction: typeof import('../components/ui/toast/index')['ToastAction']
const ToastClose: typeof import('../components/ui/toast/index')['ToastClose']
const ToastDescription: typeof import('../components/ui/toast/index')['ToastDescription']
const ToastProvider: typeof import('../components/ui/toast/index')['ToastProvider']
const ToastTitle: typeof import('../components/ui/toast/index')['ToastTitle']
const ToastViewport: typeof import('../components/ui/toast/index')['ToastViewport']
const Toaster: typeof import('../components/ui/toast/index')['Toaster']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const afterAll: typeof import('vitest')['afterAll']
const afterEach: typeof import('vitest')['afterEach']
const assert: typeof import('vitest')['assert']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
const beforeAll: typeof import('vitest')['beforeAll']
const beforeEach: typeof import('vitest')['beforeEach']
const buttonVariants: typeof import('../components/ui/button/index')['buttonVariants']
const cacheFullListResponses: typeof import('../stores/cacheFullListResponsesStore')['cacheFullListResponses']
const cacheFullListResponsesStore: typeof import('../stores/cacheFullListResponsesStore')['cacheFullListResponsesStore']
const cacheFullListResponsesStores: typeof import('../stores/cacheFullListResponsesStore')['cacheFullListResponsesStores']
const chai: typeof import('vitest')['chai']
const chartsAndStatsStore: (typeof import('../stores/useCacheFullListResponsesStore'))['chartsAndStatsStore']
const computed: typeof import('vue')['computed']
const computedAsync: typeof import('@vueuse/core')['computedAsync']
const computedEager: typeof import('@vueuse/core')['computedEager']
const computedInject: typeof import('@vueuse/core')['computedInject']
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
const controlledRef: typeof import('@vueuse/core')['controlledRef']
const createApp: typeof import('vue')['createApp']
const createEventHook: typeof import('@vueuse/core')['createEventHook']
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
const createPinia: typeof import('pinia')['createPinia']
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
const customRef: typeof import('vue')['customRef']
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
const defaultColors: typeof import('../components/ui/chart/index')['defaultColors']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const defineStore: typeof import('pinia')['defineStore']
const describe: typeof import('vitest')['describe']
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
const effectScope: typeof import('vue')['effectScope']
const expect: typeof import('vitest')['expect']
const extendRef: typeof import('@vueuse/core')['extendRef']
const getActiveHead: typeof import('@unhead/vue')['getActiveHead']
const getActivePinia: typeof import('pinia')['getActivePinia']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
const inject: typeof import('vue')['inject']
const injectHead: typeof import('@unhead/vue')['injectHead']
const injectLocal: typeof import('@vueuse/core')['injectLocal']
const isDefined: typeof import('@vueuse/core')['isDefined']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const it: typeof import('vitest')['it']
const listenCurrentUser: typeof import('../stores/listenCurrentUseStore')['listenCurrentUser']
const listenCurrentUserStore: typeof import('../stores/listenCurrentUseStore')['listenCurrentUserStore']
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
const mapActions: typeof import('pinia')['mapActions']
const mapGetters: typeof import('pinia')['mapGetters']
const mapState: typeof import('pinia')['mapState']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const navigationMenuTriggerStyle: typeof import('../components/ui/navigation-menu/index')['navigationMenuTriggerStyle']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
const onLongPress: typeof import('@vueuse/core')['onLongPress']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
const provide: typeof import('vue')['provide']
const provideLocal: typeof import('@vueuse/core')['provideLocal']
const reactify: typeof import('@vueuse/core')['reactify']
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
const reactive: typeof import('vue')['reactive']
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
const reactivePick: typeof import('@vueuse/core')['reactivePick']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
const refDebounced: typeof import('@vueuse/core')['refDebounced']
const refDefault: typeof import('@vueuse/core')['refDefault']
const refThrottled: typeof import('@vueuse/core')['refThrottled']
const refWithControl: typeof import('@vueuse/core')['refWithControl']
const resolveComponent: typeof import('vue')['resolveComponent']
const resolveRef: typeof import('@vueuse/core')['resolveRef']
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
const setActivePinia: typeof import('pinia')['setActivePinia']
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const storeToRefs: typeof import('pinia')['storeToRefs']
const suite: typeof import('vitest')['suite']
const syncRef: typeof import('@vueuse/core')['syncRef']
const syncRefs: typeof import('@vueuse/core')['syncRefs']
const templateRef: typeof import('@vueuse/core')['templateRef']
const test: typeof import('vitest')['test']
const themeColors: (typeof import('../lib/theme-colors'))['default']
const themeStore: (typeof import('../stores/useThemeStore'))['themeStore']
const throttledRef: typeof import('@vueuse/core')['throttledRef']
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
const toRaw: typeof import('vue')['toRaw']
const toReactive: typeof import('@vueuse/core')['toReactive']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const toValue: typeof import('vue')['toValue']
const toast: typeof import('../components/ui/toast/use-toast')['toast']
const toastVariants: typeof import('../components/ui/toast/index')['toastVariants']
const triggerRef: typeof import('vue')['triggerRef']
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
const unref: typeof import('vue')['unref']
const unrefElement: typeof import('@vueuse/core')['unrefElement']
const until: typeof import('@vueuse/core')['until']
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
const useAnimate: typeof import('@vueuse/core')['useAnimate']
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
const useArraySome: typeof import('@vueuse/core')['useArraySome']
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
const useAttrs: typeof import('vue')['useAttrs']
const useBase64: typeof import('@vueuse/core')['useBase64']
const useBattery: typeof import('@vueuse/core')['useBattery']
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
const useCacheStore: (typeof import('../stores/useCacheFullListResponsesStore'))['useCacheStore']
const useCached: typeof import('@vueuse/core')['useCached']
const useChartsAndStatsStore: (typeof import('../stores/useCacheFullListResponsesStore'))['useChartsAndStatsStore']
const useClipboard: typeof import('@vueuse/core')['useClipboard']
const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems']
const useCloned: typeof import('@vueuse/core')['useCloned']
const useColorMode: typeof import('@vueuse/core')['useColorMode']
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
const useCounter: typeof import('@vueuse/core')['useCounter']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVar: typeof import('@vueuse/core')['useCssVar']
const useCssVars: typeof import('vue')['useCssVars']
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
const useCycleList: typeof import('@vueuse/core')['useCycleList']
const useDark: typeof import('@vueuse/core')['useDark']
const useDataStore: (typeof import('../stores/useCacheFullListResponsesStore'))['useDataStore']
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
const useDebounce: typeof import('@vueuse/core')['useDebounce']
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
const useDraggable: typeof import('@vueuse/core')['useDraggable']
const useDropZone: typeof import('@vueuse/core')['useDropZone']
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
const useElementHover: typeof import('@vueuse/core')['useElementHover']
const useElementSize: typeof import('@vueuse/core')['useElementSize']
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
const useEventBus: typeof import('@vueuse/core')['useEventBus']
const useEventListener: typeof import('@vueuse/core')['useEventListener']
const useEventSource: typeof import('@vueuse/core')['useEventSource']
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
const useFavicon: typeof import('@vueuse/core')['useFavicon']
const useFetch: typeof import('@vueuse/core')['useFetch']
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
const useFocus: typeof import('@vueuse/core')['useFocus']
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
const useFormField: typeof import('../components/ui/form/useFormField')['useFormField']
const useFps: typeof import('@vueuse/core')['useFps']
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
const useGamepad: typeof import('@vueuse/core')['useGamepad']
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
const useHead: typeof import('@unhead/vue')['useHead']
const useHeadSafe: typeof import('@unhead/vue')['useHeadSafe']
const useId: typeof import('vue')['useId']
const useIdle: typeof import('@vueuse/core')['useIdle']
const useImage: typeof import('@vueuse/core')['useImage']
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
const useInterval: typeof import('@vueuse/core')['useInterval']
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
const useLink: typeof import('vue-router')['useLink']
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
const useMemoize: typeof import('@vueuse/core')['useMemoize']
const useMemory: typeof import('@vueuse/core')['useMemory']
const useModel: typeof import('vue')['useModel']
const useMounted: typeof import('@vueuse/core')['useMounted']
const useMouse: typeof import('@vueuse/core')['useMouse']
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
const useNetwork: typeof import('@vueuse/core')['useNetwork']
const useNow: typeof import('@vueuse/core')['useNow']
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
const useOnline: typeof import('@vueuse/core')['useOnline']
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
const useParallax: typeof import('@vueuse/core')['useParallax']
const useParentElement: typeof import('@vueuse/core')['useParentElement']
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
const usePermission: typeof import('@vueuse/core')['usePermission']
const usePocketBase: typeof import('../composables/usePocketBase')['default']
const usePointer: typeof import('@vueuse/core')['usePointer']
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
const usePrevious: typeof import('@vueuse/core')['usePrevious']
const useRafFn: typeof import('@vueuse/core')['useRafFn']
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
const useScroll: typeof import('@vueuse/core')['useScroll']
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
const useSeoMeta: typeof import('@unhead/vue')['useSeoMeta']
const useServerHead: typeof import('@unhead/vue')['useServerHead']
const useServerHeadSafe: typeof import('@unhead/vue')['useServerHeadSafe']
const useServerSeoMeta: typeof import('@unhead/vue')['useServerSeoMeta']
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
const useShare: typeof import('@vueuse/core')['useShare']
const useSlots: typeof import('vue')['useSlots']
const useSorted: typeof import('@vueuse/core')['useSorted']
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
const useStepper: typeof import('@vueuse/core')['useStepper']
const useStorage: typeof import('@vueuse/core')['useStorage']
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
const useSupported: typeof import('@vueuse/core')['useSupported']
const useSwipe: typeof import('@vueuse/core')['useSwipe']
const useTemplateRef: typeof import('vue')['useTemplateRef']
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
const useThemeStore: typeof import('../stores/themeStore')['useThemeStore']
const useThrottle: typeof import('@vueuse/core')['useThrottle']
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
const useTimeout: typeof import('@vueuse/core')['useTimeout']
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
const useTitle: typeof import('@vueuse/core')['useTitle']
const useToNumber: typeof import('@vueuse/core')['useToNumber']
const useToString: typeof import('@vueuse/core')['useToString']
const useToast: typeof import('../components/ui/toast/use-toast')['useToast']
const useToggle: typeof import('@vueuse/core')['useToggle']
const useTransition: typeof import('@vueuse/core')['useTransition']
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
const useVModel: typeof import('@vueuse/core')['useVModel']
const useVModels: typeof import('@vueuse/core')['useVModels']
const useVibrate: typeof import('@vueuse/core')['useVibrate']
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
const vi: typeof import('vitest')['vi']
const vitest: typeof import('vitest')['vitest']
const watch: typeof import('vue')['watch']
const watchArray: typeof import('@vueuse/core')['watchArray']
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
const watchDeep: typeof import('@vueuse/core')['watchDeep']
const watchEffect: typeof import('vue')['watchEffect']
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
const watchOnce: typeof import('@vueuse/core')['watchOnce']
const watchPausable: typeof import('@vueuse/core')['watchPausable']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
const whenever: typeof import('@vueuse/core')['whenever']
}
// for type re-export
declare global {
// @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
}

78
src/types/chartsTypes.d.ts vendored Normal file
View File

@@ -0,0 +1,78 @@
export interface DataForCharts {
states: {
config: ChartConfig;
charts: StatesCharts;
};
provinces: {
config: ChartConfig;
charts: ProvincesCharts;
};
burgs: {
config: ChartConfig;
charts: BurgsCharts;
};
cultures: {
config: ChartConfig;
charts: CulturesCharts;
};
religions: {
config: ChartConfig;
charts: ReligionsCharts;
};
misc: {
config: ChartConfig;
charts: MiscCharts;
};
}
export interface DataForChart {
group: string;
subgroup: globalThis.ComputedRef<any>;
config: ChartConfig;
chart: ChartData[];
}
export interface ChartData {
turn: number;
[key: string]: number;
}
export interface ChartConfig {
categories: string[];
colors: string[];
}
export interface StatesCharts {
burgs: ChartData[];
provinces: ChartData[];
cells: ChartData[];
ruralPopulation: ChartData[];
urbanPopulation: ChartData[];
}
export interface ProvincesCharts {
burgs: ChartData[];
cells: ChartData[];
ruralPopulation: ChartData[];
urbanPopulation: ChartData[];
}
export interface BurgsCharts {
population: ChartData[];
}
export interface CulturesCharts {
cells: ChartData[];
population: ChartData[];
burgs: ChartData[];
}
export interface ReligionsCharts {
cells: ChartData[];
population: ChartData[];
burgs: ChartData[];
}
export interface MiscCharts {
features: ChartData[];
}

View File

@@ -1,62 +0,0 @@
interface DataForCharts {
states: {
config: Config;
charts: {
burgs: ChartData[];
provinces: ChartData[];
cells: ChartData[];
ruralPopulation: ChartData[];
urbanPopulation: ChartData[];
};
};
provinces: {
config: Config;
charts: {
burgs: ChartData[];
cells: ChartData[];
ruralPopulation: ChartData[];
urbanPopulation: ChartData[];
};
};
burgs: {
config: Config;
charts: {
population: ChartData[];
// features: ChartData[];
};
};
cultures: {
config: Config;
charts: {
cells: ChartData[];
population: ChartData[];
burgs: ChartData[];
};
};
religions: {
config: Config;
charts: {
cells: ChartData[];
population: ChartData[];
burgs: ChartData[];
};
};
misc: {
config: Config;
charts: {
features: ChartData[];
};
};
}
interface ChartData {
turn: number;
[key: string]: number;
}
interface Config {
categories: string[];
colors: string[];
}
export type { ChartData, Config, DataForCharts };

View File

@@ -4,11 +4,12 @@
"env.d.ts",
"src/**/*",
"src/**/*.vue",
"src/types/auto-imports.d.ts",
"src/types/components.d.ts",
"src/types/typed-router.d.ts",
"src/auto-types/auto-imports.d.ts",
"src/auto-types/components.d.ts",
"src/auto-types/typed-router.d.ts",
"src/types/pb-types.ts",
"src/types/theme-types.d.ts"
"src/types/theme-types.d.ts",
"src/types/chartsTypes.d.ts"
],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
@@ -21,7 +22,12 @@
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
},
"typeRoots": ["./node_modules/@types"]
},
"files": ["./src/types/auto-imports.d.ts", "./src/types/components.d.ts"]
"files": [
"src/auto-types/auto-imports.d.ts",
"src/auto-types/components.d.ts",
"src/auto-types/typed-router.d.ts"
]
}

View File

@@ -16,14 +16,18 @@ import tailwind from 'tailwindcss';
export default defineConfig({
plugins: [
VueRouter({
dts: './src/types/typed-router.d.ts',
dts: './src/auto-types/typed-router.d.ts',
importMode: 'async'
}),
vue(),
vueDevTools(),
AutoImport({
dts: './types/auto-imports.d.ts',
dirs: ['./composables', './stores', './components/ui/**/*.ts'],
include: [
/\.(d\.ts|[tj]sx?)$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/, // .vue
/\.md$/ // .md
],
imports: [
'vue',
'vue-router',
@@ -32,13 +36,23 @@ export default defineConfig({
'vitest',
unheadVueComposablesImports
],
dirs: [
'./composables',
'./stores',
'./components/ui/**/*.ts',
'./data',
'./types',
'./auto-types'
],
dts: './auto-types/auto-imports.d.ts',
vueTemplate: true,
eslintrc: {
enabled: true
},
packagePresets: ['pocketbase']
}),
Components({
dts: './types/components.d.ts',
dts: './auto-types/components.d.ts',
dirs: ['./components/**'],
directoryAsNamespace: true,
collapseSamePrefixes: true,