A lot more code changes
This commit is contained in:
parent
a5cf6e3918
commit
cc9282e661
10
custom.d.ts
vendored
Normal file
10
custom.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
// / <reference types="node" />
|
||||
import 'pinia';
|
||||
|
||||
declare module 'pinia' {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export interface DefineStoreOptionsBase<S, Store> {
|
||||
// allow defining a number of ms for any of the actions
|
||||
debounce?: Partial<Record<keyof StoreActions<Store>, number>>
|
||||
}
|
||||
}
|
||||
2
env.d.ts
vendored
2
env.d.ts
vendored
@ -1 +1 @@
|
||||
/// <reference types="vite/client" />
|
||||
// / <reference types="vite/client" />
|
||||
|
||||
2
generated/src/App.vue.d.ts
vendored
Normal file
2
generated/src/App.vue.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>>, {}, {}>;
|
||||
export default _default;
|
||||
2
generated/src/components/EditorComponent.vue.d.ts
vendored
Normal file
2
generated/src/components/EditorComponent.vue.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>>, {}, {}>;
|
||||
export default _default;
|
||||
8
generated/src/components/GeneratorComponent.vue.d.ts
vendored
Normal file
8
generated/src/components/GeneratorComponent.vue.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
declare const _default: import("vue").DefineComponent<{
|
||||
editMode: BooleanConstructor;
|
||||
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{
|
||||
editMode: BooleanConstructor;
|
||||
}>>, {
|
||||
editMode: boolean;
|
||||
}, {}>;
|
||||
export default _default;
|
||||
16
generated/src/components/MarkdownRenderer.vue.d.ts
vendored
Normal file
16
generated/src/components/MarkdownRenderer.vue.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
declare const _default: import("vue").DefineComponent<{
|
||||
text: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
default: string;
|
||||
};
|
||||
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{
|
||||
text: {
|
||||
type: StringConstructor;
|
||||
required: true;
|
||||
default: string;
|
||||
};
|
||||
}>>, {
|
||||
text: string;
|
||||
}, {}>;
|
||||
export default _default;
|
||||
6
generated/src/components/NavbarComponent.vue.d.ts
vendored
Normal file
6
generated/src/components/NavbarComponent.vue.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
||||
toggleLeftDrawer: (...args: any[]) => void;
|
||||
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>> & {
|
||||
onToggleLeftDrawer?: ((...args: any[]) => any) | undefined;
|
||||
}, {}, {}>;
|
||||
export default _default;
|
||||
14
generated/src/components/SidebarComponent.vue.d.ts
vendored
Normal file
14
generated/src/components/SidebarComponent.vue.d.ts
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
declare const _default: import("vue").DefineComponent<{
|
||||
drawer: {
|
||||
type: BooleanConstructor;
|
||||
required: true;
|
||||
default: boolean;
|
||||
};
|
||||
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{
|
||||
drawer: {
|
||||
type: BooleanConstructor;
|
||||
required: true;
|
||||
default: boolean;
|
||||
};
|
||||
}>>, {}, {}>;
|
||||
export default _default;
|
||||
2
generated/src/js/ParseGamesJSON.d.ts
vendored
Normal file
2
generated/src/js/ParseGamesJSON.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
export declare const games: BingoGame[];
|
||||
12
generated/src/js/lib/BingoCategory.d.ts
vendored
Normal file
12
generated/src/js/lib/BingoCategory.d.ts
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
import BingoGoal from '@/js/lib/BingoGoal.ts';
|
||||
import BingoGoalList from '@/js/lib/BingoGoalList';
|
||||
import SuccessResponse from '@/js/lib/SuccessResponse.ts';
|
||||
export default class BingoCategory {
|
||||
name: string;
|
||||
goal_lists: BingoGoalList[];
|
||||
constructor(name: string);
|
||||
hasGoalList(subgroup: BingoGoalList): boolean;
|
||||
addGoalList(subgroup: BingoGoalList): SuccessResponse;
|
||||
removeGoalList(subgroup: BingoGoalList): SuccessResponse;
|
||||
getAllGoals(): BingoGoal[];
|
||||
}
|
||||
20
generated/src/js/lib/BingoGame.d.ts
vendored
Normal file
20
generated/src/js/lib/BingoGame.d.ts
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
import BingoCategory from '@/js/lib/BingoCategory.ts';
|
||||
import BingoGoal from '@/js/lib/BingoGoal.ts';
|
||||
import BingoGoalList from '@/js/lib/BingoGoalList.ts';
|
||||
import SuccessResponse from '@/js/lib/SuccessResponse.ts';
|
||||
type BingoCategoryOrGoalList = BingoCategory | BingoGoalList;
|
||||
export default class BingoGame {
|
||||
id: string;
|
||||
name: string;
|
||||
short_description: string;
|
||||
description: string;
|
||||
items: BingoCategoryOrGoalList[];
|
||||
generator: 'simple' | 'srl_v5' | 'srl_v8';
|
||||
is_local: boolean;
|
||||
constructor(id: string, name: string, short_description: string, description: string);
|
||||
addItem(group: BingoCategoryOrGoalList): SuccessResponse;
|
||||
removeItem(group: BingoCategoryOrGoalList): SuccessResponse;
|
||||
removeItemByName(name: string): SuccessResponse;
|
||||
getGoalsByTags(...tags: string[]): BingoGoal[];
|
||||
}
|
||||
export {};
|
||||
9
generated/src/js/lib/BingoGoal.d.ts
vendored
Normal file
9
generated/src/js/lib/BingoGoal.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
import SuccessResponse from '@/js/lib/SuccessResponse.js';
|
||||
export default class BingoGoal {
|
||||
name: string;
|
||||
tags: string[];
|
||||
possible_spaces: number[];
|
||||
constructor(name: string);
|
||||
addTag(tag: string): SuccessResponse;
|
||||
removeTag(tag: string): SuccessResponse;
|
||||
}
|
||||
8
generated/src/js/lib/BingoGoalList.d.ts
vendored
Normal file
8
generated/src/js/lib/BingoGoalList.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
import BingoGoal from '@/js/lib/BingoGoal.ts';
|
||||
export default class BingoGoalList {
|
||||
name: string;
|
||||
goals: BingoGoal[];
|
||||
constructor(name: string);
|
||||
addGoal(goal: BingoGoal): void;
|
||||
removeGoal(goal: BingoGoal): void;
|
||||
}
|
||||
5
generated/src/js/lib/LocalGames.d.ts
vendored
Normal file
5
generated/src/js/lib/LocalGames.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import type BingoGame from '@/js/lib/BingoGame.ts';
|
||||
export declare function getLocalGames(): Promise<Map<string, BingoGame>>;
|
||||
export declare function getGameByID(id: string): Promise<BingoGame | undefined>;
|
||||
export declare function saveGame(game: BingoGame): Promise<void>;
|
||||
export declare function deleteGame(id: string): Promise<void>;
|
||||
5
generated/src/js/lib/Parser.d.ts
vendored
Normal file
5
generated/src/js/lib/Parser.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
export default class Parser {
|
||||
static from_json(input: string): BingoGame;
|
||||
static to_json(game: BingoGame): Record<string, any>;
|
||||
}
|
||||
8
generated/src/js/lib/SuccessResponse.d.ts
vendored
Normal file
8
generated/src/js/lib/SuccessResponse.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
export default class SuccessResponse {
|
||||
#private;
|
||||
constructor(success: boolean, message?: string);
|
||||
get success(): boolean;
|
||||
get message(): string | undefined;
|
||||
static success(): SuccessResponse;
|
||||
static error(message: string): SuccessResponse;
|
||||
}
|
||||
1
generated/src/js/lib/Test.d.ts
vendored
Normal file
1
generated/src/js/lib/Test.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export {};
|
||||
3
generated/src/js/lib/Util.d.ts
vendored
Normal file
3
generated/src/js/lib/Util.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
export default class Util {
|
||||
static stringCompare(str1: string, str2: string): boolean;
|
||||
}
|
||||
2
generated/src/js/testmarkdown.d.ts
vendored
Normal file
2
generated/src/js/testmarkdown.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const text = "---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n resize in browser.\n- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly\n i18n with plurals support and easy syntax.\n\nYou will like those projects!\n\n---\n\n# h1 Heading 8-)\n## h2 Heading\n### h3 Heading\n#### h4 Heading\n##### h5 Heading\n###### h6 Heading\n\n\n## Horizontal Rules\n\n___\n\n---\n\n***\n\n\n## Typographic replacements\n\nEnable typographer option to see result.\n\n(c) (C) (r) (R) (tm) (TM) (p) (P) +-\n\ntest.. test... test..... test?..... test!....\n\n!!!!!! ???? ,, -- ---\n\n\"Smartypants, double quotes\" and 'single quotes'\n\n\n## Emphasis\n\n**This is bold text**\n\n__This is bold text__\n\n*This is italic text*\n\n_This is italic text_\n\n~~Strikethrough~~\n\n\n## Blockquotes\n\n\n> Blockquotes can also be nested...\n>> ...by using additional greater-than signs right next to each other...\n> > > ...or with spaces between arrows.\n\n\n## Lists\n\nUnordered\n\n+ Create a list by starting a line with `+`, `-`, or `*`\n+ Sub-lists are made by indenting 2 spaces:\n - Marker character change forces new list start:\n * Ac tristique libero volutpat at\n + Facilisis in pretium nisl aliquet\n - Nulla volutpat aliquam velit\n+ Very easy!\n\nOrdered\n\n1. Lorem ipsum dolor sit amet\n2. Consectetur adipiscing elit\n3. Integer molestie lorem at massa\n\n\n1. You can use sequential numbers...\n1. ...or keep all the numbers as `1.`\n\nStart numbering with offset:\n\n57. foo\n1. bar\n\n\n## Code\n\nInline `code`\n\nIndented code\n\n // Some comments\n line 1 of code\n line 2 of code\n line 3 of code\n\n\nBlock code \"fences\"\n\n```\nSample text here...\n```\n\nSyntax highlighting\n\n``` js\nvar foo = function (bar) {\n return bar++;\n};\n\nconsole.log(foo(5));\n```\n\n## Tables\n\n| Option | Description |\n| ------ | ----------- |\n| data | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext | extension to be used for dest files. |\n\nRight aligned columns\n\n| Option | Description |\n| ------:| -----------:|\n| data | path to data files to supply the data that will be passed into templates. |\n| engine | engine to be used for processing templates. Handlebars is the default. |\n| ext | extension to be used for dest files. |\n\n\n## Links\n\n[link text](http://dev.nodeca.com)\n\n[link with title](http://nodeca.github.io/pica/demo/ \"title text!\")\n\nAutoconverted link https://github.com/nodeca/pica (enable linkify to see)\n\n\n## Images\n\n\n\n\nLike links, Images also have a footnote style syntax\n\n![Alt text][id]\n\nWith a reference later in the document defining the URL location:\n\n[id]: https://octodex.github.com/images/dojocat.jpg \"The Dojocat\"\n\n\n## Plugins\n\nThe killer feature of `markdown-it` is very effective support of\n[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).\n\n\n### [Emojies](https://github.com/markdown-it/markdown-it-emoji)\n\n> Classic markup: :wink: :crush: :cry: :tear: :laughing: :yum:\n>\n> Shortcuts (emoticons): :-) :-( 8-) ;)\n\nsee [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.\n\n\n### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)\n\n- 19^th^\n- H~2~O\n\n\n### [<ins>](https://github.com/markdown-it/markdown-it-ins)\n\n++Inserted text++\n\n\n### [<mark>](https://github.com/markdown-it/markdown-it-mark)\n\n==Marked text==\n\n\n### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)\n\nFootnote 1 link[^first].\n\nFootnote 2 link[^second].\n\nInline footnote^[Text of inline footnote] definition.\n\nDuplicated footnote reference[^second].\n\n[^first]: Footnote **can have markup**\n\n and multiple paragraphs.\n\n[^second]: Footnote text.\n\n\n### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)\n\nTerm 1\n\n: Definition 1\nwith lazy continuation.\n\nTerm 2 with *inline markup*\n\n: Definition 2\n\n { some code, part of Definition 2 }\n\n Third paragraph of definition 2.\n\n_Compact style:_\n\nTerm 1\n ~ Definition 1\n\nTerm 2\n ~ Definition 2a\n ~ Definition 2b\n\n\n### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)\n\nThis is HTML abbreviation example.\n\nIt converts \"HTML\", but keep intact partial entries like \"xxxHTMLyyy\" and so on.\n\n*[HTML]: Hyper Text Markup Language\n\n### [Custom containers](https://github.com/markdown-it/markdown-it-container)\n\n::: warning\n*here be dragons*\n:::";
|
||||
export default text;
|
||||
4
generated/src/main.d.ts
vendored
Normal file
4
generated/src/main.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
import '@/assets/main.css';
|
||||
import '@quasar/extras/material-icons/material-icons.css';
|
||||
import 'quasar/src/css/index.sass';
|
||||
import 'reflect-metadata';
|
||||
2
generated/src/router/index.d.ts
vendored
Normal file
2
generated/src/router/index.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const router: import("vue-router").Router;
|
||||
export default router;
|
||||
4
generated/src/stores/local-games.d.ts
vendored
Normal file
4
generated/src/stores/local-games.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
export declare const useLocalGamesStore: import("pinia").StoreDefinition<"localGames", {
|
||||
games: Map<string, BingoGame>;
|
||||
}, {}, {}>;
|
||||
6
generated/src/stores/remote-games.d.ts
vendored
Normal file
6
generated/src/stores/remote-games.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
export declare const useRemoteGamesStore: import("pinia").StoreDefinition<"remoteGames", {
|
||||
games: BingoGame[];
|
||||
}, {}, {
|
||||
fetchRemoteGames(): Promise<void>;
|
||||
}>;
|
||||
2
generated/src/views/EditorPage.vue.d.ts
vendored
Normal file
2
generated/src/views/EditorPage.vue.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>>, {}, {}>;
|
||||
export default _default;
|
||||
2
generated/src/views/GeneratorPage.vue.d.ts
vendored
Normal file
2
generated/src/views/GeneratorPage.vue.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>>, {}, {}>;
|
||||
export default _default;
|
||||
2
generated/src/views/MainPage.vue.d.ts
vendored
Normal file
2
generated/src/views/MainPage.vue.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<globalThis.ExtractPropTypes<{}>>, {}, {}>;
|
||||
export default _default;
|
||||
1
generated/tsconfig.vitest.tsbuildinfo
Normal file
1
generated/tsconfig.vitest.tsbuildinfo
Normal file
File diff suppressed because one or more lines are too long
32
package.json
32
package.json
@ -8,43 +8,47 @@
|
||||
"preview": "vite preview",
|
||||
"test:unit": "vitest",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
|
||||
"type-check__OLD": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
|
||||
"type-check": "vue-tsc -p tsconfig.vitest.json",
|
||||
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
|
||||
},
|
||||
"dependencies": {
|
||||
"@quasar/extras": "^1.16.8",
|
||||
"@types/markdown-it": "^13.0.6",
|
||||
"@vue/runtime-core": "^3.3.8",
|
||||
"class-transformer": "^0.5.1",
|
||||
"idb-keyval": "^6.2.1",
|
||||
"markdown-it": "^13.0.2",
|
||||
"pinia": "^2.1.7",
|
||||
"quasar": "^2.13.1",
|
||||
"quasar": "^2.14.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"vue": "^3.3.4",
|
||||
"ts-debounce": "^4.0.0",
|
||||
"vue": "^3.3.8",
|
||||
"vue-router": "^4.2.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@quasar/vite-plugin": "^1.6.0",
|
||||
"@rushstack/eslint-patch": "^1.3.3",
|
||||
"@stylistic/eslint-plugin": "^1.1.0",
|
||||
"@rushstack/eslint-patch": "^1.5.1",
|
||||
"@stylistic/eslint-plugin": "^1.2.0",
|
||||
"@tsconfig/node18": "^18.2.2",
|
||||
"@types/jsdom": "^21.1.3",
|
||||
"@types/node": "^18.18.5",
|
||||
"@vitejs/plugin-vue": "^4.4.0",
|
||||
"@types/jsdom": "^21.1.5",
|
||||
"@types/node": "^18.18.9",
|
||||
"@vitejs/plugin-vue": "^4.4.1",
|
||||
"@vitejs/plugin-vue-jsx": "^3.0.2",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
"@vue/test-utils": "^2.4.1",
|
||||
"@vue/test-utils": "^2.4.2",
|
||||
"@vue/tsconfig": "^0.4.0",
|
||||
"eslint": "^8.53.0",
|
||||
"eslint-plugin-vue": "^9.17.0",
|
||||
"eslint-plugin-vue": "^9.18.1",
|
||||
"jsdom": "^22.1.0",
|
||||
"npm-run-all2": "^6.1.1",
|
||||
"sass": "1.32.12",
|
||||
"typescript": "~5.2.0",
|
||||
"sass": "1.33.0",
|
||||
"typescript": "~5.2.2",
|
||||
"unplugin-auto-import": "^0.16.7",
|
||||
"unplugin-vue-components": "^0.25.2",
|
||||
"unplugin-vue-router": "^0.7.0",
|
||||
"vite": "^4.4.11",
|
||||
"vite": "^4.5.0",
|
||||
"vitest": "^0.34.6",
|
||||
"vue-tsc": "^1.8.19"
|
||||
"vue-tsc": "^1.8.22"
|
||||
}
|
||||
}
|
||||
415
pnpm-lock.yaml
generated
415
pnpm-lock.yaml
generated
@ -11,9 +11,15 @@ dependencies:
|
||||
'@types/markdown-it':
|
||||
specifier: ^13.0.6
|
||||
version: 13.0.6
|
||||
'@vue/runtime-core':
|
||||
specifier: ^3.3.8
|
||||
version: 3.3.8
|
||||
class-transformer:
|
||||
specifier: ^0.5.1
|
||||
version: 0.5.1
|
||||
idb-keyval:
|
||||
specifier: ^6.2.1
|
||||
version: 6.2.1
|
||||
markdown-it:
|
||||
specifier: ^13.0.2
|
||||
version: 13.0.2
|
||||
@ -21,13 +27,16 @@ dependencies:
|
||||
specifier: ^2.1.7
|
||||
version: 2.1.7(typescript@5.2.2)(vue@3.3.8)
|
||||
quasar:
|
||||
specifier: ^2.13.1
|
||||
version: 2.13.1
|
||||
specifier: ^2.14.0
|
||||
version: 2.14.0
|
||||
reflect-metadata:
|
||||
specifier: ^0.1.13
|
||||
version: 0.1.13
|
||||
ts-debounce:
|
||||
specifier: ^4.0.0
|
||||
version: 4.0.0
|
||||
vue:
|
||||
specifier: ^3.3.4
|
||||
specifier: ^3.3.8
|
||||
version: 3.3.8(typescript@5.2.2)
|
||||
vue-router:
|
||||
specifier: ^4.2.5
|
||||
@ -36,24 +45,24 @@ dependencies:
|
||||
devDependencies:
|
||||
'@quasar/vite-plugin':
|
||||
specifier: ^1.6.0
|
||||
version: 1.6.0(@vitejs/plugin-vue@4.4.1)(quasar@2.13.1)(vite@4.5.0)(vue@3.3.8)
|
||||
version: 1.6.0(@vitejs/plugin-vue@4.4.1)(quasar@2.14.0)(vite@4.5.0)(vue@3.3.8)
|
||||
'@rushstack/eslint-patch':
|
||||
specifier: ^1.3.3
|
||||
specifier: ^1.5.1
|
||||
version: 1.5.1
|
||||
'@stylistic/eslint-plugin':
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
specifier: ^1.2.0
|
||||
version: 1.2.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@tsconfig/node18':
|
||||
specifier: ^18.2.2
|
||||
version: 18.2.2
|
||||
'@types/jsdom':
|
||||
specifier: ^21.1.3
|
||||
specifier: ^21.1.5
|
||||
version: 21.1.5
|
||||
'@types/node':
|
||||
specifier: ^18.18.5
|
||||
specifier: ^18.18.9
|
||||
version: 18.18.9
|
||||
'@vitejs/plugin-vue':
|
||||
specifier: ^4.4.0
|
||||
specifier: ^4.4.1
|
||||
version: 4.4.1(vite@4.5.0)(vue@3.3.8)
|
||||
'@vitejs/plugin-vue-jsx':
|
||||
specifier: ^3.0.2
|
||||
@ -62,8 +71,8 @@ devDependencies:
|
||||
specifier: ^12.0.0
|
||||
version: 12.0.0(eslint-plugin-vue@9.18.1)(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@vue/test-utils':
|
||||
specifier: ^2.4.1
|
||||
version: 2.4.1(vue@3.3.8)
|
||||
specifier: ^2.4.2
|
||||
version: 2.4.2(vue@3.3.8)
|
||||
'@vue/tsconfig':
|
||||
specifier: ^0.4.0
|
||||
version: 0.4.0
|
||||
@ -71,7 +80,7 @@ devDependencies:
|
||||
specifier: ^8.53.0
|
||||
version: 8.53.0
|
||||
eslint-plugin-vue:
|
||||
specifier: ^9.17.0
|
||||
specifier: ^9.18.1
|
||||
version: 9.18.1(eslint@8.53.0)
|
||||
jsdom:
|
||||
specifier: ^22.1.0
|
||||
@ -80,10 +89,10 @@ devDependencies:
|
||||
specifier: ^6.1.1
|
||||
version: 6.1.1
|
||||
sass:
|
||||
specifier: 1.32.12
|
||||
version: 1.32.12
|
||||
specifier: 1.33.0
|
||||
version: 1.33.0
|
||||
typescript:
|
||||
specifier: ~5.2.0
|
||||
specifier: ~5.2.2
|
||||
version: 5.2.2
|
||||
unplugin-auto-import:
|
||||
specifier: ^0.16.7
|
||||
@ -95,13 +104,13 @@ devDependencies:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0(vue-router@4.2.5)(vue@3.3.8)
|
||||
vite:
|
||||
specifier: ^4.4.11
|
||||
version: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
specifier: ^4.5.0
|
||||
version: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
vitest:
|
||||
specifier: ^0.34.6
|
||||
version: 0.34.6(jsdom@22.1.0)(sass@1.32.12)
|
||||
version: 0.34.6(jsdom@22.1.0)(sass@1.33.0)
|
||||
vue-tsc:
|
||||
specifier: ^1.8.19
|
||||
specifier: ^1.8.22
|
||||
version: 1.8.22(typescript@5.2.2)
|
||||
|
||||
packages:
|
||||
@ -661,6 +670,18 @@ packages:
|
||||
resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
|
||||
dev: true
|
||||
|
||||
/@isaacs/cliui@8.0.2:
|
||||
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
string-width: 5.1.2
|
||||
string-width-cjs: /string-width@4.2.3
|
||||
strip-ansi: 7.1.0
|
||||
strip-ansi-cjs: /strip-ansi@6.0.1
|
||||
wrap-ansi: 8.1.0
|
||||
wrap-ansi-cjs: /wrap-ansi@7.0.0
|
||||
dev: true
|
||||
|
||||
/@jest/schemas@29.6.3:
|
||||
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
|
||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||
@ -722,11 +743,18 @@ packages:
|
||||
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
|
||||
dev: true
|
||||
|
||||
/@pkgjs/parseargs@0.11.0:
|
||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||
engines: {node: '>=14'}
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@quasar/extras@1.16.8:
|
||||
resolution: {integrity: sha512-mNSwQ6wkIVoAemhYdLm9q/FVqLHmVONZgCYdLLeqpakKNsR0r/zHQnCngzdDaXI7veYEvE0uW1gJa1wdQsxXxA==}
|
||||
dev: false
|
||||
|
||||
/@quasar/vite-plugin@1.6.0(@vitejs/plugin-vue@4.4.1)(quasar@2.13.1)(vite@4.5.0)(vue@3.3.8):
|
||||
/@quasar/vite-plugin@1.6.0(@vitejs/plugin-vue@4.4.1)(quasar@2.14.0)(vite@4.5.0)(vue@3.3.8):
|
||||
resolution: {integrity: sha512-LmbV76G1CwWZbrEQhqyZpkRQTJyO3xpW55aXY1zWN+JhyUeG77CcMCEWteBVnJ6I6ehUPFDC9ONd2+WlwH6rNQ==}
|
||||
engines: {node: '>=12'}
|
||||
peerDependencies:
|
||||
@ -736,8 +764,8 @@ packages:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
'@vitejs/plugin-vue': 4.4.1(vite@4.5.0)(vue@3.3.8)
|
||||
quasar: 2.13.1
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
quasar: 2.14.0
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
vue: 3.3.8(typescript@5.2.2)
|
||||
dev: true
|
||||
|
||||
@ -763,8 +791,8 @@ packages:
|
||||
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
|
||||
dev: true
|
||||
|
||||
/@stylistic/eslint-plugin-js@1.1.0:
|
||||
resolution: {integrity: sha512-7yDOvKQvtTXIJMVcKNGfpYSJJhwTbOrDcMDgYqWbtS9LyHmuzxvnR748bQ21pQyi6aZR2E7edwKsdKmZlXc9Rg==}
|
||||
/@stylistic/eslint-plugin-js@1.2.0:
|
||||
resolution: {integrity: sha512-1Zi/AlQzOzTlTegupd3vrUYHd02ilvk7x5O9ZRFjYGtUcwHVk+WTEKk/3Nmr8yuvzEiXqUNFJ8bv8b4rLYCPRQ==}
|
||||
dependencies:
|
||||
acorn: 8.11.2
|
||||
escape-string-regexp: 4.0.0
|
||||
@ -773,20 +801,20 @@ packages:
|
||||
graphemer: 1.4.0
|
||||
dev: true
|
||||
|
||||
/@stylistic/eslint-plugin-jsx@1.1.0:
|
||||
resolution: {integrity: sha512-XMTAYQ9t7ZoWjqciqOy99O0sRCHh/6x/Q4Dm8sCVKzKlsnPzVlXzAD0htNqHG+Fu7qyGblDqb0/7PNJXBdQc5Q==}
|
||||
/@stylistic/eslint-plugin-jsx@1.2.0:
|
||||
resolution: {integrity: sha512-8YHFw8x6nObGtJSMrFt40+nth6fI1lLJASg12qB1nfeLQYEGlPv5UCOA0sysKATnQF12j6wVO68CdeEsp0RZgA==}
|
||||
dependencies:
|
||||
'@stylistic/eslint-plugin-js': 1.1.0
|
||||
'@stylistic/eslint-plugin-js': 1.2.0
|
||||
estraverse: 5.3.0
|
||||
dev: true
|
||||
|
||||
/@stylistic/eslint-plugin-ts@1.1.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-vqlinwzTNSKoFaVcVKE2iVGKX62NKIJfkhEI+5uuufYcAhfjfOK3KQY0zhdUeshEUkBVR0uRrJzH1/Cj/2Unfg==}
|
||||
/@stylistic/eslint-plugin-ts@1.2.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-fWP8Q4K92Gm0qeqvZJk0THlS+8ynX4UluMuY/cJ1g/I4ntY0eNDLs/m1uWGitky33GOnM5DiW8riV8yLRNQ0Fg==}
|
||||
peerDependencies:
|
||||
eslint: '*'
|
||||
dependencies:
|
||||
'@stylistic/eslint-plugin-js': 1.1.0
|
||||
'@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@stylistic/eslint-plugin-js': 1.2.0
|
||||
'@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
eslint: 8.53.0
|
||||
graphemer: 1.4.0
|
||||
transitivePeerDependencies:
|
||||
@ -794,14 +822,14 @@ packages:
|
||||
- typescript
|
||||
dev: true
|
||||
|
||||
/@stylistic/eslint-plugin@1.1.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-PcJgMTNiIZ1d+aQt7OM50hRkeOIB7FyfRofNEe1PykG7NvSjjwQ7fS2XN+eN/SmoPN4ocZkacZHOv5cDNrFEqQ==}
|
||||
/@stylistic/eslint-plugin@1.2.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-WtY9pxiXFfNTkHOCrXCN7diWB49KqyBCwDjIhXVrN2rCJ6ZA7bnlDtDjwSvU3Gnb/kTEYnt6aVXjprFi0f7S0g==}
|
||||
peerDependencies:
|
||||
eslint: '*'
|
||||
dependencies:
|
||||
'@stylistic/eslint-plugin-js': 1.1.0
|
||||
'@stylistic/eslint-plugin-jsx': 1.1.0
|
||||
'@stylistic/eslint-plugin-ts': 1.1.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@stylistic/eslint-plugin-js': 1.2.0
|
||||
'@stylistic/eslint-plugin-jsx': 1.2.0
|
||||
'@stylistic/eslint-plugin-ts': 1.2.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
eslint: 8.53.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@ -876,8 +904,8 @@ packages:
|
||||
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==}
|
||||
/@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
|
||||
@ -888,11 +916,11 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.10.0
|
||||
'@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/scope-manager': 6.10.0
|
||||
'@typescript-eslint/type-utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/visitor-keys': 6.10.0
|
||||
'@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/scope-manager': 6.11.0
|
||||
'@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/visitor-keys': 6.11.0
|
||||
debug: 4.3.4
|
||||
eslint: 8.53.0
|
||||
graphemer: 1.4.0
|
||||
@ -905,8 +933,8 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==}
|
||||
/@typescript-eslint/parser@6.11.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
@ -915,10 +943,10 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 6.10.0
|
||||
'@typescript-eslint/types': 6.10.0
|
||||
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||
'@typescript-eslint/visitor-keys': 6.10.0
|
||||
'@typescript-eslint/scope-manager': 6.11.0
|
||||
'@typescript-eslint/types': 6.11.0
|
||||
'@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
|
||||
'@typescript-eslint/visitor-keys': 6.11.0
|
||||
debug: 4.3.4
|
||||
eslint: 8.53.0
|
||||
typescript: 5.2.2
|
||||
@ -926,16 +954,16 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/scope-manager@6.10.0:
|
||||
resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==}
|
||||
/@typescript-eslint/scope-manager@6.11.0:
|
||||
resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.10.0
|
||||
'@typescript-eslint/visitor-keys': 6.10.0
|
||||
'@typescript-eslint/types': 6.11.0
|
||||
'@typescript-eslint/visitor-keys': 6.11.0
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==}
|
||||
/@typescript-eslint/type-utils@6.11.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
@ -944,8 +972,8 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||
'@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
|
||||
'@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
debug: 4.3.4
|
||||
eslint: 8.53.0
|
||||
ts-api-utils: 1.0.3(typescript@5.2.2)
|
||||
@ -954,13 +982,13 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/types@6.10.0:
|
||||
resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==}
|
||||
/@typescript-eslint/types@6.11.0:
|
||||
resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==}
|
||||
/@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
peerDependencies:
|
||||
typescript: '*'
|
||||
@ -968,8 +996,8 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.10.0
|
||||
'@typescript-eslint/visitor-keys': 6.10.0
|
||||
'@typescript-eslint/types': 6.11.0
|
||||
'@typescript-eslint/visitor-keys': 6.11.0
|
||||
debug: 4.3.4
|
||||
globby: 11.1.0
|
||||
is-glob: 4.0.3
|
||||
@ -980,8 +1008,8 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==}
|
||||
/@typescript-eslint/utils@6.11.0(eslint@8.53.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0
|
||||
@ -989,9 +1017,9 @@ packages:
|
||||
'@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
|
||||
'@types/json-schema': 7.0.15
|
||||
'@types/semver': 7.5.5
|
||||
'@typescript-eslint/scope-manager': 6.10.0
|
||||
'@typescript-eslint/types': 6.10.0
|
||||
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||
'@typescript-eslint/scope-manager': 6.11.0
|
||||
'@typescript-eslint/types': 6.11.0
|
||||
'@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2)
|
||||
eslint: 8.53.0
|
||||
semver: 7.5.4
|
||||
transitivePeerDependencies:
|
||||
@ -999,11 +1027,11 @@ packages:
|
||||
- typescript
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/visitor-keys@6.10.0:
|
||||
resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==}
|
||||
/@typescript-eslint/visitor-keys@6.11.0:
|
||||
resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.10.0
|
||||
'@typescript-eslint/types': 6.11.0
|
||||
eslint-visitor-keys: 3.4.3
|
||||
dev: true
|
||||
|
||||
@ -1021,7 +1049,7 @@ packages:
|
||||
'@babel/core': 7.23.3
|
||||
'@babel/plugin-transform-typescript': 7.23.3(@babel/core@7.23.3)
|
||||
'@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.3)
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
vue: 3.3.8(typescript@5.2.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@ -1034,7 +1062,7 @@ packages:
|
||||
vite: ^4.0.0
|
||||
vue: ^3.2.25
|
||||
dependencies:
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
vue: 3.3.8(typescript@5.2.2)
|
||||
dev: true
|
||||
|
||||
@ -1186,8 +1214,8 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2)
|
||||
eslint: 8.53.0
|
||||
eslint-plugin-vue: 9.18.1(eslint@8.53.0)
|
||||
typescript: 5.2.2
|
||||
@ -1254,8 +1282,8 @@ packages:
|
||||
/@vue/shared@3.3.8:
|
||||
resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==}
|
||||
|
||||
/@vue/test-utils@2.4.1(vue@3.3.8):
|
||||
resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==}
|
||||
/@vue/test-utils@2.4.2(vue@3.3.8):
|
||||
resolution: {integrity: sha512-07lLjpG1o9tEBoWQfVOFhDT7+WFCdDeECoeSdzOuVgIi6nxb2JDLGNNOV6+3crPpyg/jMlIocj96UROcgomiGg==}
|
||||
peerDependencies:
|
||||
'@vue/server-renderer': ^3.0.1
|
||||
vue: ^3.0.1
|
||||
@ -1263,9 +1291,9 @@ packages:
|
||||
'@vue/server-renderer':
|
||||
optional: true
|
||||
dependencies:
|
||||
js-beautify: 1.14.9
|
||||
js-beautify: 1.14.11
|
||||
vue: 3.3.8(typescript@5.2.2)
|
||||
vue-component-type-helpers: 1.8.4
|
||||
vue-component-type-helpers: 1.8.22
|
||||
dev: true
|
||||
|
||||
/@vue/tsconfig@0.4.0:
|
||||
@ -1276,8 +1304,9 @@ packages:
|
||||
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
|
||||
dev: true
|
||||
|
||||
/abbrev@1.1.1:
|
||||
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
|
||||
/abbrev@2.0.0:
|
||||
resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
dev: true
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.11.2):
|
||||
@ -1322,6 +1351,11 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/ansi-regex@6.0.1:
|
||||
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/ansi-styles@3.2.1:
|
||||
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
||||
engines: {node: '>=4'}
|
||||
@ -1440,8 +1474,8 @@ packages:
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
caniuse-lite: 1.0.30001561
|
||||
electron-to-chromium: 1.4.580
|
||||
caniuse-lite: 1.0.30001562
|
||||
electron-to-chromium: 1.4.585
|
||||
node-releases: 2.0.13
|
||||
update-browserslist-db: 1.0.13(browserslist@4.22.1)
|
||||
dev: true
|
||||
@ -1461,8 +1495,8 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/caniuse-lite@1.0.30001561:
|
||||
resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==}
|
||||
/caniuse-lite@1.0.30001562:
|
||||
resolution: {integrity: sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==}
|
||||
dev: true
|
||||
|
||||
/chai@4.3.10:
|
||||
@ -1668,6 +1702,10 @@ packages:
|
||||
webidl-conversions: 7.0.0
|
||||
dev: true
|
||||
|
||||
/eastasianwidth@0.2.0:
|
||||
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
|
||||
dev: true
|
||||
|
||||
/editorconfig@1.0.4:
|
||||
resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
|
||||
engines: {node: '>=14'}
|
||||
@ -1679,8 +1717,16 @@ packages:
|
||||
semver: 7.5.4
|
||||
dev: true
|
||||
|
||||
/electron-to-chromium@1.4.580:
|
||||
resolution: {integrity: sha512-T5q3pjQon853xxxHUq3ZP68ZpvJHuSMY2+BZaW3QzjS4HvNuvsMmZ/+lU+nCrftre1jFZ+OSlExynXWBihnXzw==}
|
||||
/electron-to-chromium@1.4.585:
|
||||
resolution: {integrity: sha512-B4yBlX0azdA3rVMxpYwLQfDpdwOgcnLCkpvSOd68iFmeedo+WYjaBJS3/W58LVD8CB2nf+o7C4K9xz1l09RkWg==}
|
||||
dev: true
|
||||
|
||||
/emoji-regex@8.0.0:
|
||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||
dev: true
|
||||
|
||||
/emoji-regex@9.2.2:
|
||||
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
||||
dev: true
|
||||
|
||||
/entities@3.0.1:
|
||||
@ -1896,7 +1942,7 @@ packages:
|
||||
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
dependencies:
|
||||
flat-cache: 3.1.1
|
||||
flat-cache: 3.2.0
|
||||
dev: true
|
||||
|
||||
/fill-range@7.0.1:
|
||||
@ -1914,9 +1960,9 @@ packages:
|
||||
path-exists: 4.0.0
|
||||
dev: true
|
||||
|
||||
/flat-cache@3.1.1:
|
||||
resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
/flat-cache@3.2.0:
|
||||
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
dependencies:
|
||||
flatted: 3.2.9
|
||||
keyv: 4.5.4
|
||||
@ -1927,6 +1973,14 @@ packages:
|
||||
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
|
||||
dev: true
|
||||
|
||||
/foreground-child@3.1.1:
|
||||
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
cross-spawn: 7.0.3
|
||||
signal-exit: 4.1.0
|
||||
dev: true
|
||||
|
||||
/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
@ -1975,6 +2029,18 @@ packages:
|
||||
is-glob: 4.0.3
|
||||
dev: true
|
||||
|
||||
/glob@10.3.10:
|
||||
resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
foreground-child: 3.1.1
|
||||
jackspeak: 2.3.6
|
||||
minimatch: 9.0.3
|
||||
minipass: 7.0.4
|
||||
path-scurry: 1.10.1
|
||||
dev: true
|
||||
|
||||
/glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
dependencies:
|
||||
@ -1986,17 +2052,6 @@ packages:
|
||||
path-is-absolute: 1.0.1
|
||||
dev: true
|
||||
|
||||
/glob@8.1.0:
|
||||
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
inflight: 1.0.6
|
||||
inherits: 2.0.4
|
||||
minimatch: 5.1.6
|
||||
once: 1.4.0
|
||||
dev: true
|
||||
|
||||
/globals@11.12.0:
|
||||
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
|
||||
engines: {node: '>=4'}
|
||||
@ -2094,6 +2149,10 @@ packages:
|
||||
safer-buffer: 2.1.2
|
||||
dev: true
|
||||
|
||||
/idb-keyval@6.2.1:
|
||||
resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==}
|
||||
dev: false
|
||||
|
||||
/ignore@5.2.4:
|
||||
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
||||
engines: {node: '>= 4'}
|
||||
@ -2149,6 +2208,11 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/is-fullwidth-code-point@3.0.0:
|
||||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/is-glob@4.0.3:
|
||||
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -2174,15 +2238,24 @@ packages:
|
||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||
dev: true
|
||||
|
||||
/js-beautify@1.14.9:
|
||||
resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==}
|
||||
engines: {node: '>=12'}
|
||||
/jackspeak@2.3.6:
|
||||
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
'@isaacs/cliui': 8.0.2
|
||||
optionalDependencies:
|
||||
'@pkgjs/parseargs': 0.11.0
|
||||
dev: true
|
||||
|
||||
/js-beautify@1.14.11:
|
||||
resolution: {integrity: sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==}
|
||||
engines: {node: '>=14'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
config-chain: 1.1.13
|
||||
editorconfig: 1.0.4
|
||||
glob: 8.1.0
|
||||
nopt: 6.0.0
|
||||
glob: 10.3.10
|
||||
nopt: 7.2.0
|
||||
dev: true
|
||||
|
||||
/js-tokens@4.0.0:
|
||||
@ -2410,13 +2483,6 @@ packages:
|
||||
brace-expansion: 1.1.11
|
||||
dev: true
|
||||
|
||||
/minimatch@5.1.6:
|
||||
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
brace-expansion: 2.0.1
|
||||
dev: true
|
||||
|
||||
/minimatch@9.0.1:
|
||||
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
@ -2431,13 +2497,18 @@ packages:
|
||||
brace-expansion: 2.0.1
|
||||
dev: true
|
||||
|
||||
/minipass@7.0.4:
|
||||
resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
dev: true
|
||||
|
||||
/mlly@1.4.2:
|
||||
resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
|
||||
dependencies:
|
||||
acorn: 8.11.2
|
||||
pathe: 1.1.1
|
||||
pkg-types: 1.0.3
|
||||
ufo: 1.3.1
|
||||
ufo: 1.3.2
|
||||
dev: true
|
||||
|
||||
/ms@2.1.2:
|
||||
@ -2461,12 +2532,12 @@ packages:
|
||||
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
|
||||
dev: true
|
||||
|
||||
/nopt@6.0.0:
|
||||
resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
|
||||
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
||||
/nopt@7.2.0:
|
||||
resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
abbrev: 1.1.1
|
||||
abbrev: 2.0.0
|
||||
dev: true
|
||||
|
||||
/normalize-package-data@6.0.0:
|
||||
@ -2594,6 +2665,14 @@ packages:
|
||||
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
||||
dev: true
|
||||
|
||||
/path-scurry@1.10.1:
|
||||
resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
dependencies:
|
||||
lru-cache: 10.0.2
|
||||
minipass: 7.0.4
|
||||
dev: true
|
||||
|
||||
/path-type@4.0.0:
|
||||
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2690,8 +2769,8 @@ packages:
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/quasar@2.13.1:
|
||||
resolution: {integrity: sha512-Q8pNpjPOBn1K5IJ19daI3hAxwnXbHv9EyOiJIZFxA6W0KfVdJwcYJkDcmN2BtCdXxc3QmW8WEZ8+jz3/yp8X8g==}
|
||||
/quasar@2.14.0:
|
||||
resolution: {integrity: sha512-hxaQ/yd/qNGgpUrww4fQRSpklKnZN90HXhmhmPE5h+yFCcXreU+JgM3m/Mf6Qv7lMNQZQkYipgZ5Ja41DYkVUQ==}
|
||||
engines: {node: '>= 10.18.1', npm: '>= 6.13.4', yarn: '>= 1.21.1'}
|
||||
|
||||
/querystringify@2.2.0:
|
||||
@ -2779,8 +2858,8 @@ packages:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: true
|
||||
|
||||
/sass@1.32.12:
|
||||
resolution: {integrity: sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==}
|
||||
/sass@1.33.0:
|
||||
resolution: {integrity: sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg==}
|
||||
engines: {node: '>=8.9.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@ -2794,8 +2873,8 @@ packages:
|
||||
xmlchars: 2.2.0
|
||||
dev: true
|
||||
|
||||
/scule@1.0.0:
|
||||
resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
|
||||
/scule@1.1.0:
|
||||
resolution: {integrity: sha512-vRUjqhyM/YWYzT+jsMk6tnl3NkY4A4soJ8uyh3O6Um+JXEQL9ozUCe7pqrxn3CSKokw0hw3nFStfskzpgYwR0g==}
|
||||
dev: true
|
||||
|
||||
/semver@6.3.1:
|
||||
@ -2831,6 +2910,11 @@ packages:
|
||||
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
|
||||
dev: true
|
||||
|
||||
/signal-exit@4.1.0:
|
||||
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
|
||||
engines: {node: '>=14'}
|
||||
dev: true
|
||||
|
||||
/slash@3.0.0:
|
||||
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2866,8 +2950,26 @@ packages:
|
||||
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
||||
dev: true
|
||||
|
||||
/std-env@3.4.3:
|
||||
resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
|
||||
/std-env@3.5.0:
|
||||
resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==}
|
||||
dev: true
|
||||
|
||||
/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
emoji-regex: 8.0.0
|
||||
is-fullwidth-code-point: 3.0.0
|
||||
strip-ansi: 6.0.1
|
||||
dev: true
|
||||
|
||||
/string-width@5.1.2:
|
||||
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
eastasianwidth: 0.2.0
|
||||
emoji-regex: 9.2.2
|
||||
strip-ansi: 7.1.0
|
||||
dev: true
|
||||
|
||||
/strip-ansi@6.0.1:
|
||||
@ -2877,6 +2979,13 @@ packages:
|
||||
ansi-regex: 5.0.1
|
||||
dev: true
|
||||
|
||||
/strip-ansi@7.1.0:
|
||||
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
ansi-regex: 6.0.1
|
||||
dev: true
|
||||
|
||||
/strip-json-comments@3.1.1:
|
||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2970,6 +3079,10 @@ packages:
|
||||
typescript: 5.2.2
|
||||
dev: true
|
||||
|
||||
/ts-debounce@4.0.0:
|
||||
resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==}
|
||||
dev: false
|
||||
|
||||
/type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -3006,8 +3119,8 @@ packages:
|
||||
resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
|
||||
dev: false
|
||||
|
||||
/ufo@1.3.1:
|
||||
resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==}
|
||||
/ufo@1.3.2:
|
||||
resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
|
||||
dev: true
|
||||
|
||||
/undici-types@5.26.5:
|
||||
@ -3025,7 +3138,7 @@ packages:
|
||||
mlly: 1.4.2
|
||||
pathe: 1.1.1
|
||||
pkg-types: 1.0.3
|
||||
scule: 1.0.0
|
||||
scule: 1.1.0
|
||||
strip-literal: 1.3.0
|
||||
unplugin: 1.5.0
|
||||
transitivePeerDependencies:
|
||||
@ -3108,7 +3221,7 @@ packages:
|
||||
local-pkg: 0.4.3
|
||||
mlly: 1.4.2
|
||||
pathe: 1.1.1
|
||||
scule: 1.0.0
|
||||
scule: 1.1.0
|
||||
unplugin: 1.5.0
|
||||
vue-router: 4.2.5(vue@3.3.8)
|
||||
yaml: 2.3.4
|
||||
@ -3161,7 +3274,7 @@ packages:
|
||||
spdx-expression-parse: 3.0.1
|
||||
dev: true
|
||||
|
||||
/vite-node@0.34.6(@types/node@18.18.9)(sass@1.32.12):
|
||||
/vite-node@0.34.6(@types/node@18.18.9)(sass@1.33.0):
|
||||
resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
|
||||
engines: {node: '>=v14.18.0'}
|
||||
hasBin: true
|
||||
@ -3171,7 +3284,7 @@ packages:
|
||||
mlly: 1.4.2
|
||||
pathe: 1.1.1
|
||||
picocolors: 1.0.0
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- less
|
||||
@ -3183,7 +3296,7 @@ packages:
|
||||
- terser
|
||||
dev: true
|
||||
|
||||
/vite@4.5.0(@types/node@18.18.9)(sass@1.32.12):
|
||||
/vite@4.5.0(@types/node@18.18.9)(sass@1.33.0):
|
||||
resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
@ -3215,12 +3328,12 @@ packages:
|
||||
esbuild: 0.18.20
|
||||
postcss: 8.4.31
|
||||
rollup: 3.29.4
|
||||
sass: 1.32.12
|
||||
sass: 1.33.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/vitest@0.34.6(jsdom@22.1.0)(sass@1.32.12):
|
||||
/vitest@0.34.6(jsdom@22.1.0)(sass@1.33.0):
|
||||
resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==}
|
||||
engines: {node: '>=v14.18.0'}
|
||||
hasBin: true
|
||||
@ -3269,12 +3382,12 @@ packages:
|
||||
magic-string: 0.30.5
|
||||
pathe: 1.1.1
|
||||
picocolors: 1.0.0
|
||||
std-env: 3.4.3
|
||||
std-env: 3.5.0
|
||||
strip-literal: 1.3.0
|
||||
tinybench: 2.5.1
|
||||
tinypool: 0.7.0
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.32.12)
|
||||
vite-node: 0.34.6(@types/node@18.18.9)(sass@1.32.12)
|
||||
vite: 4.5.0(@types/node@18.18.9)(sass@1.33.0)
|
||||
vite-node: 0.34.6(@types/node@18.18.9)(sass@1.33.0)
|
||||
why-is-node-running: 2.2.2
|
||||
transitivePeerDependencies:
|
||||
- less
|
||||
@ -3286,8 +3399,8 @@ packages:
|
||||
- terser
|
||||
dev: true
|
||||
|
||||
/vue-component-type-helpers@1.8.4:
|
||||
resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
|
||||
/vue-component-type-helpers@1.8.22:
|
||||
resolution: {integrity: sha512-LK3wJHs3vJxHG292C8cnsRusgyC5SEZDCzDCD01mdE/AoREFMl2tzLRuzwyuEsOIz13tqgBcnvysN3Lxsa14Fw==}
|
||||
dev: true
|
||||
|
||||
/vue-demi@0.14.6(vue@3.3.8):
|
||||
@ -3423,6 +3536,24 @@ packages:
|
||||
stackback: 0.0.2
|
||||
dev: true
|
||||
|
||||
/wrap-ansi@7.0.0:
|
||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
ansi-styles: 4.3.0
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
dev: true
|
||||
|
||||
/wrap-ansi@8.1.0:
|
||||
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
ansi-styles: 6.2.1
|
||||
string-width: 5.1.2
|
||||
strip-ansi: 7.1.0
|
||||
dev: true
|
||||
|
||||
/wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
dev: true
|
||||
|
||||
@ -32,70 +32,85 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row q-pa-lg items-center justify-evenly q-col-gutter-md">
|
||||
<div class="col-12">
|
||||
<div class="row items-center justify-evenly">
|
||||
<div class="col-4">
|
||||
<q-input filled v-model="search" label="Search for games..." />
|
||||
<div class="q-mx-auto" style="max-width: 70vw;">
|
||||
<div class="row q-pa-lg items-center justify-evenly q-col-gutter-md">
|
||||
<div class="col-12">
|
||||
<div class="row items-center justify-evenly">
|
||||
<div class="col-4">
|
||||
<q-input filled v-model="search" label="Search for games..." />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col" v-for="(game, index) of filtered_games" :key="game.id" :style="{ 'max-width': '500px' }">
|
||||
<q-card flat bordered>
|
||||
<q-card-section horizontal>
|
||||
<q-card-section>
|
||||
<div class="text-h5 q-mt-sm q-mb-xs">{{ game.name }}</div>
|
||||
<div class="text-caption text-grey">
|
||||
{{ game.short_description }}
|
||||
</div>
|
||||
<div class="col" v-for="(game, index) of filtered_games" :key="game.id" :style="{ 'max-width': '500px' }">
|
||||
<q-card flat bordered>
|
||||
<q-card-section horizontal>
|
||||
<q-card-section>
|
||||
<q-badge v-if="game.is_local" outline color="orange">
|
||||
<div class="text-weight-bold q-my-xs">Local Game</div>
|
||||
</q-badge>
|
||||
|
||||
<div class="text-h5 q-mt-sm q-mb-xs">{{ game.name }}</div>
|
||||
<div class="text-caption text-grey">
|
||||
{{ game.short_description }}
|
||||
</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-space></q-space>
|
||||
|
||||
<q-card-section class="col-5 flex justify-end">
|
||||
<q-avatar square size="100px">
|
||||
<q-img
|
||||
:src="`https://picsum.photos/200/200?_=${index}`"
|
||||
width="100%"
|
||||
height="100%"
|
||||
/>
|
||||
</q-avatar>
|
||||
</q-card-section>
|
||||
</q-card-section>
|
||||
|
||||
<q-space></q-space>
|
||||
<q-separator />
|
||||
|
||||
<q-card-section class="col-5 flex justify-end">
|
||||
<q-avatar square size="100px">
|
||||
<q-img
|
||||
:src="`https://picsum.photos/200/200?_=${index}`"
|
||||
width="100%"
|
||||
height="100%"
|
||||
/>
|
||||
</q-avatar>
|
||||
</q-card-section>
|
||||
</q-card-section>
|
||||
<q-card-actions>
|
||||
<q-btn flat icon="help" @click="selected_game = game">
|
||||
<q-tooltip>
|
||||
Learn more...
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<template v-if="game.is_local">
|
||||
<q-btn flat icon="edit" color="green" :loading="loading">
|
||||
<q-tooltip>
|
||||
Edit
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn flat icon="delete" color="red" :loading="loading" @click="deleteGameInternal(game.id)">
|
||||
<q-tooltip>
|
||||
Delete
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
||||
<q-separator />
|
||||
<q-space/>
|
||||
|
||||
<q-card-actions>
|
||||
<q-btn flat icon="help" @click="selected_game = game">
|
||||
<q-tooltip>
|
||||
Learn more...
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn flat icon="edit" color="green">
|
||||
<q-tooltip>
|
||||
Edit
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn flat icon="delete" color="red">
|
||||
<q-tooltip>
|
||||
Delete
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
||||
<q-space/>
|
||||
|
||||
<q-btn flat color="blue" icon="download" label="Export" />
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
<q-btn flat color="blue" icon="download" label="Export" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<q-btn flat icon="content_copy" color="green" :loading="loading" :disabled="localGames.hasGame(game.id)" @click="saveGameInternal(game)">
|
||||
<q-tooltip>
|
||||
Copy to local
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
</template>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<q-dialog v-model="learn_more">
|
||||
<q-card style="min-width: 700px; max-width: 80vw; min-height: 10vh; max-height: 80vh;">
|
||||
<q-card-section class="row items-start">
|
||||
<q-card-section class="row items-start q-col-gutter-md">
|
||||
<div class="col-2">
|
||||
<q-avatar square size="200px">
|
||||
<q-avatar square size="200px" style="width: 100%; height: auto; aspect-ratio: 1/1;">
|
||||
<q-img
|
||||
src="https://picsum.photos/200/200"
|
||||
width="100%"
|
||||
@ -124,9 +139,39 @@ import {
|
||||
} from '@/js/ParseGamesJSON.js';
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
|
||||
// Local game store
|
||||
import {
|
||||
useLocalGamesStore
|
||||
} from '@/stores/local-games.ts';
|
||||
const localGames = useLocalGamesStore();
|
||||
|
||||
// All games
|
||||
const games = ref<BingoGame[]>(Array.from(parsed_games.values()));
|
||||
|
||||
const loading = ref<boolean>(false);
|
||||
|
||||
onMounted(async() => {
|
||||
await localGames.fetchGames();
|
||||
});
|
||||
|
||||
async function saveGameInternal(game: BingoGame) {
|
||||
loading.value = true;
|
||||
|
||||
localGames.addGame(game);
|
||||
// await saveGame(game);
|
||||
// local_games.value = await getLocalGames();
|
||||
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
async function deleteGameInternal(id: string) {
|
||||
loading.value = true;
|
||||
|
||||
localGames.deleteGame(id);
|
||||
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
// Selected game
|
||||
const selected_game = ref<BingoGame | undefined>(undefined);
|
||||
|
||||
@ -136,9 +181,16 @@ const learn_more = ref<boolean>(false);
|
||||
// Search query
|
||||
const search = ref<string>('');
|
||||
|
||||
const combined_games = computed(() => {
|
||||
return [
|
||||
...games.value,
|
||||
...localGames.games.values()
|
||||
];
|
||||
});
|
||||
|
||||
// Filter games by search
|
||||
const filtered_games = computed(() => {
|
||||
return games.value.filter(game => game.name.toLocaleLowerCase().includes(search.value.toLocaleLowerCase()));
|
||||
return combined_games.value.filter(game => game.name.toLocaleLowerCase().includes(search.value.toLocaleLowerCase()));
|
||||
});
|
||||
|
||||
// On selected game change, open popup
|
||||
@ -153,3 +205,4 @@ watch(learn_more, newValue => {
|
||||
selected_game.value = undefined;
|
||||
});
|
||||
</script>
|
||||
@/js/lib/LocalGames
|
||||
|
||||
@ -9,33 +9,89 @@
|
||||
>
|
||||
<template v-slot:header-goal="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn v-if="editMode" icon="edit" flat round size="sm" color="orange"/>
|
||||
<div>{{ prop.node.label }}</div>
|
||||
<q-badge outline v-for="tag in prop.node.goal.tags" :key="tag" :color="getColorForTag(tag)" class="q-ml-sm">
|
||||
<div class="text-weight-bold">{{ tag }}</div>
|
||||
<div class="text-weight-bold q-my-xs">{{ tag }}</div>
|
||||
</q-badge>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-slot:header-goal-list="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn v-if="editMode" icon="edit" flat round size="sm" color="orange"/>
|
||||
<div>{{ prop.node.label }}</div>
|
||||
<q-badge outline color="orange" class="q-ml-sm">
|
||||
<div class="text-weight-bold q-my-xs">Goal List</div>
|
||||
</q-badge>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-slot:header-category="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn v-if="editMode" icon="edit" flat round size="sm" color="orange"/>
|
||||
<div>{{ prop.node.label }}</div>
|
||||
<q-badge outline color="blue" class="q-ml-sm">
|
||||
<div class="text-weight-bold q-my-xs">Category</div>
|
||||
</q-badge>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Add Goal -->
|
||||
<template v-slot:header-add-goal="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn outline icon="add" label="Goal" color="light-blue" size="sm"></q-btn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Add Goal List -->
|
||||
<template v-slot:header-add-goal-list="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn outline icon="add" label="Goal List" color="light-blue" size="sm"></q-btn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Add Category -->
|
||||
<template v-slot:header-add-category="prop">
|
||||
<div class="row items-center">
|
||||
<q-btn outline icon="add" label="Category" color="light-blue" size="sm"></q-btn>
|
||||
</div>
|
||||
</template>
|
||||
</q-tree>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
games
|
||||
} from '@/js/ParseGamesJSON.ts';
|
||||
interface Node {
|
||||
label: string;
|
||||
header?: string; // 'goal' | 'goal-list' | 'category' | 'add-goal' | 'add-goal-list' | 'add-category'
|
||||
children?: Node[];
|
||||
goal?: BingoGoal;
|
||||
tickable?: boolean;
|
||||
noTick?: boolean;
|
||||
}
|
||||
|
||||
import BingoCategory from '@/js/lib/BingoCategory.ts';
|
||||
import type BingoGoal from '@/js/lib/BingoGoal.ts';
|
||||
import BingoGoalList from '@/js/lib/BingoGoalList.ts';
|
||||
|
||||
interface Node {
|
||||
label: string;
|
||||
header?: string;
|
||||
children?: Node[];
|
||||
goal?: BingoGoal;
|
||||
}
|
||||
import {
|
||||
useLocalGamesStore
|
||||
} from '@/stores/local-games.ts';
|
||||
const localGames = useLocalGamesStore();
|
||||
|
||||
const selected = ref([]);
|
||||
const ticked = ref([]);
|
||||
const expanded = ref([]);
|
||||
onMounted(async() => {
|
||||
await localGames.fetchGames();
|
||||
});
|
||||
|
||||
const {
|
||||
editMode
|
||||
} = defineProps({
|
||||
editMode: Boolean
|
||||
});
|
||||
|
||||
const selected = ref<Node[]>([]);
|
||||
const ticked = ref<Node[]>([]);
|
||||
const expanded = ref<Node[]>([]);
|
||||
|
||||
const getColorForTag = (tag: string) => {
|
||||
switch (tag) {
|
||||
@ -50,52 +106,140 @@ const getColorForTag = (tag: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
const getAllGoals = (node: Node): BingoGoal[] => {
|
||||
const goals: BingoGoal[] = [];
|
||||
if (node.children) {
|
||||
for (const child of node.children) {
|
||||
goals.push(...getAllGoals(child));
|
||||
}
|
||||
}
|
||||
else if (node.goal) {
|
||||
goals.push(node.goal);
|
||||
}
|
||||
|
||||
return goals;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const selectByTag = (tag: string) => {
|
||||
ticked.value.length = 0;
|
||||
ticked.value.push(...nodes.value.filter(node => {
|
||||
return getAllGoals(node).map(goal => goal.tags.includes(tag));
|
||||
}));
|
||||
|
||||
console.log(ticked.value);
|
||||
};
|
||||
|
||||
const nodes = computed(() => {
|
||||
return games.map(game => {
|
||||
return localGames.games.map(game => {
|
||||
const game_node: Node = {
|
||||
label: game.name,
|
||||
children: []
|
||||
children: [],
|
||||
tickable: !editMode,
|
||||
noTick: editMode
|
||||
};
|
||||
|
||||
game_node.children = game.items.map(item => {
|
||||
const is_category = item instanceof BingoCategory;
|
||||
const is_goal_list = item instanceof BingoGoalList;
|
||||
|
||||
const group_node: Node = {
|
||||
label: item.name,
|
||||
children: []
|
||||
header: is_category
|
||||
? 'category'
|
||||
: is_goal_list
|
||||
? 'goal-list'
|
||||
: '',
|
||||
children: [],
|
||||
tickable: !editMode,
|
||||
noTick: editMode
|
||||
};
|
||||
|
||||
if (item instanceof BingoCategory) {
|
||||
if (is_category) {
|
||||
group_node.children = item.goal_lists.map(goal_list => {
|
||||
const goal_list_node: Node = {
|
||||
label: goal_list.name,
|
||||
children: goal_list.goals.map(goal => {
|
||||
const goal_node: Node = {
|
||||
label: goal.name,
|
||||
header: 'goal',
|
||||
goal
|
||||
};
|
||||
|
||||
return goal_node;
|
||||
})
|
||||
header: 'goal-list',
|
||||
children: [],
|
||||
tickable: !editMode,
|
||||
noTick: editMode
|
||||
};
|
||||
|
||||
goal_list_node.children?.push(...goal_list.goals.map(goal => {
|
||||
const goal_node: Node = {
|
||||
label: goal.name,
|
||||
header: 'goal',
|
||||
goal,
|
||||
tickable: !editMode,
|
||||
noTick: editMode
|
||||
};
|
||||
|
||||
return goal_node;
|
||||
}));
|
||||
|
||||
if (editMode) {
|
||||
goal_list_node.children?.push({
|
||||
label: 'Add Goal',
|
||||
header: 'add-goal',
|
||||
tickable: false,
|
||||
noTick: true
|
||||
});
|
||||
}
|
||||
|
||||
return goal_list_node;
|
||||
});
|
||||
|
||||
if (editMode) {
|
||||
group_node.children?.push({
|
||||
label: 'Add Goal List',
|
||||
header: 'add-goal-list',
|
||||
tickable: false,
|
||||
noTick: true
|
||||
});
|
||||
}
|
||||
}
|
||||
else if (item instanceof BingoGoalList) {
|
||||
else if (is_goal_list) {
|
||||
group_node.children = item.goals.map(goal => {
|
||||
const goal_node: Node = {
|
||||
label: goal.name,
|
||||
header: 'goal',
|
||||
goal
|
||||
goal,
|
||||
tickable: !editMode,
|
||||
noTick: editMode
|
||||
};
|
||||
|
||||
return goal_node;
|
||||
});
|
||||
|
||||
if (editMode) {
|
||||
group_node.children.push({
|
||||
label: 'Add Goal',
|
||||
header: 'add-goal',
|
||||
tickable: false,
|
||||
noTick: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return group_node;
|
||||
});
|
||||
|
||||
if (editMode) {
|
||||
game_node.children.push({
|
||||
label: 'Add Goal List',
|
||||
header: 'add-goal-list',
|
||||
tickable: false,
|
||||
noTick: true
|
||||
});
|
||||
|
||||
game_node.children.push({
|
||||
label: 'Add Category',
|
||||
header: 'add-category',
|
||||
tickable: false,
|
||||
noTick: true
|
||||
});
|
||||
}
|
||||
|
||||
return game_node;
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,16 +1,26 @@
|
||||
// Example code to convert the old format to the new one
|
||||
import json from './games.json';
|
||||
import new_game from './new_game.json';
|
||||
|
||||
import markdown_text from '@/js/testmarkdown.js';
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
import BingoGoal from '@/js/lib/BingoGoal.ts';
|
||||
import BingoCategory from '@/js/lib/BingoCategory.ts';
|
||||
import BingoGoalList from '@/js/lib/BingoGoalList.ts';
|
||||
import Parser from '@/js/lib/Parser.ts';
|
||||
|
||||
export const games: BingoGame[] = [];
|
||||
// export const games: Map<string, BingoGame> = new Map;
|
||||
|
||||
async function run_new_format() {
|
||||
games.length = 0;
|
||||
games.push(Parser.from_json(JSON.stringify(new_game)));
|
||||
}
|
||||
run_new_format();
|
||||
|
||||
function run_old_format() {
|
||||
games.length = 0;
|
||||
|
||||
for (const j_game of json) {
|
||||
const game = new BingoGame(
|
||||
j_game.game_name,
|
||||
@ -57,4 +67,4 @@ function run_old_format() {
|
||||
// console.log(goals);
|
||||
}
|
||||
|
||||
run_old_format();
|
||||
// run_old_format();
|
||||
|
||||
@ -5,7 +5,7 @@ import BingoGoalList from '@/js/lib/BingoGoalList.ts';
|
||||
import SuccessResponse from '@/js/lib/SuccessResponse.ts';
|
||||
import Util from '@/js/lib/Util.ts';
|
||||
import {
|
||||
Transform, plainToInstance, type TransformFnParams
|
||||
Transform, plainToInstance, type TransformFnParams, Exclude
|
||||
} from 'class-transformer';
|
||||
|
||||
type BingoCategoryOrGoalList = BingoCategory | BingoGoalList;
|
||||
@ -34,6 +34,9 @@ export default class BingoGame {
|
||||
|
||||
generator: 'simple' | 'srl_v5' | 'srl_v8' = 'simple';
|
||||
|
||||
@Exclude()
|
||||
is_local: boolean = false;
|
||||
|
||||
constructor(
|
||||
id: string,
|
||||
name: string,
|
||||
|
||||
46
src/js/lib/LocalGames.ts
Normal file
46
src/js/lib/LocalGames.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import type BingoGame from '@/js/lib/BingoGame.ts';
|
||||
import Parser from '@/js/lib/Parser.ts';
|
||||
import {
|
||||
get, set
|
||||
} from 'idb-keyval';
|
||||
|
||||
// export async function getLocalGames(): Promise<Map<string, BingoGame>> {
|
||||
// let games_array: BingoGame[] | undefined = await get('games');
|
||||
// if (!Array.isArray(games_array)) {
|
||||
// await set('games', games_array = new Array);
|
||||
// }
|
||||
|
||||
// const games = new Map<string, BingoGame>();
|
||||
// games_array.forEach(game => {
|
||||
// game.is_local = true;
|
||||
|
||||
// games.set(game.id, game);
|
||||
// });
|
||||
|
||||
// return games;
|
||||
// }
|
||||
|
||||
// export async function getGameByID(id: string): Promise<BingoGame | undefined> {
|
||||
// const games = await getLocalGames();
|
||||
|
||||
// return games.get(id);
|
||||
// }
|
||||
|
||||
// async function saveGames(games: Map<string, BingoGame>) {
|
||||
// await set('games', Array.from(games.values()).map(game => Parser.to_json(game)));
|
||||
// }
|
||||
|
||||
// export async function saveGame(game: BingoGame) {
|
||||
// // For testing this is important so we don't mess with the original BingoGame instance
|
||||
// const clone = Parser.from_json(JSON.stringify(Parser.to_json(game)));
|
||||
|
||||
// const games = await getLocalGames();
|
||||
// games.set(game.id, clone);
|
||||
// await saveGames(games);
|
||||
// }
|
||||
|
||||
// export async function deleteGame(id: string) {
|
||||
// const games = await getLocalGames();
|
||||
// games.delete(id);
|
||||
// await saveGames(games);
|
||||
// }
|
||||
@ -4,6 +4,12 @@ import {
|
||||
} from 'class-transformer';
|
||||
|
||||
export default class Parser {
|
||||
static from_json_raw(input: JSON): BingoGame {
|
||||
const game = plainToInstance(BingoGame, input);
|
||||
|
||||
return game;
|
||||
}
|
||||
|
||||
static from_json(input: string): BingoGame {
|
||||
const json: JSON = JSON.parse(input);
|
||||
const game = plainToInstance(BingoGame, json);
|
||||
|
||||
3160
src/js/new_game.json
Normal file
3160
src/js/new_game.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,73 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "yakuza_0",
|
||||
"name": "Yakuza 0",
|
||||
"short_description": "The funny game we used for all bingos.",
|
||||
"description": "Very long text here haha lmao",
|
||||
"generator": "simple",
|
||||
"goals": [
|
||||
{
|
||||
"name": "Defeat 50 enemies on the street",
|
||||
"tags": [
|
||||
"Easy"
|
||||
],
|
||||
"possible_spaces": [
|
||||
1
|
||||
],
|
||||
"group_id": "1"
|
||||
},
|
||||
{
|
||||
"name": "Defeat 150 enemies on the street",
|
||||
"tags": [
|
||||
"Normal"
|
||||
],
|
||||
"possible_spaces": [
|
||||
0,
|
||||
2
|
||||
],
|
||||
"group_id": "2"
|
||||
},
|
||||
{
|
||||
"name": "Defeat 300 enemies on the street",
|
||||
"tags": [
|
||||
"Hard"
|
||||
],
|
||||
"possible_spaces": [
|
||||
0,
|
||||
3,
|
||||
4,
|
||||
6,
|
||||
7,
|
||||
10,
|
||||
12,
|
||||
15,
|
||||
17,
|
||||
18,
|
||||
20,
|
||||
22
|
||||
],
|
||||
"group_id": "3"
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "1"
|
||||
},
|
||||
{
|
||||
"name": "2",
|
||||
"parent_id": "1"
|
||||
},
|
||||
{
|
||||
"name": "3",
|
||||
"parent_id": "2"
|
||||
},
|
||||
{
|
||||
"name": "Battle"
|
||||
},
|
||||
{
|
||||
"name": "Defeat enemies on the street",
|
||||
"parent_id": "Battle"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
10444
src/js/singlegame.json
10444
src/js/singlegame.json
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,7 @@ import {
|
||||
import {
|
||||
createPinia
|
||||
} from 'pinia';
|
||||
import DebouncePlugin from '@/plugins/debounce.ts';
|
||||
|
||||
import '@/assets/main.css';
|
||||
|
||||
@ -24,12 +25,16 @@ import router from './router';
|
||||
|
||||
const app = createApp(App);
|
||||
|
||||
const pinia = createPinia();
|
||||
pinia.use(DebouncePlugin);
|
||||
|
||||
app.use(Quasar, {
|
||||
config: {
|
||||
dark: true
|
||||
}
|
||||
});
|
||||
app.use(createPinia());
|
||||
// app.use(createPinia());
|
||||
app.use(pinia);
|
||||
app.use(router);
|
||||
|
||||
app.mount('#app');
|
||||
|
||||
23
src/plugins/debounce.ts
Normal file
23
src/plugins/debounce.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import {
|
||||
debounce
|
||||
} from 'ts-debounce';
|
||||
|
||||
const DebouncePlugin = (({
|
||||
options, store
|
||||
}: any) => {
|
||||
if (options.debounce) {
|
||||
// we are overriding the actions with new ones
|
||||
return Object.keys(options.debounce).reduce((debouncedActions, action) => {
|
||||
// @ts-ignore
|
||||
debouncedActions[action] = debounce(
|
||||
store[action],
|
||||
options.debounce[action]
|
||||
);
|
||||
|
||||
return debouncedActions;
|
||||
}, {
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default DebouncePlugin;
|
||||
110
src/stores/local-games.ts
Normal file
110
src/stores/local-games.ts
Normal file
@ -0,0 +1,110 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
import {
|
||||
defineStore
|
||||
} from 'pinia';
|
||||
import {
|
||||
get, set
|
||||
} from 'idb-keyval';
|
||||
import Parser from '@/js/lib/Parser.ts';
|
||||
|
||||
/*
|
||||
* TODO: Is an array for games really better?
|
||||
* Wouldn't a map make more sense since we have direct ID => Game access?
|
||||
*/
|
||||
export const useLocalGamesStore = defineStore('localGames', () => {
|
||||
const games: Ref<BingoGame[]> = ref([]);
|
||||
|
||||
async function fetchGames() {
|
||||
console.info('--- Fetching games ...');
|
||||
|
||||
let games_array: JSON[] | undefined = await get('games');
|
||||
if (!Array.isArray(games_array)) {
|
||||
await set('games', games_array = new Array);
|
||||
}
|
||||
|
||||
games.value.length = 0;
|
||||
|
||||
console.log(games_array);
|
||||
games.value = games_array.map(game => {
|
||||
const bingo_game = Parser.from_json_raw(game);
|
||||
|
||||
bingo_game.is_local = true;
|
||||
|
||||
return bingo_game;
|
||||
});
|
||||
|
||||
// games_array.forEach(game => {
|
||||
// game = Parser.from_json(JSON.stringify(game));
|
||||
|
||||
// game.is_local = true;
|
||||
|
||||
// games.value.set(game.id, game);
|
||||
// });
|
||||
|
||||
console.info('--- Finished fetching games!');
|
||||
console.info('');
|
||||
|
||||
console.log(games.value);
|
||||
}
|
||||
|
||||
async function saveGames() {
|
||||
console.info('--- Saving games ...');
|
||||
|
||||
await set('games', Array.from(games.value.values()).map(
|
||||
game => Parser.to_json(game)
|
||||
));
|
||||
|
||||
console.info('--- Finished saving games!');
|
||||
console.info('');
|
||||
}
|
||||
|
||||
function hasGame(id: string): boolean {
|
||||
return games.value.some(game => game.id === id);
|
||||
}
|
||||
|
||||
function addGame(game: BingoGame) {
|
||||
if (hasGame(game.id)) {
|
||||
console.error(`Failed to clone game with ID ${ game.id } because it already exists`);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.info(`--- Adding game with ID '${ game.id }' ...`);
|
||||
|
||||
const cloned_game = Parser.from_json(JSON.stringify(Parser.to_json(game)));
|
||||
|
||||
cloned_game.is_local = true;
|
||||
|
||||
games.value.push(cloned_game);
|
||||
saveGames();
|
||||
}
|
||||
|
||||
function deleteGame(id: string) {
|
||||
if (hasGame(id)) {
|
||||
console.error(`Failed to delete game with ID ${ id } because it doesn't exist`);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.info(`--- Deleting game with ID '${ id }' ...`);
|
||||
|
||||
games.value = games.value.filter(game => game.id !== id);
|
||||
saveGames();
|
||||
}
|
||||
|
||||
return {
|
||||
games,
|
||||
|
||||
fetchGames,
|
||||
saveGames,
|
||||
|
||||
hasGame,
|
||||
addGame,
|
||||
deleteGame
|
||||
};
|
||||
}, {
|
||||
debounce: {
|
||||
fetchGames: 0,
|
||||
saveGames: 500
|
||||
}
|
||||
});
|
||||
18
src/stores/remote-games.ts
Normal file
18
src/stores/remote-games.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import BingoGame from '@/js/lib/BingoGame.ts';
|
||||
import {
|
||||
defineStore
|
||||
} from 'pinia';
|
||||
|
||||
export const useRemoteGamesStore = defineStore('remoteGames', () => {
|
||||
const games: Ref<BingoGame[]> = ref([]);
|
||||
|
||||
async function fetchGames() {
|
||||
// TODO: Fetch games from server
|
||||
}
|
||||
|
||||
return {
|
||||
games,
|
||||
|
||||
fetchGames
|
||||
};
|
||||
});
|
||||
@ -1,10 +1,18 @@
|
||||
<template>
|
||||
<div class="q-pa-md q-gutter-md">
|
||||
<q-card class="q-mx-auto" style="max-width: 800px; height: 800px;">
|
||||
<q-scroll-area style="height: 100%;">
|
||||
<GeneratorComponent />
|
||||
</q-scroll-area>
|
||||
</q-card>
|
||||
<div class="row justify-around">
|
||||
<q-card class="col-6" style="max-width: 800px; height: 800px;">
|
||||
<q-scroll-area style="height: 100%;">
|
||||
<GeneratorComponent />
|
||||
</q-scroll-area>
|
||||
</q-card>
|
||||
|
||||
<q-card class="col-6" style="max-width: 800px; height: 800px;">
|
||||
<q-scroll-area style="height: 100%;">
|
||||
<GeneratorComponent :edit-mode="true" />
|
||||
</q-scroll-area>
|
||||
</q-card>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
"env.d.ts",
|
||||
"components.d.ts",
|
||||
"auto-imports.d.ts",
|
||||
"custom.d.ts",
|
||||
"src/**/*",
|
||||
"src/**/*.vue",
|
||||
"src/**/*.json"
|
||||
@ -19,6 +20,7 @@
|
||||
"./src/*"
|
||||
]
|
||||
},
|
||||
"outDir": "generated",
|
||||
"target": "ESNext",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
|
||||
1
tsconfig.vitest.tsbuildinfo
Normal file
1
tsconfig.vitest.tsbuildinfo
Normal file
File diff suppressed because one or more lines are too long
@ -9,9 +9,6 @@ import vue from '@vitejs/plugin-vue';
|
||||
import vueJsx from '@vitejs/plugin-vue-jsx';
|
||||
|
||||
import Components from 'unplugin-vue-components/vite';
|
||||
import {
|
||||
QuasarResolver
|
||||
} from 'unplugin-vue-components/resolvers';
|
||||
|
||||
import {
|
||||
quasar, transformAssetUrls
|
||||
@ -25,7 +22,6 @@ export default defineConfig({
|
||||
plugins: [
|
||||
VueRouter(),
|
||||
Components({
|
||||
resolvers: [ QuasarResolver() ],
|
||||
dts: true
|
||||
}),
|
||||
AutoImport({
|
||||
@ -39,7 +35,6 @@ export default defineConfig({
|
||||
'vue',
|
||||
'vue-router'
|
||||
],
|
||||
dirs: [ './src/components/**' ],
|
||||
dts: true,
|
||||
eslintrc: {
|
||||
enabled: true
|
||||
|
||||
Loading…
Reference in New Issue
Block a user