├── .bruno └── logseq-todoist-plugin │ ├── Test Synnc.bru │ └── bruno.json ├── .github ├── FUNDING.yml └── workflows │ └── publish.yml ├── .gitignore ├── .husky └── pre-commit ├── .prettierrc ├── LICENSE.md ├── README.md ├── eslint.config.mjs ├── icon.png ├── index.html ├── package.json ├── pnpm-lock.yaml ├── screenshots ├── enter-variables2.png ├── inline-filter.gif ├── plugin-settings.png ├── pull-tasks-todoist.gif ├── pull-tasks.png ├── sample-env.png ├── scheduled.png ├── send-task-todoist.gif └── todoist-url.png ├── src ├── constants.ts ├── features │ ├── helpers.ts │ ├── retrieve │ │ ├── index.ts │ │ └── insert-tasks-into-graph.ts │ └── send │ │ ├── components │ │ ├── SendTask.tsx │ │ └── style.css │ │ └── index.ts ├── handleListeners.ts ├── index.tsx └── settings │ └── index.ts ├── tsconfig.json └── vite.config.ts /.bruno/logseq-todoist-plugin/Test Synnc.bru: -------------------------------------------------------------------------------- 1 | meta { 2 | name: Test Synnc 3 | type: http 4 | seq: 2 5 | } 6 | 7 | get { 8 | url: https://api.todoist.com/sync/v9/sync 9 | body: none 10 | auth: none 11 | } 12 | -------------------------------------------------------------------------------- /.bruno/logseq-todoist-plugin/bruno.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1", 3 | "name": "logseq-todoist-plugin", 4 | "type": "collection", 5 | "ignore": [ 6 | "node_modules", 7 | ".git" 8 | ] 9 | } -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [hkgnp] 2 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Build Logseq Plugin 3 | 4 | on: 5 | push: 6 | branches: 7 | - "main" 8 | paths-ignore: 9 | - 'README.md' 10 | workflow_dispatch: 11 | 12 | env: 13 | PLUGIN_NAME: ${{ github.event.repository.name }} 14 | 15 | jobs: 16 | build: 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - uses: actions/checkout@v3 21 | 22 | - name: Use Node.js 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: "20.x" # You might need to adjust this value to your own version 26 | 27 | - uses: pnpm/action-setup@v4 28 | with: 29 | version: 9.4.0 30 | 31 | - name: Build 32 | id: build 33 | run: | 34 | pnpm i && pnpm run build 35 | mkdir ${{ env.PLUGIN_NAME }} 36 | cp README.md package.json icon.png ${{ env.PLUGIN_NAME }} 37 | mv dist ${{ env.PLUGIN_NAME }} 38 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 39 | ls 40 | echo "tag_name=git tag --sort version:refname | tail -n 1" >> $GITHUB_OUTPUT 41 | 42 | - name: Release 43 | run: npx semantic-release 44 | env: 45 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | .env.production 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | .parcel-cache 80 | 81 | # Next.js build output 82 | .next 83 | out 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | dist 88 | 89 | # Gatsby files 90 | .cache/ 91 | # Comment in the public line in if your project uses Gatsby and not Next.js 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # public 94 | 95 | # vuepress build output 96 | .vuepress/dist 97 | 98 | # Serverless directories 99 | .serverless/ 100 | 101 | # FuseBox cache 102 | .fusebox/ 103 | 104 | # DynamoDB Local files 105 | .dynamodb/ 106 | 107 | # TernJS port file 108 | .tern-port 109 | 110 | # Stores VSCode versions used for testing VSCode extensions 111 | .vscode-test 112 | 113 | # yarn v2 114 | .yarn/cache 115 | .yarn/unplugged 116 | .yarn/build-state.yml 117 | .yarn/install-state.gz 118 | .pnp.* 119 | .DS_Store 120 | .idea 121 | .vscode 122 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | echo 'Running eslint' 2 | npx eslint . --fix 3 | echo 'Running tsc' 4 | tsc 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 https://github.com/benjypng 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [:gift_heart: Sponsor this project on Github](https://github.com/sponsors/hkgnp) or [:coffee: Get me a coffee](https://www.buymeacoffee.com/hkgnp.dev) if you like this plugin! 2 | 3 | # Overview 4 | 5 | This simple plugin has 2 primary features: 6 | 7 | ## Retrieving tasks from Todoist. 8 | 9 | You can retrieve tasks in 3 ways: 10 | 11 | - Retrieving tasks from a default project (indicated in plugin settings); 12 | - Retrieving today's tasks, regardless of the project; and 13 | - Retrieving tasks based on a custom filter. Key in the desired filter in any block, and type `/Todoist: Retrieve Custom Filter` 14 | 15 | ## Sending tasks to Todoist 16 | 17 | You can send tasks in 2 ways: 18 | 19 | - If you set a default project to send tasks to, just trigger `/Todoist: Send Task` on the block containing the task. 20 | - If no default project is indicated, there will be a popup to specify the necessary parameters. 21 | - You can also choose `/Todoist: Send Task (manual)` to trigger the popup. 22 | 23 | ## Preferences 24 | 25 | The plugin settings page contains other preferences to customise how you want tasks to be retrieved or sent to Todoist. 26 | 27 | # Hiding block properties 28 | 29 | The plugin automatically creates the following block properties: `todoistid`, `comments`, `atttachments`. If you wish to hide them, you can find the below flag in `config.edn` and make the changes: 30 | 31 | ``` 32 | ;; hide specific properties for blocks 33 | ;; E.g. :block-hidden-properties #{:created-at :updated-at} 34 | :block-hidden-properties #{:todoistid :comments :attachments} 35 | ``` 36 | 37 | # Installation 38 | 39 | 1. Go to https://developer.todoist.com/appconsole.html and create an App. You will need to create an App (give it any name you like), and you will be able to obtain a **test token**. Note down the test token as this is the API Token that you will need in Step 3. 40 | 41 | 2. Head on to the Marketplace and install the logseq-todoist-plugin. 42 | 43 | 3. After it is installed, click on the plugin icon and indicate your preferences in the settings. Key in your API token that you obtained in Step 1 as well. 44 | 45 | ![](/screenshots/enter-variables2.png) 46 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js' 2 | import prettierConfig from 'eslint-config-prettier' 3 | import simpleImportSort from 'eslint-plugin-simple-import-sort' 4 | import tseslint from 'typescript-eslint' 5 | 6 | export default tseslint.config( 7 | eslint.configs.recommended, 8 | ...tseslint.configs.stylistic, 9 | ...tseslint.configs.recommended, 10 | prettierConfig, 11 | { 12 | ignores: ['**/dist/'], 13 | }, 14 | { 15 | plugins: { 16 | 'simple-import-sort': simpleImportSort, 17 | }, 18 | rules: { 19 | 'simple-import-sort/imports': 'error', 20 | 'simple-import-sort/exports': 'error', 21 | '@typescript-eslint/no-explicit-any': 'off', 22 | '@typescript-eslint/no-unused-vars': [ 23 | 'error', 24 | { varsIgnorePattern: '^_' }, 25 | ], 26 | }, 27 | }, 28 | ) 29 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/icon.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | logseq-plugin 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logseq-todoist-plugin", 3 | "author": "benjypng", 4 | "description": "Send and retrieve tasks from Todoist.", 5 | "license": "MIT", 6 | "logseq": { 7 | "id": "logseq-todoist-plugin", 8 | "title": "logseq-todoist-plugin", 9 | "icon": "./icon.png", 10 | "main": "dist/index.html" 11 | }, 12 | "scripts": { 13 | "dev": "npx vite", 14 | "build": "npx eslint . --fix && npx tsc && npx vite build", 15 | "preview": "npx vite preview", 16 | "prepare": "husky" 17 | }, 18 | "release": { 19 | "branches": [ 20 | "main" 21 | ], 22 | "plugins": [ 23 | [ 24 | "@semantic-release/github", 25 | { 26 | "assets": [ 27 | "logseq-todoist-plugin.zip" 28 | ] 29 | } 30 | ] 31 | ] 32 | }, 33 | "dependencies": { 34 | "@doist/todoist-api-typescript": "^3.0.3", 35 | "@logseq/libs": "^0.0.17", 36 | "@mantine/core": "^7.12.2", 37 | "@mantine/hooks": "^7.12.2", 38 | "logseq-dateutils": "^2.1.2", 39 | "react": "^18.3.1", 40 | "react-dom": "^18.3.1", 41 | "react-hook-form": "^7.53.0" 42 | }, 43 | "devDependencies": { 44 | "@eslint/js": "^9.9.1", 45 | "@types/eslint": "^9.6.1", 46 | "@types/eslint-config-prettier": "^6.11.3", 47 | "@types/eslint__js": "^8.42.3", 48 | "@types/node": "^22.5.4", 49 | "@types/react": "^18.3.5", 50 | "@types/react-dom": "^18.3.0", 51 | "@typescript-eslint/eslint-plugin": "^8.4.0", 52 | "@typescript-eslint/parser": "^8.4.0", 53 | "eslint": "^9.9.1", 54 | "eslint-config-prettier": "^9.1.0", 55 | "eslint-plugin-prettier": "^5.2.1", 56 | "eslint-plugin-simple-import-sort": "^12.1.1", 57 | "husky": "^9.1.5", 58 | "postcss": "^8.4.45", 59 | "postcss-preset-mantine": "^1.17.0", 60 | "postcss-simple-vars": "^7.0.1", 61 | "prettier": "^3.3.3", 62 | "typescript": "^5.5.4", 63 | "typescript-eslint": "^8.4.0", 64 | "vite": "^5.4.3", 65 | "vite-plugin-logseq": "^1.1.2", 66 | "vite-tsconfig-paths": "^5.0.1" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@doist/todoist-api-typescript': 12 | specifier: ^3.0.3 13 | version: 3.0.3(type-fest@4.26.0) 14 | '@logseq/libs': 15 | specifier: ^0.0.17 16 | version: 0.0.17 17 | '@mantine/core': 18 | specifier: ^7.12.2 19 | version: 7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 20 | '@mantine/hooks': 21 | specifier: ^7.12.2 22 | version: 7.12.2(react@18.3.1) 23 | logseq-dateutils: 24 | specifier: ^2.1.2 25 | version: 2.1.2 26 | react: 27 | specifier: ^18.3.1 28 | version: 18.3.1 29 | react-dom: 30 | specifier: ^18.3.1 31 | version: 18.3.1(react@18.3.1) 32 | react-hook-form: 33 | specifier: ^7.53.0 34 | version: 7.53.0(react@18.3.1) 35 | devDependencies: 36 | '@eslint/js': 37 | specifier: ^9.9.1 38 | version: 9.9.1 39 | '@types/eslint': 40 | specifier: ^9.6.1 41 | version: 9.6.1 42 | '@types/eslint-config-prettier': 43 | specifier: ^6.11.3 44 | version: 6.11.3 45 | '@types/eslint__js': 46 | specifier: ^8.42.3 47 | version: 8.42.3 48 | '@types/node': 49 | specifier: ^22.5.4 50 | version: 22.5.4 51 | '@types/react': 52 | specifier: ^18.3.5 53 | version: 18.3.5 54 | '@types/react-dom': 55 | specifier: ^18.3.0 56 | version: 18.3.0 57 | '@typescript-eslint/eslint-plugin': 58 | specifier: ^8.4.0 59 | version: 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 60 | '@typescript-eslint/parser': 61 | specifier: ^8.4.0 62 | version: 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 63 | eslint: 64 | specifier: ^9.9.1 65 | version: 9.9.1(jiti@1.21.6) 66 | eslint-config-prettier: 67 | specifier: ^9.1.0 68 | version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) 69 | eslint-plugin-prettier: 70 | specifier: ^5.2.1 71 | version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3) 72 | eslint-plugin-simple-import-sort: 73 | specifier: ^12.1.1 74 | version: 12.1.1(eslint@9.9.1(jiti@1.21.6)) 75 | husky: 76 | specifier: ^9.1.5 77 | version: 9.1.5 78 | postcss: 79 | specifier: ^8.4.45 80 | version: 8.4.45 81 | postcss-preset-mantine: 82 | specifier: ^1.17.0 83 | version: 1.17.0(postcss@8.4.45) 84 | postcss-simple-vars: 85 | specifier: ^7.0.1 86 | version: 7.0.1(postcss@8.4.45) 87 | prettier: 88 | specifier: ^3.3.3 89 | version: 3.3.3 90 | typescript: 91 | specifier: ^5.5.4 92 | version: 5.5.4 93 | typescript-eslint: 94 | specifier: ^8.4.0 95 | version: 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 96 | vite: 97 | specifier: ^5.4.3 98 | version: 5.4.3(@types/node@22.5.4)(sugarss@4.0.1(postcss@8.4.45)) 99 | vite-plugin-logseq: 100 | specifier: ^1.1.2 101 | version: 1.1.2 102 | vite-tsconfig-paths: 103 | specifier: ^5.0.1 104 | version: 5.0.1(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4)(sugarss@4.0.1(postcss@8.4.45))) 105 | 106 | packages: 107 | 108 | '@babel/runtime@7.25.6': 109 | resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} 110 | engines: {node: '>=6.9.0'} 111 | 112 | '@doist/todoist-api-typescript@3.0.3': 113 | resolution: {integrity: sha512-rDYE6X/xSF+b+fvRYoVyBa7EaUOSIKhTrn7/XxV3Fm2rQrK61SoImor5pyWZlMiABH44WMf+FBIh+IjGAGaX3Q==} 114 | peerDependencies: 115 | type-fest: ^4.12.0 116 | 117 | '@esbuild/aix-ppc64@0.21.5': 118 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 119 | engines: {node: '>=12'} 120 | cpu: [ppc64] 121 | os: [aix] 122 | 123 | '@esbuild/android-arm64@0.21.5': 124 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 125 | engines: {node: '>=12'} 126 | cpu: [arm64] 127 | os: [android] 128 | 129 | '@esbuild/android-arm@0.21.5': 130 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 131 | engines: {node: '>=12'} 132 | cpu: [arm] 133 | os: [android] 134 | 135 | '@esbuild/android-x64@0.21.5': 136 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 137 | engines: {node: '>=12'} 138 | cpu: [x64] 139 | os: [android] 140 | 141 | '@esbuild/darwin-arm64@0.21.5': 142 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 143 | engines: {node: '>=12'} 144 | cpu: [arm64] 145 | os: [darwin] 146 | 147 | '@esbuild/darwin-x64@0.21.5': 148 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 149 | engines: {node: '>=12'} 150 | cpu: [x64] 151 | os: [darwin] 152 | 153 | '@esbuild/freebsd-arm64@0.21.5': 154 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 155 | engines: {node: '>=12'} 156 | cpu: [arm64] 157 | os: [freebsd] 158 | 159 | '@esbuild/freebsd-x64@0.21.5': 160 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 161 | engines: {node: '>=12'} 162 | cpu: [x64] 163 | os: [freebsd] 164 | 165 | '@esbuild/linux-arm64@0.21.5': 166 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 167 | engines: {node: '>=12'} 168 | cpu: [arm64] 169 | os: [linux] 170 | 171 | '@esbuild/linux-arm@0.21.5': 172 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 173 | engines: {node: '>=12'} 174 | cpu: [arm] 175 | os: [linux] 176 | 177 | '@esbuild/linux-ia32@0.21.5': 178 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 179 | engines: {node: '>=12'} 180 | cpu: [ia32] 181 | os: [linux] 182 | 183 | '@esbuild/linux-loong64@0.21.5': 184 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 185 | engines: {node: '>=12'} 186 | cpu: [loong64] 187 | os: [linux] 188 | 189 | '@esbuild/linux-mips64el@0.21.5': 190 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 191 | engines: {node: '>=12'} 192 | cpu: [mips64el] 193 | os: [linux] 194 | 195 | '@esbuild/linux-ppc64@0.21.5': 196 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 197 | engines: {node: '>=12'} 198 | cpu: [ppc64] 199 | os: [linux] 200 | 201 | '@esbuild/linux-riscv64@0.21.5': 202 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 203 | engines: {node: '>=12'} 204 | cpu: [riscv64] 205 | os: [linux] 206 | 207 | '@esbuild/linux-s390x@0.21.5': 208 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 209 | engines: {node: '>=12'} 210 | cpu: [s390x] 211 | os: [linux] 212 | 213 | '@esbuild/linux-x64@0.21.5': 214 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 215 | engines: {node: '>=12'} 216 | cpu: [x64] 217 | os: [linux] 218 | 219 | '@esbuild/netbsd-x64@0.21.5': 220 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 221 | engines: {node: '>=12'} 222 | cpu: [x64] 223 | os: [netbsd] 224 | 225 | '@esbuild/openbsd-x64@0.21.5': 226 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 227 | engines: {node: '>=12'} 228 | cpu: [x64] 229 | os: [openbsd] 230 | 231 | '@esbuild/sunos-x64@0.21.5': 232 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 233 | engines: {node: '>=12'} 234 | cpu: [x64] 235 | os: [sunos] 236 | 237 | '@esbuild/win32-arm64@0.21.5': 238 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 239 | engines: {node: '>=12'} 240 | cpu: [arm64] 241 | os: [win32] 242 | 243 | '@esbuild/win32-ia32@0.21.5': 244 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 245 | engines: {node: '>=12'} 246 | cpu: [ia32] 247 | os: [win32] 248 | 249 | '@esbuild/win32-x64@0.21.5': 250 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 251 | engines: {node: '>=12'} 252 | cpu: [x64] 253 | os: [win32] 254 | 255 | '@eslint-community/eslint-utils@4.4.0': 256 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 257 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 258 | peerDependencies: 259 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 260 | 261 | '@eslint-community/regexpp@4.11.0': 262 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} 263 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 264 | 265 | '@eslint/config-array@0.18.0': 266 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 267 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 268 | 269 | '@eslint/eslintrc@3.1.0': 270 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 271 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 272 | 273 | '@eslint/js@9.9.1': 274 | resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==} 275 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 276 | 277 | '@eslint/object-schema@2.1.4': 278 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 279 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 280 | 281 | '@floating-ui/core@1.6.7': 282 | resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} 283 | 284 | '@floating-ui/dom@1.6.10': 285 | resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} 286 | 287 | '@floating-ui/react-dom@2.1.1': 288 | resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} 289 | peerDependencies: 290 | react: '>=16.8.0' 291 | react-dom: '>=16.8.0' 292 | 293 | '@floating-ui/react@0.26.23': 294 | resolution: {integrity: sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==} 295 | peerDependencies: 296 | react: '>=16.8.0' 297 | react-dom: '>=16.8.0' 298 | 299 | '@floating-ui/utils@0.2.7': 300 | resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} 301 | 302 | '@humanwhocodes/module-importer@1.0.1': 303 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 304 | engines: {node: '>=12.22'} 305 | 306 | '@humanwhocodes/retry@0.3.0': 307 | resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} 308 | engines: {node: '>=18.18'} 309 | 310 | '@logseq/libs@0.0.17': 311 | resolution: {integrity: sha512-SkzzAaocmrgeHYrCOaRyEqzPOxw3d0qVEZSrt9qVvXE4tuEgbvEHR8tzI1N5RjgAv+PDWuGPiP7/mhcXHpINEw==} 312 | 313 | '@mantine/core@7.12.2': 314 | resolution: {integrity: sha512-FrMHOKq4s3CiPIxqZ9xnVX7H4PEGNmbtHMvWO/0YlfPgoV0Er/N/DNJOFW1ys4WSnidPTayYeB41riyxxGOpRQ==} 315 | peerDependencies: 316 | '@mantine/hooks': 7.12.2 317 | react: ^18.2.0 318 | react-dom: ^18.2.0 319 | 320 | '@mantine/hooks@7.12.2': 321 | resolution: {integrity: sha512-dVMw8jpM0hAzc8e7/GNvzkk9N0RN/m+PKycETB3H6lJGuXJJSRR4wzzgQKpEhHwPccktDpvb4rkukKDq2jA8Fg==} 322 | peerDependencies: 323 | react: ^18.2.0 324 | 325 | '@nodelib/fs.scandir@2.1.5': 326 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 327 | engines: {node: '>= 8'} 328 | 329 | '@nodelib/fs.stat@2.0.5': 330 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 331 | engines: {node: '>= 8'} 332 | 333 | '@nodelib/fs.walk@1.2.8': 334 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 335 | engines: {node: '>= 8'} 336 | 337 | '@pkgr/core@0.1.1': 338 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 339 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 340 | 341 | '@rollup/rollup-android-arm-eabi@4.21.2': 342 | resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} 343 | cpu: [arm] 344 | os: [android] 345 | 346 | '@rollup/rollup-android-arm64@4.21.2': 347 | resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} 348 | cpu: [arm64] 349 | os: [android] 350 | 351 | '@rollup/rollup-darwin-arm64@4.21.2': 352 | resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} 353 | cpu: [arm64] 354 | os: [darwin] 355 | 356 | '@rollup/rollup-darwin-x64@4.21.2': 357 | resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} 358 | cpu: [x64] 359 | os: [darwin] 360 | 361 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2': 362 | resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} 363 | cpu: [arm] 364 | os: [linux] 365 | 366 | '@rollup/rollup-linux-arm-musleabihf@4.21.2': 367 | resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} 368 | cpu: [arm] 369 | os: [linux] 370 | 371 | '@rollup/rollup-linux-arm64-gnu@4.21.2': 372 | resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} 373 | cpu: [arm64] 374 | os: [linux] 375 | 376 | '@rollup/rollup-linux-arm64-musl@4.21.2': 377 | resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} 378 | cpu: [arm64] 379 | os: [linux] 380 | 381 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': 382 | resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} 383 | cpu: [ppc64] 384 | os: [linux] 385 | 386 | '@rollup/rollup-linux-riscv64-gnu@4.21.2': 387 | resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} 388 | cpu: [riscv64] 389 | os: [linux] 390 | 391 | '@rollup/rollup-linux-s390x-gnu@4.21.2': 392 | resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} 393 | cpu: [s390x] 394 | os: [linux] 395 | 396 | '@rollup/rollup-linux-x64-gnu@4.21.2': 397 | resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} 398 | cpu: [x64] 399 | os: [linux] 400 | 401 | '@rollup/rollup-linux-x64-musl@4.21.2': 402 | resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} 403 | cpu: [x64] 404 | os: [linux] 405 | 406 | '@rollup/rollup-win32-arm64-msvc@4.21.2': 407 | resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} 408 | cpu: [arm64] 409 | os: [win32] 410 | 411 | '@rollup/rollup-win32-ia32-msvc@4.21.2': 412 | resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} 413 | cpu: [ia32] 414 | os: [win32] 415 | 416 | '@rollup/rollup-win32-x64-msvc@4.21.2': 417 | resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} 418 | cpu: [x64] 419 | os: [win32] 420 | 421 | '@types/eslint-config-prettier@6.11.3': 422 | resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} 423 | 424 | '@types/eslint@9.6.1': 425 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 426 | 427 | '@types/eslint__js@8.42.3': 428 | resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} 429 | 430 | '@types/estree@1.0.5': 431 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 432 | 433 | '@types/json-schema@7.0.15': 434 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 435 | 436 | '@types/node@22.5.4': 437 | resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} 438 | 439 | '@types/prop-types@15.7.12': 440 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 441 | 442 | '@types/react-dom@18.3.0': 443 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} 444 | 445 | '@types/react@18.3.5': 446 | resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} 447 | 448 | '@typescript-eslint/eslint-plugin@8.4.0': 449 | resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==} 450 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 451 | peerDependencies: 452 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 453 | eslint: ^8.57.0 || ^9.0.0 454 | typescript: '*' 455 | peerDependenciesMeta: 456 | typescript: 457 | optional: true 458 | 459 | '@typescript-eslint/parser@8.4.0': 460 | resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==} 461 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 462 | peerDependencies: 463 | eslint: ^8.57.0 || ^9.0.0 464 | typescript: '*' 465 | peerDependenciesMeta: 466 | typescript: 467 | optional: true 468 | 469 | '@typescript-eslint/scope-manager@8.4.0': 470 | resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==} 471 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 472 | 473 | '@typescript-eslint/type-utils@8.4.0': 474 | resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==} 475 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 476 | peerDependencies: 477 | typescript: '*' 478 | peerDependenciesMeta: 479 | typescript: 480 | optional: true 481 | 482 | '@typescript-eslint/types@8.4.0': 483 | resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==} 484 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 485 | 486 | '@typescript-eslint/typescript-estree@8.4.0': 487 | resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==} 488 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 489 | peerDependencies: 490 | typescript: '*' 491 | peerDependenciesMeta: 492 | typescript: 493 | optional: true 494 | 495 | '@typescript-eslint/utils@8.4.0': 496 | resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==} 497 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 498 | peerDependencies: 499 | eslint: ^8.57.0 || ^9.0.0 500 | 501 | '@typescript-eslint/visitor-keys@8.4.0': 502 | resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==} 503 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 504 | 505 | acorn-jsx@5.3.2: 506 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 507 | peerDependencies: 508 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 509 | 510 | acorn@8.12.1: 511 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 512 | engines: {node: '>=0.4.0'} 513 | hasBin: true 514 | 515 | ajv@6.12.6: 516 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 517 | 518 | ansi-regex@5.0.1: 519 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 520 | engines: {node: '>=8'} 521 | 522 | ansi-styles@4.3.0: 523 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 524 | engines: {node: '>=8'} 525 | 526 | argparse@2.0.1: 527 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 528 | 529 | asynckit@0.4.0: 530 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 531 | 532 | axios-case-converter@1.1.1: 533 | resolution: {integrity: sha512-v13pB7cYryh/7f4TKxN/gniD2hwqPQcjip29Hk3J9iwsnA37Rht2Hkn5VyrxynxlKdMNSIfGk6I9D6G28oTRyQ==} 534 | peerDependencies: 535 | axios: '>=1.0.0 <2.0.0' 536 | 537 | axios-retry@3.9.1: 538 | resolution: {integrity: sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==} 539 | 540 | axios@1.7.7: 541 | resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} 542 | 543 | balanced-match@1.0.2: 544 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 545 | 546 | brace-expansion@1.1.11: 547 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 548 | 549 | brace-expansion@2.0.1: 550 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 551 | 552 | braces@3.0.3: 553 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 554 | engines: {node: '>=8'} 555 | 556 | callsites@3.1.0: 557 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 558 | engines: {node: '>=6'} 559 | 560 | camel-case@4.1.2: 561 | resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} 562 | 563 | camelcase-css@2.0.1: 564 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 565 | engines: {node: '>= 6'} 566 | 567 | capital-case@1.0.4: 568 | resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} 569 | 570 | chalk@4.1.2: 571 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 572 | engines: {node: '>=10'} 573 | 574 | clsx@2.1.1: 575 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 576 | engines: {node: '>=6'} 577 | 578 | color-convert@2.0.1: 579 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 580 | engines: {node: '>=7.0.0'} 581 | 582 | color-name@1.1.4: 583 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 584 | 585 | combined-stream@1.0.8: 586 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 587 | engines: {node: '>= 0.8'} 588 | 589 | concat-map@0.0.1: 590 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 591 | 592 | cross-spawn@7.0.3: 593 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 594 | engines: {node: '>= 8'} 595 | 596 | cssesc@3.0.0: 597 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 598 | engines: {node: '>=4'} 599 | hasBin: true 600 | 601 | csstype@3.1.0: 602 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} 603 | 604 | csstype@3.1.3: 605 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 606 | 607 | date-fns@2.30.0: 608 | resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} 609 | engines: {node: '>=0.11'} 610 | 611 | debug@4.3.4: 612 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 613 | engines: {node: '>=6.0'} 614 | peerDependencies: 615 | supports-color: '*' 616 | peerDependenciesMeta: 617 | supports-color: 618 | optional: true 619 | 620 | debug@4.3.7: 621 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 622 | engines: {node: '>=6.0'} 623 | peerDependencies: 624 | supports-color: '*' 625 | peerDependenciesMeta: 626 | supports-color: 627 | optional: true 628 | 629 | deep-is@0.1.4: 630 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 631 | 632 | deepmerge@4.3.1: 633 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 634 | engines: {node: '>=0.10.0'} 635 | 636 | delayed-stream@1.0.0: 637 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 638 | engines: {node: '>=0.4.0'} 639 | 640 | detect-node-es@1.1.0: 641 | resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} 642 | 643 | dompurify@2.3.8: 644 | resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==} 645 | 646 | dot-case@3.0.4: 647 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 648 | 649 | esbuild@0.21.5: 650 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 651 | engines: {node: '>=12'} 652 | hasBin: true 653 | 654 | escape-string-regexp@4.0.0: 655 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 656 | engines: {node: '>=10'} 657 | 658 | eslint-config-prettier@9.1.0: 659 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 660 | hasBin: true 661 | peerDependencies: 662 | eslint: '>=7.0.0' 663 | 664 | eslint-plugin-prettier@5.2.1: 665 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 666 | engines: {node: ^14.18.0 || >=16.0.0} 667 | peerDependencies: 668 | '@types/eslint': '>=8.0.0' 669 | eslint: '>=8.0.0' 670 | eslint-config-prettier: '*' 671 | prettier: '>=3.0.0' 672 | peerDependenciesMeta: 673 | '@types/eslint': 674 | optional: true 675 | eslint-config-prettier: 676 | optional: true 677 | 678 | eslint-plugin-simple-import-sort@12.1.1: 679 | resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} 680 | peerDependencies: 681 | eslint: '>=5.0.0' 682 | 683 | eslint-scope@8.0.2: 684 | resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} 685 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 686 | 687 | eslint-visitor-keys@3.4.3: 688 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 689 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 690 | 691 | eslint-visitor-keys@4.0.0: 692 | resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} 693 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 694 | 695 | eslint@9.9.1: 696 | resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==} 697 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 698 | hasBin: true 699 | peerDependencies: 700 | jiti: '*' 701 | peerDependenciesMeta: 702 | jiti: 703 | optional: true 704 | 705 | espree@10.1.0: 706 | resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} 707 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 708 | 709 | esquery@1.6.0: 710 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 711 | engines: {node: '>=0.10'} 712 | 713 | esrecurse@4.3.0: 714 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 715 | engines: {node: '>=4.0'} 716 | 717 | estraverse@5.3.0: 718 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 719 | engines: {node: '>=4.0'} 720 | 721 | esutils@2.0.3: 722 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 723 | engines: {node: '>=0.10.0'} 724 | 725 | eventemitter3@4.0.7: 726 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 727 | 728 | fast-deep-equal@3.1.3: 729 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 730 | 731 | fast-diff@1.3.0: 732 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 733 | 734 | fast-glob@3.3.2: 735 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 736 | engines: {node: '>=8.6.0'} 737 | 738 | fast-json-stable-stringify@2.1.0: 739 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 740 | 741 | fast-levenshtein@2.0.6: 742 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 743 | 744 | fastq@1.17.1: 745 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 746 | 747 | file-entry-cache@8.0.0: 748 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 749 | engines: {node: '>=16.0.0'} 750 | 751 | fill-range@7.1.1: 752 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 753 | engines: {node: '>=8'} 754 | 755 | find-up@5.0.0: 756 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 757 | engines: {node: '>=10'} 758 | 759 | flat-cache@4.0.1: 760 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 761 | engines: {node: '>=16'} 762 | 763 | flatted@3.3.1: 764 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 765 | 766 | follow-redirects@1.15.8: 767 | resolution: {integrity: sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==} 768 | engines: {node: '>=4.0'} 769 | peerDependencies: 770 | debug: '*' 771 | peerDependenciesMeta: 772 | debug: 773 | optional: true 774 | 775 | form-data@4.0.0: 776 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 777 | engines: {node: '>= 6'} 778 | 779 | fsevents@2.3.3: 780 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 781 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 782 | os: [darwin] 783 | 784 | get-nonce@1.0.1: 785 | resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} 786 | engines: {node: '>=6'} 787 | 788 | glob-parent@5.1.2: 789 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 790 | engines: {node: '>= 6'} 791 | 792 | glob-parent@6.0.2: 793 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 794 | engines: {node: '>=10.13.0'} 795 | 796 | globals@14.0.0: 797 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 798 | engines: {node: '>=18'} 799 | 800 | globrex@0.1.2: 801 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 802 | 803 | graphemer@1.4.0: 804 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 805 | 806 | has-flag@4.0.0: 807 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 808 | engines: {node: '>=8'} 809 | 810 | header-case@2.0.4: 811 | resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} 812 | 813 | husky@9.1.5: 814 | resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==} 815 | engines: {node: '>=18'} 816 | hasBin: true 817 | 818 | ignore@5.3.2: 819 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 820 | engines: {node: '>= 4'} 821 | 822 | import-fresh@3.3.0: 823 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 824 | engines: {node: '>=6'} 825 | 826 | imurmurhash@0.1.4: 827 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 828 | engines: {node: '>=0.8.19'} 829 | 830 | inherits@2.0.3: 831 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} 832 | 833 | invariant@2.2.4: 834 | resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} 835 | 836 | is-extglob@2.1.1: 837 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 838 | engines: {node: '>=0.10.0'} 839 | 840 | is-glob@4.0.3: 841 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 842 | engines: {node: '>=0.10.0'} 843 | 844 | is-number@7.0.0: 845 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 846 | engines: {node: '>=0.12.0'} 847 | 848 | is-path-inside@3.0.3: 849 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 850 | engines: {node: '>=8'} 851 | 852 | is-retry-allowed@2.2.0: 853 | resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} 854 | engines: {node: '>=10'} 855 | 856 | isexe@2.0.0: 857 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 858 | 859 | jiti@1.21.6: 860 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 861 | hasBin: true 862 | 863 | js-tokens@4.0.0: 864 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 865 | 866 | js-yaml@4.1.0: 867 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 868 | hasBin: true 869 | 870 | json-buffer@3.0.1: 871 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 872 | 873 | json-schema-traverse@0.4.1: 874 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 875 | 876 | json-stable-stringify-without-jsonify@1.0.1: 877 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 878 | 879 | keyv@4.5.4: 880 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 881 | 882 | levn@0.4.1: 883 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 884 | engines: {node: '>= 0.8.0'} 885 | 886 | locate-path@6.0.0: 887 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 888 | engines: {node: '>=10'} 889 | 890 | lodash-es@4.17.21: 891 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 892 | 893 | lodash.merge@4.6.2: 894 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 895 | 896 | logseq-dateutils@2.1.2: 897 | resolution: {integrity: sha512-N4WD6VynVC+rMQr4+BSLu/bvLhYnLc9/DBjNASIZroC0Rf7Ymwxm/G84unVxVi6iR7Y21T/4UhJEEtzfIIOQaw==} 898 | engines: {node: '>=12'} 899 | 900 | loose-envify@1.4.0: 901 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 902 | hasBin: true 903 | 904 | lower-case@2.0.2: 905 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 906 | 907 | magic-string@0.26.7: 908 | resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} 909 | engines: {node: '>=12'} 910 | 911 | merge2@1.4.1: 912 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 913 | engines: {node: '>= 8'} 914 | 915 | micromatch@4.0.8: 916 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 917 | engines: {node: '>=8.6'} 918 | 919 | mime-db@1.52.0: 920 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 921 | engines: {node: '>= 0.6'} 922 | 923 | mime-types@2.1.35: 924 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 925 | engines: {node: '>= 0.6'} 926 | 927 | minimatch@3.1.2: 928 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 929 | 930 | minimatch@9.0.5: 931 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 932 | engines: {node: '>=16 || 14 >=14.17'} 933 | 934 | ms@2.1.2: 935 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 936 | 937 | ms@2.1.3: 938 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 939 | 940 | nanoid@3.3.7: 941 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 942 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 943 | hasBin: true 944 | 945 | natural-compare@1.4.0: 946 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 947 | 948 | no-case@3.0.4: 949 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 950 | 951 | optionator@0.9.4: 952 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 953 | engines: {node: '>= 0.8.0'} 954 | 955 | p-limit@3.1.0: 956 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 957 | engines: {node: '>=10'} 958 | 959 | p-locate@5.0.0: 960 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 961 | engines: {node: '>=10'} 962 | 963 | parent-module@1.0.1: 964 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 965 | engines: {node: '>=6'} 966 | 967 | pascal-case@3.1.2: 968 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 969 | 970 | path-exists@4.0.0: 971 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 972 | engines: {node: '>=8'} 973 | 974 | path-key@3.1.1: 975 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 976 | engines: {node: '>=8'} 977 | 978 | path@0.12.7: 979 | resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} 980 | 981 | picocolors@1.1.0: 982 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 983 | 984 | picomatch@2.3.1: 985 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 986 | engines: {node: '>=8.6'} 987 | 988 | postcss-js@4.0.1: 989 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 990 | engines: {node: ^12 || ^14 || >= 16} 991 | peerDependencies: 992 | postcss: ^8.4.21 993 | 994 | postcss-mixins@9.0.4: 995 | resolution: {integrity: sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==} 996 | engines: {node: '>=14.0'} 997 | peerDependencies: 998 | postcss: ^8.2.14 999 | 1000 | postcss-nested@6.2.0: 1001 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1002 | engines: {node: '>=12.0'} 1003 | peerDependencies: 1004 | postcss: ^8.2.14 1005 | 1006 | postcss-preset-mantine@1.17.0: 1007 | resolution: {integrity: sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==} 1008 | peerDependencies: 1009 | postcss: '>=8.0.0' 1010 | 1011 | postcss-selector-parser@6.1.2: 1012 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1013 | engines: {node: '>=4'} 1014 | 1015 | postcss-simple-vars@7.0.1: 1016 | resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==} 1017 | engines: {node: '>=14.0'} 1018 | peerDependencies: 1019 | postcss: ^8.2.1 1020 | 1021 | postcss@8.4.45: 1022 | resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} 1023 | engines: {node: ^10 || ^12 || >=14} 1024 | 1025 | prelude-ls@1.2.1: 1026 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1027 | engines: {node: '>= 0.8.0'} 1028 | 1029 | prettier-linter-helpers@1.0.0: 1030 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1031 | engines: {node: '>=6.0.0'} 1032 | 1033 | prettier@3.3.3: 1034 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1035 | engines: {node: '>=14'} 1036 | hasBin: true 1037 | 1038 | process@0.11.10: 1039 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 1040 | engines: {node: '>= 0.6.0'} 1041 | 1042 | proxy-from-env@1.1.0: 1043 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1044 | 1045 | punycode@2.3.1: 1046 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1047 | engines: {node: '>=6'} 1048 | 1049 | queue-microtask@1.2.3: 1050 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1051 | 1052 | react-dom@18.3.1: 1053 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1054 | peerDependencies: 1055 | react: ^18.3.1 1056 | 1057 | react-hook-form@7.53.0: 1058 | resolution: {integrity: sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==} 1059 | engines: {node: '>=18.0.0'} 1060 | peerDependencies: 1061 | react: ^16.8.0 || ^17 || ^18 || ^19 1062 | 1063 | react-number-format@5.4.2: 1064 | resolution: {integrity: sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==} 1065 | peerDependencies: 1066 | react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 1067 | react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 1068 | 1069 | react-remove-scroll-bar@2.3.6: 1070 | resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} 1071 | engines: {node: '>=10'} 1072 | peerDependencies: 1073 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 1074 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1075 | peerDependenciesMeta: 1076 | '@types/react': 1077 | optional: true 1078 | 1079 | react-remove-scroll@2.6.0: 1080 | resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} 1081 | engines: {node: '>=10'} 1082 | peerDependencies: 1083 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 1084 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1085 | peerDependenciesMeta: 1086 | '@types/react': 1087 | optional: true 1088 | 1089 | react-style-singleton@2.2.1: 1090 | resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} 1091 | engines: {node: '>=10'} 1092 | peerDependencies: 1093 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 1094 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1095 | peerDependenciesMeta: 1096 | '@types/react': 1097 | optional: true 1098 | 1099 | react-textarea-autosize@8.5.3: 1100 | resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} 1101 | engines: {node: '>=10'} 1102 | peerDependencies: 1103 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1104 | 1105 | react@18.3.1: 1106 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1107 | engines: {node: '>=0.10.0'} 1108 | 1109 | regenerator-runtime@0.14.1: 1110 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1111 | 1112 | resolve-from@4.0.0: 1113 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1114 | engines: {node: '>=4'} 1115 | 1116 | reusify@1.0.4: 1117 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1118 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1119 | 1120 | rollup@4.21.2: 1121 | resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} 1122 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1123 | hasBin: true 1124 | 1125 | run-parallel@1.2.0: 1126 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1127 | 1128 | runtypes@6.7.0: 1129 | resolution: {integrity: sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==} 1130 | 1131 | scheduler@0.23.2: 1132 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1133 | 1134 | semver@7.6.3: 1135 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1136 | engines: {node: '>=10'} 1137 | hasBin: true 1138 | 1139 | shebang-command@2.0.0: 1140 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1141 | engines: {node: '>=8'} 1142 | 1143 | shebang-regex@3.0.0: 1144 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1145 | engines: {node: '>=8'} 1146 | 1147 | snake-case@3.0.4: 1148 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 1149 | 1150 | source-map-js@1.2.0: 1151 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1152 | engines: {node: '>=0.10.0'} 1153 | 1154 | sourcemap-codec@1.4.8: 1155 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1156 | deprecated: Please use @jridgewell/sourcemap-codec instead 1157 | 1158 | strip-ansi@6.0.1: 1159 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1160 | engines: {node: '>=8'} 1161 | 1162 | strip-json-comments@3.1.1: 1163 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1164 | engines: {node: '>=8'} 1165 | 1166 | sugarss@4.0.1: 1167 | resolution: {integrity: sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==} 1168 | engines: {node: '>=12.0'} 1169 | peerDependencies: 1170 | postcss: ^8.3.3 1171 | 1172 | supports-color@7.2.0: 1173 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1174 | engines: {node: '>=8'} 1175 | 1176 | synckit@0.9.1: 1177 | resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} 1178 | engines: {node: ^14.18.0 || >=16.0.0} 1179 | 1180 | tabbable@6.2.0: 1181 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} 1182 | 1183 | text-table@0.2.0: 1184 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1185 | 1186 | to-regex-range@5.0.1: 1187 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1188 | engines: {node: '>=8.0'} 1189 | 1190 | ts-api-utils@1.3.0: 1191 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1192 | engines: {node: '>=16'} 1193 | peerDependencies: 1194 | typescript: '>=4.2.0' 1195 | 1196 | ts-custom-error@3.3.1: 1197 | resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} 1198 | engines: {node: '>=14.0.0'} 1199 | 1200 | tsconfck@3.1.3: 1201 | resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} 1202 | engines: {node: ^18 || >=20} 1203 | hasBin: true 1204 | peerDependencies: 1205 | typescript: ^5.0.0 1206 | peerDependenciesMeta: 1207 | typescript: 1208 | optional: true 1209 | 1210 | tslib@2.7.0: 1211 | resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} 1212 | 1213 | type-check@0.4.0: 1214 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1215 | engines: {node: '>= 0.8.0'} 1216 | 1217 | type-fest@4.26.0: 1218 | resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} 1219 | engines: {node: '>=16'} 1220 | 1221 | typescript-eslint@8.4.0: 1222 | resolution: {integrity: sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==} 1223 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1224 | peerDependencies: 1225 | typescript: '*' 1226 | peerDependenciesMeta: 1227 | typescript: 1228 | optional: true 1229 | 1230 | typescript@5.5.4: 1231 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1232 | engines: {node: '>=14.17'} 1233 | hasBin: true 1234 | 1235 | undici-types@6.19.8: 1236 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1237 | 1238 | upper-case-first@2.0.2: 1239 | resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} 1240 | 1241 | uri-js@4.4.1: 1242 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1243 | 1244 | use-callback-ref@1.3.2: 1245 | resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} 1246 | engines: {node: '>=10'} 1247 | peerDependencies: 1248 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 1249 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1250 | peerDependenciesMeta: 1251 | '@types/react': 1252 | optional: true 1253 | 1254 | use-composed-ref@1.3.0: 1255 | resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} 1256 | peerDependencies: 1257 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1258 | 1259 | use-isomorphic-layout-effect@1.1.2: 1260 | resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} 1261 | peerDependencies: 1262 | '@types/react': '*' 1263 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1264 | peerDependenciesMeta: 1265 | '@types/react': 1266 | optional: true 1267 | 1268 | use-latest@1.2.1: 1269 | resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} 1270 | peerDependencies: 1271 | '@types/react': '*' 1272 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1273 | peerDependenciesMeta: 1274 | '@types/react': 1275 | optional: true 1276 | 1277 | use-sidecar@1.1.2: 1278 | resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} 1279 | engines: {node: '>=10'} 1280 | peerDependencies: 1281 | '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 1282 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1283 | peerDependenciesMeta: 1284 | '@types/react': 1285 | optional: true 1286 | 1287 | util-deprecate@1.0.2: 1288 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1289 | 1290 | util@0.10.4: 1291 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} 1292 | 1293 | uuid@9.0.1: 1294 | resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} 1295 | hasBin: true 1296 | 1297 | vite-plugin-logseq@1.1.2: 1298 | resolution: {integrity: sha512-l5YvoH3K25Zx9eqgoJFug7NfVqSPwq7/FcYYhN1TkdG8ZOiD+c+TAwdCS2dJbGgvx8GmSpbgwSZWgslB+wH53g==} 1299 | 1300 | vite-tsconfig-paths@5.0.1: 1301 | resolution: {integrity: sha512-yqwv+LstU7NwPeNqajZzLEBVpUFU6Dugtb2P84FXuvaoYA+/70l9MHE+GYfYAycVyPSDYZ7mjOFuYBRqlEpTig==} 1302 | peerDependencies: 1303 | vite: '*' 1304 | peerDependenciesMeta: 1305 | vite: 1306 | optional: true 1307 | 1308 | vite@5.4.3: 1309 | resolution: {integrity: sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==} 1310 | engines: {node: ^18.0.0 || >=20.0.0} 1311 | hasBin: true 1312 | peerDependencies: 1313 | '@types/node': ^18.0.0 || >=20.0.0 1314 | less: '*' 1315 | lightningcss: ^1.21.0 1316 | sass: '*' 1317 | sass-embedded: '*' 1318 | stylus: '*' 1319 | sugarss: '*' 1320 | terser: ^5.4.0 1321 | peerDependenciesMeta: 1322 | '@types/node': 1323 | optional: true 1324 | less: 1325 | optional: true 1326 | lightningcss: 1327 | optional: true 1328 | sass: 1329 | optional: true 1330 | sass-embedded: 1331 | optional: true 1332 | stylus: 1333 | optional: true 1334 | sugarss: 1335 | optional: true 1336 | terser: 1337 | optional: true 1338 | 1339 | which@2.0.2: 1340 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1341 | engines: {node: '>= 8'} 1342 | hasBin: true 1343 | 1344 | word-wrap@1.2.5: 1345 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1346 | engines: {node: '>=0.10.0'} 1347 | 1348 | yocto-queue@0.1.0: 1349 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1350 | engines: {node: '>=10'} 1351 | 1352 | snapshots: 1353 | 1354 | '@babel/runtime@7.25.6': 1355 | dependencies: 1356 | regenerator-runtime: 0.14.1 1357 | 1358 | '@doist/todoist-api-typescript@3.0.3(type-fest@4.26.0)': 1359 | dependencies: 1360 | axios: 1.7.7 1361 | axios-case-converter: 1.1.1(axios@1.7.7) 1362 | axios-retry: 3.9.1 1363 | runtypes: 6.7.0 1364 | ts-custom-error: 3.3.1 1365 | type-fest: 4.26.0 1366 | uuid: 9.0.1 1367 | transitivePeerDependencies: 1368 | - debug 1369 | 1370 | '@esbuild/aix-ppc64@0.21.5': 1371 | optional: true 1372 | 1373 | '@esbuild/android-arm64@0.21.5': 1374 | optional: true 1375 | 1376 | '@esbuild/android-arm@0.21.5': 1377 | optional: true 1378 | 1379 | '@esbuild/android-x64@0.21.5': 1380 | optional: true 1381 | 1382 | '@esbuild/darwin-arm64@0.21.5': 1383 | optional: true 1384 | 1385 | '@esbuild/darwin-x64@0.21.5': 1386 | optional: true 1387 | 1388 | '@esbuild/freebsd-arm64@0.21.5': 1389 | optional: true 1390 | 1391 | '@esbuild/freebsd-x64@0.21.5': 1392 | optional: true 1393 | 1394 | '@esbuild/linux-arm64@0.21.5': 1395 | optional: true 1396 | 1397 | '@esbuild/linux-arm@0.21.5': 1398 | optional: true 1399 | 1400 | '@esbuild/linux-ia32@0.21.5': 1401 | optional: true 1402 | 1403 | '@esbuild/linux-loong64@0.21.5': 1404 | optional: true 1405 | 1406 | '@esbuild/linux-mips64el@0.21.5': 1407 | optional: true 1408 | 1409 | '@esbuild/linux-ppc64@0.21.5': 1410 | optional: true 1411 | 1412 | '@esbuild/linux-riscv64@0.21.5': 1413 | optional: true 1414 | 1415 | '@esbuild/linux-s390x@0.21.5': 1416 | optional: true 1417 | 1418 | '@esbuild/linux-x64@0.21.5': 1419 | optional: true 1420 | 1421 | '@esbuild/netbsd-x64@0.21.5': 1422 | optional: true 1423 | 1424 | '@esbuild/openbsd-x64@0.21.5': 1425 | optional: true 1426 | 1427 | '@esbuild/sunos-x64@0.21.5': 1428 | optional: true 1429 | 1430 | '@esbuild/win32-arm64@0.21.5': 1431 | optional: true 1432 | 1433 | '@esbuild/win32-ia32@0.21.5': 1434 | optional: true 1435 | 1436 | '@esbuild/win32-x64@0.21.5': 1437 | optional: true 1438 | 1439 | '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.6))': 1440 | dependencies: 1441 | eslint: 9.9.1(jiti@1.21.6) 1442 | eslint-visitor-keys: 3.4.3 1443 | 1444 | '@eslint-community/regexpp@4.11.0': {} 1445 | 1446 | '@eslint/config-array@0.18.0': 1447 | dependencies: 1448 | '@eslint/object-schema': 2.1.4 1449 | debug: 4.3.7 1450 | minimatch: 3.1.2 1451 | transitivePeerDependencies: 1452 | - supports-color 1453 | 1454 | '@eslint/eslintrc@3.1.0': 1455 | dependencies: 1456 | ajv: 6.12.6 1457 | debug: 4.3.7 1458 | espree: 10.1.0 1459 | globals: 14.0.0 1460 | ignore: 5.3.2 1461 | import-fresh: 3.3.0 1462 | js-yaml: 4.1.0 1463 | minimatch: 3.1.2 1464 | strip-json-comments: 3.1.1 1465 | transitivePeerDependencies: 1466 | - supports-color 1467 | 1468 | '@eslint/js@9.9.1': {} 1469 | 1470 | '@eslint/object-schema@2.1.4': {} 1471 | 1472 | '@floating-ui/core@1.6.7': 1473 | dependencies: 1474 | '@floating-ui/utils': 0.2.7 1475 | 1476 | '@floating-ui/dom@1.6.10': 1477 | dependencies: 1478 | '@floating-ui/core': 1.6.7 1479 | '@floating-ui/utils': 0.2.7 1480 | 1481 | '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1482 | dependencies: 1483 | '@floating-ui/dom': 1.6.10 1484 | react: 18.3.1 1485 | react-dom: 18.3.1(react@18.3.1) 1486 | 1487 | '@floating-ui/react@0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1488 | dependencies: 1489 | '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1490 | '@floating-ui/utils': 0.2.7 1491 | react: 18.3.1 1492 | react-dom: 18.3.1(react@18.3.1) 1493 | tabbable: 6.2.0 1494 | 1495 | '@floating-ui/utils@0.2.7': {} 1496 | 1497 | '@humanwhocodes/module-importer@1.0.1': {} 1498 | 1499 | '@humanwhocodes/retry@0.3.0': {} 1500 | 1501 | '@logseq/libs@0.0.17': 1502 | dependencies: 1503 | csstype: 3.1.0 1504 | debug: 4.3.4 1505 | deepmerge: 4.3.1 1506 | dompurify: 2.3.8 1507 | eventemitter3: 4.0.7 1508 | fast-deep-equal: 3.1.3 1509 | lodash-es: 4.17.21 1510 | path: 0.12.7 1511 | snake-case: 3.0.4 1512 | transitivePeerDependencies: 1513 | - supports-color 1514 | 1515 | '@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1516 | dependencies: 1517 | '@floating-ui/react': 0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1518 | '@mantine/hooks': 7.12.2(react@18.3.1) 1519 | clsx: 2.1.1 1520 | react: 18.3.1 1521 | react-dom: 18.3.1(react@18.3.1) 1522 | react-number-format: 5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1523 | react-remove-scroll: 2.6.0(@types/react@18.3.5)(react@18.3.1) 1524 | react-textarea-autosize: 8.5.3(@types/react@18.3.5)(react@18.3.1) 1525 | type-fest: 4.26.0 1526 | transitivePeerDependencies: 1527 | - '@types/react' 1528 | 1529 | '@mantine/hooks@7.12.2(react@18.3.1)': 1530 | dependencies: 1531 | react: 18.3.1 1532 | 1533 | '@nodelib/fs.scandir@2.1.5': 1534 | dependencies: 1535 | '@nodelib/fs.stat': 2.0.5 1536 | run-parallel: 1.2.0 1537 | 1538 | '@nodelib/fs.stat@2.0.5': {} 1539 | 1540 | '@nodelib/fs.walk@1.2.8': 1541 | dependencies: 1542 | '@nodelib/fs.scandir': 2.1.5 1543 | fastq: 1.17.1 1544 | 1545 | '@pkgr/core@0.1.1': {} 1546 | 1547 | '@rollup/rollup-android-arm-eabi@4.21.2': 1548 | optional: true 1549 | 1550 | '@rollup/rollup-android-arm64@4.21.2': 1551 | optional: true 1552 | 1553 | '@rollup/rollup-darwin-arm64@4.21.2': 1554 | optional: true 1555 | 1556 | '@rollup/rollup-darwin-x64@4.21.2': 1557 | optional: true 1558 | 1559 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2': 1560 | optional: true 1561 | 1562 | '@rollup/rollup-linux-arm-musleabihf@4.21.2': 1563 | optional: true 1564 | 1565 | '@rollup/rollup-linux-arm64-gnu@4.21.2': 1566 | optional: true 1567 | 1568 | '@rollup/rollup-linux-arm64-musl@4.21.2': 1569 | optional: true 1570 | 1571 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': 1572 | optional: true 1573 | 1574 | '@rollup/rollup-linux-riscv64-gnu@4.21.2': 1575 | optional: true 1576 | 1577 | '@rollup/rollup-linux-s390x-gnu@4.21.2': 1578 | optional: true 1579 | 1580 | '@rollup/rollup-linux-x64-gnu@4.21.2': 1581 | optional: true 1582 | 1583 | '@rollup/rollup-linux-x64-musl@4.21.2': 1584 | optional: true 1585 | 1586 | '@rollup/rollup-win32-arm64-msvc@4.21.2': 1587 | optional: true 1588 | 1589 | '@rollup/rollup-win32-ia32-msvc@4.21.2': 1590 | optional: true 1591 | 1592 | '@rollup/rollup-win32-x64-msvc@4.21.2': 1593 | optional: true 1594 | 1595 | '@types/eslint-config-prettier@6.11.3': {} 1596 | 1597 | '@types/eslint@9.6.1': 1598 | dependencies: 1599 | '@types/estree': 1.0.5 1600 | '@types/json-schema': 7.0.15 1601 | 1602 | '@types/eslint__js@8.42.3': 1603 | dependencies: 1604 | '@types/eslint': 9.6.1 1605 | 1606 | '@types/estree@1.0.5': {} 1607 | 1608 | '@types/json-schema@7.0.15': {} 1609 | 1610 | '@types/node@22.5.4': 1611 | dependencies: 1612 | undici-types: 6.19.8 1613 | 1614 | '@types/prop-types@15.7.12': {} 1615 | 1616 | '@types/react-dom@18.3.0': 1617 | dependencies: 1618 | '@types/react': 18.3.5 1619 | 1620 | '@types/react@18.3.5': 1621 | dependencies: 1622 | '@types/prop-types': 15.7.12 1623 | csstype: 3.1.3 1624 | 1625 | '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': 1626 | dependencies: 1627 | '@eslint-community/regexpp': 4.11.0 1628 | '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 1629 | '@typescript-eslint/scope-manager': 8.4.0 1630 | '@typescript-eslint/type-utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 1631 | '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 1632 | '@typescript-eslint/visitor-keys': 8.4.0 1633 | eslint: 9.9.1(jiti@1.21.6) 1634 | graphemer: 1.4.0 1635 | ignore: 5.3.2 1636 | natural-compare: 1.4.0 1637 | ts-api-utils: 1.3.0(typescript@5.5.4) 1638 | optionalDependencies: 1639 | typescript: 5.5.4 1640 | transitivePeerDependencies: 1641 | - supports-color 1642 | 1643 | '@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': 1644 | dependencies: 1645 | '@typescript-eslint/scope-manager': 8.4.0 1646 | '@typescript-eslint/types': 8.4.0 1647 | '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) 1648 | '@typescript-eslint/visitor-keys': 8.4.0 1649 | debug: 4.3.7 1650 | eslint: 9.9.1(jiti@1.21.6) 1651 | optionalDependencies: 1652 | typescript: 5.5.4 1653 | transitivePeerDependencies: 1654 | - supports-color 1655 | 1656 | '@typescript-eslint/scope-manager@8.4.0': 1657 | dependencies: 1658 | '@typescript-eslint/types': 8.4.0 1659 | '@typescript-eslint/visitor-keys': 8.4.0 1660 | 1661 | '@typescript-eslint/type-utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': 1662 | dependencies: 1663 | '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) 1664 | '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 1665 | debug: 4.3.7 1666 | ts-api-utils: 1.3.0(typescript@5.5.4) 1667 | optionalDependencies: 1668 | typescript: 5.5.4 1669 | transitivePeerDependencies: 1670 | - eslint 1671 | - supports-color 1672 | 1673 | '@typescript-eslint/types@8.4.0': {} 1674 | 1675 | '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)': 1676 | dependencies: 1677 | '@typescript-eslint/types': 8.4.0 1678 | '@typescript-eslint/visitor-keys': 8.4.0 1679 | debug: 4.3.7 1680 | fast-glob: 3.3.2 1681 | is-glob: 4.0.3 1682 | minimatch: 9.0.5 1683 | semver: 7.6.3 1684 | ts-api-utils: 1.3.0(typescript@5.5.4) 1685 | optionalDependencies: 1686 | typescript: 5.5.4 1687 | transitivePeerDependencies: 1688 | - supports-color 1689 | 1690 | '@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': 1691 | dependencies: 1692 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) 1693 | '@typescript-eslint/scope-manager': 8.4.0 1694 | '@typescript-eslint/types': 8.4.0 1695 | '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) 1696 | eslint: 9.9.1(jiti@1.21.6) 1697 | transitivePeerDependencies: 1698 | - supports-color 1699 | - typescript 1700 | 1701 | '@typescript-eslint/visitor-keys@8.4.0': 1702 | dependencies: 1703 | '@typescript-eslint/types': 8.4.0 1704 | eslint-visitor-keys: 3.4.3 1705 | 1706 | acorn-jsx@5.3.2(acorn@8.12.1): 1707 | dependencies: 1708 | acorn: 8.12.1 1709 | 1710 | acorn@8.12.1: {} 1711 | 1712 | ajv@6.12.6: 1713 | dependencies: 1714 | fast-deep-equal: 3.1.3 1715 | fast-json-stable-stringify: 2.1.0 1716 | json-schema-traverse: 0.4.1 1717 | uri-js: 4.4.1 1718 | 1719 | ansi-regex@5.0.1: {} 1720 | 1721 | ansi-styles@4.3.0: 1722 | dependencies: 1723 | color-convert: 2.0.1 1724 | 1725 | argparse@2.0.1: {} 1726 | 1727 | asynckit@0.4.0: {} 1728 | 1729 | axios-case-converter@1.1.1(axios@1.7.7): 1730 | dependencies: 1731 | axios: 1.7.7 1732 | camel-case: 4.1.2 1733 | header-case: 2.0.4 1734 | snake-case: 3.0.4 1735 | tslib: 2.7.0 1736 | 1737 | axios-retry@3.9.1: 1738 | dependencies: 1739 | '@babel/runtime': 7.25.6 1740 | is-retry-allowed: 2.2.0 1741 | 1742 | axios@1.7.7: 1743 | dependencies: 1744 | follow-redirects: 1.15.8 1745 | form-data: 4.0.0 1746 | proxy-from-env: 1.1.0 1747 | transitivePeerDependencies: 1748 | - debug 1749 | 1750 | balanced-match@1.0.2: {} 1751 | 1752 | brace-expansion@1.1.11: 1753 | dependencies: 1754 | balanced-match: 1.0.2 1755 | concat-map: 0.0.1 1756 | 1757 | brace-expansion@2.0.1: 1758 | dependencies: 1759 | balanced-match: 1.0.2 1760 | 1761 | braces@3.0.3: 1762 | dependencies: 1763 | fill-range: 7.1.1 1764 | 1765 | callsites@3.1.0: {} 1766 | 1767 | camel-case@4.1.2: 1768 | dependencies: 1769 | pascal-case: 3.1.2 1770 | tslib: 2.7.0 1771 | 1772 | camelcase-css@2.0.1: {} 1773 | 1774 | capital-case@1.0.4: 1775 | dependencies: 1776 | no-case: 3.0.4 1777 | tslib: 2.7.0 1778 | upper-case-first: 2.0.2 1779 | 1780 | chalk@4.1.2: 1781 | dependencies: 1782 | ansi-styles: 4.3.0 1783 | supports-color: 7.2.0 1784 | 1785 | clsx@2.1.1: {} 1786 | 1787 | color-convert@2.0.1: 1788 | dependencies: 1789 | color-name: 1.1.4 1790 | 1791 | color-name@1.1.4: {} 1792 | 1793 | combined-stream@1.0.8: 1794 | dependencies: 1795 | delayed-stream: 1.0.0 1796 | 1797 | concat-map@0.0.1: {} 1798 | 1799 | cross-spawn@7.0.3: 1800 | dependencies: 1801 | path-key: 3.1.1 1802 | shebang-command: 2.0.0 1803 | which: 2.0.2 1804 | 1805 | cssesc@3.0.0: {} 1806 | 1807 | csstype@3.1.0: {} 1808 | 1809 | csstype@3.1.3: {} 1810 | 1811 | date-fns@2.30.0: 1812 | dependencies: 1813 | '@babel/runtime': 7.25.6 1814 | 1815 | debug@4.3.4: 1816 | dependencies: 1817 | ms: 2.1.2 1818 | 1819 | debug@4.3.7: 1820 | dependencies: 1821 | ms: 2.1.3 1822 | 1823 | deep-is@0.1.4: {} 1824 | 1825 | deepmerge@4.3.1: {} 1826 | 1827 | delayed-stream@1.0.0: {} 1828 | 1829 | detect-node-es@1.1.0: {} 1830 | 1831 | dompurify@2.3.8: {} 1832 | 1833 | dot-case@3.0.4: 1834 | dependencies: 1835 | no-case: 3.0.4 1836 | tslib: 2.7.0 1837 | 1838 | esbuild@0.21.5: 1839 | optionalDependencies: 1840 | '@esbuild/aix-ppc64': 0.21.5 1841 | '@esbuild/android-arm': 0.21.5 1842 | '@esbuild/android-arm64': 0.21.5 1843 | '@esbuild/android-x64': 0.21.5 1844 | '@esbuild/darwin-arm64': 0.21.5 1845 | '@esbuild/darwin-x64': 0.21.5 1846 | '@esbuild/freebsd-arm64': 0.21.5 1847 | '@esbuild/freebsd-x64': 0.21.5 1848 | '@esbuild/linux-arm': 0.21.5 1849 | '@esbuild/linux-arm64': 0.21.5 1850 | '@esbuild/linux-ia32': 0.21.5 1851 | '@esbuild/linux-loong64': 0.21.5 1852 | '@esbuild/linux-mips64el': 0.21.5 1853 | '@esbuild/linux-ppc64': 0.21.5 1854 | '@esbuild/linux-riscv64': 0.21.5 1855 | '@esbuild/linux-s390x': 0.21.5 1856 | '@esbuild/linux-x64': 0.21.5 1857 | '@esbuild/netbsd-x64': 0.21.5 1858 | '@esbuild/openbsd-x64': 0.21.5 1859 | '@esbuild/sunos-x64': 0.21.5 1860 | '@esbuild/win32-arm64': 0.21.5 1861 | '@esbuild/win32-ia32': 0.21.5 1862 | '@esbuild/win32-x64': 0.21.5 1863 | 1864 | escape-string-regexp@4.0.0: {} 1865 | 1866 | eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)): 1867 | dependencies: 1868 | eslint: 9.9.1(jiti@1.21.6) 1869 | 1870 | eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3): 1871 | dependencies: 1872 | eslint: 9.9.1(jiti@1.21.6) 1873 | prettier: 3.3.3 1874 | prettier-linter-helpers: 1.0.0 1875 | synckit: 0.9.1 1876 | optionalDependencies: 1877 | '@types/eslint': 9.6.1 1878 | eslint-config-prettier: 9.1.0(eslint@9.9.1(jiti@1.21.6)) 1879 | 1880 | eslint-plugin-simple-import-sort@12.1.1(eslint@9.9.1(jiti@1.21.6)): 1881 | dependencies: 1882 | eslint: 9.9.1(jiti@1.21.6) 1883 | 1884 | eslint-scope@8.0.2: 1885 | dependencies: 1886 | esrecurse: 4.3.0 1887 | estraverse: 5.3.0 1888 | 1889 | eslint-visitor-keys@3.4.3: {} 1890 | 1891 | eslint-visitor-keys@4.0.0: {} 1892 | 1893 | eslint@9.9.1(jiti@1.21.6): 1894 | dependencies: 1895 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) 1896 | '@eslint-community/regexpp': 4.11.0 1897 | '@eslint/config-array': 0.18.0 1898 | '@eslint/eslintrc': 3.1.0 1899 | '@eslint/js': 9.9.1 1900 | '@humanwhocodes/module-importer': 1.0.1 1901 | '@humanwhocodes/retry': 0.3.0 1902 | '@nodelib/fs.walk': 1.2.8 1903 | ajv: 6.12.6 1904 | chalk: 4.1.2 1905 | cross-spawn: 7.0.3 1906 | debug: 4.3.7 1907 | escape-string-regexp: 4.0.0 1908 | eslint-scope: 8.0.2 1909 | eslint-visitor-keys: 4.0.0 1910 | espree: 10.1.0 1911 | esquery: 1.6.0 1912 | esutils: 2.0.3 1913 | fast-deep-equal: 3.1.3 1914 | file-entry-cache: 8.0.0 1915 | find-up: 5.0.0 1916 | glob-parent: 6.0.2 1917 | ignore: 5.3.2 1918 | imurmurhash: 0.1.4 1919 | is-glob: 4.0.3 1920 | is-path-inside: 3.0.3 1921 | json-stable-stringify-without-jsonify: 1.0.1 1922 | levn: 0.4.1 1923 | lodash.merge: 4.6.2 1924 | minimatch: 3.1.2 1925 | natural-compare: 1.4.0 1926 | optionator: 0.9.4 1927 | strip-ansi: 6.0.1 1928 | text-table: 0.2.0 1929 | optionalDependencies: 1930 | jiti: 1.21.6 1931 | transitivePeerDependencies: 1932 | - supports-color 1933 | 1934 | espree@10.1.0: 1935 | dependencies: 1936 | acorn: 8.12.1 1937 | acorn-jsx: 5.3.2(acorn@8.12.1) 1938 | eslint-visitor-keys: 4.0.0 1939 | 1940 | esquery@1.6.0: 1941 | dependencies: 1942 | estraverse: 5.3.0 1943 | 1944 | esrecurse@4.3.0: 1945 | dependencies: 1946 | estraverse: 5.3.0 1947 | 1948 | estraverse@5.3.0: {} 1949 | 1950 | esutils@2.0.3: {} 1951 | 1952 | eventemitter3@4.0.7: {} 1953 | 1954 | fast-deep-equal@3.1.3: {} 1955 | 1956 | fast-diff@1.3.0: {} 1957 | 1958 | fast-glob@3.3.2: 1959 | dependencies: 1960 | '@nodelib/fs.stat': 2.0.5 1961 | '@nodelib/fs.walk': 1.2.8 1962 | glob-parent: 5.1.2 1963 | merge2: 1.4.1 1964 | micromatch: 4.0.8 1965 | 1966 | fast-json-stable-stringify@2.1.0: {} 1967 | 1968 | fast-levenshtein@2.0.6: {} 1969 | 1970 | fastq@1.17.1: 1971 | dependencies: 1972 | reusify: 1.0.4 1973 | 1974 | file-entry-cache@8.0.0: 1975 | dependencies: 1976 | flat-cache: 4.0.1 1977 | 1978 | fill-range@7.1.1: 1979 | dependencies: 1980 | to-regex-range: 5.0.1 1981 | 1982 | find-up@5.0.0: 1983 | dependencies: 1984 | locate-path: 6.0.0 1985 | path-exists: 4.0.0 1986 | 1987 | flat-cache@4.0.1: 1988 | dependencies: 1989 | flatted: 3.3.1 1990 | keyv: 4.5.4 1991 | 1992 | flatted@3.3.1: {} 1993 | 1994 | follow-redirects@1.15.8: {} 1995 | 1996 | form-data@4.0.0: 1997 | dependencies: 1998 | asynckit: 0.4.0 1999 | combined-stream: 1.0.8 2000 | mime-types: 2.1.35 2001 | 2002 | fsevents@2.3.3: 2003 | optional: true 2004 | 2005 | get-nonce@1.0.1: {} 2006 | 2007 | glob-parent@5.1.2: 2008 | dependencies: 2009 | is-glob: 4.0.3 2010 | 2011 | glob-parent@6.0.2: 2012 | dependencies: 2013 | is-glob: 4.0.3 2014 | 2015 | globals@14.0.0: {} 2016 | 2017 | globrex@0.1.2: {} 2018 | 2019 | graphemer@1.4.0: {} 2020 | 2021 | has-flag@4.0.0: {} 2022 | 2023 | header-case@2.0.4: 2024 | dependencies: 2025 | capital-case: 1.0.4 2026 | tslib: 2.7.0 2027 | 2028 | husky@9.1.5: {} 2029 | 2030 | ignore@5.3.2: {} 2031 | 2032 | import-fresh@3.3.0: 2033 | dependencies: 2034 | parent-module: 1.0.1 2035 | resolve-from: 4.0.0 2036 | 2037 | imurmurhash@0.1.4: {} 2038 | 2039 | inherits@2.0.3: {} 2040 | 2041 | invariant@2.2.4: 2042 | dependencies: 2043 | loose-envify: 1.4.0 2044 | 2045 | is-extglob@2.1.1: {} 2046 | 2047 | is-glob@4.0.3: 2048 | dependencies: 2049 | is-extglob: 2.1.1 2050 | 2051 | is-number@7.0.0: {} 2052 | 2053 | is-path-inside@3.0.3: {} 2054 | 2055 | is-retry-allowed@2.2.0: {} 2056 | 2057 | isexe@2.0.0: {} 2058 | 2059 | jiti@1.21.6: 2060 | optional: true 2061 | 2062 | js-tokens@4.0.0: {} 2063 | 2064 | js-yaml@4.1.0: 2065 | dependencies: 2066 | argparse: 2.0.1 2067 | 2068 | json-buffer@3.0.1: {} 2069 | 2070 | json-schema-traverse@0.4.1: {} 2071 | 2072 | json-stable-stringify-without-jsonify@1.0.1: {} 2073 | 2074 | keyv@4.5.4: 2075 | dependencies: 2076 | json-buffer: 3.0.1 2077 | 2078 | levn@0.4.1: 2079 | dependencies: 2080 | prelude-ls: 1.2.1 2081 | type-check: 0.4.0 2082 | 2083 | locate-path@6.0.0: 2084 | dependencies: 2085 | p-locate: 5.0.0 2086 | 2087 | lodash-es@4.17.21: {} 2088 | 2089 | lodash.merge@4.6.2: {} 2090 | 2091 | logseq-dateutils@2.1.2: 2092 | dependencies: 2093 | date-fns: 2.30.0 2094 | 2095 | loose-envify@1.4.0: 2096 | dependencies: 2097 | js-tokens: 4.0.0 2098 | 2099 | lower-case@2.0.2: 2100 | dependencies: 2101 | tslib: 2.7.0 2102 | 2103 | magic-string@0.26.7: 2104 | dependencies: 2105 | sourcemap-codec: 1.4.8 2106 | 2107 | merge2@1.4.1: {} 2108 | 2109 | micromatch@4.0.8: 2110 | dependencies: 2111 | braces: 3.0.3 2112 | picomatch: 2.3.1 2113 | 2114 | mime-db@1.52.0: {} 2115 | 2116 | mime-types@2.1.35: 2117 | dependencies: 2118 | mime-db: 1.52.0 2119 | 2120 | minimatch@3.1.2: 2121 | dependencies: 2122 | brace-expansion: 1.1.11 2123 | 2124 | minimatch@9.0.5: 2125 | dependencies: 2126 | brace-expansion: 2.0.1 2127 | 2128 | ms@2.1.2: {} 2129 | 2130 | ms@2.1.3: {} 2131 | 2132 | nanoid@3.3.7: {} 2133 | 2134 | natural-compare@1.4.0: {} 2135 | 2136 | no-case@3.0.4: 2137 | dependencies: 2138 | lower-case: 2.0.2 2139 | tslib: 2.7.0 2140 | 2141 | optionator@0.9.4: 2142 | dependencies: 2143 | deep-is: 0.1.4 2144 | fast-levenshtein: 2.0.6 2145 | levn: 0.4.1 2146 | prelude-ls: 1.2.1 2147 | type-check: 0.4.0 2148 | word-wrap: 1.2.5 2149 | 2150 | p-limit@3.1.0: 2151 | dependencies: 2152 | yocto-queue: 0.1.0 2153 | 2154 | p-locate@5.0.0: 2155 | dependencies: 2156 | p-limit: 3.1.0 2157 | 2158 | parent-module@1.0.1: 2159 | dependencies: 2160 | callsites: 3.1.0 2161 | 2162 | pascal-case@3.1.2: 2163 | dependencies: 2164 | no-case: 3.0.4 2165 | tslib: 2.7.0 2166 | 2167 | path-exists@4.0.0: {} 2168 | 2169 | path-key@3.1.1: {} 2170 | 2171 | path@0.12.7: 2172 | dependencies: 2173 | process: 0.11.10 2174 | util: 0.10.4 2175 | 2176 | picocolors@1.1.0: {} 2177 | 2178 | picomatch@2.3.1: {} 2179 | 2180 | postcss-js@4.0.1(postcss@8.4.45): 2181 | dependencies: 2182 | camelcase-css: 2.0.1 2183 | postcss: 8.4.45 2184 | 2185 | postcss-mixins@9.0.4(postcss@8.4.45): 2186 | dependencies: 2187 | fast-glob: 3.3.2 2188 | postcss: 8.4.45 2189 | postcss-js: 4.0.1(postcss@8.4.45) 2190 | postcss-simple-vars: 7.0.1(postcss@8.4.45) 2191 | sugarss: 4.0.1(postcss@8.4.45) 2192 | 2193 | postcss-nested@6.2.0(postcss@8.4.45): 2194 | dependencies: 2195 | postcss: 8.4.45 2196 | postcss-selector-parser: 6.1.2 2197 | 2198 | postcss-preset-mantine@1.17.0(postcss@8.4.45): 2199 | dependencies: 2200 | postcss: 8.4.45 2201 | postcss-mixins: 9.0.4(postcss@8.4.45) 2202 | postcss-nested: 6.2.0(postcss@8.4.45) 2203 | 2204 | postcss-selector-parser@6.1.2: 2205 | dependencies: 2206 | cssesc: 3.0.0 2207 | util-deprecate: 1.0.2 2208 | 2209 | postcss-simple-vars@7.0.1(postcss@8.4.45): 2210 | dependencies: 2211 | postcss: 8.4.45 2212 | 2213 | postcss@8.4.45: 2214 | dependencies: 2215 | nanoid: 3.3.7 2216 | picocolors: 1.1.0 2217 | source-map-js: 1.2.0 2218 | 2219 | prelude-ls@1.2.1: {} 2220 | 2221 | prettier-linter-helpers@1.0.0: 2222 | dependencies: 2223 | fast-diff: 1.3.0 2224 | 2225 | prettier@3.3.3: {} 2226 | 2227 | process@0.11.10: {} 2228 | 2229 | proxy-from-env@1.1.0: {} 2230 | 2231 | punycode@2.3.1: {} 2232 | 2233 | queue-microtask@1.2.3: {} 2234 | 2235 | react-dom@18.3.1(react@18.3.1): 2236 | dependencies: 2237 | loose-envify: 1.4.0 2238 | react: 18.3.1 2239 | scheduler: 0.23.2 2240 | 2241 | react-hook-form@7.53.0(react@18.3.1): 2242 | dependencies: 2243 | react: 18.3.1 2244 | 2245 | react-number-format@5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2246 | dependencies: 2247 | react: 18.3.1 2248 | react-dom: 18.3.1(react@18.3.1) 2249 | 2250 | react-remove-scroll-bar@2.3.6(@types/react@18.3.5)(react@18.3.1): 2251 | dependencies: 2252 | react: 18.3.1 2253 | react-style-singleton: 2.2.1(@types/react@18.3.5)(react@18.3.1) 2254 | tslib: 2.7.0 2255 | optionalDependencies: 2256 | '@types/react': 18.3.5 2257 | 2258 | react-remove-scroll@2.6.0(@types/react@18.3.5)(react@18.3.1): 2259 | dependencies: 2260 | react: 18.3.1 2261 | react-remove-scroll-bar: 2.3.6(@types/react@18.3.5)(react@18.3.1) 2262 | react-style-singleton: 2.2.1(@types/react@18.3.5)(react@18.3.1) 2263 | tslib: 2.7.0 2264 | use-callback-ref: 1.3.2(@types/react@18.3.5)(react@18.3.1) 2265 | use-sidecar: 1.1.2(@types/react@18.3.5)(react@18.3.1) 2266 | optionalDependencies: 2267 | '@types/react': 18.3.5 2268 | 2269 | react-style-singleton@2.2.1(@types/react@18.3.5)(react@18.3.1): 2270 | dependencies: 2271 | get-nonce: 1.0.1 2272 | invariant: 2.2.4 2273 | react: 18.3.1 2274 | tslib: 2.7.0 2275 | optionalDependencies: 2276 | '@types/react': 18.3.5 2277 | 2278 | react-textarea-autosize@8.5.3(@types/react@18.3.5)(react@18.3.1): 2279 | dependencies: 2280 | '@babel/runtime': 7.25.6 2281 | react: 18.3.1 2282 | use-composed-ref: 1.3.0(react@18.3.1) 2283 | use-latest: 1.2.1(@types/react@18.3.5)(react@18.3.1) 2284 | transitivePeerDependencies: 2285 | - '@types/react' 2286 | 2287 | react@18.3.1: 2288 | dependencies: 2289 | loose-envify: 1.4.0 2290 | 2291 | regenerator-runtime@0.14.1: {} 2292 | 2293 | resolve-from@4.0.0: {} 2294 | 2295 | reusify@1.0.4: {} 2296 | 2297 | rollup@4.21.2: 2298 | dependencies: 2299 | '@types/estree': 1.0.5 2300 | optionalDependencies: 2301 | '@rollup/rollup-android-arm-eabi': 4.21.2 2302 | '@rollup/rollup-android-arm64': 4.21.2 2303 | '@rollup/rollup-darwin-arm64': 4.21.2 2304 | '@rollup/rollup-darwin-x64': 4.21.2 2305 | '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 2306 | '@rollup/rollup-linux-arm-musleabihf': 4.21.2 2307 | '@rollup/rollup-linux-arm64-gnu': 4.21.2 2308 | '@rollup/rollup-linux-arm64-musl': 4.21.2 2309 | '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 2310 | '@rollup/rollup-linux-riscv64-gnu': 4.21.2 2311 | '@rollup/rollup-linux-s390x-gnu': 4.21.2 2312 | '@rollup/rollup-linux-x64-gnu': 4.21.2 2313 | '@rollup/rollup-linux-x64-musl': 4.21.2 2314 | '@rollup/rollup-win32-arm64-msvc': 4.21.2 2315 | '@rollup/rollup-win32-ia32-msvc': 4.21.2 2316 | '@rollup/rollup-win32-x64-msvc': 4.21.2 2317 | fsevents: 2.3.3 2318 | 2319 | run-parallel@1.2.0: 2320 | dependencies: 2321 | queue-microtask: 1.2.3 2322 | 2323 | runtypes@6.7.0: {} 2324 | 2325 | scheduler@0.23.2: 2326 | dependencies: 2327 | loose-envify: 1.4.0 2328 | 2329 | semver@7.6.3: {} 2330 | 2331 | shebang-command@2.0.0: 2332 | dependencies: 2333 | shebang-regex: 3.0.0 2334 | 2335 | shebang-regex@3.0.0: {} 2336 | 2337 | snake-case@3.0.4: 2338 | dependencies: 2339 | dot-case: 3.0.4 2340 | tslib: 2.7.0 2341 | 2342 | source-map-js@1.2.0: {} 2343 | 2344 | sourcemap-codec@1.4.8: {} 2345 | 2346 | strip-ansi@6.0.1: 2347 | dependencies: 2348 | ansi-regex: 5.0.1 2349 | 2350 | strip-json-comments@3.1.1: {} 2351 | 2352 | sugarss@4.0.1(postcss@8.4.45): 2353 | dependencies: 2354 | postcss: 8.4.45 2355 | 2356 | supports-color@7.2.0: 2357 | dependencies: 2358 | has-flag: 4.0.0 2359 | 2360 | synckit@0.9.1: 2361 | dependencies: 2362 | '@pkgr/core': 0.1.1 2363 | tslib: 2.7.0 2364 | 2365 | tabbable@6.2.0: {} 2366 | 2367 | text-table@0.2.0: {} 2368 | 2369 | to-regex-range@5.0.1: 2370 | dependencies: 2371 | is-number: 7.0.0 2372 | 2373 | ts-api-utils@1.3.0(typescript@5.5.4): 2374 | dependencies: 2375 | typescript: 5.5.4 2376 | 2377 | ts-custom-error@3.3.1: {} 2378 | 2379 | tsconfck@3.1.3(typescript@5.5.4): 2380 | optionalDependencies: 2381 | typescript: 5.5.4 2382 | 2383 | tslib@2.7.0: {} 2384 | 2385 | type-check@0.4.0: 2386 | dependencies: 2387 | prelude-ls: 1.2.1 2388 | 2389 | type-fest@4.26.0: {} 2390 | 2391 | typescript-eslint@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): 2392 | dependencies: 2393 | '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 2394 | '@typescript-eslint/parser': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 2395 | '@typescript-eslint/utils': 8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) 2396 | optionalDependencies: 2397 | typescript: 5.5.4 2398 | transitivePeerDependencies: 2399 | - eslint 2400 | - supports-color 2401 | 2402 | typescript@5.5.4: {} 2403 | 2404 | undici-types@6.19.8: {} 2405 | 2406 | upper-case-first@2.0.2: 2407 | dependencies: 2408 | tslib: 2.7.0 2409 | 2410 | uri-js@4.4.1: 2411 | dependencies: 2412 | punycode: 2.3.1 2413 | 2414 | use-callback-ref@1.3.2(@types/react@18.3.5)(react@18.3.1): 2415 | dependencies: 2416 | react: 18.3.1 2417 | tslib: 2.7.0 2418 | optionalDependencies: 2419 | '@types/react': 18.3.5 2420 | 2421 | use-composed-ref@1.3.0(react@18.3.1): 2422 | dependencies: 2423 | react: 18.3.1 2424 | 2425 | use-isomorphic-layout-effect@1.1.2(@types/react@18.3.5)(react@18.3.1): 2426 | dependencies: 2427 | react: 18.3.1 2428 | optionalDependencies: 2429 | '@types/react': 18.3.5 2430 | 2431 | use-latest@1.2.1(@types/react@18.3.5)(react@18.3.1): 2432 | dependencies: 2433 | react: 18.3.1 2434 | use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.5)(react@18.3.1) 2435 | optionalDependencies: 2436 | '@types/react': 18.3.5 2437 | 2438 | use-sidecar@1.1.2(@types/react@18.3.5)(react@18.3.1): 2439 | dependencies: 2440 | detect-node-es: 1.1.0 2441 | react: 18.3.1 2442 | tslib: 2.7.0 2443 | optionalDependencies: 2444 | '@types/react': 18.3.5 2445 | 2446 | util-deprecate@1.0.2: {} 2447 | 2448 | util@0.10.4: 2449 | dependencies: 2450 | inherits: 2.0.3 2451 | 2452 | uuid@9.0.1: {} 2453 | 2454 | vite-plugin-logseq@1.1.2: 2455 | dependencies: 2456 | magic-string: 0.26.7 2457 | 2458 | vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4)(sugarss@4.0.1(postcss@8.4.45))): 2459 | dependencies: 2460 | debug: 4.3.7 2461 | globrex: 0.1.2 2462 | tsconfck: 3.1.3(typescript@5.5.4) 2463 | optionalDependencies: 2464 | vite: 5.4.3(@types/node@22.5.4)(sugarss@4.0.1(postcss@8.4.45)) 2465 | transitivePeerDependencies: 2466 | - supports-color 2467 | - typescript 2468 | 2469 | vite@5.4.3(@types/node@22.5.4)(sugarss@4.0.1(postcss@8.4.45)): 2470 | dependencies: 2471 | esbuild: 0.21.5 2472 | postcss: 8.4.45 2473 | rollup: 4.21.2 2474 | optionalDependencies: 2475 | '@types/node': 22.5.4 2476 | fsevents: 2.3.3 2477 | sugarss: 4.0.1(postcss@8.4.45) 2478 | 2479 | which@2.0.2: 2480 | dependencies: 2481 | isexe: 2.0.0 2482 | 2483 | word-wrap@1.2.5: {} 2484 | 2485 | yocto-queue@0.1.0: {} 2486 | -------------------------------------------------------------------------------- /screenshots/enter-variables2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/enter-variables2.png -------------------------------------------------------------------------------- /screenshots/inline-filter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/inline-filter.gif -------------------------------------------------------------------------------- /screenshots/plugin-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/plugin-settings.png -------------------------------------------------------------------------------- /screenshots/pull-tasks-todoist.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/pull-tasks-todoist.gif -------------------------------------------------------------------------------- /screenshots/pull-tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/pull-tasks.png -------------------------------------------------------------------------------- /screenshots/sample-env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/sample-env.png -------------------------------------------------------------------------------- /screenshots/scheduled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/scheduled.png -------------------------------------------------------------------------------- /screenshots/send-task-todoist.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/send-task-todoist.gif -------------------------------------------------------------------------------- /screenshots/todoist-url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benjypng/logseq-todoist-plugin/25919128c6ad6a9f426baed0b40726a8a5986d0a/screenshots/todoist-url.png -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | import { createTheme } from '@mantine/core' 2 | 3 | export const THEME = createTheme({ 4 | primaryColor: 'darkTeal', 5 | primaryShade: 9, 6 | colors: { 7 | darkTeal: [ 8 | '#ecfbfd', 9 | '#daf4f8', 10 | '#b0e8f2', 11 | '#85dded', 12 | '#66d3e9', 13 | '#56cde6', 14 | '#4ccae6', 15 | '#3eb2cd', 16 | '#2f9eb7', 17 | '#0d89a0', 18 | ], 19 | }, 20 | }) 21 | -------------------------------------------------------------------------------- /src/features/helpers.ts: -------------------------------------------------------------------------------- 1 | import { Label, Project, TodoistApi } from '@doist/todoist-api-typescript' 2 | 3 | export const getAllProjects = async (): Promise => { 4 | const { apiToken } = logseq.settings! 5 | if (!apiToken || apiToken === '') return ['--- ---'] 6 | const api: TodoistApi = new TodoistApi(apiToken as string) 7 | try { 8 | const allProjects: Project[] = await api.getProjects() 9 | const projArr = allProjects.map( 10 | (project) => `${project.name} (${project.id})`, 11 | ) 12 | projArr.unshift('--- ---') 13 | return projArr 14 | } catch (e) { 15 | console.log(e) 16 | await logseq.UI.showMsg( 17 | `Error retrieving projects ${(e as Error).message}`, 18 | 'error', 19 | ) 20 | return ['--- ---'] 21 | } 22 | } 23 | 24 | export const getAllLabels = async (): Promise => { 25 | const { apiToken } = logseq.settings! 26 | if (!apiToken || apiToken === '') return ['--- ---'] 27 | const api: TodoistApi = new TodoistApi(apiToken as string) 28 | try { 29 | const allLabels: Label[] = await api.getLabels() 30 | const labelArr = allLabels.map((label) => `${label.name} (${label.id})`) 31 | labelArr.unshift('--- ---') 32 | return labelArr 33 | } catch (e) { 34 | console.log(e) 35 | await logseq.UI.showMsg( 36 | `Error retrieving labels ${(e as Error).message}`, 37 | 'error', 38 | ) 39 | return ['--- ---'] 40 | } 41 | } 42 | 43 | export const getIdFromString = (content: string): string => { 44 | const regExp = /\((.*?)\)/ 45 | const matched = regExp.exec(content.trim()) 46 | if (matched && matched[1]) { 47 | return matched[1] 48 | } else { 49 | return '' 50 | } 51 | } 52 | 53 | export const getNameFromString = (content: string): string => { 54 | return content.substring(0, content.indexOf('(')).trim() 55 | } 56 | -------------------------------------------------------------------------------- /src/features/retrieve/index.ts: -------------------------------------------------------------------------------- 1 | import { Task, TodoistApi } from '@doist/todoist-api-typescript' 2 | import { getDateForPage, getDeadlineDateDay } from 'logseq-dateutils' 3 | 4 | import { getIdFromString } from '../helpers' 5 | 6 | interface TaskBlock { 7 | content: string 8 | children: TaskBlock[] 9 | properties: { 10 | todoistid?: string 11 | comments?: string 12 | attachments?: string 13 | due?: string 14 | } 15 | } 16 | 17 | export const handleComments = async (id: string) => { 18 | const api = new TodoistApi(logseq.settings!.apiToken as string) 19 | const comments = await api.getComments({ taskId: id }) 20 | 21 | if (comments.length === 0) return {} 22 | 23 | const textComments = comments 24 | .filter((comment) => !comment.attachment) 25 | .map((comment) => comment.content) 26 | .join(', ') 27 | const attachments = comments 28 | .filter((comment) => comment.attachment) 29 | .map((comment) => { 30 | const { fileUrl, fileName } = comment.attachment! 31 | // Todoist implements a redirect behind cloudflare, hence no point supporting image markdown 32 | return `[${fileName}](${fileUrl})` 33 | }) 34 | .join(', ') 35 | 36 | return { 37 | comments: textComments, 38 | attachments, 39 | } 40 | } 41 | 42 | export const buildRootTasks = async (tasks: Task[]) => { 43 | const taskMap: Record = {} 44 | 45 | try { 46 | await Promise.all( 47 | tasks.map(async (task) => { 48 | const comments = await handleComments(task.id) 49 | 50 | // Handle due date 51 | let content = task.due 52 | ? `${task.content} 53 | ${getDeadlineDateDay(new Date(task.due.date))}` 54 | : task.content 55 | 56 | // Handle append todo 57 | content = logseq.settings!.retrieveAppendTodo 58 | ? `TODO ${content}` 59 | : content 60 | 61 | // Handle created at 62 | const preferredDateFormat = (await logseq.App.getUserConfigs()) 63 | .preferredDateFormat 64 | const createdDate = getDateForPage( 65 | new Date(task.createdAt), 66 | preferredDateFormat, 67 | ) 68 | 69 | taskMap[task.id] = { 70 | content: content, 71 | children: [], 72 | properties: { 73 | ...(logseq.settings!.retrieveAppendCreationDateTime! && { 74 | created: createdDate, 75 | }), 76 | ...(logseq.settings!.appendTodoistId! && { todoistid: task.id }), 77 | ...(comments.comments && { comments: comments.comments }), 78 | ...(comments.attachments && { attachments: comments.attachments }), 79 | }, 80 | } 81 | }), 82 | ) 83 | 84 | const rootTasks: TaskBlock[] = [] 85 | tasks.forEach((task) => { 86 | const taskBlock = taskMap[task.id] 87 | if (task.parentId === null) { 88 | if (!taskBlock) return 89 | rootTasks.push(taskBlock) 90 | } else { 91 | const parentTask = taskMap[task.parentId!] 92 | if (parentTask) { 93 | if (!taskBlock) return 94 | parentTask.children.push(taskBlock) 95 | } 96 | } 97 | }) 98 | 99 | return rootTasks 100 | } catch (error) { 101 | console.error(error) 102 | logseq.UI.showMsg('Unable to build root tasks', 'error') 103 | return [] 104 | } 105 | } 106 | 107 | export const deleteAllTasks = async (tasksArr: Task[]) => { 108 | const api = new TodoistApi(logseq.settings!.apiToken as string) 109 | try { 110 | for (const task of tasksArr) { 111 | await api.deleteTask(task.id) 112 | } 113 | } catch (e) { 114 | logseq.UI.showMsg(`Error deleting tasks: ${(e as Error).message}`, 'error') 115 | return 116 | } 117 | } 118 | 119 | export const retrieveTasks = async ( 120 | taskParams: 'default' | 'today' | 'custom', 121 | customFilter?: string, 122 | ) => { 123 | const msgKey = await logseq.UI.showMsg('Getting tasks...') 124 | 125 | const api = new TodoistApi(logseq.settings!.apiToken as string) 126 | 127 | // Insert blocks 128 | let allTasks: Task[] = [] 129 | 130 | try { 131 | switch (taskParams) { 132 | case 'default': { 133 | if (logseq.settings!.retrieveDefaultProject === '--- ---') { 134 | await logseq.UI.showMsg('Please select a default project', 'error') 135 | return [] 136 | } 137 | const tasks = await api.getTasks({ 138 | projectId: getIdFromString( 139 | logseq.settings!.retrieveDefaultProject as string, 140 | ), 141 | }) 142 | allTasks = [...allTasks, ...tasks] 143 | break 144 | } 145 | 146 | case 'today': { 147 | const tasks = await api.getTasks({ filter: 'today' }) 148 | allTasks = [...allTasks, ...tasks] 149 | break 150 | } 151 | 152 | case 'custom': { 153 | const tasks = await api.getTasks({ filter: customFilter }) 154 | allTasks = [...allTasks, ...tasks] 155 | break 156 | } 157 | 158 | default: 159 | break 160 | } 161 | logseq.UI.closeMsg(msgKey) 162 | 163 | return allTasks 164 | } catch (error) { 165 | console.log(error) 166 | logseq.UI.showMsg(`Error: ${(error as Error).message}`, 'error') 167 | return [] 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /src/features/retrieve/insert-tasks-into-graph.ts: -------------------------------------------------------------------------------- 1 | import { Task } from '@doist/todoist-api-typescript' 2 | 3 | import { getNameFromString } from '../helpers' 4 | import { buildRootTasks } from '.' 5 | 6 | export const insertTasksIntoGraph = async (tasks: Task[], uuid: string) => { 7 | const rootTasks = await buildRootTasks(tasks) 8 | if (rootTasks.length === 0) { 9 | return 10 | } 11 | 12 | await logseq.Editor.insertBatchBlock(uuid, rootTasks, { before: true }) 13 | 14 | if (logseq.settings!.projectNameAsParentBlk) { 15 | await logseq.Editor.updateBlock( 16 | uuid, 17 | getNameFromString(logseq.settings!.retrieveDefaultProject as string), 18 | ) 19 | } else { 20 | await logseq.Editor.removeBlock(uuid) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/features/send/components/SendTask.tsx: -------------------------------------------------------------------------------- 1 | import './style.css' 2 | import '@mantine/core/styles.css' 3 | 4 | import { 5 | Button, 6 | Flex, 7 | MantineProvider, 8 | MultiSelect, 9 | Pill, 10 | Select, 11 | Space, 12 | Stack, 13 | TextInput, 14 | Title, 15 | } from '@mantine/core' 16 | import { useCallback } from 'react' 17 | import { Controller, useForm } from 'react-hook-form' 18 | 19 | import { THEME } from '../../../constants' 20 | import { sendTask } from '..' 21 | 22 | interface SendTaskProps { 23 | content: string 24 | projects: string[] 25 | labels: string[] 26 | uuid: string 27 | } 28 | 29 | export interface FormInput { 30 | task: string 31 | project: string 32 | label: string[] 33 | priority: string 34 | due: string 35 | uuid: string 36 | } 37 | 38 | export const SendTask = ({ 39 | content, 40 | projects, 41 | labels, 42 | uuid, 43 | }: SendTaskProps) => { 44 | const { 45 | control, 46 | handleSubmit, 47 | reset, 48 | formState: { errors }, 49 | } = useForm({ 50 | defaultValues: { 51 | task: content.trim(), 52 | project: '--- ---', 53 | priority: '', 54 | uuid: uuid, 55 | due: '', 56 | }, 57 | }) 58 | 59 | const submitTask = useCallback( 60 | (data: FormInput) => { 61 | sendTask(data) 62 | logseq.UI.showMsg('Task sent to Todoist', 'success', { timeout: 3000 }) 63 | reset() 64 | logseq.hideMainUI() 65 | }, 66 | [uuid], 67 | ) 68 | 69 | return ( 70 | 71 | 72 | 80 | Todoist: Send Task 81 | 82 | {content} 83 | 84 | 85 |
86 | 87 | ( 92 | 123 | )} 124 | /> 125 | ( 129 | 134 | )} 135 | /> 136 | 137 | 138 | 141 | 142 |
143 |
144 |
145 | ) 146 | } 147 | -------------------------------------------------------------------------------- /src/features/send/components/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: none !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/features/send/index.ts: -------------------------------------------------------------------------------- 1 | import { TodoistApi } from '@doist/todoist-api-typescript' 2 | 3 | import { getIdFromString, getNameFromString } from '../helpers' 4 | import { FormInput } from './components/SendTask' 5 | 6 | export const removeTaskFlags = (content: string): string => { 7 | const taskFlags = ['TODO', 'DOING', 'NOW', 'LATER', 'DONE'] 8 | for (const f of taskFlags) { 9 | if (content.includes(f)) { 10 | content = content.replace(f, '') 11 | } 12 | } 13 | return content 14 | } 15 | 16 | export const sendTask = async ({ 17 | task, 18 | project, 19 | label, 20 | priority, 21 | due, 22 | uuid, 23 | }: FormInput) => { 24 | if (logseq.settings!.apiToken === '') { 25 | logseq.UI.showMsg('Invalid API token', 'error') 26 | return 27 | } 28 | 29 | const api = new TodoistApi(logseq.settings!.apiToken as string) 30 | 31 | const currGraph = await logseq.App.getCurrentGraph() 32 | const currGraphName = currGraph?.name 33 | 34 | const sendObj = { 35 | content: removeTaskFlags(task), 36 | description: logseq.settings!.sendAppendUri 37 | ? `[Link to Logseq](logseq://graph/${currGraphName}?block-id=${uuid})` 38 | : '', 39 | ...(project !== '--- ---' && { projectId: getIdFromString(project) }), 40 | ...(label[0] !== '--- ---' && { 41 | labels: label.map((l) => getNameFromString(l)), 42 | }), 43 | ...(priority && { priority: parseInt(priority) }), 44 | ...(due !== '' && { dueString: due }), 45 | } 46 | 47 | try { 48 | const res = await api.addTask(sendObj) 49 | logseq.UI.showMsg('Task sent successfully', 'success', { timeout: 3000 }) 50 | return res 51 | } catch (error) { 52 | console.error(error) 53 | await logseq.UI.showMsg(`Task was not sent: ${(error as Error).message}`) 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/handleListeners.ts: -------------------------------------------------------------------------------- 1 | export default function handleListeners() { 2 | //ESC 3 | document.addEventListener( 4 | 'keydown', 5 | function (e) { 6 | if (e.key === 'Escape') { 7 | logseq.hideMainUI({ restoreEditingCursor: true }) 8 | } 9 | e.stopPropagation() 10 | }, 11 | false, 12 | ) 13 | 14 | // Click 15 | // document.addEventListener("click", (e) => { 16 | // if (!(e.target as HTMLElement).closest(".sendPopup")) { 17 | // logseq.hideMainUI({ restoreEditingCursor: true }); 18 | // } 19 | // e.stopPropagation(); 20 | // }); 21 | } 22 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import '@logseq/libs' 2 | 3 | import { createRoot } from 'react-dom/client' 4 | 5 | import { getAllLabels, getAllProjects } from './features/helpers' 6 | import { retrieveTasks } from './features/retrieve' 7 | import { insertTasksIntoGraph } from './features/retrieve/insert-tasks-into-graph' 8 | import { sendTask } from './features/send' 9 | import { SendTask } from './features/send/components/SendTask' 10 | import handleListeners from './handleListeners' 11 | import { callSettings } from './settings' 12 | 13 | const main = async () => { 14 | console.log('logseq-todoist-plugin loaded') 15 | handleListeners() 16 | 17 | if (logseq.settings!.apiToken === '') { 18 | // Check if it's a new install 19 | await logseq.UI.showMsg( 20 | 'Please key in your API key before using the plugin', 21 | 'error', 22 | ) 23 | } 24 | const projects = await getAllProjects() 25 | const labels = await getAllLabels() 26 | callSettings(projects, labels) 27 | 28 | // const templates = await logseq.App.getCurrentGraphTemplates() 29 | // console.log('Templates', templates) 30 | 31 | // RETRIEVE TASKS 32 | logseq.Editor.registerSlashCommand('Todoist: Retrieve Tasks', async (e) => { 33 | const tasks = await retrieveTasks('default') 34 | if (tasks.length > 0) await insertTasksIntoGraph(tasks, e.uuid) 35 | }) 36 | 37 | logseq.Editor.registerSlashCommand( 38 | "Todoist: Retrieve Today's Tasks", 39 | async (e) => { 40 | const tasks = await retrieveTasks('today') 41 | if (tasks.length > 0) await insertTasksIntoGraph(tasks, e.uuid) 42 | }, 43 | ) 44 | 45 | logseq.Editor.registerSlashCommand( 46 | 'Todoist: Retrieve Custom Filter', 47 | async (e) => { 48 | const content = await logseq.Editor.getEditingBlockContent() 49 | if (content.length === 0) { 50 | logseq.UI.showMsg('Cannot retrieve with empty filter', 'error') 51 | return 52 | } 53 | const tasks = await retrieveTasks('custom', content) 54 | if (tasks.length > 0) { 55 | await logseq.Editor.updateBlock(e.uuid, '') // Clear block first since it contains the filter 56 | await insertTasksIntoGraph(tasks, e.uuid) 57 | } 58 | }, 59 | ) 60 | 61 | // SEND TASKS 62 | const el = document.getElementById('app') 63 | if (!el) return 64 | const root = createRoot(el) 65 | 66 | logseq.Editor.registerSlashCommand( 67 | 'Todoist: Send Task (manual)', 68 | async (e) => { 69 | const content = await logseq.Editor.getEditingBlockContent() 70 | if (content.length === 0) { 71 | logseq.UI.showMsg('Unable to send empty task', 'error') 72 | return 73 | } 74 | const msgKey = await logseq.UI.showMsg( 75 | 'Getting projects and labels', 76 | 'success', 77 | ) 78 | const allProjects = await getAllProjects() 79 | const allLabels = await getAllLabels() 80 | logseq.UI.closeMsg(msgKey) 81 | 82 | root.render( 83 | , 89 | ) 90 | logseq.showMainUI() 91 | }, 92 | ) 93 | 94 | logseq.Editor.registerSlashCommand('Todoist: Send Task', async (e) => { 95 | const content = await logseq.Editor.getEditingBlockContent() 96 | if (content.length === 0) { 97 | logseq.UI.showMsg('Unable to send empty task', 'error') 98 | return 99 | } 100 | 101 | // If default project set, don't show popup 102 | if (logseq.settings!.sendDefaultProject !== '--- ---') { 103 | await sendTask({ 104 | task: content, 105 | project: logseq.settings!.sendDefaultProject as string, 106 | label: [logseq.settings!.sendDefaultLabel as string], 107 | due: logseq.settings!.sendDefaultDeadline ? 'today' : '', 108 | priority: '1', 109 | uuid: e.uuid, 110 | }) 111 | } else { 112 | // If no default project set, show popup 113 | const msgKey = await logseq.UI.showMsg( 114 | 'Getting projects and labels', 115 | 'success', 116 | ) 117 | const allProjects = await getAllProjects() 118 | const allLabels = await getAllLabels() 119 | logseq.UI.closeMsg(msgKey) 120 | 121 | root.render( 122 | , 128 | ) 129 | logseq.showMainUI() 130 | } 131 | }) 132 | } 133 | 134 | logseq.ready(main).catch(console.error) 135 | -------------------------------------------------------------------------------- /src/settings/index.ts: -------------------------------------------------------------------------------- 1 | import { SettingSchemaDesc } from '@logseq/libs/dist/LSPlugin.user' 2 | 3 | export const callSettings = async (projects: string[], labels: string[]) => { 4 | const settings: SettingSchemaDesc[] = [ 5 | { 6 | key: 'apiToken', 7 | type: 'string', 8 | default: '', 9 | title: 'API Token', 10 | description: 11 | 'Please enter your API token and restart Logseq. You can retrieve your API token from your Todoist developer dashboard.', 12 | }, 13 | { 14 | key: '', 15 | type: 'heading', 16 | default: '', 17 | title: 'Sending Tasks', 18 | description: '', 19 | }, 20 | { 21 | key: 'sendDefaultProject', 22 | type: 'enum', 23 | default: '--- ---', 24 | enumChoices: projects, 25 | enumPicker: 'select', 26 | title: 'Default Project', 27 | description: 28 | 'Default project to send tasks to. If this is set, tasks will be sent automatically without the popup.', 29 | }, 30 | { 31 | key: 'sendDefaultLabel', 32 | type: 'enum', 33 | default: '--- ---', 34 | enumChoices: labels, 35 | enumPicker: 'select', 36 | title: 'Default Label', 37 | description: 'Default label to label tasks.', 38 | }, 39 | { 40 | key: 'sendDefaultDeadline', 41 | type: 'boolean', 42 | default: true, 43 | title: 'Default Deadline', 44 | description: 'If set to true, default deadline will be set to today.', 45 | }, 46 | { 47 | key: 'sendAppendUri', 48 | type: 'boolean', 49 | default: true, 50 | title: 'Append Logseq URI', 51 | description: 52 | 'If set to true, all tasks sent to Todoist will have the Logseq URI appended.', 53 | }, 54 | { 55 | key: '', 56 | type: 'heading', 57 | default: '', 58 | title: 'Retrieving Tasks', 59 | description: '', 60 | }, 61 | { 62 | key: 'retrieveDefaultProject', 63 | type: 'enum', 64 | default: '--- ---', 65 | enumChoices: projects, 66 | enumPicker: 'select', 67 | title: 'Default Project', 68 | description: 'Default project to retrieve tasks from', 69 | }, 70 | { 71 | key: 'projectNameAsParentBlk', 72 | type: 'boolean', 73 | default: false, 74 | title: 'Set Project Name as Parent Block', 75 | description: 76 | 'If true, tasks will be added under a parent block with their project name.', 77 | }, 78 | { 79 | key: 'retrieveAppendTodo', 80 | type: 'boolean', 81 | default: true, 82 | title: 'Append TODO', 83 | description: 84 | 'If set to true, all retrieved tasks will have a TODO appended.', 85 | }, 86 | { 87 | key: 'retrieveAppendTodoistId', 88 | type: 'boolean', 89 | default: true, 90 | title: 'Append Todoist ID', 91 | description: 92 | 'If set to true, all retrieved tasks will have their todoistId appended.', 93 | }, 94 | { 95 | key: 'retrieveAppendUrl', 96 | type: 'boolean', 97 | default: false, 98 | title: 'Append URL', 99 | description: 100 | 'If set to true, all retrieved tasks will have a Todoist URL appended.', 101 | }, 102 | { 103 | key: 'retrieveClearTasks', 104 | type: 'boolean', 105 | default: false, 106 | title: 'Clear Tasks from Todoist', 107 | description: 108 | 'If set to true, retrieved tasks will be deleted in Todoist.', 109 | }, 110 | { 111 | key: 'retrieveAppendCreationDateTime', 112 | type: 'boolean', 113 | default: false, 114 | title: 'Append Creation Date and Time', 115 | description: 116 | 'If set to true, all retrieved tasks will have their creation date and time appended.', 117 | }, 118 | ] 119 | logseq.useSettingsSchema(settings) 120 | } 121 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "target": "es2017", 5 | "lib": [ 6 | "dom", 7 | "dom.iterable", 8 | "esnext" 9 | ], 10 | "allowJs": true, 11 | "checkJs": true, 12 | "skipLibCheck": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noEmit": true, 16 | "esModuleInterop": true, 17 | "module": "esnext", 18 | "moduleResolution": "node", 19 | "resolveJsonModule": true, 20 | "isolatedModules": true, 21 | "incremental": true, 22 | "noUncheckedIndexedAccess": true, 23 | "baseUrl": "./", 24 | "paths": { 25 | "../*": [ 26 | "src/*" 27 | ] 28 | } 29 | }, 30 | "include": [ 31 | "**/*.ts", 32 | "**/*.tsx", 33 | "**/*.cjs", 34 | "**/*.mjs" 35 | ], 36 | "exclude": [ 37 | "node_modules", 38 | "./dist/**/*", 39 | "./screenshots", 40 | "tailwind.config.js" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import logseqDevPlugin from 'vite-plugin-logseq' 3 | 4 | export default defineConfig({ 5 | plugins: [logseqDevPlugin()], 6 | }) 7 | --------------------------------------------------------------------------------