59 | Intro 60 |
61 |├── .env.local ├── .gitignore ├── LICENSE.txt ├── README.md ├── client ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── src │ ├── css │ │ └── style.css │ ├── fonts │ │ ├── Montserrat-Black.ttf │ │ ├── Montserrat-BlackItalic.ttf │ │ ├── Montserrat-Bold.ttf │ │ ├── Montserrat-BoldItalic.ttf │ │ ├── Montserrat-ExtraBold.ttf │ │ ├── Montserrat-ExtraBoldItalic.ttf │ │ ├── Montserrat-ExtraLight.ttf │ │ ├── Montserrat-ExtraLightItalic.ttf │ │ ├── Montserrat-Italic.ttf │ │ ├── Montserrat-Light.ttf │ │ ├── Montserrat-LightItalic.ttf │ │ ├── Montserrat-Medium.ttf │ │ ├── Montserrat-MediumItalic.ttf │ │ ├── Montserrat-Regular.ttf │ │ ├── Montserrat-SemiBold.ttf │ │ ├── Montserrat-SemiBoldItalic.ttf │ │ ├── Montserrat-Thin.ttf │ │ └── Montserrat-ThinItalic.ttf │ └── index.ts ├── tailwind.config.js ├── tsconfig.json └── vite.config.js ├── cmd ├── boot │ └── config.go └── server │ └── main.go ├── go.mod ├── go.sum ├── gomon.config.yml ├── internal ├── handlers │ ├── auth.go │ └── home.go ├── model │ └── user.go └── store │ └── sqlite3.go ├── static └── images │ ├── logo.png │ └── logos.jpg └── views ├── home.templ ├── home_templ.go ├── navbar.templ └── navbar_templ.go /.env.local: -------------------------------------------------------------------------------- 1 | PORT=8080 2 | DATABASE_URL=file:data/app.db?cache=shared&mode=rwc -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | data 2 | vendor 3 | node_modules 4 | .gomon 5 | .vscode 6 | *.log 7 | static/dist/* -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 John Dudmesh 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # go-htmx-template 2 | 3 | This is a skeleton app using Go/Echo/Templ/sqlx in the backend and HTMX/AlpineJS/Tailwind/Vite in the frontend. 4 | 5 | ## Getting Started 6 | 7 | * Copy the project to your local machine. 8 | * Run `go mod tidy` to download the dependencies. 9 | * In the client dir run `pnpm install` to download the client dependencies. 10 | * Run `pnpm run build` to build the client bundle. 11 | * Run `go run cmd/server/main.go` to start the server. 12 | * The [gomon](https://github.com/jdudmesh/gomon) client is included so you can run `gomon` to start the server and have it automatically restart when you make changes. 13 | 14 | ## Features 15 | 16 | * There is a separate `client` folder containing all of the client dependencies. The client bundle is built using Vite and copied to the `static/dist` folder along with any other dependencies (e.g. fonts). The contents of this folder are server statically by the Go server using the `/assets` path. To build the client run `pnpm run build` in the client folder. To watch for changes run `pnpm run build:watch`. 17 | * Config object loaded from env vars. 18 | * A simple Sqlite3/sqlx datastore (nothing is implemented beyond opening/closing the connection) 19 | * The home page is rendered at startup and served from memory thereafter. There is an HTMX tag in the navbar which gets the auth buttons (logout or login/signup) from a separate endpoint. 20 | 21 | ## License 22 | 23 | MIT. Have at it. -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "emdr", 3 | "version": "0.1", 4 | "description": "client side for self-emdr", 5 | "license": "Proprietary", 6 | "scripts": { 7 | "dev": "vite", 8 | "build:watch": "vite build --watch", 9 | "build": "vite build", 10 | "lint": "eslint . --ext .ts", 11 | "lint:fix": "eslint . --ext .ts --fix", 12 | "prettier": "prettier --write src/" 13 | }, 14 | "author": "John Dudmesh", 15 | "dependencies": { 16 | "alpinejs": "^3.13.2", 17 | "htmx.org": "^1.9.6", 18 | "zod": "^3.22.4" 19 | }, 20 | "devDependencies": { 21 | "@types/alpinejs": "^3.13.3", 22 | "@typescript-eslint/eslint-plugin": "^6.9.0", 23 | "@typescript-eslint/parser": "^6.9.0", 24 | "daisyui": "^3.9.4", 25 | "eslint": "^8.52.0", 26 | "eslint-config-prettier": "^9.0.0", 27 | "eslint-plugin-prettier": "^5.0.1", 28 | "postcss": "^8.4.31", 29 | "postcss-preset-env": "^9.2.0", 30 | "prettier": "^3.0.3", 31 | "tailwindcss": "^3.3.5", 32 | "typescript": "^5.2.2", 33 | "vite": "^4.5.0" 34 | } 35 | } -------------------------------------------------------------------------------- /client/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | alpinejs: 9 | specifier: ^3.13.2 10 | version: 3.13.2 11 | htmx.org: 12 | specifier: ^1.9.6 13 | version: 1.9.6 14 | zod: 15 | specifier: ^3.22.4 16 | version: 3.22.4 17 | 18 | devDependencies: 19 | '@types/alpinejs': 20 | specifier: ^3.13.3 21 | version: 3.13.3 22 | '@typescript-eslint/eslint-plugin': 23 | specifier: ^6.9.0 24 | version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) 25 | '@typescript-eslint/parser': 26 | specifier: ^6.9.0 27 | version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) 28 | daisyui: 29 | specifier: ^3.9.4 30 | version: 3.9.4 31 | eslint: 32 | specifier: ^8.52.0 33 | version: 8.52.0 34 | eslint-config-prettier: 35 | specifier: ^9.0.0 36 | version: 9.0.0(eslint@8.52.0) 37 | eslint-plugin-prettier: 38 | specifier: ^5.0.1 39 | version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3) 40 | postcss: 41 | specifier: ^8.4.31 42 | version: 8.4.31 43 | postcss-preset-env: 44 | specifier: ^9.2.0 45 | version: 9.2.0(postcss@8.4.31) 46 | prettier: 47 | specifier: ^3.0.3 48 | version: 3.0.3 49 | tailwindcss: 50 | specifier: ^3.3.5 51 | version: 3.3.5 52 | typescript: 53 | specifier: ^5.2.2 54 | version: 5.2.2 55 | vite: 56 | specifier: ^4.5.0 57 | version: 4.5.0 58 | 59 | packages: 60 | 61 | /@aashutoshrathi/word-wrap@1.2.6: 62 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 63 | engines: {node: '>=0.10.0'} 64 | dev: true 65 | 66 | /@alloc/quick-lru@5.2.0: 67 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 68 | engines: {node: '>=10'} 69 | dev: true 70 | 71 | /@csstools/cascade-layer-name-parser@1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): 72 | resolution: {integrity: sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==} 73 | engines: {node: ^14 || ^16 || >=18} 74 | peerDependencies: 75 | '@csstools/css-parser-algorithms': ^2.3.2 76 | '@csstools/css-tokenizer': ^2.2.1 77 | dependencies: 78 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 79 | '@csstools/css-tokenizer': 2.2.1 80 | dev: true 81 | 82 | /@csstools/color-helpers@3.0.2: 83 | resolution: {integrity: sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==} 84 | engines: {node: ^14 || ^16 || >=18} 85 | dev: true 86 | 87 | /@csstools/css-calc@1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): 88 | resolution: {integrity: sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==} 89 | engines: {node: ^14 || ^16 || >=18} 90 | peerDependencies: 91 | '@csstools/css-parser-algorithms': ^2.3.2 92 | '@csstools/css-tokenizer': ^2.2.1 93 | dependencies: 94 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 95 | '@csstools/css-tokenizer': 2.2.1 96 | dev: true 97 | 98 | /@csstools/css-color-parser@1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): 99 | resolution: {integrity: sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==} 100 | engines: {node: ^14 || ^16 || >=18} 101 | peerDependencies: 102 | '@csstools/css-parser-algorithms': ^2.3.2 103 | '@csstools/css-tokenizer': ^2.2.1 104 | dependencies: 105 | '@csstools/color-helpers': 3.0.2 106 | '@csstools/css-calc': 1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 107 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 108 | '@csstools/css-tokenizer': 2.2.1 109 | dev: true 110 | 111 | /@csstools/css-parser-algorithms@2.3.2(@csstools/css-tokenizer@2.2.1): 112 | resolution: {integrity: sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==} 113 | engines: {node: ^14 || ^16 || >=18} 114 | peerDependencies: 115 | '@csstools/css-tokenizer': ^2.2.1 116 | dependencies: 117 | '@csstools/css-tokenizer': 2.2.1 118 | dev: true 119 | 120 | /@csstools/css-tokenizer@2.2.1: 121 | resolution: {integrity: sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==} 122 | engines: {node: ^14 || ^16 || >=18} 123 | dev: true 124 | 125 | /@csstools/media-query-list-parser@2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): 126 | resolution: {integrity: sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==} 127 | engines: {node: ^14 || ^16 || >=18} 128 | peerDependencies: 129 | '@csstools/css-parser-algorithms': ^2.3.2 130 | '@csstools/css-tokenizer': ^2.2.1 131 | dependencies: 132 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 133 | '@csstools/css-tokenizer': 2.2.1 134 | dev: true 135 | 136 | /@csstools/postcss-cascade-layers@4.0.0(postcss@8.4.31): 137 | resolution: {integrity: sha512-dVPVVqQG0FixjM9CG/+8eHTsCAxRKqmNh6H69IpruolPlnEF1611f2AoLK8TijTSAsqBSclKd4WHs1KUb/LdJw==} 138 | engines: {node: ^14 || ^16 || >=18} 139 | peerDependencies: 140 | postcss: ^8.4 141 | dependencies: 142 | '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) 143 | postcss: 8.4.31 144 | postcss-selector-parser: 6.0.13 145 | dev: true 146 | 147 | /@csstools/postcss-color-function@3.0.7(postcss@8.4.31): 148 | resolution: {integrity: sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==} 149 | engines: {node: ^14 || ^16 || >=18} 150 | peerDependencies: 151 | postcss: ^8.4 152 | dependencies: 153 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 154 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 155 | '@csstools/css-tokenizer': 2.2.1 156 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 157 | postcss: 8.4.31 158 | dev: true 159 | 160 | /@csstools/postcss-color-mix-function@2.0.7(postcss@8.4.31): 161 | resolution: {integrity: sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==} 162 | engines: {node: ^14 || ^16 || >=18} 163 | peerDependencies: 164 | postcss: ^8.4 165 | dependencies: 166 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 167 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 168 | '@csstools/css-tokenizer': 2.2.1 169 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 170 | postcss: 8.4.31 171 | dev: true 172 | 173 | /@csstools/postcss-exponential-functions@1.0.1(postcss@8.4.31): 174 | resolution: {integrity: sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==} 175 | engines: {node: ^14 || ^16 || >=18} 176 | peerDependencies: 177 | postcss: ^8.4 178 | dependencies: 179 | '@csstools/css-calc': 1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 180 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 181 | '@csstools/css-tokenizer': 2.2.1 182 | postcss: 8.4.31 183 | dev: true 184 | 185 | /@csstools/postcss-font-format-keywords@3.0.0(postcss@8.4.31): 186 | resolution: {integrity: sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==} 187 | engines: {node: ^14 || ^16 || >=18} 188 | peerDependencies: 189 | postcss: ^8.4 190 | dependencies: 191 | postcss: 8.4.31 192 | postcss-value-parser: 4.2.0 193 | dev: true 194 | 195 | /@csstools/postcss-gamut-mapping@1.0.0(postcss@8.4.31): 196 | resolution: {integrity: sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==} 197 | engines: {node: ^14 || ^16 || >=18} 198 | peerDependencies: 199 | postcss: ^8.4 200 | dependencies: 201 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 202 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 203 | '@csstools/css-tokenizer': 2.2.1 204 | postcss: 8.4.31 205 | dev: true 206 | 207 | /@csstools/postcss-gradients-interpolation-method@4.0.7(postcss@8.4.31): 208 | resolution: {integrity: sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==} 209 | engines: {node: ^14 || ^16 || >=18} 210 | peerDependencies: 211 | postcss: ^8.4 212 | dependencies: 213 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 214 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 215 | '@csstools/css-tokenizer': 2.2.1 216 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 217 | postcss: 8.4.31 218 | dev: true 219 | 220 | /@csstools/postcss-hwb-function@3.0.6(postcss@8.4.31): 221 | resolution: {integrity: sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==} 222 | engines: {node: ^14 || ^16 || >=18} 223 | peerDependencies: 224 | postcss: ^8.4 225 | dependencies: 226 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 227 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 228 | '@csstools/css-tokenizer': 2.2.1 229 | postcss: 8.4.31 230 | dev: true 231 | 232 | /@csstools/postcss-ic-unit@3.0.2(postcss@8.4.31): 233 | resolution: {integrity: sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==} 234 | engines: {node: ^14 || ^16 || >=18} 235 | peerDependencies: 236 | postcss: ^8.4 237 | dependencies: 238 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 239 | postcss: 8.4.31 240 | postcss-value-parser: 4.2.0 241 | dev: true 242 | 243 | /@csstools/postcss-initial@1.0.0(postcss@8.4.31): 244 | resolution: {integrity: sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==} 245 | engines: {node: ^14 || ^16 || >=18} 246 | peerDependencies: 247 | postcss: ^8.4 248 | dependencies: 249 | postcss: 8.4.31 250 | dev: true 251 | 252 | /@csstools/postcss-is-pseudo-class@4.0.3(postcss@8.4.31): 253 | resolution: {integrity: sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==} 254 | engines: {node: ^14 || ^16 || >=18} 255 | peerDependencies: 256 | postcss: ^8.4 257 | dependencies: 258 | '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) 259 | postcss: 8.4.31 260 | postcss-selector-parser: 6.0.13 261 | dev: true 262 | 263 | /@csstools/postcss-logical-float-and-clear@2.0.0(postcss@8.4.31): 264 | resolution: {integrity: sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==} 265 | engines: {node: ^14 || ^16 || >=18} 266 | peerDependencies: 267 | postcss: ^8.4 268 | dependencies: 269 | postcss: 8.4.31 270 | dev: true 271 | 272 | /@csstools/postcss-logical-resize@2.0.0(postcss@8.4.31): 273 | resolution: {integrity: sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==} 274 | engines: {node: ^14 || ^16 || >=18} 275 | peerDependencies: 276 | postcss: ^8.4 277 | dependencies: 278 | postcss: 8.4.31 279 | postcss-value-parser: 4.2.0 280 | dev: true 281 | 282 | /@csstools/postcss-logical-viewport-units@2.0.3(postcss@8.4.31): 283 | resolution: {integrity: sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==} 284 | engines: {node: ^14 || ^16 || >=18} 285 | peerDependencies: 286 | postcss: ^8.4 287 | dependencies: 288 | '@csstools/css-tokenizer': 2.2.1 289 | postcss: 8.4.31 290 | dev: true 291 | 292 | /@csstools/postcss-media-minmax@1.1.0(postcss@8.4.31): 293 | resolution: {integrity: sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==} 294 | engines: {node: ^14 || ^16 || >=18} 295 | peerDependencies: 296 | postcss: ^8.4 297 | dependencies: 298 | '@csstools/css-calc': 1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 299 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 300 | '@csstools/css-tokenizer': 2.2.1 301 | '@csstools/media-query-list-parser': 2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 302 | postcss: 8.4.31 303 | dev: true 304 | 305 | /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.3(postcss@8.4.31): 306 | resolution: {integrity: sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==} 307 | engines: {node: ^14 || ^16 || >=18} 308 | peerDependencies: 309 | postcss: ^8.4 310 | dependencies: 311 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 312 | '@csstools/css-tokenizer': 2.2.1 313 | '@csstools/media-query-list-parser': 2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 314 | postcss: 8.4.31 315 | dev: true 316 | 317 | /@csstools/postcss-nested-calc@3.0.0(postcss@8.4.31): 318 | resolution: {integrity: sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==} 319 | engines: {node: ^14 || ^16 || >=18} 320 | peerDependencies: 321 | postcss: ^8.4 322 | dependencies: 323 | postcss: 8.4.31 324 | postcss-value-parser: 4.2.0 325 | dev: true 326 | 327 | /@csstools/postcss-normalize-display-values@3.0.1(postcss@8.4.31): 328 | resolution: {integrity: sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==} 329 | engines: {node: ^14 || ^16 || >=18} 330 | peerDependencies: 331 | postcss: ^8.4 332 | dependencies: 333 | postcss: 8.4.31 334 | postcss-value-parser: 4.2.0 335 | dev: true 336 | 337 | /@csstools/postcss-oklab-function@3.0.7(postcss@8.4.31): 338 | resolution: {integrity: sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==} 339 | engines: {node: ^14 || ^16 || >=18} 340 | peerDependencies: 341 | postcss: ^8.4 342 | dependencies: 343 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 344 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 345 | '@csstools/css-tokenizer': 2.2.1 346 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 347 | postcss: 8.4.31 348 | dev: true 349 | 350 | /@csstools/postcss-progressive-custom-properties@3.0.2(postcss@8.4.31): 351 | resolution: {integrity: sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==} 352 | engines: {node: ^14 || ^16 || >=18} 353 | peerDependencies: 354 | postcss: ^8.4 355 | dependencies: 356 | postcss: 8.4.31 357 | postcss-value-parser: 4.2.0 358 | dev: true 359 | 360 | /@csstools/postcss-relative-color-syntax@2.0.7(postcss@8.4.31): 361 | resolution: {integrity: sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==} 362 | engines: {node: ^14 || ^16 || >=18} 363 | peerDependencies: 364 | postcss: ^8.4 365 | dependencies: 366 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 367 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 368 | '@csstools/css-tokenizer': 2.2.1 369 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 370 | postcss: 8.4.31 371 | dev: true 372 | 373 | /@csstools/postcss-scope-pseudo-class@3.0.0(postcss@8.4.31): 374 | resolution: {integrity: sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==} 375 | engines: {node: ^14 || ^16 || >=18} 376 | peerDependencies: 377 | postcss: ^8.4 378 | dependencies: 379 | postcss: 8.4.31 380 | postcss-selector-parser: 6.0.13 381 | dev: true 382 | 383 | /@csstools/postcss-stepped-value-functions@3.0.2(postcss@8.4.31): 384 | resolution: {integrity: sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==} 385 | engines: {node: ^14 || ^16 || >=18} 386 | peerDependencies: 387 | postcss: ^8.4 388 | dependencies: 389 | '@csstools/css-calc': 1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 390 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 391 | '@csstools/css-tokenizer': 2.2.1 392 | postcss: 8.4.31 393 | dev: true 394 | 395 | /@csstools/postcss-text-decoration-shorthand@3.0.3(postcss@8.4.31): 396 | resolution: {integrity: sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==} 397 | engines: {node: ^14 || ^16 || >=18} 398 | peerDependencies: 399 | postcss: ^8.4 400 | dependencies: 401 | '@csstools/color-helpers': 3.0.2 402 | postcss: 8.4.31 403 | postcss-value-parser: 4.2.0 404 | dev: true 405 | 406 | /@csstools/postcss-trigonometric-functions@3.0.2(postcss@8.4.31): 407 | resolution: {integrity: sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==} 408 | engines: {node: ^14 || ^16 || >=18} 409 | peerDependencies: 410 | postcss: ^8.4 411 | dependencies: 412 | '@csstools/css-calc': 1.1.4(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 413 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 414 | '@csstools/css-tokenizer': 2.2.1 415 | postcss: 8.4.31 416 | dev: true 417 | 418 | /@csstools/postcss-unset-value@3.0.0(postcss@8.4.31): 419 | resolution: {integrity: sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==} 420 | engines: {node: ^14 || ^16 || >=18} 421 | peerDependencies: 422 | postcss: ^8.4 423 | dependencies: 424 | postcss: 8.4.31 425 | dev: true 426 | 427 | /@csstools/selector-specificity@3.0.0(postcss-selector-parser@6.0.13): 428 | resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==} 429 | engines: {node: ^14 || ^16 || >=18} 430 | peerDependencies: 431 | postcss-selector-parser: ^6.0.13 432 | dependencies: 433 | postcss-selector-parser: 6.0.13 434 | dev: true 435 | 436 | /@esbuild/android-arm64@0.18.20: 437 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 438 | engines: {node: '>=12'} 439 | cpu: [arm64] 440 | os: [android] 441 | requiresBuild: true 442 | dev: true 443 | optional: true 444 | 445 | /@esbuild/android-arm@0.18.20: 446 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 447 | engines: {node: '>=12'} 448 | cpu: [arm] 449 | os: [android] 450 | requiresBuild: true 451 | dev: true 452 | optional: true 453 | 454 | /@esbuild/android-x64@0.18.20: 455 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 456 | engines: {node: '>=12'} 457 | cpu: [x64] 458 | os: [android] 459 | requiresBuild: true 460 | dev: true 461 | optional: true 462 | 463 | /@esbuild/darwin-arm64@0.18.20: 464 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 465 | engines: {node: '>=12'} 466 | cpu: [arm64] 467 | os: [darwin] 468 | requiresBuild: true 469 | dev: true 470 | optional: true 471 | 472 | /@esbuild/darwin-x64@0.18.20: 473 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 474 | engines: {node: '>=12'} 475 | cpu: [x64] 476 | os: [darwin] 477 | requiresBuild: true 478 | dev: true 479 | optional: true 480 | 481 | /@esbuild/freebsd-arm64@0.18.20: 482 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 483 | engines: {node: '>=12'} 484 | cpu: [arm64] 485 | os: [freebsd] 486 | requiresBuild: true 487 | dev: true 488 | optional: true 489 | 490 | /@esbuild/freebsd-x64@0.18.20: 491 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 492 | engines: {node: '>=12'} 493 | cpu: [x64] 494 | os: [freebsd] 495 | requiresBuild: true 496 | dev: true 497 | optional: true 498 | 499 | /@esbuild/linux-arm64@0.18.20: 500 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 501 | engines: {node: '>=12'} 502 | cpu: [arm64] 503 | os: [linux] 504 | requiresBuild: true 505 | dev: true 506 | optional: true 507 | 508 | /@esbuild/linux-arm@0.18.20: 509 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 510 | engines: {node: '>=12'} 511 | cpu: [arm] 512 | os: [linux] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | /@esbuild/linux-ia32@0.18.20: 518 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 519 | engines: {node: '>=12'} 520 | cpu: [ia32] 521 | os: [linux] 522 | requiresBuild: true 523 | dev: true 524 | optional: true 525 | 526 | /@esbuild/linux-loong64@0.18.20: 527 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 528 | engines: {node: '>=12'} 529 | cpu: [loong64] 530 | os: [linux] 531 | requiresBuild: true 532 | dev: true 533 | optional: true 534 | 535 | /@esbuild/linux-mips64el@0.18.20: 536 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 537 | engines: {node: '>=12'} 538 | cpu: [mips64el] 539 | os: [linux] 540 | requiresBuild: true 541 | dev: true 542 | optional: true 543 | 544 | /@esbuild/linux-ppc64@0.18.20: 545 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 546 | engines: {node: '>=12'} 547 | cpu: [ppc64] 548 | os: [linux] 549 | requiresBuild: true 550 | dev: true 551 | optional: true 552 | 553 | /@esbuild/linux-riscv64@0.18.20: 554 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 555 | engines: {node: '>=12'} 556 | cpu: [riscv64] 557 | os: [linux] 558 | requiresBuild: true 559 | dev: true 560 | optional: true 561 | 562 | /@esbuild/linux-s390x@0.18.20: 563 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 564 | engines: {node: '>=12'} 565 | cpu: [s390x] 566 | os: [linux] 567 | requiresBuild: true 568 | dev: true 569 | optional: true 570 | 571 | /@esbuild/linux-x64@0.18.20: 572 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 573 | engines: {node: '>=12'} 574 | cpu: [x64] 575 | os: [linux] 576 | requiresBuild: true 577 | dev: true 578 | optional: true 579 | 580 | /@esbuild/netbsd-x64@0.18.20: 581 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 582 | engines: {node: '>=12'} 583 | cpu: [x64] 584 | os: [netbsd] 585 | requiresBuild: true 586 | dev: true 587 | optional: true 588 | 589 | /@esbuild/openbsd-x64@0.18.20: 590 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 591 | engines: {node: '>=12'} 592 | cpu: [x64] 593 | os: [openbsd] 594 | requiresBuild: true 595 | dev: true 596 | optional: true 597 | 598 | /@esbuild/sunos-x64@0.18.20: 599 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 600 | engines: {node: '>=12'} 601 | cpu: [x64] 602 | os: [sunos] 603 | requiresBuild: true 604 | dev: true 605 | optional: true 606 | 607 | /@esbuild/win32-arm64@0.18.20: 608 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 609 | engines: {node: '>=12'} 610 | cpu: [arm64] 611 | os: [win32] 612 | requiresBuild: true 613 | dev: true 614 | optional: true 615 | 616 | /@esbuild/win32-ia32@0.18.20: 617 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 618 | engines: {node: '>=12'} 619 | cpu: [ia32] 620 | os: [win32] 621 | requiresBuild: true 622 | dev: true 623 | optional: true 624 | 625 | /@esbuild/win32-x64@0.18.20: 626 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 627 | engines: {node: '>=12'} 628 | cpu: [x64] 629 | os: [win32] 630 | requiresBuild: true 631 | dev: true 632 | optional: true 633 | 634 | /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): 635 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 636 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 637 | peerDependencies: 638 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 639 | dependencies: 640 | eslint: 8.52.0 641 | eslint-visitor-keys: 3.4.3 642 | dev: true 643 | 644 | /@eslint-community/regexpp@4.10.0: 645 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 646 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 647 | dev: true 648 | 649 | /@eslint/eslintrc@2.1.2: 650 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} 651 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 652 | dependencies: 653 | ajv: 6.12.6 654 | debug: 4.3.4 655 | espree: 9.6.1 656 | globals: 13.23.0 657 | ignore: 5.2.4 658 | import-fresh: 3.3.0 659 | js-yaml: 4.1.0 660 | minimatch: 3.1.2 661 | strip-json-comments: 3.1.1 662 | transitivePeerDependencies: 663 | - supports-color 664 | dev: true 665 | 666 | /@eslint/js@8.52.0: 667 | resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} 668 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 669 | dev: true 670 | 671 | /@humanwhocodes/config-array@0.11.13: 672 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} 673 | engines: {node: '>=10.10.0'} 674 | dependencies: 675 | '@humanwhocodes/object-schema': 2.0.1 676 | debug: 4.3.4 677 | minimatch: 3.1.2 678 | transitivePeerDependencies: 679 | - supports-color 680 | dev: true 681 | 682 | /@humanwhocodes/module-importer@1.0.1: 683 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 684 | engines: {node: '>=12.22'} 685 | dev: true 686 | 687 | /@humanwhocodes/object-schema@2.0.1: 688 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} 689 | dev: true 690 | 691 | /@jridgewell/gen-mapping@0.3.3: 692 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 693 | engines: {node: '>=6.0.0'} 694 | dependencies: 695 | '@jridgewell/set-array': 1.1.2 696 | '@jridgewell/sourcemap-codec': 1.4.15 697 | '@jridgewell/trace-mapping': 0.3.20 698 | dev: true 699 | 700 | /@jridgewell/resolve-uri@3.1.1: 701 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 702 | engines: {node: '>=6.0.0'} 703 | dev: true 704 | 705 | /@jridgewell/set-array@1.1.2: 706 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 707 | engines: {node: '>=6.0.0'} 708 | dev: true 709 | 710 | /@jridgewell/sourcemap-codec@1.4.15: 711 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 712 | dev: true 713 | 714 | /@jridgewell/trace-mapping@0.3.20: 715 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 716 | dependencies: 717 | '@jridgewell/resolve-uri': 3.1.1 718 | '@jridgewell/sourcemap-codec': 1.4.15 719 | dev: true 720 | 721 | /@nodelib/fs.scandir@2.1.5: 722 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 723 | engines: {node: '>= 8'} 724 | dependencies: 725 | '@nodelib/fs.stat': 2.0.5 726 | run-parallel: 1.2.0 727 | dev: true 728 | 729 | /@nodelib/fs.stat@2.0.5: 730 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 731 | engines: {node: '>= 8'} 732 | dev: true 733 | 734 | /@nodelib/fs.walk@1.2.8: 735 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 736 | engines: {node: '>= 8'} 737 | dependencies: 738 | '@nodelib/fs.scandir': 2.1.5 739 | fastq: 1.15.0 740 | dev: true 741 | 742 | /@pkgr/utils@2.4.2: 743 | resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} 744 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 745 | dependencies: 746 | cross-spawn: 7.0.3 747 | fast-glob: 3.3.1 748 | is-glob: 4.0.3 749 | open: 9.1.0 750 | picocolors: 1.0.0 751 | tslib: 2.6.2 752 | dev: true 753 | 754 | /@types/alpinejs@3.13.3: 755 | resolution: {integrity: sha512-ZMxJlDxDDqn94gBWOkeGulVw3nUOy/rPGXlyQksnlzwzuipl4kW0E/tFzAiU4uKSu6UXZL94wReRorln+2FStg==} 756 | dev: true 757 | 758 | /@types/json-schema@7.0.14: 759 | resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} 760 | dev: true 761 | 762 | /@types/semver@7.5.4: 763 | resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} 764 | dev: true 765 | 766 | /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): 767 | resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} 768 | engines: {node: ^16.0.0 || >=18.0.0} 769 | peerDependencies: 770 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 771 | eslint: ^7.0.0 || ^8.0.0 772 | typescript: '*' 773 | peerDependenciesMeta: 774 | typescript: 775 | optional: true 776 | dependencies: 777 | '@eslint-community/regexpp': 4.10.0 778 | '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 779 | '@typescript-eslint/scope-manager': 6.9.0 780 | '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 781 | '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 782 | '@typescript-eslint/visitor-keys': 6.9.0 783 | debug: 4.3.4 784 | eslint: 8.52.0 785 | graphemer: 1.4.0 786 | ignore: 5.2.4 787 | natural-compare: 1.4.0 788 | semver: 7.5.4 789 | ts-api-utils: 1.0.3(typescript@5.2.2) 790 | typescript: 5.2.2 791 | transitivePeerDependencies: 792 | - supports-color 793 | dev: true 794 | 795 | /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): 796 | resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} 797 | engines: {node: ^16.0.0 || >=18.0.0} 798 | peerDependencies: 799 | eslint: ^7.0.0 || ^8.0.0 800 | typescript: '*' 801 | peerDependenciesMeta: 802 | typescript: 803 | optional: true 804 | dependencies: 805 | '@typescript-eslint/scope-manager': 6.9.0 806 | '@typescript-eslint/types': 6.9.0 807 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 808 | '@typescript-eslint/visitor-keys': 6.9.0 809 | debug: 4.3.4 810 | eslint: 8.52.0 811 | typescript: 5.2.2 812 | transitivePeerDependencies: 813 | - supports-color 814 | dev: true 815 | 816 | /@typescript-eslint/scope-manager@6.9.0: 817 | resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} 818 | engines: {node: ^16.0.0 || >=18.0.0} 819 | dependencies: 820 | '@typescript-eslint/types': 6.9.0 821 | '@typescript-eslint/visitor-keys': 6.9.0 822 | dev: true 823 | 824 | /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): 825 | resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} 826 | engines: {node: ^16.0.0 || >=18.0.0} 827 | peerDependencies: 828 | eslint: ^7.0.0 || ^8.0.0 829 | typescript: '*' 830 | peerDependenciesMeta: 831 | typescript: 832 | optional: true 833 | dependencies: 834 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 835 | '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 836 | debug: 4.3.4 837 | eslint: 8.52.0 838 | ts-api-utils: 1.0.3(typescript@5.2.2) 839 | typescript: 5.2.2 840 | transitivePeerDependencies: 841 | - supports-color 842 | dev: true 843 | 844 | /@typescript-eslint/types@6.9.0: 845 | resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} 846 | engines: {node: ^16.0.0 || >=18.0.0} 847 | dev: true 848 | 849 | /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2): 850 | resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} 851 | engines: {node: ^16.0.0 || >=18.0.0} 852 | peerDependencies: 853 | typescript: '*' 854 | peerDependenciesMeta: 855 | typescript: 856 | optional: true 857 | dependencies: 858 | '@typescript-eslint/types': 6.9.0 859 | '@typescript-eslint/visitor-keys': 6.9.0 860 | debug: 4.3.4 861 | globby: 11.1.0 862 | is-glob: 4.0.3 863 | semver: 7.5.4 864 | ts-api-utils: 1.0.3(typescript@5.2.2) 865 | typescript: 5.2.2 866 | transitivePeerDependencies: 867 | - supports-color 868 | dev: true 869 | 870 | /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): 871 | resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} 872 | engines: {node: ^16.0.0 || >=18.0.0} 873 | peerDependencies: 874 | eslint: ^7.0.0 || ^8.0.0 875 | dependencies: 876 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) 877 | '@types/json-schema': 7.0.14 878 | '@types/semver': 7.5.4 879 | '@typescript-eslint/scope-manager': 6.9.0 880 | '@typescript-eslint/types': 6.9.0 881 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 882 | eslint: 8.52.0 883 | semver: 7.5.4 884 | transitivePeerDependencies: 885 | - supports-color 886 | - typescript 887 | dev: true 888 | 889 | /@typescript-eslint/visitor-keys@6.9.0: 890 | resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} 891 | engines: {node: ^16.0.0 || >=18.0.0} 892 | dependencies: 893 | '@typescript-eslint/types': 6.9.0 894 | eslint-visitor-keys: 3.4.3 895 | dev: true 896 | 897 | /@ungap/structured-clone@1.2.0: 898 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 899 | dev: true 900 | 901 | /@vue/reactivity@3.1.5: 902 | resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==} 903 | dependencies: 904 | '@vue/shared': 3.1.5 905 | dev: false 906 | 907 | /@vue/shared@3.1.5: 908 | resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==} 909 | dev: false 910 | 911 | /acorn-jsx@5.3.2(acorn@8.11.2): 912 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 913 | peerDependencies: 914 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 915 | dependencies: 916 | acorn: 8.11.2 917 | dev: true 918 | 919 | /acorn@8.11.2: 920 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 921 | engines: {node: '>=0.4.0'} 922 | hasBin: true 923 | dev: true 924 | 925 | /ajv@6.12.6: 926 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 927 | dependencies: 928 | fast-deep-equal: 3.1.3 929 | fast-json-stable-stringify: 2.1.0 930 | json-schema-traverse: 0.4.1 931 | uri-js: 4.4.1 932 | dev: true 933 | 934 | /alpinejs@3.13.2: 935 | resolution: {integrity: sha512-WzojeeN082kLZznGI1HAuP8yFJSWqJ1fGdz2mUjj45H4y0XwToE7fFqtI3mCPRR+BpcSbxT/NL+FyPnYAWSltw==} 936 | dependencies: 937 | '@vue/reactivity': 3.1.5 938 | dev: false 939 | 940 | /ansi-regex@5.0.1: 941 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 942 | engines: {node: '>=8'} 943 | dev: true 944 | 945 | /ansi-styles@4.3.0: 946 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 947 | engines: {node: '>=8'} 948 | dependencies: 949 | color-convert: 2.0.1 950 | dev: true 951 | 952 | /any-promise@1.3.0: 953 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 954 | dev: true 955 | 956 | /anymatch@3.1.3: 957 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 958 | engines: {node: '>= 8'} 959 | dependencies: 960 | normalize-path: 3.0.0 961 | picomatch: 2.3.1 962 | dev: true 963 | 964 | /arg@5.0.2: 965 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 966 | dev: true 967 | 968 | /argparse@2.0.1: 969 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 970 | dev: true 971 | 972 | /array-union@2.1.0: 973 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 974 | engines: {node: '>=8'} 975 | dev: true 976 | 977 | /autoprefixer@10.4.16(postcss@8.4.31): 978 | resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} 979 | engines: {node: ^10 || ^12 || >=14} 980 | hasBin: true 981 | peerDependencies: 982 | postcss: ^8.1.0 983 | dependencies: 984 | browserslist: 4.22.1 985 | caniuse-lite: 1.0.30001558 986 | fraction.js: 4.3.7 987 | normalize-range: 0.1.2 988 | picocolors: 1.0.0 989 | postcss: 8.4.31 990 | postcss-value-parser: 4.2.0 991 | dev: true 992 | 993 | /balanced-match@1.0.2: 994 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 995 | dev: true 996 | 997 | /big-integer@1.6.51: 998 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} 999 | engines: {node: '>=0.6'} 1000 | dev: true 1001 | 1002 | /binary-extensions@2.2.0: 1003 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1004 | engines: {node: '>=8'} 1005 | dev: true 1006 | 1007 | /bplist-parser@0.2.0: 1008 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} 1009 | engines: {node: '>= 5.10.0'} 1010 | dependencies: 1011 | big-integer: 1.6.51 1012 | dev: true 1013 | 1014 | /brace-expansion@1.1.11: 1015 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1016 | dependencies: 1017 | balanced-match: 1.0.2 1018 | concat-map: 0.0.1 1019 | dev: true 1020 | 1021 | /braces@3.0.2: 1022 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1023 | engines: {node: '>=8'} 1024 | dependencies: 1025 | fill-range: 7.0.1 1026 | dev: true 1027 | 1028 | /browserslist@4.22.1: 1029 | resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} 1030 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1031 | hasBin: true 1032 | dependencies: 1033 | caniuse-lite: 1.0.30001558 1034 | electron-to-chromium: 1.4.569 1035 | node-releases: 2.0.13 1036 | update-browserslist-db: 1.0.13(browserslist@4.22.1) 1037 | dev: true 1038 | 1039 | /bundle-name@3.0.0: 1040 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} 1041 | engines: {node: '>=12'} 1042 | dependencies: 1043 | run-applescript: 5.0.0 1044 | dev: true 1045 | 1046 | /callsites@3.1.0: 1047 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1048 | engines: {node: '>=6'} 1049 | dev: true 1050 | 1051 | /camelcase-css@2.0.1: 1052 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 1053 | engines: {node: '>= 6'} 1054 | dev: true 1055 | 1056 | /caniuse-lite@1.0.30001558: 1057 | resolution: {integrity: sha512-/Et7DwLqpjS47JPEcz6VnxU9PwcIdVi0ciLXRWBQdj1XFye68pSQYpV0QtPTfUKWuOaEig+/Vez2l74eDc1tPQ==} 1058 | dev: true 1059 | 1060 | /chalk@4.1.2: 1061 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1062 | engines: {node: '>=10'} 1063 | dependencies: 1064 | ansi-styles: 4.3.0 1065 | supports-color: 7.2.0 1066 | dev: true 1067 | 1068 | /chokidar@3.5.3: 1069 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1070 | engines: {node: '>= 8.10.0'} 1071 | dependencies: 1072 | anymatch: 3.1.3 1073 | braces: 3.0.2 1074 | glob-parent: 5.1.2 1075 | is-binary-path: 2.1.0 1076 | is-glob: 4.0.3 1077 | normalize-path: 3.0.0 1078 | readdirp: 3.6.0 1079 | optionalDependencies: 1080 | fsevents: 2.3.3 1081 | dev: true 1082 | 1083 | /color-convert@2.0.1: 1084 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1085 | engines: {node: '>=7.0.0'} 1086 | dependencies: 1087 | color-name: 1.1.4 1088 | dev: true 1089 | 1090 | /color-name@1.1.4: 1091 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1092 | dev: true 1093 | 1094 | /colord@2.9.3: 1095 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 1096 | dev: true 1097 | 1098 | /commander@4.1.1: 1099 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1100 | engines: {node: '>= 6'} 1101 | dev: true 1102 | 1103 | /concat-map@0.0.1: 1104 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1105 | dev: true 1106 | 1107 | /cross-spawn@7.0.3: 1108 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1109 | engines: {node: '>= 8'} 1110 | dependencies: 1111 | path-key: 3.1.1 1112 | shebang-command: 2.0.0 1113 | which: 2.0.2 1114 | dev: true 1115 | 1116 | /css-blank-pseudo@6.0.0(postcss@8.4.31): 1117 | resolution: {integrity: sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==} 1118 | engines: {node: ^14 || ^16 || >=18} 1119 | peerDependencies: 1120 | postcss: ^8.4 1121 | dependencies: 1122 | postcss: 8.4.31 1123 | postcss-selector-parser: 6.0.13 1124 | dev: true 1125 | 1126 | /css-has-pseudo@6.0.0(postcss@8.4.31): 1127 | resolution: {integrity: sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==} 1128 | engines: {node: ^14 || ^16 || >=18} 1129 | peerDependencies: 1130 | postcss: ^8.4 1131 | dependencies: 1132 | '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) 1133 | postcss: 8.4.31 1134 | postcss-selector-parser: 6.0.13 1135 | postcss-value-parser: 4.2.0 1136 | dev: true 1137 | 1138 | /css-prefers-color-scheme@9.0.0(postcss@8.4.31): 1139 | resolution: {integrity: sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==} 1140 | engines: {node: ^14 || ^16 || >=18} 1141 | peerDependencies: 1142 | postcss: ^8.4 1143 | dependencies: 1144 | postcss: 8.4.31 1145 | dev: true 1146 | 1147 | /css-selector-tokenizer@0.8.0: 1148 | resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} 1149 | dependencies: 1150 | cssesc: 3.0.0 1151 | fastparse: 1.1.2 1152 | dev: true 1153 | 1154 | /cssdb@7.8.0: 1155 | resolution: {integrity: sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==} 1156 | dev: true 1157 | 1158 | /cssesc@3.0.0: 1159 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1160 | engines: {node: '>=4'} 1161 | hasBin: true 1162 | dev: true 1163 | 1164 | /daisyui@3.9.4: 1165 | resolution: {integrity: sha512-fvi2RGH4YV617/6DntOVGcOugOPym9jTGWW2XySb5ZpvdWO4L7bEG77VHirrnbRUEWvIEVXkBpxUz2KFj0rVnA==} 1166 | engines: {node: '>=16.9.0'} 1167 | dependencies: 1168 | colord: 2.9.3 1169 | css-selector-tokenizer: 0.8.0 1170 | postcss: 8.4.31 1171 | postcss-js: 4.0.1(postcss@8.4.31) 1172 | tailwindcss: 3.3.5 1173 | transitivePeerDependencies: 1174 | - ts-node 1175 | dev: true 1176 | 1177 | /debug@4.3.4: 1178 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1179 | engines: {node: '>=6.0'} 1180 | peerDependencies: 1181 | supports-color: '*' 1182 | peerDependenciesMeta: 1183 | supports-color: 1184 | optional: true 1185 | dependencies: 1186 | ms: 2.1.2 1187 | dev: true 1188 | 1189 | /deep-is@0.1.4: 1190 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1191 | dev: true 1192 | 1193 | /default-browser-id@3.0.0: 1194 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} 1195 | engines: {node: '>=12'} 1196 | dependencies: 1197 | bplist-parser: 0.2.0 1198 | untildify: 4.0.0 1199 | dev: true 1200 | 1201 | /default-browser@4.0.0: 1202 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} 1203 | engines: {node: '>=14.16'} 1204 | dependencies: 1205 | bundle-name: 3.0.0 1206 | default-browser-id: 3.0.0 1207 | execa: 7.2.0 1208 | titleize: 3.0.0 1209 | dev: true 1210 | 1211 | /define-lazy-prop@3.0.0: 1212 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 1213 | engines: {node: '>=12'} 1214 | dev: true 1215 | 1216 | /didyoumean@1.2.2: 1217 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1218 | dev: true 1219 | 1220 | /dir-glob@3.0.1: 1221 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1222 | engines: {node: '>=8'} 1223 | dependencies: 1224 | path-type: 4.0.0 1225 | dev: true 1226 | 1227 | /dlv@1.1.3: 1228 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1229 | dev: true 1230 | 1231 | /doctrine@3.0.0: 1232 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1233 | engines: {node: '>=6.0.0'} 1234 | dependencies: 1235 | esutils: 2.0.3 1236 | dev: true 1237 | 1238 | /electron-to-chromium@1.4.569: 1239 | resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==} 1240 | dev: true 1241 | 1242 | /esbuild@0.18.20: 1243 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1244 | engines: {node: '>=12'} 1245 | hasBin: true 1246 | requiresBuild: true 1247 | optionalDependencies: 1248 | '@esbuild/android-arm': 0.18.20 1249 | '@esbuild/android-arm64': 0.18.20 1250 | '@esbuild/android-x64': 0.18.20 1251 | '@esbuild/darwin-arm64': 0.18.20 1252 | '@esbuild/darwin-x64': 0.18.20 1253 | '@esbuild/freebsd-arm64': 0.18.20 1254 | '@esbuild/freebsd-x64': 0.18.20 1255 | '@esbuild/linux-arm': 0.18.20 1256 | '@esbuild/linux-arm64': 0.18.20 1257 | '@esbuild/linux-ia32': 0.18.20 1258 | '@esbuild/linux-loong64': 0.18.20 1259 | '@esbuild/linux-mips64el': 0.18.20 1260 | '@esbuild/linux-ppc64': 0.18.20 1261 | '@esbuild/linux-riscv64': 0.18.20 1262 | '@esbuild/linux-s390x': 0.18.20 1263 | '@esbuild/linux-x64': 0.18.20 1264 | '@esbuild/netbsd-x64': 0.18.20 1265 | '@esbuild/openbsd-x64': 0.18.20 1266 | '@esbuild/sunos-x64': 0.18.20 1267 | '@esbuild/win32-arm64': 0.18.20 1268 | '@esbuild/win32-ia32': 0.18.20 1269 | '@esbuild/win32-x64': 0.18.20 1270 | dev: true 1271 | 1272 | /escalade@3.1.1: 1273 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1274 | engines: {node: '>=6'} 1275 | dev: true 1276 | 1277 | /escape-string-regexp@4.0.0: 1278 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1279 | engines: {node: '>=10'} 1280 | dev: true 1281 | 1282 | /eslint-config-prettier@9.0.0(eslint@8.52.0): 1283 | resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} 1284 | hasBin: true 1285 | peerDependencies: 1286 | eslint: '>=7.0.0' 1287 | dependencies: 1288 | eslint: 8.52.0 1289 | dev: true 1290 | 1291 | /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3): 1292 | resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} 1293 | engines: {node: ^14.18.0 || >=16.0.0} 1294 | peerDependencies: 1295 | '@types/eslint': '>=8.0.0' 1296 | eslint: '>=8.0.0' 1297 | eslint-config-prettier: '*' 1298 | prettier: '>=3.0.0' 1299 | peerDependenciesMeta: 1300 | '@types/eslint': 1301 | optional: true 1302 | eslint-config-prettier: 1303 | optional: true 1304 | dependencies: 1305 | eslint: 8.52.0 1306 | eslint-config-prettier: 9.0.0(eslint@8.52.0) 1307 | prettier: 3.0.3 1308 | prettier-linter-helpers: 1.0.0 1309 | synckit: 0.8.5 1310 | dev: true 1311 | 1312 | /eslint-scope@7.2.2: 1313 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1314 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1315 | dependencies: 1316 | esrecurse: 4.3.0 1317 | estraverse: 5.3.0 1318 | dev: true 1319 | 1320 | /eslint-visitor-keys@3.4.3: 1321 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1322 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1323 | dev: true 1324 | 1325 | /eslint@8.52.0: 1326 | resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} 1327 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1328 | hasBin: true 1329 | dependencies: 1330 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) 1331 | '@eslint-community/regexpp': 4.10.0 1332 | '@eslint/eslintrc': 2.1.2 1333 | '@eslint/js': 8.52.0 1334 | '@humanwhocodes/config-array': 0.11.13 1335 | '@humanwhocodes/module-importer': 1.0.1 1336 | '@nodelib/fs.walk': 1.2.8 1337 | '@ungap/structured-clone': 1.2.0 1338 | ajv: 6.12.6 1339 | chalk: 4.1.2 1340 | cross-spawn: 7.0.3 1341 | debug: 4.3.4 1342 | doctrine: 3.0.0 1343 | escape-string-regexp: 4.0.0 1344 | eslint-scope: 7.2.2 1345 | eslint-visitor-keys: 3.4.3 1346 | espree: 9.6.1 1347 | esquery: 1.5.0 1348 | esutils: 2.0.3 1349 | fast-deep-equal: 3.1.3 1350 | file-entry-cache: 6.0.1 1351 | find-up: 5.0.0 1352 | glob-parent: 6.0.2 1353 | globals: 13.23.0 1354 | graphemer: 1.4.0 1355 | ignore: 5.2.4 1356 | imurmurhash: 0.1.4 1357 | is-glob: 4.0.3 1358 | is-path-inside: 3.0.3 1359 | js-yaml: 4.1.0 1360 | json-stable-stringify-without-jsonify: 1.0.1 1361 | levn: 0.4.1 1362 | lodash.merge: 4.6.2 1363 | minimatch: 3.1.2 1364 | natural-compare: 1.4.0 1365 | optionator: 0.9.3 1366 | strip-ansi: 6.0.1 1367 | text-table: 0.2.0 1368 | transitivePeerDependencies: 1369 | - supports-color 1370 | dev: true 1371 | 1372 | /espree@9.6.1: 1373 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1374 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1375 | dependencies: 1376 | acorn: 8.11.2 1377 | acorn-jsx: 5.3.2(acorn@8.11.2) 1378 | eslint-visitor-keys: 3.4.3 1379 | dev: true 1380 | 1381 | /esquery@1.5.0: 1382 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1383 | engines: {node: '>=0.10'} 1384 | dependencies: 1385 | estraverse: 5.3.0 1386 | dev: true 1387 | 1388 | /esrecurse@4.3.0: 1389 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1390 | engines: {node: '>=4.0'} 1391 | dependencies: 1392 | estraverse: 5.3.0 1393 | dev: true 1394 | 1395 | /estraverse@5.3.0: 1396 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1397 | engines: {node: '>=4.0'} 1398 | dev: true 1399 | 1400 | /esutils@2.0.3: 1401 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1402 | engines: {node: '>=0.10.0'} 1403 | dev: true 1404 | 1405 | /execa@5.1.1: 1406 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1407 | engines: {node: '>=10'} 1408 | dependencies: 1409 | cross-spawn: 7.0.3 1410 | get-stream: 6.0.1 1411 | human-signals: 2.1.0 1412 | is-stream: 2.0.1 1413 | merge-stream: 2.0.0 1414 | npm-run-path: 4.0.1 1415 | onetime: 5.1.2 1416 | signal-exit: 3.0.7 1417 | strip-final-newline: 2.0.0 1418 | dev: true 1419 | 1420 | /execa@7.2.0: 1421 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} 1422 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1423 | dependencies: 1424 | cross-spawn: 7.0.3 1425 | get-stream: 6.0.1 1426 | human-signals: 4.3.1 1427 | is-stream: 3.0.0 1428 | merge-stream: 2.0.0 1429 | npm-run-path: 5.1.0 1430 | onetime: 6.0.0 1431 | signal-exit: 3.0.7 1432 | strip-final-newline: 3.0.0 1433 | dev: true 1434 | 1435 | /fast-deep-equal@3.1.3: 1436 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1437 | dev: true 1438 | 1439 | /fast-diff@1.3.0: 1440 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1441 | dev: true 1442 | 1443 | /fast-glob@3.3.1: 1444 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1445 | engines: {node: '>=8.6.0'} 1446 | dependencies: 1447 | '@nodelib/fs.stat': 2.0.5 1448 | '@nodelib/fs.walk': 1.2.8 1449 | glob-parent: 5.1.2 1450 | merge2: 1.4.1 1451 | micromatch: 4.0.5 1452 | dev: true 1453 | 1454 | /fast-json-stable-stringify@2.1.0: 1455 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1456 | dev: true 1457 | 1458 | /fast-levenshtein@2.0.6: 1459 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1460 | dev: true 1461 | 1462 | /fastparse@1.1.2: 1463 | resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} 1464 | dev: true 1465 | 1466 | /fastq@1.15.0: 1467 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1468 | dependencies: 1469 | reusify: 1.0.4 1470 | dev: true 1471 | 1472 | /file-entry-cache@6.0.1: 1473 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1474 | engines: {node: ^10.12.0 || >=12.0.0} 1475 | dependencies: 1476 | flat-cache: 3.1.1 1477 | dev: true 1478 | 1479 | /fill-range@7.0.1: 1480 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1481 | engines: {node: '>=8'} 1482 | dependencies: 1483 | to-regex-range: 5.0.1 1484 | dev: true 1485 | 1486 | /find-up@5.0.0: 1487 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1488 | engines: {node: '>=10'} 1489 | dependencies: 1490 | locate-path: 6.0.0 1491 | path-exists: 4.0.0 1492 | dev: true 1493 | 1494 | /flat-cache@3.1.1: 1495 | resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} 1496 | engines: {node: '>=12.0.0'} 1497 | dependencies: 1498 | flatted: 3.2.9 1499 | keyv: 4.5.4 1500 | rimraf: 3.0.2 1501 | dev: true 1502 | 1503 | /flatted@3.2.9: 1504 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1505 | dev: true 1506 | 1507 | /fraction.js@4.3.7: 1508 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1509 | dev: true 1510 | 1511 | /fs.realpath@1.0.0: 1512 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1513 | dev: true 1514 | 1515 | /fsevents@2.3.3: 1516 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1517 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1518 | os: [darwin] 1519 | requiresBuild: true 1520 | dev: true 1521 | optional: true 1522 | 1523 | /function-bind@1.1.2: 1524 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1525 | dev: true 1526 | 1527 | /get-stream@6.0.1: 1528 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1529 | engines: {node: '>=10'} 1530 | dev: true 1531 | 1532 | /glob-parent@5.1.2: 1533 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1534 | engines: {node: '>= 6'} 1535 | dependencies: 1536 | is-glob: 4.0.3 1537 | dev: true 1538 | 1539 | /glob-parent@6.0.2: 1540 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1541 | engines: {node: '>=10.13.0'} 1542 | dependencies: 1543 | is-glob: 4.0.3 1544 | dev: true 1545 | 1546 | /glob@7.1.6: 1547 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1548 | dependencies: 1549 | fs.realpath: 1.0.0 1550 | inflight: 1.0.6 1551 | inherits: 2.0.4 1552 | minimatch: 3.1.2 1553 | once: 1.4.0 1554 | path-is-absolute: 1.0.1 1555 | dev: true 1556 | 1557 | /glob@7.2.3: 1558 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1559 | dependencies: 1560 | fs.realpath: 1.0.0 1561 | inflight: 1.0.6 1562 | inherits: 2.0.4 1563 | minimatch: 3.1.2 1564 | once: 1.4.0 1565 | path-is-absolute: 1.0.1 1566 | dev: true 1567 | 1568 | /globals@13.23.0: 1569 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} 1570 | engines: {node: '>=8'} 1571 | dependencies: 1572 | type-fest: 0.20.2 1573 | dev: true 1574 | 1575 | /globby@11.1.0: 1576 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1577 | engines: {node: '>=10'} 1578 | dependencies: 1579 | array-union: 2.1.0 1580 | dir-glob: 3.0.1 1581 | fast-glob: 3.3.1 1582 | ignore: 5.2.4 1583 | merge2: 1.4.1 1584 | slash: 3.0.0 1585 | dev: true 1586 | 1587 | /graphemer@1.4.0: 1588 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1589 | dev: true 1590 | 1591 | /has-flag@4.0.0: 1592 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1593 | engines: {node: '>=8'} 1594 | dev: true 1595 | 1596 | /hasown@2.0.0: 1597 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1598 | engines: {node: '>= 0.4'} 1599 | dependencies: 1600 | function-bind: 1.1.2 1601 | dev: true 1602 | 1603 | /htmx.org@1.9.6: 1604 | resolution: {integrity: sha512-4Zebo9nzg8u2ZHuIJmvB/nQS6kIMLIoEfhTg/oRwyCIJhL5MLA/jPU1EPEBtGOmG4ZG0k05Vpd3sab2+zfvteQ==} 1605 | dev: false 1606 | 1607 | /human-signals@2.1.0: 1608 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1609 | engines: {node: '>=10.17.0'} 1610 | dev: true 1611 | 1612 | /human-signals@4.3.1: 1613 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1614 | engines: {node: '>=14.18.0'} 1615 | dev: true 1616 | 1617 | /ignore@5.2.4: 1618 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1619 | engines: {node: '>= 4'} 1620 | dev: true 1621 | 1622 | /import-fresh@3.3.0: 1623 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1624 | engines: {node: '>=6'} 1625 | dependencies: 1626 | parent-module: 1.0.1 1627 | resolve-from: 4.0.0 1628 | dev: true 1629 | 1630 | /imurmurhash@0.1.4: 1631 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1632 | engines: {node: '>=0.8.19'} 1633 | dev: true 1634 | 1635 | /inflight@1.0.6: 1636 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1637 | dependencies: 1638 | once: 1.4.0 1639 | wrappy: 1.0.2 1640 | dev: true 1641 | 1642 | /inherits@2.0.4: 1643 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1644 | dev: true 1645 | 1646 | /is-binary-path@2.1.0: 1647 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1648 | engines: {node: '>=8'} 1649 | dependencies: 1650 | binary-extensions: 2.2.0 1651 | dev: true 1652 | 1653 | /is-core-module@2.13.1: 1654 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1655 | dependencies: 1656 | hasown: 2.0.0 1657 | dev: true 1658 | 1659 | /is-docker@2.2.1: 1660 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1661 | engines: {node: '>=8'} 1662 | hasBin: true 1663 | dev: true 1664 | 1665 | /is-docker@3.0.0: 1666 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1667 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1668 | hasBin: true 1669 | dev: true 1670 | 1671 | /is-extglob@2.1.1: 1672 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1673 | engines: {node: '>=0.10.0'} 1674 | dev: true 1675 | 1676 | /is-glob@4.0.3: 1677 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1678 | engines: {node: '>=0.10.0'} 1679 | dependencies: 1680 | is-extglob: 2.1.1 1681 | dev: true 1682 | 1683 | /is-inside-container@1.0.0: 1684 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1685 | engines: {node: '>=14.16'} 1686 | hasBin: true 1687 | dependencies: 1688 | is-docker: 3.0.0 1689 | dev: true 1690 | 1691 | /is-number@7.0.0: 1692 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1693 | engines: {node: '>=0.12.0'} 1694 | dev: true 1695 | 1696 | /is-path-inside@3.0.3: 1697 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1698 | engines: {node: '>=8'} 1699 | dev: true 1700 | 1701 | /is-stream@2.0.1: 1702 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1703 | engines: {node: '>=8'} 1704 | dev: true 1705 | 1706 | /is-stream@3.0.0: 1707 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1708 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1709 | dev: true 1710 | 1711 | /is-wsl@2.2.0: 1712 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1713 | engines: {node: '>=8'} 1714 | dependencies: 1715 | is-docker: 2.2.1 1716 | dev: true 1717 | 1718 | /isexe@2.0.0: 1719 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1720 | dev: true 1721 | 1722 | /jiti@1.20.0: 1723 | resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} 1724 | hasBin: true 1725 | dev: true 1726 | 1727 | /js-yaml@4.1.0: 1728 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1729 | hasBin: true 1730 | dependencies: 1731 | argparse: 2.0.1 1732 | dev: true 1733 | 1734 | /json-buffer@3.0.1: 1735 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1736 | dev: true 1737 | 1738 | /json-schema-traverse@0.4.1: 1739 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1740 | dev: true 1741 | 1742 | /json-stable-stringify-without-jsonify@1.0.1: 1743 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1744 | dev: true 1745 | 1746 | /keyv@4.5.4: 1747 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1748 | dependencies: 1749 | json-buffer: 3.0.1 1750 | dev: true 1751 | 1752 | /levn@0.4.1: 1753 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1754 | engines: {node: '>= 0.8.0'} 1755 | dependencies: 1756 | prelude-ls: 1.2.1 1757 | type-check: 0.4.0 1758 | dev: true 1759 | 1760 | /lilconfig@2.1.0: 1761 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1762 | engines: {node: '>=10'} 1763 | dev: true 1764 | 1765 | /lines-and-columns@1.2.4: 1766 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1767 | dev: true 1768 | 1769 | /locate-path@6.0.0: 1770 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1771 | engines: {node: '>=10'} 1772 | dependencies: 1773 | p-locate: 5.0.0 1774 | dev: true 1775 | 1776 | /lodash.merge@4.6.2: 1777 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1778 | dev: true 1779 | 1780 | /lru-cache@6.0.0: 1781 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1782 | engines: {node: '>=10'} 1783 | dependencies: 1784 | yallist: 4.0.0 1785 | dev: true 1786 | 1787 | /merge-stream@2.0.0: 1788 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1789 | dev: true 1790 | 1791 | /merge2@1.4.1: 1792 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1793 | engines: {node: '>= 8'} 1794 | dev: true 1795 | 1796 | /micromatch@4.0.5: 1797 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1798 | engines: {node: '>=8.6'} 1799 | dependencies: 1800 | braces: 3.0.2 1801 | picomatch: 2.3.1 1802 | dev: true 1803 | 1804 | /mimic-fn@2.1.0: 1805 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1806 | engines: {node: '>=6'} 1807 | dev: true 1808 | 1809 | /mimic-fn@4.0.0: 1810 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1811 | engines: {node: '>=12'} 1812 | dev: true 1813 | 1814 | /minimatch@3.1.2: 1815 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1816 | dependencies: 1817 | brace-expansion: 1.1.11 1818 | dev: true 1819 | 1820 | /ms@2.1.2: 1821 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1822 | dev: true 1823 | 1824 | /mz@2.7.0: 1825 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1826 | dependencies: 1827 | any-promise: 1.3.0 1828 | object-assign: 4.1.1 1829 | thenify-all: 1.6.0 1830 | dev: true 1831 | 1832 | /nanoid@3.3.6: 1833 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1834 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1835 | hasBin: true 1836 | dev: true 1837 | 1838 | /natural-compare@1.4.0: 1839 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1840 | dev: true 1841 | 1842 | /node-releases@2.0.13: 1843 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 1844 | dev: true 1845 | 1846 | /normalize-path@3.0.0: 1847 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1848 | engines: {node: '>=0.10.0'} 1849 | dev: true 1850 | 1851 | /normalize-range@0.1.2: 1852 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1853 | engines: {node: '>=0.10.0'} 1854 | dev: true 1855 | 1856 | /npm-run-path@4.0.1: 1857 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1858 | engines: {node: '>=8'} 1859 | dependencies: 1860 | path-key: 3.1.1 1861 | dev: true 1862 | 1863 | /npm-run-path@5.1.0: 1864 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 1865 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1866 | dependencies: 1867 | path-key: 4.0.0 1868 | dev: true 1869 | 1870 | /object-assign@4.1.1: 1871 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1872 | engines: {node: '>=0.10.0'} 1873 | dev: true 1874 | 1875 | /object-hash@3.0.0: 1876 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1877 | engines: {node: '>= 6'} 1878 | dev: true 1879 | 1880 | /once@1.4.0: 1881 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1882 | dependencies: 1883 | wrappy: 1.0.2 1884 | dev: true 1885 | 1886 | /onetime@5.1.2: 1887 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1888 | engines: {node: '>=6'} 1889 | dependencies: 1890 | mimic-fn: 2.1.0 1891 | dev: true 1892 | 1893 | /onetime@6.0.0: 1894 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1895 | engines: {node: '>=12'} 1896 | dependencies: 1897 | mimic-fn: 4.0.0 1898 | dev: true 1899 | 1900 | /open@9.1.0: 1901 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} 1902 | engines: {node: '>=14.16'} 1903 | dependencies: 1904 | default-browser: 4.0.0 1905 | define-lazy-prop: 3.0.0 1906 | is-inside-container: 1.0.0 1907 | is-wsl: 2.2.0 1908 | dev: true 1909 | 1910 | /optionator@0.9.3: 1911 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1912 | engines: {node: '>= 0.8.0'} 1913 | dependencies: 1914 | '@aashutoshrathi/word-wrap': 1.2.6 1915 | deep-is: 0.1.4 1916 | fast-levenshtein: 2.0.6 1917 | levn: 0.4.1 1918 | prelude-ls: 1.2.1 1919 | type-check: 0.4.0 1920 | dev: true 1921 | 1922 | /p-limit@3.1.0: 1923 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1924 | engines: {node: '>=10'} 1925 | dependencies: 1926 | yocto-queue: 0.1.0 1927 | dev: true 1928 | 1929 | /p-locate@5.0.0: 1930 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1931 | engines: {node: '>=10'} 1932 | dependencies: 1933 | p-limit: 3.1.0 1934 | dev: true 1935 | 1936 | /parent-module@1.0.1: 1937 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1938 | engines: {node: '>=6'} 1939 | dependencies: 1940 | callsites: 3.1.0 1941 | dev: true 1942 | 1943 | /path-exists@4.0.0: 1944 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1945 | engines: {node: '>=8'} 1946 | dev: true 1947 | 1948 | /path-is-absolute@1.0.1: 1949 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1950 | engines: {node: '>=0.10.0'} 1951 | dev: true 1952 | 1953 | /path-key@3.1.1: 1954 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1955 | engines: {node: '>=8'} 1956 | dev: true 1957 | 1958 | /path-key@4.0.0: 1959 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1960 | engines: {node: '>=12'} 1961 | dev: true 1962 | 1963 | /path-parse@1.0.7: 1964 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1965 | dev: true 1966 | 1967 | /path-type@4.0.0: 1968 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1969 | engines: {node: '>=8'} 1970 | dev: true 1971 | 1972 | /picocolors@1.0.0: 1973 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1974 | dev: true 1975 | 1976 | /picomatch@2.3.1: 1977 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1978 | engines: {node: '>=8.6'} 1979 | dev: true 1980 | 1981 | /pify@2.3.0: 1982 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1983 | engines: {node: '>=0.10.0'} 1984 | dev: true 1985 | 1986 | /pirates@4.0.6: 1987 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1988 | engines: {node: '>= 6'} 1989 | dev: true 1990 | 1991 | /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.31): 1992 | resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} 1993 | engines: {node: ^14 || ^16 || >=18} 1994 | peerDependencies: 1995 | postcss: ^8.4 1996 | dependencies: 1997 | postcss: 8.4.31 1998 | postcss-selector-parser: 6.0.13 1999 | dev: true 2000 | 2001 | /postcss-clamp@4.1.0(postcss@8.4.31): 2002 | resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} 2003 | engines: {node: '>=7.6.0'} 2004 | peerDependencies: 2005 | postcss: ^8.4.6 2006 | dependencies: 2007 | postcss: 8.4.31 2008 | postcss-value-parser: 4.2.0 2009 | dev: true 2010 | 2011 | /postcss-color-functional-notation@6.0.2(postcss@8.4.31): 2012 | resolution: {integrity: sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==} 2013 | engines: {node: ^14 || ^16 || >=18} 2014 | peerDependencies: 2015 | postcss: ^8.4 2016 | dependencies: 2017 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 2018 | postcss: 8.4.31 2019 | postcss-value-parser: 4.2.0 2020 | dev: true 2021 | 2022 | /postcss-color-hex-alpha@9.0.2(postcss@8.4.31): 2023 | resolution: {integrity: sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==} 2024 | engines: {node: ^14 || ^16 || >=18} 2025 | peerDependencies: 2026 | postcss: ^8.4 2027 | dependencies: 2028 | postcss: 8.4.31 2029 | postcss-value-parser: 4.2.0 2030 | dev: true 2031 | 2032 | /postcss-color-rebeccapurple@9.0.1(postcss@8.4.31): 2033 | resolution: {integrity: sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==} 2034 | engines: {node: ^14 || ^16 || >=18} 2035 | peerDependencies: 2036 | postcss: ^8.4 2037 | dependencies: 2038 | postcss: 8.4.31 2039 | postcss-value-parser: 4.2.0 2040 | dev: true 2041 | 2042 | /postcss-custom-media@10.0.2(postcss@8.4.31): 2043 | resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} 2044 | engines: {node: ^14 || ^16 || >=18} 2045 | peerDependencies: 2046 | postcss: ^8.4 2047 | dependencies: 2048 | '@csstools/cascade-layer-name-parser': 1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 2049 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 2050 | '@csstools/css-tokenizer': 2.2.1 2051 | '@csstools/media-query-list-parser': 2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 2052 | postcss: 8.4.31 2053 | dev: true 2054 | 2055 | /postcss-custom-properties@13.3.2(postcss@8.4.31): 2056 | resolution: {integrity: sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==} 2057 | engines: {node: ^14 || ^16 || >=18} 2058 | peerDependencies: 2059 | postcss: ^8.4 2060 | dependencies: 2061 | '@csstools/cascade-layer-name-parser': 1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 2062 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 2063 | '@csstools/css-tokenizer': 2.2.1 2064 | postcss: 8.4.31 2065 | postcss-value-parser: 4.2.0 2066 | dev: true 2067 | 2068 | /postcss-custom-selectors@7.1.6(postcss@8.4.31): 2069 | resolution: {integrity: sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==} 2070 | engines: {node: ^14 || ^16 || >=18} 2071 | peerDependencies: 2072 | postcss: ^8.4 2073 | dependencies: 2074 | '@csstools/cascade-layer-name-parser': 1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 2075 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 2076 | '@csstools/css-tokenizer': 2.2.1 2077 | postcss: 8.4.31 2078 | postcss-selector-parser: 6.0.13 2079 | dev: true 2080 | 2081 | /postcss-dir-pseudo-class@8.0.0(postcss@8.4.31): 2082 | resolution: {integrity: sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==} 2083 | engines: {node: ^14 || ^16 || >=18} 2084 | peerDependencies: 2085 | postcss: ^8.4 2086 | dependencies: 2087 | postcss: 8.4.31 2088 | postcss-selector-parser: 6.0.13 2089 | dev: true 2090 | 2091 | /postcss-double-position-gradients@5.0.2(postcss@8.4.31): 2092 | resolution: {integrity: sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==} 2093 | engines: {node: ^14 || ^16 || >=18} 2094 | peerDependencies: 2095 | postcss: ^8.4 2096 | dependencies: 2097 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 2098 | postcss: 8.4.31 2099 | postcss-value-parser: 4.2.0 2100 | dev: true 2101 | 2102 | /postcss-focus-visible@9.0.0(postcss@8.4.31): 2103 | resolution: {integrity: sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==} 2104 | engines: {node: ^14 || ^16 || >=18} 2105 | peerDependencies: 2106 | postcss: ^8.4 2107 | dependencies: 2108 | postcss: 8.4.31 2109 | postcss-selector-parser: 6.0.13 2110 | dev: true 2111 | 2112 | /postcss-focus-within@8.0.0(postcss@8.4.31): 2113 | resolution: {integrity: sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==} 2114 | engines: {node: ^14 || ^16 || >=18} 2115 | peerDependencies: 2116 | postcss: ^8.4 2117 | dependencies: 2118 | postcss: 8.4.31 2119 | postcss-selector-parser: 6.0.13 2120 | dev: true 2121 | 2122 | /postcss-font-variant@5.0.0(postcss@8.4.31): 2123 | resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} 2124 | peerDependencies: 2125 | postcss: ^8.1.0 2126 | dependencies: 2127 | postcss: 8.4.31 2128 | dev: true 2129 | 2130 | /postcss-gap-properties@5.0.0(postcss@8.4.31): 2131 | resolution: {integrity: sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==} 2132 | engines: {node: ^14 || ^16 || >=18} 2133 | peerDependencies: 2134 | postcss: ^8.4 2135 | dependencies: 2136 | postcss: 8.4.31 2137 | dev: true 2138 | 2139 | /postcss-image-set-function@6.0.1(postcss@8.4.31): 2140 | resolution: {integrity: sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==} 2141 | engines: {node: ^14 || ^16 || >=18} 2142 | peerDependencies: 2143 | postcss: ^8.4 2144 | dependencies: 2145 | postcss: 8.4.31 2146 | postcss-value-parser: 4.2.0 2147 | dev: true 2148 | 2149 | /postcss-import@15.1.0(postcss@8.4.31): 2150 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2151 | engines: {node: '>=14.0.0'} 2152 | peerDependencies: 2153 | postcss: ^8.0.0 2154 | dependencies: 2155 | postcss: 8.4.31 2156 | postcss-value-parser: 4.2.0 2157 | read-cache: 1.0.0 2158 | resolve: 1.22.8 2159 | dev: true 2160 | 2161 | /postcss-js@4.0.1(postcss@8.4.31): 2162 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2163 | engines: {node: ^12 || ^14 || >= 16} 2164 | peerDependencies: 2165 | postcss: ^8.4.21 2166 | dependencies: 2167 | camelcase-css: 2.0.1 2168 | postcss: 8.4.31 2169 | dev: true 2170 | 2171 | /postcss-lab-function@6.0.7(postcss@8.4.31): 2172 | resolution: {integrity: sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==} 2173 | engines: {node: ^14 || ^16 || >=18} 2174 | peerDependencies: 2175 | postcss: ^8.4 2176 | dependencies: 2177 | '@csstools/css-color-parser': 1.4.0(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) 2178 | '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) 2179 | '@csstools/css-tokenizer': 2.2.1 2180 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 2181 | postcss: 8.4.31 2182 | dev: true 2183 | 2184 | /postcss-load-config@4.0.1(postcss@8.4.31): 2185 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2186 | engines: {node: '>= 14'} 2187 | peerDependencies: 2188 | postcss: '>=8.0.9' 2189 | ts-node: '>=9.0.0' 2190 | peerDependenciesMeta: 2191 | postcss: 2192 | optional: true 2193 | ts-node: 2194 | optional: true 2195 | dependencies: 2196 | lilconfig: 2.1.0 2197 | postcss: 8.4.31 2198 | yaml: 2.3.3 2199 | dev: true 2200 | 2201 | /postcss-logical@7.0.0(postcss@8.4.31): 2202 | resolution: {integrity: sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==} 2203 | engines: {node: ^14 || ^16 || >=18} 2204 | peerDependencies: 2205 | postcss: ^8.4 2206 | dependencies: 2207 | postcss: 8.4.31 2208 | postcss-value-parser: 4.2.0 2209 | dev: true 2210 | 2211 | /postcss-nested@6.0.1(postcss@8.4.31): 2212 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2213 | engines: {node: '>=12.0'} 2214 | peerDependencies: 2215 | postcss: ^8.2.14 2216 | dependencies: 2217 | postcss: 8.4.31 2218 | postcss-selector-parser: 6.0.13 2219 | dev: true 2220 | 2221 | /postcss-nesting@12.0.1(postcss@8.4.31): 2222 | resolution: {integrity: sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==} 2223 | engines: {node: ^14 || ^16 || >=18} 2224 | peerDependencies: 2225 | postcss: ^8.4 2226 | dependencies: 2227 | '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) 2228 | postcss: 8.4.31 2229 | postcss-selector-parser: 6.0.13 2230 | dev: true 2231 | 2232 | /postcss-opacity-percentage@2.0.0(postcss@8.4.31): 2233 | resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} 2234 | engines: {node: ^14 || ^16 || >=18} 2235 | peerDependencies: 2236 | postcss: ^8.2 2237 | dependencies: 2238 | postcss: 8.4.31 2239 | dev: true 2240 | 2241 | /postcss-overflow-shorthand@5.0.0(postcss@8.4.31): 2242 | resolution: {integrity: sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==} 2243 | engines: {node: ^14 || ^16 || >=18} 2244 | peerDependencies: 2245 | postcss: ^8.4 2246 | dependencies: 2247 | postcss: 8.4.31 2248 | postcss-value-parser: 4.2.0 2249 | dev: true 2250 | 2251 | /postcss-page-break@3.0.4(postcss@8.4.31): 2252 | resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} 2253 | peerDependencies: 2254 | postcss: ^8 2255 | dependencies: 2256 | postcss: 8.4.31 2257 | dev: true 2258 | 2259 | /postcss-place@9.0.0(postcss@8.4.31): 2260 | resolution: {integrity: sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==} 2261 | engines: {node: ^14 || ^16 || >=18} 2262 | peerDependencies: 2263 | postcss: ^8.4 2264 | dependencies: 2265 | postcss: 8.4.31 2266 | postcss-value-parser: 4.2.0 2267 | dev: true 2268 | 2269 | /postcss-preset-env@9.2.0(postcss@8.4.31): 2270 | resolution: {integrity: sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==} 2271 | engines: {node: ^14 || ^16 || >=18} 2272 | peerDependencies: 2273 | postcss: ^8.4 2274 | dependencies: 2275 | '@csstools/postcss-cascade-layers': 4.0.0(postcss@8.4.31) 2276 | '@csstools/postcss-color-function': 3.0.7(postcss@8.4.31) 2277 | '@csstools/postcss-color-mix-function': 2.0.7(postcss@8.4.31) 2278 | '@csstools/postcss-exponential-functions': 1.0.1(postcss@8.4.31) 2279 | '@csstools/postcss-font-format-keywords': 3.0.0(postcss@8.4.31) 2280 | '@csstools/postcss-gamut-mapping': 1.0.0(postcss@8.4.31) 2281 | '@csstools/postcss-gradients-interpolation-method': 4.0.7(postcss@8.4.31) 2282 | '@csstools/postcss-hwb-function': 3.0.6(postcss@8.4.31) 2283 | '@csstools/postcss-ic-unit': 3.0.2(postcss@8.4.31) 2284 | '@csstools/postcss-initial': 1.0.0(postcss@8.4.31) 2285 | '@csstools/postcss-is-pseudo-class': 4.0.3(postcss@8.4.31) 2286 | '@csstools/postcss-logical-float-and-clear': 2.0.0(postcss@8.4.31) 2287 | '@csstools/postcss-logical-resize': 2.0.0(postcss@8.4.31) 2288 | '@csstools/postcss-logical-viewport-units': 2.0.3(postcss@8.4.31) 2289 | '@csstools/postcss-media-minmax': 1.1.0(postcss@8.4.31) 2290 | '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.3(postcss@8.4.31) 2291 | '@csstools/postcss-nested-calc': 3.0.0(postcss@8.4.31) 2292 | '@csstools/postcss-normalize-display-values': 3.0.1(postcss@8.4.31) 2293 | '@csstools/postcss-oklab-function': 3.0.7(postcss@8.4.31) 2294 | '@csstools/postcss-progressive-custom-properties': 3.0.2(postcss@8.4.31) 2295 | '@csstools/postcss-relative-color-syntax': 2.0.7(postcss@8.4.31) 2296 | '@csstools/postcss-scope-pseudo-class': 3.0.0(postcss@8.4.31) 2297 | '@csstools/postcss-stepped-value-functions': 3.0.2(postcss@8.4.31) 2298 | '@csstools/postcss-text-decoration-shorthand': 3.0.3(postcss@8.4.31) 2299 | '@csstools/postcss-trigonometric-functions': 3.0.2(postcss@8.4.31) 2300 | '@csstools/postcss-unset-value': 3.0.0(postcss@8.4.31) 2301 | autoprefixer: 10.4.16(postcss@8.4.31) 2302 | browserslist: 4.22.1 2303 | css-blank-pseudo: 6.0.0(postcss@8.4.31) 2304 | css-has-pseudo: 6.0.0(postcss@8.4.31) 2305 | css-prefers-color-scheme: 9.0.0(postcss@8.4.31) 2306 | cssdb: 7.8.0 2307 | postcss: 8.4.31 2308 | postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.31) 2309 | postcss-clamp: 4.1.0(postcss@8.4.31) 2310 | postcss-color-functional-notation: 6.0.2(postcss@8.4.31) 2311 | postcss-color-hex-alpha: 9.0.2(postcss@8.4.31) 2312 | postcss-color-rebeccapurple: 9.0.1(postcss@8.4.31) 2313 | postcss-custom-media: 10.0.2(postcss@8.4.31) 2314 | postcss-custom-properties: 13.3.2(postcss@8.4.31) 2315 | postcss-custom-selectors: 7.1.6(postcss@8.4.31) 2316 | postcss-dir-pseudo-class: 8.0.0(postcss@8.4.31) 2317 | postcss-double-position-gradients: 5.0.2(postcss@8.4.31) 2318 | postcss-focus-visible: 9.0.0(postcss@8.4.31) 2319 | postcss-focus-within: 8.0.0(postcss@8.4.31) 2320 | postcss-font-variant: 5.0.0(postcss@8.4.31) 2321 | postcss-gap-properties: 5.0.0(postcss@8.4.31) 2322 | postcss-image-set-function: 6.0.1(postcss@8.4.31) 2323 | postcss-lab-function: 6.0.7(postcss@8.4.31) 2324 | postcss-logical: 7.0.0(postcss@8.4.31) 2325 | postcss-nesting: 12.0.1(postcss@8.4.31) 2326 | postcss-opacity-percentage: 2.0.0(postcss@8.4.31) 2327 | postcss-overflow-shorthand: 5.0.0(postcss@8.4.31) 2328 | postcss-page-break: 3.0.4(postcss@8.4.31) 2329 | postcss-place: 9.0.0(postcss@8.4.31) 2330 | postcss-pseudo-class-any-link: 9.0.0(postcss@8.4.31) 2331 | postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.31) 2332 | postcss-selector-not: 7.0.1(postcss@8.4.31) 2333 | postcss-value-parser: 4.2.0 2334 | dev: true 2335 | 2336 | /postcss-pseudo-class-any-link@9.0.0(postcss@8.4.31): 2337 | resolution: {integrity: sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==} 2338 | engines: {node: ^14 || ^16 || >=18} 2339 | peerDependencies: 2340 | postcss: ^8.4 2341 | dependencies: 2342 | postcss: 8.4.31 2343 | postcss-selector-parser: 6.0.13 2344 | dev: true 2345 | 2346 | /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.31): 2347 | resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} 2348 | peerDependencies: 2349 | postcss: ^8.0.3 2350 | dependencies: 2351 | postcss: 8.4.31 2352 | dev: true 2353 | 2354 | /postcss-selector-not@7.0.1(postcss@8.4.31): 2355 | resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} 2356 | engines: {node: ^14 || ^16 || >=18} 2357 | peerDependencies: 2358 | postcss: ^8.4 2359 | dependencies: 2360 | postcss: 8.4.31 2361 | postcss-selector-parser: 6.0.13 2362 | dev: true 2363 | 2364 | /postcss-selector-parser@6.0.13: 2365 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2366 | engines: {node: '>=4'} 2367 | dependencies: 2368 | cssesc: 3.0.0 2369 | util-deprecate: 1.0.2 2370 | dev: true 2371 | 2372 | /postcss-value-parser@4.2.0: 2373 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2374 | dev: true 2375 | 2376 | /postcss@8.4.31: 2377 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 2378 | engines: {node: ^10 || ^12 || >=14} 2379 | dependencies: 2380 | nanoid: 3.3.6 2381 | picocolors: 1.0.0 2382 | source-map-js: 1.0.2 2383 | dev: true 2384 | 2385 | /prelude-ls@1.2.1: 2386 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2387 | engines: {node: '>= 0.8.0'} 2388 | dev: true 2389 | 2390 | /prettier-linter-helpers@1.0.0: 2391 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2392 | engines: {node: '>=6.0.0'} 2393 | dependencies: 2394 | fast-diff: 1.3.0 2395 | dev: true 2396 | 2397 | /prettier@3.0.3: 2398 | resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} 2399 | engines: {node: '>=14'} 2400 | hasBin: true 2401 | dev: true 2402 | 2403 | /punycode@2.3.0: 2404 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2405 | engines: {node: '>=6'} 2406 | dev: true 2407 | 2408 | /queue-microtask@1.2.3: 2409 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2410 | dev: true 2411 | 2412 | /read-cache@1.0.0: 2413 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2414 | dependencies: 2415 | pify: 2.3.0 2416 | dev: true 2417 | 2418 | /readdirp@3.6.0: 2419 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2420 | engines: {node: '>=8.10.0'} 2421 | dependencies: 2422 | picomatch: 2.3.1 2423 | dev: true 2424 | 2425 | /resolve-from@4.0.0: 2426 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2427 | engines: {node: '>=4'} 2428 | dev: true 2429 | 2430 | /resolve@1.22.8: 2431 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2432 | hasBin: true 2433 | dependencies: 2434 | is-core-module: 2.13.1 2435 | path-parse: 1.0.7 2436 | supports-preserve-symlinks-flag: 1.0.0 2437 | dev: true 2438 | 2439 | /reusify@1.0.4: 2440 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2441 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2442 | dev: true 2443 | 2444 | /rimraf@3.0.2: 2445 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2446 | hasBin: true 2447 | dependencies: 2448 | glob: 7.2.3 2449 | dev: true 2450 | 2451 | /rollup@3.29.4: 2452 | resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} 2453 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2454 | hasBin: true 2455 | optionalDependencies: 2456 | fsevents: 2.3.3 2457 | dev: true 2458 | 2459 | /run-applescript@5.0.0: 2460 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} 2461 | engines: {node: '>=12'} 2462 | dependencies: 2463 | execa: 5.1.1 2464 | dev: true 2465 | 2466 | /run-parallel@1.2.0: 2467 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2468 | dependencies: 2469 | queue-microtask: 1.2.3 2470 | dev: true 2471 | 2472 | /semver@7.5.4: 2473 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2474 | engines: {node: '>=10'} 2475 | hasBin: true 2476 | dependencies: 2477 | lru-cache: 6.0.0 2478 | dev: true 2479 | 2480 | /shebang-command@2.0.0: 2481 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2482 | engines: {node: '>=8'} 2483 | dependencies: 2484 | shebang-regex: 3.0.0 2485 | dev: true 2486 | 2487 | /shebang-regex@3.0.0: 2488 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2489 | engines: {node: '>=8'} 2490 | dev: true 2491 | 2492 | /signal-exit@3.0.7: 2493 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2494 | dev: true 2495 | 2496 | /slash@3.0.0: 2497 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2498 | engines: {node: '>=8'} 2499 | dev: true 2500 | 2501 | /source-map-js@1.0.2: 2502 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2503 | engines: {node: '>=0.10.0'} 2504 | dev: true 2505 | 2506 | /strip-ansi@6.0.1: 2507 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2508 | engines: {node: '>=8'} 2509 | dependencies: 2510 | ansi-regex: 5.0.1 2511 | dev: true 2512 | 2513 | /strip-final-newline@2.0.0: 2514 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2515 | engines: {node: '>=6'} 2516 | dev: true 2517 | 2518 | /strip-final-newline@3.0.0: 2519 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2520 | engines: {node: '>=12'} 2521 | dev: true 2522 | 2523 | /strip-json-comments@3.1.1: 2524 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2525 | engines: {node: '>=8'} 2526 | dev: true 2527 | 2528 | /sucrase@3.34.0: 2529 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 2530 | engines: {node: '>=8'} 2531 | hasBin: true 2532 | dependencies: 2533 | '@jridgewell/gen-mapping': 0.3.3 2534 | commander: 4.1.1 2535 | glob: 7.1.6 2536 | lines-and-columns: 1.2.4 2537 | mz: 2.7.0 2538 | pirates: 4.0.6 2539 | ts-interface-checker: 0.1.13 2540 | dev: true 2541 | 2542 | /supports-color@7.2.0: 2543 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2544 | engines: {node: '>=8'} 2545 | dependencies: 2546 | has-flag: 4.0.0 2547 | dev: true 2548 | 2549 | /supports-preserve-symlinks-flag@1.0.0: 2550 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2551 | engines: {node: '>= 0.4'} 2552 | dev: true 2553 | 2554 | /synckit@0.8.5: 2555 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} 2556 | engines: {node: ^14.18.0 || >=16.0.0} 2557 | dependencies: 2558 | '@pkgr/utils': 2.4.2 2559 | tslib: 2.6.2 2560 | dev: true 2561 | 2562 | /tailwindcss@3.3.5: 2563 | resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} 2564 | engines: {node: '>=14.0.0'} 2565 | hasBin: true 2566 | dependencies: 2567 | '@alloc/quick-lru': 5.2.0 2568 | arg: 5.0.2 2569 | chokidar: 3.5.3 2570 | didyoumean: 1.2.2 2571 | dlv: 1.1.3 2572 | fast-glob: 3.3.1 2573 | glob-parent: 6.0.2 2574 | is-glob: 4.0.3 2575 | jiti: 1.20.0 2576 | lilconfig: 2.1.0 2577 | micromatch: 4.0.5 2578 | normalize-path: 3.0.0 2579 | object-hash: 3.0.0 2580 | picocolors: 1.0.0 2581 | postcss: 8.4.31 2582 | postcss-import: 15.1.0(postcss@8.4.31) 2583 | postcss-js: 4.0.1(postcss@8.4.31) 2584 | postcss-load-config: 4.0.1(postcss@8.4.31) 2585 | postcss-nested: 6.0.1(postcss@8.4.31) 2586 | postcss-selector-parser: 6.0.13 2587 | resolve: 1.22.8 2588 | sucrase: 3.34.0 2589 | transitivePeerDependencies: 2590 | - ts-node 2591 | dev: true 2592 | 2593 | /text-table@0.2.0: 2594 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2595 | dev: true 2596 | 2597 | /thenify-all@1.6.0: 2598 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2599 | engines: {node: '>=0.8'} 2600 | dependencies: 2601 | thenify: 3.3.1 2602 | dev: true 2603 | 2604 | /thenify@3.3.1: 2605 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2606 | dependencies: 2607 | any-promise: 1.3.0 2608 | dev: true 2609 | 2610 | /titleize@3.0.0: 2611 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} 2612 | engines: {node: '>=12'} 2613 | dev: true 2614 | 2615 | /to-regex-range@5.0.1: 2616 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2617 | engines: {node: '>=8.0'} 2618 | dependencies: 2619 | is-number: 7.0.0 2620 | dev: true 2621 | 2622 | /ts-api-utils@1.0.3(typescript@5.2.2): 2623 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 2624 | engines: {node: '>=16.13.0'} 2625 | peerDependencies: 2626 | typescript: '>=4.2.0' 2627 | dependencies: 2628 | typescript: 5.2.2 2629 | dev: true 2630 | 2631 | /ts-interface-checker@0.1.13: 2632 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2633 | dev: true 2634 | 2635 | /tslib@2.6.2: 2636 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2637 | dev: true 2638 | 2639 | /type-check@0.4.0: 2640 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2641 | engines: {node: '>= 0.8.0'} 2642 | dependencies: 2643 | prelude-ls: 1.2.1 2644 | dev: true 2645 | 2646 | /type-fest@0.20.2: 2647 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2648 | engines: {node: '>=10'} 2649 | dev: true 2650 | 2651 | /typescript@5.2.2: 2652 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 2653 | engines: {node: '>=14.17'} 2654 | hasBin: true 2655 | dev: true 2656 | 2657 | /untildify@4.0.0: 2658 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} 2659 | engines: {node: '>=8'} 2660 | dev: true 2661 | 2662 | /update-browserslist-db@1.0.13(browserslist@4.22.1): 2663 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2664 | hasBin: true 2665 | peerDependencies: 2666 | browserslist: '>= 4.21.0' 2667 | dependencies: 2668 | browserslist: 4.22.1 2669 | escalade: 3.1.1 2670 | picocolors: 1.0.0 2671 | dev: true 2672 | 2673 | /uri-js@4.4.1: 2674 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2675 | dependencies: 2676 | punycode: 2.3.0 2677 | dev: true 2678 | 2679 | /util-deprecate@1.0.2: 2680 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2681 | dev: true 2682 | 2683 | /vite@4.5.0: 2684 | resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} 2685 | engines: {node: ^14.18.0 || >=16.0.0} 2686 | hasBin: true 2687 | peerDependencies: 2688 | '@types/node': '>= 14' 2689 | less: '*' 2690 | lightningcss: ^1.21.0 2691 | sass: '*' 2692 | stylus: '*' 2693 | sugarss: '*' 2694 | terser: ^5.4.0 2695 | peerDependenciesMeta: 2696 | '@types/node': 2697 | optional: true 2698 | less: 2699 | optional: true 2700 | lightningcss: 2701 | optional: true 2702 | sass: 2703 | optional: true 2704 | stylus: 2705 | optional: true 2706 | sugarss: 2707 | optional: true 2708 | terser: 2709 | optional: true 2710 | dependencies: 2711 | esbuild: 0.18.20 2712 | postcss: 8.4.31 2713 | rollup: 3.29.4 2714 | optionalDependencies: 2715 | fsevents: 2.3.3 2716 | dev: true 2717 | 2718 | /which@2.0.2: 2719 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2720 | engines: {node: '>= 8'} 2721 | hasBin: true 2722 | dependencies: 2723 | isexe: 2.0.0 2724 | dev: true 2725 | 2726 | /wrappy@1.0.2: 2727 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2728 | dev: true 2729 | 2730 | /yallist@4.0.0: 2731 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2732 | dev: true 2733 | 2734 | /yaml@2.3.3: 2735 | resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} 2736 | engines: {node: '>= 14'} 2737 | dev: true 2738 | 2739 | /yocto-queue@0.1.0: 2740 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2741 | engines: {node: '>=10'} 2742 | dev: true 2743 | 2744 | /zod@3.22.4: 2745 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} 2746 | dev: false 2747 | -------------------------------------------------------------------------------- /client/postcss.config.js: -------------------------------------------------------------------------------- 1 | const tailwindcss = require("tailwindcss"); 2 | module.exports = { 3 | plugins: [tailwindcss],// "postcss-preset-env", 4 | }; -------------------------------------------------------------------------------- /client/src/css/style.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @font-face { 6 | font-family: "Montserrat"; 7 | src: url("../fonts/Montserrat-Regular.ttf"); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | @font-face { 13 | font-family: "Montserrat"; 14 | src: url("../fonts/Montserrat-Bold.ttf"); 15 | font-weight: bold; 16 | font-style: normal; 17 | } 18 | 19 | @font-face { 20 | font-family: "Montserrat"; 21 | src: url("../fonts/Montserrat-Italic.ttf"); 22 | font-weight: normal; 23 | font-style: italic; 24 | } 25 | 26 | @font-face { 27 | font-family: "Montserrat"; 28 | src: url("../fonts/Montserrat-BoldItalic.ttf"); 29 | font-weight: bold; 30 | font-style: italic; 31 | } 32 | 33 | @font-face { 34 | font-family: "Montserrat"; 35 | src: url("../fonts/Montserrat-Medium.ttf"); 36 | font-weight: 500; 37 | font-style: normal; 38 | } 39 | 40 | @font-face { 41 | font-family: "Montserrat"; 42 | src: url("../fonts/Montserrat-MediumItalic.ttf"); 43 | font-weight: 500; 44 | font-style: italic; 45 | } 46 | 47 | @font-face { 48 | font-family: "Montserrat"; 49 | src: url("../fonts/Montserrat-SemiBold.ttf"); 50 | font-weight: 600; 51 | font-style: normal; 52 | } 53 | 54 | @font-face { 55 | font-family: "Montserrat"; 56 | src: url("../fonts/Montserrat-SemiBoldItalic.ttf"); 57 | font-weight: 600; 58 | font-style: italic; 59 | } 60 | 61 | @font-face { 62 | font-family: "Montserrat"; 63 | src: url("../fonts/Montserrat-Light.ttf"); 64 | font-weight: 300; 65 | font-style: normal; 66 | } 67 | 68 | @font-face { 69 | font-family: "Montserrat"; 70 | src: url("../fonts/Montserrat-LightItalic.ttf"); 71 | font-weight: 300; 72 | font-style: italic; 73 | } 74 | 75 | @font-face { 76 | font-family: "Montserrat"; 77 | src: url("../fonts/Montserrat-ExtraLight.ttf"); 78 | font-weight: 200; 79 | font-style: normal; 80 | } 81 | 82 | @font-face { 83 | font-family: "Montserrat"; 84 | src: url("../fonts/Montserrat-ExtraLightItalic.ttf"); 85 | font-weight: 200; 86 | font-style: italic; 87 | } 88 | 89 | @font-face { 90 | font-family: "Montserrat"; 91 | src: url("../fonts/Montserrat-Thin.ttf"); 92 | font-weight: 100; 93 | font-style: normal; 94 | } 95 | 96 | @font-face { 97 | font-family: "Montserrat"; 98 | src: url("../fonts/Montserrat-ThinItalic.ttf"); 99 | font-weight: 100; 100 | font-style: italic; 101 | } 102 | 103 | @layer base { 104 | html { 105 | font-family: "Montserrat"; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Black.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-BlackItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-BoldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-ExtraBold.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-ExtraLight.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Italic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Light.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-LightItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-MediumItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-SemiBold.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-Thin.ttf -------------------------------------------------------------------------------- /client/src/fonts/Montserrat-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/client/src/fonts/Montserrat-ThinItalic.ttf -------------------------------------------------------------------------------- /client/src/index.ts: -------------------------------------------------------------------------------- 1 | import "./css/style.css"; 2 | 3 | import Alpine from "alpinejs"; 4 | import htmx from "htmx.org"; 5 | 6 | declare global { 7 | interface Window { 8 | Alpine: typeof Alpine; 9 | htmx: typeof htmx; 10 | } 11 | } 12 | 13 | window.Alpine = Alpine; 14 | window.htmx = htmx; 15 | -------------------------------------------------------------------------------- /client/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.js", "../views/*.html", "../views/*.templ"], 4 | darkMode: "class", 5 | theme: { 6 | extend: {} 7 | }, 8 | plugins: [require("daisyui")] 9 | }; 10 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "rootDir": "src", 4 | "outDir": "dist", 5 | "strict": true, 6 | "lib": [ 7 | "ES6", 8 | "DOM" 9 | ], 10 | "moduleResolution": "node", 11 | "module": "ES2015", 12 | "target": "ES6", 13 | "sourceMap": true, 14 | "esModuleInterop": true, 15 | "allowJs": true, 16 | "checkJs": false, 17 | "experimentalDecorators": true, 18 | "resolveJsonModule": true, 19 | }, 20 | "include": [ 21 | "src/**/*.ts", 22 | ] 23 | } -------------------------------------------------------------------------------- /client/vite.config.js: -------------------------------------------------------------------------------- 1 | // vite.config.js 2 | /** @type {import('vite').UserConfig} */ 3 | export default { 4 | base: '/assets/dist', 5 | build: { 6 | outDir: '../static/dist', 7 | rollupOptions: { 8 | input: 'src/index.ts', 9 | output: { 10 | entryFileNames: 'index.js', 11 | assetFileNames: '[name].[ext]', 12 | } 13 | }, 14 | }, 15 | plugins: [], 16 | } -------------------------------------------------------------------------------- /cmd/boot/config.go: -------------------------------------------------------------------------------- 1 | package boot 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | "os" 7 | 8 | "github.com/sethvargo/go-envconfig" 9 | ) 10 | 11 | type Config struct { 12 | CurrentDirectory string 13 | StaticFileDir string `env:"STATIC_FILE_DIR,default=./static"` 14 | DatabaseURL string `env:"DATABASE_URL,default=sqlite://file::memory:?cache=shared"` 15 | Server struct { 16 | Port int `env:"PORT,default=8080"` 17 | } 18 | } 19 | 20 | func LoadConfig() (*Config, error) { 21 | var cfg Config 22 | if err := envconfig.Process(context.Background(), &cfg); err != nil { 23 | return nil, err 24 | } 25 | cwd, err := os.Getwd() 26 | if err != nil { 27 | return nil, fmt.Errorf("getting current directory: %w", err) 28 | } 29 | cfg.CurrentDirectory = cwd 30 | 31 | return &cfg, nil 32 | } 33 | 34 | func (c *Config) ServerAddress() string { 35 | return fmt.Sprintf(":%d", c.Server.Port) 36 | } 37 | -------------------------------------------------------------------------------- /cmd/server/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | client "github.com/jdudmesh/gomon-client" 5 | "github.com/labstack/echo/v4" 6 | "github.com/labstack/echo/v4/middleware" 7 | "github.com/labstack/gommon/log" 8 | 9 | "gohtmx/cmd/boot" 10 | "gohtmx/internal/handlers" 11 | "gohtmx/internal/store" 12 | ) 13 | 14 | type Reloader struct { 15 | } 16 | 17 | func (r *Reloader) Reload(data string) { 18 | log.Debugf("Reloading trigger: %s", data) 19 | } 20 | 21 | func main() { 22 | cfg, err := boot.LoadConfig() 23 | if err != nil { 24 | panic(err) 25 | } 26 | log.Infof("Starting UI server: %s", cfg.CurrentDirectory) 27 | 28 | store, err := store.NewSqlite(cfg.DatabaseURL, true) 29 | if err != nil { 30 | log.Fatalf("unable to connect to database: %v", err) 31 | } 32 | defer store.Close() 33 | 34 | e := echo.New() 35 | e.Use(middleware.Logger()) 36 | e.Static("/assets", cfg.StaticFileDir) 37 | 38 | r := &Reloader{} 39 | t, err := client.New(r, e.Logger) 40 | if err != nil { 41 | log.Fatalf("unable to start reloader: %v", err) 42 | } 43 | defer t.Close() 44 | if err := t.Run(); err != nil { 45 | panic(err) 46 | } 47 | 48 | e.GET("/", handlers.HomePage()) 49 | e.GET("/components/auth-buttons", handlers.AuthButtons(store)) 50 | 51 | log.Fatal(e.Start(cfg.ServerAddress())) 52 | } 53 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module gohtmx 2 | 3 | go 1.20 4 | 5 | require ( 6 | github.com/a-h/templ v0.2.432 7 | github.com/jdudmesh/gomon-client v0.2.3 8 | github.com/jmoiron/sqlx v1.3.5 9 | github.com/labstack/echo/v4 v4.11.1 10 | github.com/labstack/gommon v0.4.0 11 | github.com/mattn/go-sqlite3 v1.14.18 12 | github.com/sethvargo/go-envconfig v0.9.0 13 | ) 14 | 15 | require ( 16 | github.com/Microsoft/go-winio v0.6.1 // indirect 17 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect 18 | github.com/james-barrow/golang-ipc v1.2.4 // indirect 19 | github.com/mattn/go-colorable v0.1.13 // indirect 20 | github.com/mattn/go-isatty v0.0.19 // indirect 21 | github.com/valyala/bytebufferpool v1.0.0 // indirect 22 | github.com/valyala/fasttemplate v1.2.2 // indirect 23 | golang.org/x/crypto v0.11.0 // indirect 24 | golang.org/x/mod v0.10.0 // indirect 25 | golang.org/x/net v0.12.0 // indirect 26 | golang.org/x/sys v0.10.0 // indirect 27 | golang.org/x/text v0.11.0 // indirect 28 | golang.org/x/time v0.3.0 // indirect 29 | golang.org/x/tools v0.9.1 // indirect 30 | ) 31 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= 2 | github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= 3 | github.com/a-h/templ v0.2.432 h1:/8sSs0janzx/DvXlYi+3KUkZABvm7s3lejbvhPZ1rSg= 4 | github.com/a-h/templ v0.2.432/go.mod h1:6Lfhsl3Z4/vXl7jjEjkJRCqoWDGjDnuKgzjYMDSddas= 5 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 6 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 7 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 8 | github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= 9 | github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 10 | github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= 11 | github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= 12 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 13 | github.com/james-barrow/golang-ipc v1.2.4 h1:d4NXRQxq6OWviWU8uAaob8R0YZGy/PhAkXGLpBNpkA4= 14 | github.com/james-barrow/golang-ipc v1.2.4/go.mod h1:+egiWSbOWmiPucFGSl4GNB1YSzrVGehyl7/7pW4N8F0= 15 | github.com/jdudmesh/gomon-client v0.2.3 h1:3LgF2GG8Saq4H/5xB11QeDqCpZ2LQ9OPvnLzKasB6io= 16 | github.com/jdudmesh/gomon-client v0.2.3/go.mod h1:an6tGEZcmNrIhZYwohm3bCJqiDogYQDAAQogxx38dkI= 17 | github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= 18 | github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= 19 | github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= 20 | github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= 21 | github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= 22 | github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= 23 | github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= 24 | github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= 25 | github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 26 | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= 27 | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= 28 | github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= 29 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 30 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= 31 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 32 | github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= 33 | github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI= 34 | github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= 35 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 36 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 37 | github.com/sethvargo/go-envconfig v0.9.0 h1:Q6FQ6hVEeTECULvkJZakq3dZMeBQ3JUpcKMfPQbKMDE= 38 | github.com/sethvargo/go-envconfig v0.9.0/go.mod h1:Iz1Gy1Sf3T64TQlJSvee81qDhf7YIlt8GMUX6yyNFs0= 39 | github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 40 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 41 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 42 | github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= 43 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= 44 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= 45 | github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= 46 | github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= 47 | github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= 48 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 49 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 50 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 51 | golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= 52 | golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 53 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 54 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 55 | golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= 56 | golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 57 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 58 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 59 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 60 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 61 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 62 | golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= 63 | golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 64 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 65 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 66 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 67 | golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= 68 | golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 69 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 70 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 71 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 72 | golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 73 | golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 74 | golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 75 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 76 | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 77 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 78 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 79 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 80 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 81 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 82 | golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= 83 | golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 84 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 85 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 86 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 87 | golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 88 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 89 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 90 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 91 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 92 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 93 | golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= 94 | golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 95 | golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= 96 | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 97 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 98 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 99 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 100 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 101 | golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= 102 | golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 103 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 104 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 105 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 106 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 107 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 108 | -------------------------------------------------------------------------------- /gomon.config.yml: -------------------------------------------------------------------------------- 1 | entrypoint: ./cmd/server/main.go 2 | 3 | excludePaths: ["vendor", "client"] 4 | 5 | hardReload: 6 | - "*.go" 7 | - "go.mod" 8 | - "*.templ" 9 | 10 | softReload: 11 | - "*.html" 12 | - "*.css" 13 | - "*.js" 14 | 15 | prestart: 16 | - "templ generate" 17 | 18 | envFiles: 19 | - ".env.local" 20 | 21 | reloadOnUnhandled: false 22 | 23 | proxy: 24 | enabled: true 25 | port: 4000 26 | downstream: 27 | host: localhost:8080 28 | timeout: 5 29 | ui: 30 | enabled: true 31 | -------------------------------------------------------------------------------- /internal/handlers/auth.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "bytes" 5 | "context" 6 | "gohtmx/internal/model" 7 | "gohtmx/views" 8 | 9 | "github.com/labstack/echo/v4" 10 | "github.com/labstack/gommon/log" 11 | ) 12 | 13 | type datastore interface { 14 | CurrentUser(ctx context.Context) (*model.User, error) 15 | } 16 | 17 | func AuthButtons(store datastore) echo.HandlerFunc { 18 | return func(c echo.Context) error { 19 | user, err := store.CurrentUser(c.Request().Context()) 20 | if err != nil { 21 | return echo.NewHTTPError(500, err) 22 | } 23 | buf := bytes.NewBuffer(nil) 24 | err = views.AuthButtons(user).Render(c.Request().Context(), buf) 25 | if err != nil { 26 | log.Warn("TODO: you need to implement this properly") 27 | return echo.NewHTTPError(500, err) 28 | } 29 | return c.Blob(200, "text/html; charset=utf-8", buf.Bytes()) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /internal/handlers/home.go: -------------------------------------------------------------------------------- 1 | package handlers 2 | 3 | import ( 4 | "bytes" 5 | "context" 6 | 7 | "gohtmx/views" 8 | 9 | "github.com/labstack/echo/v4" 10 | "github.com/labstack/gommon/log" 11 | ) 12 | 13 | func HomePage() echo.HandlerFunc { 14 | buf := bytes.NewBuffer(nil) 15 | err := views.HomePage("Demo - Home", nil).Render(context.Background(), buf) 16 | if err != nil { 17 | log.Warn("TODO: you need to implement this properly") 18 | log.Errorf("rendering index: %s", err) 19 | } 20 | return func(c echo.Context) error { 21 | return c.Blob(200, "text/html; charset=utf-8", buf.Bytes()) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /internal/model/user.go: -------------------------------------------------------------------------------- 1 | package model 2 | 3 | import "time" 4 | 5 | type EntityID string 6 | 7 | type EntityStatus int 8 | 9 | const ( 10 | StatusPending EntityStatus = 0 11 | StatusAvailable EntityStatus = 1 12 | StatusError EntityStatus = 100 13 | StatusExpired EntityStatus = 101 14 | StatusLocked EntityStatus = 102 15 | StatusCancelled EntityStatus = 103 16 | StatusDeleted EntityStatus = 999 17 | ) 18 | 19 | type User struct { 20 | ID EntityID `json:"ID"` 21 | CreatedAt time.Time `json:"createdAt"` 22 | UpdatedAt *time.Time `json:"updatedAt,omitempty"` 23 | LastLoginAt *time.Time `json:"lastLoginAt"` 24 | Status EntityStatus `json:"status"` 25 | LoginAttempts int `json:"loginAttempts"` 26 | Name string `json:"name"` 27 | Email string `json:"email"` 28 | Password string `json:"password"` 29 | } 30 | -------------------------------------------------------------------------------- /internal/store/sqlite3.go: -------------------------------------------------------------------------------- 1 | package store 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | "gohtmx/internal/model" 7 | 8 | "github.com/jmoiron/sqlx" 9 | "github.com/labstack/gommon/log" 10 | _ "github.com/mattn/go-sqlite3" 11 | ) 12 | 13 | type sqliteDatabase struct { 14 | db *sqlx.DB 15 | isDevelopment bool 16 | } 17 | 18 | func NewSqlite(databaseURL string, isDevelopment bool) (*sqliteDatabase, error) { 19 | db, err := sqlx.Connect("sqlite3", databaseURL) 20 | if err != nil { 21 | return nil, fmt.Errorf("connecting to database: %w", err) 22 | } 23 | 24 | return &sqliteDatabase{ 25 | db, isDevelopment, 26 | }, nil 27 | } 28 | 29 | func (d *sqliteDatabase) Close() error { 30 | return d.db.Close() 31 | } 32 | 33 | func (d *sqliteDatabase) CurrentUser(ctx context.Context) (*model.User, error) { 34 | log.Error("TODO: you need to implement this") 35 | return nil, nil 36 | } 37 | -------------------------------------------------------------------------------- /static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/static/images/logo.png -------------------------------------------------------------------------------- /static/images/logos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdudmesh/go-htmx-template/b8a1071874e185e3f83a18bb123d7a8b7c54f6c0/static/images/logos.jpg -------------------------------------------------------------------------------- /views/home.templ: -------------------------------------------------------------------------------- 1 | package views 2 | 3 | import ( 4 | "gohtmx/internal/model" 5 | ) 6 | 7 | templ BasePage(title string, showNavbar bool, user *model.User) { 8 | 9 | 10 |
11 | 12 |37 | Lede 38 |
39 |59 | Intro 60 |
61 |") 105 | if err != nil { 106 | return err 107 | } 108 | var_7 := `Lede` 109 | _, err = templBuffer.WriteString(var_7) 110 | if err != nil { 111 | return err 112 | } 113 | _, err = templBuffer.WriteString("
") 150 | if err != nil { 151 | return err 152 | } 153 | var_12 := `Intro` 154 | _, err = templBuffer.WriteString(var_12) 155 | if err != nil { 156 | return err 157 | } 158 | _, err = templBuffer.WriteString("