├── ui
├── .npmrc
├── src
│ ├── routes
│ │ ├── +layout.ts
│ │ ├── +layout.svelte
│ │ ├── styles.css
│ │ └── +page.svelte
│ ├── lib
│ │ ├── stores.ts
│ │ ├── picker-customization.ts
│ │ ├── CustomMenu.svelte
│ │ └── picker-shadow-styles.css
│ ├── app.html
│ └── app.d.ts
├── static
│ └── favicon.png
├── vite.config.ts
├── .prettierignore
├── .prettierrc.json5
├── tsconfig.json
├── svelte.config.js
├── package.json
└── package-lock.json
├── assets
├── audio
│ └── pop.wav
├── emoji-mart.ico
├── emoji-mart.png
├── emoji-mart.desktop
└── AppImageBuilder.yml
├── .editorconfig
├── .gitattributes
├── src
├── audio_nix.c.v
├── cache.v
├── auido_windows.c.v
├── config.v
├── main.v
├── paths.v
├── init_d_embed.v
└── api.v
├── v.mod
├── .github
└── workflows
│ ├── ci.yml
│ ├── lint.yml
│ ├── macos.yml
│ ├── windows.yml
│ └── linux.yml
├── .gitignore
└── README.md
/ui/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 | resolution-mode=highest
3 |
--------------------------------------------------------------------------------
/ui/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 |
--------------------------------------------------------------------------------
/assets/audio/pop.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttytm/emoji-mart-desktop/HEAD/assets/audio/pop.wav
--------------------------------------------------------------------------------
/assets/emoji-mart.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttytm/emoji-mart-desktop/HEAD/assets/emoji-mart.ico
--------------------------------------------------------------------------------
/assets/emoji-mart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttytm/emoji-mart-desktop/HEAD/assets/emoji-mart.png
--------------------------------------------------------------------------------
/ui/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/ui/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ttytm/emoji-mart-desktop/HEAD/ui/static/favicon.png
--------------------------------------------------------------------------------
/ui/src/lib/stores.ts:
--------------------------------------------------------------------------------
1 | import { writable } from 'svelte/store';
2 |
3 | export const config = writable();
4 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*]
2 | charset = utf-8
3 | end_of_line = lf
4 | insert_final_newline = true
5 | trim_trailing_whitespace = true
6 |
7 | [*.v]
8 | indent_style = tab
9 |
--------------------------------------------------------------------------------
/ui/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()]
6 | });
7 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 | *.bat eol=crlf
3 |
4 | **/*.v linguist-language=V
5 | **/*.vv linguist-language=V
6 | **/*.vsh linguist-language=V
7 | **/v.mod linguist-language=V
8 |
--------------------------------------------------------------------------------
/src/audio_nix.c.v:
--------------------------------------------------------------------------------
1 | module main
2 |
3 | import os
4 |
5 | fn play_wav_file() {
6 | $if linux {
7 | os.system('aplay -q "${paths.sound}"')
8 | } $else $if macos {
9 | os.system('afplay "${paths.sound}"')
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ui/.prettierignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/v.mod:
--------------------------------------------------------------------------------
1 | Module{
2 | name: 'Emoji Mart Desktop App'
3 | description: 'An emoji picker created with V and webview'
4 | version: '0.4.0'
5 | license: 'MIT'
6 | dependencies: ['https://github.com/ttytm/webview', 'https://github.com/Larpon/miniaudio']
7 | }
8 |
--------------------------------------------------------------------------------
/ui/.prettierrc.json5:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte"],
7 | "pluginSearchDirs": ["."],
8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9 | }
10 |
--------------------------------------------------------------------------------
/assets/emoji-mart.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Type=Application
3 | TryExec=emoji-mart-desktop
4 | Exec=emoji-mart-desktop
5 | Icon=emoji-mart
6 | Terminal=false
7 | Categories=Utility;
8 |
9 | Name=Emoji Mart
10 | GenericName=Terminal
11 | Comment=Emoji picker, cross-platform, lightweight
12 |
--------------------------------------------------------------------------------
/ui/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/cache.v:
--------------------------------------------------------------------------------
1 | import os
2 | import json
3 |
4 | pub struct LocalStorage {
5 | mut:
6 | frequently string
7 | }
8 |
9 | fn (mut cache LocalStorage) load() {
10 | if f := os.read_file(paths.cache_file) {
11 | cache = json.decode(LocalStorage, f) or { LocalStorage{} }
12 | }
13 | }
14 |
15 | fn (cache LocalStorage) save() ! {
16 | if !os.is_dir(paths.cache_dir) {
17 | os.mkdir_all(paths.cache_dir)!
18 | }
19 | os.write_file(paths.cache_file, json.encode(cache))!
20 | }
21 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | paths-ignore: ['**/*.md']
6 | pull_request:
7 | paths-ignore: ['**/*.md']
8 | workflow_dispatch:
9 |
10 | jobs:
11 | linux:
12 | uses: ./.github/workflows/linux.yml
13 | permissions:
14 | contents: write
15 |
16 | macOS:
17 | uses: ./.github/workflows/macos.yml
18 | permissions:
19 | contents: write
20 |
21 | windows:
22 | uses: ./.github/workflows/windows.yml
23 | permissions:
24 | contents: write
25 |
--------------------------------------------------------------------------------
/src/auido_windows.c.v:
--------------------------------------------------------------------------------
1 | module main
2 |
3 | import time
4 | import miniaudio as ma
5 |
6 | fn play_wav_file() {
7 | engine := &ma.Engine{}
8 | if ma.engine_init(ma.null, engine) != .success {
9 | panic('failed to initialize audio engine.')
10 | }
11 | defer {
12 | ma.engine_uninit(engine)
13 | }
14 | if ma.engine_play_sound(engine, paths.sound.str, ma.null) != .success {
15 | panic('failed to load and play "${paths.sound}".')
16 | }
17 | ma.engine_play_sound(engine, paths.sound.str, ma.null)
18 | time.sleep(140 * time.millisecond)
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # == V
2 | # Binaries for programs and plugins
3 | emoji-mart-desktop
4 | *.exe
5 | *.exe~
6 | *.so
7 | *.dylib
8 | *.dll
9 |
10 | # Ignore binary output folders
11 | dist/
12 |
13 | # Generated files
14 | lvb.v
15 |
16 | # Ignore common editor/system specific metadata
17 | .DS_Store
18 | .idea/
19 | .vscode/
20 | *.iml
21 |
22 | # == Svelte
23 | .DS_Store
24 | node_modules
25 | build
26 | .svelte-kit
27 | package
28 | vite.config.js.timestamp-*
29 | vite.config.ts.timestamp-*
30 |
31 | # == Common
32 | # Env
33 | .env
34 | .env.*
35 | !.env.example
36 |
--------------------------------------------------------------------------------
/src/config.v:
--------------------------------------------------------------------------------
1 | import os
2 | import toml
3 |
4 | struct Config {
5 | mut:
6 | audio bool = true // Last state of audio feedback feedback setting for emoji selections
7 | frequent bool = true // Controls whether or not frequently used emojis are shown
8 | }
9 |
10 | fn (mut config Config) load() {
11 | if f := toml.parse_file(paths.cfg_file) {
12 | config = f.decode[Config]() or { return }
13 | }
14 | }
15 |
16 | fn (config Config) save() ! {
17 | if !os.is_dir(paths.cfg_dir) {
18 | os.mkdir_all(paths.cfg_dir)!
19 | }
20 | os.write_file(paths.cfg_file, toml.encode(config))!
21 | }
22 |
--------------------------------------------------------------------------------
/ui/src/routes/styles.css:
--------------------------------------------------------------------------------
1 | @media (prefers-color-scheme: dark) {
2 | :root {
3 | --rgb-accent: 162, 234, 233;
4 | --rgb-accent-secondary: 251, 184, 108;
5 | --rgb-background: 39, 39, 39;
6 | --rgb-background-secondary: 44, 44, 44;
7 | --rgb-background-tertiary: 54, 54, 54;
8 | --rgb-input: 28, 28, 28;
9 | --color-hover: rgb(64, 64, 64);
10 | --color-border: rgb(var(--rgb-input));
11 | }
12 | html {
13 | background: rgb(var(--rgb-background));
14 | color: #ccc;
15 | }
16 | }
17 |
18 | body {
19 | margin: 0;
20 | }
21 |
22 | em-emoji-picker {
23 | width: 100%;
24 | height: 100vh;
25 | }
26 |
--------------------------------------------------------------------------------
/ui/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true
12 | }
13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
14 | //
15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
16 | // from the referenced tsconfig.json - TypeScript does not merge them in
17 | }
18 |
--------------------------------------------------------------------------------
/ui/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface Platform {}
9 | }
10 | }
11 |
12 | declare module 'svelte-popover';
13 |
14 | type Config = {
15 | audio: boolean;
16 | frequent: boolean;
17 | };
18 |
19 | // Webview functions
20 | declare function get_config(): Promise;
21 | declare function get_cache(): Promise;
22 | declare function handle_select(localStorage: string): Promise;
23 | declare function toggle_audio(): Promise;
24 | declare function open_in_browser(uri: string): Promise;
25 |
--------------------------------------------------------------------------------
/ui/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-static';
2 | import { vitePreprocess } from '@sveltejs/kit/vite';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter.
13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
14 | adapter: adapter()
15 | }
16 | };
17 |
18 | export default config;
19 |
--------------------------------------------------------------------------------
/.github/workflows/lint.yml:
--------------------------------------------------------------------------------
1 | name: Lint
2 |
3 | on:
4 | workflow_call:
5 |
6 | env:
7 | REPO_NAME: ${{ github.event.repository.name }}
8 |
9 | jobs:
10 | fmt:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - name: Checkout ${{ env.REPO_NAME }}
14 | uses: actions/checkout@v4
15 | with:
16 | path: ${{ env.REPO_NAME }}
17 | - name: Restore Cache
18 | uses: actions/cache/restore@v3
19 | with:
20 | path: |
21 | vlang
22 | ~/.vmodules
23 | key: ${{ runner.os }}-${{ github.sha }}
24 | fail-on-cache-miss: true
25 | - name: Setup V
26 | run: vlang/v symlink && v version
27 | - name: Check Formatting
28 | run: v fmt ${{ env.REPO_NAME }} && v fmt -verify ${{ env.REPO_NAME }}
29 |
--------------------------------------------------------------------------------
/ui/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui-",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite dev",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11 | "lint": "prettier --plugin-search-dir . --check .",
12 | "format": "prettier --plugin-search-dir . --write ."
13 | },
14 | "devDependencies": {
15 | "@iconify/svelte": "^3.1.4",
16 | "@sveltejs/adapter-auto": "^2.0.0",
17 | "@sveltejs/adapter-static": "^2.0.2",
18 | "@sveltejs/kit": "^1.20.4",
19 | "prettier": "^2.8.0",
20 | "prettier-plugin-svelte": "^2.10.1",
21 | "svelte": "^4.0.5",
22 | "svelte-check": "^3.4.3",
23 | "svelte-popover": "^2.0.8",
24 | "tslib": "^2.4.1",
25 | "typescript": "^5.0.0",
26 | "vite": "^4.4.2"
27 | },
28 | "type": "module",
29 | "dependencies": {
30 | "@emoji-mart/data": "^1.1.2",
31 | "emoji-mart": "^5.5.2"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main.v:
--------------------------------------------------------------------------------
1 | import webview { Webview }
2 | import os
3 |
4 | @[heap]
5 | struct App {
6 | mut:
7 | window Webview
8 | config Config
9 | cache LocalStorage
10 | port int
11 | }
12 |
13 | fn main() {
14 | mut app := App{
15 | window: webview.create()
16 | }
17 | app.config.load()
18 | app.cache.load()
19 | os.signal_opt(.int, app.handle_interrupt)!
20 | app.run()!
21 | }
22 |
23 | fn (mut app App) run() ! {
24 | app.bind()
25 | app.window.set_title('Emoji Mart')
26 | app.window.set_size(352, 435, .@none)
27 | app.window.set_icon(paths.icon) or {} // FIXME: `assets/emoji-mart.ico` not recognized on linux.
28 | $if dev ? {
29 | app.window.serve_dev(paths.ui)!
30 | } $else {
31 | app.window.serve_static(paths.ui)!
32 | }
33 | app.window.run()
34 | app.end()
35 | }
36 |
37 | fn (mut app App) end() {
38 | app.window.destroy()
39 | app.config.save() or { panic('failed to save config. ${err}') }
40 | app.cache.save() or { panic('failed to load cache. ${err}') }
41 | }
42 |
43 | fn (mut app App) handle_interrupt(signal os.Signal) {
44 | app.end()
45 | exit(0)
46 | }
47 |
--------------------------------------------------------------------------------
/src/paths.v:
--------------------------------------------------------------------------------
1 | import os { join_path }
2 |
3 | struct Paths {
4 | mut:
5 | root string
6 | ui string
7 | sound string
8 | icon string
9 | cfg_dir string
10 | cfg_file string
11 | cache_dir string
12 | cache_file string
13 | }
14 |
15 | const app_name = 'emoji-mart'
16 | const paths = get_paths()!
17 |
18 | fn get_paths() !Paths {
19 | mut p := Paths{}
20 | $if embed ? {
21 | tmp_dir := join_path(os.temp_dir(), '${app_name}-@${version}')
22 | p.ui = join_path(tmp_dir, 'ui')
23 | p.sound = join_path(tmp_dir, 'assets', 'pop.wav')
24 | p.icon = join_path(tmp_dir, 'assets', 'icon.ico')
25 | } $else {
26 | app_root := @VMODROOT
27 | p.ui = join_path(app_root, 'ui', 'build')
28 | p.sound = join_path(app_root, 'assets', 'audio', 'pop.wav')
29 | p.icon = join_path(app_root, 'assets', 'emoji-mart.ico')
30 | }
31 | // Config
32 | p.cfg_dir = join_path(os.config_dir()!, app_name)
33 | p.cfg_file = join_path(p.cfg_dir, '${app_name}.toml')
34 | // Cache
35 | p.cache_dir = join_path(os.cache_dir(), app_name, 'LocalStorage')
36 | p.cache_file = join_path(p.cache_dir, 'localStorage.json')
37 | return p
38 | }
39 |
--------------------------------------------------------------------------------
/src/init_d_embed.v:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | // Example of two static embedded files.
4 | const icon = $embed_file('../assets/emoji-mart.ico')
5 | // Note: Currently, this one must be in a differnt dir, else V embeds the wrong file.
6 | // Else the path would be `../assets/pop.wav`.
7 | const sound = $embed_file('../assets/audio/pop.wav')
8 |
9 | fn init() {
10 | write_embedded() or {
11 | eprintln('failed to write embedded files: `${err}`')
12 | exit(1)
13 | }
14 | }
15 |
16 | fn write_embedded() ! {
17 | if !os.exists(paths.ui) {
18 | dist_ui_path := os.join_path('dist', 'ui')
19 | for file in ui {
20 | _, rel_file_path := file.path.rsplit_once(dist_ui_path) or {
21 | return error('failed to prepare path for ${file.path}')
22 | }
23 | out_path := os.join_path(paths.ui, rel_file_path)
24 | os.mkdir_all(os.dir(out_path))!
25 | os.write_file(out_path, file.to_string())!
26 | }
27 | }
28 | if !os.exists(paths.sound) {
29 | os.mkdir_all(os.dir(paths.sound)) or {}
30 | os.write_file(paths.sound, sound.to_string())!
31 | }
32 | if !os.exists(paths.icon) {
33 | os.mkdir_all(os.dir(paths.icon)) or {}
34 | os.write_file(paths.icon, icon.to_string())!
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/assets/AppImageBuilder.yml:
--------------------------------------------------------------------------------
1 | # appimage-builder recipe see https://appimage-builder.readthedocs.io for details
2 | version: 1
3 | AppDir:
4 | path: /home/turiiya/Dev/vlang/webview/emoji-mart-desktop/dist/appimage/AppDir
5 | app_info:
6 | id: emoji-mart
7 | name: Emoji Mart
8 | icon: emoji-mart
9 | version: 'latest'
10 | exec: usr/bin/emoji-mart
11 | exec_args: $@
12 | files:
13 | include:
14 | - lib64/ld-linux-x86-64.so.2
15 | - /usr/lib/x86_64-linux-gnu/libatomic.so.1
16 | - /usr/lib/x86_64-linux-gnu/libffi.so.8
17 | - /usr/lib/x86_64-linux-gnu/libfribidi.so.0
18 | - /usr/lib/x86_64-linux-gnu/libharfbuzz-gobject.so.0
19 | - /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0
20 | - /usr/lib/x86_64-linux-gnu/libpsl.so.5
21 | - /usr/lib/x86_64-linux-gnu/libpthread.so.0
22 | - /usr/lib/x86_64-linux-gnu/librt.so.1
23 | - /usr/lib/x86_64-linux-gnu/libsepol.so.2
24 | - /usr/lib/x86_64-linux-gnu/libstdc++.so.6
25 | exclude:
26 | - usr/share/man
27 | - usr/share/doc/*/README.*
28 | - usr/share/doc/*/changelog.*
29 | - usr/share/doc/*/NEWS.*
30 | - usr/share/doc/*/TODO.*
31 | test:
32 | ubuntu-bionic:
33 | image: appimagecrafters/tests-env:ubuntu-bionic
34 | command: ./AppRun
35 | AppImage:
36 | arch: x86_64
37 | update-information: guess
38 |
--------------------------------------------------------------------------------
/src/api.v:
--------------------------------------------------------------------------------
1 | import webview { Event }
2 | import os
3 |
4 | fn (mut app App) bind() {
5 | // Bind a function.
6 | app.window.bind_opt('open_in_browser', open_in_browser)
7 | // Bind a function method to make the app struct available.
8 | app.window.bind('get_config', app.get_config)
9 | app.window.bind('get_cache', app.get_cache)
10 | app.window.bind_opt('handle_select', app.handle_select)
11 | // Alternatively, use `bind_ctx` and use the context pointer to pass a struct.
12 | app.window.bind_with_ctx('toggle_audio', toggle_audio, app)
13 | }
14 |
15 | // The functions we bind do not have to be public. For semantic reasons or
16 | // if we would want to generate docs for pub functions we can do it anyway.
17 |
18 | pub fn (app &App) get_config(_ &Event) Config {
19 | return app.config
20 | }
21 |
22 | pub fn (mut app App) handle_select(e &Event) !voidptr {
23 | if app.config.audio {
24 | spawn play_wav_file()
25 | }
26 | app.cache.frequently = e.get_arg[string](0)!
27 | return webview.no_result
28 | }
29 |
30 | pub fn toggle_audio(e &Event, mut app App) bool {
31 | app.config.audio = !app.config.audio
32 | if app.config.audio {
33 | spawn play_wav_file()
34 | }
35 | return app.config.audio
36 | }
37 |
38 | pub fn (app &App) get_cache(e &Event) string {
39 | return app.cache.frequently
40 | }
41 |
42 | pub fn open_in_browser(e &Event) !voidptr {
43 | link := e.get_arg[string](0)!
44 | os.open_uri(link)!
45 | return webview.no_result
46 | }
47 |
--------------------------------------------------------------------------------
/ui/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/ui/src/lib/picker-customization.ts:
--------------------------------------------------------------------------------
1 | import shadowStyles from './picker-shadow-styles.css?inline';
2 |
3 | function style(shadowRoot: ShadowRoot) {
4 | let style = document.createElement('style');
5 | style.innerHTML = shadowStyles;
6 | shadowRoot.appendChild(style);
7 | }
8 |
9 | function setKeymaps(shadowRoot: ShadowRoot) {
10 | const searchInput = shadowRoot.querySelector('.search input[type="search"]') as HTMLElement;
11 | document.addEventListener('keydown', (e) => {
12 | // e.preventDefault(); // for testing purposes in the browser
13 | if (((e.metaKey || e.ctrlKey) && e.key === 'f') || e.key === '/') {
14 | e.preventDefault();
15 | searchInput.focus();
16 | }
17 | });
18 | // Keyboard shortcut indicator
19 | const shortcutIndicator = document.createElement('div');
20 | shortcutIndicator.setAttribute('id', 'search-keys');
21 | // The searchbox is autofocus so we initially hide the shortcut indicator.
22 | shortcutIndicator.classList.add('hide');
23 | shortcutIndicator.innerHTML = '/
';
24 | searchInput.parentElement?.appendChild(shortcutIndicator);
25 | searchInput.addEventListener('focus', () => shortcutIndicator.classList.add('hide'));
26 | searchInput.addEventListener('blur', () => shortcutIndicator.classList.remove('hide'));
27 | }
28 |
29 | function appendSettings(shadowRoot: ShadowRoot) {
30 | const settings = document.getElementById('custom-settings');
31 | if (!settings) return;
32 | const search = shadowRoot.querySelector('div.search')?.parentElement;
33 | search?.appendChild(settings);
34 | }
35 |
36 | export function highlightKeyboarSelect(button: HTMLElement) {
37 | button.classList.add('keyboard-active');
38 | setTimeout(() => {
39 | button.classList.remove('keyboard-active');
40 | }, 150);
41 | }
42 |
43 | export function customizePicker(shadowRoot: ShadowRoot) {
44 | setTimeout(() => {
45 | // Settings won't appear without this timeout. Using this hack until something better appears.
46 | setKeymaps(shadowRoot);
47 | appendSettings(shadowRoot);
48 | style(shadowRoot);
49 | }, 1);
50 | }
51 |
--------------------------------------------------------------------------------
/ui/src/lib/CustomMenu.svelte:
--------------------------------------------------------------------------------
1 |
40 |
41 |
75 |
76 |
82 |
--------------------------------------------------------------------------------
/ui/src/lib/picker-shadow-styles.css:
--------------------------------------------------------------------------------
1 | #custom-settings,
2 | #custom-settings button {
3 | display: flex;
4 | justify-items: center;
5 | align-items: center;
6 | }
7 |
8 | #custom-settings {
9 | position: relative;
10 | margin: 0 12px;
11 | }
12 |
13 | /* `menu` ^= emoji-picker class */
14 | #custom-settings .menu {
15 | right: -4px;
16 | top: 26px;
17 | }
18 |
19 | #custom-settings .menu.open {
20 | animation: scaleIn 0.15s ease forwards;
21 | }
22 |
23 | #custom-settings .menu.close {
24 | animation: scaleOut 0.15s ease forwards;
25 | }
26 |
27 | #custom-settings__menu-btn svg {
28 | width: auto;
29 | height: auto;
30 | color: var(--color-b);
31 | transition: color 0.15s;
32 | }
33 |
34 | #custom-settings__menu-btn:hover svg,
35 | #custom-settings__menu-btn.open svg {
36 | color: var(--color-a);
37 | }
38 |
39 | #search-keys {
40 | position: absolute;
41 | top: 0;
42 | right: 0;
43 | opacity: 0.5;
44 | height: 100%;
45 | display: flex;
46 | justify-content: right;
47 | align-items: center;
48 | transition: opacity 0.15s;
49 | }
50 |
51 | #search-keys.hide {
52 | opacity: 0;
53 | }
54 |
55 | #search-keys div {
56 | margin-right: 10px;
57 | }
58 |
59 | #search-keys kbd {
60 | margin-right: 2px;
61 | padding: 2px;
62 | font-size: 0.825em;
63 | background-color: rgb(var(--rgb-background));
64 | border: 1px solid var(--color-hover);
65 | border-radius: 3px;
66 | }
67 |
68 | /* Customize emoji-picker's classes */
69 |
70 | @media (prefers-color-scheme: dark) {
71 | #nav {
72 | background-color: rgb(var(--rgb-background-secondary));
73 | }
74 |
75 | #nav:before,
76 | #preview:before {
77 | height: 1px;
78 | }
79 |
80 | .search input[type='search'] {
81 | background-color: rgb(var(--rgb-background-secondary));
82 | box-shadow: inset 0 0 0 1px rgb(var(--rgb-input)), 0 1px 3px rgba(65, 69, 73, 0.2);
83 | }
84 |
85 | .search input[type='search']:focus {
86 | box-shadow: inset 0 0 0 1px rgb(var(--rgb-accent-secondary)), 0 1px 3px rgba(65, 69, 73, 0.2);
87 | }
88 |
89 | .category button .background {
90 | background: var(--color-hover);
91 | }
92 |
93 | .menu .option:hover {
94 | background-color: var(--color-hover);
95 | }
96 |
97 | .scroll::-webkit-scrollbar-thumb,
98 | .scroll:hover::-webkit-scrollbar-thumb {
99 | background-color: rgb(var(--rgb-background-tertiary));
100 | }
101 |
102 | .scroll::-webkit-scrollbar-thumb:hover {
103 | background-color: var(--color-hover) !important;
104 | }
105 | }
106 |
107 | .category button:active .background,
108 | .category button.keyboard-active .background {
109 | background: rgb(var(--rgb-accent));
110 | }
111 |
112 | .category button.keyboard-active .background {
113 | transition: background-color 0.15s;
114 | }
115 |
116 | @keyframes scaleIn {
117 | from {
118 | transform: scale(0.85);
119 | transform-origin: top right;
120 | opacity: 0;
121 | }
122 | to {
123 | transform: scale(1);
124 | opacity: 1;
125 | }
126 | }
127 | @keyframes scaleOut {
128 | from {
129 | transform: scale(1);
130 | opacity: 1;
131 | }
132 | to {
133 | transform: scale(0.95);
134 | opacity: 0;
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/.github/workflows/macos.yml:
--------------------------------------------------------------------------------
1 | name: macOS
2 |
3 | on:
4 | workflow_call:
5 |
6 | env:
7 | REPO_NAME: ${{ github.event.repository.name }}
8 |
9 | jobs:
10 | setup:
11 | runs-on: macos-latest
12 | defaults:
13 | run:
14 | working-directory: ${{ env.REPO_NAME }}
15 | steps:
16 | - name: Checkout ${{ env.REPO_NAME }}
17 | uses: actions/checkout@v4
18 | with:
19 | path: ${{ env.REPO_NAME }}
20 | - name: Checkout V
21 | uses: actions/checkout@v4
22 | with:
23 | repository: 'vlang/v'
24 | path: vlang
25 | - name: Setup V
26 | run: cd ../vlang && make -j4 && ./v symlink && v version
27 | - name: Setup modules
28 | run: |
29 | v install
30 | ~/.vmodules/webview/build.vsh --silent
31 | - name: Cache
32 | uses: actions/cache/save@v3
33 | with:
34 | path: |
35 | vlang
36 | ~/.vmodules
37 | key: ${{ runner.os }}-${{ github.sha }}
38 |
39 | build:
40 | needs: setup
41 | runs-on: macos-latest
42 | defaults:
43 | run:
44 | working-directory: ${{ env.REPO_NAME }}
45 | steps:
46 | - name: Checkout ${{ env.REPO_NAME }}
47 | uses: actions/checkout@v4
48 | with:
49 | path: ${{ env.REPO_NAME }}
50 | - name: Restore cache
51 | uses: actions/cache/restore@v3
52 | with:
53 | path: |
54 | vlang
55 | ~/.vmodules
56 | key: ${{ runner.os }}-${{ github.sha }}
57 | fail-on-cache-miss: true
58 | - name: Setup V
59 | run: ../vlang/v symlink && v version
60 | - name: Build
61 | run: v -cg .
62 |
63 | deploy:
64 | needs: build
65 | runs-on: macos-latest
66 | permissions:
67 | contents: write
68 | defaults:
69 | run:
70 | working-directory: ${{ env.REPO_NAME }}
71 | env:
72 | ARTIFACT: emoji-mart-macos-amd64
73 | steps:
74 | - name: Checkout ${{ env.REPO_NAME }}
75 | uses: actions/checkout@v4
76 | with:
77 | path: ${{ env.REPO_NAME }}
78 | - name: Restore cache
79 | uses: actions/cache/restore@v3
80 | with:
81 | path: |
82 | vlang
83 | ~/.vmodules
84 | key: ${{ runner.os }}-${{ github.sha }}
85 | fail-on-cache-miss: true
86 | - name: Setup V
87 | run: ../vlang/v symlink && v version
88 | - name: Prepare deployment build
89 | run: |
90 | curl -sSLo lvb https://github.com/ttytm/LVbag/releases/latest/download/lvb-macos-amd64
91 | sudo chmod +x ./lvb
92 | ./lvb --version
93 | git fetch --prune --unshallow
94 | - name: Build
95 | run: ./build.vsh
96 | - name: Prepare artifacts
97 | run: mv "dist/emoji-mart" ./$ARTIFACT
98 | - name: Upload binary artifact
99 | uses: actions/upload-artifact@v3
100 | with:
101 | name: ${{ env.ARTIFACT }}
102 | path: ${{ env.REPO_NAME }}/${{ env.ARTIFACT }}
103 | - name: Release
104 | if: github.ref_type == 'tag'
105 | uses: softprops/action-gh-release@v1
106 | with:
107 | files: ${{ env.REPO_NAME }}/${{ env.ARTIFACT }}
108 |
--------------------------------------------------------------------------------
/.github/workflows/windows.yml:
--------------------------------------------------------------------------------
1 | name: Windows
2 |
3 | on:
4 | workflow_call:
5 |
6 | env:
7 | REPO_NAME: ${{ github.event.repository.name }}
8 |
9 | jobs:
10 | setup:
11 | runs-on: windows-latest
12 | defaults:
13 | run:
14 | working-directory: ${{ env.REPO_NAME }}
15 | steps:
16 | - name: Checkout ${{ env.REPO_NAME }}
17 | uses: actions/checkout@v4
18 | with:
19 | path: ${{ env.REPO_NAME }}
20 | - name: Checkout V
21 | uses: actions/checkout@v4
22 | with:
23 | repository: 'vlang/v'
24 | path: vlang
25 | - name: Setup V
26 | run: cd ../vlang && ./make.bat && ./v symlink
27 | - name: Setup modules
28 | run: |
29 | $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
30 | v install
31 | v $HOME/.vmodules/webview/build.vsh --silent
32 | - name: Cache
33 | uses: actions/cache/save@v3
34 | with:
35 | path: |
36 | vlang
37 | ~/.vmodules
38 | key: ${{ runner.os }}-${{ github.sha }}
39 |
40 | build:
41 | needs: setup
42 | runs-on: windows-latest
43 | defaults:
44 | run:
45 | working-directory: ${{ env.REPO_NAME }}
46 | steps:
47 | - name: Checkout ${{ env.REPO_NAME }}
48 | uses: actions/checkout@v4
49 | with:
50 | path: ${{ env.REPO_NAME }}
51 | - name: Restore Cache
52 | uses: actions/cache/restore@v3
53 | with:
54 | path: |
55 | vlang
56 | ~/.vmodules
57 | key: ${{ runner.os }}-${{ github.sha }}
58 | fail-on-cache-miss: true
59 | - name: Build
60 | run: ../vlang/v -cg -cc gcc .
61 |
62 | deploy:
63 | needs: build
64 | runs-on: windows-latest
65 | permissions:
66 | contents: write
67 | env:
68 | ARTIFACT: emoji-mart-windows-amd64.exe
69 | defaults:
70 | run:
71 | shell: bash # run in bash so that deployment works
72 | steps:
73 | - name: Restore Cache
74 | uses: actions/cache/restore@v3
75 | with:
76 | path: |
77 | vlang
78 | ~/.vmodules
79 | key: ${{ runner.os }}-${{ github.sha }}
80 | fail-on-cache-miss: true
81 | # Use vlang/setup action, as restoring V from cache and using it with a different shell was causing problems.
82 | - name: Install V
83 | uses: vlang/setup-v@v1.3
84 | with:
85 | check-latest: true
86 | - name: Checkout ${{ env.REPO_NAME }}
87 | uses: actions/checkout@v4
88 | - name: Prepare deployment build
89 | run: |
90 | curl -sSLo lvb.exe https://github.com/ttytm/LVbag/releases/latest/download/lvb-windows-amd64.exe
91 | ./lvb --version
92 | git fetch --prune --unshallow
93 | - name: Build
94 | run: ./build.vsh
95 | - name: Prepare artifacts
96 | run: |
97 | find dist/
98 | mv "dist/emoji-mart.exe" ./$ARTIFACT
99 | - name: Upload binary artifact
100 | uses: actions/upload-artifact@v3
101 | with:
102 | name: ${{ env.ARTIFACT }}
103 | path: ${{ env.ARTIFACT }}
104 | - name: Release
105 | if: github.ref_type == 'tag'
106 | uses: softprops/action-gh-release@v1
107 | with:
108 | files: ${{ env.ARTIFACT }}
109 |
--------------------------------------------------------------------------------
/.github/workflows/linux.yml:
--------------------------------------------------------------------------------
1 | name: Linux
2 |
3 | on:
4 | workflow_call:
5 |
6 | env:
7 | REPO_NAME: ${{ github.event.repository.name }}
8 |
9 | jobs:
10 | setup:
11 | runs-on: ubuntu-latest
12 | defaults:
13 | run:
14 | working-directory: ${{ env.REPO_NAME }}
15 | steps:
16 | - name: Checkout ${{ env.REPO_NAME }}
17 | uses: actions/checkout@v4
18 | with:
19 | path: ${{ env.REPO_NAME }}
20 | - name: Setup Dependencies
21 | uses: awalsh128/cache-apt-pkgs-action@latest
22 | with:
23 | packages: libgtk-3-dev libwebkit2gtk-4.0-dev
24 | version: 1.0
25 | - name: Checkout V
26 | uses: actions/checkout@v4
27 | with:
28 | repository: 'vlang/v'
29 | path: vlang
30 | - name: Setup V
31 | run: cd ../vlang && make -j4 && ./v symlink && v version
32 | - name: Setup modules
33 | run: |
34 | v install
35 | ~/.vmodules/webview/build.vsh --silent
36 | - name: Cache
37 | uses: actions/cache/save@v3
38 | with:
39 | path: |
40 | vlang
41 | ~/.vmodules
42 | key: ${{ runner.os }}-${{ github.sha }}
43 |
44 | lint:
45 | needs: setup
46 | uses: ./.github/workflows/lint.yml
47 |
48 | build:
49 | needs: setup
50 | runs-on: ubuntu-latest
51 | strategy:
52 | matrix:
53 | cc: [tcc, gcc, clang]
54 | flag: ['', '-W -cstrict']
55 | exclude:
56 | - cc: clang
57 | flag: '-W -cstrict'
58 | - cc: tcc
59 | flag: '-W -cstrict'
60 | fail-fast: false
61 | env:
62 | VFLAGS: -cg -cc ${{ matrix.cc }} ${{ matrix.flag }}
63 | defaults:
64 | run:
65 | working-directory: ${{ env.REPO_NAME }}
66 | steps:
67 | - name: Checkout ${{ env.REPO_NAME }}
68 | uses: actions/checkout@v4
69 | with:
70 | path: ${{ env.REPO_NAME }}
71 | - name: Restore cache
72 | uses: actions/cache/restore@v3
73 | with:
74 | path: |
75 | vlang
76 | ~/.vmodules
77 | key: ${{ runner.os }}-${{ github.sha }}
78 | fail-on-cache-miss: true
79 | - name: Setup V
80 | run: ../vlang/v symlink && v version
81 | - name: Setup dependencies
82 | if: runner.os == 'Linux'
83 | uses: awalsh128/cache-apt-pkgs-action@latest
84 | with:
85 | packages: libgtk-3-dev libwebkit2gtk-4.0-dev
86 | version: 1.0
87 | - name: Build
88 | run: v .
89 |
90 | deploy:
91 | needs: build
92 | runs-on: ubuntu-latest
93 | defaults:
94 | run:
95 | working-directory: ${{ env.REPO_NAME }}
96 | permissions:
97 | contents: write
98 | env:
99 | ARTIFACT: emoji-mart-linux-amd64
100 | APPIMAGE_ARTIFACT: emoji-mart-ubuntu-amd64.AppImage
101 | steps:
102 | - name: Checkout ${{ env.REPO_NAME }}
103 | uses: actions/checkout@v4
104 | with:
105 | path: ${{ env.REPO_NAME }}
106 | - name: Restore cache
107 | uses: actions/cache/restore@v3
108 | with:
109 | path: |
110 | vlang
111 | ~/.vmodules
112 | key: ${{ runner.os }}-${{ github.sha }}
113 | fail-on-cache-miss: true
114 | - name: Setup V
115 | run: ../vlang/v symlink && v version
116 | - name: Setup dependencies
117 | uses: awalsh128/cache-apt-pkgs-action@latest
118 | with:
119 | packages: libgtk-3-dev libwebkit2gtk-4.0-dev libfuse2
120 | version: 1.0
121 | - name: Prepare deployment build
122 | run: |
123 | curl -sSLo /usr/local/bin/appimage-builder https://github.com/AppImageCrafters/appimage-builder/releases/latest/download/appimage-builder-1.1.0-x86_64.AppImage
124 | curl -sSLo ./lvb https://github.com/ttytm/LVbag/releases/latest/download/lvb-linux-amd64
125 | sudo chmod +x /usr/local/bin/appimage-builder
126 | sudo chmod +x ./lvb
127 | ./lvb --version
128 | appimage-builder --version
129 | git fetch --prune --unshallow
130 | - name: Build
131 | run: |
132 | ./build.vsh
133 | ./build.vsh --appimage --skip-ui --skip-bin
134 | - name: Prepare artifacts
135 | run: |
136 | mv "dist/emoji-mart" ./$ARTIFACT
137 | mv "dist/appimage/Emoji Mart-latest-x86_64.AppImage" ./$APPIMAGE_ARTIFACT
138 | - name: Upload binary artifact
139 | uses: actions/upload-artifact@v3
140 | with:
141 | name: ${{ env.ARTIFACT }}
142 | path: ${{ env.REPO_NAME }}/${{ env.ARTIFACT }}
143 | - name: Upload appimage artifact
144 | uses: actions/upload-artifact@v3
145 | with:
146 | name: ${{ env.APPIMAGE_ARTIFACT }}
147 | path: ${{ env.REPO_NAME }}/${{ env.APPIMAGE_ARTIFACT }}
148 | - name: Release
149 | if: github.ref_type == 'tag'
150 | uses: softprops/action-gh-release@v1
151 | with:
152 | files: |
153 | ${{ env.REPO_NAME }}/assets/emoji-mart.desktop
154 | ${{ env.REPO_NAME }}/${{ env.ARTIFACT }}
155 | ${{ env.REPO_NAME }}/${{ env.APPIMAGE_ARTIFACT }}
156 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Emoji Mart Desktop App
2 |
3 | An emoji picker desktop application - it serves as an example of using [webview](https://github.com/ttytm/webview) with a modern web framework.
4 | Nonetheless, it is a real and capable application, and nothing should stop you from simply using it.
5 |
6 | ## Contents
7 |
8 | - [Application / Usage](#application--usage)
9 | - [Installation](#installation)
10 | - [Config](#config)
11 | - [Webview Example / Building and Development](#webview-example--building-and-development)
12 | - [Preparation](#preparation)
13 | - [Building](#building)
14 | - [Building and Running in a Development Context](#building-and-running-in-a-development-context)
15 | - [Credits](#credits)
16 |
17 | ## Application / Usage
18 |
19 |
20 |
21 | | Linux |
22 | Windows |
23 | macOS |
24 |
25 |
26 |
27 |
28 | |
29 |
30 |
31 | |
32 |
33 |
34 | |
35 |
36 |
37 |
38 |
39 | |
40 |
41 |
42 | |
43 |
44 |
45 | |
46 |
47 |
48 | ### Installation
49 |
50 | - The projects [GitHub releases page](https://github.com/ttytm/emoji-mart-desktop/releases) provides prebuilt binaries for GNU/Linux, Windows and macOS.
51 |
52 | ### Config
53 |
54 | Config values that are set via the in-app menu are saved for the next run.
55 |
56 | ```toml
57 | # Lin: ~/.config/emoji-mart/
58 | # Mac: ~/Library/Application Support/emoji-mart/
59 | # Win: %USERPROFILE%/AppData/Roaming/emoji-mart/
60 |
61 | # Default values
62 | audio = true # enable audio hint on emoji-selection
63 | frequent = true # display frequently used emojis
64 | ```
65 |
66 | ## Webview Example / Building and Development
67 |
68 | ### Preparation
69 |
70 | - V - [Installing V from source](https://github.com/vlang/v#installing-v-from-source)
71 |
72 | - npm - [npm/cli](https://github.com/npm/cli)
73 |
74 | - emoji-mart-desktop
75 |
76 | ```sh
77 | # Clone the repisitory
78 | git clone https://github.com/ttytm/emoji-mart-desktop.git
79 | cd emoji-mart-desktop
80 | # Install dependencies
81 | v install --once
82 |
83 | # If you haven't used it before, prepare the webview library.
84 | # Linux/macOS
85 | ~/.vmodules/webview/build.vsh
86 | # Windows PowerShell
87 | v $HOME/.vmodules/webview/build.vsh
88 | ```
89 |
90 | ### Building
91 |
92 | If you just want to build the application for usage you can now run `./build.vsh`.
93 |
94 | - The `dist/` directory will contain the build output.
95 |
96 | ### Building and Running in a Development Context
97 |
98 | Since we use web technologies for the UI, a good part of the frontend-work can likely be done via the browser, just like working on a regular web application.
99 | However, there comes a point where we want to connect our V program and the UI.
100 |
101 | #### Example 1 - run a vite dev server and connect to it
102 |
103 | When connecting to a vite dev server features like hot reloading are preserved.
104 | Just like in the browser most changes on the UI will be immediately reflected in the application window.
105 |
106 | - Run the app with the `dev` flag - this runs a vite dev server and connects to its localhost instance
107 |
108 | ```sh
109 | # Install the node modules beforehand if it's the first run.
110 | npm i --prefix ui/
111 | ```
112 |
113 | ```sh
114 | v -d dev run .
115 | ```
116 |
117 | ```sh
118 | # On Windows, it is recommended to use `gcc` for compilation.
119 | v -cc gcc -d dev run .
120 | ```
121 |
122 | #### Example 2 - serve the prebuilt site
123 |
124 | This is the regular build approach and how our final app is working.
125 |
126 | - Build the UI - this uses SvelteKit as a static site generator
127 |
128 | ```sh
129 | # Install the node modules beforehand if it's the first run.
130 | npm i --prefix ui/
131 | ```
132 |
133 | ```sh
134 | npm run build --prefix ui/
135 | ```
136 |
137 | - Run the app - this uses vweb to serve the previously build files locally and connect to it via webview
138 |
139 | ```sh
140 | v run .
141 | ```
142 |
143 | ```sh
144 | # Windows
145 | v -cc gcc run .
146 | ```
147 |
148 |
149 |
150 | I hope this quick start guide and the examples in the repositories source code help on the way to release your own UI project.
151 |
152 | ## Related Projects
153 |
154 | - [webview](https://github.com/ttytm/webview) - V module that allows to create a system level application, while using modern web technologies for the UI.
155 | - [LVbag](https://github.com/ttytm/LVbag) - CLI tool to generate embedded file lists.
156 |
157 | ## Credits
158 |
159 | - The app uses on the great work of [missive/emoji-mart](https://github.com/missive/emoji-mart)
160 | - The icon used for the AppImage comes from [microsoft/fluentui-emoji](https://github.com/microsoft/fluentui-emoji)
161 |
--------------------------------------------------------------------------------
/ui/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui-",
3 | "version": "0.0.1",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "ui-",
9 | "version": "0.0.1",
10 | "dependencies": {
11 | "@emoji-mart/data": "^1.1.2",
12 | "emoji-mart": "^5.5.2"
13 | },
14 | "devDependencies": {
15 | "@iconify/svelte": "^3.1.4",
16 | "@sveltejs/adapter-auto": "^2.0.0",
17 | "@sveltejs/adapter-static": "^2.0.2",
18 | "@sveltejs/kit": "^1.20.4",
19 | "prettier": "^2.8.0",
20 | "prettier-plugin-svelte": "^2.10.1",
21 | "svelte": "^4.0.5",
22 | "svelte-check": "^3.4.3",
23 | "svelte-popover": "^2.0.8",
24 | "tslib": "^2.4.1",
25 | "typescript": "^5.0.0",
26 | "vite": "^4.4.2"
27 | }
28 | },
29 | "node_modules/@ampproject/remapping": {
30 | "version": "2.2.1",
31 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
32 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
33 | "dev": true,
34 | "dependencies": {
35 | "@jridgewell/gen-mapping": "^0.3.0",
36 | "@jridgewell/trace-mapping": "^0.3.9"
37 | },
38 | "engines": {
39 | "node": ">=6.0.0"
40 | }
41 | },
42 | "node_modules/@emoji-mart/data": {
43 | "version": "1.1.2",
44 | "resolved": "https://registry.npmjs.org/@emoji-mart/data/-/data-1.1.2.tgz",
45 | "integrity": "sha512-1HP8BxD2azjqWJvxIaWAMyTySeZY0Osr83ukYjltPVkNXeJvTz7yDrPLBtnrD5uqJ3tg4CcLuuBW09wahqL/fg=="
46 | },
47 | "node_modules/@esbuild/android-arm": {
48 | "version": "0.18.18",
49 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.18.tgz",
50 | "integrity": "sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==",
51 | "cpu": [
52 | "arm"
53 | ],
54 | "dev": true,
55 | "optional": true,
56 | "os": [
57 | "android"
58 | ],
59 | "engines": {
60 | "node": ">=12"
61 | }
62 | },
63 | "node_modules/@esbuild/android-arm64": {
64 | "version": "0.18.18",
65 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.18.tgz",
66 | "integrity": "sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==",
67 | "cpu": [
68 | "arm64"
69 | ],
70 | "dev": true,
71 | "optional": true,
72 | "os": [
73 | "android"
74 | ],
75 | "engines": {
76 | "node": ">=12"
77 | }
78 | },
79 | "node_modules/@esbuild/android-x64": {
80 | "version": "0.18.18",
81 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.18.tgz",
82 | "integrity": "sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==",
83 | "cpu": [
84 | "x64"
85 | ],
86 | "dev": true,
87 | "optional": true,
88 | "os": [
89 | "android"
90 | ],
91 | "engines": {
92 | "node": ">=12"
93 | }
94 | },
95 | "node_modules/@esbuild/darwin-arm64": {
96 | "version": "0.18.18",
97 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.18.tgz",
98 | "integrity": "sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==",
99 | "cpu": [
100 | "arm64"
101 | ],
102 | "dev": true,
103 | "optional": true,
104 | "os": [
105 | "darwin"
106 | ],
107 | "engines": {
108 | "node": ">=12"
109 | }
110 | },
111 | "node_modules/@esbuild/darwin-x64": {
112 | "version": "0.18.18",
113 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.18.tgz",
114 | "integrity": "sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==",
115 | "cpu": [
116 | "x64"
117 | ],
118 | "dev": true,
119 | "optional": true,
120 | "os": [
121 | "darwin"
122 | ],
123 | "engines": {
124 | "node": ">=12"
125 | }
126 | },
127 | "node_modules/@esbuild/freebsd-arm64": {
128 | "version": "0.18.18",
129 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.18.tgz",
130 | "integrity": "sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==",
131 | "cpu": [
132 | "arm64"
133 | ],
134 | "dev": true,
135 | "optional": true,
136 | "os": [
137 | "freebsd"
138 | ],
139 | "engines": {
140 | "node": ">=12"
141 | }
142 | },
143 | "node_modules/@esbuild/freebsd-x64": {
144 | "version": "0.18.18",
145 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.18.tgz",
146 | "integrity": "sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==",
147 | "cpu": [
148 | "x64"
149 | ],
150 | "dev": true,
151 | "optional": true,
152 | "os": [
153 | "freebsd"
154 | ],
155 | "engines": {
156 | "node": ">=12"
157 | }
158 | },
159 | "node_modules/@esbuild/linux-arm": {
160 | "version": "0.18.18",
161 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.18.tgz",
162 | "integrity": "sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==",
163 | "cpu": [
164 | "arm"
165 | ],
166 | "dev": true,
167 | "optional": true,
168 | "os": [
169 | "linux"
170 | ],
171 | "engines": {
172 | "node": ">=12"
173 | }
174 | },
175 | "node_modules/@esbuild/linux-arm64": {
176 | "version": "0.18.18",
177 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.18.tgz",
178 | "integrity": "sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==",
179 | "cpu": [
180 | "arm64"
181 | ],
182 | "dev": true,
183 | "optional": true,
184 | "os": [
185 | "linux"
186 | ],
187 | "engines": {
188 | "node": ">=12"
189 | }
190 | },
191 | "node_modules/@esbuild/linux-ia32": {
192 | "version": "0.18.18",
193 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.18.tgz",
194 | "integrity": "sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==",
195 | "cpu": [
196 | "ia32"
197 | ],
198 | "dev": true,
199 | "optional": true,
200 | "os": [
201 | "linux"
202 | ],
203 | "engines": {
204 | "node": ">=12"
205 | }
206 | },
207 | "node_modules/@esbuild/linux-loong64": {
208 | "version": "0.18.18",
209 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.18.tgz",
210 | "integrity": "sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==",
211 | "cpu": [
212 | "loong64"
213 | ],
214 | "dev": true,
215 | "optional": true,
216 | "os": [
217 | "linux"
218 | ],
219 | "engines": {
220 | "node": ">=12"
221 | }
222 | },
223 | "node_modules/@esbuild/linux-mips64el": {
224 | "version": "0.18.18",
225 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.18.tgz",
226 | "integrity": "sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==",
227 | "cpu": [
228 | "mips64el"
229 | ],
230 | "dev": true,
231 | "optional": true,
232 | "os": [
233 | "linux"
234 | ],
235 | "engines": {
236 | "node": ">=12"
237 | }
238 | },
239 | "node_modules/@esbuild/linux-ppc64": {
240 | "version": "0.18.18",
241 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.18.tgz",
242 | "integrity": "sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==",
243 | "cpu": [
244 | "ppc64"
245 | ],
246 | "dev": true,
247 | "optional": true,
248 | "os": [
249 | "linux"
250 | ],
251 | "engines": {
252 | "node": ">=12"
253 | }
254 | },
255 | "node_modules/@esbuild/linux-riscv64": {
256 | "version": "0.18.18",
257 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.18.tgz",
258 | "integrity": "sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==",
259 | "cpu": [
260 | "riscv64"
261 | ],
262 | "dev": true,
263 | "optional": true,
264 | "os": [
265 | "linux"
266 | ],
267 | "engines": {
268 | "node": ">=12"
269 | }
270 | },
271 | "node_modules/@esbuild/linux-s390x": {
272 | "version": "0.18.18",
273 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.18.tgz",
274 | "integrity": "sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==",
275 | "cpu": [
276 | "s390x"
277 | ],
278 | "dev": true,
279 | "optional": true,
280 | "os": [
281 | "linux"
282 | ],
283 | "engines": {
284 | "node": ">=12"
285 | }
286 | },
287 | "node_modules/@esbuild/linux-x64": {
288 | "version": "0.18.18",
289 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.18.tgz",
290 | "integrity": "sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==",
291 | "cpu": [
292 | "x64"
293 | ],
294 | "dev": true,
295 | "optional": true,
296 | "os": [
297 | "linux"
298 | ],
299 | "engines": {
300 | "node": ">=12"
301 | }
302 | },
303 | "node_modules/@esbuild/netbsd-x64": {
304 | "version": "0.18.18",
305 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.18.tgz",
306 | "integrity": "sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==",
307 | "cpu": [
308 | "x64"
309 | ],
310 | "dev": true,
311 | "optional": true,
312 | "os": [
313 | "netbsd"
314 | ],
315 | "engines": {
316 | "node": ">=12"
317 | }
318 | },
319 | "node_modules/@esbuild/openbsd-x64": {
320 | "version": "0.18.18",
321 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.18.tgz",
322 | "integrity": "sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==",
323 | "cpu": [
324 | "x64"
325 | ],
326 | "dev": true,
327 | "optional": true,
328 | "os": [
329 | "openbsd"
330 | ],
331 | "engines": {
332 | "node": ">=12"
333 | }
334 | },
335 | "node_modules/@esbuild/sunos-x64": {
336 | "version": "0.18.18",
337 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.18.tgz",
338 | "integrity": "sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==",
339 | "cpu": [
340 | "x64"
341 | ],
342 | "dev": true,
343 | "optional": true,
344 | "os": [
345 | "sunos"
346 | ],
347 | "engines": {
348 | "node": ">=12"
349 | }
350 | },
351 | "node_modules/@esbuild/win32-arm64": {
352 | "version": "0.18.18",
353 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.18.tgz",
354 | "integrity": "sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==",
355 | "cpu": [
356 | "arm64"
357 | ],
358 | "dev": true,
359 | "optional": true,
360 | "os": [
361 | "win32"
362 | ],
363 | "engines": {
364 | "node": ">=12"
365 | }
366 | },
367 | "node_modules/@esbuild/win32-ia32": {
368 | "version": "0.18.18",
369 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.18.tgz",
370 | "integrity": "sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==",
371 | "cpu": [
372 | "ia32"
373 | ],
374 | "dev": true,
375 | "optional": true,
376 | "os": [
377 | "win32"
378 | ],
379 | "engines": {
380 | "node": ">=12"
381 | }
382 | },
383 | "node_modules/@esbuild/win32-x64": {
384 | "version": "0.18.18",
385 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.18.tgz",
386 | "integrity": "sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==",
387 | "cpu": [
388 | "x64"
389 | ],
390 | "dev": true,
391 | "optional": true,
392 | "os": [
393 | "win32"
394 | ],
395 | "engines": {
396 | "node": ">=12"
397 | }
398 | },
399 | "node_modules/@iconify/svelte": {
400 | "version": "3.1.4",
401 | "resolved": "https://registry.npmjs.org/@iconify/svelte/-/svelte-3.1.4.tgz",
402 | "integrity": "sha512-YDwQlN46ka8KPRayDb7TivmkAPizfTXi6BSRNqa1IV0+byA907n8JcgQafA7FD//pW5XCuuAhVx6uRbKTo+CfA==",
403 | "dev": true,
404 | "dependencies": {
405 | "@iconify/types": "^2.0.0"
406 | },
407 | "funding": {
408 | "url": "https://github.com/sponsors/cyberalien"
409 | },
410 | "peerDependencies": {
411 | "svelte": "*"
412 | }
413 | },
414 | "node_modules/@iconify/types": {
415 | "version": "2.0.0",
416 | "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
417 | "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
418 | "dev": true
419 | },
420 | "node_modules/@jridgewell/gen-mapping": {
421 | "version": "0.3.3",
422 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
423 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
424 | "dev": true,
425 | "dependencies": {
426 | "@jridgewell/set-array": "^1.0.1",
427 | "@jridgewell/sourcemap-codec": "^1.4.10",
428 | "@jridgewell/trace-mapping": "^0.3.9"
429 | },
430 | "engines": {
431 | "node": ">=6.0.0"
432 | }
433 | },
434 | "node_modules/@jridgewell/resolve-uri": {
435 | "version": "3.1.0",
436 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
437 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
438 | "dev": true,
439 | "engines": {
440 | "node": ">=6.0.0"
441 | }
442 | },
443 | "node_modules/@jridgewell/set-array": {
444 | "version": "1.1.2",
445 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
446 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
447 | "dev": true,
448 | "engines": {
449 | "node": ">=6.0.0"
450 | }
451 | },
452 | "node_modules/@jridgewell/sourcemap-codec": {
453 | "version": "1.4.15",
454 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
455 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
456 | "dev": true
457 | },
458 | "node_modules/@jridgewell/trace-mapping": {
459 | "version": "0.3.18",
460 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
461 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
462 | "dev": true,
463 | "dependencies": {
464 | "@jridgewell/resolve-uri": "3.1.0",
465 | "@jridgewell/sourcemap-codec": "1.4.14"
466 | }
467 | },
468 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
469 | "version": "1.4.14",
470 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
471 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
472 | "dev": true
473 | },
474 | "node_modules/@nodelib/fs.scandir": {
475 | "version": "2.1.5",
476 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
477 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
478 | "dev": true,
479 | "dependencies": {
480 | "@nodelib/fs.stat": "2.0.5",
481 | "run-parallel": "^1.1.9"
482 | },
483 | "engines": {
484 | "node": ">= 8"
485 | }
486 | },
487 | "node_modules/@nodelib/fs.stat": {
488 | "version": "2.0.5",
489 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
490 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
491 | "dev": true,
492 | "engines": {
493 | "node": ">= 8"
494 | }
495 | },
496 | "node_modules/@nodelib/fs.walk": {
497 | "version": "1.2.8",
498 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
499 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
500 | "dev": true,
501 | "dependencies": {
502 | "@nodelib/fs.scandir": "2.1.5",
503 | "fastq": "^1.6.0"
504 | },
505 | "engines": {
506 | "node": ">= 8"
507 | }
508 | },
509 | "node_modules/@polka/url": {
510 | "version": "1.0.0-next.21",
511 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
512 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
513 | "dev": true
514 | },
515 | "node_modules/@sveltejs/adapter-auto": {
516 | "version": "2.1.0",
517 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz",
518 | "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==",
519 | "dev": true,
520 | "dependencies": {
521 | "import-meta-resolve": "^3.0.0"
522 | },
523 | "peerDependencies": {
524 | "@sveltejs/kit": "^1.0.0"
525 | }
526 | },
527 | "node_modules/@sveltejs/adapter-static": {
528 | "version": "2.0.3",
529 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz",
530 | "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==",
531 | "dev": true,
532 | "peerDependencies": {
533 | "@sveltejs/kit": "^1.5.0"
534 | }
535 | },
536 | "node_modules/@sveltejs/kit": {
537 | "version": "1.22.4",
538 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.22.4.tgz",
539 | "integrity": "sha512-Opkqw1QXk4Cc25b/heJP2D7mX+OUBFAq4MXKfET58svTTxdeiHFKzmnuRsSF3nmxESqrLjqPAgHpib+knNGzRw==",
540 | "dev": true,
541 | "hasInstallScript": true,
542 | "dependencies": {
543 | "@sveltejs/vite-plugin-svelte": "^2.4.1",
544 | "@types/cookie": "^0.5.1",
545 | "cookie": "^0.5.0",
546 | "devalue": "^4.3.1",
547 | "esm-env": "^1.0.0",
548 | "kleur": "^4.1.5",
549 | "magic-string": "^0.30.0",
550 | "mime": "^3.0.0",
551 | "sade": "^1.8.1",
552 | "set-cookie-parser": "^2.6.0",
553 | "sirv": "^2.0.2",
554 | "undici": "~5.22.0"
555 | },
556 | "bin": {
557 | "svelte-kit": "svelte-kit.js"
558 | },
559 | "engines": {
560 | "node": "^16.14 || >=18"
561 | },
562 | "peerDependencies": {
563 | "svelte": "^3.54.0 || ^4.0.0-next.0",
564 | "vite": "^4.0.0"
565 | }
566 | },
567 | "node_modules/@sveltejs/vite-plugin-svelte": {
568 | "version": "2.4.4",
569 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.4.tgz",
570 | "integrity": "sha512-Q5z7+iIjs3sw/Jquxaa9KSY5/MShboNjvsxnQYRMdREx/SBDmEYTjeXenpMBh6k0IQ3tMKESCiwKq3/TeAQ8Og==",
571 | "dev": true,
572 | "dependencies": {
573 | "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3",
574 | "debug": "^4.3.4",
575 | "deepmerge": "^4.3.1",
576 | "kleur": "^4.1.5",
577 | "magic-string": "^0.30.2",
578 | "svelte-hmr": "^0.15.3",
579 | "vitefu": "^0.2.4"
580 | },
581 | "engines": {
582 | "node": "^14.18.0 || >= 16"
583 | },
584 | "peerDependencies": {
585 | "svelte": "^3.54.0 || ^4.0.0",
586 | "vite": "^4.0.0"
587 | }
588 | },
589 | "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
590 | "version": "1.0.3",
591 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz",
592 | "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==",
593 | "dev": true,
594 | "dependencies": {
595 | "debug": "^4.3.4"
596 | },
597 | "engines": {
598 | "node": "^14.18.0 || >= 16"
599 | },
600 | "peerDependencies": {
601 | "@sveltejs/vite-plugin-svelte": "^2.2.0",
602 | "svelte": "^3.54.0 || ^4.0.0",
603 | "vite": "^4.0.0"
604 | }
605 | },
606 | "node_modules/@types/cookie": {
607 | "version": "0.5.1",
608 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
609 | "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==",
610 | "dev": true
611 | },
612 | "node_modules/@types/estree": {
613 | "version": "1.0.1",
614 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
615 | "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
616 | "dev": true
617 | },
618 | "node_modules/@types/pug": {
619 | "version": "2.0.6",
620 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
621 | "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==",
622 | "dev": true
623 | },
624 | "node_modules/acorn": {
625 | "version": "8.10.0",
626 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
627 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
628 | "dev": true,
629 | "bin": {
630 | "acorn": "bin/acorn"
631 | },
632 | "engines": {
633 | "node": ">=0.4.0"
634 | }
635 | },
636 | "node_modules/anymatch": {
637 | "version": "3.1.3",
638 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
639 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
640 | "dev": true,
641 | "dependencies": {
642 | "normalize-path": "^3.0.0",
643 | "picomatch": "^2.0.4"
644 | },
645 | "engines": {
646 | "node": ">= 8"
647 | }
648 | },
649 | "node_modules/aria-query": {
650 | "version": "5.3.0",
651 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
652 | "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
653 | "dev": true,
654 | "dependencies": {
655 | "dequal": "^2.0.3"
656 | }
657 | },
658 | "node_modules/axobject-query": {
659 | "version": "3.2.1",
660 | "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
661 | "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
662 | "dev": true,
663 | "dependencies": {
664 | "dequal": "^2.0.3"
665 | }
666 | },
667 | "node_modules/balanced-match": {
668 | "version": "1.0.2",
669 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
670 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
671 | "dev": true
672 | },
673 | "node_modules/binary-extensions": {
674 | "version": "2.2.0",
675 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
676 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
677 | "dev": true,
678 | "engines": {
679 | "node": ">=8"
680 | }
681 | },
682 | "node_modules/brace-expansion": {
683 | "version": "1.1.11",
684 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
685 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
686 | "dev": true,
687 | "dependencies": {
688 | "balanced-match": "^1.0.0",
689 | "concat-map": "0.0.1"
690 | }
691 | },
692 | "node_modules/braces": {
693 | "version": "3.0.2",
694 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
695 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
696 | "dev": true,
697 | "dependencies": {
698 | "fill-range": "^7.0.1"
699 | },
700 | "engines": {
701 | "node": ">=8"
702 | }
703 | },
704 | "node_modules/buffer-crc32": {
705 | "version": "0.2.13",
706 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
707 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
708 | "dev": true,
709 | "engines": {
710 | "node": "*"
711 | }
712 | },
713 | "node_modules/busboy": {
714 | "version": "1.6.0",
715 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
716 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
717 | "dev": true,
718 | "dependencies": {
719 | "streamsearch": "^1.1.0"
720 | },
721 | "engines": {
722 | "node": ">=10.16.0"
723 | }
724 | },
725 | "node_modules/callsites": {
726 | "version": "3.1.0",
727 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
728 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
729 | "dev": true,
730 | "engines": {
731 | "node": ">=6"
732 | }
733 | },
734 | "node_modules/chokidar": {
735 | "version": "3.5.3",
736 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
737 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
738 | "dev": true,
739 | "funding": [
740 | {
741 | "type": "individual",
742 | "url": "https://paulmillr.com/funding/"
743 | }
744 | ],
745 | "dependencies": {
746 | "anymatch": "~3.1.2",
747 | "braces": "~3.0.2",
748 | "glob-parent": "~5.1.2",
749 | "is-binary-path": "~2.1.0",
750 | "is-glob": "~4.0.1",
751 | "normalize-path": "~3.0.0",
752 | "readdirp": "~3.6.0"
753 | },
754 | "engines": {
755 | "node": ">= 8.10.0"
756 | },
757 | "optionalDependencies": {
758 | "fsevents": "~2.3.2"
759 | }
760 | },
761 | "node_modules/code-red": {
762 | "version": "1.0.3",
763 | "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.3.tgz",
764 | "integrity": "sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ==",
765 | "dev": true,
766 | "dependencies": {
767 | "@jridgewell/sourcemap-codec": "^1.4.14",
768 | "@types/estree": "^1.0.0",
769 | "acorn": "^8.8.2",
770 | "estree-walker": "^3.0.3",
771 | "periscopic": "^3.1.0"
772 | }
773 | },
774 | "node_modules/concat-map": {
775 | "version": "0.0.1",
776 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
777 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
778 | "dev": true
779 | },
780 | "node_modules/cookie": {
781 | "version": "0.5.0",
782 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
783 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
784 | "dev": true,
785 | "engines": {
786 | "node": ">= 0.6"
787 | }
788 | },
789 | "node_modules/css-tree": {
790 | "version": "2.3.1",
791 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
792 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
793 | "dev": true,
794 | "dependencies": {
795 | "mdn-data": "2.0.30",
796 | "source-map-js": "^1.0.1"
797 | },
798 | "engines": {
799 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
800 | }
801 | },
802 | "node_modules/debug": {
803 | "version": "4.3.4",
804 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
805 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
806 | "dev": true,
807 | "dependencies": {
808 | "ms": "2.1.2"
809 | },
810 | "engines": {
811 | "node": ">=6.0"
812 | },
813 | "peerDependenciesMeta": {
814 | "supports-color": {
815 | "optional": true
816 | }
817 | }
818 | },
819 | "node_modules/deepmerge": {
820 | "version": "4.3.1",
821 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
822 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
823 | "dev": true,
824 | "engines": {
825 | "node": ">=0.10.0"
826 | }
827 | },
828 | "node_modules/dequal": {
829 | "version": "2.0.3",
830 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
831 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
832 | "dev": true,
833 | "engines": {
834 | "node": ">=6"
835 | }
836 | },
837 | "node_modules/detect-indent": {
838 | "version": "6.1.0",
839 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
840 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
841 | "dev": true,
842 | "engines": {
843 | "node": ">=8"
844 | }
845 | },
846 | "node_modules/devalue": {
847 | "version": "4.3.2",
848 | "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz",
849 | "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==",
850 | "dev": true
851 | },
852 | "node_modules/emoji-mart": {
853 | "version": "5.5.2",
854 | "resolved": "https://registry.npmjs.org/emoji-mart/-/emoji-mart-5.5.2.tgz",
855 | "integrity": "sha512-Sqc/nso4cjxhOwWJsp9xkVm8OF5c+mJLZJFoFfzRuKO+yWiN7K8c96xmtughYb0d/fZ8UC6cLIQ/p4BR6Pv3/A=="
856 | },
857 | "node_modules/es6-promise": {
858 | "version": "3.3.1",
859 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
860 | "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
861 | "dev": true
862 | },
863 | "node_modules/esbuild": {
864 | "version": "0.18.18",
865 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz",
866 | "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==",
867 | "dev": true,
868 | "hasInstallScript": true,
869 | "bin": {
870 | "esbuild": "bin/esbuild"
871 | },
872 | "engines": {
873 | "node": ">=12"
874 | },
875 | "optionalDependencies": {
876 | "@esbuild/android-arm": "0.18.18",
877 | "@esbuild/android-arm64": "0.18.18",
878 | "@esbuild/android-x64": "0.18.18",
879 | "@esbuild/darwin-arm64": "0.18.18",
880 | "@esbuild/darwin-x64": "0.18.18",
881 | "@esbuild/freebsd-arm64": "0.18.18",
882 | "@esbuild/freebsd-x64": "0.18.18",
883 | "@esbuild/linux-arm": "0.18.18",
884 | "@esbuild/linux-arm64": "0.18.18",
885 | "@esbuild/linux-ia32": "0.18.18",
886 | "@esbuild/linux-loong64": "0.18.18",
887 | "@esbuild/linux-mips64el": "0.18.18",
888 | "@esbuild/linux-ppc64": "0.18.18",
889 | "@esbuild/linux-riscv64": "0.18.18",
890 | "@esbuild/linux-s390x": "0.18.18",
891 | "@esbuild/linux-x64": "0.18.18",
892 | "@esbuild/netbsd-x64": "0.18.18",
893 | "@esbuild/openbsd-x64": "0.18.18",
894 | "@esbuild/sunos-x64": "0.18.18",
895 | "@esbuild/win32-arm64": "0.18.18",
896 | "@esbuild/win32-ia32": "0.18.18",
897 | "@esbuild/win32-x64": "0.18.18"
898 | }
899 | },
900 | "node_modules/esm-env": {
901 | "version": "1.0.0",
902 | "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz",
903 | "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==",
904 | "dev": true
905 | },
906 | "node_modules/estree-walker": {
907 | "version": "3.0.3",
908 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
909 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
910 | "dev": true,
911 | "dependencies": {
912 | "@types/estree": "^1.0.0"
913 | }
914 | },
915 | "node_modules/fast-glob": {
916 | "version": "3.3.1",
917 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
918 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
919 | "dev": true,
920 | "dependencies": {
921 | "@nodelib/fs.stat": "^2.0.2",
922 | "@nodelib/fs.walk": "^1.2.3",
923 | "glob-parent": "^5.1.2",
924 | "merge2": "^1.3.0",
925 | "micromatch": "^4.0.4"
926 | },
927 | "engines": {
928 | "node": ">=8.6.0"
929 | }
930 | },
931 | "node_modules/fastq": {
932 | "version": "1.15.0",
933 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
934 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
935 | "dev": true,
936 | "dependencies": {
937 | "reusify": "^1.0.4"
938 | }
939 | },
940 | "node_modules/fill-range": {
941 | "version": "7.0.1",
942 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
943 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
944 | "dev": true,
945 | "dependencies": {
946 | "to-regex-range": "^5.0.1"
947 | },
948 | "engines": {
949 | "node": ">=8"
950 | }
951 | },
952 | "node_modules/fs.realpath": {
953 | "version": "1.0.0",
954 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
955 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
956 | "dev": true
957 | },
958 | "node_modules/fsevents": {
959 | "version": "2.3.2",
960 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
961 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
962 | "dev": true,
963 | "hasInstallScript": true,
964 | "optional": true,
965 | "os": [
966 | "darwin"
967 | ],
968 | "engines": {
969 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
970 | }
971 | },
972 | "node_modules/glob": {
973 | "version": "7.2.3",
974 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
975 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
976 | "dev": true,
977 | "dependencies": {
978 | "fs.realpath": "^1.0.0",
979 | "inflight": "^1.0.4",
980 | "inherits": "2",
981 | "minimatch": "^3.1.1",
982 | "once": "^1.3.0",
983 | "path-is-absolute": "^1.0.0"
984 | },
985 | "engines": {
986 | "node": "*"
987 | },
988 | "funding": {
989 | "url": "https://github.com/sponsors/isaacs"
990 | }
991 | },
992 | "node_modules/glob-parent": {
993 | "version": "5.1.2",
994 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
995 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
996 | "dev": true,
997 | "dependencies": {
998 | "is-glob": "^4.0.1"
999 | },
1000 | "engines": {
1001 | "node": ">= 6"
1002 | }
1003 | },
1004 | "node_modules/graceful-fs": {
1005 | "version": "4.2.11",
1006 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1007 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1008 | "dev": true
1009 | },
1010 | "node_modules/import-fresh": {
1011 | "version": "3.3.0",
1012 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1013 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1014 | "dev": true,
1015 | "dependencies": {
1016 | "parent-module": "^1.0.0",
1017 | "resolve-from": "^4.0.0"
1018 | },
1019 | "engines": {
1020 | "node": ">=6"
1021 | },
1022 | "funding": {
1023 | "url": "https://github.com/sponsors/sindresorhus"
1024 | }
1025 | },
1026 | "node_modules/import-meta-resolve": {
1027 | "version": "3.0.0",
1028 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz",
1029 | "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==",
1030 | "dev": true,
1031 | "funding": {
1032 | "type": "github",
1033 | "url": "https://github.com/sponsors/wooorm"
1034 | }
1035 | },
1036 | "node_modules/inflight": {
1037 | "version": "1.0.6",
1038 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1039 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1040 | "dev": true,
1041 | "dependencies": {
1042 | "once": "^1.3.0",
1043 | "wrappy": "1"
1044 | }
1045 | },
1046 | "node_modules/inherits": {
1047 | "version": "2.0.4",
1048 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1049 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1050 | "dev": true
1051 | },
1052 | "node_modules/is-binary-path": {
1053 | "version": "2.1.0",
1054 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1055 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1056 | "dev": true,
1057 | "dependencies": {
1058 | "binary-extensions": "^2.0.0"
1059 | },
1060 | "engines": {
1061 | "node": ">=8"
1062 | }
1063 | },
1064 | "node_modules/is-extglob": {
1065 | "version": "2.1.1",
1066 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1067 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1068 | "dev": true,
1069 | "engines": {
1070 | "node": ">=0.10.0"
1071 | }
1072 | },
1073 | "node_modules/is-glob": {
1074 | "version": "4.0.3",
1075 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1076 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1077 | "dev": true,
1078 | "dependencies": {
1079 | "is-extglob": "^2.1.1"
1080 | },
1081 | "engines": {
1082 | "node": ">=0.10.0"
1083 | }
1084 | },
1085 | "node_modules/is-number": {
1086 | "version": "7.0.0",
1087 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1088 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1089 | "dev": true,
1090 | "engines": {
1091 | "node": ">=0.12.0"
1092 | }
1093 | },
1094 | "node_modules/is-reference": {
1095 | "version": "3.0.1",
1096 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz",
1097 | "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==",
1098 | "dev": true,
1099 | "dependencies": {
1100 | "@types/estree": "*"
1101 | }
1102 | },
1103 | "node_modules/kleur": {
1104 | "version": "4.1.5",
1105 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
1106 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
1107 | "dev": true,
1108 | "engines": {
1109 | "node": ">=6"
1110 | }
1111 | },
1112 | "node_modules/locate-character": {
1113 | "version": "3.0.0",
1114 | "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
1115 | "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
1116 | "dev": true
1117 | },
1118 | "node_modules/magic-string": {
1119 | "version": "0.30.2",
1120 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz",
1121 | "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==",
1122 | "dev": true,
1123 | "dependencies": {
1124 | "@jridgewell/sourcemap-codec": "^1.4.15"
1125 | },
1126 | "engines": {
1127 | "node": ">=12"
1128 | }
1129 | },
1130 | "node_modules/mdn-data": {
1131 | "version": "2.0.30",
1132 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
1133 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
1134 | "dev": true
1135 | },
1136 | "node_modules/merge2": {
1137 | "version": "1.4.1",
1138 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1139 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1140 | "dev": true,
1141 | "engines": {
1142 | "node": ">= 8"
1143 | }
1144 | },
1145 | "node_modules/micromatch": {
1146 | "version": "4.0.5",
1147 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1148 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1149 | "dev": true,
1150 | "dependencies": {
1151 | "braces": "^3.0.2",
1152 | "picomatch": "^2.3.1"
1153 | },
1154 | "engines": {
1155 | "node": ">=8.6"
1156 | }
1157 | },
1158 | "node_modules/mime": {
1159 | "version": "3.0.0",
1160 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
1161 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
1162 | "dev": true,
1163 | "bin": {
1164 | "mime": "cli.js"
1165 | },
1166 | "engines": {
1167 | "node": ">=10.0.0"
1168 | }
1169 | },
1170 | "node_modules/min-indent": {
1171 | "version": "1.0.1",
1172 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
1173 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
1174 | "dev": true,
1175 | "engines": {
1176 | "node": ">=4"
1177 | }
1178 | },
1179 | "node_modules/minimatch": {
1180 | "version": "3.1.2",
1181 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1182 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1183 | "dev": true,
1184 | "dependencies": {
1185 | "brace-expansion": "^1.1.7"
1186 | },
1187 | "engines": {
1188 | "node": "*"
1189 | }
1190 | },
1191 | "node_modules/minimist": {
1192 | "version": "1.2.8",
1193 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1194 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1195 | "dev": true,
1196 | "funding": {
1197 | "url": "https://github.com/sponsors/ljharb"
1198 | }
1199 | },
1200 | "node_modules/mkdirp": {
1201 | "version": "0.5.6",
1202 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
1203 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
1204 | "dev": true,
1205 | "dependencies": {
1206 | "minimist": "^1.2.6"
1207 | },
1208 | "bin": {
1209 | "mkdirp": "bin/cmd.js"
1210 | }
1211 | },
1212 | "node_modules/mri": {
1213 | "version": "1.2.0",
1214 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
1215 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
1216 | "dev": true,
1217 | "engines": {
1218 | "node": ">=4"
1219 | }
1220 | },
1221 | "node_modules/mrmime": {
1222 | "version": "1.0.1",
1223 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
1224 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==",
1225 | "dev": true,
1226 | "engines": {
1227 | "node": ">=10"
1228 | }
1229 | },
1230 | "node_modules/ms": {
1231 | "version": "2.1.2",
1232 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1233 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1234 | "dev": true
1235 | },
1236 | "node_modules/nanoid": {
1237 | "version": "3.3.6",
1238 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
1239 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
1240 | "dev": true,
1241 | "funding": [
1242 | {
1243 | "type": "github",
1244 | "url": "https://github.com/sponsors/ai"
1245 | }
1246 | ],
1247 | "bin": {
1248 | "nanoid": "bin/nanoid.cjs"
1249 | },
1250 | "engines": {
1251 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1252 | }
1253 | },
1254 | "node_modules/normalize-path": {
1255 | "version": "3.0.0",
1256 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1257 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1258 | "dev": true,
1259 | "engines": {
1260 | "node": ">=0.10.0"
1261 | }
1262 | },
1263 | "node_modules/once": {
1264 | "version": "1.4.0",
1265 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1266 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1267 | "dev": true,
1268 | "dependencies": {
1269 | "wrappy": "1"
1270 | }
1271 | },
1272 | "node_modules/parent-module": {
1273 | "version": "1.0.1",
1274 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1275 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1276 | "dev": true,
1277 | "dependencies": {
1278 | "callsites": "^3.0.0"
1279 | },
1280 | "engines": {
1281 | "node": ">=6"
1282 | }
1283 | },
1284 | "node_modules/path-is-absolute": {
1285 | "version": "1.0.1",
1286 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1287 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1288 | "dev": true,
1289 | "engines": {
1290 | "node": ">=0.10.0"
1291 | }
1292 | },
1293 | "node_modules/periscopic": {
1294 | "version": "3.1.0",
1295 | "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
1296 | "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
1297 | "dev": true,
1298 | "dependencies": {
1299 | "@types/estree": "^1.0.0",
1300 | "estree-walker": "^3.0.0",
1301 | "is-reference": "^3.0.0"
1302 | }
1303 | },
1304 | "node_modules/picocolors": {
1305 | "version": "1.0.0",
1306 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1307 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1308 | "dev": true
1309 | },
1310 | "node_modules/picomatch": {
1311 | "version": "2.3.1",
1312 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1313 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1314 | "dev": true,
1315 | "engines": {
1316 | "node": ">=8.6"
1317 | },
1318 | "funding": {
1319 | "url": "https://github.com/sponsors/jonschlinkert"
1320 | }
1321 | },
1322 | "node_modules/postcss": {
1323 | "version": "8.4.27",
1324 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz",
1325 | "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==",
1326 | "dev": true,
1327 | "funding": [
1328 | {
1329 | "type": "opencollective",
1330 | "url": "https://opencollective.com/postcss/"
1331 | },
1332 | {
1333 | "type": "tidelift",
1334 | "url": "https://tidelift.com/funding/github/npm/postcss"
1335 | },
1336 | {
1337 | "type": "github",
1338 | "url": "https://github.com/sponsors/ai"
1339 | }
1340 | ],
1341 | "dependencies": {
1342 | "nanoid": "^3.3.6",
1343 | "picocolors": "^1.0.0",
1344 | "source-map-js": "^1.0.2"
1345 | },
1346 | "engines": {
1347 | "node": "^10 || ^12 || >=14"
1348 | }
1349 | },
1350 | "node_modules/prettier": {
1351 | "version": "2.8.8",
1352 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
1353 | "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
1354 | "dev": true,
1355 | "bin": {
1356 | "prettier": "bin-prettier.js"
1357 | },
1358 | "engines": {
1359 | "node": ">=10.13.0"
1360 | },
1361 | "funding": {
1362 | "url": "https://github.com/prettier/prettier?sponsor=1"
1363 | }
1364 | },
1365 | "node_modules/prettier-plugin-svelte": {
1366 | "version": "2.10.1",
1367 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz",
1368 | "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==",
1369 | "dev": true,
1370 | "peerDependencies": {
1371 | "prettier": "^1.16.4 || ^2.0.0",
1372 | "svelte": "^3.2.0 || ^4.0.0-next.0"
1373 | }
1374 | },
1375 | "node_modules/queue-microtask": {
1376 | "version": "1.2.3",
1377 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1378 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1379 | "dev": true,
1380 | "funding": [
1381 | {
1382 | "type": "github",
1383 | "url": "https://github.com/sponsors/feross"
1384 | },
1385 | {
1386 | "type": "patreon",
1387 | "url": "https://www.patreon.com/feross"
1388 | },
1389 | {
1390 | "type": "consulting",
1391 | "url": "https://feross.org/support"
1392 | }
1393 | ]
1394 | },
1395 | "node_modules/readdirp": {
1396 | "version": "3.6.0",
1397 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1398 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1399 | "dev": true,
1400 | "dependencies": {
1401 | "picomatch": "^2.2.1"
1402 | },
1403 | "engines": {
1404 | "node": ">=8.10.0"
1405 | }
1406 | },
1407 | "node_modules/resolve-from": {
1408 | "version": "4.0.0",
1409 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1410 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1411 | "dev": true,
1412 | "engines": {
1413 | "node": ">=4"
1414 | }
1415 | },
1416 | "node_modules/reusify": {
1417 | "version": "1.0.4",
1418 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1419 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1420 | "dev": true,
1421 | "engines": {
1422 | "iojs": ">=1.0.0",
1423 | "node": ">=0.10.0"
1424 | }
1425 | },
1426 | "node_modules/rimraf": {
1427 | "version": "2.7.1",
1428 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1429 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1430 | "dev": true,
1431 | "dependencies": {
1432 | "glob": "^7.1.3"
1433 | },
1434 | "bin": {
1435 | "rimraf": "bin.js"
1436 | }
1437 | },
1438 | "node_modules/rollup": {
1439 | "version": "3.27.2",
1440 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.2.tgz",
1441 | "integrity": "sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==",
1442 | "dev": true,
1443 | "bin": {
1444 | "rollup": "dist/bin/rollup"
1445 | },
1446 | "engines": {
1447 | "node": ">=14.18.0",
1448 | "npm": ">=8.0.0"
1449 | },
1450 | "optionalDependencies": {
1451 | "fsevents": "~2.3.2"
1452 | }
1453 | },
1454 | "node_modules/run-parallel": {
1455 | "version": "1.2.0",
1456 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1457 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1458 | "dev": true,
1459 | "funding": [
1460 | {
1461 | "type": "github",
1462 | "url": "https://github.com/sponsors/feross"
1463 | },
1464 | {
1465 | "type": "patreon",
1466 | "url": "https://www.patreon.com/feross"
1467 | },
1468 | {
1469 | "type": "consulting",
1470 | "url": "https://feross.org/support"
1471 | }
1472 | ],
1473 | "dependencies": {
1474 | "queue-microtask": "^1.2.2"
1475 | }
1476 | },
1477 | "node_modules/sade": {
1478 | "version": "1.8.1",
1479 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
1480 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
1481 | "dev": true,
1482 | "dependencies": {
1483 | "mri": "^1.1.0"
1484 | },
1485 | "engines": {
1486 | "node": ">=6"
1487 | }
1488 | },
1489 | "node_modules/sander": {
1490 | "version": "0.5.1",
1491 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
1492 | "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
1493 | "dev": true,
1494 | "dependencies": {
1495 | "es6-promise": "^3.1.2",
1496 | "graceful-fs": "^4.1.3",
1497 | "mkdirp": "^0.5.1",
1498 | "rimraf": "^2.5.2"
1499 | }
1500 | },
1501 | "node_modules/set-cookie-parser": {
1502 | "version": "2.6.0",
1503 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
1504 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==",
1505 | "dev": true
1506 | },
1507 | "node_modules/sirv": {
1508 | "version": "2.0.3",
1509 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz",
1510 | "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==",
1511 | "dev": true,
1512 | "dependencies": {
1513 | "@polka/url": "^1.0.0-next.20",
1514 | "mrmime": "^1.0.0",
1515 | "totalist": "^3.0.0"
1516 | },
1517 | "engines": {
1518 | "node": ">= 10"
1519 | }
1520 | },
1521 | "node_modules/sorcery": {
1522 | "version": "0.11.0",
1523 | "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
1524 | "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
1525 | "dev": true,
1526 | "dependencies": {
1527 | "@jridgewell/sourcemap-codec": "^1.4.14",
1528 | "buffer-crc32": "^0.2.5",
1529 | "minimist": "^1.2.0",
1530 | "sander": "^0.5.0"
1531 | },
1532 | "bin": {
1533 | "sorcery": "bin/sorcery"
1534 | }
1535 | },
1536 | "node_modules/source-map-js": {
1537 | "version": "1.0.2",
1538 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1539 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1540 | "dev": true,
1541 | "engines": {
1542 | "node": ">=0.10.0"
1543 | }
1544 | },
1545 | "node_modules/streamsearch": {
1546 | "version": "1.1.0",
1547 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
1548 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
1549 | "dev": true,
1550 | "engines": {
1551 | "node": ">=10.0.0"
1552 | }
1553 | },
1554 | "node_modules/strip-indent": {
1555 | "version": "3.0.0",
1556 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
1557 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
1558 | "dev": true,
1559 | "dependencies": {
1560 | "min-indent": "^1.0.0"
1561 | },
1562 | "engines": {
1563 | "node": ">=8"
1564 | }
1565 | },
1566 | "node_modules/svelte": {
1567 | "version": "4.1.2",
1568 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.1.2.tgz",
1569 | "integrity": "sha512-/evA8U6CgOHe5ZD1C1W3va9iJG7mWflcCdghBORJaAhD2JzrVERJty/2gl0pIPrJYBGZwZycH6onYf+64XXF9g==",
1570 | "dev": true,
1571 | "dependencies": {
1572 | "@ampproject/remapping": "^2.2.1",
1573 | "@jridgewell/sourcemap-codec": "^1.4.15",
1574 | "@jridgewell/trace-mapping": "^0.3.18",
1575 | "acorn": "^8.9.0",
1576 | "aria-query": "^5.3.0",
1577 | "axobject-query": "^3.2.1",
1578 | "code-red": "^1.0.3",
1579 | "css-tree": "^2.3.1",
1580 | "estree-walker": "^3.0.3",
1581 | "is-reference": "^3.0.1",
1582 | "locate-character": "^3.0.0",
1583 | "magic-string": "^0.30.0",
1584 | "periscopic": "^3.1.0"
1585 | },
1586 | "engines": {
1587 | "node": ">=16"
1588 | }
1589 | },
1590 | "node_modules/svelte-check": {
1591 | "version": "3.4.6",
1592 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.6.tgz",
1593 | "integrity": "sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og==",
1594 | "dev": true,
1595 | "dependencies": {
1596 | "@jridgewell/trace-mapping": "^0.3.17",
1597 | "chokidar": "^3.4.1",
1598 | "fast-glob": "^3.2.7",
1599 | "import-fresh": "^3.2.1",
1600 | "picocolors": "^1.0.0",
1601 | "sade": "^1.7.4",
1602 | "svelte-preprocess": "^5.0.4",
1603 | "typescript": "^5.0.3"
1604 | },
1605 | "bin": {
1606 | "svelte-check": "bin/svelte-check"
1607 | },
1608 | "peerDependencies": {
1609 | "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0"
1610 | }
1611 | },
1612 | "node_modules/svelte-hmr": {
1613 | "version": "0.15.3",
1614 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
1615 | "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==",
1616 | "dev": true,
1617 | "engines": {
1618 | "node": "^12.20 || ^14.13.1 || >= 16"
1619 | },
1620 | "peerDependencies": {
1621 | "svelte": "^3.19.0 || ^4.0.0"
1622 | }
1623 | },
1624 | "node_modules/svelte-popover": {
1625 | "version": "2.0.8",
1626 | "resolved": "https://registry.npmjs.org/svelte-popover/-/svelte-popover-2.0.8.tgz",
1627 | "integrity": "sha512-Yvz4FpvvXc5aBGyIE/TlGlqULLKkcfc7N0MoaqNXHMRVXxla+sc7G1xSCCURP3VqP0nZ5cIyPWOLLWFXuJjTRA==",
1628 | "dev": true
1629 | },
1630 | "node_modules/svelte-preprocess": {
1631 | "version": "5.0.4",
1632 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz",
1633 | "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==",
1634 | "dev": true,
1635 | "hasInstallScript": true,
1636 | "dependencies": {
1637 | "@types/pug": "^2.0.6",
1638 | "detect-indent": "^6.1.0",
1639 | "magic-string": "^0.27.0",
1640 | "sorcery": "^0.11.0",
1641 | "strip-indent": "^3.0.0"
1642 | },
1643 | "engines": {
1644 | "node": ">= 14.10.0"
1645 | },
1646 | "peerDependencies": {
1647 | "@babel/core": "^7.10.2",
1648 | "coffeescript": "^2.5.1",
1649 | "less": "^3.11.3 || ^4.0.0",
1650 | "postcss": "^7 || ^8",
1651 | "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0",
1652 | "pug": "^3.0.0",
1653 | "sass": "^1.26.8",
1654 | "stylus": "^0.55.0",
1655 | "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0",
1656 | "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0",
1657 | "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0"
1658 | },
1659 | "peerDependenciesMeta": {
1660 | "@babel/core": {
1661 | "optional": true
1662 | },
1663 | "coffeescript": {
1664 | "optional": true
1665 | },
1666 | "less": {
1667 | "optional": true
1668 | },
1669 | "postcss": {
1670 | "optional": true
1671 | },
1672 | "postcss-load-config": {
1673 | "optional": true
1674 | },
1675 | "pug": {
1676 | "optional": true
1677 | },
1678 | "sass": {
1679 | "optional": true
1680 | },
1681 | "stylus": {
1682 | "optional": true
1683 | },
1684 | "sugarss": {
1685 | "optional": true
1686 | },
1687 | "typescript": {
1688 | "optional": true
1689 | }
1690 | }
1691 | },
1692 | "node_modules/svelte-preprocess/node_modules/magic-string": {
1693 | "version": "0.27.0",
1694 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
1695 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
1696 | "dev": true,
1697 | "dependencies": {
1698 | "@jridgewell/sourcemap-codec": "^1.4.13"
1699 | },
1700 | "engines": {
1701 | "node": ">=12"
1702 | }
1703 | },
1704 | "node_modules/to-regex-range": {
1705 | "version": "5.0.1",
1706 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1707 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1708 | "dev": true,
1709 | "dependencies": {
1710 | "is-number": "^7.0.0"
1711 | },
1712 | "engines": {
1713 | "node": ">=8.0"
1714 | }
1715 | },
1716 | "node_modules/totalist": {
1717 | "version": "3.0.1",
1718 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
1719 | "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
1720 | "dev": true,
1721 | "engines": {
1722 | "node": ">=6"
1723 | }
1724 | },
1725 | "node_modules/tslib": {
1726 | "version": "2.6.1",
1727 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
1728 | "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
1729 | "dev": true
1730 | },
1731 | "node_modules/typescript": {
1732 | "version": "5.1.6",
1733 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
1734 | "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
1735 | "dev": true,
1736 | "bin": {
1737 | "tsc": "bin/tsc",
1738 | "tsserver": "bin/tsserver"
1739 | },
1740 | "engines": {
1741 | "node": ">=14.17"
1742 | }
1743 | },
1744 | "node_modules/undici": {
1745 | "version": "5.22.1",
1746 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz",
1747 | "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==",
1748 | "dev": true,
1749 | "dependencies": {
1750 | "busboy": "^1.6.0"
1751 | },
1752 | "engines": {
1753 | "node": ">=14.0"
1754 | }
1755 | },
1756 | "node_modules/vite": {
1757 | "version": "4.4.8",
1758 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.8.tgz",
1759 | "integrity": "sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==",
1760 | "dev": true,
1761 | "dependencies": {
1762 | "esbuild": "^0.18.10",
1763 | "postcss": "^8.4.26",
1764 | "rollup": "^3.25.2"
1765 | },
1766 | "bin": {
1767 | "vite": "bin/vite.js"
1768 | },
1769 | "engines": {
1770 | "node": "^14.18.0 || >=16.0.0"
1771 | },
1772 | "funding": {
1773 | "url": "https://github.com/vitejs/vite?sponsor=1"
1774 | },
1775 | "optionalDependencies": {
1776 | "fsevents": "~2.3.2"
1777 | },
1778 | "peerDependencies": {
1779 | "@types/node": ">= 14",
1780 | "less": "*",
1781 | "lightningcss": "^1.21.0",
1782 | "sass": "*",
1783 | "stylus": "*",
1784 | "sugarss": "*",
1785 | "terser": "^5.4.0"
1786 | },
1787 | "peerDependenciesMeta": {
1788 | "@types/node": {
1789 | "optional": true
1790 | },
1791 | "less": {
1792 | "optional": true
1793 | },
1794 | "lightningcss": {
1795 | "optional": true
1796 | },
1797 | "sass": {
1798 | "optional": true
1799 | },
1800 | "stylus": {
1801 | "optional": true
1802 | },
1803 | "sugarss": {
1804 | "optional": true
1805 | },
1806 | "terser": {
1807 | "optional": true
1808 | }
1809 | }
1810 | },
1811 | "node_modules/vitefu": {
1812 | "version": "0.2.4",
1813 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
1814 | "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==",
1815 | "dev": true,
1816 | "peerDependencies": {
1817 | "vite": "^3.0.0 || ^4.0.0"
1818 | },
1819 | "peerDependenciesMeta": {
1820 | "vite": {
1821 | "optional": true
1822 | }
1823 | }
1824 | },
1825 | "node_modules/wrappy": {
1826 | "version": "1.0.2",
1827 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1828 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
1829 | "dev": true
1830 | }
1831 | }
1832 | }
1833 |
--------------------------------------------------------------------------------