├── .github
├── FUNDING.yml
└── workflows
│ └── publish.yml
├── .gitignore
├── .husky
└── pre-commit
├── .prettierrc
├── LICENSE.md
├── README.md
├── eslint.config.mjs
├── icon.svg
├── index.html
├── package.json
├── pnpm-lock.yaml
├── screenshots
├── demo.gif
└── dynamic-variables.gif
├── src
├── components
│ ├── SortableItem.tsx
│ ├── TagManagement.tsx
│ └── TagProperties.tsx
├── constants.ts
├── features
│ ├── create-tag
│ │ └── index.tsx
│ ├── index.css
│ ├── index.tsx
│ └── manage-tags
│ │ └── index.tsx
├── global.d.ts
├── handle-popup.ts
├── index.tsx
├── observerCallback.ts
├── services
│ ├── core
│ │ ├── query-blocks-with-tag.ts
│ │ ├── update-blocks.ts
│ │ └── update-settings.ts
│ ├── handle-dynamic-variables.ts
│ ├── handle-power-tag.ts
│ └── re-ordering
│ │ ├── index.ts
│ │ ├── insert-ordered-properties.ts
│ │ ├── remove-all-properties.ts
│ │ └── reorder-properties.ts
└── settings.ts
├── tsconfig.json
└── vite.config.ts
/.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.svg ${{ 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 |
--------------------------------------------------------------------------------
/.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 | # Introduction
4 |
5 | Designate selected hashtags as PowerTags, and see them auto-create properties are you use them.
6 |
7 | This only applies to tags created using `#` and does not apply to page references, block references without the `#` and blocks that have the `tag` property.
8 |
9 | 
10 |
11 | # Usage
12 |
13 | ## Creating Power Tags
14 |
15 | 1. Click on the plugin icon.
16 | 2. Enter your PowerTag, followed by the properties to assign to the PowerTag. You may also assign a default value.
17 | 3. You may use *dynamic variables* in your default values. This will then be automatically populated when using your PowerTag. You may refer to the [Dynamic Variables](https://github.com/benjypng/logseq-powertags-plugin?tab=readme-ov-file#dynamic-variables) section for available variables.
18 | 4. Now the next time you use the tag, your properties will be auto-added.
19 |
20 | ## Managing Your Tags
21 |
22 | 1. Click on the plugin icon.
23 | 2. You will see a list of your created power tags.
24 | 3. Any actions performed here will affect past blocks created with the tag. For example,
25 | - Creating a new PowerTag
26 | - Does not affect past blocks with the tag.
27 | - Deleting a PowerTag
28 | - Removes all properties from blocks that have the tag, even those not created with this plugin.
29 | - Deleting a property of a PowerTag
30 | - Removes the property from blocks that have the tag, even those not created with this plugin.
31 | - Adding a property to an existing PowerTag
32 | - Adds the property to all blocks that have the tag, even those not created with this plugin.
33 |
34 | > Important Note: PowerTags are stored in the plugin settings. If the plugin settings file (found in `.logseq`) is deleted, you will need to manually create your power tags again.
35 |
36 | ## Using Power Tags
37 |
38 | ### Option 1
39 |
40 | By default, PowerTags are automatically parse when you presss `Enter` to create a new block. You can turn this behaviour off in the plugin settings.
41 |
42 | ### Option 2
43 |
44 | If you turn off auto-parse, you may trigger the parsing manually by using the slash command at the end of your block with the PowerTag, i.e. `/Parse PowerTag`
45 |
46 | # Dynamic Variables
47 |
48 | 
49 |
50 | The following are available to use in your default values:
51 |
52 | |Dynamic Variable|Remarks|
53 | |----------------|-------|
54 | |<% today %>|Inserts the date today based on your preferred date format|
55 | |<% yesterday %>|Inserts the date yesterday based on your preferred date format|
56 | |<% tomorrow %>|Inserts the date tomorrow based on your preferred date format|
57 | |<% time %>|Inserts the current time|
58 | |<% current page %>|Inserts the current page name|
59 |
60 | # Installation
61 |
62 | If not available from the marketplace, download the release and manually load it into Logseq after unzipping it.
63 |
--------------------------------------------------------------------------------
/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/consistent-indexed-object-style': 'off',
22 | '@typescript-eslint/no-explicit-any': 'off',
23 | '@typescript-eslint/no-unused-vars': [
24 | 'error',
25 | { varsIgnorePattern: '^_' },
26 | ],
27 | },
28 | },
29 | )
30 |
--------------------------------------------------------------------------------
/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/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-powertags-plugin",
3 | "author": "benjypng",
4 | "description": "Automatically create block properties based on specified tags.",
5 | "license": "MIT",
6 | "logseq": {
7 | "id": "logseq-powertags-plugin",
8 | "title": "logseq-powertags-plugin",
9 | "icon": "./icon.svg",
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-powertags-plugin.zip"
28 | ]
29 | }
30 | ]
31 | ]
32 | },
33 | "dependencies": {
34 | "@dnd-kit/core": "^6.1.0",
35 | "@dnd-kit/sortable": "^8.0.0",
36 | "@dnd-kit/utilities": "^3.2.2",
37 | "@logseq/libs": "^0.0.15",
38 | "@mantine/core": "^7.12.2",
39 | "@mantine/hooks": "^7.12.2",
40 | "date-fns": "^3.6.0",
41 | "logseq-dateutils": "^2.1.2",
42 | "lucide-react": "^0.437.0",
43 | "react": "^18.3.1",
44 | "react-dom": "^18.3.1",
45 | "react-hook-form": "^7.52.2"
46 | },
47 | "devDependencies": {
48 | "@eslint/js": "^9.6.0",
49 | "@types/eslint": "^8.56.10",
50 | "@types/eslint-config-prettier": "^6.11.3",
51 | "@types/eslint__js": "^8.42.3",
52 | "@types/node": "^20.14.10",
53 | "@types/react": "^18.3.3",
54 | "@types/react-dom": "^18.3.0",
55 | "@typescript-eslint/eslint-plugin": "^6.21.0",
56 | "@typescript-eslint/parser": "^6.21.0",
57 | "eslint": "^8.57.0",
58 | "eslint-config-prettier": "^9.1.0",
59 | "eslint-plugin-prettier": "^5.1.3",
60 | "eslint-plugin-simple-import-sort": "^12.1.1",
61 | "husky": "^9.1.5",
62 | "postcss": "^8.4.42",
63 | "postcss-preset-mantine": "^1.17.0",
64 | "postcss-simple-vars": "^7.0.1",
65 | "prettier": "^3.3.2",
66 | "typescript": "^5.5.3",
67 | "typescript-eslint": "^7.15.0",
68 | "vite": "^4.5.3",
69 | "vite-plugin-logseq": "^1.1.2",
70 | "vite-tsconfig-paths": "^4.3.2"
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@dnd-kit/core':
12 | specifier: ^6.1.0
13 | version: 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
14 | '@dnd-kit/sortable':
15 | specifier: ^8.0.0
16 | version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
17 | '@dnd-kit/utilities':
18 | specifier: ^3.2.2
19 | version: 3.2.2(react@18.3.1)
20 | '@logseq/libs':
21 | specifier: ^0.0.15
22 | version: 0.0.15
23 | '@mantine/core':
24 | specifier: ^7.12.2
25 | version: 7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
26 | '@mantine/hooks':
27 | specifier: ^7.12.2
28 | version: 7.12.2(react@18.3.1)
29 | date-fns:
30 | specifier: ^3.6.0
31 | version: 3.6.0
32 | logseq-dateutils:
33 | specifier: ^2.1.2
34 | version: 2.1.2
35 | lucide-react:
36 | specifier: ^0.437.0
37 | version: 0.437.0(react@18.3.1)
38 | react:
39 | specifier: ^18.3.1
40 | version: 18.3.1
41 | react-dom:
42 | specifier: ^18.3.1
43 | version: 18.3.1(react@18.3.1)
44 | react-hook-form:
45 | specifier: ^7.52.2
46 | version: 7.52.2(react@18.3.1)
47 | devDependencies:
48 | '@eslint/js':
49 | specifier: ^9.6.0
50 | version: 9.8.0
51 | '@types/eslint':
52 | specifier: ^8.56.10
53 | version: 8.56.11
54 | '@types/eslint-config-prettier':
55 | specifier: ^6.11.3
56 | version: 6.11.3
57 | '@types/eslint__js':
58 | specifier: ^8.42.3
59 | version: 8.42.3
60 | '@types/node':
61 | specifier: ^20.14.10
62 | version: 20.14.14
63 | '@types/react':
64 | specifier: ^18.3.3
65 | version: 18.3.3
66 | '@types/react-dom':
67 | specifier: ^18.3.0
68 | version: 18.3.0
69 | '@typescript-eslint/eslint-plugin':
70 | specifier: ^6.21.0
71 | version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
72 | '@typescript-eslint/parser':
73 | specifier: ^6.21.0
74 | version: 6.21.0(eslint@8.57.0)(typescript@5.5.4)
75 | eslint:
76 | specifier: ^8.57.0
77 | version: 8.57.0
78 | eslint-config-prettier:
79 | specifier: ^9.1.0
80 | version: 9.1.0(eslint@8.57.0)
81 | eslint-plugin-prettier:
82 | specifier: ^5.1.3
83 | version: 5.2.1(@types/eslint@8.56.11)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3)
84 | eslint-plugin-simple-import-sort:
85 | specifier: ^12.1.1
86 | version: 12.1.1(eslint@8.57.0)
87 | husky:
88 | specifier: ^9.1.5
89 | version: 9.1.5
90 | postcss:
91 | specifier: ^8.4.42
92 | version: 8.4.42
93 | postcss-preset-mantine:
94 | specifier: ^1.17.0
95 | version: 1.17.0(postcss@8.4.42)
96 | postcss-simple-vars:
97 | specifier: ^7.0.1
98 | version: 7.0.1(postcss@8.4.42)
99 | prettier:
100 | specifier: ^3.3.2
101 | version: 3.3.3
102 | typescript:
103 | specifier: ^5.5.3
104 | version: 5.5.4
105 | typescript-eslint:
106 | specifier: ^7.15.0
107 | version: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
108 | vite:
109 | specifier: ^4.5.3
110 | version: 4.5.3(@types/node@20.14.14)(sugarss@4.0.1(postcss@8.4.42))
111 | vite-plugin-logseq:
112 | specifier: ^1.1.2
113 | version: 1.1.2
114 | vite-tsconfig-paths:
115 | specifier: ^4.3.2
116 | version: 4.3.2(typescript@5.5.4)(vite@4.5.3(@types/node@20.14.14)(sugarss@4.0.1(postcss@8.4.42)))
117 |
118 | packages:
119 |
120 | '@babel/runtime@7.25.0':
121 | resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
122 | engines: {node: '>=6.9.0'}
123 |
124 | '@dnd-kit/accessibility@3.1.0':
125 | resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==}
126 | peerDependencies:
127 | react: '>=16.8.0'
128 |
129 | '@dnd-kit/core@6.1.0':
130 | resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==}
131 | peerDependencies:
132 | react: '>=16.8.0'
133 | react-dom: '>=16.8.0'
134 |
135 | '@dnd-kit/sortable@8.0.0':
136 | resolution: {integrity: sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==}
137 | peerDependencies:
138 | '@dnd-kit/core': ^6.1.0
139 | react: '>=16.8.0'
140 |
141 | '@dnd-kit/utilities@3.2.2':
142 | resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==}
143 | peerDependencies:
144 | react: '>=16.8.0'
145 |
146 | '@esbuild/android-arm64@0.18.20':
147 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
148 | engines: {node: '>=12'}
149 | cpu: [arm64]
150 | os: [android]
151 |
152 | '@esbuild/android-arm@0.18.20':
153 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
154 | engines: {node: '>=12'}
155 | cpu: [arm]
156 | os: [android]
157 |
158 | '@esbuild/android-x64@0.18.20':
159 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
160 | engines: {node: '>=12'}
161 | cpu: [x64]
162 | os: [android]
163 |
164 | '@esbuild/darwin-arm64@0.18.20':
165 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
166 | engines: {node: '>=12'}
167 | cpu: [arm64]
168 | os: [darwin]
169 |
170 | '@esbuild/darwin-x64@0.18.20':
171 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
172 | engines: {node: '>=12'}
173 | cpu: [x64]
174 | os: [darwin]
175 |
176 | '@esbuild/freebsd-arm64@0.18.20':
177 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
178 | engines: {node: '>=12'}
179 | cpu: [arm64]
180 | os: [freebsd]
181 |
182 | '@esbuild/freebsd-x64@0.18.20':
183 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
184 | engines: {node: '>=12'}
185 | cpu: [x64]
186 | os: [freebsd]
187 |
188 | '@esbuild/linux-arm64@0.18.20':
189 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
190 | engines: {node: '>=12'}
191 | cpu: [arm64]
192 | os: [linux]
193 |
194 | '@esbuild/linux-arm@0.18.20':
195 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
196 | engines: {node: '>=12'}
197 | cpu: [arm]
198 | os: [linux]
199 |
200 | '@esbuild/linux-ia32@0.18.20':
201 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
202 | engines: {node: '>=12'}
203 | cpu: [ia32]
204 | os: [linux]
205 |
206 | '@esbuild/linux-loong64@0.18.20':
207 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
208 | engines: {node: '>=12'}
209 | cpu: [loong64]
210 | os: [linux]
211 |
212 | '@esbuild/linux-mips64el@0.18.20':
213 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
214 | engines: {node: '>=12'}
215 | cpu: [mips64el]
216 | os: [linux]
217 |
218 | '@esbuild/linux-ppc64@0.18.20':
219 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
220 | engines: {node: '>=12'}
221 | cpu: [ppc64]
222 | os: [linux]
223 |
224 | '@esbuild/linux-riscv64@0.18.20':
225 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
226 | engines: {node: '>=12'}
227 | cpu: [riscv64]
228 | os: [linux]
229 |
230 | '@esbuild/linux-s390x@0.18.20':
231 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
232 | engines: {node: '>=12'}
233 | cpu: [s390x]
234 | os: [linux]
235 |
236 | '@esbuild/linux-x64@0.18.20':
237 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
238 | engines: {node: '>=12'}
239 | cpu: [x64]
240 | os: [linux]
241 |
242 | '@esbuild/netbsd-x64@0.18.20':
243 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
244 | engines: {node: '>=12'}
245 | cpu: [x64]
246 | os: [netbsd]
247 |
248 | '@esbuild/openbsd-x64@0.18.20':
249 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
250 | engines: {node: '>=12'}
251 | cpu: [x64]
252 | os: [openbsd]
253 |
254 | '@esbuild/sunos-x64@0.18.20':
255 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
256 | engines: {node: '>=12'}
257 | cpu: [x64]
258 | os: [sunos]
259 |
260 | '@esbuild/win32-arm64@0.18.20':
261 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
262 | engines: {node: '>=12'}
263 | cpu: [arm64]
264 | os: [win32]
265 |
266 | '@esbuild/win32-ia32@0.18.20':
267 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
268 | engines: {node: '>=12'}
269 | cpu: [ia32]
270 | os: [win32]
271 |
272 | '@esbuild/win32-x64@0.18.20':
273 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
274 | engines: {node: '>=12'}
275 | cpu: [x64]
276 | os: [win32]
277 |
278 | '@eslint-community/eslint-utils@4.4.0':
279 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
280 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
281 | peerDependencies:
282 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
283 |
284 | '@eslint-community/regexpp@4.11.0':
285 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
286 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
287 |
288 | '@eslint/eslintrc@2.1.4':
289 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
290 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
291 |
292 | '@eslint/js@8.57.0':
293 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
294 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
295 |
296 | '@eslint/js@9.8.0':
297 | resolution: {integrity: sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==}
298 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
299 |
300 | '@floating-ui/core@1.6.7':
301 | resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==}
302 |
303 | '@floating-ui/dom@1.6.10':
304 | resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==}
305 |
306 | '@floating-ui/react-dom@2.1.1':
307 | resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==}
308 | peerDependencies:
309 | react: '>=16.8.0'
310 | react-dom: '>=16.8.0'
311 |
312 | '@floating-ui/react@0.26.23':
313 | resolution: {integrity: sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==}
314 | peerDependencies:
315 | react: '>=16.8.0'
316 | react-dom: '>=16.8.0'
317 |
318 | '@floating-ui/utils@0.2.7':
319 | resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==}
320 |
321 | '@humanwhocodes/config-array@0.11.14':
322 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
323 | engines: {node: '>=10.10.0'}
324 | deprecated: Use @eslint/config-array instead
325 |
326 | '@humanwhocodes/module-importer@1.0.1':
327 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
328 | engines: {node: '>=12.22'}
329 |
330 | '@humanwhocodes/object-schema@2.0.3':
331 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
332 | deprecated: Use @eslint/object-schema instead
333 |
334 | '@logseq/libs@0.0.15':
335 | resolution: {integrity: sha512-Z4YrYGfu8Y3s9LTqVnPGkxlO+KZtP1YalH/A63zYgxP61cV5QtKlnHWNcjsKxsD5CkaSL4MlSN4mf7wNx/Fm0A==}
336 |
337 | '@mantine/core@7.12.2':
338 | resolution: {integrity: sha512-FrMHOKq4s3CiPIxqZ9xnVX7H4PEGNmbtHMvWO/0YlfPgoV0Er/N/DNJOFW1ys4WSnidPTayYeB41riyxxGOpRQ==}
339 | peerDependencies:
340 | '@mantine/hooks': 7.12.2
341 | react: ^18.2.0
342 | react-dom: ^18.2.0
343 |
344 | '@mantine/hooks@7.12.2':
345 | resolution: {integrity: sha512-dVMw8jpM0hAzc8e7/GNvzkk9N0RN/m+PKycETB3H6lJGuXJJSRR4wzzgQKpEhHwPccktDpvb4rkukKDq2jA8Fg==}
346 | peerDependencies:
347 | react: ^18.2.0
348 |
349 | '@nodelib/fs.scandir@2.1.5':
350 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
351 | engines: {node: '>= 8'}
352 |
353 | '@nodelib/fs.stat@2.0.5':
354 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
355 | engines: {node: '>= 8'}
356 |
357 | '@nodelib/fs.walk@1.2.8':
358 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
359 | engines: {node: '>= 8'}
360 |
361 | '@pkgr/core@0.1.1':
362 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
363 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
364 |
365 | '@types/eslint-config-prettier@6.11.3':
366 | resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==}
367 |
368 | '@types/eslint@8.56.11':
369 | resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==}
370 |
371 | '@types/eslint__js@8.42.3':
372 | resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==}
373 |
374 | '@types/estree@1.0.5':
375 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
376 |
377 | '@types/json-schema@7.0.15':
378 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
379 |
380 | '@types/node@20.14.14':
381 | resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==}
382 |
383 | '@types/prop-types@15.7.12':
384 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
385 |
386 | '@types/react-dom@18.3.0':
387 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
388 |
389 | '@types/react@18.3.3':
390 | resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
391 |
392 | '@types/semver@7.5.8':
393 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
394 |
395 | '@typescript-eslint/eslint-plugin@6.21.0':
396 | resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
397 | engines: {node: ^16.0.0 || >=18.0.0}
398 | peerDependencies:
399 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
400 | eslint: ^7.0.0 || ^8.0.0
401 | typescript: '*'
402 | peerDependenciesMeta:
403 | typescript:
404 | optional: true
405 |
406 | '@typescript-eslint/eslint-plugin@7.18.0':
407 | resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==}
408 | engines: {node: ^18.18.0 || >=20.0.0}
409 | peerDependencies:
410 | '@typescript-eslint/parser': ^7.0.0
411 | eslint: ^8.56.0
412 | typescript: '*'
413 | peerDependenciesMeta:
414 | typescript:
415 | optional: true
416 |
417 | '@typescript-eslint/parser@6.21.0':
418 | resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
419 | engines: {node: ^16.0.0 || >=18.0.0}
420 | peerDependencies:
421 | eslint: ^7.0.0 || ^8.0.0
422 | typescript: '*'
423 | peerDependenciesMeta:
424 | typescript:
425 | optional: true
426 |
427 | '@typescript-eslint/parser@7.18.0':
428 | resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==}
429 | engines: {node: ^18.18.0 || >=20.0.0}
430 | peerDependencies:
431 | eslint: ^8.56.0
432 | typescript: '*'
433 | peerDependenciesMeta:
434 | typescript:
435 | optional: true
436 |
437 | '@typescript-eslint/scope-manager@6.21.0':
438 | resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
439 | engines: {node: ^16.0.0 || >=18.0.0}
440 |
441 | '@typescript-eslint/scope-manager@7.18.0':
442 | resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
443 | engines: {node: ^18.18.0 || >=20.0.0}
444 |
445 | '@typescript-eslint/type-utils@6.21.0':
446 | resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
447 | engines: {node: ^16.0.0 || >=18.0.0}
448 | peerDependencies:
449 | eslint: ^7.0.0 || ^8.0.0
450 | typescript: '*'
451 | peerDependenciesMeta:
452 | typescript:
453 | optional: true
454 |
455 | '@typescript-eslint/type-utils@7.18.0':
456 | resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==}
457 | engines: {node: ^18.18.0 || >=20.0.0}
458 | peerDependencies:
459 | eslint: ^8.56.0
460 | typescript: '*'
461 | peerDependenciesMeta:
462 | typescript:
463 | optional: true
464 |
465 | '@typescript-eslint/types@6.21.0':
466 | resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
467 | engines: {node: ^16.0.0 || >=18.0.0}
468 |
469 | '@typescript-eslint/types@7.18.0':
470 | resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
471 | engines: {node: ^18.18.0 || >=20.0.0}
472 |
473 | '@typescript-eslint/typescript-estree@6.21.0':
474 | resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
475 | engines: {node: ^16.0.0 || >=18.0.0}
476 | peerDependencies:
477 | typescript: '*'
478 | peerDependenciesMeta:
479 | typescript:
480 | optional: true
481 |
482 | '@typescript-eslint/typescript-estree@7.18.0':
483 | resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
484 | engines: {node: ^18.18.0 || >=20.0.0}
485 | peerDependencies:
486 | typescript: '*'
487 | peerDependenciesMeta:
488 | typescript:
489 | optional: true
490 |
491 | '@typescript-eslint/utils@6.21.0':
492 | resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
493 | engines: {node: ^16.0.0 || >=18.0.0}
494 | peerDependencies:
495 | eslint: ^7.0.0 || ^8.0.0
496 |
497 | '@typescript-eslint/utils@7.18.0':
498 | resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
499 | engines: {node: ^18.18.0 || >=20.0.0}
500 | peerDependencies:
501 | eslint: ^8.56.0
502 |
503 | '@typescript-eslint/visitor-keys@6.21.0':
504 | resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
505 | engines: {node: ^16.0.0 || >=18.0.0}
506 |
507 | '@typescript-eslint/visitor-keys@7.18.0':
508 | resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
509 | engines: {node: ^18.18.0 || >=20.0.0}
510 |
511 | '@ungap/structured-clone@1.2.0':
512 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
513 |
514 | acorn-jsx@5.3.2:
515 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
516 | peerDependencies:
517 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
518 |
519 | acorn@8.12.1:
520 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
521 | engines: {node: '>=0.4.0'}
522 | hasBin: true
523 |
524 | ajv@6.12.6:
525 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
526 |
527 | ansi-regex@5.0.1:
528 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
529 | engines: {node: '>=8'}
530 |
531 | ansi-styles@4.3.0:
532 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
533 | engines: {node: '>=8'}
534 |
535 | argparse@2.0.1:
536 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
537 |
538 | array-union@2.1.0:
539 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
540 | engines: {node: '>=8'}
541 |
542 | balanced-match@1.0.2:
543 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
544 |
545 | brace-expansion@1.1.11:
546 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
547 |
548 | brace-expansion@2.0.1:
549 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
550 |
551 | braces@3.0.3:
552 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
553 | engines: {node: '>=8'}
554 |
555 | callsites@3.1.0:
556 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
557 | engines: {node: '>=6'}
558 |
559 | camelcase-css@2.0.1:
560 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
561 | engines: {node: '>= 6'}
562 |
563 | chalk@4.1.2:
564 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
565 | engines: {node: '>=10'}
566 |
567 | clsx@2.1.1:
568 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
569 | engines: {node: '>=6'}
570 |
571 | color-convert@2.0.1:
572 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
573 | engines: {node: '>=7.0.0'}
574 |
575 | color-name@1.1.4:
576 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
577 |
578 | concat-map@0.0.1:
579 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
580 |
581 | cross-spawn@7.0.3:
582 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
583 | engines: {node: '>= 8'}
584 |
585 | cssesc@3.0.0:
586 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
587 | engines: {node: '>=4'}
588 | hasBin: true
589 |
590 | csstype@3.1.0:
591 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==}
592 |
593 | csstype@3.1.3:
594 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
595 |
596 | date-fns@2.30.0:
597 | resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
598 | engines: {node: '>=0.11'}
599 |
600 | date-fns@3.6.0:
601 | resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
602 |
603 | debug@4.3.4:
604 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
605 | engines: {node: '>=6.0'}
606 | peerDependencies:
607 | supports-color: '*'
608 | peerDependenciesMeta:
609 | supports-color:
610 | optional: true
611 |
612 | debug@4.3.6:
613 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
614 | engines: {node: '>=6.0'}
615 | peerDependencies:
616 | supports-color: '*'
617 | peerDependenciesMeta:
618 | supports-color:
619 | optional: true
620 |
621 | deep-is@0.1.4:
622 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
623 |
624 | detect-node-es@1.1.0:
625 | resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
626 |
627 | dir-glob@3.0.1:
628 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
629 | engines: {node: '>=8'}
630 |
631 | doctrine@3.0.0:
632 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
633 | engines: {node: '>=6.0.0'}
634 |
635 | dompurify@2.3.8:
636 | resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==}
637 |
638 | dot-case@3.0.4:
639 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
640 |
641 | esbuild@0.18.20:
642 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
643 | engines: {node: '>=12'}
644 | hasBin: true
645 |
646 | escape-string-regexp@4.0.0:
647 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
648 | engines: {node: '>=10'}
649 |
650 | eslint-config-prettier@9.1.0:
651 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
652 | hasBin: true
653 | peerDependencies:
654 | eslint: '>=7.0.0'
655 |
656 | eslint-plugin-prettier@5.2.1:
657 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==}
658 | engines: {node: ^14.18.0 || >=16.0.0}
659 | peerDependencies:
660 | '@types/eslint': '>=8.0.0'
661 | eslint: '>=8.0.0'
662 | eslint-config-prettier: '*'
663 | prettier: '>=3.0.0'
664 | peerDependenciesMeta:
665 | '@types/eslint':
666 | optional: true
667 | eslint-config-prettier:
668 | optional: true
669 |
670 | eslint-plugin-simple-import-sort@12.1.1:
671 | resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==}
672 | peerDependencies:
673 | eslint: '>=5.0.0'
674 |
675 | eslint-scope@7.2.2:
676 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
677 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
678 |
679 | eslint-visitor-keys@3.4.3:
680 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
681 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
682 |
683 | eslint@8.57.0:
684 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
685 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
686 | hasBin: true
687 |
688 | espree@9.6.1:
689 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
690 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
691 |
692 | esquery@1.6.0:
693 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
694 | engines: {node: '>=0.10'}
695 |
696 | esrecurse@4.3.0:
697 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
698 | engines: {node: '>=4.0'}
699 |
700 | estraverse@5.3.0:
701 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
702 | engines: {node: '>=4.0'}
703 |
704 | esutils@2.0.3:
705 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
706 | engines: {node: '>=0.10.0'}
707 |
708 | eventemitter3@4.0.7:
709 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
710 |
711 | fast-deep-equal@3.1.3:
712 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
713 |
714 | fast-diff@1.3.0:
715 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
716 |
717 | fast-glob@3.3.2:
718 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
719 | engines: {node: '>=8.6.0'}
720 |
721 | fast-json-stable-stringify@2.1.0:
722 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
723 |
724 | fast-levenshtein@2.0.6:
725 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
726 |
727 | fastq@1.17.1:
728 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
729 |
730 | file-entry-cache@6.0.1:
731 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
732 | engines: {node: ^10.12.0 || >=12.0.0}
733 |
734 | fill-range@7.1.1:
735 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
736 | engines: {node: '>=8'}
737 |
738 | find-up@5.0.0:
739 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
740 | engines: {node: '>=10'}
741 |
742 | flat-cache@3.2.0:
743 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
744 | engines: {node: ^10.12.0 || >=12.0.0}
745 |
746 | flatted@3.3.1:
747 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
748 |
749 | fs.realpath@1.0.0:
750 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
751 |
752 | fsevents@2.3.3:
753 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
754 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
755 | os: [darwin]
756 |
757 | get-nonce@1.0.1:
758 | resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
759 | engines: {node: '>=6'}
760 |
761 | glob-parent@5.1.2:
762 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
763 | engines: {node: '>= 6'}
764 |
765 | glob-parent@6.0.2:
766 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
767 | engines: {node: '>=10.13.0'}
768 |
769 | glob@7.2.3:
770 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
771 | deprecated: Glob versions prior to v9 are no longer supported
772 |
773 | globals@13.24.0:
774 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
775 | engines: {node: '>=8'}
776 |
777 | globby@11.1.0:
778 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
779 | engines: {node: '>=10'}
780 |
781 | globrex@0.1.2:
782 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
783 |
784 | graphemer@1.4.0:
785 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
786 |
787 | has-flag@4.0.0:
788 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
789 | engines: {node: '>=8'}
790 |
791 | husky@9.1.5:
792 | resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==}
793 | engines: {node: '>=18'}
794 | hasBin: true
795 |
796 | ignore@5.3.1:
797 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
798 | engines: {node: '>= 4'}
799 |
800 | import-fresh@3.3.0:
801 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
802 | engines: {node: '>=6'}
803 |
804 | imurmurhash@0.1.4:
805 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
806 | engines: {node: '>=0.8.19'}
807 |
808 | inflight@1.0.6:
809 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
810 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
811 |
812 | inherits@2.0.3:
813 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
814 |
815 | inherits@2.0.4:
816 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
817 |
818 | invariant@2.2.4:
819 | resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
820 |
821 | is-extglob@2.1.1:
822 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
823 | engines: {node: '>=0.10.0'}
824 |
825 | is-glob@4.0.3:
826 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
827 | engines: {node: '>=0.10.0'}
828 |
829 | is-number@7.0.0:
830 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
831 | engines: {node: '>=0.12.0'}
832 |
833 | is-path-inside@3.0.3:
834 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
835 | engines: {node: '>=8'}
836 |
837 | isexe@2.0.0:
838 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
839 |
840 | js-tokens@4.0.0:
841 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
842 |
843 | js-yaml@4.1.0:
844 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
845 | hasBin: true
846 |
847 | json-buffer@3.0.1:
848 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
849 |
850 | json-schema-traverse@0.4.1:
851 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
852 |
853 | json-stable-stringify-without-jsonify@1.0.1:
854 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
855 |
856 | keyv@4.5.4:
857 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
858 |
859 | levn@0.4.1:
860 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
861 | engines: {node: '>= 0.8.0'}
862 |
863 | locate-path@6.0.0:
864 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
865 | engines: {node: '>=10'}
866 |
867 | lodash-es@4.17.21:
868 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
869 |
870 | lodash.merge@4.6.2:
871 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
872 |
873 | logseq-dateutils@2.1.2:
874 | resolution: {integrity: sha512-N4WD6VynVC+rMQr4+BSLu/bvLhYnLc9/DBjNASIZroC0Rf7Ymwxm/G84unVxVi6iR7Y21T/4UhJEEtzfIIOQaw==}
875 | engines: {node: '>=12'}
876 |
877 | loose-envify@1.4.0:
878 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
879 | hasBin: true
880 |
881 | lower-case@2.0.2:
882 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
883 |
884 | lucide-react@0.437.0:
885 | resolution: {integrity: sha512-RXQq6tnm1FlXDUtOwLaoXET2TOEGpQULrQlPOjGHgIVsPhicHNat9sWF33OAe2UCLMFiWF1oL+FtAg43BqVY4Q==}
886 | peerDependencies:
887 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
888 |
889 | magic-string@0.26.7:
890 | resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
891 | engines: {node: '>=12'}
892 |
893 | merge2@1.4.1:
894 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
895 | engines: {node: '>= 8'}
896 |
897 | micromatch@4.0.7:
898 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
899 | engines: {node: '>=8.6'}
900 |
901 | minimatch@3.1.2:
902 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
903 |
904 | minimatch@9.0.3:
905 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
906 | engines: {node: '>=16 || 14 >=14.17'}
907 |
908 | minimatch@9.0.5:
909 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
910 | engines: {node: '>=16 || 14 >=14.17'}
911 |
912 | ms@2.1.2:
913 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
914 |
915 | nanoid@3.3.7:
916 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
917 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
918 | hasBin: true
919 |
920 | natural-compare@1.4.0:
921 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
922 |
923 | no-case@3.0.4:
924 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
925 |
926 | once@1.4.0:
927 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
928 |
929 | optionator@0.9.4:
930 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
931 | engines: {node: '>= 0.8.0'}
932 |
933 | p-limit@3.1.0:
934 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
935 | engines: {node: '>=10'}
936 |
937 | p-locate@5.0.0:
938 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
939 | engines: {node: '>=10'}
940 |
941 | parent-module@1.0.1:
942 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
943 | engines: {node: '>=6'}
944 |
945 | path-exists@4.0.0:
946 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
947 | engines: {node: '>=8'}
948 |
949 | path-is-absolute@1.0.1:
950 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
951 | engines: {node: '>=0.10.0'}
952 |
953 | path-key@3.1.1:
954 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
955 | engines: {node: '>=8'}
956 |
957 | path-type@4.0.0:
958 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
959 | engines: {node: '>=8'}
960 |
961 | path@0.12.7:
962 | resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==}
963 |
964 | picocolors@1.0.1:
965 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
966 |
967 | picomatch@2.3.1:
968 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
969 | engines: {node: '>=8.6'}
970 |
971 | postcss-js@4.0.1:
972 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
973 | engines: {node: ^12 || ^14 || >= 16}
974 | peerDependencies:
975 | postcss: ^8.4.21
976 |
977 | postcss-mixins@9.0.4:
978 | resolution: {integrity: sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==}
979 | engines: {node: '>=14.0'}
980 | peerDependencies:
981 | postcss: ^8.2.14
982 |
983 | postcss-nested@6.2.0:
984 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
985 | engines: {node: '>=12.0'}
986 | peerDependencies:
987 | postcss: ^8.2.14
988 |
989 | postcss-preset-mantine@1.17.0:
990 | resolution: {integrity: sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==}
991 | peerDependencies:
992 | postcss: '>=8.0.0'
993 |
994 | postcss-selector-parser@6.1.2:
995 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
996 | engines: {node: '>=4'}
997 |
998 | postcss-simple-vars@7.0.1:
999 | resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==}
1000 | engines: {node: '>=14.0'}
1001 | peerDependencies:
1002 | postcss: ^8.2.1
1003 |
1004 | postcss@8.4.42:
1005 | resolution: {integrity: sha512-hywKUQB9Ra4dR1mGhldy5Aj1X3MWDSIA1cEi+Uy0CjheLvP6Ual5RlwMCh8i/X121yEDLDIKBsrCQ8ba3FDMfQ==}
1006 | engines: {node: ^10 || ^12 || >=14}
1007 |
1008 | prelude-ls@1.2.1:
1009 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1010 | engines: {node: '>= 0.8.0'}
1011 |
1012 | prettier-linter-helpers@1.0.0:
1013 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
1014 | engines: {node: '>=6.0.0'}
1015 |
1016 | prettier@3.3.3:
1017 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
1018 | engines: {node: '>=14'}
1019 | hasBin: true
1020 |
1021 | process@0.11.10:
1022 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
1023 | engines: {node: '>= 0.6.0'}
1024 |
1025 | punycode@2.3.1:
1026 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1027 | engines: {node: '>=6'}
1028 |
1029 | queue-microtask@1.2.3:
1030 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1031 |
1032 | react-dom@18.3.1:
1033 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
1034 | peerDependencies:
1035 | react: ^18.3.1
1036 |
1037 | react-hook-form@7.52.2:
1038 | resolution: {integrity: sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==}
1039 | engines: {node: '>=18.0.0'}
1040 | peerDependencies:
1041 | react: ^16.8.0 || ^17 || ^18 || ^19
1042 |
1043 | react-number-format@5.4.1:
1044 | resolution: {integrity: sha512-NICOjo/70dcAiwVmH6zMWoZrTQDlBrEXV/f7S0t/ewlpzp4z00pasg5G1yBX6NHLafwOF3QZ+VvK/XApwSKxdA==}
1045 | peerDependencies:
1046 | react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
1047 | react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
1048 |
1049 | react-remove-scroll-bar@2.3.6:
1050 | resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
1051 | engines: {node: '>=10'}
1052 | peerDependencies:
1053 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1054 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1055 | peerDependenciesMeta:
1056 | '@types/react':
1057 | optional: true
1058 |
1059 | react-remove-scroll@2.5.10:
1060 | resolution: {integrity: sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==}
1061 | engines: {node: '>=10'}
1062 | peerDependencies:
1063 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1064 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1065 | peerDependenciesMeta:
1066 | '@types/react':
1067 | optional: true
1068 |
1069 | react-style-singleton@2.2.1:
1070 | resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
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-textarea-autosize@8.5.3:
1080 | resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==}
1081 | engines: {node: '>=10'}
1082 | peerDependencies:
1083 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1084 |
1085 | react@18.3.1:
1086 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
1087 | engines: {node: '>=0.10.0'}
1088 |
1089 | regenerator-runtime@0.14.1:
1090 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1091 |
1092 | resolve-from@4.0.0:
1093 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1094 | engines: {node: '>=4'}
1095 |
1096 | reusify@1.0.4:
1097 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1098 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1099 |
1100 | rimraf@3.0.2:
1101 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1102 | deprecated: Rimraf versions prior to v4 are no longer supported
1103 | hasBin: true
1104 |
1105 | rollup@3.29.4:
1106 | resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
1107 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1108 | hasBin: true
1109 |
1110 | run-parallel@1.2.0:
1111 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1112 |
1113 | scheduler@0.23.2:
1114 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
1115 |
1116 | semver@7.6.3:
1117 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1118 | engines: {node: '>=10'}
1119 | hasBin: true
1120 |
1121 | shebang-command@2.0.0:
1122 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1123 | engines: {node: '>=8'}
1124 |
1125 | shebang-regex@3.0.0:
1126 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1127 | engines: {node: '>=8'}
1128 |
1129 | slash@3.0.0:
1130 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1131 | engines: {node: '>=8'}
1132 |
1133 | snake-case@3.0.4:
1134 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
1135 |
1136 | source-map-js@1.2.0:
1137 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
1138 | engines: {node: '>=0.10.0'}
1139 |
1140 | sourcemap-codec@1.4.8:
1141 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1142 | deprecated: Please use @jridgewell/sourcemap-codec instead
1143 |
1144 | strip-ansi@6.0.1:
1145 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1146 | engines: {node: '>=8'}
1147 |
1148 | strip-json-comments@3.1.1:
1149 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1150 | engines: {node: '>=8'}
1151 |
1152 | sugarss@4.0.1:
1153 | resolution: {integrity: sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==}
1154 | engines: {node: '>=12.0'}
1155 | peerDependencies:
1156 | postcss: ^8.3.3
1157 |
1158 | supports-color@7.2.0:
1159 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1160 | engines: {node: '>=8'}
1161 |
1162 | synckit@0.9.1:
1163 | resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==}
1164 | engines: {node: ^14.18.0 || >=16.0.0}
1165 |
1166 | tabbable@6.2.0:
1167 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
1168 |
1169 | text-table@0.2.0:
1170 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1171 |
1172 | to-regex-range@5.0.1:
1173 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1174 | engines: {node: '>=8.0'}
1175 |
1176 | ts-api-utils@1.3.0:
1177 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
1178 | engines: {node: '>=16'}
1179 | peerDependencies:
1180 | typescript: '>=4.2.0'
1181 |
1182 | tsconfck@3.1.1:
1183 | resolution: {integrity: sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==}
1184 | engines: {node: ^18 || >=20}
1185 | hasBin: true
1186 | peerDependencies:
1187 | typescript: ^5.0.0
1188 | peerDependenciesMeta:
1189 | typescript:
1190 | optional: true
1191 |
1192 | tslib@2.6.3:
1193 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
1194 |
1195 | type-check@0.4.0:
1196 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1197 | engines: {node: '>= 0.8.0'}
1198 |
1199 | type-fest@0.20.2:
1200 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1201 | engines: {node: '>=10'}
1202 |
1203 | type-fest@4.26.0:
1204 | resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==}
1205 | engines: {node: '>=16'}
1206 |
1207 | typescript-eslint@7.18.0:
1208 | resolution: {integrity: sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==}
1209 | engines: {node: ^18.18.0 || >=20.0.0}
1210 | peerDependencies:
1211 | eslint: ^8.56.0
1212 | typescript: '*'
1213 | peerDependenciesMeta:
1214 | typescript:
1215 | optional: true
1216 |
1217 | typescript@5.5.4:
1218 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
1219 | engines: {node: '>=14.17'}
1220 | hasBin: true
1221 |
1222 | undici-types@5.26.5:
1223 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
1224 |
1225 | uri-js@4.4.1:
1226 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1227 |
1228 | use-callback-ref@1.3.2:
1229 | resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
1230 | engines: {node: '>=10'}
1231 | peerDependencies:
1232 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1233 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1234 | peerDependenciesMeta:
1235 | '@types/react':
1236 | optional: true
1237 |
1238 | use-composed-ref@1.3.0:
1239 | resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
1240 | peerDependencies:
1241 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1242 |
1243 | use-isomorphic-layout-effect@1.1.2:
1244 | resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
1245 | peerDependencies:
1246 | '@types/react': '*'
1247 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1248 | peerDependenciesMeta:
1249 | '@types/react':
1250 | optional: true
1251 |
1252 | use-latest@1.2.1:
1253 | resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==}
1254 | peerDependencies:
1255 | '@types/react': '*'
1256 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1257 | peerDependenciesMeta:
1258 | '@types/react':
1259 | optional: true
1260 |
1261 | use-sidecar@1.1.2:
1262 | resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
1263 | engines: {node: '>=10'}
1264 | peerDependencies:
1265 | '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
1266 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1267 | peerDependenciesMeta:
1268 | '@types/react':
1269 | optional: true
1270 |
1271 | util-deprecate@1.0.2:
1272 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1273 |
1274 | util@0.10.4:
1275 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
1276 |
1277 | vite-plugin-logseq@1.1.2:
1278 | resolution: {integrity: sha512-l5YvoH3K25Zx9eqgoJFug7NfVqSPwq7/FcYYhN1TkdG8ZOiD+c+TAwdCS2dJbGgvx8GmSpbgwSZWgslB+wH53g==}
1279 |
1280 | vite-tsconfig-paths@4.3.2:
1281 | resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==}
1282 | peerDependencies:
1283 | vite: '*'
1284 | peerDependenciesMeta:
1285 | vite:
1286 | optional: true
1287 |
1288 | vite@4.5.3:
1289 | resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==}
1290 | engines: {node: ^14.18.0 || >=16.0.0}
1291 | hasBin: true
1292 | peerDependencies:
1293 | '@types/node': '>= 14'
1294 | less: '*'
1295 | lightningcss: ^1.21.0
1296 | sass: '*'
1297 | stylus: '*'
1298 | sugarss: '*'
1299 | terser: ^5.4.0
1300 | peerDependenciesMeta:
1301 | '@types/node':
1302 | optional: true
1303 | less:
1304 | optional: true
1305 | lightningcss:
1306 | optional: true
1307 | sass:
1308 | optional: true
1309 | stylus:
1310 | optional: true
1311 | sugarss:
1312 | optional: true
1313 | terser:
1314 | optional: true
1315 |
1316 | which@2.0.2:
1317 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1318 | engines: {node: '>= 8'}
1319 | hasBin: true
1320 |
1321 | word-wrap@1.2.5:
1322 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1323 | engines: {node: '>=0.10.0'}
1324 |
1325 | wrappy@1.0.2:
1326 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1327 |
1328 | yocto-queue@0.1.0:
1329 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1330 | engines: {node: '>=10'}
1331 |
1332 | snapshots:
1333 |
1334 | '@babel/runtime@7.25.0':
1335 | dependencies:
1336 | regenerator-runtime: 0.14.1
1337 |
1338 | '@dnd-kit/accessibility@3.1.0(react@18.3.1)':
1339 | dependencies:
1340 | react: 18.3.1
1341 | tslib: 2.6.3
1342 |
1343 | '@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
1344 | dependencies:
1345 | '@dnd-kit/accessibility': 3.1.0(react@18.3.1)
1346 | '@dnd-kit/utilities': 3.2.2(react@18.3.1)
1347 | react: 18.3.1
1348 | react-dom: 18.3.1(react@18.3.1)
1349 | tslib: 2.6.3
1350 |
1351 | '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
1352 | dependencies:
1353 | '@dnd-kit/core': 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
1354 | '@dnd-kit/utilities': 3.2.2(react@18.3.1)
1355 | react: 18.3.1
1356 | tslib: 2.6.3
1357 |
1358 | '@dnd-kit/utilities@3.2.2(react@18.3.1)':
1359 | dependencies:
1360 | react: 18.3.1
1361 | tslib: 2.6.3
1362 |
1363 | '@esbuild/android-arm64@0.18.20':
1364 | optional: true
1365 |
1366 | '@esbuild/android-arm@0.18.20':
1367 | optional: true
1368 |
1369 | '@esbuild/android-x64@0.18.20':
1370 | optional: true
1371 |
1372 | '@esbuild/darwin-arm64@0.18.20':
1373 | optional: true
1374 |
1375 | '@esbuild/darwin-x64@0.18.20':
1376 | optional: true
1377 |
1378 | '@esbuild/freebsd-arm64@0.18.20':
1379 | optional: true
1380 |
1381 | '@esbuild/freebsd-x64@0.18.20':
1382 | optional: true
1383 |
1384 | '@esbuild/linux-arm64@0.18.20':
1385 | optional: true
1386 |
1387 | '@esbuild/linux-arm@0.18.20':
1388 | optional: true
1389 |
1390 | '@esbuild/linux-ia32@0.18.20':
1391 | optional: true
1392 |
1393 | '@esbuild/linux-loong64@0.18.20':
1394 | optional: true
1395 |
1396 | '@esbuild/linux-mips64el@0.18.20':
1397 | optional: true
1398 |
1399 | '@esbuild/linux-ppc64@0.18.20':
1400 | optional: true
1401 |
1402 | '@esbuild/linux-riscv64@0.18.20':
1403 | optional: true
1404 |
1405 | '@esbuild/linux-s390x@0.18.20':
1406 | optional: true
1407 |
1408 | '@esbuild/linux-x64@0.18.20':
1409 | optional: true
1410 |
1411 | '@esbuild/netbsd-x64@0.18.20':
1412 | optional: true
1413 |
1414 | '@esbuild/openbsd-x64@0.18.20':
1415 | optional: true
1416 |
1417 | '@esbuild/sunos-x64@0.18.20':
1418 | optional: true
1419 |
1420 | '@esbuild/win32-arm64@0.18.20':
1421 | optional: true
1422 |
1423 | '@esbuild/win32-ia32@0.18.20':
1424 | optional: true
1425 |
1426 | '@esbuild/win32-x64@0.18.20':
1427 | optional: true
1428 |
1429 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
1430 | dependencies:
1431 | eslint: 8.57.0
1432 | eslint-visitor-keys: 3.4.3
1433 |
1434 | '@eslint-community/regexpp@4.11.0': {}
1435 |
1436 | '@eslint/eslintrc@2.1.4':
1437 | dependencies:
1438 | ajv: 6.12.6
1439 | debug: 4.3.6
1440 | espree: 9.6.1
1441 | globals: 13.24.0
1442 | ignore: 5.3.1
1443 | import-fresh: 3.3.0
1444 | js-yaml: 4.1.0
1445 | minimatch: 3.1.2
1446 | strip-json-comments: 3.1.1
1447 | transitivePeerDependencies:
1448 | - supports-color
1449 |
1450 | '@eslint/js@8.57.0': {}
1451 |
1452 | '@eslint/js@9.8.0': {}
1453 |
1454 | '@floating-ui/core@1.6.7':
1455 | dependencies:
1456 | '@floating-ui/utils': 0.2.7
1457 |
1458 | '@floating-ui/dom@1.6.10':
1459 | dependencies:
1460 | '@floating-ui/core': 1.6.7
1461 | '@floating-ui/utils': 0.2.7
1462 |
1463 | '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
1464 | dependencies:
1465 | '@floating-ui/dom': 1.6.10
1466 | react: 18.3.1
1467 | react-dom: 18.3.1(react@18.3.1)
1468 |
1469 | '@floating-ui/react@0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
1470 | dependencies:
1471 | '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
1472 | '@floating-ui/utils': 0.2.7
1473 | react: 18.3.1
1474 | react-dom: 18.3.1(react@18.3.1)
1475 | tabbable: 6.2.0
1476 |
1477 | '@floating-ui/utils@0.2.7': {}
1478 |
1479 | '@humanwhocodes/config-array@0.11.14':
1480 | dependencies:
1481 | '@humanwhocodes/object-schema': 2.0.3
1482 | debug: 4.3.6
1483 | minimatch: 3.1.2
1484 | transitivePeerDependencies:
1485 | - supports-color
1486 |
1487 | '@humanwhocodes/module-importer@1.0.1': {}
1488 |
1489 | '@humanwhocodes/object-schema@2.0.3': {}
1490 |
1491 | '@logseq/libs@0.0.15':
1492 | dependencies:
1493 | csstype: 3.1.0
1494 | debug: 4.3.4
1495 | dompurify: 2.3.8
1496 | eventemitter3: 4.0.7
1497 | fast-deep-equal: 3.1.3
1498 | lodash-es: 4.17.21
1499 | path: 0.12.7
1500 | snake-case: 3.0.4
1501 | transitivePeerDependencies:
1502 | - supports-color
1503 |
1504 | '@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
1505 | dependencies:
1506 | '@floating-ui/react': 0.26.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
1507 | '@mantine/hooks': 7.12.2(react@18.3.1)
1508 | clsx: 2.1.1
1509 | react: 18.3.1
1510 | react-dom: 18.3.1(react@18.3.1)
1511 | react-number-format: 5.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
1512 | react-remove-scroll: 2.5.10(@types/react@18.3.3)(react@18.3.1)
1513 | react-textarea-autosize: 8.5.3(@types/react@18.3.3)(react@18.3.1)
1514 | type-fest: 4.26.0
1515 | transitivePeerDependencies:
1516 | - '@types/react'
1517 |
1518 | '@mantine/hooks@7.12.2(react@18.3.1)':
1519 | dependencies:
1520 | react: 18.3.1
1521 |
1522 | '@nodelib/fs.scandir@2.1.5':
1523 | dependencies:
1524 | '@nodelib/fs.stat': 2.0.5
1525 | run-parallel: 1.2.0
1526 |
1527 | '@nodelib/fs.stat@2.0.5': {}
1528 |
1529 | '@nodelib/fs.walk@1.2.8':
1530 | dependencies:
1531 | '@nodelib/fs.scandir': 2.1.5
1532 | fastq: 1.17.1
1533 |
1534 | '@pkgr/core@0.1.1': {}
1535 |
1536 | '@types/eslint-config-prettier@6.11.3': {}
1537 |
1538 | '@types/eslint@8.56.11':
1539 | dependencies:
1540 | '@types/estree': 1.0.5
1541 | '@types/json-schema': 7.0.15
1542 |
1543 | '@types/eslint__js@8.42.3':
1544 | dependencies:
1545 | '@types/eslint': 8.56.11
1546 |
1547 | '@types/estree@1.0.5': {}
1548 |
1549 | '@types/json-schema@7.0.15': {}
1550 |
1551 | '@types/node@20.14.14':
1552 | dependencies:
1553 | undici-types: 5.26.5
1554 |
1555 | '@types/prop-types@15.7.12': {}
1556 |
1557 | '@types/react-dom@18.3.0':
1558 | dependencies:
1559 | '@types/react': 18.3.3
1560 |
1561 | '@types/react@18.3.3':
1562 | dependencies:
1563 | '@types/prop-types': 15.7.12
1564 | csstype: 3.1.3
1565 |
1566 | '@types/semver@7.5.8': {}
1567 |
1568 | '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
1569 | dependencies:
1570 | '@eslint-community/regexpp': 4.11.0
1571 | '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
1572 | '@typescript-eslint/scope-manager': 6.21.0
1573 | '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
1574 | '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
1575 | '@typescript-eslint/visitor-keys': 6.21.0
1576 | debug: 4.3.6
1577 | eslint: 8.57.0
1578 | graphemer: 1.4.0
1579 | ignore: 5.3.1
1580 | natural-compare: 1.4.0
1581 | semver: 7.6.3
1582 | ts-api-utils: 1.3.0(typescript@5.5.4)
1583 | optionalDependencies:
1584 | typescript: 5.5.4
1585 | transitivePeerDependencies:
1586 | - supports-color
1587 |
1588 | '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
1589 | dependencies:
1590 | '@eslint-community/regexpp': 4.11.0
1591 | '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1592 | '@typescript-eslint/scope-manager': 7.18.0
1593 | '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1594 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1595 | '@typescript-eslint/visitor-keys': 7.18.0
1596 | eslint: 8.57.0
1597 | graphemer: 1.4.0
1598 | ignore: 5.3.1
1599 | natural-compare: 1.4.0
1600 | ts-api-utils: 1.3.0(typescript@5.5.4)
1601 | optionalDependencies:
1602 | typescript: 5.5.4
1603 | transitivePeerDependencies:
1604 | - supports-color
1605 |
1606 | '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
1607 | dependencies:
1608 | '@typescript-eslint/scope-manager': 6.21.0
1609 | '@typescript-eslint/types': 6.21.0
1610 | '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
1611 | '@typescript-eslint/visitor-keys': 6.21.0
1612 | debug: 4.3.6
1613 | eslint: 8.57.0
1614 | optionalDependencies:
1615 | typescript: 5.5.4
1616 | transitivePeerDependencies:
1617 | - supports-color
1618 |
1619 | '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
1620 | dependencies:
1621 | '@typescript-eslint/scope-manager': 7.18.0
1622 | '@typescript-eslint/types': 7.18.0
1623 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
1624 | '@typescript-eslint/visitor-keys': 7.18.0
1625 | debug: 4.3.6
1626 | eslint: 8.57.0
1627 | optionalDependencies:
1628 | typescript: 5.5.4
1629 | transitivePeerDependencies:
1630 | - supports-color
1631 |
1632 | '@typescript-eslint/scope-manager@6.21.0':
1633 | dependencies:
1634 | '@typescript-eslint/types': 6.21.0
1635 | '@typescript-eslint/visitor-keys': 6.21.0
1636 |
1637 | '@typescript-eslint/scope-manager@7.18.0':
1638 | dependencies:
1639 | '@typescript-eslint/types': 7.18.0
1640 | '@typescript-eslint/visitor-keys': 7.18.0
1641 |
1642 | '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
1643 | dependencies:
1644 | '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
1645 | '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
1646 | debug: 4.3.6
1647 | eslint: 8.57.0
1648 | ts-api-utils: 1.3.0(typescript@5.5.4)
1649 | optionalDependencies:
1650 | typescript: 5.5.4
1651 | transitivePeerDependencies:
1652 | - supports-color
1653 |
1654 | '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
1655 | dependencies:
1656 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
1657 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1658 | debug: 4.3.6
1659 | eslint: 8.57.0
1660 | ts-api-utils: 1.3.0(typescript@5.5.4)
1661 | optionalDependencies:
1662 | typescript: 5.5.4
1663 | transitivePeerDependencies:
1664 | - supports-color
1665 |
1666 | '@typescript-eslint/types@6.21.0': {}
1667 |
1668 | '@typescript-eslint/types@7.18.0': {}
1669 |
1670 | '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)':
1671 | dependencies:
1672 | '@typescript-eslint/types': 6.21.0
1673 | '@typescript-eslint/visitor-keys': 6.21.0
1674 | debug: 4.3.6
1675 | globby: 11.1.0
1676 | is-glob: 4.0.3
1677 | minimatch: 9.0.3
1678 | semver: 7.6.3
1679 | ts-api-utils: 1.3.0(typescript@5.5.4)
1680 | optionalDependencies:
1681 | typescript: 5.5.4
1682 | transitivePeerDependencies:
1683 | - supports-color
1684 |
1685 | '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
1686 | dependencies:
1687 | '@typescript-eslint/types': 7.18.0
1688 | '@typescript-eslint/visitor-keys': 7.18.0
1689 | debug: 4.3.6
1690 | globby: 11.1.0
1691 | is-glob: 4.0.3
1692 | minimatch: 9.0.5
1693 | semver: 7.6.3
1694 | ts-api-utils: 1.3.0(typescript@5.5.4)
1695 | optionalDependencies:
1696 | typescript: 5.5.4
1697 | transitivePeerDependencies:
1698 | - supports-color
1699 |
1700 | '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
1701 | dependencies:
1702 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1703 | '@types/json-schema': 7.0.15
1704 | '@types/semver': 7.5.8
1705 | '@typescript-eslint/scope-manager': 6.21.0
1706 | '@typescript-eslint/types': 6.21.0
1707 | '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
1708 | eslint: 8.57.0
1709 | semver: 7.6.3
1710 | transitivePeerDependencies:
1711 | - supports-color
1712 | - typescript
1713 |
1714 | '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
1715 | dependencies:
1716 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1717 | '@typescript-eslint/scope-manager': 7.18.0
1718 | '@typescript-eslint/types': 7.18.0
1719 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
1720 | eslint: 8.57.0
1721 | transitivePeerDependencies:
1722 | - supports-color
1723 | - typescript
1724 |
1725 | '@typescript-eslint/visitor-keys@6.21.0':
1726 | dependencies:
1727 | '@typescript-eslint/types': 6.21.0
1728 | eslint-visitor-keys: 3.4.3
1729 |
1730 | '@typescript-eslint/visitor-keys@7.18.0':
1731 | dependencies:
1732 | '@typescript-eslint/types': 7.18.0
1733 | eslint-visitor-keys: 3.4.3
1734 |
1735 | '@ungap/structured-clone@1.2.0': {}
1736 |
1737 | acorn-jsx@5.3.2(acorn@8.12.1):
1738 | dependencies:
1739 | acorn: 8.12.1
1740 |
1741 | acorn@8.12.1: {}
1742 |
1743 | ajv@6.12.6:
1744 | dependencies:
1745 | fast-deep-equal: 3.1.3
1746 | fast-json-stable-stringify: 2.1.0
1747 | json-schema-traverse: 0.4.1
1748 | uri-js: 4.4.1
1749 |
1750 | ansi-regex@5.0.1: {}
1751 |
1752 | ansi-styles@4.3.0:
1753 | dependencies:
1754 | color-convert: 2.0.1
1755 |
1756 | argparse@2.0.1: {}
1757 |
1758 | array-union@2.1.0: {}
1759 |
1760 | balanced-match@1.0.2: {}
1761 |
1762 | brace-expansion@1.1.11:
1763 | dependencies:
1764 | balanced-match: 1.0.2
1765 | concat-map: 0.0.1
1766 |
1767 | brace-expansion@2.0.1:
1768 | dependencies:
1769 | balanced-match: 1.0.2
1770 |
1771 | braces@3.0.3:
1772 | dependencies:
1773 | fill-range: 7.1.1
1774 |
1775 | callsites@3.1.0: {}
1776 |
1777 | camelcase-css@2.0.1: {}
1778 |
1779 | chalk@4.1.2:
1780 | dependencies:
1781 | ansi-styles: 4.3.0
1782 | supports-color: 7.2.0
1783 |
1784 | clsx@2.1.1: {}
1785 |
1786 | color-convert@2.0.1:
1787 | dependencies:
1788 | color-name: 1.1.4
1789 |
1790 | color-name@1.1.4: {}
1791 |
1792 | concat-map@0.0.1: {}
1793 |
1794 | cross-spawn@7.0.3:
1795 | dependencies:
1796 | path-key: 3.1.1
1797 | shebang-command: 2.0.0
1798 | which: 2.0.2
1799 |
1800 | cssesc@3.0.0: {}
1801 |
1802 | csstype@3.1.0: {}
1803 |
1804 | csstype@3.1.3: {}
1805 |
1806 | date-fns@2.30.0:
1807 | dependencies:
1808 | '@babel/runtime': 7.25.0
1809 |
1810 | date-fns@3.6.0: {}
1811 |
1812 | debug@4.3.4:
1813 | dependencies:
1814 | ms: 2.1.2
1815 |
1816 | debug@4.3.6:
1817 | dependencies:
1818 | ms: 2.1.2
1819 |
1820 | deep-is@0.1.4: {}
1821 |
1822 | detect-node-es@1.1.0: {}
1823 |
1824 | dir-glob@3.0.1:
1825 | dependencies:
1826 | path-type: 4.0.0
1827 |
1828 | doctrine@3.0.0:
1829 | dependencies:
1830 | esutils: 2.0.3
1831 |
1832 | dompurify@2.3.8: {}
1833 |
1834 | dot-case@3.0.4:
1835 | dependencies:
1836 | no-case: 3.0.4
1837 | tslib: 2.6.3
1838 |
1839 | esbuild@0.18.20:
1840 | optionalDependencies:
1841 | '@esbuild/android-arm': 0.18.20
1842 | '@esbuild/android-arm64': 0.18.20
1843 | '@esbuild/android-x64': 0.18.20
1844 | '@esbuild/darwin-arm64': 0.18.20
1845 | '@esbuild/darwin-x64': 0.18.20
1846 | '@esbuild/freebsd-arm64': 0.18.20
1847 | '@esbuild/freebsd-x64': 0.18.20
1848 | '@esbuild/linux-arm': 0.18.20
1849 | '@esbuild/linux-arm64': 0.18.20
1850 | '@esbuild/linux-ia32': 0.18.20
1851 | '@esbuild/linux-loong64': 0.18.20
1852 | '@esbuild/linux-mips64el': 0.18.20
1853 | '@esbuild/linux-ppc64': 0.18.20
1854 | '@esbuild/linux-riscv64': 0.18.20
1855 | '@esbuild/linux-s390x': 0.18.20
1856 | '@esbuild/linux-x64': 0.18.20
1857 | '@esbuild/netbsd-x64': 0.18.20
1858 | '@esbuild/openbsd-x64': 0.18.20
1859 | '@esbuild/sunos-x64': 0.18.20
1860 | '@esbuild/win32-arm64': 0.18.20
1861 | '@esbuild/win32-ia32': 0.18.20
1862 | '@esbuild/win32-x64': 0.18.20
1863 |
1864 | escape-string-regexp@4.0.0: {}
1865 |
1866 | eslint-config-prettier@9.1.0(eslint@8.57.0):
1867 | dependencies:
1868 | eslint: 8.57.0
1869 |
1870 | eslint-plugin-prettier@5.2.1(@types/eslint@8.56.11)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3):
1871 | dependencies:
1872 | eslint: 8.57.0
1873 | prettier: 3.3.3
1874 | prettier-linter-helpers: 1.0.0
1875 | synckit: 0.9.1
1876 | optionalDependencies:
1877 | '@types/eslint': 8.56.11
1878 | eslint-config-prettier: 9.1.0(eslint@8.57.0)
1879 |
1880 | eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.0):
1881 | dependencies:
1882 | eslint: 8.57.0
1883 |
1884 | eslint-scope@7.2.2:
1885 | dependencies:
1886 | esrecurse: 4.3.0
1887 | estraverse: 5.3.0
1888 |
1889 | eslint-visitor-keys@3.4.3: {}
1890 |
1891 | eslint@8.57.0:
1892 | dependencies:
1893 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1894 | '@eslint-community/regexpp': 4.11.0
1895 | '@eslint/eslintrc': 2.1.4
1896 | '@eslint/js': 8.57.0
1897 | '@humanwhocodes/config-array': 0.11.14
1898 | '@humanwhocodes/module-importer': 1.0.1
1899 | '@nodelib/fs.walk': 1.2.8
1900 | '@ungap/structured-clone': 1.2.0
1901 | ajv: 6.12.6
1902 | chalk: 4.1.2
1903 | cross-spawn: 7.0.3
1904 | debug: 4.3.6
1905 | doctrine: 3.0.0
1906 | escape-string-regexp: 4.0.0
1907 | eslint-scope: 7.2.2
1908 | eslint-visitor-keys: 3.4.3
1909 | espree: 9.6.1
1910 | esquery: 1.6.0
1911 | esutils: 2.0.3
1912 | fast-deep-equal: 3.1.3
1913 | file-entry-cache: 6.0.1
1914 | find-up: 5.0.0
1915 | glob-parent: 6.0.2
1916 | globals: 13.24.0
1917 | graphemer: 1.4.0
1918 | ignore: 5.3.1
1919 | imurmurhash: 0.1.4
1920 | is-glob: 4.0.3
1921 | is-path-inside: 3.0.3
1922 | js-yaml: 4.1.0
1923 | json-stable-stringify-without-jsonify: 1.0.1
1924 | levn: 0.4.1
1925 | lodash.merge: 4.6.2
1926 | minimatch: 3.1.2
1927 | natural-compare: 1.4.0
1928 | optionator: 0.9.4
1929 | strip-ansi: 6.0.1
1930 | text-table: 0.2.0
1931 | transitivePeerDependencies:
1932 | - supports-color
1933 |
1934 | espree@9.6.1:
1935 | dependencies:
1936 | acorn: 8.12.1
1937 | acorn-jsx: 5.3.2(acorn@8.12.1)
1938 | eslint-visitor-keys: 3.4.3
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.7
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@6.0.1:
1975 | dependencies:
1976 | flat-cache: 3.2.0
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@3.2.0:
1988 | dependencies:
1989 | flatted: 3.3.1
1990 | keyv: 4.5.4
1991 | rimraf: 3.0.2
1992 |
1993 | flatted@3.3.1: {}
1994 |
1995 | fs.realpath@1.0.0: {}
1996 |
1997 | fsevents@2.3.3:
1998 | optional: true
1999 |
2000 | get-nonce@1.0.1: {}
2001 |
2002 | glob-parent@5.1.2:
2003 | dependencies:
2004 | is-glob: 4.0.3
2005 |
2006 | glob-parent@6.0.2:
2007 | dependencies:
2008 | is-glob: 4.0.3
2009 |
2010 | glob@7.2.3:
2011 | dependencies:
2012 | fs.realpath: 1.0.0
2013 | inflight: 1.0.6
2014 | inherits: 2.0.4
2015 | minimatch: 3.1.2
2016 | once: 1.4.0
2017 | path-is-absolute: 1.0.1
2018 |
2019 | globals@13.24.0:
2020 | dependencies:
2021 | type-fest: 0.20.2
2022 |
2023 | globby@11.1.0:
2024 | dependencies:
2025 | array-union: 2.1.0
2026 | dir-glob: 3.0.1
2027 | fast-glob: 3.3.2
2028 | ignore: 5.3.1
2029 | merge2: 1.4.1
2030 | slash: 3.0.0
2031 |
2032 | globrex@0.1.2: {}
2033 |
2034 | graphemer@1.4.0: {}
2035 |
2036 | has-flag@4.0.0: {}
2037 |
2038 | husky@9.1.5: {}
2039 |
2040 | ignore@5.3.1: {}
2041 |
2042 | import-fresh@3.3.0:
2043 | dependencies:
2044 | parent-module: 1.0.1
2045 | resolve-from: 4.0.0
2046 |
2047 | imurmurhash@0.1.4: {}
2048 |
2049 | inflight@1.0.6:
2050 | dependencies:
2051 | once: 1.4.0
2052 | wrappy: 1.0.2
2053 |
2054 | inherits@2.0.3: {}
2055 |
2056 | inherits@2.0.4: {}
2057 |
2058 | invariant@2.2.4:
2059 | dependencies:
2060 | loose-envify: 1.4.0
2061 |
2062 | is-extglob@2.1.1: {}
2063 |
2064 | is-glob@4.0.3:
2065 | dependencies:
2066 | is-extglob: 2.1.1
2067 |
2068 | is-number@7.0.0: {}
2069 |
2070 | is-path-inside@3.0.3: {}
2071 |
2072 | isexe@2.0.0: {}
2073 |
2074 | js-tokens@4.0.0: {}
2075 |
2076 | js-yaml@4.1.0:
2077 | dependencies:
2078 | argparse: 2.0.1
2079 |
2080 | json-buffer@3.0.1: {}
2081 |
2082 | json-schema-traverse@0.4.1: {}
2083 |
2084 | json-stable-stringify-without-jsonify@1.0.1: {}
2085 |
2086 | keyv@4.5.4:
2087 | dependencies:
2088 | json-buffer: 3.0.1
2089 |
2090 | levn@0.4.1:
2091 | dependencies:
2092 | prelude-ls: 1.2.1
2093 | type-check: 0.4.0
2094 |
2095 | locate-path@6.0.0:
2096 | dependencies:
2097 | p-locate: 5.0.0
2098 |
2099 | lodash-es@4.17.21: {}
2100 |
2101 | lodash.merge@4.6.2: {}
2102 |
2103 | logseq-dateutils@2.1.2:
2104 | dependencies:
2105 | date-fns: 2.30.0
2106 |
2107 | loose-envify@1.4.0:
2108 | dependencies:
2109 | js-tokens: 4.0.0
2110 |
2111 | lower-case@2.0.2:
2112 | dependencies:
2113 | tslib: 2.6.3
2114 |
2115 | lucide-react@0.437.0(react@18.3.1):
2116 | dependencies:
2117 | react: 18.3.1
2118 |
2119 | magic-string@0.26.7:
2120 | dependencies:
2121 | sourcemap-codec: 1.4.8
2122 |
2123 | merge2@1.4.1: {}
2124 |
2125 | micromatch@4.0.7:
2126 | dependencies:
2127 | braces: 3.0.3
2128 | picomatch: 2.3.1
2129 |
2130 | minimatch@3.1.2:
2131 | dependencies:
2132 | brace-expansion: 1.1.11
2133 |
2134 | minimatch@9.0.3:
2135 | dependencies:
2136 | brace-expansion: 2.0.1
2137 |
2138 | minimatch@9.0.5:
2139 | dependencies:
2140 | brace-expansion: 2.0.1
2141 |
2142 | ms@2.1.2: {}
2143 |
2144 | nanoid@3.3.7: {}
2145 |
2146 | natural-compare@1.4.0: {}
2147 |
2148 | no-case@3.0.4:
2149 | dependencies:
2150 | lower-case: 2.0.2
2151 | tslib: 2.6.3
2152 |
2153 | once@1.4.0:
2154 | dependencies:
2155 | wrappy: 1.0.2
2156 |
2157 | optionator@0.9.4:
2158 | dependencies:
2159 | deep-is: 0.1.4
2160 | fast-levenshtein: 2.0.6
2161 | levn: 0.4.1
2162 | prelude-ls: 1.2.1
2163 | type-check: 0.4.0
2164 | word-wrap: 1.2.5
2165 |
2166 | p-limit@3.1.0:
2167 | dependencies:
2168 | yocto-queue: 0.1.0
2169 |
2170 | p-locate@5.0.0:
2171 | dependencies:
2172 | p-limit: 3.1.0
2173 |
2174 | parent-module@1.0.1:
2175 | dependencies:
2176 | callsites: 3.1.0
2177 |
2178 | path-exists@4.0.0: {}
2179 |
2180 | path-is-absolute@1.0.1: {}
2181 |
2182 | path-key@3.1.1: {}
2183 |
2184 | path-type@4.0.0: {}
2185 |
2186 | path@0.12.7:
2187 | dependencies:
2188 | process: 0.11.10
2189 | util: 0.10.4
2190 |
2191 | picocolors@1.0.1: {}
2192 |
2193 | picomatch@2.3.1: {}
2194 |
2195 | postcss-js@4.0.1(postcss@8.4.42):
2196 | dependencies:
2197 | camelcase-css: 2.0.1
2198 | postcss: 8.4.42
2199 |
2200 | postcss-mixins@9.0.4(postcss@8.4.42):
2201 | dependencies:
2202 | fast-glob: 3.3.2
2203 | postcss: 8.4.42
2204 | postcss-js: 4.0.1(postcss@8.4.42)
2205 | postcss-simple-vars: 7.0.1(postcss@8.4.42)
2206 | sugarss: 4.0.1(postcss@8.4.42)
2207 |
2208 | postcss-nested@6.2.0(postcss@8.4.42):
2209 | dependencies:
2210 | postcss: 8.4.42
2211 | postcss-selector-parser: 6.1.2
2212 |
2213 | postcss-preset-mantine@1.17.0(postcss@8.4.42):
2214 | dependencies:
2215 | postcss: 8.4.42
2216 | postcss-mixins: 9.0.4(postcss@8.4.42)
2217 | postcss-nested: 6.2.0(postcss@8.4.42)
2218 |
2219 | postcss-selector-parser@6.1.2:
2220 | dependencies:
2221 | cssesc: 3.0.0
2222 | util-deprecate: 1.0.2
2223 |
2224 | postcss-simple-vars@7.0.1(postcss@8.4.42):
2225 | dependencies:
2226 | postcss: 8.4.42
2227 |
2228 | postcss@8.4.42:
2229 | dependencies:
2230 | nanoid: 3.3.7
2231 | picocolors: 1.0.1
2232 | source-map-js: 1.2.0
2233 |
2234 | prelude-ls@1.2.1: {}
2235 |
2236 | prettier-linter-helpers@1.0.0:
2237 | dependencies:
2238 | fast-diff: 1.3.0
2239 |
2240 | prettier@3.3.3: {}
2241 |
2242 | process@0.11.10: {}
2243 |
2244 | punycode@2.3.1: {}
2245 |
2246 | queue-microtask@1.2.3: {}
2247 |
2248 | react-dom@18.3.1(react@18.3.1):
2249 | dependencies:
2250 | loose-envify: 1.4.0
2251 | react: 18.3.1
2252 | scheduler: 0.23.2
2253 |
2254 | react-hook-form@7.52.2(react@18.3.1):
2255 | dependencies:
2256 | react: 18.3.1
2257 |
2258 | react-number-format@5.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
2259 | dependencies:
2260 | react: 18.3.1
2261 | react-dom: 18.3.1(react@18.3.1)
2262 |
2263 | react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1):
2264 | dependencies:
2265 | react: 18.3.1
2266 | react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
2267 | tslib: 2.6.3
2268 | optionalDependencies:
2269 | '@types/react': 18.3.3
2270 |
2271 | react-remove-scroll@2.5.10(@types/react@18.3.3)(react@18.3.1):
2272 | dependencies:
2273 | react: 18.3.1
2274 | react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1)
2275 | react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
2276 | tslib: 2.6.3
2277 | use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1)
2278 | use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
2279 | optionalDependencies:
2280 | '@types/react': 18.3.3
2281 |
2282 | react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1):
2283 | dependencies:
2284 | get-nonce: 1.0.1
2285 | invariant: 2.2.4
2286 | react: 18.3.1
2287 | tslib: 2.6.3
2288 | optionalDependencies:
2289 | '@types/react': 18.3.3
2290 |
2291 | react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1):
2292 | dependencies:
2293 | '@babel/runtime': 7.25.0
2294 | react: 18.3.1
2295 | use-composed-ref: 1.3.0(react@18.3.1)
2296 | use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1)
2297 | transitivePeerDependencies:
2298 | - '@types/react'
2299 |
2300 | react@18.3.1:
2301 | dependencies:
2302 | loose-envify: 1.4.0
2303 |
2304 | regenerator-runtime@0.14.1: {}
2305 |
2306 | resolve-from@4.0.0: {}
2307 |
2308 | reusify@1.0.4: {}
2309 |
2310 | rimraf@3.0.2:
2311 | dependencies:
2312 | glob: 7.2.3
2313 |
2314 | rollup@3.29.4:
2315 | optionalDependencies:
2316 | fsevents: 2.3.3
2317 |
2318 | run-parallel@1.2.0:
2319 | dependencies:
2320 | queue-microtask: 1.2.3
2321 |
2322 | scheduler@0.23.2:
2323 | dependencies:
2324 | loose-envify: 1.4.0
2325 |
2326 | semver@7.6.3: {}
2327 |
2328 | shebang-command@2.0.0:
2329 | dependencies:
2330 | shebang-regex: 3.0.0
2331 |
2332 | shebang-regex@3.0.0: {}
2333 |
2334 | slash@3.0.0: {}
2335 |
2336 | snake-case@3.0.4:
2337 | dependencies:
2338 | dot-case: 3.0.4
2339 | tslib: 2.6.3
2340 |
2341 | source-map-js@1.2.0: {}
2342 |
2343 | sourcemap-codec@1.4.8: {}
2344 |
2345 | strip-ansi@6.0.1:
2346 | dependencies:
2347 | ansi-regex: 5.0.1
2348 |
2349 | strip-json-comments@3.1.1: {}
2350 |
2351 | sugarss@4.0.1(postcss@8.4.42):
2352 | dependencies:
2353 | postcss: 8.4.42
2354 |
2355 | supports-color@7.2.0:
2356 | dependencies:
2357 | has-flag: 4.0.0
2358 |
2359 | synckit@0.9.1:
2360 | dependencies:
2361 | '@pkgr/core': 0.1.1
2362 | tslib: 2.6.3
2363 |
2364 | tabbable@6.2.0: {}
2365 |
2366 | text-table@0.2.0: {}
2367 |
2368 | to-regex-range@5.0.1:
2369 | dependencies:
2370 | is-number: 7.0.0
2371 |
2372 | ts-api-utils@1.3.0(typescript@5.5.4):
2373 | dependencies:
2374 | typescript: 5.5.4
2375 |
2376 | tsconfck@3.1.1(typescript@5.5.4):
2377 | optionalDependencies:
2378 | typescript: 5.5.4
2379 |
2380 | tslib@2.6.3: {}
2381 |
2382 | type-check@0.4.0:
2383 | dependencies:
2384 | prelude-ls: 1.2.1
2385 |
2386 | type-fest@0.20.2: {}
2387 |
2388 | type-fest@4.26.0: {}
2389 |
2390 | typescript-eslint@7.18.0(eslint@8.57.0)(typescript@5.5.4):
2391 | dependencies:
2392 | '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
2393 | '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2394 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2395 | eslint: 8.57.0
2396 | optionalDependencies:
2397 | typescript: 5.5.4
2398 | transitivePeerDependencies:
2399 | - supports-color
2400 |
2401 | typescript@5.5.4: {}
2402 |
2403 | undici-types@5.26.5: {}
2404 |
2405 | uri-js@4.4.1:
2406 | dependencies:
2407 | punycode: 2.3.1
2408 |
2409 | use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1):
2410 | dependencies:
2411 | react: 18.3.1
2412 | tslib: 2.6.3
2413 | optionalDependencies:
2414 | '@types/react': 18.3.3
2415 |
2416 | use-composed-ref@1.3.0(react@18.3.1):
2417 | dependencies:
2418 | react: 18.3.1
2419 |
2420 | use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1):
2421 | dependencies:
2422 | react: 18.3.1
2423 | optionalDependencies:
2424 | '@types/react': 18.3.3
2425 |
2426 | use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1):
2427 | dependencies:
2428 | react: 18.3.1
2429 | use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1)
2430 | optionalDependencies:
2431 | '@types/react': 18.3.3
2432 |
2433 | use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1):
2434 | dependencies:
2435 | detect-node-es: 1.1.0
2436 | react: 18.3.1
2437 | tslib: 2.6.3
2438 | optionalDependencies:
2439 | '@types/react': 18.3.3
2440 |
2441 | util-deprecate@1.0.2: {}
2442 |
2443 | util@0.10.4:
2444 | dependencies:
2445 | inherits: 2.0.3
2446 |
2447 | vite-plugin-logseq@1.1.2:
2448 | dependencies:
2449 | magic-string: 0.26.7
2450 |
2451 | vite-tsconfig-paths@4.3.2(typescript@5.5.4)(vite@4.5.3(@types/node@20.14.14)(sugarss@4.0.1(postcss@8.4.42))):
2452 | dependencies:
2453 | debug: 4.3.6
2454 | globrex: 0.1.2
2455 | tsconfck: 3.1.1(typescript@5.5.4)
2456 | optionalDependencies:
2457 | vite: 4.5.3(@types/node@20.14.14)(sugarss@4.0.1(postcss@8.4.42))
2458 | transitivePeerDependencies:
2459 | - supports-color
2460 | - typescript
2461 |
2462 | vite@4.5.3(@types/node@20.14.14)(sugarss@4.0.1(postcss@8.4.42)):
2463 | dependencies:
2464 | esbuild: 0.18.20
2465 | postcss: 8.4.42
2466 | rollup: 3.29.4
2467 | optionalDependencies:
2468 | '@types/node': 20.14.14
2469 | fsevents: 2.3.3
2470 | sugarss: 4.0.1(postcss@8.4.42)
2471 |
2472 | which@2.0.2:
2473 | dependencies:
2474 | isexe: 2.0.0
2475 |
2476 | word-wrap@1.2.5: {}
2477 |
2478 | wrappy@1.0.2: {}
2479 |
2480 | yocto-queue@0.1.0: {}
2481 |
--------------------------------------------------------------------------------
/screenshots/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/benjypng/logseq-powertags-plugin/14ddadda4e8fbd59e987cd9b567e33ca596d0699/screenshots/demo.gif
--------------------------------------------------------------------------------
/screenshots/dynamic-variables.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/benjypng/logseq-powertags-plugin/14ddadda4e8fbd59e987cd9b567e33ca596d0699/screenshots/dynamic-variables.gif
--------------------------------------------------------------------------------
/src/components/SortableItem.tsx:
--------------------------------------------------------------------------------
1 | import { useSortable } from '@dnd-kit/sortable'
2 | import { CSS } from '@dnd-kit/utilities'
3 |
4 | interface SortableItemProps {
5 | id: string
6 | index: string
7 | children: (
8 | attributes: ReturnType['attributes'],
9 | listeners: ReturnType['listeners'],
10 | ) => React.ReactNode
11 | }
12 |
13 | export const SortableItem: React.FC = ({ id, children }) => {
14 | const { attributes, listeners, setNodeRef, transform, transition } =
15 | useSortable({ id })
16 |
17 | const style: React.CSSProperties = {
18 | transform: CSS.Transform.toString(transform),
19 | transition,
20 | }
21 |
22 | return (
23 |
24 | {children(attributes, listeners)}
25 |
26 | )
27 | }
28 |
--------------------------------------------------------------------------------
/src/components/TagManagement.tsx:
--------------------------------------------------------------------------------
1 | import { Button, Group, Input, Paper, Space, Title } from '@mantine/core'
2 | import { useCallback } from 'react'
3 | import { Controller, useForm } from 'react-hook-form'
4 |
5 | import { updateBlocks } from '../services/core/update-blocks'
6 | import { updateSettings } from '../services/core/update-settings'
7 | import { handleDynamicVariables } from '../services/handle-dynamic-variables'
8 | import {
9 | PropertiesProps,
10 | TagProperties,
11 | TagPropertiesProps,
12 | } from './TagProperties'
13 |
14 | interface FormData {
15 | [key: string]: {
16 | newProp: string
17 | defaultValue: string
18 | }
19 | }
20 |
21 | export const TagManagement = ({
22 | index,
23 | setLocalTags,
24 | properties,
25 | tags,
26 | }: TagPropertiesProps) => {
27 | const { control, handleSubmit, reset } = useForm()
28 |
29 | const deletePowertag = useCallback(
30 | async (index: string) => {
31 | updateSettings((currSavedTags) => {
32 | const { [index]: _, ...rest } = currSavedTags
33 | return rest
34 | })
35 | await updateBlocks(index, async (block) => {
36 | const props = await logseq.Editor.getBlockProperties(block.uuid)
37 | await Promise.all(
38 | Object.keys(props).map((propKey) =>
39 | logseq.Editor.removeBlockProperty(block.uuid, propKey),
40 | ),
41 | )
42 | await logseq.UI.showMsg(
43 | `PowerTag ${index} deleted. Properties removed from ${block.uuid}`,
44 | 'success',
45 | )
46 | })
47 | },
48 | [tags],
49 | )
50 |
51 | const addNewProp = useCallback(
52 | async (data: FormData) => {
53 | const index = Object.keys(data)[0]
54 | if (!index || !data[index]) return
55 | const tag = data[index]
56 |
57 | updateSettings((currSavedTags) => {
58 | const properties = currSavedTags[index]
59 | if (!properties) return
60 | if (
61 | properties.some(
62 | (property: PropertiesProps) => property.name === tag.newProp,
63 | )
64 | ) {
65 | logseq.UI.showMsg(`${tag.newProp} already exists`, 'error')
66 | return currSavedTags
67 | }
68 | return {
69 | ...currSavedTags,
70 | [index]: [
71 | ...properties,
72 | { name: tag.newProp, value: tag.defaultValue },
73 | ],
74 | }
75 | })
76 |
77 | reset()
78 |
79 | await updateBlocks(index, async (block) => {
80 | const propValue = await handleDynamicVariables(tag.defaultValue)
81 | await logseq.Editor.upsertBlockProperty(
82 | block.uuid,
83 | tag.newProp,
84 | propValue,
85 | )
86 | await logseq.UI.showMsg(
87 | `New property added to ${index}. ${block.uuid} updated with new property`,
88 | 'success',
89 | )
90 | })
91 | },
92 | [tags],
93 | )
94 |
95 | return (
96 |
97 |
98 | #{index}
99 | deletePowertag(index)}>
100 | Delete PowerTag
101 |
102 |
103 |
104 |
110 |
111 |
134 |
135 | )
136 | }
137 |
--------------------------------------------------------------------------------
/src/components/TagProperties.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | DndContext,
3 | DragEndEvent,
4 | PointerSensor,
5 | useSensor,
6 | useSensors,
7 | } from '@dnd-kit/core'
8 | import {
9 | arrayMove,
10 | SortableContext,
11 | verticalListSortingStrategy,
12 | } from '@dnd-kit/sortable'
13 | import { ActionIcon, Flex, Stack, Text } from '@mantine/core'
14 | import { ArrowDownUp, Trash } from 'lucide-react'
15 | import { Dispatch, SetStateAction, useCallback } from 'react'
16 |
17 | import { Tag } from '../features'
18 | import { updateBlocks } from '../services/core/update-blocks'
19 | import { updateSettings } from '../services/core/update-settings'
20 | import { reorderBlockProperties } from '../services/re-ordering'
21 | import { SortableItem } from './SortableItem'
22 |
23 | export interface PropertiesProps {
24 | name: string
25 | value: string
26 | }
27 |
28 | export interface TagPropertiesProps {
29 | setLocalTags: Dispatch>
30 | index: string
31 | properties: PropertiesProps[]
32 | tags: Tag
33 | }
34 |
35 | export const TagProperties = ({
36 | setLocalTags,
37 | index,
38 | properties,
39 | tags,
40 | }: TagPropertiesProps) => {
41 | const sensors = useSensors(
42 | useSensor(PointerSensor, {
43 | activationConstraint: {
44 | distance: 8,
45 | },
46 | }),
47 | )
48 |
49 | const handleDragEnd = useCallback(
50 | async (event: DragEndEvent) => {
51 | let localProps
52 | const { active, over } = event
53 |
54 | if (active.id !== over?.id) {
55 | setLocalTags((prevTags) => {
56 | if (!prevTags) return prevTags
57 |
58 | const newTags = { ...prevTags }
59 | const tagIndex = Object.keys(prevTags).find((key) =>
60 | prevTags[key]!.some((prop) => prop.name === active.id),
61 | )
62 |
63 | if (!tagIndex) return prevTags
64 |
65 | const activeIndex = prevTags[tagIndex]!.findIndex(
66 | (prop) => prop.name === active.id,
67 | )
68 | const overIndex = prevTags[tagIndex]!.findIndex(
69 | (prop) => prop.name === over?.id,
70 | )
71 | if (activeIndex === -1 || overIndex === -1) return prevTags
72 | newTags[tagIndex] = arrayMove(
73 | prevTags[tagIndex]!,
74 | activeIndex,
75 | overIndex,
76 | )
77 |
78 | // Save to settings
79 | updateSettings((currSavedTags) => ({
80 | ...currSavedTags,
81 | [index]: newTags[tagIndex],
82 | }))
83 | localProps = newTags[tagIndex]
84 |
85 | return newTags
86 | })
87 | reorderBlockProperties(index, localProps!)
88 | }
89 | },
90 | [tags],
91 | )
92 |
93 | const deleteProperty = useCallback(
94 | async (index: string, name: string) => {
95 | updateSettings((currSavedTags) => ({
96 | ...currSavedTags,
97 | [index]: currSavedTags[index]?.filter(
98 | (property: { name: string }) => property.name !== name,
99 | ),
100 | }))
101 |
102 | await updateBlocks(index, async (block) => {
103 | await logseq.Editor.removeBlockProperty(block.uuid, name)
104 | await logseq.UI.showMsg(
105 | `Property ${name} deleted from #${index}. Block ${block.uuid} updated`,
106 | 'success',
107 | )
108 | })
109 | },
110 | [tags],
111 | )
112 |
113 | return (
114 |
115 | prop.name)}
117 | strategy={verticalListSortingStrategy}
118 | >
119 |
120 | {properties.map(({ name, value }) => (
121 |
122 | {(attributes, listeners) => (
123 |
129 |
136 |
137 |
138 | {name}:: {value}
139 |
140 |
141 | {properties.length > 1 && (
142 | deleteProperty(index, name)}
144 | variant="outline"
145 | color="red"
146 | >
147 |
148 |
149 | )}
150 |
151 | )}
152 |
153 | ))}
154 |
155 |
156 |
157 | )
158 | }
159 |
--------------------------------------------------------------------------------
/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/create-tag/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | ActionIcon,
3 | Button,
4 | Flex,
5 | Group,
6 | Input,
7 | Space,
8 | Title,
9 | } from '@mantine/core'
10 | import { useCallback } from 'react'
11 | import { Controller, useFieldArray, useForm } from 'react-hook-form'
12 |
13 | interface PowerTag {
14 | tagName: string
15 | properties: {
16 | name: string
17 | value: string
18 | }[]
19 | }
20 |
21 | export const CreateTag = () => {
22 | const { control, handleSubmit, watch, reset } = useForm({
23 | defaultValues: {
24 | tagName: '',
25 | properties: [{ name: '', value: '' }],
26 | },
27 | })
28 |
29 | const { fields, append, remove } = useFieldArray({
30 | control,
31 | name: 'properties',
32 | rules: {
33 | minLength: 1,
34 | },
35 | })
36 |
37 | const onSubmit = useCallback(async (data: PowerTag) => {
38 | // Check if tag already exists
39 | const currSavedTags = logseq.settings!.savedTags
40 | if (currSavedTags[data.tagName]) {
41 | await logseq.UI.showMsg(`#${data.tagName} already exists`, 'error')
42 | return
43 | }
44 |
45 | logseq.updateSettings({
46 | savedTags: {
47 | [data.tagName.toLowerCase()]: data.properties,
48 | },
49 | })
50 | reset()
51 | logseq.hideMainUI()
52 | await logseq.UI.showMsg('PowerTag saved!', 'success')
53 | }, [])
54 |
55 | return (
56 |
57 | Create
58 |
59 |
60 |
123 |
124 |
125 | )
126 | }
127 |
--------------------------------------------------------------------------------
/src/features/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | background: none !important;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/index.tsx:
--------------------------------------------------------------------------------
1 | import './index.css'
2 | import '@mantine/core/styles.css'
3 |
4 | import {
5 | CloseButton,
6 | Flex,
7 | Group,
8 | MantineProvider,
9 | Space,
10 | Title,
11 | } from '@mantine/core'
12 | import { useEffect, useState } from 'react'
13 |
14 | import { THEME } from '../constants'
15 | import { CreateTag } from './create-tag'
16 | import { ManageTags } from './manage-tags'
17 |
18 | export interface Tag {
19 | [key: string]: { name: string; value: string }[]
20 | }
21 |
22 | const PowerTags = () => {
23 | const [tags, setTags] = useState({})
24 |
25 | useEffect(() => {
26 | setTags(logseq.settings!.savedTags)
27 | })
28 |
29 | const closeModal = () => {
30 | logseq.hideMainUI()
31 | }
32 |
33 | return (
34 |
35 |
36 |
45 |
46 | PowerTags Menu
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | )
56 | }
57 |
58 | export default PowerTags
59 |
--------------------------------------------------------------------------------
/src/features/manage-tags/index.tsx:
--------------------------------------------------------------------------------
1 | import { Flex, Space, Text, Title } from '@mantine/core'
2 | import { useEffect, useState } from 'react'
3 |
4 | import { TagManagement } from '../../components/TagManagement'
5 | import { Tag } from '..'
6 |
7 | export const ManageTags = ({ tags }: { tags: Tag }) => {
8 | const [localTags, setLocalTags] = useState({})
9 |
10 | useEffect(() => {
11 | setLocalTags(tags)
12 | }, [tags])
13 |
14 | if (!localTags) return Error in plugin settings...
15 |
16 | return (
17 |
18 | Manage
19 |
20 | Deleting a PowerTag or property will affect all blocks that reference
21 | this PowerTag, even if they were not created with this plugin.
22 |
23 |
24 |
25 | {Object.entries(localTags).map(([index, properties]) => (
26 |
33 | ))}
34 |
35 |
36 | )
37 | }
38 |
--------------------------------------------------------------------------------
/src/global.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.css?raw' {
2 | const content: string
3 | export default content
4 | }
5 |
--------------------------------------------------------------------------------
/src/handle-popup.ts:
--------------------------------------------------------------------------------
1 | export const handlePopup = () => {
2 | // Hit 'Esc' to close pop-up
3 | document.addEventListener(
4 | 'keydown',
5 | (e: KeyboardEvent) => {
6 | if (e.key === 'Escape') {
7 | logseq.hideMainUI({ restoreEditingCursor: true })
8 | }
9 | e.stopPropagation()
10 | },
11 | false,
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import '@logseq/libs'
2 |
3 | import { createRoot } from 'react-dom/client'
4 |
5 | import PowerTags from './features'
6 | import { handlePopup } from './handle-popup'
7 | import { observerCallback } from './observerCallback'
8 | import { handlePowerTag } from './services/handle-power-tag'
9 | import settings from './settings'
10 |
11 | const main = () => {
12 | console.log('logseq-powertags-plugin loaded')
13 | handlePopup()
14 |
15 | // Create a savedTags object in settings if it doesn't exist
16 | if (!logseq.settings!.savedTags) {
17 | logseq.updateSettings({ savedTags: {} })
18 | }
19 |
20 | const el = document.getElementById('app')
21 | if (!el) return
22 | const root = createRoot(el)
23 |
24 | logseq.provideModel({
25 | async managePowerTags() {
26 | root.render( )
27 | logseq.showMainUI()
28 | },
29 | })
30 | logseq.App.registerUIItem('toolbar', {
31 | key: 'logseq-powertags-plugin',
32 | template: ` `,
33 | })
34 |
35 | if (logseq.settings!.autoParse) {
36 | //@ts-expect-error need to access Logseq parent
37 | const observer = new parent.MutationObserver(observerCallback)
38 | observer.observe(parent.document.getElementById('app-container'), {
39 | attributes: false,
40 | childList: true,
41 | subtree: true,
42 | })
43 | }
44 |
45 | logseq.Editor.registerSlashCommand('Parse PowerTag', async (e) => {
46 | await handlePowerTag(e.uuid)
47 | })
48 | }
49 |
50 | logseq.useSettingsSchema(settings).ready(main).catch(console.error)
51 |
--------------------------------------------------------------------------------
/src/observerCallback.ts:
--------------------------------------------------------------------------------
1 | import { handlePowerTag } from './services/handle-power-tag'
2 |
3 | export const observerCallback = async (mutationsList: any[]) => {
4 | for (const mutation of mutationsList) {
5 | if (
6 | mutation.type === 'childList' &&
7 | mutation.removedNodes.length > 0 &&
8 | mutation.removedNodes[0].className === 'editor-inner block-editor'
9 | ) {
10 | const uuid = mutation.target
11 | .closest('div[id^="ls-block"]')
12 | ?.getAttribute('blockid')
13 |
14 | await handlePowerTag(uuid)
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/services/core/query-blocks-with-tag.ts:
--------------------------------------------------------------------------------
1 | import { BlockEntity } from '@logseq/libs/dist/LSPlugin'
2 |
3 | export const queryBlocksWithTag = async (
4 | tag: string,
5 | ): Promise => {
6 | let blocks = await logseq.DB.q(`[[${tag}]]`)
7 | if (!blocks || blocks.length === 0) {
8 | await logseq.UI.showMsg(`No blocks with PowerTag: ${tag} found`)
9 | logseq.hideMainUI()
10 | return null
11 | }
12 | // Only retrieve blocks where its parent is the page so that child blocks are not selected and properties are being added to child blocks
13 | blocks = blocks.filter(
14 | (block: BlockEntity) => block.page.id === block.parent.id,
15 | )
16 | return blocks
17 | }
18 |
--------------------------------------------------------------------------------
/src/services/core/update-blocks.ts:
--------------------------------------------------------------------------------
1 | import { BlockEntity } from '@logseq/libs/dist/LSPlugin'
2 |
3 | import { queryBlocksWithTag } from './query-blocks-with-tag'
4 |
5 | export const updateBlocks = async (
6 | tag: string,
7 | operation: (block: BlockEntity) => Promise,
8 | ) => {
9 | const blocks = await queryBlocksWithTag(tag)
10 | if (!blocks) return
11 |
12 | await Promise.all(blocks.map(operation))
13 | logseq.hideMainUI()
14 | }
15 |
--------------------------------------------------------------------------------
/src/services/core/update-settings.ts:
--------------------------------------------------------------------------------
1 | import { PropertiesProps } from '../../components/TagProperties'
2 |
3 | export const updateSettings = (
4 | updateFn: (currSettings: { [key: string]: PropertiesProps[] }) => void,
5 | ) => {
6 | const currSavedTags = logseq.settings!.savedTags
7 | const updatedSettings = updateFn(currSavedTags)
8 |
9 | logseq.updateSettings({
10 | savedTags: 'Need to add some arbitrary string first',
11 | })
12 | logseq.updateSettings({ savedTags: updatedSettings })
13 | }
14 |
--------------------------------------------------------------------------------
/src/services/handle-dynamic-variables.ts:
--------------------------------------------------------------------------------
1 | import { format, startOfTomorrow, startOfYesterday } from 'date-fns'
2 | import { getDateForPage } from 'logseq-dateutils'
3 |
4 | type DynamicVariable =
5 | | 'today'
6 | | 'yesterday'
7 | | 'tomorrow'
8 | | 'time'
9 | | 'current page'
10 |
11 | const getPreferredDateFormat = async (): Promise => {
12 | return (await logseq.App.getUserConfigs()).preferredDateFormat
13 | }
14 |
15 | const dynamicVariableHandlers: Record Promise> =
16 | {
17 | today: async () =>
18 | getDateForPage(new Date(), await getPreferredDateFormat()),
19 | yesterday: async () =>
20 | getDateForPage(startOfYesterday(), await getPreferredDateFormat()),
21 | tomorrow: async () =>
22 | getDateForPage(startOfTomorrow(), await getPreferredDateFormat()),
23 | time: async () => format(new Date(), 'HH:mm'),
24 | 'current page': async () => {
25 | const currBlock = await logseq.Editor.getCurrentBlock()
26 | if (!currBlock) return ''
27 | const currPage = await logseq.Editor.getPage(currBlock.page.id)
28 | if (!currPage) return ''
29 | return `[[${currPage.name}]]`
30 | },
31 | }
32 |
33 | export const handleDynamicVariables = async (
34 | propValue: string,
35 | ): Promise => {
36 | const match = propValue.match(/<%\s*(.*?)\s*%>/)
37 | if (!match || !match[1]) return propValue
38 |
39 | const dVar = match[1] as DynamicVariable
40 | const handler = dynamicVariableHandlers[dVar]
41 | return handler ? await handler() : propValue
42 | }
43 |
--------------------------------------------------------------------------------
/src/services/handle-power-tag.ts:
--------------------------------------------------------------------------------
1 | import { handleDynamicVariables } from './handle-dynamic-variables'
2 |
3 | export const handlePowerTag = async (uuid: string) => {
4 | const blk = await logseq.Editor.getBlock(uuid)
5 | if (!blk) return
6 | const tagMatch = /#(?:\[\[(.*?)\]\]|(\w+))/.exec(blk.content)
7 | if (!tagMatch) return
8 |
9 | // Check whether tag is a PowerTag
10 | const tag = tagMatch[1] ?? tagMatch[2]
11 | if (!tag) return
12 |
13 | const powerTag = logseq.settings!.savedTags[tag.toLowerCase()]
14 | if (!powerTag) return
15 |
16 | //****RULES OF ENGAGEMENT****//
17 | // Ignore if properties already exist
18 | // Handle partial properties
19 | // Handle no properties exist
20 | //**************************//
21 |
22 | for (const property of powerTag) {
23 | const currProperty = await logseq.Editor.getBlockProperty(
24 | uuid,
25 | property.name,
26 | )
27 | if (currProperty) continue
28 |
29 | // Handle dynamic variables
30 | const propValue = await handleDynamicVariables(property.value)
31 |
32 | await logseq.Editor.upsertBlockProperty(uuid, property.name, propValue)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/services/re-ordering/index.ts:
--------------------------------------------------------------------------------
1 | import { BlockEntity } from '@logseq/libs/dist/LSPlugin'
2 |
3 | import { PropertiesProps } from '../../components/TagProperties'
4 | import { updateBlocks } from '../core/update-blocks'
5 | import { insertOrderedProps } from './insert-ordered-properties'
6 | import { removeAllProperties } from './remove-all-properties'
7 | import { reorderProperties } from './reorder-properties'
8 |
9 | export const reorderBlockProperties = async (
10 | index: string,
11 | localProps: PropertiesProps[],
12 | ) => {
13 | const newOrder = localProps.map((prop) => prop.name)
14 |
15 | await updateBlocks(index, async (block: BlockEntity) => {
16 | const blockProps = await logseq.Editor.getBlockProperties(block.uuid)
17 | const newOrderBlockProps = reorderProperties(blockProps, newOrder)
18 | if (!newOrderBlockProps) return
19 |
20 | await removeAllProperties(block.uuid, Object.keys(blockProps))
21 | await insertOrderedProps(block.uuid, newOrderBlockProps)
22 |
23 | await logseq.UI.showMsg(
24 | `Properties rearranged for ${block.uuid}`,
25 | 'success',
26 | )
27 | })
28 |
29 | logseq.hideMainUI()
30 | }
31 |
--------------------------------------------------------------------------------
/src/services/re-ordering/insert-ordered-properties.ts:
--------------------------------------------------------------------------------
1 | import { GenericProperty } from './reorder-properties'
2 |
3 | export const insertOrderedProps = async (
4 | uuid: string,
5 | properties: GenericProperty,
6 | ) => {
7 | await Promise.all(
8 | Object.entries(properties).map(([key, value]) =>
9 | logseq.Editor.upsertBlockProperty(uuid, key, value),
10 | ),
11 | )
12 | }
13 |
--------------------------------------------------------------------------------
/src/services/re-ordering/remove-all-properties.ts:
--------------------------------------------------------------------------------
1 | export const removeAllProperties = async (uuid: string, propKeys: string[]) => {
2 | await Promise.all(
3 | propKeys.map((propKey) => logseq.Editor.removeBlockProperty(uuid, propKey)),
4 | )
5 | }
6 |
--------------------------------------------------------------------------------
/src/services/re-ordering/reorder-properties.ts:
--------------------------------------------------------------------------------
1 | export interface GenericProperty {
2 | [key: string]: any
3 | }
4 |
5 | export const reorderProperties = (
6 | properties: { [key: string]: any },
7 | order: string[],
8 | ) => {
9 | const newProperties: GenericProperty = {}
10 | order.forEach((key) => {
11 | if (Object.prototype.hasOwnProperty.call(properties, key)) {
12 | newProperties[key] = properties[key]
13 | }
14 | })
15 | return newProperties
16 | }
17 |
--------------------------------------------------------------------------------
/src/settings.ts:
--------------------------------------------------------------------------------
1 | import { SettingSchemaDesc } from '@logseq/libs/dist/LSPlugin.user'
2 |
3 | const settings: SettingSchemaDesc[] = [
4 | {
5 | key: 'autoParse',
6 | type: 'boolean',
7 | default: true,
8 | title: 'Auto Parse',
9 | description: `If set to true, blocks containing a #powertag will automatically have its properties added.`,
10 | },
11 | ]
12 |
13 | export default settings
14 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------