├── .github
└── workflows
│ └── main.yml
├── .gitignore
├── README.md
├── README.pdf
├── appicon.xcf
└── write
├── README.md
├── app.go
├── build
├── .gitignore
├── README.md
├── appicon.png
└── icon.svg
├── frontend
├── index.html
├── package-lock.json
├── package.json
├── package.json.md5
├── postcss.config.cjs
├── src
│ ├── App.css
│ ├── App.tsx
│ ├── assets
│ │ └── wails.png
│ ├── index.css
│ ├── main.tsx
│ └── vite-env.d.ts
├── tailwind.config.cjs
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── wailsjs
│ ├── go
│ ├── main
│ │ ├── App.d.ts
│ │ └── App.js
│ └── models.ts
│ └── runtime
│ ├── package.json
│ ├── runtime.d.ts
│ └── runtime.js
├── go.mod
├── go.sum
├── lib
├── markdown.go
├── pdf.go
├── pdf_test.go
└── test
│ ├── test.md
│ └── test.pdf
├── main.go
├── scripts
├── build-macos-arm.sh
├── build-macos-intel.sh
├── build-macos.sh
├── build-windows.sh
├── build.sh
└── install-wails-cli.sh
├── tmp
└── main
└── wails.json
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Build and Release
2 | on:
3 | push:
4 | branches:
5 | - main
6 | tags:
7 | - "v*"
8 | jobs:
9 | build:
10 | runs-on: ubuntu-latest
11 | permissions:
12 | contents: write
13 | steps:
14 | - name: Checkout code
15 | uses: actions/checkout@v2
16 | - name: Set up Go 1.21
17 | uses: actions/setup-go@v2
18 | with:
19 | go-version: 1.21
20 | - name: Setup
21 | run: |
22 | sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev nsis
23 | - name: Build
24 | run: |
25 | cd write/scripts
26 | ./install-wails-cli.sh
27 | cd ..
28 | wails build
29 | - name: Tests
30 | run: |
31 | cd write
32 | go test ./...
33 | - name: Package
34 | working-directory: write
35 | run: |
36 | wails build --clean --platform windows/amd64
37 | cp build/bin/write.exe build/write-windows.exe
38 | wails build --clean
39 | cp build/bin/write build/write-linux
40 | - name: Release
41 | uses: softprops/action-gh-release@v1
42 | if: startsWith(github.ref, 'refs/tags/v') # only run on tags strting with v
43 | with:
44 | files: |
45 | write/build/write-windows.exe
46 | write/build/write-linux
47 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | node_modules
3 | write/frontend/dist
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # A writer application
2 |
3 | This is created as a step by step guide in how to build using the wails framework.
4 |
5 | I'm choosing my favorite SPA fotm (framework of the month), but you could do this with anything else.
6 |
7 | IF you're interested in using tailwind and react to make a tiny bundle for a frontend app, read on!
8 |
9 | ## Step 1: Create a new project
10 |
11 | ```bash
12 | wails init -n write -t https://github.com/hotafrika/wails-vite-react-ts-tailwind-template
13 | cd writer
14 | ```
15 |
16 |
17 | ## Step 2:
18 |
19 | - "Design" the application: https://v0.dev/t/OpQCijO6Hm8
20 | - Implement the markdown renderer, see lib/markdown.go and `app.SendMarkdownToRenderer`
21 | - Now you can write markdown!
22 |
23 | ## Step 3:
24 |
25 | - Implement all the other buttons etc etc
26 | - Save Button, Open Button, New Button.
27 |
28 | ## Step 4:
29 |
30 | Creating the pdf export, a huge yackshave, but lets gooo!
31 |
32 | - Pdf renderer has a really interesting and useful abstraction with the Walk function and the abillity to skip children.
33 | - It's not feature complete, but we have a good base of links, headings etc etc.
34 | - Wiring up the export function is pretty straightforward!
35 |
36 | It really ain't pretty yet, lets make something cool...
37 |
38 |
39 | ## Step 5:
40 |
41 | Eat your vegetables, time to setup CI/CD and make a release! Yea, you should probably do this as step 1, but being true to the reality of how i worked on this, I'm putting it as step 5.
42 |
43 | Here is the high level steps I took a look through..
44 |
45 | - Figuring out the production build, windows/linux cross build and copying the binary for later
46 | - Figuring out the release process. https://github.com/softprops/action-gh-release
47 | - Push your code about six times to get build syntax right
48 | - attempt to use a provided github action to matrix build, works for nix but not for windows due to obscure reasons. I think for this simple app a cross compile should be fine, so I'm just going to go with a cross compiled app for simplicity
--------------------------------------------------------------------------------
/README.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/README.pdf
--------------------------------------------------------------------------------
/appicon.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/appicon.xcf
--------------------------------------------------------------------------------
/write/README.md:
--------------------------------------------------------------------------------
1 | ## About
2 |
3 | Wails template which includes: Vite, React, TS, TailwindCSS out of the box.
4 |
5 | Build with `Wails CLI v2.0.0`.
6 |
7 | To use this [template](https://wails.io/docs/community/templates):
8 | ```shell
9 | wails init -n "Your Project Name" -t https://github.com/hotafrika/wails-vite-react-ts-tailwind-template
10 | cd frontend/src
11 | npm install
12 | ```
13 |
14 | [Here](scripts) you can find useful scripts for building on different platforms and Wails CLI installation.
15 |
16 | ## Live Development
17 |
18 | To run in live development mode, run `wails dev` in the project directory. In another terminal, go into the `frontend`
19 | directory and run `npm run dev`. The frontend dev server will run on http://localhost:34115. Connect to this in your
20 | browser and connect to your application.
21 |
22 | ## Building
23 |
24 | To build a redistributable, production mode package, use `wails build`.
25 |
26 |
27 |
--------------------------------------------------------------------------------
/write/app.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "changeme/lib"
5 | "context"
6 | "github.com/mitchellh/go-homedir"
7 | "github.com/wailsapp/wails/v2/pkg/runtime"
8 | "os"
9 | "path"
10 | )
11 |
12 | type FileWithContent struct {
13 | Name string `json:"name,omitempty"`
14 | Content string `json:"content,omitempty"`
15 | HTML string `json:"html,omitempty"`
16 | }
17 |
18 | // App struct
19 | type App struct {
20 | ctx context.Context
21 | filename string
22 | markdown string
23 | renderedHTML string
24 | }
25 |
26 | // NewApp creates a new App application struct
27 | func NewApp() *App {
28 | return &App{}
29 | }
30 |
31 | // startup is called at application startup
32 | func (a *App) startup(ctx context.Context) {
33 | // Perform your setup here
34 | a.ctx = ctx
35 | }
36 |
37 | // domReady is called after front-end resources have been loaded
38 | func (a *App) domReady(ctx context.Context) {
39 | // Add your action here
40 | }
41 |
42 | // beforeClose is called when the application is about to quit,
43 | // either by clicking the window close button or calling runtime.Quit.
44 | // Returning true will cause the application to continue, false will continue shutdown as normal.
45 | func (a *App) beforeClose(ctx context.Context) (prevent bool) {
46 | return false
47 | }
48 |
49 | // shutdown is called at application termination
50 | func (a *App) shutdown(ctx context.Context) {
51 | // Perform your teardown here
52 | }
53 |
54 | // SendMarkdownToRenderer sends markdown to the renderer
55 | func (a *App) SendMarkdownToRenderer(content string) string {
56 | a.markdown = content
57 | a.renderedHTML = lib.RenderMD(content)
58 | return a.renderedHTML
59 | }
60 |
61 | func (a *App) Save() (string, error) {
62 | hd, err := homedir.Dir()
63 | if err != nil {
64 | return "", err
65 | }
66 |
67 | chosenPath, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{
68 | DefaultDirectory: path.Join(hd, "Documents"),
69 | DefaultFilename: a.filename,
70 | Title: "Save file",
71 | ShowHiddenFiles: false,
72 | CanCreateDirectories: true,
73 | TreatPackagesAsDirectories: true,
74 | })
75 | if err != nil {
76 | return "", err
77 | }
78 | err = os.WriteFile(chosenPath, []byte(a.markdown), 0644)
79 | if err != nil {
80 | return "", err
81 | }
82 | return chosenPath, nil
83 | }
84 |
85 | func (a *App) Open() (FileWithContent, error) {
86 | hd, err := homedir.Dir()
87 | if err != nil {
88 | return FileWithContent{}, err
89 | }
90 | openedFile, err := runtime.OpenFileDialog(a.ctx, runtime.OpenDialogOptions{
91 | DefaultDirectory: path.Join(hd, "Documents"),
92 | Title: "Open file",
93 | Filters: []runtime.FileFilter{
94 | {
95 | DisplayName: "Markdown files",
96 | Pattern: "*.md",
97 | },
98 | {
99 | DisplayName: "All files",
100 | Pattern: "*",
101 | },
102 | },
103 | ShowHiddenFiles: false,
104 | CanCreateDirectories: true,
105 | ResolvesAliases: true,
106 | TreatPackagesAsDirectories: true,
107 | })
108 | fileContent, err := os.ReadFile(openedFile)
109 | if err != nil {
110 | return FileWithContent{}, err
111 | }
112 | a.filename = openedFile
113 | a.markdown = string(fileContent)
114 | a.renderedHTML = lib.RenderMD(a.markdown)
115 | return FileWithContent{
116 | Name: a.filename,
117 | Content: a.markdown,
118 | HTML: a.renderedHTML,
119 | }, nil
120 | }
121 |
122 | func (a *App) Export() error {
123 | hd, err := homedir.Dir()
124 | if err != nil {
125 | return err
126 | }
127 | chosenPath, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{
128 | DefaultDirectory: path.Join(hd, "Documents"),
129 | DefaultFilename: a.filename,
130 | Title: "Export to PDF",
131 | ShowHiddenFiles: false,
132 | CanCreateDirectories: true,
133 | TreatPackagesAsDirectories: true,
134 | })
135 | if err != nil {
136 | return err
137 | }
138 |
139 | return lib.Pdf(chosenPath, a.markdown)
140 | }
141 |
--------------------------------------------------------------------------------
/write/build/.gitignore:
--------------------------------------------------------------------------------
1 | bin
2 | darwin
3 | windows
4 |
--------------------------------------------------------------------------------
/write/build/README.md:
--------------------------------------------------------------------------------
1 | # Build Directory
2 |
3 | The build directory is used to house all the build files and assets for your application.
4 |
5 | The structure is:
6 |
7 | * bin - Output directory
8 | * darwin - macOS specific files
9 | * windows - Windows specific files
10 |
11 | ## Mac
12 |
13 | The `darwin` directory holds files specific to Mac builds.
14 | These may be customised and used as part of the build. To return these files to the default state, simply delete them
15 | and
16 | build with `wails build`.
17 |
18 | The directory contains the following files:
19 |
20 | - `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`.
21 | - `Info.dev.plist` - same as the main plist file but used when building using `wails dev`.
22 |
23 | ## Windows
24 |
25 | The `windows` directory contains the manifest and rc files used when building with `wails build`.
26 | These may be customised for your application. To return these files to the default state, simply delete them and
27 | build with `wails build`.
28 |
29 | - `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to
30 | use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file
31 | will be created using the `appicon.png` file in the build directory.
32 | - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`.
33 | - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer,
34 | as well as the application itself (right click the exe -> properties -> details)
35 | - `wails.exe.manifest` - The main application manifest file.
--------------------------------------------------------------------------------
/write/build/appicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/write/build/appicon.png
--------------------------------------------------------------------------------
/write/build/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/write/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Vite + React + TS + Tailwind
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/write/frontend/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "write",
3 | "version": "0.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "write",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0"
13 | },
14 | "devDependencies": {
15 | "@types/react": "^18.0.17",
16 | "@types/react-dom": "^18.0.6",
17 | "@vitejs/plugin-react": "^2.1.0",
18 | "autoprefixer": "^10.4.12",
19 | "postcss": "^8.4.17",
20 | "tailwindcss": "^3.1.8",
21 | "typescript": "^4.6.4",
22 | "vite": "^3.1.0"
23 | }
24 | },
25 | "node_modules/@ampproject/remapping": {
26 | "version": "2.2.0",
27 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
28 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
29 | "dev": true,
30 | "dependencies": {
31 | "@jridgewell/gen-mapping": "^0.1.0",
32 | "@jridgewell/trace-mapping": "^0.3.9"
33 | },
34 | "engines": {
35 | "node": ">=6.0.0"
36 | }
37 | },
38 | "node_modules/@babel/code-frame": {
39 | "version": "7.18.6",
40 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
41 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
42 | "dev": true,
43 | "dependencies": {
44 | "@babel/highlight": "^7.18.6"
45 | },
46 | "engines": {
47 | "node": ">=6.9.0"
48 | }
49 | },
50 | "node_modules/@babel/compat-data": {
51 | "version": "7.19.3",
52 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz",
53 | "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==",
54 | "dev": true,
55 | "engines": {
56 | "node": ">=6.9.0"
57 | }
58 | },
59 | "node_modules/@babel/core": {
60 | "version": "7.19.3",
61 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
62 | "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
63 | "dev": true,
64 | "dependencies": {
65 | "@ampproject/remapping": "^2.1.0",
66 | "@babel/code-frame": "^7.18.6",
67 | "@babel/generator": "^7.19.3",
68 | "@babel/helper-compilation-targets": "^7.19.3",
69 | "@babel/helper-module-transforms": "^7.19.0",
70 | "@babel/helpers": "^7.19.0",
71 | "@babel/parser": "^7.19.3",
72 | "@babel/template": "^7.18.10",
73 | "@babel/traverse": "^7.19.3",
74 | "@babel/types": "^7.19.3",
75 | "convert-source-map": "^1.7.0",
76 | "debug": "^4.1.0",
77 | "gensync": "^1.0.0-beta.2",
78 | "json5": "^2.2.1",
79 | "semver": "^6.3.0"
80 | },
81 | "engines": {
82 | "node": ">=6.9.0"
83 | },
84 | "funding": {
85 | "type": "opencollective",
86 | "url": "https://opencollective.com/babel"
87 | }
88 | },
89 | "node_modules/@babel/generator": {
90 | "version": "7.19.3",
91 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz",
92 | "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==",
93 | "dev": true,
94 | "dependencies": {
95 | "@babel/types": "^7.19.3",
96 | "@jridgewell/gen-mapping": "^0.3.2",
97 | "jsesc": "^2.5.1"
98 | },
99 | "engines": {
100 | "node": ">=6.9.0"
101 | }
102 | },
103 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
104 | "version": "0.3.2",
105 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
106 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
107 | "dev": true,
108 | "dependencies": {
109 | "@jridgewell/set-array": "^1.0.1",
110 | "@jridgewell/sourcemap-codec": "^1.4.10",
111 | "@jridgewell/trace-mapping": "^0.3.9"
112 | },
113 | "engines": {
114 | "node": ">=6.0.0"
115 | }
116 | },
117 | "node_modules/@babel/helper-annotate-as-pure": {
118 | "version": "7.18.6",
119 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
120 | "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
121 | "dev": true,
122 | "dependencies": {
123 | "@babel/types": "^7.18.6"
124 | },
125 | "engines": {
126 | "node": ">=6.9.0"
127 | }
128 | },
129 | "node_modules/@babel/helper-compilation-targets": {
130 | "version": "7.19.3",
131 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
132 | "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
133 | "dev": true,
134 | "dependencies": {
135 | "@babel/compat-data": "^7.19.3",
136 | "@babel/helper-validator-option": "^7.18.6",
137 | "browserslist": "^4.21.3",
138 | "semver": "^6.3.0"
139 | },
140 | "engines": {
141 | "node": ">=6.9.0"
142 | },
143 | "peerDependencies": {
144 | "@babel/core": "^7.0.0"
145 | }
146 | },
147 | "node_modules/@babel/helper-environment-visitor": {
148 | "version": "7.18.9",
149 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
150 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
151 | "dev": true,
152 | "engines": {
153 | "node": ">=6.9.0"
154 | }
155 | },
156 | "node_modules/@babel/helper-function-name": {
157 | "version": "7.19.0",
158 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
159 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
160 | "dev": true,
161 | "dependencies": {
162 | "@babel/template": "^7.18.10",
163 | "@babel/types": "^7.19.0"
164 | },
165 | "engines": {
166 | "node": ">=6.9.0"
167 | }
168 | },
169 | "node_modules/@babel/helper-hoist-variables": {
170 | "version": "7.18.6",
171 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
172 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
173 | "dev": true,
174 | "dependencies": {
175 | "@babel/types": "^7.18.6"
176 | },
177 | "engines": {
178 | "node": ">=6.9.0"
179 | }
180 | },
181 | "node_modules/@babel/helper-module-imports": {
182 | "version": "7.18.6",
183 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
184 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
185 | "dev": true,
186 | "dependencies": {
187 | "@babel/types": "^7.18.6"
188 | },
189 | "engines": {
190 | "node": ">=6.9.0"
191 | }
192 | },
193 | "node_modules/@babel/helper-module-transforms": {
194 | "version": "7.19.0",
195 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
196 | "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
197 | "dev": true,
198 | "dependencies": {
199 | "@babel/helper-environment-visitor": "^7.18.9",
200 | "@babel/helper-module-imports": "^7.18.6",
201 | "@babel/helper-simple-access": "^7.18.6",
202 | "@babel/helper-split-export-declaration": "^7.18.6",
203 | "@babel/helper-validator-identifier": "^7.18.6",
204 | "@babel/template": "^7.18.10",
205 | "@babel/traverse": "^7.19.0",
206 | "@babel/types": "^7.19.0"
207 | },
208 | "engines": {
209 | "node": ">=6.9.0"
210 | }
211 | },
212 | "node_modules/@babel/helper-plugin-utils": {
213 | "version": "7.19.0",
214 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
215 | "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
216 | "dev": true,
217 | "engines": {
218 | "node": ">=6.9.0"
219 | }
220 | },
221 | "node_modules/@babel/helper-simple-access": {
222 | "version": "7.18.6",
223 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
224 | "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
225 | "dev": true,
226 | "dependencies": {
227 | "@babel/types": "^7.18.6"
228 | },
229 | "engines": {
230 | "node": ">=6.9.0"
231 | }
232 | },
233 | "node_modules/@babel/helper-split-export-declaration": {
234 | "version": "7.18.6",
235 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
236 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
237 | "dev": true,
238 | "dependencies": {
239 | "@babel/types": "^7.18.6"
240 | },
241 | "engines": {
242 | "node": ">=6.9.0"
243 | }
244 | },
245 | "node_modules/@babel/helper-string-parser": {
246 | "version": "7.18.10",
247 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
248 | "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
249 | "dev": true,
250 | "engines": {
251 | "node": ">=6.9.0"
252 | }
253 | },
254 | "node_modules/@babel/helper-validator-identifier": {
255 | "version": "7.19.1",
256 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
257 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
258 | "dev": true,
259 | "engines": {
260 | "node": ">=6.9.0"
261 | }
262 | },
263 | "node_modules/@babel/helper-validator-option": {
264 | "version": "7.18.6",
265 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
266 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
267 | "dev": true,
268 | "engines": {
269 | "node": ">=6.9.0"
270 | }
271 | },
272 | "node_modules/@babel/helpers": {
273 | "version": "7.19.0",
274 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
275 | "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
276 | "dev": true,
277 | "dependencies": {
278 | "@babel/template": "^7.18.10",
279 | "@babel/traverse": "^7.19.0",
280 | "@babel/types": "^7.19.0"
281 | },
282 | "engines": {
283 | "node": ">=6.9.0"
284 | }
285 | },
286 | "node_modules/@babel/highlight": {
287 | "version": "7.18.6",
288 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
289 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
290 | "dev": true,
291 | "dependencies": {
292 | "@babel/helper-validator-identifier": "^7.18.6",
293 | "chalk": "^2.0.0",
294 | "js-tokens": "^4.0.0"
295 | },
296 | "engines": {
297 | "node": ">=6.9.0"
298 | }
299 | },
300 | "node_modules/@babel/parser": {
301 | "version": "7.19.3",
302 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
303 | "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==",
304 | "dev": true,
305 | "bin": {
306 | "parser": "bin/babel-parser.js"
307 | },
308 | "engines": {
309 | "node": ">=6.0.0"
310 | }
311 | },
312 | "node_modules/@babel/plugin-syntax-jsx": {
313 | "version": "7.18.6",
314 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
315 | "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
316 | "dev": true,
317 | "dependencies": {
318 | "@babel/helper-plugin-utils": "^7.18.6"
319 | },
320 | "engines": {
321 | "node": ">=6.9.0"
322 | },
323 | "peerDependencies": {
324 | "@babel/core": "^7.0.0-0"
325 | }
326 | },
327 | "node_modules/@babel/plugin-transform-react-jsx": {
328 | "version": "7.19.0",
329 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
330 | "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
331 | "dev": true,
332 | "dependencies": {
333 | "@babel/helper-annotate-as-pure": "^7.18.6",
334 | "@babel/helper-module-imports": "^7.18.6",
335 | "@babel/helper-plugin-utils": "^7.19.0",
336 | "@babel/plugin-syntax-jsx": "^7.18.6",
337 | "@babel/types": "^7.19.0"
338 | },
339 | "engines": {
340 | "node": ">=6.9.0"
341 | },
342 | "peerDependencies": {
343 | "@babel/core": "^7.0.0-0"
344 | }
345 | },
346 | "node_modules/@babel/plugin-transform-react-jsx-development": {
347 | "version": "7.18.6",
348 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
349 | "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
350 | "dev": true,
351 | "dependencies": {
352 | "@babel/plugin-transform-react-jsx": "^7.18.6"
353 | },
354 | "engines": {
355 | "node": ">=6.9.0"
356 | },
357 | "peerDependencies": {
358 | "@babel/core": "^7.0.0-0"
359 | }
360 | },
361 | "node_modules/@babel/plugin-transform-react-jsx-self": {
362 | "version": "7.18.6",
363 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
364 | "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
365 | "dev": true,
366 | "dependencies": {
367 | "@babel/helper-plugin-utils": "^7.18.6"
368 | },
369 | "engines": {
370 | "node": ">=6.9.0"
371 | },
372 | "peerDependencies": {
373 | "@babel/core": "^7.0.0-0"
374 | }
375 | },
376 | "node_modules/@babel/plugin-transform-react-jsx-source": {
377 | "version": "7.18.6",
378 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
379 | "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
380 | "dev": true,
381 | "dependencies": {
382 | "@babel/helper-plugin-utils": "^7.18.6"
383 | },
384 | "engines": {
385 | "node": ">=6.9.0"
386 | },
387 | "peerDependencies": {
388 | "@babel/core": "^7.0.0-0"
389 | }
390 | },
391 | "node_modules/@babel/template": {
392 | "version": "7.18.10",
393 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
394 | "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
395 | "dev": true,
396 | "dependencies": {
397 | "@babel/code-frame": "^7.18.6",
398 | "@babel/parser": "^7.18.10",
399 | "@babel/types": "^7.18.10"
400 | },
401 | "engines": {
402 | "node": ">=6.9.0"
403 | }
404 | },
405 | "node_modules/@babel/traverse": {
406 | "version": "7.19.3",
407 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz",
408 | "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==",
409 | "dev": true,
410 | "dependencies": {
411 | "@babel/code-frame": "^7.18.6",
412 | "@babel/generator": "^7.19.3",
413 | "@babel/helper-environment-visitor": "^7.18.9",
414 | "@babel/helper-function-name": "^7.19.0",
415 | "@babel/helper-hoist-variables": "^7.18.6",
416 | "@babel/helper-split-export-declaration": "^7.18.6",
417 | "@babel/parser": "^7.19.3",
418 | "@babel/types": "^7.19.3",
419 | "debug": "^4.1.0",
420 | "globals": "^11.1.0"
421 | },
422 | "engines": {
423 | "node": ">=6.9.0"
424 | }
425 | },
426 | "node_modules/@babel/types": {
427 | "version": "7.19.3",
428 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz",
429 | "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==",
430 | "dev": true,
431 | "dependencies": {
432 | "@babel/helper-string-parser": "^7.18.10",
433 | "@babel/helper-validator-identifier": "^7.19.1",
434 | "to-fast-properties": "^2.0.0"
435 | },
436 | "engines": {
437 | "node": ">=6.9.0"
438 | }
439 | },
440 | "node_modules/@esbuild/android-arm": {
441 | "version": "0.15.10",
442 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz",
443 | "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==",
444 | "cpu": [
445 | "arm"
446 | ],
447 | "dev": true,
448 | "optional": true,
449 | "os": [
450 | "android"
451 | ],
452 | "engines": {
453 | "node": ">=12"
454 | }
455 | },
456 | "node_modules/@esbuild/linux-loong64": {
457 | "version": "0.15.10",
458 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz",
459 | "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==",
460 | "cpu": [
461 | "loong64"
462 | ],
463 | "dev": true,
464 | "optional": true,
465 | "os": [
466 | "linux"
467 | ],
468 | "engines": {
469 | "node": ">=12"
470 | }
471 | },
472 | "node_modules/@jridgewell/gen-mapping": {
473 | "version": "0.1.1",
474 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
475 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
476 | "dev": true,
477 | "dependencies": {
478 | "@jridgewell/set-array": "^1.0.0",
479 | "@jridgewell/sourcemap-codec": "^1.4.10"
480 | },
481 | "engines": {
482 | "node": ">=6.0.0"
483 | }
484 | },
485 | "node_modules/@jridgewell/resolve-uri": {
486 | "version": "3.1.0",
487 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
488 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
489 | "dev": true,
490 | "engines": {
491 | "node": ">=6.0.0"
492 | }
493 | },
494 | "node_modules/@jridgewell/set-array": {
495 | "version": "1.1.2",
496 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
497 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
498 | "dev": true,
499 | "engines": {
500 | "node": ">=6.0.0"
501 | }
502 | },
503 | "node_modules/@jridgewell/sourcemap-codec": {
504 | "version": "1.4.14",
505 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
506 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
507 | "dev": true
508 | },
509 | "node_modules/@jridgewell/trace-mapping": {
510 | "version": "0.3.15",
511 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
512 | "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
513 | "dev": true,
514 | "dependencies": {
515 | "@jridgewell/resolve-uri": "^3.0.3",
516 | "@jridgewell/sourcemap-codec": "^1.4.10"
517 | }
518 | },
519 | "node_modules/@nodelib/fs.scandir": {
520 | "version": "2.1.5",
521 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
522 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
523 | "dev": true,
524 | "dependencies": {
525 | "@nodelib/fs.stat": "2.0.5",
526 | "run-parallel": "^1.1.9"
527 | },
528 | "engines": {
529 | "node": ">= 8"
530 | }
531 | },
532 | "node_modules/@nodelib/fs.stat": {
533 | "version": "2.0.5",
534 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
535 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
536 | "dev": true,
537 | "engines": {
538 | "node": ">= 8"
539 | }
540 | },
541 | "node_modules/@nodelib/fs.walk": {
542 | "version": "1.2.8",
543 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
544 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
545 | "dev": true,
546 | "dependencies": {
547 | "@nodelib/fs.scandir": "2.1.5",
548 | "fastq": "^1.6.0"
549 | },
550 | "engines": {
551 | "node": ">= 8"
552 | }
553 | },
554 | "node_modules/@types/prop-types": {
555 | "version": "15.7.5",
556 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
557 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
558 | "dev": true
559 | },
560 | "node_modules/@types/react": {
561 | "version": "18.0.21",
562 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz",
563 | "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==",
564 | "dev": true,
565 | "dependencies": {
566 | "@types/prop-types": "*",
567 | "@types/scheduler": "*",
568 | "csstype": "^3.0.2"
569 | }
570 | },
571 | "node_modules/@types/react-dom": {
572 | "version": "18.0.6",
573 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
574 | "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
575 | "dev": true,
576 | "dependencies": {
577 | "@types/react": "*"
578 | }
579 | },
580 | "node_modules/@types/scheduler": {
581 | "version": "0.16.2",
582 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
583 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
584 | "dev": true
585 | },
586 | "node_modules/@vitejs/plugin-react": {
587 | "version": "2.1.0",
588 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz",
589 | "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==",
590 | "dev": true,
591 | "dependencies": {
592 | "@babel/core": "^7.18.13",
593 | "@babel/plugin-transform-react-jsx": "^7.18.10",
594 | "@babel/plugin-transform-react-jsx-development": "^7.18.6",
595 | "@babel/plugin-transform-react-jsx-self": "^7.18.6",
596 | "@babel/plugin-transform-react-jsx-source": "^7.18.6",
597 | "magic-string": "^0.26.2",
598 | "react-refresh": "^0.14.0"
599 | },
600 | "engines": {
601 | "node": "^14.18.0 || >=16.0.0"
602 | },
603 | "peerDependencies": {
604 | "vite": "^3.0.0"
605 | }
606 | },
607 | "node_modules/acorn": {
608 | "version": "7.4.1",
609 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
610 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
611 | "dev": true,
612 | "bin": {
613 | "acorn": "bin/acorn"
614 | },
615 | "engines": {
616 | "node": ">=0.4.0"
617 | }
618 | },
619 | "node_modules/acorn-node": {
620 | "version": "1.8.2",
621 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
622 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
623 | "dev": true,
624 | "dependencies": {
625 | "acorn": "^7.0.0",
626 | "acorn-walk": "^7.0.0",
627 | "xtend": "^4.0.2"
628 | }
629 | },
630 | "node_modules/acorn-walk": {
631 | "version": "7.2.0",
632 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
633 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
634 | "dev": true,
635 | "engines": {
636 | "node": ">=0.4.0"
637 | }
638 | },
639 | "node_modules/ansi-styles": {
640 | "version": "3.2.1",
641 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
642 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
643 | "dev": true,
644 | "dependencies": {
645 | "color-convert": "^1.9.0"
646 | },
647 | "engines": {
648 | "node": ">=4"
649 | }
650 | },
651 | "node_modules/anymatch": {
652 | "version": "3.1.2",
653 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
654 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
655 | "dev": true,
656 | "dependencies": {
657 | "normalize-path": "^3.0.0",
658 | "picomatch": "^2.0.4"
659 | },
660 | "engines": {
661 | "node": ">= 8"
662 | }
663 | },
664 | "node_modules/arg": {
665 | "version": "5.0.2",
666 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
667 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
668 | "dev": true
669 | },
670 | "node_modules/autoprefixer": {
671 | "version": "10.4.12",
672 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
673 | "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
674 | "dev": true,
675 | "funding": [
676 | {
677 | "type": "opencollective",
678 | "url": "https://opencollective.com/postcss/"
679 | },
680 | {
681 | "type": "tidelift",
682 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
683 | }
684 | ],
685 | "dependencies": {
686 | "browserslist": "^4.21.4",
687 | "caniuse-lite": "^1.0.30001407",
688 | "fraction.js": "^4.2.0",
689 | "normalize-range": "^0.1.2",
690 | "picocolors": "^1.0.0",
691 | "postcss-value-parser": "^4.2.0"
692 | },
693 | "bin": {
694 | "autoprefixer": "bin/autoprefixer"
695 | },
696 | "engines": {
697 | "node": "^10 || ^12 || >=14"
698 | },
699 | "peerDependencies": {
700 | "postcss": "^8.1.0"
701 | }
702 | },
703 | "node_modules/binary-extensions": {
704 | "version": "2.2.0",
705 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
706 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
707 | "dev": true,
708 | "engines": {
709 | "node": ">=8"
710 | }
711 | },
712 | "node_modules/braces": {
713 | "version": "3.0.2",
714 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
715 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
716 | "dev": true,
717 | "dependencies": {
718 | "fill-range": "^7.0.1"
719 | },
720 | "engines": {
721 | "node": ">=8"
722 | }
723 | },
724 | "node_modules/browserslist": {
725 | "version": "4.21.4",
726 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
727 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
728 | "dev": true,
729 | "funding": [
730 | {
731 | "type": "opencollective",
732 | "url": "https://opencollective.com/browserslist"
733 | },
734 | {
735 | "type": "tidelift",
736 | "url": "https://tidelift.com/funding/github/npm/browserslist"
737 | }
738 | ],
739 | "dependencies": {
740 | "caniuse-lite": "^1.0.30001400",
741 | "electron-to-chromium": "^1.4.251",
742 | "node-releases": "^2.0.6",
743 | "update-browserslist-db": "^1.0.9"
744 | },
745 | "bin": {
746 | "browserslist": "cli.js"
747 | },
748 | "engines": {
749 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
750 | }
751 | },
752 | "node_modules/camelcase-css": {
753 | "version": "2.0.1",
754 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
755 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
756 | "dev": true,
757 | "engines": {
758 | "node": ">= 6"
759 | }
760 | },
761 | "node_modules/caniuse-lite": {
762 | "version": "1.0.30001414",
763 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
764 | "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==",
765 | "dev": true,
766 | "funding": [
767 | {
768 | "type": "opencollective",
769 | "url": "https://opencollective.com/browserslist"
770 | },
771 | {
772 | "type": "tidelift",
773 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
774 | }
775 | ]
776 | },
777 | "node_modules/chalk": {
778 | "version": "2.4.2",
779 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
780 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
781 | "dev": true,
782 | "dependencies": {
783 | "ansi-styles": "^3.2.1",
784 | "escape-string-regexp": "^1.0.5",
785 | "supports-color": "^5.3.0"
786 | },
787 | "engines": {
788 | "node": ">=4"
789 | }
790 | },
791 | "node_modules/chokidar": {
792 | "version": "3.5.3",
793 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
794 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
795 | "dev": true,
796 | "funding": [
797 | {
798 | "type": "individual",
799 | "url": "https://paulmillr.com/funding/"
800 | }
801 | ],
802 | "dependencies": {
803 | "anymatch": "~3.1.2",
804 | "braces": "~3.0.2",
805 | "glob-parent": "~5.1.2",
806 | "is-binary-path": "~2.1.0",
807 | "is-glob": "~4.0.1",
808 | "normalize-path": "~3.0.0",
809 | "readdirp": "~3.6.0"
810 | },
811 | "engines": {
812 | "node": ">= 8.10.0"
813 | },
814 | "optionalDependencies": {
815 | "fsevents": "~2.3.2"
816 | }
817 | },
818 | "node_modules/chokidar/node_modules/glob-parent": {
819 | "version": "5.1.2",
820 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
821 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
822 | "dev": true,
823 | "dependencies": {
824 | "is-glob": "^4.0.1"
825 | },
826 | "engines": {
827 | "node": ">= 6"
828 | }
829 | },
830 | "node_modules/color-convert": {
831 | "version": "1.9.3",
832 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
833 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
834 | "dev": true,
835 | "dependencies": {
836 | "color-name": "1.1.3"
837 | }
838 | },
839 | "node_modules/color-name": {
840 | "version": "1.1.3",
841 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
842 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
843 | "dev": true
844 | },
845 | "node_modules/convert-source-map": {
846 | "version": "1.8.0",
847 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
848 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
849 | "dev": true,
850 | "dependencies": {
851 | "safe-buffer": "~5.1.1"
852 | }
853 | },
854 | "node_modules/cssesc": {
855 | "version": "3.0.0",
856 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
857 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
858 | "dev": true,
859 | "bin": {
860 | "cssesc": "bin/cssesc"
861 | },
862 | "engines": {
863 | "node": ">=4"
864 | }
865 | },
866 | "node_modules/csstype": {
867 | "version": "3.1.1",
868 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
869 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
870 | "dev": true
871 | },
872 | "node_modules/debug": {
873 | "version": "4.3.4",
874 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
875 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
876 | "dev": true,
877 | "dependencies": {
878 | "ms": "2.1.2"
879 | },
880 | "engines": {
881 | "node": ">=6.0"
882 | },
883 | "peerDependenciesMeta": {
884 | "supports-color": {
885 | "optional": true
886 | }
887 | }
888 | },
889 | "node_modules/defined": {
890 | "version": "1.0.0",
891 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
892 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
893 | "dev": true
894 | },
895 | "node_modules/detective": {
896 | "version": "5.2.1",
897 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
898 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
899 | "dev": true,
900 | "dependencies": {
901 | "acorn-node": "^1.8.2",
902 | "defined": "^1.0.0",
903 | "minimist": "^1.2.6"
904 | },
905 | "bin": {
906 | "detective": "bin/detective.js"
907 | },
908 | "engines": {
909 | "node": ">=0.8.0"
910 | }
911 | },
912 | "node_modules/didyoumean": {
913 | "version": "1.2.2",
914 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
915 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
916 | "dev": true
917 | },
918 | "node_modules/dlv": {
919 | "version": "1.1.3",
920 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
921 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
922 | "dev": true
923 | },
924 | "node_modules/electron-to-chromium": {
925 | "version": "1.4.270",
926 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
927 | "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==",
928 | "dev": true
929 | },
930 | "node_modules/esbuild": {
931 | "version": "0.15.10",
932 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz",
933 | "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==",
934 | "dev": true,
935 | "hasInstallScript": true,
936 | "bin": {
937 | "esbuild": "bin/esbuild"
938 | },
939 | "engines": {
940 | "node": ">=12"
941 | },
942 | "optionalDependencies": {
943 | "@esbuild/android-arm": "0.15.10",
944 | "@esbuild/linux-loong64": "0.15.10",
945 | "esbuild-android-64": "0.15.10",
946 | "esbuild-android-arm64": "0.15.10",
947 | "esbuild-darwin-64": "0.15.10",
948 | "esbuild-darwin-arm64": "0.15.10",
949 | "esbuild-freebsd-64": "0.15.10",
950 | "esbuild-freebsd-arm64": "0.15.10",
951 | "esbuild-linux-32": "0.15.10",
952 | "esbuild-linux-64": "0.15.10",
953 | "esbuild-linux-arm": "0.15.10",
954 | "esbuild-linux-arm64": "0.15.10",
955 | "esbuild-linux-mips64le": "0.15.10",
956 | "esbuild-linux-ppc64le": "0.15.10",
957 | "esbuild-linux-riscv64": "0.15.10",
958 | "esbuild-linux-s390x": "0.15.10",
959 | "esbuild-netbsd-64": "0.15.10",
960 | "esbuild-openbsd-64": "0.15.10",
961 | "esbuild-sunos-64": "0.15.10",
962 | "esbuild-windows-32": "0.15.10",
963 | "esbuild-windows-64": "0.15.10",
964 | "esbuild-windows-arm64": "0.15.10"
965 | }
966 | },
967 | "node_modules/esbuild-android-64": {
968 | "version": "0.15.10",
969 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz",
970 | "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==",
971 | "cpu": [
972 | "x64"
973 | ],
974 | "dev": true,
975 | "optional": true,
976 | "os": [
977 | "android"
978 | ],
979 | "engines": {
980 | "node": ">=12"
981 | }
982 | },
983 | "node_modules/esbuild-android-arm64": {
984 | "version": "0.15.10",
985 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz",
986 | "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==",
987 | "cpu": [
988 | "arm64"
989 | ],
990 | "dev": true,
991 | "optional": true,
992 | "os": [
993 | "android"
994 | ],
995 | "engines": {
996 | "node": ">=12"
997 | }
998 | },
999 | "node_modules/esbuild-darwin-64": {
1000 | "version": "0.15.10",
1001 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz",
1002 | "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==",
1003 | "cpu": [
1004 | "x64"
1005 | ],
1006 | "dev": true,
1007 | "optional": true,
1008 | "os": [
1009 | "darwin"
1010 | ],
1011 | "engines": {
1012 | "node": ">=12"
1013 | }
1014 | },
1015 | "node_modules/esbuild-darwin-arm64": {
1016 | "version": "0.15.10",
1017 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz",
1018 | "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==",
1019 | "cpu": [
1020 | "arm64"
1021 | ],
1022 | "dev": true,
1023 | "optional": true,
1024 | "os": [
1025 | "darwin"
1026 | ],
1027 | "engines": {
1028 | "node": ">=12"
1029 | }
1030 | },
1031 | "node_modules/esbuild-freebsd-64": {
1032 | "version": "0.15.10",
1033 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz",
1034 | "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==",
1035 | "cpu": [
1036 | "x64"
1037 | ],
1038 | "dev": true,
1039 | "optional": true,
1040 | "os": [
1041 | "freebsd"
1042 | ],
1043 | "engines": {
1044 | "node": ">=12"
1045 | }
1046 | },
1047 | "node_modules/esbuild-freebsd-arm64": {
1048 | "version": "0.15.10",
1049 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz",
1050 | "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==",
1051 | "cpu": [
1052 | "arm64"
1053 | ],
1054 | "dev": true,
1055 | "optional": true,
1056 | "os": [
1057 | "freebsd"
1058 | ],
1059 | "engines": {
1060 | "node": ">=12"
1061 | }
1062 | },
1063 | "node_modules/esbuild-linux-32": {
1064 | "version": "0.15.10",
1065 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz",
1066 | "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==",
1067 | "cpu": [
1068 | "ia32"
1069 | ],
1070 | "dev": true,
1071 | "optional": true,
1072 | "os": [
1073 | "linux"
1074 | ],
1075 | "engines": {
1076 | "node": ">=12"
1077 | }
1078 | },
1079 | "node_modules/esbuild-linux-64": {
1080 | "version": "0.15.10",
1081 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz",
1082 | "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==",
1083 | "cpu": [
1084 | "x64"
1085 | ],
1086 | "dev": true,
1087 | "optional": true,
1088 | "os": [
1089 | "linux"
1090 | ],
1091 | "engines": {
1092 | "node": ">=12"
1093 | }
1094 | },
1095 | "node_modules/esbuild-linux-arm": {
1096 | "version": "0.15.10",
1097 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz",
1098 | "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==",
1099 | "cpu": [
1100 | "arm"
1101 | ],
1102 | "dev": true,
1103 | "optional": true,
1104 | "os": [
1105 | "linux"
1106 | ],
1107 | "engines": {
1108 | "node": ">=12"
1109 | }
1110 | },
1111 | "node_modules/esbuild-linux-arm64": {
1112 | "version": "0.15.10",
1113 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz",
1114 | "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==",
1115 | "cpu": [
1116 | "arm64"
1117 | ],
1118 | "dev": true,
1119 | "optional": true,
1120 | "os": [
1121 | "linux"
1122 | ],
1123 | "engines": {
1124 | "node": ">=12"
1125 | }
1126 | },
1127 | "node_modules/esbuild-linux-mips64le": {
1128 | "version": "0.15.10",
1129 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz",
1130 | "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==",
1131 | "cpu": [
1132 | "mips64el"
1133 | ],
1134 | "dev": true,
1135 | "optional": true,
1136 | "os": [
1137 | "linux"
1138 | ],
1139 | "engines": {
1140 | "node": ">=12"
1141 | }
1142 | },
1143 | "node_modules/esbuild-linux-ppc64le": {
1144 | "version": "0.15.10",
1145 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz",
1146 | "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==",
1147 | "cpu": [
1148 | "ppc64"
1149 | ],
1150 | "dev": true,
1151 | "optional": true,
1152 | "os": [
1153 | "linux"
1154 | ],
1155 | "engines": {
1156 | "node": ">=12"
1157 | }
1158 | },
1159 | "node_modules/esbuild-linux-riscv64": {
1160 | "version": "0.15.10",
1161 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz",
1162 | "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==",
1163 | "cpu": [
1164 | "riscv64"
1165 | ],
1166 | "dev": true,
1167 | "optional": true,
1168 | "os": [
1169 | "linux"
1170 | ],
1171 | "engines": {
1172 | "node": ">=12"
1173 | }
1174 | },
1175 | "node_modules/esbuild-linux-s390x": {
1176 | "version": "0.15.10",
1177 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz",
1178 | "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==",
1179 | "cpu": [
1180 | "s390x"
1181 | ],
1182 | "dev": true,
1183 | "optional": true,
1184 | "os": [
1185 | "linux"
1186 | ],
1187 | "engines": {
1188 | "node": ">=12"
1189 | }
1190 | },
1191 | "node_modules/esbuild-netbsd-64": {
1192 | "version": "0.15.10",
1193 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz",
1194 | "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==",
1195 | "cpu": [
1196 | "x64"
1197 | ],
1198 | "dev": true,
1199 | "optional": true,
1200 | "os": [
1201 | "netbsd"
1202 | ],
1203 | "engines": {
1204 | "node": ">=12"
1205 | }
1206 | },
1207 | "node_modules/esbuild-openbsd-64": {
1208 | "version": "0.15.10",
1209 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz",
1210 | "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==",
1211 | "cpu": [
1212 | "x64"
1213 | ],
1214 | "dev": true,
1215 | "optional": true,
1216 | "os": [
1217 | "openbsd"
1218 | ],
1219 | "engines": {
1220 | "node": ">=12"
1221 | }
1222 | },
1223 | "node_modules/esbuild-sunos-64": {
1224 | "version": "0.15.10",
1225 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz",
1226 | "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==",
1227 | "cpu": [
1228 | "x64"
1229 | ],
1230 | "dev": true,
1231 | "optional": true,
1232 | "os": [
1233 | "sunos"
1234 | ],
1235 | "engines": {
1236 | "node": ">=12"
1237 | }
1238 | },
1239 | "node_modules/esbuild-windows-32": {
1240 | "version": "0.15.10",
1241 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz",
1242 | "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==",
1243 | "cpu": [
1244 | "ia32"
1245 | ],
1246 | "dev": true,
1247 | "optional": true,
1248 | "os": [
1249 | "win32"
1250 | ],
1251 | "engines": {
1252 | "node": ">=12"
1253 | }
1254 | },
1255 | "node_modules/esbuild-windows-64": {
1256 | "version": "0.15.10",
1257 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz",
1258 | "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==",
1259 | "cpu": [
1260 | "x64"
1261 | ],
1262 | "dev": true,
1263 | "optional": true,
1264 | "os": [
1265 | "win32"
1266 | ],
1267 | "engines": {
1268 | "node": ">=12"
1269 | }
1270 | },
1271 | "node_modules/esbuild-windows-arm64": {
1272 | "version": "0.15.10",
1273 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz",
1274 | "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==",
1275 | "cpu": [
1276 | "arm64"
1277 | ],
1278 | "dev": true,
1279 | "optional": true,
1280 | "os": [
1281 | "win32"
1282 | ],
1283 | "engines": {
1284 | "node": ">=12"
1285 | }
1286 | },
1287 | "node_modules/escalade": {
1288 | "version": "3.1.1",
1289 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1290 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1291 | "dev": true,
1292 | "engines": {
1293 | "node": ">=6"
1294 | }
1295 | },
1296 | "node_modules/escape-string-regexp": {
1297 | "version": "1.0.5",
1298 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1299 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1300 | "dev": true,
1301 | "engines": {
1302 | "node": ">=0.8.0"
1303 | }
1304 | },
1305 | "node_modules/fast-glob": {
1306 | "version": "3.2.12",
1307 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
1308 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
1309 | "dev": true,
1310 | "dependencies": {
1311 | "@nodelib/fs.stat": "^2.0.2",
1312 | "@nodelib/fs.walk": "^1.2.3",
1313 | "glob-parent": "^5.1.2",
1314 | "merge2": "^1.3.0",
1315 | "micromatch": "^4.0.4"
1316 | },
1317 | "engines": {
1318 | "node": ">=8.6.0"
1319 | }
1320 | },
1321 | "node_modules/fast-glob/node_modules/glob-parent": {
1322 | "version": "5.1.2",
1323 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1324 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1325 | "dev": true,
1326 | "dependencies": {
1327 | "is-glob": "^4.0.1"
1328 | },
1329 | "engines": {
1330 | "node": ">= 6"
1331 | }
1332 | },
1333 | "node_modules/fastq": {
1334 | "version": "1.13.0",
1335 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
1336 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
1337 | "dev": true,
1338 | "dependencies": {
1339 | "reusify": "^1.0.4"
1340 | }
1341 | },
1342 | "node_modules/fill-range": {
1343 | "version": "7.0.1",
1344 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1345 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1346 | "dev": true,
1347 | "dependencies": {
1348 | "to-regex-range": "^5.0.1"
1349 | },
1350 | "engines": {
1351 | "node": ">=8"
1352 | }
1353 | },
1354 | "node_modules/fraction.js": {
1355 | "version": "4.2.0",
1356 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
1357 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1358 | "dev": true,
1359 | "engines": {
1360 | "node": "*"
1361 | },
1362 | "funding": {
1363 | "type": "patreon",
1364 | "url": "https://www.patreon.com/infusion"
1365 | }
1366 | },
1367 | "node_modules/fsevents": {
1368 | "version": "2.3.2",
1369 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1370 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1371 | "dev": true,
1372 | "hasInstallScript": true,
1373 | "optional": true,
1374 | "os": [
1375 | "darwin"
1376 | ],
1377 | "engines": {
1378 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1379 | }
1380 | },
1381 | "node_modules/function-bind": {
1382 | "version": "1.1.1",
1383 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1384 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1385 | "dev": true
1386 | },
1387 | "node_modules/gensync": {
1388 | "version": "1.0.0-beta.2",
1389 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1390 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1391 | "dev": true,
1392 | "engines": {
1393 | "node": ">=6.9.0"
1394 | }
1395 | },
1396 | "node_modules/glob-parent": {
1397 | "version": "6.0.2",
1398 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1399 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1400 | "dev": true,
1401 | "dependencies": {
1402 | "is-glob": "^4.0.3"
1403 | },
1404 | "engines": {
1405 | "node": ">=10.13.0"
1406 | }
1407 | },
1408 | "node_modules/globals": {
1409 | "version": "11.12.0",
1410 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1411 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1412 | "dev": true,
1413 | "engines": {
1414 | "node": ">=4"
1415 | }
1416 | },
1417 | "node_modules/has": {
1418 | "version": "1.0.3",
1419 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1420 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1421 | "dev": true,
1422 | "dependencies": {
1423 | "function-bind": "^1.1.1"
1424 | },
1425 | "engines": {
1426 | "node": ">= 0.4.0"
1427 | }
1428 | },
1429 | "node_modules/has-flag": {
1430 | "version": "3.0.0",
1431 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1432 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1433 | "dev": true,
1434 | "engines": {
1435 | "node": ">=4"
1436 | }
1437 | },
1438 | "node_modules/is-binary-path": {
1439 | "version": "2.1.0",
1440 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1441 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1442 | "dev": true,
1443 | "dependencies": {
1444 | "binary-extensions": "^2.0.0"
1445 | },
1446 | "engines": {
1447 | "node": ">=8"
1448 | }
1449 | },
1450 | "node_modules/is-core-module": {
1451 | "version": "2.10.0",
1452 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
1453 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
1454 | "dev": true,
1455 | "dependencies": {
1456 | "has": "^1.0.3"
1457 | },
1458 | "funding": {
1459 | "url": "https://github.com/sponsors/ljharb"
1460 | }
1461 | },
1462 | "node_modules/is-extglob": {
1463 | "version": "2.1.1",
1464 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1465 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1466 | "dev": true,
1467 | "engines": {
1468 | "node": ">=0.10.0"
1469 | }
1470 | },
1471 | "node_modules/is-glob": {
1472 | "version": "4.0.3",
1473 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1474 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1475 | "dev": true,
1476 | "dependencies": {
1477 | "is-extglob": "^2.1.1"
1478 | },
1479 | "engines": {
1480 | "node": ">=0.10.0"
1481 | }
1482 | },
1483 | "node_modules/is-number": {
1484 | "version": "7.0.0",
1485 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1486 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1487 | "dev": true,
1488 | "engines": {
1489 | "node": ">=0.12.0"
1490 | }
1491 | },
1492 | "node_modules/js-tokens": {
1493 | "version": "4.0.0",
1494 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1495 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1496 | },
1497 | "node_modules/jsesc": {
1498 | "version": "2.5.2",
1499 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1500 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1501 | "dev": true,
1502 | "bin": {
1503 | "jsesc": "bin/jsesc"
1504 | },
1505 | "engines": {
1506 | "node": ">=4"
1507 | }
1508 | },
1509 | "node_modules/json5": {
1510 | "version": "2.2.1",
1511 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
1512 | "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
1513 | "dev": true,
1514 | "bin": {
1515 | "json5": "lib/cli.js"
1516 | },
1517 | "engines": {
1518 | "node": ">=6"
1519 | }
1520 | },
1521 | "node_modules/lilconfig": {
1522 | "version": "2.0.6",
1523 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
1524 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
1525 | "dev": true,
1526 | "engines": {
1527 | "node": ">=10"
1528 | }
1529 | },
1530 | "node_modules/loose-envify": {
1531 | "version": "1.4.0",
1532 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1533 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1534 | "dependencies": {
1535 | "js-tokens": "^3.0.0 || ^4.0.0"
1536 | },
1537 | "bin": {
1538 | "loose-envify": "cli.js"
1539 | }
1540 | },
1541 | "node_modules/magic-string": {
1542 | "version": "0.26.5",
1543 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.5.tgz",
1544 | "integrity": "sha512-yXUIYOOQnEHKHOftp5shMWpB9ImfgfDJpapa38j/qMtTj5QHWucvxP4lUtuRmHT9vAzvtpHkWKXW9xBwimXeNg==",
1545 | "dev": true,
1546 | "dependencies": {
1547 | "sourcemap-codec": "^1.4.8"
1548 | },
1549 | "engines": {
1550 | "node": ">=12"
1551 | }
1552 | },
1553 | "node_modules/merge2": {
1554 | "version": "1.4.1",
1555 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1556 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1557 | "dev": true,
1558 | "engines": {
1559 | "node": ">= 8"
1560 | }
1561 | },
1562 | "node_modules/micromatch": {
1563 | "version": "4.0.5",
1564 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1565 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1566 | "dev": true,
1567 | "dependencies": {
1568 | "braces": "^3.0.2",
1569 | "picomatch": "^2.3.1"
1570 | },
1571 | "engines": {
1572 | "node": ">=8.6"
1573 | }
1574 | },
1575 | "node_modules/minimist": {
1576 | "version": "1.2.6",
1577 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
1578 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
1579 | "dev": true
1580 | },
1581 | "node_modules/ms": {
1582 | "version": "2.1.2",
1583 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1584 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1585 | "dev": true
1586 | },
1587 | "node_modules/nanoid": {
1588 | "version": "3.3.4",
1589 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1590 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
1591 | "dev": true,
1592 | "bin": {
1593 | "nanoid": "bin/nanoid.cjs"
1594 | },
1595 | "engines": {
1596 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1597 | }
1598 | },
1599 | "node_modules/node-releases": {
1600 | "version": "2.0.6",
1601 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
1602 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
1603 | "dev": true
1604 | },
1605 | "node_modules/normalize-path": {
1606 | "version": "3.0.0",
1607 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1608 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1609 | "dev": true,
1610 | "engines": {
1611 | "node": ">=0.10.0"
1612 | }
1613 | },
1614 | "node_modules/normalize-range": {
1615 | "version": "0.1.2",
1616 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
1617 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
1618 | "dev": true,
1619 | "engines": {
1620 | "node": ">=0.10.0"
1621 | }
1622 | },
1623 | "node_modules/object-hash": {
1624 | "version": "3.0.0",
1625 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1626 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1627 | "dev": true,
1628 | "engines": {
1629 | "node": ">= 6"
1630 | }
1631 | },
1632 | "node_modules/path-parse": {
1633 | "version": "1.0.7",
1634 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1635 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1636 | "dev": true
1637 | },
1638 | "node_modules/picocolors": {
1639 | "version": "1.0.0",
1640 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1641 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1642 | "dev": true
1643 | },
1644 | "node_modules/picomatch": {
1645 | "version": "2.3.1",
1646 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1647 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1648 | "dev": true,
1649 | "engines": {
1650 | "node": ">=8.6"
1651 | },
1652 | "funding": {
1653 | "url": "https://github.com/sponsors/jonschlinkert"
1654 | }
1655 | },
1656 | "node_modules/pify": {
1657 | "version": "2.3.0",
1658 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1659 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1660 | "dev": true,
1661 | "engines": {
1662 | "node": ">=0.10.0"
1663 | }
1664 | },
1665 | "node_modules/postcss": {
1666 | "version": "8.4.17",
1667 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
1668 | "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
1669 | "dev": true,
1670 | "funding": [
1671 | {
1672 | "type": "opencollective",
1673 | "url": "https://opencollective.com/postcss/"
1674 | },
1675 | {
1676 | "type": "tidelift",
1677 | "url": "https://tidelift.com/funding/github/npm/postcss"
1678 | }
1679 | ],
1680 | "dependencies": {
1681 | "nanoid": "^3.3.4",
1682 | "picocolors": "^1.0.0",
1683 | "source-map-js": "^1.0.2"
1684 | },
1685 | "engines": {
1686 | "node": "^10 || ^12 || >=14"
1687 | }
1688 | },
1689 | "node_modules/postcss-import": {
1690 | "version": "14.1.0",
1691 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
1692 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
1693 | "dev": true,
1694 | "dependencies": {
1695 | "postcss-value-parser": "^4.0.0",
1696 | "read-cache": "^1.0.0",
1697 | "resolve": "^1.1.7"
1698 | },
1699 | "engines": {
1700 | "node": ">=10.0.0"
1701 | },
1702 | "peerDependencies": {
1703 | "postcss": "^8.0.0"
1704 | }
1705 | },
1706 | "node_modules/postcss-js": {
1707 | "version": "4.0.0",
1708 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
1709 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
1710 | "dev": true,
1711 | "dependencies": {
1712 | "camelcase-css": "^2.0.1"
1713 | },
1714 | "engines": {
1715 | "node": "^12 || ^14 || >= 16"
1716 | },
1717 | "funding": {
1718 | "type": "opencollective",
1719 | "url": "https://opencollective.com/postcss/"
1720 | },
1721 | "peerDependencies": {
1722 | "postcss": "^8.3.3"
1723 | }
1724 | },
1725 | "node_modules/postcss-load-config": {
1726 | "version": "3.1.4",
1727 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
1728 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
1729 | "dev": true,
1730 | "dependencies": {
1731 | "lilconfig": "^2.0.5",
1732 | "yaml": "^1.10.2"
1733 | },
1734 | "engines": {
1735 | "node": ">= 10"
1736 | },
1737 | "funding": {
1738 | "type": "opencollective",
1739 | "url": "https://opencollective.com/postcss/"
1740 | },
1741 | "peerDependencies": {
1742 | "postcss": ">=8.0.9",
1743 | "ts-node": ">=9.0.0"
1744 | },
1745 | "peerDependenciesMeta": {
1746 | "postcss": {
1747 | "optional": true
1748 | },
1749 | "ts-node": {
1750 | "optional": true
1751 | }
1752 | }
1753 | },
1754 | "node_modules/postcss-nested": {
1755 | "version": "5.0.6",
1756 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
1757 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
1758 | "dev": true,
1759 | "dependencies": {
1760 | "postcss-selector-parser": "^6.0.6"
1761 | },
1762 | "engines": {
1763 | "node": ">=12.0"
1764 | },
1765 | "funding": {
1766 | "type": "opencollective",
1767 | "url": "https://opencollective.com/postcss/"
1768 | },
1769 | "peerDependencies": {
1770 | "postcss": "^8.2.14"
1771 | }
1772 | },
1773 | "node_modules/postcss-selector-parser": {
1774 | "version": "6.0.10",
1775 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
1776 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
1777 | "dev": true,
1778 | "dependencies": {
1779 | "cssesc": "^3.0.0",
1780 | "util-deprecate": "^1.0.2"
1781 | },
1782 | "engines": {
1783 | "node": ">=4"
1784 | }
1785 | },
1786 | "node_modules/postcss-value-parser": {
1787 | "version": "4.2.0",
1788 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1789 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
1790 | "dev": true
1791 | },
1792 | "node_modules/queue-microtask": {
1793 | "version": "1.2.3",
1794 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1795 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1796 | "dev": true,
1797 | "funding": [
1798 | {
1799 | "type": "github",
1800 | "url": "https://github.com/sponsors/feross"
1801 | },
1802 | {
1803 | "type": "patreon",
1804 | "url": "https://www.patreon.com/feross"
1805 | },
1806 | {
1807 | "type": "consulting",
1808 | "url": "https://feross.org/support"
1809 | }
1810 | ]
1811 | },
1812 | "node_modules/quick-lru": {
1813 | "version": "5.1.1",
1814 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
1815 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
1816 | "dev": true,
1817 | "engines": {
1818 | "node": ">=10"
1819 | },
1820 | "funding": {
1821 | "url": "https://github.com/sponsors/sindresorhus"
1822 | }
1823 | },
1824 | "node_modules/react": {
1825 | "version": "18.2.0",
1826 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
1827 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
1828 | "dependencies": {
1829 | "loose-envify": "^1.1.0"
1830 | },
1831 | "engines": {
1832 | "node": ">=0.10.0"
1833 | }
1834 | },
1835 | "node_modules/react-dom": {
1836 | "version": "18.2.0",
1837 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
1838 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
1839 | "dependencies": {
1840 | "loose-envify": "^1.1.0",
1841 | "scheduler": "^0.23.0"
1842 | },
1843 | "peerDependencies": {
1844 | "react": "^18.2.0"
1845 | }
1846 | },
1847 | "node_modules/react-refresh": {
1848 | "version": "0.14.0",
1849 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
1850 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
1851 | "dev": true,
1852 | "engines": {
1853 | "node": ">=0.10.0"
1854 | }
1855 | },
1856 | "node_modules/read-cache": {
1857 | "version": "1.0.0",
1858 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
1859 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
1860 | "dev": true,
1861 | "dependencies": {
1862 | "pify": "^2.3.0"
1863 | }
1864 | },
1865 | "node_modules/readdirp": {
1866 | "version": "3.6.0",
1867 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1868 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1869 | "dev": true,
1870 | "dependencies": {
1871 | "picomatch": "^2.2.1"
1872 | },
1873 | "engines": {
1874 | "node": ">=8.10.0"
1875 | }
1876 | },
1877 | "node_modules/resolve": {
1878 | "version": "1.22.1",
1879 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1880 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1881 | "dev": true,
1882 | "dependencies": {
1883 | "is-core-module": "^2.9.0",
1884 | "path-parse": "^1.0.7",
1885 | "supports-preserve-symlinks-flag": "^1.0.0"
1886 | },
1887 | "bin": {
1888 | "resolve": "bin/resolve"
1889 | },
1890 | "funding": {
1891 | "url": "https://github.com/sponsors/ljharb"
1892 | }
1893 | },
1894 | "node_modules/reusify": {
1895 | "version": "1.0.4",
1896 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1897 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1898 | "dev": true,
1899 | "engines": {
1900 | "iojs": ">=1.0.0",
1901 | "node": ">=0.10.0"
1902 | }
1903 | },
1904 | "node_modules/rollup": {
1905 | "version": "2.78.1",
1906 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
1907 | "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
1908 | "dev": true,
1909 | "bin": {
1910 | "rollup": "dist/bin/rollup"
1911 | },
1912 | "engines": {
1913 | "node": ">=10.0.0"
1914 | },
1915 | "optionalDependencies": {
1916 | "fsevents": "~2.3.2"
1917 | }
1918 | },
1919 | "node_modules/run-parallel": {
1920 | "version": "1.2.0",
1921 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1922 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1923 | "dev": true,
1924 | "funding": [
1925 | {
1926 | "type": "github",
1927 | "url": "https://github.com/sponsors/feross"
1928 | },
1929 | {
1930 | "type": "patreon",
1931 | "url": "https://www.patreon.com/feross"
1932 | },
1933 | {
1934 | "type": "consulting",
1935 | "url": "https://feross.org/support"
1936 | }
1937 | ],
1938 | "dependencies": {
1939 | "queue-microtask": "^1.2.2"
1940 | }
1941 | },
1942 | "node_modules/safe-buffer": {
1943 | "version": "5.1.2",
1944 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1945 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1946 | "dev": true
1947 | },
1948 | "node_modules/scheduler": {
1949 | "version": "0.23.0",
1950 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1951 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1952 | "dependencies": {
1953 | "loose-envify": "^1.1.0"
1954 | }
1955 | },
1956 | "node_modules/semver": {
1957 | "version": "6.3.0",
1958 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1959 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1960 | "dev": true,
1961 | "bin": {
1962 | "semver": "bin/semver.js"
1963 | }
1964 | },
1965 | "node_modules/source-map-js": {
1966 | "version": "1.0.2",
1967 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1968 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1969 | "dev": true,
1970 | "engines": {
1971 | "node": ">=0.10.0"
1972 | }
1973 | },
1974 | "node_modules/sourcemap-codec": {
1975 | "version": "1.4.8",
1976 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1977 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1978 | "dev": true
1979 | },
1980 | "node_modules/supports-color": {
1981 | "version": "5.5.0",
1982 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1983 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1984 | "dev": true,
1985 | "dependencies": {
1986 | "has-flag": "^3.0.0"
1987 | },
1988 | "engines": {
1989 | "node": ">=4"
1990 | }
1991 | },
1992 | "node_modules/supports-preserve-symlinks-flag": {
1993 | "version": "1.0.0",
1994 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1995 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1996 | "dev": true,
1997 | "engines": {
1998 | "node": ">= 0.4"
1999 | },
2000 | "funding": {
2001 | "url": "https://github.com/sponsors/ljharb"
2002 | }
2003 | },
2004 | "node_modules/tailwindcss": {
2005 | "version": "3.1.8",
2006 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
2007 | "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
2008 | "dev": true,
2009 | "dependencies": {
2010 | "arg": "^5.0.2",
2011 | "chokidar": "^3.5.3",
2012 | "color-name": "^1.1.4",
2013 | "detective": "^5.2.1",
2014 | "didyoumean": "^1.2.2",
2015 | "dlv": "^1.1.3",
2016 | "fast-glob": "^3.2.11",
2017 | "glob-parent": "^6.0.2",
2018 | "is-glob": "^4.0.3",
2019 | "lilconfig": "^2.0.6",
2020 | "normalize-path": "^3.0.0",
2021 | "object-hash": "^3.0.0",
2022 | "picocolors": "^1.0.0",
2023 | "postcss": "^8.4.14",
2024 | "postcss-import": "^14.1.0",
2025 | "postcss-js": "^4.0.0",
2026 | "postcss-load-config": "^3.1.4",
2027 | "postcss-nested": "5.0.6",
2028 | "postcss-selector-parser": "^6.0.10",
2029 | "postcss-value-parser": "^4.2.0",
2030 | "quick-lru": "^5.1.1",
2031 | "resolve": "^1.22.1"
2032 | },
2033 | "bin": {
2034 | "tailwind": "lib/cli.js",
2035 | "tailwindcss": "lib/cli.js"
2036 | },
2037 | "engines": {
2038 | "node": ">=12.13.0"
2039 | },
2040 | "peerDependencies": {
2041 | "postcss": "^8.0.9"
2042 | }
2043 | },
2044 | "node_modules/tailwindcss/node_modules/color-name": {
2045 | "version": "1.1.4",
2046 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2047 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2048 | "dev": true
2049 | },
2050 | "node_modules/to-fast-properties": {
2051 | "version": "2.0.0",
2052 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
2053 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
2054 | "dev": true,
2055 | "engines": {
2056 | "node": ">=4"
2057 | }
2058 | },
2059 | "node_modules/to-regex-range": {
2060 | "version": "5.0.1",
2061 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2062 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2063 | "dev": true,
2064 | "dependencies": {
2065 | "is-number": "^7.0.0"
2066 | },
2067 | "engines": {
2068 | "node": ">=8.0"
2069 | }
2070 | },
2071 | "node_modules/typescript": {
2072 | "version": "4.8.4",
2073 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz",
2074 | "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==",
2075 | "dev": true,
2076 | "bin": {
2077 | "tsc": "bin/tsc",
2078 | "tsserver": "bin/tsserver"
2079 | },
2080 | "engines": {
2081 | "node": ">=4.2.0"
2082 | }
2083 | },
2084 | "node_modules/update-browserslist-db": {
2085 | "version": "1.0.9",
2086 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
2087 | "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
2088 | "dev": true,
2089 | "funding": [
2090 | {
2091 | "type": "opencollective",
2092 | "url": "https://opencollective.com/browserslist"
2093 | },
2094 | {
2095 | "type": "tidelift",
2096 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2097 | }
2098 | ],
2099 | "dependencies": {
2100 | "escalade": "^3.1.1",
2101 | "picocolors": "^1.0.0"
2102 | },
2103 | "bin": {
2104 | "browserslist-lint": "cli.js"
2105 | },
2106 | "peerDependencies": {
2107 | "browserslist": ">= 4.21.0"
2108 | }
2109 | },
2110 | "node_modules/util-deprecate": {
2111 | "version": "1.0.2",
2112 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2113 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2114 | "dev": true
2115 | },
2116 | "node_modules/vite": {
2117 | "version": "3.1.4",
2118 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.4.tgz",
2119 | "integrity": "sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==",
2120 | "dev": true,
2121 | "dependencies": {
2122 | "esbuild": "^0.15.6",
2123 | "postcss": "^8.4.16",
2124 | "resolve": "^1.22.1",
2125 | "rollup": "~2.78.0"
2126 | },
2127 | "bin": {
2128 | "vite": "bin/vite.js"
2129 | },
2130 | "engines": {
2131 | "node": "^14.18.0 || >=16.0.0"
2132 | },
2133 | "optionalDependencies": {
2134 | "fsevents": "~2.3.2"
2135 | },
2136 | "peerDependencies": {
2137 | "less": "*",
2138 | "sass": "*",
2139 | "stylus": "*",
2140 | "terser": "^5.4.0"
2141 | },
2142 | "peerDependenciesMeta": {
2143 | "less": {
2144 | "optional": true
2145 | },
2146 | "sass": {
2147 | "optional": true
2148 | },
2149 | "stylus": {
2150 | "optional": true
2151 | },
2152 | "terser": {
2153 | "optional": true
2154 | }
2155 | }
2156 | },
2157 | "node_modules/xtend": {
2158 | "version": "4.0.2",
2159 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2160 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
2161 | "dev": true,
2162 | "engines": {
2163 | "node": ">=0.4"
2164 | }
2165 | },
2166 | "node_modules/yaml": {
2167 | "version": "1.10.2",
2168 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2169 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2170 | "dev": true,
2171 | "engines": {
2172 | "node": ">= 6"
2173 | }
2174 | }
2175 | },
2176 | "dependencies": {
2177 | "@ampproject/remapping": {
2178 | "version": "2.2.0",
2179 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
2180 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
2181 | "dev": true,
2182 | "requires": {
2183 | "@jridgewell/gen-mapping": "^0.1.0",
2184 | "@jridgewell/trace-mapping": "^0.3.9"
2185 | }
2186 | },
2187 | "@babel/code-frame": {
2188 | "version": "7.18.6",
2189 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
2190 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
2191 | "dev": true,
2192 | "requires": {
2193 | "@babel/highlight": "^7.18.6"
2194 | }
2195 | },
2196 | "@babel/compat-data": {
2197 | "version": "7.19.3",
2198 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz",
2199 | "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==",
2200 | "dev": true
2201 | },
2202 | "@babel/core": {
2203 | "version": "7.19.3",
2204 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
2205 | "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
2206 | "dev": true,
2207 | "requires": {
2208 | "@ampproject/remapping": "^2.1.0",
2209 | "@babel/code-frame": "^7.18.6",
2210 | "@babel/generator": "^7.19.3",
2211 | "@babel/helper-compilation-targets": "^7.19.3",
2212 | "@babel/helper-module-transforms": "^7.19.0",
2213 | "@babel/helpers": "^7.19.0",
2214 | "@babel/parser": "^7.19.3",
2215 | "@babel/template": "^7.18.10",
2216 | "@babel/traverse": "^7.19.3",
2217 | "@babel/types": "^7.19.3",
2218 | "convert-source-map": "^1.7.0",
2219 | "debug": "^4.1.0",
2220 | "gensync": "^1.0.0-beta.2",
2221 | "json5": "^2.2.1",
2222 | "semver": "^6.3.0"
2223 | }
2224 | },
2225 | "@babel/generator": {
2226 | "version": "7.19.3",
2227 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz",
2228 | "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==",
2229 | "dev": true,
2230 | "requires": {
2231 | "@babel/types": "^7.19.3",
2232 | "@jridgewell/gen-mapping": "^0.3.2",
2233 | "jsesc": "^2.5.1"
2234 | },
2235 | "dependencies": {
2236 | "@jridgewell/gen-mapping": {
2237 | "version": "0.3.2",
2238 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
2239 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
2240 | "dev": true,
2241 | "requires": {
2242 | "@jridgewell/set-array": "^1.0.1",
2243 | "@jridgewell/sourcemap-codec": "^1.4.10",
2244 | "@jridgewell/trace-mapping": "^0.3.9"
2245 | }
2246 | }
2247 | }
2248 | },
2249 | "@babel/helper-annotate-as-pure": {
2250 | "version": "7.18.6",
2251 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
2252 | "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
2253 | "dev": true,
2254 | "requires": {
2255 | "@babel/types": "^7.18.6"
2256 | }
2257 | },
2258 | "@babel/helper-compilation-targets": {
2259 | "version": "7.19.3",
2260 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
2261 | "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
2262 | "dev": true,
2263 | "requires": {
2264 | "@babel/compat-data": "^7.19.3",
2265 | "@babel/helper-validator-option": "^7.18.6",
2266 | "browserslist": "^4.21.3",
2267 | "semver": "^6.3.0"
2268 | }
2269 | },
2270 | "@babel/helper-environment-visitor": {
2271 | "version": "7.18.9",
2272 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
2273 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
2274 | "dev": true
2275 | },
2276 | "@babel/helper-function-name": {
2277 | "version": "7.19.0",
2278 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
2279 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
2280 | "dev": true,
2281 | "requires": {
2282 | "@babel/template": "^7.18.10",
2283 | "@babel/types": "^7.19.0"
2284 | }
2285 | },
2286 | "@babel/helper-hoist-variables": {
2287 | "version": "7.18.6",
2288 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
2289 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
2290 | "dev": true,
2291 | "requires": {
2292 | "@babel/types": "^7.18.6"
2293 | }
2294 | },
2295 | "@babel/helper-module-imports": {
2296 | "version": "7.18.6",
2297 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
2298 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
2299 | "dev": true,
2300 | "requires": {
2301 | "@babel/types": "^7.18.6"
2302 | }
2303 | },
2304 | "@babel/helper-module-transforms": {
2305 | "version": "7.19.0",
2306 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
2307 | "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
2308 | "dev": true,
2309 | "requires": {
2310 | "@babel/helper-environment-visitor": "^7.18.9",
2311 | "@babel/helper-module-imports": "^7.18.6",
2312 | "@babel/helper-simple-access": "^7.18.6",
2313 | "@babel/helper-split-export-declaration": "^7.18.6",
2314 | "@babel/helper-validator-identifier": "^7.18.6",
2315 | "@babel/template": "^7.18.10",
2316 | "@babel/traverse": "^7.19.0",
2317 | "@babel/types": "^7.19.0"
2318 | }
2319 | },
2320 | "@babel/helper-plugin-utils": {
2321 | "version": "7.19.0",
2322 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
2323 | "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
2324 | "dev": true
2325 | },
2326 | "@babel/helper-simple-access": {
2327 | "version": "7.18.6",
2328 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
2329 | "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
2330 | "dev": true,
2331 | "requires": {
2332 | "@babel/types": "^7.18.6"
2333 | }
2334 | },
2335 | "@babel/helper-split-export-declaration": {
2336 | "version": "7.18.6",
2337 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
2338 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
2339 | "dev": true,
2340 | "requires": {
2341 | "@babel/types": "^7.18.6"
2342 | }
2343 | },
2344 | "@babel/helper-string-parser": {
2345 | "version": "7.18.10",
2346 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
2347 | "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
2348 | "dev": true
2349 | },
2350 | "@babel/helper-validator-identifier": {
2351 | "version": "7.19.1",
2352 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
2353 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
2354 | "dev": true
2355 | },
2356 | "@babel/helper-validator-option": {
2357 | "version": "7.18.6",
2358 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
2359 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
2360 | "dev": true
2361 | },
2362 | "@babel/helpers": {
2363 | "version": "7.19.0",
2364 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
2365 | "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
2366 | "dev": true,
2367 | "requires": {
2368 | "@babel/template": "^7.18.10",
2369 | "@babel/traverse": "^7.19.0",
2370 | "@babel/types": "^7.19.0"
2371 | }
2372 | },
2373 | "@babel/highlight": {
2374 | "version": "7.18.6",
2375 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
2376 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
2377 | "dev": true,
2378 | "requires": {
2379 | "@babel/helper-validator-identifier": "^7.18.6",
2380 | "chalk": "^2.0.0",
2381 | "js-tokens": "^4.0.0"
2382 | }
2383 | },
2384 | "@babel/parser": {
2385 | "version": "7.19.3",
2386 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
2387 | "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==",
2388 | "dev": true
2389 | },
2390 | "@babel/plugin-syntax-jsx": {
2391 | "version": "7.18.6",
2392 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
2393 | "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
2394 | "dev": true,
2395 | "requires": {
2396 | "@babel/helper-plugin-utils": "^7.18.6"
2397 | }
2398 | },
2399 | "@babel/plugin-transform-react-jsx": {
2400 | "version": "7.19.0",
2401 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
2402 | "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
2403 | "dev": true,
2404 | "requires": {
2405 | "@babel/helper-annotate-as-pure": "^7.18.6",
2406 | "@babel/helper-module-imports": "^7.18.6",
2407 | "@babel/helper-plugin-utils": "^7.19.0",
2408 | "@babel/plugin-syntax-jsx": "^7.18.6",
2409 | "@babel/types": "^7.19.0"
2410 | }
2411 | },
2412 | "@babel/plugin-transform-react-jsx-development": {
2413 | "version": "7.18.6",
2414 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
2415 | "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
2416 | "dev": true,
2417 | "requires": {
2418 | "@babel/plugin-transform-react-jsx": "^7.18.6"
2419 | }
2420 | },
2421 | "@babel/plugin-transform-react-jsx-self": {
2422 | "version": "7.18.6",
2423 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
2424 | "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
2425 | "dev": true,
2426 | "requires": {
2427 | "@babel/helper-plugin-utils": "^7.18.6"
2428 | }
2429 | },
2430 | "@babel/plugin-transform-react-jsx-source": {
2431 | "version": "7.18.6",
2432 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
2433 | "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
2434 | "dev": true,
2435 | "requires": {
2436 | "@babel/helper-plugin-utils": "^7.18.6"
2437 | }
2438 | },
2439 | "@babel/template": {
2440 | "version": "7.18.10",
2441 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
2442 | "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
2443 | "dev": true,
2444 | "requires": {
2445 | "@babel/code-frame": "^7.18.6",
2446 | "@babel/parser": "^7.18.10",
2447 | "@babel/types": "^7.18.10"
2448 | }
2449 | },
2450 | "@babel/traverse": {
2451 | "version": "7.19.3",
2452 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz",
2453 | "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==",
2454 | "dev": true,
2455 | "requires": {
2456 | "@babel/code-frame": "^7.18.6",
2457 | "@babel/generator": "^7.19.3",
2458 | "@babel/helper-environment-visitor": "^7.18.9",
2459 | "@babel/helper-function-name": "^7.19.0",
2460 | "@babel/helper-hoist-variables": "^7.18.6",
2461 | "@babel/helper-split-export-declaration": "^7.18.6",
2462 | "@babel/parser": "^7.19.3",
2463 | "@babel/types": "^7.19.3",
2464 | "debug": "^4.1.0",
2465 | "globals": "^11.1.0"
2466 | }
2467 | },
2468 | "@babel/types": {
2469 | "version": "7.19.3",
2470 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz",
2471 | "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==",
2472 | "dev": true,
2473 | "requires": {
2474 | "@babel/helper-string-parser": "^7.18.10",
2475 | "@babel/helper-validator-identifier": "^7.19.1",
2476 | "to-fast-properties": "^2.0.0"
2477 | }
2478 | },
2479 | "@esbuild/android-arm": {
2480 | "version": "0.15.10",
2481 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz",
2482 | "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==",
2483 | "dev": true,
2484 | "optional": true
2485 | },
2486 | "@esbuild/linux-loong64": {
2487 | "version": "0.15.10",
2488 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz",
2489 | "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==",
2490 | "dev": true,
2491 | "optional": true
2492 | },
2493 | "@jridgewell/gen-mapping": {
2494 | "version": "0.1.1",
2495 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
2496 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
2497 | "dev": true,
2498 | "requires": {
2499 | "@jridgewell/set-array": "^1.0.0",
2500 | "@jridgewell/sourcemap-codec": "^1.4.10"
2501 | }
2502 | },
2503 | "@jridgewell/resolve-uri": {
2504 | "version": "3.1.0",
2505 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
2506 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
2507 | "dev": true
2508 | },
2509 | "@jridgewell/set-array": {
2510 | "version": "1.1.2",
2511 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
2512 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
2513 | "dev": true
2514 | },
2515 | "@jridgewell/sourcemap-codec": {
2516 | "version": "1.4.14",
2517 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
2518 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
2519 | "dev": true
2520 | },
2521 | "@jridgewell/trace-mapping": {
2522 | "version": "0.3.15",
2523 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
2524 | "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
2525 | "dev": true,
2526 | "requires": {
2527 | "@jridgewell/resolve-uri": "^3.0.3",
2528 | "@jridgewell/sourcemap-codec": "^1.4.10"
2529 | }
2530 | },
2531 | "@nodelib/fs.scandir": {
2532 | "version": "2.1.5",
2533 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
2534 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
2535 | "dev": true,
2536 | "requires": {
2537 | "@nodelib/fs.stat": "2.0.5",
2538 | "run-parallel": "^1.1.9"
2539 | }
2540 | },
2541 | "@nodelib/fs.stat": {
2542 | "version": "2.0.5",
2543 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
2544 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
2545 | "dev": true
2546 | },
2547 | "@nodelib/fs.walk": {
2548 | "version": "1.2.8",
2549 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
2550 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
2551 | "dev": true,
2552 | "requires": {
2553 | "@nodelib/fs.scandir": "2.1.5",
2554 | "fastq": "^1.6.0"
2555 | }
2556 | },
2557 | "@types/prop-types": {
2558 | "version": "15.7.5",
2559 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
2560 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
2561 | "dev": true
2562 | },
2563 | "@types/react": {
2564 | "version": "18.0.21",
2565 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz",
2566 | "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==",
2567 | "dev": true,
2568 | "requires": {
2569 | "@types/prop-types": "*",
2570 | "@types/scheduler": "*",
2571 | "csstype": "^3.0.2"
2572 | }
2573 | },
2574 | "@types/react-dom": {
2575 | "version": "18.0.6",
2576 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
2577 | "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
2578 | "dev": true,
2579 | "requires": {
2580 | "@types/react": "*"
2581 | }
2582 | },
2583 | "@types/scheduler": {
2584 | "version": "0.16.2",
2585 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
2586 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
2587 | "dev": true
2588 | },
2589 | "@vitejs/plugin-react": {
2590 | "version": "2.1.0",
2591 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz",
2592 | "integrity": "sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==",
2593 | "dev": true,
2594 | "requires": {
2595 | "@babel/core": "^7.18.13",
2596 | "@babel/plugin-transform-react-jsx": "^7.18.10",
2597 | "@babel/plugin-transform-react-jsx-development": "^7.18.6",
2598 | "@babel/plugin-transform-react-jsx-self": "^7.18.6",
2599 | "@babel/plugin-transform-react-jsx-source": "^7.18.6",
2600 | "magic-string": "^0.26.2",
2601 | "react-refresh": "^0.14.0"
2602 | }
2603 | },
2604 | "acorn": {
2605 | "version": "7.4.1",
2606 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
2607 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
2608 | "dev": true
2609 | },
2610 | "acorn-node": {
2611 | "version": "1.8.2",
2612 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
2613 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
2614 | "dev": true,
2615 | "requires": {
2616 | "acorn": "^7.0.0",
2617 | "acorn-walk": "^7.0.0",
2618 | "xtend": "^4.0.2"
2619 | }
2620 | },
2621 | "acorn-walk": {
2622 | "version": "7.2.0",
2623 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
2624 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
2625 | "dev": true
2626 | },
2627 | "ansi-styles": {
2628 | "version": "3.2.1",
2629 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2630 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2631 | "dev": true,
2632 | "requires": {
2633 | "color-convert": "^1.9.0"
2634 | }
2635 | },
2636 | "anymatch": {
2637 | "version": "3.1.2",
2638 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
2639 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
2640 | "dev": true,
2641 | "requires": {
2642 | "normalize-path": "^3.0.0",
2643 | "picomatch": "^2.0.4"
2644 | }
2645 | },
2646 | "arg": {
2647 | "version": "5.0.2",
2648 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
2649 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
2650 | "dev": true
2651 | },
2652 | "autoprefixer": {
2653 | "version": "10.4.12",
2654 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
2655 | "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
2656 | "dev": true,
2657 | "requires": {
2658 | "browserslist": "^4.21.4",
2659 | "caniuse-lite": "^1.0.30001407",
2660 | "fraction.js": "^4.2.0",
2661 | "normalize-range": "^0.1.2",
2662 | "picocolors": "^1.0.0",
2663 | "postcss-value-parser": "^4.2.0"
2664 | }
2665 | },
2666 | "binary-extensions": {
2667 | "version": "2.2.0",
2668 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
2669 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
2670 | "dev": true
2671 | },
2672 | "braces": {
2673 | "version": "3.0.2",
2674 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
2675 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
2676 | "dev": true,
2677 | "requires": {
2678 | "fill-range": "^7.0.1"
2679 | }
2680 | },
2681 | "browserslist": {
2682 | "version": "4.21.4",
2683 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
2684 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
2685 | "dev": true,
2686 | "requires": {
2687 | "caniuse-lite": "^1.0.30001400",
2688 | "electron-to-chromium": "^1.4.251",
2689 | "node-releases": "^2.0.6",
2690 | "update-browserslist-db": "^1.0.9"
2691 | }
2692 | },
2693 | "camelcase-css": {
2694 | "version": "2.0.1",
2695 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
2696 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
2697 | "dev": true
2698 | },
2699 | "caniuse-lite": {
2700 | "version": "1.0.30001414",
2701 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
2702 | "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==",
2703 | "dev": true
2704 | },
2705 | "chalk": {
2706 | "version": "2.4.2",
2707 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2708 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2709 | "dev": true,
2710 | "requires": {
2711 | "ansi-styles": "^3.2.1",
2712 | "escape-string-regexp": "^1.0.5",
2713 | "supports-color": "^5.3.0"
2714 | }
2715 | },
2716 | "chokidar": {
2717 | "version": "3.5.3",
2718 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
2719 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
2720 | "dev": true,
2721 | "requires": {
2722 | "anymatch": "~3.1.2",
2723 | "braces": "~3.0.2",
2724 | "fsevents": "~2.3.2",
2725 | "glob-parent": "~5.1.2",
2726 | "is-binary-path": "~2.1.0",
2727 | "is-glob": "~4.0.1",
2728 | "normalize-path": "~3.0.0",
2729 | "readdirp": "~3.6.0"
2730 | },
2731 | "dependencies": {
2732 | "glob-parent": {
2733 | "version": "5.1.2",
2734 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2735 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2736 | "dev": true,
2737 | "requires": {
2738 | "is-glob": "^4.0.1"
2739 | }
2740 | }
2741 | }
2742 | },
2743 | "color-convert": {
2744 | "version": "1.9.3",
2745 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2746 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2747 | "dev": true,
2748 | "requires": {
2749 | "color-name": "1.1.3"
2750 | }
2751 | },
2752 | "color-name": {
2753 | "version": "1.1.3",
2754 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2755 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
2756 | "dev": true
2757 | },
2758 | "convert-source-map": {
2759 | "version": "1.8.0",
2760 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
2761 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
2762 | "dev": true,
2763 | "requires": {
2764 | "safe-buffer": "~5.1.1"
2765 | }
2766 | },
2767 | "cssesc": {
2768 | "version": "3.0.0",
2769 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2770 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
2771 | "dev": true
2772 | },
2773 | "csstype": {
2774 | "version": "3.1.1",
2775 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
2776 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
2777 | "dev": true
2778 | },
2779 | "debug": {
2780 | "version": "4.3.4",
2781 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2782 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2783 | "dev": true,
2784 | "requires": {
2785 | "ms": "2.1.2"
2786 | }
2787 | },
2788 | "defined": {
2789 | "version": "1.0.0",
2790 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
2791 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
2792 | "dev": true
2793 | },
2794 | "detective": {
2795 | "version": "5.2.1",
2796 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
2797 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
2798 | "dev": true,
2799 | "requires": {
2800 | "acorn-node": "^1.8.2",
2801 | "defined": "^1.0.0",
2802 | "minimist": "^1.2.6"
2803 | }
2804 | },
2805 | "didyoumean": {
2806 | "version": "1.2.2",
2807 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
2808 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
2809 | "dev": true
2810 | },
2811 | "dlv": {
2812 | "version": "1.1.3",
2813 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
2814 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
2815 | "dev": true
2816 | },
2817 | "electron-to-chromium": {
2818 | "version": "1.4.270",
2819 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
2820 | "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==",
2821 | "dev": true
2822 | },
2823 | "esbuild": {
2824 | "version": "0.15.10",
2825 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz",
2826 | "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==",
2827 | "dev": true,
2828 | "requires": {
2829 | "@esbuild/android-arm": "0.15.10",
2830 | "@esbuild/linux-loong64": "0.15.10",
2831 | "esbuild-android-64": "0.15.10",
2832 | "esbuild-android-arm64": "0.15.10",
2833 | "esbuild-darwin-64": "0.15.10",
2834 | "esbuild-darwin-arm64": "0.15.10",
2835 | "esbuild-freebsd-64": "0.15.10",
2836 | "esbuild-freebsd-arm64": "0.15.10",
2837 | "esbuild-linux-32": "0.15.10",
2838 | "esbuild-linux-64": "0.15.10",
2839 | "esbuild-linux-arm": "0.15.10",
2840 | "esbuild-linux-arm64": "0.15.10",
2841 | "esbuild-linux-mips64le": "0.15.10",
2842 | "esbuild-linux-ppc64le": "0.15.10",
2843 | "esbuild-linux-riscv64": "0.15.10",
2844 | "esbuild-linux-s390x": "0.15.10",
2845 | "esbuild-netbsd-64": "0.15.10",
2846 | "esbuild-openbsd-64": "0.15.10",
2847 | "esbuild-sunos-64": "0.15.10",
2848 | "esbuild-windows-32": "0.15.10",
2849 | "esbuild-windows-64": "0.15.10",
2850 | "esbuild-windows-arm64": "0.15.10"
2851 | }
2852 | },
2853 | "esbuild-android-64": {
2854 | "version": "0.15.10",
2855 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz",
2856 | "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==",
2857 | "dev": true,
2858 | "optional": true
2859 | },
2860 | "esbuild-android-arm64": {
2861 | "version": "0.15.10",
2862 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz",
2863 | "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==",
2864 | "dev": true,
2865 | "optional": true
2866 | },
2867 | "esbuild-darwin-64": {
2868 | "version": "0.15.10",
2869 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz",
2870 | "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==",
2871 | "dev": true,
2872 | "optional": true
2873 | },
2874 | "esbuild-darwin-arm64": {
2875 | "version": "0.15.10",
2876 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz",
2877 | "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==",
2878 | "dev": true,
2879 | "optional": true
2880 | },
2881 | "esbuild-freebsd-64": {
2882 | "version": "0.15.10",
2883 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz",
2884 | "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==",
2885 | "dev": true,
2886 | "optional": true
2887 | },
2888 | "esbuild-freebsd-arm64": {
2889 | "version": "0.15.10",
2890 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz",
2891 | "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==",
2892 | "dev": true,
2893 | "optional": true
2894 | },
2895 | "esbuild-linux-32": {
2896 | "version": "0.15.10",
2897 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz",
2898 | "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==",
2899 | "dev": true,
2900 | "optional": true
2901 | },
2902 | "esbuild-linux-64": {
2903 | "version": "0.15.10",
2904 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz",
2905 | "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==",
2906 | "dev": true,
2907 | "optional": true
2908 | },
2909 | "esbuild-linux-arm": {
2910 | "version": "0.15.10",
2911 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz",
2912 | "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==",
2913 | "dev": true,
2914 | "optional": true
2915 | },
2916 | "esbuild-linux-arm64": {
2917 | "version": "0.15.10",
2918 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz",
2919 | "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==",
2920 | "dev": true,
2921 | "optional": true
2922 | },
2923 | "esbuild-linux-mips64le": {
2924 | "version": "0.15.10",
2925 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz",
2926 | "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==",
2927 | "dev": true,
2928 | "optional": true
2929 | },
2930 | "esbuild-linux-ppc64le": {
2931 | "version": "0.15.10",
2932 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz",
2933 | "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==",
2934 | "dev": true,
2935 | "optional": true
2936 | },
2937 | "esbuild-linux-riscv64": {
2938 | "version": "0.15.10",
2939 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz",
2940 | "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==",
2941 | "dev": true,
2942 | "optional": true
2943 | },
2944 | "esbuild-linux-s390x": {
2945 | "version": "0.15.10",
2946 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz",
2947 | "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==",
2948 | "dev": true,
2949 | "optional": true
2950 | },
2951 | "esbuild-netbsd-64": {
2952 | "version": "0.15.10",
2953 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz",
2954 | "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==",
2955 | "dev": true,
2956 | "optional": true
2957 | },
2958 | "esbuild-openbsd-64": {
2959 | "version": "0.15.10",
2960 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz",
2961 | "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==",
2962 | "dev": true,
2963 | "optional": true
2964 | },
2965 | "esbuild-sunos-64": {
2966 | "version": "0.15.10",
2967 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz",
2968 | "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==",
2969 | "dev": true,
2970 | "optional": true
2971 | },
2972 | "esbuild-windows-32": {
2973 | "version": "0.15.10",
2974 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz",
2975 | "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==",
2976 | "dev": true,
2977 | "optional": true
2978 | },
2979 | "esbuild-windows-64": {
2980 | "version": "0.15.10",
2981 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz",
2982 | "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==",
2983 | "dev": true,
2984 | "optional": true
2985 | },
2986 | "esbuild-windows-arm64": {
2987 | "version": "0.15.10",
2988 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz",
2989 | "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==",
2990 | "dev": true,
2991 | "optional": true
2992 | },
2993 | "escalade": {
2994 | "version": "3.1.1",
2995 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2996 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2997 | "dev": true
2998 | },
2999 | "escape-string-regexp": {
3000 | "version": "1.0.5",
3001 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3002 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
3003 | "dev": true
3004 | },
3005 | "fast-glob": {
3006 | "version": "3.2.12",
3007 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
3008 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
3009 | "dev": true,
3010 | "requires": {
3011 | "@nodelib/fs.stat": "^2.0.2",
3012 | "@nodelib/fs.walk": "^1.2.3",
3013 | "glob-parent": "^5.1.2",
3014 | "merge2": "^1.3.0",
3015 | "micromatch": "^4.0.4"
3016 | },
3017 | "dependencies": {
3018 | "glob-parent": {
3019 | "version": "5.1.2",
3020 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
3021 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
3022 | "dev": true,
3023 | "requires": {
3024 | "is-glob": "^4.0.1"
3025 | }
3026 | }
3027 | }
3028 | },
3029 | "fastq": {
3030 | "version": "1.13.0",
3031 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
3032 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
3033 | "dev": true,
3034 | "requires": {
3035 | "reusify": "^1.0.4"
3036 | }
3037 | },
3038 | "fill-range": {
3039 | "version": "7.0.1",
3040 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
3041 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
3042 | "dev": true,
3043 | "requires": {
3044 | "to-regex-range": "^5.0.1"
3045 | }
3046 | },
3047 | "fraction.js": {
3048 | "version": "4.2.0",
3049 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
3050 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
3051 | "dev": true
3052 | },
3053 | "fsevents": {
3054 | "version": "2.3.2",
3055 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
3056 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
3057 | "dev": true,
3058 | "optional": true
3059 | },
3060 | "function-bind": {
3061 | "version": "1.1.1",
3062 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3063 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
3064 | "dev": true
3065 | },
3066 | "gensync": {
3067 | "version": "1.0.0-beta.2",
3068 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
3069 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
3070 | "dev": true
3071 | },
3072 | "glob-parent": {
3073 | "version": "6.0.2",
3074 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
3075 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
3076 | "dev": true,
3077 | "requires": {
3078 | "is-glob": "^4.0.3"
3079 | }
3080 | },
3081 | "globals": {
3082 | "version": "11.12.0",
3083 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
3084 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
3085 | "dev": true
3086 | },
3087 | "has": {
3088 | "version": "1.0.3",
3089 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
3090 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
3091 | "dev": true,
3092 | "requires": {
3093 | "function-bind": "^1.1.1"
3094 | }
3095 | },
3096 | "has-flag": {
3097 | "version": "3.0.0",
3098 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
3099 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
3100 | "dev": true
3101 | },
3102 | "is-binary-path": {
3103 | "version": "2.1.0",
3104 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
3105 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
3106 | "dev": true,
3107 | "requires": {
3108 | "binary-extensions": "^2.0.0"
3109 | }
3110 | },
3111 | "is-core-module": {
3112 | "version": "2.10.0",
3113 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
3114 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
3115 | "dev": true,
3116 | "requires": {
3117 | "has": "^1.0.3"
3118 | }
3119 | },
3120 | "is-extglob": {
3121 | "version": "2.1.1",
3122 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
3123 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
3124 | "dev": true
3125 | },
3126 | "is-glob": {
3127 | "version": "4.0.3",
3128 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
3129 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
3130 | "dev": true,
3131 | "requires": {
3132 | "is-extglob": "^2.1.1"
3133 | }
3134 | },
3135 | "is-number": {
3136 | "version": "7.0.0",
3137 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
3138 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
3139 | "dev": true
3140 | },
3141 | "js-tokens": {
3142 | "version": "4.0.0",
3143 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
3144 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
3145 | },
3146 | "jsesc": {
3147 | "version": "2.5.2",
3148 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
3149 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
3150 | "dev": true
3151 | },
3152 | "json5": {
3153 | "version": "2.2.1",
3154 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
3155 | "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
3156 | "dev": true
3157 | },
3158 | "lilconfig": {
3159 | "version": "2.0.6",
3160 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
3161 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
3162 | "dev": true
3163 | },
3164 | "loose-envify": {
3165 | "version": "1.4.0",
3166 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
3167 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
3168 | "requires": {
3169 | "js-tokens": "^3.0.0 || ^4.0.0"
3170 | }
3171 | },
3172 | "magic-string": {
3173 | "version": "0.26.5",
3174 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.5.tgz",
3175 | "integrity": "sha512-yXUIYOOQnEHKHOftp5shMWpB9ImfgfDJpapa38j/qMtTj5QHWucvxP4lUtuRmHT9vAzvtpHkWKXW9xBwimXeNg==",
3176 | "dev": true,
3177 | "requires": {
3178 | "sourcemap-codec": "^1.4.8"
3179 | }
3180 | },
3181 | "merge2": {
3182 | "version": "1.4.1",
3183 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
3184 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
3185 | "dev": true
3186 | },
3187 | "micromatch": {
3188 | "version": "4.0.5",
3189 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
3190 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
3191 | "dev": true,
3192 | "requires": {
3193 | "braces": "^3.0.2",
3194 | "picomatch": "^2.3.1"
3195 | }
3196 | },
3197 | "minimist": {
3198 | "version": "1.2.6",
3199 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
3200 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
3201 | "dev": true
3202 | },
3203 | "ms": {
3204 | "version": "2.1.2",
3205 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3206 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
3207 | "dev": true
3208 | },
3209 | "nanoid": {
3210 | "version": "3.3.4",
3211 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
3212 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
3213 | "dev": true
3214 | },
3215 | "node-releases": {
3216 | "version": "2.0.6",
3217 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
3218 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
3219 | "dev": true
3220 | },
3221 | "normalize-path": {
3222 | "version": "3.0.0",
3223 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3224 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3225 | "dev": true
3226 | },
3227 | "normalize-range": {
3228 | "version": "0.1.2",
3229 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
3230 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
3231 | "dev": true
3232 | },
3233 | "object-hash": {
3234 | "version": "3.0.0",
3235 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3236 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
3237 | "dev": true
3238 | },
3239 | "path-parse": {
3240 | "version": "1.0.7",
3241 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
3242 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
3243 | "dev": true
3244 | },
3245 | "picocolors": {
3246 | "version": "1.0.0",
3247 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3248 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
3249 | "dev": true
3250 | },
3251 | "picomatch": {
3252 | "version": "2.3.1",
3253 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3254 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3255 | "dev": true
3256 | },
3257 | "pify": {
3258 | "version": "2.3.0",
3259 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3260 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
3261 | "dev": true
3262 | },
3263 | "postcss": {
3264 | "version": "8.4.17",
3265 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
3266 | "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
3267 | "dev": true,
3268 | "requires": {
3269 | "nanoid": "^3.3.4",
3270 | "picocolors": "^1.0.0",
3271 | "source-map-js": "^1.0.2"
3272 | }
3273 | },
3274 | "postcss-import": {
3275 | "version": "14.1.0",
3276 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
3277 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
3278 | "dev": true,
3279 | "requires": {
3280 | "postcss-value-parser": "^4.0.0",
3281 | "read-cache": "^1.0.0",
3282 | "resolve": "^1.1.7"
3283 | }
3284 | },
3285 | "postcss-js": {
3286 | "version": "4.0.0",
3287 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
3288 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
3289 | "dev": true,
3290 | "requires": {
3291 | "camelcase-css": "^2.0.1"
3292 | }
3293 | },
3294 | "postcss-load-config": {
3295 | "version": "3.1.4",
3296 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
3297 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
3298 | "dev": true,
3299 | "requires": {
3300 | "lilconfig": "^2.0.5",
3301 | "yaml": "^1.10.2"
3302 | }
3303 | },
3304 | "postcss-nested": {
3305 | "version": "5.0.6",
3306 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
3307 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
3308 | "dev": true,
3309 | "requires": {
3310 | "postcss-selector-parser": "^6.0.6"
3311 | }
3312 | },
3313 | "postcss-selector-parser": {
3314 | "version": "6.0.10",
3315 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
3316 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
3317 | "dev": true,
3318 | "requires": {
3319 | "cssesc": "^3.0.0",
3320 | "util-deprecate": "^1.0.2"
3321 | }
3322 | },
3323 | "postcss-value-parser": {
3324 | "version": "4.2.0",
3325 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3326 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3327 | "dev": true
3328 | },
3329 | "queue-microtask": {
3330 | "version": "1.2.3",
3331 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3332 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
3333 | "dev": true
3334 | },
3335 | "quick-lru": {
3336 | "version": "5.1.1",
3337 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
3338 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
3339 | "dev": true
3340 | },
3341 | "react": {
3342 | "version": "18.2.0",
3343 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
3344 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
3345 | "requires": {
3346 | "loose-envify": "^1.1.0"
3347 | }
3348 | },
3349 | "react-dom": {
3350 | "version": "18.2.0",
3351 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
3352 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
3353 | "requires": {
3354 | "loose-envify": "^1.1.0",
3355 | "scheduler": "^0.23.0"
3356 | }
3357 | },
3358 | "react-refresh": {
3359 | "version": "0.14.0",
3360 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
3361 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
3362 | "dev": true
3363 | },
3364 | "read-cache": {
3365 | "version": "1.0.0",
3366 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
3367 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
3368 | "dev": true,
3369 | "requires": {
3370 | "pify": "^2.3.0"
3371 | }
3372 | },
3373 | "readdirp": {
3374 | "version": "3.6.0",
3375 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3376 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3377 | "dev": true,
3378 | "requires": {
3379 | "picomatch": "^2.2.1"
3380 | }
3381 | },
3382 | "resolve": {
3383 | "version": "1.22.1",
3384 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
3385 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
3386 | "dev": true,
3387 | "requires": {
3388 | "is-core-module": "^2.9.0",
3389 | "path-parse": "^1.0.7",
3390 | "supports-preserve-symlinks-flag": "^1.0.0"
3391 | }
3392 | },
3393 | "reusify": {
3394 | "version": "1.0.4",
3395 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
3396 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
3397 | "dev": true
3398 | },
3399 | "rollup": {
3400 | "version": "2.78.1",
3401 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
3402 | "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
3403 | "dev": true,
3404 | "requires": {
3405 | "fsevents": "~2.3.2"
3406 | }
3407 | },
3408 | "run-parallel": {
3409 | "version": "1.2.0",
3410 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
3411 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
3412 | "dev": true,
3413 | "requires": {
3414 | "queue-microtask": "^1.2.2"
3415 | }
3416 | },
3417 | "safe-buffer": {
3418 | "version": "5.1.2",
3419 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
3420 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
3421 | "dev": true
3422 | },
3423 | "scheduler": {
3424 | "version": "0.23.0",
3425 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
3426 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
3427 | "requires": {
3428 | "loose-envify": "^1.1.0"
3429 | }
3430 | },
3431 | "semver": {
3432 | "version": "6.3.0",
3433 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
3434 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
3435 | "dev": true
3436 | },
3437 | "source-map-js": {
3438 | "version": "1.0.2",
3439 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
3440 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
3441 | "dev": true
3442 | },
3443 | "sourcemap-codec": {
3444 | "version": "1.4.8",
3445 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
3446 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
3447 | "dev": true
3448 | },
3449 | "supports-color": {
3450 | "version": "5.5.0",
3451 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3452 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3453 | "dev": true,
3454 | "requires": {
3455 | "has-flag": "^3.0.0"
3456 | }
3457 | },
3458 | "supports-preserve-symlinks-flag": {
3459 | "version": "1.0.0",
3460 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
3461 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
3462 | "dev": true
3463 | },
3464 | "tailwindcss": {
3465 | "version": "3.1.8",
3466 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
3467 | "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
3468 | "dev": true,
3469 | "requires": {
3470 | "arg": "^5.0.2",
3471 | "chokidar": "^3.5.3",
3472 | "color-name": "^1.1.4",
3473 | "detective": "^5.2.1",
3474 | "didyoumean": "^1.2.2",
3475 | "dlv": "^1.1.3",
3476 | "fast-glob": "^3.2.11",
3477 | "glob-parent": "^6.0.2",
3478 | "is-glob": "^4.0.3",
3479 | "lilconfig": "^2.0.6",
3480 | "normalize-path": "^3.0.0",
3481 | "object-hash": "^3.0.0",
3482 | "picocolors": "^1.0.0",
3483 | "postcss": "^8.4.14",
3484 | "postcss-import": "^14.1.0",
3485 | "postcss-js": "^4.0.0",
3486 | "postcss-load-config": "^3.1.4",
3487 | "postcss-nested": "5.0.6",
3488 | "postcss-selector-parser": "^6.0.10",
3489 | "postcss-value-parser": "^4.2.0",
3490 | "quick-lru": "^5.1.1",
3491 | "resolve": "^1.22.1"
3492 | },
3493 | "dependencies": {
3494 | "color-name": {
3495 | "version": "1.1.4",
3496 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3497 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
3498 | "dev": true
3499 | }
3500 | }
3501 | },
3502 | "to-fast-properties": {
3503 | "version": "2.0.0",
3504 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
3505 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
3506 | "dev": true
3507 | },
3508 | "to-regex-range": {
3509 | "version": "5.0.1",
3510 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3511 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3512 | "dev": true,
3513 | "requires": {
3514 | "is-number": "^7.0.0"
3515 | }
3516 | },
3517 | "typescript": {
3518 | "version": "4.8.4",
3519 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz",
3520 | "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==",
3521 | "dev": true
3522 | },
3523 | "update-browserslist-db": {
3524 | "version": "1.0.9",
3525 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
3526 | "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
3527 | "dev": true,
3528 | "requires": {
3529 | "escalade": "^3.1.1",
3530 | "picocolors": "^1.0.0"
3531 | }
3532 | },
3533 | "util-deprecate": {
3534 | "version": "1.0.2",
3535 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3536 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
3537 | "dev": true
3538 | },
3539 | "vite": {
3540 | "version": "3.1.4",
3541 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.4.tgz",
3542 | "integrity": "sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==",
3543 | "dev": true,
3544 | "requires": {
3545 | "esbuild": "^0.15.6",
3546 | "fsevents": "~2.3.2",
3547 | "postcss": "^8.4.16",
3548 | "resolve": "^1.22.1",
3549 | "rollup": "~2.78.0"
3550 | }
3551 | },
3552 | "xtend": {
3553 | "version": "4.0.2",
3554 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
3555 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
3556 | "dev": true
3557 | },
3558 | "yaml": {
3559 | "version": "1.10.2",
3560 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
3561 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
3562 | "dev": true
3563 | }
3564 | }
3565 | }
3566 |
--------------------------------------------------------------------------------
/write/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "write",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^18.2.0",
13 | "react-dom": "^18.2.0"
14 | },
15 | "devDependencies": {
16 | "@types/react": "^18.0.17",
17 | "@types/react-dom": "^18.0.6",
18 | "@vitejs/plugin-react": "^2.1.0",
19 | "autoprefixer": "^10.4.12",
20 | "postcss": "^8.4.17",
21 | "tailwindcss": "^3.1.8",
22 | "typescript": "^4.6.4",
23 | "vite": "^3.1.0"
24 | }
25 | ,"author":"ebuckley"}
--------------------------------------------------------------------------------
/write/frontend/package.json.md5:
--------------------------------------------------------------------------------
1 | 6960c679bd5bdf4f417a9e19313fa8f5
--------------------------------------------------------------------------------
/write/frontend/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/write/frontend/src/App.css:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/write/frontend/src/App.tsx:
--------------------------------------------------------------------------------
1 | import './App.css'
2 | import {Save, SendMarkdownToRenderer, Open, Export} from "../wailsjs/go/main/App";
3 | import {useRef, useState} from "react";
4 |
5 | function App() {
6 | const [filename, setFileName] = useState('');
7 | const [md, setMd] = useState('');
8 | const ref = useRef(null);
9 | const updateValue = async (event: React.ChangeEvent) => {
10 | const value = event.target.value
11 | const html = await SendMarkdownToRenderer(value)
12 | setMd(html);
13 | }
14 | const newAction = async () => {
15 | if (md.length > 0) {
16 | if (!window.confirm('Are you sure you want to create a new document?')) {
17 | return;
18 | }
19 | }
20 | setMd('');
21 | setFileName('');
22 | if (ref.current) {
23 | ref.current.value = '';
24 | }
25 | }
26 | const saveAction = async () => {
27 | try {
28 | const res = await Save()
29 | alert('saved!' + res);
30 | } catch(e) {
31 | alert('error saving: ' + e);
32 | }
33 |
34 | }
35 | const openAction = async () => {
36 | const res = await Open();
37 | setMd(res.html ?? "")
38 | if (ref.current) {
39 | ref.current.value = res.content ?? "";
40 | }
41 | setFileName(res.name ?? "")
42 | }
43 | const exportAction = async () => {
44 | try {
45 | await Export();
46 | alert('exported! to file');
47 | } catch (e) {
48 | // @ts-ignore shhh!
49 | alert("error: " + e.toString())
50 | }
51 | }
52 | return (
53 |
54 |
55 |
{filename}
56 |
57 |
60 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
81 |
93 |
94 |
95 |
96 |
99 |
111 |
112 |
113 |
114 |
115 |
116 |
119 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
150 |
151 | )
152 | }
153 |
154 | export default App
155 |
--------------------------------------------------------------------------------
/write/frontend/src/assets/wails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/write/frontend/src/assets/wails.png
--------------------------------------------------------------------------------
/write/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer components {
6 | .markdown-content a {
7 | @apply text-blue-500 underline hover:text-blue-700 transition-colors duration-200;
8 | }
9 |
10 | .markdown-content h1 {
11 | @apply text-gray-900 py-2 font-sans font-bold break-normal text-2xl;
12 | }
13 |
14 | .markdown-content pre {
15 | @apply rounded break-words whitespace-pre-wrap font-mono;
16 | }
17 |
18 | .markdown-content p {
19 | @apply pt-3 pb-5;
20 | }
21 |
22 | .markdown-content h2 {
23 | @apply text-gray-900 py-2 font-sans font-bold break-normal text-xl;
24 | }
25 |
26 | .markdown-content blockquote {
27 | @apply border-l-4 border-green-500 italic my-8 pl-8 md:pl-12;
28 | }
29 |
30 | .markdown-content ul {
31 | @apply list-disc list-inside;
32 | }
33 |
34 | .markdown-content li {
35 | @apply pl-3;
36 | }
37 | }
--------------------------------------------------------------------------------
/write/frontend/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7 |
8 |
9 |
10 | )
11 |
--------------------------------------------------------------------------------
/write/frontend/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/write/frontend/tailwind.config.cjs:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./src/**/*.{js,jsx,ts,tsx}",
5 | ],
6 | theme: {
7 | extend: {},
8 | },
9 | plugins: [],
10 | }
11 |
--------------------------------------------------------------------------------
/write/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
6 | "allowJs": false,
7 | "skipLibCheck": true,
8 | "esModuleInterop": false,
9 | "allowSyntheticDefaultImports": true,
10 | "strict": true,
11 | "forceConsistentCasingInFileNames": true,
12 | "module": "ESNext",
13 | "moduleResolution": "Node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src"],
20 | "references": [{ "path": "./tsconfig.node.json" }]
21 | }
22 |
--------------------------------------------------------------------------------
/write/frontend/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/write/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()]
7 | })
8 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/go/main/App.d.ts:
--------------------------------------------------------------------------------
1 | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
2 | // This file is automatically generated. DO NOT EDIT
3 | import {main} from '../models';
4 |
5 | export function Export():Promise;
6 |
7 | export function Open():Promise;
8 |
9 | export function Save():Promise;
10 |
11 | export function SendMarkdownToRenderer(arg1:string):Promise;
12 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/go/main/App.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
3 | // This file is automatically generated. DO NOT EDIT
4 |
5 | export function Export() {
6 | return window['go']['main']['App']['Export']();
7 | }
8 |
9 | export function Open() {
10 | return window['go']['main']['App']['Open']();
11 | }
12 |
13 | export function Save() {
14 | return window['go']['main']['App']['Save']();
15 | }
16 |
17 | export function SendMarkdownToRenderer(arg1) {
18 | return window['go']['main']['App']['SendMarkdownToRenderer'](arg1);
19 | }
20 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/go/models.ts:
--------------------------------------------------------------------------------
1 | export namespace main {
2 |
3 | export class FileWithContent {
4 | name?: string;
5 | content?: string;
6 | html?: string;
7 |
8 | static createFrom(source: any = {}) {
9 | return new FileWithContent(source);
10 | }
11 |
12 | constructor(source: any = {}) {
13 | if ('string' === typeof source) source = JSON.parse(source);
14 | this.name = source["name"];
15 | this.content = source["content"];
16 | this.html = source["html"];
17 | }
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/runtime/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@wailsapp/runtime",
3 | "version": "2.0.0",
4 | "description": "Wails Javascript runtime library",
5 | "main": "runtime.js",
6 | "types": "runtime.d.ts",
7 | "scripts": {
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/wailsapp/wails.git"
12 | },
13 | "keywords": [
14 | "Wails",
15 | "Javascript",
16 | "Go"
17 | ],
18 | "author": "Lea Anthony ",
19 | "license": "MIT",
20 | "bugs": {
21 | "url": "https://github.com/wailsapp/wails/issues"
22 | },
23 | "homepage": "https://github.com/wailsapp/wails#readme"
24 | }
25 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/runtime/runtime.d.ts:
--------------------------------------------------------------------------------
1 | /*
2 | _ __ _ __
3 | | | / /___ _(_) /____
4 | | | /| / / __ `/ / / ___/
5 | | |/ |/ / /_/ / / (__ )
6 | |__/|__/\__,_/_/_/____/
7 | The electron alternative for Go
8 | (c) Lea Anthony 2019-present
9 | */
10 |
11 | export interface Position {
12 | x: number;
13 | y: number;
14 | }
15 |
16 | export interface Size {
17 | w: number;
18 | h: number;
19 | }
20 |
21 | export interface Screen {
22 | isCurrent: boolean;
23 | isPrimary: boolean;
24 | width : number
25 | height : number
26 | }
27 |
28 | // Environment information such as platform, buildtype, ...
29 | export interface EnvironmentInfo {
30 | buildType: string;
31 | platform: string;
32 | arch: string;
33 | }
34 |
35 | // [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit)
36 | // emits the given event. Optional data may be passed with the event.
37 | // This will trigger any event listeners.
38 | export function EventsEmit(eventName: string, ...data: any): void;
39 |
40 | // [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name.
41 | export function EventsOn(eventName: string, callback: (...data: any) => void): () => void;
42 |
43 | // [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple)
44 | // sets up a listener for the given event name, but will only trigger a given number times.
45 | export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void;
46 |
47 | // [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce)
48 | // sets up a listener for the given event name, but will only trigger once.
49 | export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void;
50 |
51 | // [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff)
52 | // unregisters the listener for the given event name.
53 | export function EventsOff(eventName: string, ...additionalEventNames: string[]): void;
54 |
55 | // [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall)
56 | // unregisters all listeners.
57 | export function EventsOffAll(): void;
58 |
59 | // [LogPrint](https://wails.io/docs/reference/runtime/log#logprint)
60 | // logs the given message as a raw message
61 | export function LogPrint(message: string): void;
62 |
63 | // [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace)
64 | // logs the given message at the `trace` log level.
65 | export function LogTrace(message: string): void;
66 |
67 | // [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug)
68 | // logs the given message at the `debug` log level.
69 | export function LogDebug(message: string): void;
70 |
71 | // [LogError](https://wails.io/docs/reference/runtime/log#logerror)
72 | // logs the given message at the `error` log level.
73 | export function LogError(message: string): void;
74 |
75 | // [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal)
76 | // logs the given message at the `fatal` log level.
77 | // The application will quit after calling this method.
78 | export function LogFatal(message: string): void;
79 |
80 | // [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo)
81 | // logs the given message at the `info` log level.
82 | export function LogInfo(message: string): void;
83 |
84 | // [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning)
85 | // logs the given message at the `warning` log level.
86 | export function LogWarning(message: string): void;
87 |
88 | // [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload)
89 | // Forces a reload by the main application as well as connected browsers.
90 | export function WindowReload(): void;
91 |
92 | // [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp)
93 | // Reloads the application frontend.
94 | export function WindowReloadApp(): void;
95 |
96 | // [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop)
97 | // Sets the window AlwaysOnTop or not on top.
98 | export function WindowSetAlwaysOnTop(b: boolean): void;
99 |
100 | // [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme)
101 | // *Windows only*
102 | // Sets window theme to system default (dark/light).
103 | export function WindowSetSystemDefaultTheme(): void;
104 |
105 | // [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme)
106 | // *Windows only*
107 | // Sets window to light theme.
108 | export function WindowSetLightTheme(): void;
109 |
110 | // [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme)
111 | // *Windows only*
112 | // Sets window to dark theme.
113 | export function WindowSetDarkTheme(): void;
114 |
115 | // [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter)
116 | // Centers the window on the monitor the window is currently on.
117 | export function WindowCenter(): void;
118 |
119 | // [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle)
120 | // Sets the text in the window title bar.
121 | export function WindowSetTitle(title: string): void;
122 |
123 | // [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen)
124 | // Makes the window full screen.
125 | export function WindowFullscreen(): void;
126 |
127 | // [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen)
128 | // Restores the previous window dimensions and position prior to full screen.
129 | export function WindowUnfullscreen(): void;
130 |
131 | // [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen)
132 | // Returns the state of the window, i.e. whether the window is in full screen mode or not.
133 | export function WindowIsFullscreen(): Promise;
134 |
135 | // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize)
136 | // Sets the width and height of the window.
137 | export function WindowSetSize(width: number, height: number): Promise;
138 |
139 | // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize)
140 | // Gets the width and height of the window.
141 | export function WindowGetSize(): Promise;
142 |
143 | // [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize)
144 | // Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions.
145 | // Setting a size of 0,0 will disable this constraint.
146 | export function WindowSetMaxSize(width: number, height: number): void;
147 |
148 | // [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize)
149 | // Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions.
150 | // Setting a size of 0,0 will disable this constraint.
151 | export function WindowSetMinSize(width: number, height: number): void;
152 |
153 | // [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition)
154 | // Sets the window position relative to the monitor the window is currently on.
155 | export function WindowSetPosition(x: number, y: number): void;
156 |
157 | // [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition)
158 | // Gets the window position relative to the monitor the window is currently on.
159 | export function WindowGetPosition(): Promise;
160 |
161 | // [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide)
162 | // Hides the window.
163 | export function WindowHide(): void;
164 |
165 | // [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow)
166 | // Shows the window, if it is currently hidden.
167 | export function WindowShow(): void;
168 |
169 | // [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise)
170 | // Maximises the window to fill the screen.
171 | export function WindowMaximise(): void;
172 |
173 | // [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise)
174 | // Toggles between Maximised and UnMaximised.
175 | export function WindowToggleMaximise(): void;
176 |
177 | // [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise)
178 | // Restores the window to the dimensions and position prior to maximising.
179 | export function WindowUnmaximise(): void;
180 |
181 | // [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised)
182 | // Returns the state of the window, i.e. whether the window is maximised or not.
183 | export function WindowIsMaximised(): Promise;
184 |
185 | // [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise)
186 | // Minimises the window.
187 | export function WindowMinimise(): void;
188 |
189 | // [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise)
190 | // Restores the window to the dimensions and position prior to minimising.
191 | export function WindowUnminimise(): void;
192 |
193 | // [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised)
194 | // Returns the state of the window, i.e. whether the window is minimised or not.
195 | export function WindowIsMinimised(): Promise;
196 |
197 | // [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal)
198 | // Returns the state of the window, i.e. whether the window is normal or not.
199 | export function WindowIsNormal(): Promise;
200 |
201 | // [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour)
202 | // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels.
203 | export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void;
204 |
205 | // [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall)
206 | // Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system.
207 | export function ScreenGetAll(): Promise;
208 |
209 | // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl)
210 | // Opens the given URL in the system browser.
211 | export function BrowserOpenURL(url: string): void;
212 |
213 | // [Environment](https://wails.io/docs/reference/runtime/intro#environment)
214 | // Returns information about the environment
215 | export function Environment(): Promise;
216 |
217 | // [Quit](https://wails.io/docs/reference/runtime/intro#quit)
218 | // Quits the application.
219 | export function Quit(): void;
220 |
221 | // [Hide](https://wails.io/docs/reference/runtime/intro#hide)
222 | // Hides the application.
223 | export function Hide(): void;
224 |
225 | // [Show](https://wails.io/docs/reference/runtime/intro#show)
226 | // Shows the application.
227 | export function Show(): void;
228 |
229 | // [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext)
230 | // Returns the current text stored on clipboard
231 | export function ClipboardGetText(): Promise;
232 |
233 | // [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext)
234 | // Sets a text on the clipboard
235 | export function ClipboardSetText(text: string): Promise;
236 |
--------------------------------------------------------------------------------
/write/frontend/wailsjs/runtime/runtime.js:
--------------------------------------------------------------------------------
1 | /*
2 | _ __ _ __
3 | | | / /___ _(_) /____
4 | | | /| / / __ `/ / / ___/
5 | | |/ |/ / /_/ / / (__ )
6 | |__/|__/\__,_/_/_/____/
7 | The electron alternative for Go
8 | (c) Lea Anthony 2019-present
9 | */
10 |
11 | export function LogPrint(message) {
12 | window.runtime.LogPrint(message);
13 | }
14 |
15 | export function LogTrace(message) {
16 | window.runtime.LogTrace(message);
17 | }
18 |
19 | export function LogDebug(message) {
20 | window.runtime.LogDebug(message);
21 | }
22 |
23 | export function LogInfo(message) {
24 | window.runtime.LogInfo(message);
25 | }
26 |
27 | export function LogWarning(message) {
28 | window.runtime.LogWarning(message);
29 | }
30 |
31 | export function LogError(message) {
32 | window.runtime.LogError(message);
33 | }
34 |
35 | export function LogFatal(message) {
36 | window.runtime.LogFatal(message);
37 | }
38 |
39 | export function EventsOnMultiple(eventName, callback, maxCallbacks) {
40 | return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks);
41 | }
42 |
43 | export function EventsOn(eventName, callback) {
44 | return EventsOnMultiple(eventName, callback, -1);
45 | }
46 |
47 | export function EventsOff(eventName, ...additionalEventNames) {
48 | return window.runtime.EventsOff(eventName, ...additionalEventNames);
49 | }
50 |
51 | export function EventsOnce(eventName, callback) {
52 | return EventsOnMultiple(eventName, callback, 1);
53 | }
54 |
55 | export function EventsEmit(eventName) {
56 | let args = [eventName].slice.call(arguments);
57 | return window.runtime.EventsEmit.apply(null, args);
58 | }
59 |
60 | export function WindowReload() {
61 | window.runtime.WindowReload();
62 | }
63 |
64 | export function WindowReloadApp() {
65 | window.runtime.WindowReloadApp();
66 | }
67 |
68 | export function WindowSetAlwaysOnTop(b) {
69 | window.runtime.WindowSetAlwaysOnTop(b);
70 | }
71 |
72 | export function WindowSetSystemDefaultTheme() {
73 | window.runtime.WindowSetSystemDefaultTheme();
74 | }
75 |
76 | export function WindowSetLightTheme() {
77 | window.runtime.WindowSetLightTheme();
78 | }
79 |
80 | export function WindowSetDarkTheme() {
81 | window.runtime.WindowSetDarkTheme();
82 | }
83 |
84 | export function WindowCenter() {
85 | window.runtime.WindowCenter();
86 | }
87 |
88 | export function WindowSetTitle(title) {
89 | window.runtime.WindowSetTitle(title);
90 | }
91 |
92 | export function WindowFullscreen() {
93 | window.runtime.WindowFullscreen();
94 | }
95 |
96 | export function WindowUnfullscreen() {
97 | window.runtime.WindowUnfullscreen();
98 | }
99 |
100 | export function WindowIsFullscreen() {
101 | return window.runtime.WindowIsFullscreen();
102 | }
103 |
104 | export function WindowGetSize() {
105 | return window.runtime.WindowGetSize();
106 | }
107 |
108 | export function WindowSetSize(width, height) {
109 | window.runtime.WindowSetSize(width, height);
110 | }
111 |
112 | export function WindowSetMaxSize(width, height) {
113 | window.runtime.WindowSetMaxSize(width, height);
114 | }
115 |
116 | export function WindowSetMinSize(width, height) {
117 | window.runtime.WindowSetMinSize(width, height);
118 | }
119 |
120 | export function WindowSetPosition(x, y) {
121 | window.runtime.WindowSetPosition(x, y);
122 | }
123 |
124 | export function WindowGetPosition() {
125 | return window.runtime.WindowGetPosition();
126 | }
127 |
128 | export function WindowHide() {
129 | window.runtime.WindowHide();
130 | }
131 |
132 | export function WindowShow() {
133 | window.runtime.WindowShow();
134 | }
135 |
136 | export function WindowMaximise() {
137 | window.runtime.WindowMaximise();
138 | }
139 |
140 | export function WindowToggleMaximise() {
141 | window.runtime.WindowToggleMaximise();
142 | }
143 |
144 | export function WindowUnmaximise() {
145 | window.runtime.WindowUnmaximise();
146 | }
147 |
148 | export function WindowIsMaximised() {
149 | return window.runtime.WindowIsMaximised();
150 | }
151 |
152 | export function WindowMinimise() {
153 | window.runtime.WindowMinimise();
154 | }
155 |
156 | export function WindowUnminimise() {
157 | window.runtime.WindowUnminimise();
158 | }
159 |
160 | export function WindowSetBackgroundColour(R, G, B, A) {
161 | window.runtime.WindowSetBackgroundColour(R, G, B, A);
162 | }
163 |
164 | export function ScreenGetAll() {
165 | return window.runtime.ScreenGetAll();
166 | }
167 |
168 | export function WindowIsMinimised() {
169 | return window.runtime.WindowIsMinimised();
170 | }
171 |
172 | export function WindowIsNormal() {
173 | return window.runtime.WindowIsNormal();
174 | }
175 |
176 | export function BrowserOpenURL(url) {
177 | window.runtime.BrowserOpenURL(url);
178 | }
179 |
180 | export function Environment() {
181 | return window.runtime.Environment();
182 | }
183 |
184 | export function Quit() {
185 | window.runtime.Quit();
186 | }
187 |
188 | export function Hide() {
189 | window.runtime.Hide();
190 | }
191 |
192 | export function Show() {
193 | window.runtime.Show();
194 | }
195 |
196 | export function ClipboardGetText() {
197 | return window.runtime.ClipboardGetText();
198 | }
199 |
200 | export function ClipboardSetText(text) {
201 | return window.runtime.ClipboardSetText(text);
202 | }
--------------------------------------------------------------------------------
/write/go.mod:
--------------------------------------------------------------------------------
1 | module changeme
2 |
3 | go 1.18
4 |
5 | require (
6 | github.com/go-pdf/fpdf v0.9.0
7 | github.com/mitchellh/go-homedir v1.1.0
8 | github.com/wailsapp/wails/v2 v2.6.0
9 | github.com/yuin/goldmark v1.4.13
10 | )
11 |
12 | require (
13 | github.com/bep/debounce v1.2.1 // indirect
14 | github.com/go-ole/go-ole v1.2.6 // indirect
15 | github.com/google/uuid v1.3.0 // indirect
16 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect
17 | github.com/labstack/echo/v4 v4.10.2 // indirect
18 | github.com/labstack/gommon v0.4.0 // indirect
19 | github.com/leaanthony/go-ansi-parser v1.6.0 // indirect
20 | github.com/leaanthony/gosod v1.0.3 // indirect
21 | github.com/leaanthony/slicer v1.6.0 // indirect
22 | github.com/mattn/go-colorable v0.1.13 // indirect
23 | github.com/mattn/go-isatty v0.0.19 // indirect
24 | github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
25 | github.com/pkg/errors v0.9.1 // indirect
26 | github.com/rivo/uniseg v0.4.4 // indirect
27 | github.com/samber/lo v1.38.1 // indirect
28 | github.com/tkrajina/go-reflector v0.5.6 // indirect
29 | github.com/valyala/bytebufferpool v1.0.0 // indirect
30 | github.com/valyala/fasttemplate v1.2.2 // indirect
31 | github.com/wailsapp/go-webview2 v1.0.1 // indirect
32 | github.com/wailsapp/mimetype v1.4.1 // indirect
33 | golang.org/x/crypto v0.9.0 // indirect
34 | golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
35 | golang.org/x/net v0.10.0 // indirect
36 | golang.org/x/sys v0.8.0 // indirect
37 | golang.org/x/text v0.9.0 // indirect
38 | )
39 |
40 | // replace github.com/wailsapp/wails/v2 v2.6.0 => /home/ersin/go/pkg/mod
41 |
--------------------------------------------------------------------------------
/write/go.sum:
--------------------------------------------------------------------------------
1 | github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY=
2 | github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
3 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6 | github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
7 | github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
8 | github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw=
9 | github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y=
10 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
11 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
12 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck=
13 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs=
14 | github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M=
15 | github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k=
16 | github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
17 | github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
18 | github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc=
19 | github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA=
20 | github.com/leaanthony/go-ansi-parser v1.6.0 h1:T8TuMhFB6TUMIUm0oRrSbgJudTFw9csT3ZK09w0t4Pg=
21 | github.com/leaanthony/go-ansi-parser v1.6.0/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU=
22 | github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ=
23 | github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4=
24 | github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY=
25 | github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js=
26 | github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8=
27 | github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
28 | github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
29 | github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
30 | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
31 | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
32 | github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
33 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
34 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
35 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
36 | github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
37 | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
38 | github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
39 | github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
40 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
41 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
42 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
43 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
44 | github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
45 | github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
46 | github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
47 | github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
48 | github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
49 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
50 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
51 | github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
52 | github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE=
53 | github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4=
54 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
55 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
56 | github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
57 | github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
58 | github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
59 | github.com/wailsapp/go-webview2 v1.0.1 h1:dEJIeEApW/MhO2tTMISZBFZPuW7kwrFA1NtgFB1z1II=
60 | github.com/wailsapp/go-webview2 v1.0.1/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo=
61 | github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs=
62 | github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o=
63 | github.com/wailsapp/wails/v2 v2.6.0 h1:EyH0zR/EO6dDiqNy8qU5spaXDfkluiq77xrkabPYD4c=
64 | github.com/wailsapp/wails/v2 v2.6.0/go.mod h1:WBG9KKWuw0FKfoepBrr/vRlyTmHaMibWesK3yz6nNiM=
65 | github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
66 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
67 | golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
68 | golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
69 | golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
70 | golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
71 | golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
72 | golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
73 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
74 | golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
75 | golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
76 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
77 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
78 | golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
79 | golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
80 | golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
81 | golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
82 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
83 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
84 | golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
85 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
86 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
87 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
88 | golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
89 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
90 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
91 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
92 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
93 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
94 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
95 |
--------------------------------------------------------------------------------
/write/lib/markdown.go:
--------------------------------------------------------------------------------
1 | package lib
2 |
3 | import (
4 | "bytes"
5 | "github.com/yuin/goldmark"
6 | "log/slog"
7 | )
8 |
9 | func renderMD(md []byte) ([]byte, error) {
10 | var buf bytes.Buffer
11 | if err := goldmark.Convert(md, &buf); err != nil {
12 | return nil, err
13 | }
14 | return buf.Bytes(), nil
15 | }
16 |
17 | func RenderMD(md string) string {
18 | m, err := renderMD([]byte(md))
19 | if err != nil {
20 | slog.Error("Fatal error parsing markdown", "err", err)
21 | return md
22 | }
23 | return `` + string(m) + `
`
24 | }
25 |
--------------------------------------------------------------------------------
/write/lib/pdf.go:
--------------------------------------------------------------------------------
1 | package lib
2 |
3 | import (
4 | "github.com/go-pdf/fpdf"
5 | "github.com/yuin/goldmark"
6 | "github.com/yuin/goldmark/ast"
7 | "github.com/yuin/goldmark/renderer"
8 | "io"
9 | )
10 |
11 | type rFunc func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error)
12 | type pdfRenderer struct {
13 | pdf *fpdf.Fpdf
14 | renderFuncs map[ast.NodeKind]rFunc
15 | }
16 |
17 | func (p *pdfRenderer) Render(w io.Writer, source []byte, n ast.Node) error {
18 |
19 | n.Dump(source, 2)
20 | err := ast.Walk(n, func(n ast.Node, entering bool) (ast.WalkStatus, error) {
21 | s := ast.WalkStatus(ast.WalkContinue)
22 | if cb, ok := p.renderFuncs[n.Kind()]; ok {
23 | return cb(source, n, entering)
24 | }
25 | return s, nil
26 | })
27 | return err
28 | }
29 |
30 | func (p *pdfRenderer) AddOptions(option ...renderer.Option) {
31 | //TODO implement me
32 | panic("implement me")
33 | }
34 |
35 | const p1 = 12
36 | const baseHeight = 6
37 | const fontSize = 14
38 |
39 | func Pdf(path string, content string) error {
40 |
41 | pdf := fpdf.New("P", "mm", "A4", "")
42 | pdf.AddPage()
43 |
44 | lineIndentLevel := 0
45 |
46 | baseMargin := pdf.GetX()
47 |
48 | renderFuncs := map[ast.NodeKind]rFunc{
49 | ast.KindHeading: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
50 | hd := node.(*ast.Heading)
51 | sizeMap := map[int]float64{
52 | 1: 24,
53 | 2: 18,
54 | 3: 16,
55 | 4: 14,
56 | }
57 | if entering {
58 | pdf.SetFont("Arial", "", sizeMap[hd.Level])
59 | pdf.MultiCell(0, baseHeight, string(node.Text(source)), "", "", false)
60 | } else {
61 | pdf.MultiCell(0, p1, "", "", "", false)
62 | pdf.SetFont("Arial", "", fontSize)
63 | }
64 | return ast.WalkSkipChildren, nil
65 | },
66 | ast.KindLink: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
67 | if entering {
68 | // TODO make link clickable
69 | pdf.SetTextColor(0, 0, 255)
70 | pdf.SetFont("Arial", "U", fontSize)
71 | href := node.(*ast.Link).Destination
72 | pdf.WriteLinkString(baseHeight, string(node.Text(source)), string(href))
73 | } else {
74 | pdf.SetTextColor(0, 0, 0)
75 | pdf.SetFont("Arial", "", fontSize)
76 | }
77 | return ast.WalkSkipChildren, nil
78 | },
79 | ast.KindText: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
80 | if entering {
81 | pdf.Write(baseHeight, string(node.Text(source)))
82 | }
83 | return ast.WalkSkipChildren, nil
84 | },
85 | ast.KindParagraph: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
86 | if !entering {
87 | pdf.MultiCell(0, p1, "", "", "", false)
88 | }
89 | return ast.WalkContinue, nil
90 | },
91 | ast.KindCodeBlock: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
92 | if entering {
93 | pdf.SetFont("Courier", "", fontSize)
94 | pdf.MultiCell(0, p1, "", "", "", false)
95 | pdf.MultiCell(0, baseHeight, string(node.Text(source)), "", "", false)
96 | pdf.MultiCell(0, p1, "", "", "", false)
97 | }
98 | return ast.WalkContinue, nil
99 | },
100 | ast.KindList: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
101 | if entering {
102 | // if it's previous sibling is a paragraph then delete that paragraph margin!!
103 | if node.PreviousSibling() != nil && node.PreviousSibling().Kind() == ast.KindParagraph {
104 | pdf.SetY(pdf.GetY() - 1.5*baseHeight)
105 | }
106 | lineIndentLevel += 1
107 | } else {
108 | pdf.Ln(baseHeight)
109 | pdf.SetLeftMargin(baseMargin)
110 | lineIndentLevel -= 1
111 | }
112 | return ast.WalkContinue, nil
113 | },
114 | ast.KindListItem: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
115 | if entering {
116 | pdf.Ln(baseHeight)
117 | pdf.SetLeftMargin(baseMargin + float64(lineIndentLevel)*2)
118 | pdf.Write(baseHeight, "- ")
119 | }
120 | return ast.WalkContinue, nil
121 | },
122 | ast.KindFencedCodeBlock: func(source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
123 | if entering {
124 | // y u no text content?? :(:(
125 | cd := node.(*ast.FencedCodeBlock)
126 | txt := string(cd.Info.Text(source))
127 | // TODO make text content render properly...
128 | pdf.SetFont("Courier", "", fontSize)
129 | pdf.MultiCell(0, p1, "", "", "", false)
130 | pdf.MultiCell(0, baseHeight, txt, "", "", false)
131 | pdf.MultiCell(0, p1, "", "", "", false)
132 | }
133 | return ast.WalkContinue, nil
134 | },
135 | }
136 | rdr := goldmark.New(goldmark.WithRenderer(&pdfRenderer{pdf, renderFuncs}))
137 |
138 | var wr io.Writer
139 | err := rdr.Convert([]byte(content), wr)
140 | if err != nil {
141 | return err
142 | }
143 | err = pdf.OutputFileAndClose(path)
144 | return err
145 | }
146 |
--------------------------------------------------------------------------------
/write/lib/pdf_test.go:
--------------------------------------------------------------------------------
1 | package lib
2 |
3 | import (
4 | "os"
5 | "path"
6 | "runtime"
7 | "testing"
8 | )
9 |
10 | func TestPDF(t *testing.T) {
11 | _, filename, _, _ := runtime.Caller(0)
12 | testDir := path.Dir(filename) + "/test/"
13 | testFile := testDir + "test.pdf"
14 | testInput := testDir + "test.md"
15 | t.Logf("Current test filename: %s", testFile)
16 | testContent, err := os.ReadFile(testInput)
17 | if err != nil {
18 | t.Fatal("Error reading test file", err)
19 | }
20 |
21 | err = Pdf(testFile, string(testContent))
22 | if err != nil {
23 | t.Fatal("Error creating PDF", err)
24 | }
25 | }
26 |
27 | func TestReadmePDF(t *testing.T) {
28 | _, filename, _, _ := runtime.Caller(0)
29 | testDir := path.Dir(filename) + "/../../"
30 | testFile := testDir + "README.pdf"
31 | testInput := testDir + "README.md"
32 | t.Logf("Current test filename: %s", testFile)
33 | testContent, err := os.ReadFile(testInput)
34 | if err != nil {
35 | t.Fatal("Error reading test file", err)
36 | }
37 |
38 | err = Pdf(testFile, string(testContent))
39 | if err != nil {
40 | t.Fatal("Error creating PDF", err)
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/write/lib/test/test.md:
--------------------------------------------------------------------------------
1 | # Hello world
2 |
3 | This is some test content. I am enjoying the search engine [kagi](https://kagi.com) btw. It is really cool how it provides a subtly different window into the internet as opposed to google/bing. DuckDuckGo became to samey, and that sucks. I'm really leaning towards paying for search!
4 |
5 | There are many paragraphs of varying sizes and importances. The stuff I want to work with mostly are. Links, Lists, Code Blocks and paragraphs.
6 | If I could do all that, I would be legit chuffed with this scuffed implementation of a pdf renderer using fpdf
7 |
8 | Features needed:
9 | - links [the ruby doco](https://news.ycombinator.com/item?id=38248421)
10 | - paragraphs
11 | - headings
12 | - lists
13 | - nested
14 | - numbered
15 | - styles? Well, glad you asked. I'm not sure I need them quite yet, but I would be open to extension
16 | - code blocks
17 | - images
18 | - blockquotes!!!
19 |
20 |
21 | Why am I implementing this now?
22 |
23 |
24 | ```javascript
25 |
26 | const js = 'this is a js example, but it will probably show up as a plain old unhighlighted text..';
27 |
28 | const plan = () => {
29 | console.log(js);
30 | }
31 | ```
32 |
33 | > Albert Einstein once described his rules of work: “One: Out of clutter, find simplicity. Two: From discord, find harmony. Three: In the middle of difficulty lies opportunity.
34 |
35 |
36 |
37 | The Lakotas concept of teamwork was deeply rooted in their view of the universe. A warrior didn’t try to stand out from his fellow band members; he strove to act bravely and honorably, to help the group in whatever way he could to accomplish its mission.
38 | ― Phil Jackson, Sacred Hoops: Spiritual Lessons of a Hardwood Warrior
39 |
40 |
41 |
42 | Cloud apps like Google Docs and Trello are popular because they enable real-time collaboration with colleagues, and they make it easy for us to access our work from all of our devices. However, by centralizing data storage on servers, cloud apps also take away ownership and agency from users. If a service shuts down, the software stops functioning, and data created with that software is lost.
43 |
44 | In this article we propose “local-first software”: a set of principles for software that enables both collaboration and ownership for users. Local-first ideals include the ability to work offline and collaborate across multiple devices, while also improving the security, privacy, long-term preservation, and user control of data.
45 |
46 | We survey existing approaches to data storage and sharing, ranging from email attachments to web apps to Firebase-backed mobile apps, and we examine the trade-offs of each. We look at Conflict-free Replicated Data Types (CRDTs): data structures that are multi-user from the ground up while also being fundamentally local and private. CRDTs have the potential to be a foundational technology for realizing local-first software.
47 |
48 | We share some of our findings from developing local-first software prototypes at Ink & Switch over the course of several years. These experiments test the viability of CRDTs in practice, and explore the user interface challenges for this new data model. Lastly, we suggest some next steps for moving towards local-first software: for researchers, for app developers, and a startup opportunity for entrepreneurs.
49 |
50 | This article has also been published in PDF format in the proceedings of the Onward! 2019 conference. Please cite it as:
--------------------------------------------------------------------------------
/write/lib/test/test.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/write/lib/test/test.pdf
--------------------------------------------------------------------------------
/write/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "embed"
5 |
6 | "github.com/wailsapp/wails/v2"
7 | "github.com/wailsapp/wails/v2/pkg/options"
8 | )
9 |
10 | //go:embed all:frontend/dist
11 | var assets embed.FS
12 |
13 | //go:embed build/appicon.png
14 | var icon []byte
15 |
16 | func main() {
17 | // Create an instance of the app structure
18 | app := NewApp()
19 |
20 | // Create application with options
21 | err := wails.Run(&options.App{
22 | Title: "wails-events",
23 | Width: 1024,
24 | Height: 768,
25 | Assets: assets,
26 | BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
27 | OnStartup: app.startup,
28 | Bind: []interface{}{
29 | app,
30 | },
31 | })
32 |
33 | if err != nil {
34 | println("Error:", err.Error())
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/write/scripts/build-macos-arm.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Start building the app for macos platform..."
7 | wails build --clean --platform darwin/arm64
8 |
9 | echo -e "End running the script!"
10 |
--------------------------------------------------------------------------------
/write/scripts/build-macos-intel.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Start building the app for macos platform..."
7 | wails build --clean --platform darwin
8 |
9 | echo -e "End running the script!"
10 |
--------------------------------------------------------------------------------
/write/scripts/build-macos.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Start building the app for macos platform..."
7 | wails build --clean --platform darwin/universal
8 |
9 | echo -e "End running the script!"
10 |
--------------------------------------------------------------------------------
/write/scripts/build-windows.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Start building the app for windows platform..."
7 | wails build --clean --platform windows/amd64
8 |
9 | echo -e "End running the script!"
10 |
--------------------------------------------------------------------------------
/write/scripts/build.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Start building the app..."
7 | wails build --clean
8 |
9 | echo -e "End running the script!"
10 |
--------------------------------------------------------------------------------
/write/scripts/install-wails-cli.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | echo -e "Start running the script..."
4 | cd ../
5 |
6 | echo -e "Current Go version: \c"
7 | go version
8 |
9 | echo -e "Install the Wails command line tool..."
10 | go install github.com/wailsapp/wails/v2/cmd/wails@latest
11 |
12 | echo -e "Successful installation!"
13 |
14 | echo -e "End running the script!"
15 |
--------------------------------------------------------------------------------
/write/tmp/main:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ebuckley/write/335bc096973f3b5a368e0257c1ffcd053a6c513c/write/tmp/main
--------------------------------------------------------------------------------
/write/wails.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "write",
3 | "outputfilename": "write",
4 | "frontend:install": "npm install",
5 | "frontend:build": "npm run build",
6 | "frontend:dev:watcher": "npm run dev",
7 | "frontend:dev:serverUrl": "auto",
8 | "author": {
9 | "name": "ebuckley",
10 | "email": "ersinbuckley@gmail.com"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------