diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 9d08a1a8..00000000 --- a/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2cf1da45..00000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -build \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 142d6f99..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,53 +0,0 @@ -module.exports = { - root: true, - env: { - node: true - }, - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - }, - extends: [ - '@vue/eslint-config-standard', - 'plugin:vue/vue3-recommended', - 'plugin:@typescript-eslint/recommended' - ], - plugins: ['@typescript-eslint', 'prettier'], - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'vue/component-name-in-template-casing': ['error', 'PascalCase'], - 'arrow-parens': ['error', 'as-needed'], - 'no-unused-vars': 'off', - 'no-undef': 'off', - 'vue/no-v-html': 'off', - 'vue/require-prop-types': 'off', - 'vue/require-default-prop': 'off', - 'vue/multi-word-component-names': 'off', - '@typescript-eslint/semi': ['error', 'never'], - '@typescript-eslint/member-delimiter-style': [ - 'error', - { multiline: { delimiter: 'none' } } - ], - '@typescript-eslint/type-annotation-spacing': ['error', {}], - '@typescript-eslint/consistent-type-imports': [ - 'error', - { prefer: 'type-imports', disallowTypeAnnotations: false } - ], - '@typescript-eslint/camelcase': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-parameter-properties': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-namespace': 'off', - indent: 'off', - '@typescript-eslint/indent': ['error', 2] - } -} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 9791d842..60a44906 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -10,4 +10,4 @@ liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -custom: ['paypal.me/antongithub', antonreshetov.gumroad.com/l/masscode] +custom: [paypal.me/antongithub, antonreshetov.gumroad.com/l/masscode] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index f86f7726..e2c913cb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,6 +1,6 @@ -name: "\U0001F41E Bug report" +name: 🐞 Bug report description: Report an issue with massCode -title: "[Bug]: " +title: '[Bug]: ' labels: [pending triage] body: - type: markdown @@ -53,4 +53,4 @@ body: - label: Check that there isn't [already an issue](https://github.com/massCodeIO/massCode/issues) that reports the same bug to avoid creating a duplicate. required: true - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/massCodeIO/massCode/discussions). - required: true \ No newline at end of file + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 14a17a2c..f8761111 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,4 +2,4 @@ blank_issues_enabled: false contact_links: - name: Questions & Discussions url: https://github.com/massCodeIO/massCode/discussions - about: Use GitHub discussions for message-board style questions and discussions. \ No newline at end of file + about: Use GitHub discussions for message-board style questions and discussions. diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml index 58a7e664..d80cc449 100644 --- a/.github/workflows/issue-close-require.yml +++ b/.github/workflows/issue-close-require.yml @@ -2,7 +2,7 @@ name: Issue Close Require on: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: close-issues: @@ -11,7 +11,7 @@ jobs: - name: need reproduction uses: actions-cool/issues-helper@v3 with: - actions: "close-issues" + actions: close-issues token: ${{ secrets.GITHUB_TOKEN }} - labels: "need reproduction" - inactive-day: 3 \ No newline at end of file + labels: need reproduction + inactive-day: 3 diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml index 4783fe2a..43512f75 100644 --- a/.github/workflows/issue-labeled.yml +++ b/.github/workflows/issue-labeled.yml @@ -13,9 +13,9 @@ jobs: if: github.event.label.name == 'need reproduction' uses: actions-cool/issues-helper@v3 with: - actions: "create-comment, remove-labels" + actions: 'create-comment, remove-labels' token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ github.event.issue.number }} body: | - Hello @${{ github.event.issue.user.login }}. Please describe in detail the sequence of actions that leads to the bug (skip it if it's already there). Add screenshots of errors from the console. If possible add a video. Issues marked with `need reproduction` will be closed if they have no activity within 3 days. - labels: "pending triage" + Hello @${{ github.event.issue.user.login }}. Please describe in detail the sequence of actions that leads to the bug (skip it if it's already there). Add screenshots of errors from the console. If possible add a video. Issues marked with `need reproduction` will be closed if they have no activity within 3 days. + labels: pending triage diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index 28fa0604..37ac48af 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -3,7 +3,7 @@ name: Add GitHub Release Tag on: push: tags: - - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 + - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 jobs: build: @@ -23,4 +23,4 @@ jobs: with: tag_name: ${{ github.ref }} draft: true - preset: angular # Use conventional-changelog preset \ No newline at end of file + preset: angular # Use conventional-changelog preset diff --git a/.gitignore b/.gitignore index a2ac8086..56fb0b55 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,8 @@ -node_modules dist -build +build/main +build/renderer -.vscode -.idea +node_modules .DS_Store -src/renderer/types/auto-imports.d.ts -src/renderer/types/components.d.ts -*.log -*.local -.env +components.d.ts +auto-imports.d.ts \ No newline at end of file diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec1..00000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index d71a03b9..00000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index d2ae35e8..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn lint-staged diff --git a/.npmrc b/.npmrc deleted file mode 100644 index cc8df9de..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -node-linker=hoisted \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 49955e2e..8b0bc4ef 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,3 @@ { - "semi": false, - "singleQuote": true, - "trailingComma": "none" -} + "plugins": ["prettier-plugin-tailwindcss"] +} \ No newline at end of file diff --git a/entitlements.mac.inherit.plist b/build/entitlements.mac.inherit.plist similarity index 100% rename from entitlements.mac.inherit.plist rename to build/entitlements.mac.inherit.plist diff --git a/config/icons/256x256.png b/build/icons/256x256.png similarity index 100% rename from config/icons/256x256.png rename to build/icons/256x256.png diff --git a/config/icons/icon.icns b/build/icons/icon.icns similarity index 100% rename from config/icons/icon.icns rename to build/icons/icon.icns diff --git a/config/icons/icon.ico b/build/icons/icon.ico similarity index 100% rename from config/icons/icon.ico rename to build/icons/icon.ico diff --git a/commitlint.config.js b/commitlint.config.js index b2894ad6..5c4a9e1b 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -10,15 +10,14 @@ module.exports = { 'docs', 'feat', 'fix', - 'perf', 'polish', 'refactor', 'release', 'revert', 'style', 'test', - 'types' - ] - ] - } + 'types', + ], + ], + }, } diff --git a/config/electron-builder.ts b/config/electron-builder.ts deleted file mode 100644 index e2f85055..00000000 --- a/config/electron-builder.ts +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable no-template-curly-in-string */ -import type { Configuration } from 'electron-builder' -import path from 'path' - -const isSponsored = process.env.VITE_SPONSORED === 'true' -const isTestBuild = process.env.TEST_BUILD === 'true' -const testMacArch = process.env.TEST_MAC_ARCH - -const artifactName = isSponsored - ? '${productName}-${version}-${arch}-sponsored.${ext}' - : undefined - -const macTarget = [ - { target: 'dmg', arch: 'arm64' }, - { target: 'dmg', arch: 'x64' } -] - -if (isTestBuild) { - if (testMacArch === 'arm64') macTarget.pop() - if (testMacArch === 'x64') macTarget.shift() -} - -export default { - appId: 'io.masscode.app', - artifactName, - productName: 'massCode', - directories: { - output: path.resolve(__dirname, '../../dist') - }, - // afterSign: !isTestBuild ? 'build/scripts/notarize.js' : undefined, - nsis: { - oneClick: false, - perMachine: false, - allowToChangeInstallationDirectory: true, - shortcutName: 'massCode' - }, - mac: { - target: macTarget, - icon: 'config/icons/icon.icns', - category: 'public.app-category.productivity', - hardenedRuntime: true, - entitlements: 'build/entitlements.mac.inherit.plist' - }, - win: { - target: 'nsis', - icon: 'config/icons/icon.ico' - }, - linux: { - target: ['snap'], - icon: 'config/icons' - }, - extraMetadata: { - main: 'src/main/index.js' - }, - protocols: [ - { - name: 'massCode', - schemes: ['masscode'] - } - ], - files: [ - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', - '!**/node_modules/*.d.ts', - '!**/node_modules/.bin', - '!config', - '!README.md', - '!scripts', - '!dist', - '!src', - '!build', - '!hero.png', - '!commitlint.config.js', - '!tsconfig.electron.json', - '!tsconfig.json', - { - from: 'build/renderer', - to: 'renderer', - filter: ['**/*'] - }, - { - from: 'build/src', - to: 'src', - filter: ['**/*'] - } - ] -} as Configuration diff --git a/config/vite.ts b/config/vite.ts deleted file mode 100644 index ceecafb0..00000000 --- a/config/vite.ts +++ /dev/null @@ -1,58 +0,0 @@ -import path from 'path' -import vuePlugin from '@vitejs/plugin-vue' -import { defineConfig } from 'vite' -import AutoImport from 'unplugin-auto-import/vite' -import Components from 'unplugin-vue-components/vite' -import Icons from 'unplugin-icons/vite' -import { FileSystemIconLoader } from 'unplugin-icons/loaders' -import IconsResolver from 'unplugin-icons/resolver' - -const pathSrc = path.resolve(__dirname, '../../src/renderer') -const pathOut = path.resolve(__dirname, '../renderer') - -export default defineConfig({ - root: pathSrc, - publicDir: 'public', - server: { - port: 8080, - open: false - }, - build: { - outDir: pathOut, - emptyOutDir: true, - target: 'esnext' - }, - define: { - // прокладка для pseudomap при билде - 'process.env.TEST_PSEUDOMAP': {} - }, - plugins: [ - vuePlugin(), - AutoImport({ - dts: `${pathSrc}/types/auto-imports.d.ts` - }), - Components({ - dts: `${pathSrc}/types/components.d.ts`, - dirs: [`${pathSrc}/components`], - resolvers: [ - IconsResolver({ - prefix: '', - customCollections: ['unicons', 'svg'] - }) - ] - }), - Icons({ - customCollections: { - unicons: FileSystemIconLoader( - './node_modules/@iconscout/unicons/svg/line' - ), - svg: FileSystemIconLoader(pathSrc + '/assets/svg') - } - }) - ], - resolve: { - alias: { - '@': pathSrc - } - } -}) diff --git a/demo/db/db.json b/demo/db/db.json deleted file mode 100644 index dd8d921a..00000000 --- a/demo/db/db.json +++ /dev/null @@ -1,2879 +0,0 @@ -{ - "folders": [ - { - "id": "J7rNZi7X", - "name": "Test Grammars", - "defaultLanguage": "typescript", - "parentId": null, - "isOpen": false, - "isSystem": false, - "createdAt": 1659494503299, - "updatedAt": 1659494610605 - } - ], - "snippets": [ - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ABAP", - "content": [ - { - "label": "Fragment 1", - "language": "abap", - "value": "***************************************\n** Program: EXAMPLE **\n** Author: Joe Byte, 07-Jul-2007 **\n***************************************\n \nREPORT BOOKINGS.\n \n* Read flight bookings from the database\nSELECT * FROM FLIGHTINFO\n WHERE CLASS = 'Y' \"Y = economy\n OR CLASS = 'C'. \"C = business\n(...)\n\nREPORT TEST.\nWRITE 'Hello World'.\n\nUSERPROMPT = 'Please double-click on a line in the output list ' &\n 'to see the complete details of the transaction.'.\n\n\nDATA LAST_EOM TYPE D. \"last end-of-month date\n \n* Start from today's date\n LAST_EOM = SY-DATUM.\n* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to \"01\",\n* giving the first day of the current month\n LAST_EOM+6(2) = '01'.\n* Subtract one day\n LAST_EOM = LAST_EOM - 1.\n \n WRITE: 'Last day of previous month was', LAST_EOM.\n \nDATA : BEGIN OF I_VBRK OCCURS 0,\n VBELN LIKE VBRK-VBELN,\n ZUONR LIKE VBRK-ZUONR,\n END OF I_VBRK.\n\nSORT i_vbrk BY vbeln ASCENDING.\nSORT i_vbrk BY vbeln DESCENDING.\n\nRETURN." - } - ], - "id": "JMINV1s7", - "createdAt": 1659494546718, - "updatedAt": 1659494556760 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ABC", - "content": [ - { - "label": "Fragment 1", - "language": "abc", - "value": "%abc-2.1\nH:This file contains some example English tunes\n% note that the comments (like this one) are to highlight usages\n% and would not normally be included in such detail\nO:England % the origin of all tunes is England\n\nX:1 % tune no 1\nT:Dusty Miller, The % title\nT:Binny's Jig % an alternative title\nC:Trad. % traditional\nR:DH % double hornpipe\nM:3/4 % meter\nK:G % key\nB>cd BAG|FA Ac BA|B>cd BAG|DG GB AG:|\nBdd gfg|aA Ac BA|Bdd gfa|gG GB AG:|\nBG G/2G/2G BG|FA Ac BA|BG G/2G/2G BG|DG GB AG:|\nW:Hey, the dusty miller, and his dusty coat;\nW:He will win a shilling, or he spend a groat.\nW:Dusty was the coat, dusty was the colour;\nW:Dusty was the kiss, that I got frae the miller.\n\nX:2\nT:Old Sir Simon the King\nC:Trad.\nS:Offord MSS % from Offord manuscript\nN:see also Playford % reference note\nM:9/8\nR:SJ % slip jig\nN:originally in C % transcription note\nK:G\nD|GFG GAG G2D|GFG GAG F2D|EFE EFE EFG|A2G F2E D2:|\nD|GAG GAB d2D|GAG GAB c2D|[1 EFE EFE EFG|[A2G] F2E D2:|\\ % no line-break in score\nM:12/8 % change of meter\n[2 E2E EFE E2E EFG|\\ % no line-break in score\nM:9/8 % change of meter\nA2G F2E D2|]\n\nX:3\nT:William and Nancy\nT:New Mown Hay\nT:Legacy, The\nC:Trad.\nO:England; Gloucs; Bledington % place of origin\nB:Sussex Tune Book % can be found in these books\nB:Mally's Cotswold Morris vol.1 2\nD:Morris On % can be heard on this record\nP:(AB)2(AC)2A % play the parts in this order\nM:6/8\nK:G \n[P:A] D|\"G\"G2G GBd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\n[P:B] d|\"G\"e2d B2d|\"C\"gfe \"G\"d2d| \"G\"e2d B2d|\"C\"gfe \"D7\"d2c|\n \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\n% changes of meter, using inline fields\n[T:Slows][M:4/4][L:1/4][P:C]\"G\"d2|\"C\"e2 \"G\"d2|B2 d2|\"Em\"gf \"A7\"e2|\"D7\"d2 \"G\"d2|\\\n \"C\"e2 \"G\"d2|[M:3/8][L:1/8] \"G\"B2 d |[M:6/8] \"C\"gfe \"D7\"d2c|\n \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\n\nX:4\nT:South Downs Jig\nR:jig\nS:Robert Harbron\nM:6/8\nL:1/8\nK:G\n|: d | dcA G3 | EFG AFE | DEF GAB | cde d2d |\ndcA G3 | EFG AFE | DEF GAB | cAF G2 :|\nB | Bcd e2c | d2B c2A | Bcd e2c | [M:9/8]d2B c2B A3 |\n[M:6/8]DGF E3 | cBA FED | DEF GAB |1 cAF G2 :|2 cAF G3 |]\n\nX:5\nT:Atholl Brose\n% in this example, which reproduces Highland Bagpipe gracing,\n% the large number of grace notes mean that it is more convenient to be specific about\n% score line-breaks (using the $ symbol), rather than using code line breaks to indicate them\nI:linebreak $\nK:D\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\n{gcd}c<{e}A {gAGAG}A>e {ag}a>f {gef}e>d|\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\n{g}c/d/e {g}G>{d}B {gf}gG {dc}d>B:|$\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\n{g}c<e {gf}g>e {ag}a2 {GdG}a>d|\n{g}c<e {gf}g>e {ag}a>e {gf}g>f|\n{gef}e>d {gf}g>d {gBd}B<{e}G {dc}d>B|\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\n{g}c<e {gf}g>e {ag}a2 {GdG}ad|\n{g}c<{GdG}e {gf}ga {f}g>e {g}f>d|\n{g}e/f/g {Gdc}d>c {gBd}B<{e}G {dc}d2|]\n\nX:6\nT:Untitled Reel\nC:Trad.\nK:D\neg|a2ab ageg|agbg agef|g2g2 fgag|f2d2 d2:|\\\ned|cecA B2ed|cAcA E2ed|cecA B2ed|c2A2 A2:|\nK:G\nAB|cdec BcdB|ABAF GFE2|cdec BcdB|c2A2 A2:|\n\nX:7\nT:Kitchen Girl\nC:Trad.\nK:D\n[c4a4] [B4g4]|efed c2cd|e2f2 gaba|g2e2 e2fg|\na4 g4|efed cdef|g2d2 efed|c2A2 A4:|\nK:G\nABcA BAGB|ABAG EDEG|A2AB c2d2|e3f edcB|ABcA BAGB|\nABAG EGAB|cBAc BAG2|A4 A4:|\n\n%abc-2.1\n%%pagewidth 21cm\n%%pageheight 29.7cm\n%%topspace 0.5cm\n%%topmargin 1cm\n%%botmargin 0cm\n%%leftmargin 1cm\n%%rightmargin 1cm\n%%titlespace 0cm\n%%titlefont Times-Bold 32\n%%subtitlefont Times-Bold 24\n%%composerfont Times 16\n%%vocalfont Times-Roman 14\n%%staffsep 60pt\n%%sysstaffsep 20pt\n%%musicspace 1cm\n%%vocalspace 5pt\n%%measurenb 0\n%%barsperstaff 5\n%%scale 0.7\nX: 1\nT: Canzonetta a tre voci\nC: Claudio Monteverdi (1567-1643)\nM: C\nL: 1/4\nQ: \"Andante mosso\" 1/4 = 110\n%%score [1 2 3]\nV: 1 clef=treble name=\"Soprano\"sname=\"A\"\nV: 2 clef=treble name=\"Alto\" sname=\"T\"\nV: 3 clef=bass middle=d name=\"Tenor\" sname=\"B\"\n%%MIDI program 1 75 % recorder\n%%MIDI program 2 75\n%%MIDI program 3 75\nK: Eb\n% 1 - 4\n[V: 1] |:z4 |z4 |f2ec |_ddcc |\nw: Son que-sti~i cre-spi cri-ni~e\nw: Que-sti son gli~oc-chi che mi-\n[V: 2] |:c2BG|AAGc|(F/G/A/B/)c=A|B2AA |\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il vi-so e\nw: Que-sti son~gli oc-chi che mi-ran - - - - do fi-so mi-\n[V: 3] |:z4 |f2ec|_ddcf |(B/c/_d/e/)ff|\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il\nw: Que-sti son~gli oc-chi che mi-ran - - - - do\n% 5 - 9\n[V: 1] cAB2 |cAAA |c3B|G2!fermata!Gz ::e4|\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\nw: ran-do fi-so, tut-to re-stai con-qui-so.\n[V: 2] AAG2 |AFFF |A3F|=E2!fermata!Ez::c4|\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\nw: ran-do fi-so tut-to re-stai con-qui-so.\n[V: 3] (ag/f/e2)|A_ddd|A3B|c2!fermata!cz ::A4|\nw: vi - - - so ond' io ti-man-go~uc-ci-so. Deh,\nw: fi - - - so tut-to re-stai con-qui-so.\n% 10 - 15\n[V: 1] f_dec |B2c2|zAGF |\\\nw: dim-me-lo ben mi-o, che que-sto\\\n=EFG2 |1F2z2:|2F8|] % more notes\nw: sol de-si-o_. % more lyrics\n[V: 2] ABGA |G2AA|GF=EF |(GF3/2=E//D//E)|1F2z2:|2F8|]\nw: dim-me-lo ben mi-o, che que-sto sol de-si - - - - o_.\n[V: 3] _dBc>d|e2AF|=EFc_d|c4 |1F2z2:|2F8|]\nw: dim-me-lo ben mi-o, che que-sto sol de-si-o_." - } - ], - "id": "XvJhtwXD", - "createdAt": 1659494559915, - "updatedAt": 1659494581094 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ActionScript", - "content": [ - { - "label": "Fragment 1", - "language": "actionscript", - "value": "package code\n{\n /*****************************************\n\t * based on textmate actionscript bundle\n\t ****************************************/\n\t \n\timport fl.events.SliderEvent;\n\t\n\tpublic class Foo extends MovieClip\n\t{\n\t\t//*************************\n\t\t// Properties:\n\t\t\n\t\tpublic var activeSwatch:MovieClip;\n\t\t\n\t\t// Color offsets\n\t\tpublic var c1:Number = 0;\t// R\n\t\t\n\t\t//*************************\n\t\t// Constructor:\n\t\t\n\t\tpublic function Foo()\n\t\t{\n\t\t\t// Respond to mouse events\n\t\t\tswatch1_btn.addEventListener(MouseEvent.CLICK,swatchHandler,false,0,false);\n\t\t\tpreviewBox_btn.addEventListener(MouseEvent.MOUSE_DOWN,dragPressHandler);\n\t\t\t\n\t\t\t// Respond to drag events\n\t\t\tred_slider.addEventListener(SliderEvent.THUMB_DRAG,sliderHandler);\n\t\t\t\n\t\t\t// Draw a frame later\n\t\t\taddEventListener(Event.ENTER_FRAME,draw);\n\t\t}\n \n\t\tprotected function clickHandler(event:MouseEvent):void\n\t\t{\n\t\t\tcar.transform.colorTransform = new ColorTransform(0,0,0,1,c1,c2,c3);\n\t\t}\n\t\t\n\t\tprotected function changeRGBHandler(event:Event):void\n\t\t{\n\t\t\tc1 = Number(c1_txt.text);\n \n\t\t\tif(!(c1>=0)){\n\t\t\t\tc1 = 0;\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tupdateSliders();\n\t\t}\n\t}\n}" - } - ], - "id": "QpGK-4E3", - "createdAt": 1659494622609, - "updatedAt": 1659494644279 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ADA", - "content": [ - { - "label": "Fragment 1", - "language": "ada", - "value": "with Ada.Text_IO; use Ada.Text_IO;\nprocedure Hello is\nbegin\n Put_Line(\"Hello, world!\");\nend Hello;" - } - ], - "id": "Px9jIO7P", - "createdAt": 1659494650343, - "updatedAt": 1659494671562 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Alda", - "content": [ - { - "label": "Fragment 1", - "language": "alda", - "value": "# Example taken from https://github.com/alda-lang/alda-core/blob/master/examples/across_the_sea.alda\n(tempo! 90)\n(quant! 95)\n\npiano:\n o5 g- > g- g-/f > e- d-4. < b-8 d-2 | c-4 e- d- d- <b-1/>g-\n\nflute:\n r2 g-4 a- b-2. > d-32~ e-16.~8 < b-2 a- g-1" - } - ], - "id": "nxTqeuxF", - "createdAt": 1659494682982, - "updatedAt": 1659494699425 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Apache", - "content": [ - { - "label": "Fragment 1", - "language": "apache_conf", - "value": "Redirect /linux http://www.linux.org\nRedirect 301 /kernel http://www.linux.org\n\n# comment\nRewriteEngine on\n\nRewriteCond %{HTTP_USER_AGENT} ^Mozilla.*\nRewriteRule ^/$ /homepage.max.html [L]\n\nRewriteRule ^/$ /homepage.std.html [L]\n" - } - ], - "id": "A89NVbKL", - "createdAt": 1659494861634, - "updatedAt": 1659494932607 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Apex", - "content": [ - { - "label": "Fragment 1", - "language": "apex", - "value": "public class testBlockDuplicatesLeadTrigger {\n\t\n\tstatic testMethod void testDuplicateTrigger(){ \n\t\n\t\tLead[] l1 =new Lead[]{\n\t\t\tnew Lead( Email='homer@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\n\t\tinsert l1;\t\t// add a known lead\n\t\t\n\t\tLead[] l2 =new Lead[]{\n\t\t\tnew Lead( Email='homer@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\n\t\t// try to add a matching lead\n\t\ttry {\tinsert l2;\t} catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, A lead with this email address already exists'),\n\t\t\t e.getMessage());\n\t\t}\n\t\t\n\t\t// test duplicates in the same batch\n\t\tLead[] l3 =new Lead[]{\n\t\t\tnew Lead( Email='marge@fox.tv', LastName='Simpson', Company='fox' ),\n\t\t\tnew Lead( Email='marge@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\t\t\n\t\ttry { insert l3;\t} catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Another new lead has the same email'),\n\t\t\t\te.getMessage());\n\t\t\t\n\t\t}\n\t\t\n\t\t// test update also\n\t\tLead[] lup = new Lead[]{\n\t\t\tnew Lead( Email='marge@fox.tv', LastName='Simpson', Company='fox' )\n\t\t};\n\t\tinsert lup;\n\t\tLead marge = [ select id,Email from lead where Email = 'marge@fox.tv' limit 1];\n\t\tsystem.assert(marge!=null);\n\t\tmarge.Email = 'homer@fox.tv'; \n\t\t\n\t\ttry { update marge; } catch ( System.DmlException e) { \n\t\t\tsystem.assert(e.getMessage().contains('irst error: FIELD_CUSTOM_VALIDATION_EXCEPTION, A lead with this email address already exists'),\n\t\t\t\te.getMessage());\t\n\t\t}\n\t}\n}" - } - ], - "id": "vvnKSBLd", - "createdAt": 1659494946912, - "updatedAt": 1659495156796 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "AppleScript", - "content": [ - { - "label": "Fragment 1", - "language": "applescript", - "value": "set advancedSettings to {background color:{65535, 0, 0}, background dimensions:{1024, 90}, opacity:100}\ndisplay overlay text \"Warning. Boss approaching…\" duration 1 advanced settings advancedSettings with goose honk" - } - ], - "id": "sHDdrA-8", - "createdAt": 1659495204662, - "updatedAt": 1659495281720 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "AsciiDoc", - "content": [ - { - "label": "Fragment 1", - "language": "asciidoc", - "value": "AsciiDoc User Guide\n===================\nStuart Rackham <srackham@gmail.com>\n:Author Initials: SJR\n:toc:\n:icons:\n:numbered:\n:website: http://www.methods.co.nz/asciidoc/\n\nAsciiDoc is a text document format for writing notes, documentation,\narticles, books, ebooks, slideshows, web pages, blogs and UNIX man\npages. AsciiDoc files can be translated to many formats including\nHTML, PDF, EPUB, man page. AsciiDoc is highly configurable: both the\nAsciiDoc source file syntax and the backend output markups (which can\nbe almost any type of SGML/XML markup) can be customized and extended\nby the user.\n\n.This document\n**********************************************************************\nThis is an overly large document, it probably needs to be refactored\ninto a Tutorial, Quick Reference and Formal Reference.\n\nIf you're new to AsciiDoc read this section and the <<X6,Getting\nStarted>> section and take a look at the example AsciiDoc (`*.txt`)\nsource files in the distribution `doc` directory.\n**********************************************************************\n\n\nIntroduction\n------------\nAsciiDoc is a plain text human readable/writable document format that\ncan be translated to DocBook or HTML using the asciidoc(1) command.\nYou can then either use asciidoc(1) generated HTML directly or run\nasciidoc(1) DocBook output through your favorite DocBook toolchain or\nuse the AsciiDoc a2x(1) toolchain wrapper to produce PDF, EPUB, DVI,\nLaTeX, PostScript, man page, HTML and text formats.\n\nThe AsciiDoc format is a useful presentation format in its own right:\nAsciiDoc markup is simple, intuitive and as such is easily proofed and\nedited.\n\nAsciiDoc is light weight: it consists of a single Python script and a\nbunch of configuration files. Apart from asciidoc(1) and a Python\ninterpreter, no other programs are required to convert AsciiDoc text\nfiles to DocBook or HTML. See <<X11,Example AsciiDoc Documents>>\nbelow.\n\nText markup conventions tend to be a matter of (often strong) personal\npreference: if the default syntax is not to your liking you can define\nyour own by editing the text based asciidoc(1) configuration files.\nYou can also create configuration files to translate AsciiDoc\ndocuments to almost any SGML/XML markup.\n\nasciidoc(1) comes with a set of configuration files to translate\nAsciiDoc articles, books and man pages to HTML or DocBook backend\nformats.\n\n.My AsciiDoc Itch\n**********************************************************************\nDocBook has emerged as the de facto standard Open Source documentation\nformat. But DocBook is a complex language, the markup is difficult to\nread and even more difficult to write directly -- I found I was\nspending more time typing markup tags, consulting reference manuals\nand fixing syntax errors, than I was writing the documentation.\n**********************************************************************\n\n\n[[X6]]\nGetting Started\n---------------\nInstalling AsciiDoc\n~~~~~~~~~~~~~~~~~~~\nSee the `README` and `INSTALL` files for install prerequisites and\nprocedures. Packagers take a look at <<X38,Packager Notes>>.\n\n[[X11]]\nExample AsciiDoc Documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe best way to quickly get a feel for AsciiDoc is to view the\nAsciiDoc web site and/or distributed examples:\n\n- Take a look at the linked examples on the AsciiDoc web site home\n page {website}. Press the 'Page Source' sidebar menu item to view\n corresponding AsciiDoc source.\n- Read the `*.txt` source files in the distribution `./doc` directory\n along with the corresponding HTML and DocBook XML files.\n\n\nAsciiDoc Document Types\n-----------------------\nThere are three types of AsciiDoc documents: article, book and\nmanpage. All document types share the same AsciiDoc format with some\nminor variations. If you are familiar with DocBook you will have\nnoticed that AsciiDoc document types correspond to the same-named\nDocBook document types.\n\nUse the asciidoc(1) `-d` (`--doctype`) option to specify the AsciiDoc\ndocument type -- the default document type is 'article'.\n\nBy convention the `.txt` file extension is used for AsciiDoc document\nsource files.\n\narticle\n~~~~~~~\nUsed for short documents, articles and general documentation. See the\nAsciiDoc distribution `./doc/article.txt` example.\n\nAsciiDoc defines standard DocBook article frontmatter and backmatter\n<<X93,section markup templates>> (appendix, abstract, bibliography,\nglossary, index).\n\nbook\n~~~~\nBooks share the same format as articles, with the following\ndifferences:\n\n- The part titles in multi-part books are <<X17,top level titles>>\n (same level as book title).\n- Some sections are book specific e.g. preface and colophon.\n\nBook documents will normally be used to produce DocBook output since\nDocBook processors can automatically generate footnotes, table of\ncontents, list of tables, list of figures, list of examples and\nindexes.\n\nAsciiDoc defines standard DocBook book frontmatter and backmatter\n<<X93,section markup templates>> (appendix, dedication, preface,\nbibliography, glossary, index, colophon).\n\n.Example book documents\nBook::\n The `./doc/book.txt` file in the AsciiDoc distribution.\n\nMulti-part book::\n The `./doc/book-multi.txt` file in the AsciiDoc distribution.\n\nmanpage\n~~~~~~~\nUsed to generate roff format UNIX manual pages. AsciiDoc manpage\ndocuments observe special header title and section naming conventions\n-- see the <<X1,Manpage Documents>> section for details.\n\nAsciiDoc defines the 'synopsis' <<X93,section markup template>> to\ngenerate the DocBook `refsynopsisdiv` section.\n\nSee also the asciidoc(1) man page source (`./doc/asciidoc.1.txt`) from\nthe AsciiDoc distribution.\n\n\n[[X5]]\nAsciiDoc Backends\n-----------------\nThe asciidoc(1) command translates an AsciiDoc formatted file to the\nbackend format specified by the `-b` (`--backend`) command-line\noption. asciidoc(1) itself has little intrinsic knowledge of backend\nformats, all translation rules are contained in customizable cascading\nconfiguration files. Backend specific attributes are listed in the\n<<X88,Backend Attributes>> section.\n\ndocbook45::\n Outputs DocBook XML 4.5 markup.\n\nhtml4::\n This backend generates plain HTML 4.01 Transitional markup.\n\nxhtml11::\n This backend generates XHTML 1.1 markup styled with CSS2. Output\n files have an `.html` extension.\n\nhtml5::\n This backend generates HTML 5 markup, apart from the inclusion of\n <<X98,audio and video block macros>> it is functionally identical to\n the 'xhtml11' backend.\n\nslidy::\n Use this backend to generate self-contained\n http://www.w3.org/Talks/Tools/Slidy2/[Slidy] HTML slideshows for\n your web browser from AsciiDoc documents. The Slidy backend is\n documented in the distribution `doc/slidy.txt` file and\n {website}slidy.html[online].\n\nwordpress::\n A minor variant of the 'html4' backend to support\n http://srackham.wordpress.com/blogpost1/[blogpost].\n\nlatex::\n Experimental LaTeX backend.\n\nBackend Aliases\n~~~~~~~~~~~~~~~\nBackend aliases are alternative names for AsciiDoc backends. AsciiDoc\ncomes with two backend aliases: 'html' (aliased to 'xhtml11') and\n'docbook' (aliased to 'docbook45').\n\nYou can assign (or reassign) backend aliases by setting an AsciiDoc\nattribute named like `backend-alias-<alias>` to an AsciiDoc backend\nname. For example, the following backend alias attribute definitions\nappear in the `[attributes]` section of the global `asciidoc.conf`\nconfiguration file:\n\n backend-alias-html=xhtml11\n backend-alias-docbook=docbook45\n\n[[X100]]\nBackend Plugins\n~~~~~~~~~~~~~~~\nThe asciidoc(1) `--backend` option is also used to install and manage\nbackend <<X101,plugins>>.\n\n- A backend plugin is used just like the built-in backends.\n- Backend plugins <<X27,take precedence>> over built-in backends with\n the same name.\n- You can use the `{asciidoc-confdir}` <<X60, intrinsic attribute>> to\n refer to the built-in backend configuration file location from\n backend plugin configuration files.\n- You can use the `{backend-confdir}` <<X60, intrinsic attribute>> to\n refer to the backend plugin configuration file location.\n- By default backends plugins are installed in\n `$HOME/.asciidoc/backends/<backend>` where `<backend>` is the\n backend name.\n\n\nDocBook\n-------\nAsciiDoc generates 'article', 'book' and 'refentry'\nhttp://www.docbook.org/[DocBook] documents (corresponding to the\nAsciiDoc 'article', 'book' and 'manpage' document types).\n\nMost Linux distributions come with conversion tools (collectively\ncalled a toolchain) for <<X12,converting DocBook files>> to\npresentation formats such as Postscript, HTML, PDF, EPUB, DVI,\nPostScript, LaTeX, roff (the native man page format), HTMLHelp,\nJavaHelp and text. There are also programs that allow you to view\nDocBook files directly, for example http://live.gnome.org/Yelp[Yelp]\n(the GNOME help viewer).\n\n[[X12]]\nConverting DocBook to other file formats\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nDocBook files are validated, parsed and translated various\npresentation file formats using a combination of applications\ncollectively called a DocBook 'tool chain'. The function of a tool\nchain is to read the DocBook markup (produced by AsciiDoc) and\ntransform it to a presentation format (for example HTML, PDF, HTML\nHelp, EPUB, DVI, PostScript, LaTeX).\n\nA wide range of user output format requirements coupled with a choice\nof available tools and stylesheets results in many valid tool chain\ncombinations.\n\n[[X43]]\na2x Toolchain Wrapper\n~~~~~~~~~~~~~~~~~~~~~\nOne of the biggest hurdles for new users is installing, configuring\nand using a DocBook XML toolchain. `a2x(1)` can help -- it's a\ntoolchain wrapper command that will generate XHTML (chunked and\nunchunked), PDF, EPUB, DVI, PS, LaTeX, man page, HTML Help and text\nfile outputs from an AsciiDoc text file. `a2x(1)` does all the grunt\nwork associated with generating and sequencing the toolchain commands\nand managing intermediate and output files. `a2x(1)` also optionally\ndeploys admonition and navigation icons and a CSS stylesheet. See the\n`a2x(1)` man page for more details. In addition to `asciidoc(1)` you\nalso need <<X40,xsltproc(1)>>, <<X13,DocBook XSL Stylesheets>> and\noptionally: <<X31,dblatex>> or <<X14,FOP>> (to generate PDF);\n`w3m(1)` or `lynx(1)` (to generate text).\n\nThe following examples generate `doc/source-highlight-filter.pdf` from\nthe AsciiDoc `doc/source-highlight-filter.txt` source file. The first\nexample uses `dblatex(1)` (the default PDF generator) the second\nexample forces FOP to be used:\n\n $ a2x -f pdf doc/source-highlight-filter.txt\n $ a2x -f pdf --fop doc/source-highlight-filter.txt\n\nSee the `a2x(1)` man page for details.\n\nTIP: Use the `--verbose` command-line option to view executed\ntoolchain commands.\n\nHTML generation\n~~~~~~~~~~~~~~~\nAsciiDoc produces nicely styled HTML directly without requiring a\nDocBook toolchain but there are also advantages in going the DocBook\nroute:\n\n- HTML from DocBook can optionally include automatically generated\n indexes, tables of contents, footnotes, lists of figures and tables.\n- DocBook toolchains can also (optionally) generate separate (chunked)\n linked HTML pages for each document section.\n- Toolchain processing performs link and document validity checks.\n- If the DocBook 'lang' attribute is set then things like table of\n contents, figure and table captions and admonition captions will be\n output in the specified language (setting the AsciiDoc 'lang'\n attribute sets the DocBook 'lang' attribute).\n\nOn the other hand, HTML output directly from AsciiDoc is much faster,\nis easily customized and can be used in situations where there is no\nsuitable DocBook toolchain (for example, see the {website}[AsciiDoc\nwebsite]).\n\nPDF generation\n~~~~~~~~~~~~~~\nThere are two commonly used tools to generate PDFs from DocBook,\n<<X31,dblatex>> and <<X14,FOP>>.\n\n.dblatex or FOP?\n- 'dblatex' is easier to install, there's zero configuration\n required and no Java VM to install -- it just works out of the box.\n- 'dblatex' source code highlighting and numbering is superb.\n- 'dblatex' is easier to use as it converts DocBook directly to PDF\n whereas before using 'FOP' you have to convert DocBook to XML-FO\n using <<X13,DocBook XSL Stylesheets>>.\n- 'FOP' is more feature complete (for example, callouts are processed\n inside literal layouts) and arguably produces nicer looking output.\n\nHTML Help generation\n~~~~~~~~~~~~~~~~~~~~\n. Convert DocBook XML documents to HTML Help compiler source files\n using <<X13,DocBook XSL Stylesheets>> and <<X40,xsltproc(1)>>.\n. Convert the HTML Help source (`.hhp` and `.html`) files to HTML Help\n (`.chm`) files using the <<X67,Microsoft HTML Help Compiler>>.\n\nToolchain components summary\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc::\n Converts AsciiDoc (`.txt`) files to DocBook XML (`.xml`) files.\n\n[[X13]]http://docbook.sourceforge.net/projects/xsl/[DocBook XSL Stylesheets]::\n These are a set of XSL stylesheets containing rules for converting\n DocBook XML documents to HTML, XSL-FO, manpage and HTML Help files.\n The stylesheets are used in conjunction with an XML parser such as\n <<X40,xsltproc(1)>>.\n\n[[X40]]http://www.xmlsoft.org[xsltproc]::\n An XML parser for applying XSLT stylesheets (in our case the\n <<X13,DocBook XSL Stylesheets>>) to XML documents.\n\n[[X31]]http://dblatex.sourceforge.net/[dblatex]::\n Generates PDF, DVI, PostScript and LaTeX formats directly from\n DocBook source via the intermediate LaTeX typesetting language --\n uses <<X13,DocBook XSL Stylesheets>>, <<X40,xsltproc(1)>> and\n `latex(1)`.\n\n[[X14]]http://xml.apache.org/fop/[FOP]::\n The Apache Formatting Objects Processor converts XSL-FO (`.fo`)\n files to PDF files. The XSL-FO files are generated from DocBook\n source files using <<X13,DocBook XSL Stylesheets>> and\n <<X40,xsltproc(1)>>.\n\n[[X67]]Microsoft Help Compiler::\n The Microsoft HTML Help Compiler (`hhc.exe`) is a command-line tool\n that converts HTML Help source files to a single HTML Help (`.chm`)\n file. It runs on MS Windows platforms and can be downloaded from\n http://www.microsoft.com.\n\nAsciiDoc dblatex configuration files\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution `./dblatex` directory contains\n`asciidoc-dblatex.xsl` (customized XSL parameter settings) and\n`asciidoc-dblatex.sty` (customized LaTeX settings). These are examples\nof optional <<X31,dblatex>> output customization and are used by\n<<X43,a2x(1)>>.\n\nAsciiDoc DocBook XSL Stylesheets drivers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou will have noticed that the distributed HTML and HTML Help\ndocumentation files (for example `./doc/asciidoc.html`) are not the\nplain outputs produced using the default 'DocBook XSL Stylesheets'\nconfiguration. This is because they have been processed using\ncustomized DocBook XSL Stylesheets along with (in the case of HTML\noutputs) the custom `./stylesheets/docbook-xsl.css` CSS stylesheet.\n\nYou'll find the customized DocBook XSL drivers along with additional\ndocumentation in the distribution `./docbook-xsl` directory. The\nexamples that follow are executed from the distribution documentation\n(`./doc`) directory. These drivers are also used by <<X43,a2x(1)>>.\n\n`common.xsl`::\n Shared driver parameters. This file is not used directly but is\n included in all the following drivers.\n\n`chunked.xsl`::\n Generate chunked XHTML (separate HTML pages for each document\n section) in the `./doc/chunked` directory. For example:\n\n $ python ../asciidoc.py -b docbook asciidoc.txt\n $ xsltproc --nonet ../docbook-xsl/chunked.xsl asciidoc.xml\n\n`epub.xsl`::\n Used by <<X43,a2x(1)>> to generate EPUB formatted documents.\n\n`fo.xsl`::\n Generate XSL Formatting Object (`.fo`) files for subsequent PDF\n file generation using FOP. For example:\n\n $ python ../asciidoc.py -b docbook article.txt\n $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo\n $ fop article.fo article.pdf\n\n`htmlhelp.xsl`::\n Generate Microsoft HTML Help source files for the MS HTML Help\n Compiler in the `./doc/htmlhelp` directory. This example is run on\n MS Windows from a Cygwin shell prompt:\n\n $ python ../asciidoc.py -b docbook asciidoc.txt\n $ xsltproc --nonet ../docbook-xsl/htmlhelp.xsl asciidoc.xml\n $ c:/Program\\ Files/HTML\\ Help\\ Workshop/hhc.exe htmlhelp.hhp\n\n`manpage.xsl`::\n Generate a `roff(1)` format UNIX man page from a DocBook XML\n 'refentry' document. This example generates an `asciidoc.1` man\n page file:\n\n $ python ../asciidoc.py -d manpage -b docbook asciidoc.1.txt\n $ xsltproc --nonet ../docbook-xsl/manpage.xsl asciidoc.1.xml\n\n`xhtml.xsl`::\n Convert a DocBook XML file to a single XHTML file. For example:\n\n $ python ../asciidoc.py -b docbook asciidoc.txt\n $ xsltproc --nonet ../docbook-xsl/xhtml.xsl asciidoc.xml > asciidoc.html\n\nIf you want to see how the complete documentation set is processed\ntake a look at the A-A-P script `./doc/main.aap`.\n\n\nGenerating Plain Text Files\n---------------------------\nAsciiDoc does not have a text backend (for most purposes AsciiDoc\nsource text is fine), however you can convert AsciiDoc text files to\nformatted text using the AsciiDoc <<X43,a2x(1)>> toolchain wrapper\nutility.\n\n\n[[X35]]\nHTML5 and XHTML 1.1\n-------------------\nThe 'xhtml11' and 'html5' backends embed or link CSS and JavaScript\nfiles in their outputs, there is also a <<X99,themes>> plugin\nframework.\n\n- If the AsciiDoc 'linkcss' attribute is defined then CSS and\n JavaScript files are linked to the output document, otherwise they\n are embedded (the default behavior).\n- The default locations for CSS and JavaScript files can be changed by\n setting the AsciiDoc 'stylesdir' and 'scriptsdir' attributes\n respectively.\n- The default locations for embedded and linked files differ and are\n calculated at different times -- embedded files are loaded when\n asciidoc(1) generates the output document, linked files are loaded\n by the browser when the user views the output document.\n- Embedded files are automatically inserted in the output files but\n you need to manually copy linked CSS and Javascript files from\n AsciiDoc <<X27,configuration directories>> to the correct location\n relative to the output document.\n\n.Stylesheet file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'stylesdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`stylesheets` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n.JavaScript file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'scriptsdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`javascripts` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n[[X99]]\nThemes\n~~~~~~\nThe AsciiDoc 'theme' attribute is used to select an alternative CSS\nstylesheet and to optionally include additional JavaScript code.\n\n- Theme files reside in an AsciiDoc <<X27,configuration directory>>\n named `themes/<theme>/` (where `<theme>` is the the theme name set\n by the 'theme' attribute). asciidoc(1) sets the 'themedir' attribute\n to the theme directory path name.\n- The 'theme' attribute can also be set using the asciidoc(1)\n `--theme` option, the `--theme` option can also be used to manage\n theme <<X101,plugins>>.\n- AsciiDoc ships with two themes: 'flask' and 'volnitsky'.\n- The `<theme>.css` file replaces the default `asciidoc.css` CSS file.\n- The `<theme>.js` file is included in addition to the default\n `asciidoc.js` JavaScript file.\n- If the <<X66,data-uri>> attribute is defined then icons are loaded\n from the theme `icons` sub-directory if it exists (i.e. the\n 'iconsdir' attribute is set to theme `icons` sub-directory path).\n- Embedded theme files are automatically inserted in the output files\n but you need to manually copy linked CSS and Javascript files to the\n location of the output documents.\n- Linked CSS and JavaScript theme files are linked to the same linked\n locations as <<X35,other CSS and JavaScript files>>.\n\nFor example, the command-line option `--theme foo` (or `--attribute\ntheme=foo`) will cause asciidoc(1) to search <<\"X27\",\"configuration\nfile locations 1, 2 and 3\">> for a sub-directory called `themes/foo`\ncontaining the stylesheet `foo.css` and optionally a JavaScript file\nname `foo.js`.\n\n\nDocument Structure\n------------------\nAn AsciiDoc document consists of a series of <<X8,block elements>>\nstarting with an optional document Header, followed by an optional\nPreamble, followed by zero or more document Sections.\n\nAlmost any combination of zero or more elements constitutes a valid\nAsciiDoc document: documents can range from a single sentence to a\nmulti-part book.\n\nBlock Elements\n~~~~~~~~~~~~~~\nBlock elements consist of one or more lines of text and may contain\nother block elements.\n\nThe AsciiDoc block structure can be informally summarized as follows\nfootnote:[This is a rough structural guide, not a rigorous syntax\ndefinition]:\n\n Document ::= (Header?,Preamble?,Section*)\n Header ::= (Title,(AuthorInfo,RevisionInfo?)?)\n AuthorInfo ::= (FirstName,(MiddleName?,LastName)?,EmailAddress?)\n RevisionInfo ::= (RevisionNumber?,RevisionDate,RevisionRemark?)\n Preamble ::= (SectionBody)\n Section ::= (Title,SectionBody?,(Section)*)\n SectionBody ::= ((BlockTitle?,Block)|BlockMacro)+\n Block ::= (Paragraph|DelimitedBlock|List|Table)\n List ::= (BulletedList|NumberedList|LabeledList|CalloutList)\n BulletedList ::= (ListItem)+\n NumberedList ::= (ListItem)+\n CalloutList ::= (ListItem)+\n LabeledList ::= (ListEntry)+\n ListEntry ::= (ListLabel,ListItem)\n ListLabel ::= (ListTerm+)\n ListItem ::= (ItemText,(List|ListParagraph|ListContinuation)*)\n\nWhere:\n\n- '?' implies zero or one occurrence, '+' implies one or more\n occurrences, '*' implies zero or more occurrences.\n- All block elements are separated by line boundaries.\n- `BlockId`, `AttributeEntry` and `AttributeList` block elements (not\n shown) can occur almost anywhere.\n- There are a number of document type and backend specific\n restrictions imposed on the block syntax.\n- The following elements cannot contain blank lines: Header, Title,\n Paragraph, ItemText.\n- A ListParagraph is a Paragraph with its 'listelement' option set.\n- A ListContinuation is a <<X15,list continuation element>>.\n\n[[X95]]\nHeader\n~~~~~~\nThe Header contains document meta-data, typically title plus optional\nauthorship and revision information:\n\n- The Header is optional, but if it is used it must start with a\n document <<X17,title>>.\n- Optional Author and Revision information immediately follows the\n header title.\n- The document header must be separated from the remainder of the\n document by one or more blank lines and cannot contain blank lines.\n- The header can include comments.\n- The header can include <<X18,attribute entries>>, typically\n 'doctype', 'lang', 'encoding', 'icons', 'data-uri', 'toc',\n 'numbered'.\n- Header attributes are overridden by command-line attributes.\n- If the header contains non-UTF-8 characters then the 'encoding' must\n precede the header (either in the document or on the command-line).\n\nHere's an example AsciiDoc document header:\n\n Writing Documentation using AsciiDoc\n ====================================\n Joe Bloggs <jbloggs@mymail.com>\n v2.0, February 2003:\n Rewritten for version 2 release.\n\nThe author information line contains the author's name optionally\nfollowed by the author's email address. The author's name is formatted\nlike:\n\n firstname[ [middlename ]lastname][ <email>]]\n\ni.e. a first name followed by optional middle and last names followed\nby an email address in that order. Multi-word first, middle and last\nnames can be entered using the underscore as a word separator. The\nemail address comes last and must be enclosed in angle <> brackets.\nHere a some examples of author information lines:\n\n Joe Bloggs <jbloggs@mymail.com>\n Joe Bloggs\n Vincent Willem van_Gogh\n\nIf the author line does not match the above specification then the\nentire author line is treated as the first name.\n\nThe optional revision information line follows the author information\nline. The revision information can be one of two formats:\n\n. An optional document revision number followed by an optional\n revision date followed by an optional revision remark:\n+\n--\n * If the revision number is specified it must be followed by a\n comma.\n * The revision number must contain at least one numeric character.\n * Any non-numeric characters preceding the first numeric character\n will be dropped.\n * If a revision remark is specified it must be preceded by a colon.\n The revision remark extends from the colon up to the next blank\n line, attribute entry or comment and is subject to normal text\n substitutions.\n * If a revision number or remark has been set but the revision date\n has not been set then the revision date is set to the value of the\n 'docdate' attribute.\n\nExamples:\n\n v2.0, February 2003\n February 2003\n v2.0,\n v2.0, February 2003: Rewritten for version 2 release.\n February 2003: Rewritten for version 2 release.\n v2.0,: Rewritten for version 2 release.\n :Rewritten for version 2 release.\n--\n\n. The revision information line can also be an RCS/CVS/SVN $Id$\n marker:\n+\n--\n * AsciiDoc extracts the 'revnumber', 'revdate', and 'author'\n attributes from the $Id$ revision marker and displays them in the\n document header.\n * If an $Id$ revision marker is used the header author line can be\n omitted.\n\nExample:\n\n $Id: mydoc.txt,v 1.5 2009/05/17 17:58:44 jbloggs Exp $\n--\n\nYou can override or set header parameters by passing 'revnumber',\n'revremark', 'revdate', 'email', 'author', 'authorinitials',\n'firstname' and 'lastname' attributes using the asciidoc(1) `-a`\n(`--attribute`) command-line option. For example:\n\n $ asciidoc -a revdate=2004/07/27 article.txt\n\nAttribute entries can also be added to the header for substitution in\nthe header template with <<X18,Attribute Entry>> elements.\n\nThe 'title' element in HTML outputs is set to the AsciiDoc document\ntitle, you can set it to a different value by including a 'title'\nattribute entry in the document header.\n\n[[X87]]\nAdditional document header information\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has two mechanisms for optionally including additional\nmeta-data in the header of the output document:\n\n'docinfo' configuration file sections::\nIf a <<X7,configuration file>> section named 'docinfo' has been loaded\nthen it will be included in the document header. Typically the\n'docinfo' section name will be prefixed with a '+' character so that it\nis appended to (rather than replace) other 'docinfo' sections.\n\n'docinfo' files::\nTwo docinfo files are recognized: one named `docinfo` and a second\nnamed like the AsciiDoc source file with a `-docinfo` suffix. For\nexample, if the source document is called `mydoc.txt` then the\ndocument information files would be `docinfo.xml` and\n`mydoc-docinfo.xml` (for DocBook outputs) and `docinfo.html` and\n`mydoc-docinfo.html` (for HTML outputs). The <<X97,docinfo, docinfo1\nand docinfo2>> attributes control which docinfo files are included in\nthe output files.\n\nThe contents docinfo templates and files is dependent on the type of\noutput:\n\nHTML::\n Valid 'head' child elements. Typically 'style' and 'script' elements\n for CSS and JavaScript inclusion.\n\nDocBook::\n Valid 'articleinfo' or 'bookinfo' child elements. DocBook defines\n numerous elements for document meta-data, for example: copyrights,\n document history and authorship information. See the DocBook\n `./doc/article-docinfo.xml` example that comes with the AsciiDoc\n distribution. The rendering of meta-data elements (or not) is\n DocBook processor dependent.\n\n\n[[X86]]\nPreamble\n~~~~~~~~\nThe Preamble is an optional untitled section body between the document\nHeader and the first Section title.\n\nSections\n~~~~~~~~\nIn addition to the document title (level 0), AsciiDoc supports four\nsection levels: 1 (top) to 4 (bottom). Section levels are delimited\nby section <<X17,titles>>. Sections are translated using\nconfiguration file <<X93,section markup templates>>. AsciiDoc\ngenerates the following <<X60,intrinsic attributes>> specifically for\nuse in section markup templates:\n\nlevel::\nThe `level` attribute is the section level number, it is normally just\nthe <<X17,title>> level number (1..4). However, if the `leveloffset`\nattribute is defined it will be added to the `level` attribute. The\n`leveloffset` attribute is useful for <<X90,combining documents>>.\n\nsectnum::\nThe `-n` (`--section-numbers`) command-line option generates the\n`sectnum` (section number) attribute. The `sectnum` attribute is used\nfor section numbers in HTML outputs (DocBook section numbering are\nhandled automatically by the DocBook toolchain commands).\n\n[[X93]]\nSection markup templates\n^^^^^^^^^^^^^^^^^^^^^^^^\nSection markup templates specify output markup and are defined in\nAsciiDoc configuration files. Section markup template names are\nderived as follows (in order of precedence):\n\n1. From the title's first positional attribute or 'template'\n attribute. For example, the following three section titles are\n functionally equivalent:\n+\n.....................................................................\n[[terms]]\n[glossary]\nList of Terms\n-------------\n\n[\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n\n[template=\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n.....................................................................\n\n2. When the title text matches a configuration file\n <<X16,`[specialsections]`>> entry.\n3. If neither of the above the default `sect<level>` template is used\n (where `<level>` is a number from 1 to 4).\n\nIn addition to the normal section template names ('sect1', 'sect2',\n'sect3', 'sect4') AsciiDoc has the following templates for\nfrontmatter, backmatter and other special sections: 'abstract',\n'preface', 'colophon', 'dedication', 'glossary', 'bibliography',\n'synopsis', 'appendix', 'index'. These special section templates\ngenerate the corresponding Docbook elements; for HTML outputs they\ndefault to the 'sect1' section template.\n\nSection IDs\n^^^^^^^^^^^\nIf no explicit section ID is specified an ID will be synthesised from\nthe section title. The primary purpose of this feature is to ensure\npersistence of table of contents links (permalinks): the missing\nsection IDs are generated dynamically by the JavaScript TOC generator\n*after* the page is loaded. If you link to a dynamically generated TOC\naddress the page will load but the browser will ignore the (as yet\nungenerated) section ID.\n\nThe IDs are generated by the following algorithm:\n\n- Replace all non-alphanumeric title characters with underscores.\n- Strip leading or trailing underscores.\n- Convert to lowercase.\n- Prepend the `idprefix` attribute (so there's no possibility of name\n clashes with existing document IDs). Prepend an underscore if the\n `idprefix` attribute is not defined.\n- A numbered suffix (`_2`, `_3` ...) is added if a same named\n auto-generated section ID exists.\n- If the `ascii-ids` attribute is defined then non-ASCII characters\n are replaced with ASCII equivalents. This attribute may be\n deprecated in future releases and *should be avoided*, it's sole\n purpose is to accommodate deficient downstream applications that\n cannot process non-ASCII ID attributes.\n\nExample: the title 'Jim's House' would generate the ID `_jim_s_house`.\n\nSection ID synthesis can be disabled by undefining the `sectids`\nattribute.\n\n[[X16]]\nSpecial Section Titles\n^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has a mechanism for mapping predefined section titles\nauto-magically to specific markup templates. For example a title\n'Appendix A: Code Reference' will automatically use the 'appendix'\n<<X93,section markup template>>. The mappings from title to template\nname are specified in `[specialsections]` sections in the Asciidoc\nlanguage configuration files (`lang-*.conf`). Section entries are\nformatted like:\n\n <title>=<template>\n\n`<title>` is a Python regular expression and `<template>` is the name\nof a configuration file markup template section. If the `<title>`\nmatches an AsciiDoc document section title then the backend output is\nmarked up using the `<template>` markup template (instead of the\ndefault `sect<level>` section template). The `{title}` attribute value\nis set to the value of the matched regular expression group named\n'title', if there is no 'title' group `{title}` defaults to the whole\nof the AsciiDoc section title. If `<template>` is blank then any\nexisting entry with the same `<title>` will be deleted.\n\n.Special section titles vs. explicit template names\n*********************************************************************\nAsciiDoc has two mechanisms for specifying non-default section markup\ntemplates: you can specify the template name explicitly (using the\n'template' attribute) or indirectly (using 'special section titles').\nSpecifying a <<X93,section template>> attribute explicitly is\npreferred. Auto-magical 'special section titles' have the following\ndrawbacks:\n\n- They are non-obvious, you have to know the exact matching\n title for each special section on a language by language basis.\n- Section titles are predefined and can only be customised with a\n configuration change.\n- The implementation is complicated by multiple languages: every\n special section title has to be defined for each language (in each\n of the `lang-*.conf` files).\n\nSpecifying special section template names explicitly does add more\nnoise to the source document (the 'template' attribute declaration),\nbut the intention is obvious and the syntax is consistent with other\nAsciiDoc elements c.f. bibliographic, Q&A and glossary lists.\n\nSpecial section titles have been deprecated but are retained for\nbackward compatibility.\n\n*********************************************************************\n\nInline Elements\n~~~~~~~~~~~~~~~\n<<X34,Inline document elements>> are used to format text and to\nperform various types of text substitution. Inline elements and inline\nelement syntax is defined in the asciidoc(1) configuration files.\n\nHere is a list of AsciiDoc inline elements in the (default) order in\nwhich they are processed:\n\nSpecial characters::\n These character sequences escape special characters used by\n the backend markup (typically `<`, `>`, and `&` characters).\n See `[specialcharacters]` configuration file sections.\n\nQuotes::\n Elements that markup words and phrases; usually for character\n formatting. See `[quotes]` configuration file sections.\n\nSpecial Words::\n Word or word phrase patterns singled out for markup without\n the need for further annotation. See `[specialwords]`\n configuration file sections.\n\nReplacements::\n Each replacement defines a word or word phrase pattern to\n search for along with corresponding replacement text. See\n `[replacements]` configuration file sections.\n\nAttribute references::\n Document attribute names enclosed in braces are replaced by\n the corresponding attribute value.\n\nInline Macros::\n Inline macros are replaced by the contents of parametrized\n configuration file sections.\n\n\nDocument Processing\n-------------------\nThe AsciiDoc source document is read and processed as follows:\n\n1. The document 'Header' is parsed, header parameter values are\n substituted into the configuration file `[header]` template section\n which is then written to the output file.\n2. Each document 'Section' is processed and its constituent elements\n translated to the output file.\n3. The configuration file `[footer]` template section is substituted\n and written to the output file.\n\nWhen a block element is encountered asciidoc(1) determines the type of\nblock by checking in the following order (first to last): (section)\nTitles, BlockMacros, Lists, DelimitedBlocks, Tables, AttributeEntrys,\nAttributeLists, BlockTitles, Paragraphs.\n\nThe default paragraph definition `[paradef-default]` is last element\nto be checked.\n\nKnowing the parsing order will help you devise unambiguous macro, list\nand block syntax rules.\n\nInline substitutions within block elements are performed in the\nfollowing default order:\n\n1. Special characters\n2. Quotes\n3. Special words\n4. Replacements\n5. Attributes\n6. Inline Macros\n7. Replacements2\n\nThe substitutions and substitution order performed on\nTitle, Paragraph and DelimitedBlock elements is determined by\nconfiguration file parameters.\n\n\nText Formatting\n---------------\n[[X51]]\nQuoted Text\n~~~~~~~~~~~\nWords and phrases can be formatted by enclosing inline text with\nquote characters:\n\n_Emphasized text_::\n Word phrases \\'enclosed in single quote characters' (acute\n accents) or \\_underline characters_ are emphasized.\n\n*Strong text*::\n Word phrases \\*enclosed in asterisk characters* are rendered\n in a strong font (usually bold).\n\n[[X81]]+Monospaced text+::\n Word phrases \\+enclosed in plus characters+ are rendered in a\n monospaced font. Word phrases \\`enclosed in backtick\n characters` (grave accents) are also rendered in a monospaced\n font but in this case the enclosed text is rendered literally\n and is not subject to further expansion (see <<X80,inline\n literal passthrough>>).\n\n`Single quoted text'::\n Phrases enclosed with a \\`single grave accent to the left and\n a single acute accent to the right' are rendered in single\n quotation marks.\n\n``Double quoted text''::\n Phrases enclosed with \\\\``two grave accents to the left and\n two acute accents to the right'' are rendered in quotation\n marks.\n\n#Unquoted text#::\n Placing \\#hashes around text# does nothing, it is a mechanism\n to allow inline attributes to be applied to otherwise\n unformatted text.\n\nNew quote types can be defined by editing asciidoc(1) configuration\nfiles. See the <<X7,Configuration Files>> section for details.\n\n.Quoted text behavior\n- Quoting cannot be overlapped.\n- Different quoting types can be nested.\n- To suppress quoted text formatting place a backslash character\n immediately in front of the leading quote character(s). In the case\n of ambiguity between escaped and non-escaped text you will need to\n escape both leading and trailing quotes, in the case of\n multi-character quotes you may even need to escape individual\n characters.\n\n[[X96]]\nQuoted text attributes\n^^^^^^^^^^^^^^^^^^^^^^\nQuoted text can be prefixed with an <<X21,attribute list>>. The first\npositional attribute ('role' attribute) is translated by AsciiDoc to\nan HTML 'span' element 'class' attribute or a DocBook 'phrase' element\n'role' attribute.\n\nDocBook XSL Stylesheets translate DocBook 'phrase' elements with\n'role' attributes to corresponding HTML 'span' elements with the same\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML]. Thus CSS styling can be applied to both DocBook and\nAsciiDoc generated HTML outputs. You can also specify multiple class\nnames separated by spaces.\n\nCSS rules for text color, text background color, text size and text\ndecorators are included in the distributed AsciiDoc CSS files and are\nused in conjunction with AsciiDoc 'xhtml11', 'html5' and 'docbook'\noutputs. The CSS class names are:\n\n- '<color>' (text foreground color).\n- '<color>-background' (text background color).\n- 'big' and 'small' (text size).\n- 'underline', 'overline' and 'line-through' (strike through) text\n decorators.\n\nWhere '<color>' can be any of the\nhttp://en.wikipedia.org/wiki/Web_colors#HTML_color_names[sixteen HTML\ncolor names]. Examples:\n\n [red]#Obvious# and [big red yellow-background]*very obvious*.\n\n [underline]#Underline text#, [overline]#overline text# and\n [blue line-through]*bold blue and line-through*.\n\nis rendered as:\n\n[red]#Obvious# and [big red yellow-background]*very obvious*.\n\n[underline]#Underline text#, [overline]#overline text# and\n[bold blue line-through]*bold blue and line-through*.\n\nNOTE: Color and text decorator attributes are rendered for XHTML and\nHTML 5 outputs using CSS stylesheets. The mechanism to implement\ncolor and text decorator attributes is provided for DocBook toolchains\nvia the DocBook 'phrase' element 'role' attribute, but the actual\nrendering is toolchain specific and is not part of the AsciiDoc\ndistribution.\n\n[[X52]]\nConstrained and Unconstrained Quotes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThere are actually two types of quotes:\n\nConstrained quotes\n++++++++++++++++++\nQuoted must be bounded by white space or commonly adjoining\npunctuation characters. These are the most commonly used type of\nquote.\n\nUnconstrained quotes\n++++++++++++++++++++\nUnconstrained quotes have no boundary constraints and can be placed\nanywhere within inline text. For consistency and to make them easier\nto remember unconstrained quotes are double-ups of the `_`, `*`, `+`\nand `#` constrained quotes:\n\n __unconstrained emphasized text__\n **unconstrained strong text**\n ++unconstrained monospaced text++\n ##unconstrained unquoted text##\n\nThe following example emboldens the letter F:\n\n **F**ile Open...\n\nSuperscripts and Subscripts\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPut \\^carets on either^ side of the text to be superscripted, put\n\\~tildes on either side~ of text to be subscripted. For example, the\nfollowing line:\n\n e^πi^+1 = 0. H~2~O and x^10^. Some ^super text^\n and ~some sub text~\n\nIs rendered like:\n\ne^πi^+1 = 0. H~2~O and x^10^. Some ^super text^\nand ~some sub text~\n\nSuperscripts and subscripts are implemented as <<X52,unconstrained\nquotes>> and they can be escaped with a leading backslash and prefixed\nwith with an attribute list.\n\nLine Breaks\n~~~~~~~~~~~\nA plus character preceded by at least one space character at the end\nof a non-blank line forces a line break. It generates a line break\n(`br`) tag for HTML outputs and a custom XML `asciidoc-br` processing\ninstruction for DocBook outputs. The `asciidoc-br` processing\ninstruction is handled by <<X43,a2x(1)>>.\n\nPage Breaks\n~~~~~~~~~~~\nA line of three or more less-than (`<<<`) characters will generate a\nhard page break in DocBook and printed HTML outputs. It uses the CSS\n`page-break-after` property for HTML outputs and a custom XML\n`asciidoc-pagebreak` processing instruction for DocBook outputs. The\n`asciidoc-pagebreak` processing instruction is handled by\n<<X43,a2x(1)>>. Hard page breaks are sometimes handy but as a general\nrule you should let your page processor generate page breaks for you.\n\nRulers\n~~~~~~\nA line of three or more apostrophe characters will generate a ruler\nline. It generates a ruler (`hr`) tag for HTML outputs and a custom\nXML `asciidoc-hr` processing instruction for DocBook outputs. The\n`asciidoc-hr` processing instruction is handled by <<X43,a2x(1)>>.\n\nTabs\n~~~~\nBy default tab characters input files will translated to 8 spaces. Tab\nexpansion is set with the 'tabsize' entry in the configuration file\n`[miscellaneous]` section and can be overridden in included files by\nsetting a 'tabsize' attribute in the `include` macro's attribute list.\nFor example:\n\n include::addendum.txt[tabsize=2]\n\nThe tab size can also be set using the attribute command-line option,\nfor example `--attribute tabsize=4`\n\nReplacements\n~~~~~~~~~~~~\nThe following replacements are defined in the default AsciiDoc\nconfiguration:\n\n (C) copyright, (TM) trademark, (R) registered trademark,\n -- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\n double arrow, <= left double arrow.\n\nWhich are rendered as:\n\n(C) copyright, (TM) trademark, (R) registered trademark,\n-- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\ndouble arrow, <= left double arrow.\n\nYou can also include arbitrary entity references in the AsciiDoc\nsource. Examples:\n\n ➊ ¶\n\nrenders:\n\n➊ ¶\n\nTo render a replacement literally escape it with a leading back-slash.\n\nThe <<X7,Configuration Files>> section explains how to configure your\nown replacements.\n\nSpecial Words\n~~~~~~~~~~~~~\nWords defined in `[specialwords]` configuration file sections are\nautomatically marked up without having to be explicitly notated.\n\nThe <<X7,Configuration Files>> section explains how to add and replace\nspecial words.\n\n\n[[X17]]\nTitles\n------\nDocument and section titles can be in either of two formats:\n\nTwo line titles\n~~~~~~~~~~~~~~~\nA two line title consists of a title line, starting hard against the\nleft margin, and an underline. Section underlines consist a repeated\ncharacter pairs spanning the width of the preceding title (give or\ntake up to two characters):\n\nThe default title underlines for each of the document levels are:\n\n\n Level 0 (top level): ======================\n Level 1: ----------------------\n Level 2: ~~~~~~~~~~~~~~~~~~~~~~\n Level 3: ^^^^^^^^^^^^^^^^^^^^^^\n Level 4 (bottom level): ++++++++++++++++++++++\n\nExamples:\n\n Level One Section Title\n -----------------------\n\n Level 2 Subsection Title\n ~~~~~~~~~~~~~~~~~~~~~~~~\n\n[[X46]]\nOne line titles\n~~~~~~~~~~~~~~~\nOne line titles consist of a single line delimited on either side by\none or more equals characters (the number of equals characters\ncorresponds to the section level minus one). Here are some examples:\n\n = Document Title (level 0) =\n == Section title (level 1) ==\n === Section title (level 2) ===\n ==== Section title (level 3) ====\n ===== Section title (level 4) =====\n\n[NOTE]\n=====================================================================\n- One or more spaces must fall between the title and the delimiters.\n- The trailing title delimiter is optional.\n- The one-line title syntax can be changed by editing the\n configuration file `[titles]` section `sect0`...`sect4` entries.\n=====================================================================\n\nFloating titles\n~~~~~~~~~~~~~~~\nSetting the title's first positional attribute or 'style' attribute to\n'float' generates a free-floating title. A free-floating title is\nrendered just like a normal section title but is not formally\nassociated with a text body and is not part of the regular section\nhierarchy so the normal ordering rules do not apply. Floating titles\ncan also be used in contexts where section titles are illegal: for\nexample sidebar and admonition blocks. Example:\n\n [float]\n The second day\n ~~~~~~~~~~~~~~\n\nFloating titles do not appear in a document's table of contents.\n\n\n[[X42]]\nBlock Titles\n------------\nA 'BlockTitle' element is a single line beginning with a period\nfollowed by the title text. A BlockTitle is applied to the immediately\nfollowing Paragraph, DelimitedBlock, List, Table or BlockMacro. For\nexample:\n\n........................\n.Notes\n- Note 1.\n- Note 2.\n........................\n\nis rendered as:\n\n.Notes\n- Note 1.\n- Note 2.\n\n\n[[X41]]\nBlockId Element\n---------------\nA 'BlockId' is a single line block element containing a unique\nidentifier enclosed in double square brackets. It is used to assign an\nidentifier to the ensuing block element. For example:\n\n [[chapter-titles]]\n Chapter titles can be ...\n\nThe preceding example identifies the ensuing paragraph so it can be\nreferenced from other locations, for example with\n`<<chapter-titles,chapter titles>>`.\n\n'BlockId' elements can be applied to Title, Paragraph, List,\nDelimitedBlock, Table and BlockMacro elements. The BlockId element\nsets the `{id}` attribute for substitution in the subsequent block's\nmarkup template. If a second positional argument is supplied it sets\nthe `{reftext}` attribute which is used to set the DocBook `xreflabel`\nattribute.\n\nThe 'BlockId' element has the same syntax and serves the same function\nto the <<X30,anchor inline macro>>.\n\n[[X79]]\nAttributeList Element\n---------------------\nAn 'AttributeList' block element is an <<X21,attribute list>> on a\nline by itself:\n\n- 'AttributeList' attributes are only applied to the immediately\n following block element -- the attributes are made available to the\n block's markup template.\n- Multiple contiguous 'AttributeList' elements are additively combined\n in the order they appear..\n- The first positional attribute in the list is often used to specify\n the ensuing element's <<X23,style>>.\n\nAttribute value substitution\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nBy default, only substitutions that take place inside attribute list\nvalues are attribute references, this is because not all attributes\nare destined to be marked up and rendered as text (for example the\ntable 'cols' attribute). To perform normal inline text substitutions\n(special characters, quotes, macros, replacements) on an attribute\nvalue you need to enclose it in single quotes. In the following quote\nblock the second attribute value in the AttributeList is quoted to\nensure the 'http' macro is expanded to a hyperlink.\n\n---------------------------------------------------------------------\n[quote,'http://en.wikipedia.org/wiki/Samuel_Johnson[Samuel Johnson]']\n_____________________________________________________________________\nSir, a woman's preaching is like a dog's walking on his hind legs. It\nis not done well; but you are surprised to find it done at all.\n_____________________________________________________________________\n---------------------------------------------------------------------\n\nCommon attributes\n~~~~~~~~~~~~~~~~~\nMost block elements support the following attributes:\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|id |html4, html5, xhtml11, docbook |\nUnique identifier typically serve as link targets.\nCan also be set by the 'BlockId' element.\n\n|role |html4, html5, xhtml11, docbook |\nRole contains a string used to classify or subclassify an element and\ncan be applied to AsciiDoc block elements. The AsciiDoc 'role'\nattribute is translated to the 'role' attribute in DocBook outputs and\nis included in the 'class' attribute in HTML outputs, in this respect\nit behaves like the <<X96,quoted text role attribute>>.\n\nDocBook XSL Stylesheets translate DocBook 'role' attributes to HTML\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML].\n\n|reftext |docbook |\n'reftext' is used to set the DocBook 'xreflabel' attribute.\nThe 'reftext' attribute can an also be set by the 'BlockId' element.\n\n|====================================================================\n\n\nParagraphs\n----------\nParagraphs are blocks of text terminated by a blank line, the end of\nfile, or the start of a delimited block or a list. There are three\nparagraph syntaxes: normal, indented (literal) and admonition which\nare rendered, by default, with the corresponding paragraph style.\n\nEach syntax has a default style, but you can explicitly apply any\nparagraph style to any paragraph syntax. You can also apply\n<<X104,delimited block>> styles to single paragraphs.\n\nThe built-in paragraph styles are: 'normal', 'literal', 'verse',\n'quote', 'listing', 'TIP', 'NOTE', 'IMPORTANT', 'WARNING', 'CAUTION',\n'abstract', 'partintro', 'comment', 'example', 'sidebar', 'source',\n'music', 'latex', 'graphviz'.\n\nnormal paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~\nNormal paragraph syntax consists of one or more non-blank lines of\ntext. The first line must start hard against the left margin (no\nintervening white space). The default processing expectation is that\nof a normal paragraph of text.\n\n[[X85]]\nliteral paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~~\nLiteral paragraphs are rendered verbatim in a monospaced font without\nany distinguishing background or border. By default there is no text\nformatting or substitutions within Literal paragraphs apart from\nSpecial Characters and Callouts.\n\nThe 'literal' style is applied implicitly to indented paragraphs i.e.\nwhere the first line of the paragraph is indented by one or more space\nor tab characters. For example:\n\n---------------------------------------------------------------------\n Consul *necessitatibus* per id,\n consetetur, eu pro everti postulant\n homero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n Consul *necessitatibus* per id,\n consetetur, eu pro everti postulant\n homero verear ea mea, qui.\n\nNOTE: Because <<X64,lists>> can be indented it's possible for your\nindented paragraph to be misinterpreted as a list -- in situations\nlike this apply the 'literal' style to a normal paragraph.\n\nInstead of using a paragraph indent you could apply the 'literal'\nstyle explicitly, for example:\n\n---------------------------------------------------------------------\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n\n[[X94]]\nquote and verse paragraph styles\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe optional 'attribution' and 'citetitle' attributes (positional\nattributes 2 and 3) specify the author and source respectively.\n\nThe 'verse' style retains the line breaks, for example:\n\n---------------------------------------------------------------------\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n\nThe 'quote' style flows the text at left and right margins, for\nexample:\n\n---------------------------------------------------------------------\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n\n[[X28]]\nAdmonition Paragraphs\n~~~~~~~~~~~~~~~~~~~~~\n'TIP', 'NOTE', 'IMPORTANT', 'WARNING' and 'CAUTION' admonishment\nparagraph styles are generated by placing `NOTE:`, `TIP:`,\n`IMPORTANT:`, `WARNING:` or `CAUTION:` as the first word of the\nparagraph. For example:\n\n NOTE: This is an example note.\n\nAlternatively, you can specify the paragraph admonition style\nexplicitly using an <<X79,AttributeList element>>. For example:\n\n [NOTE]\n This is an example note.\n\nRenders:\n\nNOTE: This is an example note.\n\nTIP: If your admonition requires more than a single paragraph use an\n<<X22,admonition block>> instead.\n\n[[X47]]\nAdmonition Icons and Captions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nNOTE: Admonition customization with `icons`, `iconsdir`, `icon` and\n`caption` attributes does not apply when generating DocBook output. If\nyou are going the DocBook route then the <<X43,a2x(1)>> `--no-icons`\nand `--icons-dir` options can be used to set the appropriate XSL\nStylesheets parameters.\n\nBy default the asciidoc(1) HTML backends generate text captions\ninstead of admonition icon image links. To generate links to icon\nimages define the <<X45,`icons`>> attribute, for example using the `-a\nicons` command-line option.\n\nThe <<X44,`iconsdir`>> attribute sets the location of linked icon\nimages.\n\nYou can override the default icon image using the `icon` attribute to\nspecify the path of the linked image. For example:\n\n [icon=\"./images/icons/wink.png\"]\n NOTE: What lovely war.\n\nUse the `caption` attribute to customize the admonition captions (not\napplicable to `docbook` backend). The following example suppresses the\nicon image and customizes the caption of a 'NOTE' admonition\n(undefining the `icons` attribute with `icons=None` is only necessary\nif <<X45,admonition icons>> have been enabled):\n\n [icons=None, caption=\"My Special Note\"]\n NOTE: This is my special note.\n\nThis subsection also applies to <<X22,Admonition Blocks>>.\n\n\n[[X104]]\nDelimited Blocks\n----------------\nDelimited blocks are blocks of text enveloped by leading and trailing\ndelimiter lines (normally a series of four or more repeated\ncharacters). The behavior of Delimited Blocks is specified by entries\nin configuration file `[blockdef-*]` sections.\n\nPredefined Delimited Blocks\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc ships with a number of predefined DelimitedBlocks (see the\n`asciidoc.conf` configuration file in the asciidoc(1) program\ndirectory):\n\nPredefined delimited block underlines:\n\n CommentBlock: //////////////////////////\n PassthroughBlock: ++++++++++++++++++++++++++\n ListingBlock: --------------------------\n LiteralBlock: ..........................\n SidebarBlock: **************************\n QuoteBlock: __________________________\n ExampleBlock: ==========================\n OpenBlock: --\n\n.Default DelimitedBlock substitutions\n[cols=\"2e,7*^\",frame=\"topbot\",options=\"header,autowidth\"]\n|=====================================================\n| |Attributes |Callouts |Macros | Quotes |Replacements\n|Special chars |Special words\n\n|PassthroughBlock |Yes |No |Yes |No |No |No |No\n|ListingBlock |No |Yes |No |No |No |Yes |No\n|LiteralBlock |No |Yes |No |No |No |Yes |No\n|SidebarBlock |Yes |No |Yes |Yes |Yes |Yes |Yes\n|QuoteBlock |Yes |No |Yes |Yes |Yes |Yes |Yes\n|ExampleBlock |Yes |No |Yes |Yes |Yes |Yes |Yes\n|OpenBlock |Yes |No |Yes |Yes |Yes |Yes |Yes\n|=====================================================\n\nListing Blocks\n~~~~~~~~~~~~~~\n'ListingBlocks' are rendered verbatim in a monospaced font, they\nretain line and whitespace formatting and are often distinguished by a\nbackground or border. There is no text formatting or substitutions\nwithin Listing blocks apart from Special Characters and Callouts.\nListing blocks are often used for computer output and file listings.\n\nHere's an example:\n\n[listing]\n......................................\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n printf(\"Hello World!\\n\");\n exit(0);\n}\n--------------------------------------\n......................................\n\nWhich will be rendered like:\n\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n printf(\"Hello World!\\n\");\n exit(0);\n}\n--------------------------------------\n\nBy convention <<X59,filter blocks>> use the listing block syntax and\nare implemented as distinct listing block styles.\n\n[[X65]]\nLiteral Blocks\n~~~~~~~~~~~~~~\n'LiteralBlocks' are rendered just like <<X85,literal paragraphs>>.\nExample:\n\n---------------------------------------------------------------------\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n---------------------------------------------------------------------\n\nRenders:\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n\nIf the 'listing' style is applied to a LiteralBlock it will be\nrendered as a ListingBlock (this is handy if you have a listing\ncontaining a ListingBlock).\n\nSidebar Blocks\n~~~~~~~~~~~~~~\nA sidebar is a short piece of text presented outside the narrative\nflow of the main text. The sidebar is normally presented inside a\nbordered box to set it apart from the main text.\n\nThe sidebar body is treated like a normal section body.\n\nHere's an example:\n\n---------------------------------------------------------------------\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n---------------------------------------------------------------------\n\nWhich will be rendered like:\n\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n\n[[X26]]\nComment Blocks\n~~~~~~~~~~~~~~\nThe contents of 'CommentBlocks' are not processed; they are useful for\nannotations and for excluding new or outdated content that you don't\nwant displayed. CommentBlocks are never written to output files.\nExample:\n\n---------------------------------------------------------------------\n//////////////////////////////////////////\nCommentBlock contents are not processed by\nasciidoc(1).\n//////////////////////////////////////////\n---------------------------------------------------------------------\n\nSee also <<X25,Comment Lines>>.\n\nNOTE: System macros are executed inside comment blocks.\n\n[[X76]]\nPassthrough Blocks\n~~~~~~~~~~~~~~~~~~\nBy default the block contents is subject only to 'attributes' and\n'macros' substitutions (use an explicit 'subs' attribute to apply\ndifferent substitutions). PassthroughBlock content will often be\nbackend specific. Here's an example:\n\n---------------------------------------------------------------------\n[subs=\"quotes\"]\n++++++++++++++++++++++++++++++++++++++\n<table border=\"1\"><tr>\n <td>*Cell 1*</td>\n <td>*Cell 2*</td>\n</tr></table>\n++++++++++++++++++++++++++++++++++++++\n---------------------------------------------------------------------\n\nThe following styles can be applied to passthrough blocks:\n\npass::\n No substitutions are performed. This is equivalent to `subs=\"none\"`.\n\nasciimath, latexmath::\n By default no substitutions are performed, the contents are rendered\n as <<X78,mathematical formulas>>.\n\nQuote Blocks\n~~~~~~~~~~~~\n'QuoteBlocks' are used for quoted passages of text. There are two\nstyles: 'quote' and 'verse'. The style behavior is identical to\n<<X94,quote and verse paragraphs>> except that blocks can contain\nmultiple paragraphs and, in the case of the 'quote' style, other\nsection elements. The first positional attribute sets the style, if\nno attributes are specified the 'quote' style is used. The optional\n'attribution' and 'citetitle' attributes (positional attributes 2 and\n3) specify the quote's author and source. For example:\n\n---------------------------------------------------------------------\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n\n[[X48]]\nExample Blocks\n~~~~~~~~~~~~~~\n'ExampleBlocks' encapsulate the DocBook Example element and are used\nfor, well, examples. Example blocks can be titled by preceding them\nwith a 'BlockTitle'. DocBook toolchains will normally automatically\nnumber examples and generate a 'List of Examples' backmatter section.\n\nExample blocks are delimited by lines of equals characters and can\ncontain any block elements apart from Titles, BlockTitles and\nSidebars) inside an example block. For example:\n\n---------------------------------------------------------------------\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n---------------------------------------------------------------------\n[caption=\"Example 1: \"]\n.An example with a custom caption\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\n[[X22]]\nAdmonition Blocks\n~~~~~~~~~~~~~~~~~\nThe 'ExampleBlock' definition includes a set of admonition\n<<X23,styles>> ('NOTE', 'TIP', 'IMPORTANT', 'WARNING', 'CAUTION') for\ngenerating admonition blocks (admonitions containing more than a\n<<X28,single paragraph>>). Just precede the 'ExampleBlock' with an\nattribute list specifying the admonition style name. For example:\n\n---------------------------------------------------------------------\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n .. Fusce euismod commodo velit.\n .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n nunc consequat lobortis.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n .. Fusce euismod commodo velit.\n .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n nunc consequat lobortis.\n=====================================================================\n\nSee also <<X47,Admonition Icons and Captions>>.\n\n[[X29]]\nOpen Blocks\n~~~~~~~~~~~\nOpen blocks are special:\n\n- The open block delimiter is line containing two hyphen characters\n (instead of four or more repeated characters).\n\n- They can be used to group block elements for <<X15,List item\n continuation>>.\n\n- Open blocks can be styled to behave like any other type of delimited\n block. The following built-in styles can be applied to open\n blocks: 'literal', 'verse', 'quote', 'listing', 'TIP', 'NOTE',\n 'IMPORTANT', 'WARNING', 'CAUTION', 'abstract', 'partintro',\n 'comment', 'example', 'sidebar', 'source', 'music', 'latex',\n 'graphviz'. For example, the following open block and listing block\n are functionally identical:\n\n [listing]\n --\n Lorum ipsum ...\n --\n\n ---------------\n Lorum ipsum ...\n ---------------\n\n- An unstyled open block groups section elements but otherwise does\n nothing.\n\nOpen blocks are used to generate document abstracts and book part\nintroductions:\n\n- Apply the 'abstract' style to generate an abstract, for example:\n\n [abstract]\n --\n In this paper we will ...\n --\n\n. Apply the 'partintro' style to generate a book part introduction for\n a multi-part book, for example:\n\n [partintro]\n .Optional part introduction title\n --\n Optional part introduction goes here.\n --\n\n\n[[X64]]\nLists\n-----\n.List types\n- Bulleted lists. Also known as itemized or unordered lists.\n- Numbered lists. Also called ordered lists.\n- Labeled lists. Sometimes called variable or definition lists.\n- Callout lists (a list of callout annotations).\n\n.List behavior\n- List item indentation is optional and does not determine nesting,\n indentation does however make the source more readable.\n- Another list or a literal paragraph immediately following a list\n item will be implicitly included in the list item; use <<X15, list\n item continuation>> to explicitly append other block elements to a\n list item.\n- A comment block or a comment line block macro element will terminate\n a list -- use inline comment lines to put comments inside lists.\n- The `listindex` <<X60,intrinsic attribute>> is the current list item\n index (1..). If this attribute is used outside a list then it's value\n is the number of items in the most recently closed list. Useful for\n displaying the number of items in a list.\n\nBulleted Lists\n~~~~~~~~~~~~~~\nBulleted list items start with a single dash or one to five asterisks\nfollowed by some white space then some text. Bulleted list syntaxes\nare:\n\n...................\n- List item.\n* List item.\n** List item.\n*** List item.\n**** List item.\n***** List item.\n...................\n\nNumbered Lists\n~~~~~~~~~~~~~~\nList item numbers are explicit or implicit.\n\n.Explicit numbering\nList items begin with a number followed by some white space then the\nitem text. The numbers can be decimal (arabic), roman (upper or lower\ncase) or alpha (upper or lower case). Decimal and alpha numbers are\nterminated with a period, roman numbers are terminated with a closing\nparenthesis. The different terminators are necessary to ensure 'i',\n'v' and 'x' roman numbers are are distinguishable from 'x', 'v' and\n'x' alpha numbers. Examples:\n\n.....................................................................\n1. Arabic (decimal) numbered list item.\na. Lower case alpha (letter) numbered list item.\nF. Upper case alpha (letter) numbered list item.\niii) Lower case roman numbered list item.\nIX) Upper case roman numbered list item.\n.....................................................................\n\n.Implicit numbering\nList items begin one to five period characters, followed by some white\nspace then the item text. Examples:\n\n.....................................................................\n. Arabic (decimal) numbered list item.\n.. Lower case alpha (letter) numbered list item.\n... Lower case roman numbered list item.\n.... Upper case alpha (letter) numbered list item.\n..... Upper case roman numbered list item.\n.....................................................................\n\nYou can use the 'style' attribute (also the first positional\nattribute) to specify an alternative numbering style. The numbered\nlist style can be one of the following values: 'arabic', 'loweralpha',\n'upperalpha', 'lowerroman', 'upperroman'.\n\nHere are some examples of bulleted and numbered lists:\n\n---------------------------------------------------------------------\n- Praesent eget purus quis magna eleifend eleifend.\n 1. Fusce euismod commodo velit.\n a. Fusce euismod commodo velit.\n b. Vivamus fringilla mi eu lacus.\n c. Donec eget arcu bibendum nunc consequat lobortis.\n 2. Vivamus fringilla mi eu lacus.\n i) Fusce euismod commodo velit.\n ii) Vivamus fringilla mi eu lacus.\n 3. Donec eget arcu bibendum nunc consequat lobortis.\n 4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n * Fusce euismod commodo velit.\n ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n vel.\n ** Vivamus fringilla mi eu lacus.\n * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n . Fusce euismod commodo velit.\n . Vivamus fringilla mi eu lacus.\n[upperroman]\n .. Fusce euismod commodo velit.\n .. Vivamus fringilla mi eu lacus.\n . Donec eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\n- Praesent eget purus quis magna eleifend eleifend.\n 1. Fusce euismod commodo velit.\n a. Fusce euismod commodo velit.\n b. Vivamus fringilla mi eu lacus.\n c. Donec eget arcu bibendum nunc consequat lobortis.\n 2. Vivamus fringilla mi eu lacus.\n i) Fusce euismod commodo velit.\n ii) Vivamus fringilla mi eu lacus.\n 3. Donec eget arcu bibendum nunc consequat lobortis.\n 4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n * Fusce euismod commodo velit.\n ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n vel.\n ** Vivamus fringilla mi eu lacus.\n * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n . Fusce euismod commodo velit.\n . Vivamus fringilla mi eu lacus.\n[upperroman]\n .. Fusce euismod commodo velit.\n .. Vivamus fringilla mi eu lacus.\n . Donec eget arcu bibendum nunc consequat lobortis.\n\nA predefined 'compact' option is available to bulleted and numbered\nlists -- this translates to the DocBook 'spacing=\"compact\"' lists\nattribute which may or may not be processed by the DocBook toolchain.\nExample:\n\n [options=\"compact\"]\n - Compact list item.\n - Another compact list item.\n\nTIP: To apply the 'compact' option globally define a document-wide\n'compact-option' attribute, e.g. using the `-a compact-option`\ncommand-line option.\n\nYou can set the list start number using the 'start' attribute (works\nfor HTML outputs and DocBook outputs processed by DocBook XSL\nStylesheets). Example:\n\n [start=7]\n . List item 7.\n . List item 8.\n\nLabeled Lists\n~~~~~~~~~~~~~\nLabeled list items consist of one or more text labels followed by the\ntext of the list item.\n\nAn item label begins a line with an alphanumeric character hard\nagainst the left margin and ends with two, three or four colons or two\nsemi-colons. A list item can have multiple labels, one per line.\n\nThe list item text consists of one or more lines of text starting\nafter the last label (either on the same line or a new line) and can\nbe followed by nested List or ListParagraph elements. Item text can be\noptionally indented.\n\nHere are some examples:\n\n---------------------------------------------------------------------\nIn::\nLorem::\n Fusce euismod commodo velit.\n\n Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n * Vivamus fringilla mi eu lacus.\n * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n Donec eget arcu bibendum nunc consequat lobortis.\n Suspendisse;;\n A massa id sem aliquam auctor.\n Morbi;;\n Pretium nulla vel lorem.\n In;;\n Dictum mauris in urna.\n Vivamus::: Fringilla mi eu lacus.\n Donec::: Eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\nIn::\nLorem::\n Fusce euismod commodo velit.\n\n Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n * Vivamus fringilla mi eu lacus.\n * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n Donec eget arcu bibendum nunc consequat lobortis.\n Suspendisse;;\n A massa id sem aliquam auctor.\n Morbi;;\n Pretium nulla vel lorem.\n In;;\n Dictum mauris in urna.\n Vivamus::: Fringilla mi eu lacus.\n Donec::: Eget arcu bibendum nunc consequat lobortis.\n\nHorizontal labeled list style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'horizontal' labeled list style (also the first positional\nattribute) places the list text side-by-side with the label instead of\nunder the label. Here is an example:\n\n---------------------------------------------------------------------\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit. Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n - Vivamus fringilla mi eu lacus.\n - Donec eget arcu bibendum nunc consequat lobortis.\n\n---------------------------------------------------------------------\n\nWhich render as:\n\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit. Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n - Vivamus fringilla mi eu lacus.\n - Donec eget arcu bibendum nunc consequat lobortis.\n\n[NOTE]\n=====================================================================\n- Current PDF toolchains do not make a good job of determining\n the relative column widths for horizontal labeled lists.\n- Nested horizontal labeled lists will generate DocBook validation\n errors because the 'DocBook XML V4.2' DTD does not permit nested\n informal tables (although <<X13,DocBook XSL Stylesheets>> and\n <<X31,dblatex>> process them correctly).\n- The label width can be set as a percentage of the total width by\n setting the 'width' attribute e.g. `width=\"10%\"`\n=====================================================================\n\nQuestion and Answer Lists\n~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'qanda' style labeled list for generating\nDocBook question and answer (Q&A) lists. Example:\n\n---------------------------------------------------------------------\n[qanda]\nQuestion one::\n Answer one.\nQuestion two::\n Answer two.\n---------------------------------------------------------------------\n\nRenders:\n\n[qanda]\nQuestion one::\n Answer one.\nQuestion two::\n Answer two.\n\nGlossary Lists\n~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'glossary' style labeled list for\ngenerating DocBook glossary lists. Example:\n\n---------------------------------------------------------------------\n[glossary]\nA glossary term::\n The corresponding definition.\nA second glossary term::\n The corresponding definition.\n---------------------------------------------------------------------\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output glossary lists must be located\nin a section that uses the 'glossary' <<X93,section markup template>>.\n\nBibliography Lists\n~~~~~~~~~~~~~~~~~~\nAsciiDoc comes with a predefined 'bibliography' bulleted list style\ngenerating DocBook bibliography entries. Example:\n\n---------------------------------------------------------------------\n[bibliography]\n.Optional list title\n- [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX\n Programming'. Addison-Wesley. ISBN 0-13-142901-9.\n- [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.\n 'DocBook - The Definitive Guide'. O'Reilly & Associates.\n 1999. ISBN 1-56592-580-7.\n---------------------------------------------------------------------\n\nThe `[[[<reference>]]]` syntax is a bibliography entry anchor, it\ngenerates an anchor named `<reference>` and additionally displays\n`[<reference>]` at the anchor position. For example `[[[taoup]]]`\ngenerates an anchor named `taoup` that displays `[taoup]` at the\nanchor position. Cite the reference from elsewhere your document using\n`<<taoup>>`, this displays a hyperlink (`[taoup]`) to the\ncorresponding bibliography entry anchor.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output bibliography lists must be\nlocated in a <<X93,bibliography section>>.\n\n[[X15]]\nList Item Continuation\n~~~~~~~~~~~~~~~~~~~~~~\nAnother list or a literal paragraph immediately following a list item\nis implicitly appended to the list item; to append other block\nelements to a list item you need to explicitly join them to the list\nitem with a 'list continuation' (a separator line containing a single\nplus character). Multiple block elements can be appended to a list\nitem using list continuations (provided they are legal list item\nchildren in the backend markup).\n\nHere are some examples of list item continuations: list item one\ncontains multiple continuations; list item two is continued with an\n<<X29,OpenBlock>> containing multiple elements:\n\n---------------------------------------------------------------------\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n---------------------------------------------------------------------\n\nRenders:\n\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n\n\n[[X92]]\nFootnotes\n---------\nThe shipped AsciiDoc configuration includes three footnote inline\nmacros:\n\n`footnote:[<text>]`::\n Generates a footnote with text `<text>`.\n\n`footnoteref:[<id>,<text>]`::\n Generates a footnote with a reference ID `<id>` and text `<text>`.\n\n`footnoteref:[<id>]`::\n Generates a reference to the footnote with ID `<id>`.\n\nThe footnote text can span multiple lines.\n\nThe 'xhtml11' and 'html5' backends render footnotes dynamically using\nJavaScript; 'html4' outputs do not use JavaScript and leave the\nfootnotes inline; 'docbook' footnotes are processed by the downstream\nDocBook toolchain.\n\nExample footnotes:\n\n A footnote footnote:[An example footnote.];\n a second footnote with a reference ID footnoteref:[note2,Second footnote.];\n finally a reference to the second footnote footnoteref:[note2].\n\nRenders:\n\nA footnote footnote:[An example footnote.];\na second footnote with a reference ID footnoteref:[note2,Second footnote.];\nfinally a reference to the second footnote footnoteref:[note2].\n\n\nIndexes\n-------\nThe shipped AsciiDoc configuration includes the inline macros for\ngenerating DocBook index entries.\n\n`indexterm:[<primary>,<secondary>,<tertiary>]`::\n`(((<primary>,<secondary>,<tertiary>)))`::\n This inline macro generates an index term (the `<secondary>` and\n `<tertiary>` positional attributes are optional). Example:\n `indexterm:[Tigers,Big cats]` (or, using the alternative syntax\n `(((Tigers,Big cats)))`. Index terms that have secondary and\n tertiary entries also generate separate index terms for the\n secondary and tertiary entries. The index terms appear in the\n index, not the primary text flow.\n\n`indexterm2:[<primary>]`::\n`((<primary>))`::\n This inline macro generates an index term that appears in both the\n index and the primary text flow. The `<primary>` should not be\n padded to the left or right with white space characters.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: Index entries only really make sense if you are generating\nDocBook markup -- DocBook conversion programs automatically generate\nan index at the point an 'Index' section appears in source document.\n\n\n[[X105]]\nCallouts\n--------\nCallouts are a mechanism for annotating verbatim text (for example:\nsource code, computer output and user input). Callout markers are\nplaced inside the annotated text while the actual annotations are\npresented in a callout list after the annotated text. Here's an\nexample:\n\n---------------------------------------------------------------------\n .MS-DOS directory listing\n -----------------------------------------------------\n 10/17/97 9:04 <DIR> bin\n 10/16/97 14:11 <DIR> DOS \\<1>\n 10/16/97 14:40 <DIR> Program Files\n 10/16/97 14:46 <DIR> TEMP\n 10/17/97 9:04 <DIR> tmp\n 10/16/97 14:37 <DIR> WINNT\n 10/16/97 14:25 119 AUTOEXEC.BAT \\<2>\n 2/13/94 6:21 54,619 COMMAND.COM \\<2>\n 10/16/97 14:25 115 CONFIG.SYS \\<2>\n 11/16/97 17:17 61,865,984 pagefile.sys\n 2/13/94 6:21 9,349 WINA20.386 \\<3>\n -----------------------------------------------------\n\n \\<1> This directory holds MS-DOS.\n \\<2> System startup code for DOS.\n \\<3> Some sort of Windows 3.1 hack.\n---------------------------------------------------------------------\n\nWhich renders:\n\n.MS-DOS directory listing\n-----------------------------------------------------\n10/17/97 9:04 <DIR> bin\n10/16/97 14:11 <DIR> DOS <1>\n10/16/97 14:40 <DIR> Program Files\n10/16/97 14:46 <DIR> TEMP\n10/17/97 9:04 <DIR> tmp\n10/16/97 14:37 <DIR> WINNT\n10/16/97 14:25 119 AUTOEXEC.BAT <2>\n 2/13/94 6:21 54,619 COMMAND.COM <2>\n10/16/97 14:25 115 CONFIG.SYS <2>\n11/16/97 17:17 61,865,984 pagefile.sys\n 2/13/94 6:21 9,349 WINA20.386 <3>\n-----------------------------------------------------\n\n<1> This directory holds MS-DOS.\n<2> System startup code for DOS.\n<3> Some sort of Windows 3.1 hack.\n\n.Explanation\n- The callout marks are whole numbers enclosed in angle brackets --\n they refer to the correspondingly numbered item in the following\n callout list.\n- By default callout marks are confined to 'LiteralParagraphs',\n 'LiteralBlocks' and 'ListingBlocks' (although this is a\n configuration file option and can be changed).\n- Callout list item numbering is fairly relaxed -- list items can\n start with `<n>`, `n>` or `>` where `n` is the optional list item\n number (in the latter case list items starting with a single `>`\n character are implicitly numbered starting at one).\n- Callout lists should not be nested.\n- Callout lists start list items hard against the left margin.\n- If you want to present a number inside angle brackets you'll need to\n escape it with a backslash to prevent it being interpreted as a\n callout mark.\n\nNOTE: Define the AsciiDoc 'icons' attribute (for example using the `-a\nicons` command-line option) to display callout icons.\n\nImplementation Notes\n~~~~~~~~~~~~~~~~~~~~\nCallout marks are generated by the 'callout' inline macro while\ncallout lists are generated using the 'callout' list definition. The\n'callout' macro and 'callout' list are special in that they work\ntogether. The 'callout' inline macro is not enabled by the normal\n'macros' substitutions option, instead it has its own 'callouts'\nsubstitution option.\n\nThe following attributes are available during inline callout macro\nsubstitution:\n\n`{index}`::\n The callout list item index inside the angle brackets.\n`{coid}`::\n An identifier formatted like `CO<listnumber>-<index>` that\n uniquely identifies the callout mark. For example `CO2-4`\n identifies the fourth callout mark in the second set of callout\n marks.\n\nThe `{coids}` attribute can be used during callout list item\nsubstitution -- it is a space delimited list of callout IDs that refer\nto the explanatory list item.\n\nIncluding callouts in included code\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou can annotate working code examples with callouts -- just remember\nto put the callouts inside source code comments. This example displays\nthe `test.py` source file (containing a single callout) using the\n'source' (code highlighter) filter:\n\n.AsciiDoc source\n---------------------------------------------------------------------\n [source,python]\n -------------------------------------------\n \\include::test.py[]\n -------------------------------------------\n\n \\<1> Print statement.\n---------------------------------------------------------------------\n\n.Included `test.py` source\n---------------------------------------------------------------------\nprint 'Hello World!' # \\<1>\n---------------------------------------------------------------------\n\n\nMacros\n------\nMacros are a mechanism for substituting parametrized text into output\ndocuments.\n\nMacros have a 'name', a single 'target' argument and an 'attribute\nlist'. The usual syntax is `<name>:<target>[<attrlist>]` (for\ninline macros) and `<name>::<target>[<attrlist>]` (for block\nmacros). Here are some examples:\n\n http://www.docbook.org/[DocBook.org]\n include::chapt1.txt[tabsize=2]\n mailto:srackham@gmail.com[]\n\n.Macro behavior\n- `<name>` is the macro name. It can only contain letters, digits or\n dash characters and cannot start with a dash.\n- The optional `<target>` cannot contain white space characters.\n- `<attrlist>` is a <<X21,list of attributes>> enclosed in square\n brackets.\n- `]` characters inside attribute lists must be escaped with a\n backslash.\n- Expansion of macro references can normally be escaped by prefixing a\n backslash character (see the AsciiDoc 'FAQ' for examples of\n exceptions to this rule).\n- Attribute references in block macros are expanded.\n- The substitutions performed prior to Inline macro macro expansion\n are determined by the inline context.\n- Macros are processed in the order they appear in the configuration\n file(s).\n- Calls to inline macros can be nested inside different inline macros\n (an inline macro call cannot contain a nested call to itself).\n- In addition to `<name>`, `<target>` and `<attrlist>` the\n `<passtext>` and `<subslist>` named groups are available to\n <<X77,passthrough macros>>. A macro is a passthrough macro if the\n definition includes a `<passtext>` named group.\n\nInline Macros\n~~~~~~~~~~~~~\nInline Macros occur in an inline element context. Predefined Inline\nmacros include 'URLs', 'image' and 'link' macros.\n\nURLs\n^^^^\n'http', 'https', 'ftp', 'file', 'mailto' and 'callto' URLs are\nrendered using predefined inline macros.\n\n- If you don't need a custom link caption you can enter the 'http',\n 'https', 'ftp', 'file' URLs and email addresses without any special\n macro syntax.\n- If the `<attrlist>` is empty the URL is displayed.\n\nHere are some examples:\n\n http://www.docbook.org/[DocBook.org]\n http://www.docbook.org/\n mailto:joe.bloggs@foobar.com[email Joe Bloggs]\n joe.bloggs@foobar.com\n\nWhich are rendered:\n\nhttp://www.docbook.org/[DocBook.org]\n\nhttp://www.docbook.org/\n\nmailto:joe.bloggs@foobar.com[email Joe Bloggs]\n\njoe.bloggs@foobar.com\n\nIf the `<target>` necessitates space characters use `%20`, for example\n`large%20image.png`.\n\nInternal Cross References\n^^^^^^^^^^^^^^^^^^^^^^^^^\nTwo AsciiDoc inline macros are provided for creating hypertext links\nwithin an AsciiDoc document. You can use either the standard macro\nsyntax or the (preferred) alternative.\n\n[[X30]]\nanchor\n++++++\nUsed to specify hypertext link targets:\n\n [[<id>,<xreflabel>]]\n anchor:<id>[<xreflabel>]\n\nThe `<id>` is a unique string that conforms to the output markup's\nanchor syntax. The optional `<xreflabel>` is the text to be displayed\nby captionless 'xref' macros that refer to this anchor. The optional\n`<xreflabel>` is only really useful when generating DocBook output.\nExample anchor:\n\n [[X1]]\n\nYou may have noticed that the syntax of this inline element is the\nsame as that of the <<X41,BlockId block element>>, this is no\ncoincidence since they are functionally equivalent.\n\nxref\n++++\nCreates a hypertext link to a document anchor.\n\n <<<id>,<caption>>>\n xref:<id>[<caption>]\n\nThe `<id>` refers to an anchor ID. The optional `<caption>` is the\nlink's displayed text. Example:\n\n <<X21,attribute lists>>\n\nIf `<caption>` is not specified then the displayed text is\nauto-generated:\n\n- The AsciiDoc 'xhtml11' and 'html5' backends display the `<id>`\n enclosed in square brackets.\n- If DocBook is produced the DocBook toolchain is responsible for the\n displayed text which will normally be the referenced figure, table\n or section title number followed by the element's title text.\n\nHere is an example:\n\n---------------------------------------------------------------------\n[[tiger_image]]\n.Tyger tyger\nimage::tiger.png[]\n\nThis can be seen in <<tiger_image>>.\n---------------------------------------------------------------------\n\nLinking to Local Documents\n^^^^^^^^^^^^^^^^^^^^^^^^^^\nHypertext links to files on the local file system are specified using\nthe 'link' inline macro.\n\n link:<target>[<caption>]\n\nThe 'link' macro generates relative URLs. The link macro `<target>` is\nthe target file name (relative to the file system location of the\nreferring document). The optional `<caption>` is the link's displayed\ntext. If `<caption>` is not specified then `<target>` is displayed.\nExample:\n\n link:downloads/foo.zip[download foo.zip]\n\nYou can use the `<filename>#<id>` syntax to refer to an anchor within\na target document but this usually only makes sense when targeting\nHTML documents.\n\n[[X9]]\nImages\n^^^^^^\nInline images are inserted into the output document using the 'image'\nmacro. The inline syntax is:\n\n image:<target>[<attributes>]\n\nThe contents of the image file `<target>` is displayed. To display the\nimage its file format must be supported by the target backend\napplication. HTML and DocBook applications normally support PNG or JPG\nfiles.\n\n`<target>` file name paths are relative to the location of the\nreferring document.\n\n[[X55]]\n.Image macro attributes\n- The optional 'alt' attribute is also the first positional attribute,\n it specifies alternative text which is displayed if the output\n application is unable to display the image file (see also\n http://htmlhelp.com/feature/art3.htm[Use of ALT texts in IMGs]). For\n example:\n\n image:images/logo.png[Company Logo]\n\n- The optional 'title' attribute provides a title for the image. The\n <<X49,block image macro>> renders the title alongside the image.\n The inline image macro displays the title as a popup ``tooltip'' in\n visual browsers (AsciiDoc HTML outputs only).\n\n- The optional `width` and `height` attributes scale the image size\n and can be used in any combination. The units are pixels. The\n following example scales the previous example to a height of 32\n pixels:\n\n image:images/logo.png[\"Company Logo\",height=32]\n\n- The optional `link` attribute is used to link the image to an\n external document. The following example links a screenshot\n thumbnail to a full size version:\n\n image:screen-thumbnail.png[height=32,link=\"screen.png\"]\n\n- The optional `scaledwidth` attribute is only used in DocBook block\n images (specifically for PDF documents). The following example\n scales the images to 75% of the available print width:\n\n image::images/logo.png[scaledwidth=\"75%\",alt=\"Company Logo\"]\n\n- The image `scale` attribute sets the DocBook `imagedata` element\n `scale` attribute.\n\n- The optional `align` attribute is used for horizontal image\n alignment. Allowed values are `center`, `left` and `right`. For\n example:\n\n image::images/tiger.png[\"Tiger image\",align=\"left\"]\n\n- The optional `float` attribute floats the image `left` or `right` on\n the page (works with HTML outputs only, has no effect on DocBook\n outputs). `float` and `align` attributes are mutually exclusive.\n Use the `unfloat::[]` block macro to stop floating.\n\nComment Lines\n^^^^^^^^^^^^^\nSee <<X25,comment block macro>>.\n\nBlock Macros\n~~~~~~~~~~~~\nA Block macro reference must be contained in a single line separated\neither side by a blank line or a block delimiter.\n\nBlock macros behave just like Inline macros, with the following\ndifferences:\n\n- They occur in a block context.\n- The default syntax is `<name>::<target>[<attrlist>]` (two\n colons, not one).\n- Markup template section names end in `-blockmacro` instead of\n `-inlinemacro`.\n\nBlock Identifier\n^^^^^^^^^^^^^^^^\nThe Block Identifier macro sets the `id` attribute and has the same\nsyntax as the <<X30,anchor inline macro>> since it performs\nessentially the same function -- block templates use the `id`\nattribute as a block element ID. For example:\n\n [[X30]]\n\nThis is equivalent to the `[id=\"X30\"]` <<X79,AttributeList element>>).\n\n[[X49]]\nImages\n^^^^^^\nThe 'image' block macro is used to display images in a block context.\nThe syntax is:\n\n image::<target>[<attributes>]\n\nThe block `image` macro has the same <<X55,macro attributes>> as it's\n<<X9,inline image macro>> counterpart.\n\nBlock images can be titled by preceding the 'image' macro with a\n'BlockTitle'. DocBook toolchains normally number titled block images\nand optionally list them in an automatically generated 'List of\nFigures' backmatter section.\n\nThis example:\n\n .Main circuit board\n image::images/layout.png[J14P main circuit board]\n\nis equivalent to:\n\n image::images/layout.png[\"J14P main circuit board\",\n title=\"Main circuit board\"]\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n .Main circuit board\n [caption=\"Figure 2: \"]\n image::images/layout.png[J14P main circuit board]\n\n[[X66]]\n.Embedding images in XHTML documents\n*********************************************************************\nIf you define the `data-uri` attribute then images will be embedded in\nXHTML outputs using the\nhttp://en.wikipedia.org/wiki/Data:_URI_scheme[data URI scheme]. You\ncan use the 'data-uri' attribute with the 'xhtml11' and 'html5'\nbackends to produce single-file XHTML documents with embedded images\nand CSS, for example:\n\n $ asciidoc -a data-uri mydocument.txt\n\n[NOTE]\n======\n- All current popular browsers support data URIs, although versions\n of Internet Explorer prior to version 8 do not.\n- Some browsers limit the size of data URIs.\n======\n*********************************************************************\n\n[[X25]]\nComment Lines\n^^^^^^^^^^^^^\nSingle lines starting with two forward slashes hard up against the\nleft margin are treated as comments. Comment lines do not appear in\nthe output unless the 'showcomments' attribute is defined. Comment\nlines have been implemented as both block and inline macros so a\ncomment line can appear as a stand-alone block or within block elements\nthat support inline macro expansion. Example comment line:\n\n // This is a comment.\n\nIf the 'showcomments' attribute is defined comment lines are written\nto the output:\n\n- In DocBook the comment lines are enclosed by the 'remark' element\n (which may or may not be rendered by your toolchain).\n- The 'showcomments' attribute does not expose <<X26,Comment Blocks>>.\n Comment Blocks are never passed to the output.\n\nSystem Macros\n~~~~~~~~~~~~~\nSystem macros are block macros that perform a predefined task and are\nhardwired into the asciidoc(1) program.\n\n- You can escape system macros with a leading backslash character\n (as you can with other macros).\n- The syntax and tasks performed by system macros is built into\n asciidoc(1) so they don't appear in configuration files. You can\n however customize the syntax by adding entries to a configuration\n file `[macros]` section.\n\n[[X63]]\nInclude Macros\n^^^^^^^^^^^^^^\nThe `include` and `include1` system macros to include the contents of\na named file into the source document.\n\nThe `include` macro includes a file as if it were part of the parent\ndocument -- tabs are expanded and system macros processed. The\ncontents of `include1` files are not subject to tab expansion or\nsystem macro processing nor are attribute or lower priority\nsubstitutions performed. The `include1` macro's intended use is to\ninclude verbatim embedded CSS or scripts into configuration file\nheaders. Example:\n\n------------------------------------\n\\include::chapter1.txt[tabsize=4]\n------------------------------------\n\n.Include macro behavior\n- If the included file name is specified with a relative path then the\n path is relative to the location of the referring document.\n- Include macros can appear inside configuration files.\n- Files included from within 'DelimitedBlocks' are read to completion\n to avoid false end-of-block underline termination.\n- Attribute references are expanded inside the include 'target'; if an\n attribute is undefined then the included file is silently skipped.\n- The 'tabsize' macro attribute sets the number of space characters to\n be used for tab expansion in the included file (not applicable to\n `include1` macro).\n- The 'depth' macro attribute sets the maximum permitted number of\n subsequent nested includes (not applicable to `include1` macro which\n does not process nested includes). Setting 'depth' to '1' disables\n nesting inside the included file. By default, nesting is limited to\n a depth of ten.\n- If the he 'warnings' attribute is set to 'False' (or any other\n Python literal that evaluates to boolean false) then no warning\n message is printed if the included file does not exist. By default\n 'warnings' are enabled.\n- Internally the `include1` macro is translated to the `include1`\n system attribute which means it must be evaluated in a region where\n attribute substitution is enabled. To inhibit nested substitution in\n included files it is preferable to use the `include` macro and set\n the attribute `depth=1`.\n\nConditional Inclusion Macros\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nLines of text in the source document can be selectively included or\nexcluded from processing based on the existence (or not) of a document\nattribute.\n\nDocument text between the `ifdef` and `endif` macros is included if a\ndocument attribute is defined:\n\n ifdef::<attribute>[]\n :\n endif::<attribute>[]\n\nDocument text between the `ifndef` and `endif` macros is not included\nif a document attribute is defined:\n\n ifndef::<attribute>[]\n :\n endif::<attribute>[]\n\n`<attribute>` is an attribute name which is optional in the trailing\n`endif` macro.\n\nIf you only want to process a single line of text then the text can be\nput inside the square brackets and the `endif` macro omitted, for\nexample:\n\n ifdef::revnumber[Version number 42]\n\nIs equivalent to:\n\n ifdef::revnumber[]\n Version number 42\n endif::revnumber[]\n\n'ifdef' and 'ifndef' macros also accept multiple attribute names:\n\n- Multiple ',' separated attribute names evaluate to defined if one\n or more of the attributes is defined, otherwise it's value is\n undefined.\n- Multiple '+' separated attribute names evaluate to defined if all\n of the attributes is defined, otherwise it's value is undefined.\n\nDocument text between the `ifeval` and `endif` macros is included if\nthe Python expression inside the square brackets is true. Example:\n\n ifeval::[{rs458}==2]\n :\n endif::[]\n\n- Document attribute references are expanded before the expression is\n evaluated.\n- If an attribute reference is undefined then the expression is\n considered false.\n\nTake a look at the `*.conf` configuration files in the AsciiDoc\ndistribution for examples of conditional inclusion macro usage.\n\nExecutable system macros\n^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'eval', 'sys' and 'sys2' block macros exhibit the same behavior as\ntheir same named <<X24, system attribute references>>. The difference\nis that system macros occur in a block macro context whereas system\nattributes are confined to inline contexts where attribute\nsubstitution is enabled.\n\nThe following example displays a long directory listing inside a\nliteral block:\n\n ------------------\n sys::[ls -l *.txt]\n ------------------\n\nNOTE: There are no block macro versions of the 'eval3' and 'sys3'\nsystem attributes.\n\nTemplate System Macro\n^^^^^^^^^^^^^^^^^^^^^\nThe `template` block macro allows the inclusion of one configuration\nfile template section within another. The following example includes\nthe `[admonitionblock]` section in the `[admonitionparagraph]`\nsection:\n\n [admonitionparagraph]\n template::[admonitionblock]\n\n.Template macro behavior\n- The `template::[]` macro is useful for factoring configuration file\n markup.\n- `template::[]` macros cannot be nested.\n- `template::[]` macro expansion is applied after all configuration\n files have been read.\n\n\n[[X77]]\nPassthrough macros\n~~~~~~~~~~~~~~~~~~\nPassthrough macros are analogous to <<X76,passthrough blocks>> and are\nused to pass text directly to the output. The substitution performed\non the text is determined by the macro definition but can be overridden\nby the `<subslist>`. The usual syntax is\n`<name>:<subslist>[<passtext>]` (for inline macros) and\n`<name>::<subslist>[<passtext>]` (for block macros). Passthroughs, by\ndefinition, take precedence over all other text substitutions.\n\npass::\n Inline and block. Passes text unmodified (apart from explicitly\n specified substitutions). Examples:\n\n pass:[<q>To be or not to be</q>]\n pass:attributes,quotes[<u>the '{author}'</u>]\n\nasciimath, latexmath::\n Inline and block. Passes text unmodified. Used for\n <<X78,mathematical formulas>>.\n\n\\+++::\n Inline and block. The triple-plus passthrough is functionally\n identical to the 'pass' macro but you don't have to escape `]`\n characters and you can prefix with quoted attributes in the inline\n version. Example:\n\n Red [red]+++`sum_(i=1)\\^n i=(n(n+1))/2`$+++ AsciiMathML formula\n\n$$::\n Inline and block. The double-dollar passthrough is functionally\n identical to the triple-plus passthrough with one exception: special\n characters are escaped. Example:\n\n $$`[[a,b],[c,d]]((n),(k))`$$\n\n[[X80]]`::\n Text quoted with single backtick characters constitutes an 'inline\n literal' passthrough. The enclosed text is rendered in a monospaced\n font and is only subject to special character substitution. This\n makes sense since monospace text is usually intended to be rendered\n literally and often contains characters that would otherwise have to\n be escaped. If you need monospaced text containing inline\n substitutions use a <<X81,plus character instead of a backtick>>.\n\nMacro Definitions\n~~~~~~~~~~~~~~~~~\nEach entry in the configuration `[macros]` section is a macro\ndefinition which can take one of the following forms:\n\n`<pattern>=<name>[<subslist]`:: Inline macro definition.\n`<pattern>=#<name>[<subslist]`:: Block macro definition.\n`<pattern>=+<name>[<subslist]`:: System macro definition.\n`<pattern>`:: Delete the existing macro with this `<pattern>`.\n\n`<pattern>` is a Python regular expression and `<name>` is the name of\na markup template. If `<name>` is omitted then it is the value of the\nregular expression match group named 'name'. The optional\n`[<subslist]` is a comma-separated list of substitution names enclosed\nin `[]` brackets, it sets the default substitutions for passthrough\ntext, if omitted then no passthrough substitutions are performed.\n\n.Pattern named groups\nThe following named groups can be used in macro `<pattern>` regular\nexpressions and are available as markup template attributes:\n\nname::\n The macro name.\n\ntarget::\n The macro target.\n\nattrlist::\n The macro attribute list.\n\npasstext::\n Contents of this group are passed unmodified to the output subject\n only to 'subslist' substitutions.\n\nsubslist::\n Processed as a comma-separated list of substitution names for\n 'passtext' substitution, overrides the the macro definition\n 'subslist'.\n\n.Here's what happens during macro substitution\n- Each contextually relevant macro 'pattern' from the `[macros]`\n section is matched against the input source line.\n- If a match is found the text to be substituted is loaded from a\n configuration markup template section named like\n `<name>-inlinemacro` or `<name>-blockmacro` (depending on the macro\n type).\n- Global and macro attribute list attributes are substituted in the\n macro's markup template.\n- The substituted template replaces the macro reference in the output\n document.\n\n\n[[X98]]\nHTML 5 audio and video block macros\n-----------------------------------\nThe 'html5' backend 'audio' and 'video' block macros generate the HTML\n5 'audio' and 'video' elements respectively. They follow the usual\nAsciiDoc block macro syntax `<name>::<target>[<attrlist>]` where:\n\n[horizontal]\n`<name>`:: 'audio' or 'video'.\n`<target>`:: The URL or file name of the video or audio file.\n`<attrlist>`:: A list of named attributes (see below).\n\n.Audio macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name | Value\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' which correspond to the same-named HTML 5 'audio'\nelement boolean attributes. By default the player 'controls' are\nenabled, include the 'nocontrols' option value to hide them.\n|====================================================================\n\n.Video macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name | Value\n|height | The height of the player in pixels.\n|width | The width of the player in pixels.\n|poster | The URL or file name of an image representing the video.\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' and 'nocontrols'. The 'autoplay' and 'loop' options\ncorrespond to the same-named HTML 5 'video' element boolean\nattributes. By default the player 'controls' are enabled, include the\n'nocontrols' option value to hide them.\n|====================================================================\n\nExamples:\n\n---------------------------------------------------------------------\naudio::images/example.ogg[]\n\nvideo::gizmo.ogv[width=200,options=\"nocontrols,autoplay\"]\n\n.Example video\nvideo::gizmo.ogv[]\n\nvideo::http://www.808.dk/pics/video/gizmo.ogv[]\n---------------------------------------------------------------------\n\nIf your needs are more complex put raw HTML 5 in a markup block, for\nexample (from http://www.808.dk/?code-html-5-video):\n\n---------------------------------------------------------------------\n++++\n<video poster=\"pics/video/gizmo.jpg\" id=\"video\" style=\"cursor: pointer;\" >\n <source src=\"pics/video/gizmo.mp4\" />\n <source src=\"pics/video/gizmo.webm\" type=\"video/webm\" />\n <source src=\"pics/video/gizmo.ogv\" type=\"video/ogg\" />\n Video not playing? <a href=\"pics/video/gizmo.mp4\">Download file</a> instead.\n</video>\n\n<script type=\"text/javascript\">\n var video = document.getElementById('video');\n video.addEventListener('click',function(){\n video.play();\n },false);\n</script>\n++++\n---------------------------------------------------------------------\n\n\nTables\n------\nThe AsciiDoc table syntax looks and behaves like other delimited block\ntypes and supports standard <<X73,block configuration entries>>.\nFormatting is easy to read and, just as importantly, easy to enter.\n\n- Cells and columns can be formatted using built-in customizable styles.\n- Horizontal and vertical cell alignment can be set on columns and\n cell.\n- Horizontal and vertical cell spanning is supported.\n\n.Use tables sparingly\n*********************************************************************\nWhen technical users first start creating documents, tables (complete\nwith column spanning and table nesting) are often considered very\nimportant. The reality is that tables are seldom used, even in\ntechnical documentation.\n\nTry this exercise: thumb through your library of technical books,\nyou'll be surprised just how seldom tables are actually used, even\nless seldom are tables containing block elements (such as paragraphs\nor lists) or spanned cells. This is no accident, like figures, tables\nare outside the normal document flow -- tables are for consulting not\nfor reading.\n\nTables are designed for, and should normally only be used for,\ndisplaying column oriented tabular data.\n*********************************************************************\n\nExample tables\n~~~~~~~~~~~~~~\n\n.Simple table\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n---------------------------------------------------------------------\n\n.Columns formatted with strong, monospaced and emphasis styles\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n| 2+|Columns 2 and 3\n|1 |Item 1 |Item 1\n|2 |Item 2 |Item 2\n|3 |Item 3 |Item 3\n|4 |Item 4 |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.An example table\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n| 2+|Columns 2 and 3\n|1 |Item 1 |Item 1\n|2 |Item 2 |Item 2\n|3 |Item 3 |Item 3\n|4 |Item 4 |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n---------------------------------------------------------------------\n\n.Horizontal and vertical source data\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n\nShort cells can be entered horizontally, longer cells vertically. The\ndefault behavior is to strip leading and trailing blank lines within a\ncell. These characteristics aid readability and data entry.\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.Windtrainer workouts\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n---------------------------------------------------------------------\n\n.A table with externally sourced CSV data\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\ninclude::customers.csv[]\n|===================================================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\n\\include::customers.csv[]\n|===================================================\n---------------------------------------------------------------------\n\n\n.Cell spans, alignments and styles\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n---------------------------------------------------------------------\n\n[[X68]]\nTable input data formats\n~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc table data can be 'psv', 'dsv' or 'csv' formatted. The\ndefault table format is 'psv'.\n\nAsciiDoc 'psv' ('Prefix Separated Values') and 'dsv' ('Delimiter\nSeparated Values') formats are cell oriented -- the table is treated\nas a sequence of cells -- there are no explicit row separators.\n\n- 'psv' prefixes each cell with a separator whereas 'dsv' delimits\n cells with a separator.\n- 'psv' and 'dsv' separators are Python regular expressions.\n- The default 'psv' separator contains <<X84, cell specifier>> related\n named regular expression groups.\n- The default 'dsv' separator is `:|\\n` (a colon or a new line\n character).\n- 'psv' and 'dsv' cell separators can be escaped by preceding them\n with a backslash character.\n\nHere are four 'psv' cells (the second item spans two columns; the\nlast contains an escaped separator):\n\n |One 2+|Two and three |A \\| separator character\n\n'csv' is the quasi-standard row oriented 'Comma Separated Values\n(CSV)' format commonly used to import and export spreadsheet and\ndatabase data.\n\n[[X69]]\nTable attributes\n~~~~~~~~~~~~~~~~\nTables can be customized by the following attributes:\n\nformat::\n'psv' (default), 'dsv' or 'csv' (See <<X68, Table Data Formats>>).\n\nseparator::\nThe cell separator. A Python regular expression ('psv' and 'dsv'\nformats) or a single character ('csv' format).\n\nframe::\nDefines the table border and can take the following values: 'topbot'\n(top and bottom), 'all' (all sides), 'none' and 'sides' (left and\nright sides). The default value is 'all'.\n\ngrid::\nDefines which ruler lines are drawn between table rows and columns.\nThe 'grid' attribute value can be any of the following values: 'none',\n'cols', 'rows' and 'all'. The default value is 'all'.\n\nalign::\nUse the 'align' attribute to horizontally align the table on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nThe following values are valid: 'left', 'right', and 'center'.\n\nfloat::\nUse the 'float' attribute to float the table 'left' or 'right' on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nFloating only makes sense in conjunction with a table 'width'\nattribute value of less than 100% (otherwise the table will take up\nall the available space). 'float' and 'align' attributes are mutually\nexclusive. Use the `unfloat::[]` block macro to stop floating.\n\nhalign::\nUse the 'halign' attribute to horizontally align all cells in a table.\nThe following values are valid: 'left', 'right', and 'center'\n(defaults to 'left'). Overridden by <<X70,Column specifiers>> and\n<<X84,Cell specifiers>>.\n\nvalign::\nUse the 'valign' attribute to vertically align all cells in a table.\nThe following values are valid: 'top', 'bottom', and 'middle'\n(defaults to 'top'). Overridden by <<X70,Column specifiers>> and\n<<X84,Cell specifiers>>.\n\noptions::\nThe 'options' attribute can contain comma separated values, for\nexample: 'header', 'footer'. By default header and footer rows are\nomitted. See <<X74,attribute options>> for a complete list of\navailable table options.\n\ncols::\nThe 'cols' attribute is a comma separated list of <<X70,column\nspecifiers>>. For example `cols=\"2<p,2*,4p,>\"`.\n\n- If 'cols' is present it must specify all columns.\n- If the 'cols' attribute is not specified the number of columns is\n calculated as the number of data items in the *first line* of the\n table.\n- The degenerate form for the 'cols' attribute is an integer\n specifying the number of columns e.g. `cols=4`.\n\nwidth::\nThe 'width' attribute is expressed as a percentage value\n('\"1%\"'...'\"99%\"'). The width specifies the table width relative to\nthe available width. HTML backends use this value to set the table\nwidth attribute. It's a bit more complicated with DocBook, see the\n<<X89,DocBook table widths>> sidebar.\n\nfilter::\nThe 'filter' attribute defines an external shell command that is\ninvoked for each cell. The built-in 'asciidoc' table style is\nimplemented using a filter.\n\n[[X89]]\n.DocBook table widths\n**********************************************************************\nThe AsciiDoc docbook backend generates CALS tables. CALS tables do not\nsupport a table width attribute -- table width can only be controlled\nby specifying absolute column widths.\n\nSpecifying absolute column widths is not media independent because\ndifferent presentation media have different physical dimensions. To\nget round this limitation both\nhttp://www.sagehill.net/docbookxsl/Tables.html#TableWidth[DocBook XSL\nStylesheets] and\nhttp://dblatex.sourceforge.net/doc/manual/ch03s05.html#sec-table-width[dblatex]\nhave implemented table width processing instructions for setting the\ntable width as a percentage of the available width. AsciiDoc emits\nthese processing instructions if the 'width' attribute is set along\nwith proportional column widths (the AsciiDoc docbook backend\n'pageunits' attribute defaults to '*').\n\nTo generate DocBook tables with absolute column widths set the\n'pageunits' attribute to a CALS absolute unit such as 'pt' and set the\n'pagewidth' attribute to match the width of the presentation media.\n**********************************************************************\n\n[[X70]]\nColumn Specifiers\n~~~~~~~~~~~~~~~~~\nColumn specifiers define how columns are rendered and appear in the\ntable <<X69,cols attribute>>. A column specifier consists of an\noptional column multiplier followed by optional alignment, width and\nstyle values and is formatted like:\n\n [<multiplier>*][<align>][<width>][<style>]\n\n- All components are optional. The multiplier must be first and the\n style last. The order of `<align>` or `<width>` is not important.\n- Column `<width>` can be either an integer proportional value (1...)\n or a percentage (1%...100%). The default value is 1. To ensure\n portability across different backends, there is no provision for\n absolute column widths (not to be confused with output column width\n <<X72,markup attributes>> which are available in both percentage and\n absolute units).\n- The '<align>' column alignment specifier is formatted like:\n\n [<horizontal>][.<vertical>]\n+\nWhere `<horizontal>` and `<vertical>` are one of the following\ncharacters: `<`, `^` or `>` which represent 'left', 'center' and\n'right' horizontal alignment or 'top', 'middle' and 'bottom' vertical\nalignment respectively.\n\n- A `<multiplier>` can be used to specify repeated columns e.g.\n `cols=\"4*<\"` specifies four left-justified columns. The default\n multiplier value is 1.\n- The `<style>` name specifies a <<X71,table style>> to used to markup\n column cells (you can use the full style names if you wish but the\n first letter is normally sufficient).\n- Column specific styles are not applied to header rows.\n\n[[X84]]\nCell Specifiers\n~~~~~~~~~~~~~~~\nCell specifiers allow individual cells in 'psv' formatted tables to be\nspanned, multiplied, aligned and styled. Cell specifiers prefix 'psv'\n`|` delimiters and are formatted like:\n\n [<span>*|+][<align>][<style>]\n\n- '<span>' specifies horizontal and vertical cell spans ('+' operator) or\n the number of times the cell is replicated ('*' operator). '<span>'\n is formatted like:\n\n [<colspan>][.<rowspan>]\n+\nWhere `<colspan>` and `<rowspan>` are integers specifying the number of\ncolumns and rows to span.\n\n- `<align>` specifies horizontal and vertical cell alignment an is the\n same as in <<X70,column specifiers>>.\n- A `<style>` value is the first letter of <<X71,table style>> name.\n\nFor example, the following 'psv' formatted cell will span two columns\nand the text will be centered and emphasized:\n\n `2+^e| Cell text`\n\n[[X71]]\nTable styles\n~~~~~~~~~~~~\nTable styles can be applied to the entire table (by setting the\n'style' attribute in the table's attribute list) or on a per column\nbasis (by specifying the style in the table's <<X69,cols attribute>>).\nTable data can be formatted using the following predefined styles:\n\ndefault::\nThe default style: AsciiDoc inline text formatting; blank lines are\ntreated as paragraph breaks.\n\nemphasis::\nLike default but all text is emphasised.\n\nmonospaced::\nLike default but all text is in a monospaced font.\n\nstrong::\nLike default but all text is bold.\n\nheader::\nApply the same style as the table header. Normally used to create a\nvertical header in the first column.\n\nasciidoc::\nWith this style table cells can contain any of the AsciiDoc elements\nthat are allowed inside document sections. This style runs asciidoc(1)\nas a filter to process cell contents. See also <<X83,Docbook table\nlimitations>>.\n\nliteral::\nNo text formatting; monospaced font; all line breaks are retained\n(the same as the AsciiDoc <<X65,LiteralBlock>> element).\n\nverse::\nAll line breaks are retained (just like the AsciiDoc <<X94,verse\nparagraph style>>).\n\n[[X72]]\nMarkup attributes\n~~~~~~~~~~~~~~~~~\nAsciiDoc makes a number of attributes available to table markup\ntemplates and tags. Column specific attributes are available when\nsubstituting the 'colspec' cell data tags.\n\npageunits::\nDocBook backend only. Specifies table column absolute width units.\nDefaults to '*'.\n\npagewidth::\nDocBook backend only. The nominal output page width in 'pageunit'\nunits. Used to calculate CALS tables absolute column and table\nwidths. Defaults to '425'.\n\ntableabswidth::\nInteger value calculated from 'width' and 'pagewidth' attributes.\nIn 'pageunit' units.\n\ntablepcwidth::\nTable width expressed as a percentage of the available width. Integer\nvalue (0..100).\n\ncolabswidth::\nInteger value calculated from 'cols' column width, 'width' and\n'pagewidth' attributes. In 'pageunit' units.\n\ncolpcwidth::\nColumn width expressed as a percentage of the table width. Integer\nvalue (0..100).\n\ncolcount::\nTotal number of table columns.\n\nrowcount::\nTotal number of table rows.\n\nhalign::\nHorizontal cell content alignment: 'left', 'right' or 'center'.\n\nvalign::\nVertical cell content alignment: 'top', 'bottom' or 'middle'.\n\ncolnumber, colstart::\nThe number of the leftmost column occupied by the cell (1...).\n\ncolend::\nThe number of the rightmost column occupied by the cell (1...).\n\ncolspan::\nNumber of columns the cell should span.\n\nrowspan::\nNumber of rows the cell should span (1...).\n\nmorerows::\nNumber of additional rows the cell should span (0...).\n\nNested tables\n~~~~~~~~~~~~~\nAn alternative 'psv' separator character '!' can be used (instead of\n'|') in nested tables. This allows a single level of table nesting.\nColumns containing nested tables must use the 'asciidoc' style. An\nexample can be found in `./examples/website/newtables.txt`.\n\n[[X83]]\nDocBook table limitations\n~~~~~~~~~~~~~~~~~~~~~~~~~\nFully implementing tables is not trivial, some DocBook toolchains do\nbetter than others. AsciiDoc HTML table outputs are rendered\ncorrectly in all the popular browsers -- if your DocBook generated\ntables don't look right compare them with the output generated by the\nAsciiDoc 'xhtml11' backend or try a different DocBook toolchain. Here\nis a list of things to be aware of:\n\n- Although nested tables are not legal in DocBook 4 the FOP and\n dblatex toolchains will process them correctly. If you use `a2x(1)`\n you will need to include the `--no-xmllint` option to suppress\n DocBook validation errors.\n+\nNOTE: In theory you can nest DocBook 4 tables one level using the\n'entrytbl' element, but not all toolchains process 'entrytbl'.\n\n- DocBook only allows a subset of block elements inside table cells so\n not all AsciiDoc elements produce valid DocBook inside table cells.\n If you get validation errors running `a2x(1)` try the `--no-xmllint`\n option, toolchains will often process nested block elements such as\n sidebar blocks and floating titles correctly even though, strictly\n speaking, they are not legal.\n\n- Text formatting in cells using the 'monospaced' table style will\n raise validation errors because the DocBook 'literal' element was\n not designed to support formatted text (using the 'literal' element\n is a kludge on the part of AsciiDoc as there is no easy way to set\n the font style in DocBook.\n\n- Cell alignments are ignored for 'verse', 'literal' or 'asciidoc'\n table styles.\n\n\n[[X1]]\nManpage Documents\n-----------------\nSooner or later, if you program in a UNIX environment, you're going\nto have to write a man page.\n\nBy observing a couple of additional conventions (detailed below) you\ncan write AsciiDoc files that will generate HTML and PDF man pages\nplus the native manpage roff format. The easiest way to generate roff\nmanpages from AsciiDoc source is to use the a2x(1) command. The\nfollowing example generates a roff formatted manpage file called\n`asciidoc.1` (a2x(1) uses asciidoc(1) to convert `asciidoc.1.txt` to\nDocBook which it then converts to roff using DocBook XSL Stylesheets):\n\n a2x --doctype manpage --format manpage asciidoc.1.txt\n\n.Viewing and printing manpage files\n**********************************************************************\nUse the `man(1)` command to view the manpage file:\n\n $ man -l asciidoc.1\n\nTo print a high quality man page to a postscript printer:\n\n $ man -l -Tps asciidoc.1 | lpr\n\nYou could also create a PDF version of the man page by converting\nPostScript to PDF using `ps2pdf(1)`:\n\n $ man -l -Tps asciidoc.1 | ps2pdf - asciidoc.1.pdf\n\nThe `ps2pdf(1)` command is included in the Ghostscript distribution.\n**********************************************************************\n\nTo find out more about man pages view the `man(7)` manpage\n(`man 7 man` and `man man-pages` commands).\n\n\nDocument Header\n~~~~~~~~~~~~~~~\nA manpage document Header is mandatory. The title line contains the\nman page name followed immediately by the manual section number in\nbrackets, for example 'ASCIIDOC(1)'. The title name should not contain\nwhite space and the manual section number is a single digit optionally\nfollowed by a single character.\n\nThe NAME Section\n~~~~~~~~~~~~~~~~\nThe first manpage section is mandatory, must be titled 'NAME' and must\ncontain a single paragraph (usually a single line) consisting of a\nlist of one or more comma separated command name(s) separated from the\ncommand purpose by a dash character. The dash must have at least one\nwhite space character on either side. For example:\n\n printf, fprintf, sprintf - print formatted output\n\nThe SYNOPSIS Section\n~~~~~~~~~~~~~~~~~~~~\nThe second manpage section is mandatory and must be titled 'SYNOPSIS'.\n\nrefmiscinfo attributes\n~~~~~~~~~~~~~~~~~~~~~~\nIn addition to the automatically created man page <<X60,intrinsic\nattributes>> you can assign DocBook\nhttp://www.docbook.org/tdg5/en/html/refmiscinfo.html[refmiscinfo]\nelement 'source', 'version' and 'manual' values using AsciiDoc\n`{mansource}`, `{manversion}` and `{manmanual}` attributes\nrespectively. This example is from the AsciiDoc header of a man page\nsource file:\n\n :man source: AsciiDoc\n :man version: {revnumber}\n :man manual: AsciiDoc Manual\n\n\n[[X78]]\nMathematical Formulas\n---------------------\nThe 'asciimath' and 'latexmath' <<X77,passthrough macros>> along with\n'asciimath' and 'latexmath' <<X76,passthrough blocks>> provide a\n(backend dependent) mechanism for rendering mathematical formulas. You\ncan use the following math markups:\n\nNOTE: The 'latexmath' macro used to include 'LaTeX Math' in DocBook\noutputs is not the same as the 'latexmath' macro used to include\n'LaTeX MathML' in XHTML outputs. 'LaTeX Math' applies to DocBook\noutputs that are processed by <<X31,dblatex>> and is normally used to\ngenerate PDF files. 'LaTeXMathML' is very much a subset of 'LaTeX\nMath' and applies to XHTML documents.\n\nLaTeX Math\n~~~~~~~~~~\nftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf[LaTeX\nmath] can be included in documents that are processed by\n<<X31,dblatex(1)>>. Example inline formula:\n\n latexmath:[$C = \\alpha + \\beta Y^{\\gamma} + \\epsilon$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmath.txt` file.\n\nASCIIMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThe older ASCIIMathML 1.47 version is used instead of version 2\nbecause:\n\n1. Version 2 doesn't work when embedded.\n2. Version 2 is much larger.\n/////////////////////////////////////////////////////////////////////\n\nhttp://www1.chapman.edu/~jipsen/mathml/asciimath.html[ASCIIMathML]\nformulas can be included in XHTML documents generated using the\n'xhtml11' and 'html5' backends. To enable ASCIIMathML support you must\ndefine the 'asciimath' attribute, for example using the `-a asciimath`\ncommand-line option. Example inline formula:\n\n asciimath:[`x/x={(1,if x!=0),(text{undefined},if x=0):}`]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/asciimathml.txt` file.\n\nLaTeXMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThere is an http://math.etsu.edu/LaTeXMathML/[extended LaTeXMathML\nversion] by Jeff Knisley, in addition to a JavaScript file it requires\nthe inclusion of a CSS file.\n/////////////////////////////////////////////////////////////////////\n\n'LaTeXMathML' allows LaTeX Math style formulas to be included in XHTML\ndocuments generated using the AsciiDoc 'xhtml11' and 'html5' backends.\nAsciiDoc uses the\nhttp://www.maths.nottingham.ac.uk/personal/drw/lm.html[original\nLaTeXMathML] by Douglas Woodall. 'LaTeXMathML' is derived from\nASCIIMathML and is for users who are more familiar with or prefer\nusing LaTeX math formulas (it recognizes a subset of LaTeX Math, the\ndifferences are documented on the 'LaTeXMathML' web page). To enable\nLaTeXMathML support you must define the 'latexmath' attribute, for\nexample using the `-a latexmath` command-line option. Example inline\nformula:\n\n latexmath:[$\\sum_{n=1}^\\infty \\frac{1}{2^n}$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmathml.txt` file.\n\nMathML\n~~~~~~\nhttp://www.w3.org/Math/[MathML] is a low level XML markup for\nmathematics. AsciiDoc has no macros for MathML but users familiar with\nthis markup could use passthrough macros and passthrough blocks to\ninclude MathML in output documents.\n\n\n[[X7]]\nConfiguration Files\n-------------------\nAsciiDoc source file syntax and output file markup is largely\ncontrolled by a set of cascading, text based, configuration files. At\nruntime The AsciiDoc default configuration files are combined with\noptional user and document specific configuration files.\n\nConfiguration File Format\n~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files contain named sections. Each section begins with a\nsection name in square brackets []. The section body consists of the\nlines of text between adjacent section headings.\n\n- Section names consist of one or more alphanumeric, underscore or\n dash characters and cannot begin or end with a dash.\n- Lines starting with a '#' character are treated as comments and\n ignored.\n- If the section name is prefixed with a '+' character then the\n section contents is appended to the contents of an already existing\n same-named section.\n- Otherwise same-named sections and section entries override\n previously loaded sections and section entries (this is sometimes\n referred to as 'cascading'). Consequently, downstream configuration\n files need only contain those sections and section entries that need\n to be overridden.\n\nTIP: When creating custom configuration files you only need to include\nthe sections and entries that differ from the default configuration.\n\nTIP: The best way to learn about configuration files is to read the\ndefault configuration files in the AsciiDoc distribution in\nconjunction with asciidoc(1) output files. You can view configuration\nfile load sequence by turning on the asciidoc(1) `-v` (`--verbose`)\ncommand-line option.\n\nAsciiDoc reserves the following section names for specific purposes:\n\nmiscellaneous::\n Configuration options that don't belong anywhere else.\nattributes::\n Attribute name/value entries.\nspecialcharacters::\n Special characters reserved by the backend markup.\ntags::\n Backend markup tags.\nquotes::\n Definitions for quoted inline character formatting.\nspecialwords::\n Lists of words and phrases singled out for special markup.\nreplacements, replacements2, replacements3::\n Find and replace substitution definitions.\nspecialsections::\n Used to single out special section names for specific markup.\nmacros::\n Macro syntax definitions.\ntitles::\n Heading, section and block title definitions.\nparadef-*::\n Paragraph element definitions.\nblockdef-*::\n DelimitedBlock element definitions.\nlistdef-*::\n List element definitions.\nlisttags-*::\n List element tag definitions.\ntabledef-*::\n Table element definitions.\ntabletags-*::\n Table element tag definitions.\n\nEach line of text in these sections is a 'section entry'. Section\nentries share the following syntax:\n\nname=value::\n The entry value is set to value.\nname=::\n The entry value is set to a zero length string.\nname!::\n The entry is undefined (deleted from the configuration). This\n syntax only applies to 'attributes' and 'miscellaneous'\n sections.\n\n.Section entry behavior\n- All equals characters inside the `name` must be escaped with a\n backslash character.\n- `name` and `value` are stripped of leading and trailing white space.\n- Attribute names, tag entry names and markup template section names\n consist of one or more alphanumeric, underscore or dash characters.\n Names should not begin or end with a dash.\n- A blank configuration file section (one without any entries) deletes\n any preceding section with the same name (applies to non-markup\n template sections).\n\n\nMiscellaneous section\n~~~~~~~~~~~~~~~~~~~~~\nThe optional `[miscellaneous]` section specifies the following\n`name=value` options:\n\nnewline::\n Output file line termination characters. Can include any\n valid Python string escape sequences. The default value is\n `\\r\\n` (carriage return, line feed). Should not be quoted or\n contain explicit spaces (use `\\x20` instead). For example:\n\n $ asciidoc -a 'newline=\\n' -b docbook mydoc.txt\n\noutfilesuffix::\n The default extension for the output file, for example\n `outfilesuffix=.html`. Defaults to backend name.\ntabsize::\n The number of spaces to expand tab characters, for example\n `tabsize=4`. Defaults to 8. A 'tabsize' of zero suppresses tab\n expansion (useful when piping included files through block\n filters). Included files can override this option using the\n 'tabsize' attribute.\npagewidth, pageunits::\n These global table related options are documented in the\n <<X4,Table Configuration File Definitions>> sub-section.\n\nNOTE: `[miscellaneous]` configuration file entries can be set using\nthe asciidoc(1) `-a` (`--attribute`) command-line option.\n\nTitles section\n~~~~~~~~~~~~~~\nsectiontitle::\n Two line section title pattern. The entry value is a Python\n regular expression containing the named group 'title'.\n\nunderlines::\n A comma separated list of document and section title underline\n character pairs starting with the section level 0 and ending\n with section level 4 underline. The default setting is:\n\n underlines=\"==\",\"--\",\"~~\",\"^^\",\"++\"\n\nsect0...sect4::\n One line section title patterns. The entry value is a Python\n regular expression containing the named group 'title'.\n\nblocktitle::\n <<X42,BlockTitle element>> pattern. The entry value is a\n Python regular expression containing the named group 'title'.\n\nsubs::\n A comma separated list of substitutions that are performed on\n the document header and section titles. Defaults to 'normal'\n substitution.\n\nTags section\n~~~~~~~~~~~~\nThe `[tags]` section contains backend tag definitions (one per\nline). Tags are used to translate AsciiDoc elements to backend\nmarkup.\n\nAn AsciiDoc tag definition is formatted like\n`<tagname>=<starttag>|<endtag>`. For example:\n\n emphasis=<em>|</em>\n\nIn this example asciidoc(1) replaces the | character with the\nemphasized text from the AsciiDoc input file and writes the result to\nthe output file.\n\nUse the `{brvbar}` attribute reference if you need to include a | pipe\ncharacter inside tag text.\n\nAttributes section\n~~~~~~~~~~~~~~~~~~\nThe optional `[attributes]` section contains predefined attributes.\n\nIf the attribute value requires leading or trailing spaces then the\ntext text should be enclosed in quotation mark (\") characters.\n\nTo delete a attribute insert a `name!` entry in a downstream\nconfiguration file or use the asciidoc(1) `--attribute name!`\ncommand-line option (an attribute name suffixed with a `!` character\ndeletes the attribute)\n\nSpecial Characters section\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe `[specialcharacters]` section specifies how to escape characters\nreserved by the backend markup. Each translation is specified on a\nsingle line formatted like:\n\n <special_character>=<translated_characters>\n\nSpecial characters are normally confined to those that resolve\nmarkup ambiguity (in the case of HTML and XML markups the ampersand,\nless than and greater than characters). The following example causes\nall occurrences of the `<` character to be replaced by `<`.\n\n <=<\n\nQuoted Text section\n~~~~~~~~~~~~~~~~~~~\nQuoting is used primarily for text formatting. The `[quotes]` section\ndefines AsciiDoc quoting characters and their corresponding backend\nmarkup tags. Each section entry value is the name of a of a `[tags]`\nsection entry. The entry name is the character (or characters) that\nquote the text. The following examples are taken from AsciiDoc\nconfiguration files:\n\n [quotes]\n _=emphasis\n\n [tags]\n emphasis=<em>|</em>\n\nYou can specify the left and right quote strings separately by\nseparating them with a | character, for example:\n\n ``|''=quoted\n\nOmitting the tag will disable quoting, for example, if you don't want\nsuperscripts or subscripts put the following in a custom configuration\nfile or edit the global `asciidoc.conf` configuration file:\n\n [quotes]\n ^=\n ~=\n\n<<X52,Unconstrained quotes>> are differentiated from constrained\nquotes by prefixing the tag name with a hash character, for example:\n\n __=#emphasis\n\n.Quoted text behavior\n- Quote characters must be non-alphanumeric.\n- To minimize quoting ambiguity try not to use the same quote\n characters in different quote types.\n\nSpecial Words section\n~~~~~~~~~~~~~~~~~~~~~\nThe `[specialwords]` section is used to single out words and phrases\nthat you want to consistently format in some way throughout your\ndocument without having to repeatedly specify the markup. The name of\neach entry corresponds to a markup template section and the entry\nvalue consists of a list of words and phrases to be marked up. For\nexample:\n\n [specialwords]\n strongwords=NOTE IMPORTANT\n\n [strongwords]\n <strong>{words}</strong>\n\nThe examples specifies that any occurrence of `NOTE` or `IMPORTANT`\nshould appear in a bold font.\n\nWords and word phrases are treated as Python regular expressions: for\nexample, the word `^NOTE` would only match `NOTE` if appeared at\nthe start of a line.\n\nAsciiDoc comes with three built-in Special Word types:\n'emphasizedwords', 'monospacedwords' and 'strongwords', each has a\ncorresponding (backend specific) markup template section. Edit the\nconfiguration files to customize existing Special Words and to add new\nones.\n\n.Special word behavior\n- Word list entries must be separated by space characters.\n- Word list entries with embedded spaces should be enclosed in quotation (\")\n characters.\n- A `[specialwords]` section entry of the form\n +name=word1{nbsp}[word2...]+ adds words to existing `name` entries.\n- A `[specialwords]` section entry of the form `name` undefines\n (deletes) all existing `name` words.\n- Since word list entries are processed as Python regular expressions\n you need to be careful to escape regular expression special\n characters.\n- By default Special Words are substituted before Inline Macros, this\n may lead to undesirable consequences. For example the special word\n `foobar` would be expanded inside the macro call\n `http://www.foobar.com[]`. A possible solution is to emphasize\n whole words only by defining the word using regular expression\n characters, for example `\\bfoobar\\b`.\n- If the first matched character of a special word is a backslash then\n the remaining characters are output without markup i.e. the\n backslash can be used to escape special word markup. For example\n the special word `\\\\?\\b[Tt]en\\b` will mark up the words `Ten` and\n `ten` only if they are not preceded by a backslash.\n\n[[X10]]\nReplacements section\n~~~~~~~~~~~~~~~~~~~~\n`[replacements]`, `[replacements2]` and `[replacements3]`\nconfiguration file entries specify find and replace text and are\nformatted like:\n\n <find_pattern>=<replacement_text>\n\nThe find text can be a Python regular expression; the replace text can\ncontain Python regular expression group references.\n\nUse Replacement shortcuts for often used macro references, for\nexample (the second replacement allows us to backslash escape the\nmacro name):\n\n NEW!=image:./images/smallnew.png[New!]\n \\\\NEW!=NEW!\n\nThe only difference between the three replacement types is how they\nare applied. By default 'replacements' and 'replacement2' are applied\nin <<X102,normal>> substitution contexts whereas 'replacements3' needs\nto be configured explicitly and should only be used in backend\nconfiguration files.\n\n.Replacement behavior\n- The built-in replacements can be escaped with a backslash.\n- If the find or replace text has leading or trailing spaces then the\n text should be enclosed in quotation (\") characters.\n- Since the find text is processed as a regular expression you need to\n be careful to escape regular expression special characters.\n- Replacements are performed in the same order they appear in the\n configuration file replacements section.\n\nMarkup Template Sections\n~~~~~~~~~~~~~~~~~~~~~~~~\nMarkup template sections supply backend markup for translating\nAsciiDoc elements. Since the text is normally backend dependent\nyou'll find these sections in the backend specific configuration\nfiles. Template sections differ from other sections in that they\ncontain a single block of text instead of per line 'name=value'\nentries. A markup template section body can contain:\n\n- Attribute references\n- System macro calls.\n- A document content placeholder\n\nThe document content placeholder is a single | character and is\nreplaced by text from the source element. Use the `{brvbar}`\nattribute reference if you need a literal | character in the template.\n\n[[X27]]\nConfiguration file names, precedence and locations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files have a `.conf` file name extension; they are\nloaded from the following locations:\n\n1. The directory containing the asciidoc executable.\n2. If there is no `asciidoc.conf` file in the directory containing the\n asciidoc executable then load from the global configuration\n directory (normally `/etc/asciidoc` or `/usr/local/etc/asciidoc`)\n i.e. the global configuration files directory is skipped if\n AsciiDoc configuration files are installed in the same directory as\n the asciidoc executable. This allows both a system wide copy and\n multiple local copies of AsciiDoc to coexist on the same host PC.\n3. The user's `$HOME/.asciidoc` directory (if it exists).\n4. The directory containing the AsciiDoc source file.\n5. Explicit configuration files specified using:\n - The `conf-files` attribute (one or more file names separated by a\n `|` character). These files are loaded in the order they are\n specified and prior to files specified using the `--conf-file`\n command-line option.\n - The asciidoc(1) `--conf-file`) command-line option. The\n `--conf-file` option can be specified multiple times, in which\n case configuration files will be processed in the same order they\n appear on the command-line.\n6. <<X100,Backend plugin>> configuration files are loaded from\n subdirectories named like `backends/<backend>` in locations 1, 2\n and 3.\n7. <<X59,Filter>> configuration files are loaded from subdirectories\n named like `filters/<filter>` in locations 1, 2 and 3.\n\nConfiguration files from the above locations are loaded in the\nfollowing order:\n\n- The `[attributes]` section only from:\n * `asciidoc.conf` in location 3\n * Files from location 5.\n+\nThis first pass makes locally set attributes available in the global\n`asciidoc.conf` file.\n\n- `asciidoc.conf` from locations 1, 2, 3.\n- 'attributes', 'titles' and 'specialcharacters' sections from the\n `asciidoc.conf` in location 4.\n- The document header is parsed at this point and we can assume the\n 'backend' and 'doctype' have now been defined.\n- Backend plugin `<backend>.conf` and `<backend>-<doctype>.conf` files\n from locations 6. If a backend plugin is not found then try\n locations 1, 2 and 3 for `<backend>.conf` and\n `<backend>-<doctype>.conf` backend configuration files.\n- Filter conf files from locations 7.\n- `lang-<lang>.conf` from locations 1, 2, 3.\n- `asciidoc.conf` from location 4.\n- `<backend>.conf` and `<backend>-<doctype>.conf` from location 4.\n- Filter conf files from location 4.\n- `<docfile>.conf` and `<docfile>-<backend>.conf` from location 4.\n- Configuration files from location 5.\n\nWhere:\n\n- `<backend>` and `<doctype>` are values specified by the asciidoc(1)\n `-b` (`--backend`) and `-d` (`--doctype`) command-line options.\n- `<infile>` is the path name of the AsciiDoc input file without the\n file name extension.\n- `<lang>` is a two letter country code set by the the AsciiDoc 'lang'\n attribute.\n\n[NOTE]\n=====================================================================\nThe backend and language global configuration files are loaded *after*\nthe header has been parsed. This means that you can set most\nattributes in the document header. Here's an example header:\n\n Life's Mysteries\n ================\n :author: Hu Nose\n :doctype: book\n :toc:\n :icons:\n :data-uri:\n :lang: en\n :encoding: iso-8859-1\n\nAttributes set in the document header take precedence over\nconfiguration file attributes.\n\n=====================================================================\n\nTIP: Use the asciidoc(1) `-v` (`--verbose`) command-line option to see\nwhich configuration files are loaded and the order in which they are\nloaded.\n\n\nDocument Attributes\n-------------------\nA document attribute is comprised of a 'name' and a textual 'value'\nand is used for textual substitution in AsciiDoc documents and\nconfiguration files. An attribute reference (an attribute name\nenclosed in braces) is replaced by the corresponding attribute\nvalue. Attribute names are case insensitive and can only contain\nalphanumeric, dash and underscore characters.\n\nThere are four sources of document attributes (from highest to lowest\nprecedence):\n\n- Command-line attributes.\n- AttributeEntry, AttributeList, Macro and BlockId elements.\n- Configuration file `[attributes]` sections.\n- Intrinsic attributes.\n\nWithin each of these divisions the last processed entry takes\nprecedence.\n\nNOTE: If an attribute is not defined then the line containing the\nattribute reference is dropped. This property is used extensively in\nAsciiDoc configuration files to facilitate conditional markup\ngeneration.\n\n\n[[X18]]\nAttribute Entries\n-----------------\nThe `AttributeEntry` block element allows document attributes to be\nassigned within an AsciiDoc document. Attribute entries are added to\nthe global document attributes dictionary. The attribute name/value\nsyntax is a single line like:\n\n :<name>: <value>\n\nFor example:\n\n :Author Initials: JB\n\nThis will set an attribute reference `{authorinitials}` to the value\n'JB' in the current document.\n\nTo delete (undefine) an attribute use the following syntax:\n\n :<name>!:\n\n.AttributeEntry behavior\n- The attribute entry line begins with colon -- no white space allowed\n in left margin.\n- AsciiDoc converts the `<name>` to a legal attribute name (lower\n case, alphanumeric, dash and underscore characters only -- all other\n characters deleted). This allows more human friendly text to be\n used.\n- Leading and trailing white space is stripped from the `<value>`.\n- Lines ending in a space followed by a plus character are continued\n to the next line, for example:\n\n :description: AsciiDoc is a text document format for writing notes, +\n documentation, articles, books, slideshows, web pages +\n and man pages.\n\n- If the `<value>` is blank then the corresponding attribute value is\n set to an empty string.\n- Attribute references contained in the entry `<value>` will be\n expanded.\n- By default AttributeEntry values are substituted for\n `specialcharacters` and `attributes` (see above), if you want to\n change or disable AttributeEntry substitution use the <<X77,pass:[]\n inline macro>> syntax.\n- Attribute entries in the document Header are available for header\n markup template substitution.\n- Attribute elements override configuration file and intrinsic\n attributes but do not override command-line attributes.\n\nHere are some more attribute entry examples:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\n:author: Stuart Rackham\n:email: srackham@gmail.com\n:revdate: April 23, 2004\n:revnumber: 5.1.1\n---------------------------------------------------------------------\n\nWhich creates these attributes:\n\n {author}, {firstname}, {lastname}, {authorinitials}, {email},\n {revdate}, {revnumber}\n\nThe previous example is equivalent to this <<X95,document header>>:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\nStuart Rackham <srackham@gmail.com>\n5.1.1, April 23, 2004\n---------------------------------------------------------------------\n\nSetting configuration entries\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nA variant of the Attribute Entry syntax allows configuration file\nsection entries and markup template sections to be set from within an\nAsciiDoc document:\n\n :<section_name>.[<entry_name>]: <entry_value>\n\nWhere `<section_name>` is the configuration section name,\n`<entry_name>` is the name of the entry and `<entry_value>` is the\noptional entry value. This example sets the default labeled list\nstyle to 'horizontal':\n\n :listdef-labeled.style: horizontal\n\nIt is exactly equivalent to a configuration file containing:\n\n [listdef-labeled]\n style=horizontal\n\n- If the `<entry_name>` is omitted then the entire section is\n substituted with the `<entry_value>`. This feature should only be\n used to set markup template sections. The following example sets the\n 'xref2' inline macro markup template:\n\n :xref2-inlinemacro.: <a href=\"#{1}\">{2?{2}}</a>\n\n- No substitution is performed on configuration file attribute entries\n and they cannot be undefined.\n- This feature can only be used in attribute entries -- configuration\n attributes cannot be set using the asciidoc(1) command `--attribute`\n option.\n\n[[X62]]\n.Attribute entries promote clarity and eliminate repetition\n*********************************************************************\nURLs and file names in AsciiDoc macros are often quite long -- they\nbreak paragraph flow and readability suffers. The problem is\ncompounded by redundancy if the same name is used repeatedly.\nAttribute entries can be used to make your documents easier to read\nand write, here are some examples:\n\n :1: http://freshmeat.net/projects/asciidoc/\n :homepage: http://methods.co.nz/asciidoc/[AsciiDoc home page]\n :new: image:./images/smallnew.png[]\n :footnote1: footnote:[A meaningless latin term]\n\n Using previously defined attributes: See the {1}[Freshmeat summary]\n or the {homepage} for something new {new}. Lorem ispum {footnote1}.\n\n.Note\n- The attribute entry definition must precede it's usage.\n- You are not limited to URLs or file names, entire macro calls or\n arbitrary lines of text can be abbreviated.\n- Shared attributes entries could be grouped into a separate file and\n <<X63,included>> in multiple documents.\n*********************************************************************\n\n\n[[X21]]\nAttribute Lists\n---------------\n- An attribute list is a comma separated list of attribute values.\n- The entire list is enclosed in square brackets.\n- Attribute lists are used to pass parameters to macros, blocks (using\n the <<X79,AttributeList element>>) and inline quotes.\n\nThe list consists of zero or more positional attribute values followed\nby zero or more named attribute values. Here are three examples: a\nsingle unquoted positional attribute; three unquoted positional\nattribute values; one positional attribute followed by two named\nattributes; the unquoted attribute value in the final example contains\ncomma (`,`) and double-quote (`"`) character entities:\n\n [Hello]\n [quote, Bertrand Russell, The World of Mathematics (1956)]\n [\"22 times\", backcolor=\"#0e0e0e\", options=\"noborders,wide\"]\n [A footnote, "with an image" image:smallnew.png[]]\n\n.Attribute list behavior\n- If one or more attribute values contains a comma the all string\n values must be quoted (enclosed in double quotation mark\n characters).\n- If the list contains any named or quoted attributes then all string\n attribute values must be quoted.\n- To include a double quotation mark (\") character in a quoted\n attribute value the the quotation mark must be escaped with a\n backslash.\n- List attributes take precedence over existing attributes.\n- List attributes can only be referenced in configuration file markup\n templates and tags, they are not available elsewhere in the\n document.\n- Setting a named attribute to `None` undefines the attribute.\n- Positional attributes are referred to as `{1}`,`{2}`,`{3}`,...\n- Attribute `{0}` refers to the entire list (excluding the enclosing\n square brackets).\n- Named attribute names cannot contain dash characters.\n\n[[X75]]\nOptions attribute\n~~~~~~~~~~~~~~~~~\nIf the attribute list contains an attribute named `options` it is\nprocessed as a comma separated list of option names:\n\n- Each name generates an attribute named like `<option>-option` (where\n `<option>` is the option name) with an empty string value. For\n example `[options=\"opt1,opt2,opt3\"]` is equivalent to setting the\n following three attributes\n `[opt1-option=\"\",opt2-option=\"\",opt2-option=\"\"]`.\n- If you define a an option attribute globally (for example with an\n <<X18,attribute entry>>) then it will apply to all elements in the\n document.\n- AsciiDoc implements a number of predefined options which are listed\n in the <<X74,Attribute Options appendix>>.\n\nMacro Attribute lists\n~~~~~~~~~~~~~~~~~~~~~\nMacros calls are suffixed with an attribute list. The list may be\nempty but it cannot be omitted. List entries are used to pass\nattribute values to macro markup templates.\n\n\nAttribute References\n--------------------\nAn attribute reference is an attribute name (possibly followed by an\nadditional parameters) enclosed in curly braces. When an attribute\nreference is encountered it is evaluated and replaced by its\ncorresponding text value. If the attribute is undefined the line\ncontaining the attribute is dropped.\n\nThere are three types of attribute reference: 'Simple', 'Conditional'\nand 'System'.\n\n.Attribute reference evaluation\n- You can suppress attribute reference expansion by placing a\n backslash character immediately in front of the opening brace\n character.\n- By default attribute references are not expanded in\n 'LiteralParagraphs', 'ListingBlocks' or 'LiteralBlocks'.\n- Attribute substitution proceeds line by line in reverse line order.\n- Attribute reference evaluation is performed in the following order:\n 'Simple' then 'Conditional' and finally 'System'.\n\nSimple Attributes References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSimple attribute references take the form `{<name>}`. If the\nattribute name is defined its text value is substituted otherwise the\nline containing the reference is dropped from the output.\n\nConditional Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAdditional parameters are used in conjunction with attribute names to\ncalculate a substitution value. Conditional attribute references take\nthe following forms:\n\n`{<names>=<value>}`::\n `<value>` is substituted if the attribute `<names>` is\n undefined otherwise its value is substituted. `<value>` can\n contain simple attribute references.\n\n`{<names>?<value>}`::\n `<value>` is substituted if the attribute `<names>` is defined\n otherwise an empty string is substituted. `<value>` can\n contain simple attribute references.\n\n`{<names>!<value>}`::\n `<value>` is substituted if the attribute `<names>` is\n undefined otherwise an empty string is substituted. `<value>`\n can contain simple attribute references.\n\n`{<names>#<value>}`::\n `<value>` is substituted if the attribute `<names>` is defined\n otherwise the undefined attribute entry causes the containing\n line to be dropped. `<value>` can contain simple attribute\n references.\n\n`{<names>%<value>}`::\n `<value>` is substituted if the attribute `<names>` is not\n defined otherwise the containing line is dropped. `<value>`\n can contain simple attribute references.\n\n`{<names>@<regexp>:<value1>[:<value2>]}`::\n `<value1>` is substituted if the value of attribute `<names>`\n matches the regular expression `<regexp>` otherwise `<value2>`\n is substituted. If attribute `<names>` is not defined the\n containing line is dropped. If `<value2>` is omitted an empty\n string is assumed. The values and the regular expression can\n contain simple attribute references. To embed colons in the\n values or the regular expression escape them with backslashes.\n\n`{<names>$<regexp>:<value1>[:<value2>]}`::\n Same behavior as the previous ternary attribute except for\n the following cases:\n\n `{<names>$<regexp>:<value>}`;;\n Substitutes `<value>` if `<names>` matches `<regexp>`\n otherwise the result is undefined and the containing\n line is dropped.\n\n `{<names>$<regexp>::<value>}`;;\n Substitutes `<value>` if `<names>` does not match\n `<regexp>` otherwise the result is undefined and the\n containing line is dropped.\n\nThe attribute `<names>` parameter normally consists of a single\nattribute name but it can be any one of the following:\n\n- A single attribute name which evaluates to the attributes value.\n- Multiple ',' separated attribute names which evaluates to an empty\n string if one or more of the attributes is defined, otherwise it's\n value is undefined.\n- Multiple '+' separated attribute names which evaluates to an empty\n string if all of the attributes are defined, otherwise it's value is\n undefined.\n\nConditional attributes with single attribute names are evaluated first\nso they can be used inside the multi-attribute conditional `<value>`.\n\nConditional attribute examples\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nConditional attributes are mainly used in AsciiDoc configuration\nfiles -- see the distribution `.conf` files for examples.\n\nAttribute equality test::\n If `{backend}` is 'docbook45' or 'xhtml11' the example evaluates to\n ``DocBook 4.5 or XHTML 1.1 backend'' otherwise it evaluates to\n ``some other backend'':\n\n {backend@docbook45|xhtml11:DocBook 4.5 or XHTML 1.1 backend:some other backend}\n\nAttribute value map::\n This example maps the `frame` attribute values [`topbot`, `all`,\n `none`, `sides`] to [`hsides`, `border`, `void`, `vsides`]:\n\n {frame@topbot:hsides}{frame@all:border}{frame@none:void}{frame@sides:vsides}\n\n\n[[X24]]\nSystem Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSystem attribute references generate the attribute text value by\nexecuting a predefined action that is parametrized by one or more\narguments. The syntax is `{<action>:<arguments>}`.\n\n`{counter:<attrname>[:<seed>]}`::\n Increments the document attribute (if the attribute is\n undefined it is set to `1`). Returns the new attribute value.\n\n - Counters generate global (document wide) attributes.\n - The optional `<seed>` specifies the counter's initial value;\n it can be a number or a single letter; defaults to '1'.\n - `<seed>` can contain simple and conditional attribute\n references.\n - The 'counter' system attribute will not be executed if the\n containing line is dropped by the prior evaluation of an\n undefined attribute.\n\n`{counter2:<attrname>[:<seed>]}`::\n Same as `counter` except the it always returns a blank string.\n\n`{eval:<expression>}`::\n Substitutes the result of the Python `<expression>`.\n\n - If `<expression>` evaluates to `None` or `False` the\n reference is deemed undefined and the line containing the\n reference is dropped from the output.\n - If the expression evaluates to `True` the attribute\n evaluates to an empty string.\n - `<expression>` can contain simple and conditional attribute\n references.\n - The 'eval' system attribute can be nested inside other\n system attributes.\n\n`{eval3:<command>}`::\n Passthrough version of `{eval:<expression>}` -- the generated\n output is written directly to the output without any further\n substitutions.\n\n`{include:<filename>}`::\n Substitutes contents of the file named `<filename>`.\n\n - The included file is read at the time of attribute\n substitution.\n - If the file does not exist a warning is emitted and the line\n containing the reference is dropped from the output file.\n - Tabs are expanded based on the current 'tabsize' attribute\n value.\n\n`{set:<attrname>[!][:<value>]}`::\n Sets or unsets document attribute. Normally only used in\n configuration file markup templates (use\n <<X18,AttributeEntries>> in AsciiDoc documents).\n\n - If the attribute name is followed by an exclamation mark\n the attribute becomes undefined.\n - If `<value>` is omitted the attribute is set to a blank\n string.\n - `<value>` can contain simple and conditional attribute\n references.\n - Returns a blank string unless the attribute is undefined in\n which case the return value is undefined and the enclosing\n line will be dropped.\n\n`{set2:<attrname>[!][:<value>]}`::\n Same as `set` except that the attribute scope is local to the\n template.\n\n`{sys:<command>}`::\n Substitutes the stdout generated by the execution of the shell\n `<command>`.\n\n`{sys2:<command>}`::\n Substitutes the stdout and stderr generated by the execution\n of the shell `<command>`.\n\n`{sys3:<command>}`::\n Passthrough version of `{sys:<command>}` -- the generated\n output is written directly to the output without any further\n substitutions.\n\n`{template:<template>}`::\n Substitutes the contents of the configuration file section\n named `<template>`. Attribute references contained in the\n template are substituted.\n\n.System reference behavior\n- System attribute arguments can contain non-system attribute\n references.\n- Closing brace characters inside system attribute arguments must be\n escaped with a backslash.\n\n[[X60]]\nIntrinsic Attributes\n--------------------\nIntrinsic attributes are simple attributes that are created\nautomatically from: AsciiDoc document header parameters; asciidoc(1)\ncommand-line arguments; attributes defined in the default\nconfiguration files; the execution context. Here's the list of\npredefined intrinsic attributes:\n\n {amp} ampersand (&) character entity\n {asciidoc-args} used to pass inherited arguments to asciidoc filters\n {asciidoc-confdir} the asciidoc(1) global configuration directory\n {asciidoc-dir} the asciidoc(1) application directory\n {asciidoc-file} the full path name of the asciidoc(1) script\n {asciidoc-version} the version of asciidoc(1)\n {author} author's full name\n {authored} empty string '' if {author} or {email} defined,\n {authorinitials} author initials (from document header)\n {backend-<backend>} empty string ''\n {<backend>-<doctype>} empty string ''\n {backend} document backend specified by `-b` option\n {backend-confdir} the directory containing the <backend>.conf file\n {backslash} backslash character\n {basebackend-<base>} empty string ''\n {basebackend} html or docbook\n {blockname} current block name (note 8).\n {brvbar} broken vertical bar (|) character\n {docdate} document last modified date\n {docdir} document input directory name (note 5)\n {docfile} document file name (note 5)\n {docname} document file name without extension (note 6)\n {doctime} document last modified time\n {doctitle} document title (from document header)\n {doctype-<doctype>} empty string ''\n {doctype} document type specified by `-d` option\n {email} author's email address (from document header)\n {empty} empty string ''\n {encoding} specifies input and output encoding\n {filetype-<fileext>} empty string ''\n {filetype} output file name file extension\n {firstname} author first name (from document header)\n {gt} greater than (>) character entity\n {id} running block id generated by BlockId elements\n {indir} input file directory name (note 2,5)\n {infile} input file name (note 2,5)\n {lastname} author last name (from document header)\n {ldquo} Left double quote character (note 7)\n {level} title level 1..4 (in section titles)\n {listindex} the list index (1..) of the most recent list item\n {localdate} the current date\n {localtime} the current time\n {lsquo} Left single quote character (note 7)\n {lt} less than (<) character entity\n {manname} manpage name (defined in NAME section)\n {manpurpose} manpage (defined in NAME section)\n {mantitle} document title minus the manpage volume number\n {manvolnum} manpage volume number (1..8) (from document header)\n {middlename} author middle name (from document header)\n {nbsp} non-breaking space character entity\n {notitle} do not display the document title\n {outdir} document output directory name (note 2)\n {outfile} output file name (note 2)\n {python} the full path name of the Python interpreter executable\n {rdquo} Right double quote character (note 7)\n {reftext} running block xreflabel generated by BlockId elements\n {revdate} document revision date (from document header)\n {revnumber} document revision number (from document header)\n {rsquo} Right single quote character (note 7)\n {sectnum} formatted section number (in section titles)\n {sp} space character\n {showcomments} send comment lines to the output\n {title} section title (in titled elements)\n {two-colons} Two colon characters\n {two-semicolons} Two semicolon characters\n {user-dir} the ~/.asciidoc directory (if it exists)\n {verbose} defined as '' if --verbose command option specified\n {wj} Word-joiner\n {zwsp} Zero-width space character entity\n\n[NOTE]\n======\n1. Intrinsic attributes are global so avoid defining custom attributes\n with the same names.\n2. `{outfile}`, `{outdir}`, `{infile}`, `{indir}` attributes are\n effectively read-only (you can set them but it won't affect the\n input or output file paths).\n3. See also the <<X88,Backend Attributes>> section for attributes\n that relate to AsciiDoc XHTML file generation.\n4. The entries that translate to blank strings are designed to be used\n for conditional text inclusion. You can also use the `ifdef`,\n `ifndef` and `endif` System macros for conditional inclusion.\n footnote:[Conditional inclusion using `ifdef` and `ifndef` macros\n differs from attribute conditional inclusion in that the former\n occurs when the file is read while the latter occurs when the\n contents are written.]\n5. `{docfile}` and `{docdir}` refer to root document specified on the\n asciidoc(1) command-line; `{infile}` and `{indir}` refer to the\n current input file which may be the root document or an included\n file. When the input is being read from the standard input\n (`stdin`) these attributes are undefined.\n6. If the input file is the standard input and the output file is not\n the standard output then `{docname}` is the output file name sans\n file extension.\n7. See\n http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks[non-English\n usage of quotation marks].\n8. The `{blockname}` attribute identifies the style of the current\n block. It applies to delimited blocks, lists and tables. Here is a\n list of `{blockname}` values (does not include filters or custom\n block and style names):\n\n delimited blocks:: comment, sidebar, open, pass, literal, verse,\n listing, quote, example, note, tip, important, caution, warning,\n abstract, partintro\n\n lists:: arabic, loweralpha, upperalpha, lowerroman, upperroman,\n labeled, labeled3, labeled4, qanda, horizontal, bibliography,\n glossary\n\n tables:: table\n\n======\n\n\n[[X73]]\nBlock Element Definitions\n-------------------------\nThe syntax and behavior of Paragraph, DelimitedBlock, List and Table\nblock elements is determined by block definitions contained in\n<<X7,AsciiDoc configuration file>> sections.\n\nEach definition consists of a section title followed by one or more\nsection entries. Each entry defines a block parameter controlling some\naspect of the block's behavior. Here's an example:\n\n---------------------------------------------------------------------\n[blockdef-listing]\ndelimiter=^-{4,}$\ntemplate=listingblock\npresubs=specialcharacters,callouts\n---------------------------------------------------------------------\n\nConfiguration file block definition sections are processed\nincrementally after each configuration file is loaded. Block\ndefinition section entries are merged into the block definition, this\nallows block parameters to be overridden and extended by later\n<<X27,loading configuration files>>.\n\nAsciiDoc Paragraph, DelimitedBlock, List and Table block elements\nshare a common subset of configuration file parameters:\n\ndelimiter::\n A Python regular expression that matches the first line of a block\n element -- in the case of DelimitedBlocks and Tables it also matches\n the last line.\n\ntemplate::\n The name of the configuration file markup template section that will\n envelope the block contents. The pipe ('|') character is substituted\n for the block contents. List elements use a set of (list specific)\n tag parameters instead of a single template. The template name can\n contain attribute references allowing dynamic template selection a\n the time of template substitution.\n\noptions::\n A comma delimited list of element specific option names. In addition\n to being used internally, options are available during markup tag\n and template substitution as attributes with an empty string value\n named like `<option>-option` (where `<option>` is the option name).\n See <<X74,attribute options>> for a complete list of available\n options.\n\nsubs, presubs, postsubs::\n * 'presubs' and 'postsubs' are lists of comma separated substitutions that are\n performed on the block contents. 'presubs' is applied first,\n 'postsubs' (if specified) second.\n\n * 'subs' is an alias for 'presubs'.\n\n * If a 'filter' is allowed (Paragraphs, DelimitedBlocks and Tables)\n and has been specified then 'presubs' and 'postsubs' substitutions\n are performed before and after the filter is run respectively.\n\n * Allowed values: 'specialcharacters', 'quotes', 'specialwords',\n 'replacements', 'macros', 'attributes', 'callouts'.\n\n * [[X102]]The following composite values are also allowed:\n\n 'none';;\n No substitutions.\n 'normal';;\n The following substitutions in the following order:\n 'specialcharacters', 'quotes', 'attributes', 'specialwords',\n 'replacements', 'macros', 'replacements2'.\n 'verbatim';;\n The following substitutions in the following order:\n 'specialcharacters' and 'callouts'.\n\n * 'normal' and 'verbatim' substitutions can be redefined by with\n `subsnormal` and `subsverbatim` entries in a configuration file\n `[miscellaneous]` section.\n\n * The substitutions are processed in the order in which they are\n listed and can appear more than once.\n\nfilter::\n This optional entry specifies an executable shell command for\n processing block content (Paragraphs, DelimitedBlocks and Tables).\n The filter command can contain attribute references.\n\nposattrs::\n Optional comma separated list of positional attribute names. This\n list maps positional attributes (in the block's <<X21,attribute\n list>>) to named block attributes. The following example, from the\n QuoteBlock definition, maps the first and section positional\n attributes:\n\n posattrs=attribution,citetitle\n\nstyle::\n This optional parameter specifies the default style name.\n\n\n<stylename>-style::\n Optional style definition (see <<X23,Styles>> below).\n\nThe following block parameters behave like document attributes and can\nbe set in block attribute lists and style definitions: 'template',\n'options', 'subs', 'presubs', 'postsubs', 'filter'.\n\n[[X23]]\nStyles\n~~~~~~\nA style is a set of block parameter bundled as a single named\nparameter. The following example defines a style named 'verbatim':\n\n verbatim-style=template=\"literalblock\",subs=\"verbatim\"\n\nIf a block's <<X21,attribute list>> contains a 'style' attribute then\nthe corresponding style parameters are be merged into the default\nblock definition parameters.\n\n- All style parameter names must be suffixed with `-style` and the\n style parameter value is in the form of a list of <<X21,named\n attributes>>.\n- The 'template' style parameter is mandatory, other parameters can be\n omitted in which case they inherit their values from the default\n block definition parameters.\n- Multi-item style parameters ('subs','presubs','postsubs','posattrs')\n must be specified using Python tuple syntax (rather than a simple\n list of values as they in separate entries) e.g.\n `postsubs=(\"callouts\",)` not `postsubs=\"callouts\"`.\n\nParagraphs\n~~~~~~~~~~\nParagraph translation is controlled by `[paradef-*]` configuration\nfile section entries. Users can define new types of paragraphs and\nmodify the behavior of existing types by editing AsciiDoc\nconfiguration files.\n\nHere is the shipped Default paragraph definition:\n\n--------------------------------------------------------------------\n[paradef-default]\ndelimiter=(?P<text>\\S.*)\ntemplate=paragraph\n--------------------------------------------------------------------\n\nThe normal paragraph definition has a couple of special properties:\n\n1. It must exist and be defined in a configuration file section named\n `[paradef-default]`.\n2. Irrespective of its position in the configuration files default\n paragraph document matches are attempted only after trying all\n other paragraph types.\n\nParagraph specific block parameter notes:\n\ndelimiter::\n This regular expression must contain the named group 'text' which\n matches the text on the first line. Paragraphs are terminated by a\n blank line, the end of file, or the start of a DelimitedBlock.\n\noptions::\n The 'listelement' option specifies that paragraphs of this type will\n automatically be considered part of immediately preceding list\n items. The 'skip' option causes the paragraph to be treated as a\n comment (see <<X26,CommentBlocks>>).\n\n.Paragraph processing proceeds as follows:\n1. The paragraph text is aligned to the left margin.\n2. Optional 'presubs' inline substitutions are performed on the\n paragraph text.\n3. If a filter command is specified it is executed and the paragraph\n text piped to its standard input; the filter output replaces the\n paragraph text.\n4. Optional 'postsubs' inline substitutions are performed on the\n paragraph text.\n5. The paragraph text is enveloped by the paragraph's markup template\n and written to the output file.\n\nDelimited Blocks\n~~~~~~~~~~~~~~~~\nDelimitedBlock 'options' values are:\n\nsectionbody::\n The block contents are processed as a SectionBody.\n\nskip::\n The block is treated as a comment (see <<X26,CommentBlocks>>).\n Preceding <<X21,attribute lists>> and <<X42,block titles>> are not\n consumed.\n\n'presubs', 'postsubs' and 'filter' entries are ignored when\n'sectionbody' or 'skip' options are set.\n\nDelimitedBlock processing proceeds as follows:\n\n1. Optional 'presubs' substitutions are performed on the block\n contents.\n2. If a filter is specified it is executed and the block's contents\n piped to its standard input. The filter output replaces the block\n contents.\n3. Optional 'postsubs' substitutions are performed on the block\n contents.\n4. The block contents is enveloped by the block's markup template and\n written to the output file.\n\nTIP: Attribute expansion is performed on the block filter command\nbefore it is executed, this is useful for passing arguments to the\nfilter.\n\nLists\n~~~~~\nList behavior and syntax is determined by `[listdef-*]` configuration\nfile sections. The user can change existing list behavior and add new\nlist types by editing configuration files.\n\nList specific block definition notes:\n\ntype::\n This is either 'bulleted','numbered','labeled' or 'callout'.\n\ndelimiter::\n A Python regular expression that matches the first line of a\n list element entry. This expression can contain the named groups\n 'text' (bulleted groups), 'index' and 'text' (numbered lists),\n 'label' and 'text' (labeled lists).\n\ntags::\n The `<name>` of the `[listtags-<name>]` configuration file section\n containing list markup tag definitions. The tag entries ('list',\n 'entry', 'label', 'term', 'text') map the AsciiDoc list structure to\n backend markup; see the 'listtags' sections in the AsciiDoc\n distributed backend `.conf` configuration files for examples.\n\nTables\n~~~~~~\nTable behavior and syntax is determined by `[tabledef-*]` and\n`[tabletags-*]` configuration file sections. The user can change\nexisting table behavior and add new table types by editing\nconfiguration files. The following `[tabledef-*]` section entries\ngenerate table output markup elements:\n\ncolspec::\n The table 'colspec' tag definition.\n\nheadrow, footrow, bodyrow::\n Table header, footer and body row tag definitions. 'headrow' and\n 'footrow' table definition entries default to 'bodyrow' if\n they are undefined.\n\nheaddata, footdata, bodydata::\n Table header, footer and body data tag definitions. 'headdata' and\n 'footdata' table definition entries default to 'bodydata' if they\n are undefined.\n\nparagraph::\n If the 'paragraph' tag is specified then blank lines in the cell\n data are treated as paragraph delimiters and marked up using this\n tag.\n\n[[X4]]\nTable behavior is also influenced by the following `[miscellaneous]`\nconfiguration file entries:\n\npagewidth::\n This integer value is the printable width of the output media. See\n <<X69,table attributes>>.\n\npageunits::\n The units of width in output markup width attribute values.\n\n.Table definition behavior\n- The output markup generation is specifically designed to work with\n the HTML and CALS (DocBook) table models, but should be adaptable to\n most XML table schema.\n- Table definitions can be ``mixed in'' from multiple cascading\n configuration files.\n- New table definitions inherit the default table and table tags\n definitions (`[tabledef-default]` and `[tabletags-default]`) so you\n only need to override those conf file entries that require\n modification.\n\n\n[[X59]]\nFilters\n-------\nAsciiDoc filters allow external commands to process AsciiDoc\n'Paragraphs', 'DelimitedBlocks' and 'Table' content. Filters are\nprimarily an extension mechanism for generating specialized outputs.\nFilters are implemented using external commands which are specified in\nconfiguration file definitions.\n\nThere's nothing special about the filters, they're just standard UNIX\nfilters: they read text from the standard input, process it, and write\nto the standard output.\n\nThe asciidoc(1) command `--filter` option can be used to install and\nremove filters. The same option is used to unconditionally load a\nfilter.\n\nAttribute substitution is performed on the filter command prior to\nexecution -- attributes can be used to pass parameters from the\nAsciiDoc source document to the filter.\n\nWARNING: Filters sometimes included executable code. Before installing\na filter you should verify that it is from a trusted source.\n\nFilter Search Paths\n~~~~~~~~~~~~~~~~~~~\nIf the filter command does not specify a directory path then\nasciidoc(1) recursively searches for the executable filter command:\n\n- First it looks in the user's `$HOME/.asciidoc/filters` directory.\n- Next the global filters directory (usually `/etc/asciidoc/filters`\n or `/usr/local/etc/asciidoc`) directory is searched.\n- Then it looks in the asciidoc(1) `./filters` directory.\n- Finally it relies on the executing shell to search the environment\n search path (`$PATH`).\n\nStandard practice is to install each filter in it's own sub-directory\nwith the same name as the filter's style definition. For example the\nmusic filter's style name is 'music' so it's configuration and filter\nfiles are stored in the `filters/music` directory.\n\nFilter Configuration Files\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nFilters are normally accompanied by a configuration file containing a\nParagraph or DelimitedBlock definition along with corresponding markup\ntemplates.\n\nWhile it is possible to create new 'Paragraph' or 'DelimitedBlock'\ndefinitions the preferred way to implement a filter is to add a\n<<X23,style>> to the existing Paragraph and ListingBlock definitions\n(all filters shipped with AsciiDoc use this technique). The filter is\napplied to the paragraph or delimited block by preceding it with an\nattribute list: the first positional attribute is the style name,\nremaining attributes are normally filter specific parameters.\n\nasciidoc(1) auto-loads all `.conf` files found in the filter search\npaths unless the container directory also contains a file named\n`__noautoload__` (see previous section). The `__noautoload__` feature\nis used for filters that will be loaded manually using the `--filter`\noption.\n\n[[X56]]\nExample Filter\n~~~~~~~~~~~~~~\nAsciiDoc comes with a toy filter for highlighting source code keywords\nand comments. See also the `./filters/code/code-filter-readme.txt`\nfile.\n\nNOTE: The purpose of this toy filter is to demonstrate how to write a\nfilter -- it's much to simplistic to be passed off as a code syntax\nhighlighter. If you want a full featured multi-language highlighter\nuse the {website}source-highlight-filter.html[source code highlighter\nfilter].\n\nBuilt-in filters\n~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution includes 'source', 'music', 'latex' and\n'graphviz' filters, details are on the\n{website}index.html#_filters[AsciiDoc website].\n\n[cols=\"1e,5\",frame=\"topbot\",options=\"header\"]\n.Built-in filters list\n|====================================================================\n|Filter name |Description\n\n|music\n|A {website}music-filter.html[music filter] is included in the\ndistribution `./filters/` directory. It translates music in\nhttp://lilypond.org/[LilyPond] or http://abcnotation.org.uk/[ABC]\nnotation to standard classical notation.\n\n|source\n|A {website}source-highlight-filter.html[source code highlight filter]\nis included in the distribution `./filters/` directory.\n\n|latex\n|The {website}latex-filter.html[AsciiDoc LaTeX filter] translates\nLaTeX source to a PNG image that is automatically inserted into the\nAsciiDoc output documents.\n\n|graphviz\n|Gouichi Iisaka has written a http://www.graphviz.org/[Graphviz]\nfilter for AsciiDoc. Graphviz generates diagrams from a textual\nspecification. Gouichi Iisaka's Graphviz filter is included in the\nAsciiDoc distribution. Here are some\n{website}asciidoc-graphviz-sample.html[AsciiDoc Graphviz examples].\n\n|====================================================================\n\n[[X58]]\nFilter plugins\n~~~~~~~~~~~~~~\nFilter <<X101,plugins>> are a mechanism for distributing AsciiDoc\nfilters. A filter plugin is a Zip file containing the files that\nconstitute a filter. The asciidoc(1) `--filter` option is used to\nload and manage filer <<X101,plugins>>.\n\n- Filter plugins <<X27,take precedence>> over built-in filters with\n the same name.\n- By default filter plugins are installed in\n `$HOME/.asciidoc/filters/<filter>` where `<filter>` is the filter\n name.\n\n\n[[X101]]\nPlugins\n-------\nThe AsciiDoc plugin architecture is an extension mechanism that allows\nadditional <<X100,backends>>, <<X58,filters>> and <<X99,themes>> to be\nadded to AsciiDoc.\n\n- A plugin is a Zip file containing an AsciiDoc backend, filter or\n theme (configuration files, stylesheets, scripts, images).\n- The asciidoc(1) `--backend`, `--filter` and `--theme` command-line\n options are used to load and manage plugins. Each of these options\n responds to the plugin management 'install', 'list', 'remove' and\n 'build' commands.\n- The plugin management command names are reserved and cannot be used\n for filter, backend or theme names.\n- The plugin Zip file name always begins with the backend, filter or\n theme name.\n\nPlugin commands and conventions are documented in the asciidoc(1) man\npage. You can find lists of plugins on the\n{website}plugins.html[AsciiDoc website].\n\n\n[[X36]]\nHelp Commands\n-------------\nThe asciidoc(1) command has a `--help` option which prints help topics\nto stdout. The default topic summarizes asciidoc(1) usage:\n\n $ asciidoc --help\n\nTo print a help topic specify the topic name as a command argument.\nHelp topic names can be shortened so long as they are not ambiguous.\nExamples:\n\n $ asciidoc --help manpage\n $ asciidoc -h m # Short version of previous example.\n $ asciidoc --help syntax\n $ asciidoc -h s # Short version of previous example.\n\nCustomizing Help\n~~~~~~~~~~~~~~~~\nTo change, delete or add your own help topics edit a help\nconfiguration file. The help file name `help-<lang>.conf` is based on\nthe setting of the `lang` attribute, it defaults to `help.conf`\n(English). The <<X27,help file location>> will depend on whether you\nwant the topics to apply to all users or just the current user.\n\nThe help topic files have the same named section format as other\n<<X7,configuration files>>. The `help.conf` files are stored in the\nsame locations and loaded in the same order as other configuration\nfiles.\n\nWhen the `--help` command-line option is specified AsciiDoc loads the\nappropriate help files and then prints the contents of the section\nwhose name matches the help topic name. If a topic name is not\nspecified `default` is used. You don't need to specify the whole help\ntopic name on the command-line, just enough letters to ensure it's not\nambiguous. If a matching help file section is not found a list of\navailable topics is printed.\n\n\nTips and Tricks\n---------------\n\nKnow Your Editor\n~~~~~~~~~~~~~~~~\nWriting AsciiDoc documents will be a whole lot more pleasant if you\nknow your favorite text editor. Learn how to indent and reformat text\nblocks, paragraphs, lists and sentences. <<X20,Tips for 'vim' users>>\nfollow.\n\n[[X20]]\nVim Commands for Formatting AsciiDoc\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nText Wrap Paragraphs\n^^^^^^^^^^^^^^^^^^^^\nUse the vim `:gq` command to reformat paragraphs. Setting the\n'textwidth' sets the right text wrap margin; for example:\n\n :set textwidth=70\n\nTo reformat a paragraph:\n\n1. Position the cursor at the start of the paragraph.\n2. Type `gq}`.\n\nExecute `:help gq` command to read about the vim gq command.\n\n[TIP]\n=====================================================================\n- Assign the `gq}` command to the Q key with the `nnoremap Q gq}`\n command or put it in your `~/.vimrc` file to so it's always\n available (see the <<X61, Example `~/.vimrc` file>>).\n- Put `set` commands in your `~/.vimrc` file so you don't have to\n enter them manually.\n- The Vim website (http://www.vim.org) has a wealth of resources,\n including scripts for automated spell checking and ASCII Art\n drawing.\n=====================================================================\n\nFormat Lists\n^^^^^^^^^^^^\nThe `gq` command can also be used to format bulleted, numbered and\ncallout lists. First you need to set the `comments`, `formatoptions`\nand `formatlistpat` (see the <<X61, Example `~/.vimrc` file>>).\n\nNow you can format simple lists that use dash, asterisk, period and\nplus bullets along with numbered ordered lists:\n\n1. Position the cursor at the start of the list.\n2. Type `gq}`.\n\nIndent Paragraphs\n^^^^^^^^^^^^^^^^^\nIndent whole paragraphs by indenting the fist line with the desired\nindent and then executing the `gq}` command.\n\n[[X61]]\nExample `~/.vimrc` File\n^^^^^^^^^^^^^^^^^^^^^^^\n---------------------------------------------------------------------\n\" Use bold bright fonts.\nset background=dark\n\n\" Show tabs and trailing characters.\nset listchars=tab:��,trail:�\nset list\n\n\" Don't highlight searched text.\nhighlight clear Search\n\n\" Don't move to matched text while search pattern is being entered.\nset noincsearch\n\n\" Reformat paragraphs and list.\nnnoremap R gq}\n\n\" Delete trailing white space and Dos-returns and to expand tabs to spaces.\nnnoremap S :set et<CR>:retab!<CR>:%s/[\\r \\t]\\+$//<CR>\n\nautocmd BufRead,BufNewFile *.txt,README,TODO,CHANGELOG,NOTES\n \\ setlocal autoindent expandtab tabstop=8 softtabstop=2 shiftwidth=2 filetype=asciidoc\n \\ textwidth=70 wrap formatoptions=tcqn\n \\ formatlistpat=^\\\\s*\\\\d\\\\+\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*<\\\\d\\\\+>\\\\s\\\\+\\\\\\\\|^\\\\s*[a-zA-Z.]\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*[ivxIVX]\\\\+\\\\.\\\\s\\\\+\n \\ comments=s1:/*,ex:*/,://,b:#,:%,:XCOMM,fb:-,fb:*,fb:+,fb:.,fb:>\n---------------------------------------------------------------------\n\nTroubleshooting\n~~~~~~~~~~~~~~~\nAsciiDoc diagnostic features are detailed in the <<X82,Diagnostics\nappendix>>.\n\nGotchas\n~~~~~~~\nIncorrect character encoding::\n If you get an error message like `'UTF-8' codec can't decode ...`\n then you source file contains invalid UTF-8 characters -- set the\n AsciiDoc <<X54,encoding attribute>> for the correct character set\n (typically ISO-8859-1 (Latin-1) for European languages).\n\nInvalid output::\n AsciiDoc attempts to validate the input AsciiDoc source but makes\n no attempt to validate the output markup, it leaves that to\n external tools such as `xmllint(1)` (integrated into `a2x(1)`).\n Backend validation cannot be hardcoded into AsciiDoc because\n backends are dynamically configured. The following example\n generates valid HTML but invalid DocBook (the DocBook `literal`\n element cannot contain an `emphasis` element):\n\n +monospaced text with an _emphasized_ word+\n\nMisinterpreted text formatting::\n You can suppress markup expansion by placing a backslash character\n immediately in front of the element. The following example\n suppresses inline monospaced formatting:\n\n \\+1 for C++.\n\nOverlapping text formatting::\n Overlapping text formatting will generate illegal overlapping\n markup tags which will result in downstream XML parsing errors.\n Here's an example:\n\n Some *strong markup _that overlaps* emphasized markup_.\n\nAmbiguous underlines::\n A DelimitedBlock can immediately follow a paragraph without an\n intervening blank line, but be careful, a single line paragraph\n underline may be misinterpreted as a section title underline\n resulting in a ``closing block delimiter expected'' error.\n\nAmbiguous ordered list items::\n Lines beginning with numbers at the end of sentences will be\n interpreted as ordered list items. The following example\n (incorrectly) begins a new list with item number 1999:\n\n He was last sighted in\n 1999. Since then things have moved on.\n+\nThe 'list item out of sequence' warning makes it unlikely that this\nproblem will go unnoticed.\n\nSpecial characters in attribute values::\n Special character substitution precedes attribute substitution so\n if attribute values contain special characters you may, depending\n on the substitution context, need to escape the special characters\n yourself. For example:\n\n $ asciidoc -a 'orgname=Bill & Ben Inc.' mydoc.txt\n\nAttribute lists::\n If any named attribute entries are present then all string\n attribute values must be quoted. For example:\n\n [\"Desktop screenshot\",width=32]\n\n[[X90]]\nCombining separate documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have a number of stand-alone AsciiDoc documents that you want to\nprocess as a single document. Simply processing them with a series of\n`include` macros won't work because the documents contain (level 0)\ndocument titles. The solution is to create a top level wrapper\ndocument and use the `leveloffset` attribute to push them all down one\nlevel. For example:\n\n[listing]\n.....................................................................\nCombined Document Title\n=======================\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document1.txt[]\n\n// Return to normal title levels.\n:leveloffset: 0\n\nA Top Level Section\n-------------------\nLorum ipsum.\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document2.txt[]\n\n\\include::document3.txt[]\n.....................................................................\n\nThe document titles in the included documents will now be processed as\nlevel 1 section titles, level 1 sections as level 2 sections and so\non.\n\n- Put a blank line between the `include` macro lines to ensure the\n title of the included document is not seen as part of the last\n paragraph of the previous document.\n- You won't want non-title document header lines (for example, Author\n and Revision lines) in the included files -- conditionally exclude\n them if they are necessary for stand-alone processing.\n\nProcessing document sections separately\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have divided your AsciiDoc document into separate files (one per\ntop level section) which are combined and processed with the following\ntop level document:\n\n---------------------------------------------------------------------\nCombined Document Title\n=======================\nJoe Bloggs\nv1.0, 12-Aug-03\n\n\\include::section1.txt[]\n\n\\include::section2.txt[]\n\n\\include::section3.txt[]\n---------------------------------------------------------------------\n\nYou also want to process the section files as separate documents.\nThis is easy because asciidoc(1) will quite happily process\n`section1.txt`, `section2.txt` and `section3.txt` separately -- the\nresulting output documents contain the section but have no document\ntitle.\n\nProcessing document snippets\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nUse the `-s` (`--no-header-footer`) command-line option to suppress\nheader and footer output, this is useful if the processed output is to\nbe included in another file. For example:\n\n $ asciidoc -sb docbook section1.txt\n\nasciidoc(1) can be used as a filter, so you can pipe chunks of text\nthrough it. For example:\n\n $ echo 'Hello *World!*' | asciidoc -s -\n <div class=\"paragraph\"><p>Hello <strong>World!</strong></p></div>\n\nBadges in HTML page footers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSee the `[footer]` section in the AsciiDoc distribution `xhtml11.conf`\nconfiguration file.\n\nPretty printing AsciiDoc output\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf the indentation and layout of the asciidoc(1) output is not to your\nliking you can:\n\n1. Change the indentation and layout of configuration file markup\n template sections. The `{empty}` attribute is useful for outputting\n trailing blank lines in markup templates.\n\n2. Use Dave Raggett's http://tidy.sourceforge.net/[HTML Tidy] program\n to tidy asciidoc(1) output. Example:\n\n $ asciidoc -b docbook -o - mydoc.txt | tidy -indent -xml >mydoc.xml\n\n3. Use the `xmllint(1)` format option. Example:\n\n $ xmllint --format mydoc.xml\n\nSupporting minor DocBook DTD variations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe conditional inclusion of DocBook SGML markup at the end of the\ndistribution `docbook45.conf` file illustrates how to support minor\nDTD variations. The included sections override corresponding entries\nfrom preceding sections.\n\nCreating stand-alone HTML documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf you've ever tried to send someone an HTML document that includes\nstylesheets and images you'll know that it's not as straight-forward\nas exchanging a single file. AsciiDoc has options to create\nstand-alone documents containing embedded images, stylesheets and\nscripts. The following AsciiDoc command creates a single file\ncontaining <<X66,embedded images>>, CSS stylesheets, and JavaScript\n(for table of contents and footnotes):\n\n $ asciidoc -a data-uri -a icons -a toc -a max-width=55em article.txt\n\nYou can view the HTML file here: {website}article-standalone.html[]\n\nShipping stand-alone AsciiDoc source\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nReproducing presentation documents from someone else's source has one\nmajor problem: unless your configuration files are the same as the\ncreator's you won't get the same output.\n\nThe solution is to create a single backend specific configuration file\nusing the asciidoc(1) `-c` (`--dump-conf`) command-line option. You\nthen ship this file along with the AsciiDoc source document plus the\n`asciidoc.py` script. The only end user requirement is that they have\nPython installed (and that they consider you a trusted source). This\nexample creates a composite HTML configuration file for `mydoc.txt`:\n\n $ asciidoc -cb xhtml11 mydoc.txt > mydoc-xhtml11.conf\n\nShip `mydoc.txt`, `mydoc-html.conf`, and `asciidoc.py`. With\nthese three files (and a Python interpreter) the recipient can\nregenerate the HMTL output:\n\n $ ./asciidoc.py -eb xhtml11 mydoc.txt\n\nThe `-e` (`--no-conf`) option excludes the use of implicit\nconfiguration files, ensuring that only entries from the\n`mydoc-html.conf` configuration are used.\n\nInserting blank space\n~~~~~~~~~~~~~~~~~~~~~\nAdjust your style sheets to add the correct separation between block\nelements. Inserting blank paragraphs containing a single non-breaking\nspace character `{nbsp}` works but is an ad hoc solution compared\nto using style sheets.\n\nClosing open sections\n~~~~~~~~~~~~~~~~~~~~~\nYou can close off section tags up to level `N` by calling the\n`eval::[Section.setlevel(N)]` system macro. This is useful if you\nwant to include a section composed of raw markup. The following\nexample includes a DocBook glossary division at the top section level\n(level 0):\n\n---------------------------------------------------------------------\n\\ifdef::basebackend-docbook[]\n\n\\eval::[Section.setlevel(0)]\n\n+++++++++++++++++++++++++++++++\n<glossary>\n <title>Glossary</title>\n <glossdiv>\n ...\n </glossdiv>\n</glossary>\n+++++++++++++++++++++++++++++++\n\\endif::basebackend-docbook[]\n---------------------------------------------------------------------\n\nValidating output files\n~~~~~~~~~~~~~~~~~~~~~~~\nUse `xmllint(1)` to check the AsciiDoc generated markup is both well\nformed and valid. Here are some examples:\n\n $ xmllint --nonet --noout --valid docbook-file.xml\n $ xmllint --nonet --noout --valid xhtml11-file.html\n $ xmllint --nonet --noout --valid --html html4-file.html\n\nThe `--valid` option checks the file is valid against the document\ntype's DTD, if the DTD is not installed in your system's catalog then\nit will be fetched from its Internet location. If you omit the\n`--valid` option the document will only be checked that it is well\nformed.\n\nThe online http://validator.w3.org/#validate_by_uri+with_options[W3C\nMarkup Validation Service] is the defacto standard when it comes to\nvalidating HTML (it validates all HTML standards including HTML5).\n\n\n:numbered!:\n\n[glossary]\nGlossary\n--------\n[glossary]\n[[X8]] Block element::\n An AsciiDoc block element is a document entity composed of one or\n more whole lines of text.\n\n[[X34]] Inline element::\n AsciiDoc inline elements occur within block element textual\n content, they perform formatting and substitution tasks.\n\nFormal element::\n An AsciiDoc block element that has a BlockTitle. Formal elements\n are normally listed in front or back matter, for example lists of\n tables, examples and figures.\n\nVerbatim element::\n The word verbatim indicates that white space and line breaks in\n the source document are to be preserved in the output document.\n\n\n[appendix]\nMigration Notes\n---------------\n[[X53]]\nVersion 7 to version 8\n~~~~~~~~~~~~~~~~~~~~~~\n- A new set of quotes has been introduced which may match inline text\n in existing documents -- if they do you'll need to escape the\n matched text with backslashes.\n- The index entry inline macro syntax has changed -- if your documents\n include indexes you may need to edit them.\n- Replaced a2x(1) `--no-icons` and `--no-copy` options with their\n negated equivalents: `--icons` and `--copy` respectively. The\n default behavior has also changed -- the use of icons and copying of\n icon and CSS files must be specified explicitly with the `--icons`\n and `--copy` options.\n\nThe rationale for the changes can be found in the AsciiDoc\n`CHANGELOG`.\n\nNOTE: If you want to disable unconstrained quotes, the new alternative\nconstrained quotes syntax and the new index entry syntax then you can\ndefine the attribute `asciidoc7compatible` (for example by using the\n`-a asciidoc7compatible` command-line option).\n\n[[X38]]\n[appendix]\nPackager Notes\n--------------\nRead the `README` and `INSTALL` files (in the distribution root\ndirectory) for install prerequisites and procedures. The distribution\n`Makefile.in` (used by `configure` to generate the `Makefile`) is the\ncanonical installation procedure.\n\n\n[[X39]]\n[appendix]\nAsciiDoc Safe Mode\n-------------------\nAsciiDoc 'safe mode' skips potentially dangerous scripted sections in\nAsciiDoc source files by inhibiting the execution of arbitrary code or\nthe inclusion of arbitrary files.\n\nThe safe mode is disabled by default, it can be enabled with the\nasciidoc(1) `--safe` command-line option.\n\n.Safe mode constraints\n- `eval`, `sys` and `sys2` executable attributes and block macros are\n not executed.\n- `include::<filename>[]` and `include1::<filename>[]` block macro\n files must reside inside the parent file's directory.\n- `{include:<filename>}` executable attribute files must reside\n inside the source document directory.\n- Passthrough Blocks are dropped.\n\n[WARNING]\n=====================================================================\nThe safe mode is not designed to protect against unsafe AsciiDoc\nconfiguration files. Be especially careful when:\n\n1. Implementing filters.\n2. Implementing elements that don't escape special characters.\n3. Accepting configuration files from untrusted sources.\n=====================================================================\n\n\n[appendix]\nUsing AsciiDoc with non-English Languages\n-----------------------------------------\nAsciiDoc can process UTF-8 character sets but there are some things\nyou need to be aware of:\n\n- If you are generating output documents using a DocBook toolchain\n then you should set the AsciiDoc `lang` attribute to the appropriate\n language (it defaults to `en` (English)). This will ensure things\n like table of contents, figure and table captions and admonition\n captions are output in the specified language. For example:\n\n $ a2x -a lang=es doc/article.txt\n\n- If you are outputting HTML directly from asciidoc(1) you'll\n need to set the various `*_caption` attributes to match your target\n language (see the list of captions and titles in the `[attributes]`\n section of the distribution `lang-*.conf` files). The easiest way is\n to create a language `.conf` file (see the AsciiDoc's `lang-en.conf`\n file).\n+\nNOTE: You still use the 'NOTE', 'CAUTION', 'TIP', 'WARNING',\n'IMPORTANT' captions in the AsciiDoc source, they get translated in\nthe HTML output file.\n\n- asciidoc(1) automatically loads configuration files named like\n `lang-<lang>.conf` where `<lang>` is a two letter language code that\n matches the current AsciiDoc `lang` attribute. See also\n <<X27,Configuration File Names and Locations>>.\n\n\n[appendix]\nVim Syntax Highlighter\n----------------------\nSyntax highlighting is incredibly useful, in addition to making\nreading AsciiDoc documents much easier syntax highlighting also helps\nyou catch AsciiDoc syntax errors as you write your documents.\n\nThe AsciiDoc `./vim/` distribution directory contains Vim syntax\nhighlighter and filetype detection scripts for AsciiDoc. Syntax\nhighlighting makes it much easier to spot AsciiDoc syntax errors.\n\nIf Vim is installed on your system the AsciiDoc installer\n(`install.sh`) will automatically install the vim scripts in the Vim\nglobal configuration directory (`/etc/vim`).\n\nYou can also turn on syntax highlighting by adding the following line\nto the end of you AsciiDoc source files:\n\n // vim: set syntax=asciidoc:\n\nTIP: Bold fonts are often easier to read, use the Vim `:set\nbackground=dark` command to set bold bright fonts.\n\nNOTE: There are a number of alternative syntax highlighters for\nvarious editors listed on the {website}[AsciiDoc website].\n\nLimitations\n~~~~~~~~~~~\nThe current implementation does a reasonable job but on occasions gets\nthings wrong:\n\n- Nested quoted text formatting is highlighted according to the outer\n format.\n- If a closing Example Block delimiter is sometimes mistaken for a\n title underline. A workaround is to insert a blank line before the\n closing delimiter.\n- Lines within a paragraph starting with equals characters may be\n highlighted as single-line titles.\n- Lines within a paragraph beginning with a period may be highlighted\n as block titles.\n\n\n[[X74]]\n[appendix]\nAttribute Options\n-----------------\nHere is the list of predefined <<X75,attribute list options>>:\n\n\n[cols=\"2e,2,2,5\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Option|Backends|AsciiDoc Elements|Description\n\n|autowidth |xhtml11, html5, html4 |table|\nThe column widths are determined by the browser, not the AsciiDoc\n'cols' attribute. If there is no 'width' attribute the table width is\nalso left up to the browser.\n\n|unbreakable |xhtml11, html5 |block elements|\n'unbreakable' attempts to keep the block element together on a single\nprinted page c.f. the 'breakable' and 'unbreakable' docbook (XSL/FO)\noptions below.\n\n|breakable, unbreakable |docbook (XSL/FO) |table, example, block image|\nThe 'breakable' options allows block elements to break across page\nboundaries; 'unbreakable' attempts to keep the block element together\non a single page. If neither option is specified the default XSL\nstylesheet behavior prevails.\n\n|compact |docbook, xhtml11, html5 |bulleted list, numbered list|\nMinimizes vertical space in the list\n\n|footer |docbook, xhtml11, html5, html4 |table|\nThe last row of the table is rendered as a footer.\n\n|header |docbook, xhtml11, html5, html4 |table|\nThe first row of the table is rendered as a header.\n\n|pgwide |docbook (XSL/FO) |table, block image, horizontal labeled list|\nSpecifies that the element should be rendered across the full text\nwidth of the page irrespective of the current indentation.\n\n|strong |xhtml11, html5, html4 |labeled lists|\nEmboldens label text.\n|====================================================================\n\n\n[[X82]]\n[appendix]\nDiagnostics\n-----------\nThe `asciidoc(1)` `--verbose` command-line option prints additional\ninformation to stderr: files processed, filters processed, warnings,\nsystem attribute evaluation.\n\nA special attribute named 'trace' enables the output of\nelement-by-element diagnostic messages detailing output markup\ngeneration to stderr. The 'trace' attribute can be set on the\ncommand-line or from within the document using <<X18,Attribute\nEntries>> (the latter allows tracing to be confined to specific\nportions of the document).\n\n- Trace messages print the source file name and line number and the\n trace name followed by related markup.\n- 'trace names' are normally the names of AsciiDoc elements (see the\n list below).\n- The trace message is only printed if the 'trace' attribute value\n matches the start of a 'trace name'. The 'trace' attribute value can\n be any Python regular expression. If a trace value is not specified\n all trace messages will be printed (this can result in large amounts\n of output if applied to the whole document).\n\n- In the case of inline substitutions:\n * The text before and after the substitution is printed; the before\n text is preceded by a line containing `<<<` and the after text by\n a line containing `>>>`.\n * The 'subs' trace value is an alias for all inline substitutions.\n\n.Trace names\n.....................................................................\n<blockname> block close\n<blockname> block open\n<subs>\ndropped line (a line containing an undefined attribute reference).\nfloating title\nfooter\nheader\nlist close\nlist entry close\nlist entry open\nlist item close\nlist item open\nlist label close\nlist label open\nlist open\nmacro block (a block macro)\nname (man page NAME section)\nparagraph\npreamble close\npreamble open\npush blockname\npop blockname\nsection close\nsection open: level <level>\nsubs (all inline substitutions)\ntable\n.....................................................................\n\nWhere:\n\n- `<level>` is section level number '0...4'.\n- `<blockname>` is a delimited block name: 'comment', 'sidebar',\n 'open', 'pass', 'listing', 'literal', 'quote', 'example'.\n- `<subs>` is an inline substitution type:\n 'specialcharacters','quotes','specialwords', 'replacements',\n 'attributes','macros','callouts', 'replacements2', 'replacements3'.\n\nCommand-line examples:\n\n. Trace the entire document.\n\n $ asciidoc -a trace mydoc.txt\n\n. Trace messages whose names start with `quotes` or `macros`:\n\n $ asciidoc -a 'trace=quotes|macros' mydoc.txt\n\n. Print the first line of each trace message:\n\n $ asciidoc -a trace mydoc.txt 2>&1 | grep ^TRACE:\n\nAttribute Entry examples:\n\n. Begin printing all trace messages:\n\n :trace:\n\n. Print only matched trace messages:\n\n :trace: quotes|macros\n\n. Turn trace messages off:\n\n :trace!:\n\n\n[[X88]]\n[appendix]\nBackend Attributes\n------------------\nThis table contains a list of optional attributes that influence the\ngenerated outputs.\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|badges |xhtml11, html5 |\nLink badges ('XHTML 1.1' and 'CSS') in document footers. By default\nbadges are omitted ('badges' is undefined).\n\nNOTE: The path names of images, icons and scripts are relative path\nnames to the output document not the source document.\n\n|data-uri |xhtml11, html5 |\nEmbed images using the <<X66,data: uri scheme>>.\n\n|css-signature |html5, xhtml11 |\nSet a 'CSS signature' for the document (sets the 'id' attribute of the\nHTML 'body' element). CSS signatures provide a mechanism that allows\nusers to personalize the document appearance. The term 'CSS signature'\nwas http://archivist.incutio.com/viewlist/css-discuss/13291[coined by\nEric Meyer].\n\n\n|disable-javascript |xhtml11, html5 |\nIf the `disable-javascript` attribute is defined the `asciidoc.js`\nJavaScript is not embedded or linked to the output document. By\ndefault AsciiDoc automatically embeds or links the `asciidoc.js`\nJavaScript to the output document. The script dynamically generates\n<<X91,table of contents>> and <<X92,footnotes>>.\n\n|[[X97]] docinfo, docinfo1, docinfo2 |All backends |\nThese three attributes control which <<X87,document information\nfiles>> will be included in the the header of the output file:\n\ndocinfo:: Include `<filename>-docinfo.<ext>`\ndocinfo1:: Include `docinfo.<ext>`\ndocinfo2:: Include `docinfo.<ext>` and `<filename>-docinfo.<ext>`\n\nWhere `<filename>` is the file name (sans extension) of the AsciiDoc\ninput file and `<ext>` is `.html` for HTML outputs or `.xml` for\nDocBook outputs. If the input file is the standard input then the\noutput file name is used. The following example will include the\n`mydoc-docinfo.xml` docinfo file in the DocBook `mydoc.xml` output\nfile:\n\n $ asciidoc -a docinfo -b docbook mydoc.txt\n\nThis next example will include `docinfo.html` and `mydoc-docinfo.html`\ndocinfo files in the HTML output file:\n\n $ asciidoc -a docinfo2 -b html4 mydoc.txt\n\n\n|[[X54]]encoding |html4, html5, xhtml11, docbook |\nSet the input and output document character set encoding. For example\nthe `--attribute encoding=ISO-8859-1` command-line option will set the\ncharacter set encoding to `ISO-8859-1`.\n\n- The default encoding is UTF-8.\n- This attribute specifies the character set in the output document.\n- The encoding name must correspond to a Python codec name or alias.\n- The 'encoding' attribute can be set using an AttributeEntry inside\n the document header. For example:\n\n :encoding: ISO-8859-1\n\n|[[X45]]icons |xhtml11, html5 |\nLink admonition paragraph and admonition block icon images and badge\nimages. By default 'icons' is undefined and text is used in place of\nicon images.\n\n|[[X44]]iconsdir |html4, html5, xhtml11, docbook |\nThe name of the directory containing linked admonition icons,\nnavigation icons and the `callouts` sub-directory (the `callouts`\nsub-directory contains <<X105,callout>> number images). 'iconsdir'\ndefaults to `./images/icons`.\n\n|imagesdir |html4, html5, xhtml11, docbook |\nIf this attribute is defined it is prepended to the target image file\nname paths in inline and block image macros.\n\n|keywords, description, title |html4, html5, xhtml11 |\nThe 'keywords' and 'description' attributes set the correspondingly\nnamed HTML meta tag contents; the 'title' attribute sets the HTML\ntitle tag contents. Their principle use is for SEO (Search Engine\nOptimisation). All three are optional, but if they are used they must\nappear in the document header (or on the command-line). If 'title' is\nnot specified the AsciiDoc document title is used.\n\n|linkcss |html5, xhtml11 |\nLink CSS stylesheets and JavaScripts. By default 'linkcss' is\nundefined in which case stylesheets and scripts are automatically\nembedded in the output document.\n\n|[[X103]]max-width |html5, xhtml11 |\nSet the document maximum display width (sets the 'body' element CSS\n'max-width' property).\n\n|numbered |html4, html5, xhtml11, docbook (XSL Stylesheets) |\nAdds section numbers to section titles. The 'docbook' backend ignores\n'numbered' attribute entries after the document header.\n\n|plaintext | All backends |\nIf this global attribute is defined all inline substitutions are\nsuppressed and block indents are retained. This option is useful when\ndealing with large amounts of imported plain text.\n\n|quirks |xhtml11 |\nInclude the `xhtml11-quirks.conf` configuration file and\n`xhtml11-quirks.css` <<X35,stylesheet>> to work around IE6 browser\nincompatibilities. This feature is deprecated and its use is\ndiscouraged -- documents are still viewable in IE6 without it.\n\n|revremark |docbook |\nA short summary of changes in this document revision. Must be defined\nprior to the first document section. The document also needs to be\ndated to output this attribute.\n\n|scriptsdir |html5, xhtml11 |\nThe name of the directory containing linked JavaScripts.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|sgml |docbook45 |\nThe `--backend=docbook45` command-line option produces DocBook 4.5\nXML. You can produce the older DocBook SGML format using the\n`--attribute sgml` command-line option.\n\n|stylesdir |html5, xhtml11 |\nThe name of the directory containing linked or embedded\n<<X35,stylesheets>>.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|stylesheet |html5, xhtml11 |\nThe file name of an optional additional CSS <<X35,stylesheet>>.\n\n|theme |html5, xhtml11 |\nUse alternative stylesheet (see <<X35,Stylesheets>>).\n\n|[[X91]]toc |html5, xhtml11, docbook (XSL Stylesheets) |\nAdds a table of contents to the start of an article or book document.\nThe `toc` attribute can be specified using the `--attribute toc`\ncommand-line option or a `:toc:` attribute entry in the document\nheader. The 'toc' attribute is defined by default when the 'docbook'\nbackend is used. To disable table of contents generation undefine the\n'toc' attribute by putting a `:toc!:` attribute entry in the document\nheader or from the command-line with an `--attribute toc!` option.\n\n*xhtml11 and html5 backends*\n\n- JavaScript needs to be enabled in your browser.\n- The following example generates a numbered table of contents using a\n JavaScript embedded in the `mydoc.html` output document:\n\n $ asciidoc -a toc -a numbered mydoc.txt\n\n|toc2 |html5, xhtml11 |\nAdds a scrollable table of contents in the left hand margin of an\narticle or book document. Use the 'max-width' attribute to change the\ncontent width. In all other respects behaves the same as the 'toc'\nattribute.\n\n|toc-placement |html5, xhtml11 |\nWhen set to 'auto' (the default value) asciidoc(1) will place the\ntable of contents in the document header. When 'toc-placement' is set\nto 'manual' the TOC can be positioned anywhere in the document by\nplacing the `toc::[]` block macro at the point you want the TOC to\nappear.\n\nNOTE: If you use 'toc-placement' then you also have to define the\n<<X91,toc>> attribute.\n\n|toc-title |html5, xhtml11 |\nSets the table of contents title (defaults to 'Table of Contents').\n\n|toclevels |html5, xhtml11 |\nSets the number of title levels (1..4) reported in the table of\ncontents (see the 'toc' attribute above). Defaults to 2 and must be\nused with the 'toc' attribute. Example usage:\n\n $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt\n\n|====================================================================\n\n\n[appendix]\nLicense\n-------\nAsciiDoc is free software; you can redistribute it and/or modify it\nunder the terms of the 'GNU General Public License version 2' (GPLv2)\nas published by the Free Software Foundation.\n\nAsciiDoc is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nGeneral Public License version 2 for more details.\n\nAsciiDoc Highlighter sponsored by O'Reilly Media\n\nCopyright (C) 2002-2011 Stuart Rackham.\n" - } - ], - "id": "tDhk-3Cs", - "createdAt": 1659495355948, - "updatedAt": 1659495379957 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ASL", - "content": [ - { - "label": "Fragment 1", - "language": "asl", - "value": "/*\n * Intel ACPI Component Architecture\n * AML/ASL+ Disassembler version 20180105\n *\n * ASL example\n */\nDefinitionBlock (\"\", \"SSDT\", 1, \"PmRef\", \"Cpu0Ist\", 0x00003000)\n{\n External (_PR_.CPU0, DeviceObj)\n External (_SB_.CPUP, UnknownObj)\n\n Scope (\\_PR.CPU0)\n {\n Method (_PCT, 0, NotSerialized) // _PCT: Performance Control\n {\n If (((CFGD & One) && (PDC0 & One)))\n {\n Return (Package (0x02)\n {\n ResourceTemplate ()\n {\n Register (FFixedHW, \n 0x00, // Bit Width\n 0x00, // Bit Offset\n 0x0000000000000000, // Address\n ,)\n }, \n\n ResourceTemplate ()\n {\n Register (FFixedHW, \n 0x00, // Bit Width\n 0x00, // Bit Offset\n 0x0000000000000000, // Address\n ,)\n }\n })\n }\n\n Return (Package (0x02)\n {\n ResourceTemplate ()\n {\n Register (SystemIO, \n 0x10, // Bit Width\n 0x00, // Bit Offset\n 0x0000000000001000, // Address\n ,)\n }, \n\n ResourceTemplate ()\n {\n Register (SystemIO, \n 0x08, // Bit Width\n 0x00, // Bit Offset\n 0x00000000000000B3, // Address\n ,)\n }\n })\n }\n\n Name (PSDF, Zero)\n Method (_PSD, 0, NotSerialized) // _PSD: Power State Dependencies\n {\n If (!PSDF)\n {\n DerefOf (HPSD [Zero]) [0x04] = TCNT /* External reference */\n DerefOf (SPSD [Zero]) [0x04] = TCNT /* External reference */\n PSDF = Ones\n }\n\n If ((PDC0 & 0x0800))\n {\n Return (HPSD) /* \\_PR_.CPU0.HPSD */\n }\n\n Return (SPSD) /* \\_PR_.CPU0.SPSD */\n }\n }\n}\n\n" - } - ], - "id": "Rn6BOXbG", - "createdAt": 1659495382193, - "updatedAt": 1659495397930 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ASP vb.NET / VBScript", - "content": [ - { - "label": "Fragment 1", - "language": "asp_vb_net", - "value": "myfilename = \"C:\\Wikipedia - VBScript - Example - Hello World.txt\"\nMakeHelloWorldFile myfilename\n \nSub MakeHelloWorldFile (FileName)\n 'Create a new file in C: drive or overwrite existing file\n Set FSO = CreateObject(\"Scripting.FileSystemObject\")\n If FSO.FileExists(FileName) Then \n Answer = MsgBox (\"File \" & FileName & \" exists ... OK to overwrite?\", vbOKCancel)\n 'If button selected is not OK, then quit now\n 'vbOK is a language constant\n If Answer <> vbOK Then Exit Sub\n Else\n 'Confirm OK to create\n Answer = MsgBox (\"File \" & FileName & \" ... OK to create?\", vbOKCancel)\n If Answer <> vbOK Then Exit Sub\n End If\n 'Create new file (or replace an existing file)\n Set FileObject = FSO.CreateTextFile (FileName)\n FileObject.WriteLine \"Time ... \" & Now()\n FileObject.WriteLine \"Hello World\"\n FileObject.Close()\n MsgBox \"File \" & FileName & \" ... updated.\"\nEnd Sub" - } - ], - "id": "HVqfS-xI", - "createdAt": 1659495399059, - "updatedAt": 1659495473147 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Assembly x86", - "content": [ - { - "label": "Fragment 1", - "language": "assembly_x86", - "value": "section\t.text\n global main ;must be declared for using gcc\n\nmain:\t ;tell linker entry point\n\n\tmov\tedx, len\t ;message length\n\tmov\tecx, msg\t ;message to write\n\tmov\tebx, 1\t ;file descriptor (stdout)\n\tmov\teax, 4\t ;system call number (sys_write)\n\tint\t0x80\t ;call kernel\n\n\tmov\teax, 1\t ;system call number (sys_exit)\n\tint\t0x80\t ;call kernel\n\nsection\t.data\n\nmsg\tdb\t'Hello, world!',0xa\t;our dear string\nlen\tequ\t$ - msg\t\t\t;length of our dear string\n" - } - ], - "id": "eXuPh5Es", - "createdAt": 1659495407360, - "updatedAt": 1659495444742 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "AutoHotkey / Autoit", - "content": [ - { - "label": "Fragment 1", - "language": "autohotkey", - "value": "#NoEnv\nSetBatchLines -1\n\nCoordMode Mouse, Screen\nOnExit GuiClose\n\nzoom := 9\n\ncomputeSize(){\n\tglobal as_x\n\tas_x := Round(ws_x/zoom/2 - 0.5)\n\tif (zoom>1) {\n\t\tpix := Round(zoom)\n\t} ele {\n\t\tpix := 1\n\t}\n ToolTip Message %as_x% %zoom% %ws_x% %hws_x% \n}\n\nhdc_frame := DllCall(\"GetDC\", UInt, MagnifierID)\n\n; comment\nDrawCross(byRef x=\"\", rX,rY,z, dc){\n ;specify the style, thickness and color of the cross lines\n h_pen := DllCall( \"gdi32.dll\\CreatePen\", Int, 0, Int, 1, UInt, 0x0000FF)\n}\n\n;Ctrl ^; Shift +; Win #; Alt !\n^NumPadAdd::\n^WheelUp:: \n^;:: ;comment\n If(zoom < ws_x and ( A_ThisHotKey = \"^WheelUp\" or A_ThisHotKey =\"^NumPadAdd\") )\n\t\tzoom *= 1.189207115 ; sqrt(sqrt(2))\n\tGosub,setZoom\nreturn\n" - } - ], - "id": "h9uzH9Df", - "createdAt": 1659495475278, - "updatedAt": 1659495970811 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Bash / Shell", - "content": [ - { - "label": "Fragment 1", - "language": "sh", - "value": "#!/bin/sh\n\n# Script to open a browser to current branch\n# Repo formats:\n# ssh git@github.com:richo/gh_pr.git\n# http https://richoH@github.com/richo/gh_pr.git\n# git git://github.com/richo/gh_pr.git\n\nusername=`git config --get github.user`\n\nget_repo() {\n git remote -v | grep ${@:-$username} | while read remote; do\n if repo=`echo $remote | grep -E -o \"git@github.com:[^ ]*\"`; then\n echo $repo | sed -e \"s/^git@github\\.com://\" -e \"s/\\.git$//\"\n exit 1\n fi\n if repo=`echo $remote | grep -E -o \"https?://([^@]*@)?github.com/[^ ]*\\.git\"`; then\n echo $repo | sed -e \"s|^https?://||\" -e \"s/^.*github\\.com\\///\" -e \"s/\\.git$//\"\n exit 1\n fi\n if repo=`echo $remote | grep -E -o \"git://github.com/[^ ]*\\.git\"`; then\n echo $repo | sed -e \"s|^git://github.com/||\" -e \"s/\\.git$//\"\n exit 1\n fi\n done\n\n if [ $? -eq 0 ]; then\n echo \"Couldn't find a valid remote\" >&2\n exit 1\n fi\n}\n\necho ${#x[@]}\n\nif repo=`get_repo $@`; then\n branch=`git symbolic-ref HEAD 2>/dev/null`\n echo \"http://github.com/$repo/pull/new/${branch##refs/heads/}\"\nelse\n exit 1\nfi\n" - } - ], - "id": "GMIZPvNc", - "createdAt": 1659496009403, - "updatedAt": 1659496046361 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "BatchFile", - "content": [ - { - "label": "Fragment 1", - "language": "batchfile", - "value": ":: batch file highlighting in Ace!\n@echo off\n\nCALL set var1=%cd%\necho unhide everything in %var1%!\n\n:: FOR loop in bat is super strange!\nFOR /f \"tokens=*\" %%G IN ('dir /A:D /b') DO (\necho %var1%%%G\nattrib -r -a -h -s \"%var1%%%G\" /D /S\n)\n\npause\n\nREM that's all\n" - } - ], - "id": "JZ3lQT7I", - "createdAt": 1659496051082, - "updatedAt": 1659496082487 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "C & C++", - "content": [ - { - "label": "Fragment 1", - "language": "c_cpp", - "value": "// compound assignment operators\n\n#include <iostream>\n\n#include \\\n <iostream>\n\n#include \\\n \\\n <iostream>\n\n#include \\\n \\\n \"iostream\"\n\n#include <boost/asio/io_service.hpp>\n#include \"boost/asio/io_service.hpp\"\n\n#include \\\n \\\n \"iostream\" \\\n \"string\" \\\n <vector>\n \nusing namespace std;\n\n//\nint main ()\n{\n int a, b=3; /* foobar */\n a = b; // single line comment\\\n continued\n a+=2; // equivalent to a=a+2\n cout << a;\n #if VERBOSE >= 2\n prints(\"trace message\\n\");\n #endif\n return 0;\n}\n\n/* Print an error message and get out */\n#define ABORT \\\n do { \\\n print( \"Abort\\n\" ); \\\n exit(8); \\\n} while (0) /* Note: No semicolon */" - } - ], - "id": "1pea5dPy", - "createdAt": 1659496085994, - "updatedAt": 1659496111732 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "C#", - "content": [ - { - "label": "Fragment 1", - "language": "csharp", - "value": "public void HelloWorld() {\n //Say Hello!\n Console.WriteLine(\"Hello World\");\n}" - } - ], - "id": "wEHTLKi1", - "createdAt": 1659496115792, - "updatedAt": 1659496137710 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Cirru", - "content": [ - { - "label": "Fragment 1", - "language": "cirru", - "value": "-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr,\n\nset a (int 2)\n\nprint (self)\n\nset c (child)\n\nunder c\n under parent\n print a\n\nprint $ get c a\n\nset c x (int 3)\nprint $ get c x\n\nset just-print $ code\n print a\n\nprint just-print\n\neval (self) just-print\neval just-print\n\nprint (string \"string with space\")\nprint (string \"escapes \\n \\\"\\\\\")\n\nbrackets ((((()))))\n\n\"eval\" $ string \"eval\"\n\nprint (add $ (int 1) (int 2))\n\nprint $ unwrap $\n map (a $ int 1) (b $ int 2)\n\nprint a\n int 1\n , b c\n int 2\n , d" - } - ], - "id": "jb3ZmJqm", - "createdAt": 1659496321101, - "updatedAt": 1659496366135 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Clojure", - "content": [ - { - "label": "Fragment 1", - "language": "clojure", - "value": "(defn parting\n \"returns a String parting in a given language\"\n ([] (parting \"World\"))\n ([name] (parting name \"en\"))\n ([name language]\n ; condp is similar to a case statement in other languages.\n ; It is described in more detail later.\n ; It is used here to take different actions based on whether the\n ; parameter \"language\" is set to \"en\", \"es\" or something else.\n (condp = language\n \"en\" (str \"Goodbye, \" name)\n \"es\" (str \"Adios, \" name)\n (throw (IllegalArgumentException.\n (str \"unsupported language \" language))))))\n\n(println (parting)) ; -> Goodbye, World\n(println (parting \"Mark\")) ; -> Goodbye, Mark\n(println (parting \"Mark\" \"es\")) ; -> Adios, Mark\n(println (parting \"Mark\", \"xy\")) ; -> java.lang.IllegalArgumentException: unsupported language xy" - } - ], - "id": "n8stzXZu", - "createdAt": 1659496368210, - "updatedAt": 1659496386902 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Cobol", - "content": [ - { - "label": "Fragment 1", - "language": "cobol", - "value": "GNU >>SOURCE FORMAT IS FIXED\nCobol *> ***************************************************************\n *> Purpose: Say hello to GNU Cobol\nHello *> Tectonics: cobc -x bigworld.cob\nmoney *> ***************************************************************\n identification division.\n program-id. bigworld.\n\nDATA data division.\n working-storage section.\n 01 hello pic $$$$,$$$,$$$,$$$,$$$,$$$.99.\n 01 world pic s9(18)v99 value zero.\n\n 01 people pic ZZZ,ZZZ,ZZZ,ZZ9.\n 01 persons pic 9(18) value 7182044470.\n\n 01 each pic 9(5)v99 value 26202.42.\n\n *> ***************************************************************\nCODE procedure division.\n\n multiply persons by each giving world\n on size error\n display \"We did it. We broke the world bank\" end-display\n end-multiply\n\n move world to hello\n move persons to people\n\n display \"Hello, world\" end-display\n display \" \" end-display\n display\n \"On \" function locale-date(20130927)\n \" at \" function locale-time(120000)\n \", according to UN estimates:\" \n end-display\n display\n \"You were home to some \" people \" people,\"\n \" with an estimated worth of \" hello\n end-display\n\n goback.\n end program bigworld.\n" - } - ], - "id": "OvDpcRnU", - "createdAt": 1659496388215, - "updatedAt": 1659496404486 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "CoffeeScipt", - "content": [ - { - "label": "Fragment 1", - "language": "coffee", - "value": "#!/usr/bin/env coffee\n\ntry\n throw URIError decodeURI(0xC0ffee * 123456.7e-8 / .9)\ncatch e\n console.log 'qstring' + \"qqstring\" + '''\n qdoc\n ''' + \"\"\"\n qqdoc\n \"\"\"\n\ndo ->\n ###\n herecomment\n ###\n re = /regex/imgy.test ///\n heregex # comment\n ///imgy\n this isnt: `just JavaScript`\n undefined\n \nsentence = \"#{ 22 / 7 } is a decent approximation of π\"" - } - ], - "id": "mtXYn9sv", - "createdAt": 1659496405486, - "updatedAt": 1659496434410 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "ColdFusion", - "content": [ - { - "label": "Fragment 1", - "language": "coldfusion", - "value": "<!--- hello world --->\n\n<cfset welcome=\"Hello World!\">\n\n<cfoutput>#welcome#</cfoutput>" - } - ], - "id": "5M0DEhNa", - "createdAt": 1659496437877, - "updatedAt": 1659496663556 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Crystal", - "content": [ - { - "label": "Fragment 1", - "language": "crystal", - "value": "# crystal comment\n\nrequire \"llvm\"\n\nNUM_CELLS = 30000\nCELL_SIZE_IN_BYTES = 1\n\nabstract class Instruction\n abstract def compile(program, bb)\nend\n\nclass Increment < Instruction\n def initialize(@amount : Int32)\n end\n\n def compile(program, bb)\n cell_val_is_zero = builder.icmp LLVM::IntPredicate::EQ, cell_val, zero\n call_args = [@ctx.int32.const_int(NUM_CELLS), @ctx.int32.const_int(CELL_SIZE_IN_BYTES)]\n builder.cond cell_val_is_zero, loop_after, loop_body_block\n\n @body.each do |instruction|\n loop_body_block = instruction.compile(program, loop_body_block)\n end\n\n builder.position_at_end loop_body_block\n\n unless matching_close_index\n error \"Unmatched '[' at position #{i}\"\n end\n\n bb\n end\nend\n" - } - ], - "id": "dAN42Kbk", - "createdAt": 1659496807660, - "updatedAt": 1659496827338 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Csound", - "content": [ - { - "label": "Fragment 1", - "language": "csound_orchestra", - "value": "/*\n * comment\n */\n; comment\n// comment\n\ninstr/**/1,/**/N_a_M_e_,/**/+Name/**///\n iDuration = p3\n outc:a(aSignal)\nendin\n\nopcode/**/aUDO,/**/i[],/**/aik//\n aUDO\nendop\n\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\n\"characters$MACRO.\"\n\"\\\\\\a\\b\\n\\r\\t\\012\\345\\67\\\"\"\n\n{{\ncharacters$MACRO.\n}}\n{{\\\\\\a\\b\\n\\r\\t\\\"\\012\\345\\67}}\n\n+ - ~ ¬ ! * / ^ % << >> < > <= >= == != & # | && || ? : += -= *= /=\n\n0dbfs A4 kr ksmps nchnls nchnls_i sr\n\ndo else elseif endif enduntil fi if ithen kthen od then until while\nreturn rireturn\n\naLabel:\n label2:\n\ngoto aLabel\nreinit aLabel\ncggoto 1==0, aLabel\ntimout 0, 0, aLabel\nloop_ge 0, 0, 0, aLabel\n\nreadscore {{\ni 1 0 0\n}}\npyrun {{\n# Python\n}}\nlua_exec {{\n-- Lua\n}}\n\n#include/**/\"file.udo\"\n#include/**/|file.udo|\n\n#ifdef MACRO\n#else\n#ifndef MACRO\n#endif\n#undef MACRO\n\n# define MACRO#macro_body#\n#define/**/\nMACRO/**/\n#\\#macro\nbody\\##\n\n#define MACRO(ARG1#ARG2) #macro_body#\n#define/**/\nMACRO(ARG1'ARG2'ARG3)/**/\n#\\#macro\nbody\\##\n\n$MACRO $MACRO.\n$MACRO(x)\n@0\n@@ 1\n$MACRO.(((x#y\\)))' \"(#'x)\\)x\\))\"# {{x\\))x)\\)(#'}});\n" - } - ], - "id": "B3duvVHk", - "createdAt": 1659496829249, - "updatedAt": 1659496898816 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Csound Document", - "content": [ - { - "label": "Fragment 1", - "language": "csound_document", - "value": "text\n<CsoundSynthesizer>\n<CsInstruments>\n0dbfs = 1\nprints \"hello, world\\n\"\n</CsInstruments>\n<CsScore>\ni 1 0 0\n</CsScore>\n<html>\n<!DOCTYPE html>\n</html>\n</CsoundSynthesizer>\n" - } - ], - "id": "u9rXri7I", - "createdAt": 1659496900901, - "updatedAt": 1659496925580 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Csound Score", - "content": [ - { - "label": "Fragment 1", - "language": "csound_score", - "value": "/*\n * comment\n */\n; comment\n// comment\na B b C d e f i q s t v x y\nz\nnp0 nP1 Np2 NP3\nm/**/label;\nn label\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\"characters$MACRO.\"\n{ 1 I\n { 2 J\n { 3 K\n $I $J $K\n }\n }\n}\n#include \"score.sco\"\n" - } - ], - "id": "WPZVP1_O", - "createdAt": 1659496928964, - "updatedAt": 1659497009485 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "CSS", - "content": [ - { - "label": "Fragment 1", - "language": "css", - "value": ".text-layer {\n font: 12px Monaco, \"Courier New\", monospace;\n font-size: 3vmin;\n cursor: text;\n}\n\n.blinker {\n animation: blink 1s linear infinite alternate;\n}\n\n@keyframes blink {\n 0%, 40% {\n opacity: 0; /*\n */\n opacity: 1\n }\n\n 40.5%, 100% {\n opacity: 1\n }\n}\n\n@document url(http://c9.io/), url-prefix(http://ace.c9.io/build/),\n domain(c9.io), regexp(\"https:.*\") /**/\n{\n /**/\n img[title]:before \n {\n content: attr(title) \"\\AImage \\\n retrieved from\"\n attr(src); /*\n */\n white-space: pre;\n display: block;\n background: url(asdasd); \"err\n }\n}\n\n@viewport {\n min-zoom: 1;\n max-zoom: 200%;\n user-zoom: fixed;\n}\n" - } - ], - "id": "kmxoH0Wa", - "createdAt": 1659497023275, - "updatedAt": 1659497059514 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Curly", - "content": [ - { - "label": "Fragment 1", - "language": "curly", - "value": "<html>\n <head>\n\n <style type=\"text/css\">\n .text-layer {\n font-family: Monaco, \"Courier New\", monospace;\n font-size: 12px;\n cursor: text;\n }\n </style>\n\n </head>\n <body>\n <h1 style=\"color:red\">{{author_name}}</h1>\n </body>\n</html>\n" - } - ], - "id": "W4SWjdMO", - "createdAt": 1659497060906, - "updatedAt": 1659497085847 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "D", - "content": [ - { - "label": "Fragment 1", - "language": "d", - "value": "#!/usr/bin/env rdmd\n// Computes average line length for standard input.\nimport std.stdio;\n\nvoid main() {\n ulong lines = 0;\n double sumLength = 0;\n foreach (line; stdin.byLine()) {\n ++lines;\n sumLength += line.length;\n }\n writeln(\"Average line length: \",\n lines ? sumLength / lines : 0);\n}" - } - ], - "id": "GNeWkatM", - "createdAt": 1659497081648, - "updatedAt": 1659497109051 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Dart", - "content": [ - { - "label": "Fragment 1", - "language": "dart", - "value": "// Go ahead and modify this example.\n\nimport \"dart:html\";\n\n// Computes the nth Fibonacci number.\nint fibonacci(int n) {\n if (n < 2) return n;\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\n// Displays a Fibonacci number.\nvoid main() {\n int i = 20;\n String message = \"fibonacci($i) = ${fibonacci(i)}\";\n\n // This example uses HTML to display the result and it will appear\n // in a nested HTML frame (an iframe).\n document.body.append(new HeadingElement.h1()..appendText(message));\n}\n" - } - ], - "id": "Nw7CRmhq", - "createdAt": 1659497110578, - "updatedAt": 1659497122970 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Diff", - "content": [ - { - "label": "Fragment 1", - "language": "diff", - "value": "diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js\nindex 23fc3fc..ed3b273 100644\n--- a/lib/ace/edit_session.js\n+++ b/lib/ace/edit_session.js\n@@ -51,6 +51,7 @@ var TextMode = require(\"./mode/text\").Mode;\n var Range = require(\"./range\").Range;\n var Document = require(\"./document\").Document;\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\n+var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n \n /**\n * class EditSession\n@@ -307,6 +308,13 @@ var EditSession = function(text, mode) {\n return token;\n };\n \n+ this.highlight = function(re) {\n+ if (!this.$searchHighlight) {\n+ var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n+ this.$searchHighlight = this.addDynamicMarker(highlight);\n+ }\n+ this.$searchHighlight.setRegexp(re);\n+ }\n /**\n * EditSession.setUndoManager(undoManager)\n * - undoManager (UndoManager): The new undo manager\n@@ -556,7 +564,8 @@ var EditSession = function(text, mode) {\n type : type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz : clazz,\n- inFront: !!inFront\n+ inFront: !!inFront,\n+ id: id\n }\n \n if (inFront) {\ndiff --git a/lib/ace/editor.js b/lib/ace/editor.js\nindex 834e603..b27ec73 100644\n--- a/lib/ace/editor.js\n+++ b/lib/ace/editor.js\n@@ -494,7 +494,7 @@ var Editor = function(renderer, session) {\n * Emitted when a selection has changed.\n **/\n this.onSelectionChange = function(e) {\n- var session = this.getSession();\n+ var session = this.session;\n \n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n@@ -509,12 +509,40 @@ var Editor = function(renderer, session) {\n this.$updateHighlightActiveLine();\n }\n \n- var self = this;\n- if (this.$highlightSelectedWord && !this.$wordHighlightTimer)\n- this.$wordHighlightTimer = setTimeout(function() {\n- self.session.$mode.highlightSelection(self);\n- self.$wordHighlightTimer = null;\n- }, 30, this);\n+ var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()\n };\ndiff --git a/lib/ace/search_highlight.js b/lib/ace/search_highlight.js\nnew file mode 100644\nindex 0000000..b2df779\n--- /dev/null\n+++ b/lib/ace/search_highlight.js\n@@ -0,0 +1,3 @@\n+new\n+empty file" - } - ], - "id": "XVlqRbTf", - "createdAt": 1659497123657, - "updatedAt": 1659497359400 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Django", - "content": [ - { - "label": "Fragment 1", - "language": "django", - "value": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n {% block title %}<title>Local Library</title>{% endblock %}\n</head>\n<body>\n {% block sidebar %}<!-- insert default navigation text for every page -->{% endblock %}\n {% block content %}<!-- default content text (typically empty) -->{% endblock %}\n</body>\n</html>" - } - ], - "id": "SlHomc5j", - "createdAt": 1659497360765, - "updatedAt": 1659498962118 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Dockerfile", - "content": [ - { - "label": "Fragment 1", - "language": "dockerfile", - "value": "#\n# example Dockerfile for http://docs.docker.io/en/latest/examples/postgresql_service/\n#\n\nFROM ubuntu\nMAINTAINER SvenDowideit@docker.com\n\n# Add the PostgreSQL PGP key to verify their Debian packages.\n# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc \nRUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8\n\n# Add PostgreSQL's repository. It contains the most recent stable release\n# of PostgreSQL, ``9.3``.\nRUN echo \"deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main\" > /etc/apt/sources.list.d/pgdg.list\n\n# Update the Ubuntu and PostgreSQL repository indexes\nRUN apt-get update\n\n# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3\n# There are some warnings (in red) that show up during the build. You can hide\n# them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive\nRUN apt-get -y -q install python-software-properties software-properties-common\nRUN apt-get -y -q install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3\n\n# Note: The official Debian and Ubuntu images automatically ``apt-get clean``\n# after each ``apt-get`` \n\n# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed``\nUSER postgres\n\n# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and\n# then create a database `docker` owned by the ``docker`` role.\n# Note: here we use ``&&\\`` to run commands one after the other - the ``\\``\n# allows the RUN command to span multiple lines.\nRUN /etc/init.d/postgresql start &&\\\n psql --command \"CREATE USER docker WITH SUPERUSER PASSWORD 'docker';\" &&\\\n createdb -O docker docker\n\n# Adjust PostgreSQL configuration so that remote connections to the\n# database are possible. \nRUN echo \"host all all 0.0.0.0/0 md5\" >> /etc/postgresql/9.3/main/pg_hba.conf\n\n# And add ``listen_addresses`` to ``/etc/postgresql/9.3/main/postgresql.conf``\nRUN echo \"listen_addresses='*'\" >> /etc/postgresql/9.3/main/postgresql.conf\n\n# Expose the PostgreSQL port\nEXPOSE 5432\n\n# Add VOLUMEs to allow backup of config, logs and databases\nVOLUME\t[\"/etc/postgresql\", \"/var/log/postgresql\", \"/var/lib/postgresql\"]\n\n# Set the default command to run when starting the container\nCMD [\"/usr/lib/postgresql/9.3/bin/postgres\", \"-D\", \"/var/lib/postgresql/9.3/main\", \"-c\", \"config_file=/etc/postgresql/9.3/main/postgresql.conf\"]" - } - ], - "id": "zARrocL3", - "createdAt": 1659497758750, - "updatedAt": 1659497805813 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Dot", - "content": [ - { - "label": "Fragment 1", - "language": "dot", - "value": "// Original source: http://www.graphviz.org/content/lion_share\n##\"A few people in the field of genetics are using dot to draw \"marriage node diagram\" pedigree drawings. Here is one I have done of a test pedigree from the FTREE pedigree drawing package (Lion Share was a racehorse).\" Contributed by David Duffy.\n\n##Command to get the layout: \"dot -Tpng thisfile > thisfile.png\"\n\ndigraph Ped_Lion_Share {\n# page = \"8.2677165,11.692913\" ;\nratio = \"auto\" ;\nmincross = 2.0 ;\nlabel = \"Pedigree Lion_Share\" ;\n\n\"001\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"002\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"003\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"004\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"005\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"006\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"007\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"009\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"014\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"015\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"016\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"ZZ01\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"ZZ02\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"017\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"012\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"008\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"011\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"013\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"010\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"023\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"020\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"021\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"018\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"025\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"019\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"022\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"024\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"027\" [shape=circle , regular=1,style=filled,fillcolor=white ] ;\n\"026\" [shape=box , regular=1,style=filled,fillcolor=white ] ;\n\"028\" [shape=box , regular=1,style=filled,fillcolor=grey ] ;\n\"marr0001\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0001\" [dir=none,weight=1] ;\n\"007\" -> \"marr0001\" [dir=none,weight=1] ;\n\"marr0001\" -> \"017\" [dir=none, weight=2] ;\n\"marr0002\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0002\" [dir=none,weight=1] ;\n\"ZZ02\" -> \"marr0002\" [dir=none,weight=1] ;\n\"marr0002\" -> \"012\" [dir=none, weight=2] ;\n\"marr0003\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0003\" [dir=none,weight=1] ;\n\"003\" -> \"marr0003\" [dir=none,weight=1] ;\n\"marr0003\" -> \"008\" [dir=none, weight=2] ;\n\"marr0004\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0004\" [dir=none,weight=1] ;\n\"006\" -> \"marr0004\" [dir=none,weight=1] ;\n\"marr0004\" -> \"011\" [dir=none, weight=2] ;\n\"marr0005\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0005\" [dir=none,weight=1] ;\n\"ZZ01\" -> \"marr0005\" [dir=none,weight=1] ;\n\"marr0005\" -> \"013\" [dir=none, weight=2] ;\n\"marr0006\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"004\" -> \"marr0006\" [dir=none,weight=1] ;\n\"009\" -> \"marr0006\" [dir=none,weight=1] ;\n\"marr0006\" -> \"010\" [dir=none, weight=2] ;\n\"marr0007\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0007\" [dir=none,weight=1] ;\n\"015\" -> \"marr0007\" [dir=none,weight=1] ;\n\"marr0007\" -> \"023\" [dir=none, weight=2] ;\n\"marr0008\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0008\" [dir=none,weight=1] ;\n\"016\" -> \"marr0008\" [dir=none,weight=1] ;\n\"marr0008\" -> \"020\" [dir=none, weight=2] ;\n\"marr0009\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0009\" [dir=none,weight=1] ;\n\"012\" -> \"marr0009\" [dir=none,weight=1] ;\n\"marr0009\" -> \"021\" [dir=none, weight=2] ;\n\"marr0010\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"008\" -> \"marr0010\" [dir=none,weight=1] ;\n\"017\" -> \"marr0010\" [dir=none,weight=1] ;\n\"marr0010\" -> \"018\" [dir=none, weight=2] ;\n\"marr0011\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"011\" -> \"marr0011\" [dir=none,weight=1] ;\n\"023\" -> \"marr0011\" [dir=none,weight=1] ;\n\"marr0011\" -> \"025\" [dir=none, weight=2] ;\n\"marr0012\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"013\" -> \"marr0012\" [dir=none,weight=1] ;\n\"014\" -> \"marr0012\" [dir=none,weight=1] ;\n\"marr0012\" -> \"019\" [dir=none, weight=2] ;\n\"marr0013\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"010\" -> \"marr0013\" [dir=none,weight=1] ;\n\"021\" -> \"marr0013\" [dir=none,weight=1] ;\n\"marr0013\" -> \"022\" [dir=none, weight=2] ;\n\"marr0014\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"019\" -> \"marr0014\" [dir=none,weight=1] ;\n\"020\" -> \"marr0014\" [dir=none,weight=1] ;\n\"marr0014\" -> \"024\" [dir=none, weight=2] ;\n\"marr0015\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"022\" -> \"marr0015\" [dir=none,weight=1] ;\n\"025\" -> \"marr0015\" [dir=none,weight=1] ;\n\"marr0015\" -> \"027\" [dir=none, weight=2] ;\n\"marr0016\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"024\" -> \"marr0016\" [dir=none,weight=1] ;\n\"018\" -> \"marr0016\" [dir=none,weight=1] ;\n\"marr0016\" -> \"026\" [dir=none, weight=2] ;\n\"marr0017\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"026\" -> \"marr0017\" [dir=none,weight=1] ;\n\"027\" -> \"marr0017\" [dir=none,weight=1] ;\n\"marr0017\" -> \"028\" [dir=none, weight=2] ;\n}\n" - } - ], - "id": "zsE7DGS6", - "createdAt": 1659497806776, - "updatedAt": 1659497822789 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Drools", - "content": [ - { - "label": "Fragment 1", - "language": "drools", - "value": "/*\n * Copyright 2010 JBoss Inc\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n Original source\n https://github.com/droolsjbpm/drools/blob/master/drools-examples/\n http://docs.jboss.org/drools/\n*/\npackage com.example.ace\n\nimport java.math.BigDecimal\nimport function my.package.Foo.hello\n\ndeclare FactType\n @author( Bob )\n id : String\n name : String @maxLength(100) @notnull\n\n value : BigDecimal\nend\n\ndeclare FactType2 extends AnotherType\nend\n\ndeclare trait TraitType extends com.package.AnotherType\nend\n\n\ndeclare trait GoldenCustomer\n balance : long @Alias( \"org.acme.foo.accountBalance\" )\nend\n\nglobal org.slf4j.Logger logger\n\n/**\n * @param name who we'll salute?\n */\nfunction String hello(String name) {\n return \"Hello \"+name+\"!\";\n}\n\nrule \"Trim all strings\"\n dialect \"java\"\n no-loop\nwhen // fdsfds\n $s : String(a == null || == \"empty\", $g : size)\n Cheese( name matches \"(Buffalo)?\\\\S*Mozarella\" )\n CheeseCounter( cheeses contains $var ) // contains with a variable\n CheeseCounter( cheese memberof $matureCheeses )\n Cheese( name soundslike 'foobar' )\n Message( routingValue str[startsWith] \"R1\" )\n Cheese( name in ( \"stilton\", \"cheddar\", $cheese ) )\n Person( eval( age == girlAge + 2 ), sex = 'M' )\nthen\n /**\n * TODO There mus be better way\n */\n retract($s);\n String a = \"fd\";\n a.toString();\n\n insert($s.trim());\nend\n\nquery isContainedIn( String x, String y )\n Location( x, y; )\n or\n ( Location( z, y; ) and isContainedIn( x, z; ) )\nend\n\nrule \"go\" salience 10\nwhen\n $s : String( )\nthen\n System.out.println( $s );\nend\n\nrule \"When all English buses are not red\"\nwhen\n not(forall( $bus : Bus( nationality == 'english')\n Bus( this == $bus, color = 'red' ) ))\nthen\n // What if all english buses are not red?\nend\n\nrule \"go1\"\nwhen\n String( this == \"go1\" )\n isContainedIn(\"Office\", \"House\"; )\nthen\n System.out.println( \"office is in the house\" );\nend\n\nrule \"go2\"\nwhen\n String( this == \"go2\" )\n isContainedIn(\"Draw\", \"House\"; )\nthen\n System.out.println( \"Draw in the House\" );\nend\n\n/**\n * Go Right\n */\nrule GoRight dialect \"mvel\" salience (Math.abs( $df.colDiff )) when\n $df : DirectionDiff(colDiff > 0 )\n $target : Cell( row == $df.row, col == ($df.col + 1) )\n CellContents( cell == $target, cellType != CellType.WALL )\n not Direction(character == $df.fromChar, horizontal == Direction.RIGHT )\nthen\n System.out.println( \"monster right\" );\n retract( $df );\n insert( new Direction($df.fromChar, Direction.RIGHT, Direction.NONE ) );\nend\n" - } - ], - "id": "q7ltgu98", - "createdAt": 1659497823169, - "updatedAt": 1659497838753 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Eifact", - "content": [ - { - "label": "Fragment 1", - "language": "edifact", - "value": "UNB+UNOA:1+005435656:1+006415160:1+060515:1434+00000000000778'\nUNH+00000000000117+INVnrOIC:D:97B:UN'\nBGM+380+342459+9'\nDTM+3:20060515:102'\nRFF+ON:521052'\nNAD+BY+792820524::16++CUMMINS MID-RANGE ENGINE PLANT'\nNAD+SE+005435656::16++GENERAL WIDGET COMPANY'\nCUX+1:USD'\nLIN+1++157870:IN'\nIMD+F++:::WIDGET'\nQTY+47:1020:EA'\nALI+US'\nMOA+203:1202.58'\nPRI+INV:1.179'\nLIN+2++157871:IN'\nIMD+F++:::DIFFERENT WIDGET'\nQTY+47:20:EA'\nALI+JP'\nMOA+203:410'\nPRI+INV:20.5'\nUNS+S'\nMOA+39:2137.58'\nALC+C+ABG'\nMOA+8:525'\nUNT+23+00000000000117'\nUNZ+1+00000000000778'" - } - ], - "id": "kd4AwKPE", - "createdAt": 1659497839277, - "updatedAt": 1659497866736 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Eiffel", - "content": [ - { - "label": "Fragment 1", - "language": "eiffel", - "value": "note\n\tdescription: \"Represents a person.\"\n\nclass\n\tPERSON\n\ncreate\n\tmake, make_unknown\n\nfeature {NONE} -- Creation\n\n\tmake (a_name: like name)\n\t\t\t-- Create a person with `a_name' as `name'.\n\t\tdo\n\t\t\tname := a_name\n\t\tensure\n\t\t\tname = a_name\n\t\tend\n\n\tmake_unknown\n\t\tdo ensure\n\t\t\tname = Void\n\t\tend\n\nfeature -- Access\n\n\tname: detachable STRING\n\t\t\t-- Full name or Void if unknown.\n\nend" - } - ], - "id": "oLy18nv7", - "createdAt": 1659498171205, - "updatedAt": 1659498199263 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "EJS", - "content": [ - { - "label": "Fragment 1", - "language": "ejs", - "value": "<!DOCTYPE html>\n<html>\n <head>\n <title>Cloud9 Rocks!</title>\n </head>\n <body>\n\n <table class=\"table\">\n <tr>\n <th>Name</th>\n <th>Size</th>\n </tr>\n <% if (!isRoot) { %>\n <tr>\n <td><a href=\"..\">..</a></td>\n <td></td></td>\n </tr>\n <% } %>\n <% entries.forEach(function(entry) { %>\n <tr>\n <td>\n <span class=\"glyphicon <%= entry.mime == 'directory' ? 'folder': 'file'%>\"></span>\n <a href=\"<%= entry.name %>\"><%= entry.name %></a>\n </td>\n <td><%= entry.size %></td>\n </tr>\n <% }) %>\n </table>\n \n </body>\n</html>" - } - ], - "id": "RfTqVA-l", - "createdAt": 1659498199950, - "updatedAt": 1659498217270 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Elixir", - "content": [ - { - "label": "Fragment 1", - "language": "elixir", - "value": "defmodule HelloModule do\n @moduledoc \"\"\"\n This is supposed to be `markdown`.\n __Yes__ this is [mark](http://down.format)\n\n # Truly\n\n ## marked\n\n * with lists\n * more\n * and more\n\n Even.with(code)\n blocks |> with |> samples\n\n _Docs are first class citizens in Elixir_ (Jose Valim)\n \"\"\"\n \n # A \"Hello world\" function\n def some_fun do\n IO.puts \"Juhu Kinners!\"\n end\n # A private function\n defp priv do\n is_regex ~r\"\"\"\n This is a regex\n spanning several\n lines.\n \"\"\"\n x = elem({ :a, :b, :c }, 0) #=> :a\n end\nend\n\ntest_fun = fn(x) ->\n cond do\n x > 10 ->\n :greater_than_ten\n true ->\n :maybe_ten\n end\nend" - } - ], - "id": "S7aN9gmR", - "createdAt": 1659498217656, - "updatedAt": 1659498236110 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Elm", - "content": [ - { - "label": "Fragment 1", - "language": "elm", - "value": "{- Ace {- 4 -} Elm -}\nmain = lift clock (every second)\n\nclock t = collage 400 400 [ filled lightGrey (ngon 12 110)\n , outlined (solid grey) (ngon 12 110)\n , hand orange 100 t\n , hand charcoal 100 (t/60)\n , hand charcoal 60 (t/720) ]\n\nhand clr len time =\n let angle = degrees (90 - 6 * inSeconds time)\n in traced (solid clr) <| segment (0,0) (len * cos angle, len * sin angle)" - } - ], - "id": "EymKD1vg", - "createdAt": 1659498236614, - "updatedAt": 1659498253750 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Erlang", - "content": [ - { - "label": "Fragment 1", - "language": "erlang", - "value": " %% A process whose only job is to keep a counter.\n %% First version\n -module(counter).\n -export([start/0, codeswitch/1]).\n \n start() -> loop(0).\n \n loop(Sum) ->\n receive\n {increment, Count} ->\n loop(Sum+Count);\n {counter, Pid} ->\n Pid ! {counter, Sum},\n loop(Sum);\n code_switch ->\n ?MODULE:codeswitch(Sum)\n % Force the use of 'codeswitch/1' from the latest MODULE version\n end.\n \n codeswitch(Sum) -> loop(Sum)." - } - ], - "id": "kab7H40N", - "createdAt": 1659498254110, - "updatedAt": 1659498269387 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Forth", - "content": [ - { - "label": "Fragment 1", - "language": "forth", - "value": ": HELLO ( -- ) CR .\" Hello, world!\" ; \n\nHELLO <cr>\nHello, world!\n\n: [CHAR] CHAR POSTPONE LITERAL ; IMMEDIATE\n\n0 value ii 0 value jj\n0 value KeyAddr 0 value KeyLen\ncreate SArray 256 allot \\ state array of 256 bytes\n: KeyArray KeyLen mod KeyAddr ;\n\n: get_byte + c@ ;\n: set_byte + c! ;\n: as_byte 255 and ;\n: reset_ij 0 TO ii 0 TO jj ;\n: i_update 1 + as_byte TO ii ;\n: j_update ii SArray get_byte + as_byte TO jj ;\n: swap_s_ij\n jj SArray get_byte\n ii SArray get_byte jj SArray set_byte\n ii SArray set_byte\n;\n\n: rc4_init ( KeyAddr KeyLen -- )\n 256 min TO KeyLen TO KeyAddr\n 256 0 DO i i SArray set_byte LOOP\n reset_ij\n BEGIN\n ii KeyArray get_byte jj + j_update\n swap_s_ij\n ii 255 < WHILE\n ii i_update\n REPEAT\n reset_ij\n;\n: rc4_byte\n ii i_update jj j_update\n swap_s_ij\n ii SArray get_byte jj SArray get_byte + as_byte SArray get_byte xor\n;" - } - ], - "id": "WJIVTmus", - "createdAt": 1659498306633, - "updatedAt": 1659498343211 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Fortran", - "content": [ - { - "label": "Fragment 1", - "language": "fortran", - "value": "PROGRAM Triangle\n IMPLICIT NONE\n REAL :: a, b, c, Area\n PRINT *, 'Welcome, please enter the&\n &lengths of the 3 sides.'\n READ *, a, b, c\n PRINT *, 'Triangle''s area: ', Area(a,b,c)\n END PROGRAM Triangle\n FUNCTION Area(x,y,z)\n IMPLICIT NONE\n REAL :: Area ! function type\n REAL, INTENT( IN ) :: x, y, z\n REAL :: theta, height\n theta = ACOS((x**2+y**2-z**2)/(2.0*x*y))\n height = x*SIN(theta); Area = 0.5*y*height\n END FUNCTION Area\n" - } - ], - "id": "xg3FwrCH", - "createdAt": 1659498365921, - "updatedAt": 1659498805349 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "F#", - "content": [ - { - "label": "Fragment 1", - "language": "fsharp", - "value": "(* fsharp (* example *) *)\nmodule Test =\n let (*) x y = (x + y)\n let func1 x = \n if x < 100 then\n x*x\n else\n x*x + 1\n let list = (-1, 42) :: [ for i in 0 .. 99 -> (i, func1(i)) ]\n let verbatim = @\"c:\\Program \"\" Files\\\"\n let trippleQuote = \"\"\" \"hello world\" \"\"\"\n \n // print\n printfn \"The table of squares from 0 to 99 is:\\n%A\" list" - } - ], - "id": "4PuKBcrb", - "createdAt": 1659498639352, - "updatedAt": 1659498656593 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Gcode", - "content": [ - { - "label": "Fragment 1", - "language": "gcode", - "value": "O003 (DIAMOND SQUARE)\nN2 G54 G90 G49 G80\nN3 M6 T1 (1.ENDMILL)\nN4 M3 S1800\nN5 G0 X-.6 Y2.050\nN6 G43 H1 Z.1\nN7 G1 Z-.3 F50.\nN8 G41 D1 Y1.45\nN9 G1 X0 F20.\nN10 G2 J-1.45\n(CUTTER COMP CANCEL)\nN11 G1 Z-.2 F50.\nN12 Y-.990\nN13 G40\nN14 G0 X-.6 Y1.590\nN15 G0 Z.1\nN16 M5 G49 G28 G91 Z0\nN17 CALL O9456\nN18 #500=0.004\nN19 #503=[#500+#501]\nN20 VC45=0.0006\nVS4=0.0007\nN21 G90 G10 L20 P3 X5.Y4. Z6.567\nN22 G0 X5000\nN23 IF [#1 LT 0.370] GOTO 49\nN24 X-0.678 Y+.990\nN25 G84.3 X-0.1\nN26 #4=#5*COS[45]\nN27 #4=#5*SIN[45]\nN28 VZOFZ=652.9658\n%" - } - ], - "id": "Yh1m0JPQ", - "createdAt": 1659498659758, - "updatedAt": 1659498686965 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Gherkin", - "content": [ - { - "label": "Fragment 1", - "language": "gherkin", - "value": "@these @_are_ @tags\nFeature: Serve coffee\n Coffee should not be served until paid for\n Coffee should not be served until the button has been pressed\n If there is no coffee left then money should be refunded\n \n Scenario Outline: Eating\n Given there are <start> cucumbers\n When I eat <eat> cucumbers\n Then I should have <left> cucumbers\n\n Examples:\n | start | eat | left |\n | 12 | 5 | 7 |\n | @20 | 5 | 15 | \n\n Scenario: Buy last coffee\n Given there are 1 coffees left in the machine\n And I have deposited 1$ \n When I press the coffee button\n Then I should be served a \"coffee\"\n \n # this a comment\n \n \"\"\"\n this is a \n pystring\n \"\"\"" - } - ], - "id": "f1l2o8sf", - "createdAt": 1659498687836, - "updatedAt": 1659498719160 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Gitignore", - "content": [ - { - "label": "Fragment 1", - "language": "gitignore", - "value": "node_modules\ndist\nbuild\n\n.vscode\n.idea\n.DS_Store\nsrc/renderer/types/auto-imports.d.ts\nsrc/renderer/types/components.d.ts\n*.log\n*.local\n" - } - ], - "id": "aixATt95", - "createdAt": 1659498731868, - "updatedAt": 1659499011678 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Glsl", - "content": [ - { - "label": "Fragment 1", - "language": "glsl", - "value": "uniform float amplitude;\nattribute float displacement;\nvarying vec3 vNormal;\n\nvoid main() {\n\n vNormal = normal;\n \n // multiply our displacement by the\n // amplitude. The amp will get animated\n // so we'll have animated displacement\n vec3 newPosition = position + \n normal * \n vec3(displacement *\n amplitude);\n\n gl_Position = projectionMatrix *\n modelViewMatrix *\n vec4(newPosition,1.0);\n}" - } - ], - "id": "R8q5LruR", - "createdAt": 1659499012808, - "updatedAt": 1659499050984 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Go", - "content": [ - { - "label": "Fragment 1", - "language": "golang", - "value": "// Concurrent computation of pi.\n// See http://goo.gl/ZuTZM.\n//\n// This demonstrates Go's ability to handle\n// large numbers of concurrent processes.\n// It is an unreasonable way to calculate pi.\npackage main\n\nimport (\n \"fmt\"\n \"math\"\n)\n\nfunc main() {\n fmt.Println(pi(5000))\n}\n\n// pi launches n goroutines to compute an\n// approximation of pi.\nfunc pi(n int) float64 {\n ch := make(chan float64)\n for k := 0; k <= n; k++ {\n go term(ch, float64(k))\n }\n f := 0.0\n for k := 0; k <= n; k++ {\n f += <-ch\n }\n return f\n}\n\nfunc term(ch chan float64, k float64) {\n ch <- 4 * math.Pow(-1, k) / (2*k + 1)\n}\n" - } - ], - "id": "Zckb3-bZ", - "createdAt": 1659499052602, - "updatedAt": 1659499067400 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "GraphQL", - "content": [ - { - "label": "Fragment 1", - "language": "graphqlschema", - "value": "# Main Schema\nschema {\n\tquery: Query;\n}\n\nscalar Date;\n\n# Simple type to contain all scalar types\ntype AllTypes {\n\t# Field Description for String\n\ttestString: String;\n\t# Field Description for Int\n\ttestInt: Int;\n\t# Field Description for ID\n\ttestID: ID;\n\t# Field Description for Boolean\n\ttestBoolean: Boolean;\n\t# Field Description for Float\n\ttestFloat: Float;\n}\n\ninterface ISearchable {\n searchPreview: String!;\n}\n\nunion ProductTypes = Movie | Book;\n\n# Testing enum\nenum MovieGenere {\n ACTION\n COMEDY\n THRILLER\n DRAMA\n}\n\n# Testing Input\ninput SearchByGenere {\n\tbefore: Date;\n\tafter: Date;\n\tgenere: MovieGenere!;\n}\n\n# Testing Interface\ntype Movie implements ISearchable {\n\tid: ID!;\n\tsearchPreview: String!;\n\trentPrice: Float;\n\tpublishDate: Date;\n\tgenere: MovieGenere;\n\tcast: [String];\n}\n\n# Testing Interface\ntype Book implements ISearchable {\n id: ID!;\n\tsearchPreview: String!;\n\tprice: Float;\n\tpublishDate: Date;\n\tauthors: [String];\n}\n\ntype Query {\n\ttestString: String;\n\ttestDate; Date;\n\tallTypes: AllTypes;\n\tallProducts: [ProductTypes];\n\n\t# searches only movies by genere with sophisticated argument\n\tsearchMovieByGenere(searchObject: SearchByGenere!): [Movie];\n\n\t# Searchs all products by text string\n\tsearchProduct(text: String!): [ISearchable];\n}\n" - } - ], - "id": "I8D7xTBJ", - "createdAt": 1659499068100, - "updatedAt": 1659499093557 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Groovy", - "content": [ - { - "label": "Fragment 1", - "language": "groovy", - "value": "//http://groovy.codehaus.org/Martin+Fowler%27s+closure+examples+in+Groovy\n\nclass Employee {\n def name, salary\n boolean manager\n String toString() { return name }\n}\n\ndef emps = [new Employee(name:'Guillaume', manager:true, salary:200),\n new Employee(name:'Graeme', manager:true, salary:200),\n new Employee(name:'Dierk', manager:false, salary:151),\n new Employee(name:'Bernd', manager:false, salary:50)]\n\ndef managers(emps) {\n emps.findAll { e -> e.isManager() }\n}\n\nassert emps[0..1] == managers(emps) // [Guillaume, Graeme]\n\ndef highPaid(emps) {\n threshold = 150\n emps.findAll { e -> e.salary > threshold }\n}\n\nassert emps[0..2] == highPaid(emps) // [Guillaume, Graeme, Dierk]\n\ndef paidMore(amount) {\n { e -> e.salary > amount}\n}\ndef highPaid = paidMore(150)\n\nassert highPaid(emps[0]) // true\nassert emps[0..2] == emps.findAll(highPaid)\n\ndef filename = 'test.txt'\nnew File(filename).withReader{ reader -> doSomethingWith(reader) }\n\ndef readersText\ndef doSomethingWith(reader) { readersText = reader.text }\n\nassert new File(filename).text == readersText" - } - ], - "id": "z2GBS6CZ", - "createdAt": 1659499322019, - "updatedAt": 1659499339818 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "HAML", - "content": [ - { - "label": "Fragment 1", - "language": "haml", - "value": "!!!5\n\n/[if IE]\n %a{ :href => 'http://www.mozilla.com/en-US/firefox/' }\n %h1 Get Firefox\n\n-# This is a HAML comment. It will not show in the output HTML\n\n-#\n This is a HAML multiline comment\n This won't be displayed\n Nor will this\n Nor will this.\n\n/ This is a HTML comment. It will be rendered as HTML\n\n/\n %p This doesn't render...\n %div\n %h1 Because it's commented out!\n\n.row\n .col-md-6\n\n .col-md-6\n\n\n#users.row.green\n #articles{:style => \"border: 5px;\"}\n #lists.list-inline\n\n%div#todos.bg-green{:id => \"#{@item.type}_#{@item.number}\", :class => '#{@item.type} #{@item.urgency}', :phoney => `asdasdasd`}\n\n/ file: app/views/movies/index.html.haml\n\n%ads:{:bleh => 33}\n%p\n Date/Time:\n - now = DateTime.now\n %strong= now\n = if now DateTime.parse(\"December 31, 2006\")\n = \"Happy new \" + \"year!\"\n\n%sfd.dfdfg\n#content\n .title\n %h1= @title\n = link_to 'Home', home_url\n\n #contents\n%div#content\n %div.articles\n %div.article.title Blah\n %div.article.date 2006-11-05\n %div.article.entry\n Neil Patrick Harris\n\n%div[@user, :greeting]\n %bar[290]\n\n/ This is a comment\n\n/ This is another comment with line break above\n\n.row\n .col-md-6\n .col-md-6\n\n .col-md-6\n\n.row\n .col-md-6\n\n\n .col-md-6" - } - ], - "id": "Pm3cn_Li", - "createdAt": 1659499342563, - "updatedAt": 1659499648807 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Handlebars", - "content": [ - { - "label": "Fragment 1", - "language": "handlebars", - "value": "{{!-- Ace + :-}} --}}\n\n<div id=\"comments\">\n {{#each comments}}\n <h2><a href=\"/posts/{{../permalink}}#{{id}}\">{{title}}</a></h2>\n <div>{{{body}}}</div>\n {{/each}}\n</div>\n" - } - ], - "id": "ODMJsyMr", - "createdAt": 1659499670077, - "updatedAt": 1659499699936 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Haskell", - "content": [ - { - "label": "Fragment 1", - "language": "haskell", - "value": "-- Type annotation (optional)\nfib :: Int -> Integer\n \n-- With self-referencing data\nfib n = fibs !! n\n where fibs = 0 : scanl (+) 1 fibs\n -- 0,1,1,2,3,5,...\n \n-- Same, coded directly\nfib n = fibs !! n\n where fibs = 0 : 1 : next fibs\n next (a : t@(b:_)) = (a+b) : next t\n \n-- Similar idea, using zipWith\nfib n = fibs !! n\n where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)\n \n-- Using a generator function\nfib n = fibs (0,1) !! n\n where fibs (a,b) = a : fibs (b,a+b)" - } - ], - "id": "UFZ0EgLY", - "createdAt": 1659499710604, - "updatedAt": 1659499856647 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Haskell Cabal", - "content": [ - { - "label": "Fragment 1", - "language": "haskell_cabal", - "value": "name: reload\nversion: 0.1.0.0\nsynopsis: Initial project template from stack\nDescription:\n The \\'cabal\\' command-line program simplifies the process of managing\n Haskell software by automating the fetching, configuration, compilation\n and installation of Haskell libraries and programs.\nhomepage: https://github.com/jpmoresmau/dbIDE/reload#readme\nlicense: BSD3\nlicense-file: LICENSE\nauthor: JP Moresmau\nmaintainer: jpmoresmau@gmail.com\ncopyright: 2016 JP Moresmau\ncategory: Web\nbuild-type: Simple\n-- extra-source-files:\ncabal-version: >=1.10\n\nFlag network-uri\n description: Get Network.URI from the network-uri package\n default: True\n\nlibrary\n hs-source-dirs: src\n exposed-modules: Language.Haskell.Reload\n build-depends: base >= 4.7 && < 5\n , aeson\n , scotty\n , wai\n , text\n , directory\n , filepath\n , bytestring\n , containers\n , mime-types\n , transformers\n , wai-handler-launch\n , wai-middleware-static\n , wai-extra\n , http-types\n default-language: Haskell2010\n other-modules: Language.Haskell.Reload.FileBrowser\n ghc-options: -Wall -O2\n\nexecutable reload-exe\n hs-source-dirs: app\n main-is: Main.hs\n ghc-options: -threaded -O2 -rtsopts -with-rtsopts=-N\n build-depends: base\n , reload\n default-language: Haskell2010\n\ntest-suite reload-test\n type: exitcode-stdio-1.0\n hs-source-dirs: test\n main-is: Spec.hs\n build-depends: base\n , reload\n , hspec\n , hspec-wai\n , hspec-wai-json\n , aeson\n , directory\n , filepath\n , text\n , containers\n , unordered-containers\n , bytestring\n , wai-extra\n ghc-options: -threaded -O2 -rtsopts -with-rtsopts=-N\n default-language: Haskell2010\n other-modules: Language.Haskell.Reload.FileBrowserSpec\n Language.Haskell.ReloadSpec\n\nsource-repository head\n type: git\n location: https://github.com/jpmoresmau/dbIDE/reload\n" - } - ], - "id": "WfG80xEU", - "createdAt": 1659499806763, - "updatedAt": 1659499855045 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Haxe", - "content": [ - { - "label": "Fragment 1", - "language": "haxe", - "value": "class HelloWorld {\n static public function main() {\n trace(\"Hello World\");\n }\n}" - } - ], - "id": "IFnOQiFX", - "createdAt": 1659499858660, - "updatedAt": 1659499965939 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Hjson", - "content": [ - { - "label": "Fragment 1", - "language": "hjson", - "value": "{\n # specify rate in requests/second (because comments are helpful!)\n rate: 1000\n\n // prefer c-style comments?\n /* feeling old fashioned? */\n\n # did you notice that rate doesn't need quotes?\n hey: look ma, no quotes for strings either!\n\n # best of all\n notice: []\n anything: ?\n\n # yes, commas are optional!\n}\n" - } - ], - "id": "u3Hrb4_j", - "createdAt": 1659500000006, - "updatedAt": 1659500019395 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "HTML", - "content": [ - { - "label": "Fragment 1", - "language": "html", - "value": "<!DOCTYPE html>\n<html>\n <head>\n\n <style type=\"text/css\">\n .text-layer {\n font-family: Monaco, \"Courier New\", monospace;\n font-size: 12px;\n cursor: text;\n }\n </style>\n\n <script type=\"text/javascript\" nonce=\"ef6574b022cf438aa40ab9854e3\" src=\"//local.adguard.org?ts=1659497936219&type=content-script&dmn=ace.c9.io&app=com.google.Chrome&css=3&js=1&rel=1&rji=1&sbe=1&stealth=1&uag=\"></script>\n<script type=\"text/javascript\" nonce=\"ef6574b022cf438aa40ab9854e3\" src=\"//local.adguard.org?ts=1659497936219&name=AdGuard%20Extra&type=user-script\"></script></head>\n <body>\n <h1 style=\"color:red\">Juhu Kinners</h1>\n </body>\n</html>" - } - ], - "id": "V0-nWcOY", - "createdAt": 1659500022244, - "updatedAt": 1659500070479 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "HTML - Elixir", - "content": [ - { - "label": "Fragment 1", - "language": "html_elixir", - "value": "<h1>Listing Books</h1>\n \n<table>\n <tr>\n <th>Title</th>\n <th>Summary</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n\n<%= for book <- @books do %>\n <tr>\n <%# comment %>\n <td><%= book.title %></td>\n <td><%= book.content %></td>\n <td><%= link \"Show\", to: book_path(@conn, :show, book) %></td>\n <td><%= link \"Edit\", to: book_path(@conn, :edit, book) %></td>\n <td><%= link \"Delete\", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: \"Are you sure?\"] %></td>\n </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link \"New book\", to: book_path(@conn, :new) %>\n" - } - ], - "id": "uHpMvpVG", - "createdAt": 1659500072593, - "updatedAt": 1659500094531 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "HTML - Ruby", - "content": [ - { - "label": "Fragment 1", - "language": "html_ruby", - "value": "<h1>Listing Books</h1>\n \n<table>\n <tr>\n <th>Title</th>\n <th>Summary</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n \n<% @books.each do |book| %>\n <tr>\n <%# comment %>\n <td><%= book.title %></td>\n <td><%= book.content %></td>\n <td><%= link_to 'Show', book %></td>\n <td><%= link_to 'Edit', edit_book_path(book) %></td>\n <td><%= link_to 'Remove', book, :confirm => 'Are you sure?', :method => :delete %></td>\n </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link_to 'New book', new_book_path %>" - } - ], - "id": "pKfYEkh4", - "createdAt": 1659500102423, - "updatedAt": 1659500124757 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "INI", - "content": [ - { - "label": "Fragment 1", - "language": "ini", - "value": "[.ShellClassInfo]\nIconResource=..\\logo.png\n[ViewState]\nFolderType=Generic\n" - } - ], - "id": "fuJCASxY", - "createdAt": 1659500146290, - "updatedAt": 1659500158650 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Io", - "content": [ - { - "label": "Fragment 1", - "language": "io", - "value": "// computes factorial of a number\nfactorial := method(n,\n if(n == 0, return 1)\n res := 1\n Range 1 to(n) foreach(i, res = res * i)\n)" - } - ], - "id": "_57pBmcn", - "createdAt": 1659500159351, - "updatedAt": 1659500168731 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Java", - "content": [ - { - "label": "Fragment 1", - "language": "java", - "value": "import java.util.ArrayList;\nimport java.util.Vector;\n\npublic class InfiniteLoop {\n\n /*\n * This will cause the program to hang...\n *\n * Taken from:\n * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\n */\n public static void main(String[] args) {\n double d = Double.parseDouble(\"2.2250738585072012e-308\");\n\n // unreachable code\n System.out.println(\"Value: \" + d);\n }\n}\n" - } - ], - "id": "HKSteGIX", - "createdAt": 1659500267524, - "updatedAt": 1659500281323 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JavaScript", - "content": [ - { - "label": "Fragment 1", - "language": "javascript", - "value": "// program to generate fibonacci series up to n terms\n\n// take input from the user\nconst number = parseInt(prompt('Enter the number of terms: '));\nlet n1 = 0, n2 = 1, nextTerm;\n\nconsole.log('Fibonacci Series:');\n\nfor (let i = 1; i <= number; i++) {\n console.log(n1);\n nextTerm = n1 + n2;\n n1 = n2;\n n2 = nextTerm;\n}" - } - ], - "id": "WYzSf25T", - "createdAt": 1659500310669, - "updatedAt": 1659506836763 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JSON", - "content": [ - { - "label": "Fragment 1", - "language": "json", - "value": "{\n \"query\": {\n \"count\": 10,\n \"created\": \"2011-06-21T08:10:46Z\",\n \"lang\": \"en-US\",\n \"results\": {\n \"photo\": [\n {\n \"farm\": \"6\",\n \"id\": \"5855620975\",\n \"isfamily\": \"0\",\n \"isfriend\": \"0\",\n \"ispublic\": \"1\",\n \"owner\": \"32021554@N04\",\n \"secret\": \"f1f5e8515d\",\n \"server\": \"5110\",\n \"title\": \"7087 bandit cat\"\n },\n {\n \"farm\": \"4\",\n \"id\": \"5856170534\",\n \"isfamily\": \"0\",\n \"isfriend\": \"0\",\n \"ispublic\": \"1\",\n \"owner\": \"32021554@N04\",\n \"secret\": \"ff1efb2a6f\",\n \"server\": \"3217\",\n \"title\": \"6975 rusty cat\"\n },\n {\n \"farm\": \"6\",\n \"id\": \"5856172972\",\n \"isfamily\": \"0\",\n \"isfriend\": \"0\",\n \"ispublic\": \"1\",\n \"owner\": \"51249875@N03\",\n \"secret\": \"6c6887347c\",\n \"server\": \"5192\",\n \"title\": \"watermarked-cats\"\n },\n {\n \"farm\": \"6\",\n \"id\": \"5856168328\",\n \"isfamily\": \"0\",\n \"isfriend\": \"0\",\n \"ispublic\": \"1\",\n \"owner\": \"32021554@N04\",\n \"secret\": \"0c1cfdf64c\",\n \"server\": \"5078\",\n \"title\": \"7020 mandy cat\"\n },\n {\n \"farm\": \"3\",\n \"id\": \"5856171774\",\n \"isfamily\": \"0\",\n \"isfriend\": \"0\",\n \"ispublic\": \"1\",\n \"owner\": \"32021554@N04\",\n \"secret\": \"7f5a3180ab\",\n \"server\": \"2696\",\n \"title\": \"7448 bobby cat\"\n }\n ]\n }\n }\n}" - } - ], - "id": "wiv80DI7", - "createdAt": 1659506841624, - "updatedAt": 1659506858438 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JSON5", - "content": [ - { - "label": "Fragment 1", - "language": "json5", - "value": "{\n foo: 'bar',\n while: true,\n\n this: 'is a \\\nmulti-line string',\n\n // this is an inline comment\n here: 'is another', // inline comment\n\n /* this is a block comment\n that continues on another line */\n\n hex: 0xDEADbeef,\n half: .5,\n delta: +10,\n to: Infinity, // and beyond!\n\n finally: 'a trailing comma',\n oh: [\n \"we shouldn't forget\",\n 'arrays can have',\n 'trailing commas too',\n ],\n}" - } - ], - "id": "WR8cSFol", - "createdAt": 1659506858891, - "updatedAt": 1659506873434 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JSONiq", - "content": [ - { - "label": "Fragment 1", - "language": "jsoniq", - "value": "{|\n for $store in collection(\"stores\")\n let $state := $store.state\n group by $state\n return {\n $state : {|\n for $product in collection(\"products\")\n let $category := $product.category\n group by $category\n return {\n $category : {|\n for $sales in collection(\"sales\")\n where (some $s in $store\n satisfies $sales.\"store number\" eq $s.\"store number\")\n and (some $p in $product\n satisfies $sales.product eq $p.name)\n let $pname := $sales.product\n group by $pname\n return { $pname : sum( $sales.quantity ) }\n |}\n }\n |}\n }\n|}" - } - ], - "id": "zt-pHlzR", - "createdAt": 1659506875045, - "updatedAt": 1659507021385 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JSP", - "content": [ - { - "label": "Fragment 1", - "language": "jsp", - "value": "<%-- initial comment --%>\n<%@ page import=\"java.util.Date\" %>\n<%--@ page isELIgnored=\"true\" //Now EL will be ignored --%>\n<html>\n <jsp:declaration>\n int day = 3;\n </jsp:declaration>\n <%@ include file=\"relative url\" %>\n <jsp:directive.include file=\"relative url\" />\n <head>\n <title>Day <%= day %></title>\n </head> \n <body>\n <script>\n var x = \"abc\";\n function y {\n }\n </script>\n <style>\n .class {\n background: #124356;\n }\n </style>\n\n <p>\n Today's date: <%= (new java.util.Date()).toLocaleString()%>\n </p>\n <%! int day = 3; %> \n \n <jsp:directive.page attribute=\"value\" />\n \n \n <%-- This comment will not be visible in the page source --%>\n <!-- html comment -->\n <body>\n <p>\n Today's date: <%= (new java.util.Date()).toLocaleString()%>\n </p>\n \n<%! int i = 0; %>\n <jsp:declaration>\n int j = 10;\n </jsp:declaration>\n\n <%-- This is JSP comment --%>\n <%@ directive attribute=\"value\" %>\n\n <h2>Select Languages:</h2>\n\n <form ACTION=\"jspCheckBox.jsp\">\n <input type=\"checkbox\" name=\"id\" value=\"Java\"> Java<BR>\n <input type=\"checkbox\" name=\"id\" value=\".NET\"> .NET<BR>\n <input type=\"checkbox\" name=\"id\" value=\"PHP\"> PHP<BR>\n <input type=\"checkbox\" name=\"id\" value=\"C/C++\"> C/C++<BR>\n <input type=\"checkbox\" name=\"id\" value=\"PERL\"> PERL <BR>\n <input type=\"submit\" value=\"Submit\">\n </form>\n\n <%\n String select[] = request.getParameterValues(\"id\"); \n if (select != null && select.length != 0) {\n out.println(\"You have selected: \");\n for (int i = 0; i < select.length; i++) {\n out.println(select[i]); \n }\n }\n %>\n\n\n <% \n switch(day) {\n case 0:\n out.println(\"It\\'s Sunday.\");\n break;\n case 1:\n out.println(\"It\\'s Monday.\");\n break;\n case 2:\n out.println(\"It\\'s Tuesday.\");\n break;\n case 3:\n out.println(\"It\\'s Wednesday.\");\n break;\n case 4:\n out.println(\"It\\'s Thursday.\");\n break;\n case 5:\n out.println(\"It\\'s Friday.\");\n break;\n //hello\n default:\n out.println(\"It's Saturday.\");\n }\n %>\n <p>\n <jsp:scriptlet>\n out.println(\"Your IP address is \" + request.getRemoteAddr());\n </jsp:scriptlet>\n </p>\n </body>\n</html>\n" - } - ], - "id": "O9ZhMEjD", - "createdAt": 1659507024658, - "updatedAt": 1659507037230 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "JSX", - "content": [ - { - "label": "Fragment 1", - "language": "jsx", - "value": "function formatName(user) {\n return user.firstName + ' ' + user.lastName;\n}\n\nconst user = {\n firstName: 'Harper',\n lastName: 'Perez'\n};\n\nconst element = (\n <h1>\n Hello, {formatName(user)}!\n </h1>\n);" - } - ], - "id": "XphCA0jL", - "createdAt": 1659507038119, - "updatedAt": 1659507099781 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Julia", - "content": [ - { - "label": "Fragment 1", - "language": "julia", - "value": "for op = (:+, :*, :&, :|, :$)\n @eval ($op)(a,b,c) = ($op)(($op)(a,b),c)\nend\n\nv = α';\nfunction g(x,y)\n return x * y\n x + y\nend\n\ncd(\"data\") do\n open(\"outfile\", \"w\") do f\n write(f, data)\n end\nend\n" - } - ], - "id": "F24mNogB", - "createdAt": 1659507115215, - "updatedAt": 1659507129381 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Kotlin", - "content": [ - { - "label": "Fragment 1", - "language": "kotlin", - "value": "/*Taken from http://try.kotlinlang.org/#/Examples/Longer%20examples/Life/Life.kt*/\n/**\n * This is a straightforward implementation of The Game of Life\n * See http://en.wikipedia.org/wiki/Conway's_Game_of_Life\n */\npackage life\n\n/*\n * A field where cells live. Effectively immutable\n */\nclass Field(\n val width: Int,\n val height: Int,\n // This function tells the constructor which cells are alive\n // if init(i, j) is true, the cell (i, j) is alive\n init: (Int, Int) -> Boolean\n) {\n private val live: Array<Array<Boolean>> = Array(height) { i -> Array(width) { j -> init(i, j) } }\n\n private fun liveCount(i: Int, j: Int)\n = if (i in 0..height - 1 &&\n j in 0..width - 1 &&\n live[i][j]) 1 else 0\n\n // How many neighbors of (i, j) are alive?\n fun liveNeighbors(i: Int, j: Int) =\n liveCount(i - 1, j - 1) +\n liveCount(i - 1, j) +\n liveCount(i - 1, j + 1) +\n liveCount(i, j - 1) +\n liveCount(i, j + 1) +\n liveCount(i + 1, j - 1) +\n liveCount(i + 1, j) +\n liveCount(i + 1, j + 1)\n\n // You can say field[i, j], and this function gets called\n operator fun get(i: Int, j: Int) = live[i][j]\n}\n\n/**\n * This function takes the present state of the field\n * and returns a new field representing the next moment of time\n */\nfun next(field: Field): Field {\n return Field(field.width, field.height) { i, j ->\n val n = field.liveNeighbors(i, j)\n if (field[i, j])\n // (i, j) is alive\n n in 2..3 // It remains alive iff it has 2 or 3 neighbors\n else\n // (i, j) is dead\n n == 3 // A new cell is born if there are 3 neighbors alive\n }\n}\n\n/** A few colony examples here */\nfun main(args: Array<String>) {\n // Simplistic demo\n runGameOfLife(\"***\", 3)\n // \"Star burst\"\n runGameOfLife(\"\"\"\n _______\n ___*___\n __***__\n ___*___\n _______\n \"\"\", 10)\n // Stable colony\n runGameOfLife(\"\"\"\n _____\n __*__\n _*_*_\n __*__\n _____\n \"\"\", 3)\n // Stable from the step 2\n runGameOfLife(\"\"\"\n __**__\n __**__\n __**__\n \"\"\", 3)\n // Oscillating colony\n runGameOfLife(\"\"\"\n __**____\n __**____\n ____**__\n ____**__\n \"\"\", 6)\n // A fancier oscillating colony\n runGameOfLife(\"\"\"\n -------------------\n -------***---***---\n -------------------\n -----*----*-*----*-\n -----*----*-*----*-\n -----*----*-*----*-\n -------***---***---\n -------------------\n -------***---***---\n -----*----*-*----*-\n -----*----*-*----*-\n -----*----*-*----*-\n -------------------\n -------***---***---\n -------------------\n \"\"\", 10)\n}\n\n// UTILITIES\n\nfun runGameOfLife(fieldText: String, steps: Int) {\n var field = makeField(fieldText)\n for (step in 1..steps) {\n println(\"Step: $step\")\n for (i in 0..field.height - 1) {\n for (j in 0..field.width - 1) {\n print(if (field[i, j]) \"*\" else \" \")\n }\n println(\"\")\n }\n field = next(field)\n }\n}\n\nfun makeField(s: String): Field {\n val lines = s.replace(\" \", \"\").split('\\n').filter({ it.isNotEmpty() })\n val longestLine = lines.toList().maxBy { it.length } ?: \"\"\n\n return Field(longestLine.length, lines.size) { i, j -> lines[i][j] == '*' }\n}\n" - } - ], - "id": "988hcpdB", - "createdAt": 1659507129809, - "updatedAt": 1659507144115 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "LaTeX", - "content": [ - { - "label": "Fragment 1", - "language": "latex", - "value": "\\usepackage{amsmath}\n\\title{\\LaTeX}\n\\date{}\n\\begin{document}\n \\maketitle\n \\LaTeX{} is a document preparation system for the \\TeX{}\n typesetting program. It offers programmable desktop publishing\n features and extensive facilities for automating most aspects of\n typesetting and desktop publishing, including numbering and\n cross-referencing, tables and figures, page layout, bibliographies,\n and much more. \\LaTeX{} was originally written in 1984 by Leslie\n Lamport and has become the dominant method for using \\TeX; few\n people write in plain \\TeX{} anymore. The current version is\n \\LaTeXe.\n \n % This is a comment; it will not be shown in the final output.\n % The following shows a little of the typesetting power of LaTeX:\n \\begin{align}\n E &= mc^2 \\\\\n m &= \\frac{m_0}{\\sqrt{1-\\frac{v^2}{c^2}}}\n \\end{align}\n\\end{document}" - } - ], - "id": "vw9XW5pz", - "createdAt": 1659507144676, - "updatedAt": 1659507163800 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Latte", - "content": [ - { - "label": "Fragment 1", - "language": "latte", - "value": "<!doctype html>\n<html>\n <head>\n <title>{$title}</title>\n {* \n \tcomment\n *}\n </head>\n <body>\n \t<h1 n:inner-if=1 title=1>My Webpage</h1>\n\n <ul n:if=\"count($navigation) > 0\" id=\"navigation\">\n {foreach [a, b, 'x', 10] as $item}\n <li><a href=\"{$item}\">{test($item->caption)}</a></li>\n {/foreach}\n </ul>\n\n {$variable}\n {=$variable}\n {XXXX::func($variable /* comment */)|filter}\n {$variable?->obj|filter:10, abc, 'x$var', \"x$var\"|filter2}\n\n {if} ... {/if true}\n\n <script>\n\t var a = {$a}, b = {'a': 1}, c = {'a': 1};\n\t if (true) {\n\t \talert();\n\t }\n </script>\n\n <style>\n \tbody { color: {$color} }\n </style>\n </body>\n</html>\n" - } - ], - "id": "lpS7qmbw", - "createdAt": 1659507165157, - "updatedAt": 1659507179678 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "LESS", - "content": [ - { - "label": "Fragment 1", - "language": "less", - "value": "/* styles.less */\n\n@base: #f938ab;\n\n.box-shadow(@style, @c) when (iscolor(@c)) {\n box-shadow: @style @c;\n -webkit-box-shadow: @style @c;\n -moz-box-shadow: @style @c;\n}\n.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {\n .box-shadow(@style, rgba(0, 0, 0, @alpha));\n}\n\n// Box styles\n.box { \n color: saturate(@base, 5%);\n border-color: lighten(@base, 30%);\n \n div { .box-shadow(0 0 5px, 30%) }\n \n a {\n color: @base;\n \n &:hover {\n color: lighten(@base, 50%);\n }\n }\n}\n" - } - ], - "id": "zlgx6H3d", - "createdAt": 1659507180386, - "updatedAt": 1659507196282 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Liquid", - "content": [ - { - "label": "Fragment 1", - "language": "liquid", - "value": "<h2>Case</h2>\n<p>\n {% case template %}\n {% when 'index' %}\n Welcome\n {% when 'product' %}\n {{ product.vendor | link_to_vendor }} / {{ product.title }}\n {% else %}\n {{ page_title }}\n {% endcase %}\n</p>" - } - ], - "id": "KPiQX14z", - "createdAt": 1659507197756, - "updatedAt": 1659507253969 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Lisp", - "content": [ - { - "label": "Fragment 1", - "language": "lisp", - "value": "(defun prompt-for-cd ()\n \"Prompts\n for CD\"\n (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n (prompt-read \"Artist\" &rest)\n (or (parse-integer (prompt-read \"Rating\") :junk-allowed t) 0)\n (if x (format t \"yes\") (format t \"no\" nil) ;and here comment\n ) 0xFFLL -23ull\n ;; second line comment\n '(+ 1 2)\n (defvar *lines*) ; list of all lines\n (position-if-not #'sys::whitespacep line :start beg))\n (quote (privet 1 2 3))\n '(hello world)\n (* 5 7)\n (1 2 34 5)\n (:use \"aaaa\")\n (let ((x 10) (y 20))\n (print (+ x y))\n ) LAmbDa\n\n \"asdad\\0eqweqe\"" - } - ], - "id": "k_9v_WLO", - "createdAt": 1659507254799, - "updatedAt": 1659507266545 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "LiveScript", - "content": [ - { - "label": "Fragment 1", - "language": "livescript", - "value": "# Defines an editing mode for [Ace](https://ace.c9.io).\n#\n# Open [test/ace.html](../test/ace.html) to test.\n\nrequire, exports, module <-! define \\ace/mode/ls\n\nidentifier = /(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*/$\n\nexports.Mode = class LiveScriptMode extends require(\\ace/mode/text)Mode\n ->\n @$tokenizer =\n new (require \\ace/tokenizer)Tokenizer LiveScriptMode.Rules\n if require \\ace/mode/matching_brace_outdent\n @$outdent = new that.MatchingBraceOutdent\n\n indenter = // (?\n : [({[=:]\n | [-~]>\n | \\b (?: e(?:lse|xport) | d(?:o|efault) | t(?:ry|hen) | finally |\n import (?:\\s* all)? | const | var |\n let | new | catch (?:\\s* #identifier)? )\n ) \\s* $ //\n\n getNextLineIndent: (state, line, tab) ->\n indent = @$getIndent line\n {tokens} = @$tokenizer.getLineTokens line, state\n unless tokens.length and tokens[*-1]type is \\comment\n indent += tab if state is \\start and indenter.test line\n indent\n\n toggleCommentLines: (state, doc, startRow, endRow) ->\n comment = /^(\\s*)#/; range = new (require \\ace/range)Range 0 0 0 0\n for i from startRow to endRow\n if out = comment.test line = doc.getLine i\n then line.=replace comment, \\$1\n else line.=replace /^\\s*/ \\$&#\n range.end.row = range.start.row = i\n range.end.column = line.length + 1\n doc.replace range, line\n 1 - out * 2\n\n checkOutdent: (state, line, input) -> @$outdent?checkOutdent line, input\n\n autoOutdent: (state, doc, row) -> @$outdent?autoOutdent doc, row\n\n### Highlight Rules\n\nkeywordend = /(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))/$\nstringfill = token: \\string, regex: '.+'\n\nLiveScriptMode.Rules =\n start:\n * token: \\keyword\n regex: //(?\n :t(?:h(?:is|row|en)|ry|ypeof!?)\n |c(?:on(?:tinue|st)|a(?:se|tch)|lass)\n |i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])\n |d(?:e(?:fault|lete|bugger)|o)\n |f(?:or(?:\\s+own)?|inally|unction)\n |s(?:uper|witch)\n |e(?:lse|x(?:tends|port)|val)\n |a(?:nd|rguments)\n |n(?:ew|ot)\n |un(?:less|til)\n |w(?:hile|ith)\n |o[fr]|return|break|let|var|loop\n )//$ + keywordend\n\n * token: \\constant.language\n regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n\n * token: \\invalid.illegal\n regex: '(?\n :p(?:ackage|r(?:ivate|otected)|ublic)\n |i(?:mplements|nterface)\n |enum|static|yield\n )' + keywordend\n\n * token: \\language.support.class\n regex: '(?\n :R(?:e(?:gExp|ferenceError)|angeError)\n |S(?:tring|yntaxError)\n |E(?:rror|valError)\n |Array|Boolean|Date|Function|Number|Object|TypeError|URIError\n )' + keywordend\n\n * token: \\language.support.function\n regex: '(?\n :is(?:NaN|Finite)\n |parse(?:Int|Float)\n |Math|JSON\n |(?:en|de)codeURI(?:Component)?\n )' + keywordend\n\n * token: \\variable.language\n regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n\n * token: \\identifier\n regex: identifier + /\\s*:(?![:=])/$\n\n * token: \\variable\n regex: identifier\n\n * token: \\keyword.operator\n regex: /(?:\\.{3}|\\s+\\?)/$\n\n * token: \\keyword.variable\n regex: /(?:@+|::|\\.\\.)/$\n next : \\key\n\n * token: \\keyword.operator\n regex: /\\.\\s*/$\n next : \\key\n\n * token: \\string\n regex: /\\\\\\S[^\\s,;)}\\]]*/$\n\n * token: \\string.doc\n regex: \\'''\n next : \\qdoc\n\n * token: \\string.doc\n regex: \\\"\"\"\n next : \\qqdoc\n\n * token: \\string\n regex: \\'\n next : \\qstring\n\n * token: \\string\n regex: \\\"\n next : \\qqstring\n\n * token: \\string\n regex: \\`\n next : \\js\n\n * token: \\string\n regex: '<\\\\['\n next : \\words\n\n * token: \\string.regex\n regex: \\//\n next : \\heregex\n\n * token: \\comment.doc\n regex: '/\\\\*'\n next : \\comment\n\n * token: \\comment\n regex: '#.*'\n\n * token: \\string.regex\n regex: //\n /(?: [^ [ / \\n \\\\ ]*\n (?: (?: \\\\.\n | \\[ [^\\]\\n\\\\]* (?:\\\\.[^\\]\\n\\\\]*)* \\]\n ) [^ [ / \\n \\\\ ]*\n )*\n )/ [gimy$]{0,4}\n //$\n next : \\key\n\n * token: \\constant.numeric\n regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*\n |(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*\n |(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)\n (?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n\n * token: \\lparen\n regex: '[({[]'\n\n * token: \\rparen\n regex: '[)}\\\\]]'\n next : \\key\n\n * token: \\keyword.operator\n regex: \\\\\\S+\n\n * token: \\text\n regex: \\\\\\s+\n\n heregex:\n * token: \\string.regex\n regex: '.*?//[gimy$?]{0,4}'\n next : \\start\n * token: \\string.regex\n regex: '\\\\s*#{'\n * token: \\comment.regex\n regex: '\\\\s+(?:#.*)?'\n * token: \\string.regex\n regex: '\\\\S+'\n\n key:\n * token: \\keyword.operator\n regex: '[.?@!]+'\n * token: \\identifier\n regex: identifier\n next : \\start\n * token: \\text\n regex: '.'\n next : \\start\n\n comment:\n * token: \\comment.doc\n regex: '.*?\\\\*/'\n next : \\start\n * token: \\comment.doc\n regex: '.+'\n\n qdoc:\n token: \\string\n regex: \".*?'''\"\n next : \\key\n stringfill\n\n qqdoc:\n token: \\string\n regex: '.*?\"\"\"'\n next : \\key\n stringfill\n\n qstring:\n token: \\string\n regex: /[^\\\\']*(?:\\\\.[^\\\\']*)*'/$\n next : \\key\n stringfill\n\n qqstring:\n token: \\string\n regex: /[^\\\\\"]*(?:\\\\.[^\\\\\"]*)*\"/$\n next : \\key\n stringfill\n\n js:\n token: \\string\n regex: /[^\\\\`]*(?:\\\\.[^\\\\`]*)*`/$\n next : \\key\n stringfill\n\n words:\n token: \\string\n regex: '.*?\\\\]>'\n next : \\key\n stringfill\n" - } - ], - "id": "VG6x4-d_", - "createdAt": 1659507267074, - "updatedAt": 1659507283998 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "LSL", - "content": [ - { - "label": "Fragment 1", - "language": "lsl", - "value": "/*\n Testing syntax highlighting\n of Ace Editor\n for the Linden Scripting Language\n*/\n\ninteger someIntNormal = 3672;\ninteger someIntHex = 0x00000000;\ninteger someIntMath = PI_BY_TWO;\n\ninteger event = 5673; // invalid.illegal\n\nkey someKeyTexture = TEXTURE_DEFAULT;\nstring someStringSpecial = EOF;\n\nsome_user_defined_function_without_return_type(string inputAsString)\n{\n llSay(PUBLIC_CHANNEL, inputAsString);\n}\n\nstring user_defined_function_returning_a_string(key inputAsKey)\n{\n return (string)inputAsKey;\n}\n\ndefault\n{\n state_entry()\n {\n key someKey = NULL_KEY;\n someKey = llGetOwner();\n\n string someString = user_defined_function_returning_a_string(someKey);\n\n some_user_defined_function_without_return_type(someString);\n }\n\n touch_start(integer num_detected)\n {\n list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []);\n integer numOfAgents = llGetListLength(agentsInRegion);\n\n integer index; // defaults to 0\n for (; index <= numOfAgents - 1; index++) // for each agent in region\n {\n llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, \"Hello, Avatar!\");\n }\n }\n\n touch_end(integer num_detected)\n {\n someIntNormal = 3672;\n someIntHex = 0x00000000;\n someIntMath = PI_BY_TWO;\n\n event = 5673; // invalid.illegal\n\n someKeyTexture = TEXTURE_DEFAULT;\n someStringSpecial = EOF;\n\n llSetInventoryPermMask(\"some item\", MASK_NEXT, PERM_ALL); // reserved.godmode\n\n llWhisper(PUBLIC_CHANNEL, \"Leaving \\\"default\\\" now...\");\n state other;\n }\n}\n\nstate other\n{\n state_entry()\n {\n llWhisper(PUBLIC_CHANNEL, \"Entered \\\"state other\\\", returning to \\\"default\\\" again...\");\n state default;\n }\n}\n" - } - ], - "id": "jdK6UsDj", - "createdAt": 1659507284423, - "updatedAt": 1659507452974 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Lua", - "content": [ - { - "label": "Fragment 1", - "language": "lua", - "value": "--[[--\nnum_args takes in 5.1 byte code and extracts the number of arguments\nfrom its function header.\n--]]--\n\nfunction int(t)\n\treturn t:byte(1)+t:byte(2)*0x100+t:byte(3)*0x10000+t:byte(4)*0x1000000\nend\n\nfunction num_args(func)\n\tlocal dump = string.dump(func)\n\tlocal offset, cursor = int(dump:sub(13)), offset + 26\n\t--Get the params and var flag (whether there's a ... in the param)\n\treturn dump:sub(cursor):byte(), dump:sub(cursor+1):byte()\nend\n\n-- Usage:\nnum_args(function(a,b,c,d, ...) end) -- return 4, 7\n\n-- Python styled string format operator\nlocal gm = debug.getmetatable(\"\")\n\ngm.__mod=function(self, other)\n if type(other) ~= \"table\" then other = {other} end\n for i,v in ipairs(other) do other[i] = tostring(v) end\n return self:format(unpack(other))\nend\n\nprint([===[\n blah blah %s, (%d %d)\n]===]%{\"blah\", num_args(int)})\n\n--[=[--\ntable.maxn is deprecated, use # instead.\n--]=]--\nprint(table.maxn{1,2,[4]=4,[8]=8) -- outputs 8 instead of 2\n\nprint(5 --[[ blah ]])" - } - ], - "id": "HZVQW3Q8", - "createdAt": 1659507732882, - "updatedAt": 1659507747073 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Makefile", - "content": [ - { - "label": "Fragment 1", - "language": "makefile", - "value": ".PHONY: apf ext worker mode theme package test\n\ndefault: apf worker\n\nupdate: worker\n\n# packages apf\n\n# This is the first line of a comment \\\nand this is still part of the comment \\\nas is this, since I keep ending each line \\\nwith a backslash character\n\napf:\n cd node_modules/packager; node package.js projects/apf_cloud9.apr\n\tcd node_modules/packager; cat build/apf_release.js | sed 's/\\(\\/\\*FILEHEAD(\\).*//g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_release.js\n\n# package debug version of apf\napfdebug:\n\tcd node_modules/packager/projects; cat apf_cloud9.apr | sed 's/<p:define name=\\\"__DEBUG\\\" value=\\\"0\\\" \\/>/<p:define name=\\\"__DEBUG\\\" value=\\\"1\\\" \\/>/g' > apf_cloud9_debug2.apr\n\tcd node_modules/packager/projects; cat apf_cloud9_debug2.apr | sed 's/apf_release/apf_debug/g' > apf_cloud9_debug.apr; rm apf_cloud9_debug2.apr\n\tcd node_modules/packager; node package.js projects/apf_cloud9_debug.apr\n\tcd node_modules/packager; cat build/apf_debug.js | sed 's/\\(\\/\\*FILEHEAD(\\).*\\/apf\\/\\(.*\\)/\\1\\2/g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_debug.js\n\n# package_apf--temporary fix for non-workering infra\npack_apf:\n\tmkdir -p build/src\n\tmv plugins-client/lib.apf/www/apf-packaged/apf_release.js build/src/apf_release.js\n\tnode build/r.js -o name=./build/src/apf_release.js out=./plugins-client/lib.apf/www/apf-packaged/apf_release.js baseUrl=.\n\n# makes ace; at the moment, requires dryice@0.4.2\nace:\n\tcd node_modules/ace; make clean pre_build; ./Makefile.dryice.js minimal\n\n\n# packages core\ncore: ace\n\tmkdir -p build/src\n\tnode build/r.js -o build/core.build.js\n\n# generates packed template\nhelper: \n\tnode build/packed_helper.js\n\nhelper_clean:\n\tmkdir -p build/src\n\tnode build/packed_helper.js 1\n\n# packages ext\next: \n\tnode build/r.js -o build/app.build.js\n\n# calls dryice on worker & packages it\nworker: plugins-client/lib.ace/www/worker/worker-language.js\n\nplugins-client/lib.ace/www/worker/worker-language.js plugins-client/lib.ace/www/worker/worker-javascript.js : \\\n $(wildcard node_modules/ace/*) $(wildcard node_modules/ace/*/*) $(wildcard node_modules/ace/*/*/mode/*) \\\n $(wildcard plugins-client/ext.language/*) \\\n $(wildcard plugins-client/ext.language/*/*) \\\n $(wildcard plugins-client/ext.linereport/*) \\\n $(wildcard plugins-client/ext.codecomplete/*) \\\n $(wildcard plugins-client/ext.codecomplete/*/*) \\\n $(wildcard plugins-client/ext.jslanguage/*) \\\n $(wildcard plugins-client/ext.jslanguage/*/*) \\\n $(wildcard plugins-client/ext.csslanguage/*) \\\n $(wildcard plugins-client/ext.csslanguage/*/*) \\\n $(wildcard plugins-client/ext.htmllanguage/*) \\\n $(wildcard plugins-client/ext.htmllanguage/*/*) \\\n $(wildcard plugins-client/ext.jsinfer/*) \\\n $(wildcard plugins-client/ext.jsinfer/*/*) \\\n $(wildcard node_modules/treehugger/lib/*) \\\n $(wildcard node_modules/treehugger/lib/*/*) \\\n $(wildcard node_modules/ace/lib/*) \\\n $(wildcard node_modules/ace/*/*) \\\n Makefile.dryice.js\n\tmkdir -p plugins-client/lib.ace/www/worker\n\trm -rf /tmp/c9_worker_build\n\tmkdir -p /tmp/c9_worker_build/ext\n\tln -s `pwd`/plugins-client/ext.language /tmp/c9_worker_build/ext/language\n\tln -s `pwd`/plugins-client/ext.codecomplete /tmp/c9_worker_build/ext/codecomplete\n\tln -s `pwd`/plugins-client/ext.jslanguage /tmp/c9_worker_build/ext/jslanguage\n\tln -s `pwd`/plugins-client/ext.csslanguage /tmp/c9_worker_build/ext/csslanguage\n\tln -s `pwd`/plugins-client/ext.htmllanguage /tmp/c9_worker_build/ext/htmllanguage\n\tln -s `pwd`/plugins-client/ext.linereport /tmp/c9_worker_build/ext/linereport\n\tln -s `pwd`/plugins-client/ext.linereport_php /tmp/c9_worker_build/ext/linereport_php\n\tnode Makefile.dryice.js worker\n\tcp node_modules/ace/build/src/worker* plugins-client/lib.ace/www/worker\n\ndefine \n\nifeq\n\noverride\n\n# copies built ace modes\nmode:\n\tmkdir -p plugins-client/lib.ace/www/mode\n\tcp `find node_modules/ace/build/src | grep -E \"mode-[a-zA-Z_0-9]+.js\"` plugins-client/lib.ace/www/mode\n\n# copies built ace themes\ntheme:\n\tmkdir -p plugins-client/lib.ace/www/theme\n\tcp `find node_modules/ace/build/src | grep -E \"theme-[a-zA-Z_0-9]+.js\"` plugins-client/lib.ace/www/theme\n\ngzip_safe:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -c -q -f $$i > $$i.gz ; \\\n\tdone\n\ngzip:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -q -f $$i ; \\\n\tdone\n\nc9core: apf ace core worker mode theme\n \npackage_clean: helper_clean c9core ext\n\npackage: helper c9core ext\n\ntest check:\n\ttest/run-tests.sh\t" - } - ], - "id": "fhPJadfE", - "createdAt": 1659507748672, - "updatedAt": 1659507763698 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Markdown", - "content": [ - { - "label": "Fragment 1", - "language": "markdown", - "value": "## Support\n\nmassCode need your support, give a [star](https://github.com/massCodeIO/massCode/stargazers) on this repo or [donate](https://opencollective.com/masscode). All of this is valuable and will inspire further development.\n\n## Features\n### Organization\nmassCode allows you to organize snippets using multi-level folders as well as tags. Each snippet has fragments - tabs, which gives even greater level of organization.\n\n### Editor\nA snippet manager must not only provide organization of snippets but also have a good code editor. That's why under the hood of massCode there's [Ace](https://ace.c9.io). Ace is a high performance code editor which supports syntax highlighting for over 170 languages. We also added a [Prettier](https://prettier.io) to code formatter.\n\n### Real-time Render for HTML & CSS\nYou can not only collect snippets, but also see the rendering result for HTML and CSS in real time. Test the idea or just view the result.\n\n### Markdown\nmassCode allows you to write in Markdown and provide support to syntax highlighting, tables, list and other formatting. Also massCode supports [Mermaid](https://mermaid-js.github.io/mermaid/#) - diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically.\n\n### Search\nIt is impossible to imagine a productive snippets manager without quick access to snippets. Therefore massCode has a fast full-text search with highlighting of the search query.\n\n### Autosave\nmassCode automatically saves any changes you make during work, so you don't have to worry about losing changes.\n\n### Sync\nYou can use any service that provides cloud synchronization, such as iCloud Drive, Google Drive, Dropbox or other similar.\n\n### Database\nmassCode uses a simple JSON to store your data. The database files are on your local computer.\n\n### Integrations\nmassCode supports extensions for [VS Code](https://marketplace.visualstudio.com/items?itemName=AntonReshetov.masscode-assistant), [Raycast](https://www.raycast.com/antonreshetov/masscode) and [Alfred](https://github.com/massCodeIO/assistant-alfred), which gives even more possibilities to use application. With the VS Code extension you get practically zen mode, search for the necessary snippets and insert them immediately or save the selected code sections as a snippet.\n\n### Beautiful Screenshots\nCreate beautiful snippet images on different backgrounds and in different modes\n\n## Overview\n\nThe goal of creating this application was mostly my own growth as a developer. Also, I wanted this project to absorb the best of such applications already on the market (both free and paid). At the same time, I wanted this project to be an open source project.\n\n## Follow\n - News and updates on [Twitter](https://twitter.com/anton_reshetov).\n - [Discussions](https://github.com/massCodeIO/massCode/discussions).\n\n## Other\nYou can also [download](https://github.com/antonreshetov/massCode) massCode v1.\n\n## License\n\n[AGPL-3.0](https://github.com/massCodeIO/massCode/blob/master/LICENSE)\n\nCopyright (c) 2019-present, [Anton Reshetov](https://github.com/antonreshetov)." - } - ], - "id": "ggDHY18p", - "createdAt": 1659507764139, - "updatedAt": 1659508402182 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Mask", - "content": [ - { - "label": "Fragment 1", - "language": "mask", - "value": "/* Mask Syntax Demo */\n\ndiv > ' Test ~[name]';\n\ndefine :userProfile {\n\theader {\n\t\th4 > @title;\n\t\tbutton.close;\n\t}\n}\n\n:userProfile {\n\t@title > ' Hello ~[: username.toUpperCase()]'\n}\n\nstyle {\n html, body {\n background: url('name.png') 0 0 no-repeat;\n }\n}\n\nbutton {\n\tevent click (e) {\n\t this.textContent = `name ${e.clientX} !`;\n\t}\n}\n\nmd > \"\"\"\n\n- div\n- span\n \nHello\n\n[one](http://google.com)\n\n\"\"\";\n\n\nheader .foo > 'Heading'\n\nbutton .baz x-signal='click: test' disabled > \"\n\tHello,\n\tworld \n\t\\\"Buddy\\\"\n\"\n\nvar a = {\n name: `name ${window.innerWidth}`\n};\n\nspan .foo > \"~[bind: a.name]\"" - } - ], - "id": "HbKYMuyD", - "createdAt": 1659508402682, - "updatedAt": 1659508412451 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "MATLAB", - "content": [ - { - "label": "Fragment 1", - "language": "matlab", - "value": "%{\n %{\n Ace Matlab demo\n %}\n%}\n\nclassdef hello\n methods\n function greet(this)\n disp('Hello!') % say hi\n end\n end\nend\n\n% transpose \na = [ 'x''y', \"x\\n\\\n y\", 1' ]' + 2'" - } - ], - "id": "Mpzgr7qp", - "createdAt": 1659508412804, - "updatedAt": 1659508428405 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "MediaWiki", - "content": [ - { - "label": "Fragment 1", - "language": "mediawiki", - "value": "{{Languages}}\n\n'''Ace''' is a standalone code editor written in [[wikipedia:JavaScript|JavaScript]]. Our goal is to create a browser based editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be ''easily'' embedded in any web page or JavaScript application. Ace is developed as the primary editor for [http://www.cloud9ide.com/ Cloud9 IDE] and the successor of the Mozilla Skywriter (Bespin) Project.\n\n== Features ==\n* Syntax highlighting\n* Automatic indent and outdent\n* An optional command line\n* Handles huge documents (100,000 lines and more are no problem)\n* Fully customizable key bindings including VI and Emacs modes\n* Themes (TextMate themes can be imported)\n* Search and replace with regular expressions\n* Highlight matching parentheses\n* Toggle between soft tabs and real tabs\n* Displays hidden characters\n* Drag and drop text using the mouse\n* Line wrapping\n* Unstructured / user code folding\n* Live syntax checker (currently JavaScript/CoffeeScript)\n\n== Take Ace for a spin! ==\nCheck out the Ace live [http://ajaxorg.github.com/ace/ demo] or get a [http://run.cloud9ide.com Cloud9 IDE account] to experience Ace while editing one of your own GitHub projects.\n\nIf you want, you can use Ace as a textarea replacement thanks to the [http://ajaxorg.github.com/ace/build/textarea/editor.html Ace Bookmarklet].\n\n== Documentation ==\nYou find a lot more sample code in the [https://github.com/ajaxorg/ace/blob/master/demo/demo.js demo app].\n\nThere is also some documentation on the [https://github.com/ajaxorg/ace/wiki wiki page].\n\nIf you still need help, feel free to drop a mail on the [http://groups.google.com/group/ace-discuss ace mailing list].\n" - } - ], - "id": "bK4qhdVr", - "createdAt": 1659508429769, - "updatedAt": 1659508458915 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "MEL", - "content": [ - { - "label": "Fragment 1", - "language": "mel", - "value": "// animated duplicates, instances script\nproc animatedDuplication (int $rangeStart, int $rangeEnd, int $numOfDuplicates, int $duplicateOrInstance)\n{\n int $range_start = $rangeStart;\n int $range_end = $rangeEnd;\n int $num_of_duplicates = $numOfDuplicates;\n int $step_size = ($range_end - $range_start) / $num_of_duplicates;\n int $i = 0;\n int $temp;\n\n currentTime $range_start; // set to range start\n\n string $selectedObjects[]; // to store selected objects\n $selectedObjects = `ls -sl`; // store selected objects\n select $selectedObjects;\n\n while ($i <= $num_of_duplicates)\n {\n $temp = $range_start + ($step_size * $i);\n currentTime ($temp);\n // seleced the objects to duplicate or instance\n select $selectedObjects;\n if($duplicateOrInstance == 0)\n {\n duplicate;\n }\n else\n {\n instance;\n }\n $i++;\n }\n}" - } - ], - "id": "H3g68CbT", - "createdAt": 1659508460186, - "updatedAt": 1659508475115 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Mikrotik", - "content": [ - { - "label": "Fragment 1", - "language": "mikrotik", - "value": ":global currentIP;\n\n:local newIP [/ip address get [find interface=\"ether1\"] address];\n\n:if ($newIP != $currentIP) do={\n :put \"ip address $currentIP changed to $newIP\";\n " - } - ], - "id": "REC-Heib", - "createdAt": 1659508475622, - "updatedAt": 1659508513991 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "MIPS", - "content": [ - { - "label": "Fragment 1", - "language": "mips", - "value": "# hello.s ... print \"Hello, MIPS\"\n\n .data # the data segment\nmsg: .asciiz \"Hello, MIPS\\n\"\n\n .text # the code segment\n .globl main\nmain: \n la $a0, msg # load the argument string\n li $v0, 4 # load the system call (print)\n syscall # print the string\n jr $ra # return to caller (__start)" - } - ], - "id": "sV5PPq5Q", - "createdAt": 1659508517380, - "updatedAt": 1659508706528 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "MySQL", - "content": [ - { - "label": "Fragment 1", - "language": "mysql", - "value": "CREATE TABLE shop (\n article INT UNSIGNED DEFAULT '0000' NOT NULL,\n dealer CHAR(20) DEFAULT '' NOT NULL,\n price DECIMAL(16,2) DEFAULT '0.00' NOT NULL,\n PRIMARY KEY(article, dealer));\nINSERT INTO shop VALUES\n (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),\n (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);" - } - ], - "id": "DHN5Cik4", - "createdAt": 1659508722877, - "updatedAt": 1659508758823 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Nginx", - "content": [ - { - "label": "Fragment 1", - "language": "nginx", - "value": "user www www; ## Default: nobody\nworker_processes 5; ## Default: 1\nerror_log logs/error.log;\npid logs/nginx.pid;\nworker_rlimit_nofile 8192;\n\nevents {\n worker_connections 4096; ## Default: 1024\n}\n\nhttp {\n include conf/mime.types;\n include /etc/nginx/proxy.conf;\n include /etc/nginx/fastcgi.conf;\n index index.html index.htm index.php;\n\n default_type application/octet-stream;\n log_format main '$remote_addr - $remote_user [$time_local] $status '\n '\"$request\" $body_bytes_sent \"$http_referer\" '\n '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n access_log logs/access.log main;\n sendfile on;\n tcp_nopush on;\n server_names_hash_bucket_size 128; # this seems to be required for some vhosts\n\n server { # php/fastcgi\n listen 80;\n server_name domain1.com www.domain1.com;\n access_log logs/domain1.access.log main;\n root html;\n\n location ~ \\.php$ {\n fastcgi_pass 127.0.0.1:1025;\n }\n }\n\n server { # simple reverse-proxy\n listen 80;\n server_name domain2.com www.domain2.com;\n access_log logs/domain2.access.log main;\n\n # serve static files\n location ~ ^/(images|javascript|js|css|flash|media|static)/ {\n root /var/www/virtual/big.server.com/htdocs;\n expires 30d;\n }\n\n # pass requests for dynamic content to rails/turbogears/zope, et al\n location / {\n proxy_pass http://127.0.0.1:8080;\n }\n }\n\n upstream big_server_com {\n server 127.0.0.3:8000 weight=5;\n server 127.0.0.3:8001 weight=5;\n server 192.168.0.1:8000;\n server 192.168.0.1:8001;\n }\n\n server { # simple load balancing\n listen 80;\n server_name big.server.com;\n access_log logs/big.server.access.log main;\n\n location / {\n proxy_pass http://big_server_com;\n }\n }\n}" - } - ], - "id": "b8-85iBK", - "createdAt": 1659508760164, - "updatedAt": 1659508774269 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Nim", - "content": [ - { - "label": "Fragment 1", - "language": "nim", - "value": "#[ #[ Multiline comment in already\n commented out code. ]#\nproc p[T](x: T) = discard\n]#\necho \"This is code\"\nvar\n p = 0B0_10001110100_0000101001000111101011101111111011000101001101001001'f64\n\nproc getAlphabet(): string =\n var accm = \"\"\n for letter in 'a'..'z': # see iterators\n accm.add(letter)\n return accm\n\nassert(\"a\" * 10 == \"aaaaaaaaaa\")\n" - } - ], - "id": "v7Sblz9B", - "createdAt": 1659508774712, - "updatedAt": 1659508785779 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Nix", - "content": [ - { - "label": "Fragment 1", - "language": "nix", - "value": "let\n square = x: x*x;\n sumOfSquares = x: y: square x + square y;\nin\n sumOfSquares 3 7" - } - ], - "id": "lPjjHMlA", - "createdAt": 1659508795441, - "updatedAt": 1659508919266 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "NSIS", - "content": [ - { - "label": "Fragment 1", - "language": "nsis", - "value": "/*\n NSIS Mode\n for Ace\n*/\n\n; Includes\n!include MUI2.nsh\n\n; Settings\nName \"installer_name\"\nOutFile \"installer_name.exe\"\nRequestExecutionLevel user\nCRCCheck on\n!ifdef x64\n InstallDir \"$PROGRAMFILES64\\installer_name\"\n!else\n InstallDir \"$PROGRAMFILES\\installer_name\"\n!endif\n\n; Pages\n!insertmacro MUI_PAGE_INSTFILES\n\n; Sections\nSection \"section_name\" section_index\n # your code here\nSectionEnd\n\n; Functions\nFunction .onInit\n MessageBox MB_OK \"Here comes a$\\n$\\rline-break!\"\nFunctionEnd" - } - ], - "id": "ZuEmPEeY", - "createdAt": 1659508921858, - "updatedAt": 1659509048694 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Nunjucks", - "content": [ - { - "label": "Fragment 1", - "language": "nunjucks", - "value": "{{ foo.bar }}\n{{ foo[\"bar\"] }}\n{{ foo | title }}\n{{ foo | join(\",\") }}\n{{ foo | replace(\"foo\", \"bar\") | capitalize }}\n{% block header %}\nThis is the default content\n{% endblock %}\n\n<section class=\"left\">\n {% block left %}{% endblock %}\n</section>\n\n<section class=\"right\">\n {% block right %}\n This is more content\n {% endblock %}\n</section>\n{% extends \"parent.html\" %}\n\n{% block left %}\nThis is the left side!\n{% endblock %}\n\n{% block right %}\nThis is the right side!\n{% endblock %}\n\n{% block right %}\n{{ super() }}\nRight side!\n{% endblock %}\n\n{% if variable %}\n It is true\n{% endif %}\n\n{% if hungry %}\n I am hungry\n{% elif tired %}\n I am tired\n{% else %}\n I am good!\n{% endif %}\n\n<h1>Posts</h1>\n<ul>\n{% for item in items %}\n <li>{{ item.title }}</li>\n{% else %}\n <li>This would display if the 'item' collection were empty</li>\n{% endfor %}\n</ul>\n\n{% for ingredient, amount in food %}\n Use {{ amount }} of {{ ingredient }}\n{% endfor %}\n\n{% for fruit, color in fruits %}\n Did you know that {{ fruit }} is {{ color }}?\n{% endfor %}\n\n{% for x, y, z in points %}\n Point: {{ x }}, {{ y }}, {{ z }}\n{% endfor %}\n\n<h1>Posts</h1>\n<ul>\n{% asyncEach item in items %}\n {% include \"item-template.html\" %}\n{% endeach %}\n</ul>\n\n<h1>Posts</h1>\n<ul>\n{% asyncAll item in items %}\n <li>{{ item.id | lookup }}</li>\n{% endall %}\n</ul>\n\n{% macro field(name, value='', type='text') %}\n<div class=\"field\">\n <input type=\"{{ type }}\" name=\"{{ name }}\"\n value=\"{{ value | escape }}\" />\n</div>\n{% endmacro %}\n\n{{ username }}\n{% set username = \"joe\" %}\n{{ username }}\n\n{% set standardModal %}\n {% include 'standardModalData.html' %}\n{% endset %}\n\n<div class=\"js-modal\" data-modal=\"{{standardModal | e}}\">\n\n{% set standardModal %}\n {% include 'standardModalData.html' %}\n{% endset %}\n\n<div class=\"js-modal\" data-modal=\"{{standardModal | e}}\">\n\n{% include \"missing.html\" ignore missing %}\n\n{% import \"forms.html\" as forms %}\n\n{{ forms.label('Username') }}\n{{ forms.field('user') }}\n{{ forms.label('Password') }}\n{{ forms.field('pass', type='password') }}\n\n{% from \"forms.html\" import field, label as description %}\n\n{{ description('Username') }}\n{{ field('user') }}\n{{ description('Password') }}\n{{ field('pass', type='password') }}\n\n{{ foo(1, 2, bar=3, baz=4) }}\n\n{# Loop through all the users #}\n{% for user in users %}...{% endfor %}\n\n\n{% set cls = cycler(\"odd\", \"even\") %}\n{% for row in rows %}\n <div class=\"{{ cls.next() }}\">{{ row.name }}</div>\n{% endfor %}" - } - ], - "id": "82_QxEls", - "createdAt": 1659509069864, - "updatedAt": 1659509439491 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Objective-C", - "content": [ - { - "label": "Fragment 1", - "language": "objectivec", - "value": "@protocol Printing: someParent\n-(void) print;\n@end\n\n@interface Fraction: NSObject <Printing, NSCopying> {\n int numerator;\n int denominator;\n}\n@end\n\n@\"blah\\8\" @\"a\\222sd\\d\" @\"\\faw\\\"\\? \\' \\4 n\\\\\" @\"\\56\"\n@\"\\xSF42\"\n\n-(NSDecimalNumber*)addCount:(id)addObject{\n\nreturn [count decimalNumberByAdding:addObject.count];\n\n}\n\n NS_DURING NS_HANDLER NS_ENDHANDLER\n\n@try {\n if (argc > 1) {\n @throw [NSException exceptionWithName:@\"Throwing a test exception\" reason:@\"Testing the @throw directive.\" userInfo:nil];\n }\n} \n@catch (id theException) {\n NSLog(@\"%@\", theException);\n result = 1 ;\n} \n@finally {\n NSLog(@\"This always happens.\");\n result += 2 ;\n}\n\n @synchronized(lock) {\n NSLog(@\"Hello World\");\n }\n\nstruct { @defs( NSObject) }\n\nchar *enc1 = @encode(int);\n\n IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class \n\n\n @class @protocol\n\n@public\n // instance variables\n@package\n // instance variables\n@protected\n // instance variables\n@private\n // instance variables\n\n YES NO Nil nil\nNSApp()\nNSRectToCGRect (Protocol ProtocolFromString:\"NSTableViewDelegate\"))\n\n[SPPoint pointFromCGPoint:self.position]\n\nNSRoundDownToMultipleOfPageSize\n\n#import <stdio.h>\n\nint main( int argc, const char *argv[] ) {\n printf( \"hello world\\n\" );\n return 0;\n}\n\nNSChangeSpelling\n\n@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"\n\n@selector(lowercaseString) @selector(uppercaseString:)\n\nNSFetchRequest *localRequest = [[NSFetchRequest alloc] init]; \nlocalRequest.entity = [NSEntityDescription entityForName:@\"VNSource\" inManagedObjectContext:context]; \nlocalRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@\"resolution\" ascending:YES]]; \nNSPredicate *predicate = [NSPredicate predicateWithFormat:@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"];\n[NSPredicate predicateWithFormat:]\nNSString *predicateString = [NSString stringWithFormat:@\"SELF beginsWith[cd] %@\", searchString];\nNSPredicate *pred = [NSPredicate predicateWithFormat:predicateString];\nNSArray *filteredKeys = [[myMutableDictionary allKeys] filteredArrayUsingPredicate:pred]; \n\nlocalRequest.predicate = [NSPredicate predicateWithFormat:@\"whichChart = %@\" argumentArray: listChartToDownload];\nlocalRequest.fetchBatchSize = 100;\narrayRequest = [context executeFetchRequest:localRequest error:&error1];\n\n[localRequest release];\n\n#ifndef Nil\n#define Nil __DARWIN_NULL /* id of Nil class */\n#endif\n\n@implementation MyObject\n- (unsigned int)areaOfWidth:(unsigned int)width\n height:(unsigned int)height\n{\n return width*height;\n}\n@end\n" - } - ], - "id": "OTYb8BZn", - "createdAt": 1659509440384, - "updatedAt": 1659509466374 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "OCaml", - "content": [ - { - "label": "Fragment 1", - "language": "ocaml", - "value": "(*\n * Example of early return implementation taken from\n * http://ocaml.janestreet.com/?q=node/91\n *)\n\nlet with_return (type t) (f : _ -> t) =\n let module M =\n struct exception Return of t end\n in\n let return = { return = (fun x -> raise (M.Return x)); } in\n try f return with M.Return x -> x\n\n\n(* Function that uses the 'early return' functionality provided by `with_return` *)\nlet sum_until_first_negative list =\n with_return (fun r ->\n List.fold list ~init:0 ~f:(fun acc x ->\n if x >= 0 then acc + x else r.return acc))" - } - ], - "id": "R3z9RsNY", - "createdAt": 1659509467903, - "updatedAt": 1659509480532 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Pascal", - "content": [ - { - "label": "Fragment 1", - "language": "pascal", - "value": "(*****************************************************************************\n * A simple bubble sort program. Reads integers, one per line, and prints *\n * them out in sorted order. Blows up if there are more than 49. *\n *****************************************************************************)\nPROGRAM Sort(input, output);\n CONST\n (* Max array size. *)\n MaxElts = 50;\n TYPE \n (* Type of the element array. *)\n IntArrType = ARRAY [1..MaxElts] OF Integer;\n\n VAR\n (* Indexes, exchange temp, array size. *)\n i, j, tmp, size: integer;\n\n (* Array of ints *)\n arr: IntArrType;\n\n (* Read in the integers. *)\n PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType); \n BEGIN\n size := 1;\n WHILE NOT eof DO BEGIN\n readln(a[size]);\n IF NOT eof THEN \n size := size + 1\n END\n END;\n\n BEGIN\n (* Read *)\n ReadArr(size, arr);\n\n (* Sort using bubble sort. *)\n FOR i := size - 1 DOWNTO 1 DO\n FOR j := 1 TO i DO \n IF arr[j] > arr[j + 1] THEN BEGIN\n tmp := arr[j];\n arr[j] := arr[j + 1];\n arr[j + 1] := tmp;\n END;\n\n (* Print. *)\n FOR i := 1 TO size DO\n writeln(arr[i])\n END.\n " - } - ], - "id": "J8J-Qn-3", - "createdAt": 1659509482727, - "updatedAt": 1659509621471 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Perl", - "content": [ - { - "label": "Fragment 1", - "language": "perl", - "value": "#!/usr/bin/perl\n=begin\n perl example code for Ace\n=cut\n\nuse v5.10;\nuse strict;\nuse warnings;\n\nuse List::Util qw(first);\nmy @primes;\n\n# Put 2 as the first prime so we won't have an empty array\npush @primes, 2;\n\nfor my $number_to_check (3 .. 200) {\n # Check if the current number is divisible by any previous prime\n # if it is, skip to the next number. Use first to bail out as soon\n # as we find a prime that divides it.\n next if (first {$number_to_check % $_ == 0} @primes);\n\n # If we reached this point it means $number_to_check is not\n # divisable by any prime number that came before it.\n push @primes, $number_to_check;\n}\n\n# List out all of the primes\nsay join(', ', @primes);\n" - } - ], - "id": "jKu61d0A", - "createdAt": 1659509623058, - "updatedAt": 1659509736352 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "pgSQL", - "content": [ - { - "label": "Fragment 1", - "language": "pgsql", - "value": "\nBEGIN;\n\n/**\n* Samples from PostgreSQL src/tutorial/basics.source\n*/\nCREATE TABLE weather (\n\tcity\t\tvarchar(80),\n\ttemp_lo\t\tint,\t\t-- low temperature\n\ttemp_hi\t\tint,\t\t-- high temperature\n\tprcp\t\treal,\t\t-- precipitation\n\t\"date\"\t\tdate\n);\n\nCREATE TABLE cities (\n\tname\t\tvarchar(80),\n\tlocation\tpoint\n);\n\n\nINSERT INTO weather\n VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');\n\nINSERT INTO cities\n VALUES ('San Francisco', '(-194.0, 53.0)');\n\nINSERT INTO weather (city, temp_lo, temp_hi, prcp, \"date\")\n VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');\n\nINSERT INTO weather (date, city, temp_hi, temp_lo)\n VALUES ('1994-11-29', 'Hayward', 54, 37);\n\n\nSELECT city, (temp_hi+temp_lo)/2 AS temp_avg, \"date\" FROM weather;\n\nSELECT city, temp_lo, temp_hi, prcp, \"date\", location\n FROM weather, cities\n WHERE city = name;\n\n\n\n/**\n* Dollar quotes starting at the end of the line are colored as SQL unless\n* a special language tag is used. Dollar quote syntax coloring is implemented\n* for Perl, Python, JavaScript, and Json.\n*/\ncreate or replace function blob_content_chunked(\n in p_data bytea, \n in p_chunk integer)\nreturns setof bytea as $$\n-- Still SQL comments\ndeclare\n\tv_size integer = octet_length(p_data);\nbegin\n\tfor i in 1..v_size by p_chunk loop\n\t\treturn next substring(p_data from i for p_chunk);\n\tend loop;\nend;\n$$ language plpgsql stable;\n\n\n-- pl/perl\nCREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $perl$\n # perl comment...\n my ($x,$y) = @_;\n if (! defined $x) {\n if (! defined $y) { return undef; }\n return $y;\n }\n if (! defined $y) { return $x; }\n if ($x > $y) { return $x; }\n return $y;\n$perl$ LANGUAGE plperl;\n\n-- pl/python\nCREATE FUNCTION usesavedplan() RETURNS trigger AS $python$\n # python comment...\n if SD.has_key(\"plan\"):\n plan = SD[\"plan\"]\n else:\n plan = plpy.prepare(\"SELECT 1\")\n SD[\"plan\"] = plan\n$python$ LANGUAGE plpythonu;\n\n-- pl/v8 (javascript)\nCREATE FUNCTION plv8_test(keys text[], vals text[]) RETURNS text AS $javascript$\nvar o = {};\nfor(var i=0; i<keys.length; i++){\n o[keys[i]] = vals[i];\n}\nreturn JSON.stringify(o);\n$javascript$ LANGUAGE plv8 IMMUTABLE STRICT;\n\n-- json\nselect * from json_object_keys($json$\n{\n \"f1\": 5,\n \"f2\": \"test\",\n \"f3\": {}\n}\n$json$);\n\n\n-- psql commands\n\\df cash*\n\n\n-- Some string samples.\nselect 'don''t do it now;' || 'maybe later';\nselect E'dont\\'t do it';\nselect length('some other''s stuff' || $$cat in hat's stuff $$);\n\nselect $$ strings\nover multiple \nlines - use dollar quotes\n$$;\n\nEND;\n" - } - ], - "id": "f7bHURID", - "createdAt": 1659509738328, - "updatedAt": 1659509757188 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "PHP", - "content": [ - { - "label": "Fragment 1", - "language": "php", - "value": "require_once 'Zend/Uri/Http.php';\n\nnamespace Location\\Web;\n\ninterface Factory\n{\n static function _factory();\n}\n\nabstract class URI extends BaseURI implements Factory\n{\n abstract function test();\n\n public static $st1 = 1;\n const ME = \"Yo\";\n var $list = NULL;\n private $var;\n\n /**\n * Returns a URI\n *\n * @return URI\n */\n static public function _factory($stats = array(), $uri = 'http')\n {\n echo __METHOD__;\n $uri = explode(':', $uri, 0b10);\n $schemeSpecific = isset($uri[1]) ? $uri[1] : '';\n $desc = 'Multi\nline description';\n\n // Security check\n if (!ctype_alnum($scheme)) {\n throw new Zend_Uri_Exception('Illegal scheme');\n }\n\n $this->var = 0 - self::$st;\n $this->list = list(Array(\"1\"=> 2, 2=>self::ME, 3 => \\Location\\Web\\URI::class));\n\n return [\n 'uri' => $uri,\n 'value' => null,\n ];\n }\n}\n\nmatch ($key) {\n 1 => 'Integer 1',\n '1' => 'String 1',\n true => 'Bool true',\n [] => 'Empty array',\n [1] => 'Array [1]',\n};\n\nenum Foo: string {\n case Test = 'test';\n}\n\necho URI::ME . URI::$st1;\n\n__halt_compiler () ; datahere\ndatahere\ndatahere */\ndatahere" - } - ], - "id": "yuH9oxm0", - "createdAt": 1659509784436, - "updatedAt": 1659509895082 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "PHP - Blade Template", - "content": [ - { - "label": "Fragment 1", - "language": "php_laravel_blade", - "value": "<!-- Stored in resources/views/layouts/app.blade.php -->\n\n<html>\n <head>\n <title>App Name - @yield('title')</title>\n <script>\n var app = @json($array);\n </script>\n </head>\n <body>\n @extends('layouts.app')\n @section('sidebar')\n @parent\n\n <p>This is appended to the master sidebar.</p>\n @endsection\n \n @if (count($records) === 1)\n I have one record!\n @elseif (count($records) > 1)\n I have multiple records!\n @else\n I don't have any records!\n @endif\n\n @foreach ($users as $user)\n @if ($user->type == 1)\n @continue\n @endif\n\n <li>{{ $user->name }}</li>\n\n @if ($user->number == 5)\n @break\n @endif\n @endforeach\n\n @foreach ($users as $user)\n @continue($user->type == 1)\n\n <li>{{ $user->name }}</li>\n\n @break($user->number == 5)\n @endforeach\n\n <div>\n @include('shared.errors')\n\n <form>\n <!-- Form Contents -->\n </form>\n </div>\n\n @includeIf('view.name', ['some' => 'data'])\n\n @env('local')\n // The application is in the local environment...\n @elseenv('testing')\n // The application is in the testing environment...\n @else\n // The application is not in the local or testing environment...\n @endenv\n\n <div class=\"container\">\n @yield('content')\n </div>\n </body>\n</html>\n\n\n{{-- comment --}}\n\n@if (\n {{-- comment --}}\n /*block comment*/\n #another comment\n $user->type == 1\n // c comment\n /* comment*/\n)\n # not a comment <div id=\"#//x\"></div>\n@endif\n" - } - ], - "id": "WwBajcHG", - "createdAt": 1659509896117, - "updatedAt": 1659509957894 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Pig", - "content": [ - { - "label": "Fragment 1", - "language": "pig", - "value": "A = load 'mobydick.txt';\nB = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;\nC = filter B by word matches '\\\\w+';\nD = group C by word;\nE = foreach D generate COUNT(C) as count, group as word;\nF = order E by count desc;\n-- one comment\n/* another comment */\ndump F;\n" - } - ], - "id": "uA6UMShf", - "createdAt": 1659509975420, - "updatedAt": 1659509991588 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Powershell", - "content": [ - { - "label": "Fragment 1", - "language": "powershell", - "value": "# This is a simple comment\nfunction Hello($name) {\n Write-host \"Hello $name\"\n}\n\nfunction add($left, $right=4) {\n if ($right -ne 4) {\n return $left\n } elseif ($left -eq $null -and $right -eq 2) {\n return 3\n } else {\n return 2\n }\n}\n\n$number = 1 + 2;\n$number += 3\n\nWrite-Host Hello -name \"World\"\n\n$an_array = @(1, 2, 3)\n$a_hash = @{\"something\" = \"something else\"}\n\n& notepad .\\readme.md\n" - } - ], - "id": "ACgKGq8A", - "createdAt": 1659509992390, - "updatedAt": 1659510027409 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Paat", - "content": [ - { - "label": "Fragment 1", - "language": "praat", - "value": "form Highlighter test\n sentence My_sentence This should all be a string\n text My_text This should also all be a string\n word My_word Only the first word is a string, the rest is invalid\n boolean Binary 1\n boolean Text no\n boolean Quoted \"yes\"\n comment This should be a string\n real left_Range -123.6\n positive right_Range_max 3.3\n integer Int 4\n natural Nat 4\nendform\n\n# External scripts\ninclude /path/to/file\nrunScript: \"/path/to/file\"\nexecute /path/to/file\n\nstopwatch\n\n# old-style procedure call\ncall oldStyle \"quoted\" 2 unquoted string\nassert oldStyle.local = 1\n\n# New-style procedure call with parens\n@newStyle(\"quoted\", 2, \"quoted string\")\nif praatVersion >= 5364 \n # New-style procedure call with colon\n @newStyle: \"quoted\", 2, \"quoted string\"\nendif\n\n# if-block with built-in variables\nif windows\n # We are on Windows\nelsif unix = 1 or !macintosh\n exitScript: \"We are on Linux\"\nelse macintosh == 1\n exit We are on Mac\nendif\n\n# inline if with inline comment\nvar = if macintosh = 1 then 0 else 1 fi ; This is an inline comment\n\n# for-loop with explicit from using local variable\n# and paren-style function calls and variable interpolation\nn = numberOfSelected(\"Sound\")\nfor i from newStyle.local to n\n sound'i' = selected(\"Sound\", i)\n sound[i] = sound'i'\nendfor\n\nfor i from 1 to n\n # Different styles of object selection\n select sound'i'\n sound = selected()\n sound$ = selected$(\"Sound\")\n select Sound 'sound$'\n selectObject(sound[i])\n selectObject: sound\n \n # Pause commands\n beginPause(\"Viewing \" + sound$)\n if i > 1\n button = endPause(\"Stop\", \"Previous\",\n ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n ...3, 1)\n else\n button = endPause(\"Stop\",\n ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n ...2, 1) \n endif\n editor_name$ = if total_textgrids then \"TextGrid \" else \"Sound \" fi + name$\n nocheck editor 'editor_name$'\n nocheck Close\n nocheck endeditor\n \n # New-style standalone command call\n Rename: \"SomeName\"\n\n # Command call with assignment\n duration = Get total duration\n \n # Multi-line command with modifier\n pitch = noprogress To Pitch (ac): 0, 75, 15, \"no\",\n ...0.03, 0.45, 0.01, 0.35, 0.14, 600\n \n # do-style command with assignment\n minimum = do(\"Get minimum...\", 0, 0, \"Hertz\", \"Parabolic\")\n\n # New-style multi-line command call with broken strings\n table = Create Table with column names: \"table\", 0,\n ...\"file subject speaker\n ...f0 f1 f2 f3 \" +\n ...\"duration response\"\n \n removeObject: pitch, table\n \n # Picture window commands\n selectObject: sound\n # do-style command\n do(\"Select inner viewport...\", 1, 6, 0.5, 1.5)\n Black\n Draw... 0 0 0 0 \"no\" Curve\n Draw inner box\n Text bottom: \"yes\", sound$\n Erase all\n \n # Demo window commands\n demo Erase all\n demo Select inner viewport... 0 100 0 100\n demo Axes... 0 100 0 100\n demo Paint rectangle... white 0 100 0 100\n demo Text... 50 centre 50 half Click to finish\n demoWaitForInput ( )\n demo Erase all\n demo Text: 50, \"centre\", 50, \"half\", \"Finished\"\nendfor\n\n# An old-style sendpraat block\nsendpraat Praat\n ...'newline$' Create Sound as pure tone... \"tone\" 1 0 0.4 44100 440 0.2 0.01 0.01\n ...'newline$' Play\n ...'newline$' Remove\n\n# A new-style sendpraat block\nbeginSendPraat: \"Praat\"\n Create Sound as pure tone: \"tone\", 1, 0, 0.4, 44100, 440, 0.2, 0.01, 0.01\n duration = Get total duration\n Remove\nendSendPraat: \"duration\"\nappendInfoLine: \"The generated sound lasted for \", duration, \"seconds\"\n\ntime = stopwatch\nclearinfo\necho This script took \nprint 'time' seconds to \nprintline execute.\n\n# Old-style procedure declaration\nprocedure oldStyle .str1$ .num .str2$\n .local = 1\nendproc\n\n# New-style procedure declaration with parentheses\nprocedure newStyle (.str1$, .num, .str2$)\n # Command with \"local\" variable\n .local = Get total duration\nendproc\n\n# New-style procedure declaration with colon\nprocedure newStyle: .str1$, .num, .str2$\n # Command with \"local\" variable\n newStyle.local = Get total duration\nendproc\n" - } - ], - "id": "iH45a-i3", - "createdAt": 1659510027898, - "updatedAt": 1659510048404 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Prisma", - "content": [ - { - "label": "Fragment 1", - "language": "prisma", - "value": "generator photon {\n provider = \"photonjs\"\n}\n\nmodel User {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n firstName String\n lastName String\n email String @unique\n password String\n phone String\n responseRate Float?\n responseTime Int?\n ReportsTo User? @relation(\"EmployeeToEmployee_ReportsTo\")\n employees User[] @relation(\"EmployeeToEmployee_ReportsTo\")\n isSuperHost Boolean\n ownedPlaces Place[]\n location Location?\n bookings Booking[]\n paymentAccount PaymentAccount[]\n sentMessages Message[] @relation(\"SentMessages\")\n receivedMessages Message[] @relation(\"ReceivedMessages\")\n notifications Notification[]\n profilePicture Picture?\n hostingExperiences Experience[]\n}\n\nmodel Place {\n id String @default(cuid()) @id\n name String\n size PLACE_SIZES?\n shortDescription String\n description String\n slug String\n maxGuests Int\n numBedrooms Int\n numBeds Int\n numBaths Int\n reviews Review[]\n amenities Amenities\n host User\n pricing Pricing\n location Location\n views Views\n guestRequirements GuestRequirements?\n policies Policies?\n houseRules HouseRules?\n bookings Booking[]\n pictures Picture[]\n popularity Int\n}\n\nmodel Pricing {\n id String @default(cuid()) @id\n place Place\n monthlyDiscount Int?\n weeklyDiscount Int?\n perNight Int\n smartPricing Boolean\n basePrice Int\n averageWeekly Int\n averageMonthly Int\n cleaningFee Int?\n securityDeposit Int?\n extraGuests Int?\n weekendPricing Int?\n currency CURRENCY?\n}\n\nmodel GuestRequirements {\n id String @default(cuid()) @id\n govIssuedId Boolean\n recommendationsFromOtherHosts Boolean\n guestTripInformation Boolean\n place Place\n}\n\nmodel Policies {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n checkInStartTime Float\n checkInEndTime Float\n checkoutTime Float\n place Place\n}\n\nmodel HouseRules {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n suitableForChildren Boolean?\n suitableForInfants Boolean?\n petsAllowed Boolean?\n smokingAllowed Boolean?\n partiesAndEventsAllowed Boolean?\n additionalRules String?\n}\n\nmodel Views {\n id String @default(cuid()) @id\n lastWeek Int\n place Place\n}\n\nmodel Location {\n id String @default(cuid()) @id\n lat Float\n lng Float\n neighbourHood Neighbourhood?\n user User?\n place Place?\n address String\n directions String\n experience Experience?\n restaurant Restaurant?\n}\n\nmodel Neighbourhood {\n id String @default(cuid()) @id\n locations Location[]\n name String\n slug String\n homePreview Picture?\n city City\n featured Boolean\n popularity Int\n}\n\nmodel City {\n id String @default(cuid()) @id\n name String\n neighbourhoods Neighbourhood[]\n}\n\nmodel Picture {\n id String @default(cuid()) @id\n url String\n}\n\nmodel Experience {\n id String @default(cuid()) @id\n category ExperienceCategory?\n title String\n host User\n location Location\n pricePerPerson Int\n reviews Review[]\n preview Picture\n popularity Int\n}\n\nmodel ExperienceCategory {\n id String @default(cuid()) @id\n mainColor String\n name String\n experience Experience?\n}\n\nmodel Amenities {\n id String @default(cuid()) @id\n place Place\n elevator Boolean\n petsAllowed Boolean\n internet Boolean\n kitchen Boolean\n wirelessInternet Boolean\n familyKidFriendly Boolean\n freeParkingOnPremises Boolean\n hotTub Boolean\n pool Boolean\n smokingAllowed Boolean\n wheelchairAccessible Boolean\n breakfast Boolean\n cableTv Boolean\n suitableForEvents Boolean\n dryer Boolean\n washer Boolean\n indoorFireplace Boolean\n tv Boolean\n heating Boolean\n hangers Boolean\n iron Boolean\n hairDryer Boolean\n doorman Boolean\n paidParkingOffPremises Boolean\n freeParkingOnStreet Boolean\n gym Boolean\n airConditioning Boolean\n shampoo Boolean\n essentials Boolean\n laptopFriendlyWorkspace Boolean\n privateEntrance Boolean\n buzzerWirelessIntercom Boolean\n babyBath Boolean\n babyMonitor Boolean\n babysitterRecommendations Boolean\n bathtub Boolean\n changingTable Boolean\n childrensBooksAndToys Boolean\n childrensDinnerware Boolean\n crib Boolean\n}\n\nmodel Review {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n text String\n stars Int\n accuracy Int\n location Int\n checkIn Int\n value Int\n cleanliness Int\n communication Int\n place Place\n experience Experience?\n}\n\nmodel Booking {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n bookee User\n place Place\n startDate DateTime\n endDate DateTime\n payment Payment?\n}\n\nmodel Payment {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n serviceFee Float\n placePrice Float\n totalPrice Float\n booking Booking\n paymentMethod PaymentAccount\n}\n\nmodel PaymentAccount {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n type PAYMENT_PROVIDER?\n user User\n payments Payment[]\n paypal PaypalInformation?\n creditcard CreditCardInformation?\n}\n\nmodel PaypalInformation {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n email String\n paymentAccount PaymentAccount\n}\n\nmodel CreditCardInformation {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n cardNumber String\n expiresOnMonth Int\n expiresOnYear Int\n securityCode String\n firstName String\n lastName String\n postalCode String\n country String\n paymentAccount PaymentAccount?\n}\n\nmodel Message {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n from User @relation(\"SentMessages\")\n to User @relation(\"ReceivedMessages\")\n deliveredAt DateTime\n readAt DateTime\n}\n\nmodel Notification {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n type NOTIFICATION_TYPE?\n user User\n link String\n readDate DateTime\n}\n\nmodel Restaurant {\n id String @default(cuid()) @id\n createdAt DateTime @default(now())\n title String\n avgPricePerPerson Int\n pictures Picture[]\n location Location\n isCurated Boolean\n slug String\n popularity Int\n}\n\nenum CURRENCY {\n CAD\n CHF\n EUR\n JPY\n USD\n ZAR\n}\n\nenum PLACE_SIZES {\n ENTIRE_HOUSE\n ENTIRE_APARTMENT\n ENTIRE_EARTH_HOUSE\n ENTIRE_CABIN\n ENTIRE_VILLA\n ENTIRE_PLACE\n ENTIRE_BOAT\n PRIVATE_ROOM\n}\n\nenum PAYMENT_PROVIDER {\n PAYPAL\n CREDIT_CARD\n}\n\nenum NOTIFICATION_TYPE {\n OFFER\n INSTANT_BOOK\n RESPONSIVENESS\n NEW_AMENITIES\n HOUSE_RULES\n}" - } - ], - "id": "KTDefWxq", - "createdAt": 1659510049111, - "updatedAt": 1659510072362 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Prolog", - "content": [ - { - "label": "Fragment 1", - "language": "prolog", - "value": "partition([], _, [], []).\npartition([X|Xs], Pivot, Smalls, Bigs) :-\n ( X @< Pivot ->\n Smalls = [X|Rest],\n partition(Xs, Pivot, Rest, Bigs)\n ; Bigs = [X|Rest],\n partition(Xs, Pivot, Smalls, Rest)\n ).\n \nquicksort([]) --> [].\nquicksort([X|Xs]) -->\n { partition(Xs, X, Smaller, Bigger) },\n quicksort(Smaller), [X], quicksort(Bigger).\n\nperfect(N) :-\n between(1, inf, N), U is N // 2,\n findall(D, (between(1,U,D), N mod D =:= 0), Ds),\n sumlist(Ds, N)." - } - ], - "id": "nqEhifOx", - "createdAt": 1659510080607, - "updatedAt": 1659510103148 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Properties", - "content": [ - { - "label": "Fragment 1", - "language": "properties", - "value": "# You are reading the \".properties\" entry.\n! The exclamation mark can also mark text as comments.\n# The key and element characters #, !, =, and : are written with a preceding backslash to ensure that they are properly loaded.\nwebsite = http\\://en.wikipedia.org/\nlanguage = English\n# The backslash below tells the application to continue reading\n# the value onto the next line.\nmessage = Welcome to \\\n Wikipedia!\n# Add spaces to the key\nkey\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n# Unicode\ntab : \\u0009\nempty-key=\nlast.line=value\n" - } - ], - "id": "VXNpdnl9", - "createdAt": 1659510103416, - "updatedAt": 1659510130368 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Protobuf", - "content": [ - { - "label": "Fragment 1", - "language": "protobuf", - "value": "message Point {\n required int32 x = 1;\n required int32 y = 2;\n optional string label = 3;\n}\n\nmessage Line {\n required Point start = 1;\n required Point end = 2;\n optional string label = 3;\n}\n\nmessage Polyline {\n repeated Point point = 1;\n optional string label = 2;\n}" - } - ], - "id": "W_wDJx6s", - "createdAt": 1659510131080, - "updatedAt": 1659510144680 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Pug", - "content": [ - { - "label": "Fragment 1", - "language": "pug", - "value": "- var friends = 10\ncase friends\n when 0\n p you have no friends\n when 1\n p you have a friend\n default\n p you have #{friends} friends" - } - ], - "id": "HDTFA7pE", - "createdAt": 1659510147077, - "updatedAt": 1659510166311 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Puppet", - "content": [ - { - "label": "Fragment 1", - "language": "puppet", - "value": "define apache::vhost ($port, $docroot, $servername = $title, $vhost_name = '*') {\n include apache\n include apache::params\n $vhost_dir = $apache::params::vhost_dir\n file { \"${vhost_dir}/${servername}.conf\":\n content => template('apache/vhost-default.conf.erb'),\n owner => 'www',\n group => 'www',\n mode => '644',\n require => Package['httpd'],\n notify => Service['httpd'],\n }\n}\n\ntype MyModule::Tree = Array[Variant[Data, Tree]]\n\nfunction apache::bool2http(Variant[String, Boolean] $arg) >> String {\n case $arg {\n false, undef, /(?i:false)/ : { 'Off' }\n true, /(?i:true)/ : { 'On' }\n default : { \"$arg\" }\n }\n}\n\n# A class with parameters\nclass apache (String $version = 'latest') {\n package {'httpd':\n ensure => $version, # Using the class parameter from above\n before => File['/etc/httpd.conf'],\n }\n file {'/etc/httpd.conf':\n ensure => file,\n owner => 'httpd',\n content => template('apache/httpd.conf.erb'), # Template from a module\n }\n service {'httpd':\n ensure => running,\n enable => true,\n subscribe => File['/etc/httpd.conf'],\n }\n}\n\n\nif $is_virtual {\n warning( 'Tried to include class ntp on virtual machine; this node might be misclassified.' )\n}\nelsif $operatingsystem == 'Darwin' {\n warning( 'This NTP module does not yet work on our Mac laptops.' )\nelse {\n include ntp\n}" - } - ], - "id": "lPxURSSn", - "createdAt": 1659510169193, - "updatedAt": 1659510185052 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Python", - "content": [ - { - "label": "Fragment 1", - "language": "python", - "value": "#!/usr/local/bin/python\n\nimport string, sys\n\n# If no arguments were given, print a helpful message\nif len(sys.argv)==1:\n print '''Usage:\ncelsius temp1 temp2 ...'''\n sys.exit(0)\n\n# Loop over the arguments\nfor i in sys.argv[1:]:\n try:\n fahrenheit=float(string.atoi(i))\n except string.atoi_error:\n print repr(i), \"not a numeric value\"\n else:\n celsius=(fahrenheit-32)*5.0/9.0\n print '%i\\260F = %i\\260C' % (int(fahrenheit), int(celsius+.5))" - } - ], - "id": "OIWeDQnx", - "createdAt": 1659510185880, - "updatedAt": 1659510201739 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "QML", - "content": [ - { - "label": "Fragment 1", - "language": "qml", - "value": "// A simple example\nimport QtQuick 2.7\nimport QtQuick.Controls 2.3\n\nRectangle {\n color: \"red\"\n anchors.fill: parent\n\n Text {\n text: \"WEEEEEEEEEE\"\n font.pixelSize: 50\n color: \"white\"\n anchors.centerIn: parent\n RotationAnimator on rotation {\n running: true\n loops: Animation.Infinite\n from: 0\n to: 360\n duration: 1500\n }\n }\n}\n" - } - ], - "id": "VDC3i3FC", - "createdAt": 1659510202469, - "updatedAt": 1659510214305 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "R", - "content": [ - { - "label": "Fragment 1", - "language": "r", - "value": "Call:\nlm(formula = y ~ x)\n \nResiduals:\n1 2 3 4 5 6\n3.3333 -0.6667 -2.6667 -2.6667 -0.6667 3.3333\n \nCoefficients:\n Estimate Std. Error t value Pr(>|t|)\n(Intercept) -9.3333 2.8441 -3.282 0.030453 *\nx 7.0000 0.7303 9.585 0.000662 ***\n---\nSignif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n \nResidual standard error: 3.055 on 4 degrees of freedom\nMultiple R-squared: 0.9583, Adjusted R-squared: 0.9478\nF-statistic: 91.88 on 1 and 4 DF, p-value: 0.000662\n \n> par(mfrow=c(2, 2)) # Request 2x2 plot layout\n> plot(lm_1) # Diagnostic plot of regression model" - } - ], - "id": "WvQzM-re", - "createdAt": 1659510214733, - "updatedAt": 1659510228108 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Raku", - "content": [ - { - "label": "Fragment 1", - "language": "raku", - "value": "=begin comment\nRaku example for ace\n=end comment\nclass Cook is Employee {\n has @.utensils is rw;\n has @.cookbooks is rw;\n\n method cook( $food ) {\n say \"Cooking $food\";\n }\n\n method clean_utensils {\n say \"Cleaning $_\" for @.utensils;\n }\n}\n\nclass Baker is Cook {\n method cook( $confection ) {\n say \"Baking a tasty $confection\";\n }\n}\n\nmy $cook = Cook.new(\n utensils => <spoon ladle knife pan>,\n cookbooks => 'The Joy of Cooking',\n salary => 40000);\n\n$cook.cook( 'pizza' ); # OUTPUT: «Cooking pizza»\nsay $cook.utensils.perl; # OUTPUT: «[\"spoon\", \"ladle\", \"knife\", \"pan\"]»\nsay $cook.cookbooks.perl; # OUTPUT: «[\"The Joy of Cooking\"]»\nsay $cook.salary; # OUTPUT: «40000»\n\nmy $baker = Baker.new(\n utensils => 'self cleaning oven',\n cookbooks => \"The Baker's Apprentice\",\n salary => 50000);\n\n$baker.cook('brioche'); # OUTPUT: «Baking a tasty brioche»\nsay $baker.utensils.perl; # OUTPUT: «[\"self cleaning oven\"]»\nsay $baker.cookbooks.perl; # OUTPUT: «[\"The Baker's Apprentice\"]»\nsay $baker.salary; # OUTPUT: «50000»\n" - } - ], - "id": "fuy3UFGu", - "createdAt": 1659510229876, - "updatedAt": 1659510243071 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Razor", - "content": [ - { - "label": "Fragment 1", - "language": "razor", - "value": "@* razor mode *@\n@{\n\tLayout = \"~/layout\"\n\t@: <a>\n\t@Layout\n\t@: </a>\n}" - } - ], - "id": "GQjZpbUI", - "createdAt": 1659510243891, - "updatedAt": 1659510280508 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Red", - "content": [ - { - "label": "Fragment 1", - "language": "red", - "value": "Red []\ninfo: func ['fn /name /intro /args /refinements /locals /return /spec \n\t/arg-num /arg-names /arg-types /ref-names /ref-types /ref-num /type\n\t/local intr ars refs locs ret arg ref typ\n][\n\tintr: copy \"\" ars: make map! copy [] refs: make map! copy [] locs: copy [] ret: copy [] typ: ref-arg: ref-arg-type: none\n\tif lit-word? fn [fn: to-word fn]\n\tunless find [op! native! function! action!] type?/word get fn [\n\t\tcause-error 'user 'message [\"Only function types accepted!\"]\n\t]\n\tout: make map! copy []\n\tspecs: spec-of get fn \n\tparse specs [\n\t\topt [set intr string!]\n\t\tany [set arg [word! | lit-word!] opt [set typ block!] opt string! (put ars arg either typ [typ][[any-type!]])]\n\t\tany [set ref refinement! [\n\t\t\tif (ref <> /local) (put refs to-lit-word ref make map! copy []) \n\t\t\t\topt string! \n\t\t\t\tany [set ref-arg word! opt [set ref-arg-type block!] \n\t\t\t\t\t(put refs/(to-word ref) to-lit-word ref-arg either ref-arg-type [ref-arg-type][[any-type!]])\n\t\t\t\t]\n\t\t\t|\tany [set loc word! (append locs loc) opt string!] \n\t\t\t\topt [set-word! set ret block!]\n\t\t]]\n\t\t\n\t\t(\n\t\tout: case [\n\t\t\tname\t\t[to-word fn]\n\t\t\tintro \t\t[intr] \n\t\t\targs\t\t[ars]\n\t\t\targ-num\t\t[length? ars]\n\t\t\targ-names \t[copy keys-of ars] \n\t\t\targ-types\t[copy values-of ars]\n\t\t\trefinements [refs] \n\t\t\tref-names\t[copy keys-of refs]\n\t\t\tref-types\t[copy values-of refs]\n\t\t\tref-num\t\t[length? refs]\n\t\t\tlocals \t\t[locs] \n\t\t\treturn \t\t[ret]\n\t\t\tspec\t\t[specs]\n\t\t\ttrue \t\t[\n\t\t\t\tmake object! [\n\t\t\t\t\tname: \t\tto-word fn \n\t\t\t\t\tintro: \t\tintr \n\t\t\t\t\targs: \t\tars \n\t\t\t\t\trefinements: refs \n\t\t\t\t\tlocals: \tlocs \n\t\t\t\t\treturn: \tret \n\t\t\t\t\tspec: \t\tspecs \n\t\t\t\t\ttype: \t\ttype? get fn\n\t\t\t\t\targ-num: \tlength? args\n\t\t\t\t\targ-names: \tcopy keys-of args\n\t\t\t\t\targ-types: \tcopy values-of args\n\t\t\t\t\tref-names: \tcopy keys-of refinements\n\t\t\t\t\tref-types: \tcopy values-of refinements\n\t\t\t\t\tref-num:\tlength? refinements\n\t\t\t\t]\n\t\t\t]\n\t\t])\n\t]\n\tout\n]\n" - } - ], - "id": "eQ3UEMOz", - "createdAt": 1659510281695, - "updatedAt": 1659510296598 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Ruby", - "content": [ - { - "label": "Fragment 1", - "language": "ruby", - "value": "#!/usr/bin/ruby\n\n# Program to find the factorial of a number\ndef fact(n)\n if n == 0\n 1\n else\n n * fact(n-1)\n end\nend\n\nputs fact(ARGV[0].to_i)\n\nclass Range\n def to_json(*a)\n {\n 'json_class' => self.class.name, # = 'Range'\n 'data' => [ first, last, exclude_end? ]\n }.to_json(*a)\n end\nend\n\n{:id => ?\", :key => \"value\"}\n\n\n herDocs = [<<'FOO', <<BAR, <<-BAZ, <<-`EXEC`] #comment\n FOO #{literal}\nFOO\n BAR #{fact(10)}\nBAR\n BAZ indented\n BAZ\n echo hi\n EXEC\nputs herDocs" - } - ], - "id": "ovPJEcpx", - "createdAt": 1659510297196, - "updatedAt": 1659512691705 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Rust", - "content": [ - { - "label": "Fragment 1", - "language": "rust", - "value": "use core::rand::RngUtil;\n\nfn main() {\n for [\"Alice\", \"Bob\", \"Carol\"].each |&name| {\n do spawn {\n let v = rand::Rng().shuffle([1, 2, 3]);\n for v.each |&num| {\n print(fmt!(\"%s says: '%d'\\n\", name, num + 1))\n }\n }\n }\n}\n\nfn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {\n let mut accumulator = ~[];\n for vec::each(vector) |element| {\n accumulator.push(function(element));\n }\n return accumulator;\n}\n" - } - ], - "id": "bfauQKAK", - "createdAt": 1659512758939, - "updatedAt": 1659512774417 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SASS", - "content": [ - { - "label": "Fragment 1", - "language": "sass", - "value": "nav\n ul\n margin: 0\n padding: 0\n list-style: none\n\n li\n display: inline-block\n\n a\n display: block\n padding: 6px 12px\n text-decoration: none\n" - } - ], - "id": "moAo6UG2", - "createdAt": 1659512774797, - "updatedAt": 1659512900319 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SCAD", - "content": [ - { - "label": "Fragment 1", - "language": "scad", - "value": "module Element(xpos, ypos, zpos){\n\ttranslate([xpos,ypos,zpos]){\n\t\tunion(){\n\t\t\tcube([10,10,4],true);\n\t\t\tcylinder(10,15,5);\n\t\t\ttranslate([0,0,10])sphere(5);\n\t\t}\n\t}\n}\n\nunion(){\n\tfor(i=[0:30]){\n\t\t# Element(0,0,0);\n\t\tElement(15*i,0,0);\n\t}\n}\n\nfor (i = [3, 5, 7, 11]){\n\trotate([i*10,0,0])scale([1,1,i])cube(10);\n}" - } - ], - "id": "Xpqsj2Zl", - "createdAt": 1659512903575, - "updatedAt": 1659513054282 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Scala", - "content": [ - { - "label": "Fragment 1", - "language": "scala", - "value": "// http://www.scala-lang.org/node/54\n\npackage examples.actors\n\nimport scala.actors.Actor\nimport scala.actors.Actor._\n\nabstract class PingMessage\ncase object Start extends PingMessage\ncase object SendPing extends PingMessage\ncase object Pong extends PingMessage\n\nabstract class PongMessage\ncase object Ping extends PongMessage\ncase object Stop extends PongMessage\n\nobject pingpong extends Application {\n val pong = new Pong\n val ping = new Ping(100000, pong)\n ping.start\n pong.start\n ping ! Start\n}\n\nclass Ping(count: Int, pong: Actor) extends Actor {\n def act() {\n println(\"Ping: Initializing with count \"+count+\": \"+pong)\n var pingsLeft = count\n loop {\n react {\n case Start =>\n println(\"Ping: starting.\")\n pong ! Ping\n pingsLeft = pingsLeft - 1\n case SendPing =>\n pong ! Ping\n pingsLeft = pingsLeft - 1\n case Pong =>\n if (pingsLeft % 1000 == 0)\n println(\"Ping: pong from: \"+sender)\n if (pingsLeft > 0)\n self ! SendPing\n else {\n println(\"Ping: Stop.\")\n pong ! Stop\n exit('stop)\n }\n }\n }\n }\n}\n\nclass Pong extends Actor {\n def act() {\n var pongCount = 0\n loop {\n react {\n case Ping =>\n if (pongCount % 1000 == 0)\n println(\"Pong: ping \"+pongCount+\" from \"+sender)\n sender ! Pong\n pongCount = pongCount + 1\n case Stop =>\n println(\"Pong: Stop.\")\n exit('stop)\n }\n }\n }\n}" - } - ], - "id": "_fNo6obA", - "createdAt": 1659513088102, - "updatedAt": 1659513102547 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Scheme", - "content": [ - { - "label": "Fragment 1", - "language": "scheme", - "value": "(define (prompt-for-cd)\n \"Prompts\n for CD\"\n (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n (prompt-read \"Artist\")\n (or (parse-integer (prompt-read \"Rating\") #:junk-allowed #t) 0)\n (if x (format #t \"yes\") (format #f \"no\") ;and here comment\n ) \n ;; second line comment\n '(+ 1 2)\n (position-if-not char-set:whitespace line #:start beg))\n (quote (privet 1 2 3))\n '(hello world)\n (* 5 7)\n (1 2 34 5)\n (#:use \"aaaa\")\n (let ((x 10) (y 20))\n (display (+ x y))\n ) \n\n \"asdad\\0eqweqe\"\n" - } - ], - "id": "mQs07uv9", - "createdAt": 1659513103082, - "updatedAt": 1659513120052 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "sCrypt", - "content": [ - { - "label": "Fragment 1", - "language": "scrypt", - "value": "// https://github.com/sCrypt-Inc/boilerplate/blob/master/contracts/ackermann.scrypt\n\ncontract Ackermann {\n int a; // a = 2\n int b; // b = 1\n\n static const int LOOPCOUNT = 14;\n\n function ackermann(int m, int n) : int {\n bytes stk = num2bin(m, 1);\n\n // run this function off chain to get the loop count and set it here\n // e.g., (2, 1) requires 14 loops, (3, 5) 42438\n loop (LOOPCOUNT) {\n if (len(stk) > 0) {\n bytes top = stk[0 : 1];\n m = unpack(top);\n\n // pop\n stk = stk[1 : len(stk)];\n\n if (m == 0) {\n n = n + m + 1;\n }\n else if (n == 0) {\n n++;\n m--;\n // push\n stk = num2bin(m, 1) + stk;\n }\n else {\n stk = num2bin(m - 1, 1) + stk;\n stk = num2bin(m, 1) + stk;\n n--;\n }\n }\n }\n\n return n;\n }\n\n // y = 5\n public function unlock(int y) {\n require(y == this.ackermann(this.a, this.b));\n }\n}" - } - ], - "id": "y8lXMyA1", - "createdAt": 1659513122058, - "updatedAt": 1659513143136 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SCSS", - "content": [ - { - "label": "Fragment 1", - "language": "scss", - "value": "nav {\n ul {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n li { display: inline-block; }\n\n a {\n display: block;\n padding: 6px 12px;\n text-decoration: none;\n }\n}" - } - ], - "id": "V-785e5S", - "createdAt": 1659513144141, - "updatedAt": 1659513158303 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SJS", - "content": [ - { - "label": "Fragment 1", - "language": "sjs", - "value": "var { each, map } = require('sjs:sequence');\nvar { get } = require('sjs:http');\n\nfunction foo(items, nada) {\n var component = { name: \"Ace\", role: \"Editor\" };\n console.log(\"\n Welcome, #{component.name}\n \".trim());\n\n logging.debug(`Component added: $String(component) (${component})`);\n\n console.log(`\n Welcome, {${function() {\n return { x: 1, y: \"why?}\"};\n }()}\n `.trim());\n\n waitfor {\n items .. each.par { |item|\n get(item);\n }\n } and {\n var lengths = items .. map(i -> i.length);\n } or {\n hold(1500);\n throw new Error(\"timed out\");\n }\n}\t// Real Tab.\n" - } - ], - "id": "fe94fkP7", - "createdAt": 1659513160004, - "updatedAt": 1659513172534 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Slim", - "content": [ - { - "label": "Fragment 1", - "language": "slim", - "value": "doctype html\nhtml\n head\n title Slim Examples\n meta name=\"keywords\" content=\"template language\"\n meta name=\"author\" content=author\n link rel=\"icon\" type=\"image/png\" href=file_path(\"favicon.png\")\n javascript:\n alert('Slim supports embedded javascript!')\n\n body\n h1 Markup examples\n\n #content\n p This example shows you how a basic Slim file looks.\n\n == yield\n\n - if items.any?\n table#items\n - for item in items\n tr\n td.name = item.name\n td.price = item.price\n - else\n p No items found. Please add some inventory.\n Thank you!\n\n div id=\"footer\"\n == render 'footer'\n | Copyright © #{@year} #{@author}\n indenting test\n\n - @page_current = true" - } - ], - "id": "G6BAdMnJ", - "createdAt": 1659513173551, - "updatedAt": 1659513317040 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Solidity", - "content": [ - { - "label": "Fragment 1", - "language": "solidity", - "value": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.13;\n\ncontract DataLocations {\n uint[] public arr;\n mapping(uint => address) map;\n struct MyStruct {\n uint foo;\n }\n mapping(uint => MyStruct) myStructs;\n\n function f() public {\n // call _f with state variables\n _f(arr, map, myStructs[1]);\n\n // get a struct from a mapping\n MyStruct storage myStruct = myStructs[1];\n // create a struct in memory\n MyStruct memory myMemStruct = MyStruct(0);\n }\n\n function _f(\n uint[] storage _arr,\n mapping(uint => address) storage _map,\n MyStruct storage _myStruct\n ) internal {\n // do something with storage variables\n }\n\n // You can return memory variables\n function g(uint[] memory _arr) public returns (uint[] memory) {\n // do something with memory array\n }\n\n function h(uint[] calldata _arr) external {\n // do something with calldata array\n }\n}" - } - ], - "id": "o9TpAqny", - "createdAt": 1659513318920, - "updatedAt": 1659513371511 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Smarty", - "content": [ - { - "label": "Fragment 1", - "language": "smarty", - "value": "{foreach $foo as $bar}\n <a href=\"{$bar.zig}\">{$bar.zag}</a>\n <a href=\"{$bar.zig2}\">{$bar.zag2}</a>\n <a href=\"{$bar.zig3}\">{$bar.zag3}</a>\n{foreachelse}\n There were no rows found.\n{/foreach}" - } - ], - "id": "8cQOZp8n", - "createdAt": 1659513382933, - "updatedAt": 1659513403528 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Smithy", - "content": [ - { - "label": "Fragment 1", - "language": "smithy", - "value": "namespace example.weather\n\n/// Provides weather forecasts.\n@paginated(inputToken: \"nextToken\", outputToken: \"nextToken\",\n pageSize: \"pageSize\")\nservice Weather {\n version: \"2006-03-01\",\n resources: [City],\n operations: [GetCurrentTime]\n}\n\nresource City {\n identifiers: { cityId: CityId },\n read: GetCity,\n list: ListCities,\n resources: [Forecast],\n}\n\nresource Forecast {\n identifiers: { cityId: CityId },\n read: GetForecast,\n}\n\n// \"pattern\" is a trait.\n@pattern(\"^[A-Za-z0-9 ]+$\")\nstring CityId\n\n@readonly\noperation GetCity {\n input: GetCityInput,\n output: GetCityOutput,\n errors: [NoSuchResource]\n}\n\nstructure GetCityInput {\n // \"cityId\" provides the identifier for the resource and\n // has to be marked as required.\n @required\n cityId: CityId\n}\n\nstructure GetCityOutput {\n // \"required\" is used on output to indicate if the service\n // will always provide a value for the member.\n @required\n name: String,\n\n @required\n coordinates: CityCoordinates,\n}\n\n// This structure is nested within GetCityOutput.\nstructure CityCoordinates {\n @required\n latitude: Float,\n\n @required\n longitude: Float,\n}\n\n// \"error\" is a trait that is used to specialize\n// a structure as an error.\n@error(\"client\")\nstructure NoSuchResource {\n @required\n resourceType: String\n}\n\n// The paginated trait indicates that the operation may\n// return truncated results.\n@readonly\n@paginated(items: \"items\")\noperation ListCities {\n input: ListCitiesInput,\n output: ListCitiesOutput\n}\n\nstructure ListCitiesInput {\n nextToken: String,\n pageSize: Integer\n}\n\nstructure ListCitiesOutput {\n nextToken: String,\n\n @required\n items: CitySummaries,\n}\n\n// CitySummaries is a list of CitySummary structures.\nlist CitySummaries {\n member: CitySummary\n}\n\n// CitySummary contains a reference to a City.\n@references([{resource: City}])\nstructure CitySummary {\n @required\n cityId: CityId,\n\n @required\n name: String,\n}\n\n@readonly\noperation GetCurrentTime {\n output: GetCurrentTimeOutput\n}\n\nstructure GetCurrentTimeOutput {\n @required\n time: Timestamp\n}\n\n@readonly\noperation GetForecast {\n input: GetForecastInput,\n output: GetForecastOutput\n}\n\n// \"cityId\" provides the only identifier for the resource since\n// a Forecast doesn't have its own.\nstructure GetForecastInput {\n @required\n cityId: CityId,\n}\n\nstructure GetForecastOutput {\n chanceOfRain: Float\n}" - } - ], - "id": "qHcIur3E", - "createdAt": 1659513520728, - "updatedAt": 1659513537749 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Soy Template", - "content": [ - { - "label": "Fragment 1", - "language": "soy_template", - "value": "/**\n * Greets a person using \"Hello\" by default.\n * @param name The name of the person.\n * @param? greetingWord Optional greeting word to use instead of \"Hello\".\n */\n{template .helloName #eee}\n {if not $greetingWord}\n Hello {$name}!\n {else}\n {$greetingWord} {$name}!\n {/if}\n{/template}\n\n/**\n * Greets a person and optionally a list of other people.\n * @param name The name of the person.\n * @param additionalNames The additional names to greet. May be an empty list.\n */\n{template .helloNames}\n // Greet the person.\n {call .helloName data=\"all\" /}<br>\n // Greet the additional people.\n {foreach $additionalName in $additionalNames}\n {call .helloName}\n {param name: $additionalName /}\n {/call}\n {if not isLast($additionalName)}\n <br> // break after every line except the last\n {/if}\n {ifempty}\n No additional people to greet.\n {/foreach}\n{/template}\n\n\n{/foreach}\n{if length($items) > 5}\n{msg desc=\"Says hello to the user.\"}\n\n\n{namespace ns autoescape=\"contextual\"}\n\n/** Example. */\n{template .example}\n foo is {$ij.foo}\n{/template}" - } - ], - "id": "GNzBMeEl", - "createdAt": 1659513539732, - "updatedAt": 1659513555942 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SQL", - "content": [ - { - "label": "Fragment 1", - "language": "sql", - "value": "SELECT city, COUNT(id) AS users_count\nFROM users\nWHERE group_name = 'salesman'\nAND created > '2011-05-21'\nGROUP BY 1\nORDER BY 2 DESC" - } - ], - "id": "StsXGnhD", - "createdAt": 1659513557682, - "updatedAt": 1659513666978 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SQLServer", - "content": [ - { - "label": "Fragment 1", - "language": "sqlserver", - "value": "-- =============================================\n-- Author:\t\tMorgan Yarbrough\n-- Create date: 4/27/2015\n-- Description:\tTest procedure that shows off language features.\n-- \t\t\t\tIncludes non-standard folding with region comments using either\n-- \t\t\t\tline comments or block comments (both are demonstrated below).\n--\t\t\t\tThis mode imitates SSMS and it designed to be used with SQL Server theme.\n-- =============================================\nCREATE PROCEDURE dbo.TestProcedure\n\t\n--#region parameters\n\t@vint INT = 1\n\t,@vdate DATE = NULL\n\t,@vdatetime DATETIME = DATEADD(dd, 1, GETDATE())\n\t,@vvarchar VARCHAR(MAX) = ''\n--#endregion\n\nAS\nBEGIN\n\n\t/*#region set statements */\n\tSET NOCOUNT ON;\n\tSET XACT_ABORT ON;\n\tSET QUOTED_IDENTIFIER ON;\n\t/*#endregion*/\n\t\n\t/**\n\t * These comments will produce a fold widget\n\t */\n\t\n\t-- folding demonstration\n\tSET @vint = CASE\n\t\t\t\t\tWHEN @vdate IS NULL\n\t\t\t\t\t\tTHEN 1\n\t\t\t\t\tELSE 2\n\t\t\t\tEND\n\t\n\t-- another folding demonstration\n\tIF @vint = 1 \n\tBEGIN\n\t\tSET @vvarchar = 'one'\n\t\tSET @vint = DATEDIFF(dd, @vdate, @vdatetime)\n\tEND\n\t\n\t-- this mode handles strings properly\n\tDECLARE @sql NVARCHAR(4000) = N'SELECT TOP(1) OrderID \n\t\t\t\t\t\t\t\t\tFROM Orders\n\t\t\t\t\t\t\t\t\tWHERE @OrderDate > GETDATE()'\n\t\t\t\t\t\t\t\t\n\t-- this mode is aware of built in stored procedures \n\tEXECUTE sp_executesql @sql\n\t\n\t-- demonstrating some syntax highlighting\n\tSELECT Orders.OrderID\n\t\t,Customers.CompanyName\n\t\t,DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS FirstDayOfYear\n\tFROM Orders\n\tINNER JOIN Customers\n\t\tON Orders.CustomerID = Customers.CustomerID\n\tWHERE CompanyName NOT LIKE '%something'\n\t\tOR CompanyName IS NULL\n\t\tOR CompanyName IN ('bla', 'nothing')\n\t\t\n\t-- this mode includes snippets\n\t-- place your cusor at the end of the line below and trigger auto complete (Ctrl+Space)\n\tcreatepr\n\t\n\t-- SQL Server allows using keywords as object names (not recommended) as long as they are wrapped in brackets\n\tDATABASE -- keyword\n\t[DATABASE] -- not a keyword\n\t\nEND\n" - } - ], - "id": "3KKphPti", - "createdAt": 1659513678316, - "updatedAt": 1659513691143 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Stylus", - "content": [ - { - "label": "Fragment 1", - "language": "stylus", - "value": "// I'm a comment!\n\n/*\n * Adds the given numbers together.\n */\n\n\n/*!\n * Adds the given numbers together.\n */\n\n\nasdasdasdad(df, ad=23)\n\nadd(a, b = a)\n a + b\ngreen(#0c0)\n add(10, 5)\n // => 15\n\n add(10)\n add(a, b)\n\n &asdasd\n\n (arguments)\n\n @sdfsdf\n.signatures\n background-color #e0e8e0\n border 1px solid grayLighter\n box-shadow 0 0 3px grayLightest\n border-radius 3px\n padding 3px 5px\n \"adsads\"\n margin-left 0\n list-style none\n.signature\n list-style none\n display: inline\n margin-left 0\n > li\n display inline\nis not\n.signature-values\n list-style none\n display inline\n margin-left 0\n &:before\n content '→'\n margin 0 5px\n > li\n !important\n\n unless" - } - ], - "id": "kr0fAxYi", - "createdAt": 1659513699414, - "updatedAt": 1659513717161 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SVG", - "content": [ - { - "label": "Fragment 1", - "language": "svg", - "value": "<svg\n width=\"800\" height=\"600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onload=\"StartAnimation(evt)\">\n\n <title>Test Tube Progress Bar</title>\n <desc>Created for the Web Directions SVG competition</desc>\n\n <script type=\"text/ecmascript\"><![CDATA[\n var timevalue = 0;\n var timer_increment = 1;\n var max_time = 100;\n var hickory;\n var dickory;\n var dock;\n var i;\n\n function StartAnimation(evt) {\n hickory = evt.target.ownerDocument.getElementById(\"hickory\");\n dickory = evt.target.ownerDocument.getElementById(\"dickory\");\n dock = evt.target.ownerDocument.getElementById(\"dock\");\n\n ShowAndGrowElement();\n }\n function ShowAndGrowElement() {\n timevalue = timevalue + timer_increment;\n if (timevalue > max_time)\n return;\n // Scale the text string gradually until it is 20 times larger\n scalefactor = (timevalue * 650) / max_time;\n\n if (timevalue < 30) {\n hickory.setAttribute(\"display\", \"\");\n hickory.setAttribute(\"transform\", \"translate(\" + (600+scalefactor*3*-1 ) + \", -144 )\");\n }\n\n if (timevalue > 30 && timevalue < 66) {\n dickory.setAttribute(\"display\", \"\");\n dickory.setAttribute(\"transform\", \"translate(\" + (-795+scalefactor*2) + \", 0 )\");\n }\n if (timevalue > 66) {\n dock.setAttribute(\"display\", \"\");\n dock.setAttribute(\"transform\", \"translate(\" + (1450+scalefactor*2*-1) + \", 144 )\");\n }\n\n // Call ShowAndGrowElement again <timer_increment> milliseconds later.\n setTimeout(\"ShowAndGrowElement()\", timer_increment)\n }\n window.ShowAndGrowElement = ShowAndGrowElement\n ]]></script>\n\n <rect\n fill=\"#2e3436\"\n fill-rule=\"nonzero\"\n stroke-width=\"3\"\n y=\"0\"\n x=\"0\"\n height=\"600\"\n width=\"800\"\n id=\"rect3590\"/>\n\n <text\n style=\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\"\n x=\"50\"\n y=\"350\"\n id=\"hickory\"\n display=\"none\">\n Hickory,</text>\n <text\n style=\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\"\n x=\"50\"\n y=\"350\"\n id=\"dickory\"\n display=\"none\">\n dickory,</text>\n <text\n style=\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\"\n x=\"50\"\n y=\"350\"\n id=\"dock\"\n display=\"none\">\n dock!</text>\n</svg>" - } - ], - "id": "pKDZ8-6w", - "createdAt": 1659513718112, - "updatedAt": 1659513731102 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Swit", - "content": [ - { - "label": "Fragment 1", - "language": "swift", - "value": "import UIKit\n \nclass DetailsViewController: UIViewController {\n var album: Album?\n @IBOutlet weak var albumCover: UIImageView!\n \n required init(coder aDecoder: NSCoder) {\n super.init(coder: aDecoder)\n }\n \n override func viewDidLoad() {\n super.viewDidLoad()\n mLabel.text = self.album?.title && \"Juhu \\( \"kinners\" )! \"\n albumCover.image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.album!.largeImageURL)!)!)\n }\n}" - } - ], - "id": "f06uNsdC", - "createdAt": 1659513731945, - "updatedAt": 1659513744330 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Tcl", - "content": [ - { - "label": "Fragment 1", - "language": "tcl", - "value": "\nproc dijkstra {graph origin} {\n # Initialize\n dict for {vertex distmap} $graph {\n\tdict set dist $vertex Inf\n\tdict set path $vertex {}\n }\n dict set dist $origin 0\n dict set path $origin [list $origin]\n \n while {[dict size $graph]} {\n\t# Find unhandled node with least weight\n\tset d Inf\n\tdict for {uu -} $graph {\n\t if {$d > [set dd [dict get $dist $uu]]} {\n\t\tset u $uu\n\t\tset d $dd\n\t }\n\t}\n \n\t# No such node; graph must be disconnected\n\tif {$d == Inf} break\n \n\t# Update the weights for nodes\\\n\t lead to by the node we've picked\n\tdict for {v dd} [dict get $graph $u] {\n\t if {[dict exists $graph $v]} {\n\t\tset alt [expr {$d + $dd}]\n\t\tif {$alt < [dict get $dist $v]} {\n\t\t dict set dist $v $alt\n\t\t dict set path $v [list {*}[dict get $path $u] $v]\n\t\t}\n\t }\n\t}\n \n\t# Remove chosen node from graph still to be handled\n\tdict unset graph $u\n }\n return [list $dist $path]\n}" - } - ], - "id": "xDPl3nEd", - "createdAt": 1659513745309, - "updatedAt": 1659513756760 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Terraform", - "content": [ - { - "label": "Fragment 1", - "language": "terraform", - "value": "export TF_LOG=TRACE\n\n# An AMI\nvariable \"ami\" {\n description = \"the AMI to use\"\n}\n\n/* A multi\n line comment. */\nresource \"aws_instance\" \"web\" {\n ami = \"${var.ami}\"\n count = 2\n source_dest_check = false\n\n connection {\n user = \"root\"\n }\n}\n\nresource \"aws_instance\" \"web\" {\n subnet = \"${var.env == \"production\" ? var.prod_subnet : var.dev_subnet}\"\n}\n\nvariable \"count\" {\n default = 2\n}\n\nvariable \"hostnames\" {\n default = {\n \"0\" = \"example1.org\"\n \"1\" = \"example2.net\"\n }\n}\n\ndata \"template_file\" \"web_init\" {\n # Render the template once for each instance\n count = \"${length(var.hostnames)}\"\n template = \"${file(\"templates/web_init.tpl\")}\"\n vars {\n # count.index tells us the index of the instance we are rendering\n hostname = \"${var.hostnames[count.index]}\"\n }\n}\n\nresource \"aws_instance\" \"web\" {\n # Create one instance for each hostname\n count = \"${length(var.hostnames)}\"\n\n # Pass each instance its corresponding template_file\n user_data = \"${data.template_file.web_init.*.rendered[count.index]}\"\n}\n\nvariable \"count\" {\n default = 2\n}\n\n# Define the common tags for all resources\nlocals {\n common_tags = {\n Component = \"awesome-app\"\n Environment = \"production\"\n }\n}\n\n# Create a resource that blends the common tags with instance-specific tags.\nresource \"aws_instance\" \"server\" {\n ami = \"ami-123456\"\n instance_type = \"t2.micro\"\n\n tags = \"${merge(\n local.common_tags,\n map(\n \"Name\", \"awesome-app-server\",\n \"Role\", \"server\"\n )\n )}\"\n}\n\n$ terraform apply -var foo=bar -var foo=baz\n$ terraform apply -var 'foo={quux=\"bar\"}' -var 'foo={bar=\"baz\"}'\n\n$ terraform apply -var-file=foo.tfvars -var-file=bar.tfvars\n$ TF_VAR_somemap='{foo = \"bar\", baz = \"qux\"}' terraform plan\n\nresource \"aws_instance\" \"web\" {\n # ...\n\n count = \"${var.count}\"\n\n # Tag the instance with a counter starting at 1, ie. web-001\n tags {\n Name = \"${format(\"web-%03d\", count.index + 1)}\"\n }\n}" - } - ], - "id": "fBdP-3EZ", - "createdAt": 1659513757099, - "updatedAt": 1659513771760 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Tex", - "content": [ - { - "label": "Fragment 1", - "language": "tex", - "value": "The quadratic formula is $$-b \\pm \\sqrt{b^2 - 4ac} \\over 2a$$\n\\bye\n\n\\makeatletter\n \\newcommand{\\be}{%\n \\begingroup\n % \\setlength{\\arraycolsep}{2pt}\n \\eqnarray%\n \\@ifstar{\\nonumber}{}%\n }\n \\newcommand{\\ee}{\\endeqnarray\\endgroup}\n \\makeatother\n\n \\begin{equation}\n x=\\left\\{ \\begin{array}{cl}\n 0 & \\textrm{if }A=\\ldots\\\\\n 1 & \\textrm{if }B=\\ldots\\\\\n x & \\textrm{this runs with as much text as you like, but without an raggeright text\n.}\\end{array}\\right.\n \\end{equation}" - } - ], - "id": "9HHsgIb1", - "createdAt": 1659513772113, - "updatedAt": 1659513782241 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Textile", - "content": [ - { - "label": "Fragment 1", - "language": "textile", - "value": "h1. Textile document\n\nh2. Heading Two\n\nh3. A two-line\n header\n\nh2. Another two-line\nheader\n\nParagraph:\none, two,\nthee lines!\n\np(classone two three). This is a paragraph with classes\n\np(#id). (one with an id)\n\np(one two three#my_id). ..classes + id\n\n* Unordered list\n** sublist\n* back again!\n** sublist again..\n\n# ordered\n\nbg. Blockquote!\n This is a two-list blockquote..!" - } - ], - "id": "rnsJdqWh", - "createdAt": 1659513783516, - "updatedAt": 1659513815754 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "TOML", - "content": [ - { - "label": "Fragment 1", - "language": "toml", - "value": "# This is a TOML document. Boom.\n\ntitle = \"TOML Example\"\n\n[owner]\nname = \"Tom Preston-Werner\"\norganization = \"GitHub\"\nbio = \"GitHub Cofounder & CEO\\nLikes tater tots and beer.\"\ndob = 1979-05-27T07:32:00Z # First class dates? Why not?\n\n[database]\nserver = \"192.168.1.1\"\nports = [ 8001, 8001, 8002 ]\nconnection_max = 5000\nenabled = true\n\n[servers]\n\n # You can indent as you please. Tabs or spaces. TOML don't care.\n [servers.alpha]\n ip = \"10.0.0.1\"\n dc = \"eqdc10\"\n\n [servers.beta]\n ip = \"10.0.0.2\"\n dc = \"eqdc10\"\n\n[clients]\ndata = [ [\"gamma\", \"delta\"], [1, 2] ] # just an update to make sure parsers support it" - } - ], - "id": "BMoUKb64", - "createdAt": 1659513816206, - "updatedAt": 1659513833836 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "TSX", - "content": [ - { - "label": "Fragment 1", - "language": "tsx", - "value": "import * as React from \"react\";\nlet Logo =\"https://logrocket-assets.io/static/home-hero-c97849b227a3d3015730e3371a76a7f0.svg\";\n\nexport default class FirstComponent extends React.Component <{}> {\n render() {\n return (\n <div>\n <h3>A Simple React Component Example with Typescript</h3>\n <div>\n <img height=\"250\" src={Logo} /> \n </div>\n <p>This component shows the Logrocket logo.</p>\n <p>For more info on Logrocket, please visit https://logrocket.com </p>\n </div>\n );\n }\n}" - } - ], - "id": "8XU5NKRw", - "createdAt": 1659513834187, - "updatedAt": 1659513891006 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Twig", - "content": [ - { - "label": "Fragment 1", - "language": "twig", - "value": "<!DOCTYPE html>\n<html>\n <head>\n <title>My Webpage</title>\n </head>\n <body>\n <ul id=\"navigation\">\n {% for item in navigation %}\n <li><a href=\"{{ item.href|escape }}\">{{ item.caption }}</a></li>\n {% endfor %}\n </ul>\n\n {% if 1 not in [1, 2, 3] %}\n\n {# is equivalent to #}\n {% if not (1 in [1, 2, 3]) %}\n\n {% autoescape true %}\n {{ var }}\n {{ var|raw }} {# var won't be escaped #}\n {{ var|escape }} {# var won't be doubled-escaped #}\n {% endautoescape %}\n\n {{ include('twig.html', sandboxed = true) }}\n\n {{\"string #{with} \\\" escapes\" 'another#one' }}\n <h1>My Webpage</h1>\n {{ a_variable }}\n </body>\n</html>" - } - ], - "id": "-1yJwNhA", - "createdAt": 1659513895880, - "updatedAt": 1659513909414 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "TypeScript", - "content": [ - { - "label": "Fragment 1", - "language": "typescript", - "value": "// Mapped types are a way to create new types based\n// on another type. Effectively a transformational type.\n\n// Common cases for using a mapped type is dealing with\n// partial subsets of an existing type. For example\n// an API may return an Artist:\n\ninterface Artist {\n id: number;\n name: string;\n bio: string;\n}\n\n// However, if you were to send an update to the API which\n// only changes a subset of the Artist then you would\n// typically have to create an additional type:\n\ninterface ArtistForEdit {\n id: number;\n name?: string;\n bio?: string;\n}\n\n// It's very likely that this would get out of sync with\n// the Artist above. Mapped types let you create a change\n// in an existing type.\n\ntype MyPartialType<Type> = {\n // For every existing property inside the type of Type\n // convert it to be a ?: version\n [Property in keyof Type]?: Type[Property];\n};\n\n// Now we can use the mapped type instead to create\n// our edit interface:\ntype MappedArtistForEdit = MyPartialType<Artist>;\n\n// This is close to perfect, but it does allow id to be null\n// which should never happen. So, let's make one quick\n// improvement by using an intersection type (see:\n// example:union-and-intersection-types )\n\ntype MyPartialTypeForEdit<Type> = {\n [Property in keyof Type]?: Type[Property];\n} & { id: number };\n\n// This takes the partial result of the mapped type, and\n// merges it with an object which has id: number set.\n// Effectively forcing id to be in the type.\n\ntype CorrectMappedArtistForEdit = MyPartialTypeForEdit<Artist>;\n\n// This is a pretty simple example of how mapped types\n// work, but covers most of the basics. If you'd like to\n// dive in with more depth, check out the handbook:\n//\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\n" - } - ], - "id": "JIgrOSNq", - "createdAt": 1659513909828, - "updatedAt": 1659514092152 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Vala", - "content": [ - { - "label": "Fragment 1", - "language": "vala", - "value": "using Gtk;\n \nint main (string[] args) {\n Gtk.init (ref args);\n var foo = new MyFoo<string[](), MyBar<string, int>>();\n\n var window = new Window();\n window.title = \"Hello, World!\";\n window.border_width = 10;\n window.window_position = WindowPosition.CENTER;\n window.set_default_size(350, 70);\n window.destroy.connect(Gtk.main_quit);\n \n var label = new Label(\"Hello, World!\");\n \n window.add(label);\n window.show_all();\n \n Gtk.main();\n return 0;\n}" - } - ], - "id": "oS2hBbE3", - "createdAt": 1659514096104, - "updatedAt": 1659514106267 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Velocity", - "content": [ - { - "label": "Fragment 1", - "language": "velocity", - "value": "#*\n This is a sample comment block that\n spans multiple lines.\n*#\n\n#macro ( outputItem $item )\n <li>${item}</li>\n#end\n\n## Define the items to iterate\n#set ( $items = [1, 2, 3, 4] )\n\n<ul>\n ## Iterate over the items and output the evens.\n #foreach ( $item in $items )\n #if ( $_MathTool.mod($item, 2) == 0 )\n #outputItem ($item)\n #end\n #end\n</ul>\n\n<script>\n /*\n A sample function to decomstrate\n JavaScript highlighting and folding.\n */\n function foo(items, nada) {\n for (var i=0; i<items.length; i++) {\n alert(items[i] + \"juhu\\n\");\n }\n }\n</script>\n\n<style>\n /*\n A sample style to decomstrate\n CSS highlighting and folding.\n */\n .class {\n font-family: Monaco, \"Courier New\", monospace;\n font-size: 12px;\n cursor: text;\n }\n</style>" - } - ], - "id": "oxLb6eps", - "createdAt": 1659514106610, - "updatedAt": 1659514138518 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Verilog", - "content": [ - { - "label": "Fragment 1", - "language": "verilog", - "value": "always @(negedge reset or posedge clk) begin\n if (reset == 0) begin\n d_out <= 16'h0000;\n d_out_mem[resetcount] <= d_out;\n laststoredvalue <= d_out;\n end else begin\n d_out <= d_out + 1'b1; \n end\nend\n\nalways @(bufreadaddr)\n bufreadval = d_out_mem[bufreadaddr];" - } - ], - "id": "H1d41Wrk", - "createdAt": 1659514148400, - "updatedAt": 1659514158641 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "VHDL", - "content": [ - { - "label": "Fragment 1", - "language": "vhdl", - "value": "library IEEE;\nuse IEEE.std_logic_1164.all;\nuse IEEE.numeric_std.all;\n\nentity COUNT16 is\n\n port (\n cOut :out std_logic_vector(15 downto 0); -- counter output\n clkEn :in std_logic; -- count enable\n clk :in std_logic; -- clock input\n rst :in std_logic -- reset input\n );\n \nend entity;\n\narchitecture count_rtl of COUNT16 is\n signal count : unsigned (15 downto 0);\n \nbegin\n process (clk, rst) begin\n \n if(rst = '1') then\n count <= (others=>'0');\n elsif(rising_edge(clk)) then\n if(clkEn = '1') then\n count <= count + 1;\n end if;\n end if;\n \n end process;\n cOut <= std_logic_vector(count);\n\nend architecture;\n\n" - } - ], - "id": "BBnSrFMV", - "createdAt": 1659514158718, - "updatedAt": 1659514173605 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Visualforce", - "content": [ - { - "label": "Fragment 1", - "language": "visualforce", - "value": "<apex:stylesheet value=\"{!URLFOR($Resource.BrowserCompatibility, 'css/style.css')}\"/>\n\n<apex:page action=\"{!IF($User.Alias = 'JohnDoe' || $User.Alias = 'JBloggs' || $User.Alias = 'FooBar',\n null,\n urlFor($Action.Account.Delete, $CurrentPage.Parameters.id, [retURL='/001'], true)\n)}\" standardController=\"Account\"></apex:page>\n\n<apex:page action=\"{!IF(OR($User.Alias = 'JohnDoe', $User.Alias = 'JBloggs', $User.Alias = 'FooBar'),\n NULL,\n URLFOR($Action.Account.Delete, $CurrentPage.Parameters.id, [retURL='/001'], TRUE)\n)}\" standardController=\"Account\"></apex:page>\n\n<apex:commandLink action=\"{!URLFOR('/apex/' + $CurrentPage.Name, null, ['id'=id])}\" \n value=\"Full List\" />\n<ideas:listOutputLink stickyAttributes=\"false\">\n \n</ideas:listOutputLink>\n{!IF(AND(Price < 1, Quantity < 1), \"Small\", null)}" - } - ], - "id": "s0_h2w0G", - "createdAt": 1659514175371, - "updatedAt": 1659514193759 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Wollok", - "content": [ - { - "label": "Fragment 1", - "language": "wollok", - "value": "class Actividad {\n\tmethod calcularMejora()\n}\n\nclass EstudiarMateria inherits Actividad {\n\tvar materia\n\tvar puntos = 0\n\t\n\tnew(m, p) {\n\t\tmateria = m\n\t\tpuntos = p\n\t}\n\t\n\toverride method calcularMejora() = puntos\n}\n\nclass EjercitarEnSimulador inherits Actividad {\n\tvar horas = 0\n\tnew(h) { horas = h }\n\toverride method calcularMejora() = 10 * horas\n}\n\nobject pepita {\n\tvar energia = 100\n\tmethod volar(m) {\n\t\tenergia -= m\n\t}\n}" - } - ], - "id": "cF_BcjVm", - "createdAt": 1659514214992, - "updatedAt": 1659514230333 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "XML", - "content": [ - { - "label": "Fragment 1", - "language": "xml", - "value": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<query xmlns:yahoo=\"http://www.yahooapis.com/v1/base.rng\"\n yahoo:count=\"7\" yahoo:created=\"2011-10-11T08:40:23Z\" yahoo:lang=\"en-US\">\n <diagnostics>\n <publiclyCallable>true</publiclyCallable>\n <url execution-start-time=\"0\" execution-stop-time=\"25\" execution-time=\"25\"><![CDATA[http://where.yahooapis.com/v1/continents;start=0;count=10]]></url>\n <user-time>26</user-time>\n <service-time>25</service-time>\n <build-version>21978</build-version>\n </diagnostics> \n <results>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865670\">\n <woeid>24865670</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>Africa</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865675\">\n <woeid>24865675</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>Europe</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865673\">\n <woeid>24865673</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>South America</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/28289421\">\n <woeid>28289421</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>Antarctic</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865671\">\n <woeid>24865671</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>Asia</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865672\">\n <woeid>24865672</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>North America</name>\n </place>\n <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/55949070\">\n <woeid>55949070</woeid>\n <placeTypeName code=\"29\">Continent</placeTypeName>\n <name>Australia</name>\n </place>\n </results>\n</query>" - } - ], - "id": "gDrki2Ji", - "createdAt": 1659514230437, - "updatedAt": 1659514244240 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "XSL", - "content": [ - { - "label": "Fragment 1", - "language": "xsl", - "value": "<?xml version=\"1.0\"?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n\n <xsl:output method=\"text\"/>\n\n <xsl:template match=\"/\">\n Article - <xsl:value-of select=\"/Article/Title\"/>\n Authors: <xsl:apply-templates select=\"/Article/Authors/Author\"/>\n </xsl:template>\n\n <xsl:template match=\"Author\">\n - <xsl:value-of select=\".\" />\n </xsl:template>\n\n</xsl:stylesheet>" - } - ], - "id": "1NY4osXj", - "createdAt": 1659514244604, - "updatedAt": 1659514309251 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "XQuery", - "content": [ - { - "label": "Fragment 1", - "language": "xquery", - "value": "xquery version \"1.0\";\n\nlet $message := \"Hello World!\"\nreturn <results>\n <message>{$message}</message>\n</results>\n" - } - ], - "id": "lcw5xZe9", - "createdAt": 1659514318132, - "updatedAt": 1659514336003 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "YAML", - "content": [ - { - "label": "Fragment 1", - "language": "yaml", - "value": "# This sample document was taken from wikipedia:\n# http://en.wikipedia.org/wiki/YAML#Sample_document\n---\nreceipt: Oz-Ware Purchase Invoice\ndate: 2007-08-06\ncustomer:\n given: Dorothy\n family: Gale\n\nitems:\n - part_no: 'A4786'\n descrip: Water Bucket (Filled)\n price: 1.47\n quantity: 4\n\n - part_no: 'E1628'\n descrip: High Heeled \"Ruby\" Slippers\n size: 8\n price: 100.27\n quantity: 1\n version: 1.2.3.4\n\nbill-to: &id001\n street: |\n 123 Tornado Alley\n Suite 16\n city: East Centerville\n state: KS\n\nship-to: *id001\n\nspecialDelivery: >\n Follow the Yellow Brick\n Road to the Emerald City.\n Pay no attention to the\n man behind the curtain.\n" - } - ], - "id": "0xvqjuAJ", - "createdAt": 1659514336449, - "updatedAt": 1659514359371 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Zeek", - "content": [ - { - "label": "Fragment 1", - "language": "zeek", - "value": "# An example of the Zeek scripting language.\n\n##! A Zeekygen-style summmary comment.\n\n# TODO: just an example of a todo-indicator\n\n@load base/frameworks/notice\n\n@if ( F )\n@endif\n\nmodule Example;\n\nexport {\n\n type SimpleEnum: enum { ONE, TWO, THREE };\n\n redef enum SimpleEnum += {\n\n ## A Zeekygen-style comment.\n FOUR,\n FIVE, ##< A Zeekygen-style comment.\n };\n\n type SimpleRecord: record {\n field1: count;\n field2: bool;\n } &redef;\n\n redef record SimpleRecord += {\n\n field3: string &optional;\n\n field4: string &default=\"blah\";\n };\n\n const init_option: bool = T;\n\n option runtime_option: bool = F;\n\n global test_opaque: opaque of md5;\n\n global test_vector: vector of count;\n\n global myfunction: function(msg: string, c: count &default=0): count;\n\n global myhook: hook(tag: string);\n\n global myevent: event(tag: string);\n}\n\nfunction myfunction(msg: string, c: count): count\n {\n print \"in myfunction\", msg, c;\n return 0;\n }\n\nevent myevent(msg: string) &priority=1\n {\n print \"in myevent\";\n }\n\nhook myhook(msg: string)\n {\n print \"in myevent\";\n }\n\nevent zeek_init()\n {\n local b = T;\n local s = \"\\xff\\xaf\\\"and more after the escaped quote\";\n local p = /foo|bar\\xbe\\/and more after the escaped slash/;\n local c = 10;\n\n local sr = SimpleRecord($field1 = 0, $field2 = T, $field3 = \"hi\");\n\n print sr?$field3, sr$field1;\n\n local myset: set[string] = set(\"one\", \"two\", \"three\");\n\n add myset[\"four\"];\n delete myset[\"one\"];\n\n for ( ms in myset )\n {\n print ms is string, s as string;\n\n print s[1:3];\n\n local tern: count = s == \"two\" ? 2 : 0;\n\n if ( s !in myset )\n print fmt(\"error %4.2f: %s\", 3.14159, \"wtf?\");\n }\n\n switch ( c ) {\n case 1:\n break;\n case 2:\n fallthrough;\n default:\n break;\n }\n\n if ( ! b )\n print \"here\";\n else\n print \"there\";\n\n while ( c != 0 )\n {\n if ( c >= 5 )\n c += 0;\n else if ( c == 8 )\n c -= 0;\n\n c = c / 1;\n c = c / 1;\n c = c - 1;\n }\n\n print |myset|;\n print ~5;\n print 1 & 0xff;\n print 2 ^ 5;\n\n myfunction(\"hello function\");\n hook myhook(\"hell hook\");\n event myevent(\"hello event\");\n schedule 1sec { myevent(\"hello scheduled event\") };\n\n print 0, 7;\n print 0xff, 0xdeadbeef;\n\n print 3.14159;\n print 1234.0;\n print 1234e0;\n print .003E-23;\n print .003E+23;\n\n print 123/udp;\n print 8000/tcp;\n print 13/icmp;\n print 42/unknown;\n\n print google.com;\n print 192.168.50.1;\n print 255.255.255.255;\n print 0.0.0.0;\n\n print 10.0.0.0/16;\n\n print [2001:0db8:85a3:0000:0000:8a2e:0370:7334];\n # test for case insensitivity\n print [2001:0DB8:85A3:0000:0000:8A2E:0370:7334];\n # any case mixture is allowed\n print [2001:0dB8:85a3:0000:0000:8A2E:0370:7334];\n # leading zeroes of a 16-bit group may be omitted\n print [2001:db8:85a3:0:0:8a2e:370:7334];\n # a single occurrence of consecutive groups of zeroes may be replaced by ::\n print [2001:db8:85a3::8a2e:370:7334];\n # all zeroes should work\n print [0:0:0:0:0:0:0:0];\n # all zeroes condensed should work\n print [::];\n # hybrid ipv6-ipv4 address should work\n print [2001:db8:0:0:0:FFFF:192.168.0.5];\n # hybrid ipv6-ipv4 address with zero ommission should work\n print [2001:db8::FFFF:192.168.0.5];\n\n print [2001:0db8:85a3:0000:0000:8a2e:0370:7334]/64;\n\n print 1day, 1days, 1.0day, 1.0days;\n print 1hr, 1hrs, 1.0hr, 1.0hrs;\n print 1min, 1mins, 1.0min, 1.0mins;\n print 1sec, 1secs, 1.0sec, 1.0secs;\n print 1msec, 1msecs, 1.0msec, 1.0msecs;\n print 1usec, 1usecs, 1.0usec, 1.0usecs;\n }\n" - } - ], - "id": "F6QCorpv", - "createdAt": 1659514362723, - "updatedAt": 1659514383840 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Vue", - "content": [ - { - "label": "Fragment 1", - "language": "vue", - "value": "<template>\n <input\n v-model=\"localValue\"\n class=\"input\"\n type=\"text\"\n v-bind=\"$attrs\"\n >\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n modelValue: string | number\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string | number): void\n}\n\nconst emit = defineEmits<Emits>()\n\nconst props = defineProps<Props>()\n\nconst localValue = computed({\n get: () => props.modelValue,\n set: v => {\n emit('update:modelValue', v)\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.input {\n width: 300px;\n height: 32px;\n outline: none;\n border: 1px solid var(--color-border);\n border-radius: 3px;\n padding: 0 var(--spacing-xs);\n background-color: var(--color-input);\n color: var(--color-text);\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n }\n}\n</style>\n" - } - ], - "id": "n2cZYWla", - "createdAt": 1659674577829, - "updatedAt": 1659685133678 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "SAS", - "content": [ - { - "label": "Fragment 1", - "language": "sas", - "value": "*** Some comments;\nproc sort data=preTest;\n by student_ID;\nrun;\nproc sort data=postTest;\n by student_ID;\nrun;\ndata testGroup;\n merge preTest(in=a rename=(score=pre)) \n postTest(in=b rename=(score=post));\n by student_ID;\n if a and b;\n difference=post-pre;\nrun;\nTitle \"Student's T test of difference\"; \nproc means data=testGroup n mean stddev stderr t prt;\n by student_ID;\n var difference;\nrun;" - } - ], - "id": "ZbWrvEHT", - "createdAt": 1659686186866, - "updatedAt": 1659686553849 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "RegExp", - "content": [ - { - "label": "Fragment 1", - "language": "regexp", - "value": "^((?=\\S*?[A-Z])(?=\\S*?[a-z])(?=\\S*?[0-9]).{6,})\\S$" - } - ], - "id": "j0F_-__e", - "createdAt": 1659687264814, - "updatedAt": 1659688177442 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Smalltalk", - "content": [ - { - "label": "Fragment 1", - "language": "smalltalk", - "value": "exampleWithNumber: x\n | y |\n true & false not & (nil isNil) ifFalse: [self halt].\n y := self size + super size.\n #($a #a 'a' 1 1.0)\n do: [ :each |\n Transcript show: (each class name);\n show: ' '].\n ^x < y \"Some comment\"" - } - ], - "id": "cj0IfumH", - "createdAt": 1659688801793, - "updatedAt": 1659688919992 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Kusto KQL", - "content": [ - { - "label": "Fragment 1", - "language": "kusto", - "value": "let Events = MyLogTable | where ... ;\nEvents\n| where Name == \"Start\"\n| project Name, City, SessionId, StartTime=timestamp\n| join (Events\n | where Name == \"Stop\"\n | project StopTime=timestamp, SessionId)\n on SessionId\n| project City, SessionId, StartTime, StopTime, Duration = StopTime - StartTime" - } - ], - "id": "vH7mmfKH", - "createdAt": 1673326490808, - "updatedAt": 1673326641538 - }, - { - "isDeleted": false, - "isFavorites": false, - "folderId": "J7rNZi7X", - "tagsIds": [], - "description": null, - "name": "Bicep", - "content": [ - { - "label": "Fragment 1", - "language": "bicep", - "value": "param rgLocation string = resourceGroup().location\nparam storages array = [\n {\n name: 'contoso'\n skuName: 'Standard_LRS'\n }\n {\n name: 'fabrikam'\n skuName: 'Premium_LRS'\n }\n]\n\nresource createStorages 'Microsoft.Storage/storageAccounts@2021-06-01' = [for storage in storages: {\n name: '${storage.name}obj${uniqueString(resourceGroup().id)}'\n location: rgLocation\n sku: {\n name: storage.skuName\n }\n kind: 'StorageV2'\n}]" - } - ], - "id": "W9p-A0M9", - "createdAt": 1673328306847, - "updatedAt": 1673328471208 - } - ], - "tags": [] -} diff --git a/electron-builder.json b/electron-builder.json new file mode 100644 index 00000000..cfd9633a --- /dev/null +++ b/electron-builder.json @@ -0,0 +1,40 @@ +{ + "appId": "io.masscode.app", + "productName": "massCode", + "directories": { + "output": "dist" + }, + "files": [ + "build/renderer/**/*", + "build/main/**/*", + "!build/**/*.map" + ], + "mac": { + "target": "dmg", + "icon": "build/icons/icon.icns", + "entitlements": "build/entitlements.mac.plist", + "category": "public.app-category.productivity", + "hardenedRuntime": false, + "identity": null + }, + "win": { + "target": ["nsis", "portable"], + "icon": "build/icons/icon.ico" + }, + "linux": { + "target": ["AppImage", "snap"], + "icon": "build/icons/icon.png" + }, + "nsis": { + "oneClick": false, + "perMachine": false, + "allowToChangeInstallationDirectory": true, + "shortcutName": "massCode" + }, + "protocols": [ + { + "name": "massCode", + "schemes": ["masscode"] + } + ] +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..d1b1dfa6 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,13 @@ +const antfu = require('@antfu/eslint-config').default + +module.exports = antfu({ + rules: { + 'vue/max-attributes-per-line': [ + 'error', + { + singleline: 1, + }, + ], + }, + ignores: ['src/renderer/services/api/generated/**/*'], +}) diff --git a/nodemon.json b/nodemon.json new file mode 100644 index 00000000..8282f031 --- /dev/null +++ b/nodemon.json @@ -0,0 +1,6 @@ +{ + "watch": ["src/main"], + "ext": "ts,json", + "exec": "npm run build:main", + "delay": 1000 +} diff --git a/package.json b/package.json index 344340cf..58bac600 100644 --- a/package.json +++ b/package.json @@ -1,146 +1,103 @@ { "name": "masscode", - "productName": "massCode", "version": "3.11.0", "description": "A free and open source code snippets manager for developers", + "author": { + "name": "Anton Reshetov", + "url": "https://github.com/antonreshetov" + }, "license": "AGPL-3.0", - "main": "build/src/main/index.js", + "repository": "https://github.com/massCodeIO/massCode", + "main": "build/main/index.js", + "engines": { + "pnpm": ">=9.0.0" + }, "scripts": { - "dev": "run-p dev:watch dev:vue-devtools", - "dev:watch": "tsc-watch -p tsconfig.electron.json --onFirstSuccess \"npm run dev:server\"", - "dev:server": "node build/scripts/dev-server.js", - "dev:vue-devtools": "vue-devtools", - "build": "npm run ts-check:vue && npm run copy:plist && npm run build:ts && node build/scripts/build.js ", - "build:test": "TEST_BUILD=true TEST_MAC_ARCH=arm64 npm run build", - "build:ts": "tsc -p tsconfig.electron.json", - "ts-check:vue": "vue-tsc --noEmit --skipLibCheck", - "lint": "eslint --ext .js,.ts,.vue . src", - "lint:fix": "eslint --ext .js,.ts,.vue . --fix src", + "dev": "npm run build:main && concurrently -k \"vite\" \"npm:dev:main\" \"npm:dev:start\"", + "dev:main": "nodemon --watch src/main --exec \"npm run build:main\"", + "dev:start": "cross-env NODE_ENV=development electronmon .", + "build": "vite build && npm run build:main && electron-builder", + "build:mac": "vite build && npm run build:main && electron-builder --mac --x64 --arm64", + "build:win": "vite build && npm run build:main && electron-builder --win --x64", + "build:linux": "vite build && npm run build:main && electron-builder --linux --x64", + "build:all": "vite build && npm run build:main && npm run build:mac && npm run build:win && npm run build:linux", + "build:main": "tsc -p tsconfig.main.json", + "lint": "eslint .", + "lint:fix": "eslint --fix .", "release": "bumpp -c 'build: release v' -t", - "generate:language-readme": "node build/scripts/generate-language-readme.js ", - "copy:plist": "copyfiles *.plist build", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", - "prepare": "husky install", - "preinstall": "npx only-allow pnpm" + "rebuild": "electron-rebuild", + "prepare": "simple-git-hooks && npm run rebuild" }, - "repository": "https://github.com/massCodeIO/massCode", - "author": { - "name": "Anton Reshetov", - "url": "https://github.com/antonreshetov" + "dependencies": { + "@elysiajs/cors": "^1.2.0", + "@elysiajs/node": "^1.2.5", + "@elysiajs/swagger": "^1.2.2", + "@vueuse/core": "^12.7.0", + "better-sqlite3": "^11.8.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "codemirror": "^5.65.18", + "codemirror-textmate": "^1.1.0", + "date-fns": "^4.1.0", + "electron-store": "^8.2.0", + "elysia": "^1.2.15", + "interactjs": "^1.10.27", + "ky": "^1.7.5", + "lucide-vue-next": "^0.476.0", + "onigasm": "^2.2.5", + "radix-vue": "^1.9.17", + "tailwind-merge": "^3.0.2" + }, + "devDependencies": { + "@antfu/eslint-config": "^3.16.0", + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@electron/rebuild": "^3.7.1", + "@tailwindcss/postcss": "^4.0.9", + "@tailwindcss/vite": "^4.0.9", + "@types/better-sqlite3": "^7.6.12", + "@types/codemirror": "^5.60.15", + "@types/node": "^22.10.8", + "@vitejs/plugin-vue": "^5.2.1", + "autoprefixer": "^10.4.20", + "bumpp": "^9.10.2", + "concurrently": "^9.1.2", + "cross-env": "^7.0.3", + "electron": "^34.0.1", + "electron-builder": "^25.1.8", + "electronmon": "^2.0.3", + "eslint": "^9.18.0", + "lint-staged": "^15.4.2", + "nodemon": "^3.1.9", + "prettier": "^3.4.2", + "prettier-plugin-tailwindcss": "^0.6.11", + "sass": "^1.85.1", + "simple-git-hooks": "^2.11.1", + "tailwindcss": "^4.0.9", + "typescript": "^5.7.3", + "unplugin-auto-import": "^19.1.0", + "unplugin-vue-components": "^28.4.0", + "vite": "^6.1.1", + "vue": "^3.5.13", + "vue-router": "^4.5.0" + }, + "simple-git-hooks": { + "pre-commit": "npx lint-staged", + "commit-msg": "npx commitlint --edit $1" }, "lint-staged": { "*.{js,ts,vue}": [ "prettier --write", "eslint --fix" - ], - "*.json": [ - "prettier --write" ] }, - "dependencies": { - "@iconscout/unicons": "^4.0.1", - "@masscode/json-server": "^0.18.0", - "@prettier/plugin-php": "^0.18.4", - "@prettier/plugin-pug": "^2.0.0", - "@prettier/plugin-xml": "^2.1.0", - "@sipec/vue3-tags-input": "^3.0.4", - "@types/universal-analytics": "^0.4.5", - "@vueuse/core": "^8.3.1", - "axios": "^0.26.1", - "codemirror": "^5.65.7", - "codemirror-textmate": "^1.1.0", - "crypto-js": "^4.1.1", - "d3": "^7.8.5", - "date-fns": "^2.28.0", - "dom-to-image": "^2.6.0", - "electron-store": "^8.0.1", - "floating-vue": "^2.0.0-beta.17", - "fs-extra": "^10.0.1", - "fuse.js": "^7.0.0", - "highlight.js": "^11.5.1", - "i18next": "^21.8.14", - "i18next-fs-backend": "^1.1.4", - "interactjs": "^1.10.11", - "lodash": "^4.17.21", - "lowdb": "^3.0.0", - "marked": "^4.0.17", - "markmap-common": "^0.15.3", - "markmap-lib": "^0.15.4", - "markmap-view": "^0.15.4", - "mermaid": "^9.1.3", - "mitt": "^3.0.0", - "nanoid": "^3.3.1", - "onigasm": "^2.2.5", - "pinia": "^2.0.13", - "prettier": "^2.6.2", - "prettier-plugin-java": "^1.6.1", - "prettier-plugin-sh": "0.8.2", - "prettier-plugin-toml": "^0.3.1", - "query-string": "^8.1.0", - "sanitize-html": "^2.7.0", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "uuid": "^9.0.1", - "vercel-toast": "^1.5.5", - "vue": "^3.2.33", - "vue-router": "^4.0.14", - "vue3-perfect-scrollbar": "^1.6.0" - }, - "devDependencies": { - "@commitlint/cli": "^15.0.0", - "@commitlint/config-conventional": "^15.0.0", - "@tsconfig/node14": "^1.0.1", - "@types/codemirror": "^5.60.5", - "@types/crypto-js": "^4.1.2", - "@types/dom-to-image": "^2.6.4", - "@types/estree": "^0.0.51", - "@types/i18next-fs-backend": "^1.1.2", - "@types/lowdb": "^1.0.11", - "@types/marked": "^4.0.3", - "@types/mermaid": "^8.2.9", - "@types/node": "^17.0.4", - "@types/prettier": "^2.6.0", - "@types/sanitize-html": "^2.6.2", - "@types/uuid": "^9.0.4", - "@types/webpack": "^5.28.0", - "@typescript-eslint/eslint-plugin": "^5.8.0", - "@typescript-eslint/parser": "^5.8.0", - "@vitejs/plugin-vue": "^2.3.1", - "@vue/cli": "^4.5.17", - "@vue/devtools": "^6.1.4", - "@vue/eslint-config-standard": "^6.1.0", - "bumpp": "^7.1.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "copyfiles": "^2.4.1", - "dotenv": "^16.0.1", - "electron": "^16.2.3", - "electron-builder": "^23.1.0", - "electron-notarize": "^1.2.1", - "eslint": "^8.5.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-vue": "^8.2.0", - "handlebars": "^4.7.7", - "husky": "^7.0.0", - "lint-staged": "^12.1.4", - "npm-run-all": "^4.1.5", - "sass": "^1.45.1", - "tsc-watch": "^4.6.0", - "typescript": "^4.5.4", - "unplugin-auto-import": "^0.6.6", - "unplugin-icons": "^0.13.4", - "unplugin-vue-components": "^0.18.1", - "vite": "^2.9.6", - "vue-tsc": "^0.30.6" - }, - "engines": { - "pnpm": ">=8.0.0" + "electronmon": { + "patterns": [ + "!src/renderer/**/*" + ] }, "volta": { - "node": "16.15.0" + "node": "20.16.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba868241..0047a67d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,13948 +1,8802 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@iconscout/unicons': - specifier: ^4.0.1 - version: 4.0.1 - '@masscode/json-server': - specifier: ^0.18.0 - version: 0.18.0 - '@prettier/plugin-php': - specifier: ^0.18.4 - version: 0.18.4(prettier@2.6.2) - '@prettier/plugin-pug': - specifier: ^2.0.0 - version: 2.0.0(prettier@2.6.2) - '@prettier/plugin-xml': - specifier: ^2.1.0 - version: 2.1.0 - '@sipec/vue3-tags-input': - specifier: ^3.0.4 - version: 3.0.4(vue@3.2.33) - '@types/universal-analytics': - specifier: ^0.4.5 - version: 0.4.5 - '@vueuse/core': - specifier: ^8.3.1 - version: 8.3.1(vue@3.2.33) - axios: - specifier: ^0.26.1 - version: 0.26.1 - codemirror: - specifier: ^5.65.7 - version: 5.65.7 - codemirror-textmate: - specifier: ^1.1.0 - version: 1.1.0(codemirror@5.65.7)(onigasm@2.2.5) - crypto-js: - specifier: ^4.1.1 - version: 4.1.1 - d3: - specifier: ^7.8.5 - version: 7.8.5 - date-fns: - specifier: ^2.28.0 - version: 2.28.0 - dom-to-image: - specifier: ^2.6.0 - version: 2.6.0 - electron-store: - specifier: ^8.0.1 - version: 8.0.1 - floating-vue: - specifier: ^2.0.0-beta.17 - version: 2.0.0-beta.17(vue@3.2.33) - fs-extra: - specifier: ^10.0.1 - version: 10.0.1 - fuse.js: - specifier: ^7.0.0 - version: 7.0.0 - highlight.js: - specifier: ^11.5.1 - version: 11.5.1 - i18next: - specifier: ^21.8.14 - version: 21.8.14 - i18next-fs-backend: - specifier: ^1.1.4 - version: 1.1.4 - interactjs: - specifier: ^1.10.11 - version: 1.10.11 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - lowdb: - specifier: ^3.0.0 - version: 3.0.0 - marked: - specifier: ^4.0.17 - version: 4.0.17 - markmap-common: - specifier: ^0.15.3 - version: 0.15.3 - markmap-lib: - specifier: ^0.15.4 - version: 0.15.4(markmap-common@0.15.3) - markmap-view: - specifier: ^0.15.4 - version: 0.15.4(markmap-common@0.15.3) - mermaid: - specifier: ^9.1.3 - version: 9.1.3 - mitt: - specifier: ^3.0.0 - version: 3.0.0 - nanoid: - specifier: ^3.3.1 - version: 3.3.2 - onigasm: - specifier: ^2.2.5 - version: 2.2.5 - pinia: - specifier: ^2.0.13 - version: 2.0.13(typescript@4.5.4)(vue@3.2.33) - prettier: - specifier: ^2.6.2 - version: 2.6.2 - prettier-plugin-java: - specifier: ^1.6.1 - version: 1.6.1 - prettier-plugin-sh: - specifier: 0.8.2 - version: 0.8.2(prettier@2.6.2) - prettier-plugin-toml: - specifier: ^0.3.1 - version: 0.3.1 - query-string: - specifier: ^8.1.0 - version: 8.1.0 - sanitize-html: - specifier: ^2.7.0 - version: 2.7.0 - slash: - specifier: ^3.0.0 - version: 3.0.0 - slugify: - specifier: ^1.6.6 - version: 1.6.6 - uuid: - specifier: ^9.0.1 - version: 9.0.1 - vercel-toast: - specifier: ^1.5.5 - version: 1.5.5 - vue: - specifier: ^3.2.33 - version: 3.2.33 - vue-router: - specifier: ^4.0.14 - version: 4.0.14(vue@3.2.33) - vue3-perfect-scrollbar: - specifier: ^1.6.0 - version: 1.6.0 - -devDependencies: - '@commitlint/cli': - specifier: ^15.0.0 - version: 15.0.0 - '@commitlint/config-conventional': - specifier: ^15.0.0 - version: 15.0.0 - '@tsconfig/node14': - specifier: ^1.0.1 - version: 1.0.1 - '@types/codemirror': - specifier: ^5.60.5 - version: 5.60.5 - '@types/crypto-js': - specifier: ^4.1.2 - version: 4.1.2 - '@types/dom-to-image': - specifier: ^2.6.4 - version: 2.6.4 - '@types/estree': - specifier: ^0.0.51 - version: 0.0.51 - '@types/i18next-fs-backend': - specifier: ^1.1.2 - version: 1.1.2 - '@types/lowdb': - specifier: ^1.0.11 - version: 1.0.11 - '@types/marked': - specifier: ^4.0.3 - version: 4.0.3 - '@types/mermaid': - specifier: ^8.2.9 - version: 8.2.9 - '@types/node': - specifier: ^17.0.4 - version: 17.0.22 - '@types/prettier': - specifier: ^2.6.0 - version: 2.6.0 - '@types/sanitize-html': - specifier: ^2.6.2 - version: 2.6.2 - '@types/uuid': - specifier: ^9.0.4 - version: 9.0.4 - '@types/webpack': - specifier: ^5.28.0 - version: 5.28.0 - '@typescript-eslint/eslint-plugin': - specifier: ^5.8.0 - version: 5.8.0(@typescript-eslint/parser@5.8.0)(eslint@8.5.0)(typescript@4.5.4) - '@typescript-eslint/parser': - specifier: ^5.8.0 - version: 5.8.0(eslint@8.5.0)(typescript@4.5.4) - '@vitejs/plugin-vue': - specifier: ^2.3.1 - version: 2.3.1(vite@2.9.6)(vue@3.2.33) - '@vue/cli': - specifier: ^4.5.17 - version: 4.5.17 - '@vue/devtools': - specifier: ^6.1.4 - version: 6.1.4 - '@vue/eslint-config-standard': - specifier: ^6.1.0 - version: 6.1.0(eslint-plugin-import@2.25.3)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@6.0.0)(eslint-plugin-vue@8.2.0)(eslint@8.5.0)(webpack@5.70.0) - bumpp: - specifier: ^7.1.1 - version: 7.1.1 - chalk: - specifier: ^4.1.2 - version: 4.1.2 - chokidar: - specifier: ^3.5.2 - version: 3.5.3 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - dotenv: - specifier: ^16.0.1 - version: 16.0.1 - electron: - specifier: ^16.2.3 - version: 16.2.3 - electron-builder: - specifier: ^23.1.0 - version: 23.1.0 - electron-notarize: - specifier: ^1.2.1 - version: 1.2.1 - eslint: - specifier: ^8.5.0 - version: 8.5.0 - eslint-config-prettier: - specifier: ^8.3.0 - version: 8.3.0(eslint@8.5.0) - eslint-plugin-import: - specifier: ^2.25.3 - version: 2.25.3(@typescript-eslint/parser@5.8.0)(eslint@8.5.0) - eslint-plugin-node: - specifier: ^11.1.0 - version: 11.1.0(eslint@8.5.0) - eslint-plugin-prettier: - specifier: ^4.0.0 - version: 4.0.0(eslint-config-prettier@8.3.0)(eslint@8.5.0)(prettier@2.6.2) - eslint-plugin-promise: - specifier: ^6.0.0 - version: 6.0.0(eslint@8.5.0) - eslint-plugin-vue: - specifier: ^8.2.0 - version: 8.2.0(eslint@8.5.0) - handlebars: - specifier: ^4.7.7 - version: 4.7.7 - husky: - specifier: ^7.0.0 - version: 7.0.4 - lint-staged: - specifier: ^12.1.4 - version: 12.1.4 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - sass: - specifier: ^1.45.1 - version: 1.45.1 - tsc-watch: - specifier: ^4.6.0 - version: 4.6.0(typescript@4.5.4) - typescript: - specifier: ^4.5.4 - version: 4.5.4 - unplugin-auto-import: - specifier: ^0.6.6 - version: 0.6.6(@vueuse/core@8.3.1)(vite@2.9.6)(webpack@5.70.0) - unplugin-icons: - specifier: ^0.13.4 - version: 0.13.4(vite@2.9.6)(webpack@5.70.0) - unplugin-vue-components: - specifier: ^0.18.1 - version: 0.18.1(vite@2.9.6)(vue@3.2.33)(webpack@5.70.0) - vite: - specifier: ^2.9.6 - version: 2.9.6(sass@1.45.1) - vue-tsc: - specifier: ^0.30.6 - version: 0.30.6(typescript@4.5.4) +importers: -packages: - - /7zip-bin@5.1.1: - resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==} - dev: true - - /@achrinza/node-ipc@9.2.2: - resolution: {integrity: sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==} - engines: {node: 8 || 10 || 12 || 14 || 16 || 17} - dependencies: - '@node-ipc/js-queue': 2.0.3 - event-pubsub: 4.3.0 - js-message: 1.0.7 - dev: true - - /@akryum/winattr@3.0.0: - resolution: {integrity: sha512-t4WmWoGV9gyzypwG3y3JlcK2t8fKLtvzBA7xEoFTj9SMPvOuLsf13uh4ikK0RRaaa9RPPWLgFUdOyIRaQvCpwQ==} - engines: {node: '>= 8'} + .: dependencies: - fswin: 2.17.1227 - dev: true + '@elysiajs/cors': + specifier: ^1.2.0 + version: 1.2.0(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3)) + '@elysiajs/node': + specifier: ^1.2.5 + version: 1.2.5(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3))(formidable@3.5.2)(ws@8.18.1) + '@elysiajs/swagger': + specifier: ^1.2.2 + version: 1.2.2(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3)) + '@vueuse/core': + specifier: ^12.7.0 + version: 12.7.0(typescript@5.7.3) + better-sqlite3: + specifier: ^11.8.1 + version: 11.8.1 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + codemirror: + specifier: ^5.65.18 + version: 5.65.18 + codemirror-textmate: + specifier: ^1.1.0 + version: 1.1.0(codemirror@5.65.18)(onigasm@2.2.5) + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + electron-store: + specifier: ^8.2.0 + version: 8.2.0 + elysia: + specifier: ^1.2.15 + version: 1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3) + interactjs: + specifier: ^1.10.27 + version: 1.10.27 + ky: + specifier: ^1.7.5 + version: 1.7.5 + lucide-vue-next: + specifier: ^0.476.0 + version: 0.476.0(vue@3.5.13(typescript@5.7.3)) + onigasm: + specifier: ^2.2.5 + version: 2.2.5 + radix-vue: + specifier: ^1.9.17 + version: 1.9.17(vue@3.5.13(typescript@5.7.3)) + tailwind-merge: + specifier: ^3.0.2 + version: 3.0.2 + devDependencies: + '@antfu/eslint-config': + specifier: ^3.16.0 + version: 3.16.0(@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.13)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@commitlint/cli': + specifier: ^19.6.1 + version: 19.7.1(@types/node@22.13.1)(typescript@5.7.3) + '@commitlint/config-conventional': + specifier: ^19.6.0 + version: 19.7.1 + '@electron/rebuild': + specifier: ^3.7.1 + version: 3.7.1 + '@tailwindcss/postcss': + specifier: ^4.0.9 + version: 4.0.9 + '@tailwindcss/vite': + specifier: ^4.0.9 + version: 4.0.9(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0)) + '@types/better-sqlite3': + specifier: ^7.6.12 + version: 7.6.12 + '@types/codemirror': + specifier: ^5.60.15 + version: 5.60.15 + '@types/node': + specifier: ^22.10.8 + version: 22.13.1 + '@vitejs/plugin-vue': + specifier: ^5.2.1 + version: 5.2.1(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.5.3) + bumpp: + specifier: ^9.10.2 + version: 9.11.1 + concurrently: + specifier: ^9.1.2 + version: 9.1.2 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + electron: + specifier: ^34.0.1 + version: 34.1.1 + electron-builder: + specifier: ^25.1.8 + version: 25.1.8(electron-builder-squirrel-windows@25.1.8) + electronmon: + specifier: ^2.0.3 + version: 2.0.3 + eslint: + specifier: ^9.18.0 + version: 9.19.0(jiti@2.4.2) + lint-staged: + specifier: ^15.4.2 + version: 15.4.3 + nodemon: + specifier: ^3.1.9 + version: 3.1.9 + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.11(prettier@3.4.2) + sass: + specifier: ^1.85.1 + version: 1.85.1 + simple-git-hooks: + specifier: ^2.11.1 + version: 2.11.1 + tailwindcss: + specifier: ^4.0.9 + version: 4.0.9 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + unplugin-auto-import: + specifier: ^19.1.0 + version: 19.1.0(@vueuse/core@12.7.0(typescript@5.7.3)) + unplugin-vue-components: + specifier: ^28.4.0 + version: 28.4.0(@babel/parser@7.26.7)(vue@3.5.13(typescript@5.7.3)) + vite: + specifier: ^6.1.1 + version: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0) + vue: + specifier: ^3.5.13 + version: 3.5.13(typescript@5.7.3) + vue-router: + specifier: ^4.5.0 + version: 4.5.0(vue@3.5.13(typescript@5.7.3)) - /@antfu/install-pkg@0.1.0: - resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} - dependencies: - execa: 5.1.1 - find-up: 5.0.0 - dev: true +packages: - /@antfu/utils@0.3.0: - resolution: {integrity: sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA==} - dependencies: - '@types/throttle-debounce': 2.1.0 - dev: true + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - /@antfu/utils@0.5.0: - resolution: {integrity: sha512-MrAQ/MrPSxbh1bBrmwJjORfJymw4IqSHFBXqvxaga3ZdDM+/zokYF8DjyJpSjY2QmpmgQrajDUBJOWrYeARfzA==} - dev: true + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} - /@apollo/protobufjs@1.2.2: - resolution: {integrity: sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==} + '@antfu/eslint-config@3.16.0': + resolution: {integrity: sha512-g6RAXUMeow9vexoOMYwCpByY2xSDpAD78q+rvQLvVpY6MFcxFD/zmdrZGYa/yt7LizK86m17kIYKOGLJ3L8P0w==} hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 10.17.60 - long: 4.0.0 - dev: true - - /@apollographql/apollo-tools@0.5.3(graphql@14.7.0): - resolution: {integrity: sha512-VcsXHfTFoCodDAgJZxN04GdFK1kqOhZQnQY/9Fa147P+I8xfvOSz5d+lKAPB+hwSgBNyd7ncAKGIs4+utbL+yA==} - engines: {node: '>=8', npm: '>=6'} peerDependencies: - graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 14.7.0 - dev: true + '@eslint-react/eslint-plugin': ^1.19.0 + '@prettier/plugin-xml': ^3.4.1 + '@unocss/eslint-plugin': '>=0.50.0' + astro-eslint-parser: ^1.0.2 + eslint: ^9.10.0 + eslint-plugin-astro: ^1.2.0 + eslint-plugin-format: '>=0.1.0' + eslint-plugin-react-hooks: ^5.0.0 + eslint-plugin-react-refresh: ^0.4.4 + eslint-plugin-solid: ^0.14.3 + eslint-plugin-svelte: '>=2.35.1' + prettier-plugin-astro: ^0.14.0 + prettier-plugin-slidev: ^1.0.5 + svelte-eslint-parser: '>=0.37.0' + peerDependenciesMeta: + '@eslint-react/eslint-plugin': + optional: true + '@prettier/plugin-xml': + optional: true + '@unocss/eslint-plugin': + optional: true + astro-eslint-parser: + optional: true + eslint-plugin-astro: + optional: true + eslint-plugin-format: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true + eslint-plugin-solid: + optional: true + eslint-plugin-svelte: + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-slidev: + optional: true + svelte-eslint-parser: + optional: true - /@apollographql/graphql-playground-html@1.6.27: - resolution: {integrity: sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==} - dependencies: - xss: 1.0.11 - dev: true + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} - /@apollographql/graphql-upload-8-fork@8.1.3(graphql@14.7.0): - resolution: {integrity: sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==} - engines: {node: '>=8.5'} - peerDependencies: - graphql: 0.13.1 - 15 - dependencies: - '@types/express': 4.17.13 - '@types/fs-capacitor': 2.0.0 - '@types/koa': 2.13.4 - busboy: 0.3.1 - fs-capacitor: 2.0.4 - graphql: 14.7.0 - http-errors: 1.8.1 - object-path: 0.11.8 - dev: true - - /@babel/code-frame@7.16.0: - resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.16.0 - dev: true + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - /@babel/compat-data@7.16.4: - resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.16.5: - resolution: {integrity: sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3(@babel/core@7.16.5) - '@babel/helper-module-transforms': 7.16.5 - '@babel/helpers': 7.16.5 - '@babel/parser': 7.17.9 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - convert-source-map: 1.8.0 - debug: 4.3.4(supports-color@9.2.1) - gensync: 1.0.0-beta.2 - json5: 2.2.0 - semver: 6.3.0 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.16.5: - resolution: {integrity: sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - /@babel/helper-annotate-as-pure@7.16.0: - resolution: {integrity: sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.16.5: - resolution: {integrity: sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==} + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-explode-assignable-expression': 7.16.0 - '@babel/types': 7.17.0 - dev: true - /@babel/helper-compilation-targets@7.16.3(@babel/core@7.16.5): - resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - browserslist: 4.20.2 - semver: 6.3.0 - dev: true + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} - /@babel/helper-create-class-features-plugin@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-member-expression-to-functions': 7.16.5 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/helper-replace-supers': 7.16.5 - '@babel/helper-split-export-declaration': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true + '@clack/prompts@0.9.1': + resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} - /@babel/helper-create-regexp-features-plugin@7.16.0(@babel/core@7.16.5): - resolution: {integrity: sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - regexpu-core: 4.8.0 - dev: true + '@commitlint/cli@19.7.1': + resolution: {integrity: sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==} + engines: {node: '>=v18'} + hasBin: true - /@babel/helper-define-polyfill-provider@0.3.0(@babel/core@7.16.5): - resolution: {integrity: sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3(@babel/core@7.16.5) - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/traverse': 7.16.5 - debug: 4.3.4(supports-color@9.2.1) - lodash.debounce: 4.0.8 - resolve: 1.22.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + '@commitlint/config-conventional@19.7.1': + resolution: {integrity: sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==} + engines: {node: '>=v18'} - /@babel/helper-environment-visitor@7.16.5: - resolution: {integrity: sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} + engines: {node: '>=v18'} - /@babel/helper-explode-assignable-expression@7.16.0: - resolution: {integrity: sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + engines: {node: '>=v18'} - /@babel/helper-function-name@7.16.0: - resolution: {integrity: sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-get-function-arity': 7.16.0 - '@babel/template': 7.16.0 - '@babel/types': 7.16.0 - dev: true + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} + engines: {node: '>=v18'} - /@babel/helper-get-function-arity@7.16.0: - resolution: {integrity: sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} + engines: {node: '>=v18'} - /@babel/helper-hoist-variables@7.16.0: - resolution: {integrity: sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true + '@commitlint/is-ignored@19.7.1': + resolution: {integrity: sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==} + engines: {node: '>=v18'} - /@babel/helper-member-expression-to-functions@7.16.5: - resolution: {integrity: sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@commitlint/lint@19.7.1': + resolution: {integrity: sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==} + engines: {node: '>=v18'} - /@babel/helper-module-imports@7.16.0: - resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} - /@babel/helper-module-transforms@7.16.5: - resolution: {integrity: sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-simple-access': 7.16.0 - '@babel/helper-split-export-declaration': 7.16.0 - '@babel/helper-validator-identifier': 7.15.7 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} + engines: {node: '>=v18'} - /@babel/helper-optimise-call-expression@7.16.0: - resolution: {integrity: sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + engines: {node: '>=v18'} - /@babel/helper-plugin-utils@7.16.5: - resolution: {integrity: sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==} - engines: {node: '>=6.9.0'} - dev: true + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + engines: {node: '>=v18'} - /@babel/helper-remap-async-to-generator@7.16.5: - resolution: {integrity: sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-wrap-function': 7.16.5 - '@babel/types': 7.17.0 - transitivePeerDependencies: - - supports-color - dev: true + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} + engines: {node: '>=v18'} - /@babel/helper-replace-supers@7.16.5: - resolution: {integrity: sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-member-expression-to-functions': 7.16.5 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.17.0 - transitivePeerDependencies: - - supports-color - dev: true + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} + engines: {node: '>=v18'} - /@babel/helper-simple-access@7.16.0: - resolution: {integrity: sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + engines: {node: '>=v18'} - /@babel/helper-skip-transparent-expression-wrappers@7.16.0: - resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + engines: {node: '>=v18'} - /@babel/helper-split-export-declaration@7.16.0: - resolution: {integrity: sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} + engines: {node: '>=v18'} - /@babel/helper-validator-identifier@7.15.7: - resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==} - engines: {node: '>=6.9.0'} - dev: true + '@develar/schema-utils@2.6.5': + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} - /@babel/helper-validator-identifier@7.16.7: - resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} - engines: {node: '>=6.9.0'} + '@electron/asar@3.2.18': + resolution: {integrity: sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==} + engines: {node: '>=10.12.0'} + hasBin: true - /@babel/helper-validator-option@7.14.5: - resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} - engines: {node: '>=6.9.0'} - dev: true + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} - /@babel/helper-wrap-function@7.16.5: - resolution: {integrity: sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.16.0 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.17.0 - transitivePeerDependencies: - - supports-color - dev: true + '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': + resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} + version: 10.2.0-electron.1 + engines: {node: '>=12.13.0'} + hasBin: true - /@babel/helpers@7.16.5: - resolution: {integrity: sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} - /@babel/highlight@7.16.0: - resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.15.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true + '@electron/osx-sign@1.3.1': + resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==} + engines: {node: '>=12.0.0'} + hasBin: true - /@babel/parser@7.17.9: - resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} - engines: {node: '>=6.0.0'} + '@electron/rebuild@3.6.1': + resolution: {integrity: sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==} + engines: {node: '>=12.13.0'} hasBin: true - dependencies: - '@babel/types': 7.17.0 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.16.2(@babel/core@7.16.5): - resolution: {integrity: sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@electron/rebuild@3.7.1': + resolution: {integrity: sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==} + engines: {node: '>=12.13.0'} + hasBin: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.0(@babel/core@7.16.5): - resolution: {integrity: sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-proposal-optional-chaining': 7.16.5(@babel/core@7.16.5) - dev: true + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} - /@babel/plugin-proposal-async-generator-functions@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==} - engines: {node: '>=6.9.0'} + '@elysiajs/cors@1.2.0': + resolution: {integrity: sha512-qsJwDAg6WfdQRMfj6uSMcDPSpXvm/zQFeAX1uuJXhIgazH8itSfcDxcH9pMuXVRX1yQNi2pPwNQLJmAcw5mzvw==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-remap-async-to-generator': 7.16.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + elysia: '>= 1.2.0' - /@babel/plugin-proposal-class-properties@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==} - engines: {node: '>=6.9.0'} + '@elysiajs/node@1.2.5': + resolution: {integrity: sha512-g5iE2csoixsx4KT4Q57BVjQqjcjJPigWF1ruGHguxrwmI/nfTlWNnpKAR6XU+MERhr3Cf7dd6GI826BBNgo0xw==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true + bufferutil: '>= 4.0.1' + elysia: '>= 1.2.7' + formidable: '>= 3.5.2' + ws: '>= 8.18.0' + peerDependenciesMeta: + bufferutil: + optional: true - /@babel/plugin-proposal-class-static-block@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==} - engines: {node: '>=6.9.0'} + '@elysiajs/swagger@1.2.2': + resolution: {integrity: sha512-DG0PbX/wzQNQ6kIpFFPCvmkkWTIbNWDS7lVLv3Puy6ONklF14B4NnbDfpYjX1hdSYKeCqKBBOuenh6jKm8tbYA==} peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + elysia: '>= 1.2.0' - /@babel/plugin-proposal-dynamic-import@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.16.5) - dev: true + '@es-joy/jsdoccomment@0.49.0': + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} + engines: {node: '>=16'} - /@babel/plugin-proposal-export-namespace-from@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.16.5) - dev: true + '@es-joy/jsdoccomment@0.50.0': + resolution: {integrity: sha512-+zZymuVLH6zVwXPtCAtC+bDymxmEwEqDftdAK+f407IF1bnX49anIxvBhCA1AqUIfD6egj1jM1vUnSuijjNyYg==} + engines: {node: '>=18'} - /@babel/plugin-proposal-json-strings@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.16.5) - dev: true + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - /@babel/plugin-proposal-logical-assignment-operators@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.16.5) - dev: true + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - /@babel/plugin-proposal-nullish-coalescing-operator@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.16.5) - dev: true + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - /@babel/plugin-proposal-numeric-separator@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.16.5) - dev: true + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - /@babel/plugin-proposal-object-rest-spread@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-transform-parameters': 7.16.5(@babel/core@7.16.5) - dev: true - - /@babel/plugin-proposal-optional-catch-binding@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.16.5) - dev: true + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - /@babel/plugin-proposal-optional-chaining@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.16.5) - dev: true + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - /@babel/plugin-proposal-private-methods@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - /@babel/plugin-proposal-private-property-in-object@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-create-class-features-plugin': 7.16.5(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - /@babel/plugin-proposal-unicode-property-regex@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.16.5): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.16.5): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.16.5): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - /@babel/plugin-syntax-flow@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-Nrx+7EAJx1BieBQseZa2pavVH2Rp7hADK2xn7coYqVbWRu9C2OFizYcsKo6TrrqJkJl+qF/+Qqzrk/+XDu4GnA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.16.5): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.16.5): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.16.5): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.16.5): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.16.5): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-plugin-eslint-comments@4.4.1': + resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.2.6': + resolution: {integrity: sha512-k7HNCqApoDHM6XzT30zGoETj+D+uUcZUb+IVAJmar3u6bvHf7hhHJcWx09QHj4/a2qrKZMWU0E16tvkiAdv06Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/markdown@6.2.2': + resolution: {integrity: sha512-U0/KgzI9BVUuHDQ9M2fuVgB0QZ1fSyzwm8jKmHr1dlsLHGHYzoeIA9yqLMdTbV3ivZfp6rTdt6zqre3TfNExUQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@floating-ui/vue@1.1.6': + resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@interactjs/types@1.10.27': + resolution: {integrity: sha512-BUdv0cvs4H5ODuwft2Xp4eL8Vmi3LcihK42z0Ft/FbVJZoRioBsxH+LlsBdK4tAie7PqlKGy+1oyOncu1nQ6eA==} + + '@internationalized/date@3.7.0': + resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} + + '@internationalized/number@3.6.0': + resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rollup/rollup-android-arm-eabi@4.34.8': + resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.8': + resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.8': + resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.8': + resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.8': + resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.8': + resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.8': + resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.8': + resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.8': + resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.8': + resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.8': + resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.8': + resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.8': + resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.8': + resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.8': + resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.8': + resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} + cpu: [x64] + os: [win32] + + '@scalar/openapi-types@0.1.1': + resolution: {integrity: sha512-NMy3QNk6ytcCoPUGJH0t4NNr36OWXgZhA3ormr3TvhX1NDgoF95wFyodGVH8xiHeUyn2/FxtETm8UBLbB5xEmg==} + engines: {node: '>=18'} + + '@scalar/openapi-types@0.1.8': + resolution: {integrity: sha512-iufA5/6hPCmRIVD2eh7qGpoKvoA08Gw/qUb2JECifBtAwA93fo7+1k9uHK440f2LMJsbxIzA+nv7RS0BmfiO/g==} + engines: {node: '>=18'} + + '@scalar/themes@0.9.68': + resolution: {integrity: sha512-466ac2fdQJOBBSLkGUf88vuZVF+qNMeVpjb0aAHrKkxhpjucTPKdTYO8r2dsX1R5k9A13gWPnm594VW5G/bGHw==} + engines: {node: '>=18'} + + '@scalar/types@0.0.12': + resolution: {integrity: sha512-XYZ36lSEx87i4gDqopQlGCOkdIITHHEvgkuJFrXFATQs9zHARop0PN0g4RZYWj+ZpCUclOcaOjbCt8JGe22mnQ==} + engines: {node: '>=18'} + + '@scalar/types@0.0.34': + resolution: {integrity: sha512-q01ctijmHArM5KOny2zU+sHfhpsgOAENrDENecK2TsQNn5FYLmFZouMKeW2M6F7KFLPZnFxUiL/rT88b6Rp/Kg==} + engines: {node: '>=18'} + + '@sinclair/typebox@0.34.27': + resolution: {integrity: sha512-C7mxE1VC3WC2McOufZXEU48IfRVI+BcKxk4NOyNn3+JMUNdJHEWGS5CqjuDX+ij2NCCz8/nse1mT7yn8Fv2GHg==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@stylistic/eslint-plugin@2.13.0': + resolution: {integrity: sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tailwindcss/node@4.0.9': + resolution: {integrity: sha512-tOJvdI7XfJbARYhxX+0RArAhmuDcczTC46DGCEziqxzzbIaPnfYaIyRT31n4u8lROrsO7Q6u/K9bmQHL2uL1bQ==} + + '@tailwindcss/oxide-android-arm64@4.0.9': + resolution: {integrity: sha512-YBgy6+2flE/8dbtrdotVInhMVIxnHJPbAwa7U1gX4l2ThUIaPUp18LjB9wEH8wAGMBZUb//SzLtdXXNBHPUl6Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.0.9': + resolution: {integrity: sha512-pWdl4J2dIHXALgy2jVkwKBmtEb73kqIfMpYmcgESr7oPQ+lbcQ4+tlPeVXaSAmang+vglAfFpXQCOvs/aGSqlw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.0.9': + resolution: {integrity: sha512-4Dq3lKp0/C7vrRSkNPtBGVebEyWt9QPPlQctxJ0H3MDyiQYvzVYf8jKow7h5QkWNe8hbatEqljMj/Y0M+ERYJg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.0.9': + resolution: {integrity: sha512-k7U1RwRODta8x0uealtVt3RoWAWqA+D5FAOsvVGpYoI6ObgmnzqWW6pnVwz70tL8UZ/QXjeMyiICXyjzB6OGtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9': + resolution: {integrity: sha512-NDDjVweHz2zo4j+oS8y3KwKL5wGCZoXGA9ruJM982uVJLdsF8/1AeKvUwKRlMBpxHt1EdWJSAh8a0Mfhl28GlQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.9': + resolution: {integrity: sha512-jk90UZ0jzJl3Dy1BhuFfRZ2KP9wVKMXPjmCtY4U6fF2LvrjP5gWFJj5VHzfzHonJexjrGe1lMzgtjriuZkxagg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.0.9': + resolution: {integrity: sha512-3eMjyTC6HBxh9nRgOHzrc96PYh1/jWOwHZ3Kk0JN0Kl25BJ80Lj9HEvvwVDNTgPg154LdICwuFLuhfgH9DULmg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.0.9': + resolution: {integrity: sha512-v0D8WqI/c3WpWH1kq/HP0J899ATLdGZmENa2/emmNjubT0sWtEke9W9+wXeEoACuGAhF9i3PO5MeyditpDCiWQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.0.9': + resolution: {integrity: sha512-Kvp0TCkfeXyeehqLJr7otsc4hd/BUPfcIGrQiwsTVCfaMfjQZCG7DjI+9/QqPZha8YapLA9UoIcUILRYO7NE1Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.9': + resolution: {integrity: sha512-m3+60T/7YvWekajNq/eexjhV8z10rswcz4BC9bioJ7YaN+7K8W2AmLmG0B79H14m6UHE571qB0XsPus4n0QVgQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.0.9': + resolution: {integrity: sha512-dpc05mSlqkwVNOUjGu/ZXd5U1XNch1kHFJ4/cHkZFvaW1RzbHmRt24gvM8/HC6IirMxNarzVw4IXVtvrOoZtxA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.0.9': + resolution: {integrity: sha512-eLizHmXFqHswJONwfqi/WZjtmWZpIalpvMlNhTM99/bkHtUs6IqgI1XQ0/W5eO2HiRQcIlXUogI2ycvKhVLNcA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.0.9': + resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==} + + '@tailwindcss/vite@4.0.9': + resolution: {integrity: sha512-BIKJO+hwdIsN7V6I7SziMZIVHWWMsV/uCQKYEbeiGRDRld+TkqyRRl9+dQ0MCXbhcVr+D9T/qX2E84kT7V281g==} + peerDependencies: + vite: ^5.2.0 || ^6 + + '@tanstack/virtual-core@3.13.2': + resolution: {integrity: sha512-Qzz4EgzMbO5gKrmqUondCjiHcuu4B1ftHb0pjCut661lXZdGoHeze9f/M8iwsK1t5LGR6aNuNGU7mxkowaW6RQ==} + + '@tanstack/vue-virtual@3.13.2': + resolution: {integrity: sha512-z4swzjdhzCh95n9dw9lTvw+t3iwSkYRlVkYkra3C9mul/m5fTzHR7KmtkwH4qXMTXGJUbngtC/bz2cHQIHkO8g==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@types/better-sqlite3@7.6.12': + resolution: {integrity: sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/codemirror@5.60.15': + resolution: {integrity: sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/plist@3.0.5': + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/tern@0.23.9': + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/verror@1.10.10': + resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@8.23.0': + resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.23.0': + resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.23.0': + resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.23.0': + resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.23.0': + resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.23.0': + resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.23.0': + resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.23.0': + resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unhead/schema@1.11.19': + resolution: {integrity: sha512-7VhYHWK7xHgljdv+C01MepCSYZO2v6OhgsfKWPxRQBDDGfUKCUaChox0XMq3tFvXP6u4zSp6yzcDw2yxCfVMwg==} + + '@vitejs/plugin-vue@5.2.1': + resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vitest/eslint-plugin@1.1.25': + resolution: {integrity: sha512-u8DpDnMbPcqBmJOB4PeEtn6q7vKmLVTLFMpzoxSAo0hjYdl4iYSHRleqwPQo0ywc7UV0S6RKIahYRQ3BnZdMVw==} + peerDependencies: + '@typescript-eslint/utils': '>= 8.0' + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + typescript: + optional: true + vitest: + optional: true + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/core@12.7.0': + resolution: {integrity: sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/metadata@12.7.0': + resolution: {integrity: sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==} + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + '@vueuse/shared@12.7.0': + resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - /@babel/plugin-syntax-typescript@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - /@babel/plugin-transform-arrow-functions@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} - /@babel/plugin-transform-async-to-generator@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-remap-async-to-generator': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - /@babel/plugin-transform-block-scoped-functions@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} - /@babel/plugin-transform-block-scoping@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - /@babel/plugin-transform-classes@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-replace-supers': 7.16.5 - '@babel/helper-split-export-declaration': 7.16.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} - /@babel/plugin-transform-computed-properties@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} - /@babel/plugin-transform-destructuring@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + app-builder-bin@5.0.0-alpha.10: + resolution: {integrity: sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==} - /@babel/plugin-transform-dotall-regex@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==} - engines: {node: '>=6.9.0'} + app-builder-lib@25.1.8: + resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} + engines: {node: '>=14.0.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - dev: true + dmg-builder: 25.1.8 + electron-builder-squirrel-windows: 25.1.8 - /@babel/plugin-transform-duplicate-keys@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - /@babel/plugin-transform-exponentiation-operator@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} - /@babel/plugin-transform-flow-strip-types@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-skE02E/MptkZdBS4HwoRhjWXqeKQj0BWKEAPfPC+8R4/f6bjQqQ9Nftv/+HkxWwnVxh/E2NV9TNfzLN5H/oiBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-flow': 7.16.5(@babel/core@7.16.5) - dev: true + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} - /@babel/plugin-transform-for-of@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} - /@babel/plugin-transform-function-name@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} - /@babel/plugin-transform-literals@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. - /@babel/plugin-transform-member-expression-literals@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /@babel/plugin-transform-modules-amd@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} - /@babel/plugin-transform-modules-commonjs@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-simple-access': 7.16.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - /@babel/plugin-transform-modules-systemjs@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-hoist-variables': 7.16.0 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-identifier': 7.16.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - /@babel/plugin-transform-modules-umd@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} - /@babel/plugin-transform-named-capturing-groups-regex@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0(@babel/core@7.16.5) - dev: true + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} - /@babel/plugin-transform-new-target@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} - /@babel/plugin-transform-object-super@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-replace-supers': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - /@babel/plugin-transform-parameters@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - /@babel/plugin-transform-property-literals@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} - /@babel/plugin-transform-regenerator@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - regenerator-transform: 0.14.5 - dev: true + atomically@1.7.0: + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} - /@babel/plugin-transform-reserved-words@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==} - engines: {node: '>=6.9.0'} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + postcss: ^8.1.0 - /@babel/plugin-transform-shorthand-properties@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /@babel/plugin-transform-spread@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - dev: true + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - /@babel/plugin-transform-sticky-regex@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + better-sqlite3@11.8.1: + resolution: {integrity: sha512-9BxNaBkblMjhJW8sMRZxnxVTRgbRmssZW0Oxc1MPBTfiR+WW21e2Mk4qu8CzrcZb1LwPCnFsfDEzq+SNcBU8eg==} - /@babel/plugin-transform-template-literals@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} - /@babel/plugin-transform-typeof-symbol@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - /@babel/plugin-transform-typescript@7.16.1(@babel/core@7.16.5): - resolution: {integrity: sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-typescript': 7.16.5(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - /@babel/plugin-transform-unicode-escapes@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true + bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} - /@babel/plugin-transform-unicode-regex@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - dev: true + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - /@babel/preset-env@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==} - engines: {node: '>=6.9.0'} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builder-util-runtime@9.2.10: + resolution: {integrity: sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==} + engines: {node: '>=12.0.0'} + + builder-util@25.1.7: + resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bumpp@9.11.1: + resolution: {integrity: sha512-jBHlab9NnRwrpHsockb5E+MBo0os2yS6S7i3cnN8hB6EkTardKQotmd0CFdOc8pubLz2fxj2AD6RGtrySVG6Mw==} + engines: {node: '>=10'} + hasBin: true + + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3(@babel/core@7.16.5) - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.2(@babel/core@7.16.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.0(@babel/core@7.16.5) - '@babel/plugin-proposal-async-generator-functions': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-class-properties': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-class-static-block': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-dynamic-import': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-export-namespace-from': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-json-strings': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-logical-assignment-operators': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-numeric-separator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-object-rest-spread': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-optional-catch-binding': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-optional-chaining': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-private-methods': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-private-property-in-object': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-unicode-property-regex': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.16.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.16.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.16.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.16.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.16.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.16.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.16.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.16.5) - '@babel/plugin-transform-arrow-functions': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-async-to-generator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-block-scoped-functions': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-block-scoping': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-classes': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-computed-properties': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-destructuring': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-dotall-regex': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-duplicate-keys': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-exponentiation-operator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-for-of': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-function-name': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-literals': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-member-expression-literals': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-modules-amd': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-modules-commonjs': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-modules-systemjs': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-modules-umd': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-new-target': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-object-super': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-parameters': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-property-literals': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-regenerator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-reserved-words': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-shorthand-properties': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-spread': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-sticky-regex': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-template-literals': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-typeof-symbol': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-unicode-escapes': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-unicode-regex': 7.16.5(@babel/core@7.16.5) - '@babel/preset-modules': 0.1.5(@babel/core@7.16.5) - '@babel/types': 7.16.0 - babel-plugin-polyfill-corejs2: 0.3.0(@babel/core@7.16.5) - babel-plugin-polyfill-corejs3: 0.4.0(@babel/core@7.16.5) - babel-plugin-polyfill-regenerator: 0.3.0(@babel/core@7.16.5) - core-js-compat: 3.20.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true - /@babel/preset-flow@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-rmC6Nznp4V55N4Zfec87jwd14TdREqwKVJFM/6Z2wTwoeZQr56czjaPRCezqzqc8TsHF7aLP1oczjadIQ058gw==} - engines: {node: '>=6.9.0'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001698: + resolution: {integrity: sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + codemirror-textmate@1.1.0: + resolution: {integrity: sha512-c7Xov3X5eIKiPrKjfCS8RPZyFx6EYXT1EPtTEl2jAD2HuD9uLqJF6z+KoPT8H51rOB+KamEOZDVUrI8YEnsphw==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-transform-flow-strip-types': 7.16.5(@babel/core@7.16.5) - dev: true + codemirror: ^5.41.0 + onigasm: ^2.2.1 + + codemirror@5.65.18: + resolution: {integrity: sha512-Gaz4gHnkbHMGgahNt3CA5HBk5lLQBqmD/pBgeB4kQU6OedZmqMBjlRF0LSrp2tJ4wlLNPm2FfaUd1pDy0mdlpA==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - /@babel/preset-modules@0.1.5(@babel/core@7.16.5): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-proposal-unicode-property-regex': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-dotall-regex': 7.16.5(@babel/core@7.16.5) - '@babel/types': 7.17.0 - esutils: 2.0.3 - dev: true + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} - /@babel/preset-typescript@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-transform-typescript': 7.16.1(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} - /@babel/register@7.16.5(@babel/core@7.16.5): - resolution: {integrity: sha512-NpluD+cToBiZiDsG3y9rtIcqDyivsahpaM9csfyfiq1qQWduSmihUZ+ruIqqSDGjZKZMJfgAElo9x2YWlOQuRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.4 - source-map-support: 0.5.21 - dev: true + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /@babel/runtime@7.18.9: - resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.9 + concurrently@9.1.2: + resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + engines: {node: '>=18'} + hasBin: true - /@babel/runtime@7.23.1: - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.0 + conf@10.2.0: + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} - /@babel/template@7.16.0: - resolution: {integrity: sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/parser': 7.17.9 - '@babel/types': 7.16.0 - dev: true + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - /@babel/traverse@7.16.5: - resolution: {integrity: sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.5 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-hoist-variables': 7.16.0 - '@babel/helper-split-export-declaration': 7.16.0 - '@babel/parser': 7.17.9 - '@babel/types': 7.16.0 - debug: 4.3.4(supports-color@9.2.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + config-file-ts@0.2.8-rc1: + resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} - /@babel/types@7.16.0: - resolution: {integrity: sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.15.7 - to-fast-properties: 2.0.0 - dev: true + consola@3.4.0: + resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} + engines: {node: ^14.18.0 || >=16.10.0} - /@babel/types@7.17.0: - resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.16.7 - to-fast-properties: 2.0.0 + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - /@braintree/sanitize-url@6.0.0: - resolution: {integrity: sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==} - dev: false + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} - /@commitlint/cli@15.0.0: - resolution: {integrity: sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==} - engines: {node: '>=v12'} + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} hasBin: true - dependencies: - '@commitlint/format': 15.0.0 - '@commitlint/lint': 15.0.0 - '@commitlint/load': 15.0.0 - '@commitlint/read': 15.0.0 - '@commitlint/types': 15.0.0 - lodash: 4.17.21 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - yargs: 17.3.1 - dev: true - /@commitlint/config-conventional@15.0.0: - resolution: {integrity: sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==} - engines: {node: '>=v12'} - dependencies: - conventional-changelog-conventionalcommits: 4.6.2 - dev: true + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} - /@commitlint/ensure@15.0.0: - resolution: {integrity: sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/types': 15.0.0 - lodash: 4.17.21 - dev: true + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} - /@commitlint/execute-rule@15.0.0: - resolution: {integrity: sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==} - engines: {node: '>=v12'} - dev: true + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - /@commitlint/format@15.0.0: - resolution: {integrity: sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/types': 15.0.0 - chalk: 4.1.2 - dev: true - - /@commitlint/is-ignored@15.0.0: - resolution: {integrity: sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/types': 15.0.0 - semver: 7.3.5 - dev: true - - /@commitlint/lint@15.0.0: - resolution: {integrity: sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/is-ignored': 15.0.0 - '@commitlint/parse': 15.0.0 - '@commitlint/rules': 15.0.0 - '@commitlint/types': 15.0.0 - dev: true - - /@commitlint/load@15.0.0: - resolution: {integrity: sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/execute-rule': 15.0.0 - '@commitlint/resolve-extends': 15.0.0 - '@commitlint/types': 15.0.0 - '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2(cosmiconfig@7.0.1)(typescript@4.6.3) - chalk: 4.1.2 - cosmiconfig: 7.0.1 - lodash: 4.17.21 - resolve-from: 5.0.0 - typescript: 4.6.3 - dev: true - - /@commitlint/message@15.0.0: - resolution: {integrity: sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==} - engines: {node: '>=v12'} - dev: true - - /@commitlint/parse@15.0.0: - resolution: {integrity: sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/types': 15.0.0 - conventional-changelog-angular: 5.0.13 - conventional-commits-parser: 3.2.3 - dev: true - - /@commitlint/read@15.0.0: - resolution: {integrity: sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/top-level': 15.0.0 - '@commitlint/types': 15.0.0 - fs-extra: 10.0.1 - git-raw-commits: 2.0.10 - dev: true - - /@commitlint/resolve-extends@15.0.0: - resolution: {integrity: sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==} - engines: {node: '>=v12'} - dependencies: - import-fresh: 3.3.0 - lodash: 4.17.21 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - dev: true + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /@commitlint/rules@15.0.0: - resolution: {integrity: sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==} - engines: {node: '>=v12'} - dependencies: - '@commitlint/ensure': 15.0.0 - '@commitlint/message': 15.0.0 - '@commitlint/to-lines': 15.0.0 - '@commitlint/types': 15.0.0 - execa: 5.1.1 - dev: true + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' - /@commitlint/to-lines@15.0.0: - resolution: {integrity: sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==} - engines: {node: '>=v12'} - dev: true + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true - /@commitlint/top-level@15.0.0: - resolution: {integrity: sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==} - engines: {node: '>=v12'} - dependencies: - find-up: 5.0.0 - dev: true + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true - /@commitlint/types@15.0.0: - resolution: {integrity: sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==} - engines: {node: '>=v12'} - dependencies: - chalk: 4.1.2 - dev: true + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} - /@develar/schema-utils@2.6.5: - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - /@electron/get@1.14.1: - resolution: {integrity: sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==} - engines: {node: '>=8.6'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 9.6.0 - progress: 2.0.3 - semver: 6.3.0 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - global-tunnel-ng: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: true + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true - /@electron/universal@1.2.1: - resolution: {integrity: sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==} - engines: {node: '>=8.6'} - dependencies: - '@malept/cross-spawn-promise': 1.1.1 - asar: 3.1.0 - debug: 4.3.4(supports-color@9.2.1) - dir-compare: 2.4.0 - fs-extra: 9.1.0 - minimatch: 3.1.2 - plist: 3.0.5 - transitivePeerDependencies: - - supports-color - dev: true + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} - /@emmetio/abbreviation@2.2.3: - resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==} - dependencies: - '@emmetio/scanner': 1.0.0 - dev: true + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true - /@emmetio/css-abbreviation@2.1.4: - resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==} - dependencies: - '@emmetio/scanner': 1.0.0 - dev: true + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} - /@emmetio/scanner@1.0.0: - resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} - dev: true + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - /@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.1)(typescript@4.6.3): - resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} - engines: {node: '>=10.0.0'} + debounce-fn@4.0.0: + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - cosmiconfig: '>=6' - dependencies: - cosmiconfig: 7.0.1 - lodash.get: 4.4.2 - make-error: 1.3.6 - ts-node: 9.1.1(typescript@4.6.3) - tslib: 2.3.1 - transitivePeerDependencies: - - typescript - dev: true + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - /@eslint/eslintrc@1.0.5: - resolution: {integrity: sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@9.2.1) - espree: 9.2.0 - globals: 13.12.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - /@floating-ui/core@0.3.1: - resolution: {integrity: sha512-ensKY7Ub59u16qsVIFEo2hwTCqZ/r9oZZFh51ivcLGHfUwTn8l1Xzng8RJUe91H/UP8PeqeBronAGx0qmzwk2g==} - dev: false + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - /@floating-ui/dom@0.1.10: - resolution: {integrity: sha512-4kAVoogvQm2N0XE0G6APQJuCNuErjOfPW8Ux7DFxh8+AfugWflwVJ5LDlHOwrwut7z/30NUvdtHzQ3zSip4EzQ==} - dependencies: - '@floating-ui/core': 0.3.1 - dev: false + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} - /@gera2ld/jsx-dom@2.2.2: - resolution: {integrity: sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==} - dependencies: - '@babel/runtime': 7.23.1 - dev: false + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} - /@hapi/address@2.1.4: - resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==} - deprecated: Moved to 'npm install @sideway/address' - dev: true + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /@hapi/bourne@1.3.2: - resolution: {integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==} - deprecated: This version has been deprecated and is no longer supported or maintained - dev: true + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - /@hapi/hoek@8.5.1: - resolution: {integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==} - deprecated: This version has been deprecated and is no longer supported or maintained - dev: true + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} - /@hapi/joi@15.1.1: - resolution: {integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==} - deprecated: Switch to 'npm install joi' - dependencies: - '@hapi/address': 2.1.4 - '@hapi/bourne': 1.3.2 - '@hapi/hoek': 8.5.1 - '@hapi/topo': 3.1.6 - dev: true + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} - /@hapi/topo@3.1.6: - resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==} - deprecated: This version has been deprecated and is no longer supported or maintained - dependencies: - '@hapi/hoek': 8.5.1 - dev: true + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} - /@humanwhocodes/config-array@0.9.2: - resolution: {integrity: sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@9.2.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} - /@iconify/types@1.0.13: - resolution: {integrity: sha512-jrJJVPnRM1HsMDnuHRTzMfgiSG6Z1U/2IYI7s8spFu9c7n1q3jcXa+3/YQz4tJVNgAhzm1dbnMxfIAyLDpCaWg==} - dev: true + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - /@iconify/utils@1.0.26: - resolution: {integrity: sha512-Mz6l1fOGgdqLjoXNirmX6Zpc+DPcU4Xyns7oBWcHoTVRnZ2QuFbWMaGa9/FeYSoZwk5s14Vsl0wilmaToS9g9w==} - dependencies: - '@antfu/install-pkg': 0.1.0 - '@antfu/utils': 0.3.0 - '@iconify/types': 1.0.13 - debug: 4.3.4(supports-color@9.2.1) - kolorist: 1.5.1 - local-pkg: 0.4.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@iconscout/unicons@4.0.1: - resolution: {integrity: sha512-uMyaHfzfrc4Wd+n0EGsrSGqW/YB/7gZYro4fKhK+YjrG5GWn2bag+5Fj2yqnhjj0Wdc3nHQM6i6rjM7B5zNY3Q==} - dependencies: - async: 2.6.3 - axios: 0.21.4 - cheerio: 1.0.0-rc.10 - cross-env: 7.0.3 - fontello-cli: 0.6.2 - fs-plus: 3.1.1 - glob: 7.2.0 - insertion-query: 1.1.0 - lodash: 4.17.21 - parse-svg-path: 0.1.2 - scale-svg-path: 0.0.1 - serialize-svg-path: 0.1.0 - svgo: 1.1.1 - svgstore: 3.0.1 - uuid: 3.4.0 - transitivePeerDependencies: - - debug - - supports-color - dev: false + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} - /@interactjs/types@1.10.11: - resolution: {integrity: sha512-YRsVFWjL8Gkkvlx3qnjeaxW4fnibSJ9791g8BA7Pv5ANByI64WmtR1vU7A2rXcrOn8XvyCEfY0ss1s8NhZP+MA==} - dev: false + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} - /@josephg/resolvable@1.0.1: - resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} - dev: true + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true - /@jsdevtools/ez-spawn@3.0.4: - resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} - engines: {node: '>=10'} - dependencies: - call-me-maybe: 1.0.1 - cross-spawn: 7.0.3 - string-argv: 0.3.1 - type-detect: 4.0.8 + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} - /@malept/cross-spawn-promise@1.1.1: - resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} - engines: {node: '>= 10'} - dependencies: - cross-spawn: 7.0.3 - dev: true + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - /@malept/flatpak-bundler@0.4.0: - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - fs-extra: 9.1.0 - lodash: 4.17.21 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: true + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - /@masscode/json-server@0.18.0: - resolution: {integrity: sha512-5M2/42AevLRmlNvbTzD5EMzwegzgqJIju/LzmMVH1X0yoQzyHmi0aPdRoxSjEGByKXwN0JTPkUpj/D6ltn1TCg==} - engines: {node: '>=12'} - hasBin: true - dependencies: - body-parser: 1.20.0 - bumpp: 7.1.1 - chalk: 4.1.2 - compression: 1.7.4 - connect-pause: 0.1.1 - cors: 2.8.5 - errorhandler: 1.5.1 - express: 4.17.2 - express-urlrewrite: 1.4.0 - json-parse-helpfulerror: 1.0.3 - lodash: 4.17.21 - lodash-id: 0.14.1 - lowdb: 1.0.0 - method-override: 3.0.0 - morgan: 1.10.0 - nanoid: 3.3.2 - please-upgrade-node: 3.2.0 - pluralize: 8.0.0 - server-destroy: 1.0.1 - update-notifier: 5.1.0 - yargs: 17.3.1 - transitivePeerDependencies: - - supports-color - dev: false + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - /@mrmlnc/readdir-enhanced@2.2.1: - resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} - engines: {node: '>=4'} - dependencies: - call-me-maybe: 1.0.1 - glob-to-regexp: 0.3.0 - dev: true + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - /@node-ipc/js-queue@2.0.3: - resolution: {integrity: sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==} - engines: {node: '>=1.0.0'} - dependencies: - easy-stack: 1.0.1 - dev: true + dmg-builder@25.1.8: + resolution: {integrity: sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==} - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true - /@nodelib/fs.stat@1.1.3: - resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} - engines: {node: '>= 6'} - dev: true + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} - /@prettier/plugin-php@0.18.4(prettier@2.6.2): - resolution: {integrity: sha512-phnY20asLUpCSDXjCUN7FKGaZZTf1C+PSpTzGMOJ/UfIyD24sYJXCT8qqbcpp7rWI6ZsCsJiZcVnNmLFThx78Q==} - peerDependencies: - prettier: ^1.15.0 || ^2.0.0 - dependencies: - linguist-languages: 7.15.0 - mem: 8.1.1 - php-parser: 3.1.0-beta.5 - prettier: 2.6.2 - dev: false + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} - /@prettier/plugin-pug@2.0.0(prettier@2.6.2): - resolution: {integrity: sha512-NCZ2/aBpl2IKxoiOfT55NJjQXsRmFkhTHT4o54VmxwIzgiAu5BbRdNsROdbgm0YG7ocTnfG3aKcjI+6S866wfQ==} - engines: {node: '>=14.6.0', npm: '>=6.0.0'} - peerDependencies: - prettier: ^2.3.0 - dependencies: - prettier: 2.6.2 - pug-lexer: 5.0.1 - dev: false + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} - /@prettier/plugin-xml@2.1.0: - resolution: {integrity: sha512-gmmvjwOh6GcJ4yTr4L0IVWwUrML/P1xHotwAMlY8hTIHYcmaRzeJKou8omvAaYsjMXWXxfBP7ge0meadDStn+g==} - dependencies: - '@xml-tools/parser': 1.0.11 - prettier: 2.6.2 - dev: false + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} - dev: true + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: true + electron-builder-squirrel-windows@25.1.8: + resolution: {integrity: sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==} - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: true + electron-builder@25.1.8: + resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==} + engines: {node: '>=14.0.0'} + hasBin: true - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=} - dev: true + electron-publish@25.1.7: + resolution: {integrity: sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==} - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=} - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: true + electron-store@8.2.0: + resolution: {integrity: sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw==} - /@protobufjs/float@1.0.2: - resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} - dev: true + electron-to-chromium@1.5.95: + resolution: {integrity: sha512-XNsZaQrgQX+BG37BRQv+E+HcOZlWhqYaDoVVNCws/WrYYdbGrkR1qCDJ2mviBF3flCs6/BTa4O7ANfFTFZk6Dg==} - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=} - dev: true + electron@34.1.1: + resolution: {integrity: sha512-1aDYk9Gsv1/fFeClMrxWGoVMl7uCUgl1pe26BiTnLXmAoqEXCa3f3sCKFWV+cuDzUjQGAZcpkWhGYTgWUSQrLA==} + engines: {node: '>= 12.20.55'} + hasBin: true - /@protobufjs/path@1.1.2: - resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} - dev: true + electronmon@2.0.3: + resolution: {integrity: sha512-vpsNupi9sCzOCvx8GACbSHKEImkNF2a6pU5Io2yabARbJeQ/8ZuY7t/43LilF6Qw0nZ0MbKQt4sO3x0F3drpQQ==} + engines: {node: '>=10.0.0'} + hasBin: true - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} - dev: true + elysia@1.2.15: + resolution: {integrity: sha512-/oUSNb83jIWAGi6uSmbQ7Uy0RSJ9NimbVToSLnYS8jjsGId3zgdHqprsdf4rIMInOmEM8skjsFhZ4x8C5AB6+w==} + peerDependencies: + '@sinclair/typebox': '>= 0.34.0' + openapi-types: '>= 12.0.0' + typescript: '>= 5.0.0' + peerDependenciesMeta: + openapi-types: + optional: true + typescript: + optional: true - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=} - dev: true + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - /@rollup/pluginutils@4.2.0: - resolution: {integrity: sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /@sindresorhus/is@0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - /@sindresorhus/is@0.7.0: - resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} - engines: {node: '>=4'} - dev: true + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - /@sipec/vue3-tags-input@3.0.4(vue@3.2.33): - resolution: {integrity: sha512-zE4OiFkWvlvvGT3FZQ9hRrvJW935VPW0fe4K03SxM5Q/UQZMqph763UHXTuyK1orWNQMTbDx9tKPLIMZTiDXLA==} - peerDependencies: - vue: 3.x - dependencies: - vue: 3.2.33 - dev: false + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - /@socket.io/base64-arraybuffer@1.0.2: - resolution: {integrity: sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==} - engines: {node: '>= 0.6.0'} - dev: true + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} - /@socket.io/component-emitter@3.0.0: - resolution: {integrity: sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==} - dev: true + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} - /@szmarczak/http-timer@1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - dependencies: - defer-to-connect: 1.1.3 - /@toml-tools/lexer@0.3.1: - resolution: {integrity: sha512-CCKHQb5OWpgFu47MQ2rcql4AnE9GaehNk/c1oJOyOBovED6XmdzQPXsvPSu+NJ9lToqJNoX+nLXQsB8WyQGdzQ==} - dependencies: - chevrotain: 4.1.1 - dev: false + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} - /@toml-tools/parser@0.3.1: - resolution: {integrity: sha512-vadwVx5TkgByt19dbp/rfIUKPkDdn5werANYvziiGK9wHlqPA0BWnvOloQw/dPDxF31+Ag0+zarXJpPDdRsPPg==} - dependencies: - '@toml-tools/lexer': 0.3.1 - chevrotain: 4.1.1 - dev: false + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - /@tsconfig/node14@1.0.1: - resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} - dev: true + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} - /@types/accepts@1.3.5: - resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} - dependencies: - '@types/node': 17.0.45 - dev: true + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - /@types/body-parser@1.19.0: - resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 17.0.45 - dev: true + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - /@types/codemirror@5.60.5: - resolution: {integrity: sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==} - dependencies: - '@types/tern': 0.23.4 - dev: true + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true - /@types/component-emitter@1.2.11: - resolution: {integrity: sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==} - dev: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 17.0.45 - dev: true + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} - /@types/content-disposition@0.5.4: - resolution: {integrity: sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==} - dev: true + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - dev: true + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} - /@types/cookies@0.7.7: - resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} - dependencies: - '@types/connect': 3.4.35 - '@types/express': 4.17.13 - '@types/keygrip': 1.0.2 - '@types/node': 17.0.45 - dev: true + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-compat-utils@0.6.4: + resolution: {integrity: sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' - /@types/cors@2.8.10: - resolution: {integrity: sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==} - dev: true + eslint-config-flat-gitignore@1.0.1: + resolution: {integrity: sha512-wjBmJ8TAb67G2or/gBp/H62uCIkDCjpCmlGPSG41/7QagUjMgh+iegVB3gY8eNYhTAmecjKtclT4wGAjHz5yWA==} + peerDependencies: + eslint: ^9.5.0 - /@types/cors@2.8.12: - resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} - dev: true + eslint-flat-config-utils@1.1.0: + resolution: {integrity: sha512-W49wz7yQJGRfg4QSV3nwdO/fYcWetiSKhLV5YykfQMcqnIATNpoS7EPdINhLB9P3fmdjNmFtOgZjiKnCndWAnw==} - /@types/crypto-js@4.1.2: - resolution: {integrity: sha512-t33RNmTu5ufG/sorROIafiCVJMx3jz95bXUMoPAZcUD14fxMXnuTzqzXZoxpR0tNx2xpw11Dlmem9vGCsrSOfA==} - dev: true + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - /@types/d3-array@3.0.8: - resolution: {integrity: sha512-2xAVyAUgaXHX9fubjcCbGAUOqYfRJN1em1EKR2HfzWBpObZhwfnZKvofTN4TplMqJdFQao61I+NVSai/vnBvDQ==} - dev: false + eslint-json-compat-utils@0.2.1: + resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} + engines: {node: '>=12'} + peerDependencies: + '@eslint/json': '*' + eslint: '*' + jsonc-eslint-parser: ^2.4.0 + peerDependenciesMeta: + '@eslint/json': + optional: true - /@types/d3-axis@3.0.4: - resolution: {integrity: sha512-ySnjI/7qm+J602VjcejXcqs1hEuu5UBbGaJGp+Cn/yKVc1iS3JueLVpToGdQsS2sqta7tqA/kG4ore/+LH90UA==} - dependencies: - '@types/d3-selection': 3.0.7 - dev: false + eslint-merge-processors@1.0.0: + resolution: {integrity: sha512-4GybyHmhXtT7/W8RAouQzNM0791sYasJCTYHIAYjuiJvbNFY0jMKkoESREhX+mjX37dxiN6v4EqhZ1nc0tJF7A==} + peerDependencies: + eslint: '*' - /@types/d3-brush@3.0.4: - resolution: {integrity: sha512-Kg5uIsdJNMCs5lTqeZFsTKqj9lBvpiFRDkYN3j2CDlPhonNDg9/gXVpv1E/MKh3tEqArryIj9o6RBGE/MQe+6Q==} - dependencies: - '@types/d3-selection': 3.0.7 - dev: false + eslint-plugin-antfu@2.7.0: + resolution: {integrity: sha512-gZM3jq3ouqaoHmUNszb1Zo2Ux7RckSvkGksjLWz9ipBYGSv1EwwBETN6AdiUXn+RpVHXTbEMPAPlXJazcA6+iA==} + peerDependencies: + eslint: '*' - /@types/d3-chord@3.0.4: - resolution: {integrity: sha512-p4PvN1N+7GL3Y/NI9Ug1TKwowUV6h664kmxL79ctp1HRYCk1mhP0+SXhjRsoWXCdnJfbLLLmpV99rt8dMrHrzg==} - dev: false + eslint-plugin-command@2.1.0: + resolution: {integrity: sha512-S3gvDSCRHLdRG7NYaevLvGA0g/txOju7NEB2di7SE80NtbCwsvpi/fft045YuTZpOzqCRUfuye39raldmpXXYQ==} + peerDependencies: + eslint: '*' - /@types/d3-color@3.1.1: - resolution: {integrity: sha512-CSAVrHAtM9wfuLJ2tpvvwCU/F22sm7rMHNN+yh9D6O6hyAms3+O0cgMpC1pm6UEUMOntuZC8bMt74PteiDUdCg==} - dev: false + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' - /@types/d3-contour@3.0.4: - resolution: {integrity: sha512-B0aeX8Xg3MNUglULxqDvlgY1SVXuN2xtEleYSAY0iMhl/SMVT7snzgAveejjwM3KaWuNXIoXEJ7dmXE8oPq/jA==} - dependencies: - '@types/d3-array': 3.0.8 - '@types/geojson': 7946.0.11 - dev: false + eslint-plugin-import-x@4.6.1: + resolution: {integrity: sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 - /@types/d3-delaunay@6.0.2: - resolution: {integrity: sha512-WplUJ/OHU7eITneDqNnzK+2pgR+WDzUHG6XAUVo+oWHPQq74VcgUdw8a4ODweaZzF56OVYK+x9GxCyuq6hSu1A==} - dev: false + eslint-plugin-jsdoc@50.6.3: + resolution: {integrity: sha512-NxbJyt1M5zffPcYZ8Nb53/8nnbIScmiLAMdoe0/FAszwb7lcSiX3iYBTsuF7RV84dZZJC8r3NghomrUXsmWvxQ==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - /@types/d3-dispatch@3.0.4: - resolution: {integrity: sha512-NApHpGHRNxUy7e2Lfzl/cwOucmn4Xdx6FdmXzAoomo8T81LyGmlBjjko/vP0TVzawlvEFLDq8OCRLulW6DDzKw==} - dev: false + eslint-plugin-jsonc@2.19.1: + resolution: {integrity: sha512-MmlAOaZK1+Lg7YoCZPGRjb88ZjT+ct/KTsvcsbZdBm+w8WMzGx+XEmexk0m40P1WV9G2rFV7X3klyRGRpFXEjA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' - /@types/d3-drag@3.0.4: - resolution: {integrity: sha512-/t53K1erTuUbP7WIX9SE0hlmytpTYRbIthlhbGkBHzCV5vPO++7yrk8OlisWPyIJO5TGowTmqCtGH2tokY5T/g==} - dependencies: - '@types/d3-selection': 3.0.7 - dev: false + eslint-plugin-n@17.15.1: + resolution: {integrity: sha512-KFw7x02hZZkBdbZEFQduRGH4VkIH4MW97ClsbAM4Y4E6KguBJWGfWG1P4HEIpZk2bkoWf0bojpnjNAhYQP8beA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' - /@types/d3-dsv@3.0.4: - resolution: {integrity: sha512-YxfUVJ55HxR8oq88136w09mBMPNhgH7PZjteq72onWXWOohGif/cLQnQv8V4A5lEGjXF04LhwSTpmzpY9wyVyA==} - dev: false + eslint-plugin-no-only-tests@3.3.0: + resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} + engines: {node: '>=5.0.0'} - /@types/d3-ease@3.0.0: - resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} - dev: false + eslint-plugin-perfectionist@4.8.0: + resolution: {integrity: sha512-ZF04IAPGItYMlj9xjgvvl/QpksZf79g0dkxbNcuxDjbcUSZ4CwucJ7h5Yzt5JuHe+i6igQbUYEp40j4ndfbvWQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + eslint: '>=8.0.0' - /@types/d3-fetch@3.0.4: - resolution: {integrity: sha512-RleYajubALkGjrvatxWhlygfvB1KNF0Uzz9guRUeeA+M/2B7l8rxObYdktaX9zU1st04lMCHjZWe4vbl+msH2Q==} - dependencies: - '@types/d3-dsv': 3.0.4 - dev: false + eslint-plugin-regexp@2.7.0: + resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} + engines: {node: ^18 || >=20} + peerDependencies: + eslint: '>=8.44.0' - /@types/d3-force@3.0.6: - resolution: {integrity: sha512-G9wbOvCxkNlLrppoHLZ6oFpbm3z7ibfkXwLD8g5/4Aa7iTEV0Z7TQ0OL8UxAtvdOhCa2VZcSuqn1NQqyCEqmiw==} - dev: false + eslint-plugin-toml@0.12.0: + resolution: {integrity: sha512-+/wVObA9DVhwZB1nG83D2OAQRrcQZXy+drqUnFJKymqnmbnbfg/UPmEMCKrJNcEboUGxUjYrJlgy+/Y930mURQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' - /@types/d3-format@3.0.2: - resolution: {integrity: sha512-9oQWvKk2qVBo49FQq8yD/et8Lx0W5Ac2FdGSOUecqOFKqh0wkpyHqf9Qc7A06ftTR+Lz13Pi3jHIQis0aCueOA==} - dev: false + eslint-plugin-unicorn@56.0.1: + resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' - /@types/d3-geo@3.0.5: - resolution: {integrity: sha512-ysEEU93Wv9p2UZBxTK3kUP7veHgyhTA0qYtI7bxK5EMXb3JxGv0D4IH54PxprAF26n+uHci24McVmzwIdLgvgQ==} - dependencies: - '@types/geojson': 7946.0.11 - dev: false - - /@types/d3-hierarchy@3.1.4: - resolution: {integrity: sha512-wrvjpRFdmEu6yAqgjGy8MSud9ggxJj+I9XLuztLeSf/E0j0j6RQYtxH2J8U0Cfbgiw9ZDHyhpmaVuWhxscYaAQ==} - dev: false - - /@types/d3-interpolate@3.0.2: - resolution: {integrity: sha512-zAbCj9lTqW9J9PlF4FwnvEjXZUy75NQqPm7DMHZXuxCFTpuTrdK2NMYGQekf4hlasL78fCYOLu4EE3/tXElwow==} - dependencies: - '@types/d3-color': 3.1.1 - dev: false - - /@types/d3-path@3.0.0: - resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==} - dev: false - - /@types/d3-polygon@3.0.0: - resolution: {integrity: sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==} - dev: false - - /@types/d3-quadtree@3.0.3: - resolution: {integrity: sha512-GDWaR+rGEk4ToLQSGugYnoh9AYYblsg/8kmdpa1KAJMwcdZ0v8rwgnldURxI5UrzxPlCPzF7by/Tjmv+Jn21Dg==} - dev: false - - /@types/d3-random@3.0.1: - resolution: {integrity: sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==} - dev: false - - /@types/d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} - dev: false + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true - /@types/d3-scale@4.0.5: - resolution: {integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==} - dependencies: - '@types/d3-time': 3.0.1 - dev: false - - /@types/d3-selection@3.0.7: - resolution: {integrity: sha512-qoj2O7KjfqCobmtFOth8FMvjwMVPUAAmn6xiUbLl1ld7vQCPgffvyV5BBcEFfqWdilAUm+3zciU/3P3vZrUMlg==} - dev: false - - /@types/d3-shape@3.1.3: - resolution: {integrity: sha512-cHMdIq+rhF5IVwAV7t61pcEXfEHsEsrbBUPkFGBwTXuxtTAkBBrnrNA8++6OWm3jwVsXoZYQM8NEekg6CPJ3zw==} - dependencies: - '@types/d3-path': 3.0.0 - dev: false - - /@types/d3-time-format@4.0.1: - resolution: {integrity: sha512-Br6EFeu9B1Zrem7KaYbr800xCmEDyq8uE60kEU8rWhC/XpFYX6ocGMZuRJDQfFCq6SyakQxNHFqIfJbFLf4x6Q==} - dev: false - - /@types/d3-time@3.0.1: - resolution: {integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==} - dev: false - - /@types/d3-timer@3.0.0: - resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} - dev: false - - /@types/d3-transition@3.0.5: - resolution: {integrity: sha512-dcfjP6prFxj3ziFOJrnt4W2P0oXNj/sGxsJXH8286sHtVZ4qWGbjuZj+RRCYx4YZ4C0izpeE8OqXVCtoWEtzYg==} - dependencies: - '@types/d3-selection': 3.0.7 - dev: false - - /@types/d3-zoom@3.0.5: - resolution: {integrity: sha512-mIefdTLtxuWUWTbBupCUXPAXVPmi8/Uwrq41gQpRh0rD25GMU1ku+oTELqNY2NuuiI0F3wXC5e1liBQi7YS7XQ==} - dependencies: - '@types/d3-interpolate': 3.0.2 - '@types/d3-selection': 3.0.7 - dev: false - - /@types/d3@7.4.1: - resolution: {integrity: sha512-lBpYmbHTCtFKO1DB1R7E9dXp9/g1F3JXSGOF7iKPZ+wRmYg/Q6tCRHODGOc5Qk25fJRe2PI60EDRf2HLPUncMA==} - dependencies: - '@types/d3-array': 3.0.8 - '@types/d3-axis': 3.0.4 - '@types/d3-brush': 3.0.4 - '@types/d3-chord': 3.0.4 - '@types/d3-color': 3.1.1 - '@types/d3-contour': 3.0.4 - '@types/d3-delaunay': 6.0.2 - '@types/d3-dispatch': 3.0.4 - '@types/d3-drag': 3.0.4 - '@types/d3-dsv': 3.0.4 - '@types/d3-ease': 3.0.0 - '@types/d3-fetch': 3.0.4 - '@types/d3-force': 3.0.6 - '@types/d3-format': 3.0.2 - '@types/d3-geo': 3.0.5 - '@types/d3-hierarchy': 3.1.4 - '@types/d3-interpolate': 3.0.2 - '@types/d3-path': 3.0.0 - '@types/d3-polygon': 3.0.0 - '@types/d3-quadtree': 3.0.3 - '@types/d3-random': 3.0.1 - '@types/d3-scale': 4.0.5 - '@types/d3-scale-chromatic': 3.0.0 - '@types/d3-selection': 3.0.7 - '@types/d3-shape': 3.1.3 - '@types/d3-time': 3.0.1 - '@types/d3-time-format': 4.0.1 - '@types/d3-timer': 3.0.0 - '@types/d3-transition': 3.0.5 - '@types/d3-zoom': 3.0.5 - dev: false - - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} - dependencies: - '@types/ms': 0.7.31 - dev: true - - /@types/dom-to-image@2.6.4: - resolution: {integrity: sha512-UddUdGF1qulrSDulkz3K2Ypq527MR6ixlgAzqLbxSiQ0icx0XDlIV+h4+edmjq/1dqn0KgN0xGSe1kI9t+vGuw==} - dev: true - - /@types/ejs@2.7.0: - resolution: {integrity: sha512-kM2g9Fdk/du24fKuuQhA/LBleFR4Z4JP2MVKpLxQQSzofF1uJ06D+c05zfLDAkkDO55aEeNwJih0gHrE/Ci20A==} - dev: true - - /@types/eslint-scope@3.7.3: - resolution: {integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==} - dependencies: - '@types/eslint': 8.4.1 - '@types/estree': 0.0.51 - dev: true - - /@types/eslint@8.4.1: - resolution: {integrity: sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==} - dependencies: - '@types/estree': 0.0.51 - '@types/json-schema': 7.0.10 - dev: true - - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true - - /@types/express-serve-static-core@4.17.28: - resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} - dependencies: - '@types/node': 17.0.45 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: true - - /@types/express@4.17.13: - resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} - dependencies: - '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.28 - '@types/qs': 6.9.7 - '@types/serve-static': 1.13.10 - dev: true - - /@types/fs-capacitor@2.0.0: - resolution: {integrity: sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==} - dependencies: - '@types/node': 17.0.45 - dev: true - - /@types/fs-extra@9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - dependencies: - '@types/node': 17.0.45 - dev: true + eslint-plugin-vue@9.32.0: + resolution: {integrity: sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - /@types/geojson@7946.0.11: - resolution: {integrity: sha512-L7A0AINMXQpVwxHJ4jxD6/XjZ4NDufaRlUJHjNIFKYUFBH1SvOW+neaqb0VTRSLW5suSrSu19ObFEFnfNcr+qg==} - dev: false + eslint-plugin-yml@1.16.0: + resolution: {integrity: sha512-t4MNCetPjTn18/fUDlQ/wKkcYjnuLYKChBrZ0qUaNqRigVqChHWzTP8SrfFi5s4keX3vdlkWRSu8zHJMdKwxWQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 17.0.22 - dev: true + eslint-processor-vue-blocks@1.0.0: + resolution: {integrity: sha512-q+Wn9bCml65NwYtuINVCE5dUqZa/uVoY4jfc8qEDwWbcGqdRyfJJmAONNZsreA4Q9EJqjYGjk8Hk1QuwAktgkw==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: ^8.50.0 || ^9.0.0 - /@types/http-assert@1.5.3: - resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} - dev: true + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@types/http-errors@1.8.2: - resolution: {integrity: sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==} - dev: true + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@types/i18next-fs-backend@1.1.2: - resolution: {integrity: sha512-ZzTRXA5B0x0oGhzKNp08IsYjZpli4LjRZpg3q4j0XFxN5lKG2MVLnR4yHX8PPExBk4sj9Yfk1z9O6CjPrAlmIQ==} - dependencies: - i18next: 21.8.14 - dev: true + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@types/inquirer@6.5.0: - resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} - dependencies: - '@types/through': 0.0.30 - rxjs: 6.6.7 - dev: true + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@types/jscodeshift@0.7.2: - resolution: {integrity: sha512-k4ih8ayQ65e26vhCxeMTKtZ808DzC0RFQ4unBvPEy9bcFhS4aPm3oXgWWZNmZ4u+H2WzHQDCNrRC5iNX+afiZw==} - dependencies: - ast-types: 0.12.1 - recast: 0.17.2 - dev: true + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - /@types/json-schema@7.0.10: - resolution: {integrity: sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==} - dev: true + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@types/json5@0.0.29: - resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} - dev: true + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@types/keygrip@1.0.2: - resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} - dev: true + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.45 + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} - /@types/koa-compose@3.2.5: - resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} - dependencies: - '@types/koa': 2.13.4 - dev: true + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} - /@types/koa@2.13.4: - resolution: {integrity: sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==} - dependencies: - '@types/accepts': 1.3.5 - '@types/content-disposition': 0.5.4 - '@types/cookies': 0.7.7 - '@types/http-assert': 1.5.3 - '@types/http-errors': 1.8.2 - '@types/keygrip': 1.0.2 - '@types/koa-compose': 3.2.5 - '@types/node': 17.0.45 - dev: true + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - /@types/lodash@4.14.180: - resolution: {integrity: sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==} - dev: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - /@types/long@4.0.2: - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - dev: true + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} - /@types/lowdb@1.0.11: - resolution: {integrity: sha512-h99VMxvTuz+VsXUVCCJo4dsps4vbkXwvU71TpmxDoiBU24bJ0VBygIHgmMm+UPoQIFihmV6euRik4z8J7XDJWg==} - dependencies: - '@types/lodash': 4.14.180 - dev: true + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - /@types/marked@4.0.3: - resolution: {integrity: sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==} - dev: true + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} - /@types/mermaid@8.2.9: - resolution: {integrity: sha512-f1i8fNoVFVJXedk+R7GcEk4KoOWzWAU3CzFqlVw1qWKktfsataBERezCz1pOdKy8Ec02ZdPQXGM7NU2lPHABYQ==} - dev: true + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: true + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: true + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true - /@types/minimist@1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: true + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: true + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /@types/node@10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - dev: true + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} - /@types/node@14.18.2: - resolution: {integrity: sha512-fqtSN5xn/bBzDxMT77C1rJg6CsH/R49E7qsGuvdPJa20HtV5zSTuLJPNfnlyVH3wauKnkHdLggTVkOW/xP9oQg==} - dev: true + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /@types/node@17.0.22: - resolution: {integrity: sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw==} - dev: true + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /@types/node@17.0.45: - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + fast-plist@0.1.3: + resolution: {integrity: sha512-d9cEfo/WcOezgPLAC/8t8wGb6YOD6JTCPMw2QcG2nAdFmyY+9rTUizCTaGjIZAloWENTEUMAPpkUAIJJJ0i96A==} - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - /@types/parse-json@4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} - /@types/plist@3.0.2: - resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==} - requiresBuild: true - dependencies: - '@types/node': 17.0.45 - xmlbuilder: 15.1.1 - dev: true - optional: true + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - /@types/prettier@2.6.0: - resolution: {integrity: sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==} - dev: true + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - /@types/q@1.5.5: - resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} - dev: false + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 17.0.45 + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} - /@types/sanitize-html@2.6.2: - resolution: {integrity: sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==} - dependencies: - htmlparser2: 6.1.0 - dev: true + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} - /@types/serve-static@1.13.10: - resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 17.0.45 - dev: true + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} - /@types/tern@0.23.4: - resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} - dependencies: - '@types/estree': 0.0.51 - dev: true + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} - /@types/throttle-debounce@2.1.0: - resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} - dev: true + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} - /@types/through@0.0.30: - resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} - dependencies: - '@types/node': 17.0.22 - dev: true + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} - /@types/universal-analytics@0.4.5: - resolution: {integrity: sha512-Opb+Un786PS3te24VtJR/QPmX00P/pXaJQtLQYJklQefP4xP0Ic3mPc2z6SDz97OrITzR+RHTBEwjtNRjZ/nLQ==} - dev: false + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - /@types/uuid@9.0.4: - resolution: {integrity: sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==} - dev: true + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} - /@types/verror@1.10.5: - resolution: {integrity: sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==} - requiresBuild: true - dev: true - optional: true + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} - /@types/webpack@5.28.0: - resolution: {integrity: sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w==} - dependencies: - '@types/node': 17.0.22 - tapable: 2.2.1 - webpack: 5.70.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - dev: true + formidable@3.5.2: + resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 17.0.45 - dev: true + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - dev: true + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - /@types/yargs@17.0.10: - resolution: {integrity: sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==} - dependencies: - '@types/yargs-parser': 21.0.0 - dev: true + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} - /@typescript-eslint/eslint-plugin@5.8.0(@typescript-eslint/parser@5.8.0)(eslint@8.5.0)(typescript@4.5.4): - resolution: {integrity: sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/experimental-utils': 5.8.0(eslint@8.5.0)(typescript@4.5.4) - '@typescript-eslint/parser': 5.8.0(eslint@8.5.0)(typescript@4.5.4) - '@typescript-eslint/scope-manager': 5.8.0 - debug: 4.3.4(supports-color@9.2.1) - eslint: 8.5.0 - functional-red-black-tree: 1.0.1 - ignore: 5.2.0 - regexpp: 3.2.0 - semver: 7.3.5 - tsutils: 3.21.0(typescript@4.5.4) - typescript: 4.5.4 - transitivePeerDependencies: - - supports-color - dev: true + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} - /@typescript-eslint/experimental-utils@5.8.0(eslint@8.5.0)(typescript@4.5.4): - resolution: {integrity: sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.10 - '@typescript-eslint/scope-manager': 5.8.0 - '@typescript-eslint/types': 5.8.0 - '@typescript-eslint/typescript-estree': 5.8.0(typescript@4.5.4) - eslint: 8.5.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.5.0) - transitivePeerDependencies: - - supports-color - - typescript - dev: true + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} - /@typescript-eslint/parser@5.8.0(eslint@8.5.0)(typescript@4.5.4): - resolution: {integrity: sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.8.0 - '@typescript-eslint/types': 5.8.0 - '@typescript-eslint/typescript-estree': 5.8.0(typescript@4.5.4) - debug: 4.3.4(supports-color@9.2.1) - eslint: 8.5.0 - typescript: 4.5.4 - transitivePeerDependencies: - - supports-color - dev: true + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} - /@typescript-eslint/scope-manager@5.8.0: - resolution: {integrity: sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.8.0 - '@typescript-eslint/visitor-keys': 5.8.0 - dev: true + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} - /@typescript-eslint/types@5.8.0: - resolution: {integrity: sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /@typescript-eslint/typescript-estree@5.8.0(typescript@4.5.4): - resolution: {integrity: sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.8.0 - '@typescript-eslint/visitor-keys': 5.8.0 - debug: 4.3.4(supports-color@9.2.1) - globby: 11.0.4 - is-glob: 4.0.3 - semver: 7.3.5 - tsutils: 3.21.0(typescript@4.5.4) - typescript: 4.5.4 - transitivePeerDependencies: - - supports-color - dev: true + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - /@typescript-eslint/visitor-keys@5.8.0: - resolution: {integrity: sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.8.0 - eslint-visitor-keys: 3.1.0 - dev: true + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /@vitejs/plugin-vue@2.3.1(vite@2.9.6)(vue@3.2.33): - resolution: {integrity: sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - vite: ^2.5.10 - vue: ^3.2.25 - dependencies: - vite: 2.9.6(sass@1.45.1) - vue: 3.2.33 - dev: true - - /@volar/code-gen@0.30.6: - resolution: {integrity: sha512-odkXN91QCS/KRKPk4eUQp7jkN0PuYLwDuJZwGiDDJrZWUCCSdEvSj7e+Cjk7Q7doX0G9WAF88BL7ozcjzrtiKw==} - dependencies: - '@volar/shared': 0.30.6 - '@volar/source-map': 0.30.6 - dev: true - - /@volar/html2pug@0.30.6: - resolution: {integrity: sha512-mPRQCRa/Nse0bC1wxJ+K7q/Ou0Wg+220qL3nPI3mqwSn0KECOAPsZxaVHRFauY4MeBxO2sOzkOvFfQLk8whJ1g==} - deprecated: 'WARNING: This project has been renamed to @johnsoncodehk/html2pug. Install using @johnsoncodehk/html2pug instead.' - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - htmlparser2: 7.2.0 - pug: 3.0.2 - dev: true - - /@volar/shared@0.30.6: - resolution: {integrity: sha512-YJa7kl2HRkSZaETBPCVEm/ZVXPBpt1aAlCxNuj55GaCHhcabOVj2oCBZioJLiwAvSR0e6k6KjbJBcKTuKrP9bw==} - dependencies: - upath: 2.0.1 - vscode-html-languageservice: 4.2.5 - vscode-jsonrpc: 8.0.0-next.8 - vscode-uri: 3.0.3 - dev: true - - /@volar/source-map@0.30.6: - resolution: {integrity: sha512-B0KLi0StdM3KsMLA+iK5pdE+mokukio7r0EkOMUAYZN/xn/kGWkKIdleJjLtgmtH2tw4kBz/5hP+KKEOlD3Etg==} - dependencies: - '@volar/shared': 0.30.6 - vscode-languageserver-textdocument: 1.0.4 - dev: true - - /@volar/transforms@0.30.6: - resolution: {integrity: sha512-jbVBXOBOeKc6Rb7dzyiq5b+FfYsXFWGFLLDZok5U+JoFujxoPfn5HwX9A3t+RW/NRwQkZxrdiPmW8b69B5nMKQ==} - dependencies: - '@volar/shared': 0.30.6 - vscode-languageserver-types: 3.17.0-next.10 - dev: true - - /@volar/vue-code-gen@0.30.6: - resolution: {integrity: sha512-UGpbOuC5ZxT2GXvkq2IWUuca9IDJVaaywWparKW0SwPFOZaMM2ivHLOfQpiuPqDUKTZLGK3fQuBWuXSTl+GIbA==} - dependencies: - '@volar/code-gen': 0.30.6 - '@volar/shared': 0.30.6 - '@volar/source-map': 0.30.6 - '@vue/compiler-core': 3.2.33 - '@vue/compiler-dom': 3.2.33 - '@vue/shared': 3.2.33 - upath: 2.0.1 - dev: true - - /@vscode/emmet-helper@2.8.4: - resolution: {integrity: sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==} - dependencies: - emmet: 2.3.6 - jsonc-parser: 2.3.1 - vscode-languageserver-textdocument: 1.0.4 - vscode-languageserver-types: 3.16.0 - vscode-nls: 5.0.1 - vscode-uri: 2.1.2 - dev: true - - /@vue/cli-shared-utils@4.5.17: - resolution: {integrity: sha512-VoFNdxvTW4vZu3ne+j1Mf7mU99J2SAoRVn9XPrsouTUUJablglM8DASk7Ixhsh6ymyL/W9EADQFR6Pgj8Ujjuw==} - dependencies: - '@achrinza/node-ipc': 9.2.2 - '@hapi/joi': 15.1.1 - chalk: 2.4.2 - execa: 1.0.0 - launch-editor: 2.3.0 - lru-cache: 5.1.1 - open: 6.4.0 - ora: 3.4.0 - read-pkg: 5.2.0 - request: 2.88.2 - semver: 6.3.0 - strip-ansi: 6.0.1 - dev: true + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. - /@vue/cli-ui-addon-webpack@4.5.17: - resolution: {integrity: sha512-AZMnDzToM2uxW/73mfjJweea3atC5sxOC3Nel5UEFnQK0hWN0/8NW6nPAiKDc+kJpZWFb7Y6ReP2hwYizUJK2w==} - dev: true + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} - /@vue/cli-ui-addon-widgets@4.5.17: - resolution: {integrity: sha512-K49weNsBggUL54Etdqml0hR3PpNzQSXUxC0G52qGNuZwPPxpZfZSQIH8GQ4jBTS8ySXmQYDT99DyxKSedE7McQ==} - dev: true + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} - /@vue/cli-ui@4.5.17: - resolution: {integrity: sha512-x5o+RUNkPLO6wDNY5/Sec9ZuZExzARU8KkP2SwM2SWLirkjKgLVvyL4/snAIWwRLxsxXVuyZ8YJdqnWidixzCg==} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - dependencies: - '@achrinza/node-ipc': 9.2.2 - '@akryum/winattr': 3.0.0 - '@vue/cli-shared-utils': 4.5.17 - apollo-server-express: 2.25.3(graphql@14.7.0) - clone: 2.1.2 - deepmerge: 4.2.2 - express: 4.18.0 - express-history-api-fallback: 2.2.1 - fkill: 6.2.0 - fs-extra: 7.0.1 - globby: 9.2.0 - graphql: 14.7.0 - graphql-subscriptions: 1.2.1(graphql@14.7.0) - graphql-tag: 2.12.6(graphql@14.7.0) - graphql-type-json: 0.3.2(graphql@14.7.0) - javascript-stringify: 1.6.0 - js-yaml: 3.14.1 - lodash.merge: 4.6.2 - lowdb: 1.0.0 - lru-cache: 5.1.1 - node-notifier: 9.0.1 - parse-git-config: 2.0.3 - portfinder: 1.0.28 - prismjs: 1.28.0 - rss-parser: 3.12.0 - shortid: 2.2.16 - typescript: 4.1.6 - watch: 1.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /@vue/cli@4.5.17: - resolution: {integrity: sha512-73nK2o/o7Wk9myPySdjxpMzABLynGmnQbJ5wz3CJ9SFrss8Y2LwLAnzlO77mr3uA2nFPdTJbkbUcZlvBWCVSrA==} - engines: {node: '>=8.9'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + giget@1.2.4: + resolution: {integrity: sha512-Wv+daGyispVoA31TrWAVR+aAdP7roubTPEM/8JzRnqXhLbdJH0T9eQyXVFF8fjk3WKTsctII6QcyxILYgNp2DA==} hasBin: true - dependencies: - '@types/ejs': 2.7.0 - '@types/inquirer': 6.5.0 - '@vue/cli-shared-utils': 4.5.17 - '@vue/cli-ui': 4.5.17 - '@vue/cli-ui-addon-webpack': 4.5.17 - '@vue/cli-ui-addon-widgets': 4.5.17 - boxen: 4.2.0 - cmd-shim: 3.0.3 - commander: 2.20.3 - debug: 4.3.4(supports-color@9.2.1) - deepmerge: 4.2.2 - download-git-repo: 3.0.2 - ejs: 2.7.4 - envinfo: 7.8.1 - fs-extra: 7.0.1 - globby: 9.2.0 - import-global: 0.1.0 - ini: 1.3.8 - inquirer: 7.3.3 - isbinaryfile: 4.0.8 - javascript-stringify: 1.6.0 - js-yaml: 3.14.1 - leven: 3.1.0 - lodash.clonedeep: 4.5.0 - lru-cache: 5.1.1 - minimist: 1.2.5 - recast: 0.18.10 - resolve: 1.22.0 - shortid: 2.2.16 - slash: 3.0.0 - strip-ansi: 6.0.1 - validate-npm-package-name: 3.0.0 - vue: 2.6.14 - vue-codemod: 0.0.5 - yaml-front-matter: 3.4.1 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /@vue/compiler-core@3.2.31: - resolution: {integrity: sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==} - dependencies: - '@babel/parser': 7.17.9 - '@vue/shared': 3.2.31 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: true + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true - /@vue/compiler-core@3.2.33: - resolution: {integrity: sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==} - dependencies: - '@babel/parser': 7.17.9 - '@vue/shared': 3.2.33 - estree-walker: 2.0.2 - source-map: 0.6.1 + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - /@vue/compiler-dom@3.2.33: - resolution: {integrity: sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==} - dependencies: - '@vue/compiler-core': 3.2.33 - '@vue/shared': 3.2.33 + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} - /@vue/compiler-sfc@3.2.33: - resolution: {integrity: sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==} - dependencies: - '@babel/parser': 7.17.9 - '@vue/compiler-core': 3.2.33 - '@vue/compiler-dom': 3.2.33 - '@vue/compiler-ssr': 3.2.33 - '@vue/reactivity-transform': 3.2.33 - '@vue/shared': 3.2.33 - estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.12 - source-map: 0.6.1 + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} - /@vue/compiler-ssr@3.2.33: - resolution: {integrity: sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==} - dependencies: - '@vue/compiler-dom': 3.2.33 - '@vue/shared': 3.2.33 + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true - /@vue/devtools-api@6.1.3: - resolution: {integrity: sha512-79InfO2xHv+WHIrH1bHXQUiQD/wMls9qBk6WVwGCbdwP7/3zINtvqPNMtmSHXsIKjvUAHc8L0ouOj6ZQQRmcXg==} - dev: false + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported - /@vue/devtools-api@6.1.4: - resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} - dev: false + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported - /@vue/devtools@6.1.4: - resolution: {integrity: sha512-U+FIm818qym/U7ru7ZjZaqovWmA9LlSxnssfCVPSTfAf2uXC5U9XHhi+f8QMgPTfsDHcKAsszewaK7BRX01f1Q==} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - electron: 12.2.3 - express: 4.17.2 - ip: 1.1.5 - socket.io: 4.4.1(utf-8-validate@5.0.9) - socket.io-client: 4.4.1(utf-8-validate@5.0.9) - utf-8-validate: 5.0.9 - transitivePeerDependencies: - - bufferutil - - supports-color - dev: true + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} - /@vue/eslint-config-standard@6.1.0(eslint-plugin-import@2.25.3)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@6.0.0)(eslint-plugin-vue@8.2.0)(eslint@8.5.0)(webpack@5.70.0): - resolution: {integrity: sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==} - peerDependencies: - '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - eslint-plugin-vue: ^7.0.0 - peerDependenciesMeta: - '@vue/cli-service': - optional: true - dependencies: - eslint: 8.5.0 - eslint-config-standard: 16.0.3(eslint-plugin-import@2.25.3)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@6.0.0)(eslint@8.5.0) - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-webpack: 0.13.2(eslint-plugin-import@2.25.3)(webpack@5.70.0) - eslint-plugin-import: 2.25.3(@typescript-eslint/parser@5.8.0)(eslint@8.5.0) - eslint-plugin-node: 11.1.0(eslint@8.5.0) - eslint-plugin-promise: 6.0.0(eslint@8.5.0) - eslint-plugin-vue: 8.2.0(eslint@8.5.0) - transitivePeerDependencies: - - supports-color - - webpack - dev: true + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} - /@vue/reactivity-transform@3.2.33: - resolution: {integrity: sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==} - dependencies: - '@babel/parser': 7.17.9 - '@vue/compiler-core': 3.2.33 - '@vue/shared': 3.2.33 - estree-walker: 2.0.2 - magic-string: 0.25.9 + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} - /@vue/reactivity@3.2.33: - resolution: {integrity: sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==} - dependencies: - '@vue/shared': 3.2.33 + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} - /@vue/runtime-core@3.2.33: - resolution: {integrity: sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==} - dependencies: - '@vue/reactivity': 3.2.33 - '@vue/shared': 3.2.33 + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} - /@vue/runtime-dom@3.2.33: - resolution: {integrity: sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==} - dependencies: - '@vue/runtime-core': 3.2.33 - '@vue/shared': 3.2.33 - csstype: 2.6.20 + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} - /@vue/server-renderer@3.2.33(vue@3.2.33): - resolution: {integrity: sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==} - peerDependencies: - vue: 3.2.33 - dependencies: - '@vue/compiler-ssr': 3.2.33 - '@vue/shared': 3.2.33 - vue: 3.2.33 + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - /@vue/shared@3.2.31: - resolution: {integrity: sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==} - dev: true + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} - /@vue/shared@3.2.33: - resolution: {integrity: sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /@vueuse/core@8.3.1(vue@3.2.33): - resolution: {integrity: sha512-WiXUgVyPG9elGx3G8UV8g+zqbEJ2hYacrPICogAxDdW6hnxxcUFdF7FtvDroJ/DxWmo2pg8XNNz07ybfnZyJbw==} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - '@vueuse/metadata': 8.3.1 - '@vueuse/shared': 8.3.1(vue@3.2.33) - vue: 3.2.33 - vue-demi: 0.12.4(vue@3.2.33) + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /@vueuse/metadata@8.3.1: - resolution: {integrity: sha512-1aZaFL44HzXXkfN6Q7KMDOXBFKTHDClHlOJBxtN8rTBXIIScoGOrJCpxWiQ4kuVg95MzG/pHrd3P4wd8poL9XQ==} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} - /@vueuse/shared@8.3.1(vue@3.2.33): - resolution: {integrity: sha512-7HKLCcxp4dtONq6QSSoavblo9riYgqzw7jhqiC0/VUYMXKzqj1G/GznOzTmY8Wi8uKKT197JqjKQ1DKt2j/0+A==} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - vue: 3.2.33 - vue-demi: 0.12.4(vue@3.2.33) - - /@webassemblyjs/ast@1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - dev: true + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - /@webassemblyjs/floating-point-hex-parser@1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} - dev: true + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - /@webassemblyjs/helper-api-error@1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} - dev: true + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - /@webassemblyjs/helper-buffer@1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} - dev: true + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} - /@webassemblyjs/helper-numbers@1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@xtuc/long': 4.2.2 - dev: true + hexoid@2.0.0: + resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} + engines: {node: '>=8'} - /@webassemblyjs/helper-wasm-bytecode@1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} - dev: true + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - /@webassemblyjs/helper-wasm-section@1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - dev: true + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - /@webassemblyjs/ieee754@1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: true + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} - /@webassemblyjs/leb128@1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} - dependencies: - '@xtuc/long': 4.2.2 - dev: true + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - /@webassemblyjs/utf8@1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} - dev: true + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} - /@webassemblyjs/wasm-edit@1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/helper-wasm-section': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-opt': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - '@webassemblyjs/wast-printer': 1.11.1 - dev: true + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} - /@webassemblyjs/wasm-gen@1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 - dev: true + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} - /@webassemblyjs/wasm-opt@1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - dev: true + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} - /@webassemblyjs/wasm-parser@1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 - dev: true + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} - /@webassemblyjs/wast-printer@1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@xtuc/long': 4.2.2 - dev: true + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} - /@wry/equality@0.1.11: - resolution: {integrity: sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==} - dependencies: - tslib: 1.14.1 - dev: true - - /@xml-tools/parser@1.0.11: - resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==} - dependencies: - chevrotain: 7.1.1 - dev: false + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - /acorn-import-assertions@1.8.0(acorn@8.7.0): - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.7.0 - dev: true + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} - /acorn-jsx@5.3.2(acorn@8.7.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.7.0 - dev: true + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} - /acorn@8.7.0: - resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - transitivePeerDependencies: - - supports-color - dev: true + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ajv-formats@2.1.1(ajv@8.8.2): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.8.2 - dev: false + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: true + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + 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. - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ajv@8.8.2: - resolution: {integrity: sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - /alphanum-sort@1.0.2: - resolution: {integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=} - dev: false + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 + interactjs@1.10.27: + resolution: {integrity: sha512-y/8RcCftGAF24gSp76X2JS3XpHiUvDQyhF8i7ujemBz77hwiHDuJzftHx7thY8cxGogwGiPJ+o97kWB6eAXnsA==} - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - /ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - /ansi-styles@6.1.0: - resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - dev: true - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} - /apollo-cache-control@0.14.0(graphql@14.7.0): - resolution: {integrity: sha512-qN4BCq90egQrgNnTRMUHikLZZAprf3gbm8rC5Vwmc6ZdLolQ7bFsa769Hqi6Tq/lS31KLsXBLTOsRbfPHph12w==} - engines: {node: '>=6.0'} - deprecated: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-env: 3.1.0 - apollo-server-plugin-base: 0.13.0(graphql@14.7.0) - graphql: 14.7.0 - transitivePeerDependencies: - - encoding - dev: true + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} - /apollo-datasource@0.9.0: - resolution: {integrity: sha512-y8H99NExU1Sk4TvcaUxTdzfq2SZo6uSj5dyh75XSQvbpH6gdAXIW9MaBcvlNC7n0cVPsidHmOcHOWxJ/pTXGjA==} - engines: {node: '>=6'} - dependencies: - apollo-server-caching: 0.7.0 - apollo-server-env: 3.1.0 - transitivePeerDependencies: - - encoding - dev: true + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} - /apollo-graphql@0.9.6(graphql@14.7.0): - resolution: {integrity: sha512-CrqJxZwfu/U5x0bYYPPluwu1G+oC3jjKFK/EVn9CDcpi4+yD9rAYko/h1iUB5A6VRQhA4Boluc7QexMYQ2tCng==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 - dependencies: - core-js-pure: 3.22.2 - graphql: 14.7.0 - lodash.sortby: 4.7.0 - sha.js: 2.4.11 - dev: true + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - /apollo-link@1.2.14(graphql@14.7.0): - resolution: {integrity: sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==} - peerDependencies: - graphql: ^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-utilities: 1.3.4(graphql@14.7.0) - graphql: 14.7.0 - ts-invariant: 0.4.4 - tslib: 1.14.1 - zen-observable-ts: 0.8.21 - dev: true + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} - /apollo-reporting-protobuf@0.8.0: - resolution: {integrity: sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg==} - dependencies: - '@apollo/protobufjs': 1.2.2 - dev: true + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} - /apollo-server-caching@0.7.0: - resolution: {integrity: sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw==} - engines: {node: '>=6'} - dependencies: - lru-cache: 6.0.0 - dev: true + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /apollo-server-core@2.25.3(graphql@14.7.0): - resolution: {integrity: sha512-Midow3uZoJ9TjFNeCNSiWElTVZlvmB7G7tG6PPoxIR9Px90/v16Q6EzunDIO0rTJHRC3+yCwZkwtf8w2AcP0sA==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/apollo-tools': 0.5.3(graphql@14.7.0) - '@apollographql/graphql-playground-html': 1.6.27 - '@apollographql/graphql-upload-8-fork': 8.1.3(graphql@14.7.0) - '@josephg/resolvable': 1.0.1 - '@types/ws': 7.4.7 - apollo-cache-control: 0.14.0(graphql@14.7.0) - apollo-datasource: 0.9.0 - apollo-graphql: 0.9.6(graphql@14.7.0) - apollo-reporting-protobuf: 0.8.0 - apollo-server-caching: 0.7.0 - apollo-server-env: 3.1.0 - apollo-server-errors: 2.5.0(graphql@14.7.0) - apollo-server-plugin-base: 0.13.0(graphql@14.7.0) - apollo-server-types: 0.9.0(graphql@14.7.0) - apollo-tracing: 0.15.0(graphql@14.7.0) - async-retry: 1.3.3 - fast-json-stable-stringify: 2.1.0 - graphql: 14.7.0 - graphql-extensions: 0.15.0(graphql@14.7.0) - graphql-tag: 2.12.6(graphql@14.7.0) - graphql-tools: 4.0.8(graphql@14.7.0) - loglevel: 1.8.0 - lru-cache: 6.0.0 - sha.js: 2.4.11 - subscriptions-transport-ws: 0.9.19(graphql@14.7.0) - uuid: 8.3.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} - /apollo-server-env@3.1.0: - resolution: {integrity: sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ==} - engines: {node: '>=6'} - dependencies: - node-fetch: 2.6.7 - util.promisify: 1.1.1 - transitivePeerDependencies: - - encoding - dev: true + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} - /apollo-server-errors@2.5.0(graphql@14.7.0): - resolution: {integrity: sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - graphql: 14.7.0 - dev: true + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - /apollo-server-express@2.25.3(graphql@14.7.0): - resolution: {integrity: sha512-tTFYn0oKH2qqLwVj7Ez2+MiKleXACODiGh5IxsB7VuYCPMAi9Yl8iUSlwTjQUvgCWfReZjnf0vFL2k5YhDlrtQ==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/graphql-playground-html': 1.6.27 - '@types/accepts': 1.3.5 - '@types/body-parser': 1.19.0 - '@types/cors': 2.8.10 - '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.28 - accepts: 1.3.8 - apollo-server-core: 2.25.3(graphql@14.7.0) - apollo-server-types: 0.9.0(graphql@14.7.0) - body-parser: 1.20.0 - cors: 2.8.5 - express: 4.18.0 - graphql: 14.7.0 - graphql-subscriptions: 1.2.1(graphql@14.7.0) - graphql-tools: 4.0.8(graphql@14.7.0) - parseurl: 1.3.3 - subscriptions-transport-ws: 0.9.19(graphql@14.7.0) - type-is: 1.6.18 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} - /apollo-server-plugin-base@0.13.0(graphql@14.7.0): - resolution: {integrity: sha512-L3TMmq2YE6BU6I4Tmgygmd0W55L+6XfD9137k+cWEBFu50vRY4Re+d+fL5WuPkk5xSPKd/PIaqzidu5V/zz8Kg==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-types: 0.9.0(graphql@14.7.0) - graphql: 14.7.0 - transitivePeerDependencies: - - encoding - dev: true + isbinaryfile@5.0.4: + resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} + engines: {node: '>= 18.0.0'} - /apollo-server-types@0.9.0(graphql@14.7.0): - resolution: {integrity: sha512-qk9tg4Imwpk732JJHBkhW0jzfG0nFsLqK2DY6UhvJf7jLnRePYsPxWfPiNkxni27pLE2tiNlCwoDFSeWqpZyBg==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-reporting-protobuf: 0.8.0 - apollo-server-caching: 0.7.0 - apollo-server-env: 3.1.0 - graphql: 14.7.0 - transitivePeerDependencies: - - encoding - dev: true + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /apollo-tracing@0.15.0(graphql@14.7.0): - resolution: {integrity: sha512-UP0fztFvaZPHDhIB/J+qGuy6hWO4If069MGC98qVs0I8FICIGu4/8ykpX3X3K6RtaQ56EDAWKykCxFv4ScxMeA==} - engines: {node: '>=4.0'} - deprecated: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-env: 3.1.0 - apollo-server-plugin-base: 0.13.0(graphql@14.7.0) - graphql: 14.7.0 - transitivePeerDependencies: - - encoding - dev: true + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - /apollo-utilities@1.3.4(graphql@14.7.0): - resolution: {integrity: sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==} - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@wry/equality': 0.1.11 - fast-json-stable-stringify: 2.1.0 - graphql: 14.7.0 - ts-invariant: 0.4.4 - tslib: 1.14.1 - dev: true + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true - /app-builder-bin@4.0.0: - resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} - dev: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true - /app-builder-lib@23.1.0: - resolution: {integrity: sha512-aZpKjBBLzyxtr4Cmbyi3dl8uRO8SI2PG2MYEKYRZL6pl7IsKP2hJkCYzlD6NjLJlRIAZcFPFjFbJliO74DFf7w==} - engines: {node: '>=14.0.0'} - dependencies: - 7zip-bin: 5.1.1 - '@develar/schema-utils': 2.6.5 - '@electron/universal': 1.2.1 - '@malept/flatpak-bundler': 0.4.0 - async-exit-hook: 2.0.1 - bluebird-lst: 1.0.9 - builder-util: 23.0.9 - builder-util-runtime: 9.0.2 - chromium-pickle-js: 0.2.0 - debug: 4.3.4(supports-color@9.2.1) - ejs: 3.1.8 - electron-osx-sign: 0.6.0 - electron-publish: 23.0.9 - form-data: 4.0.0 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - is-ci: 3.0.1 - isbinaryfile: 4.0.10 - js-yaml: 4.1.0 - lazy-val: 1.0.5 - minimatch: 3.1.2 - read-config-file: 6.2.0 - sanitize-filename: 1.6.3 - semver: 7.3.7 - tar: 6.1.11 - temp-file: 3.4.0 - transitivePeerDependencies: - - supports-color - dev: true + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /archive-type@4.0.0: - resolution: {integrity: sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=} - engines: {node: '>=4'} - dependencies: - file-type: 4.4.0 - dev: true + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} - /arr-diff@4.0.0: - resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=} - engines: {node: '>=0.10.0'} - dev: true + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true - /arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true - /arr-union@3.1.0: - resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=} - engines: {node: '>=0.10.0'} - dev: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - /array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /array-find@1.0.0: - resolution: {integrity: sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=} - dev: true + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - /array-flatten@1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - /array-ify@1.0.0: - resolution: {integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=} - dev: true + json-schema-typed@7.0.3: + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} - /array-includes@3.1.4: - resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - get-intrinsic: 1.1.1 - is-string: 1.0.7 - dev: true + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /array-union@1.0.2: - resolution: {integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=} - engines: {node: '>=0.10.0'} - dependencies: - array-uniq: 1.0.3 - dev: true + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true - /array-uniq@1.0.3: - resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} - engines: {node: '>=0.10.0'} - dev: true + jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /array-unique@0.3.2: - resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=} - engines: {node: '>=0.10.0'} - dev: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - /array.prototype.flat@1.2.5: - resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - dev: true + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - /arrify@1.0.1: - resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} - engines: {node: '>=0.10.0'} - dev: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - /arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: true + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} - /asap@2.0.6: - resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=} - dev: true + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - /asar@3.1.0: - resolution: {integrity: sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==} - engines: {node: '>=10.12.0'} - hasBin: true - dependencies: - chromium-pickle-js: 0.2.0 - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - optionalDependencies: - '@types/glob': 7.2.0 - dev: true + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - dependencies: - safer-buffer: 2.1.2 - dev: true + ky@1.7.5: + resolution: {integrity: sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==} + engines: {node: '>=18'} - /assert-never@1.2.1: - resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} - dev: true + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - /assert-plus@1.0.0: - resolution: {integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=} - engines: {node: '>=0.8'} - dev: true + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} - /assign-symbols@1.0.0: - resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=} - engines: {node: '>=0.10.0'} - dev: true + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} - /ast-types@0.12.1: - resolution: {integrity: sha512-H2izJAyT2xwew4TxShpmxe6f9R5hHgJQy1QloLiUC2yrJMtyraBWNJL7903rpeCY9keNUipORR/zIUC2XcYKng==} - engines: {node: '>=4'} - dev: true + lightningcss-darwin-arm64@1.29.1: + resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - /ast-types@0.13.3: - resolution: {integrity: sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==} - engines: {node: '>=4'} - dev: true + lightningcss-darwin-x64@1.29.1: + resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - /ast-types@0.14.2: - resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} - engines: {node: '>=4'} - dependencies: - tslib: 2.4.0 - dev: true + lightningcss-freebsd-x64@1.29.1: + resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + lightningcss-linux-arm-gnueabihf@1.29.1: + resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - /async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - dev: true + lightningcss-linux-arm64-gnu@1.29.1: + resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: true + lightningcss-linux-arm64-musl@1.29.1: + resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - /async@1.5.2: - resolution: {integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=} - dev: false + lightningcss-linux-x64-gnu@1.29.1: + resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - /async@2.6.3: - resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==} - dependencies: - lodash: 4.17.21 - dev: false + lightningcss-linux-x64-musl@1.29.1: + resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - dependencies: - lodash: 4.17.21 - dev: true + lightningcss-win32-arm64-msvc@1.29.1: + resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.1: + resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true + lightningcss@1.29.1: + resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + engines: {node: '>= 12.0.0'} - /asynckit@0.4.0: - resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} - dev: true + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} + lint-staged@15.4.3: + resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} + engines: {node: '>=18.12.0'} hasBin: true - dev: true - /atomically@1.7.0: - resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} - engines: {node: '>=10.12.0'} - dev: false + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + local-pkg@1.0.0: + resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} + engines: {node: '>=14'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} - /autolinker@3.16.2: - resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==} - dependencies: - tslib: 2.4.0 - dev: false + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /aws-sign2@0.7.0: - resolution: {integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=} - dev: true + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - /aws4@1.11.0: - resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} - dev: true + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - /axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - dependencies: - follow-redirects: 1.14.9 - transitivePeerDependencies: - - debug - dev: false + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - /axios@0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} - dependencies: - follow-redirects: 1.14.9 - transitivePeerDependencies: - - debug - dev: false + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - /babel-core@7.0.0-bridge.0(@babel/core@7.16.5): - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - dev: true + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - /babel-plugin-dynamic-import-node@2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - dependencies: - object.assign: 4.1.2 - dev: true + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - /babel-plugin-polyfill-corejs2@0.3.0(@babel/core@7.16.5): - resolution: {integrity: sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0(@babel/core@7.16.5) - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /babel-plugin-polyfill-corejs3@0.4.0(@babel/core@7.16.5): - resolution: {integrity: sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0(@babel/core@7.16.5) - core-js-compat: 3.20.1 - transitivePeerDependencies: - - supports-color - dev: true + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - /babel-plugin-polyfill-regenerator@0.3.0(@babel/core@7.16.5): - resolution: {integrity: sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0(@babel/core@7.16.5) - transitivePeerDependencies: - - supports-color - dev: true + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - /babel-walk@3.0.0-canary-5: - resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} - engines: {node: '>= 10.0.0'} - dependencies: - '@babel/types': 7.17.0 - dev: true + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - /backo2@1.0.2: - resolution: {integrity: sha1-MasayLEpNjRj41s+u2n038+6eUc=} - dev: true + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /base@0.11.2: - resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} - engines: {node: '>=0.10.0'} - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.3.0 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.2 - pascalcase: 0.1.1 - dev: true - - /basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} - dependencies: - safe-buffer: 5.1.2 - dev: false + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=} - dependencies: - tweetnacl: 0.14.5 - dev: true + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: false + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - dev: true - - /binary@0.3.0: - resolution: {integrity: sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=} - dependencies: - buffers: 0.1.1 - chainsaw: 0.1.0 - dev: false - /bl@1.2.3: - resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} - dependencies: - readable-stream: 2.3.7 - safe-buffer: 5.2.1 - dev: true + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - /bluebird-lst@1.0.9: - resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} - dependencies: - bluebird: 3.7.2 - dev: true + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - /bluebird@3.4.7: - resolution: {integrity: sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=} - dev: false + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} - /body-parser@1.19.1: - resolution: {integrity: sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.1 - content-type: 1.0.4 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - on-finished: 2.3.0 - qs: 6.9.6 - raw-body: 2.4.2 - type-is: 1.6.18 - transitivePeerDependencies: - - supports-color + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} - /body-parser@1.20.0: - resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.10.3 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color + lucide-vue-next@0.476.0: + resolution: {integrity: sha512-deFzs+/sAcGAEzEKFK+5dPHWg5lUl4eYrRbtdpzNYVxoBLIoGLB5yvx9VwbplJRiGWhPduYr4ZmLqAYgy8UY5A==} + peerDependencies: + vue: '>=3.0.1' - /boolbase@1.0.0: - resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} - dev: false + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - /boolean@3.1.4: - resolution: {integrity: sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==} - requiresBuild: true - dev: true - optional: true + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /boxen@4.2.0: - resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} - engines: {node: '>=8'} - dependencies: - ansi-align: 3.0.1 - camelcase: 5.3.1 - chalk: 3.0.0 - cli-boxes: 2.2.1 - string-width: 4.2.3 - term-size: 2.2.1 - type-fest: 0.8.1 - widest-line: 3.1.0 - dev: true + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.2.1 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - /braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} - /browserslist@4.20.2: - resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001327 - electron-to-chromium: 1.4.87 - escalade: 3.1.1 - node-releases: 2.0.2 - picocolors: 1.0.0 + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - /buffer-alloc-unsafe@1.1.0: - resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - dev: true + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - /buffer-alloc@1.2.0: - resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} - dependencies: - buffer-alloc-unsafe: 1.1.0 - buffer-fill: 1.0.0 - dev: true + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - /buffer-crc32@0.2.13: - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} - dev: true + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} - /buffer-equal@1.0.0: - resolution: {integrity: sha1-WWFrSYME1Var1GaWayLu2j7KX74=} - engines: {node: '>=0.4.0'} - dev: true + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - /buffer-fill@1.0.0: - resolution: {integrity: sha1-+PeLdniYiO858gXNY39o5wISKyw=} - dev: true + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - /buffer-indexof-polyfill@1.0.2: - resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==} - engines: {node: '>=0.10'} - dev: false + memoirist@0.3.0: + resolution: {integrity: sha512-wR+4chMgVPq+T6OOsk40u9Wlpw1Pjx66NMNiYxCQQ4EUJ7jDs3D9kTCeKdBOkvAiqXlHLVJlvYL01PvIJ1MPNg==} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} - /buffers@0.1.1: - resolution: {integrity: sha1-skV5w77U1tOWru5tmorn9Ugqt7s=} - engines: {node: '>=0.2.0'} - dev: false + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - /builder-util-runtime@9.0.2: - resolution: {integrity: sha512-xF55W/8mgfT6+sMbX0TeiJkTusA5GMOzckM4rajN4KirFcUIuLTH8oEaTYmM86YwVCZaTwa/7GyFhauXaEICwA==} - engines: {node: '>=12.0.0'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - sax: 1.2.4 - transitivePeerDependencies: - - supports-color - dev: true + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - /builder-util@23.0.9: - resolution: {integrity: sha512-ccPFwI1Sex4yLt8R3LI+H07p2jHICKwEWtxkFkb6jiU/g/VJnF1wazW7I1oMcCFcPTEl30GhqoRv9rfDD9VAiQ==} - dependencies: - 7zip-bin: 5.1.1 - '@types/debug': 4.1.7 - '@types/fs-extra': 9.0.13 - app-builder-bin: 4.0.0 - bluebird-lst: 1.0.9 - builder-util-runtime: 9.0.2 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.2.1) - fs-extra: 10.1.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-ci: 3.0.1 - js-yaml: 4.1.0 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - transitivePeerDependencies: - - supports-color - dev: true + micromark-core-commonmark@2.0.2: + resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} - /builtins@1.0.3: - resolution: {integrity: sha1-y5T662HIaWRR2zZTThQi+U8K7og=} - dev: true + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - /bumpp@7.1.1: - resolution: {integrity: sha512-pAGjraw9T4I4dnkiQHrKUVQb55dOM5Nj72SVtVlkjFjWjFtg0aSgipQuxDWZ0cqm8WoqtaiBPk+7jHfnZxr7lA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jsdevtools/ez-spawn': 3.0.4 - chalk: 4.1.2 - command-line-args: 5.2.0 - globby: 11.0.4 - prompts: 2.4.2 - semver: 7.3.5 + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - /busboy@0.3.1: - resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==} - engines: {node: '>=4.5.0'} - dependencies: - dicer: 0.3.0 - dev: true + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - /bytes@3.0.0: - resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=} - engines: {node: '>= 0.8'} - dev: false + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - /bytes@3.1.1: - resolution: {integrity: sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==} - engines: {node: '>= 0.8'} + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - /cache-base@1.0.1: - resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} - engines: {node: '>=0.10.0'} - dependencies: - collection-visit: 1.0.0 - component-emitter: 1.3.0 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.1 - to-object-path: 0.3.0 - union-value: 1.0.1 - unset-value: 1.0.0 - dev: true - - /cacheable-request@2.1.4: - resolution: {integrity: sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=} - dependencies: - clone-response: 1.0.2 - get-stream: 3.0.0 - http-cache-semantics: 3.8.1 - keyv: 3.0.0 - lowercase-keys: 1.0.0 - normalize-url: 2.0.1 - responselike: 1.0.2 - dev: true - - /cacheable-request@6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.1 + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - /call-me-maybe@1.0.1: - resolution: {integrity: sha1-JtII6onje1y95gJQoV8DHBak1ms=} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - /caller-callsite@2.0.0: - resolution: {integrity: sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=} - engines: {node: '>=4'} - dependencies: - callsites: 2.0.0 - dev: false + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - /caller-path@2.0.0: - resolution: {integrity: sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=} - engines: {node: '>=4'} - dependencies: - caller-callsite: 2.0.0 - dev: false + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - /callsites@2.0.0: - resolution: {integrity: sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=} - engines: {node: '>=4'} - dev: false + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - /camelcase@6.2.1: - resolution: {integrity: sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==} - engines: {node: '>=10'} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.20.2 - caniuse-lite: 1.0.30001327 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: false + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - /caniuse-lite@1.0.30001327: - resolution: {integrity: sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - /caseless@0.12.0: - resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} - dev: true + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - /caw@2.0.1: - resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} - engines: {node: '>=4'} - dependencies: - get-proxy: 2.1.0 - isurl: 1.0.0 - tunnel-agent: 0.6.0 - url-to-options: 1.0.1 - dev: true + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - /chainsaw@0.1.0: - resolution: {integrity: sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=} - dependencies: - traverse: 0.3.9 - dev: false + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + micromark-util-subtokenize@2.0.4: + resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==} - /character-parser@2.2.0: - resolution: {integrity: sha1-x84o821LzZdE5f/CxfzeHHMmH8A=} - dependencies: - is-regex: 1.1.4 + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} - /cheerio-select@1.5.0: - resolution: {integrity: sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==} - dependencies: - css-select: 4.2.1 - css-what: 5.1.0 - domelementtype: 2.2.0 - domhandler: 4.3.0 - domutils: 2.8.0 - dev: false + micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} - /cheerio@1.0.0-rc.10: - resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==} - engines: {node: '>= 6'} - dependencies: - cheerio-select: 1.5.0 - dom-serializer: 1.3.2 - domhandler: 4.3.0 - htmlparser2: 6.1.0 - parse5: 6.0.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - tslib: 2.3.1 - dev: false + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} - /chevrotain@4.1.1: - resolution: {integrity: sha512-NQky1HQyiAzxsxpq4Ppt47SYO2U3JLtmfs85QPf3kYSzGBjjp5AA8kqjH8hCjGFRpaQ781QOk1ragQIOkBgUTA==} - dependencies: - regexp-to-ast: 0.3.5 - dev: false + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - /chevrotain@6.5.0: - resolution: {integrity: sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==} - dependencies: - regexp-to-ast: 0.4.0 - dev: false + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} - /chevrotain@7.1.1: - resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} - dependencies: - regexp-to-ast: 0.5.0 - dev: false + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} - /chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - dev: true + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} - /ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} - /ci-info@3.3.2: - resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} - dev: true + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} - /class-utils@0.3.6: - resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 - dev: true + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - /cli-cursor@2.1.0: - resolution: {integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=} - engines: {node: '>=4'} - dependencies: - restore-cursor: 2.0.0 - dev: true + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} - /cli-spinners@2.6.1: - resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} - engines: {node: '>=6'} - dev: true + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - dev: true + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - slice-ansi: 5.0.0 - string-width: 5.0.1 - dev: true + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: true + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} - /clone-response@1.0.2: - resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} - dependencies: - mimic-response: 1.0.1 + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} - /clone@1.0.4: - resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} - engines: {node: '>=0.8'} - dev: true + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} - /clone@2.1.2: - resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} - engines: {node: '>=0.8'} - dev: true + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} - /cmd-shim@3.0.3: - resolution: {integrity: sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA==} - dependencies: - graceful-fs: 4.2.9 - mkdirp: 0.5.5 - dev: true + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} - /coa@2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.5 - chalk: 2.4.2 - q: 1.5.1 - dev: false + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - /codemirror-textmate@1.1.0(codemirror@5.65.7)(onigasm@2.2.5): - resolution: {integrity: sha512-c7Xov3X5eIKiPrKjfCS8RPZyFx6EYXT1EPtTEl2jAD2HuD9uLqJF6z+KoPT8H51rOB+KamEOZDVUrI8YEnsphw==} - peerDependencies: - codemirror: ^5.41.0 - onigasm: ^2.2.1 - dependencies: - codemirror: 5.65.7 - lru-cache: 4.1.5 - monaco-textmate: 3.0.1(onigasm@2.2.5) - onigasm: 2.2.5 - p-cancelable: 1.1.0 - dev: false + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true - /codemirror@5.65.7: - resolution: {integrity: sha512-zb67cXzgugIQmb6tfD4G11ILjYoMfTjwcjn+cWsa4GewlI2adhR/h3kolkoCQTm1msD/1BuqVTKuO09ELsS++A==} - dev: false + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - /collection-visit@1.0.0: - resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=} - engines: {node: '>=0.10.0'} - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - dev: true + monaco-textmate@3.0.1: + resolution: {integrity: sha512-ZxxY3OsqUczYP1sGqo97tu+CJmMBwuSW+dL0WEBdDhOZ5G1zntw72hvBc68ZQAirosWvbDKgN1dL5k173QtFww==} + peerDependencies: + onigasm: ^2.0.0 - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - /color-name@1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + nanoid@5.1.2: + resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==} + engines: {node: ^18 || >=20} + hasBin: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - /color-string@1.9.0: - resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - dev: false + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - dependencies: - color-convert: 1.9.3 - color-string: 1.9.0 - dev: false + natural-orderby@5.0.0: + resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} + engines: {node: '>=18'} - /colorette@2.0.16: - resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} - dev: true + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} - /colors@1.0.3: - resolution: {integrity: sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=} - engines: {node: '>=0.1.90'} - dev: true + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + engines: {node: '>=10'} - /colors@1.1.2: - resolution: {integrity: sha1-FopHAXVran9RoSzgyXv6KMCE7WM=} - engines: {node: '>=0.1.90'} - dev: false + node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} - /command-line-args@5.2.0: - resolution: {integrity: sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==} - engines: {node: '>=4.0.0'} - dependencies: - array-back: 3.1.0 - find-replace: 3.0.0 - lodash.camelcase: 4.3.0 - typical: 4.0.0 + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} - /commander@1.0.0: - resolution: {integrity: sha1-XmqI5wcP9ZCINurRkWlUjDD5C80=} - engines: {node: '>= 0.4.x'} - dev: true + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - /commander@2.9.0: - resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} - engines: {node: '>= 0.6.x'} - dependencies: - graceful-readlink: 1.0.1 - dev: true + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} + engines: {node: '>=10'} + hasBin: true - /commander@3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - dev: false + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: true + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: false + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} - /commondir@1.0.1: - resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} - dev: true + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - dev: true + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} - /compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - dev: true + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /component-emitter@1.3.0: - resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} - dev: true + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false + nypm@0.5.2: + resolution: {integrity: sha512-AHzvnyUJYSrrphPhRWWZNcoZfArGNp3Vrc4pm/ZurO74tYNTgAPrEyBQEKy+qioqmWlPXwvMZCG2wOaHlPG0Pw==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true - /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - dev: true + ohash@1.1.4: + resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} - /conf@10.1.1: - resolution: {integrity: sha512-z2civwq/k8TMYtcn3SVP0Peso4otIWnHtcTuHhQ0zDZDdP4NTxqEc8owfkz4zBsdMYdn/LFcE+ZhbCeqkhtq3Q==} - engines: {node: '>=12'} - dependencies: - ajv: 8.8.2 - ajv-formats: 2.1.1(ajv@8.8.2) - atomically: 1.7.0 - debounce-fn: 4.0.0 - dot-prop: 6.0.1 - env-paths: 2.2.1 - json-schema-typed: 7.0.3 - onetime: 5.1.2 - pkg-up: 3.1.0 - semver: 7.3.5 - dev: false + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - requiresBuild: true - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: true + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} - /configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.10 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} - /connect-pause@0.1.1: - resolution: {integrity: sha1-smmyu4Ldsaw9tQmcD7WCq6mfs3o=} - dev: false + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} - /constantinople@4.0.1: - resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} - dependencies: - '@babel/parser': 7.17.9 - '@babel/types': 7.17.0 - dev: true + onigasm@2.2.5: + resolution: {integrity: sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - /content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} - /conventional-changelog-angular@5.0.13: - resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} - dependencies: - compare-func: 2.0.0 - q: 1.5.1 - dev: true - /conventional-changelog-conventionalcommits@4.6.2: - resolution: {integrity: sha512-fo+VhM0VtD3wdHZtrPhgvTFjAhAMUjYeQV6B5+DB/cupG1O554pJdTwrvBInq8JLHl+GucKQpZycMPye/OpgSw==} - engines: {node: '>=10'} - dependencies: - compare-func: 2.0.0 - lodash: 4.17.21 - q: 1.5.1 - dev: true + p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} - /conventional-commits-parser@3.2.3: - resolution: {integrity: sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - JSONStream: 1.3.5 - is-text-path: 1.0.1 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} - /convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 - dev: true + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} - /cookie-signature@1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} - /cookie@0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} - engines: {node: '>= 0.6'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: true + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} - /copy-descriptor@0.1.1: - resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=} - engines: {node: '>=0.10.0'} - dev: true + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} - /copyfiles@2.4.1: - resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} - hasBin: true - dependencies: - glob: 7.2.3 - minimatch: 3.1.2 - mkdirp: 1.0.4 - noms: 0.0.0 - through2: 2.0.5 - untildify: 4.0.0 - yargs: 16.2.0 - dev: true + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /core-js-compat@3.20.1: - resolution: {integrity: sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==} - dependencies: - browserslist: 4.20.2 - semver: 7.0.0 - dev: true + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} - /core-js-pure@3.22.2: - resolution: {integrity: sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==} - requiresBuild: true - dev: true + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} - /cosmiconfig@5.2.1: - resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} - engines: {node: '>=4'} - dependencies: - import-fresh: 2.0.0 - is-directory: 0.3.1 - js-yaml: 3.14.1 - parse-json: 4.0.0 - dev: false + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} - /cosmiconfig@7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true + parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} + engines: {node: '>= 18'} - /crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - requiresBuild: true - dependencies: - buffer: 5.7.1 - dev: true - optional: true + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} - /cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - dev: false + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} - /cross-spawn@5.1.0: - resolution: {integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=} - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /crypto-js@4.1.1: - resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} - dev: false + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /css-color-names@0.0.4: - resolution: {integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=} - dev: false + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} - /css-declaration-sorter@4.0.1: - resolution: {integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==} - engines: {node: '>4'} - dependencies: - postcss: 7.0.39 - timsort: 0.3.0 - dev: false + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /css-select-base-adapter@0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: false + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} - /css-select@2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: false + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - /css-select@4.2.1: - resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} - dependencies: - boolbase: 1.0.0 - css-what: 5.1.0 - domhandler: 4.3.0 - domutils: 2.8.0 - nth-check: 2.0.1 - dev: false - - /css-tree@1.0.0-alpha.28: - resolution: {integrity: sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==} - engines: {node: '>=0.10.0'} - dependencies: - mdn-data: 1.1.4 - source-map: 0.5.7 - dev: false + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} - /css-tree@1.0.0-alpha.29: - resolution: {integrity: sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==} - engines: {node: '>=0.10.0'} - dependencies: - mdn-data: 1.1.4 - source-map: 0.5.7 - dev: false + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - /css-tree@1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: false + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - /css-url-regex@1.1.0: - resolution: {integrity: sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=} - dev: false + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - /css-what@3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: false + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - /css-what@5.1.0: - resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} - engines: {node: '>= 6'} - dev: false + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} hasBin: true - dev: false - /cssfilter@0.0.10: - resolution: {integrity: sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=} - dev: true + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} - /cssnano-preset-default@4.0.8: - resolution: {integrity: sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==} - engines: {node: '>=6.9.0'} - dependencies: - css-declaration-sorter: 4.0.1 - cssnano-util-raw-cache: 4.0.1 - postcss: 7.0.39 - postcss-calc: 7.0.5 - postcss-colormin: 4.0.3 - postcss-convert-values: 4.0.1 - postcss-discard-comments: 4.0.2 - postcss-discard-duplicates: 4.0.2 - postcss-discard-empty: 4.0.1 - postcss-discard-overridden: 4.0.1 - postcss-merge-longhand: 4.0.11 - postcss-merge-rules: 4.0.3 - postcss-minify-font-values: 4.0.2 - postcss-minify-gradients: 4.0.2 - postcss-minify-params: 4.0.2 - postcss-minify-selectors: 4.0.2 - postcss-normalize-charset: 4.0.1 - postcss-normalize-display-values: 4.0.2 - postcss-normalize-positions: 4.0.2 - postcss-normalize-repeat-style: 4.0.2 - postcss-normalize-string: 4.0.2 - postcss-normalize-timing-functions: 4.0.2 - postcss-normalize-unicode: 4.0.1 - postcss-normalize-url: 4.0.1 - postcss-normalize-whitespace: 4.0.2 - postcss-ordered-values: 4.1.2 - postcss-reduce-initial: 4.0.3 - postcss-reduce-transforms: 4.0.2 - postcss-svgo: 4.0.3 - postcss-unique-selectors: 4.0.1 - dev: false - - /cssnano-util-get-arguments@4.0.0: - resolution: {integrity: sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=} - engines: {node: '>=6.9.0'} - dev: false + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - /cssnano-util-get-match@4.0.0: - resolution: {integrity: sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=} - engines: {node: '>=6.9.0'} - dev: false + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} - /cssnano-util-raw-cache@4.0.1: - resolution: {integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==} - engines: {node: '>=6.9.0'} - dependencies: - postcss: 7.0.39 - dev: false + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} - /cssnano-util-same-parent@4.0.1: - resolution: {integrity: sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==} - engines: {node: '>=6.9.0'} - dev: false + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} - /cssnano@4.1.11: - resolution: {integrity: sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==} - engines: {node: '>=6.9.0'} - dependencies: - cosmiconfig: 5.2.1 - cssnano-preset-default: 4.0.8 - is-resolvable: 1.1.0 - postcss: 7.0.39 - dev: false + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} - /csso@3.5.1: - resolution: {integrity: sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==} - engines: {node: '>=0.10.0'} - dependencies: - css-tree: 1.0.0-alpha.29 - dev: false + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: false + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} - /csstype@2.6.20: - resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} + prettier-plugin-tailwindcss@0.6.11: + resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true - /csv-parser@1.12.1: - resolution: {integrity: sha512-r45M92nLnGP246ot0Yo5RvbiiMF5Bw/OTIdWJ3OQ4Vbv4hpOeoXVIPxdSmUw+fPJlQOseY+iigJyLSfPMIrddQ==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} hasBin: true - dependencies: - buffer-alloc: 1.2.0 - buffer-from: 1.1.2 - generate-function: 1.1.0 - generate-object-property: 1.2.0 - inherits: 2.0.4 - minimist: 1.2.6 - ndjson: 1.5.0 - dev: true - /d3-array@1.2.4: - resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} - dev: false + proc-log@2.0.1: + resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /d3-array@3.2.0: - resolution: {integrity: sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==} - engines: {node: '>=12'} - dependencies: - internmap: 2.0.3 - dev: false + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - /d3-axis@1.0.12: - resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==} - dev: false + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} - /d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - dev: false + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} - /d3-brush@1.1.6: - resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==} - dependencies: - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-transition: 1.3.2 - dev: false + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - /d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - dev: false + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - /d3-chord@1.0.6: - resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==} - dependencies: - d3-array: 1.2.4 - d3-path: 1.0.9 - dev: false + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - /d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} - dependencies: - d3-path: 3.0.1 - dev: false + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - /d3-collection@1.0.7: - resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==} - dev: false + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /d3-color@1.4.1: - resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==} - dev: false + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} - /d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - dev: false + radix-vue@1.9.17: + resolution: {integrity: sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==} + peerDependencies: + vue: '>= 3.2.0' - /d3-contour@1.3.2: - resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==} - dependencies: - d3-array: 1.2.4 - dev: false + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - /d3-contour@4.0.0: - resolution: {integrity: sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - dev: false + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true - /d3-delaunay@6.0.2: - resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==} - engines: {node: '>=12'} - dependencies: - delaunator: 5.0.0 - dev: false + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true - /d3-dispatch@1.0.6: - resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} - dev: false + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} - /d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - dev: false + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} - /d3-drag@1.2.5: - resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==} - dependencies: - d3-dispatch: 1.0.6 - d3-selection: 1.4.2 - dev: false + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - /d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - dev: false + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} - /d3-dsv@1.2.0: - resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==} - hasBin: true - dependencies: - commander: 2.20.3 - iconv-lite: 0.4.24 - rw: 1.3.3 - dev: false + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - /d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - dev: false + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} - /d3-ease@1.0.7: - resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==} - dev: false + readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} - /d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - dev: false + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /d3-fetch@1.2.0: - resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==} - dependencies: - d3-dsv: 1.2.0 - dev: false + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - dependencies: - d3-dsv: 3.0.1 - dev: false + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true - /d3-flextree@2.1.2: - resolution: {integrity: sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==} - dependencies: - d3-hierarchy: 1.1.9 - dev: false + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true - /d3-force@1.2.1: - resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==} - dependencies: - d3-collection: 1.0.7 - d3-dispatch: 1.0.6 - d3-quadtree: 1.0.7 - d3-timer: 1.0.10 - dev: false + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - /d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - dev: false + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} - /d3-format@1.4.5: - resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} - dev: false + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} - /d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - dev: false + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} - /d3-geo@1.12.1: - resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} - dependencies: - d3-array: 1.2.4 - dev: false + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - /d3-geo@3.0.1: - resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - dev: false + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} - /d3-hierarchy@1.1.9: - resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} - dev: false + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} - /d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - dev: false + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - /d3-interpolate@1.4.0: - resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==} - dependencies: - d3-color: 1.4.1 - dev: false + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true - /d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - dev: false + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - /d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - dev: false + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} - /d3-path@3.0.1: - resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} - engines: {node: '>=12'} - dev: false + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} - /d3-polygon@1.0.6: - resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==} - dev: false + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} - /d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - dev: false + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /d3-quadtree@1.0.7: - resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==} - dev: false + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - /d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - dev: false + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true - /d3-random@1.1.2: - resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==} - dev: false + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} - /d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - dev: false + rollup@4.34.8: + resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true - /d3-scale-chromatic@1.5.0: - resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==} - dependencies: - d3-color: 1.4.1 - d3-interpolate: 1.4.0 - dev: false + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - /d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - dev: false + runtime-required@1.1.0: + resolution: {integrity: sha512-yX97f5E0WfNpcQnfVjap6vzQcvErkYYCx6eTK4siqGEdC8lglwypUFgZVTX7ShvIlgfkC4XGFl9O1KTYcff0pw==} + engines: {node: '>=4.0.0'} - /d3-scale@2.2.2: - resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==} - dependencies: - d3-array: 1.2.4 - d3-collection: 1.0.7 - d3-format: 1.4.5 - d3-interpolate: 1.4.0 - d3-time: 1.1.0 - d3-time-format: 2.3.0 - dev: false + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - /d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.0.0 - d3-time-format: 4.1.0 - dev: false + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - /d3-selection@1.4.2: - resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==} - dev: false + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - dev: false + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - dependencies: - d3-path: 1.0.9 - dev: false + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - /d3-shape@3.1.0: - resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} - engines: {node: '>=12'} - dependencies: - d3-path: 3.0.1 - dev: false + sass@1.85.1: + resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==} + engines: {node: '>=14.0.0'} + hasBin: true - /d3-time-format@2.3.0: - resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} - dependencies: - d3-time: 1.1.0 - dev: false + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - /d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - dependencies: - d3-time: 3.0.0 - dev: false + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} - /d3-time@1.1.0: - resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} - dev: false + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} - /d3-time@3.0.0: - resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - dev: false + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - /d3-timer@1.0.10: - resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} - dev: false + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true - /d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - dev: false + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true - /d3-transition@1.3.2: - resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==} - dependencies: - d3-color: 1.4.1 - d3-dispatch: 1.0.6 - d3-ease: 1.0.7 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-timer: 1.0.10 - dev: false + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true - /d3-transition@3.0.1(d3-selection@3.0.0): - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - dev: false - - /d3-voronoi@1.1.4: - resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==} - dev: false - - /d3-zoom@1.8.3: - resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==} - dependencies: - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-transition: 1.3.2 - dev: false - - /d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - dev: false - - /d3@5.16.0: - resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==} - dependencies: - d3-array: 1.2.4 - d3-axis: 1.0.12 - d3-brush: 1.1.6 - d3-chord: 1.0.6 - d3-collection: 1.0.7 - d3-color: 1.4.1 - d3-contour: 1.3.2 - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-dsv: 1.2.0 - d3-ease: 1.0.7 - d3-fetch: 1.2.0 - d3-force: 1.2.1 - d3-format: 1.4.5 - d3-geo: 1.12.1 - d3-hierarchy: 1.1.9 - d3-interpolate: 1.4.0 - d3-path: 1.0.9 - d3-polygon: 1.0.6 - d3-quadtree: 1.0.7 - d3-random: 1.1.2 - d3-scale: 2.2.2 - d3-scale-chromatic: 1.5.0 - d3-selection: 1.4.2 - d3-shape: 1.3.7 - d3-time: 1.1.0 - d3-time-format: 2.3.0 - d3-timer: 1.0.10 - d3-transition: 1.3.2 - d3-voronoi: 1.1.4 - d3-zoom: 1.8.3 - dev: false - - /d3@7.8.5: - resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.0 - d3-delaunay: 6.0.2 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.0.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.0.1 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.0.0 - d3-selection: 3.0.0 - d3-shape: 3.1.0 - d3-time: 3.0.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - dev: false - - /dagre-d3@0.6.4: - resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==} - dependencies: - d3: 5.16.0 - dagre: 0.8.5 - graphlib: 2.1.8 - lodash: 4.17.21 - dev: false + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} - /dagre@0.8.5: - resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} - dependencies: - graphlib: 2.1.8 - lodash: 4.17.21 - dev: false + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - /dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - dev: true - /dashdash@1.14.1: - resolution: {integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - dev: true + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} - /date-fns@2.28.0: - resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==} - engines: {node: '>=0.11'} - dev: false + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} - /debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} - dependencies: - mimic-fn: 3.1.0 - dev: false + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} - /debug@3.1.0: - resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - /debug@4.3.4(supports-color@9.2.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 9.2.1 + simple-git-hooks@2.11.1: + resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==} + hasBin: true - /decamelize-keys@1.1.0: - resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} - /decamelize@1.2.0: - resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} - engines: {node: '>=0.10.0'} - dev: true + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - /decode-uri-component@0.2.0: - resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} - engines: {node: '>=0.10'} - dev: true + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - /decode-uri-component@0.4.1: - resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} - engines: {node: '>=14.16'} - dev: false + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} - /decompress-response@3.3.0: - resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} - /decompress-tar@4.1.1: - resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} - engines: {node: '>=4'} - dependencies: - file-type: 5.2.0 - is-stream: 1.1.0 - tar-stream: 1.6.2 - dev: true + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} - /decompress-tarbz2@4.1.1: - resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 6.2.0 - is-stream: 1.1.0 - seek-bzip: 1.0.6 - unbzip2-stream: 1.4.3 - dev: true + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - /decompress-targz@4.1.1: - resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 5.2.0 - is-stream: 1.1.0 - dev: true + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} - /decompress-unzip@4.0.1: - resolution: {integrity: sha1-3qrM39FK6vhVePczroIQ+bSEj2k=} - engines: {node: '>=4'} - dependencies: - file-type: 3.9.0 - get-stream: 2.3.1 - pify: 2.3.0 - yauzl: 2.10.0 - dev: true + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - /decompress@4.2.1: - resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - decompress-tarbz2: 4.1.1 - decompress-targz: 4.1.1 - decompress-unzip: 4.0.1 - graceful-fs: 4.2.10 - make-dir: 1.3.0 - pify: 2.3.0 - strip-dirs: 2.1.0 - dev: true - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - /deepmerge@4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /defaults@1.0.3: - resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} - dependencies: - clone: 1.0.4 - dev: true + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - /defer-to-connect@1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - /define-properties@1.1.3: - resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} - engines: {node: '>= 0.4'} - dependencies: - object-keys: 1.1.1 + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - /define-property@0.2.5: - resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 0.1.6 - dev: true + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - /define-property@1.0.0: - resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - dev: true + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} - /define-property@2.0.2: - resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - isobject: 3.0.1 - dev: true + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - /delaunator@5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} - dependencies: - robust-predicates: 3.0.1 - dev: false + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /delayed-stream@1.0.0: - resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} - engines: {node: '>=0.4.0'} - dev: true + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} - /depd@1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} - /deprecated-decorator@0.1.6: - resolution: {integrity: sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=} - dev: true + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} - /destroy@1.0.4: - resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - requiresBuild: true - dev: true - optional: true + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - /dicer@0.3.0: - resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} - engines: {node: '>=4.5.0'} - dependencies: - streamsearch: 0.1.2 - dev: true + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} - /dir-compare@2.4.0: - resolution: {integrity: sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==} - hasBin: true - dependencies: - buffer-equal: 1.0.0 - colors: 1.0.3 - commander: 2.9.0 - minimatch: 3.0.4 - dev: true + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} - /dir-glob@2.2.2: - resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} - engines: {node: '>=4'} - dependencies: - path-type: 3.0.0 - dev: true + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - /dmg-builder@23.1.0: - resolution: {integrity: sha512-CzhPk/k12nJ2KqTbePkIwHOLiaWneQu2cgXCT9Hb5FhwI1vxTPalLsg8OZ57wKCrkL8AEftqqSff8gB5yWY/xw==} - dependencies: - app-builder-lib: 23.1.0 - builder-util: 23.0.9 - builder-util-runtime: 9.0.2 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.0 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - supports-color - dev: true + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} - /dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - os: [darwin] - hasBin: true - requiresBuild: true - dependencies: - '@types/plist': 3.0.2 - '@types/verror': 1.10.5 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.0.5 - smart-buffer: 4.2.0 - verror: 1.10.1 - dev: true - optional: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} - /doctypes@1.1.0: - resolution: {integrity: sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=} - dev: true + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} - /dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.2.0 - entities: 2.2.0 - dev: false + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} - /dom-serializer@1.3.2: - resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} - dependencies: - domelementtype: 2.2.0 - domhandler: 4.3.0 - entities: 2.2.0 + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} - /dom-to-image@2.6.0: - resolution: {integrity: sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==} - dev: false + synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: false + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} - /domelementtype@2.2.0: - resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + tailwind-merge@3.0.2: + resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + tailwindcss@4.0.9: + resolution: {integrity: sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==} - /domhandler@4.3.0: - resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.2.0 + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} - /dompurify@2.3.8: - resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==} - dev: false + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: false + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.3.2 - domelementtype: 2.2.0 - domhandler: 4.3.0 + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - /dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - dependencies: - is-obj: 2.0.0 - dev: false + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: true + tiny-conventional-commits-parser@0.0.1: + resolution: {integrity: sha512-N5+AZWdBeHNSgTIaxvx0+9mFrnW4H1BbjQ84H7i3TuWSkno8Hju886hLaHZhE/hYEKrfrfl/uHurqpZJHDuYGQ==} - /dotenv@16.0.1: - resolution: {integrity: sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==} - engines: {node: '>=12'} - dev: true + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - /dotenv@9.0.2: - resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} - engines: {node: '>=10'} - dev: true + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} - /download-git-repo@3.0.2: - resolution: {integrity: sha512-N8hWXD4hXqmEcNoR8TBYFntaOcYvEQ7Bz90mgm3bZRTuteGQqwT32VDMnTyD0KTEvb8BWrMc1tVmzuV9u/WrAg==} - dependencies: - download: 7.1.0 - git-clone: 0.1.0 - rimraf: 3.0.2 - dev: true + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} - /download@7.1.0: - resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} - engines: {node: '>=6'} - dependencies: - archive-type: 4.0.0 - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 8.1.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 8.3.2 - make-dir: 1.3.0 - p-event: 2.3.1 - pify: 3.0.0 - dev: true - - /duplexer2@0.1.4: - resolution: {integrity: sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=} - dependencies: - readable-stream: 2.3.7 - dev: false - - /duplexer3@0.1.4: - resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /easy-stack@1.0.1: - resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==} - engines: {node: '>=6.0.0'} - dev: true + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - /ecc-jsbn@0.1.2: - resolution: {integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=} - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - dev: true + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} - /ee-first@1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} - /ejs@2.7.4: - resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true + toml-eslint-parser@0.10.0: + resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true - dependencies: - jake: 10.8.5 - dev: true - /electron-builder@23.1.0: - resolution: {integrity: sha512-UEblaQY8N9m8/HriOwl7jgFJ4olpWDXwdDBqwUkQiRHVNRnCfrA0u8LV03li5ZYhma6zFWzfIZbHd+uk8y//lQ==} - engines: {node: '>=14.0.0'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - dependencies: - '@types/yargs': 17.0.10 - app-builder-lib: 23.1.0 - builder-util: 23.0.9 - builder-util-runtime: 9.0.2 - chalk: 4.1.2 - dmg-builder: 23.1.0 - fs-extra: 10.1.0 - is-ci: 3.0.1 - lazy-val: 1.0.5 - read-config-file: 6.2.0 - update-notifier: 5.1.0 - yargs: 17.5.1 - transitivePeerDependencies: - - supports-color - dev: true - /electron-notarize@1.2.1: - resolution: {integrity: sha512-u/ECWhIrhkSQpZM4cJzVZ5TsmkaqrRo5LDC/KMbGF0sPkm53Ng59+M0zp8QVaql0obfJy9vlVT+4iOkAi2UDlA==} - engines: {node: '>= 10.0.0'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - fs-extra: 9.1.0 - transitivePeerDependencies: - - supports-color - dev: true + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - /electron-osx-sign@0.6.0: - resolution: {integrity: sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==} - engines: {node: '>=4.0.0'} - hasBin: true - dependencies: - bluebird: 3.7.2 - compare-version: 0.1.2 - debug: 2.6.9 - isbinaryfile: 3.0.3 - minimist: 1.2.6 - plist: 3.0.5 - transitivePeerDependencies: - - supports-color - dev: true + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' - /electron-publish@23.0.9: - resolution: {integrity: sha512-afr2z6L07/elgDX+6I/G/0vzXOP6xYUd/aXx9tnTPSVZ/3AuvCegHrKiuh8sKYHmzoAcNGXe3ikISYIu961IfA==} - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 23.0.9 - builder-util-runtime: 9.0.2 - chalk: 4.1.2 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - dev: true + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - /electron-store@8.0.1: - resolution: {integrity: sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==} - dependencies: - conf: 10.1.1 - type-fest: 1.4.0 - dev: false + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - /electron-to-chromium@1.4.87: - resolution: {integrity: sha512-EXXTtDHFUKdFVkCnhauU7Xp8wmFC1ZG6GK9a1BeI2vvNhy61IwfNPo/CRexhf7mh4ajxAHJPind62BzpzVUeuQ==} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} - /electron@12.2.3: - resolution: {integrity: sha512-B27c7eqx1bC5kea6An8oVhk1pShNC4VGqWarHMhD47MDtmg54KepHO5AbAvmKKZK/jWN7NTC7wyCYTDElJNtQA==} - engines: {node: '>= 8.6'} - hasBin: true - requiresBuild: true - dependencies: - '@electron/get': 1.14.1 - '@types/node': 14.18.2 - extract-zip: 1.7.0 - transitivePeerDependencies: - - supports-color - dev: true + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} - /electron@16.2.3: - resolution: {integrity: sha512-4Tzz1YjE99eSqyqmaPVMpKFH+vyyPENdZsnJHtPHcRP76U87DI2HFd53w9GiSAElueqRe4iw/AqmIBROpjQDNQ==} - engines: {node: '>= 8.6'} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} hasBin: true - requiresBuild: true - dependencies: - '@electron/get': 1.14.1 - '@types/node': 14.18.2 - extract-zip: 1.7.0 - transitivePeerDependencies: - - supports-color - dev: true - /emmet@2.3.6: - resolution: {integrity: sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==} - dependencies: - '@emmetio/abbreviation': 2.2.3 - '@emmetio/css-abbreviation': 2.1.4 - dev: true + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - /encodeurl@1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} - engines: {node: '>= 0.8'} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} - /engine.io-client@6.1.1(utf-8-validate@5.0.9): - resolution: {integrity: sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==} - dependencies: - '@socket.io/component-emitter': 3.0.0 - debug: 4.3.4(supports-color@9.2.1) - engine.io-parser: 5.0.3 - has-cors: 1.1.0 - parseqs: 0.0.6 - parseuri: 0.0.6 - ws: 8.2.3(utf-8-validate@5.0.9) - xmlhttprequest-ssl: 2.0.0 - yeast: 0.1.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + unimport@4.1.2: + resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==} + engines: {node: '>=18.12.0'} - /engine.io-parser@5.0.3: - resolution: {integrity: sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==} - engines: {node: '>=10.0.0'} - dependencies: - '@socket.io/base64-arraybuffer': 1.0.2 - dev: true + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /engine.io@6.1.3(utf-8-validate@5.0.9): - resolution: {integrity: sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==} - engines: {node: '>=10.0.0'} - dependencies: - '@types/cookie': 0.4.1 - '@types/cors': 2.8.12 - '@types/node': 17.0.22 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.4.2 - cors: 2.8.5 - debug: 4.3.4(supports-color@9.2.1) - engine.io-parser: 5.0.3 - ws: 8.2.3(utf-8-validate@5.0.9) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - /enhanced-resolve@0.9.1: - resolution: {integrity: sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=} - engines: {node: '>=0.6'} - dependencies: - graceful-fs: 4.2.10 - memory-fs: 0.2.0 - tapable: 0.1.10 - dev: true + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - /enhanced-resolve@5.9.2: - resolution: {integrity: sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.10 - tapable: 2.2.1 - dev: true + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - /enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.1 - dev: true + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: true + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} - /envinfo@7.8.1: - resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} - engines: {node: '>=4'} + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + + unplugin-auto-import@19.1.0: + resolution: {integrity: sha512-B+TGBEBHqY9aR+7YfShfLujETOHstzpV+yaqgy5PkfV0QG7Py+TYMX7vJ9W4SrysHR+UzR+gzcx/nuZjmPeclA==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + + unplugin-vue-components@28.4.0: + resolution: {integrity: sha512-fnamX2RiKM30nPK4tihEas+bHnbLICo6MmOiP4jGg7fAlgNEuaLvN9yx96JwZDOYfLQcrNzikDdPhZ8k6pkhMg==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@2.2.0: + resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} + engines: {node: '>=18.12.0'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true - dev: true + peerDependencies: + browserslist: '>= 4.21.0' - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - /errorhandler@1.5.1: - resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==} - engines: {node: '>= 0.8'} - dependencies: - accepts: 1.3.8 - escape-html: 1.0.3 - dev: false + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - /es-abstract@1.19.1: - resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-symbols: 1.0.2 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.1 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.0 - object-keys: 1.1.1 - object.assign: 4.1.2 - string.prototype.trimend: 1.0.4 - string.prototype.trimstart: 1.0.4 - unbox-primitive: 1.0.1 + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /es-module-lexer@0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.4 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} - /es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - requiresBuild: true - dev: true - optional: true + vite@6.1.1: + resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true - /esbuild-android-64@0.14.27: - resolution: {integrity: sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==} + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true - /esbuild-android-arm64@0.14.27: - resolution: {integrity: sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' - /esbuild-darwin-64@0.14.27: - resolution: {integrity: sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 - /esbuild-darwin-arm64@0.14.27: - resolution: {integrity: sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - /esbuild-freebsd-64@0.14.27: - resolution: {integrity: sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + watchboy@0.4.3: + resolution: {integrity: sha512-GHs1HxwvxSMBsqd/WfTOZhj5gBdMqf5HQpfgtKxDfZRxrlYPDdVLRB61LCeRzJaWANmvSIMlfmRVDwVmJFgAKA==} + engines: {node: '>=8.0.0'} - /esbuild-freebsd-arm64@0.14.27: - resolution: {integrity: sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - /esbuild-linux-32@0.14.27: - resolution: {integrity: sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - /esbuild-linux-64@0.14.27: - resolution: {integrity: sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true - /esbuild-linux-arm64@0.14.27: - resolution: {integrity: sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - /esbuild-linux-arm@0.14.27: - resolution: {integrity: sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} - /esbuild-linux-mips64le@0.14.27: - resolution: {integrity: sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} - /esbuild-linux-ppc64le@0.14.27: - resolution: {integrity: sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-riscv64@0.14.27: - resolution: {integrity: sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} - /esbuild-linux-s390x@0.14.27: - resolution: {integrity: sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /esbuild-netbsd-64@0.14.27: - resolution: {integrity: sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - /esbuild-openbsd-64@0.14.27: - resolution: {integrity: sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==} + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /esbuild-sunos-64@0.14.27: - resolution: {integrity: sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} - /esbuild-windows-32@0.14.27: - resolution: {integrity: sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} - /esbuild-windows-64@0.14.27: - resolution: {integrity: sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - /esbuild-windows-arm64@0.14.27: - resolution: {integrity: sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - /esbuild@0.14.27: - resolution: {integrity: sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==} - engines: {node: '>=12'} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} hasBin: true - requiresBuild: true - optionalDependencies: - esbuild-android-64: 0.14.27 - esbuild-android-arm64: 0.14.27 - esbuild-darwin-64: 0.14.27 - esbuild-darwin-arm64: 0.14.27 - esbuild-freebsd-64: 0.14.27 - esbuild-freebsd-arm64: 0.14.27 - esbuild-linux-32: 0.14.27 - esbuild-linux-64: 0.14.27 - esbuild-linux-arm: 0.14.27 - esbuild-linux-arm64: 0.14.27 - esbuild-linux-mips64le: 0.14.27 - esbuild-linux-ppc64le: 0.14.27 - esbuild-linux-riscv64: 0.14.27 - esbuild-linux-s390x: 0.14.27 - esbuild-netbsd-64: 0.14.27 - esbuild-openbsd-64: 0.14.27 - esbuild-sunos-64: 0.14.27 - esbuild-windows-32: 0.14.27 - esbuild-windows-64: 0.14.27 - esbuild-windows-arm64: 0.14.27 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - /escape-goat@2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} - /escape-html@1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /eslint-config-prettier@8.3.0(eslint@8.5.0): - resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.5.0 - dev: true + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} - /eslint-config-standard@16.0.3(eslint-plugin-import@2.25.3)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@6.0.0)(eslint@8.5.0): - resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - dependencies: - eslint: 8.5.0 - eslint-plugin-import: 2.25.3(@typescript-eslint/parser@5.8.0)(eslint@8.5.0) - eslint-plugin-node: 11.1.0(eslint@8.5.0) - eslint-plugin-promise: 6.0.0(eslint@8.5.0) - dev: true + zhead@2.2.4: + resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} - /eslint-import-resolver-node@0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} - dependencies: - debug: 3.2.7 - resolve: 1.22.0 + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + 7zip-bin@5.2.0: {} + + '@alloc/quick-lru@5.2.0': {} + + '@antfu/eslint-config@3.16.0(@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.13)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@antfu/install-pkg': 1.0.0 + '@clack/prompts': 0.9.1 + '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + '@eslint/markdown': 6.2.2 + '@stylistic/eslint-plugin': 2.13.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@vitest/eslint-plugin': 1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + eslint-config-flat-gitignore: 1.0.1(eslint@9.19.0(jiti@2.4.2)) + eslint-flat-config-utils: 1.1.0 + eslint-merge-processors: 1.0.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-antfu: 2.7.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-command: 2.1.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.6.1(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-jsdoc: 50.6.3(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.19.1(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-n: 17.15.1(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-no-only-tests: 3.3.0 + eslint-plugin-perfectionist: 4.8.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-regexp: 2.7.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-toml: 0.12.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-unicorn: 56.0.1(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-vue: 9.32.0(eslint@9.19.0(jiti@2.4.2)) + eslint-plugin-yml: 1.16.0(eslint@9.19.0(jiti@2.4.2)) + eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.19.0(jiti@2.4.2)) + globals: 15.14.0 + jsonc-eslint-parser: 2.4.0 + local-pkg: 1.0.0 + parse-gitignore: 2.0.0 + picocolors: 1.1.1 + toml-eslint-parser: 0.10.0 + vue-eslint-parser: 9.4.3(eslint@9.19.0(jiti@2.4.2)) + yaml-eslint-parser: 1.2.3 + yargs: 17.7.2 transitivePeerDependencies: + - '@eslint/json' + - '@typescript-eslint/utils' + - '@vue/compiler-sfc' - supports-color - dev: true + - typescript + - vitest - /eslint-import-resolver-webpack@0.13.2(eslint-plugin-import@2.25.3)(webpack@5.70.0): - resolution: {integrity: sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==} - engines: {node: '>= 6'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - webpack: '>=1.11.0' + '@antfu/install-pkg@1.0.0': dependencies: - array-find: 1.0.0 - debug: 3.2.7 - enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.25.3(@typescript-eslint/parser@5.8.0)(eslint@8.5.0) - find-root: 1.1.0 - has: 1.0.3 - interpret: 1.4.0 - is-core-module: 2.8.1 - is-regex: 1.1.4 - lodash: 4.17.21 - resolve: 1.22.0 - semver: 5.7.1 - webpack: 5.70.0 - transitivePeerDependencies: - - supports-color - dev: true + package-manager-detector: 0.2.9 + tinyexec: 0.3.2 - /eslint-module-utils@2.7.1(@typescript-eslint/parser@5.8.0)(eslint-import-resolver-node@0.3.6): - resolution: {integrity: sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.26.2': dependencies: - '@typescript-eslint/parser': 5.8.0(eslint@8.5.0)(typescript@4.5.4) - debug: 3.2.7 - eslint-import-resolver-node: 0.3.6 - find-up: 2.1.0 - pkg-dir: 2.0.0 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - /eslint-plugin-es@3.0.1(eslint@8.5.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.7': dependencies: - eslint: 8.5.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true + '@babel/types': 7.26.7 - /eslint-plugin-import@2.25.3(@typescript-eslint/parser@5.8.0)(eslint@8.5.0): - resolution: {integrity: sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + '@babel/types@7.26.7': dependencies: - '@typescript-eslint/parser': 5.8.0(eslint@8.5.0)(typescript@4.5.4) - array-includes: 3.1.4 - array.prototype.flat: 1.2.5 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 8.5.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.1(@typescript-eslint/parser@5.8.0)(eslint-import-resolver-node@0.3.6) - has: 1.0.3 - is-core-module: 2.8.1 - is-glob: 4.0.3 - minimatch: 3.0.4 - object.values: 1.1.5 - resolve: 1.22.0 - tsconfig-paths: 3.12.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 - /eslint-plugin-node@11.1.0(eslint@8.5.0): - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 8.5.0 - eslint-plugin-es: 3.0.1(eslint@8.5.0) - eslint-utils: 2.1.0 - ignore: 5.2.0 - minimatch: 3.0.4 - resolve: 1.22.0 - semver: 6.3.0 - dev: true - - /eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.3.0)(eslint@8.5.0)(prettier@2.6.2): - resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} - engines: {node: '>=6.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true + '@clack/core@0.4.1': dependencies: - eslint: 8.5.0 - eslint-config-prettier: 8.3.0(eslint@8.5.0) - prettier: 2.6.2 - prettier-linter-helpers: 1.0.0 - dev: true + picocolors: 1.1.1 + sisteransi: 1.0.5 - /eslint-plugin-promise@6.0.0(eslint@8.5.0): - resolution: {integrity: sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@clack/prompts@0.9.1': dependencies: - eslint: 8.5.0 - dev: true + '@clack/core': 0.4.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 - /eslint-plugin-vue@8.2.0(eslint@8.5.0): - resolution: {integrity: sha512-cLIdTuOAMXyHeQ4drYKcZfoyzdwdBpH279X8/N0DgmotEI9yFKb5O/cAgoie/CkQZCH/MOmh0xw/KEfS90zY2A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + '@commitlint/cli@19.7.1(@types/node@22.13.1)(typescript@5.7.3)': dependencies: - eslint: 8.5.0 - eslint-utils: 3.0.0(eslint@8.5.0) - natural-compare: 1.4.0 - semver: 7.3.5 - vue-eslint-parser: 8.0.1(eslint@8.5.0) + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@22.13.1)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 transitivePeerDependencies: - - supports-color - dev: true + - '@types/node' + - typescript - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + '@commitlint/config-conventional@19.7.1': dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 - /eslint-scope@6.0.0: - resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@commitlint/config-validator@19.5.0': dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true + '@commitlint/types': 19.5.0 + ajv: 8.17.1 - /eslint-scope@7.1.0: - resolution: {integrity: sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@commitlint/ensure@19.5.0': dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true + '@commitlint/execute-rule@19.5.0': {} - /eslint-utils@3.0.0(eslint@8.5.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' + '@commitlint/format@19.5.0': dependencies: - eslint: 8.5.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true + '@commitlint/types': 19.5.0 + chalk: 5.4.1 - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true + '@commitlint/is-ignored@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.7.1 - /eslint-visitor-keys@3.1.0: - resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@commitlint/lint@19.7.1': + dependencies: + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 - /eslint@8.5.0: - resolution: {integrity: sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + '@commitlint/load@19.6.1(@types/node@22.13.1)(typescript@5.7.3)': dependencies: - '@eslint/eslintrc': 1.0.5 - '@humanwhocodes/config-array': 0.9.2 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.2.1) - doctrine: 3.0.0 - enquirer: 2.3.6 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.0 - eslint-utils: 3.0.0(eslint@8.5.0) - eslint-visitor-keys: 3.1.0 - espree: 9.2.0 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 6.0.2 - globals: 13.12.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.1)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 - minimatch: 3.0.4 - natural-compare: 1.4.0 - optionator: 0.9.1 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.3.5 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - v8-compile-cache: 2.3.0 + lodash.uniq: 4.5.0 transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.2.0: - resolution: {integrity: sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.7.0 - acorn-jsx: 5.3.2(acorn@8.7.0) - eslint-visitor-keys: 3.1.0 - dev: true + - '@types/node' + - typescript - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true + '@commitlint/message@19.5.0': {} - /esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} + '@commitlint/parse@19.5.0': dependencies: - estraverse: 5.3.0 - dev: true + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + '@commitlint/read@19.5.0': dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 - /etag@1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} - engines: {node: '>= 0.6'} - - /event-pubsub@4.3.0: - resolution: {integrity: sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==} - engines: {node: '>=4.0.0'} - dev: true - - /event-stream@3.3.4: - resolution: {integrity: sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=} + '@commitlint/resolve-extends@19.5.0': dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 - /eventemitter3@3.1.2: - resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} - dev: true + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + '@commitlint/to-lines@19.5.0': {} - /exec-sh@0.2.2: - resolution: {integrity: sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==} + '@commitlint/top-level@19.5.0': dependencies: - merge: 1.2.1 - dev: true + find-up: 7.0.0 - /execa@0.9.0: - resolution: {integrity: sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==} - engines: {node: '>=4'} + '@commitlint/types@19.5.0': dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - dev: true + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 - /execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} + '@develar/schema-utils@2.6.5': dependencies: - cross-spawn: 6.0.5 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - dev: true + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) - /execa@3.4.0: - resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==} - engines: {node: ^8.12.0 || >=9.7.0} + '@electron/asar@3.2.18': dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - p-finally: 2.0.1 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + '@electron/get@2.0.3': dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.6 - strip-final-newline: 2.0.0 - dev: true + debug: 4.4.0(supports-color@5.5.0) + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color - /expand-brackets@2.1.4: - resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=} - engines: {node: '>=0.10.0'} + '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 8.1.0 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + proc-log: 2.0.1 + semver: 7.7.1 + tar: 6.2.1 + which: 2.0.2 transitivePeerDependencies: + - bluebird - supports-color - dev: true - /expand-tilde@2.0.2: - resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=} - engines: {node: '>=0.10.0'} + '@electron/notarize@2.5.0': dependencies: - homedir-polyfill: 1.0.3 - dev: true - - /express-history-api-fallback@2.2.1: - resolution: {integrity: sha1-OirSf3vryQ/FM9EQ18bYMJe80Fc=} - dev: true + debug: 4.4.0(supports-color@5.5.0) + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color - /express-urlrewrite@1.4.0: - resolution: {integrity: sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==} + '@electron/osx-sign@1.3.1': dependencies: - debug: 4.3.4(supports-color@9.2.1) - path-to-regexp: 1.8.0 + compare-version: 0.1.2 + debug: 4.4.0(supports-color@5.5.0) + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 transitivePeerDependencies: - supports-color - dev: false - - /express@4.17.2: - resolution: {integrity: sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.19.1 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.4.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.2 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.9.6 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.17.2 - serve-static: 1.14.2 - setprototypeof: 1.2.0 - statuses: 1.5.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 + + '@electron/rebuild@3.6.1': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0(supports-color@5.5.0) + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.74.0 + node-api-version: 0.2.0 + node-gyp: 9.4.1 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.1 + tar: 6.2.1 + yargs: 17.7.2 transitivePeerDependencies: + - bluebird - supports-color - /express@4.18.0: - resolution: {integrity: sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.0 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.10.3 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 + '@electron/rebuild@3.7.1': + dependencies: + '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.0(supports-color@5.5.0) + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.74.0 + node-api-version: 0.2.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.1 + tar: 6.2.1 + yargs: 17.7.2 transitivePeerDependencies: + - bluebird - supports-color - dev: true - /ext-list@2.2.2: - resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} - engines: {node: '>=0.10.0'} + '@electron/universal@2.0.1': dependencies: - mime-db: 1.52.0 - dev: true + '@electron/asar': 3.2.18 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + dir-compare: 4.2.0 + fs-extra: 11.3.0 + minimatch: 9.0.5 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color - /ext-name@5.0.0: - resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} - engines: {node: '>=4'} + '@elysiajs/cors@1.2.0(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3))': dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - dev: true + elysia: 1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3) - /extend-shallow@2.0.1: - resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=} - engines: {node: '>=0.10.0'} + '@elysiajs/node@1.2.5(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3))(formidable@3.5.2)(ws@8.18.1)': dependencies: - is-extendable: 0.1.1 - dev: true + elysia: 1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3) + formidable: 3.5.2 + ws: 8.18.1 - /extend-shallow@3.0.2: - resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=} - engines: {node: '>=0.10.0'} + '@elysiajs/swagger@1.2.2(elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3))': dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: true + '@scalar/themes': 0.9.68 + '@scalar/types': 0.0.12 + elysia: 1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3) + openapi-types: 12.1.3 + pathe: 1.1.2 - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + '@es-joy/jsdoccomment@0.49.0': dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 - /extglob@2.0.4: - resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} - engines: {node: '>=0.10.0'} + '@es-joy/jsdoccomment@0.50.0': dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + '@typescript-eslint/types': 8.23.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 - /extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true - dependencies: - concat-stream: 1.6.2 - debug: 2.6.9 - mkdirp: 0.5.6 - yauzl: 2.10.0 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/aix-ppc64@0.24.2': + optional: true - /extsprintf@1.3.0: - resolution: {integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=} - engines: {'0': node >=0.6.0} - dev: true + '@esbuild/android-arm64@0.24.2': + optional: true - /extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - requiresBuild: true - dev: true + '@esbuild/android-arm@0.24.2': optional: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true + '@esbuild/freebsd-x64@0.24.2': + optional: true - /fast-glob@2.2.7: - resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} - engines: {node: '>=4.0.0'} - dependencies: - '@mrmlnc/readdir-enhanced': 2.2.1 - '@nodelib/fs.stat': 1.1.3 - glob-parent: 3.1.0 - is-glob: 4.0.3 - merge2: 1.4.1 - micromatch: 3.1.10 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/linux-arm64@0.24.2': + optional: true - /fast-glob@3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 + '@esbuild/linux-arm@0.24.2': + optional: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + '@esbuild/linux-ia32@0.24.2': + optional: true - /fast-levenshtein@2.0.6: - resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} - dev: true + '@esbuild/linux-loong64@0.24.2': + optional: true - /fast-plist@0.1.2: - resolution: {integrity: sha512-2HxzrqJhmMoxVzARjYFvkzkL2dCBB8sogU5sD8gqcZWv5UCivK9/cXM9KIPDRwU+eD3mbRDN/GhW8bO/4dtMfg==} - dev: false + '@esbuild/linux-mips64el@0.24.2': + optional: true - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} - dependencies: - reusify: 1.0.4 + '@esbuild/linux-ppc64@0.24.2': + optional: true - /fd-slicer@1.1.0: - resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} - dependencies: - pend: 1.2.0 - dev: true + '@esbuild/linux-riscv64@0.24.2': + optional: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true + '@esbuild/linux-s390x@0.24.2': + optional: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true + '@esbuild/linux-x64@0.24.2': + optional: true - /file-type@3.9.0: - resolution: {integrity: sha1-JXoHg4TR24CHvESdEH1SpSZyuek=} - engines: {node: '>=0.10.0'} - dev: true + '@esbuild/netbsd-arm64@0.24.2': + optional: true - /file-type@4.4.0: - resolution: {integrity: sha1-G2AOX8ofvcboDApwxxyNul95BsU=} - engines: {node: '>=4'} - dev: true + '@esbuild/netbsd-x64@0.24.2': + optional: true - /file-type@5.2.0: - resolution: {integrity: sha1-LdvqfHP/42No365J3DOMBYwritY=} - engines: {node: '>=4'} - dev: true + '@esbuild/openbsd-arm64@0.24.2': + optional: true - /file-type@6.2.0: - resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} - engines: {node: '>=4'} - dev: true + '@esbuild/openbsd-x64@0.24.2': + optional: true - /file-type@8.1.0: - resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} - engines: {node: '>=6'} - dev: true + '@esbuild/sunos-x64@0.24.2': + optional: true - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.0 - dev: true + '@esbuild/win32-arm64@0.24.2': + optional: true - /filename-reserved-regex@2.0.0: - resolution: {integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik=} - engines: {node: '>=4'} - dev: true + '@esbuild/win32-ia32@0.24.2': + optional: true - /filenamify@2.1.0: - resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} - engines: {node: '>=4'} - dependencies: - filename-reserved-regex: 2.0.0 - strip-outer: 1.0.1 - trim-repeated: 1.0.0 - dev: true + '@esbuild/win32-x64@0.24.2': + optional: true - /fill-range@4.0.0: - resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=} - engines: {node: '>=0.10.0'} + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.19.0(jiti@2.4.2))': dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true + escape-string-regexp: 4.0.0 + eslint: 9.19.0(jiti@2.4.2) + ignore: 5.3.2 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@2.4.2))': dependencies: - to-regex-range: 5.0.1 + eslint: 9.19.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 - /filter-obj@5.1.0: - resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} - engines: {node: '>=14.16'} - dev: false + '@eslint-community/regexpp@4.12.1': {} - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color + '@eslint/compat@1.2.6(eslint@9.19.0(jiti@2.4.2))': + optionalDependencies: + eslint: 9.19.0(jiti@2.4.2) - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + '@eslint/config-array@0.19.2': dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@5.5.0) + minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} + '@eslint/core@0.10.0': dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - dev: true + '@types/json-schema': 7.0.15 - /find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} + '@eslint/eslintrc@3.2.0': dependencies: - array-back: 3.1.0 + ajv: 6.12.6 + debug: 4.4.0(supports-color@5.5.0) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: true + '@eslint/js@9.19.0': {} - /find-up@2.1.0: - resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} - engines: {node: '>=4'} + '@eslint/markdown@6.2.2': dependencies: - locate-path: 2.0.0 - dev: true + '@eslint/core': 0.10.0 + '@eslint/plugin-kit': 0.2.5 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + transitivePeerDependencies: + - supports-color - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 + '@eslint/object-schema@2.1.6': {} - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + '@eslint/plugin-kit@0.2.5': dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true + '@eslint/core': 0.10.0 + levn: 0.4.1 - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + '@floating-ui/core@1.6.9': dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true + '@floating-ui/utils': 0.2.9 - /fkill@6.2.0: - resolution: {integrity: sha512-VoPpKScAzvZ07jtciOY0bJieJwyd/VVCuo4fn3nBLh4iBagzYED7GLQeFBpMpy7HP5edEKTDo8yxaIrYrwb7hg==} - engines: {node: '>=8'} + '@floating-ui/dom@1.6.13': dependencies: - aggregate-error: 3.1.0 - arrify: 2.0.1 - execa: 1.0.0 - pid-from-port: 1.1.3 - process-exists: 3.1.0 - taskkill: 3.1.0 - dev: true - - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.4 - rimraf: 3.0.2 - dev: true + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 - /flatted@3.2.4: - resolution: {integrity: sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==} - dev: true + '@floating-ui/utils@0.2.9': {} - /floating-vue@2.0.0-beta.17(vue@3.2.33): - resolution: {integrity: sha512-zgHPIdlILFxMEq2kLpeUpE3SUSd/zHI4pNAO2QYtp2rATkiSOlcLJidTDjG3mcBKzN3ahoAF6t/FhA1VbMTkAg==} - peerDependencies: - vue: ^3.2.0 + '@floating-ui/vue@1.1.6(vue@3.5.13(typescript@5.7.3))': dependencies: - '@floating-ui/dom': 0.1.10 - vue: 3.2.33 - vue-resize: 2.0.0-alpha.1(vue@3.2.33) - dev: false + '@floating-ui/dom': 1.6.13 + '@floating-ui/utils': 0.2.9 + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue - /flow-parser@0.168.0: - resolution: {integrity: sha512-YMlc+6vvyDPqWKOpzmyifJXBbwlNdqznuy8YBHxX1/90F8d+NnhsxMe1u/ok5LNvNJVJ2TVMkWudu0BUKOSawA==} - engines: {node: '>=0.4.0'} - dev: true + '@gar/promisify@1.1.3': {} - /follow-redirects@1.14.9: - resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + '@humanfs/core@0.19.1': {} - /fontello-cli@0.6.2: - resolution: {integrity: sha512-/85DkJNgbGOu0sh7sUAxWLbzq0cytWQtvn7WuRzpn6mcla6TEQz1JbYmpkAjX/PJiW867ujgoaFqm4CUoBBgwA==} - engines: {node: '>=8'} - hasBin: true + '@humanfs/node@0.16.6': dependencies: - colors: 1.4.0 - commander: 3.0.2 - mkdirp: 1.0.4 - needle: 2.9.1 - open: 7.4.2 - unzipper: 0.10.11 - transitivePeerDependencies: - - supports-color - dev: false + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.4 - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /for-in@1.0.2: - resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=} - engines: {node: '>=0.10.0'} - dev: true + '@humanwhocodes/retry@0.3.1': {} - /forever-agent@0.6.1: - resolution: {integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=} - dev: true + '@humanwhocodes/retry@0.4.1': {} - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true + '@interactjs/types@1.10.27': {} - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + '@internationalized/date@3.7.0': dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + '@swc/helpers': 0.5.15 - /fragment-cache@0.2.1: - resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=} - engines: {node: '>=0.10.0'} + '@internationalized/number@3.6.0': dependencies: - map-cache: 0.2.2 - dev: true - - /fresh@0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} + '@swc/helpers': 0.5.15 - /from2@2.3.0: - resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=} + '@isaacs/cliui@8.0.2': dependencies: - inherits: 2.0.4 - readable-stream: 2.3.7 - dev: true - - /from@0.1.7: - resolution: {integrity: sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=} - dev: true - - /fs-capacitor@2.0.4: - resolution: {integrity: sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==} - engines: {node: '>=8.5'} - dev: true - - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - /fs-exists-sync@0.1.0: - resolution: {integrity: sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=} - engines: {node: '>=0.10.0'} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': {} - /fs-extra@10.0.1: - resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} - engines: {node: '>=12'} + '@malept/cross-spawn-promise@2.0.0': dependencies: - graceful-fs: 4.2.9 - jsonfile: 6.1.0 - universalify: 2.0.0 + cross-spawn: 7.0.6 - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + '@malept/flatpak-bundler@0.4.0': dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true + debug: 4.4.0(supports-color@5.5.0) + fs-extra: 9.1.0 + lodash: 4.17.21 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + '@nodelib/fs.scandir@2.1.5': dependencies: - graceful-fs: 4.2.9 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true + '@nodelib/fs.stat@2.0.5': {} - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + '@nodelib/fs.walk@1.2.8': dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + '@npmcli/fs@2.1.2': dependencies: - minipass: 3.3.4 - dev: true + '@gar/promisify': 1.1.3 + semver: 7.7.1 - /fs-plus@3.1.1: - resolution: {integrity: sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==} + '@npmcli/move-file@2.0.1': dependencies: - async: 1.5.2 - mkdirp: 0.5.6 - rimraf: 2.7.1 - underscore-plus: 1.7.0 - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + mkdirp: 1.0.4 + rimraf: 3.0.2 - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + '@parcel/watcher-android-arm64@2.5.1': optional: true - /fstream@1.0.12: - resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} - engines: {node: '>=0.6'} - dependencies: - graceful-fs: 4.2.10 - inherits: 2.0.4 - mkdirp: 0.5.6 - rimraf: 2.7.1 - dev: false - - /fswin@2.17.1227: - resolution: {integrity: sha512-xNDktvwzSsXT8Xqnpz59VbuFwGHhtn1w+dS7QQ+wAu5cbH0p3WMGKU9Duf7cPna+nubhR+5ZG1MTl6/V6xgRgw==} - engines: {node: '>= 0.6'} - dev: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true - /functional-red-black-tree@1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} - dev: true + '@parcel/watcher-darwin-x64@2.5.1': + optional: true - /fuse.js@7.0.0: - resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} - engines: {node: '>=10'} - dev: false + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true - /generate-function@1.1.0: - resolution: {integrity: sha1-VMIbCAGSsW2Yd3ecW7gWZudyNl8=} - dev: true + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true - /generate-object-property@1.2.0: - resolution: {integrity: sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=} - dependencies: - is-property: 1.0.2 - dev: true + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true - /get-intrinsic@1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.2 + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true - /get-proxy@2.1.0: - resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} - engines: {node: '>=4'} - dependencies: - npm-conf: 1.1.3 - dev: true + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true - /get-stream@2.3.1: - resolution: {integrity: sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=} - engines: {node: '>=0.10.0'} - dependencies: - object-assign: 4.1.1 - pinkie-promise: 2.0.1 - dev: true + '@parcel/watcher-win32-arm64@2.5.1': + optional: true - /get-stream@3.0.0: - resolution: {integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=} - engines: {node: '>=4'} - dev: true + '@parcel/watcher-win32-ia32@2.5.1': + optional: true - /get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 + '@parcel/watcher-win32-x64@2.5.1': + optional: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + '@parcel/watcher@2.5.1': dependencies: - pump: 3.0.0 + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + '@pkgjs/parseargs@0.11.0': + optional: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.1 + '@pkgr/core@0.1.1': {} - /get-value@2.0.6: - resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=} - engines: {node: '>=0.10.0'} - dev: true + '@rollup/rollup-android-arm-eabi@4.34.8': + optional: true - /getpass@0.1.7: - resolution: {integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=} - dependencies: - assert-plus: 1.0.0 - dev: true + '@rollup/rollup-android-arm64@4.34.8': + optional: true - /git-clone@0.1.0: - resolution: {integrity: sha1-DXYWN3gJOu9/HDAjjyqe8/B6Lrk=} - dev: true + '@rollup/rollup-darwin-arm64@4.34.8': + optional: true - /git-config-path@1.0.1: - resolution: {integrity: sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - fs-exists-sync: 0.1.0 - homedir-polyfill: 1.0.3 - dev: true + '@rollup/rollup-darwin-x64@4.34.8': + optional: true - /git-raw-commits@2.0.10: - resolution: {integrity: sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true + '@rollup/rollup-freebsd-arm64@4.34.8': + optional: true - /glob-parent@3.1.0: - resolution: {integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=} - dependencies: - is-glob: 3.1.0 - path-dirname: 1.0.2 - dev: true + '@rollup/rollup-freebsd-x64@4.34.8': + optional: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + optional: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true + '@rollup/rollup-linux-arm-musleabihf@4.34.8': + optional: true - /glob-to-regexp@0.3.0: - resolution: {integrity: sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=} - dev: true + '@rollup/rollup-linux-arm64-gnu@4.34.8': + optional: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + '@rollup/rollup-linux-arm64-musl@4.34.8': + optional: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + optional: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + optional: true - /global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - requiresBuild: true - dependencies: - boolean: 3.1.4 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.3.5 - serialize-error: 7.0.1 - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true - /global-dirs@0.1.1: - resolution: {integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=} - engines: {node: '>=4'} - dependencies: - ini: 1.3.8 - dev: true + '@rollup/rollup-linux-s390x-gnu@4.34.8': + optional: true - /global-dirs@3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 + '@rollup/rollup-linux-x64-gnu@4.34.8': + optional: true - /global-tunnel-ng@2.7.1: - resolution: {integrity: sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==} - engines: {node: '>=0.10'} - requiresBuild: true - dependencies: - encodeurl: 1.0.2 - lodash: 4.17.21 - npm-conf: 1.1.3 - tunnel: 0.0.6 - dev: true + '@rollup/rollup-linux-x64-musl@4.34.8': optional: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + '@rollup/rollup-win32-arm64-msvc@4.34.8': + optional: true - /globals@13.12.0: - resolution: {integrity: sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true + '@rollup/rollup-win32-ia32-msvc@4.34.8': + optional: true - /globalthis@1.0.2: - resolution: {integrity: sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==} - engines: {node: '>= 0.4'} - requiresBuild: true - dependencies: - define-properties: 1.1.3 - dev: true + '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true - /globby@11.0.4: - resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 3.0.0 + '@scalar/openapi-types@0.1.1': {} - /globby@9.2.0: - resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} - engines: {node: '>=6'} - dependencies: - '@types/glob': 7.2.0 - array-union: 1.0.2 - dir-glob: 2.2.2 - fast-glob: 2.2.7 - glob: 7.2.0 - ignore: 4.0.6 - pify: 4.0.1 - slash: 2.0.0 - transitivePeerDependencies: - - supports-color - dev: true + '@scalar/openapi-types@0.1.8': {} - /got@8.3.2: - resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==} - engines: {node: '>=4'} + '@scalar/themes@0.9.68': dependencies: - '@sindresorhus/is': 0.7.0 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - cacheable-request: 2.1.4 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 3.0.0 - into-stream: 3.1.0 - is-retry-allowed: 1.2.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 0.4.1 - p-timeout: 2.0.1 - pify: 3.0.0 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 3.0.0 - url-to-options: 1.0.1 - dev: true + '@scalar/types': 0.0.34 - /got@9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} + '@scalar/types@0.0.12': dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 + '@scalar/openapi-types': 0.1.1 + '@unhead/schema': 1.11.19 - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - - /graceful-fs@4.2.9: - resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + '@scalar/types@0.0.34': + dependencies: + '@scalar/openapi-types': 0.1.8 + '@unhead/schema': 1.11.19 - /graceful-readlink@1.0.1: - resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} - dev: true + '@sinclair/typebox@0.34.27': {} - /graphlib@2.1.8: - resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} - dependencies: - lodash: 4.17.21 - dev: false + '@sindresorhus/is@4.6.0': {} - /graphql-extensions@0.15.0(graphql@14.7.0): - resolution: {integrity: sha512-bVddVO8YFJPwuACn+3pgmrEg6I8iBuYLuwvxiE+lcQQ7POotVZxm2rgGw0PvVYmWWf3DT7nTVDZ5ROh/ALp8mA==} - engines: {node: '>=6.0'} - deprecated: 'The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/' - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + '@stylistic/eslint-plugin@2.13.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@apollographql/apollo-tools': 0.5.3(graphql@14.7.0) - apollo-server-env: 3.1.0 - apollo-server-types: 0.9.0(graphql@14.7.0) - graphql: 14.7.0 + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + estraverse: 5.3.0 + picomatch: 4.0.2 transitivePeerDependencies: - - encoding - dev: true + - supports-color + - typescript - /graphql-subscriptions@1.2.1(graphql@14.7.0): - resolution: {integrity: sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g==} - peerDependencies: - graphql: ^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + '@swc/helpers@0.5.15': dependencies: - graphql: 14.7.0 - iterall: 1.3.0 - dev: true + tslib: 2.8.1 - /graphql-tag@2.12.6(graphql@14.7.0): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@szmarczak/http-timer@4.0.6': dependencies: - graphql: 14.7.0 - tslib: 2.4.0 - dev: true + defer-to-connect: 2.0.1 - /graphql-tools@4.0.8(graphql@14.7.0): - resolution: {integrity: sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==} - deprecated: This package has been deprecated and now it only exports makeExecutableSchema.\nAnd it will no longer receive updates.\nWe recommend you to migrate to scoped packages such as @graphql-tools/schema, @graphql-tools/utils and etc.\nCheck out https://www.graphql-tools.com to learn what package you should use instead - peerDependencies: - graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-link: 1.2.14(graphql@14.7.0) - apollo-utilities: 1.3.4(graphql@14.7.0) - deprecated-decorator: 0.1.6 - graphql: 14.7.0 - iterall: 1.3.0 - uuid: 3.4.0 - dev: true - - /graphql-type-json@0.3.2(graphql@14.7.0): - resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} - peerDependencies: - graphql: '>=0.8.0' + '@tailwindcss/node@4.0.9': dependencies: - graphql: 14.7.0 - dev: true + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + tailwindcss: 4.0.9 - /graphql@14.7.0: - resolution: {integrity: sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==} - engines: {node: '>= 6.x'} - dependencies: - iterall: 1.3.0 - dev: true + '@tailwindcss/oxide-android-arm64@4.0.9': + optional: true - /growly@1.3.0: - resolution: {integrity: sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=} - dev: true + '@tailwindcss/oxide-darwin-arm64@4.0.9': + optional: true - /handlebars@4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.6 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.16.3 - dev: true + '@tailwindcss/oxide-darwin-x64@4.0.9': + optional: true - /har-schema@2.0.0: - resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} - engines: {node: '>=4'} - dev: true + '@tailwindcss/oxide-freebsd-x64@4.0.9': + optional: true - /har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - dev: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9': + optional: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + '@tailwindcss/oxide-linux-arm64-gnu@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.0.9': + optional: true - /has-bigints@1.0.1: - resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + '@tailwindcss/oxide-linux-x64-gnu@4.0.9': + optional: true - /has-cors@1.1.0: - resolution: {integrity: sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=} - dev: true + '@tailwindcss/oxide-linux-x64-musl@4.0.9': + optional: true - /has-flag@3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} + '@tailwindcss/oxide-win32-arm64-msvc@4.0.9': + optional: true - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + '@tailwindcss/oxide-win32-x64-msvc@4.0.9': + optional: true + + '@tailwindcss/oxide@4.0.9': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.0.9 + '@tailwindcss/oxide-darwin-arm64': 4.0.9 + '@tailwindcss/oxide-darwin-x64': 4.0.9 + '@tailwindcss/oxide-freebsd-x64': 4.0.9 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.9 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.9 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.9 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.9 + '@tailwindcss/oxide-linux-x64-musl': 4.0.9 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.9 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.9 - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + '@tailwindcss/postcss@4.0.9': dependencies: - get-intrinsic: 1.1.1 - dev: true + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.0.9 + '@tailwindcss/oxide': 4.0.9 + lightningcss: 1.29.1 + postcss: 8.5.3 + tailwindcss: 4.0.9 - /has-symbol-support-x@1.4.2: - resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} - dev: true + '@tailwindcss/vite@4.0.9(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0))': + dependencies: + '@tailwindcss/node': 4.0.9 + '@tailwindcss/oxide': 4.0.9 + lightningcss: 1.29.1 + tailwindcss: 4.0.9 + vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0) - /has-symbols@1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} - engines: {node: '>= 0.4'} + '@tanstack/virtual-core@3.13.2': {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + '@tanstack/vue-virtual@3.13.2(vue@3.5.13(typescript@5.7.3))': + dependencies: + '@tanstack/virtual-core': 3.13.2 + vue: 3.5.13(typescript@5.7.3) + + '@tootallnate/once@2.0.0': {} - /has-to-string-tag-x@1.4.1: - resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + '@types/better-sqlite3@7.6.12': dependencies: - has-symbol-support-x: 1.4.2 - dev: true + '@types/node': 22.13.1 - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.13.1 + '@types/responselike': 1.0.3 + + '@types/codemirror@5.60.15': dependencies: - has-symbols: 1.0.2 + '@types/tern': 0.23.9 - /has-value@0.3.1: - resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=} - engines: {node: '>=0.10.0'} + '@types/conventional-commits-parser@5.0.1': dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - dev: true + '@types/node': 22.13.1 - /has-value@1.0.0: - resolution: {integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=} - engines: {node: '>=0.10.0'} + '@types/debug@4.1.12': dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - dev: true + '@types/ms': 2.1.0 - /has-values@0.1.4: - resolution: {integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=} - engines: {node: '>=0.10.0'} - dev: true + '@types/doctrine@0.0.9': {} - /has-values@1.0.0: - resolution: {integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=} - engines: {node: '>=0.10.0'} + '@types/eslint@9.6.1': dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - dev: true + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 - /has-yarn@2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} + '@types/estree@1.0.6': {} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + '@types/fs-extra@9.0.13': dependencies: - function-bind: 1.1.1 + '@types/node': 22.13.1 - /hex-color-regex@1.1.0: - resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} - dev: false + '@types/http-cache-semantics@4.0.4': {} - /highlight.js@11.5.1: - resolution: {integrity: sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==} - engines: {node: '>=12.0.0'} - dev: false + '@types/json-schema@7.0.15': {} - /highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} - engines: {node: '>=12.0.0'} - dev: false + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.13.1 - /homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} + '@types/mdast@4.0.4': dependencies: - parse-passwd: 1.0.0 - dev: true + '@types/unist': 3.0.3 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + '@types/ms@2.1.0': {} - /hosted-git-info@4.0.2: - resolution: {integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==} - engines: {node: '>=10'} + '@types/node@20.17.17': dependencies: - lru-cache: 6.0.0 - dev: true + undici-types: 6.19.8 - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + '@types/node@22.13.1': dependencies: - lru-cache: 6.0.0 - dev: true + undici-types: 6.20.0 - /hsl-regex@1.0.0: - resolution: {integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=} - dev: false + '@types/normalize-package-data@2.4.4': {} - /hsla-regex@1.0.0: - resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} - dev: false + '@types/plist@3.0.5': + dependencies: + '@types/node': 22.13.1 + xmlbuilder: 15.1.1 + optional: true - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + '@types/responselike@1.0.3': dependencies: - domelementtype: 2.2.0 - domhandler: 4.3.0 - domutils: 2.8.0 - entities: 2.2.0 + '@types/node': 22.13.1 - /htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + '@types/tern@0.23.9': dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - dev: true + '@types/estree': 1.0.6 - /http-cache-semantics@3.8.1: - resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} - dev: true + '@types/unist@3.0.3': {} - /http-cache-semantics@4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + '@types/verror@1.10.10': + optional: true - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 + '@types/web-bluetooth@0.0.20': {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + '@types/yauzl@2.10.3': dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 + '@types/node': 22.13.1 + optional: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + eslint: 9.19.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.1) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.19.0(jiti@2.4.2) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - /http-signature@1.2.0: - resolution: {integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=} - engines: {node: '>=0.8', npm: '>=1.3.7'} + '@typescript-eslint/scope-manager@8.23.0': dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.17.0 - dev: true + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.2.1) + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.19.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - dev: true - - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + '@typescript-eslint/types@8.23.0': {} - /husky@7.0.4: - resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} - engines: {node: '>=12'} - hasBin: true - dev: true - - /i18next-fs-backend@1.1.4: - resolution: {integrity: sha512-/MfAGMP0jHonV966uFf9PkWWuDjPYLIcsipnSO3NxpNtAgRUKLTwvm85fEmsF6hGeu0zbZiCQ3W74jwO6K9uXA==} - dev: false - - /i18next@21.8.14: - resolution: {integrity: sha512-4Yi+DtexvMm/Yw3Q9fllzY12SgLk+Mcmar+rCAccsOPul/2UmnBzoHbTGn/L48IPkFcmrNaH7xTLboBWIbH6pw==} + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': dependencies: - '@babel/runtime': 7.18.9 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0(supports-color@5.5.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color - /iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - requiresBuild: true + '@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - dev: true - optional: true + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + '@typescript-eslint/visitor-keys@8.23.0': dependencies: - safer-buffer: 2.1.2 + '@typescript-eslint/types': 8.23.0 + eslint-visitor-keys: 4.2.0 - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + '@unhead/schema@1.11.19': dependencies: - safer-buffer: 2.1.2 - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - requiresBuild: true - dev: true - - /ignore@4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - dev: true + hookable: 5.5.3 + zhead: 2.2.4 - /ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - - /immutable@4.0.0: - resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} - dev: true - - /import-fresh@2.0.0: - resolution: {integrity: sha1-2BNVwVYS04bGH53dOSLUMEgipUY=} - engines: {node: '>=4'} + '@vitejs/plugin-vue@5.2.1(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - caller-path: 2.0.0 - resolve-from: 3.0.0 - dev: false + vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0) + vue: 3.5.13(typescript@5.7.3) - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + '@vitest/eslint-plugin@1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + optionalDependencies: + typescript: 5.7.3 - /import-global@0.1.0: - resolution: {integrity: sha1-l7OP1EQRTuwWgkqTX42ldbV6oc4=} - engines: {node: '>=4'} + '@vue/compiler-core@3.5.13': dependencies: - global-dirs: 0.1.1 - dev: true - - /import-lazy@2.1.0: - resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} - engines: {node: '>=4'} - - /imurmurhash@0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /indexes-of@1.0.1: - resolution: {integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc=} - dev: false + '@babel/parser': 7.26.7 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + '@vue/compiler-dom@3.5.13': dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.7 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 - /inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} + '@vue/compiler-ssr@3.5.13': dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - dev: true + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 - /insertion-query@1.1.0: - resolution: {integrity: sha512-5HZCK1xmD+Cm5q9/Qk1S8tr2BqHtcvseGsg7LKD3WlHRg4OOCl7d6C5raGNXAhfV4NlUcHmAtdJt0b3vJPEuiA==} - dev: false + '@vue/devtools-api@6.6.4': {} - /interactjs@1.10.11: - resolution: {integrity: sha512-VPUWsGAOPmrZe1YF7Fq/4AIBBZ+3FikZRS8bpzT6VsAfUuhxl/CKJY73IAiZHd3fz9p174CXErn0Qs81XEFICA==} + '@vue/reactivity@3.5.13': dependencies: - '@interactjs/types': 1.10.11 - dev: false + '@vue/shared': 3.5.13 - /internal-slot@1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} + '@vue/runtime-core@3.5.13': dependencies: - get-intrinsic: 1.1.1 - has: 1.0.3 - side-channel: 1.0.4 + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 - /internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - dev: false - - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true - - /into-stream@2.0.1: - resolution: {integrity: sha1-25sANpRFPq4JHYpchMwRUHt4HTE=} - engines: {node: '>=0.10.0'} + '@vue/runtime-dom@3.5.13': dependencies: - from2: 2.3.0 - dev: true + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 - /into-stream@3.1.0: - resolution: {integrity: sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=} - engines: {node: '>=4'} + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))': dependencies: - from2: 2.3.0 - p-is-promise: 1.1.0 - dev: true - - /ip@1.1.5: - resolution: {integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=} - dev: true + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.7.3) - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - /is-absolute-url@2.1.0: - resolution: {integrity: sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=} - engines: {node: '>=0.10.0'} - dev: false + '@vue/shared@3.5.13': {} - /is-accessor-descriptor@0.1.6: - resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=} - engines: {node: '>=0.10.0'} + '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: - kind-of: 3.2.2 - dev: true + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue - /is-accessor-descriptor@1.0.0: - resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} - engines: {node: '>=0.10.0'} + '@vueuse/core@12.7.0(typescript@5.7.3)': dependencies: - kind-of: 6.0.3 - dev: true + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 12.7.0 + '@vueuse/shared': 12.7.0(typescript@5.7.3) + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript - /is-arrayish@0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + '@vueuse/metadata@10.11.1': {} - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false + '@vueuse/metadata@12.7.0': {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: - has-bigints: 1.0.1 + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + '@vueuse/shared@12.7.0(typescript@5.7.3)': dependencies: - binary-extensions: 2.2.0 - dev: true + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + '@xmldom/xmldom@0.8.10': {} - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 - /is-callable@1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} + abbrev@1.1.1: {} - /is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - ci-info: 2.0.0 + acorn: 8.14.0 - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - dependencies: - ci-info: 3.3.2 - dev: true + acorn@8.14.0: {} - /is-color-stop@1.1.0: - resolution: {integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=} + agent-base@6.0.2: dependencies: - css-color-names: 0.0.4 - hex-color-regex: 1.1.0 - hsl-regex: 1.0.0 - hsla-regex: 1.0.0 - rgb-regex: 1.0.1 - rgba-regex: 1.0.0 - dev: false + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /is-core-module@2.8.1: - resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} - dependencies: - has: 1.0.3 + agent-base@7.1.3: {} - /is-data-descriptor@0.1.4: - resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=} - engines: {node: '>=0.10.0'} + agentkeepalive@4.6.0: dependencies: - kind-of: 3.2.2 - dev: true + humanize-ms: 1.2.1 - /is-data-descriptor@1.0.0: - resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} - engines: {node: '>=0.10.0'} + aggregate-error@3.1.0: dependencies: - kind-of: 6.0.3 - dev: true + clean-stack: 2.2.0 + indent-string: 4.0.0 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 - /is-descriptor@0.1.6: - resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} - engines: {node: '>=0.10.0'} + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 - dev: true + ajv: 6.12.6 - /is-descriptor@1.0.2: - resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} - engines: {node: '>=0.10.0'} + ajv@6.12.6: dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.3 - dev: true - - /is-directory@0.3.1: - resolution: {integrity: sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=} - engines: {node: '>=0.10.0'} - dev: false - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 - /is-expression@4.0.0: - resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + ajv@8.17.1: dependencies: - acorn: 7.4.1 - object-assign: 4.1.1 - - /is-extendable@0.1.1: - resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=} - engines: {node: '>=0.10.0'} - dev: true + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - /is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} + ansi-escapes@7.0.0: dependencies: - is-plain-object: 2.0.4 - dev: true + environment: 1.1.0 - /is-extglob@2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} - engines: {node: '>=0.10.0'} - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /is-glob@3.1.0: - resolution: {integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=} - engines: {node: '>=0.10.0'} + ansi-styles@4.3.0: dependencies: - is-extglob: 2.1.1 - dev: true + color-convert: 2.0.1 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 + ansi-styles@6.2.1: {} - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} + anymatch@3.1.3: dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 + normalize-path: 3.0.0 + picomatch: 2.3.1 - /is-natural-number@4.0.1: - resolution: {integrity: sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=} - dev: true + app-builder-bin@5.0.0-alpha.10: {} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} + app-builder-lib@25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.8): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.6.1 + '@electron/universal': 2.0.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + bluebird-lst: 1.0.9 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chromium-pickle-js: 0.2.0 + config-file-ts: 0.2.8-rc1 + debug: 4.4.0(supports-color@5.5.0) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) + dotenv: 16.4.7 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.1.8(dmg-builder@25.1.8) + electron-publish: 25.1.7 + form-data: 4.0.1 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.4 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.0.1 + resedit: 1.7.2 + sanitize-filename: 1.6.3 + semver: 7.7.1 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color - /is-npm@5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} + aproba@2.0.0: {} - /is-number-object@1.0.6: - resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} - engines: {node: '>= 0.4'} + archiver-utils@2.1.0: dependencies: - has-tostringtag: 1.0.0 + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 - /is-number@3.0.0: - resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=} - engines: {node: '>=0.10.0'} + archiver-utils@3.0.4: dependencies: - kind-of: 3.2.2 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 - /is-object@1.0.2: - resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} - dev: true + are-docs-informative@0.0.2: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 - /is-plain-obj@1.1.0: - resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=} - engines: {node: '>=0.10.0'} - dev: true + argparse@2.0.1: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + aria-hidden@1.2.4: dependencies: - isobject: 3.0.1 - dev: true + tslib: 2.8.1 - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: false + array-ify@1.0.0: {} - /is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + asap@2.0.6: {} - /is-property@1.0.2: - resolution: {integrity: sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=} - dev: true + assert-plus@1.0.0: + optional: true - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + astral-regex@2.0.0: + optional: true - /is-resolvable@1.1.0: - resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==} - dev: false + async-exit-hook@2.0.1: {} - /is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} - engines: {node: '>=0.10.0'} - dev: true + async@3.2.6: {} - /is-shared-array-buffer@1.0.1: - resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} + asynckit@0.4.0: {} - /is-stream@1.1.0: - resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} - engines: {node: '>=0.10.0'} - dev: true + at-least-node@1.0.0: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + atomically@1.7.0: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + autoprefixer@10.4.20(postcss@8.5.3): dependencies: - has-tostringtag: 1.0.0 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001698 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.2 + balanced-match@1.0.2: {} - /is-text-path@1.0.1: - resolution: {integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=} - engines: {node: '>=0.10.0'} + base64-js@1.5.1: {} + + better-sqlite3@11.8.1: dependencies: - text-extensions: 1.9.0 - dev: true + bindings: 1.5.0 + prebuild-install: 7.1.3 - /is-typedarray@1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + binary-extensions@2.3.0: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + bindings@1.5.0: dependencies: - call-bind: 1.0.2 - - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + file-uri-to-path: 1.0.0 - /is-wsl@1.1.0: - resolution: {integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=} - engines: {node: '>=4'} - dev: true + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + bluebird-lst@1.0.9: dependencies: - is-docker: 2.2.1 + bluebird: 3.7.2 - /is-yarn-global@0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + bluebird@3.7.2: {} - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + boolbase@1.0.0: {} - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + boolean@3.2.0: + optional: true - /isbinaryfile@3.0.3: - resolution: {integrity: sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==} - engines: {node: '>=0.6.0'} + brace-expansion@1.1.11: dependencies: - buffer-alloc: 1.2.0 - dev: true - - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + balanced-match: 1.0.2 + concat-map: 0.0.1 - /isbinaryfile@4.0.8: - resolution: {integrity: sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==} - engines: {node: '>= 8.0.0'} - dev: true + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 - /isexe@2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + braces@3.0.3: + dependencies: + fill-range: 7.1.1 - /isobject@2.1.0: - resolution: {integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=} - engines: {node: '>=0.10.0'} + browserslist@4.24.4: dependencies: - isarray: 1.0.0 - dev: true + caniuse-lite: 1.0.30001698 + electron-to-chromium: 1.5.95 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) - /isobject@3.0.1: - resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} - engines: {node: '>=0.10.0'} - dev: true + buffer-crc32@0.2.13: {} - /isstream@0.1.2: - resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=} - dev: true + buffer-from@1.1.2: {} - /isurl@1.0.0: - resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} - engines: {node: '>= 4'} + buffer@5.7.1: dependencies: - has-to-string-tag-x: 1.4.1 - is-object: 1.0.2 - dev: true - - /iterall@1.3.0: - resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - dev: true + base64-js: 1.5.1 + ieee754: 1.2.1 - /jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} - engines: {node: '>=10'} - hasBin: true + builder-util-runtime@9.2.10: dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true + debug: 4.4.0(supports-color@5.5.0) + sax: 1.4.1 + transitivePeerDependencies: + - supports-color - /java-parser@2.0.1: - resolution: {integrity: sha512-IPzs8LN8drvAZKbgW1MLLsrEeW4TwSy714I6ZHlEGNV6/42S2xRU5zDn3lP6uZQakwi7nyC00T6lZvwEnBujzw==} + builder-util@25.1.7: dependencies: - chevrotain: 6.5.0 - lodash: 4.17.21 - dev: false + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.10 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@5.5.0) + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-ci: 3.0.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color - /javascript-stringify@1.6.0: - resolution: {integrity: sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=} - dev: true + builtin-modules@3.3.0: {} - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + bumpp@9.11.1: dependencies: - '@types/node': 17.0.45 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jju@1.4.0: - resolution: {integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo=} - dev: false - - /js-message@1.0.7: - resolution: {integrity: sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==} - engines: {node: '>=0.6.0'} - dev: true + c12: 2.0.1 + cac: 6.7.14 + escalade: 3.2.0 + js-yaml: 4.1.0 + jsonc-parser: 3.3.1 + package-manager-detector: 0.2.9 + prompts: 2.4.2 + semver: 7.7.1 + tiny-conventional-commits-parser: 0.0.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.10 + transitivePeerDependencies: + - magicast - /js-stringify@1.0.2: - resolution: {integrity: sha1-Fzb939lyTyijaCrcYjCufk6Weds=} - dev: true + c12@2.0.1: + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + giget: 1.2.4 + jiti: 2.4.2 + mlly: 1.7.4 + ohash: 1.1.4 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + cac@6.7.14: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + cacache@16.1.3: dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: dependencies: - argparse: 2.0.1 + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 - /jsbn@0.1.1: - resolution: {integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=} - dev: true + callsites@3.1.0: {} - /jscodeshift@0.11.0(@babel/preset-env@7.16.5): - resolution: {integrity: sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - dependencies: - '@babel/core': 7.16.5 - '@babel/parser': 7.17.9 - '@babel/plugin-proposal-class-properties': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-proposal-optional-chaining': 7.16.5(@babel/core@7.16.5) - '@babel/plugin-transform-modules-commonjs': 7.16.5(@babel/core@7.16.5) - '@babel/preset-env': 7.16.5(@babel/core@7.16.5) - '@babel/preset-flow': 7.16.5(@babel/core@7.16.5) - '@babel/preset-typescript': 7.16.5(@babel/core@7.16.5) - '@babel/register': 7.16.5(@babel/core@7.16.5) - babel-core: 7.0.0-bridge.0(@babel/core@7.16.5) - colors: 1.4.0 - flow-parser: 0.168.0 - graceful-fs: 4.2.10 - micromatch: 3.1.10 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.20.5 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - dev: true + caniuse-lite@1.0.30001698: {} - /jsesc@0.5.0: - resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} - hasBin: true - dev: true + ccount@2.0.1: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - /json-buffer@3.0.0: - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + chalk@5.4.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + character-entities@2.0.2: {} - /json-parse-helpfulerror@1.0.3: - resolution: {integrity: sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=} + chokidar@3.6.0: dependencies: - jju: 1.4.0 - dev: false + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + chokidar@4.0.3: + dependencies: + readdirp: 4.1.1 - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false + chownr@1.1.4: {} - /json-schema-typed@7.0.3: - resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} - dev: false + chownr@2.0.0: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true + chromium-pickle-js@0.2.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} - dev: true + ci-info@3.9.0: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=} - dev: true + ci-info@4.1.0: {} - /json5@1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} - hasBin: true + citty@0.1.6: dependencies: - minimist: 1.2.6 - dev: true + consola: 3.4.0 - /json5@2.2.0: - resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} - engines: {node: '>=6'} - hasBin: true + class-variance-authority@0.7.1: dependencies: - minimist: 1.2.6 - dev: true + clsx: 2.1.1 - /json5@2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /jsonc-parser@2.3.1: - resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} - dev: true + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 - /jsonc-parser@3.0.0: - resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} - dev: true + clean-stack@2.2.0: {} - /jsonfile@4.0.0: - resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} - optionalDependencies: - graceful-fs: 4.2.10 - dev: true + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + cli-cursor@5.0.0: dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.10 + restore-cursor: 5.1.0 - /jsonparse@1.3.1: - resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=} - engines: {'0': node >= 0.2.0} - dev: true + cli-spinners@2.9.2: {} - /jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} + cli-truncate@2.1.0: dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - dev: true + slice-ansi: 3.0.0 + string-width: 4.2.3 + optional: true - /jstransformer@1.0.0: - resolution: {integrity: sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=} + cli-truncate@4.0.0: dependencies: - is-promise: 2.2.2 - promise: 7.3.1 - dev: true + slice-ansi: 5.0.0 + string-width: 7.2.0 - /katex@0.16.9: - resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} - hasBin: true + cliui@8.0.1: dependencies: - commander: 8.3.0 - dev: false + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 - /keyv@3.0.0: - resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} + clone-response@1.0.3: dependencies: - json-buffer: 3.0.0 - dev: true + mimic-response: 1.0.1 - /keyv@3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - dependencies: - json-buffer: 3.0.0 + clone@1.0.4: {} - /khroma@2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} - dev: false + clsx@2.1.1: {} - /kind-of@3.2.2: - resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} - engines: {node: '>=0.10.0'} + codemirror-textmate@1.1.0(codemirror@5.65.18)(onigasm@2.2.5): dependencies: - is-buffer: 1.1.6 - dev: true + codemirror: 5.65.18 + lru-cache: 4.1.5 + monaco-textmate: 3.0.1(onigasm@2.2.5) + onigasm: 2.2.5 + p-cancelable: 1.1.0 - /kind-of@4.0.0: - resolution: {integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true + codemirror@5.65.18: {} - /kind-of@5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - dev: true + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + color-name@1.1.4: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + color-support@1.1.3: {} - /kolorist@1.5.1: - resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} - dev: true + colorette@2.0.20: {} - /latest-version@5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} + combined-stream@1.0.8: dependencies: - package-json: 6.5.0 + delayed-stream: 1.0.0 - /launch-editor@2.3.0: - resolution: {integrity: sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==} - dependencies: - picocolors: 1.0.0 - shell-quote: 1.7.3 - dev: true + commander@13.1.0: {} - /lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - dev: true + commander@5.1.0: {} - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + comment-parser@1.4.1: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + compare-func@2.0.0: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lilconfig@2.0.4: - resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} - engines: {node: '>=10'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + array-ify: 1.0.0 + dot-prop: 5.3.0 - /linguist-languages@7.15.0: - resolution: {integrity: sha512-qkSSNDjDDycZ2Wcw+GziNBB3nNo3ddYUInM/PL8Amgwbd9RQ/BKGj2/1d6mdxKgBFnUqZuaDbkIwkE4KUwwmtQ==} - dev: false + compare-version@0.1.2: {} - /lint-staged@12.1.4: - resolution: {integrity: sha512-RgDz9nsFsE0/5eL9Vat0AvCuk0+j5mEuzBIVfrRH5FRtt5wibYe8zTjZs2nuqLFrLAGQGYnj8+HJxolcj08i/A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + compress-commons@4.1.2: dependencies: - cli-truncate: 3.1.0 - colorette: 2.0.16 - commander: 8.3.0 - debug: 4.3.4(supports-color@9.2.1) - execa: 5.1.1 - lilconfig: 2.0.4 - listr2: 3.13.5 - micromatch: 4.0.4 + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 normalize-path: 3.0.0 - object-inspect: 1.12.0 - string-argv: 0.3.1 - supports-color: 9.2.1 - yaml: 1.10.2 - transitivePeerDependencies: - - enquirer - dev: true + readable-stream: 3.6.2 - /listenercount@1.0.1: - resolution: {integrity: sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=} - dev: false + concat-map@0.0.1: {} - /listr2@3.13.5: - resolution: {integrity: sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + concurrently@9.1.2: dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.16 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.3.0 - rxjs: 7.4.0 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true + chalk: 4.1.2 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 - /load-json-file@4.0.0: - resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} - engines: {node: '>=4'} + conf@10.2.0: dependencies: - graceful-fs: 4.2.10 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - dev: true - - /loader-runner@4.2.0: - resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==} - engines: {node: '>=6.11.5'} - dev: true + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + atomically: 1.7.0 + debounce-fn: 4.0.0 + dot-prop: 6.0.1 + env-paths: 2.2.1 + json-schema-typed: 7.0.3 + onetime: 5.1.2 + pkg-up: 3.1.0 + semver: 7.7.1 - /local-pkg@0.4.1: - resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} - engines: {node: '>=14'} - dev: true + confbox@0.1.8: {} - /locate-path@2.0.0: - resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} - engines: {node: '>=4'} + config-file-ts@0.2.8-rc1: dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true + glob: 10.4.5 + typescript: 5.7.3 - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 + consola@3.4.0: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true + console-control-strings@1.1.0: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + conventional-changelog-angular@7.0.0: dependencies: - p-locate: 5.0.0 - dev: true - - /lodash-id@0.14.1: - resolution: {integrity: sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==} - engines: {node: '>= 4'} - dev: false + compare-func: 2.0.0 - /lodash.camelcase@4.3.0: - resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 - /lodash.clonedeep@4.5.0: - resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - dev: true + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 - /lodash.debounce@4.0.8: - resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} - dev: true + cookie@1.0.2: {} - /lodash.get@4.4.2: - resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=} - dev: true + core-js-compat@3.40.0: + dependencies: + browserslist: 4.24.4 - /lodash.memoize@4.1.2: - resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} - dev: false + core-util-is@1.0.2: + optional: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + core-util-is@1.0.3: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=} - dev: true + cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.1)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + dependencies: + '@types/node': 22.13.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + jiti: 2.4.2 + typescript: 5.7.3 - /lodash.uniq@4.5.0: - resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=} - dev: false + cosmiconfig@9.0.0(typescript@5.7.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.7.3 - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + crc-32@1.2.2: {} - /log-symbols@2.2.0: - resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} - engines: {node: '>=4'} + crc32-stream@4.0.3: dependencies: - chalk: 2.4.2 - dev: true + crc-32: 1.2.2 + readable-stream: 3.6.2 - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + crc@3.8.0: dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - dev: true - - /loglevel@1.8.0: - resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} - engines: {node: '>= 0.6.0'} - dev: true - - /long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: true + buffer: 5.7.1 + optional: true - /lowdb@1.0.0: - resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==} - engines: {node: '>=4'} + cross-env@7.0.3: dependencies: - graceful-fs: 4.2.10 - is-promise: 2.2.2 - lodash: 4.17.21 - pify: 3.0.0 - steno: 0.4.4 + cross-spawn: 7.0.6 - /lowdb@3.0.0: - resolution: {integrity: sha512-9KZRulmIcU8fZuWiaM0d5e2/nPnrFyXkeXVpqT+MJS+vgbgOf1EbtvgQmba8HwUFgDl1oeZR6XqEJnkJmQdKmg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cross-spawn@7.0.6: dependencies: - steno: 2.1.0 - dev: false + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - /lowercase-keys@1.0.0: - resolution: {integrity: sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=} - engines: {node: '>=0.10.0'} - dev: true + cssesc@3.0.0: {} - /lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} + csstype@3.1.3: {} - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} + dargs@8.1.0: {} - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + date-fns@4.1.0: {} + + debounce-fn@4.0.0: dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 + mimic-fn: 3.1.0 - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + debug@3.2.7: dependencies: - yallist: 3.1.1 + ms: 2.1.3 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + debug@4.4.0(supports-color@5.5.0): dependencies: - yallist: 4.0.0 + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + decode-named-character-reference@1.0.2: dependencies: - sourcemap-codec: 1.4.8 + character-entities: 2.0.2 - /magic-string@0.26.1: - resolution: {integrity: sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==} - engines: {node: '>=12'} + decompress-response@6.0.0: dependencies: - sourcemap-codec: 1.4.8 - dev: true + mimic-response: 3.1.0 - /make-dir@1.3.0: - resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} - engines: {node: '>=4'} + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + defaults@1.0.4: dependencies: - pify: 3.0.0 - dev: true + clone: 1.0.4 - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: dependencies: - pify: 4.0.1 - semver: 5.7.1 - dev: true + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + optional: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + define-properties@1.2.1: dependencies: - semver: 6.3.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + optional: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + defu@6.1.4: {} - /map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} - dependencies: - p-defer: 1.0.0 - dev: false + delayed-stream@1.0.0: {} - /map-cache@0.2.2: - resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=} - engines: {node: '>=0.10.0'} - dev: true + delegates@1.0.0: {} - /map-obj@1.0.1: - resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=} - engines: {node: '>=0.10.0'} - dev: true + dequal@2.0.3: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + destr@2.0.3: {} - /map-stream@0.1.0: - resolution: {integrity: sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=} - dev: true + detect-libc@1.0.3: {} - /map-visit@1.0.0: - resolution: {integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=} - engines: {node: '>=0.10.0'} + detect-libc@2.0.3: {} + + detect-node@2.1.0: + optional: true + + devlop@1.1.0: dependencies: - object-visit: 1.0.1 - dev: true + dequal: 2.0.3 - /marked@4.0.17: - resolution: {integrity: sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==} - engines: {node: '>= 12'} - hasBin: true - dev: false + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 - /markmap-common@0.15.3: - resolution: {integrity: sha512-a40FfdzFEKoyIhd5KDsV6FfkM55WWi2spRq/cUCsOZd8e4PAHMc9auCEjdxTWRiS2EGzET9sPpvyAmPSTva+/w==} + dir-compare@4.2.0: dependencies: - '@babel/runtime': 7.23.1 - '@gera2ld/jsx-dom': 2.2.2 - npm2url: 0.2.1 - dev: false + minimatch: 3.1.2 + p-limit: 3.1.0 - /markmap-lib@0.15.4(markmap-common@0.15.3): - resolution: {integrity: sha512-uz/IedoGXoDD6eXpmyD+1vx+g3rEzomX1uwnXOxnigXC9ApXG67lUhA4ffNlucgoV4/BLA2m6KyVvswECjljVQ==} - peerDependencies: - markmap-common: '*' + dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8): dependencies: - '@babel/runtime': 7.23.1 - highlight.js: 11.9.0 + app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.8) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 js-yaml: 4.1.0 - katex: 0.16.9 - markmap-common: 0.15.3 - prismjs: 1.29.0 - remarkable: 2.0.1 - remarkable-katex: 1.2.1 - dev: false - - /markmap-view@0.15.4(markmap-common@0.15.3): - resolution: {integrity: sha512-6PJnoPZHiQIb0YE+fg0Ht1ptEXgf9QOOTBEiC2DrzjAbZ3rrRa2g+0VhpZ+9vSzDsUa+m/IGz4xkiNepuPfs5w==} - peerDependencies: - markmap-common: '*' - dependencies: - '@babel/runtime': 7.23.1 - '@gera2ld/jsx-dom': 2.2.2 - '@types/d3': 7.4.1 - d3: 7.8.5 - d3-flextree: 2.1.2 - markmap-common: 0.15.3 - dev: false + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - bluebird + - electron-builder-squirrel-windows + - supports-color - /matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - requiresBuild: true + dmg-license@1.0.11: dependencies: - escape-string-regexp: 4.0.0 - dev: true + '@types/plist': 3.0.5 + '@types/verror': 1.10.10 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 optional: true - /mdn-data@1.1.4: - resolution: {integrity: sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==} - dev: false - - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false - - /mdn-data@2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: false - - /media-typer@0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - - /mem@8.1.1: - resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} - engines: {node: '>=10'} + doctrine@3.0.0: dependencies: - map-age-cleaner: 0.1.3 - mimic-fn: 3.1.0 - dev: false + esutils: 2.0.3 - /memory-fs@0.2.0: - resolution: {integrity: sha1-8rslNovBIeORwlIN6Slpyu4KApA=} - dev: true + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 - /memorystream@0.3.1: - resolution: {integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI=} - engines: {node: '>= 0.10.0'} - dev: true + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 - /meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} + dotenv-expand@11.0.7: dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - dev: true + dotenv: 16.4.7 - /merge-descriptors@1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + dotenv@16.4.7: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + eastasianwidth@0.2.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + ejs@3.1.10: + dependencies: + jake: 10.9.2 - /merge@1.2.1: - resolution: {integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==} - dev: true - - /mermaid@9.1.3: - resolution: {integrity: sha512-jTIYiqKwsUXVCoxHUVkK8t0QN3zSKIdJlb9thT0J5jCnzXyc+gqTbZE2QmjRfavFTPPn5eRy5zaFp7V+6RhxYg==} - dependencies: - '@braintree/sanitize-url': 6.0.0 - d3: 7.8.5 - dagre: 0.8.5 - dagre-d3: 0.6.4 - dompurify: 2.3.8 - graphlib: 2.1.8 - khroma: 2.0.0 - moment-mini: 2.24.0 - stylis: 4.1.1 - dev: false - - /method-override@3.0.0: - resolution: {integrity: sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==} - engines: {node: '>= 0.10'} - dependencies: - debug: 3.1.0 - methods: 1.1.2 - parseurl: 1.3.3 - vary: 1.1.2 + electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8): + dependencies: + app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.8) + archiver: 5.3.2 + builder-util: 25.1.7 + fs-extra: 10.1.0 transitivePeerDependencies: + - bluebird + - dmg-builder - supports-color - dev: false - - /methods@1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} - engines: {node: '>= 0.6'} - /micromatch@3.1.10: - resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} - engines: {node: '>=0.10.0'} + electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.8): dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 6.0.3 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 + app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.8) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) + fs-extra: 10.1.0 + is-ci: 3.0.1 + lazy-val: 1.0.5 + simple-update-notifier: 2.0.0 + yargs: 17.7.2 transitivePeerDependencies: + - bluebird + - electron-builder-squirrel-windows - supports-color - dev: true - /micromatch@4.0.4: - resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} - engines: {node: '>=8.6'} + electron-publish@25.1.7: dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + '@types/fs-extra': 9.0.13 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + electron-store@8.2.0: dependencies: - mime-db: 1.52.0 + conf: 10.2.0 + type-fest: 2.19.0 - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + electron-to-chromium@1.5.95: {} - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + electron@34.1.1: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 20.17.17 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color - /mimic-fn@1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} - engines: {node: '>=4'} - dev: true + electronmon@2.0.3: + dependencies: + chalk: 3.0.0 + import-from: 3.0.0 + runtime-required: 1.1.0 + watchboy: 0.4.3 - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + elysia@1.2.15(@sinclair/typebox@0.34.27)(openapi-types@12.1.3)(typescript@5.7.3): + dependencies: + '@sinclair/typebox': 0.34.27 + cookie: 1.0.2 + memoirist: 0.3.0 + optionalDependencies: + openapi-types: 12.1.3 + typescript: 5.7.3 - /mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - dev: false + emoji-regex@10.4.0: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} + emoji-regex@8.0.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + emoji-regex@9.2.2: {} - /minimatch@3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + encoding@0.1.13: dependencies: - brace-expansion: 1.1.11 - dev: true + iconv-lite: 0.6.3 + optional: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + end-of-stream@1.4.4: dependencies: - brace-expansion: 1.1.11 + once: 1.4.0 - /minimatch@5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} - engines: {node: '>=10'} + enhanced-resolve@5.18.1: dependencies: - brace-expansion: 2.0.1 - dev: true + graceful-fs: 4.2.11 + tapable: 2.2.1 - /minimatch@5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true + entities@4.5.0: {} - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true + env-paths@2.2.1: {} - /minimist@1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true + environment@1.1.0: {} - /minimist@1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + err-code@2.0.3: {} - /minipass@3.3.4: - resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==} - engines: {node: '>=8'} + error-ex@1.3.2: dependencies: - yallist: 4.0.0 - dev: true + is-arrayish: 0.2.1 - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.4 - yallist: 4.0.0 - dev: true + es-define-property@1.0.1: + optional: true - /mitt@3.0.0: - resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} - dev: false + es-errors@1.3.0: + optional: true - /mixin-deep@1.3.2: - resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} - engines: {node: '>=0.10.0'} - dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 - dev: true + es-module-lexer@1.6.0: {} - /mkdirp@0.5.5: - resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true + es6-error@4.1.1: + optional: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-compat-utils@0.5.1(eslint@9.19.0(jiti@2.4.2)): dependencies: - minimist: 1.2.6 + eslint: 9.19.0(jiti@2.4.2) + semver: 7.7.1 - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + eslint-compat-utils@0.6.4(eslint@9.19.0(jiti@2.4.2)): + dependencies: + eslint: 9.19.0(jiti@2.4.2) + semver: 7.7.1 - /moment-mini@2.24.0: - resolution: {integrity: sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==} - dev: false + eslint-config-flat-gitignore@1.0.1(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@eslint/compat': 1.2.6(eslint@9.19.0(jiti@2.4.2)) + eslint: 9.19.0(jiti@2.4.2) - /monaco-textmate@3.0.1(onigasm@2.2.5): - resolution: {integrity: sha512-ZxxY3OsqUczYP1sGqo97tu+CJmMBwuSW+dL0WEBdDhOZ5G1zntw72hvBc68ZQAirosWvbDKgN1dL5k173QtFww==} - peerDependencies: - onigasm: ^2.0.0 + eslint-flat-config-utils@1.1.0: dependencies: - fast-plist: 0.1.2 - onigasm: 2.2.5 - dev: false + pathe: 2.0.2 - /morgan@1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} - engines: {node: '>= 0.8.0'} + eslint-import-resolver-node@0.3.9: dependencies: - basic-auth: 2.0.1 - debug: 2.6.9 - depd: 2.0.0 - on-finished: 2.3.0 - on-headers: 1.0.2 + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - dev: false - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + eslint-json-compat-utils@0.2.1(eslint@9.19.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): + dependencies: + eslint: 9.19.0(jiti@2.4.2) + esquery: 1.6.0 + jsonc-eslint-parser: 2.4.0 - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + eslint-merge-processors@1.0.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + eslint: 9.19.0(jiti@2.4.2) - /mvdan-sh@0.5.0: - resolution: {integrity: sha512-UWbdl4LHd2fUnaEcOUFVWRdWGLkNoV12cKVIPiirYd8qM5VkCoCTXErlDubevrkEG7kGohvjRxAlTQmOqG80tw==} - dev: false + eslint-plugin-antfu@2.7.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@antfu/utils': 0.7.10 + eslint: 9.19.0(jiti@2.4.2) - /nanoid@2.1.11: - resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} - dev: true + eslint-plugin-command@2.1.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@es-joy/jsdoccomment': 0.50.0 + eslint: 9.19.0(jiti@2.4.2) - /nanoid@3.3.2: - resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + eslint-plugin-es-x@7.8.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.19.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.19.0(jiti@2.4.2)) - /nanomatch@1.2.13: - resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} - engines: {node: '>=0.10.0'} + eslint-plugin-import-x@4.6.1(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 + '@types/doctrine': 0.0.9 + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + debug: 4.4.0(supports-color@5.5.0) + doctrine: 3.0.0 + enhanced-resolve: 5.18.1 + eslint: 9.19.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.10.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + stable-hash: 0.0.4 + tslib: 2.8.1 transitivePeerDependencies: - supports-color - dev: true + - typescript - /natural-compare@1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} - dev: true + eslint-plugin-jsdoc@50.6.3(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@es-joy/jsdoccomment': 0.49.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.4.0(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint: 9.19.0(jiti@2.4.2) + espree: 10.3.0 + esquery: 1.6.0 + parse-imports: 2.2.1 + semver: 7.7.1 + spdx-expression-parse: 4.0.0 + synckit: 0.9.2 + transitivePeerDependencies: + - supports-color - /ndjson@1.5.0: - resolution: {integrity: sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=} - hasBin: true + eslint-plugin-jsonc@2.19.1(eslint@9.19.0(jiti@2.4.2)): dependencies: - json-stringify-safe: 5.0.1 - minimist: 1.2.6 - split2: 2.2.0 - through2: 2.0.5 - dev: true + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + eslint: 9.19.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.19.0(jiti@2.4.2)) + eslint-json-compat-utils: 0.2.1(eslint@9.19.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) + espree: 9.6.1 + graphemer: 1.4.0 + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + synckit: 0.6.2 + transitivePeerDependencies: + - '@eslint/json' - /neat-csv@2.1.0: - resolution: {integrity: sha1-BvWDYMTDuVW9Rn3cha5FEaOQekw=} - engines: {node: '>=4'} + eslint-plugin-n@17.15.1(eslint@9.19.0(jiti@2.4.2)): dependencies: - csv-parser: 1.12.1 - get-stream: 2.3.1 - into-stream: 2.0.1 - dev: true + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + enhanced-resolve: 5.18.1 + eslint: 9.19.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.19.0(jiti@2.4.2)) + get-tsconfig: 4.10.0 + globals: 15.14.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.7.1 - /needle@2.9.1: - resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} - engines: {node: '>= 4.4.x'} - hasBin: true + eslint-plugin-no-only-tests@3.3.0: {} + + eslint-plugin-perfectionist@4.8.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - debug: 3.2.7 - iconv-lite: 0.4.24 - sax: 1.2.4 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.2) + natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - dev: false - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true - - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true - - /node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - requiresBuild: true - dev: true - optional: true + - typescript - /node-cleanup@2.1.2: - resolution: {integrity: sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=} - dev: true + eslint-plugin-regexp@2.7.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + comment-parser: 1.4.1 + eslint: 9.19.0(jiti@2.4.2) + jsdoc-type-pratt-parser: 4.1.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 - /node-dir@0.1.17: - resolution: {integrity: sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=} - engines: {node: '>= 0.10.5'} + eslint-plugin-toml@0.12.0(eslint@9.19.0(jiti@2.4.2)): dependencies: - minimatch: 3.1.2 - dev: true + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.19.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.19.0(jiti@2.4.2)) + lodash: 4.17.21 + toml-eslint-parser: 0.10.0 + transitivePeerDependencies: + - supports-color - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + eslint-plugin-unicorn@56.0.1(eslint@9.19.0(jiti@2.4.2)): dependencies: - whatwg-url: 5.0.0 - dev: true + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + ci-info: 4.1.0 + clean-regexp: 1.0.0 + core-js-compat: 3.40.0 + eslint: 9.19.0(jiti@2.4.2) + esquery: 1.6.0 + globals: 15.14.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.1.0 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.7.1 + strip-indent: 3.0.0 - /node-gyp-build@4.3.0: - resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==} - hasBin: true - dev: true + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2)): + dependencies: + eslint: 9.19.0(jiti@2.4.2) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - /node-notifier@9.0.1: - resolution: {integrity: sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==} + eslint-plugin-vue@9.32.0(eslint@9.19.0(jiti@2.4.2)): dependencies: - growly: 1.3.0 - is-wsl: 2.2.0 - semver: 7.3.7 - shellwords: 0.1.1 - uuid: 8.3.2 - which: 2.0.2 - dev: true + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + eslint: 9.19.0(jiti@2.4.2) + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.1 + vue-eslint-parser: 9.4.3(eslint@9.19.0(jiti@2.4.2)) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color - /node-releases@2.0.2: - resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} + eslint-plugin-yml@1.16.0(eslint@9.19.0(jiti@2.4.2)): + dependencies: + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.19.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.19.0(jiti@2.4.2)) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.3 + transitivePeerDependencies: + - supports-color - /noms@0.0.0: - resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} + eslint-processor-vue-blocks@1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.19.0(jiti@2.4.2)): dependencies: - inherits: 2.0.4 - readable-stream: 1.0.34 - dev: true + '@vue/compiler-sfc': 3.5.13 + eslint: 9.19.0(jiti@2.4.2) - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + eslint-scope@7.2.2: dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.0 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 - dev: true + esrecurse: 4.3.0 + estraverse: 5.3.0 - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + eslint-scope@8.2.0: dependencies: - hosted-git-info: 4.0.2 - is-core-module: 2.8.1 - semver: 7.3.5 - validate-npm-package-license: 3.0.4 - dev: true + esrecurse: 4.3.0 + estraverse: 5.3.0 - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.19.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.19.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color - /normalize-url@2.0.1: - resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==} - engines: {node: '>=4'} + espree@10.3.0: dependencies: - prepend-http: 2.0.0 - query-string: 5.1.1 - sort-keys: 2.0.0 - dev: true - - /normalize-url@3.3.0: - resolution: {integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==} - engines: {node: '>=6'} - dev: false + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 - /normalize-url@4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - - /npm-conf@1.1.3: - resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} - engines: {node: '>=4'} + espree@9.6.1: dependencies: - config-chain: 1.1.13 - pify: 3.0.0 - dev: true + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true - dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.5 - memorystream: 0.3.1 - minimatch: 3.0.4 - pidtree: 0.3.1 - read-pkg: 3.0.0 - shell-quote: 1.7.3 - string.prototype.padend: 3.1.3 - dev: true - - /npm-run-path@2.0.2: - resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=} - engines: {node: '>=4'} + esquery@1.6.0: dependencies: - path-key: 2.0.1 - dev: true + estraverse: 5.3.0 - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + esrecurse@4.3.0: dependencies: - path-key: 3.1.1 - dev: true + estraverse: 5.3.0 - /npm2url@0.2.1: - resolution: {integrity: sha512-Ls7mMyud1Kk0EisqsTt2TPtM7gLRvgmvDxOg3FPI5zjfhQ+ZFNBXX2K9VT7vo+HqUsz/uCiIxkcO0SvIuneVug==} - dev: false + estraverse@5.3.0: {} - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 - dev: false + estree-walker@2.0.2: {} - /nth-check@2.0.1: - resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} + estree-walker@3.0.3: dependencies: - boolbase: 1.0.0 - dev: false + '@types/estree': 1.0.6 - /oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - dev: true + esutils@2.0.3: {} - /object-assign@4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} - engines: {node: '>=0.10.0'} + eventemitter3@5.0.1: {} - /object-copy@0.1.0: - resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=} - engines: {node: '>=0.10.0'} + execa@8.0.1: dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - dev: true - - /object-inspect@1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + expand-template@2.0.3: {} - /object-path@0.11.8: - resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} - engines: {node: '>= 10.12.0'} - dev: true + exponential-backoff@3.1.2: {} - /object-visit@1.0.1: - resolution: {integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=} - engines: {node: '>=0.10.0'} + extract-zip@2.0.1: dependencies: - isobject: 3.0.1 - dev: true + debug: 4.4.0(supports-color@5.5.0) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color - /object.assign@4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - has-symbols: 1.0.2 - object-keys: 1.1.1 + extsprintf@1.4.1: + optional: true - /object.getownpropertydescriptors@2.1.3: - resolution: {integrity: sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==} - engines: {node: '>= 0.8'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + fast-deep-equal@3.1.3: {} - /object.pick@1.3.0: - resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=} - engines: {node: '>=0.10.0'} + fast-glob@3.3.3: dependencies: - isobject: 3.0.1 - dev: true + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 - /object.values@1.1.5: - resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + fast-json-stable-stringify@2.1.0: {} - /on-finished@2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 + fast-levenshtein@2.0.6: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 + fast-plist@0.1.3: {} - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false + fast-uri@3.0.6: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + fastq@1.19.0: dependencies: - wrappy: 1.0.2 + reusify: 1.0.4 - /onetime@2.0.1: - resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=} - engines: {node: '>=4'} + fd-slicer@1.1.0: dependencies: - mimic-fn: 1.2.0 - dev: true + pend: 1.2.0 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + file-entry-cache@8.0.0: dependencies: - mimic-fn: 2.1.0 + flat-cache: 4.0.1 - /onigasm@2.2.5: - resolution: {integrity: sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==} + file-uri-to-path@1.0.0: {} + + filelist@1.0.4: dependencies: - lru-cache: 5.1.1 - dev: false + minimatch: 5.1.6 - /open@6.4.0: - resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: - is-wsl: 1.1.0 - dev: true + to-regex-range: 5.0.1 - /open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} + find-up@3.0.0: dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false + locate-path: 3.0.0 - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} + find-up@4.1.0: dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true + locate-path: 5.0.0 + path-exists: 4.0.0 - /ora@3.4.0: - resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} - engines: {node: '>=6'} + find-up@5.0.0: dependencies: - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-spinners: 2.6.1 - log-symbols: 2.2.0 - strip-ansi: 5.2.0 - wcwidth: 1.0.1 - dev: true + locate-path: 6.0.0 + path-exists: 4.0.0 - /os-tmpdir@1.0.2: - resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=} - engines: {node: '>=0.10.0'} - dev: true + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 - /p-cancelable@0.4.1: - resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==} - engines: {node: '>=4'} - dev: true + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 - /p-cancelable@1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} + flatted@3.3.2: {} - /p-defer@1.0.0: - resolution: {integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=} - engines: {node: '>=4'} - dev: false + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 - /p-event@2.3.1: - resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} - engines: {node: '>=6'} + form-data@4.0.1: dependencies: - p-timeout: 2.0.1 - dev: true + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 - /p-finally@1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} - engines: {node: '>=4'} - dev: true + formidable@3.5.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 2.0.0 + once: 1.4.0 - /p-finally@2.0.1: - resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} - engines: {node: '>=8'} - dev: true + fraction.js@4.3.7: {} - /p-is-promise@1.1.0: - resolution: {integrity: sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=} - engines: {node: '>=4'} - dev: true + fs-constants@1.0.0: {} - /p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + fs-extra@10.1.0: dependencies: - p-try: 1.0.0 - dev: true + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + fs-extra@11.3.0: dependencies: - p-try: 2.2.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + fs-extra@8.1.0: dependencies: - yocto-queue: 0.1.0 - dev: true + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 - /p-locate@2.0.0: - resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} - engines: {node: '>=4'} + fs-extra@9.1.0: dependencies: - p-limit: 1.3.0 - dev: true + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + fs-minipass@2.1.0: dependencies: - p-limit: 2.3.0 + minipass: 3.3.6 - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true + fs.realpath@1.0.0: {} - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true + fsevents@2.3.3: + optional: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true + function-bind@1.1.2: {} - /p-timeout@2.0.1: - resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} - engines: {node: '>=4'} + gauge@4.0.4: dependencies: - p-finally: 1.0.0 - dev: true + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 - /p-try@1.0.0: - resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} - engines: {node: '>=4'} - dev: true + get-caller-file@2.0.5: {} - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + get-east-asian-width@1.3.0: {} - /package-json@6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: - got: 9.6.0 - registry-auth-token: 4.2.1 - registry-url: 5.1.0 - semver: 6.3.0 + pump: 3.0.2 - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true + get-stream@8.0.1: {} - /parse-git-config@2.0.3: - resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==} - engines: {node: '>=6'} + get-tsconfig@4.10.0: dependencies: - expand-tilde: 2.0.2 - git-config-path: 1.0.1 - ini: 1.3.8 - dev: true + resolve-pkg-maps: 1.0.0 - /parse-json@4.0.0: - resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} - engines: {node: '>=4'} + giget@1.2.4: dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 + citty: 0.1.6 + consola: 3.4.0 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.5.2 + ohash: 1.1.4 + pathe: 2.0.2 + tar: 6.2.1 - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + git-raw-commits@4.0.0: dependencies: - '@babel/code-frame': 7.16.0 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 - /parse-passwd@1.0.0: - resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=} - engines: {node: '>=0.10.0'} - dev: true + github-from-package@0.0.0: {} - /parse-srcset@1.0.2: - resolution: {integrity: sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=} - dev: false + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 - /parse-svg-path@0.1.2: - resolution: {integrity: sha1-en7A0esG+lMlx9PgCbhZoJtdSes=} - dev: false + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 - /parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + glob@10.4.5: dependencies: - parse5: 6.0.1 - dev: false + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 - /parseqs@0.0.6: - resolution: {integrity: sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==} - dev: true + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 - /parseuri@0.0.6: - resolution: {integrity: sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==} - dev: true + global-agent@3.0.0: + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.7.1 + serialize-error: 7.0.1 + optional: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + global-directory@4.0.1: + dependencies: + ini: 4.1.1 - /pascalcase@0.1.1: - resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=} - engines: {node: '>=0.10.0'} - dev: true + globals@13.24.0: + dependencies: + type-fest: 0.20.2 - /path-dirname@1.0.2: - resolution: {integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=} - dev: true + globals@14.0.0: {} - /path-exists@3.0.0: - resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} - engines: {node: '>=4'} + globals@15.14.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + optional: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + gopd@1.2.0: + optional: true - /path-key@2.0.1: - resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=} - engines: {node: '>=4'} - dev: true + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + graceful-fs@4.2.11: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + graphemer@1.4.0: {} - /path-to-regexp@0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + has-flag@3.0.0: {} - /path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} - dependencies: - isarray: 0.0.1 - dev: false + has-flag@4.0.0: {} - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + has-property-descriptors@1.0.2: dependencies: - pify: 3.0.0 - dev: true + es-define-property: 1.0.1 + optional: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + has-unicode@2.0.1: {} - /pause-stream@0.0.11: - resolution: {integrity: sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=} + hasown@2.0.2: dependencies: - through: 2.3.8 - dev: true + function-bind: 1.1.2 - /pend@1.2.0: - resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} - dev: true + hexoid@2.0.0: {} - /perfect-scrollbar@1.5.5: - resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==} - dev: false + hookable@5.5.3: {} - /performance-now@2.1.0: - resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} - dev: true + hosted-git-info@2.8.9: {} - /php-parser@3.1.0-beta.5: - resolution: {integrity: sha512-3F3+yThjD7wn0sMuIG5iMQqutmH+RJUAbEyPW5S/greTp5ZArkpEweylQh+do22q9UJlJT1PrLN/AwnzDUti6Q==} - dev: false - - /picocolors@0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: false + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + http-cache-semantics@4.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /pid-from-port@1.1.3: - resolution: {integrity: sha512-OlE82n3yMOE5dY9RMOwxhoWefeMlxwk5IVxoj0sSzSFIlmvhN4obzTvO3s/d/b5JhcgXikjaspsy/HuUDTqbBg==} - engines: {node: '>=4'} + http-proxy-agent@7.0.2: dependencies: - execa: 0.9.0 - dev: true + agent-base: 7.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 - /pify@2.3.0: - resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} - engines: {node: '>=0.10.0'} + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /pify@3.0.0: - resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} - engines: {node: '>=4'} + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + human-signals@5.0.0: {} - /pinia@2.0.13(typescript@4.5.4)(vue@3.2.33): - resolution: {integrity: sha512-B7rSqm1xNpwcPMnqns8/gVBfbbi7lWTByzS6aPZ4JOXSJD4Y531rZHDCoYWBwLyHY/8hWnXljgiXp6rRyrofcw==} - peerDependencies: - '@vue/composition-api': ^1.4.0 - typescript: '>=4.4.4' - vue: ^2.6.14 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - typescript: - optional: true + humanize-ms@1.2.1: dependencies: - '@vue/devtools-api': 6.1.4 - typescript: 4.5.4 - vue: 3.2.33 - vue-demi: 0.12.4(vue@3.2.33) - dev: false + ms: 2.1.3 - /pinkie-promise@2.0.1: - resolution: {integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=} - engines: {node: '>=0.10.0'} + iconv-corefoundation@1.1.7: dependencies: - pinkie: 2.0.4 - dev: true + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + optional: true - /pinkie@2.0.4: - resolution: {integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=} - engines: {node: '>=0.10.0'} - dev: true + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 - /pirates@4.0.4: - resolution: {integrity: sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==} - engines: {node: '>= 6'} - dev: true + ieee754@1.2.1: {} - /pkg-dir@2.0.0: - resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - dev: true + ignore-by-default@1.0.1: {} - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - dependencies: - find-up: 3.0.0 - dev: true + ignore@5.3.2: {} - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: false + immutable@5.0.3: {} - /please-upgrade-node@3.2.0: - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} + import-fresh@3.3.1: dependencies: - semver-compare: 1.0.0 - dev: false + parent-module: 1.0.1 + resolve-from: 4.0.0 - /plist@3.0.5: - resolution: {integrity: sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==} - engines: {node: '>=6'} + import-from@3.0.0: dependencies: - base64-js: 1.5.1 - xmlbuilder: 9.0.7 - dev: true + resolve-from: 5.0.0 - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: false + import-meta-resolve@4.1.0: {} - /portfinder@1.0.28: - resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==} - engines: {node: '>= 0.12.0'} - dependencies: - async: 2.6.4 - debug: 3.2.7 - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: true + imurmurhash@0.1.4: {} - /posix-character-classes@0.1.1: - resolution: {integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=} - engines: {node: '>=0.10.0'} - dev: true + indent-string@4.0.0: {} - /postcss-calc@7.0.5: - resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==} - dependencies: - postcss: 7.0.39 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 - dev: false + infer-owner@1.0.4: {} - /postcss-colormin@4.0.3: - resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} - engines: {node: '>=6.9.0'} + inflight@1.0.6: dependencies: - browserslist: 4.20.2 - color: 3.2.1 - has: 1.0.3 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + once: 1.4.0 + wrappy: 1.0.2 - /postcss-convert-values@4.0.1: - resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==} - engines: {node: '>=6.9.0'} - dependencies: - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + inherits@2.0.4: {} - /postcss-discard-comments@4.0.2: - resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==} - engines: {node: '>=6.9.0'} - dependencies: - postcss: 7.0.39 - dev: false + ini@1.3.8: {} - /postcss-discard-duplicates@4.0.2: - resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==} - engines: {node: '>=6.9.0'} - dependencies: - postcss: 7.0.39 - dev: false + ini@4.1.1: {} - /postcss-discard-empty@4.0.1: - resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==} - engines: {node: '>=6.9.0'} + interactjs@1.10.27: dependencies: - postcss: 7.0.39 - dev: false + '@interactjs/types': 1.10.27 - /postcss-discard-overridden@4.0.1: - resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==} - engines: {node: '>=6.9.0'} + ip-address@9.0.5: dependencies: - postcss: 7.0.39 - dev: false + jsbn: 1.1.0 + sprintf-js: 1.1.3 - /postcss-import@12.0.1: - resolution: {integrity: sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==} - engines: {node: '>=6.0.0'} - dependencies: - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - read-cache: 1.0.0 - resolve: 1.22.0 - dev: false + is-arrayish@0.2.1: {} - /postcss-merge-longhand@4.0.11: - resolution: {integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==} - engines: {node: '>=6.9.0'} + is-binary-path@2.1.0: dependencies: - css-color-names: 0.0.4 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - stylehacks: 4.0.3 - dev: false + binary-extensions: 2.3.0 - /postcss-merge-rules@4.0.3: - resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} - engines: {node: '>=6.9.0'} + is-builtin-module@3.2.1: dependencies: - browserslist: 4.20.2 - caniuse-api: 3.0.0 - cssnano-util-same-parent: 4.0.1 - postcss: 7.0.39 - postcss-selector-parser: 3.1.2 - vendors: 1.0.4 - dev: false + builtin-modules: 3.3.0 - /postcss-minify-font-values@4.0.2: - resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==} - engines: {node: '>=6.9.0'} + is-ci@3.0.1: dependencies: - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + ci-info: 3.9.0 - /postcss-minify-gradients@4.0.2: - resolution: {integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==} - engines: {node: '>=6.9.0'} + is-core-module@2.16.1: dependencies: - cssnano-util-get-arguments: 4.0.0 - is-color-stop: 1.1.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + hasown: 2.0.2 - /postcss-minify-params@4.0.2: - resolution: {integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==} - engines: {node: '>=6.9.0'} - dependencies: - alphanum-sort: 1.0.2 - browserslist: 4.20.2 - cssnano-util-get-arguments: 4.0.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - uniqs: 2.0.0 - dev: false + is-extglob@2.1.1: {} - /postcss-minify-selectors@4.0.2: - resolution: {integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==} - engines: {node: '>=6.9.0'} - dependencies: - alphanum-sort: 1.0.2 - has: 1.0.3 - postcss: 7.0.39 - postcss-selector-parser: 3.1.2 - dev: false + is-fullwidth-code-point@3.0.0: {} - /postcss-normalize-charset@4.0.1: - resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==} - engines: {node: '>=6.9.0'} - dependencies: - postcss: 7.0.39 - dev: false + is-fullwidth-code-point@4.0.0: {} - /postcss-normalize-display-values@4.0.2: - resolution: {integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==} - engines: {node: '>=6.9.0'} + is-fullwidth-code-point@5.0.0: dependencies: - cssnano-util-get-match: 4.0.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + get-east-asian-width: 1.3.0 - /postcss-normalize-positions@4.0.2: - resolution: {integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==} - engines: {node: '>=6.9.0'} + is-glob@4.0.3: dependencies: - cssnano-util-get-arguments: 4.0.0 - has: 1.0.3 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-extglob: 2.1.1 - /postcss-normalize-repeat-style@4.0.2: - resolution: {integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==} - engines: {node: '>=6.9.0'} - dependencies: - cssnano-util-get-arguments: 4.0.0 - cssnano-util-get-match: 4.0.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-interactive@1.0.0: {} - /postcss-normalize-string@4.0.2: - resolution: {integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==} - engines: {node: '>=6.9.0'} - dependencies: - has: 1.0.3 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-lambda@1.0.1: {} - /postcss-normalize-timing-functions@4.0.2: - resolution: {integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==} - engines: {node: '>=6.9.0'} - dependencies: - cssnano-util-get-match: 4.0.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-number@7.0.0: {} - /postcss-normalize-unicode@4.0.1: - resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} - engines: {node: '>=6.9.0'} - dependencies: - browserslist: 4.20.2 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-obj@2.0.0: {} - /postcss-normalize-url@4.0.1: - resolution: {integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==} - engines: {node: '>=6.9.0'} - dependencies: - is-absolute-url: 2.1.0 - normalize-url: 3.3.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-stream@3.0.0: {} - /postcss-normalize-whitespace@4.0.2: - resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==} - engines: {node: '>=6.9.0'} + is-text-path@2.0.0: dependencies: - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + text-extensions: 2.4.0 - /postcss-ordered-values@4.1.2: - resolution: {integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==} - engines: {node: '>=6.9.0'} - dependencies: - cssnano-util-get-arguments: 4.0.0 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + is-unicode-supported@0.1.0: {} - /postcss-reduce-initial@4.0.3: - resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} - engines: {node: '>=6.9.0'} - dependencies: - browserslist: 4.20.2 - caniuse-api: 3.0.0 - has: 1.0.3 - postcss: 7.0.39 - dev: false + isarray@1.0.0: {} - /postcss-reduce-transforms@4.0.2: - resolution: {integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==} - engines: {node: '>=6.9.0'} - dependencies: - cssnano-util-get-match: 4.0.0 - has: 1.0.3 - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - dev: false + isbinaryfile@4.0.10: {} - /postcss-selector-parser@3.1.2: - resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - indexes-of: 1.0.1 - uniq: 1.0.1 - dev: false + isbinaryfile@5.0.4: {} - /postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: false + isexe@2.0.0: {} - /postcss-svgo@4.0.3: - resolution: {integrity: sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==} - engines: {node: '>=6.9.0'} + jackspeak@3.4.3: dependencies: - postcss: 7.0.39 - postcss-value-parser: 3.3.1 - svgo: 1.3.2 - dev: false + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - /postcss-unique-selectors@4.0.1: - resolution: {integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==} - engines: {node: '>=6.9.0'} + jake@10.9.2: dependencies: - alphanum-sort: 1.0.2 - postcss: 7.0.39 - uniqs: 2.0.0 - dev: false + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 - /postcss-value-parser@3.3.1: - resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} - dev: false + jiti@2.4.2: {} - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false + js-tokens@4.0.0: {} - /postcss@7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} - dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 - dev: false + js-tokens@9.0.1: {} - /postcss@8.4.12: - resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} - engines: {node: ^10 || ^12 || >=14} + js-yaml@4.1.0: dependencies: - nanoid: 3.3.2 - picocolors: 1.0.0 - source-map-js: 1.0.2 + argparse: 2.0.1 - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + jsbn@1.1.0: {} - /prepend-http@2.0.0: - resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} - engines: {node: '>=4'} + jsdoc-type-pratt-parser@4.1.0: {} - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.2.0 - dev: true + jsesc@0.5.0: {} - /prettier-plugin-java@1.6.1: - resolution: {integrity: sha512-kSY17V/P88nILlILb5iMp16TVJy6Ls9Jy4zAzI4+GsEuRDZH5VqRuLd8aJS1ImWxVgRjNBmoFOjxYyxkRM0SRA==} - dependencies: - java-parser: 2.0.1 - lodash: 4.17.21 - prettier: 2.3.1 - dev: false + jsesc@3.1.0: {} - /prettier-plugin-sh@0.8.2(prettier@2.6.2): - resolution: {integrity: sha512-M8D4G5OqgZtoVKx+U/J/B/gVA4xUKmWflOjayxiDjCQbxz3HOv0zlpYeb6DXd5xMFl7jW2UY1fJjmDzI9pDBFA==} - peerDependencies: - prettier: ^2.0.0 - dependencies: - mvdan-sh: 0.5.0 - prettier: 2.6.2 - dev: false + json-buffer@3.0.1: {} - /prettier-plugin-toml@0.3.1: - resolution: {integrity: sha512-j47DEO/dN/acU1nSL/B7q4A4Z2SYJhpWPCLPkcmfAXIQC6A5GD6Ao/bi9HRHZ8ueIDOauqjuAQbnvRxLXMjazA==} - dependencies: - '@toml-tools/parser': 0.3.1 - prettier: 1.19.1 - dev: false + json-parse-even-better-errors@2.3.1: {} - /prettier@1.19.1: - resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} - engines: {node: '>=4'} - hasBin: true - dev: false + json-schema-traverse@0.4.1: {} - /prettier@2.3.1: - resolution: {integrity: sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: false + json-schema-traverse@1.0.0: {} - /prettier@2.6.2: - resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} - engines: {node: '>=10.13.0'} - hasBin: true + json-schema-typed@7.0.3: {} - /prismjs@1.28.0: - resolution: {integrity: sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==} - engines: {node: '>=6'} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - dev: false + json-stringify-safe@5.0.1: + optional: true - /private@0.1.8: - resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} - engines: {node: '>= 0.6'} - dev: true + json5@2.2.3: {} - /process-exists@3.1.0: - resolution: {integrity: sha512-X11vso1oNLtyDa2j8fsMol2fph1+5PoQ4vpEc1it/rM8eLuRTmrmTg4jfn82WhNur241AYitgjKCgmlgMRZesw==} - engines: {node: '>=4'} + jsonc-eslint-parser@2.4.0: dependencies: - ps-list: 4.1.0 - dev: true + acorn: 8.14.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.7.1 - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + jsonc-parser@3.3.1: {} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 - /promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + jsonfile@6.1.0: dependencies: - asap: 2.0.6 - dev: true + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + jsonparse@1.3.1: {} + + keyv@4.5.4: dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 + json-buffer: 3.0.1 - /proto-list@1.2.4: - resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=} - requiresBuild: true - dev: true + kleur@3.0.3: {} - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 + ky@1.7.5: {} - /ps-list@4.1.0: - resolution: {integrity: sha512-DSpMj8PI5W7v2G4+rE+BymTKZPjlu6t/M1N6rPAa6Hwn+/e8jDmFJaq8/kpoGCvwd75g2h5DbjF2MduOMNyrsQ==} - engines: {node: '>=4'} + lazy-val@1.0.5: {} + + lazystream@1.0.1: dependencies: - pify: 3.0.0 - tasklist: 3.1.1 - dev: true + readable-stream: 2.3.8 - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true + levn@0.4.1: dependencies: - event-stream: 3.3.4 - dev: true + prelude-ls: 1.2.1 + type-check: 0.4.0 - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + lightningcss-darwin-arm64@1.29.1: + optional: true - /psl@1.8.0: - resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} - dev: true + lightningcss-darwin-x64@1.29.1: + optional: true - /pug-attrs@3.0.0: - resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} - dependencies: - constantinople: 4.0.1 - js-stringify: 1.0.2 - pug-runtime: 3.0.1 - dev: true + lightningcss-freebsd-x64@1.29.1: + optional: true - /pug-code-gen@3.0.2: - resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} - dependencies: - constantinople: 4.0.1 - doctypes: 1.1.0 - js-stringify: 1.0.2 - pug-attrs: 3.0.0 - pug-error: 2.0.0 - pug-runtime: 3.0.1 - void-elements: 3.1.0 - with: 7.0.2 - dev: true + lightningcss-linux-arm-gnueabihf@1.29.1: + optional: true - /pug-error@2.0.0: - resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + lightningcss-linux-arm64-gnu@1.29.1: + optional: true - /pug-filters@4.0.0: - resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} - dependencies: - constantinople: 4.0.1 - jstransformer: 1.0.0 - pug-error: 2.0.0 - pug-walk: 2.0.0 - resolve: 1.22.0 - dev: true + lightningcss-linux-arm64-musl@1.29.1: + optional: true - /pug-lexer@5.0.1: - resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} - dependencies: - character-parser: 2.2.0 - is-expression: 4.0.0 - pug-error: 2.0.0 + lightningcss-linux-x64-gnu@1.29.1: + optional: true - /pug-linker@4.0.0: - resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} - dependencies: - pug-error: 2.0.0 - pug-walk: 2.0.0 - dev: true + lightningcss-linux-x64-musl@1.29.1: + optional: true + + lightningcss-win32-arm64-msvc@1.29.1: + optional: true + + lightningcss-win32-x64-msvc@1.29.1: + optional: true - /pug-load@3.0.0: - resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + lightningcss@1.29.1: dependencies: - object-assign: 4.1.1 - pug-walk: 2.0.0 - dev: true + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.1 + lightningcss-darwin-x64: 1.29.1 + lightningcss-freebsd-x64: 1.29.1 + lightningcss-linux-arm-gnueabihf: 1.29.1 + lightningcss-linux-arm64-gnu: 1.29.1 + lightningcss-linux-arm64-musl: 1.29.1 + lightningcss-linux-x64-gnu: 1.29.1 + lightningcss-linux-x64-musl: 1.29.1 + lightningcss-win32-arm64-msvc: 1.29.1 + lightningcss-win32-x64-msvc: 1.29.1 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.4.3: + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0(supports-color@5.5.0) + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.7.0 + transitivePeerDependencies: + - supports-color - /pug-parser@6.0.0: - resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + listr2@8.2.5: dependencies: - pug-error: 2.0.0 - token-stream: 1.0.0 - dev: true + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 - /pug-runtime@3.0.1: - resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} - dev: true + local-pkg@1.0.0: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 - /pug-strip-comments@2.0.0: - resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + locate-path@3.0.0: dependencies: - pug-error: 2.0.0 - dev: true + p-locate: 3.0.0 + path-exists: 3.0.0 - /pug-walk@2.0.0: - resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} - dev: true + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 - /pug@3.0.2: - resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} + locate-path@6.0.0: dependencies: - pug-code-gen: 3.0.2 - pug-filters: 4.0.0 - pug-lexer: 5.0.1 - pug-linker: 4.0.0 - pug-load: 3.0.0 - pug-parser: 6.0.0 - pug-runtime: 3.0.1 - pug-strip-comments: 2.0.0 - dev: true + p-locate: 5.0.0 - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + locate-path@7.2.0: dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 + p-locate: 6.0.0 - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} + lodash.camelcase@4.3.0: {} - /pupa@2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 + lodash.defaults@4.2.0: {} - /q@1.5.1: - resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + lodash.difference@4.5.0: {} - /qs@6.10.3: - resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 + lodash.flatten@4.4.0: {} - /qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - dev: true + lodash.isplainobject@4.0.6: {} - /qs@6.9.6: - resolution: {integrity: sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==} - engines: {node: '>=0.6'} + lodash.kebabcase@4.1.1: {} - /query-string@5.1.1: - resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} - engines: {node: '>=0.10.0'} - dependencies: - decode-uri-component: 0.2.0 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true + lodash.merge@4.6.2: {} - /query-string@8.1.0: - resolution: {integrity: sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==} - engines: {node: '>=14.16'} - dependencies: - decode-uri-component: 0.4.1 - filter-obj: 5.1.0 - split-on-first: 3.0.0 - dev: false + lodash.mergewith@4.6.2: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + lodash.snakecase@4.1.1: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + lodash.startcase@4.4.0: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true + lodash.union@4.6.0: {} - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} + lodash.uniq@4.5.0: {} - /raw-body@2.4.2: - resolution: {integrity: sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.1 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 + lodash.upperfirst@4.3.1: {} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 + lodash@4.17.21: {} - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + log-symbols@4.1.0: dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.6 - strip-json-comments: 2.0.1 + chalk: 4.1.2 + is-unicode-supported: 0.1.0 - /read-cache@1.0.0: - resolution: {integrity: sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=} + log-update@6.1.0: dependencies: - pify: 2.3.0 - dev: false + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 - /read-config-file@6.2.0: - resolution: {integrity: sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==} - engines: {node: '>=12.0.0'} - dependencies: - dotenv: 9.0.2 - dotenv-expand: 5.1.0 - js-yaml: 4.1.0 - json5: 2.2.1 - lazy-val: 1.0.5 - dev: true + longest-streak@3.1.0: {} - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true + lowercase-keys@2.0.0: {} - /read-pkg@3.0.0: - resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} - engines: {node: '>=4'} + lru-cache@10.4.3: {} + + lru-cache@4.1.5: dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - dev: true + pseudomap: 1.0.2 + yallist: 2.1.2 - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + lru-cache@5.1.1: dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true + yallist: 3.1.1 - /readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + lru-cache@6.0.0: dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - dev: true + yallist: 4.0.0 + + lru-cache@7.18.3: {} - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + lucide-vue-next@0.476.0(vue@3.5.13(typescript@5.7.3)): dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 + vue: 3.5.13(typescript@5.7.3) - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + magic-string@0.30.17: dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true + '@jridgewell/sourcemap-codec': 1.5.0 - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + make-fetch-happen@10.2.1: dependencies: - picomatch: 2.3.1 - dev: true + agentkeepalive: 4.6.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color - /recast@0.17.2: - resolution: {integrity: sha512-YHFvn4rBXl8eIjALjUiOV/AP3xFpyGNGNHDw9mAncAWuIdgnBKjbZQ9+P3VlsKcNaNapRVFlTEX1dvDRlYwyxg==} - engines: {node: '>= 4'} + markdown-table@3.0.4: {} + + matcher@3.0.0: dependencies: - ast-types: 0.12.1 - esprima: 4.0.1 - private: 0.1.8 - source-map: 0.6.1 - dev: true + escape-string-regexp: 4.0.0 + optional: true - /recast@0.18.10: - resolution: {integrity: sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==} - engines: {node: '>= 4'} + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: dependencies: - ast-types: 0.13.3 - esprima: 4.0.1 - private: 0.1.8 - source-map: 0.6.1 - dev: true + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 - /recast@0.20.5: - resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==} - engines: {node: '>= 4'} + mdast-util-gfm-footnote@2.0.0: dependencies: - ast-types: 0.14.2 - esprima: 4.0.1 - source-map: 0.6.1 - tslib: 2.4.0 - dev: true + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + mdast-util-gfm-strikethrough@2.0.0: dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /regenerate-unicode-properties@9.0.0: - resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} - engines: {node: '>=4'} + mdast-util-gfm-table@2.0.0: dependencies: - regenerate: 1.4.2 - dev: true + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /regenerator-runtime@0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + mdast-util-gfm@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 - /regenerator-transform@0.14.5: - resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} + mdast-util-to-markdown@2.1.2: dependencies: - '@babel/runtime': 7.23.1 - dev: true + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 - /regex-not@1.0.2: - resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} - engines: {node: '>=0.10.0'} + mdast-util-to-string@4.0.0: dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - dev: true + '@types/mdast': 4.0.4 - /regexp-to-ast@0.3.5: - resolution: {integrity: sha512-1CJygtdvsfNFwiyjaMLBWtg2tfEqx/jSZ8S6TV+GlNL8kiH8rb4cm5Pb7A/C2BpyM/fA8ZJEudlCwi/jvAY+Ow==} - dev: false + memoirist@0.3.0: {} - /regexp-to-ast@0.4.0: - resolution: {integrity: sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==} - dev: false + meow@12.1.1: {} - /regexp-to-ast@0.5.0: - resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} - dev: false + merge-stream@2.0.0: {} - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + merge2@1.4.1: {} - /regexpu-core@4.8.0: - resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} - engines: {node: '>=4'} + micromark-core-commonmark@2.0.2: dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 9.0.0 - regjsgen: 0.5.2 - regjsparser: 0.7.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.0.0 - dev: true + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /registry-auth-token@4.2.1: - resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} - engines: {node: '>=6.0.0'} + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - rc: 1.2.8 + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} + micromark-extension-gfm-footnote@2.1.0: dependencies: - rc: 1.2.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /regjsgen@0.5.2: - resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} - dev: true - - /regjsparser@0.7.0: - resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} - hasBin: true + micromark-extension-gfm-strikethrough@2.1.0: dependencies: - jsesc: 0.5.0 - dev: true - - /remarkable-katex@1.2.1: - resolution: {integrity: sha512-Y1VquJBZnaVsfsVcKW2hmjT+pDL7mp8l5WAVlvuvViltrdok2m1AIKmJv8SsH+mBY84PoMw67t3kTWw1dIm8+g==} - dev: false + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /remarkable@2.0.1: - resolution: {integrity: sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==} - engines: {node: '>= 6.0.0'} - hasBin: true + micromark-extension-gfm-table@2.1.1: dependencies: - argparse: 1.0.10 - autolinker: 3.16.2 - dev: false - - /repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /repeat-string@1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} - engines: {node: '>=0.10'} - dev: true - - /request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + micromark-extension-gfm-tagfilter@2.0.0: dependencies: - aws-sign2: 0.7.0 - aws4: 1.11.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.3 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - dev: true + micromark-util-types: 2.0.1 - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - - /resolve-from@3.0.0: - resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=} - engines: {node: '>=4'} - dev: false + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.1 - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} + micromark-factory-label@2.0.1: dependencies: - global-dirs: 0.1.1 - dev: true + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /resolve-url@0.2.1: - resolution: {integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=} - deprecated: https://github.com/lydell/resolve-url#deprecated - dev: true + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.1 - /resolve@1.22.0: - resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} - hasBin: true + micromark-factory-title@2.0.1: dependencies: - is-core-module: 2.8.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /responselike@1.0.2: - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} + micromark-factory-whitespace@2.0.1: dependencies: - lowercase-keys: 1.0.1 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /restore-cursor@2.0.0: - resolution: {integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=} - engines: {node: '>=4'} + micromark-util-character@2.1.1: dependencies: - onetime: 2.0.1 - signal-exit: 3.0.7 - dev: true + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + micromark-util-chunked@2.0.1: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.6 - dev: true + micromark-util-symbol: 2.0.1 - /ret@0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} - dev: true + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.1 - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - /rgb-regex@1.0.1: - resolution: {integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE=} - dev: false + micromark-util-encode@2.0.1: {} - /rgba-regex@1.0.0: - resolution: {integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=} - dev: false + micromark-util-html-tag-name@2.0.1: {} - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true + micromark-util-normalize-identifier@2.0.1: dependencies: - glob: 7.2.3 - dev: true + micromark-util-symbol: 2.0.1 - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true + micromark-util-resolve-all@2.0.1: dependencies: - glob: 7.2.3 - dev: false + micromark-util-types: 2.0.1 - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + micromark-util-sanitize-uri@2.0.1: dependencies: - glob: 7.2.3 - dev: true + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - /roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - requiresBuild: true + micromark-util-subtokenize@2.0.4: dependencies: - boolean: 3.1.4 - detect-node: 2.1.0 - globalthis: 1.0.2 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.2 - dev: true - optional: true + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - /robust-predicates@3.0.1: - resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} - dev: false + micromark-util-symbol@2.0.1: {} - /rollup@2.70.1: - resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true + micromark-util-types@2.0.1: {} - /rss-parser@3.12.0: - resolution: {integrity: sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==} + micromark@4.0.1: dependencies: - entities: 2.2.0 - xml2js: 0.4.23 - dev: true - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + '@types/debug': 4.1.12 + debug: 4.4.0(supports-color@5.5.0) + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + transitivePeerDependencies: + - supports-color - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + micromatch@4.0.8: dependencies: - queue-microtask: 1.2.3 + braces: 3.0.3 + picomatch: 2.3.1 - /rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - dev: false + mime-db@1.52.0: {} - /rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} + mime-types@2.1.35: dependencies: - tslib: 1.14.1 - dev: true + mime-db: 1.52.0 - /rxjs@7.4.0: - resolution: {integrity: sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==} - dependencies: - tslib: 2.1.0 - dev: true + mime@2.6.0: {} - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + mimic-fn@2.1.0: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + mimic-fn@3.1.0: {} - /safe-regex@1.1.0: - resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=} - dependencies: - ret: 0.1.15 - dev: true + mimic-fn@4.0.0: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + mimic-function@5.0.1: {} - /sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + min-indent@1.0.1: {} + + minimatch@10.0.1: dependencies: - truncate-utf8-bytes: 1.0.2 - dev: true + brace-expansion: 2.0.1 - /sanitize-html@2.7.0: - resolution: {integrity: sha512-jfQelabOn5voO7FAfnQF7v+jsA6z9zC/O4ec0z3E35XPEtHYJT/OdUziVWlKW4irCr2kXaQAyXTXDHWAibg1tA==} + minimatch@3.1.2: dependencies: - deepmerge: 4.2.2 - escape-string-regexp: 4.0.0 - htmlparser2: 6.1.0 - is-plain-object: 5.0.0 - parse-srcset: 1.0.2 - postcss: 8.4.12 - dev: false - - /sass@1.45.1: - resolution: {integrity: sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA==} - engines: {node: '>=8.9.0'} - hasBin: true + brace-expansion: 1.1.11 + + minimatch@5.1.6: dependencies: - chokidar: 3.5.3 - immutable: 4.0.0 - source-map-js: 1.0.2 - dev: true + brace-expansion: 2.0.1 - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 - /scale-svg-path@0.0.1: - resolution: {integrity: sha1-UpuNrKopTwejy0x582UbLxz1Go0=} - dev: false + minimist@1.2.8: {} - /schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} - engines: {node: '>= 10.13.0'} + minipass-collect@1.0.2: dependencies: - '@types/json-schema': 7.0.10 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true + minipass: 3.3.6 - /sec@1.0.0: - resolution: {integrity: sha1-Az1go60g7PLgCUDRT5eCNGV3QzU=} - engines: {node: '>=0.10.0'} - dev: true + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 - /seek-bzip@1.0.6: - resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} - hasBin: true + minipass-flush@1.0.5: dependencies: - commander: 2.20.3 - dev: true + minipass: 3.3.6 - /semver-compare@1.0.0: - resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 - /semver-diff@3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} + minipass-sized@1.0.3: dependencies: - semver: 6.3.0 + minipass: 3.3.6 - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true + minipass@3.3.6: + dependencies: + yallist: 4.0.0 - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true + minipass@5.0.0: {} - /semver@7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true - dev: true + minipass@7.1.2: {} - /semver@7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true + minizlib@2.1.2: dependencies: - lru-cache: 6.0.0 + minipass: 3.3.6 + yallist: 4.0.0 - /semver@7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true + mkdirp-classic@0.5.3: {} - /send@0.17.2: - resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} - engines: {node: '>= 0.8.0'} + mkdirp@1.0.4: {} + + mlly@1.7.4: dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.8.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.5.0 - transitivePeerDependencies: - - supports-color + acorn: 8.14.0 + pathe: 2.0.2 + pkg-types: 1.3.1 + ufo: 1.5.4 - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + monaco-textmate@3.0.1(onigasm@2.2.5): dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true + fast-plist: 0.1.3 + onigasm: 2.2.5 - /serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - requiresBuild: true + ms@2.1.3: {} + + nanoid@3.3.8: {} + + nanoid@5.1.2: {} + + napi-build-utils@2.0.0: {} + + natural-compare@1.4.0: {} + + natural-orderby@5.0.0: {} + + negotiator@0.6.4: {} + + node-abi@3.74.0: dependencies: - type-fest: 0.13.1 - dev: true + semver: 7.7.1 + + node-addon-api@1.7.2: + optional: true + + node-addon-api@7.1.1: optional: true - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + node-api-version@0.2.0: dependencies: - randombytes: 2.1.0 - dev: true + semver: 7.7.1 - /serialize-svg-path@0.1.0: - resolution: {integrity: sha1-pyvxT9pp1vdjAWSBVNCR/8ByKZo=} - dev: false + node-fetch-native@1.6.6: {} - /serve-static@1.14.2: - resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} - engines: {node: '>= 0.8.0'} + node-gyp@9.4.1: dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.17.2 + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.7.1 + tar: 6.2.1 + which: 2.0.2 transitivePeerDependencies: + - bluebird - supports-color - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + node-releases@2.0.19: {} + + nodemon@3.1.9: dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true + chokidar: 3.6.0 + debug: 4.4.0(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.1 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 - /server-destroy@1.0.1: - resolution: {integrity: sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=} - dev: false + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 - /set-value@2.0.1: - resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} - engines: {node: '>=0.10.0'} + normalize-package-data@2.5.0: dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 - dev: true + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 - /setimmediate@1.0.5: - resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} - dev: false + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + normalize-path@3.0.0: {} - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + npm-run-path@5.3.0: dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true + path-key: 4.0.0 - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + npmlog@6.0.2: dependencies: - kind-of: 6.0.3 - dev: true + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 - /shebang-command@1.2.0: - resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=} - engines: {node: '>=0.10.0'} + nth-check@2.1.1: dependencies: - shebang-regex: 1.0.0 - dev: true + boolbase: 1.0.0 - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + nypm@0.5.2: dependencies: - shebang-regex: 3.0.0 + citty: 0.1.6 + consola: 3.4.0 + pathe: 2.0.2 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.5.4 - /shebang-regex@1.0.0: - resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=} - engines: {node: '>=0.10.0'} - dev: true + object-keys@1.1.1: + optional: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + ohash@1.1.4: {} - /shell-quote@1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} - dev: true + once@1.4.0: + dependencies: + wrappy: 1.0.2 - /shellwords@0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - dev: true + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 - /shortid@2.2.16: - resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} + onetime@6.0.0: dependencies: - nanoid: 2.1.11 - dev: true + mimic-fn: 4.0.0 - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + onetime@7.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.1 - object-inspect: 1.12.0 + mimic-function: 5.0.1 - /signal-exit@3.0.6: - resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} + onigasm@2.2.5: + dependencies: + lru-cache: 5.1.1 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + openapi-types@12.1.3: {} - /simple-swizzle@0.2.2: - resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} + optionator@0.9.4: dependencies: - is-arrayish: 0.3.2 - dev: false + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 - /slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - dev: true + p-cancelable@1.1.0: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + p-cancelable@2.1.1: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + p-limit@2.3.0: dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true + p-try: 2.2.0 - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true + yocto-queue: 0.1.0 - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + p-limit@4.0.0: dependencies: - ansi-styles: 6.1.0 - is-fullwidth-code-point: 4.0.0 - dev: true + yocto-queue: 1.1.1 - /slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} - dev: false + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - requiresBuild: true - dev: true - optional: true + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 - /snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} + p-locate@5.0.0: dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true + p-limit: 3.1.0 - /snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} + p-locate@6.0.0: dependencies: - kind-of: 3.2.2 - dev: true + p-limit: 4.0.0 - /snapdragon@0.8.2: - resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} - engines: {node: '>=0.10.0'} + p-map@4.0.0: dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + aggregate-error: 3.1.0 - /socket.io-adapter@2.3.3: - resolution: {integrity: sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==} - dev: true + p-try@2.2.0: {} - /socket.io-client@4.4.1(utf-8-validate@5.0.9): - resolution: {integrity: sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@socket.io/component-emitter': 3.0.0 - backo2: 1.0.2 - debug: 4.3.4(supports-color@9.2.1) - engine.io-client: 6.1.1(utf-8-validate@5.0.9) - parseuri: 0.0.6 - socket.io-parser: 4.1.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + package-json-from-dist@1.0.1: {} - /socket.io-parser@4.0.4: - resolution: {integrity: sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==} - engines: {node: '>=10.0.0'} - dependencies: - '@types/component-emitter': 1.2.11 - component-emitter: 1.3.0 - debug: 4.3.4(supports-color@9.2.1) - transitivePeerDependencies: - - supports-color - dev: true + package-manager-detector@0.2.9: {} - /socket.io-parser@4.1.2: - resolution: {integrity: sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==} - engines: {node: '>=10.0.0'} + parent-module@1.0.1: dependencies: - '@socket.io/component-emitter': 3.0.0 - debug: 4.3.4(supports-color@9.2.1) - transitivePeerDependencies: - - supports-color - dev: true + callsites: 3.1.0 - /socket.io@4.4.1(utf-8-validate@5.0.9): - resolution: {integrity: sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==} - engines: {node: '>=10.0.0'} - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - debug: 4.3.4(supports-color@9.2.1) - engine.io: 6.1.3(utf-8-validate@5.0.9) - socket.io-adapter: 2.3.3 - socket.io-parser: 4.0.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + parse-gitignore@2.0.0: {} - /sort-keys-length@1.0.1: - resolution: {integrity: sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=} - engines: {node: '>=0.10.0'} + parse-imports@2.2.1: dependencies: - sort-keys: 1.1.2 - dev: true + es-module-lexer: 1.6.0 + slashes: 3.0.12 - /sort-keys@1.1.2: - resolution: {integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=} - engines: {node: '>=0.10.0'} + parse-json@5.2.0: dependencies: - is-plain-obj: 1.1.0 - dev: true + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - /sort-keys@2.0.0: - resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=} - engines: {node: '>=4'} - dependencies: - is-plain-obj: 1.1.0 - dev: true + path-exists@3.0.0: {} - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + path-exists@4.0.0: {} - /source-map-resolve@0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.0 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 - dev: true + path-exists@5.0.0: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true + lru-cache: 10.4.3 + minipass: 7.1.2 - /source-map-url@0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - deprecated: See https://github.com/lydell/source-map-url#deprecated - dev: true + pathe@1.1.2: {} - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} + pathe@2.0.2: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + pathe@2.0.3: {} - /source-map@0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - dev: true + pe-library@0.4.1: {} - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + pend@1.2.0: {} - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true + perfect-debounce@1.0.0: {} - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + picocolors@1.1.1: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 - dev: true + picomatch@2.3.1: {} - /spdx-license-ids@3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} - dev: true + picomatch@4.0.2: {} - /split-on-first@3.0.0: - resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} - engines: {node: '>=12'} - dev: false + pidtree@0.6.0: {} - /split-string@3.1.0: - resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - dev: true + pify@4.0.1: {} - /split2@2.2.0: - resolution: {integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==} + pkg-types@1.3.1: dependencies: - through2: 2.0.5 - dev: true + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.2 - /split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + pkg-up@3.1.0: dependencies: - readable-stream: 3.6.0 - dev: true + find-up: 3.0.0 - /split@0.3.3: - resolution: {integrity: sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=} + plist@3.1.0: dependencies: - through: 2.3.8 - dev: true + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + pluralize@8.0.0: {} - /sprintf-js@1.1.2: - resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} - requiresBuild: true - dev: true - optional: true + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 - /sshpk@1.17.0: - resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} - engines: {node: '>=0.10.0'} - hasBin: true + postcss-value-parser@4.2.0: {} + + postcss@8.5.3: dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - dev: true + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - dev: false + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.74.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.2 + tunnel-agent: 0.6.0 - /stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - dev: true + prelude-ls@1.2.1: {} - /static-extend@0.1.2: - resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=} - engines: {node: '>=0.10.0'} + prettier-plugin-tailwindcss@0.6.11(prettier@3.4.2): dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 - dev: true + prettier: 3.4.2 + + prettier@3.4.2: {} + + proc-log@2.0.1: {} + + process-nextick-args@2.0.1: {} - /statuses@1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} + progress@2.0.3: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + promise-inflight@1.0.1: {} - /steno@0.4.4: - resolution: {integrity: sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=} + promise-retry@2.0.1: dependencies: - graceful-fs: 4.2.10 + err-code: 2.0.3 + retry: 0.12.0 - /steno@2.1.0: - resolution: {integrity: sha512-mauOsiaqTNGFkWqIfwcm3y/fq+qKKaIWf1vf3ocOuTdco9XoHCO2AGF1gFYXuZFSWuP38Q8LBHBGJv2KnJSXyA==} - engines: {node: ^14.13.1 || >=16.0.0} - dev: false - - /stream-combiner@0.0.4: - resolution: {integrity: sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=} + prompts@2.4.2: dependencies: - duplexer: 0.1.2 - dev: true + kleur: 3.0.3 + sisteransi: 1.0.5 - /streamsearch@0.1.2: - resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} - engines: {node: '>=0.8.0'} - dev: true + pseudomap@1.0.2: {} - /strict-uri-encode@1.1.0: - resolution: {integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=} - engines: {node: '>=0.10.0'} - dev: true + pstree.remy@1.1.8: {} - /string-argv@0.1.2: - resolution: {integrity: sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==} - engines: {node: '>=0.6.19'} - dev: true + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 - /string-argv@0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} - engines: {node: '>=0.6.19'} + punycode@2.3.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + queue-microtask@1.2.3: {} - /string-width@5.0.1: - resolution: {integrity: sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==} - engines: {node: '>=12'} + quick-lru@5.1.1: {} + + radix-vue@1.9.17(vue@3.5.13(typescript@5.7.3)): dependencies: - emoji-regex: 9.2.2 - is-fullwidth-code-point: 4.0.0 - strip-ansi: 7.0.1 - dev: true + '@floating-ui/dom': 1.6.13 + '@floating-ui/vue': 1.1.6(vue@3.5.13(typescript@5.7.3)) + '@internationalized/date': 3.7.0 + '@internationalized/number': 3.6.0 + '@tanstack/vue-virtual': 3.13.2(vue@3.5.13(typescript@5.7.3)) + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) + aria-hidden: 1.2.4 + defu: 6.1.4 + fast-deep-equal: 3.1.3 + nanoid: 5.1.2 + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - '@vue/composition-api' - /string.prototype.padend@3.1.3: - resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} - engines: {node: '>= 0.4'} + rc9@2.1.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - dev: true + defu: 6.1.4 + destr: 2.0.3 - /string.prototype.trimend@1.0.4: - resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} + rc@1.2.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 - /string.prototype.trimstart@1.0.4: - resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} + read-binary-file-arch@1.0.6: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - dev: true + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + read-pkg@5.2.0: dependencies: - safe-buffer: 5.1.2 + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + readable-stream@2.3.8: dependencies: - safe-buffer: 5.2.1 - dev: true + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 - /strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} + readable-stream@3.6.2: dependencies: - ansi-regex: 4.1.1 - dev: true + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + readdir-glob@1.1.3: dependencies: - ansi-regex: 5.0.1 + minimatch: 5.1.6 - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} - engines: {node: '>=12'} + readdirp@3.6.0: dependencies: - ansi-regex: 6.0.1 - dev: true + picomatch: 2.3.1 - /strip-bom@3.0.0: - resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} - engines: {node: '>=4'} - dev: true + readdirp@4.1.1: {} - /strip-dirs@2.1.0: - resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + refa@0.12.1: dependencies: - is-natural-number: 4.0.1 - dev: true + '@eslint-community/regexpp': 4.12.1 - /strip-eof@1.0.0: - resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=} - engines: {node: '>=0.10.0'} - dev: true + regexp-ast-analysis@0.7.1: + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + regexp-tree@0.1.27: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + regjsparser@0.10.0: dependencies: - min-indent: 1.0.1 - dev: true + jsesc: 0.5.0 - /strip-json-comments@2.0.1: - resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} - engines: {node: '>=0.10.0'} + remove-trailing-separator@1.1.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + require-directory@2.1.1: {} - /strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true + require-from-string@2.0.2: {} - /stylehacks@4.0.3: - resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} - engines: {node: '>=6.9.0'} + resedit@1.7.2: dependencies: - browserslist: 4.20.2 - postcss: 7.0.39 - postcss-selector-parser: 3.1.2 - dev: false + pe-library: 0.4.1 - /stylis@4.1.1: - resolution: {integrity: sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ==} - dev: false + resolve-alpn@1.2.1: {} - /subscriptions-transport-ws@0.9.19(graphql@14.7.0): - resolution: {integrity: sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==} - deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md - peerDependencies: - graphql: '>=0.10.0' - dependencies: - backo2: 1.0.2 - eventemitter3: 3.1.2 - graphql: 14.7.0 - iterall: 1.3.0 - symbol-observable: 1.2.0 - ws: 7.5.7 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true + resolve-from@4.0.0: {} - /sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - dependencies: - debug: 4.3.4(supports-color@9.2.1) - transitivePeerDependencies: - - supports-color - dev: true + resolve-from@5.0.0: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 + resolve-pkg-maps@1.0.0: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolve@1.22.10: dependencies: - has-flag: 4.0.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + responselike@2.0.1: dependencies: - has-flag: 4.0.0 - dev: true - - /supports-color@9.2.1: - resolution: {integrity: sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==} - engines: {node: '>=12'} - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + lowercase-keys: 2.0.0 - /svgo@1.1.1: - resolution: {integrity: sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - coa: 2.0.2 - colors: 1.1.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.28 - css-url-regex: 1.1.0 - csso: 3.5.1 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.5 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: false - - /svgo@1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true + restore-cursor@3.1.0: dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.5 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: false - - /svgstore@3.0.1: - resolution: {integrity: sha512-nL6WTxYnsVl3e0G/mwGEFSnPAWUrzIwHAPOwInD4QUuLDKxaKMnXduf0Ipw3m/g9AldPhp1Y8E/nkReFBukJrA==} - engines: {node: '>= 12'} + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: dependencies: - cheerio: 1.0.0-rc.10 - dev: false + onetime: 7.0.0 + signal-exit: 4.1.0 - /symbol-observable@1.2.0: - resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} - engines: {node: '>=0.10.0'} - dev: true + retry@0.12.0: {} - /tapable@0.1.10: - resolution: {integrity: sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=} - engines: {node: '>=0.6'} - dev: true + reusify@1.0.4: {} - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + rfdc@1.4.1: {} - /tar-stream@1.6.2: - resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} - engines: {node: '>= 0.8.0'} + rimraf@3.0.2: dependencies: - bl: 1.2.3 - buffer-alloc: 1.2.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - readable-stream: 2.3.7 - to-buffer: 1.1.1 - xtend: 4.0.2 - dev: true + glob: 7.2.3 - /tar@6.1.11: - resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} - engines: {node: '>= 10'} + roarr@2.15.4: dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 3.3.4 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.4 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + optional: true - /taskkill@3.1.0: - resolution: {integrity: sha512-5KcOFzPvd1nGFVrmB7H4+QAWVjYOf//+QTbOj0GpXbqtqbKGWVczG+rq6VhXAtdtlKLTs16NAmHRyF5vbggQ2w==} - engines: {node: '>=8'} + rollup@4.34.8: dependencies: - arrify: 2.0.1 - execa: 3.4.0 - dev: true - - /tasklist@3.1.1: - resolution: {integrity: sha512-G3I7QWUBSNWaekrJcDabydF6dcvy+vZ2PrX04JYq1p914TOLgpN+ryMtheGavs1LYVevTbTmwjQY8aeX8yLsyA==} - engines: {node: '>=4'} + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.8 + '@rollup/rollup-android-arm64': 4.34.8 + '@rollup/rollup-darwin-arm64': 4.34.8 + '@rollup/rollup-darwin-x64': 4.34.8 + '@rollup/rollup-freebsd-arm64': 4.34.8 + '@rollup/rollup-freebsd-x64': 4.34.8 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 + '@rollup/rollup-linux-arm-musleabihf': 4.34.8 + '@rollup/rollup-linux-arm64-gnu': 4.34.8 + '@rollup/rollup-linux-arm64-musl': 4.34.8 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 + '@rollup/rollup-linux-riscv64-gnu': 4.34.8 + '@rollup/rollup-linux-s390x-gnu': 4.34.8 + '@rollup/rollup-linux-x64-gnu': 4.34.8 + '@rollup/rollup-linux-x64-musl': 4.34.8 + '@rollup/rollup-win32-arm64-msvc': 4.34.8 + '@rollup/rollup-win32-ia32-msvc': 4.34.8 + '@rollup/rollup-win32-x64-msvc': 4.34.8 + fsevents: 2.3.3 + + run-parallel@1.2.0: dependencies: - neat-csv: 2.1.0 - pify: 2.3.0 - sec: 1.0.0 - dev: true + queue-microtask: 1.2.3 - /temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - dev: true + runtime-required@1.1.0: {} - /temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} + rxjs@7.8.1: dependencies: - rimraf: 2.6.3 - dev: true + tslib: 2.8.1 - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + safe-buffer@5.1.2: {} - /terser-webpack-plugin@5.3.1(webpack@5.70.0): - resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - source-map: 0.6.1 - terser: 5.12.1 - webpack: 5.70.0 - dev: true + safe-buffer@5.2.1: {} - /terser@5.12.1: - resolution: {integrity: sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==} - engines: {node: '>=10'} - hasBin: true + safer-buffer@2.1.2: {} + + sanitize-filename@1.6.3: dependencies: - acorn: 8.7.0 - commander: 2.20.3 - source-map: 0.7.3 - source-map-support: 0.5.21 - dev: true + truncate-utf8-bytes: 1.0.2 - /text-extensions@1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - dev: true + sass@1.85.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 - /text-table@0.2.0: - resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} - dev: true + sax@1.4.1: {} - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + scslre@0.3.0: dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: true + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.0 - dev: true + scule@1.3.0: {} - /through@2.3.8: - resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} - dev: true + semver-compare@1.0.0: + optional: true - /timed-out@4.0.1: - resolution: {integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=} - engines: {node: '>=0.10.0'} - dev: true + semver@5.7.2: {} - /timsort@0.3.0: - resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=} - dev: false + semver@6.3.1: {} - /tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - dependencies: - tmp: 0.2.1 - dev: true + semver@7.7.1: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + serialize-error@7.0.1: dependencies: - os-tmpdir: 1.0.2 - dev: true + type-fest: 0.13.1 + optional: true - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - dependencies: - rimraf: 3.0.2 - dev: true + set-blocking@2.0.0: {} - /to-buffer@1.1.1: - resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} - dev: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 - /to-fast-properties@2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} + shebang-regex@3.0.0: {} - /to-object-path@0.3.0: - resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true + shell-quote@1.8.2: {} - /to-readable-stream@1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} + signal-exit@3.0.7: {} - /to-regex-range@2.1.1: - resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true + signal-exit@4.1.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 + simple-concat@1.0.1: {} - /to-regex@3.0.2: - resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} - engines: {node: '>=0.10.0'} + simple-get@4.0.1: dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - dev: true - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 - /token-stream@1.0.0: - resolution: {integrity: sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=} - dev: true + simple-git-hooks@2.11.1: {} - /tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} + simple-update-notifier@2.0.0: dependencies: - psl: 1.8.0 - punycode: 2.1.1 - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - dev: true + semver: 7.7.1 - /traverse@0.3.9: - resolution: {integrity: sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=} - dev: false + sisteransi@1.0.5: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + slashes@3.0.12: {} - /trim-repeated@1.0.0: - resolution: {integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE=} - engines: {node: '>=0.10.0'} + slice-ansi@3.0.0: dependencies: - escape-string-regexp: 1.0.5 - dev: true + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + optional: true - /truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + slice-ansi@5.0.0: dependencies: - utf8-byte-length: 1.0.4 - dev: true + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 - /ts-invariant@0.4.4: - resolution: {integrity: sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==} + slice-ansi@7.1.0: dependencies: - tslib: 1.14.1 - dev: true + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 - /ts-node@9.1.1(typescript@4.6.3): - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} - hasBin: true - peerDependencies: - typescript: '>=2.7' - dependencies: - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - source-map-support: 0.5.21 - typescript: 4.6.3 - yn: 3.1.1 - dev: true + smart-buffer@4.2.0: {} - /tsc-watch@4.6.0(typescript@4.5.4): - resolution: {integrity: sha512-DRMADjFe44EDWb+YMIOj4b83UrU6le27L3/o0/9FlmA01ikFd5Dl9RD5h1hpeh0mQdIqXvwfHZszCcjhH3bAmQ==} - engines: {node: '>=8.17.0'} - hasBin: true - peerDependencies: - typescript: '*' + socks-proxy-agent@7.0.0: dependencies: - cross-spawn: 7.0.3 - node-cleanup: 2.1.2 - ps-tree: 1.2.0 - string-argv: 0.1.2 - strip-ansi: 6.0.1 - typescript: 4.5.4 - dev: true + agent-base: 6.0.2 + debug: 4.4.0(supports-color@5.5.0) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color - /tsconfig-paths@3.12.0: - resolution: {integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==} + socks@2.8.3: dependencies: - '@types/json5': 0.0.29 - json5: 1.0.1 - minimist: 1.2.5 - strip-bom: 3.0.0 - dev: true + ip-address: 9.0.5 + smart-buffer: 4.2.0 - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 - /tslib@2.1.0: - resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} - dev: true + source-map@0.6.1: {} - /tslib@2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + spdx-exceptions@2.5.0: {} - /tsutils@3.21.0(typescript@4.5.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + spdx-expression-parse@3.0.1: dependencies: - tslib: 1.14.1 - typescript: 4.5.4 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 - /tunnel-agent@0.6.0: - resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} + spdx-expression-parse@4.0.0: dependencies: - safe-buffer: 5.2.1 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 - /tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - requiresBuild: true - dev: true - optional: true + spdx-license-ids@3.0.21: {} - /tweetnacl@0.14.5: - resolution: {integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=} - dev: true + split2@4.2.0: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true + sprintf-js@1.1.3: {} - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + ssri@9.0.1: + dependencies: + minipass: 3.3.6 - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - requiresBuild: true - dev: true - optional: true + stable-hash@0.0.4: {} - /type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: true + stat-mode@1.0.0: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + string-argv@0.3.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: false + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + string_decoder@1.3.0: dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 + safe-buffer: 5.2.1 - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + strip-ansi@6.0.1: dependencies: - is-typedarray: 1.0.0 + ansi-regex: 5.0.1 - /typedarray@0.0.6: - resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=} - dev: true + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 - /typescript@4.1.6: - resolution: {integrity: sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + strip-final-newline@3.0.0: {} - /typescript@4.5.4: - resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==} - engines: {node: '>=4.2.0'} - hasBin: true + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 - /typescript@4.6.3: - resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + strip-json-comments@2.0.1: {} - /typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} + strip-json-comments@3.1.1: {} - /uglify-js@3.16.3: - resolution: {integrity: sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 - /unbox-primitive@1.0.1: - resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} + sumchecker@3.0.1: dependencies: - function-bind: 1.1.1 - has-bigints: 1.0.1 - has-symbols: 1.0.2 - which-boxed-primitive: 1.0.2 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + supports-color@5.5.0: dependencies: - buffer: 5.7.1 - through: 2.3.8 - dev: true + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 - /underscore-plus@1.7.0: - resolution: {integrity: sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==} + supports-color@8.1.1: dependencies: - underscore: 1.13.2 - dev: false + has-flag: 4.0.0 - /underscore@1.13.2: - resolution: {integrity: sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==} - dev: false + supports-preserve-symlinks-flag@1.0.0: {} - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true + synckit@0.6.2: + dependencies: + tslib: 2.8.1 - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + synckit@0.9.2: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.0.0 - dev: true + '@pkgr/core': 0.1.1 + tslib: 2.8.1 - /unicode-match-property-value-ecmascript@2.0.0: - resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} - engines: {node: '>=4'} - dev: true + tailwind-merge@3.0.2: {} - /unicode-property-aliases-ecmascript@2.0.0: - resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==} - engines: {node: '>=4'} - dev: true + tailwindcss@4.0.9: {} - /union-value@1.0.1: - resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} - engines: {node: '>=0.10.0'} + tapable@2.2.1: {} + + tar-fs@2.1.2: dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 2.0.1 - dev: true + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 - /uniq@1.0.1: - resolution: {integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=} - dev: false + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 - /uniqs@2.0.0: - resolution: {integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI=} - dev: false + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} + temp-file@3.4.0: dependencies: - crypto-random-string: 2.0.0 + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + text-extensions@2.4.0: {} - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} + through@2.3.8: {} - /unpipe@1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} + tiny-conventional-commits-parser@0.0.1: {} - /unplugin-auto-import@0.6.6(@vueuse/core@8.3.1)(vite@2.9.6)(webpack@5.70.0): - resolution: {integrity: sha512-x3YxAI9ePoumXOakuS5YJlFkSyAkl5vJlaFZSJhSp75nH5gg8LpqQ/0Gz1/CG/JRRv+xaE1CZpEV161AqFGjEg==} - engines: {node: '>=14'} - peerDependencies: - '@vueuse/core': '*' - peerDependenciesMeta: - '@vueuse/core': - optional: true - dependencies: - '@antfu/utils': 0.5.0 - '@rollup/pluginutils': 4.2.0 - '@vueuse/core': 8.3.1(vue@3.2.33) - local-pkg: 0.4.1 - magic-string: 0.26.1 - resolve: 1.22.0 - unplugin: 0.4.0(vite@2.9.6)(webpack@5.70.0) - transitivePeerDependencies: - - esbuild - - rollup - - vite - - webpack - dev: true - - /unplugin-icons@0.13.4(vite@2.9.6)(webpack@5.70.0): - resolution: {integrity: sha512-gyp5H4WADnXEE1uk8+NW6gnnALOlSpU8M5GwzNCYbUgjM4QudjcFbacHKuuqETk4VeSJyzM9Z2ufbuZFMuxvuQ==} - peerDependencies: - '@svgr/core': '>=5.5.0' - '@vue/compiler-sfc': ^3.0.2 - vue-template-compiler: ^2.6.12 - vue-template-es2015-compiler: ^1.9.0 - peerDependenciesMeta: - '@svgr/core': - optional: true - '@vue/compiler-sfc': - optional: true - vue-template-compiler: - optional: true - vue-template-es2015-compiler: - optional: true - dependencies: - '@antfu/install-pkg': 0.1.0 - '@antfu/utils': 0.5.0 - '@iconify/utils': 1.0.26 - debug: 4.3.4(supports-color@9.2.1) - kolorist: 1.5.1 - local-pkg: 0.4.1 - unplugin: 0.4.0(vite@2.9.6)(webpack@5.70.0) - transitivePeerDependencies: - - esbuild - - rollup - - supports-color - - vite - - webpack - dev: true + tinyexec@0.3.2: {} - /unplugin-vue-components@0.18.1(vite@2.9.6)(vue@3.2.33)(webpack@5.70.0): - resolution: {integrity: sha512-z+dY8LBf7fhlNNK30kSRnmOjc36pjOVF0pg/x2kPUko5iDOGKU2jTp4XOxvbqWzG1fFleCfFPwKYx1GhqYT+8Q==} - engines: {node: '>=14'} - peerDependencies: - '@babel/parser': ^7.15.8 - '@babel/traverse': ^7.15.4 - vue: 2 || 3 - peerDependenciesMeta: - '@babel/parser': - optional: true - '@babel/traverse': - optional: true + tinyglobby@0.2.10: dependencies: - '@antfu/utils': 0.5.0 - '@rollup/pluginutils': 4.2.0 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@9.2.1) - fast-glob: 3.2.11 - local-pkg: 0.4.1 - magic-string: 0.26.1 - minimatch: 5.0.1 - resolve: 1.22.0 - unplugin: 0.4.0(vite@2.9.6)(webpack@5.70.0) - vue: 3.2.33 - transitivePeerDependencies: - - esbuild - - rollup - - supports-color - - vite - - webpack - dev: true + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 - /unplugin@0.4.0(vite@2.9.6)(webpack@5.70.0): - resolution: {integrity: sha512-4ScITEmzlz1iZW3tkz+3L1V5k/xMQ6kjgm4lEXKxH0ozd8/OUWfiSA7RMRyrawsvq/t50JIzPpp1UyuSL/AXkA==} - peerDependencies: - esbuild: '>=0.13' - rollup: ^2.50.0 - vite: ^2.3.0 - webpack: 4 || 5 - peerDependenciesMeta: - esbuild: - optional: true - rollup: - optional: true - vite: - optional: true - webpack: - optional: true + tinyglobby@0.2.12: dependencies: - chokidar: 3.5.3 - vite: 2.9.6(sass@1.45.1) - webpack: 5.70.0 - webpack-virtual-modules: 0.4.3 - dev: true - - /unquote@1.1.1: - resolution: {integrity: sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=} - dev: false + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 - /unset-value@1.0.0: - resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=} - engines: {node: '>=0.10.0'} + tmp-promise@3.0.3: dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - dev: true + tmp: 0.2.3 - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /unzipper@0.10.11: - resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==} - dependencies: - big-integer: 1.6.51 - binary: 0.3.0 - bluebird: 3.4.7 - buffer-indexof-polyfill: 1.0.2 - duplexer2: 0.1.4 - fstream: 1.0.12 - graceful-fs: 4.2.10 - listenercount: 1.0.1 - readable-stream: 2.3.7 - setimmediate: 1.0.5 - dev: false - - /upath@2.0.1: - resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} - engines: {node: '>=4'} - dev: true + tmp@0.2.3: {} - /update-notifier@5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} - dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.3.5 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + to-regex-range@5.0.1: dependencies: - punycode: 2.1.1 - - /urix@0.1.0: - resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=} - deprecated: Please see https://github.com/lydell/urix#deprecated - dev: true + is-number: 7.0.0 - /url-parse-lax@3.0.0: - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} - engines: {node: '>=4'} + toml-eslint-parser@0.10.0: dependencies: - prepend-http: 2.0.0 + eslint-visitor-keys: 3.4.3 - /url-to-options@1.0.1: - resolution: {integrity: sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=} - engines: {node: '>= 4'} - dev: true + touch@3.1.1: {} - /use@3.1.1: - resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} - engines: {node: '>=0.10.0'} - dev: true + tree-kill@1.2.2: {} - /utf-8-validate@5.0.9: - resolution: {integrity: sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==} - engines: {node: '>=6.14.2'} - requiresBuild: true + truncate-utf8-bytes@1.0.2: dependencies: - node-gyp-build: 4.3.0 - dev: true + utf8-byte-length: 1.0.5 - /utf8-byte-length@1.0.4: - resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} - dev: true + ts-api-utils@2.0.1(typescript@5.7.3): + dependencies: + typescript: 5.7.3 - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + tslib@2.8.1: {} - /util.promisify@1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + tunnel-agent@0.6.0: dependencies: - define-properties: 1.1.3 - es-abstract: 1.19.1 - has-symbols: 1.0.2 - object.getownpropertydescriptors: 2.1.3 - dev: false + safe-buffer: 5.2.1 - /util.promisify@1.1.1: - resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} + type-check@0.4.0: dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - for-each: 0.3.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.3 - dev: true + prelude-ls: 1.2.1 - /utils-merge@1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} - engines: {node: '>= 0.4.0'} + type-fest@0.13.1: + optional: true - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true + type-fest@0.20.2: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + type-fest@0.6.0: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false + type-fest@0.8.1: {} - /v8-compile-cache@2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true + type-fest@2.19.0: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true + typescript@5.7.3: {} - /validate-npm-package-name@3.0.0: - resolution: {integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34=} - dependencies: - builtins: 1.0.3 - dev: true + ufo@1.5.4: {} - /vary@1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} - engines: {node: '>= 0.8'} + undefsafe@2.0.5: {} - /vendors@1.0.4: - resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} - dev: false + undici-types@6.19.8: {} - /vercel-toast@1.5.5: - resolution: {integrity: sha512-MTcNPcy9V+aiHIg5iS9h/3UQXHfY00a5pQv4D14XWOql9sUQuiB3mxQXyARLIHT+HblqZgf4awyaleA/ND16tA==} - dev: false + undici-types@6.20.0: {} - /verror@1.10.0: - resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - dev: true + unicorn-magic@0.1.0: {} - /verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - requiresBuild: true + unimport@4.1.2: dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - dev: true - optional: true + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.0.0 + magic-string: 0.30.17 + mlly: 1.7.4 + pathe: 2.0.3 + picomatch: 4.0.2 + pkg-types: 1.3.1 + scule: 1.3.0 + strip-literal: 3.0.0 + tinyglobby: 0.2.12 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 - /vite@2.9.6(sass@1.45.1): - resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==} - engines: {node: '>=12.2.0'} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true + unique-filename@2.0.1: dependencies: - esbuild: 0.14.27 - postcss: 8.4.12 - resolve: 1.22.0 - rollup: 2.70.1 - sass: 1.45.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true + unique-slug: 3.0.0 - /void-elements@3.1.0: - resolution: {integrity: sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=} - engines: {node: '>=0.10.0'} - dev: true - - /vscode-css-languageservice@5.4.2: - resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==} - dependencies: - vscode-languageserver-textdocument: 1.0.4 - vscode-languageserver-types: 3.16.0 - vscode-nls: 5.0.1 - vscode-uri: 3.0.3 - dev: true - - /vscode-html-languageservice@4.2.5: - resolution: {integrity: sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==} - dependencies: - vscode-languageserver-textdocument: 1.0.4 - vscode-languageserver-types: 3.16.0 - vscode-nls: 5.0.1 - vscode-uri: 3.0.3 - dev: true - - /vscode-json-languageservice@4.2.1: - resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} - dependencies: - jsonc-parser: 3.0.0 - vscode-languageserver-textdocument: 1.0.4 - vscode-languageserver-types: 3.16.0 - vscode-nls: 5.0.1 - vscode-uri: 3.0.3 - dev: true - - /vscode-jsonrpc@8.0.0-next.8: - resolution: {integrity: sha512-2eh7v+rzttUG6wg21xnm3U4IaR/i8cU9vHI9ZntRXuBtCcyR3RrPBvl86Ffm91m/Cio45kmn/LskHK3BAKZILA==} - engines: {node: '>=14.0.0'} - dev: true - - /vscode-languageserver-protocol@3.17.0-next.17: - resolution: {integrity: sha512-tMPne63EcKxNr+zaLSOdBcoEgdRNX4Hurlul5wsrvYToWyjjmPaIyXkQdXowhj8du050OXL7ArMLL/jt+hVlgQ==} - dependencies: - vscode-jsonrpc: 8.0.0-next.8 - vscode-languageserver-types: 3.17.0-next.10 - dev: true - - /vscode-languageserver-textdocument@1.0.4: - resolution: {integrity: sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==} - dev: true - - /vscode-languageserver-types@3.16.0: - resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} - dev: true - - /vscode-languageserver-types@3.17.0-next.10: - resolution: {integrity: sha512-BbuWVFKgkGX/VgbVPSofxZx2wqR5DMC+3IiB6FgJ7250GiLIKa5Z7RXaQ7i8z4t9rHEmpTA3UbrRkoLPjQUf6Q==} - dev: true - - /vscode-nls@5.0.1: - resolution: {integrity: sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==} - dev: true - - /vscode-pug-languageservice@0.30.6: - resolution: {integrity: sha512-oHXKmHaxLxVYDY6dOmxpm0YfilGgohIMEcE/ahK9O+0lvhgZ4xjEOdP27QcZs90fv92eOWf3CU9tgg4fR6e3+w==} - deprecated: 'WARNING: This project has been renamed to @volar/pug-language-service. Install using @volar/pug-language-service instead.' - dependencies: - '@volar/code-gen': 0.30.6 - '@volar/shared': 0.30.6 - '@volar/source-map': 0.30.6 - '@volar/transforms': 0.30.6 - pug-lexer: 5.0.1 - pug-parser: 6.0.0 - vscode-languageserver-textdocument: 1.0.4 - vscode-languageserver-types: 3.17.0-next.10 - dev: true - - /vscode-typescript-languageservice@0.30.6: - resolution: {integrity: sha512-Dni0VnMe01QkSvO0z7yIIy+vSll6hWCNtuuWvmBNoHAnFlndgq4OibPrpabv2iv4Lmq+66p40kqGcDg/bpjx5Q==} - deprecated: 'WARNING: This project has been renamed to @volar/typescript-language-service. Install using @volar/typescript-language-service instead.' - dependencies: - '@volar/shared': 0.30.6 - semver: 7.3.7 - upath: 2.0.1 - vscode-languageserver-protocol: 3.17.0-next.17 - vscode-languageserver-textdocument: 1.0.4 - vscode-nls: 5.0.1 - dev: true - - /vscode-uri@2.1.2: - resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} - dev: true - - /vscode-uri@3.0.3: - resolution: {integrity: sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==} - dev: true - - /vscode-vue-languageservice@0.30.6: - resolution: {integrity: sha512-ZDaW6F2WK0LXt9RpwziKEvhfNxNmpx3ULLfPCGc+jIkM+u00gIB4i2K/5F99yNzbvrtxcgb3emFRH5FBlmmWDQ==} - deprecated: 'WARNING: This project has been renamed to @volar/vue-language-service. Install using @volar/vue-language-service instead.' - dependencies: - '@volar/code-gen': 0.30.6 - '@volar/html2pug': 0.30.6 - '@volar/shared': 0.30.6 - '@volar/source-map': 0.30.6 - '@volar/transforms': 0.30.6 - '@volar/vue-code-gen': 0.30.6 - '@vscode/emmet-helper': 2.8.4 - '@vue/reactivity': 3.2.33 - '@vue/shared': 3.2.33 - upath: 2.0.1 - vscode-css-languageservice: 5.4.2 - vscode-html-languageservice: 4.2.5 - vscode-json-languageservice: 4.2.1 - vscode-languageserver-protocol: 3.17.0-next.17 - vscode-languageserver-textdocument: 1.0.4 - vscode-pug-languageservice: 0.30.6 - vscode-typescript-languageservice: 0.30.6 - dev: true - - /vue-codemod@0.0.5: - resolution: {integrity: sha512-DE+24W1d3oanGqq7yna4ddOKXmVzjECgku2ddMcm7OS9Bp9QOblMHT88PzKiCc7npGiHf5+mTfrEW1JVIBbA2A==} - engines: {node: '>= 10.0'} - hasBin: true + unique-slug@3.0.0: dependencies: - '@babel/core': 7.16.5 - '@babel/preset-env': 7.16.5(@babel/core@7.16.5) - '@babel/types': 7.16.0 - '@types/jscodeshift': 0.7.2 - '@vue/compiler-core': 3.2.31 - '@vue/compiler-dom': 3.2.33 - debug: 4.3.4(supports-color@9.2.1) - globby: 11.0.4 - inquirer: 7.3.3 - jscodeshift: 0.11.0(@babel/preset-env@7.16.5) - lru-cache: 6.0.0 - source-map: 0.6.1 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - dev: true + imurmurhash: 0.1.4 - /vue-demi@0.12.4(vue@3.2.33): - resolution: {integrity: sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true + unist-util-is@6.0.0: dependencies: - vue: 3.2.33 + '@types/unist': 3.0.3 - /vue-eslint-parser@8.0.1(eslint@8.5.0): - resolution: {integrity: sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '>=6.0.0' + unist-util-stringify-position@4.0.0: dependencies: - debug: 4.3.4(supports-color@9.2.1) - eslint: 8.5.0 - eslint-scope: 6.0.0 - eslint-visitor-keys: 3.1.0 - espree: 9.2.0 - esquery: 1.4.0 - lodash: 4.17.21 - semver: 7.3.5 - transitivePeerDependencies: - - supports-color - dev: true + '@types/unist': 3.0.3 - /vue-resize@2.0.0-alpha.1(vue@3.2.33): - resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} - peerDependencies: - vue: ^3.0.0 + unist-util-visit-parents@6.0.1: dependencies: - vue: 3.2.33 - dev: false + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 - /vue-router@4.0.14(vue@3.2.33): - resolution: {integrity: sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==} - peerDependencies: - vue: ^3.2.0 + unist-util-visit@5.0.0: dependencies: - '@vue/devtools-api': 6.1.3 - vue: 3.2.33 - dev: false + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 - /vue-tsc@0.30.6(typescript@4.5.4): - resolution: {integrity: sha512-p+lemuubzFgwr1Az3pqQ70uvWraf36qTrKkC6C7anv5S1G3aPerc4eY5Rjz3eVDOkK94E+KeBHevvpZbmVwvHA==} - hasBin: true - peerDependencies: - typescript: '*' - dependencies: - '@volar/shared': 0.30.6 - typescript: 4.5.4 - vscode-vue-languageservice: 0.30.6 - dev: true + universalify@0.1.2: {} + + universalify@2.0.1: {} - /vue3-perfect-scrollbar@1.6.0: - resolution: {integrity: sha512-bH8rk8a5gH0lh/1YGdQCfSpQtrUcBBQ2bAWCt3I1zZYlNDCm3lL/SWzhzv+aN/OjMSqYrslkm1O/ml8jTUZpTg==} + unixify@1.0.0: dependencies: - cssnano: 4.1.11 - perfect-scrollbar: 1.5.5 - postcss-import: 12.0.1 - dev: false + normalize-path: 2.1.1 - /vue@2.6.14: - resolution: {integrity: sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==} - dev: true + unplugin-auto-import@19.1.0(@vueuse/core@12.7.0(typescript@5.7.3)): + dependencies: + local-pkg: 1.0.0 + magic-string: 0.30.17 + picomatch: 4.0.2 + unimport: 4.1.2 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 + optionalDependencies: + '@vueuse/core': 12.7.0(typescript@5.7.3) - /vue@3.2.33: - resolution: {integrity: sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==} + unplugin-utils@0.2.4: dependencies: - '@vue/compiler-dom': 3.2.33 - '@vue/compiler-sfc': 3.2.33 - '@vue/runtime-dom': 3.2.33 - '@vue/server-renderer': 3.2.33(vue@3.2.33) - '@vue/shared': 3.2.33 + pathe: 2.0.2 + picomatch: 4.0.2 - /watch@1.0.2: - resolution: {integrity: sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=} - engines: {node: '>=0.1.95'} - hasBin: true + unplugin-vue-components@28.4.0(@babel/parser@7.26.7)(vue@3.5.13(typescript@5.7.3)): dependencies: - exec-sh: 0.2.2 - minimist: 1.2.5 - dev: true + chokidar: 3.6.0 + debug: 4.4.0(supports-color@5.5.0) + local-pkg: 1.0.0 + magic-string: 0.30.17 + mlly: 1.7.4 + tinyglobby: 0.2.10 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 + vue: 3.5.13(typescript@5.7.3) + optionalDependencies: + '@babel/parser': 7.26.7 + transitivePeerDependencies: + - supports-color - /watchpack@2.3.1: - resolution: {integrity: sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==} - engines: {node: '>=10.13.0'} + unplugin@2.2.0: dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - dev: true + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 - /wcwidth@1.0.1: - resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: - defaults: 1.0.3 - dev: true + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 - /webidl-conversions@3.0.1: - resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - dev: true + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + utf8-byte-length@1.0.5: {} - /webpack-virtual-modules@0.4.3: - resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} - dev: true + util-deprecate@1.0.2: {} - /webpack@5.70.0: - resolution: {integrity: sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + validate-npm-package-license@3.0.4: dependencies: - '@types/eslint-scope': 3.7.3 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.7.0 - acorn-import-assertions: 1.8.0(acorn@8.7.0) - browserslist: 4.20.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.9.2 - es-module-lexer: 0.9.3 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.9 - json-parse-better-errors: 1.0.2 - loader-runner: 4.2.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.1.1 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.1(webpack@5.70.0) - watchpack: 2.3.1 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 - /whatwg-url@5.0.0: - resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + verror@1.10.1: dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + optional: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.85.1)(yaml@2.7.0): dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.6 - is-string: 1.0.7 - is-symbol: 1.0.4 + esbuild: 0.24.2 + postcss: 8.5.3 + rollup: 4.34.8 + optionalDependencies: + '@types/node': 22.13.1 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.1 + sass: 1.85.1 + yaml: 2.7.0 - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + vue-demi@0.14.10(vue@3.5.13(typescript@5.7.3)): dependencies: - isexe: 2.0.0 - dev: true + vue: 3.5.13(typescript@5.7.3) - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + vue-eslint-parser@9.4.3(eslint@9.19.0(jiti@2.4.2)): dependencies: - isexe: 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.19.0(jiti@2.4.2) + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} + vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)): dependencies: - string-width: 4.2.3 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.7.3) - /with@7.0.2: - resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} - engines: {node: '>= 10.0.0'} + vue@3.5.13(typescript@5.7.3): dependencies: - '@babel/parser': 7.17.9 - '@babel/types': 7.17.0 - assert-never: 1.2.1 - babel-walk: 3.0.0-canary-5 - dev: true - - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.7.3 - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + watchboy@0.4.3: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true + lodash.difference: 4.5.0 + micromatch: 4.0.8 + pify: 4.0.1 + unixify: 1.0.0 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wcwidth@1.0.1: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + defaults: 1.0.4 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + webpack-virtual-modules@0.6.2: {} - /write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + which@2.0.2: dependencies: - graceful-fs: 4.2.10 - imurmurhash: 0.1.4 - signal-exit: 3.0.6 - dev: true + isexe: 2.0.0 - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + wide-align@1.1.5: dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.6 - typedarray-to-buffer: 3.1.5 + string-width: 4.2.3 - /ws@7.5.7: - resolution: {integrity: sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + word-wrap@1.2.5: {} - /ws@8.2.3(utf-8-validate@5.0.9): - resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + wrap-ansi@7.0.0: dependencies: - utf-8-validate: 5.0.9 - dev: true - - /xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - /xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} + wrap-ansi@8.1.0: dependencies: - sax: 1.2.4 - xmlbuilder: 11.0.1 - dev: true - - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: true - - /xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - requiresBuild: true - dev: true - optional: true - - /xmlbuilder@9.0.7: - resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} - engines: {node: '>=4.0'} - dev: true - - /xmlhttprequest-ssl@2.0.0: - resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} - engines: {node: '>=0.4.0'} - dev: true + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 - /xss@1.0.11: - resolution: {integrity: sha512-EimjrjThZeK2MO7WKR9mN5ZC1CSqivSl55wvUK5EtU6acf0rzEE1pN+9ZDrFXJ82BRp3JL38pPE6S4o/rpp1zQ==} - engines: {node: '>= 0.10.0'} - hasBin: true + wrap-ansi@9.0.0: dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 - dev: true - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + wrappy@1.0.2: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + ws@8.18.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + xml-name-validator@4.0.0: {} - /yaml-front-matter@3.4.1: - resolution: {integrity: sha1-5S6E/qaYO5N1XpsVZNupibAGtaU=} - hasBin: true - dependencies: - commander: 1.0.0 - js-yaml: 3.14.1 - dev: true + xmlbuilder@15.1.1: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + y18n@5.0.8: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yallist@2.1.2: {} - /yargs-parser@21.0.0: - resolution: {integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==} - engines: {node: '>=12'} + yallist@3.1.1: {} - /yargs-parser@21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} - engines: {node: '>=12'} - dev: true + yallist@4.0.0: {} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yaml-eslint-parser@1.2.3: dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.7.0 - /yargs@17.3.1: - resolution: {integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==} - engines: {node: '>=12'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.0.0 + yaml@2.7.0: {} - /yargs@17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} - engines: {node: '>=12'} + yargs-parser@21.1.1: {} + + yargs@17.7.2: dependencies: - cliui: 7.0.4 - escalade: 3.1.1 + cliui: 8.0.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 21.0.1 - dev: true + yargs-parser: 21.1.1 - /yauzl@2.10.0: - resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true - /yeast@0.1.2: - resolution: {integrity: sha1-AI4G2AlDIMNy28L47XagymyKxBk=} - dev: true + yocto-queue@0.1.0: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yocto-queue@1.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + zhead@2.2.4: {} - /zen-observable-ts@0.8.21: - resolution: {integrity: sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==} + zip-stream@4.1.1: dependencies: - tslib: 1.14.1 - zen-observable: 0.8.15 - dev: true + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 - /zen-observable@0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} - dev: true + zwitch@2.0.4: {} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..52b9b4ba --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + }, +} diff --git a/preview.png b/preview.png deleted file mode 100644 index a3127472..00000000 Binary files a/preview.png and /dev/null differ diff --git a/scripts/api-generate.ts b/scripts/api-generate.ts new file mode 100644 index 00000000..47811d35 --- /dev/null +++ b/scripts/api-generate.ts @@ -0,0 +1,20 @@ +import child_process from 'node:child_process' +import { styleText } from 'node:util' + +const url = `http://localhost:4321/swagger/json` + +async function generateApi() { + try { + console.log(styleText('blue', 'Generating API...')) + child_process.execSync( + `npx swagger-typescript-api -p ${url} -o ./src/renderer/services/api/generated -n index.ts`, + ) + console.log(styleText('green', 'API is successfully generated')) + } + catch (err) { + console.log(styleText('red', 'Error generating API')) + console.log(err) + } +} + +generateApi() diff --git a/scripts/build-electron.ts b/scripts/build-electron.ts deleted file mode 100644 index 966c7e7c..00000000 --- a/scripts/build-electron.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { build } from 'electron-builder' -import config from '../config/electron-builder' - -export default function () { - return build({ config }) -} diff --git a/scripts/build-vue.ts b/scripts/build-vue.ts deleted file mode 100644 index 33442fd4..00000000 --- a/scripts/build-vue.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { build } from 'vite' -import config from '../config/vite' - -export default function () { - return build({ - base: './', - ...config, - mode: 'production' - }) -} diff --git a/scripts/build.ts b/scripts/build.ts deleted file mode 100644 index 87389246..00000000 --- a/scripts/build.ts +++ /dev/null @@ -1,24 +0,0 @@ -import buildVue from './build-vue' -import buildElectron from './build-electron' -import chalk from 'chalk' - -const isTestBuild = process.env.TEST_BUILD === 'true' - -process.env.NODE_ENV = 'production' - -const buildType = isTestBuild ? 'Test' : 'Production' - -async function build () { - console.log() - console.log(`${chalk.blueBright(`${buildType} build started...`)}`) - console.log() - - await buildVue() - await buildElectron() - - console.log() - console.log(`${chalk.greenBright(`${buildType} build success!`)}`) - console.log() -} - -build() diff --git a/scripts/dev-server.ts b/scripts/dev-server.ts deleted file mode 100644 index 03a08d3e..00000000 --- a/scripts/dev-server.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { spawn } from 'child_process' -import type { ChildProcess } from 'child_process' -import path from 'path' -import chalk from 'chalk' -import chokidar from 'chokidar' -import { createServer } from 'vite' -import viteConfig from '../config/vite' - -process.env.NODE_ENV = 'development' - -let electronProcess: ChildProcess | null -let rendererPort: number | undefined = 0 - -async function startRenderer () { - const server = await createServer({ - ...viteConfig, - mode: 'development' - }) - - return await server.listen() -} - -function startElectron () { - if (electronProcess) return - - electronProcess = spawn('electron', ['.', (rendererPort || 0).toString()], { - shell: true - }) - - electronProcess?.stdout?.on('data', data => { - console.log(chalk.blueBright('[Electron] ') + chalk.white(data.toString())) - }) - - electronProcess?.stderr?.on('data', data => { - console.log(chalk.redBright('[Electron] ') + chalk.white(data.toString())) - }) - - electronProcess?.on('error', error => { - console.log(chalk.redBright('[Electron] ', error)) - }) -} - -function restartElectron () { - if (electronProcess) { - electronProcess.kill() - electronProcess = null - } - - startElectron() -} - -async function start () { - console.log() - console.log(`${chalk.blueBright('Starting Electron + Vite Dev Server...')}`) - console.log() - - const devServer = await startRenderer() - rendererPort = devServer.config.server.port - - startElectron() - - chokidar - .watch(path.resolve(__dirname, '../src/main'), { - ignored: ['renderer'] - }) - .on('change', () => { - restartElectron() - }) -} - -start() diff --git a/scripts/generate-language-readme.ts b/scripts/generate-language-readme.ts deleted file mode 100644 index c7574012..00000000 --- a/scripts/generate-language-readme.ts +++ /dev/null @@ -1,28 +0,0 @@ -import fs from 'fs-extra' -import { join } from 'path' -import Handlebars from 'handlebars' -import { languages } from '../src/renderer/components/editor/languages' - -const sorted = languages.sort((a, b) => - a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1 -) - -const source = `# Languages list - -This is a list of language that supports in massCode. - -{{#each sorted}} -- {{this.name}} -{{/each}} -` - -const template = Handlebars.compile(source) -const result = template({ sorted }) - -fs.writeFile( - join(__dirname, '../../src/renderer/components/editor/README.md'), - result, - { encoding: 'utf-8' } -) - -console.log(`Total languages: ${languages.length}`) diff --git a/scripts/notarize.ts b/scripts/notarize.ts deleted file mode 100644 index 8ec478dc..00000000 --- a/scripts/notarize.ts +++ /dev/null @@ -1,22 +0,0 @@ -import 'dotenv/config' -import { notarize } from 'electron-notarize' -import type { AfterPackContext } from 'electron-builder' - -const notarizing = async (context: AfterPackContext) => { - const { electronPlatformName, appOutDir } = context - - if (electronPlatformName !== 'darwin') { - return - } - - const appName = context.packager.appInfo.productFilename - - return await notarize({ - appBundleId: 'io.masscode.app', - appPath: `${appOutDir}/${appName}.app`, - appleId: process.env.APPLE_ID!, - appleIdPassword: process.env.APPLE_ID_PASSWORD! - }) -} - -export default notarizing diff --git a/src/main/api/dto/common/query.ts b/src/main/api/dto/common/query.ts new file mode 100644 index 00000000..f0f5fc05 --- /dev/null +++ b/src/main/api/dto/common/query.ts @@ -0,0 +1,14 @@ +import { t } from 'elysia' + +const Order = { + ASC: 'ASC', + DESC: 'DESC', +} as const + +export const commonQuery = t.Optional( + t.Object({ + search: t.Optional(t.String()), + sort: t.Optional(t.String()), + order: t.Optional(t.Enum(Order)), + }), +) diff --git a/src/main/api/dto/common/response.ts b/src/main/api/dto/common/response.ts new file mode 100644 index 00000000..078f8cec --- /dev/null +++ b/src/main/api/dto/common/response.ts @@ -0,0 +1,5 @@ +import { t } from 'elysia' + +export const commonAddResponse = t.Object({ + id: t.Union([t.Number(), t.BigInt()]), +}) diff --git a/src/main/api/dto/folders.ts b/src/main/api/dto/folders.ts new file mode 100644 index 00000000..4fe61b99 --- /dev/null +++ b/src/main/api/dto/folders.ts @@ -0,0 +1,48 @@ +import Elysia, { t } from 'elysia' + +const foldersAdd = t.Object({ + name: t.String(), +}) + +const foldersUpdate = t.Object({ + name: t.String(), + icon: t.Union([t.String(), t.Null()]), + defaultLanguage: t.String(), + parentId: t.Union([t.Number(), t.Null()]), + isOpen: t.Number({ minimum: 0, maximum: 1 }), + orderIndex: t.Number(), +}) + +const foldersItem = t.Object({ + id: t.Number(), + name: t.String(), + createdAt: t.Number(), + updatedAt: t.Number(), + icon: t.Union([t.String(), t.Null()]), + parentId: t.Union([t.Number(), t.Null()]), + isOpen: t.Number(), + defaultLanguage: t.String(), + orderIndex: t.Number(), +}) + +const foldersItemWithChildren = t.Recursive(This => + t.Object({ + ...foldersItem.properties, + children: t.Array(This), + }), +) + +const foldersResponse = t.Array(foldersItem) +const foldersTreeResponse = t.Array(foldersItemWithChildren) + +export const foldersDTO = new Elysia().model({ + foldersAdd, + foldersResponse, + foldersUpdate, + foldersTreeResponse, +}) + +export type FoldersAdd = typeof foldersAdd.static +export type FoldersResponse = typeof foldersResponse.static +export type FoldersTree = typeof foldersTreeResponse.static +export type FoldersItem = typeof foldersItem.static diff --git a/src/main/api/dto/snippet-contents.ts b/src/main/api/dto/snippet-contents.ts new file mode 100644 index 00000000..fcc27adc --- /dev/null +++ b/src/main/api/dto/snippet-contents.ts @@ -0,0 +1,14 @@ +import Elysia, { t } from 'elysia' + +const snippetContentsAdd = t.Object({ + snippetId: t.Number(), + label: t.Union([t.String(), t.Null()]), + value: t.Union([t.String(), t.Null()]), + language: t.String(), +}) + +export const snippetContentsDTO = new Elysia().model({ + snippetContentsAdd, +}) + +export type SnippetContentsAdd = typeof snippetContentsAdd.static diff --git a/src/main/api/dto/snippets.ts b/src/main/api/dto/snippets.ts new file mode 100644 index 00000000..0c668d83 --- /dev/null +++ b/src/main/api/dto/snippets.ts @@ -0,0 +1,71 @@ +import Elysia, { t } from 'elysia' +import { commonQuery } from './common/query' + +const snippetsAdd = t.Object({ + name: t.String(), + folderId: t.Optional(t.Union([t.Number(), t.Null()])), +}) + +const snippetsUpdate = t.Object({ + ...snippetsAdd.properties, + folderId: t.Union([t.Number(), t.Null()]), + description: t.Union([t.String(), t.Null()]), + isDeleted: t.Number({ minimum: 0, maximum: 1 }), + isFavorites: t.Number({ minimum: 0, maximum: 1 }), +}) + +const snippetContentsAdd = t.Object({ + label: t.String(), + value: t.Union([t.String(), t.Null()]), + language: t.String(), // TODO: enum +}) + +const snippetItem = t.Object({ + id: t.Number(), + name: t.String(), + description: t.Union([t.String(), t.Null()]), + tags: t.Array( + t.Object({ + id: t.Number(), + name: t.String(), + }), + ), + folder: t.Nullable( + t.Object({ + id: t.Number(), + name: t.String(), + }), + ), + contents: t.Array( + t.Object({ + id: t.Number(), + label: t.String(), + value: t.Union([t.String(), t.Null()]), + language: t.String(), + }), + ), + isFavorites: t.Number(), + isDeleted: t.Number(), + createdAt: t.Number(), + updatedAt: t.Number(), +}) + +const snippetsResponse = t.Array(snippetItem) + +export const snippetsDTO = new Elysia().model({ + snippetContentsAdd, + snippetsAdd, + snippetsUpdate, + snippetsQuery: t.Object({ + ...commonQuery.properties, + folderId: t.Optional(t.Number()), + tagId: t.Optional(t.Number()), + isFavorites: t.Optional(t.Number({ minimum: 0, maximum: 1 })), + isDeleted: t.Optional(t.Number({ minimum: 0, maximum: 1 })), + isInbox: t.Optional(t.Number({ minimum: 0, maximum: 1 })), + }), + snippetsResponse, +}) + +export type SnippetsAdd = typeof snippetsAdd.static +export type SnippetsResponse = typeof snippetsResponse.static diff --git a/src/main/api/dto/tags.ts b/src/main/api/dto/tags.ts new file mode 100644 index 00000000..0de13423 --- /dev/null +++ b/src/main/api/dto/tags.ts @@ -0,0 +1,18 @@ +import Elysia, { t } from 'elysia' + +const tagsAdd = t.Object({ + name: t.String(), +}) + +export const tagsResponse = t.Object({ + id: t.Number(), + name: t.String(), +}) + +export const tagsDTO = new Elysia().model({ + tagsAdd, + tagsResponse, +}) + +export type TagsAdd = typeof tagsAdd.static +export type TagsResponse = typeof tagsResponse.static diff --git a/src/main/api/index.ts b/src/main/api/index.ts new file mode 100644 index 00000000..5dc7fff5 --- /dev/null +++ b/src/main/api/index.ts @@ -0,0 +1,34 @@ +import { cors } from '@elysiajs/cors' +import { node } from '@elysiajs/node' +import { swagger } from '@elysiajs/swagger' +import { app as electronApp } from 'electron' +import { Elysia } from 'elysia' +import { store } from '../store' +import folders from './routes/folders' +import snippets from './routes/snippets' +import tags from './routes/tags' + +export function initApi() { + const app = new Elysia({ adapter: node() }) + const port = store.preferences.get('apiPort') + + app + .use(cors({ origin: '*' })) + .use( + swagger({ + documentation: { + info: { + title: 'massCode API', + version: electronApp.getVersion(), + }, + }, + }), + ) + .use(snippets) + .use(folders) + .use(tags) + .listen(port) + + // eslint-disable-next-line no-console + console.log(`\nAPI started on port ${port}\n`) +} diff --git a/src/main/api/routes/folders.ts b/src/main/api/routes/folders.ts new file mode 100644 index 00000000..1d9d686f --- /dev/null +++ b/src/main/api/routes/folders.ts @@ -0,0 +1,324 @@ +import type { FoldersResponse, FoldersTree } from '../dto/folders' +import { Elysia } from 'elysia' +import { useDB } from '../../db' +import { commonAddResponse } from '../dto/common/response' +import { foldersDTO } from '../dto/folders' + +const app = new Elysia({ prefix: '/folders' }) +const db = useDB() + +app + .use(foldersDTO) + // Получение списка папок + .get( + '/', + () => { + const stmt = db.prepare(` + SELECT + id, + name, + defaultLanguage, + parentId, + orderIndex, + isOpen, + icon, + createdAt, + updatedAt + FROM folders + ORDER BY createdAt DESC + `) + + const result = stmt.all() + + return result as FoldersResponse + }, + { + response: 'foldersResponse', + detail: { + tags: ['Folders'], + }, + }, + ) + // Получение папок в виде древовидной структуры + .get( + '/tree', + () => { + const allFolders = db + .prepare( + ` + SELECT * + FROM folders + ORDER BY parentId, orderIndex + `, + ) + .all() as FoldersTree + + // Создаем карту для быстрого доступа к папкам по id + const folderMap = new Map() + + allFolders.forEach((folder) => { + folder.children = [] + folderMap.set(folder.id, folder) + }) + + const rootFolders: FoldersTree = [] + + allFolders.forEach((folder) => { + if (folder.parentId === null) { + rootFolders.push(folder) + } + else { + const parent = folderMap.get(folder.parentId) + if (parent) { + parent.children.push(folder) + } + } + }) + + return rootFolders + }, + { + response: 'foldersTreeResponse', + detail: { + tags: ['Folders'], + }, + }, + ) + // Добавление папки + .post( + '/', + ({ body }) => { + const { name } = body + const now = Date.now() + + const { maxOrder } = db + .prepare( + ` + SELECT COALESCE(MAX(orderIndex), -1) as maxOrder + FROM folders + WHERE parentId IS NULL + `, + ) + .get() as { maxOrder: number } + + const newOrder = maxOrder + 1 + + const stmt = db.prepare(` + INSERT INTO folders ( + name, + defaultLanguage, + parentId, + isOpen, + createdAt, + updatedAt, + orderIndex + ) VALUES (?, ?, ?, ?, ?, ?, ?) + `) + + const { lastInsertRowid } = stmt.run( + name, + 'plain_text', + null, + 0, + now, + now, + newOrder, + ) + + return { id: lastInsertRowid } + }, + { + body: 'foldersAdd', + response: commonAddResponse, + detail: { + tags: ['Folders'], + }, + }, + ) + // Обновление папки + .put( + '/:id', + ({ params, body }) => { + const now = Date.now() + const { id } = params + const { name, icon, defaultLanguage, parentId, isOpen, orderIndex } + = body + + const transaction = db.transaction(() => { + // Получаем текущую папку + const currentFolder = db + .prepare( + ` + SELECT parentId, orderIndex + FROM folders + WHERE id = ? + `, + ) + .get(id) as { parentId: number | null, orderIndex: number } + + if (!currentFolder) { + throw new Error('Folder not found') + } + + // Если изменился родитель или позиция + if ( + parentId !== currentFolder.parentId + || orderIndex !== currentFolder.orderIndex + ) { + if (parentId === currentFolder.parentId) { + // Перемещение в пределах одного родителя + if (orderIndex > currentFolder.orderIndex) { + // Двигаем вниз - уменьшаем индексы папок между старой и новой позицией + db.prepare( + ` + UPDATE folders + SET orderIndex = orderIndex - 1 + WHERE parentId ${currentFolder.parentId === null ? 'IS NULL' : '= ?'} + AND orderIndex > ? + AND orderIndex <= ? + `, + ).run( + ...(currentFolder.parentId === null + ? [currentFolder.orderIndex, orderIndex] + : [ + currentFolder.parentId, + currentFolder.orderIndex, + orderIndex, + ]), + ) + } + else { + // Двигаем вверх - увеличиваем индексы папок между новой и старой позицией + db.prepare( + ` + UPDATE folders + SET orderIndex = orderIndex + 1 + WHERE parentId ${currentFolder.parentId === null ? 'IS NULL' : '= ?'} + AND orderIndex >= ? + AND orderIndex < ? + `, + ).run( + ...(currentFolder.parentId === null + ? [orderIndex, currentFolder.orderIndex] + : [ + currentFolder.parentId, + orderIndex, + currentFolder.orderIndex, + ]), + ) + } + } + else { + // Перемещение между разными родителями + // 1. Обновляем индексы в старом родителе + db.prepare( + ` + UPDATE folders + SET orderIndex = orderIndex - 1 + WHERE parentId ${currentFolder.parentId === null ? 'IS NULL' : '= ?'} + AND orderIndex > ? + `, + ).run( + ...(currentFolder.parentId === null + ? [currentFolder.orderIndex] + : [currentFolder.parentId, currentFolder.orderIndex]), + ) + + // 2. Обновляем индексы в новом родителе + db.prepare( + ` + UPDATE folders + SET orderIndex = orderIndex + 1 + WHERE parentId ${parentId === null ? 'IS NULL' : '= ?'} + AND orderIndex >= ? + `, + ).run( + ...(parentId === null ? [orderIndex] : [parentId, orderIndex]), + ) + } + } + + // Обновляем саму папку + const { changes } = db + .prepare( + ` + UPDATE folders + SET name = ?, + icon = ?, + defaultLanguage = ?, + isOpen = ?, + parentId = ?, + orderIndex = ?, + updatedAt = ? + WHERE id = ? + `, + ) + .run( + name, + icon, + defaultLanguage, + isOpen, + parentId, + orderIndex, + now, + id, + ) + + if (!changes) { + throw new Error('Folder not found') + } + }) + + transaction() + + return { message: 'Folder updated' } + }, + { + body: 'foldersUpdate', + detail: { + tags: ['Folders'], + }, + }, + ) + // Удаление папки + .delete( + '/:id', + ({ params }) => { + const { id } = params + const transaction = db.transaction(() => { + // Мягкое удаление сниппетов в папке, а так же удаляем связь с папкой + db.prepare( + ` + UPDATE snippets + SET isDeleted = 1, + folderId = null + WHERE folderId = ? + `, + ).run(id) + + // Удаляем папку + const { changes } = db + .prepare( + ` + DELETE FROM folders WHERE id = ? + `, + ) + .run(id) + + if (!changes) { + throw new Error('Folder not found') + } + }) + + transaction() + + return { message: 'Folder deleted' } + }, + { + detail: { + tags: ['Folders'], + }, + }, + ) + +export default app diff --git a/src/main/api/routes/snippets.ts b/src/main/api/routes/snippets.ts new file mode 100644 index 00000000..d795b712 --- /dev/null +++ b/src/main/api/routes/snippets.ts @@ -0,0 +1,343 @@ +import type { SnippetsResponse } from '../dto/snippets' +import Elysia from 'elysia' +import { useDB } from '../../db' +import { commonAddResponse } from '../dto/common/response' +import { snippetsDTO } from '../dto/snippets' + +const app = new Elysia({ prefix: '/snippets' }) +const db = useDB() + +app + .use(snippetsDTO) + // Получение списка сниппетов c возможностью фильтрации + .get( + '/', + ({ query }) => { + const { + search, + order, + folderId, + tagId, + isFavorites, + isDeleted, + isInbox, + } = query + const searchQuery = search ? `%${query.search}%` : undefined + + const WHERE: any[] = [] + const ORDER = order || 'DESC' + const params: any[] = [] + + if (searchQuery) { + WHERE.push(`( + unicode_lower(s.name) LIKE unicode_lower(?) OR + unicode_lower(s.description) LIKE unicode_lower(?) OR + unicode_lower(sc.value) LIKE unicode_lower(?) + )`) + params.push(searchQuery, searchQuery, searchQuery) + } + + if (folderId) { + WHERE.push('s.folderId = ?') + params.push(folderId) + } + else if (isInbox) { + WHERE.push('s.folderId IS NULL') + } + + if (tagId) { + WHERE.push( + 'EXISTS (SELECT 1 FROM snippet_tags st2 WHERE st2.snippetId = s.id AND st2.tagId = ?)', + ) + params.push(tagId) + } + + if (isFavorites) { + WHERE.push('s.isFavorites = 1') + } + + if (isDeleted) { + WHERE.push('s.isDeleted = 1') + } + else { + WHERE.push('s.isDeleted = 0') + } + + const whereCondition = WHERE.length ? `WHERE ${WHERE.join(' AND ')}` : '' + + const stmt = db.prepare(` + WITH snippet_contents_data AS ( + SELECT + snippetId, + json_group_array( + json_object( + 'id', id, + 'label', label, + 'value', value, + 'language', language + ) + ) as contents + FROM snippet_contents + GROUP BY snippetId + ), + snippet_data AS ( + SELECT + s.id, + s.name, + s.description, + s.isFavorites, + s.isDeleted, + s.createdAt, + s.updatedAt, + CASE + WHEN f.id IS NOT NULL THEN json_object( + 'id', f.id, + 'name', f.name + ) + ELSE NULL + END as folder, + json_group_array( + json_object( + 'id', t.id, + 'name', t.name + ) + ) FILTER (WHERE t.id IS NOT NULL) as tags, + COALESCE(scd.contents, '[]') as contents + FROM snippets s + LEFT JOIN folders f ON s.folderId = f.id + LEFT JOIN snippet_tags st ON s.id = st.snippetId + LEFT JOIN tags t ON st.tagId = t.id + LEFT JOIN snippet_contents_data scd ON s.id = scd.snippetId + ${whereCondition} + GROUP BY s.id + ) + SELECT + id, + name, + description, + isFavorites, + isDeleted, + folder, + tags, + contents, + createdAt, + updatedAt + FROM snippet_data + ORDER BY createdAt ${ORDER} + `) + + const result = stmt.all(...params) as SnippetsResponse + + result.forEach((snippet) => { + snippet.contents = JSON.parse(snippet.contents as unknown as string) + snippet.tags = JSON.parse(snippet.tags as unknown as string) + snippet.folder = JSON.parse(snippet.folder as unknown as string) + }) + + return result + }, + { + query: 'snippetsQuery', + response: 'snippetsResponse', + detail: { + tags: ['Snippets'], + }, + }, + ) + // Создание сниппета + .post( + '/', + ({ body }) => { + const { name, folderId } = body + + const stmt = db.prepare(` + INSERT INTO snippets (name, description, folderId, isDeleted, isFavorites, createdAt, updatedAt) + VALUES (?, ?, ?, ?, ?, ?, ?) + `) + + const now = new Date().getTime() + + const { lastInsertRowid } = stmt.run( + name, + null, + folderId, + 0, + 0, + now, + now, + ) + + return { id: lastInsertRowid } + }, + { + body: 'snippetsAdd', + response: commonAddResponse, + detail: { + tags: ['Snippets'], + }, + }, + ) + // Добавление содержимого сниппета + .post( + '/:id/contents', + ({ params, body }) => { + const { id } = params + const { label, value, language } = body + + const stmt = db.prepare(` + INSERT INTO snippet_contents (snippetId, label, value, language) + VALUES (?, ?, ?, ?) + `) + + const result = stmt.run(id, label, value || null, language) + + return { id: result.lastInsertRowid } + }, + { + body: 'snippetContentsAdd', + response: commonAddResponse, + detail: { + tags: ['Snippets'], + }, + }, + ) + // Обновление сниппета + .put( + '/:id', + ({ params, body, set }) => { + const { id } = params + const { name, description, folderId, isFavorites, isDeleted } = body + + const stmt = db.prepare(` + UPDATE snippets SET + name = ?, + description = ?, + folderId = ?, + isFavorites = ?, + isDeleted = ?, + updatedAt = ? + WHERE id = ? + `) + + const now = new Date().getTime() + + const result = stmt.run( + name, + description, + folderId, + isFavorites, + isDeleted, + now, + id, + ) + + if (!result.changes) { + set.status = 404 + throw new Error('Snippet not found') + } + + return { message: 'Snippet updated' } + }, + { + body: 'snippetsUpdate', + detail: { + tags: ['Snippets'], + }, + }, + ) + // Обновление содержимого сниппета + .put( + '/:id/contents/:contentId', + ({ params, body, set }) => { + const { id, contentId } = params + const { label, value, language } = body + + // обновляем updateAt для сниппета + const snippetsStmt = db.prepare(` + UPDATE snippets SET updatedAt = ? WHERE id = ? + `) + + const now = new Date().getTime() + const snippetResult = snippetsStmt.run(now, id) + + if (!snippetResult.changes) { + set.status = 404 + throw new Error('Snippet not found') + } + + const contentsStmt = db.prepare(` + UPDATE snippet_contents SET + label = ?, + value = ?, + language = ? + WHERE id = ? + `) + + const contentsResult = contentsStmt.run( + label, + value, + language, + contentId, + ) + + if (!contentsResult.changes) { + set.status = 404 + throw new Error('Snippet content not found') + } + + return { message: 'Snippet content updated' } + }, + { + body: 'snippetContentsAdd', + detail: { + tags: ['Snippets'], + }, + }, + ) + // Удаление сниппета + .delete( + '/:id', + ({ params, set }) => { + const { id } = params + + const transaction = db.transaction(() => { + // Удаляем связи с тегами + db.prepare( + ` + DELETE FROM snippet_tags WHERE snippetId = ? + `, + ).run(id) + + // Удаляем содержимое сниппета + db.prepare( + ` + DELETE FROM snippet_contents WHERE snippetId = ? + `, + ).run(id) + + // Удаляем сам сниппет + const result = db + .prepare( + ` + DELETE FROM snippets WHERE id = ? + `, + ) + .run(id) + + if (!result.changes) { + set.status = 404 + throw new Error('Snippet not found') + } + }) + + transaction() + return { message: 'Snippet deleted' } + }, + { + detail: { + tags: ['Snippets'], + }, + }, + ) + +export default app diff --git a/src/main/api/routes/tags.ts b/src/main/api/routes/tags.ts new file mode 100644 index 00000000..b827e0e9 --- /dev/null +++ b/src/main/api/routes/tags.ts @@ -0,0 +1,77 @@ +import type { TagsResponse } from '../dto/tags' +import Elysia from 'elysia' +import { useDB } from '../../db' +import { tagsDTO } from '../dto/tags' + +const app = new Elysia({ prefix: '/tags' }) +const db = useDB() + +app + .use(tagsDTO) + // Получение списка тегов + .get( + '/', + () => { + const stmt = db.prepare(`SELECT * FROM tags`) + const result = stmt.all() + + return result as TagsResponse[] + }, + { + response: 'tagsResponse[]', + detail: { + tags: ['Tags'], + }, + }, + ) + // Добавление тега + .post( + '/', + ({ body }) => { + const stmt = db.prepare( + `INSERT INTO tags (name, createdAt, updatedAt) VALUES (?, ?, ?)`, + ) + const now = new Date().getTime() + + const { lastInsertRowid } = stmt.run(body.name, now, now) + + return { id: lastInsertRowid } + }, + { + body: 'tagsAdd', + detail: { + tags: ['Tags'], + }, + }, + ) + // Удаление тега и удаление его из всех сниппетов + .delete( + '/:id', + ({ params }) => { + const transaction = db.transaction(() => { + db.prepare( + ` + DELETE FROM snippet_tags WHERE tagId = ? + `, + ).run(params.id) + + const stmt = db.prepare(`DELETE FROM tags WHERE id = ?`) + const { changes } = stmt.run(params.id) + + if (!changes) { + throw new Error('Tag not found') + } + }) + + transaction() + + return { message: 'Tag deleted' } + }, + { + detail: { + tags: ['Tags'], + }, + }, + ) + +export default app diff --git a/src/main/components/menu.ts b/src/main/components/menu.ts deleted file mode 100644 index 8d5a95dc..00000000 --- a/src/main/components/menu.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { MenuItemConstructorOptions } from 'electron' -import { Menu, BrowserWindow } from 'electron' - -export const createMenu = (template: MenuItemConstructorOptions[]) => { - const menu = Menu.buildFromTemplate(template) - return menu -} diff --git a/src/main/config.ts b/src/main/config.ts deleted file mode 100644 index 99a05bed..00000000 --- a/src/main/config.ts +++ /dev/null @@ -1 +0,0 @@ -export const API_PORT = 3033 diff --git a/src/main/db/index.ts b/src/main/db/index.ts new file mode 100644 index 00000000..c458c295 --- /dev/null +++ b/src/main/db/index.ts @@ -0,0 +1,103 @@ +/* eslint-disable node/prefer-global/process */ +import Database from 'better-sqlite3' +import { store } from '../store' + +const DB_NAME = 'app.db' +const isDev = process.env.NODE_ENV === 'development' + +let db: Database.Database | null = null + +export function useDB() { + if (db) + return db + + const dbPath = `${store.preferences.get('storagePath')}/${DB_NAME}` + + try { + db = new Database(dbPath, { + // eslint-disable-next-line no-console + verbose: isDev ? console.log : undefined, + }) + + db.pragma('journal_mode = WAL') + db.pragma('foreign_keys = ON') + + // Поскольку из коробки в SQLite регистронезависимый поиск возможен только для ASCII, + // то добавляем самостоятельно функцию для сравнения строк без учета регистра + db.function('unicode_lower', (str: unknown) => { + if (typeof str !== 'string') + return str + return str.toLowerCase() + }) + + // Таблица для папок + db.exec(` + CREATE TABLE IF NOT EXISTS folders ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + defaultLanguage TEXT NOT NULL, + parentId INTEGER, + isOpen INTEGER NOT NULL, + orderIndex INTEGER NOT NULL DEFAULT 0, + icon TEXT, + createdAt INTEGER NOT NULL, + updatedAt INTEGER NOT NULL, + FOREIGN KEY(parentId) REFERENCES folders(id) + ) + `) + + // Таблица для сниппетов + db.exec(` + CREATE TABLE IF NOT EXISTS snippets ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + description TEXT, + folderId INTEGER, + isDeleted INTEGER NOT NULL, + isFavorites INTEGER NOT NULL, + createdAt INTEGER NOT NULL, + updatedAt INTEGER NOT NULL, + FOREIGN KEY(folderId) REFERENCES folders(id) + ) + `) + + // Таблица для содержимого (фрагментов) сниппетов + db.exec(` + CREATE TABLE IF NOT EXISTS snippet_contents ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + snippetId INTEGER NOT NULL, + label TEXT, + value TEXT, + language TEXT, + FOREIGN KEY(snippetId) REFERENCES snippets(id) + ) + `) + + // Таблица для тегов + db.exec(` + CREATE TABLE IF NOT EXISTS tags ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + createdAt INTEGER NOT NULL, + updatedAt INTEGER NOT NULL + ) + `) + + // Таблица для связи сниппетов с тегами (многие ко многим) + db.exec(` + CREATE TABLE IF NOT EXISTS snippet_tags ( + snippetId INTEGER NOT NULL, + tagId INTEGER NOT NULL, + PRIMARY KEY(snippetId, tagId), + FOREIGN KEY(snippetId) REFERENCES snippets(id), + FOREIGN KEY(tagId) REFERENCES tags(id) + ) + `) + + return db + } + catch (error) { + console.error('Database initialization failed:', error) + throw error + } +} diff --git a/src/main/db/migrate.ts b/src/main/db/migrate.ts new file mode 100644 index 00000000..5832fb33 --- /dev/null +++ b/src/main/db/migrate.ts @@ -0,0 +1,113 @@ +import type Database from 'better-sqlite3' +import type { JSONDB } from './types' + +export function migrateJsonToSqlite(jsonData: JSONDB, db: Database.Database) { + // Подготовленные выражения для вставки данных + const insertFolderStmt = db.prepare(` + INSERT INTO folders (name, defaultLanguage, parentId, isOpen, createdAt, updatedAt, icon, orderIndex) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + `) + + const updateFolderParentStmt = db.prepare(` + UPDATE folders SET parentId = ? WHERE id = ? + `) + + const insertTagStmt = db.prepare(` + INSERT INTO tags (name, createdAt, updatedAt) + VALUES (?, ?, ?) + `) + + const insertSnippetStmt = db.prepare(` + INSERT INTO snippets (name, description, folderId, isDeleted, isFavorites, createdAt, updatedAt) + VALUES (?, ?, ?, ?, ?, ?, ?) + `) + + const insertSnippetContentStmt = db.prepare(` + INSERT INTO snippet_contents (snippetId, label, value, language) + VALUES (?, ?, ?, ?) + `) + + const insertSnippetTagStmt = db.prepare(` + INSERT INTO snippet_tags (snippetId, tagId) + VALUES (?, ?) + `) + + // Словари для сопоставления оригинальных string id с новыми числовыми id + const folderIdMap: Record<string, number> = {} + const tagIdMap: Record<string, number> = {} + const snippetIdMap: Record<string, number> = {} + + // Транзакция для миграции данных + const transaction = db.transaction(() => { + // Миграция папок + jsonData.folders.forEach((folder) => { + const result = insertFolderStmt.run( + folder.name, + folder.defaultLanguage || 'plain_text', + null, // parentId обновим позже + folder.isOpen ? 1 : 0, + folder.createdAt, + folder.updatedAt, + folder.icon || null, + folder.index, + ) + folderIdMap[folder.id] = Number(result.lastInsertRowid) + }) + + // Обновляем поле parentId для папок, у которых оно задано + jsonData.folders.forEach((folder) => { + if (folder.parentId) { + const newId = folderIdMap[folder.id] + const parentNewId = folderIdMap[folder.parentId] + if (parentNewId) { + updateFolderParentStmt.run(parentNewId, newId) + } + } + }) + + // Миграция тегов + jsonData.tags.forEach((tag) => { + const result = insertTagStmt.run(tag.name, tag.createdAt, tag.updatedAt) + tagIdMap[tag.id] = Number(result.lastInsertRowid) + }) + + // Миграция сниппетов, их содержимого и связей с тегами + jsonData.snippets.forEach((snippet) => { + // Определяем новый id папки для сниппета + const mappedFolderId = folderIdMap[snippet.folderId] || null + const result = insertSnippetStmt.run( + snippet.name, + snippet.description || null, + mappedFolderId, + snippet.isDeleted ? 1 : 0, + snippet.isFavorites ? 1 : 0, + snippet.createdAt, + snippet.updatedAt, + ) + const newSnippetId = Number(result.lastInsertRowid) + snippetIdMap[snippet.id] = newSnippetId + + // Устанавливаем содержимое сниппета + snippet.content.forEach((content) => { + insertSnippetContentStmt.run( + newSnippetId, + content.label || null, + content.value || null, + content.language || null, + ) + }) + + // Устанавливаем связи сниппета с тегами + if (snippet.tagsIds && snippet.tagsIds.length > 0) { + snippet.tagsIds.forEach((tagOrigId) => { + const mappedTagId = tagIdMap[tagOrigId] + if (mappedTagId) { + insertSnippetTagStmt.run(newSnippetId, mappedTagId) + } + }) + } + }) + }) + + transaction() +} diff --git a/src/main/db/types/index.ts b/src/main/db/types/index.ts new file mode 100644 index 00000000..67e96350 --- /dev/null +++ b/src/main/db/types/index.ts @@ -0,0 +1,44 @@ +interface Folder { + id: string + name: string + defaultLanguage: string | null + parentId: string | null + isOpen: boolean + isSystem: boolean + index: number + createdAt: number + updatedAt: number + icon: string | null +} + +interface SnippetContent { + label: string + value: string + language: string +} + +interface Snippet { + id: string + name: string + content: SnippetContent[] + description: string | null + folderId: string + tagsIds: string[] + isDeleted: boolean + isFavorites: boolean + createdAt: number + updatedAt: number +} + +interface Tag { + id: string + name: string + createdAt: number + updatedAt: number +} + +export interface JSONDB { + folders: Folder[] + snippets: Snippet[] + tags: Tag[] +} diff --git a/src/main/index.ts b/src/main/index.ts index be912e32..4887ac64 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,130 +1,120 @@ -import { app, BrowserWindow, ipcMain, Menu, shell } from 'electron' -import path from 'path' -import os from 'os' +/* eslint-disable node/prefer-global/process */ +import type Database from 'better-sqlite3' +import type { DBQueryArgs } from './types' +import { readFileSync } from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { app, BrowserWindow, ipcMain } from 'electron' +import { initApi } from './api' +import { useDB } from './db' +import { migrateJsonToSqlite } from './db/migrate' import { store } from './store' -import { ApiServer } from './services/api/server' -import { createDb } from './services/db' -import { debounce } from 'lodash' -import { subscribeToChannels } from './services/ipc' -import { mainMenu } from './menu/main' -import { subscribeToDialog } from './services/ipc/dialog' -import { checkForUpdateWithInterval } from './services/update-check' + +process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true' // Отключаем security warnings const isDev = process.env.NODE_ENV === 'development' -const isMac = process.platform === 'darwin' -const gotTheLock = app.requestSingleInstanceLock() +let db: Database.Database let mainWindow: BrowserWindow +let isQuitting = false -createDb() -const apiServer = new ApiServer() - -subscribeToChannels() -subscribeToDialog() - -if (!gotTheLock) { - // @ts-ignore - return app.quit() -} - -function createWindow () { +function createWindow() { const bounds = store.app.get('bounds') mainWindow = new BrowserWindow({ - width: 1000, - height: 600, + width: 1200, + height: 800, ...bounds, - titleBarStyle: isMac ? 'hidden' : 'default', + titleBarStyle: 'hidden', webPreferences: { - preload: path.resolve(__dirname, 'preload.js'), + preload: path.join(__dirname, 'preload.js'), nodeIntegration: true, - contextIsolation: true, - webSecurity: false - } + }, }) - Menu.setApplicationMenu(mainMenu) - if (isDev) { - const rendererPort = process.argv[2] - mainWindow.loadURL(`http://localhost:${rendererPort}`) + mainWindow.loadURL('http://localhost:5173') mainWindow.webContents.openDevTools() - } else { - mainWindow.loadFile(path.resolve(app.getAppPath(), 'renderer/index.html')) } - - mainWindow.on('resize', () => storeBounds(mainWindow)) - mainWindow.on('move', () => storeBounds(mainWindow)) - - checkForUpdateWithInterval() -} - -const storeBounds = debounce((mainWindow: BrowserWindow) => { - store.app.set('bounds', mainWindow.getBounds()) -}, 300) - -if (process.defaultApp) { - if (process.argv.length >= 2) { - app.setAsDefaultProtocolClient('masscode', process.execPath, [ - path.resolve(process.argv[1]) - ]) + else { + mainWindow.loadFile( + path.join(__dirname, '../../build/renderer/index.html'), + ) } -} else { - app.setAsDefaultProtocolClient('masscode') -} -app.whenReady().then(async () => { - createWindow() + mainWindow.on('close', (event) => { + store.app.set('bounds', mainWindow.getBounds()) - app.on('activate', function () { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (BrowserWindow.getAllWindows().length === 0) { - createWindow() + if (!isQuitting) { + event.preventDefault() + mainWindow.hide() + } + else { + mainWindow.destroy() } }) -}) +} -app.on('window-all-closed', function () { - if (process.platform !== 'darwin') app.quit() -}) +app.whenReady().then(() => { + createWindow() -app.on('browser-window-focus', () => { - BrowserWindow.getFocusedWindow()?.webContents.send('main:focus') -}) + db = useDB() + initApi() -app.on('second-instance', (e, argv) => { - if (mainWindow) { - if (mainWindow.isMinimized()) mainWindow.restore() - mainWindow.focus() + if (store.app.get('isAutoMigratedFromJson')) { + return } - if (process.platform !== 'darwin') { - const url = argv.find(i => i.startsWith('masscode://')) - BrowserWindow.getFocusedWindow()?.webContents.send('main:app-protocol', url) + try { + const jsonDbPath = `${store.preferences.get('storagePath')}/db.json` + const jsonData = readFileSync(jsonDbPath, 'utf8') + + migrateJsonToSqlite(JSON.parse(jsonData), db) + store.app.set('isAutoMigratedFromJson', true) + } + catch (err) { + console.error('Error on auto migration JSON to SQLite:', err) } }) -app.on('open-url', (event, url) => { - BrowserWindow.getFocusedWindow()?.webContents.send('main:app-protocol', url) +app.on('activate', () => { + mainWindow.show() }) -ipcMain.handle('main:restart-api', () => { - apiServer.restart() +app.on('before-quit', () => { + isQuitting = true }) -ipcMain.handle('main:restart', () => { - app.relaunch() - app.quit() +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') + app.quit() }) -ipcMain.handle('main:open-url', (event, payload) => { - shell.openExternal(payload as string) +ipcMain.on('message', (event, message) => { + // eslint-disable-next-line no-console + console.log(message) }) -ipcMain.on('request-info', event => { +ipcMain.on('request-info', (event) => { event.sender.send('request-info', { version: app.getVersion(), arch: os.arch(), - platform: process.platform + platform: process.platform, }) }) + +ipcMain.handle('db-query', async (event, args: DBQueryArgs) => { + const { sql, params = [] } = args + + const stmt = db.prepare(sql) + const trimmedSql = sql.trim() + + if (/^(?:INSERT|UPDATE|DELETE)/i.test(trimmedSql)) { + return stmt.run(params) + } + + if (/^SELECT|WITH/i.test(trimmedSql)) { + return stmt.all(params) + } + + throw new Error('Unsupported query type') +}) diff --git a/src/main/menu/main.ts b/src/main/menu/main.ts deleted file mode 100644 index aba1b3a7..00000000 --- a/src/main/menu/main.ts +++ /dev/null @@ -1,557 +0,0 @@ -import { createMenu } from '../components/menu' -import type { MenuItemConstructorOptions } from 'electron' -import { shell, dialog, BrowserWindow } from 'electron' -import { version } from '../../../package.json' -import os from 'os' -import { checkForUpdate } from '../services/update-check' -import { store } from '../store' -import i18n from '../services/i18n' - -const isDev = process.env.NODE_ENV === 'development' -const isMac = process.platform === 'darwin' -const year = new Date().getFullYear() - -const aboutApp = () => { - dialog.showMessageBox(BrowserWindow.getFocusedWindow()!, { - title: 'massCode', - message: 'massCode', - type: 'info', - detail: ` - Version: ${version} - Electron: ${process.versions.electron} - Chrome: ${process.versions.chrome} - Node.js: ${process.versions.node} - V8: ${process.versions.v8} - OS: ${os.type()} ${os.arch()} ${os.release()} - ©2019-${year} Anton Reshetov <reshetov.art@gmail.com> - ` - }) -} - -const appMenuCommon: Record< -'preferences' | 'quit' | 'update' | 'devtools', -MenuItemConstructorOptions -> = { - preferences: { - label: i18n.t('menu:app.preferences'), - accelerator: 'CommandOrControl+,', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:preferences' - ) - } - }, - devtools: { - label: i18n.t('menu:devtools.label') + '...', - accelerator: 'CommandOrControl+.', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send('main-menu:devtools') - } - }, - update: { - label: i18n.t('menu:app.update.label'), - click: async () => { - const newVersion = await checkForUpdate() - - if (newVersion) { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message: i18n.t('menu:app.update.message', { - newVersion, - oldVersion: version - }), - buttons: [ - i18n.t('menu:app.update.button.0'), - i18n.t('menu:app.update.button.1') - ], - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - shell.openExternal('https://masscode.io/download/latest-release.html') - } - } else { - dialog.showMessageBoxSync(BrowserWindow.getFocusedWindow()!, { - message: i18n.t('menu:app.update.noUpdate') - }) - } - } - }, - quit: { - label: i18n.t('menu:app.quit'), - role: 'quit' - } -} - -const appMenuMac: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:app.about'), - click: () => aboutApp() - }, - { - ...appMenuCommon.update - }, - { - type: 'separator' - }, - { - ...appMenuCommon.preferences - }, - { - type: 'separator' - }, - { - ...appMenuCommon.devtools - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:app.hide'), - role: 'hide' - }, - { - label: i18n.t('menu:app.hideOther'), - role: 'hideOthers' - }, - { - label: i18n.t('menu:app.showAll'), - role: 'unhide' - }, - { - type: 'separator' - }, - { - ...appMenuCommon.quit - } -] - -const appMenu: MenuItemConstructorOptions[] = [ - { ...appMenuCommon.update }, - { type: 'separator' }, - { ...appMenuCommon.preferences }, - { ...appMenuCommon.devtools }, - { type: 'separator' }, - { ...appMenuCommon.quit } -] - -const helpMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:app.about'), - click: () => aboutApp() - }, - { - label: i18n.t('menu:help.website'), - click: () => { - shell.openExternal('https://masscode.io') - } - }, - { - label: i18n.t('menu:help.documentation'), - click: () => { - shell.openExternal('https://masscode.io/documentation') - } - }, - { - label: i18n.t('menu:help.twitter'), - click: () => { - shell.openExternal('https://twitter.com/anton_reshetov') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:help.viewInGitHub'), - click: () => { - shell.openExternal('https://github.com/massCodeIO/massCode') - } - }, - { - label: i18n.t('menu:help.changeLog'), - click: () => { - shell.openExternal( - 'https://github.com/massCodeIO/massCode/blob/master/CHANGELOG.md' - ) - } - }, - { - label: i18n.t('menu:help.reportIssue'), - click: () => { - shell.openExternal( - 'https://github.com/massCodeIO/massCode/issues/new/choose' - ) - } - }, - { - label: i18n.t('menu:help.giveStar'), - click: () => { - shell.openExternal('https://github.com/massCodeIO/massCode/stargazers') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:help.extension.vscode'), - click: () => { - shell.openExternal( - 'https://marketplace.visualstudio.com/items?itemName=AntonReshetov.masscode-assistant' - ) - } - }, - { - label: i18n.t('menu:help.extension.raycast'), - click: () => { - shell.openExternal('https://www.raycast.com/antonreshetov/masscode') - } - }, - { - label: i18n.t('menu:help.extension.alfred'), - click: () => { - shell.openExternal('https://github.com/massCodeIO/assistant-alfred') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:help.links.snippets'), - click: () => { - shell.openExternal('https://masscode.io/snippets') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:help.donate.openCollective'), - click: () => { - shell.openExternal('https://opencollective.com/masscode') - } - }, - { - label: i18n.t('menu:help.donate.gumroad'), - click: () => { - shell.openExternal('https://antonreshetov.gumroad.com/l/masscode') - } - }, - { - label: i18n.t('menu:help.donate.payPal'), - click: () => { - shell.openExternal('https://www.paypal.com/paypalme/antongithub') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:help.devTools'), - role: 'toggleDevTools' - } -] - -if (isDev) { - helpMenu.push({ - label: 'Reload', - role: 'reload' - }) -} - -const fileMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('newSnippet'), - accelerator: 'CommandOrControl+N', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:new-snippet' - ) - } - }, - { - label: i18n.t('newFragment'), - accelerator: 'CommandOrControl+T', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:new-fragment' - ) - } - }, - { - label: i18n.t('addDescription'), - accelerator: 'CommandOrControl+Shift+T', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:add-description' - ) - } - }, - { - type: 'separator' - }, - { - label: i18n.t('newFolder'), - accelerator: 'CommandOrControl+Shift+N', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send('main-menu:new-folder') - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:file.find'), - accelerator: 'CommandOrControl+F', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send('main-menu:search') - } - } -] - -const viewMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:view.sortBy.label'), - submenu: [ - { - label: i18n.t('menu:view.sortBy.dateModified'), - type: 'radio', - checked: store.app.get('sort') === 'updatedAt', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:sort-snippets', - 'updatedAt' - ) - } - }, - { - label: i18n.t('menu:view.sortBy.dateCreated'), - type: 'radio', - checked: store.app.get('sort') === 'createdAt', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:sort-snippets', - 'createdAt' - ) - } - }, - { - label: i18n.t('menu:view.sortBy.name'), - type: 'radio', - checked: store.app.get('sort') === 'name', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:sort-snippets', - 'name' - ) - } - } - ] - }, - { - label: i18n.t('menu:view.hideSubfolderSnippets'), - type: 'checkbox', - checked: store.app.get('hideSubfolderSnippets'), - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:hide-subfolder-snippets' - ) - } - }, - { - label: i18n.t('menu:view.compactMode'), - type: 'checkbox', - checked: store.app.get('compactMode'), - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:compact-mode-snippets' - ) - } - } -] - -const editorMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:editor.copy'), - accelerator: 'Shift+CommandOrControl+C', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:copy-snippet' - ) - } - }, - { - label: i18n.t('menu:editor.format'), - accelerator: 'Shift+CommandOrControl+F', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:format-snippet' - ) - } - }, - { - label: i18n.t('menu:editor.previewCode'), - accelerator: 'Shift+CommandOrControl+P', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:preview-code' - ) - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:editor.fontSizeIncrease'), - accelerator: 'CommandOrControl+=', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:font-size-increase' - ) - } - }, - { - label: i18n.t('menu:editor.fontSizeDecrease'), - accelerator: 'CommandOrControl+-', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:font-size-decrease' - ) - } - }, - { - label: i18n.t('menu:editor.fontSizeReset'), - accelerator: 'CommandOrControl+0', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:font-size-reset' - ) - } - } -] - -const markdownMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:markdown.preview'), - accelerator: 'Shift+CommandOrControl+M', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:preview-markdown' - ) - } - }, - { - label: i18n.t('menu:editor.previewMindmap'), - accelerator: 'Shift+CommandOrControl+I', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:preview-mindmap' - ) - } - }, - { - type: 'separator' - }, - { - label: i18n.t('menu:markdown.presentationMode'), - accelerator: 'Alt+CommandOrControl+P', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:presentation-mode' - ) - } - } -] - -const editMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:edit.undo'), - role: 'undo' - }, - { - label: i18n.t('menu:edit.redo'), - role: 'redo' - }, - { type: 'separator' }, - { - label: i18n.t('menu:edit.cut'), - role: 'cut' - }, - { - label: i18n.t('menu:edit.copy'), - role: 'copy' - }, - { - label: i18n.t('menu:edit.paste'), - role: 'paste' - }, - { - label: i18n.t('menu:edit.delete'), - role: 'delete' - }, - { type: 'separator' }, - { - label: i18n.t('menu:edit.selectAll'), - role: 'selectAll' - } -] - -const historyMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:history.back'), - accelerator: 'CommandOrControl+[', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:history-back' - ) - } - }, - { - label: i18n.t('menu:history.forward'), - accelerator: 'CommandOrControl+]', - click: () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main-menu:history-forward' - ) - } - } -] - -const menuItems: MenuItemConstructorOptions[] = [ - { - label: i18n.t('menu:app.label'), - submenu: isMac ? appMenuMac : appMenu - }, - { - label: i18n.t('menu:file.label'), - submenu: fileMenu - }, - { - label: i18n.t('menu:view.label'), - submenu: viewMenu - }, - { - label: i18n.t('menu:edit.label'), - submenu: editMenu - }, - { - label: i18n.t('menu:editor.label'), - submenu: editorMenu - }, - { - label: i18n.t('menu:markdown.label'), - submenu: markdownMenu - }, - { - label: i18n.t('menu:history.label'), - submenu: historyMenu - }, - { - label: i18n.t('menu:help.label'), - submenu: helpMenu - } -] - -export const mainMenu = createMenu(menuItems) diff --git a/src/main/preload.ts b/src/main/preload.ts index bf2230e2..4c1b676b 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -1,45 +1,40 @@ +import type { AppStore, PreferencesStore } from './store/types' +import type { EventCallback } from './types' import { contextBridge, ipcRenderer } from 'electron' -import { - isDbExist, - migrate, - migrateFromSnippetsLab, - move, - createDb -} from './services/db' import { store } from './store' -import type { ElectronBridge } from '@shared/types/main' -import { platform } from 'os' -import i18n from './services/i18n' -import { version } from '../../package.json' contextBridge.exposeInMainWorld('electron', { ipc: { - invoke: (channel, payload) => ipcRenderer.invoke(channel, payload), - on: (channel, cb) => ipcRenderer.on(channel, cb), - once: (channel, cb) => ipcRenderer.once(channel, cb) + on: (channel: string, cb: EventCallback) => ipcRenderer.on(channel, cb), + send: (channel: string, data: any, cb: EventCallback) => { + ipcRenderer.send(channel, data) + if (cb && typeof cb === 'function') { + ipcRenderer.on(channel, cb) + } + }, + removeListener: (channel: string, cb: EventCallback) => + ipcRenderer.removeListener(channel, cb), + removeListeners: (channel: string) => + ipcRenderer.removeAllListeners(channel), + }, + db: { + query: (sql: string, params: any[] = []) => + ipcRenderer.invoke('db-query', { sql, params }), }, store: { app: { - get: name => store.app.get(name), - set: (name, value) => store.app.set(name, value), - delete: name => store.app.delete(name) + get: (name: keyof AppStore) => store.app.get(name), + set: <T extends keyof AppStore>(name: T, value: AppStore[T]) => + store.app.set(name, value), + delete: (name: keyof AppStore) => store.app.delete(name), }, preferences: { - get: name => store.preferences.get(name), - set: (name, value) => store.preferences.set(name, value), - delete: name => store.preferences.delete(name) - } - }, - db: { - create: () => createDb(), - migrate: path => migrate(path), - migrateFromSnippetsLab: path => migrateFromSnippetsLab(path), - move: (from, to) => move(from, to), - isExist: path => isDbExist(path) - }, - i18n: { - t: (key, options) => i18n.t(key, options) + get: (name: keyof PreferencesStore) => store.preferences.get(name), + set: <T extends keyof PreferencesStore>( + name: T, + value: PreferencesStore[T], + ) => store.preferences.set(name, value), + delete: (name: keyof PreferencesStore) => store.preferences.delete(name), + }, }, - platform: () => platform(), - version -} as ElectronBridge) +}) diff --git a/src/main/services/api/server.ts b/src/main/services/api/server.ts deleted file mode 100644 index 493c6fbd..00000000 --- a/src/main/services/api/server.ts +++ /dev/null @@ -1,166 +0,0 @@ -import * as jsonServer from '@masscode/json-server' -import { store } from '../../store' -import { nanoid } from 'nanoid' -import { API_PORT } from '../../config' -import path from 'path' -import type { DB, Folder, Snippet, Tag } from '@shared/types/main/db' -import type { Server } from 'http' -import type { Socket } from 'net' -import { remove } from 'lodash' -import type { SnippetWithFolder } from '@shared/types/renderer/store/snippets' -import { BrowserWindow } from 'electron' - -interface ServerWithDestroy extends Server { - destroy: Function -} - -export class ApiServer { - server: ServerWithDestroy - connections: Record<string, Socket> = {} - - constructor () { - this.server = this.create() - } - - create (): ServerWithDestroy { - const db = path.resolve(store.preferences.get('storagePath') + '/db.json') - const app = jsonServer.create() - const middlewares = jsonServer.defaults() - const router = jsonServer.router<DB>(db) - - app.use(jsonServer.bodyParser) - app.use(middlewares) - - app.post('/db/update/:table', (req, res) => { - const table = req.params.table as keyof DB - const isAllowedTable = ['folders', 'snippets', 'tags'].includes(table) - - if (!isAllowedTable) { - return res.status(400).send('Table is not defined in DB') - } - if (req.body.value?.length === 0) { - res.status(400).send("'value' is required") - } else { - const db = router.db.getState() - - db[table] = req.body.value - - router.db.setState(db) - router.db.write() - - res.sendStatus(200) - } - }) - - app.get('/snippets/embed-folder', (req, res) => { - const snippets = router.db - .get<SnippetWithFolder[]>('snippets') - .cloneDeep() - .value() - - const result = snippets.map(i => { - const folder = router.db - .get<Folder[]>('folders') - .find(f => f.id === i.folderId) - if (folder) i.folder = folder.value() - return i - }) - - res.status(200).send(result) - }) - - app.post('/snippets/delete', (req, res) => { - const ids: string[] = req.body.ids - const snippets = router.db.get<Snippet[]>('snippets').value() - - ids.forEach(i => { - const index = snippets.findIndex(s => s.id === i) - if (index !== -1) snippets.splice(index, 1) - }) - - router.db.write() - - res.sendStatus(200) - }) - - app.post('/snippets/create', (req, res) => { - const windows = BrowserWindow.getAllWindows() - windows[0].webContents.send('api:snippet-create', req.body) - - res.sendStatus(200) - }) - - app.delete('/tags/:id', (req, res) => { - const id = req.params.id - const tags = router.db.get<Tag[]>('tags').value() - const snippets = router.db - .get<Snippet[]>('snippets') - .filter(i => i.tagsIds.includes(id)) - .value() - const index = tags.findIndex(i => i.id === id) - - snippets.forEach(i => { - remove(i.tagsIds, item => item === id) - }) - - tags.splice(index, 1) - router.db.write() - - res.sendStatus(200) - }) - - app.get('/tags/:id/snippets', (req, res) => { - const id = req.params.id - const _snippets = router.db.get<Snippet[]>('snippets').value() - const snippets = _snippets.filter(i => i.tagsIds.includes(id)) - - res.status(200).send(snippets) - }) - - app.use((req, res, next) => { - if (req.method === 'POST') { - req.body.id = nanoid(8) - req.body.createdAt = Date.now().valueOf() - req.body.updatedAt = Date.now().valueOf() - } - - if (req.method === 'PATCH' || req.method === 'PUT') { - req.body.updatedAt = Date.now().valueOf() - } - next() - }) - - app.use(router) - - const server = app.listen(API_PORT, () => { - console.log(`API server is running on port ${API_PORT}`) - }) as ServerWithDestroy - - server.on('connection', conn => { - const key = conn.remoteAddress + ':' + conn.remotePort - this.connections[key] = conn - conn.on('close', () => { - delete this.connections[key] - }) - }) - - server.destroy = () => { - server.close() - for (const key in this.connections) { - this.connections[key].destroy() - } - } - - // Почему то на windows API сервер падает, не смотря на то, - // что порт API свободен, поэтому просто обрабатываем ошибку - server.on('error', err => console.error(err)) - - return server - } - - restart () { - console.log('API server restart...') - this.server.destroy() - this.server = this.create() - } -} diff --git a/src/main/services/db/index.ts b/src/main/services/db/index.ts deleted file mode 100644 index 42bedfac..00000000 --- a/src/main/services/db/index.ts +++ /dev/null @@ -1,467 +0,0 @@ -import { store } from '../../store' -import fs from 'fs-extra' -import readline from 'readline' -import { nestedToFlat } from '../../utils' -import { nanoid } from 'nanoid' -import type { - DB, - Folder, - Snippet, - SnippetContent, - Tag -} from '@shared/types/main/db' -import { - oldLanguageMap, - languages -} from '../../../renderer/components/editor/languages' -import { snakeCase } from 'lodash' -import type { LanguageOption, Language } from '@shared/types/renderer/editor' - -const DB_NAME = 'db.json' - -const DEFAULT_FOLDER = { - id: nanoid(8), - name: 'Default', - defaultLanguage: 'typescript', - parentId: null, - isOpen: false, - isSystem: false, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() -} - -const getFileDb = () => { - return store.preferences.get('storagePath') + `/${DB_NAME}` -} - -export const createDb = () => { - const fileDb = getFileDb() - - if (fs.existsSync(fileDb)) { - return - } else { - fs.ensureFileSync(fileDb) - } - - const db = { - folders: [DEFAULT_FOLDER], - snippets: [], - tags: [] - } - - writeToFile(db) - - store.app.delete('selectedFolderId') - store.app.delete('selectedFolderIds') - - console.log('DB is created') -} - -const writeToFile = (db: object) => { - const fileDb = getFileDb() - const data = JSON.stringify(db, null, 2) - fs.writeFileSync(fileDb, data) -} - -export const move = async (from: string, to: string) => { - const src = `${from}/${DB_NAME}` - const dist = `${to}/${DB_NAME}` - - if (isDbExist(to)) { - throw Error( - 'Folder already contains db file. Please select another folder.' - ) - } - await fs.move(src, dist) -} - -export const isDbExist = (path: string) => { - const files = fs.readdirSync(path) - return files.some(i => i === DB_NAME) -} - -export const migrate = async (path: string) => { - const files = await fs.readdir(path) - const migrateFiles = ['masscode.db', 'snippets.db', 'tags.db'] - - const isFilesExist = migrateFiles - .reduce((acc: boolean[], item) => { - acc.push(files.includes(item)) - return acc - }, []) - .every(i => i === true) - - if (!isFilesExist) throw Error('DB files not exist in this folder') - - const convertDBFileToJSON = async (fileName: string): Promise<any[]> => { - const readInterface = readline.createInterface({ - input: fs.createReadStream(`${path}/${fileName}.db`), - output: process.stdout - }) - const arr: string[] = [] - - return new Promise((resolve, reject) => { - readInterface.on('line', line => { - if (line) arr.push(JSON.parse(line)) - }) - - readInterface.on('close', () => { - resolve(arr) - }) - }) - } - - const masscodeJSON = await convertDBFileToJSON('masscode') - const masscodeJSONList = nestedToFlat(masscodeJSON[0].list) - const snippetsJSON = await convertDBFileToJSON('snippets') - const tagsJSON = await convertDBFileToJSON('tags') - - const folders: Folder[] = [] - const snippets: Snippet[] = [] - const tags: Tag[] = [] - - const folderIdsMap: any[] = [] - const tagIdsMap: any[] = [] - - masscodeJSONList.forEach( - ({ id, open, parentId, defaultLanguage, ...rest }) => { - const newId = nanoid(8) - - folders.push({ - id: newId, - isOpen: open, - parentId: parentId ?? null, - defaultLanguage: oldLanguageMap[defaultLanguage] || defaultLanguage, - ...rest, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() - }) - - folderIdsMap.push([id, newId]) - folderIdsMap.forEach(([oldId, newId]) => { - const item = folders.find(i => i.parentId === oldId) - if (item) item.parentId = newId - }) - } - ) - - tagsJSON.forEach(({ _id, ...rest }) => { - const newId = nanoid(8) - - tags.push({ - id: newId, - ...rest, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() - }) - - tagIdsMap.push([_id, newId]) - }) - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - snippetsJSON.forEach( - ({ - _id, - folderId, - folder, - tags, - tagsPopulated, - createdAt, - updatedAt, - content, - ...rest - }) => { - const newId = nanoid(8) - const tagsIds: any[] = [] - const [, newFolderId] = - folderIdsMap.find(i => i.includes(folderId)) || [] - - tags.forEach((oldId: string) => { - const [, newId] = tagIdsMap.find(i => i.includes(oldId)) || [] - if (newId) tagsIds.push(newId) - }) - - content = content.map((i: any) => { - return { - ...i, - value: i.value || '', - language: oldLanguageMap[i.language] || i.language - } - }) - - snippets.push({ - id: newId, - folderId: newFolderId ?? null, - tagsIds, - content, - ...rest, - createdAt: createdAt.$$date, - updatedAt: updatedAt.$$date - }) - } - ) - - const db = { - folders, - snippets, - tags - } - writeToFile(db) - console.log('Migrate is done') -} - -export const migrateFromSnippetsLab = (path: string) => { - const file = fs.readFileSync(path, 'utf-8') - const json = JSON.parse(file) - - // с версии 2.1 - if (json.app !== undefined) { - migrateFromSnippetsLabNew(path) - } else { - migrateFromSnippetsLabOld(path) - } -} - -// Мигратор до версии 2.1 -export const migrateFromSnippetsLabOld = (path: string) => { - interface SLFragment { - Content: string - 'Date Created': string - 'Date Modified': string - Note: string - Title: string - Language: string - } - interface SLSnippet { - 'Date Created': string - 'Date Modified': string - Folder: string - Title: string - Fragments: SLFragment[] - Tags: string[] - } - - interface SnippetsLabDbJSON { - Snippets: SLSnippet[] - } - - const INBOX = 'Uncategorized' - - const file = fs.readFileSync(path, 'utf-8') - const json = JSON.parse(file) as SnippetsLabDbJSON - - const folders = new Set<string>() - const tags = new Set<string>() - - const db: DB = { - folders: [], - snippets: [], - tags: [] - } - - json.Snippets.forEach(i => { - if (i.Folder) folders.add(i.Folder) - - if (i.Tags.length) { - i.Tags.forEach(t => tags.add(t)) - } - }) - - folders.forEach(i => { - if (i === INBOX) return - db.folders.push({ - id: nanoid(8), - name: i, - defaultLanguage: 'plain_text', - parentId: null, - isOpen: false, - isSystem: false, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() - }) - }) - - tags.forEach(i => { - db.tags.push({ - id: nanoid(8), - name: i, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() - }) - }) - - json.Snippets.forEach(i => { - const folderId = db.folders.find(f => f.name === i.Folder)?.id || '' - const tagsIds: string[] = [] - - if (i.Tags.length) { - i.Tags.forEach(t => { - const id = db.tags.find(_t => _t.name === t)?.id - if (id) tagsIds.push(id) - }) - } - - const snippet: Snippet = { - id: nanoid(8), - name: i.Title, - content: [], - folderId, - tagsIds, - isDeleted: false, - isFavorites: false, - createdAt: new Date(i['Date Created']).valueOf(), - updatedAt: new Date(i['Date Modified']).valueOf() - } - - if (i.Fragments.length) { - i.Fragments.forEach(f => { - snippet.content.push({ - label: f.Title, - value: f.Content, - language: convertSLLanguage(f.Language, languages, 'old') - }) - }) - } - - db.snippets.push(snippet) - }) - - writeToFile(db) - console.log('Migrate is done') -} - -// Мигратор с версии 2.1 -export const migrateFromSnippetsLabNew = (path: string) => { - interface SLFragment { - content: string - dateCreated: string - dateModified: string - language: string - note: string - title: string - uuid: string - } - interface SLSnippet { - dateCreated: string - dateModified: string - folder: string - fragments: SLFragment[] - title: string - uuid: string - tags: string[] - } - interface SLFolder { - title: string - defaultLanguages: string - uuid: string - children: SLFolder[] - } - interface SLTag { - title: string - uuid: string - } - - interface SnippetsLabDbJSON { - contents: { - snippets: SLSnippet[] - tags: SLTag[] - folders: SLFolder[] - } - } - - const file = fs.readFileSync(path, 'utf-8') - const json = JSON.parse(file) as SnippetsLabDbJSON - - const db: DB = { - folders: [], - snippets: [], - tags: [] - } - - const createFolders = (folders: SLFolder[]) => { - const createFolder = (folder: SLFolder, parentId: string | null = null) => { - const _folder: Folder = { - id: folder.uuid, - name: folder.title, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf(), - isOpen: false, - isSystem: false, - defaultLanguage: 'plain_text', - parentId - } - - db.folders.push(_folder) - - return _folder.id - } - - const createFoldersFromChildren = (cf: SLFolder[], parenId: string) => { - if (!cf) return - - cf.forEach(c => { - const id = createFolder(c, parenId) - - if (c.children && c.children.length) { - createFoldersFromChildren(c.children, id) - } - }) - } - - folders.forEach(f => { - const id = createFolder(f) - createFoldersFromChildren(f.children, id) - }) - } - - createFolders(json.contents.folders) - - json.contents.tags.forEach(t => { - db.tags.push({ - id: t.uuid, - name: t.title, - createdAt: new Date().valueOf(), - updatedAt: new Date().valueOf() - }) - }) - - json.contents.snippets.forEach(s => { - const createContent = (fragments: SLFragment[]) => { - return fragments.map<SnippetContent>(f => { - return { - label: f.title, - value: f.content, - language: convertSLLanguage(f.language, languages) - } - }) - } - - db.snippets.push({ - id: s.uuid, - name: s.title, - createdAt: new Date(s.dateCreated).valueOf(), - updatedAt: new Date(s.dateModified).valueOf(), - folderId: s.folder ?? null, - isDeleted: false, - isFavorites: false, - content: createContent(s.fragments), - tagsIds: s.tags || [] - }) - }) - - writeToFile(db) - console.log('Migrate is done') -} - -const convertSLLanguage = ( - language: string, - languages: LanguageOption[], - version: 'new' | 'old' = 'new' -): Language => { - if (version === 'new') { - language = language.replace(/Lexer$/, '') - } - - const _language = snakeCase(language.toLowerCase()) - return languages.find(i => i.value === _language)?.value || 'plain_text' -} diff --git a/src/main/services/i18n/index.ts b/src/main/services/i18n/index.ts deleted file mode 100644 index 901c6bda..00000000 --- a/src/main/services/i18n/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { lstatSync, readdirSync } from 'fs' -import { join } from 'path' -import i18next from 'i18next' -import Backend from 'i18next-fs-backend' -import { store } from '../../store' -import { language } from './language' - -const lng = store.preferences.get('language') - -i18next.use(Backend).init({ - fallbackLng: 'en', - lng, - debug: false, - ns: ['common', 'dialog', 'preferences', 'special', 'menu', 'devtools'], - defaultNS: 'common', - initImmediate: false, - preload: readdirSync(join(__dirname, './locales')).filter(fileName => { - const joinedPath = join(join(__dirname, './locales'), fileName) - const isDirectory = lstatSync(joinedPath).isDirectory() - return isDirectory - }), - backend: { - loadPath: join(__dirname, './locales/{{lng}}/{{ns}}.json') - } -}) - -i18next.addResourceBundle(lng, 'language', language) - -export default i18next diff --git a/src/main/services/i18n/language.ts b/src/main/services/i18n/language.ts deleted file mode 100644 index 05e1e41a..00000000 --- a/src/main/services/i18n/language.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const language = { - cs: 'Čeština', - de_DE: 'Deutsch', - el: 'Ελληνικά', - en: 'English', - es_ES: 'Español', - fa_IR: 'فارسی', - fr_FR: 'French', - ja_JP: '日本語', - pl: 'Polski', - pt_BR: 'Português (Brasil)', - ro_RO: 'Română', - ru: 'Русский', - tr: 'Türkçe', - uk_UA: 'Українська', - zh_CN: '中文 (简体)', - zh_HK: '中文 (繁體 香港特別行政區)', - zh_TW: '中文 (繁體)' -} diff --git a/src/main/services/i18n/locales/README.md b/src/main/services/i18n/locales/README.md deleted file mode 100644 index 9cd64844..00000000 --- a/src/main/services/i18n/locales/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Locales - -## Add new Locales - - Make a duplicate of the `en` folder, then rename it to the necessary [two-letter locale code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). - - Translate each value in each of the files. - - Add new [prop](https://github.com/massCodeIO/massCode/blob/master/src/main/services/i18n/language.ts#L1) to i18n where the prop name corresponds to the name of the folder -```js -... - // 'en' for prop & 'English' for value - export const language = { - ... - en: 'English', - ... - } -... -``` - - Make PR. diff --git a/src/main/services/i18n/locales/cs/common.json b/src/main/services/i18n/locales/cs/common.json deleted file mode 100644 index 2b6f4577..00000000 --- a/src/main/services/i18n/locales/cs/common.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "button": { - "moveStorage": "Přesunout úložiště", - "openStorage": "Otevřít úložiště", - "newStorage": "Nové úložiště", - "reloadStorage": "Znovu načíst úložiště", - "fromMassCodeV1": "Z massCode v1.0", - "fromSnippetsLab": "Z SnippetsLab", - "confirm": "Potvrdit", - "cancel": "Zrušit", - "update": ["Jít na GitHub", "OK"], - "ok": "OK", - "clear": "Vyčistit", - "copy": "Kopírovat", - "sort": "Seřadit", - "revers": "Obrátit", - "generate": "Generovat", - "saveAs": "Uložit jako", - "zoomIn": "Přiblížit", - "zoomOut": "Oddálit", - "fit": "Přizpůsobit" - }, - "newFolder": "Nová složka", - "newSnippet": "Nový snippet", - "newFragment": "Nový fragment", - "addDescription": "Přidat popis", - "addToFavorites": "Přidat do oblíbených", - "addTag": "Přidat štítek", - "saveScreenshot": "Uložit screenshot", - "rename": "Přejmenovat", - "duplicate": "Duplikovat", - "delete": "Smazat", - "deleteNow": "Smazat nyní", - "defaultLanguage": "Výchozí jazyk", - "removeFromFavorites": "Odebrat z oblíbených", - "emptyTrash": "Vyprázdnit koš", - "close": "Zavřít", - "folder": { - "untitled": "Nepojmenovaná složka", - "plural": "Složky" - }, - "snippet": { - "untitled": "Nepojmenovaný snippet", - "plural": "Snippetů", - "plural_few": "Snippety", - "emptyName": "Zadejte jméno snippetu", - "selectedMultiple": "{{count}} snippetů vybráno", - "selectedMultiple_few": "{{count}} snippety vybrány", - "noSelected": "Není vybrán žádný snippet" - }, - "fragment": "Fragment", - "search": "Hledat", - "line": "Řádek", - "column": "sloupec", - "sidebar": { - "inbox": "Příchozí", - "favorites": "Oblíbené", - "allSnippets": "Všechny snippety", - "trash": "Koš", - "untitled": "Nepojmenovaná složka", - "folders": "Složky", - "library": "Knihovna", - "tags": "Štítky" - }, - "darkMode": "Tmavý režim", - "background": "Pozadí", - "restartApp": "Restartovat massCode", - "updateAvailable": "Aktualizace dostupná", - "hide": "Skrýt", - "show": "Zobrazit", - "collapse-all": "Sbalit vše", - "expand-all": "Rozbalit vše", - "restore": "Obnovit", - "copy-snippet-link": "Zkopírovat odkaz na snippet", - "set-custom-icon": "Nastavit vlastní ikonu" -} diff --git a/src/main/services/i18n/locales/cs/devtools.json b/src/main/services/i18n/locales/cs/devtools.json deleted file mode 100644 index 16a52b03..00000000 --- a/src/main/services/i18n/locales/cs/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Vstupní řetězec", - "outputString": "Výstupní řetězec", - "inputUrl": "Vstupní URL", - "outputUrl": "Výstupní URL", - "parsedUrl": "Rozparsovaná URL", - "splitQueryString": "Rozdělené parametry", - "key": "Klíč", - "value": "Hodnota", - "component": "Komponenta", - "result": "Výsledek", - "secretKey": "Tajný klíč", - "algorithm": "Algoritmus", - "version": "Verze", - "amount": "Počet", - "type": "Typ", - "length": "Délka", - "options": "Možnosti", - "numbers": "Čísla", - "symbols": "Symboly", - "lowercase": "Malá písmena", - "uppercase": "Velká písmena" - }, - "textTools": { - "label": "Textové nástroje", - "caseConverter": "Převod velikosti písmen", - "urlParser": "URL parser", - "slugGenerator": "Slug generátor", - "sortLines": "Řazení řádků" - }, - "crypto": { - "label": "Kryptografie / Bezpečnost", - "hashGenerator": "Hash generátor", - "hmacGenerator": "HMAC generátor", - "passGenerator": "Generátor hesel", - "uuidGenerator": "UUID generátor" - }, - "encodeDecode": { - "label": "Kodéry / dekoréry", - "url": "URL kodér / dekodér", - "base64": "Base64 kodér / dekodér" - } -} diff --git a/src/main/services/i18n/locales/cs/dialog.json b/src/main/services/i18n/locales/cs/dialog.json deleted file mode 100644 index 22637f4e..00000000 --- a/src/main/services/i18n/locales/cs/dialog.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "deleteConfirm": "Opravdu chcete trvale smazat {{name}}?", - "deleteConfirmMultipleSnippets": "Opravdu chcete trvale smazat {{count}} vybraných snippetů?", - "deleteConfirmMultipleSnippets_few": "Opravdu chcete trvale smazat {{count}} vybrané snippety?", - "noUndo": "Tuto akci nelze vrátit zpět.", - "allSnippetsMoveToTrash": "Všechny snippety v této složce budou přesunuty do koše.", - "deleteTag": "Tímto také odeberete štítek ze všech snippetů.", - "emptyTrash": "Opravdu chcete trvale odstranit všechny snippety v Koši?", - "migrateConfirm": [ - "Opravdu chcete migrovat z {{name}}?", - "Současná knihovna bude v průběhu migrace přepsána." - ], - "createDb": "Zvolte jinou složku, prosím" -} diff --git a/src/main/services/i18n/locales/cs/menu.json b/src/main/services/i18n/locales/cs/menu.json deleted file mode 100644 index 1c7ca872..00000000 --- a/src/main/services/i18n/locales/cs/menu.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Předvolby", - "update": { - "label": "Zkontrolovat aktualizace....", - "message": "Verze {{newVersion}} je dostupná ke stažení.\nMáte verzi {{oldVersion}}.", - "button": ["Přejít na stažení", "OK"], - "noUpdate": "Momentálně nejsou k dispozici žádné aktualizace." - }, - "quit": "Ukončit massCode", - "about": "O aplikaci massCode", - "hide": "Skrýt massCode", - "hideOther": "Skrýt ostatní", - "showAll": "Zobrazit vše" - }, - "help": { - "label": "Nápověda", - "website": "Web", - "documentation": "Dokumentace", - "viewInGitHub": "Zobrazit na GitHubu", - "changeLog": "Protokol změn", - "reportIssue": "Nahlásit problém", - "giveStar": "Dát hvězdičku", - "extension": { - "vscode": "VS Code rozšíření", - "raycast": "Raycast rozšíření", - "alfred": "Alfred rozšíření" - }, - "donate": { - "openCollective": "Přispět přes Open Collective", - "payPal": "Přispět přes PayPal", - "gumroad": "Přispět přes Gumroad (Visa, Mastercard, …)" - }, - "twitter": "Twitter", - "devTools": "Přepnout nástroje pro vývojáře", - "links": { - "snippets": "Kolekce snippetů" - } - }, - "file": { - "label": "Soubor", - "find": "Hledat" - }, - "view": { - "label": "Zobrazit", - "sortBy": { - "label": "Seřadit snippety podle", - "dateModified": "Data úpravy", - "dateCreated": "Data vytvoření", - "name": "Názvu" - }, - "hideSubfolderSnippets": "Skrýt snippety podsložek", - "compactMode": "Kompaktní zobrazení" - }, - "edit": { - "label": "Upravit", - "undo": "Vrátit zpět", - "redo": "Opakovat", - "cut": "Vyjmout", - "copy": "Kopírovat", - "paste": "Vložit", - "delete": "Smazat", - "selectAll": "Vybrat vše" - }, - "editor": { - "label": "Editor", - "copy": "Kopírovat snippet do schránky", - "format": "Formátovat", - "previewCode": "Náhled kódu", - "previewScreenshot": "Náhled screenshotu", - "previewMarkdown": "Náhled Markdownu", - "previewMindmap": "Náhled myšlenkové mapy", - "fontSizeIncrease": "Zvětšit písmo", - "fontSizeDecrease": "Zmenšit písmo", - "fontSizeReset": "Obnovit velikost píma" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Prezentační mód", - "preview": "Náhled" - }, - "history": { - "label": "Historie", - "back": "Zpět", - "forward": "Vpřed" - }, - "devtools": { - "label": "Nástroje pro vývojáře" - } -} diff --git a/src/main/services/i18n/locales/cs/preferences.json b/src/main/services/i18n/locales/cs/preferences.json deleted file mode 100644 index 9e14791c..00000000 --- a/src/main/services/i18n/locales/cs/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Předvolby", - "storage": { - "label": "Uložiště", - "migrate": "Migrovat", - "count": "Počet" - }, - "editor": { - "label": "Editor", - "fontSize": "Velikost písma", - "fontFamily": "Rodina písma", - "wrap": { - "label": "Zalamování", - "wordWrap": "Slov", - "off": "Vypnuto" - }, - "tabSize": "Šířka tabulátoru", - "showInvisibles": "Zobrazit neviditelné", - "highlightLine": "Zvýraznit řádek", - "highlightGutter": "Zvýraznit Gutter", - "matchBrackets": "Párovat závorky", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Koncová čárka", - "none": "Nikdy", - "all": "Vždy", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Jednoduché uvozovky" - } - }, - "appearance": { - "label": "Vzhled", - "theme": { - "label": "Téma", - "light": "Světlé", - "dark": "Tmavé" - } - }, - "language": { - "label": "Jazyk" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Renderer bloku kódu" - } -} diff --git a/src/main/services/i18n/locales/cs/special.json b/src/main/services/i18n/locales/cs/special.json deleted file mode 100644 index 640d8870..00000000 --- a/src/main/services/i18n/locales/cs/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Pro používání synchronizačních služeb jako je iCloud Drive, Google Drive nebo Dropbox jednoduše přesuňte úložiště do odpovídajících synchronizovaných složek.", - "migrate": { - "1": "Pro migraci z massCode v1.0 zvolte složku obsahující databázové soubory.", - "2": "Pro migraci z SnippetsLab zvolte JSON soubor.", - "3": [ - "V průběhu migrace ze SnippetsLab je několik omezení:", - "Všechny složky budou na první úrovni, protože JSON soubor (v2.1 a níže) neukládá zanořené složky.", - "Snippetům s nepodporovým jazykem bude nastaven výchozí Plain Text." - ] - }, - "htmlCssPreview": "Pro zobrazení výsledku přidejte fragmenty s jazyky HTML a CSS.", - "codeBlockRenderer": [ - "Při používání Codemirror musí jazyk použitý pro blok kódu odpovídat jednomu z podporovaných", - "jazyků" - ] - }, - "success": { - "migrate": "Databáze úspěšně zmigrována." - }, - "error": { - "folderContainDb": "Složka už obsahuje \"db.json\".", - "folderNotContainDb": "Složka neobsahuje \"db.json\"." - }, - "unsponsored": "Nesponzorováno", - "supportMessage": "Ahoj, tady Anton 👋<br><br>\nDíky za používání massCode. Shledáváte-li aplikaci užitečnou, prosím {{-tagStart}} přispějte {{-tagEnd}}. Bude mě to inspirovat k dalšímu rozvoji projektu.", - "snippetsShowcase": "Přehlídka snippetů" -} diff --git a/src/main/services/i18n/locales/de_DE/common.json b/src/main/services/i18n/locales/de_DE/common.json deleted file mode 100644 index f7b55008..00000000 --- a/src/main/services/i18n/locales/de_DE/common.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "button": { - "moveStorage": "Datenbank verschieben", - "openStorage": "Datenbank öffnen", - "newStorage": "Neue Datenbank", - "fromMassCodeV1": "Von massCode v1.0", - "fromSnippetsLab": "Von SnippetsLab", - "confirm": "Bestätigen", - "cancel": "Abbrechen", - "update": [ - "Nach GitHub", - "OK" - ], - "ok": "OK" - }, - "newFolder": "Neuer Ordner", - "newSnippet": "Neues Snippet", - "newFragment": "Neues Fragment", - "addDescription": "Beschreibung hinzufügen", - "addToFavorites": "Zu Favoriten hinzufügen", - "addTag": "Tag hinzufügen", - "exportToHtml": "Export zu HTML", - "saveScreenshot": "Screenshot speichern", - "rename": "Umbenennen", - "duplicate": "Duplizieren", - "delete": "Löschen", - "deleteNow": "Jetzt löschen", - "defaultLanguage": "Standard Sprache", - "removeFromFavorites": "Von Favoriten entfernen", - "emptyTrash": "Papierkorb leeren", - "close": "Schließen", - "folder": { - "untitled": "Unbenannter Ordner", - "plural": "Ordner" - }, - "snippet": { - "untitled": "Unbenanntes Snippet", - "plural": "Snippets", - "emptyName": "Snippet name", - "selectedMultiple": "{{count}} Snippets ausgewählt", - "noSelected": "Kein Snippet ausgewählt" - }, - "fragment": "Fragment", - "search": "Suchen", - "line": "Linie", - "column": "Spalte", - "sidebar": { - "inbox": "Inbox", - "favorites": "Favoriten", - "allSnippets": "Alle Snippets", - "trash": "Papierkorb", - "untitled": "Unbenannter Ordner", - "folders": "Ordner", - "library": "Bibliothek", - "tags": "Tags" - }, - "darkMode": "Dark Mode", - "background": "Hintergrund", - "restartApp": "massCode neustarten", - "updateAvailable": "Update verfügbar", - "hide": "Verbergen", - "show": "Zeigen", - "collapse-all": "Alle reduzieren", - "expand-all": "Alle erweitern", - "restore": "Wiederherstellen", - "copy-snippet-link": "Snippet Link kopieren" -} diff --git a/src/main/services/i18n/locales/de_DE/dialog.json b/src/main/services/i18n/locales/de_DE/dialog.json deleted file mode 100644 index 6fec4fec..00000000 --- a/src/main/services/i18n/locales/de_DE/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Soll {{name}} wirklich permanent gelöscht werden?", - "deleteConfirmMultipleSnippets": "Sollen {{count}} ausgewählte Snippets gelöscht werden?", - "noUndo": "Dieser Vorgang kann nicht rückgängig gemacht werden.", - "allSnippetsMoveToTrash": "Alle Snippets in diesem Ordner werden in den Papierkorb verschoben.", - "deleteTag": "Hiermit werden alle Tags von den Snippets entfernt.", - "emptyTrash": "Sicher das alle Snippets permanent aus dem Papierkorb gelöscht werden sollen?", - "migrateConfirm": [ - "Möchten Sie wirklich von {{name}} migrieren?", - "Während der Migration wird die aktuelle Bibliothek überschrieben." - ], - "createDb": "Bitte anderen Ordner auswählen." -} diff --git a/src/main/services/i18n/locales/de_DE/menu.json b/src/main/services/i18n/locales/de_DE/menu.json deleted file mode 100644 index cc240537..00000000 --- a/src/main/services/i18n/locales/de_DE/menu.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Einstellungen", - "update": { - "label": "Auf Updates prüfen...", - "message": "Version {{newVersion}} steht zum download bereit.\nAktuelle Version ist {{oldVersion}}.", - "button": [ - "Zu Github", - "OK" - ], - "noUpdate": "Es stehen aktuell keine Updates zur Verfügung." - }, - "quit": "massCode beenden", - "about": "Über massCode", - "hide": "massCode minimieren", - "hideOther": "Andere minimieren", - "showAll": "Alle anzeigen" - }, - "help": { - "label": "Hilfe", - "website": "Website", - "documentation": "Dokumentation", - "viewInGitHub": "In GitHub ansehen", - "changeLog": "Change Log", - "reportIssue": "Fehler melden", - "giveStar": "Gib einen Stern", - "extension": { - "vscode": "VS Code Erweiterung", - "raycast": "Raycast Erweiterung", - "alfred": "Alfred Erweiterung" - }, - "donate": { - "openCollective": "Spende auf Open Collective", - "payPal": "Spende via PayPal" - }, - "twitter": "Twitter", - "devTools": "Zeige Entwicklertools", - "links": { - "snippets": "Snippet Collection" - } - }, - "file": { - "label": "Datei", - "find": "Finden" - }, - "view": { - "label": "Anzeigen", - "sortBy": { - "label": "Snippets sortieren nach", - "dateModified": "Geändert am", - "dateCreated": "Erstellt am", - "name": "Name" - } - }, - "edit": { - "label": "Bearbeiten", - "undo": "Rückgängig", - "redo": "Wiederholen", - "cut": "Ausschneiden", - "copy": "Kopieren", - "paste": "Einfügen", - "delete": "Löschen", - "selectAll": "Alle auswählen" - }, - "editor": { - "label": "Editor", - "copy": "Snippet ins Clipboard kopieren", - "format": "Format", - "previewCode": "Code Vorschau", - "previewScreenshot": "Screenshot Vorschau", - "previewMarkdown": "Markdown Vorschau", - "fontSizeIncrease": "Schriftgröße erhöhen", - "fontSizeDecrease": "Schriftgröße reduzieren", - "fontSizeReset": "Schriftgröße zurücksetzen" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Präsentationsmodus", - "preview": "Vorschau" - }, - "history": { - "label": "Verlauf", - "back": "Zurück", - "forward": "Vorwärts" - } -} diff --git a/src/main/services/i18n/locales/de_DE/preferences.json b/src/main/services/i18n/locales/de_DE/preferences.json deleted file mode 100644 index 5fa0d7f0..00000000 --- a/src/main/services/i18n/locales/de_DE/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Einstellungen", - "storage": { - "label": "Datenbank", - "migrate": "Migrieren", - "count": "Zählen" - }, - "editor": { - "label": "Editor", - "fontSize": "Schriftgröße", - "fontFamily": "Schriftart", - "wrap": { - "label": "Umbruch", - "wordWrap": "Zeilenumbruch", - "off": "Deaktiviert" - }, - "tabSize": "Tab Größe", - "showInvisibles": "Zeige versteckte", - "highlightLine": "Zeile hervorheben", - "highlightGutter": "Gutter hervorheben", - "matchBrackets": "Match Brackets", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Nachgestelltes Komma", - "none": "Ohne", - "all": "Immer", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Einzelne Anführungszeichen" - } - }, - "appearance": { - "label": "Darstellung", - "theme": { - "label": "Theme", - "light": "Hell", - "dark": "Dunkel" - } - }, - "language": { - "label": "Sprache" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Code block Renderer" - } -} diff --git a/src/main/services/i18n/locales/de_DE/special.json b/src/main/services/i18n/locales/de_DE/special.json deleted file mode 100644 index aaf28603..00000000 --- a/src/main/services/i18n/locales/de_DE/special.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": { - "storage": "Um Dienste wie iCloud Drive, Google Drive oder Dropbox zu nutzen, verschieben Sie die Datenbank in einen korrespondieren synchronisations Ordner", - "migrate": { - "1": "Um von massCode v1.0 zu migrieren, wählen Sie den Ordner der die Datenbank enthält aus.", - "2": "Um von SnippetsLab wählen Sie die JSON Datei aus.", - "3": [ - "Einschränkungen während der Migration von SnippetsLab:", - "Alle Ordner befinden sich auf der ersten Ebene, die JSON-Datei (< v2.1) enthält keine verschachtelten Ordner.", - "Snippets mit nicht unterstützten Sprachen werden standardmäßig auf Nur-Text gesetzt." - ] - }, - "htmlCssPreview": "Fügen Sie Fragmente mit HTML und CSS hinzu, um das Ergebnis anzuzeigen.", - "codeBlockRenderer": [ - "When using Codemirror, the language to be set for the code block must correspond to one of the values of the", - "Bei der Verwendung von Codemirror muss die einzustellende Sprache für den Codeblock einem der Werte entsprechen", - "Sprachen" - ] - }, - "success": { - "migrate": "DB erfolgreich migriert." - }, - "error": { - "folderContainDb": "Ordner enthält bereits \"db.json\".", - "folderNotContainDb": "Ordner enthält \"db.json\" nicht." - }, - "unsponsored": "Ungesponsert", - "supportMessage": "Hallo, Anton hier 👋<br><br>\nVielen Dank für die Nutzung von massCode. Wenn Du die App hilfreich findest, dann {{-tagStart}} spende {{-tagEnd}} doch bitte. Somit kann ich das Projekt fortführen.", - "snippetsShowcase": "Snippet Beispiele" -} diff --git a/src/main/services/i18n/locales/el/common.json b/src/main/services/i18n/locales/el/common.json deleted file mode 100644 index 14a7c988..00000000 --- a/src/main/services/i18n/locales/el/common.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "button": { - "moveStorage": "Μετακίνηση Αποθηκευτικού Χώρου", - "openStorage": "Άνοιγμα Αποθηκευτικού Χώρου", - "newStorage": "Νέος Αποθηκευτικός Χώρος", - "fromMassCodeV1": "Από massCode v1.0", - "fromSnippetsLab": "Από SnippetsLab", - "confirm": "Επιβεβαίωση", - "cancel": "Ακύρωση", - "update": ["Μετάβαση στο GitHub", "Εντάξει"], - "ok": "Εντάξει" - }, - "newFolder": "Νέος Φάκελος", - "newSnippet": "Νέο Απόσπασμα", - "newFragment": "Νέο Τμήμα", - "addDescription": "Προσθήκη Περιγραφής", - "addToFavorites": "Προσθήκη στα Αγαπημένα", - "addTag": "Προσθήκη Ετικέτας", - "exportToHtml": "Εξαγωγή σε HTML", - "saveScreenshot": "Αποθήκευση Στιγμιοτύπου Οθόνης", - "rename": "Μετονομασία", - "duplicate": "Αντίγραφο", - "delete": "Διαγραφή", - "deleteNow": "Διαγραφή Τώρα", - "defaultLanguage": "Προεπιλεγμένη Γλώσσα", - "removeFromFavorites": "Αφαίρεση από τα Αγαπημένα", - "emptyTrash": "Άδειασμα Κάδου", - "close": "Κλείσιμο", - "folder": { - "untitled": "Άτιτλος φάκελος", - "plural": "Φάκελοι" - }, - "snippet": { - "untitled": "Άτιτλο Απόσπασμα", - "plural": "Αποσπάσματα", - "emptyName": "Πληκτρολογήστε ονομασία αποσπάσματος", - "selectedMultiple": "{{count}} Αποσπάσματα Επιλέχθηκαν", - "noSelected": "Δεν Επιλέχθηκε Απόσπασμα" - }, - "fragment": "Τμήμα", - "search": "Αναζήτηση", - "line": "Γραμμή", - "column": "Στήλη", - "sidebar": { - "inbox": "Εισερχόμενα", - "favorites": "Αγαπημένα", - "allSnippets": "Όλα τα Αποσπάσματα", - "trash": "Κάδος", - "untitled": "Άτιτλος φάκελος", - "folders": "Φάκελοι", - "library": "Βιβλιοθήκη", - "tags": "Ετικέτες" - }, - "darkMode": "Σκοτεινή Λειτουργία", - "background": "Φόντο", - "restartApp": "Επανεκκίνηση του massCode", - "updateAvailable": "Διαθέσιμη Ενημέρωση", - "hide": "Απόκρυψη", - "show": "Εμφάνιση", - "collapse-all": "Απόκρυψη Όλων", - "expand-all": "Εμφάνιση Όλων", - "restore": "Επαναφορά", - "copy-snippet-link": "Αντιγραφή Συνδέσμου Αποσπάσματος" -} diff --git a/src/main/services/i18n/locales/el/dialog.json b/src/main/services/i18n/locales/el/dialog.json deleted file mode 100644 index 6850a52f..00000000 --- a/src/main/services/i18n/locales/el/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά το {{name}};", - "deleteConfirmMultipleSnippets": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά {{count}} επιλεγμένα αποσπάσματα;", - "noUndo": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια.", - "allSnippetsMoveToTrash": "Όλα τα αποσπάσματα σε αυτόν τον φάκελο θα μετακινηθούν στον Κάδο.", - "deleteTag": "Αυτό θα προκαλέσει επίσης την αφαίρεση αυτής της ετικέτας από όλα τα αποσπάσματα.", - "emptyTrash": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά όλα τα αποσπάσματα στον Κάδο;", - "migrateConfirm": [ - "Θέλετε σίγουρα να μεταφέρετε από το {{name}};", - "Κατά την μεταφορά, η παρούσα βιβλιοθήκη θα αντικατασταθεί." - ], - "createDb": "Παρακαλούμε επιλέξτε άλλο φάκελο" -} diff --git a/src/main/services/i18n/locales/el/menu.json b/src/main/services/i18n/locales/el/menu.json deleted file mode 100644 index 6981fec0..00000000 --- a/src/main/services/i18n/locales/el/menu.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Προτιμήσεις", - "update": { - "label": "Έλεγχος για Ενημερώσεις....", - "message": "Η έκδοση {{newVersion}} είναι διαθέσιμη για λήψη.\nΗ έκδοσή σας είναι {{oldVersion}}.", - "button": ["Μεταβείτε στην Λήψη", "Εντάξει"], - "noUpdate": "Δεν υπάρχουν διαθέσιμες ενημερώσεις." - }, - "quit": "Έξοδος από το massCode", - "about": "Σχετικά με το massCode", - "hide": "Απόκρυψη του massCode", - "hideOther": "Απόκρυψη Υπολοίπων", - "showAll": "Εμφάνιση Όλων" - }, - "help": { - "label": "Βοήθεια", - "website": "Ιστότοπος", - "documentation": "Τεκμηρίωση", - "viewInGitHub": "Προβολή στο GitHub", - "changeLog": "Αρχείο Καταγραφής Αλλαγών", - "reportIssue": "Αναφορά Προβλήματος", - "giveStar": "Δώστε ένα Αστέρι", - "extension": { - "vscode": "Επέκταση VS Code", - "raycast": "Επέκταση Raycast", - "alfred": "Επέκταση Alfred" - }, - "donate": { - "openCollective": "Συνεισφέρετε στο Open Collective", - "payPal": "Συνεισφέρετε μέσω PayPal", - "gumroad": "Συνεισφέρετε μέσω Gumroad (Visa, Mastercard, κλπ.)" - }, - "twitter": "Twitter", - "devTools": "Εναλλαγή των Developer Tools", - "links": { - "snippets": "Συλλογή Αποσπασμάτων" - } - }, - "file": { - "label": "Αρχείο", - "find": "Εύρεση" - }, - "view": { - "label": "Προβολή", - "sortBy": { - "label": "Ταξινόμηση Αποκομμάτων Κατά", - "dateModified": "Ημερομηνία Τροποποίησης", - "dateCreated": "Ημερομηνία Δημιουργίας", - "name": "Ονομασία" - } - }, - "edit": { - "label": "Επεξεργασία", - "undo": "Αναίρεση", - "redo": "Επανάληψη", - "cut": "Αποκοπή", - "copy": "Αντιγραφή", - "paste": "Επικόλληση", - "delete": "Διαγραφή", - "selectAll": "Επιλογή Όλων" - }, - "editor": { - "label": "Διορθωτής", - "copy": "Αντιγραφή Αποσπάσματος στο Πρόχειρο", - "format": "Μορφοποίηση", - "previewCode": "Προεπισκόπηση Κώδικα", - "previewScreenshot": "Προεπισκόπηση Στιγμιοτύπου Οθόνης", - "previewMarkdown": "Προεπισκόπηση Markdown", - "fontSizeIncrease": "Μέγεθος Γραμματοσειράς Αύξηση", - "fontSizeDecrease": "Μέγεθος Γραμματοσειράς Μείωση", - "fontSizeReset": "Μέγεθος Γραμματοσειράς Επαναφορά" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Λειτουργία Παρουσίασης", - "preview": "Προεπισκόπηση" - }, - "history": { - "label": "Ιστορικό", - "back": "Πίσω", - "forward": "Μπροστά" - } -} diff --git a/src/main/services/i18n/locales/el/preferences.json b/src/main/services/i18n/locales/el/preferences.json deleted file mode 100644 index b2d0a86c..00000000 --- a/src/main/services/i18n/locales/el/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Προτιμήσεις", - "storage": { - "label": "Αποθηκευτικός Χώρος", - "migrate": "Μετακίνηση", - "count": "Καταμέτρηση" - }, - "editor": { - "label": "Διορθωτής", - "fontSize": "Μέγεθος Γραμματοσειράς", - "fontFamily": "Γραμματοσειρά", - "wrap": { - "label": "Αναδίπλωση", - "wordWrap": "Αναδίπλωση Λέξεων", - "off": "Ανενεργό" - }, - "tabSize": "Μέγεθος Tab", - "showInvisibles": "Εμφάνιση Κρυφών", - "highlightLine": "Επισήμανση Γραμμής", - "highlightGutter": "Επισήμανση Περιθωρίου", - "matchBrackets": "Αντιστοίχιση Αγκύλων", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Κόμμα Ουράς", - "none": "Καθόλου", - "all": "Όλα", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Μονά Εισαγωγικά" - } - }, - "appearance": { - "label": "Εμφάνιση", - "theme": { - "label": "Θέμα", - "light": "Φωτεινό", - "dark": "Σκοτεινό" - } - }, - "language": { - "label": "Γλώσσα" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Απεικόνιση Μπλοκ Κώδικα" - } -} diff --git a/src/main/services/i18n/locales/el/special.json b/src/main/services/i18n/locales/el/special.json deleted file mode 100644 index c6c1c030..00000000 --- a/src/main/services/i18n/locales/el/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Για να χρησιμοποιήσετε υπηρεσίες συγχρονισμού όπως iCloud Drive, Google Drive ή Dropbox, απλώς μεταφέρετε τον αποθηκευτικό χώρο στους αντίστοιχους συγχρονισμένους φακέλους", - "migrate": { - "1": "Για μεταφορά από το massCode v1.0 επιλέξτε τον φάκελο που περιέχει τα αρχεία της βάσης δεδομένων.", - "2": "Για μεταφορά από το SnippetsLab επιλέξτε αρχείο JSON.", - "3": [ - "Ορισμένοι Περιορισμοί. Κατά την μεταφορά από το SnippetsLab:", - "Όλοι οι φάκελοι θα είναι πρώτου επιπέδου καθώς το αρχείο JSON (κάτω από την έκδοση 2.1) δεν αντιπροσωπεύει ένθετους φακέλους.", - "Αποσπάσματα με μη υποστηριζόμενες γλώσσες θα ορίζονται ως Απλό Κείμενο (προεπιλογή)." - ] - }, - "htmlCssPreview": "Προσθέστε τμήματα με γλώσσες HTML & CSS για να δείτε αποτέλεσμα.", - "codeBlockRenderer": [ - "Όταν χρησιμοποιείτε το Codemirror, η γλώσσα που θα οριστεί για το μπλοκ κώδικα πρέπει να αντιστοιχεί σε μία από τις τιμές των", - "γλωσσών" - ] - }, - "success": { - "migrate": "Η DB μετακινήθηκε επιτυχώς." - }, - "error": { - "folderContainDb": "Ο φάκελος περιέχει ήδη το \"db.json\".", - "folderNotContainDb": "Ο φάκελος δεν περιέχει το \"db.json\"." - }, - "unsponsored": "Χωρίς Χορηγία", - "supportMessage": "Γειά, Anton εδώ 👋<br><br>\nΕυχαριστώ που χρησιμοποιείτε το massCode. Εάν βρίσκετε αυτήν την εφαρμογή χρήσιμη, παρακαλώ {{-tagStart}} συνεισφέρετε {{-tagEnd}}. Θα με εμπνεύσει να συνεχίσω την ανάπτυξη του έργου.", - "snippetsShowcase": "Βιτρίνα Αποσπασμάτων" -} diff --git a/src/main/services/i18n/locales/en/common.json b/src/main/services/i18n/locales/en/common.json deleted file mode 100644 index 4b6f3ad5..00000000 --- a/src/main/services/i18n/locales/en/common.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "button": { - "moveStorage": "Move Storage", - "openStorage": "Open Storage", - "newStorage": "New Storage", - "reloadStorage": "Reload Storage", - "fromMassCodeV1": "From massCode v1.0", - "fromSnippetsLab": "From SnippetsLab", - "confirm": "Confirm", - "cancel": "Cancel", - "update": ["Go to GitHub", "OK"], - "ok": "OK", - "clear": "Clear", - "copy": "Copy", - "sort": "Sort", - "revers": "Revers", - "generate": "Generate", - "saveAs": "Save as", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "fit": "Fit" - }, - "newFolder": "New Folder", - "newSnippet": "New Snippet", - "newFragment": "New Fragment", - "addDescription": "Add Description", - "addToFavorites": "Add to Favorites", - "addTag": "Add Tag", - "exportToHtml": "Export to HTML", - "rename": "Rename", - "duplicate": "Duplicate", - "delete": "Delete", - "deleteNow": "Delete Now", - "defaultLanguage": "Default Language", - "removeFromFavorites": "Remove from Favorites", - "emptyTrash": "Empty Trash", - "close": "Close", - "folder": { - "untitled": "Untitled folder", - "plural": "Folders" - }, - "snippet": { - "untitled": "Untitled snippet", - "plural": "Snippets", - "emptyName": "Type snippet name", - "selectedMultiple": "{{count}} Snippets Selected", - "noSelected": "No Snippet Selected" - }, - "fragment": "Fragment", - "search": "Search", - "line": "Line", - "column": "Column", - "sidebar": { - "inbox": "Inbox", - "favorites": "Favorites", - "allSnippets": "All Snippets", - "trash": "Trash", - "untitled": "Untitled folder", - "folders": "Folders", - "library": "Library", - "tags": "Tags" - }, - "darkMode": "Dark Mode", - "background": "Background", - "restartApp": "Restart massCode", - "updateAvailable": "Update Available", - "hide": "Hide", - "show": "Show", - "collapse-all": "Collapse All", - "expand-all": "Expand All", - "restore": "Restore", - "copy-snippet-link": "Copy Snippet Link", - "set-custom-icon": "Set Custom Icon" -} diff --git a/src/main/services/i18n/locales/en/devtools.json b/src/main/services/i18n/locales/en/devtools.json deleted file mode 100644 index d1a0bd51..00000000 --- a/src/main/services/i18n/locales/en/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Input String", - "outputString": "Output String", - "inputUrl": "Input URL", - "outputUrl": "Output URL", - "parsedUrl": "Parsed URL", - "splitQueryString": "Split Query String", - "key": "Key", - "value": "Value", - "component": "Component", - "result": "Result", - "secretKey": "Secret Key", - "algorithm": "Algorithm", - "version": "Version", - "amount": "Amount", - "type": "Type", - "length": "Length", - "options": "Options", - "numbers": "Numbers", - "symbols": "Symbols", - "lowercase": "Lowercase", - "uppercase": "Uppercase" - }, - "textTools": { - "label": "Text Tools", - "caseConverter": "Case Converter", - "urlParser": "URL Parser", - "slugGenerator": "Slug Generator", - "sortLines": "Sort Lines" - }, - "crypto": { - "label": "Cryptography / Security", - "hashGenerator": "Hash Generator", - "hmacGenerator": "HMAC Generator", - "passGenerator": "Password Generator", - "uuidGenerator": "UUID Generator" - }, - "encodeDecode": { - "label": "Encoders / Decoders", - "url": "URL Encoder / Decoder", - "base64": "Base64 Encoder / Decoder" - } -} diff --git a/src/main/services/i18n/locales/en/dialog.json b/src/main/services/i18n/locales/en/dialog.json deleted file mode 100644 index e5087f0f..00000000 --- a/src/main/services/i18n/locales/en/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Are you sure you want to permanently delete {{name}}?", - "deleteConfirmMultipleSnippets": "Are you sure you want to permanently delete {{count}} selected snippets?", - "noUndo": "You cannot undo this action.", - "allSnippetsMoveToTrash": "All snippets in this folder will be moved to trash.", - "deleteTag": "This will also cause all snippets to have that tag removed.", - "emptyTrash": "Are you sure you want to permanently delete all snippets in Trash?", - "migrateConfirm": [ - "Are you sure you want to migrate from {{name}}?", - "During migrate, the current library will be overwritten." - ], - "createDb": "Please select another folder" -} diff --git a/src/main/services/i18n/locales/en/menu.json b/src/main/services/i18n/locales/en/menu.json deleted file mode 100644 index 75ffe3f2..00000000 --- a/src/main/services/i18n/locales/en/menu.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Preferences", - "update": { - "label": "Check for Updates....", - "message": "Version {{newVersion}} is now available for download.\nYour version is {{oldVersion}}.", - "button": ["Go to Download", "OK"], - "noUpdate": "There are currently no updates available." - }, - "quit": "Quit massCode", - "about": "About massCode", - "hide": "Hide massCode", - "hideOther": "Hide Others", - "showAll": "Show All" - }, - "help": { - "label": "Help", - "website": "Website", - "documentation": "Documentation", - "viewInGitHub": "View in GitHub", - "changeLog": "Change Log", - "reportIssue": "Report Issue", - "giveStar": "Give a Star", - "extension": { - "vscode": "VS Code Extension", - "raycast": "Raycast Extension", - "alfred": "Alfred Extension" - }, - "donate": { - "openCollective": "Donate on Open Collective", - "payPal": "Donate via PayPal", - "gumroad": "Donate via Gumroad (Visa, Mastercard, etc.)" - }, - "twitter": "Twitter", - "devTools": "Toggle Developer Tools", - "links": { - "snippets": "Snippet Collection" - } - }, - "file": { - "label": "File", - "find": "Find" - }, - "view": { - "label": "View", - "sortBy": { - "label": "Sort Snippets By", - "dateModified": "Date Modified", - "dateCreated": "Date Created", - "name": "Name" - }, - "hideSubfolderSnippets": "Hide Subfolder Snippets", - "compactMode": "Compact Mode" - }, - "edit": { - "label": "Edit", - "undo": "Undo", - "redo": "Redo", - "cut": "Cut", - "copy": "Copy", - "paste": "Paste", - "delete": "Delete", - "selectAll": "Select All" - }, - "editor": { - "label": "Editor", - "copy": "Copy Snippet to Clipboard", - "format": "Format", - "previewCode": "Preview Code", - "previewScreenshot": "Preview Screenshot", - "previewMarkdown": "Preview Markdown", - "previewMindmap": "Preview Mindmap", - "fontSizeIncrease": "Font Size Increase", - "fontSizeDecrease": "Font Size Decrease", - "fontSizeReset": "Font Size Reset" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Presentation Mode", - "preview": "Preview" - }, - "history": { - "label": "History", - "back": "Back", - "forward": "Forward" - }, - "devtools": { - "label": "Developer Tools" - } -} diff --git a/src/main/services/i18n/locales/en/preferences.json b/src/main/services/i18n/locales/en/preferences.json deleted file mode 100644 index 87fc2000..00000000 --- a/src/main/services/i18n/locales/en/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Preferences", - "storage": { - "label": "Storage", - "migrate": "Migrate", - "count": "Count" - }, - "editor": { - "label": "Editor", - "fontSize": "Font Size", - "fontFamily": "Font Family", - "wrap": { - "label": "Wrap", - "wordWrap": "Word Wrap", - "off": "Off" - }, - "tabSize": "Tab Size", - "showInvisibles": "Show Invisibles", - "highlightLine": "Highlight Line", - "highlightGutter": "Highlight Gutter", - "matchBrackets": "Match Brackets", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Trailing Comma", - "none": "None", - "all": "All", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Single Quote" - } - }, - "appearance": { - "label": "Appearance", - "theme": { - "label": "Theme", - "light": "Light", - "dark": "Dark" - } - }, - "language": { - "label": "Language" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Code block Renderer" - } -} diff --git a/src/main/services/i18n/locales/en/special.json b/src/main/services/i18n/locales/en/special.json deleted file mode 100644 index d360c177..00000000 --- a/src/main/services/i18n/locales/en/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "To use sync services like iCloud Drive, Google Drive or Dropbox, simply move storage to the corresponding synced folders", - "migrate": { - "1": "To migrate from massCode v1.0 select the folder containing the database files.", - "2": "To migrate from SnippetsLab select JSON file.", - "3": [ - "Some Limitations. During migration from SnippetsLab:", - "All folders will be first level as JSON file (below v2.1) does not represent nested folders.", - "Snippets with unsupported languages will be set to default Plain Text." - ] - }, - "htmlCssPreview": "Add fragments with HTML & CSS languages to view result.", - "codeBlockRenderer": [ - "When using Codemirror, the language to be set for the code block must correspond to one of the values of the", - "languages" - ] - }, - "success": { - "migrate": "DB successfully migrated." - }, - "error": { - "folderContainDb": "Folder already contain \"db.json\".", - "folderNotContainDb": "Folder not contain \"db.json\"." - }, - "unsponsored": "Unsponsored", - "supportMessage": "Hi, Anton here 👋<br><br>\nThanks for using massCode. If you find this app useful, please {{-tagStart}} donate {{-tagEnd}}. It will inspire me to continue development on the project.", - "snippetsShowcase": "Snippets Showcase" -} diff --git a/src/main/services/i18n/locales/es_ES/common.json b/src/main/services/i18n/locales/es_ES/common.json deleted file mode 100644 index 50389d22..00000000 --- a/src/main/services/i18n/locales/es_ES/common.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "button": { - "moveStorage": "Mover Almacenamiento", - "openStorage": "Abrir Almacenamiento", - "fromMassCodeV1": "Desde massCode v1.0", - "fromSnippetsLab": "Hacia SnippetsLab", - "confirm": "Confirmar", - "cancel": "Cancelar", - "update": ["Ir a GitHub", "OK"] - }, - "newFolder": "Nueva Carpeta", - "newSnippet": "Nuevo Snippet", - "newFragment": "Nuevo Fragmento", - "addDescription": "Agregar Descripción", - "addToFavorites": "Agregar a Favoritos", - "addTag": "Agregar Etiqueta", - "saveScreenshot": "Guardar Captura", - "exportToHtml": "Exportar HTML", - "rename": "Renombrar", - "duplicate": "Duplicar", - "delete": "Eliminar", - "deleteNow": "Eliminar Ahora", - "defaultLanguage": "Language Predeterminado", - "removeFromFavorites": "Eliminar de Favoritos", - "emptyTrash": "Vaciar Papelera", - "close": "Cerrar", - "folder": { - "untitled": "Sin nombre", - "plural": "Carpetas" - }, - "snippet": { - "untitled": "Snippet sin nombre", - "plural": "Snippets", - "emptyName": "Escribe el nombre del snippet", - "selectedMultiple": "{{count}} Snippets Seleccionados", - "noSelected": "No hay Snippet Seleccionado" - }, - "fragment": "Fragmento", - "search": "Buscar", - "line": "Línea", - "column": "Columna", - "sidebar": { - "inbox": "Inbox", - "favorites": "Favoritos", - "allSnippets": "Todos los Snippets", - "trash": "Papelera", - "untitled": "Carpeta sin nombre", - "folders": "Carpetas", - "library": "Librería", - "tags": "Etiquetas" - }, - "darkMode": "Modo Oscuro", - "background": "Fondo", - "restartApp": "Reiniciar massCode", - "updateAvailable": "Actualización Disponible", - "hide": "Ocultar", - "show": "Mostrar" -} diff --git a/src/main/services/i18n/locales/es_ES/dialog.json b/src/main/services/i18n/locales/es_ES/dialog.json deleted file mode 100644 index f97c6e9d..00000000 --- a/src/main/services/i18n/locales/es_ES/dialog.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "deleteConfirm": "¿Estas seguro que quieres eliminar de forma permanente {{name}}?", - "deleteConfirmMultipleSnippets": "¿Estas seguro de que quieres eliminar de forma permanente los {{count}} snippets seleccionados?", - "noUndo": "Esta acción no se puede deshacer.", - "allSnippetsMoveToTrash": "Todos los snippets en esta carpeta se enviarán a la papelera.", - "deleteTag": "Esto también causará que todos los snippets pierdan sus etiquetas.", - "emptyTrash": "¿Estás seguro que quieres eliminar todas los snippets de la Papelera?", - "migrateConfirm": [ - "¿Estás seguro que quieres migrar desde {{name}}?", - "Durante la migración se sobrescribirá la librería actual." - ] -} diff --git a/src/main/services/i18n/locales/es_ES/menu.json b/src/main/services/i18n/locales/es_ES/menu.json deleted file mode 100644 index e561092a..00000000 --- a/src/main/services/i18n/locales/es_ES/menu.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Preferencias", - "update": { - "label": "Buscar actualizaciones....", - "message": "La versión {{newVersion}} está disponible para descargar.\nTu versión actual es {{oldVersion}}.", - "button": ["Ir a Descarga", "OK"], - "noUpdate": "No hay actualizaciones disponibles." - }, - "quit": "Salir de massCode", - "about": "Acerca de massCode", - "hide": "Ocultar massCode", - "hideOther": "Ocultar Otros", - "showAll": "Mostrar Todo" - }, - "help": { - "label": "Ayuda", - "website": "Sitio Web", - "documentation": "Documentación", - "viewInGitHub": "Ver en GitHub", - "changeLog": "Log de Cambios", - "reportIssue": "Reportar un Problema", - "giveStar": "Dar una Estrella", - "extension": { - "vscode": "Extensión para VS Code", - "raycast": "Extensión para Raycast", - "alfred": "Extensión para Alfred" - }, - "donate": { - "openCollective": "Donar en Open Collective", - "payPal": "Donar a través de PayPal" - }, - "twitter": "Twitter", - "devTools": "Abrir Herramientas de Desarrollador" - }, - "file": { - "label": "Archivo", - "find": "Buscar" - }, - "view": { - "label": "Ver", - "sortBy": { - "label": "Ordenar Snippets por", - "dateModified": "Fecha de Modificación", - "dateCreated": "Fecha de Creación", - "name": "Nombre" - } - }, - "edit": { - "label": "Editar", - "undo": "Deshacer", - "redo": "Rehacer", - "cut": "Cortar", - "copy": "Copiar", - "paste": "Pegar", - "delete": "Borrar", - "selectAll": "Seleccionar Todo" - }, - "editor": { - "label": "Editor", - "copy": "Copiar Snippet al Portapapeles", - "format": "Formato", - "previewMarkdown": "", - "previewCode": "Previsualizar Código", - "previewScreenshot": "Previsualizar Captura de Pantalla" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Presentation Mode", - "preview": "Preview" - } -} diff --git a/src/main/services/i18n/locales/es_ES/preferences.json b/src/main/services/i18n/locales/es_ES/preferences.json deleted file mode 100644 index ee1a5d5d..00000000 --- a/src/main/services/i18n/locales/es_ES/preferences.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "title": "Preferencias", - "storage": { - "label": "Almacenamiento", - "migrate": "Migrar", - "count": "Total" - }, - "editor": { - "label": "Editor", - "fontSize": "Tamaño de Fuente", - "fontFamily": "Familia de Fuente", - "wrap": { - "label": "Envolver", - "wordWrap": "Envolver Palabra", - "off": "Off" - }, - "tabSize": "Tamaño de Tabulación", - "showInvisibles": "Mostrar Invisibles", - "highlightLine": "Resaltar Línea", - "highlightGutter": "Resaltar Gutter", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Coma Final", - "none": "Ninguna", - "all": "Todo", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Comillas Simple" - } - }, - "appearance": { - "label": "Apariencia", - "theme": { - "label": "Tema", - "light": "Claro", - "dark": "Oscuro" - } - }, - "language": { - "label": "Lenguage" - } -} diff --git a/src/main/services/i18n/locales/es_ES/special.json b/src/main/services/i18n/locales/es_ES/special.json deleted file mode 100644 index 98340b2b..00000000 --- a/src/main/services/i18n/locales/es_ES/special.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "description": { - "storage": "Para usar servicios de sincronización como iCloud Drive, Google Drive o Dropbox, simplemente mueva el almacenamiento a sus carpetas sincronizadas.", - "migrate": { - "1": "Para migrar desde massCode v1.0, seleccione la carpeta que contiene los archivos de la base de datos.", - "2": "Para migrar desde SnippetsLab, seleccione el archivo JSON.", - "3": [ - "Algunas limitaciones. Durante la migration desde SnippetsLab:", - "Todas las carpetas serán de primer nivel ya que el archivo JSON (por debajo de v2.1) no representa carpetas anidadas.", - "Los snippets con idiomas no admitidos se configurarán como Texto sin formato." - ] - }, - "htmlCssPreview": "Agregue snippets con lenguajes HTML y CSS para ver el resultado." - }, - "success": { - "migrate": "Base de datos migrada con éxito." - }, - "error": { - "folderNotContainDb": "La carpeta no contiene \"db.json\"." - }, - "unsponsored": "Sin Patrocinar", - "supportMessage": "Hola, soy Anton 👋<br><br>\nGracias por usar massCode. Si encuentras útil esta aplicación, por favor {{-tagStart}} dona {{-tagEnd}}. Me inspirará a continuar desarrollando este proyecto.", - "snippetsShowcase": "Muestra de Snippets" -} diff --git a/src/main/services/i18n/locales/fa_IR/common.json b/src/main/services/i18n/locales/fa_IR/common.json deleted file mode 100644 index 428dc4b4..00000000 --- a/src/main/services/i18n/locales/fa_IR/common.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "button": { - "moveStorage": "انتقال فضای ذخیرهسازی", - "openStorage": "بازکردن فضای ذخیرهسازی", - "newStorage": "فضای ذخیرهسازی جدید", - "reloadStorage": "تازهسازی فضای ذخیرهسازی", - "fromMassCodeV1": "از massCode v1.0", - "fromSnippetsLab": "از SnippetsLab", - "confirm": "تایید", - "cancel": "انصراف", - "update": ["برو به گیتهاب", "باشه"], - "ok": "باشه", - "clear": "پاکسازی", - "copy": "رونویسی", - "sort": "مرتبسازی", - "revers": "معکوس", - "generate": "تولید", - "saveAs": "ذخیره بهعنوان", - "zoomIn": "بزرگنمایی", - "zoomOut": "کوچکنمایی", - "fit": "فیت" - }, - "newFolder": "پوشه جدید", - "newSnippet": "اسنیپت جدید", - "newFragment": "فرگمنت جدید", - "addDescription": "افزودن توضیحات", - "addToFavorites": "افزودن به علاقهمندیها", - "addTag": "افزودن برچسب", - "exportToHtml": "استخراج به HTML", - "rename": "تغییرنام", - "duplicate": "رونویسی", - "delete": "حذف", - "deleteNow": "اکنون حذف کنید", - "defaultLanguage": "زبان پیشفرض", - "removeFromFavorites": "حذف از علاقهمندیها", - "emptyTrash": "پاکسازی زبالهدان", - "close": "بستن", - "folder": { - "untitled": "پوشه بدون نام", - "plural": "پوشهها" - }, - "snippet": { - "untitled": "اسنیپت بدون نام", - "plural": "اسنیپتها", - "emptyName": "نام اسنیپت را بنویسید", - "selectedMultiple": "{{count}} اسنیپت انتخاب شده", - "noSelected": "هیچ اسنیپتی انتخاب نشده" - }, - "fragment": "فرگمنت", - "search": "جستجو", - "line": "خط", - "column": "ستون", - "sidebar": { - "inbox": "صندوق ورودی", - "favorites": "علاقهمندیها", - "allSnippets": "همه اسنیپتها", - "trash": "زبالهدان", - "untitled": "پوشه بدون نام", - "folders": "پوشهها", - "library": "کتابخانه", - "tags": "برچسبها" - }, - "darkMode": "حالت تیره", - "background": "پسزمینه", - "restartApp": "راهاندازی دوباره massCode", - "updateAvailable": "بهروزرسانی دردسترس است", - "hide": "پنهانشدن", - "show": "نمایش", - "collapse-all": "جمعکردن همه", - "expand-all": "گسترش همه", - "restore": "بازیابی", - "copy-snippet-link": "رونویسی پیوند اسنیپت", - "set-custom-icon": "تنظیم نماد سفارشی" -} diff --git a/src/main/services/i18n/locales/fa_IR/devtools.json b/src/main/services/i18n/locales/fa_IR/devtools.json deleted file mode 100644 index c24ad498..00000000 --- a/src/main/services/i18n/locales/fa_IR/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "رشته ورودی", - "outputString": "رشته خروجی", - "inputUrl": "نشانی ورودی", - "outputUrl": "نشانی خروجی", - "parsedUrl": "نشانی تجزیهشده", - "splitQueryString": "تقسیم رشته پرسوجو", - "key": "کلید", - "value": "مقدار", - "component": "کامپوننت", - "result": "نتیجه", - "secretKey": "کلید پنهان", - "algorithm": "الگوریتم", - "version": "نگارش", - "amount": "تعداد", - "type": "نوع", - "length": "طول", - "options": "گزینهها", - "numbers": "شمارهها", - "symbols": "نمادها", - "lowercase": "حروف کوچک", - "uppercase": "حروف بزرگ" - }, - "textTools": { - "label": "ابزارهای متن", - "caseConverter": "مبدل حروف کوچک/بزرگ", - "urlParser": "تجزیهکننده نشانی", - "slugGenerator": "سازنده نامک", - "sortLines": "مرتبسازی خطها" - }, - "crypto": { - "label": "کریپتوگرافی / امنیت", - "hashGenerator": "سازنده Hash", - "hmacGenerator": "سازنده HMAC", - "passGenerator": "سازنده گذرواژه", - "uuidGenerator": "سازنده UUID" - }, - "encodeDecode": { - "label": "کدگذارها / کدگشاها", - "url": "کدگذاری / کدگشایی نشانی", - "base64": "کدگذاری / کدگشایی Base64" - } -} diff --git a/src/main/services/i18n/locales/fa_IR/dialog.json b/src/main/services/i18n/locales/fa_IR/dialog.json deleted file mode 100644 index 34b594d6..00000000 --- a/src/main/services/i18n/locales/fa_IR/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "آیا مطمئنید که میخواهید {{name}} را برای همیشه حذف کنید؟", - "deleteConfirmMultipleSnippets": "آیا مطمئنید که میخواهید {{count}} اسنیپت انتخابشده را برای همیشه حذف کنید؟", - "noUndo": "شما نمیتوانید این کنش را واگرد کنید.", - "allSnippetsMoveToTrash": "همه اسنیپتهای این پوشه به زبالهدان منتقل میشوند.", - "deleteTag": "این همچنین باعث میشود که تمام اسنیپتهایی که آن برچسب را دارند نیز حذف شوند.", - "emptyTrash": "آیا مطمئنید که میخواهید همه اسنیپتها در زبالهدان را برای همیشه حذف کنید؟", - "migrateConfirm": [ - "آیا مطمئنید که میخواهید از {{name}} مهاجرت کنید؟", - "در هنگام انتقال، کتابخانه فعلی رونویسی خواهد شد." - ], - "createDb": "لطفا پوشه دیگری را انتخاب کنید" -} diff --git a/src/main/services/i18n/locales/fa_IR/menu.json b/src/main/services/i18n/locales/fa_IR/menu.json deleted file mode 100644 index 81059ba7..00000000 --- a/src/main/services/i18n/locales/fa_IR/menu.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "تنظیمات", - "update": { - "label": "بررسی برای بهروزرسانیها....", - "message": "نگارش {{newVersion}} اکنون برای دریافت در دسترس است.\nنگارش شما {{oldVersion}} است.", - "button": ["برو به دریافت", "باشه"], - "noUpdate": "درحال حاضر هیچ بهروزرسانی در دسترس نیست." - }, - "quit": "خروج از massCode", - "about": "درباره massCode", - "hide": "پنهانکردن massCode", - "hideOther": "پنهانکردن دیگران", - "showAll": "نمایش همه" - }, - "help": { - "label": "کمک", - "website": "وبسایت", - "documentation": "مستندات", - "viewInGitHub": "مشاهده در گیتهاب", - "changeLog": "تغییرات", - "reportIssue": "گزارش مشکل", - "giveStar": "ستاره بدهید", - "extension": { - "vscode": "افزونه VS Code", - "raycast": "افزونه Raycast", - "alfred": "افزونه Alfred" - }, - "donate": { - "openCollective": "کمک مالی در Open Collective", - "payPal": "کمک مالی از طریق PayPal", - "gumroad": "کمک مالی از طریق Gumroad (ویزا، مسترکارت و غیره)" - }, - "twitter": "توییتر", - "devTools": "ابزارهای توسعهدهنده", - "links": { - "snippets": "مجموعه اسنیپت" - } - }, - "file": { - "label": "پرونده", - "find": "یافتن" - }, - "view": { - "label": "نمایش", - "sortBy": { - "label": "مرتبسازی اسنیپتها براساس", - "dateModified": "تاریخ ویرایش", - "dateCreated": "تاریخ ساخت", - "name": "نام" - }, - "hideSubfolderSnippets": "پنهانکردن اسنیپتهای زیرپوشه", - "compactMode": "حالت فشرده" - }, - "edit": { - "label": "ویرایش", - "undo": "واگرد", - "redo": "انجام دوباره", - "cut": "برش", - "copy": "رونویسی", - "paste": "جایگذاری", - "delete": "حذف", - "selectAll": "انتخاب همه" - }, - "editor": { - "label": "ویرایشگر", - "copy": "رونویسی اسنیپت در بریدهدان", - "format": "قالب", - "previewCode": "پیشنمایش کد", - "previewScreenshot": "پیشنمایش اسکرینشات", - "previewMarkdown": "پیشنمایش Markdown", - "previewMindmap": "پیشنمایش Mindmap", - "fontSizeIncrease": "افزایش اندازه فونت", - "fontSizeDecrease": "کاهش اندازه فونت", - "fontSizeReset": "بازتنظیم اندازه فونت" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "حالت ارائه", - "preview": "پیشنمایش" - }, - "history": { - "label": "تاریخچه", - "back": "بازگشت", - "forward": "بهجلو" - }, - "devtools": { - "label": "ابزارهای توسعهدهنده" - } -} diff --git a/src/main/services/i18n/locales/fa_IR/preferences.json b/src/main/services/i18n/locales/fa_IR/preferences.json deleted file mode 100644 index 2594ad2a..00000000 --- a/src/main/services/i18n/locales/fa_IR/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "تنظیمات", - "storage": { - "label": "فضای ذخیرهسازی", - "migrate": "مهاجرت", - "count": "تعداد" - }, - "editor": { - "label": "ویرایشگر", - "fontSize": "اندازه فونت", - "fontFamily": "خانواده فونت", - "wrap": { - "label": "بستهبندی (Wrap)", - "wordWrap": "بستهبندی واژگان", - "off": "خاموش" - }, - "tabSize": "اندازه زبانه", - "showInvisibles": "نمایش نامرئیها", - "highlightLine": "برجستهکردن خط", - "highlightGutter": "Highlight Gutter", - "matchBrackets": "مطابقت براکتها", - "prettier": { - "label": "زیباتر", - "trailingComma": { - "label": "کاما دنبالهدار", - "none": "هیچ", - "all": "همه", - "es5": "ES5" - }, - "semi": "نیمه", - "singleQuote": "نقل قول تک" - } - }, - "appearance": { - "label": "ظاهر", - "theme": { - "label": "پوسته", - "light": "روشن", - "dark": "تیره" - } - }, - "language": { - "label": "زبان" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "رندرکننده بلاک کد" - } -} diff --git a/src/main/services/i18n/locales/fa_IR/special.json b/src/main/services/i18n/locales/fa_IR/special.json deleted file mode 100644 index b4ec538c..00000000 --- a/src/main/services/i18n/locales/fa_IR/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "برای استفاده از سرویسهای همگامسازی مانند آیکلود درایو، گوگلدرایو یا دراپباکس، بهسادگی فضای ذخیرهسازی را به پوشههای همگامسازیشده مربوطه منتقل کنید", - "migrate": { - "1": "برای مهاجرت از massCode v1.0 پوشه دارای پروندههای پایگاه داده را انتخاب کنید.", - "2": "برای مهاجرت از SnippetsLab پرونده JSON را انتخاب کنید.", - "3": [ - "برخی محدودیتها در هنگام مهاجرت از SnippetsLab:", - "همه پوشهها سطح اول خواهند بود زیرا پرونده JSON (زیر نگارش ۲٫۱) پوشههای تودرتو را نشان نمیدهد.", - "اسنیپتهایی با زبانهای پشتیبانینشده رو متن ساده پیشفرض تنظیم میشوند." - ] - }, - "htmlCssPreview": "برای دیدن نتیجه، فرگمنتهایی را با زبانهای HTML و CSS اضافه کنید.", - "codeBlockRenderer": [ - "هنگام استفاده از Codemirror، زبانی که برای بلوک کد تنظیم میشود باید با یکی از مقادیر زبانها مطابقت داشته باشد:", - "زبانهای پشتیبانیشده" - ] - }, - "success": { - "migrate": "پایگاه داده با موفقیت منتقل شد." - }, - "error": { - "folderContainDb": "پوشه از قبل دارای \"db.json\" است.", - "folderNotContainDb": "پوشه دارای \"db.json\" نیست." - }, - "unsponsored": "بدون حمایت", - "supportMessage": "سلام، اینجا آنتون هستم 👋<br><br>\nاز استفاده از massCode متشکرم. اگر این برنامه را مفید مییابید، لطفاً {{-tagStart}} کمک مالی {{-tagEnd}} کنید. این باعث میشود تا من برای ادامه توسعه پروژه، الهام بگیرم.", - "snippetsShowcase": "ویترین اسنیپتها" -} diff --git a/src/main/services/i18n/locales/fr_FR/common.json b/src/main/services/i18n/locales/fr_FR/common.json deleted file mode 100644 index 91737a1a..00000000 --- a/src/main/services/i18n/locales/fr_FR/common.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "button": { - "moveStorage": "Déplacer le Stockage", - "openStorage": "Ouvrir le Stockage", - "newStorage": "Nouveau Stockage", - "reloadStorage": "Recharger le Stockage", - "fromMassCodeV1": "Depuis massCode v1.0", - "fromSnippetsLab": "Depuis SnippetsLab", - "confirm": "Confirmer", - "cancel": "Annuler", - "update": ["Aller vers GitHub", "OK"], - "ok": "OK", - "clear": "Effacer", - "copy": "Copier", - "sort": "Trier", - "revers": "Retour arrière", - "generate": "Générer" - }, - "newFolder": "Nouveau dossier", - "newSnippet": "Nouvel extrait", - "newFragment": "Nouveau Fragment", - "addDescription": "Ajouter description", - "addToFavorites": "Ajouter aux favoris", - "addTag": "Ajouter une étiquette", - "exportToHtml": "Exporter en HTML", - "saveScreenshot": "Sauvegarder copie d'écran", - "rename": "Renommer", - "duplicate": "Dupliquer", - "delete": "Effacer", - "deleteNow": "Effacer maintenant", - "defaultLanguage": "Langage par défaut", - "removeFromFavorites": "Enlever des favoris", - "emptyTrash": "vider la poubelle", - "close": "Fermer", - "folder": { - "untitled": "Dossier sans titre", - "plural": "Dossiers" - }, - "snippet": { - "untitled": "Extrait sans titre", - "plural": "Extraits", - "emptyName": "Tapez le nom de l'extrait", - "selectedMultiple": "{{count}} extraits sélectionnés", - "noSelected": "Pas d'extrait sélectionné" - }, - "fragment": "Fragment", - "search": "Recherche", - "line": "Ligne", - "column": "Colonne", - "sidebar": { - "inbox": "Boîte de réception", - "favorites": "Favoris", - "allSnippets": "Tous les extraits", - "trash": "Poubelle", - "untitled": "Dossier sans titre", - "folders": "Dossiers", - "library": "Bibliothèque", - "tags": "Etiquettes" - }, - "darkMode": "Mode sombre", - "background": "Arrière plan", - "restartApp": "Redémarrer massCode", - "updateAvailable": "Mise à jour disponible", - "hide": "Cacher", - "show": "Montrer", - "collapse-all": "Tout Réduire", - "expand-all": "Tout étendre", - "restore": "Restaurer", - "copy-snippet-link": "Copier lien extrait", - "set-custom-icon": "Définir une icône personnalisée" -} diff --git a/src/main/services/i18n/locales/fr_FR/devtools.json b/src/main/services/i18n/locales/fr_FR/devtools.json deleted file mode 100644 index f39a033f..00000000 --- a/src/main/services/i18n/locales/fr_FR/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Chaîne d'entrée", - "outputString": "Chaîne de sortie", - "inputUrl": "URL d'entrée", - "outputUrl": "URL de sortie", - "parsedUrl": "URL analysée", - "splitQueryString": "Fractionner la chaîne de requête", - "key": "Clef", - "value": "Valeur", - "component": "Composant", - "result": "Résultat", - "secretKey": "Clef secrète", - "algorithm": "Algorithme", - "version": "Version", - "amount": "Montant", - "type": "Type", - "length": "Longueur", - "options": "Options", - "numbers": "Nombres", - "symbols": "Symboles", - "lowercase": "Minuscule", - "uppercase": "Majuscule" - }, - "textTools": { - "label": "Outils de texte", - "caseConverter": "Convertisseur de casse", - "urlParser": "Analyseur URL", - "slugGenerator": "Générateur Slug", - "sortLines": "Trier lignes" - }, - "crypto": { - "label": "Cryptographie / Sécurité", - "hashGenerator": "Générateur de Hash", - "hmacGenerator": "Générateur de HMAC", - "passGenerator": "Générateur de mot de passe", - "uuidGenerator": "Générateur de UUID" - }, - "encodeDecode": { - "label": "Encodeurs / Décodeurs", - "url": "Encodeurs / Décodeurs URL", - "base64": "Encodeurs / Décodeurs Base64" - } -} diff --git a/src/main/services/i18n/locales/fr_FR/dialog.json b/src/main/services/i18n/locales/fr_FR/dialog.json deleted file mode 100644 index 5b39693f..00000000 --- a/src/main/services/i18n/locales/fr_FR/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Etes-vous sûr de vouloir effacer de façon permanente {{name}}?", - "deleteConfirmMultipleSnippets": "Etes-vous sûr de vouloir effacer de façon permanente {{count}} extraits sélectionnés ?", - "noUndo": "vous ne pouvez pas annuler cette action.", - "allSnippetsMoveToTrash": "Tous les extraits de ce dossier seront déplacés vers la corbeille.", - "deleteTag": "Cette étiquette sera également supprimée de tous les extraits.", - "emptyTrash": "Êtes-vous sûr de vouloir supprimer définitivement tous les extraits dans la corbeille ?", - "migrateConfirm": [ - "Êtes-vous sûr de vouloir migrer de {{name}}?", - "Lors de la migration, la bibliothèque actuelle sera écrasée." - ], - "createDb": "Veuillez sélectionner un autre dossier" -} diff --git a/src/main/services/i18n/locales/fr_FR/menu.json b/src/main/services/i18n/locales/fr_FR/menu.json deleted file mode 100644 index 4fc094c4..00000000 --- a/src/main/services/i18n/locales/fr_FR/menu.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Préférences", - "update": { - "label": "Vérifier mise à jour ...", - "message": "La version {{newVersion}} est maintenant disponible au téléchargement.\nVotre version est la {{oldVersion}}.", - "button": ["Allez au téléchargement", "OK"], - "noUpdate": "Il n'y a actuellement aucune mise à jour disponible." - }, - "quit": "Quitter massCode", - "about": "A propos de massCode", - "hide": "Cacher massCode", - "hideOther": "Cacher les autres", - "showAll": "Tout montrer" - }, - "help": { - "label": "Aide", - "website": "Site web", - "documentation": "Documentation", - "viewInGitHub": "Voir dans GitHub", - "changeLog": "Log des changements", - "reportIssue": "Rapporter un problème", - "giveStar": "Donner une étoile", - "extension": { - "vscode": "Extension VS Code", - "raycast": "Extension Raycast", - "alfred": "Extension Alfred" - }, - "donate": { - "openCollective": "Faire une donation à un collectif ouvert (Open)", - "payPal": "Faire une donation via PayPal", - "gumroad": "Faire une donation via Gumroad (Visa, Mastercard, etc.)" - }, - "twitter": "Twitter", - "devTools": "Basculer vers les outils développeurs", - "links": { - "snippets": "Collection d'extraits" - } - }, - "file": { - "label": "Fichier", - "find": "Trouver" - }, - "view": { - "label": "Affichage", - "sortBy": { - "label": "Trier les extraits par", - "dateModified": "Date modifiée", - "dateCreated": "Date de création", - "name": "Nom" - }, - "hideSubfolderSnippets": "Masquer les sous-dossier des extraits", - "compactMode": "Mode compacté" - }, - "edit": { - "label": "Edition", - "undo": "Annuler", - "redo": "Refaire", - "cut": "Couper", - "copy": "Copier", - "paste": "Coller", - "delete": "Effacer", - "selectAll": "Tout sélectionner" - }, - "editor": { - "label": "Editeur", - "copy": "Copier extrait vers presse-papier", - "format": "Formatter", - "previewCode": "Prévisualisation Code", - "previewScreenshot": "Prévisualisation copie écran", - "previewMarkdown": "Prévisualisation Markdown", - "fontSizeIncrease": "Augmentation taille police", - "fontSizeDecrease": "Diminution taille police", - "fontSizeReset": "Réinitialisation taille police" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Mode présentation", - "preview": "Prévisualisation" - }, - "history": { - "label": "Historique", - "back": "Retour arrière", - "forward": "Avance" - }, - "devtools": { - "label": "Outils développeur" - } -} diff --git a/src/main/services/i18n/locales/fr_FR/preferences.json b/src/main/services/i18n/locales/fr_FR/preferences.json deleted file mode 100644 index e6e41a59..00000000 --- a/src/main/services/i18n/locales/fr_FR/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Préférences", - "storage": { - "label": "Stockage", - "migrate": "Migration", - "count": "Compteur" - }, - "editor": { - "label": "Edition", - "fontSize": "Taille police de caractères", - "fontFamily": "Famille de polices", - "wrap": { - "label": "Enveloppage", - "wordWrap": "Retour à la ligne", - "off": "inactif" - }, - "tabSize": "Taille des onglets", - "showInvisibles": "Montrer les invisibles", - "highlightLine": "Mettre une ligne en surbrillance", - "highlightGutter": "Mise en évidence de la gouttière", - "matchBrackets": "Support des accolades", - "prettier": { - "label": "Plus jolie", - "trailingComma": { - "label": "Virgule à la fin", - "none": "Aucune", - "all": "toutes", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Apostrophe" - } - }, - "appearance": { - "label": "Apparence", - "theme": { - "label": "Thème", - "light": "Clair", - "dark": "Sombre" - } - }, - "language": { - "label": "Langage" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Bloc de code Renderer" - } -} diff --git a/src/main/services/i18n/locales/fr_FR/special.json b/src/main/services/i18n/locales/fr_FR/special.json deleted file mode 100644 index 39e53a14..00000000 --- a/src/main/services/i18n/locales/fr_FR/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Pour utiliser des services de synchronisation comme iCloud Drive, Google Drive ou Dropbox, il suffit de déplacer le stockage vers les dossiers synchronisés correspondants", - "migrate": { - "1": "Pour migrer à partir de massCode v1.0, sélectionnez le dossier contenant les fichiers de la base de données.", - "2": "Pour migrer depuis SnippetsLab, sélectionnez le fichier JSON.", - "3": [ - "Quelques limitations. Lors de la migration de SnippetsLab :", - "Tous les dossiers seront de premier niveau car le fichier JSON (inférieur à la version 2.1) ne représente pas les dossiers imbriqués.", - "Les extraits dont la langue n'est pas prise en charge seront définis comme du texte brut par défaut." - ] - }, - "htmlCssPreview": "Ajouter des fragments avec les langages HTML et CSS pour voir le résultat.", - "codeBlockRenderer": [ - "Lors de l'utilisation de Codemirror, le langage à définir pour le bloc de code doit correspondre à l'une des valeurs des", - "langages" - ] - }, - "success": { - "migrate": "Migration réussie de la base de données." - }, - "error": { - "folderContainDb": "Le dossier contient déjà \"db.json\".", - "folderNotContainDb": "Dossier ne contenant pas \"db.json\"." - }, - "unsponsored": "Non sponsorisé", - "supportMessage": "Bonjour, ici Anton 👋<br><br>\nMerci d'avoir utilisé massCode. Si vous trouvez cette application utile, veuillez {{-tagStart}} donate {{-tagEnd}}. Cela m'incitera à poursuivre le développement du projet.", - "snippetsShowcase": "Vitrine des extraits" -} diff --git a/src/main/services/i18n/locales/ja_JP/common.json b/src/main/services/i18n/locales/ja_JP/common.json deleted file mode 100644 index 6bc7a1e3..00000000 --- a/src/main/services/i18n/locales/ja_JP/common.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "button": { - "moveStorage": "ストレージを移動", - "openStorage": "ストレージを開く", - "newStorage": "新規ストレージ", - "fromMassCodeV1": "massCode v1.0から", - "fromSnippetsLab": "SnippetsLabから", - "confirm": "OK", - "cancel": "キャンセル", - "update": ["GitHubへ", "OK"], - "ok": "OK" - }, - "newFolder": "新規フォルダ", - "newSnippet": "新規スニペット", - "newFragment": "新規フラグメント", - "addDescription": "説明を追加", - "addToFavorites": "お気に入りに追加", - "addTag": "タグを追加", - "exportToHtml": "HTMLにエキスポート", - "saveScreenshot": "スクリーンショットを保存", - "rename": "名前変更", - "duplicate": "複製", - "delete": "削除", - "deleteNow": "すぐに削除", - "defaultLanguage": "標準の言語", - "removeFromFavorites": "お気に入りから削除", - "emptyTrash": "ゴミ箱を空に", - "close": "閉じる", - "folder": { - "untitled": "名称未設定フォルダ", - "plural": "フォルダ" - }, - "snippet": { - "untitled": "名称未設定スニペット", - "plural": "スニペット", - "emptyName": "スニペット名を付ける", - "selectedMultiple": "{{count}} 個のスニペットを選択中", - "noSelected": "スニペットは選択されていません" - }, - "fragment": "フラグメント", - "search": "検索", - "line": "行", - "column": "列", - "sidebar": { - "inbox": "カテゴリなし", - "favorites": "お気に入り", - "allSnippets": "すべてのスニペット", - "trash": "ゴミ箱", - "untitled": "名称未設定フォルダ", - "folders": "フォルダ", - "library": "ライブラリ", - "tags": "タグ" - }, - "darkMode": "ダークモード", - "background": "背景", - "restartApp": "massCodeを再起動", - "updateAvailable": "アップデートがあります", - "hide": "隠す", - "show": "表示する", - "collapse-all": "すべて縮小", - "expand-all": "すべて展開", - "restore": "回復", - "copy-snippet-link": "スニペットリンクをコピー", - "set-custom-icon": "カスタムアイコンを設定" -} diff --git a/src/main/services/i18n/locales/ja_JP/dialog.json b/src/main/services/i18n/locales/ja_JP/dialog.json deleted file mode 100644 index a115fa17..00000000 --- a/src/main/services/i18n/locales/ja_JP/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "{{name}} を完全に削除してよろしいですか?", - "deleteConfirmMultipleSnippets": "選択している {{count}} 個のスニペットを完全に削除してよろしいですか?", - "noUndo": "この操作は復元できません。", - "allSnippetsMoveToTrash": "このフォルダー内のスニペットはすべてゴミ箱に移動されます。", - "deleteTag": "すべてのスニペットからこのタグが削除されます。", - "emptyTrash": "ゴミ箱に入っている全てのスニペットが完全に削除されます。よろしいですか?", - "migrateConfirm": [ - "{{name}} からデータが移行されます。よろしいですか?", - "現在のライブラリは全て上書きされます。" - ], - "createDb": "別のフォルダを選択してください。" -} diff --git a/src/main/services/i18n/locales/ja_JP/menu.json b/src/main/services/i18n/locales/ja_JP/menu.json deleted file mode 100644 index e87a4804..00000000 --- a/src/main/services/i18n/locales/ja_JP/menu.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "設定", - "update": { - "label": "アップデートがあるか確認", - "message": "バージョン {{newVersion}} がダウンロード可能です。\n現在使用しているバージョンは {{oldVersion}} です。", - "button": ["ダウンロードに進む", "OK"], - "noUpdate": "アップデートはありません。" - }, - "quit": "massCodeを終了", - "about": "massCodeについて", - "hide": "massCodeを隠す", - "hideOther": "他を隠す", - "showAll": "すべて表示" - }, - "help": { - "label": "ヘルプ", - "website": "ウェブサイト", - "documentation": "ドキュメント", - "viewInGitHub": "GitHubで見る", - "changeLog": "更新履歴", - "reportIssue": "課題を提出", - "giveStar": "スターを付ける", - "extension": { - "vscode": "VS Code 拡張機能", - "raycast": "Raycast 拡張機能", - "alfred": "Alfred 拡張機能" - }, - "donate": { - "openCollective": "Open Collectiveで寄付をする", - "payPal": "PayPalで寄付をする", - "gumroad": "Gumroadで寄付をする(Visa, Mastercardなどが使えます)" - }, - "twitter": "Twitter", - "devTools": "Developer Toolsを表示", - "links": { - "snippets": "スニペットコレクション" - } - }, - "file": { - "label": "ファイル", - "find": "検索" - }, - "view": { - "label": "表示", - "sortBy": { - "label": "スニペットの整列", - "dateModified": "更新日", - "dateCreated": "作成日", - "name": "名前" - }, - "hideSubfolderSnippets": "サブフォルダのスニペットを隠す", - "compactMode": "コンパクトモード" - }, - "edit": { - "label": "ラベル", - "undo": "元に戻す", - "redo": "やり直し", - "cut": "切り取り", - "copy": "コピー", - "paste": "貼り付け", - "delete": "削除", - "selectAll": "すべて選択" - }, - "editor": { - "label": "エディタ", - "copy": "スニペットをクリップボードにコピー", - "format": "フォーマット", - "previewMarkdown": "Markdownをプレビュー", - "previewCode": "コードをプレビュー", - "previewScreenshot": "スクリーンショットをプレビュー", - "fontSizeIncrease": "フォントを拡大", - "fontSizeDecrease": "フォントを縮小", - "fontSizeReset": "フォントサイズをリセット" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "プレゼンテーションモード", - "preview": "プレビュー" - }, - "history": { - "label": "履歴", - "back": "戻る", - "forward": "進む" - } -} diff --git a/src/main/services/i18n/locales/ja_JP/preferences.json b/src/main/services/i18n/locales/ja_JP/preferences.json deleted file mode 100644 index 62804ea5..00000000 --- a/src/main/services/i18n/locales/ja_JP/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "設定", - "storage": { - "label": "ストレージ", - "migrate": "データの移行", - "count": "登録個数" - }, - "editor": { - "label": "エディタ", - "fontSize": "フォントサイズ", - "fontFamily": "フォントファミリ", - "wrap": { - "label": "行の折り返し", - "wordWrap": "折り返す", - "off": "折り返ししない" - }, - "tabSize": "タブサイズ", - "showInvisibles": "非表示文字を表示する", - "highlightLine": "行をハイライトする", - "highlightGutter": "ガターをハイライトする", - "matchBrackets": "ブラケットの強調", - "prettier": { - "label": "行の整形", - "trailingComma": { - "label": "末尾のコンマ", - "none": "何もしない", - "all": "すべて", - "es5": "ES5準拠" - }, - "semi": "セミコロン", - "singleQuote": "シングルクォーテーション" - } - }, - "appearance": { - "label": "外観", - "theme": { - "label": "テーマ", - "light": "ライト", - "dark": "ダーク" - } - }, - "language": { - "label": "表示言語" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "コードブロックレンダラ" - } -} diff --git a/src/main/services/i18n/locales/ja_JP/special.json b/src/main/services/i18n/locales/ja_JP/special.json deleted file mode 100644 index 79ac45b6..00000000 --- a/src/main/services/i18n/locales/ja_JP/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "iCloud Drive、Google Drive、Dropboxなどの同期サービスを利用する場合は、ストレージフォルダを同期フォルダに移動するだけです。", - "migrate": { - "1": "massCode v1.0 から移行する場合は、データベースファイルのあるフォルダーを選択します。", - "2": "SnippetsLabから移行する場合は、JSONファイルを選択します。", - "3": [ - "SnippetsLab.JPから移行時の制限事項:", - "JSONファイル(v2.1以下)はネストしたフォルダを表現できないため、すべてのフォルダは第一階層となります。", - "サポートされていない言語のスニペットは、デフォルトのPlain Textに設定されます。" - ] - }, - "htmlCssPreview": "HTMLやCSS言語によるフラグメントを追加して、結果を表示することができます。", - "codeBlockRenderer": [ - "Codemirrorを使用する場合、コードブロックに設定する言語は下記対応言語の中からのみ選択できます。", - "対応言語一覧" - ] - }, - "success": { - "migrate": "データの移行が完了しました。" - }, - "error": { - "folderContainDb": "フォルダにはすでに \"db.json\" が存在します。", - "folderNotContainDb": "フォルダには \"db.json\" が存在しません。" - }, - "unsponsored": "サポートしていません", - "supportMessage": "やあ!アントンです👋<br><br>\nmassCodeを使ってくれてありがとう。もしあなたがこのソフトを気に入ったのなら、ぜひ{{-tagStart}}寄付{{-tagEnd}}をお願いします!。 massCodeを開発し続けるための力になります。", - "snippetsShowcase": "スニペットライブラリ" -} diff --git a/src/main/services/i18n/locales/pl/common.json b/src/main/services/i18n/locales/pl/common.json deleted file mode 100644 index da1cc563..00000000 --- a/src/main/services/i18n/locales/pl/common.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "button": { - "moveStorage": "Przenieś Magazyn", - "openStorage": "Otwórz Magazyn", - "newStorage": "Nowy Magazyn", - "reloadStorage": "Przeładuj Magazyn", - "fromMassCodeV1": "Z massCode v1.0", - "fromSnippetsLab": "Z SnippetsLab", - "confirm": "Potwierdź", - "cancel": "Anuluj", - "update": ["Przejdź do GitHuba", "OK"], - "ok": "OK", - "clear": "Wyczyść", - "copy": "Kopiuj", - "sort": "Sortuj", - "revers": "Odwróć", - "generate": "Generuj", - "saveAs": "Zapisz jako", - "zoomIn": "Powiększ", - "zoomOut": "Pomniejsz", - "fit": "Dopasuj" - }, - "newFolder": "Nowy folder", - "newSnippet": "Nowy fragment kodu", - "newFragment": "Nowy fragment", - "addDescription": "Dodaj opis", - "addToFavorites": "Dodaj do ulubionych", - "addTag": "Dodaj Tag", - "exportToHtml": "Eksportuj do HTML", - "rename": "Zmień nazwę", - "duplicate": "Duplikuj", - "delete": "Usuń", - "deleteNow": "Usuń teraz", - "defaultLanguage": "Domyślny język", - "removeFromFavorites": "Usuń z Ulubionych", - "emptyTrash": "Opróżnij kosz", - "close": "Zamknij", - "folder": { - "untitled": "Bez tytułu", - "plural": "Foldery" - }, - "snippet": { - "untitled": "Bez tytułu", - "plural": "Fragmenty Kodu", - "emptyName": "Wprowadź nazwę fragmentu", - "selectedMultiple": "{{count}} zaznaczonych fragmentów kodu", - "noSelected": "Brak zaznaczonych fragmentów kodu" - }, - "fragment": "Fragment", - "search": "Szukaj", - "line": "Linia", - "column": "Kolumna", - "sidebar": { - "inbox": "Skrzynka odbiorcza", - "favorites": "Ulubione", - "allSnippets": "Wszystkie Fragmenty Kodu", - "trash": "Kosz", - "untitled": "Bez tytułu", - "folders": "Foldery", - "library": "Biblioteka", - "tags": "Tagi" - }, - "darkMode": "Tryb ciemny", - "background": "Tło", - "restartApp": "Uruchom ponownie massCode", - "updateAvailable": "Dostępna aktualizacja", - "hide": "Ukryj", - "show": "Pokaż", - "collapse-all": "Zwiń wszystko", - "expand-all": "Rozwiń wszystko", - "restore": "Przywróć", - "copy-snippet-link": "Skopiuj link do fragmentu kodu", - "set-custom-icon": "Ustaw niestandardową ikonę" -} diff --git a/src/main/services/i18n/locales/pl/devtools.json b/src/main/services/i18n/locales/pl/devtools.json deleted file mode 100644 index c2a34446..00000000 --- a/src/main/services/i18n/locales/pl/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Wejściowy Ciąg", - "outputString": "Wyjściowy Ciąg", - "inputUrl": "Wejściowy URL", - "outputUrl": "Wyjściowy URL", - "parsedUrl": "Przetworzony URL", - "splitQueryString": "Podziel Ciąg zapytań", - "key": "Klucz", - "value": "Wartość", - "component": "Komponent", - "result": "Wynik", - "secretKey": "Sekretny Klucz", - "algorithm": "Algorytm", - "version": "Wersja", - "amount": "Ilość", - "type": "Typ", - "length": "Długość", - "options": "Opcje", - "numbers": "Liczby", - "symbols": "Symbole", - "lowercase": "Małe Litery", - "uppercase": "Wielkie Litery" - }, - "textTools": { - "label": "Narzędzia Tekstowe", - "caseConverter": "Konwerter Wielkości Liter", - "urlParser": "Analizator URL", - "slugGenerator": "Generator Slugów", - "sortLines": "Sortuj Linie" - }, - "crypto": { - "label": "Kryptografia / Bezpieczeństwo", - "hashGenerator": "Generator Hashy", - "hmacGenerator": "Generator HMAC", - "passGenerator": "Generator Hasła", - "uuidGenerator": "Generator UUID" - }, - "encodeDecode": { - "label": "Kodery / Dekodery", - "url": "Koder / Dekoder URL", - "base64": "Koder / Dekoder Base64" - } -} diff --git a/src/main/services/i18n/locales/pl/dialog.json b/src/main/services/i18n/locales/pl/dialog.json deleted file mode 100644 index fd9d0b34..00000000 --- a/src/main/services/i18n/locales/pl/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Czy na pewno chcesz trwale usunąć {{name}}?", - "deleteConfirmMultipleSnippets": "Czy na pewno chcesz trwale usunąć {{count}} wybrane fragmenty kodu?", - "noUndo": "Nie można cofnąć tej czynności.", - "allSnippetsMoveToTrash": "Wszystkie fragmenty kodu w tym folderze zostaną przeniesione do kosza.", - "deleteTag": "Spowoduje to także usunięcie tagu we wszystkich fragmentach kodu.", - "emptyTrash": "Czy na pewno chcesz trwale usunąć wszystkie fragmenty kodu w koszu?", - "migrateConfirm": [ - "Czy na pewno chcesz przeprowadzić migrację z {{name}}?", - "Podczas migracji bieżąca biblioteka zostanie nadpisana." - ], - "createDb": "Proszę wybrać inny folder" -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pl/menu.json b/src/main/services/i18n/locales/pl/menu.json deleted file mode 100644 index e457ef7b..00000000 --- a/src/main/services/i18n/locales/pl/menu.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Preferencje", - "update": { - "label": "Sprawdź aktualizacje...", - "message": "Wersja {{newVersion}} jest teraz dostępna do pobrania.\nTwoja wersja to {{oldVersion}}.", - "button": ["Przejdź do Pobierania", "OK"], - "noUpdate": "Obecnie nie ma dostępnych aktualizacji." - }, - "quit": "Zakończ massCode", - "about": "O massCode", - "hide": "Ukryj massCode", - "hideOther": "Ukryj Inne", - "showAll": "Pokaż Wszystkie" - }, - "help": { - "label": "Pomoc", - "website": "Strona internetowa", - "documentation": "Dokumentacja", - "viewInGitHub": "Zobacz na GitHubie", - "changeLog": "Dziennik Zmian", - "reportIssue": "Zgłoś Problem", - "giveStar": "Dodaj Gwiazdkę", - "extension": { - "vscode": "Rozszerzenie dla VS Code", - "raycast": "Rozszerzenie dla Raycast", - "alfred": "Rozszerzenie dla Alfred" - }, - "donate": { - "openCollective": "Wesprzyj na Open Collective", - "payPal": "Wesprzyj przez PayPal", - "gumroad": "Wesprzyj przez Gumroad (Visa, Mastercard itp.)" - }, - "twitter": "Twitter", - "devTools": "Przełącz narzędzia deweloperskie", - "links": { - "snippets": "Zbiór Fragmentów Kodu" - } - }, - "file": { - "label": "Plik", - "find": "Znajdź" - }, - "view": { - "label": "Widok", - "sortBy": { - "label": "Sortuj Fragmenty Kodu według", - "dateModified": "Daty Modyfikacji", - "dateCreated": "Daty Utworzenia", - "name": "Nazwy" - }, - "hideSubfolderSnippets": "Ukryj Fragmenty z Podfolderów", - "compactMode": "Tryb Kompaktowy" - }, - "edit": { - "label": "Edytuj", - "undo": "Cofnij", - "redo": "Ponów", - "cut": "Wytnij", - "copy": "Kopiuj", - "paste": "Wklej", - "delete": "Usuń", - "selectAll": "Zaznacz Wszystko" - }, - "editor": { - "label": "Edytor", - "copy": "Skopiuj Fragment do Schowka", - "format": "Formatuj", - "previewCode": "Podgląd Kodu", - "previewScreenshot": "Podgląd Zrzutu Ekranu", - "previewMarkdown": "Podgląd Markdown", - "previewMindmap": "Podgląd Mapy Myśli", - "fontSizeIncrease": "Zwiększ Rozmiar Czcionki", - "fontSizeDecrease": "Zmniejsz Rozmiar Czcionki", - "fontSizeReset": "Resetuj Rozmiar Czcionki" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Tryb Prezentacji", - "preview": "Podgląd" - }, - "history": { - "label": "Historia", - "back": "Wstecz", - "forward": "Dalej" - }, - "devtools": { - "label": "Narzędzia Deweloperskie" - } -} diff --git a/src/main/services/i18n/locales/pl/preferences.json b/src/main/services/i18n/locales/pl/preferences.json deleted file mode 100644 index 27c326f8..00000000 --- a/src/main/services/i18n/locales/pl/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Preferencje", - "storage": { - "label": "Magazyn", - "migrate": "Migruj", - "count": "Liczba" - }, - "editor": { - "label": "Edytor", - "fontSize": "Rozmiar Czcionki", - "fontFamily": "Rodzina Czcionek", - "wrap": { - "label": "Zawijanie", - "wordWrap": "Zawijanie Wyrazów", - "off": "Wyłączone" - }, - "tabSize": "Rozmiar Tabulatora", - "showInvisibles": "Pokaż Niewidoczne", - "highlightLine": "Podświetl Linię", - "highlightGutter": "Podświetl Margines", - "matchBrackets": "Podświetl Nawiasy", - "prettier": { - "label": "Upiększenie", - "trailingComma": { - "label": "Przecinek na Końcu", - "none": "Brak", - "all": "Wszystkie", - "es5": "ES5" - }, - "semi": "Średnik", - "singleQuote": "Cudzysłów pojedynczy" - } - }, - "appearance": { - "label": "Wygląd", - "theme": { - "label": "Motyw", - "light": "Jasny", - "dark": "Ciemny" - } - }, - "language": { - "label": "Język" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Render bloku kodu" - } -} diff --git a/src/main/services/i18n/locales/pl/special.json b/src/main/services/i18n/locales/pl/special.json deleted file mode 100644 index 27964c0e..00000000 --- a/src/main/services/i18n/locales/pl/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Aby korzystać z usług synchronizacji, takich jak iCloud Drive, Google Drive lub Dropbox, po prostu przenieś magazyn do odpowiadających im zsynchronizowanych folderów.", - "migrate": { - "1": "Aby przeprowadzić migrację z massCode v1.0, wybierz folder zawierający pliki bazy danych.", - "2": "Aby przeprowadzić migrację ze SnippetsLab, wybierz plik JSON.", - "3": [ - "Niektóre ograniczenia. Podczas migracji ze SnippetsLab:", - "Wszystkie foldery będą na pierwszym poziomie, ponieważ plik JSON (poniżej wersji 2.1) nie reprezentuje zagnieżdżonych folderów.", - "Fragmenty kodu w nieobsługiwanych językach zostaną ustawione jako domyślny Zwykły Tekst." - ] - }, - "htmlCssPreview": "Dodaj fragmenty kodu w językach HTML i CSS, aby zobaczyć wynik.", - "codeBlockRenderer": [ - "Podczas korzystania z Codemirror, język dla bloku kodu musi odpowiadać jednej z wartości", - "dostępnych języków" - ] - }, - "success": { - "migrate": "Pomyślnie przeprowadzono migrację bazy danych." - }, - "error": { - "folderContainDb": "Folder już zawiera plik \"db.json\".", - "folderNotContainDb": "Folder nie zawiera pliku \"db.json\"." - }, - "unsponsored": "Bez Sponsorów", - "supportMessage": "Cześć, tutaj Anton 👋<br><br>\nDzięki za korzystanie z massCode. Jeśli uważasz, że ta aplikacja jest użyteczna, proszę {{-tagStart}} wesprzyj nas finansowo {{-tagEnd}}. To zmotywuje mnie do kontynuowania pracy nad projektem.", - "snippetsShowcase": "Przykłady Fragmentów Kodu" -} diff --git a/src/main/services/i18n/locales/pt_BR/common.json b/src/main/services/i18n/locales/pt_BR/common.json deleted file mode 100644 index 161cbdc8..00000000 --- a/src/main/services/i18n/locales/pt_BR/common.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "button": { - "moveStorage": "Mover itens armazenados", - "openStorage": "Abrir armazenamento ", - "newStorage": "Novo armazenamento", - "fromMassCodeV1": "Vindo do Masscode v1.0", - "fromSnippetsLab": "Vindo do SnippetsLab", - "confirm": "Confirmar", - "cancel": "Cancelar", - "update": ["Ir para o GitHub", "OK"], - "ok": "OK" - }, - "newFolder": "Nova pasta", - "newSnippet": "Novo snippet", - "newFragment": "Novo fragmento", - "addDescription": "Adicionar descrição", - "addToFavorites": "Adicionar aos favoritos", - "addTag": "Adicionar etiqueta", - "exportToHtml": "Exportar para HTML", - "saveScreenshot": "Salvar captura de tela", - "rename": "Renomear", - "duplicate": "Duplicar", - "delete": "Apagar", - "deleteNow": "Apagar agora", - "defaultLanguage": "Linguagem padrão", - "removeFromFavorites": "Remover dos favoritos", - "emptyTrash": "Esvaziar lixeira", - "close": "Fechar", - "folder": { - "untitled": "Pasta sem título", - "plural": "Pastas" - }, - "snippet": { - "untitled": "snippet sem título", - "plural": "Snippets", - "emptyName": "Digite o nome do snippet", - "selectedMultiple": "{{count}} snippets selecionados", - "noSelected": "Nenhum snippet selecionado" - }, - "fragment": "Fragmento", - "search": "Buscar", - "line": "Linha", - "column": "Coluna", - "sidebar": { - "inbox": "Caixa de entrada", - "favorites": "Favoritos", - "allSnippets": "Todos os snippets", - "trash": "Lixeira", - "untitled": "Pasta sem título", - "folders": "Pastas", - "library": "Biblioteca", - "tags": "Etiquetas" - }, - "darkMode": "Modo escuro", - "background": "Fundo", - "restartApp": "Reiniciar massCode", - "updateAvailable": "Atualização disponível", - "hide": "Ocultar", - "show": "Mostrar", - "collapse-all": "Recolher todos", - "expand-all": "Expandir todos", - "restore": "Restaurar", - "copy-snippet-link": "Copiar link deste snippet", - "set-custom-icon": "Definir ícone personalizado" -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/dialog.json b/src/main/services/i18n/locales/pt_BR/dialog.json deleted file mode 100644 index 1c2601b5..00000000 --- a/src/main/services/i18n/locales/pt_BR/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Tem certeza de que deseja excluir permanentemente {{name}}?", - "deleteConfirmMultipleSnippets": "Tem certeza de que deseja excluir permanentemente {{count}} snippets?", - "noUndo": "Você não pode desfazer esta ação.", - "allSnippetsMoveToTrash": "Todos os snippets nesta pasta serão movidos para a lixeira.", - "deleteTag": "Isso também fará com que todos os snippets tenham essa etiqueta removida.", - "emptyTrash": "Tem certeza de que deseja excluir permanentemente todos os snippets da Lixeira?", - "migrateConfirm": [ - "Tem certeza de que deseja migrar de {{name}}?", - "Durante a migração, a biblioteca atual será substituída." - ], - "createDb": "Por favor escolha outra pasta" -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/menu.json b/src/main/services/i18n/locales/pt_BR/menu.json deleted file mode 100644 index 1db5fa8d..00000000 --- a/src/main/services/i18n/locales/pt_BR/menu.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Preferências", - "update": { - "label": "Procurar por atualizações....", - "message": "Versão {{newVersion}} já está disponível para download.\nSua versão é {{oldVersion}}.", - "button": ["Ir até o Download", "OK"], - "noUpdate": "No momento, não há atualizações disponíveis." - }, - "quit": "Sair do massCode", - "about": "Sobre o massCode", - "hide": "Ocultar o massCode", - "hideOther": "Ocultar outros", - "showAll": "Mostrar tudo" - }, - "help": { - "label": "Ajuda", - "website": "Site", - "documentation": "Documentação", - "viewInGitHub": "Ver no GitHub", - "changeLog": "Registro de mudanças", - "reportIssue": "Reportar um problema", - "giveStar": "Dar estrela", - "extension": { - "vscode": "Extensão do VS code", - "raycast": "Extensão do Raycast", - "alfred": "Extensão do Alfred" - }, - "donate": { - "openCollective": "Doação coletiva", - "payPal": "Doação via PayPal" - }, - "twitter": "Twitter", - "devTools": "Ferramentas do desenvolvedor", - "links": { - "snippets": "Coleção de snippet" - } - }, - "file": { - "label": "Arquivo", - "find": "Buscar" - }, - "view": { - "label": "Visualizar", - "sortBy": { - "label": "Classificar snippes por", - "dateModified": "Data da modificação", - "dateCreated": "Data da criação", - "name": "Nome" - }, - "hideSubfolderSnippets": "Ocultar subpasta", - "compactMode": "Modo compacto" - }, - "edit": { - "label": "Editar", - "undo": "Desfazer", - "redo": "Refazer", - "cut": "Cortar", - "copy": "Copiar", - "paste": "Colar", - "delete": "Apagar", - "selectAll": "Selecionar tudo" - }, - "editor": { - "label": "Editor", - "copy": "Copiar para área de transferencia", - "format": "Formato", - "previewCode": "Pré-visualizar código", - "previewScreenshot": "Pré-visualizar captura de tela", - "previewMarkdown": "Pré-visualizar marcador", - "fontSizeIncrease": "Aumentar tamanho da fonte", - "fontSizeDecrease": "Diminuir tamanho da fonte", - "fontSizeReset": "Redefinir tamanho da fonte" - }, - "markdown": { - "label": "Marcador", - "presentationMode": "Modo de apresentação", - "preview": "Pré-visualizar" - }, - "history": { - "label": "Histórico", - "back": "Voltar", - "forward": "Avançar" - } -} diff --git a/src/main/services/i18n/locales/pt_BR/preferences.json b/src/main/services/i18n/locales/pt_BR/preferences.json deleted file mode 100644 index 899bfec0..00000000 --- a/src/main/services/i18n/locales/pt_BR/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Preferências", - "storage": { - "label": "Armazenar", - "migrate": "Migrar", - "count": "Total" - }, - "editor": { - "label": "Editor", - "fontSize": "Tamanho da fonte", - "fontFamily": "Nome da fonte", - "wrap": { - "label": "Quebra", - "wordWrap": "Quebra de linha", - "off": "Desligado" - }, - "tabSize": "Tamanho da aba", - "showInvisibles": "Mostrar itens ocultos", - "highlightLine": "Destacar linha", - "highlightGutter": "Destacar área em branco", - "matchBrackets": "Corresponder parênteses", - "prettier": { - "label": "Embelezar", - "trailingComma": { - "label": "Vírgula à direita", - "none": "Nenhum", - "all": "Tudo", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Citação única" - } - }, - "appearance": { - "label": "Aparência", - "theme": { - "label": "Tema", - "light": "Claro", - "dark": "Escuro" - } - }, - "language": { - "label": "Idioma" - }, - "markdown": { - "label": "Marcador", - "codeRenderer": "Renderizador de bloco de código" - } -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/special.json b/src/main/services/i18n/locales/pt_BR/special.json deleted file mode 100644 index 52a70d0d..00000000 --- a/src/main/services/i18n/locales/pt_BR/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Para usar serviços de sincronização como iCloud Drive, Google Drive ou Dropbox, basta mover o item armazenado para as pastas sincronizadas correspondentes", - "migrate": { - "1": "Para migrar do massCode versão 1.0 escolha a pasta que contém os arquivos do banco de dados.", - "2": "Para migrar do SnippetsLab escolha o arquivo JSON.", - "3": [ - "Algumas Limitações durante a migração do SnippetsLab:", - "Todas as pastas serão representadas no formato raiz, pois o arquivo JSON (abaixo da versão 2.1) não mostra pastas aninhadas.", - "Snippets com idiomas não suportados serão apresentados em formato texto simples." - ] - }, - "htmlCssPreview": "Adicione fragmentos em linguagens HTML e CSS para visualizar o resultado.", - "codeBlockRenderer": [ - "Ao usar o Codemirror, a linguagem selecionada para o bloco de código deve corresponder a um dos valores da ", - "linguagem atual" - ] - }, - "success": { - "migrate": "Migrado com sucesso." - }, - "error": { - "folderContainDb": "A pasta já contém \"db.json\".", - "folderNotContainDb": "Pasta não contém \"db.json\"." - }, - "unsponsored": "Não patrocinado", - "supportMessage": "Oi, Anton aqui 👋<br><br>\nObrigado por usar o massCode. Se o aplicativo lhe for útil, por favor considere {{-tagStart}} uma doação {{-tagEnd}}. Isso me inspirará a continuar o desenvolvimento do projeto.", - "snippetsShowcase": "Exibição dos snippets" -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/ro_RO/common.json b/src/main/services/i18n/locales/ro_RO/common.json deleted file mode 100644 index 7a266fb5..00000000 --- a/src/main/services/i18n/locales/ro_RO/common.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "button": { - "moveStorage": "Mută stocarea", - "openStorage": "Deschide stocarea", - "newStorage": "Stocare nouă", - "fromMassCodeV1": "Din massCode v1.0", - "fromSnippetsLab": "Din SnippetsLab", - "confirm": "Confirmare", - "cancel": "Anulare", - "update": ["Mergi la GitHub", "În regulă"], - "ok": "În regulă" - }, - "newFolder": "Folder nou", - "newSnippet": "Fragment nou", - "newFragment": "Fragment nou", - "addDescription": "Adăugă o descriere", - "addToFavorites": "Adaugă la favorite", - "addTag": "Adăugă o etichetă", - "exportToHtml": "Export în HTML", - "saveScreenshot": "Salvează captura de ecran", - "rename": "Redenumește", - "duplicate": "Duplică", - "delete": "Șterge", - "deleteNow": "Șterge acum", - "defaultLanguage": "Limba implicită", - "removeFromFavorites": "Elimină din favorite", - "emptyTrash": "Golește coșul de gunoi", - "close": "Închide", - "folder": { - "untitled": "Folder fără titlu", - "plural": "Foldere" - }, - "snippet": { - "untitled": "Fragment fără titlu", - "plural": "Fragmente", - "emptyName": "Introduceți numele fragmentului", - "selectedMultiple": "{{count}} fragmente selectate", - "noSelected": "Niciun fragment selectat" -}, -"fragment": "Fragment", -"search": "Căutare", -"line": "Linie", -"column": "Coloană", -"sidebar": { -"inbox": "Inbox", -"favorites": "Favorite", -"allSnippets": "Toate fragmentele", -"trash": "Coș de gunoi", -"untitled": "Folder fără titlu", -"folders": "Foldere", -"library": "Bibliotecă", -"tags": "Etichete" -}, -"darkMode": "Mod întunecat", -"background": "Fundal", -"restartApp": "Repornește massCode", -"updateAvailable": "Actualizare disponibilă", -"hide": "Ascunde", -"show": "Arătă", -"collapse-all": "Restrânge tot", - "expand-all": "Extinde All", - "restore": "Restaurează", - "copy-snippet-link": "Copiați link-ul fragmentului" -} diff --git a/src/main/services/i18n/locales/ro_RO/dialog.json b/src/main/services/i18n/locales/ro_RO/dialog.json deleted file mode 100644 index 011d7103..00000000 --- a/src/main/services/i18n/locales/ro_RO/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Sigur dorești să ștergi permanent {{name}}?", - "deleteConfirmMultipleSnippets": "Sigur dorești să ștergi permanent {{count}} fragmente selectate?", - "noUndo": "Nu poți anula această acțiune.", - "allSnippetsMoveToTrash": "Toate fragmentele din acest folder vor fi mutate în coșul de gunoi.", - "deleteTag": "Acest lucru va provoca, de asemenea, eliminarea etichetei din toate fragmentele.", - "emptyTrash": "Sigur dorești să ștergi permanent toate fragmentele din Coșul de gunoi?", - "migrateConfirm": [ - "Sigur dorești să migrați din {{name}}?", - "În timpul migrației, biblioteca curentă va fi suprascrisă." - ], - "createDb": "Vă rugăm să selectați un alt folder" -} diff --git a/src/main/services/i18n/locales/ro_RO/menu.json b/src/main/services/i18n/locales/ro_RO/menu.json deleted file mode 100644 index 4f80781e..00000000 --- a/src/main/services/i18n/locales/ro_RO/menu.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Preferințe", - "update": { - "label": "Verificare actualizări....", - "message": "Versiunea {{newVersion}} este acum disponibilă pentru descărcare.\nVersiunea dvs. este {{oldVersion}}.", - "button": ["Du-te la Descărcare", "OK"], - "noUpdate": "Nu sunt disponibile actualizări în acest moment." - }, - "quit": "Ieși din massCode", - "about": "Despre massCode", - "hide": "Ascunde massCode", - "hideOther": "Ascunde celelalte", - "showAll": "Arată tot" - }, - "help": { - "label": "Ajutor", - "website": "Site web", - "documentation": "Documentație", - "viewInGitHub": "Vizualizează în GitHub", - "changeLog": "Jurnalul modificărilor", - "reportIssue": "Raportează o problemă", - "giveStar": "Dați o stea", - "extension": { - "vscode": "Extensie VS Code", - "raycast": "Extensie Raycast", - "alfred": "Extensie Alfred" - }, - "donate": { - "openCollective": "Donează pe Open Collective", - "payPal": "Donează prin PayPal", - "gumroad": "Donează prin Gumroad (Visa, Mastercard, etc.)" - }, - "twitter": "Twitter", - "devTools": "Comutare instrumente pentru dezvoltatori", - "links": { - "snippets": "Colecție de fragmente" - } - }, - "file": { - "label": "Fișier", - "find": "Căutați" - }, - "view": { - "label": "Vizualizare", - "sortBy": { - "label": "Sortează fragmentele după", - "dateModified": "Data modificării", - "dateCreated": "Data creării", - "name": "Nume" - } - }, - "edit": { - "label": "Editare", - "undo": "Anulați", - "redo": "Refaceți", - "cut": "Taie", - "copy": "Copiază", - "paste": "Lipește", - "delete": "Șterge", - "selectAll": "Selectează tot" - }, - "editor": { - "label": "Editor", - "copy": "Copiază fragmentul în clipboard", - "format": "Format", - "previewCode": "Previzualizare cod", - "previewScreenshot": "Previzualizare captură de ecran", - "previewMarkdown": "Previzualizare Markdown", - "fontSizeIncrease": "Creștere mărimea scrisului", - "fontSizeDecrease": "Scade mărimea scrisului", - "fontSizeReset": "Resetează mărimea scrisului" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Mod prezentare", - "preview": "Previzualizare" - }, - "history": { - "label": "Istoric", - "back": "Înapoi", - "forward": "Înainte" - } -} diff --git a/src/main/services/i18n/locales/ro_RO/preferences.json b/src/main/services/i18n/locales/ro_RO/preferences.json deleted file mode 100644 index 35c27e7c..00000000 --- a/src/main/services/i18n/locales/ro_RO/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Preferințe", - "storage": { - "label": "Stocare", - "migrate": "Migrează", - "count": "Numără" - }, - "editor": { - "label": "Editor", - "fontSize": "Mărime scris", - "fontFamily": "Familie scris", - "wrap": { - "label": "Înfășurare", - "wordWrap": "Înfășurare cuvânt", - "off": "Oprit" - }, - "tabSize": "Mărime tab", - "showInvisibles": "Arată invizibile", - "highlightLine": "Evidențiază linia", - "highlightGutter": "Evidențiază marginea", - "matchBrackets": "Potrivește parantezele", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Virgulă finală", - "none": "Niciunul", - "all": "Toate", - "es5": "ES5" - }, - "semi": "Semi", - "singleQuote": "Ghilimele simple" - } - }, - "appearance": { - "label": "Aspect", - "theme": { - "label": "Temă", - "light": "Luminos", - "dark": "Întunecat" - } - }, - "language": { - "label": "Limbă" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Redator de cod" - } -} diff --git a/src/main/services/i18n/locales/ro_RO/special.json b/src/main/services/i18n/locales/ro_RO/special.json deleted file mode 100644 index a1d62618..00000000 --- a/src/main/services/i18n/locales/ro_RO/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Pentru a utiliza servicii de sincronizare precum iCloud Drive, Google Drive sau Dropbox, mutați simplu stocarea în dosarele sincronizate corespunzătoare", - "migrate": { - "1": "Pentru a migra de la massCode v1.0 selectați folderul care conține fișierele bazei de date.", - "2": "Pentru a migra de la SnippetsLab selectați fișierul JSON.", - "3": [ - "Unele limite. În timpul migrației de la SnippetsLab:", - "Toate folderele vor fi de primul nivel, deoarece fișierul JSON (sub v2.1) nu reprezintă foldere imbricate.", - "Fragmentele cu limbaje neacceptate vor fi setate ca text simplu implicit." - ] - }, - "htmlCssPreview": "Adăugați fragmente cu limbajele HTML & CSS pentru a vedea rezultatul.", - "codeBlockRenderer": [ - "Când utilizați Codemirror, limbajul care trebuie setat pentru blocul de cod trebuie să corespundă uneia dintre valorile", - "limbajelor" - ] - }, - "success": { - "migrate": "DB migrat cu succes." - }, - "error": { - "folderContainDb": "Folderul conține deja \"db.json\".", - "folderNotContainDb": "Folderul nu conține \"db.json\"." - }, - "unsponsored": "Nesponsorizat", - "supportMessage": "Salut, sunt Anton 👋<br><br>\nVă mulțumesc pentru utilizarea massCode. Dacă găsiți această aplicație utilă, vă rugăm să {{-tagStart}} donați {{-tagEnd}}. Mă va inspira să continui dezvoltarea proiectului.", - "snippetsShowcase": "Prezentare fragmente" -} diff --git a/src/main/services/i18n/locales/ru/common.json b/src/main/services/i18n/locales/ru/common.json deleted file mode 100644 index bf6fd5c8..00000000 --- a/src/main/services/i18n/locales/ru/common.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "button": { - "moveStorage": "Переместить", - "openStorage": "Открыть", - "newStorage": "Создать новое", - "reloadStorage": "Перезагрузить", - "fromMassCodeV1": "Из massCode v1.0", - "fromSnippetsLab": "Из SnippetsLab", - "confirm": "Подтвердить", - "cancel": "Отмена", - "ok": "Хорошо", - "clear": "Очистить", - "copy": "Копировать", - "sort": "Сортировать", - "revers": "Реверс", - "generate": "Генерировать", - "saveAs": "Сохранить как", - "zoomIn": "Увеличить", - "zoomOut": "Уменьшить", - "fit": "Подогнать" - }, - "newFolder": "Новая папка", - "newSnippet": "Новый сниппет", - "newFragment": "Новый фрагмент", - "addDescription": "Добавить описание", - "addToFavorites": "Добавить в избранное", - "addTag": "Добавить тег", - "exportToHtml": "Экспорт в HTML", - "saveScreenshot": "Сохранить скриншот", - "rename": "Переименовать", - "duplicate": "Дубликат", - "delete": "Удалить", - "deleteNow": "Удалить сейчас", - "defaultLanguage": "Языка по умолчанию ", - "removeFromFavorites": "Удалить из избранного", - "emptyTrash": "Очисть корзину", - "close": "Закрыть", - "folder": { - "untitled": "Новая папка", - "plural": "Папки" - }, - "snippet": { - "untitled": "Новый сниппет", - "plural": "Сниппетов", - "emptyName": "Введите имя сниппета", - "selectedMultiple": "{{count}} сниппетов выбрано", - "noSelected": "Не выбрано ни одного сниппета" - }, - "fragment": "Фрагмент", - "search": "Поиск", - "line": "Строка", - "column": "Колонка", - "sidebar": { - "inbox": "Входящие", - "favorites": "Избранное", - "allSnippets": "Все сниппеты", - "trash": "Корзина", - "untitled": "Новая папка", - "folders": "Папки", - "library": "Библиотека", - "tags": "Теги" - }, - "darkMode": "Темный режим", - "background": "Фон", - "restartApp": "Перезагрузить massCode", - "updateAvailable": "Доступно обновление", - "hide": "Hide", - "show": "Show", - "collapse-all": "Закрыть все", - "expand-all": "Открыть все", - "restore": "Восстановить", - "copy-snippet-link": "Скопировать ссылку", - "set-custom-icon": "Установить иконку" -} diff --git a/src/main/services/i18n/locales/ru/devtools.json b/src/main/services/i18n/locales/ru/devtools.json deleted file mode 100644 index 4cf89600..00000000 --- a/src/main/services/i18n/locales/ru/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Входная строка", - "outputString": "Выходная строка", - "inputUrl": "Входной URL", - "outputUrl": "Выходной URL", - "parsedUrl": "Разобранный URL", - "splitQueryString": "Разбивка строки запроса", - "key": "Ключ", - "value": "Значение", - "component": "Компонент", - "result": "Результат", - "secretKey": "Секретный ключ", - "algorithm": "Алгоритм", - "version": "Версия", - "amount": "Количество", - "type": "Тип", - "length": "Длина", - "options": "Опции", - "numbers": "Цифры", - "symbols": "Символы", - "lowercase": "Нижний регистр", - "uppercase": "Верхний регистр" - }, - "textTools": { - "label": "Инструменты для текста", - "caseConverter": "Конвертер регистра", - "urlParser": "Парсер URL", - "slugGenerator": "Slug генератор", - "sortLines": "Сортировка строк" - }, - "crypto": { - "label": "Криптография / Безопасность", - "hashGenerator": "Hash генератор", - "hmacGenerator": "HMAC генератор", - "passGenerator": "Генератор паролей", - "uuidGenerator": "UUID генератор" - }, - "encodeDecode": { - "label": "Энкодеры / Декодеры", - "url": "URL Энкодер / Декодер", - "base64": "Base64 Энкодер / Декодер" - } -} diff --git a/src/main/services/i18n/locales/ru/dialog.json b/src/main/services/i18n/locales/ru/dialog.json deleted file mode 100644 index d5ffe907..00000000 --- a/src/main/services/i18n/locales/ru/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Вы уверены что хотите безвозвратно удалить {{name}}?", - "deleteConfirmMultipleSnippets": "Вы уверены что хотите безвозвратно удалить {{count}} выбранные сиппеты?", - "noUndo": "Это действие нельзя отменить.", - "allSnippetsMoveToTrash": "Все сниппеты в этой папки будут перемещены в корзину.", - "deleteTag": "Это так же коснется всех сниппетов, которые содержат этот тег.", - "emptyTrash": "Вы уверены что хотите безвозвратно очистить Корзину?", - "migrateConfirm": [ - "Вы уверены что хотите мигрировать {{name}}?", - "Во время миграции, текущая библиотека буде перезаписана." - ], - "createDb": "Пожалуйста выберите другую папку" -} diff --git a/src/main/services/i18n/locales/ru/menu.json b/src/main/services/i18n/locales/ru/menu.json deleted file mode 100644 index ad7f9567..00000000 --- a/src/main/services/i18n/locales/ru/menu.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Настройки", - "update": { - "label": "Проверить обновления....", - "message": "Версия {{newVersion}} доступна для скачивания.\nТекущая версия {{oldVersion}}.", - "button": ["Перейти для загрузки", "OK"], - "noUpdate": "В настоящее время нет доступных обновлений." - }, - "quit": "Выйти из massCode", - "about": "О massCode", - "hide": "Скрыть massCode", - "hideOther": "Скрыть остальные", - "showAll": "Показать все" - }, - "help": { - "label": "Помощь", - "website": "Сайт", - "documentation": "Документация", - "viewInGitHub": "Просмотреть в GitHub", - "changeLog": "Список изменений", - "reportIssue": "Открыть Issue", - "giveStar": "Поставить звезду", - "extension": { - "vscode": "VS Code расширение", - "raycast": "Raycast расширение", - "alfred": "Alfred расширение" - }, - "donate": { - "openCollective": "Пожертвовать через Open Collective", - "payPal": "Пожертвовать через PayPal", - "gumroad": "Пожертвовать через Gumroad (Visa, Mastercard, и тд.)" - }, - "twitter": "Twitter", - "devTools": "Открыть инструменты разработчика", - "links": { - "snippets": "Коллекция сниппетов" - } - }, - "file": { - "label": "Файл", - "find": "Найти" - }, - "view": { - "label": "Вид", - "sortBy": { - "label": "Сортировать сниппеты по", - "dateModified": "Дате модификации", - "dateCreated": "Дате создания", - "name": "Имени" - }, - "hideSubfolderSnippets": "Скрыть сниппеты в подпапках", - "compactMode": "Компактный режим" - }, - "edit": { - "label": "Изменить", - "undo": "Отмена", - "redo": "Повторить", - "cut": "Вырезать", - "copy": "Скопировать", - "paste": "Вставить", - "delete": "Удалить", - "selectAll": "Выделить все" - }, - "editor": { - "label": "Редактор", - "copy": "Скопировать сниппет в буфер", - "format": "Форматировать", - "previewCode": "Просмотр результата HTML/CSS", - "previewScreenshot": "Просмотр скриншота", - "previewMarkdown": "Просмотр Markdown", - "previewMindmap": "Просмотр Mindmap", - "fontSizeIncrease": "Увеличить шрифт", - "fontSizeDecrease": "Уменьшить шрифт", - "fontSizeReset": "Сбросить размер шрифта" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Режим презентации", - "preview": "Просмотр Markdown" - }, - "history": { - "label": "История", - "back": "Назад", - "forward": "Вперед" - } -} diff --git a/src/main/services/i18n/locales/ru/preferences.json b/src/main/services/i18n/locales/ru/preferences.json deleted file mode 100644 index 531dc81b..00000000 --- a/src/main/services/i18n/locales/ru/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Настройки", - "storage": { - "label": "Хранилище", - "migrate": "Миграция", - "count": "Количество" - }, - "editor": { - "label": "Редактор", - "fontSize": "Размер шрифта", - "fontFamily": "Семейство шрифтов", - "wrap": { - "label": "Перенос", - "wordWrap": "Перенос по словам", - "off": "Отключить" - }, - "tabSize": "Размер отступа", - "showInvisibles": "Показ невидимых символов", - "highlightLine": "Подсветка строки", - "highlightGutter": "Подсветка gutter", - "matchBrackets": "Подсветка скобок", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Запятая в конце", - "none": "Нет", - "all": "Все", - "es5": "ES5" - }, - "semi": "Точка с запятой", - "singleQuote": "Одинарные кавычки" - } - }, - "appearance": { - "label": "Внешний вид", - "theme": { - "label": "Тема", - "light": "Светлая", - "dark": "Темная" - } - }, - "language": { - "label": "Язык" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Рендерер блоков кода" - } -} diff --git a/src/main/services/i18n/locales/ru/special.json b/src/main/services/i18n/locales/ru/special.json deleted file mode 100644 index 6db12bcf..00000000 --- a/src/main/services/i18n/locales/ru/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Чтобы использовать такие службы синхронизации, как iCloud Drive, Google Drive или Dropbox, просто переместите хранилище в соответствующие синхронизированные папки.", - "migrate": { - "1": "Для миграции с massCode v1.0 выберите папку, содержащую файлы базы данных.", - "2": "Для миграции из SnippetsLab выберите файл JSON.", - "3": [ - "Некоторые ограничения. Во время миграции с SnippetsLab:", - "Все папки будут первого уровня, поскольку файл JSON (ниже v2.1) не представляет вложенные папки.", - "Сниппеты с неподдерживаемыми языками будут установлены на стандартный простой текст." - ] - }, - "htmlCssPreview": "Добавьте фрагменты с языками HTML и CSS для просмотра результата.", - "codeBlockRenderer": [ - "При использовании Codemirror, устанавливаемый язык для блока кода должен соответствовать одному из значений", - "языков" - ] - }, - "success": { - "migrate": "БД успешно перенесена." - }, - "error": { - "folderContainDb": "Папка уже содержит \"db.json\".", - "folderNotContainDb": "Папка не содержит \"db.json\"." - }, - "unsponsored": "Неспонсируемое", - "supportMessage": "Привет, это Антон 👋<br><br>\nСпасибо что используете massCode. Если приложение оказалось для вас полезным, пожалуйста {{-tagStart}} поддержите проект {{-tagEnd}}. Это вдохновит меня для продолжение работы над проектом.", - "snippetsShowcase": "Коллекция сниппетов" -} diff --git a/src/main/services/i18n/locales/tr/common.json b/src/main/services/i18n/locales/tr/common.json deleted file mode 100644 index 539ff06b..00000000 --- a/src/main/services/i18n/locales/tr/common.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "button": { - "moveStorage": "Depo Taşı", - "openStorage": "Depoyu Aç", - "newStorage": "Yeni Depo", - "reloadStorage": "Depoyu Yeniden Yükle", - "fromMassCodeV1": "MassCode v1.0'dan", - "fromSnippetsLab": "SnippetsLab'dan", - "confirm": "Onayla", - "cancel": "İptal", - "update": ["GitHub'a Git", "Tamam"], - "ok": "Tamam", - "clear": "Temizle", - "copy": "Kopyala", - "sort": "Sırala", - "revers": "Ters Çevir", - "generate": "Oluştur" - }, - "newFolder": "Yeni Klasör", - "newSnippet": "Yeni Kod Parçası", - "newFragment": "Yeni Bölüm", - "addDescription": "Açıklama Ekle", - "addToFavorites": "Favorilere Ekle", - "addTag": "Etiket Ekle", - "exportToHtml": "HTML'ye Aktar", - "saveScreenshot": "Ekran Görüntüsünü Kaydet", - "rename": "Yeniden Adlandır", - "duplicate": "Kopyala", - "delete": "Sil", - "deleteNow": "Şimdi Sil", - "defaultLanguage": "Varsayılan Dil", - "removeFromFavorites": "Favorilerden Kaldır", - "emptyTrash": "Çöp Kutusunu Boşalt", - "close": "Kapat", - "folder": { - "untitled": "Başlıksız Klasör", - "plural": "Klasörler" - }, - "snippet": { - "untitled": "Başlıksız Kod Parçası", - "plural": "Kod Parçaları", - "emptyName": "Kod parçası adını yazın", - "selectedMultiple": "{{count}} Kod Parçası Seçildi", - "noSelected": "Kod Parçası Seçilmedi" - }, - "fragment": "Bölüm", - "search": "Ara", - "line": "Satır", - "column": "Sütun", - "sidebar": { - "inbox": "Gelen Kutusu", - "favorites": "Favoriler", - "allSnippets": "Tüm Kod Parçaları", - "trash": "Çöp Kutusu", - "untitled": "Başlıksız Klasör", - "folders": "Klasörler", - "library": "Kütüphane", - "tags": "Etiketler" - }, - "darkMode": "Karanlık Mod", - "background": "Arka Plan", - "restartApp": "massCode'u Yeniden Başlat", - "updateAvailable": "Güncelleme Mevcut", - "hide": "Gizle", - "show": "Göster", - "collapse-all": "Hepsini Daralt", - "expand-all": "Hepsini Genişlet", - "restore": "Geri Yükle", - "copy-snippet-link": "Kod Parçası Bağlantısını Kopyala", - "set-custom-icon": "Özel Simge Ayarla" -} \ No newline at end of file diff --git a/src/main/services/i18n/locales/tr/devtools.json b/src/main/services/i18n/locales/tr/devtools.json deleted file mode 100644 index 66fb29bf..00000000 --- a/src/main/services/i18n/locales/tr/devtools.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "form": { - "inputString": "Giriş Metni", - "outputString": "Çıkış Metni", - "inputUrl": "Giriş URL'si", - "outputUrl": "Çıkış URL'si", - "parsedUrl": "Ayrılmış URL", - "splitQueryString": "Sorgu Dizisi Ayır", - "key": "Anahtar", - "value": "Değer", - "component": "Komponent", - "result": "Sonuç", - "secretKey": "Gizli Anahtar", - "algorithm": "Algoritma", - "version": "Sürüm", - "amount": "Miktar", - "type": "Tür", - "length": "Uzunluk", - "options": "Seçenekler", - "numbers": "Sayılar", - "symbols": "Semboller", - "lowercase": "Küçük Harf", - "uppercase": "Büyük Harf" - }, - "textTools": { - "label": "Metin Araçları", - "caseConverter": "Harf Dönüştürücü", - "urlParser": "URL Ayrıştırıcı", - "slugGenerator": "Slug Oluşturucu", - "sortLines": "Satırları Sırala" - }, - "crypto": { - "label": "Kriptografi / Güvenlik", - "hashGenerator": "Hash Oluşturucu", - "hmacGenerator": "HMAC Oluşturucu", - "passGenerator": "Şifre Oluşturucu", - "uuidGenerator": "UUID Oluşturucu" - }, - "encodeDecode": { - "label": "Kodlayıcılar / Kod Çözücüler", - "url": "URL Kodlayıcı / Çözücü", - "base64": "Base64 Kodlayıcı / Çözücü" - } -} diff --git a/src/main/services/i18n/locales/tr/dialog.json b/src/main/services/i18n/locales/tr/dialog.json deleted file mode 100644 index 57a60e76..00000000 --- a/src/main/services/i18n/locales/tr/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "{{name}} adlı öğeyi kalıcı olarak silmek istediğinizden emin misiniz?", - "deleteConfirmMultipleSnippets": "{{count}} seçili kod parçasını kalıcı olarak silmek istediğinizden emin misiniz?", - "noUndo": "Bu işlemi geri alamazsınız.", - "allSnippetsMoveToTrash": "Bu klasördeki tüm kod parçaları çöp kutusuna taşınacaktır.", - "deleteTag": "Bu aynı zamanda tüm kod parçalarının bu etiketin kaldırılmasına neden olacaktır.", - "emptyTrash": "Çöp kutusundaki tüm kod parçalarını kalıcı olarak silmek istediğinizden emin misiniz?", - "migrateConfirm": [ - "{{name}} adından geçiş yapmak istediğinizden emin misiniz?", - "Geçiş sırasında mevcut kütüphane üzerine yazılacaktır." - ], - "createDb": "Lütfen başka bir klasör seçin." -} diff --git a/src/main/services/i18n/locales/tr/menu.json b/src/main/services/i18n/locales/tr/menu.json deleted file mode 100644 index 5e871a12..00000000 --- a/src/main/services/i18n/locales/tr/menu.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Tercihler", - "update": { - "label": "Güncellemeleri Kontrol Et....", - "message": "Sürüm {{newVersion}} şimdi indirilebilir durumda.\nMevcut sürümünüz {{oldVersion}}.", - "button": ["İndirmeye Git", "Tamam"], - "noUpdate": "Şu anda mevcut güncelleme yok." - }, - "quit": "massCode'u Kapat", - "about": "massCode Hakkında", - "hide": "massCode'u Gizle", - "hideOther": "Diğerlerini Gizle", - "showAll": "Hepsini Göster" - }, - "help": { - "label": "Yardım", - "website": "Web Sitesi", - "documentation": "Belgeler", - "viewInGitHub": "GitHub'da Görüntüle", - "changeLog": "Değişiklik Günlüğü", - "reportIssue": "Sorun Bildir", - "giveStar": "Yıldız Ver", - "extension": { - "vscode": "VS Code Eklentisi", - "raycast": "Raycast Eklentisi", - "alfred": "Alfred Eklentisi" - }, - "donate": { - "openCollective": "Open Collective Üzerinden Bağış Yap", - "payPal": "PayPal ile Bağış Yap", - "gumroad": "Gumroad Üzerinden Bağış Yap (Visa, Mastercard, vb.)" - }, - "twitter": "Twitter", - "devTools": "Geliştirici Araçlarını Aç/Kapat", - "links": { - "snippets": "Kod Parçaları Koleksiyonu" - } - }, - "file": { - "label": "Dosya", - "find": "Ara" - }, - "view": { - "label": "Görünüm", - "sortBy": { - "label": "Kod Parçalarını Sırala", - "dateModified": "Değiştirilme Tarihi", - "dateCreated": "Oluşturma Tarihi", - "name": "Ad" - }, - "hideSubfolderSnippets": "Alt Klasör Kod Parçalarını Gizle", - "compactMode": "Kompakt Mod" - }, - "edit": { - "label": "Düzenle", - "undo": "Geri Al", - "redo": "Yinele", - "cut": "Kes", - "copy": "Kopyala", - "paste": "Yapıştır", - "delete": "Sil", - "selectAll": "Tümünü Seç" - }, - "editor": { - "label": "Editör", - "copy": "Kod Parçasını Panoya Kopyala", - "format": "Biçimlendir", - "previewCode": "Kodu Önizle", - "previewScreenshot": "Ekran Görüntüsünü Önizle", - "previewMarkdown": "Markdown'u Önizle", - "fontSizeIncrease": "Yazı Boyutunu Büyüt", - "fontSizeDecrease": "Yazı Boyutunu Küçült", - "fontSizeReset": "Yazı Boyutunu Sıfırla" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Sunum Modu", - "preview": "Önizleme" - }, - "history": { - "label": "Geçmiş", - "back": "Geri", - "forward": "İleri" - }, - "devtools": { - "label": "Geliştirici Araçları" - } -} diff --git a/src/main/services/i18n/locales/tr/preferences.json b/src/main/services/i18n/locales/tr/preferences.json deleted file mode 100644 index 83b6f273..00000000 --- a/src/main/services/i18n/locales/tr/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Tercihler", - "storage": { - "label": "Depolama", - "migrate": "Göç Et", - "count": "Say" - }, - "editor": { - "label": "Editör", - "fontSize": "Yazı Boyutu", - "fontFamily": "Yazı Tipi", - "wrap": { - "label": "Satır Sarması", - "wordWrap": "Kelime Sarması", - "off": "Kapat" - }, - "tabSize": "Sekme Boyutu", - "showInvisibles": "Görünmezleri Göster", - "highlightLine": "Satırı Vurgula", - "highlightGutter": "Sütunu Vurgula", - "matchBrackets": "Parantezleri Eşleştir", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Son Virgül", - "none": "Hiçbiri", - "all": "Tümü", - "es5": "ES5" - }, - "semi": "Noktalı Virgül", - "singleQuote": "Tek Tırnak" - } - }, - "appearance": { - "label": "Görünüm", - "theme": { - "label": "Tema", - "light": "Açık", - "dark": "Koyu" - } - }, - "language": { - "label": "Dil" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Kod Bloğu Görüntüleyici" - } -} diff --git a/src/main/services/i18n/locales/tr/special.json b/src/main/services/i18n/locales/tr/special.json deleted file mode 100644 index f9631ad4..00000000 --- a/src/main/services/i18n/locales/tr/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "iCloud Drive, Google Drive veya Dropbox gibi senkronizasyon hizmetlerini kullanmak için, depoyu ilgili senkronize edilmiş klasörlere taşıyın.", - "migrate": { - "1": "massCode v1.0'dan göç etmek için veritabanı dosyalarını içeren klasörü seçin.", - "2": "SnippetsLab'dan göç etmek için JSON dosyasını seçin.", - "3": [ - "Bazı Sınırlamalar. SnippetsLab'dan göç sırasında:", - "Tüm klasörler ilk seviye olacak çünkü JSON dosyası (v2.1 altında) iç içe geçmiş klasörleri temsil etmez.", - "Desteklenmeyen dillerle ilgili kod parçaları varsayılan Düz Metin'e ayarlanır." - ] - }, - "htmlCssPreview": "Sonucu görmek için HTML ve CSS dilleri ile fragmanlar ekleyin.", - "codeBlockRenderer": [ - "Codemirror kullanırken, kod bloğu için ayarlanacak dil,", - "dillerin değerlerinden birine karşılık gelmelidir." - ] - }, - "success": { - "migrate": "Veritabanı başarıyla göç edildi." - }, - "error": { - "folderContainDb": "Klasör zaten \"db.json\" içeriyor.", - "folderNotContainDb": "Klasör \"db.json\" içermiyor." - }, - "unsponsored": "Sponsorlu Değil", - "supportMessage": "Merhaba, Anton burada 👋<br><br>\nmassCode'u kullanımınız için teşekkür ederim. Eğer bu uygulamayı faydalı buluyorsanız, lütfen {{-tagStart}} bağış yapın {{-tagEnd}}. Bu, projenin geliştirilmesine devam etmemi teşvik edecektir.", - "snippetsShowcase": "Kod Parçaları Vitrini" -} diff --git a/src/main/services/i18n/locales/uk_UA/common.json b/src/main/services/i18n/locales/uk_UA/common.json deleted file mode 100644 index c3b659e7..00000000 --- a/src/main/services/i18n/locales/uk_UA/common.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "button": { - "moveStorage": "Перемістити", - "openStorage": "Відкрити", - "newStorage": "Створити нове", - "fromMassCodeV1": "massCode v1.0", - "fromSnippetsLab": "SnippetsLab", - "confirm": "Підтвердити", - "cancel": "Скасувати", - "ok": "ОК" - }, - "newFolder": "Нова папка", - "newSnippet": "Новий сніпет", - "newFragment": "Новий фрагмент", - "addDescription": "Додати опис", - "addToFavorites": "Додати в обране", - "addTag": "Додати тег", - "exportToHtml": "Експорт в HTML", - "saveScreenshot": "Зберігти скриншот", - "rename": "Перейменувати", - "duplicate": "Дублікат", - "delete": "Видалити", - "deleteNow": "Видалити зараз", - "defaultLanguage": "Мова за замовчуванням", - "removeFromFavorites": "Видалити з обраних", - "emptyTrash": "Очистити Смітник", - "close": "Закрити", - "folder": { - "untitled": "Нова папка", - "plural": "Папки" - }, - "snippet": { - "untitled": "Новий сніпет", - "plural": "Сніпитів", - "emptyName": "Введіть імʼя сніпета", - "selectedMultiple": "{{count}} сніпетів обрано", - "noSelected": "Не обрано жодного сніпета" - }, - "fragment": "Фрагмент", - "search": "Пошук", - "line": "Рядок", - "column": "Колонка", - "sidebar": { - "inbox": "Вхідні", - "favorites": "Обрані", - "allSnippets": "Всі сніпети", - "trash": "Смітник", - "untitled": "Нова папка", - "folders": "Папки", - "library": "Бібліотека", - "tags": "Теги" - }, - "darkMode": "Темний режим", - "background": "Фон", - "restartApp": "Перезавантажити massCode", - "updateAvailable": "Доступне оновлення", - "hide": "Сховати", - "show": "Показати", - "collapse-all": "Закрити все", - "expand-all": "Відкрити все", - "restore": "Відновити", - "copy-snippet-link": "Скопіювати посилання" -} diff --git a/src/main/services/i18n/locales/uk_UA/dialog.json b/src/main/services/i18n/locales/uk_UA/dialog.json deleted file mode 100644 index b98fe5a9..00000000 --- a/src/main/services/i18n/locales/uk_UA/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "Ви впевнені, що хочете остаточно видалити {{name}}?", - "deleteConfirmMultipleSnippets": "Ви впевнені, що хочете остаточно видалити {{count}} обраних сніпетів?", - "noUndo": "Цю дію неможливо скасувати.", - "allSnippetsMoveToTrash": "Усі сніпети у цій папці буде переміщено до Смітника.", - "deleteTag": "Це так само стосується всіх сніпетів, що містять цей тег.", - "emptyTrash": "Ви впевнені, що хочете очистити Смітник?", - "migrateConfirm": [ - "Ви впевнені, що хочете мігрувати {{name}}?", - "Під час міграції, поточна бібліотека буде перезаписана." - ], - "createDb": "Будь ласка, оберіть іншу папку." -} diff --git a/src/main/services/i18n/locales/uk_UA/menu.json b/src/main/services/i18n/locales/uk_UA/menu.json deleted file mode 100644 index d1764f16..00000000 --- a/src/main/services/i18n/locales/uk_UA/menu.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "Параметри", - "update": { - "label": "Перевірити оновлення...", - "message": "Версія {{newVersion}} доступна для скачування.\nПоточна версія {{oldVersion}}.", - "button": ["Перейти до завантаження", "OK"], - "noUpdate": "Немає доступних оновлень." - }, - "quit": "Вийти з massCode", - "about": "Про massCode", - "hide": "Сховати massCode", - "hideOther": "Сховати інші", - "showAll": "Показати всі" - }, - "help": { - "label": "Підтримка", - "website": "Сайт", - "documentation": "Документація", - "viewInGitHub": "Переглянути у GitHub", - "changeLog": "Список змін", - "reportIssue": "Відкрити Issue", - "giveStar": "Поставити зірку", - "extension": { - "vscode": "VS Code розширення", - "raycast": "Raycast розширення", - "alfred": "Alfred розширення" - }, - "donate": { - "openCollective": "Пожертвувати через Open Collective", - "payPal": "Пожертвувати через PayPal", - "gumroad": "Пожертвувати через Gumroad (Visa, Mastercard, и тд.)" - }, - "twitter": "Twitter", - "devTools": "Відкрити інструменти розробника", - "links": { - "snippets": "Колекція сніпетів" - } - }, - "file": { - "label": "Файл", - "find": "Пошук" - }, - "view": { - "label": "Вид", - "sortBy": { - "label": "Сортувати сніпети за", - "dateModified": "Дата модифікації", - "dateCreated": "Дата створення", - "name": "Назва" - } - }, - "edit": { - "label": "Змінити", - "undo": "Скасувати", - "redo": "Повторити", - "cut": "Вирізати", - "copy": "Скопіювати", - "paste": "Вставити", - "delete": "Видалити", - "selectAll": "Вибрати все" - }, - "editor": { - "label": "Редактор", - "copy": "Скопіювати сніпет у буфер", - "format": "Форматувати", - "previewCode": "Перегляд результату HTML/CSS", - "previewScreenshot": "Перегляд скриншота", - "fontSizeIncrease": "Збільшити шрифт", - "fontSizeDecrease": "Зменшити шрифт", - "fontSizeReset": "Скинути розмір шрифта" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "Режим презентації", - "preview": "Перегляд Markdown" - }, - "history": { - "label": "Історія", - "back": "Назад", - "forward": "Вперед" - } -} diff --git a/src/main/services/i18n/locales/uk_UA/preferences.json b/src/main/services/i18n/locales/uk_UA/preferences.json deleted file mode 100644 index e766b3e0..00000000 --- a/src/main/services/i18n/locales/uk_UA/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Параметри", - "storage": { - "label": "Сховище", - "migrate": "Міграція", - "count": "Кількість" - }, - "editor": { - "label": "Редактор", - "fontSize": "Розмір шрифта", - "fontFamily": "Сімейство шрифтів", - "wrap": { - "label": "Перенесення", - "wordWrap": "Перенесення по словах", - "off": "Вимкнути" - }, - "tabSize": "Розмір відступу", - "showInvisibles": "Показ невидимих символів", - "highlightLine": "Підсвітка рядку", - "highlightGutter": "Підсвітка gutter", - "matchBrackets": "Підсвітка дужок", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "Кома у кінці", - "none": "Ні", - "all": "Усі", - "es5": "ES5" - }, - "semi": "Крапка з комою", - "singleQuote": "Одинарні лапки" - } - }, - "appearance": { - "label": "Зовнішній вид", - "theme": { - "label": "Вигляд", - "light": "Світла", - "dark": "Темна" - } - }, - "language": { - "label": "Мова" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "Рендерер блоків коду" - } -} diff --git a/src/main/services/i18n/locales/uk_UA/special.json b/src/main/services/i18n/locales/uk_UA/special.json deleted file mode 100644 index 4e77693a..00000000 --- a/src/main/services/i18n/locales/uk_UA/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "Щоб використовувати такі служби синхронізації, як iCloud Drive, Google Drive або Dropbox, просто перенесіть сховище у відповідні синхронізовані папки.", - "migrate": { - "1": "Для міграції з massCode v1.0 оберіть папку, що містить файли баз даних.", - "2": "Для міграції з SnippetsLab оберіть файл JSON.", - "3": [ - "Деякі обмеження. Під час міграції з SnippetsLab:", - "Усі папки будуть першого рівня, оскільки файл JSON (нижче v2.1) не представляє підтеки.", - "Сніпети з непідтримуваними мовами будуть встановлені на стандартний простий текст." - ] - }, - "htmlCssPreview": "Додайте фрагменти з HTML та CSS для перегляду результатів.", - "codeBlockRenderer": [ - "При використанні Codemirror, встановлена мова для блоку коду повинна відповідати одній із зазначених", - "мов" - ] - }, - "success": { - "migrate": "БД успішно перенесено." - }, - "error": { - "folderContainDb": "Папка вже містить \"db.json\".", - "folderNotContainDb": "Папка не містить \"db.json\"." - }, - "unsponsored": "Не спонсороване", - "supportMessage": "Привіт, це Антон 👋<br><br>\nДякую, що користуєтесь massCode. Якщо додаток приніс вам користь, будь ласка {{-tagStart}} підтримайте проєкт {{-tagEnd}}. Це надихне мене для продовження роботи над проєктом.", - "snippetsShowcase": "Колекція сніпетів" -} diff --git a/src/main/services/i18n/locales/zh_CN/common.json b/src/main/services/i18n/locales/zh_CN/common.json deleted file mode 100644 index ce0313cc..00000000 --- a/src/main/services/i18n/locales/zh_CN/common.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "button": { - "moveStorage": "更改存储路径", - "openStorage": "打开现有存储", - "newStorage": "创建新的存储", - "fromMassCodeV1": "来自 massCode v1.0", - "fromSnippetsLab": "来自 SnippetsLab", - "confirm": "确认", - "cancel": "取消", - "update": ["前往 GitHub", "OK"], - "ok": "OK" - }, - "newFolder": "新建文件夹", - "newSnippet": "新建代码片段", - "newFragment": "新建子片段", - "addDescription": "添加描述", - "addToFavorites": "添加至收藏夹", - "addTag": "添加标签", - "exportToHtml": "导出 HTML 文件", - "saveScreenshot": "保存截图", - "rename": "重命名", - "duplicate": "创建副本", - "delete": "删除", - "deleteNow": "立即删除", - "defaultLanguage": "默认语言", - "removeFromFavorites": "从收藏夹移除", - "emptyTrash": "清空回收站", - "close": "关闭", - "folder": { - "untitled": "未命名文件夹", - "plural": "文件夹" - }, - "snippet": { - "untitled": "未命名代码片段", - "plural": "代码片段", - "emptyName": "请输入该代码片段名称", - "selectedMultiple": "已选中 {{count}} 个代码片段", - "noSelected": "未选中代码片段" - }, - "fragment": "子片段", - "search": "搜索", - "line": "行", - "column": "列", - "sidebar": { - "inbox": "暂存区", - "favorites": "收藏夹", - "allSnippets": "所有的", - "trash": "回收站", - "untitled": "未命名文件夹", - "folders": "文件夹", - "library": "库", - "tags": "标签" - }, - "darkMode": "深色模式", - "background": "背景", - "restartApp": "重启 massCode", - "updateAvailable": "存在新版本", - "hide": "隐藏", - "show": "显示", - "collapse-all": "全部展开", - "expand-all": "全部折叠", - "restore": "还原", - "copy-snippet-link": "复制链接" -} diff --git a/src/main/services/i18n/locales/zh_CN/dialog.json b/src/main/services/i18n/locales/zh_CN/dialog.json deleted file mode 100644 index a391e728..00000000 --- a/src/main/services/i18n/locales/zh_CN/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "你是否确定要永久删除 {{name}} ?", - "deleteConfirmMultipleSnippets": "你是否确定要永久删除 {{count}} 个选中的代码片段?", - "noUndo": "本操作将无法撤销。", - "allSnippetsMoveToTrash": "本文件夹内的所有代码片段将被移动至回收站。", - "deleteTag": "将会从所有拥有该标签的代码片段中删除该标签。", - "emptyTrash": "你是否确定要永久删除回收站内的所有代码片段?", - "migrateConfirm": [ - "你是否确定要从 {{name}} 迁移数据?", - "在迁移过程中,当前的库将被覆盖。" - ], - "createDb": "请选择其他文件夹" -} diff --git a/src/main/services/i18n/locales/zh_CN/menu.json b/src/main/services/i18n/locales/zh_CN/menu.json deleted file mode 100644 index f19a46cc..00000000 --- a/src/main/services/i18n/locales/zh_CN/menu.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "首选项", - "update": { - "label": "检查更新…", - "message": "新版本 {{newVersion}} 现在已经可以下载。\n现在的版本是 {{oldVersion}} 。", - "button": ["前往下载", "OK"], - "noUpdate": "当前没有可用的更新。" - }, - "quit": "退出 massCode", - "about": "关于 massCode", - "hide": "最小化 massCode", - "hideOther": "最小化其它窗口", - "showAll": "显示所有窗口" - }, - "help": { - "label": "帮助", - "website": "访问官网", - "documentation": "访问文档", - "viewInGitHub": "访问 GitHub", - "changeLog": "更新日志", - "reportIssue": "提交 Issue", - "giveStar": "给个 Star", - "extension": { - "vscode": "VS Code 插件", - "raycast": "Raycast 插件", - "alfred": "Alfred 插件" - }, - "donate": { - "openCollective": "通过 Open Collective 捐赠", - "payPal": "通过 PayPal 捐赠" - }, - "twitter": "访问作者 Twitter", - "devTools": "开发者工具", - "links": { - "snippets": "代码片段分享站" - } - }, - "file": { - "label": "文件", - "find": "查找" - }, - "view": { - "label": "查看", - "sortBy": { - "label": "排序方式", - "dateModified": "根据修改日期", - "dateCreated": "根据创建日期", - "name": "根据片段名" - } - }, - "edit": { - "label": "编辑", - "undo": "撤销", - "redo": "恢复", - "cut": "剪切", - "copy": "复制", - "paste": "粘贴", - "delete": "删除", - "selectAll": "全选" - }, - "editor": { - "label": "编辑器", - "copy": "将代码片段复制至剪贴板", - "format": "格式化", - "previewCode": "预览 HTML 和 CSS", - "previewScreenshot": "生成并预览代码截图", - "previewMarkdown": "预览 Markdown", - "fontSizeIncrease": "增加字体大小", - "fontSizeDecrease": "减小字体大小", - "fontSizeReset": "重置字体大小" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "演示模式", - "preview": "预览模式" - }, - "history": { - "label": "历史记录", - "back": "后退", - "forward": "前进" - } -} diff --git a/src/main/services/i18n/locales/zh_CN/preferences.json b/src/main/services/i18n/locales/zh_CN/preferences.json deleted file mode 100644 index 2d814482..00000000 --- a/src/main/services/i18n/locales/zh_CN/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "首选项", - "storage": { - "label": "存储路径", - "migrate": "迁移", - "count": "总计" - }, - "editor": { - "label": "编辑器", - "fontSize": "字体大小", - "fontFamily": "字体系列", - "wrap": { - "label": "自动换行", - "wordWrap": "开启", - "off": "关闭" - }, - "tabSize": "Tab 空格数", - "showInvisibles": "显示空格与换行符", - "highlightLine": "高亮光标所在行整行", - "highlightGutter": "高亮光标所在行行号", - "matchBrackets": "括号匹配", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "尾后逗号", - "none": "None", - "all": "All", - "es5": "ES5" - }, - "semi": "句尾添加分号", - "singleQuote": "使用单引号代替双引号" - } - }, - "appearance": { - "label": "外观", - "theme": { - "label": "主题", - "light": "浅色", - "dark": "深色" - } - }, - "language": { - "label": "语言" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "代码块渲染器" - } -} diff --git a/src/main/services/i18n/locales/zh_CN/special.json b/src/main/services/i18n/locales/zh_CN/special.json deleted file mode 100644 index a093093f..00000000 --- a/src/main/services/i18n/locales/zh_CN/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "要使用 iCloud Drive、Google Drive 和 Dropbox 等同步服务,只需将存储路径设置为相应的同步文件夹即可。", - "migrate": { - "1": "从 massCode v1.0 迁移:选择包含数据库文件的文件夹。", - "2": "从 SnippetsLab 迁移:选择 JSON 文件。", - "3": [ - "从 SnippetsLab 迁移将会遇到一些局限:", - "低于2.1版的 SnippetsLab 因为沒有嵌套文件夹将只有一层文件夹。", - "某些片段可能会因为其语言暂时不被 massCode 支持而被识别为纯文本。" - ] - }, - "htmlCssPreview": "添加带有 HTML 和 CSS 语言的片段来查看预览结果。", - "codeBlockRenderer": [ - "当使用 Codemirror 渲染时, 则必须为代码块设置对应的", - "编程语言" - ] - }, - "success": { - "migrate": "数据库迁移成功。" - }, - "error": { - "folderContainDb": "文件夹内已存在 \"db.json\"。", - "folderNotContainDb": "文件夹内不存在 \"db.json\"。" - }, - "unsponsored": "未赞助的", - "supportMessage": "Hi,我是 Anton 👋<br><br>\n感谢你使用 massCode 。如果你觉得这个应用对你很有帮助,请{{-tagStart}} 捐赠 {{-tagEnd}}。这将激励我继续开发这个项目。", - "snippetsShowcase": "前端片段社区" -} diff --git a/src/main/services/i18n/locales/zh_HK/common.json b/src/main/services/i18n/locales/zh_HK/common.json deleted file mode 100644 index eee1655e..00000000 --- a/src/main/services/i18n/locales/zh_HK/common.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "button": { - "moveStorage": "更改存儲路徑", - "openStorage": "打開現有存儲", - "fromMassCodeV1": "來自 massCode v1.0", - "fromSnippetsLab": "來自 SnippetsLab", - "confirm": "確認", - "cancel": "取消", - "update": ["前往 GitHub", "OK"], - "ok": "OK" - }, - "newFolder": "新建文件夾", - "newSnippet": "新建代碼片段", - "newFragment": "新建子片段", - "addDescription": "添加描述", - "addToFavorites": "添加至收藏夾", - "addTag": "添加標籤", - "exportToHtml": "導出 HTML 文件", - "saveScreenshot": "保存截圖", - "rename": "重命名", - "duplicate": "創建副本", - "delete": "刪除", - "deleteNow": "立即刪除", - "defaultLanguage": "默認語言", - "removeFromFavorites": "從收藏夾移除", - "emptyTrash": "清空回收站", - "close": "關閉", - "folder": { - "untitled": "未命名文件夾", - "plural": "文件夾" - }, - "snippet": { - "untitled": "未命名代碼片段", - "plural": "代碼片段", - "emptyName": "請輸入該代碼片段名稱", - "selectedMultiple": "已選中 {{count}} 個代碼片段", - "noSelected": "未選中代碼片段" - }, - "fragment": "子片段", - "search": "搜索", - "line": "行", - "column": "欄", - "sidebar": { - "inbox": "暫存區", - "favorites": "收藏夾", - "allSnippets": "所有的", - "trash": "回收站", - "untitled": "未命名文件夾", - "folders": "文件夾", - "library": "庫", - "tags": "標籤" - }, - "darkMode": "深色模式", - "background": "背景", - "restartApp": "重啓 massCode", - "updateAvailable": "存在新版本", - "hide": "隱藏", - "show": "顯示", - "collapse-all": "全部展開", - "expand-all": "全部摺疊", - "restore": "回復", - "copy-snippet-link": "複製連結" -} diff --git a/src/main/services/i18n/locales/zh_HK/dialog.json b/src/main/services/i18n/locales/zh_HK/dialog.json deleted file mode 100644 index e3fc2742..00000000 --- a/src/main/services/i18n/locales/zh_HK/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "你是否確定要永久刪除 {{name}} ?", - "deleteConfirmMultipleSnippets": "你是否確定要永久刪除 {{count}} 個選中的代碼片段?", - "noUndo": "本操作將無法撤銷。", - "allSnippetsMoveToTrash": "本文件夾內的所有代碼片段將被移動至回收站。", - "deleteTag": "將會從所有擁有該標籤的代碼片段中刪除該標籤。", - "emptyTrash": "你是否確定要永久刪除回收站內的所有代碼片段?", - "migrateConfirm": [ - "你是否確定要從 {{name}} 遷移數據?", - "在遷移過程中,當前的庫將被覆蓋。" - ], - "createDb": "請選擇其他文件夾" -} diff --git a/src/main/services/i18n/locales/zh_HK/menu.json b/src/main/services/i18n/locales/zh_HK/menu.json deleted file mode 100644 index 9f97bf55..00000000 --- a/src/main/services/i18n/locales/zh_HK/menu.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "首選項", - "update": { - "label": "檢查更新…", - "message": "新版本 {{newVersion}} 現在已經可以下載。\n現在的版本是 {{oldVersion}} 。", - "button": ["前往下载", "OK"], - "noUpdate": "當前沒有可用的更新。" - }, - "quit": "退出 massCode", - "about": "關於 massCode", - "hide": "最小化 massCode", - "hideOther": "最小化其它窗口", - "showAll": "顯示所有窗口" - }, - "help": { - "label": "幫助", - "website": "訪問官網", - "documentation": "訪問文檔", - "viewInGitHub": "訪問 GitHub", - "changeLog": "更新日誌", - "reportIssue": "提交 Issue", - "giveStar": "給個 Star", - "extension": { - "vscode": "VS Code 插件", - "raycast": "Raycast 插件", - "alfred": "Alfred 插件" - }, - "donate": { - "openCollective": "通過 Open Collective 捐贈", - "payPal": "通過 PayPal 捐贈" - }, - "twitter": "訪問作者 Twitter", - "devTools": "開發者工具", - "links": { - "snippets": "代碼片段分享站" - } - }, - "file": { - "label": "文件", - "find": "查找" - }, - "view": { - "label": "查看", - "sortBy": { - "label": "排序方式", - "dateModified": "根據修改日期", - "dateCreated": "根據創建日期", - "name": "根據片段名" - } - }, - "edit": { - "label": "編輯", - "undo": "撤銷", - "redo": "恢復", - "cut": "剪切", - "copy": "複製", - "paste": "粘貼", - "delete": "刪除", - "selectAll": "全選" - }, - "editor": { - "label": "編輯器", - "copy": "將代碼片段複製至剪貼板", - "format": "格式化", - "previewCode": "預覽 HTML 和 CSS", - "previewScreenshot": "生成並預覽代碼截圖", - "previewMarkdown": "預覽", - "fontSizeIncrease": "增加字體大小", - "fontSizeDecrease": "減少字體大小", - "fontSizeReset": "重置字體大小" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "演示模式", - "preview": "預覽模式" - }, - "history": { - "label": "歷史記錄", - "back": "回上一頁", - "forward": "到下一頁" - } -} diff --git a/src/main/services/i18n/locales/zh_HK/preferences.json b/src/main/services/i18n/locales/zh_HK/preferences.json deleted file mode 100644 index ac2058f1..00000000 --- a/src/main/services/i18n/locales/zh_HK/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "首選項", - "storage": { - "label": "存儲路徑", - "migrate": "遷移", - "count": "總計" - }, - "editor": { - "label": "編輯器", - "fontSize": "字體大小", - "fontFamily": "字體系列", - "wrap": { - "label": "自動換行", - "wordWrap": "開啓", - "off": "關閉" - }, - "tabSize": "Tab 空格數", - "showInvisibles": "顯示空格與換行符", - "highlightLine": "高亮光標所在行整行", - "highlightGutter": "高亮光標所在行行號", - "matchBrackets": "括號匹配", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "尾後逗號", - "none": "None", - "all": "All", - "es5": "ES5" - }, - "semi": "句尾添加分號", - "singleQuote": "使用單引號代替雙引號" - } - }, - "appearance": { - "label": "外觀", - "theme": { - "label": "主題", - "light": "淺色", - "dark": "深色" - } - }, - "language": { - "label": "語言" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "代碼塊渲染器" - } -} diff --git a/src/main/services/i18n/locales/zh_HK/special.json b/src/main/services/i18n/locales/zh_HK/special.json deleted file mode 100644 index 023afdca..00000000 --- a/src/main/services/i18n/locales/zh_HK/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "要使用 iCloud Drive、Google Drive 和 Dropbox 等同步服務,只需將存儲路徑設置為相應的同步文件夾即可。", - "migrate": { - "1": "從 massCode v1.0 遷移:選擇包含數據庫文件的文件夾。", - "2": "從 SnippetsLab 遷移:選擇 JSON 文件。", - "3": [ - "從 SnippetsLab 遷移將會遇到一些侷限:", - "低於2.1版的 SnippetsLab 因為沒有嵌套文件夾將只有一層文件夾。", - "某些片段可能會因為其語言暫時不被 massCode 支持而被識別為純文本。" - ] - }, - "htmlCssPreview": "添加帶有 HTML 和 CSS 語言的片段來查看預覽結果。", - "codeBlockRenderer": [ - "當使用 Codemirror 渲染時, 則必須為代碼塊設置對應的", - "編程語言" - ] - }, - "success": { - "migrate": "數據庫遷移成功。" - }, - "error": { - "folderContainDb": "文件夾內已存在 \"db.json\"。", - "folderNotContainDb": "文件夾內不存在 \"db.json\"。" - }, - "unsponsored": "未贊助的", - "supportMessage": "Hi,我是 Anton 👋<br><br>\n感謝你使用 massCode 。如果你覺得這個應用對你很有幫助,請{{-tagStart}} 捐贈 {{-tagEnd}}。這將激勵我繼續開發這個項目。", - "snippetsShowcase": "前端片段社群" -} diff --git a/src/main/services/i18n/locales/zh_TW/common.json b/src/main/services/i18n/locales/zh_TW/common.json deleted file mode 100644 index 7115839f..00000000 --- a/src/main/services/i18n/locales/zh_TW/common.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "button": { - "moveStorage": "更改儲存路徑", - "openStorage": "開啟現有儲存", - "fromMassCodeV1": "來自 massCode v1.0", - "fromSnippetsLab": "來自 SnippetsLab", - "confirm": "確認", - "cancel": "取消", - "update": ["前往 GitHub", "OK"], - "ok": "OK" - }, - "newFolder": "新建資料夾", - "newSnippet": "新建程式碼片段", - "newFragment": "新建子片段", - "addDescription": "新增描述", - "addToFavorites": "新增至收藏夾", - "addTag": "新增標籤", - "exportToHtml": "匯出 HTML 檔案", - "saveScreenshot": "儲存截圖", - "rename": "重新命名", - "duplicate": "建立副本", - "delete": "刪除", - "deleteNow": "立即刪除", - "defaultLanguage": "預設語言", - "removeFromFavorites": "從收藏夾移除", - "emptyTrash": "清空回收站", - "close": "關閉", - "folder": { - "untitled": "未命名資料夾", - "plural": "資料夾" - }, - "snippet": { - "untitled": "未命名程式碼片段", - "plural": "程式碼片段", - "emptyName": "請輸入該程式碼片段名稱", - "selectedMultiple": "已選中 {{count}} 個程式碼片段", - "noSelected": "未選中程式碼片段" - }, - "fragment": "子片段", - "search": "搜尋", - "line": "行", - "column": "欄", - "sidebar": { - "inbox": "暫存區", - "favorites": "收藏夾", - "allSnippets": "所有的", - "trash": "回收站", - "untitled": "未命名資料夾", - "folders": "資料夾", - "library": "庫", - "tags": "標籤" - }, - "darkMode": "深色模式", - "background": "背景", - "restartApp": "重啟 massCode", - "updateAvailable": "存在新版本", - "hide": "隱藏", - "show": "顯示", - "collapse-all": "全部展開", - "expand-all": "全部摺疊", - "restore": "回復", - "copy-snippet-link": "複製連結" -} diff --git a/src/main/services/i18n/locales/zh_TW/dialog.json b/src/main/services/i18n/locales/zh_TW/dialog.json deleted file mode 100644 index 8bee9f76..00000000 --- a/src/main/services/i18n/locales/zh_TW/dialog.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "deleteConfirm": "你是否確定要永久刪除 {{name}} ?", - "deleteConfirmMultipleSnippets": "你是否確定要永久刪除 {{count}} 個選中的程式碼片段?", - "noUndo": "本操作將無法撤銷。", - "allSnippetsMoveToTrash": "本資料夾內的所有程式碼片段將被移動至回收站。", - "deleteTag": "將會從所有擁有該標籤的程式碼片段中刪除該標籤。", - "emptyTrash": "你是否確定要永久刪除回收站內的所有程式碼片段?", - "migrateConfirm": [ - "你是否確定要從 {{name}} 遷移資料?", - "在遷移過程中,當前的庫將被覆蓋。" - ], - "createDb": "請選擇其他資料夾" -} diff --git a/src/main/services/i18n/locales/zh_TW/menu.json b/src/main/services/i18n/locales/zh_TW/menu.json deleted file mode 100644 index 19da14e5..00000000 --- a/src/main/services/i18n/locales/zh_TW/menu.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "app": { - "label": "massCode", - "preferences": "首選項", - "update": { - "label": "檢查更新…", - "message": "新版本 {{newVersion}} 現在已經可以下載。\n現在的版本是 {{oldVersion}} 。", - "button": ["前往下载", "OK"], - "noUpdate": "當前沒有可用的更新。" - }, - "quit": "退出 massCode", - "about": "關於 massCode", - "hide": "最小化 massCode", - "hideOther": "最小化其它視窗", - "showAll": "顯示所有視窗" - }, - "help": { - "label": "幫助", - "website": "訪問官網", - "documentation": "訪問文件", - "viewInGitHub": "訪問 GitHub", - "changeLog": "更新日誌", - "reportIssue": "提交 Issue", - "giveStar": "給個 Star", - "extension": { - "vscode": "VS Code 外掛", - "raycast": "Raycast 外掛", - "alfred": "Alfred 外掛" - }, - "donate": { - "openCollective": "透過 Open Collective 捐贈", - "payPal": "透過 PayPal 捐贈" - }, - "twitter": "訪問作者 Twitter", - "devTools": "開發人員工具", - "links": { - "snippets": "程式碼片段分享站" - } - }, - "file": { - "label": "檔案", - "find": "尋找" - }, - "view": { - "label": "檢視", - "sortBy": { - "label": "排序按照", - "dateModified": "修改日期", - "dateCreated": "建立日期", - "name": "片段名" - } - }, - "edit": { - "label": "編輯", - "undo": "復原", - "redo": "取消復原", - "cut": "剪下", - "copy": "複製", - "paste": "貼上", - "delete": "刪除", - "selectAll": "全選" - }, - "editor": { - "label": "編輯器", - "copy": "將程式碼片段複製至剪貼簿", - "format": "格式化", - "previewCode": "預覽 HTML 和 CSS", - "previewScreenshot": "生成並預覽程式碼擷圖", - "previewMarkdown": "預覽 Markdown", - "fontSizeIncrease": "增加字體大小", - "fontSizeDecrease": "減少字體大小", - "fontSizeReset": "重置字體大小" - }, - "markdown": { - "label": "Markdown", - "presentationMode": "演示模式", - "preview": "預覽模式" - }, - "history": { - "label": "歷史記錄", - "back": "回上一頁", - "forward": "到下一頁" - } -} diff --git a/src/main/services/i18n/locales/zh_TW/preferences.json b/src/main/services/i18n/locales/zh_TW/preferences.json deleted file mode 100644 index 7325fdee..00000000 --- a/src/main/services/i18n/locales/zh_TW/preferences.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "首選項", - "storage": { - "label": "儲存路徑", - "migrate": "遷移", - "count": "總計" - }, - "editor": { - "label": "編輯器", - "fontSize": "字型大小", - "fontFamily": "字型系列", - "wrap": { - "label": "自動換行", - "wordWrap": "開啟", - "off": "關閉" - }, - "tabSize": "Tab 空格數", - "showInvisibles": "顯示空格與換行符", - "highlightLine": "高亮游標所在行整行", - "highlightGutter": "高亮游標所在行行號", - "matchBrackets": "括號匹配", - "prettier": { - "label": "Prettier", - "trailingComma": { - "label": "尾後逗號", - "none": "None", - "all": "All", - "es5": "ES5" - }, - "semi": "句尾新增分號", - "singleQuote": "使用單引號代替雙引號" - } - }, - "appearance": { - "label": "外觀", - "theme": { - "label": "主題", - "light": "淺色", - "dark": "深色" - } - }, - "language": { - "label": "語言" - }, - "markdown": { - "label": "Markdown", - "codeRenderer": "程式碼塊渲染器" - } -} diff --git a/src/main/services/i18n/locales/zh_TW/special.json b/src/main/services/i18n/locales/zh_TW/special.json deleted file mode 100644 index b4d03de5..00000000 --- a/src/main/services/i18n/locales/zh_TW/special.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "description": { - "storage": "要使用 iCloud Drive、Google Drive 和 Dropbox 等同步服務,只需將儲存路徑設定為相應的同步資料夾即可。", - "migrate": { - "1": "從 massCode v1.0 遷移:選擇包含資料庫檔案的資料夾。", - "2": "從 SnippetsLab 遷移:選擇 JSON 檔案。", - "3": [ - "從 SnippetsLab 遷移將會遇到一些侷限:", - "低於2.1版的 SnippetsLab 因為沒有巢狀資料夾將只有一層資料夾。", - "某些片段可能會因為其語言暫時不被 massCode 支持而被識別為純文字。" - ] - }, - "htmlCssPreview": "新增帶有 HTML 和 CSS 語言的片段來檢視預覽結果。", - "codeBlockRenderer": [ - "當使用 Codemirror 渲染時, 則必須為程式碼塊設定對應的", - "程式語言" - ] - }, - "success": { - "migrate": "資料庫遷移成功。" - }, - "error": { - "folderContainDb": "資料夾內已存在 \"db.json\"。", - "folderNotContainDb": "資料夾內不存在 \"db.json\"。" - }, - "unsponsored": "未贊助的", - "supportMessage": "Hi,我是 Anton 👋<br><br>\n感謝你使用 massCode 。如果你覺得這個應用很有幫助,請{{-tagStart}} 捐贈 {{-tagEnd}}。這將激勵我繼續開發這個專案。", - "snippetsShowcase": "前端片段社群" -} diff --git a/src/main/services/ipc/context-menu.ts b/src/main/services/ipc/context-menu.ts deleted file mode 100644 index d919ada2..00000000 --- a/src/main/services/ipc/context-menu.ts +++ /dev/null @@ -1,421 +0,0 @@ -import { createMenu } from '../../components/menu' -import type { MenuItemConstructorOptions } from 'electron' -import { BrowserWindow, MenuItem, dialog, ipcMain } from 'electron' -import type { - ContextMenuRequest, - ContextMenuResponse -} from '@shared/types/main' -import { languages } from '../../../renderer/components/editor/languages' -import i18n from '../i18n' - -export const subscribeToContextMenu = () => { - ipcMain.handle<ContextMenuRequest, ContextMenuResponse>( - 'context-menu:snippet-fragment', - async (event, payload) => { - const { name, type } = payload - - return new Promise(resolve => { - const menu = createMenu([ - { - label: `${i18n.t('rename')} ${name}`, - click: () => - resolve({ - action: 'rename', - type, - data: payload - }) - }, - { type: 'separator' }, - { - label: `${i18n.t('delete')} ${name}`, - click: () => { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message: i18n.t('dialog:deleteConfirm', { name }), - detail: i18n.t('dialog:noUndo'), - buttons: [i18n.t('button.confirm'), i18n.t('button.cancel')], - defaultId: 0, - cancelId: 1 - } - ) - if (buttonId === 0) { - resolve({ - action: 'delete', - type, - data: payload - }) - } - } - } - ]) - - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - }) - } - ) - - ipcMain.handle<ContextMenuRequest, ContextMenuResponse>( - 'context-menu:snippet', - async (event, payload) => { - const { name, type, selectedCount } = payload - - return new Promise(resolve => { - const menu = createMenu([]) - - const defaultMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('addToFavorites'), - click: () => { - resolve({ - action: 'favorites', - type, - data: true - }) - } - }, - { type: 'separator' }, - { - label: i18n.t('copy-snippet-link'), - click: () => { - resolve({ - action: 'copy-snippet-link', - type, - data: true - }) - } - }, - { type: 'separator' }, - { - label: i18n.t('duplicate'), - click: () => { - resolve({ - action: 'duplicate', - type, - data: undefined - }) - } - }, - { - label: i18n.t('delete'), - click: () => { - resolve({ - action: 'delete', - type, - data: undefined - }) - } - } - ] - - const favoritesMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('removeFromFavorites'), - click: () => { - resolve({ - action: 'favorites', - type, - data: false - }) - } - }, - { type: 'separator' }, - { - label: i18n.t('delete'), - click: () => { - resolve({ - action: 'delete', - type, - data: undefined - }) - } - } - ] - - const trashMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('deleteNow'), - click: () => { - const message = - selectedCount === 0 - ? i18n.t('dialog:deleteConfirm', { name }) - : i18n.t('dialog:deleteConfirmMultipleSnippets', { - count: selectedCount - }) - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message, - detail: i18n.t('dialog:noUndo'), - buttons: [i18n.t('button.confirm'), i18n.t('button.cancel')], - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - resolve({ - action: 'delete', - type, - data: undefined - }) - } else { - resolve({ - action: 'none', - type, - data: undefined - }) - } - } - }, - { - label: i18n.t('restore'), - click: () => { - resolve({ - action: 'restore-from-trash', - type, - data: undefined - }) - } - } - ] - - if (type === 'folder' || type === 'all' || type === 'inbox') { - defaultMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - if (type === 'favorites') { - favoritesMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - if (type === 'trash') { - trashMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - menu.on('menu-will-close', () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'context-menu:close' - ) - }) - }) - } - ) - - ipcMain.handle<ContextMenuRequest, ContextMenuResponse>( - 'context-menu:library', - async (event, payload) => { - const { name, type, data } = payload - - return new Promise(resolve => { - const menu = createMenu([]) - - const createLanguageMenu = () => { - return languages.map(i => { - return { - label: i.name, - type: 'radio', - checked: i.value === data.defaultLanguage, - click: () => { - resolve({ - action: 'update:language', - type, - data: i.value - }) - } - } - }) as MenuItemConstructorOptions[] - } - - const folderMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('newFolder'), - click: () => { - resolve({ - action: 'new', - type, - data: undefined - }) - } - }, - { type: 'separator' }, - { - label: i18n.t('rename'), - click: () => { - resolve({ - action: 'rename', - type, - data: payload - }) - } - }, - { - label: i18n.t('delete'), - click: () => { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message: i18n.t('dialog:deleteConfirm', { name }), - detail: i18n.t('dialog:allSnippetsMoveToTrash'), - buttons: [i18n.t('delete'), i18n.t('button.cancel')], - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - resolve({ - action: 'delete', - type, - data: undefined - }) - } else { - resolve({ - action: 'none', - type, - data: undefined - }) - } - } - }, - { type: 'separator' }, - { - label: i18n.t('collapse-all'), - click: () => { - resolve({ - action: 'collapse-all', - type, - data: undefined - }) - } - }, - { - label: i18n.t('expand-all'), - click: () => { - resolve({ - action: 'expand-all', - type, - data: undefined - }) - } - }, - { type: 'separator' }, - { - label: i18n.t('defaultLanguage'), - submenu: createLanguageMenu() - }, - { type: 'separator' }, - { - label: i18n.t('set-custom-icon'), - click: () => { - resolve({ - action: 'set-custom-icon', - type, - data: undefined - }) - } - } - ] - - const tagMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('delete'), - click: () => { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message: i18n.t('dialog:deleteConfirm', { name }), - detail: i18n.t('dialog:deleteTag'), - buttons: [i18n.t('delete'), i18n.t('button.cancel')], - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - resolve({ - action: 'delete', - type, - data: undefined - }) - } else { - resolve({ - action: 'none', - type, - data: undefined - }) - } - } - } - ] - - const trashMenu: MenuItemConstructorOptions[] = [ - { - label: i18n.t('emptyTrash'), - click: () => { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message: i18n.t('dialog:emptyTrash'), - detail: i18n.t('dialog:noUndo'), - buttons: [i18n.t('delete'), i18n.t('button.cancel')], - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - resolve({ - action: 'delete', - type, - data: undefined - }) - } else { - resolve({ - action: 'none', - type, - data: undefined - }) - } - } - } - ] - - if (type === 'folder') { - folderMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - if (type === 'tag') { - tagMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - if (type === 'trash') { - trashMenu.forEach(i => { - menu.append(new MenuItem(i)) - }) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - } - - menu.on('menu-will-close', () => { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'context-menu:close' - ) - }) - }) - } - ) -} diff --git a/src/main/services/ipc/dialog.ts b/src/main/services/ipc/dialog.ts deleted file mode 100644 index 9e04a1af..00000000 --- a/src/main/services/ipc/dialog.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { DialogRequest, MessageBoxRequest } from '@shared/types/main' -import { BrowserWindow, dialog, ipcMain } from 'electron' - -export const subscribeToDialog = () => { - ipcMain.handle<DialogRequest, any>('main:open-dialog', (event, payload) => { - return new Promise<string>(resolve => { - const { properties, filters } = payload - - const dir = dialog.showOpenDialogSync(BrowserWindow.getFocusedWindow()!, { - properties: properties || ['openDirectory', 'createDirectory'], - filters: filters || [{ name: '*', extensions: ['json'] }] - }) - - if (dir) { - resolve(dir[0]) - } else { - resolve('') - } - }) - }) - - ipcMain.handle<MessageBoxRequest, boolean>( - 'main:open-message-box', - (event, payload) => { - const { message, detail, buttons } = payload - return new Promise(resolve => { - const buttonId = dialog.showMessageBoxSync( - BrowserWindow.getFocusedWindow()!, - { - message, - detail, - buttons, - defaultId: 0, - cancelId: 1 - } - ) - - if (buttonId === 0) { - resolve(true) - } else { - resolve(false) - } - }) - } - ) -} diff --git a/src/main/services/ipc/fs.ts b/src/main/services/ipc/fs.ts deleted file mode 100644 index 6c5e584b..00000000 --- a/src/main/services/ipc/fs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { store } from '../../store' -import { ipcMain } from 'electron' -import { ensureDirSync, copySync } from 'fs-extra' -import { join, parse } from 'path' -import { nanoid } from 'nanoid' -import slash from 'slash' - -const ASSETS_DIR = 'assets' - -export const subscribeToFs = () => { - ipcMain.handle<string, string>('main:copy-to-assets', (event, payload) => { - return new Promise(resolve => { - const storagePath = store.preferences.get('storagePath') - const payloadPath = payload - const assetsPath = join(storagePath, ASSETS_DIR) - const { ext } = parse(payloadPath) - - const name = `${nanoid()}${ext}` - const dest = join(assetsPath, name) - - ensureDirSync(assetsPath) - copySync(payloadPath, dest) - - resolve(slash(join(ASSETS_DIR, name))) - }) - }) -} diff --git a/src/main/services/ipc/index.ts b/src/main/services/ipc/index.ts deleted file mode 100644 index fe1cbbc0..00000000 --- a/src/main/services/ipc/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { subscribeToContextMenu } from './context-menu' -import { subscribeToFs } from './fs' -import { subscribeToNotification } from './notifications' -import { subscribeToPrettier } from './prettier' - -export const subscribeToChannels = () => { - subscribeToContextMenu() - subscribeToNotification() - subscribeToPrettier() - subscribeToFs() -} diff --git a/src/main/services/ipc/notifications.ts b/src/main/services/ipc/notifications.ts deleted file mode 100644 index 2d94413f..00000000 --- a/src/main/services/ipc/notifications.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { NotificationRequest } from '@shared/types/main' -import { ipcMain, Notification } from 'electron' - -export const subscribeToNotification = () => { - if (!Notification.isSupported()) return - - ipcMain.handle<NotificationRequest>('main:notification', (event, payload) => { - return new Promise(resolve => { - const { body } = payload - const notification = new Notification({ - title: 'massCode', - body - }) - notification.show() - resolve() - }) - }) -} diff --git a/src/main/services/ipc/prettier.ts b/src/main/services/ipc/prettier.ts deleted file mode 100644 index 74b6537a..00000000 --- a/src/main/services/ipc/prettier.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { PrettierRequest } from '@shared/types/main' -import { ipcMain } from 'electron' -import { format } from '../prettier' - -export const subscribeToPrettier = () => { - ipcMain.handle<PrettierRequest, string>('main:prettier', (event, payload) => { - const { source, parser } = payload - return new Promise(resolve => { - const formatted = format(source, parser) - resolve(formatted) - }) - }) -} diff --git a/src/main/services/prettier/index.ts b/src/main/services/prettier/index.ts deleted file mode 100644 index d90d8975..00000000 --- a/src/main/services/prettier/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import prettier from 'prettier' -import { store } from '../../store' - -export const format = (source: string, parser: string) => { - const editor = store.preferences.get('editor') - - const formatted = prettier.format(source, { - parser, - tabWidth: editor.tabSize, - trailingComma: editor.trailingComma, - semi: editor.semi, - singleQuote: editor.singleQuote - }) - - return formatted -} diff --git a/src/main/services/update-check.ts b/src/main/services/update-check.ts deleted file mode 100644 index b70a6fa1..00000000 --- a/src/main/services/update-check.ts +++ /dev/null @@ -1,36 +0,0 @@ -import axios from 'axios' -import { BrowserWindow } from 'electron' -import { version, repository } from '../../../package.json' - -const isDev = process.env.NODE_ENV === 'development' - -export const checkForUpdate = async () => { - if (isDev) return - - try { - const res = await axios.get(`${repository}/releases/latest`) - - if (res) { - const latest = res.request.socket._httpMessage.path - .split('/') - .pop() - .substring(1) - if (latest !== version) { - BrowserWindow.getFocusedWindow()?.webContents.send( - 'main:update-available' - ) - return latest - } - } - } catch (err) { - console.error(err) - } -} - -export const checkForUpdateWithInterval = () => { - checkForUpdate() - - setInterval(() => { - checkForUpdate() - }, 1000 * 60 * 360) // 6 часов -} diff --git a/src/main/store/constants.ts b/src/main/store/constants.ts new file mode 100644 index 00000000..19fc579c --- /dev/null +++ b/src/main/store/constants.ts @@ -0,0 +1,6 @@ +export const APP_DEFAULTS = { + sizes: { + sidebar: 180, + snippetList: 250, + }, +} diff --git a/src/main/store/index.ts b/src/main/store/index.ts index 8351a395..08b85101 100644 --- a/src/main/store/index.ts +++ b/src/main/store/index.ts @@ -3,5 +3,5 @@ import preferences from './module/preferences' export const store = { app, - preferences + preferences, } diff --git a/src/main/store/module/app.ts b/src/main/store/module/app.ts index cad33367..c66a7aff 100644 --- a/src/main/store/module/app.ts +++ b/src/main/store/module/app.ts @@ -1,5 +1,6 @@ +import type { AppStore } from '../types' import Store from 'electron-store' -import type { AppStore } from '@shared/types/main/store' +import { APP_DEFAULTS } from '../constants' export default new Store<AppStore>({ name: 'app', @@ -7,10 +8,8 @@ export default new Store<AppStore>({ defaults: { bounds: {}, - sidebarWidth: 180, - snippetListWidth: 250, - sort: 'updatedAt', - hideSubfolderSnippets: false, - compactMode: false - } + sidebarWidth: APP_DEFAULTS.sizes.sidebar, + snippetListWidth: APP_DEFAULTS.sizes.snippetList, + isAutoMigratedFromJson: false, + }, }) diff --git a/src/main/store/module/preferences.ts b/src/main/store/module/preferences.ts index c9183ff2..319deca5 100644 --- a/src/main/store/module/preferences.ts +++ b/src/main/store/module/preferences.ts @@ -1,42 +1,19 @@ +import type { PreferencesStore } from '../types' +import { homedir, platform } from 'node:os' import Store from 'electron-store' -import { homedir, platform } from 'os' -import type { PreferencesStore } from '@shared/types/main/store' const isWin = platform() === 'win32' -const defaultPath = isWin ? homedir() + '\\massCode' : homedir() + '/massCode' -const backupPath = isWin ? `${defaultPath}\\backups` : `${defaultPath}/backups` +const storagePath = isWin ? `${homedir()}\\massCode` : `${homedir()}/massCode` +const backupPath = isWin ? `${storagePath}\\backups` : `${storagePath}/backups` export default new Store<PreferencesStore>({ name: 'preferences', cwd: 'v2', defaults: { - storagePath: defaultPath, + storagePath, backupPath, - theme: 'light:github', - editor: { - wrap: true, - fontFamily: 'SF Mono, Consolas, Menlo, Ubuntu Mono, monospace', - fontSize: 12, - tabSize: 2, - trailingComma: 'none', - semi: false, - singleQuote: true, - highlightLine: false, - highlightGutter: false, - matchBrackets: false - }, - screenshot: { - background: false, - gradient: ['#D02F98', '#9439CA'], - darkMode: true, - width: 600 - }, - markdown: { - presentationScale: 1.3, - codeRenderer: 'highlight.js' - }, - language: 'en' - } + apiPort: 4321, + }, }) diff --git a/src/main/store/types/index.ts b/src/main/store/types/index.ts new file mode 100644 index 00000000..4c8a5653 --- /dev/null +++ b/src/main/store/types/index.ts @@ -0,0 +1,22 @@ +import type ElectronStore from 'electron-store' + +export interface AppStore { + bounds: object + isAutoMigratedFromJson: boolean + sidebarWidth: number + snippetListWidth: number + selectedFolderId?: number + selectedSnippetId?: number + selectedLibrary?: string +} + +export interface PreferencesStore { + storagePath: string + backupPath: string + apiPort: number +} + +export interface Store { + app: ElectronStore<AppStore> + preferences: ElectronStore<PreferencesStore> +} diff --git a/src/main/types/index.ts b/src/main/types/index.ts new file mode 100644 index 00000000..392aacc0 --- /dev/null +++ b/src/main/types/index.ts @@ -0,0 +1,28 @@ +import type { IpcRendererEvent } from 'electron' +import type { Store } from '../store/types' + +export interface EventCallback { + (event?: IpcRendererEvent, ...args: any[]): void +} + +export interface DBQueryArgs { + sql: string + params?: unknown[] +} + +declare global { + interface Window { + electron: { + ipc: { + on: (channel: string, cb: EventCallback) => void + send: (channel: string, data: any, cb: EventCallback) => void + removeListener: (channel: string, cb: EventCallback) => void + removeListeners: (channel: string) => void + } + db: { + query: (sql: string, params?: any[]) => Promise<any> + } + store: Store + } + } +} diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts deleted file mode 100644 index e4954dd5..00000000 --- a/src/main/utils/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Конвертация вложенного строения дерева с 'children' в плоское - * @param {Array} items - массив элементов - * @param {String} link - связь по полю - * @returns {Array} - плоский массив со связями по полю 'parentId' - */ -export function nestedToFlat (items: any[], link = 'id') { - const flatList: any[] = [] - - function flat (items: any[]) { - items.forEach((i, index) => { - if (i.children && i.children.length) { - const children: any[] = i.children.map((item: any, idx: number) => { - return { - ...item, - index: idx, - parentId: i[link] - } - }) - - flatList.push(...children) - - if (!flatList.find(l => l[link] === i[link])) { - flatList.push({ - ...i, - index, - parentId: null - }) - } - - flat(i.children) - } else { - if (!flatList.find(l => l[link] === i[link])) { - flatList.push({ - ...i, - index, - parentId: null - }) - } - } - }) - } - - flat(items) - - return flatList.map(({ children, ...rest }) => rest) -} diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 8fe07b9e..69740a0c 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,340 +1,31 @@ -<template> - <div - class="app-title-bar" - :class="{ 'is-win': appStore.platform === 'win32' }" - /> - <RouterView /> - <div class="top-notification"> - <span - v-if="!appStore.isSponsored && !isUpdateAvailable" - class="unsponsored" - > - <span v-if="!isDev"> - {{ i18n.t('special:unsponsored') }} - </span> - </span> - <span - v-if="isUpdateAvailable" - class="update" - @click="onClickUpdate" - > - {{ i18n.t('updateAvailable') }} - </span> - </div> - <!-- TODO: Подумать о дальнейшем управлении глобальным модальным окном --> - <AppModal v-model:show="appStore.showModal"> - <AppFolderIcons /> - </AppModal> -</template> - <script setup lang="ts"> -import router from '@/router' -import { nextTick, ref, watch } from 'vue' -import { ipc, store, i18n } from './electron' -import { track } from '@/services/analytics' -import { EDITOR_DEFAULTS, useAppStore } from './store/app' -import { useSnippetStore } from './store/snippets' -import { - onAddNewSnippet, - onAddNewFragment, - onAddNewFolder, - onCopySnippet, - emitter, - onCreateSnippet, - onAddDescription, - goToSnippet -} from '@/composable' -import { useRoute } from 'vue-router' -import type { Snippet } from '@shared/types/main/db' +import { useApp } from '@/composables' +import { useDark } from '@vueuse/core' import { loadWASM } from 'onigasm' import onigasmFile from 'onigasm/lib/onigasm.wasm?url' -import { loadGrammars } from '@/components/editor/grammars' -import { - useSupportNotification, - checkForRemoteNotification -} from '@/composable/notification' - -// По какой то причине необходимо явно установить роут в '/' -// для корректного поведения в продакшен сборке -// TODO: выяснить причину -router.push('/') - -const appStore = useAppStore() -const snippetStore = useSnippetStore() -const route = useRoute() - -const { showSupportToast } = useSupportNotification() +import { loadGrammars } from './components/editor/grammars' -const isUpdateAvailable = ref(false) -const isDev = import.meta.env.DEV +useApp() +useDark() -const init = async () => { +async function init() { loadWASM(onigasmFile) await loadGrammars() - - const theme = store.preferences.get('theme') - const dateInstallation = store.app.get('dateInstallation') - const isValid = appStore.isEditorSettingsValid( - store.preferences.get('editor') - ) - - if (isValid) appStore.editor = store.preferences.get('editor') - - appStore.sizes.sidebar = store.app.get('sidebarWidth') - appStore.sizes.snippetList = store.app.get('snippetListWidth') - appStore.screenshot = store.preferences.get('screenshot') - appStore.markdown = { - ...appStore.markdown, - ...store.preferences.get('markdown') - } - - snippetStore.sort = store.app.get('sort') - snippetStore.hideSubfolderSnippets = store.app.get('hideSubfolderSnippets') - snippetStore.compactMode = store.app.get('compactMode') - - if (theme) { - appStore.setTheme(theme) - } else { - appStore.setTheme('light:github') - } - - if (!dateInstallation) { - store.app.set('dateInstallation', new Date().valueOf()) - } - - trackAppUpdate() - checkForRemoteNotification() -} - -const setTheme = (theme: string) => { - document.body.dataset.theme = theme -} - -const onClickUpdate = () => { - ipc.invoke( - 'main:open-url', - 'https://masscode.io/download/latest-release.html' - ) - track('app/update') -} - -const trackAppUpdate = () => { - const installedVersion = store.app.get('version') - - if (!installedVersion) track('app/install') - - if (installedVersion && appStore.version !== installedVersion) { - track('app/update', `from-${installedVersion}`) - } - - store.app.set('version', appStore.version) } init() - -watch( - () => appStore.theme, - () => setTheme(appStore.theme), - { immediate: true } -) - -watch( - () => [snippetStore.selectedId, snippetStore.fragment], - () => { - const lang = snippetStore.selected?.content[snippetStore.fragment]?.language - - if (lang && lang !== 'markdown') { - snippetStore.isMarkdownPreview = false - snippetStore.isMindmapPreview = false - } - } -) - -watch( - () => route.path, - () => { - if (route.path === '/') { - nextTick(() => { - emitter.emit('scroll-to:snippet', snippetStore.selectedId!) - }) - } - } -) - -watch( - () => appStore.editor, - v => { - store.preferences.set('editor', { ...v }) - }, - { deep: true } -) - -ipc.on('main:update-available', () => { - isUpdateAvailable.value = true -}) - -ipc.on('main:focus', () => { - // Yes, this is that annoying piece of crap code. - // You can delete it, but know that you hurt me. - showSupportToast() -}) - -ipc.on('main:app-protocol', (event, payload: string) => { - if (/^masscode:\/\/snippets/.test(payload)) { - const snippetId = payload.split('/').pop() - if (snippetId) goToSnippet(snippetId, true) - } -}) - -ipc.on('main-menu:preferences', () => { - router.push('/preferences') -}) - -ipc.on('main-menu:devtools', () => { - router.push('/devtools') -}) - -ipc.on('main-menu:new-folder', async () => { - await onAddNewFolder() -}) - -ipc.on('main-menu:new-snippet', async () => { - await onAddNewSnippet() -}) - -ipc.on('main-menu:new-fragment', () => { - onAddNewFragment() -}) - -ipc.on('main-menu:preview-markdown', async () => { - if (snippetStore.currentLanguage === 'markdown') { - snippetStore.togglePreview('markdown') - track('snippets/markdown-preview') - } -}) -ipc.on('main-menu:presentation-mode', async () => { - if (snippetStore.currentLanguage === 'markdown') { - router.push('/presentation') - } -}) - -ipc.on('main-menu:preview-code', () => { - snippetStore.togglePreview('code') -}) -ipc.on('main-menu:preview-mindmap', () => { - snippetStore.togglePreview('mindmap') -}) - -ipc.on('main-menu:copy-snippet', () => { - onCopySnippet() -}) - -ipc.on('main-menu:format-snippet', () => { - emitter.emit('snippet:format', true) -}) - -ipc.on('main-menu:search', () => { - emitter.emit('search:focus', true) -}) - -ipc.on('main-menu:sort-snippets', (event, sort) => { - snippetStore.setSort(sort) -}) - -ipc.on('main-menu:hide-subfolder-snippets', () => { - snippetStore.hideSubfolderSnippets = !snippetStore.hideSubfolderSnippets - store.app.set('hideSubfolderSnippets', snippetStore.hideSubfolderSnippets) -}) - -ipc.on('main-menu:compact-mode-snippets', () => { - snippetStore.compactMode = !snippetStore.compactMode - store.app.set('compactMode', snippetStore.compactMode) -}) - -ipc.on('main-menu:add-description', async () => { - await onAddDescription() -}) - -ipc.on('main-menu:font-size-increase', async () => { - appStore.editor.fontSize += 1 - emitter.emit('editor:refresh', true) -}) - -ipc.on('main-menu:font-size-decrease', async () => { - if (appStore.editor.fontSize === 1) return - appStore.editor.fontSize -= 1 - emitter.emit('editor:refresh', true) -}) - -ipc.on('main-menu:font-size-reset', async () => { - appStore.editor.fontSize = EDITOR_DEFAULTS.fontSize - emitter.emit('editor:refresh', true) -}) - -ipc.on('main-menu:history-back', async () => { - appStore.historyBack() -}) - -ipc.on('main-menu:history-forward', async () => { - appStore.historyForward() -}) - -ipc.on('api:snippet-create', (event, body: Snippet) => { - onCreateSnippet(body) -}) </script> -<style lang="scss"> -body { - margin: 0; -} -#app { - height: 100vh; - overflow: hidden; -} -.app { - &-title-bar { - position: absolute; - top: 0; - width: 100%; - height: var(--title-bar-height); - user-select: none; - -webkit-app-region: drag; - z-index: 1010; - transition: all 0.5s; - &.is-win { - border-top: 1px solid var(--color-border); - } - } -} -.top-notification { - position: absolute; - top: 5px; - right: var(--spacing-sm); - z-index: 1020; - text-transform: uppercase; - font-size: 10px; - font-weight: bold; - display: flex; - gap: var(--spacing-sm); -} -.update { - background: -webkit-linear-gradient(60deg, var(--color-primary), limegreen); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-size: 200% auto; - animation: shine 3s ease infinite; -} - -@keyframes shine { - from { - background-position: 200%; - } -} +<template> + <div + data-title-bar + class="absolute top-0 z-50 h-[var(--title-bar-height)] w-full select-none" + /> + <RouterView /> +</template> -@keyframes zoom { - from { - background-position: 100%; - } +<style> +[data-title-bar] { + -webkit-app-region: drag; } </style> diff --git a/src/renderer/assets/logo.png b/src/renderer/assets/logo.png new file mode 100644 index 00000000..8232003c Binary files /dev/null and b/src/renderer/assets/logo.png differ diff --git a/src/renderer/assets/scss/ace.scss b/src/renderer/assets/scss/ace.scss deleted file mode 100644 index 0fab2012..00000000 --- a/src/renderer/assets/scss/ace.scss +++ /dev/null @@ -1,27 +0,0 @@ -.ace_editor { - ::-webkit-scrollbar { - width: 5px; - height: 5px; - } - ::-webkit-scrollbar-thumb { - background-color: var(--color-editor-scrollbar); - border-radius: 6px; - } -} -.ace_gutter { - width: 40px !important; - background: transparent !important; - &-layer { - margin-left: -12px; - } -} -.ace_scroller { - left: 40px !important; - &.ace_scroll-left { - box-shadow: none; - border-left: 1px solid var(--color-border); - } -} -.ace_hidden-cursors { - opacity: 0 -} \ No newline at end of file diff --git a/src/renderer/assets/scss/base.scss b/src/renderer/assets/scss/base.scss deleted file mode 100644 index b47860db..00000000 --- a/src/renderer/assets/scss/base.scss +++ /dev/null @@ -1,122 +0,0 @@ -body { - font-family: var(--font-primary); - background-color: var(--color-bg); -} - -#app { - color: var(--color-text); - font-size: var(--text-md); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: 600; -} -h1 { - font-size: var(--text-xxxl); - margin: var(--spacing-xl) 0; -} -h2 { - font-size: var(--text-xxl); - margin: var(--spacing-xl) 0; -} -h3 { - font-size: var(--text-xl); - margin: var(--spacing-xl) 0; -} -h3 { - font-size: var(--text-lg); - margin: var(--spacing-lg) 0; -} -h4 { - font-size: var(--text-md); - margin: var(--spacing-md) 0; -} -h5 { - font-size: var(--text-sm); - margin: var(--spacing-xs) 0; -} -h6 { - font-size: var(--text-xs); - text-transform: uppercase; - margin: var(--spacing-xs) 0; - font-weight: 700; -} - -::placeholder { - color: var(--color-text-3); -} - - -.gutter-line { - position: absolute; - top: 0; - right: 0; - width: 1px; - height: 100vh; - background-color: var(--color-border); - cursor: col-resize; - &::after { - content: ''; - display: block; - height: 100%; - width: 8px; - position: absolute; - left: -3px; - z-index: 10; - } -} -.gutter-line-horizontal { - position: absolute; - top: 0; - left: 0; - right: 0; - width: 100%; - height: 1px; - background-color: var(--color-border); - cursor: row-resize; - &::after { - content: ''; - display: block; - height: 8px; - width: 100%; - position: absolute; - top: -2px; - z-index: 10; - } -} - -.desc { - font-size: var(--text-sm); - color: var(--color-text-3); - margin-top: var(--spacing-xs); -} - -.link { - text-decoration: underline; - cursor: pointer; -} - -.table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - border: 1px solid var(--color-border); - table-layout: fixed; - th, - td { - padding: var(--spacing-xs) var(--spacing-sm); - border: 1px solid var(--color-border); - } - th { - text-align: left; - background-color: var(--color-bg-2); - } - tr:nth-child(even) { - background-color: var(--color-bg-2); - } -} \ No newline at end of file diff --git a/src/renderer/assets/scss/main.scss b/src/renderer/assets/scss/main.scss deleted file mode 100644 index ef9af555..00000000 --- a/src/renderer/assets/scss/main.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import './reset'; -@import './variables'; -@import './markdown'; -@import './base'; -@import './ace'; -@import './themes'; -@import './vendor'; \ No newline at end of file diff --git a/src/renderer/assets/scss/markdown.scss b/src/renderer/assets/scss/markdown.scss deleted file mode 100644 index 808dcf80..00000000 --- a/src/renderer/assets/scss/markdown.scss +++ /dev/null @@ -1,958 +0,0 @@ -.markdown-body { - --scale: 1; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - margin: 0; - font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; - font-size: calc(16px * var(--scale)); - line-height: 1.5; - word-wrap: break-word; -} - -.markdown-body .octicon { - display: inline-block; - fill: currentColor; - vertical-align: text-bottom; -} - -.markdown-body h1:hover .anchor .octicon-link:before, -.markdown-body h2:hover .anchor .octicon-link:before, -.markdown-body h3:hover .anchor .octicon-link:before, -.markdown-body h4:hover .anchor .octicon-link:before, -.markdown-body h5:hover .anchor .octicon-link:before, -.markdown-body h6:hover .anchor .octicon-link:before { - width: 16px; - height: 16px; - content: ' '; - display: inline-block; - background-color: currentColor; - -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>"); - mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>"); -} - -.markdown-body details, -.markdown-body figcaption, -.markdown-body figure { - display: block; -} - -.markdown-body summary { - display: list-item; -} - -.markdown-body [hidden] { - display: none !important; -} - -.markdown-body a { - background-color: transparent; - color: #0969da; - text-decoration: none; -} - -.markdown-body a:active, -.markdown-body a:hover { - outline-width: 0; -} - -.markdown-body abbr[title] { - border-bottom: none; - text-decoration: underline dotted; -} - -.markdown-body b, -.markdown-body strong { - font-weight: 600; -} - -.markdown-body dfn { - font-style: italic; -} - -.markdown-body h1 { - margin: .67em 0; - font-weight: 600; - padding-bottom: .3em; - font-size: 2em; - border-bottom: 1px solid hsla(210,18%,87%,1); -} - -.markdown-body mark { - background-color: #fff8c5; - color: #24292f; -} - -.markdown-body small { - font-size: 90%; -} - -.markdown-body sub, -.markdown-body sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -.markdown-body sub { - bottom: -0.25em; -} - -.markdown-body sup { - top: -0.5em; -} - -.markdown-body img { - border-style: none; - max-width: 100%; - box-sizing: content-box; - background-color: #ffffff; -} - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre, -.markdown-body samp { - font-family: monospace,monospace; - font-size: 1em; -} - -.markdown-body figure { - margin: 1em 40px; -} - -.markdown-body hr { - box-sizing: content-box; - overflow: hidden; - background: transparent; - border-bottom: 1px solid hsla(210,18%,87%,1); - height: .25em; - padding: 0; - margin: 24px 0; - background-color: #d0d7de; - border: 0; -} - -.markdown-body input { - font: inherit; - margin: 0; - overflow: visible; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -.markdown-body [type=button], -.markdown-body [type=reset], -.markdown-body [type=submit] { - -webkit-appearance: button; -} - -.markdown-body [type=button]::-moz-focus-inner, -.markdown-body [type=reset]::-moz-focus-inner, -.markdown-body [type=submit]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -.markdown-body [type=button]:-moz-focusring, -.markdown-body [type=reset]:-moz-focusring, -.markdown-body [type=submit]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -.markdown-body [type=checkbox], -.markdown-body [type=radio] { - box-sizing: border-box; - padding: 0; -} - -.markdown-body [type=number]::-webkit-inner-spin-button, -.markdown-body [type=number]::-webkit-outer-spin-button { - height: auto; -} - -.markdown-body [type=search] { - -webkit-appearance: textfield; - outline-offset: -2px; -} - -.markdown-body [type=search]::-webkit-search-cancel-button, -.markdown-body [type=search]::-webkit-search-decoration { - -webkit-appearance: none; -} - -.markdown-body ::-webkit-input-placeholder { - color: inherit; - opacity: .54; -} - -.markdown-body ::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; -} - -.markdown-body a:hover { - text-decoration: underline; -} - -.markdown-body hr::before { - display: table; - content: ""; -} - -.markdown-body hr::after { - display: table; - clear: both; - content: ""; -} - -.markdown-body table { - border-spacing: 0; - border-collapse: collapse; - display: block; - width: max-content; - max-width: 100%; - overflow: auto; -} - -.markdown-body td, -.markdown-body th { - padding: 0; -} - -.markdown-body details summary { - cursor: pointer; -} - -.markdown-body details:not([open])>*:not(summary) { - display: none !important; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; - line-height: 10px; - color: #24292f; - vertical-align: middle; - background-color: #f6f8fa; - border: solid 1px rgba(175,184,193,0.2); - border-bottom-color: rgba(175,184,193,0.2); - border-radius: 6px; - box-shadow: inset 0 -1px 0 rgba(175,184,193,0.2); -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 24px; - margin-bottom: 16px; - font-weight: 600; - line-height: 1.25; -} - -.markdown-body h2 { - font-weight: 600; - padding-bottom: .3em; - font-size: 1.5em; - border-bottom: 1px solid hsla(210,18%,87%,1); -} - -.markdown-body h3 { - font-weight: 600; - font-size: 1.25em; -} - -.markdown-body h4 { - font-weight: 600; - font-size: 1em; -} - -.markdown-body h5 { - font-weight: 600; - font-size: .875em; -} - -.markdown-body h6 { - font-weight: 600; - font-size: .85em; - color: #57606a; -} - -.markdown-body p { - margin-top: 0; - margin-bottom: 10px; -} - -.markdown-body blockquote { - margin: 0; - padding: 0 1em; - color: #57606a; - border-left: .25em solid #d0d7de; -} - -.markdown-body ul, -.markdown-body ol { - margin-top: 0; - margin-bottom: 0; - padding-left: 2em; -} - -.markdown-body ol ol, -.markdown-body ul ol { - list-style-type: lower-roman; -} - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { - list-style-type: lower-alpha; -} - -.markdown-body dd { - margin-left: 0; -} - -.markdown-body tt, -.markdown-body code { - font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; - font-size: 12px; -} - -.markdown-body pre { - margin-top: 0; - margin-bottom: 0; - font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; - font-size: 12px; - word-wrap: normal; -} - -.markdown-body .octicon { - display: inline-block; - overflow: visible !important; - vertical-align: text-bottom; - fill: currentColor; -} - -.markdown-body ::placeholder { - color: #6e7781; - opacity: 1; -} - -.markdown-body input::-webkit-outer-spin-button, -.markdown-body input::-webkit-inner-spin-button { - margin: 0; - -webkit-appearance: none; - appearance: none; -} - -.markdown-body .pl-c { - color: #6e7781; -} - -.markdown-body .pl-c1, -.markdown-body .pl-s .pl-v { - color: #0550ae; -} - -.markdown-body .pl-e, -.markdown-body .pl-en { - color: #8250df; -} - -.markdown-body .pl-smi, -.markdown-body .pl-s .pl-s1 { - color: #24292f; -} - -.markdown-body .pl-ent { - color: #116329; -} - -.markdown-body .pl-k { - color: #cf222e; -} - -.markdown-body .pl-s, -.markdown-body .pl-pds, -.markdown-body .pl-s .pl-pse .pl-s1, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sre, -.markdown-body .pl-sr .pl-sra { - color: #0a3069; -} - -.markdown-body .pl-v, -.markdown-body .pl-smw { - color: #953800; -} - -.markdown-body .pl-bu { - color: #82071e; -} - -.markdown-body .pl-ii { - color: #f6f8fa; - background-color: #82071e; -} - -.markdown-body .pl-c2 { - color: #f6f8fa; - background-color: #cf222e; -} - -.markdown-body .pl-sr .pl-cce { - font-weight: bold; - color: #116329; -} - -.markdown-body .pl-ml { - color: #3b2300; -} - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - font-weight: bold; - color: #0550ae; -} - -.markdown-body .pl-mi { - font-style: italic; - color: #24292f; -} - -.markdown-body .pl-mb { - font-weight: bold; - color: #24292f; -} - -.markdown-body .pl-md { - color: #82071e; - background-color: #FFEBE9; -} - -.markdown-body .pl-mi1 { - color: #116329; - background-color: #dafbe1; -} - -.markdown-body .pl-mc { - color: #953800; - background-color: #ffd8b5; -} - -.markdown-body .pl-mi2 { - color: #eaeef2; - background-color: #0550ae; -} - -.markdown-body .pl-mdr { - font-weight: bold; - color: #8250df; -} - -.markdown-body .pl-ba { - color: #57606a; -} - -.markdown-body .pl-sg { - color: #8c959f; -} - -.markdown-body .pl-corl { - text-decoration: underline; - color: #0a3069; -} - -.markdown-body [data-catalyst] { - display: block; -} - -.markdown-body g-emoji { - font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; - font-size: 1em; - font-style: normal !important; - font-weight: 400; - line-height: 1; - vertical-align: -0.075em; -} - -.markdown-body g-emoji img { - width: 1em; - height: 1em; -} - -.markdown-body::before { - display: table; - content: ""; -} - -.markdown-body::after { - display: table; - clear: both; - content: ""; -} - -.markdown-body>*:first-child { - margin-top: 0 !important; -} - -.markdown-body>*:last-child { - margin-bottom: 0 !important; -} - -.markdown-body a:not([href]) { - color: inherit; - text-decoration: none; -} - -.markdown-body .absent { - color: #cf222e; -} - -.markdown-body .anchor { - float: left; - padding-right: 4px; - margin-left: -20px; - line-height: 1; -} - -.markdown-body .anchor:focus { - outline: none; -} - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre, -.markdown-body details { - margin-top: 0; - margin-bottom: 16px; -} - -.markdown-body blockquote>:first-child { - margin-top: 0; -} - -.markdown-body blockquote>:last-child { - margin-bottom: 0; -} - -.markdown-body sup>a::before { - content: "["; -} - -.markdown-body sup>a::after { - content: "]"; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - color: #24292f; - vertical-align: middle; - visibility: hidden; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { - text-decoration: none; -} - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { - visibility: visible; -} - -.markdown-body h1 tt, -.markdown-body h1 code, -.markdown-body h2 tt, -.markdown-body h2 code, -.markdown-body h3 tt, -.markdown-body h3 code, -.markdown-body h4 tt, -.markdown-body h4 code, -.markdown-body h5 tt, -.markdown-body h5 code, -.markdown-body h6 tt, -.markdown-body h6 code { - padding: 0 .2em; - font-size: inherit; -} - -.markdown-body ul.no-list, -.markdown-body ol.no-list { - padding: 0; - list-style-type: none; -} - -.markdown-body ol[type="1"] { - list-style-type: decimal; -} - -.markdown-body ol[type=a] { - list-style-type: lower-alpha; -} - -.markdown-body ol[type=i] { - list-style-type: lower-roman; -} - -.markdown-body div>ol:not([type]) { - list-style-type: decimal; -} - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body li>p { - margin-top: 16px; -} - -.markdown-body li+li { - margin-top: .25em; -} - -.markdown-body dl { - padding: 0; -} - -.markdown-body dl dt { - padding: 0; - margin-top: 16px; - font-size: 1em; - font-style: italic; - font-weight: 600; -} - -.markdown-body dl dd { - padding: 0 16px; - margin-bottom: 16px; -} - -.markdown-body table th { - font-weight: 600; -} - -.markdown-body table th, -.markdown-body table td { - padding: 6px 13px; - border: 1px solid #d0d7de; -} - -.markdown-body table tr { - background-color: #ffffff; - border-top: 1px solid hsla(210,18%,87%,1); -} - -.markdown-body table tr:nth-child(2n) { - background-color: #f6f8fa; -} - -.markdown-body table img { - background-color: transparent; -} - -.markdown-body img[align=right] { - padding-left: 20px; -} - -.markdown-body img[align=left] { - padding-right: 20px; -} - -.markdown-body .emoji { - max-width: none; - vertical-align: text-top; - background-color: transparent; -} - -.markdown-body span.frame { - display: block; - overflow: hidden; -} - -.markdown-body span.frame>span { - display: block; - float: left; - width: auto; - padding: 7px; - margin: 13px 0 0; - overflow: hidden; - border: 1px solid #d0d7de; -} - -.markdown-body span.frame span img { - display: block; - float: left; -} - -.markdown-body span.frame span span { - display: block; - padding: 5px 0 0; - clear: both; - color: #24292f; -} - -.markdown-body span.align-center { - display: block; - overflow: hidden; - clear: both; -} - -.markdown-body span.align-center>span { - display: block; - margin: 13px auto 0; - overflow: hidden; - text-align: center; -} - -.markdown-body span.align-center span img { - margin: 0 auto; - text-align: center; -} - -.markdown-body span.align-right { - display: block; - overflow: hidden; - clear: both; -} - -.markdown-body span.align-right>span { - display: block; - margin: 13px 0 0; - overflow: hidden; - text-align: right; -} - -.markdown-body span.align-right span img { - margin: 0; - text-align: right; -} - -.markdown-body span.float-left { - display: block; - float: left; - margin-right: 13px; - overflow: hidden; -} - -.markdown-body span.float-left span { - margin: 13px 0 0; -} - -.markdown-body span.float-right { - display: block; - float: right; - margin-left: 13px; - overflow: hidden; -} - -.markdown-body span.float-right>span { - display: block; - margin: 13px auto 0; - overflow: hidden; - text-align: right; -} - -.markdown-body code, -.markdown-body tt { - padding: .2em .4em; - margin: 0; - font-size: 85%; - background-color: rgba(175,184,193,0.2); - border-radius: 6px; -} - -.markdown-body code br, -.markdown-body tt br { - display: none; -} - -.markdown-body del code { - text-decoration: inherit; -} - -.markdown-body pre code { - font-size: 100%; -} - -.markdown-body pre>code { - padding: 0; - margin: 0; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.markdown-body .highlight { - margin-bottom: 16px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body .highlight pre, -.markdown-body pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f6f8fa; - border-radius: 6px; -} - -.markdown-body pre code, -.markdown-body pre tt { - display: inline; - max-width: auto; - padding: 0; - margin: 0; - overflow: visible; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.markdown-body .csv-data td, -.markdown-body .csv-data th { - padding: 5px; - overflow: hidden; - font-size: 12px; - line-height: 1; - text-align: left; - white-space: nowrap; -} - -.markdown-body .csv-data .blob-num { - padding: 10px 8px 9px; - text-align: right; - background: #ffffff; - border: 0; -} - -.markdown-body .csv-data tr { - border-top: 0; -} - -.markdown-body .csv-data th { - font-weight: 600; - background: #f6f8fa; - border-top: 0; -} - -.markdown-body .footnotes { - font-size: 12px; - color: #57606a; - border-top: 1px solid #d0d7de; -} - -.markdown-body .footnotes ol { - padding-left: 16px; -} - -.markdown-body .footnotes li { - position: relative; -} - -.markdown-body .footnotes li:target::before { - position: absolute; - top: -8px; - right: -8px; - bottom: -8px; - left: -24px; - pointer-events: none; - content: ""; - border: 2px solid #0969da; - border-radius: 6px; -} - -.markdown-body .footnotes li:target { - color: #24292f; -} - -.markdown-body .footnotes .data-footnote-backref g-emoji { - font-family: monospace; -} - -.markdown-body .task-list-item { - list-style-type: none; -} - -.markdown-body .task-list-item label { - font-weight: 400; -} - -.markdown-body .task-list-item.enabled label { - cursor: pointer; -} - -.markdown-body .task-list-item+.task-list-item { - margin-top: 3px; -} - -.markdown-body .task-list-item .handle { - display: none; -} - -.markdown-body .task-list-item-checkbox { - margin: 0 .2em .25em -1.6em; - vertical-align: middle; -} - -.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { - margin: 0 -1.6em .25em .2em; -} - -.markdown-body ::-webkit-calendar-picker-indicator { - filter: invert(50%); -} - -[data-theme^='light'] { - .markdown-body { - pre { - background-color: rgba(0, 0, 0, 0.03); - } - } -} - -[data-theme^='dark'] { - .markdown-body { - pre { - background-color: rgba(0, 0, 0, 0.15); - } - .CodeMirror-gutter { - background-color: rgba(0, 0, 0, 0.03) !important; - } - } -} \ No newline at end of file diff --git a/src/renderer/assets/scss/mixins.scss b/src/renderer/assets/scss/mixins.scss deleted file mode 100644 index f2729e20..00000000 --- a/src/renderer/assets/scss/mixins.scss +++ /dev/null @@ -1,19 +0,0 @@ -@mixin form-input-default() { - color: var(--color-text); - box-sizing: border-box; - -webkit-appearance: none; - outline: none; - border: none; - line-height: 32px; - height: 32px; - background-color: transparent; - border: 1px solid var(--color-contrast-low); - font-size: var(--text-md); - transition: border-color 0.3s; - &:focus { - transition: border-color 0.3s; - } - &::-webkit-input-placeholder { - color: var(--color-contrast-low); - } -} \ No newline at end of file diff --git a/src/renderer/assets/scss/reset.scss b/src/renderer/assets/scss/reset.scss deleted file mode 100644 index 06dcc218..00000000 --- a/src/renderer/assets/scss/reset.scss +++ /dev/null @@ -1,173 +0,0 @@ -* { - box-sizing: border-box; -} - -html { - line-height: 1.15; - -webkit-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -a { - background-color: transparent; -} - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -img { - border-style: none; -} - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0; - padding: 0; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} - -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - white-space: normal; - padding: 0; -} - -progress { - vertical-align: baseline; -} - -textarea { - overflow: auto; -} - -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; - padding: 0; -} - -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} - -[type='search'] { - -webkit-appearance: textfield; - outline-offset: -2px; -} - -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; -} - -summary { - display: list-item; -} - -main, -details { - display: block; -} - -pre, -code, -kbd, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -template, -[hidden] { - display: none; -} diff --git a/src/renderer/assets/scss/themes.scss b/src/renderer/assets/scss/themes.scss deleted file mode 100644 index 8a360d50..00000000 --- a/src/renderer/assets/scss/themes.scss +++ /dev/null @@ -1,309 +0,0 @@ -//TODO: оптимизировать - -// LIGHT - -[data-theme='light:solarized'] { - --color-primary: hsl(44, 84%, 54%); - - --color-bg: hsl(44, 87%, 94%); - - --color-contrast-lower: hsl(44, 84%, 90%); - --color-contrast-lower-alt: hsl(44, 0%, 98%); - --color-contrast-lower-alt2: hsl(44, 60%, 94%); - --color-contrast-lower-alt3: hsl(44, 60%, 85%); - --color-contrast-lower-alt4: hsl(44, 60%, 75%); - --color-contrast-low: hsl(44, 60%, 60%); - --color-contrast-low-alt: hsl(44, 60%, 70%); - --color-contrast-medium: hsl(44, 60%, 40%); - --color-contrast-high: hsl(44, 60%, 30%); - --color-contrast-higher: hsl(44, 60%, 10%); - - --color-snippet-selected: var(--color-contrast-lower-alt2); - - --color-sidebar: #fff; - --color-sidebar-item-selected: var(--color-contrast-lower-alt2); - - --color-border: var(--color-contrast-lower-alt3); - - --color-button: hsl(44, 60%, 85%); - --color-button-hover: var(--color-contrast-low-alt); - --color-button-action-hover: var(--color-contrast-lower-alt3); - - --color-checkbox: var(--color-contrast-lower-alt); - - --color-input: var(--color-contrast-lower-alt); - - --color-select: var(--color-contrast-lower-alt); - - --color-menu-selected: var(--color-contrast-lower-alt3); - - --color-tag-delete: var(--color-contrast-lower-alt4); -} - -[data-theme='light:material'] { - --color-bg: hsl(0, 0%, 98%); -} - -// DARK - -[data-theme='dark:one'] { - --color-primary: hsl(215, 69%, 45%); - - --color-bg: hsl(220, 13%, 18%); - - --color-contrast-lower: hsl(220, 13%, 20%); - --color-contrast-lower-alt: hsl(220, 13%, 22%); - --color-contrast-lower-alt2: hsl(220, 13%, 25%); - --color-contrast-lower-alt3: hsl(220, 13%, 30%); - --color-contrast-lower-low: hsl(220, 13%, 40%); - --color-contrast-medium: hsl(220, 13%, 50%); - - --color-border: var(--color-contrast-lower-alt2); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower-alt); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower-alt); - --color-sidebar-icon: var(--color-text); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower-alt); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme='dark:dracula'] { - --color-primary: hsl(215, 69%, 45%); - - // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #282A36; - - --color-contrast-lower: hsl(231, 15%, 20%); - --color-contrast-lower-alt: hsl(231, 15%, 22%); - --color-contrast-lower-alt2: hsl(231, 15%, 25%); - --color-contrast-lower-alt3: hsl(231, 15%, 30%); - --color-contrast-lower-low: hsl(231, 15%, 40%); - --color-contrast-lower-medium: hsl(231, 15%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower-alt2); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower-alt2); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower-alt2); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme='dark:monokai'] { - --color-primary: hsl(215, 69%, 45%); - - // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #272822; - - --color-contrast-lower: hsl(70, 8%, 20%); - --color-contrast-lower-alt: hsl(70, 8%, 22%); - --color-contrast-lower-alt2: hsl(70, 8%, 25%); - --color-contrast-lower-alt3: hsl(70, 8%, 30%); - --color-contrast-lower-low: hsl(70, 8%, 40%); - --color-contrast-lower-medium: hsl(70, 8%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme='dark:merbivore'] { - --color-primary: hsl(215, 69%, 45%); - - --color-bg: hsl(0, 0%, 11%); - - --color-contrast-lower: hsl(0, 0%, 20%); - --color-contrast-lower-alt: hsl(0, 0%, 22%); - --color-contrast-lower-alt2: hsl(0, 0%, 25%); - --color-contrast-lower-alt3: hsl(0, 0%, 30%); - --color-contrast-lower-low: hsl(0, 0%, 40%); - --color-contrast-lower-medium: hsl(0, 0%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme='dark:material'] { - --color-primary: hsl(215, 69%, 45%); - - // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #263238; - - --color-contrast-lower: hsl(200, 19%, 22%); - --color-contrast-lower-alt: hsl(200, 19%, 25%); - --color-contrast-lower-alt2: hsl(200, 19%, 27%); - --color-contrast-lower-alt3: hsl(200, 19%, 30%); - --color-contrast-lower-low: hsl(200, 19%, 40%); - --color-contrast-lower-medium: hsl(200, 19%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - - -[data-theme='dark:material-palenight'] { - --color-primary: hsl(215, 69%, 45%); - - // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #292D3F; - - - --color-contrast-lower: hsl(229, 21%, 22%); - --color-contrast-lower-alt: hsl(229, 21%, 25%); - --color-contrast-lower-alt2: hsl(229, 21%, 27%); - --color-contrast-lower-alt3: hsl(229, 21%, 30%); - --color-contrast-lower-low: hsl(229, 21%, 40%); - --color-contrast-lower-medium: hsl(229, 21%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower-alt); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower-alt); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower-alt); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme='dark:tokyo-night'] { - --color-primary: hsl(215, 69%, 45%); - - // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #1C2029; - - - --color-contrast-lower: hsl(229, 21%, 20%); - --color-contrast-lower-alt: hsl(229, 21%, 22%); - --color-contrast-lower-alt2: hsl(229, 21%, 25%); - --color-contrast-lower-alt3: hsl(229, 21%, 30%); - --color-contrast-lower-low: hsl(229, 21%, 40%); - --color-contrast-lower-medium: hsl(229, 21%, 50%); - - --color-snippet-list: var(--color-bg); - --color-snippet-selected: var(--color-contrast-lower-alt); - - --color-sidebar: var(--color-bg); - --color-sidebar-item-selected: var(--color-contrast-lower-alt); - --color-sidebar-icon: var(--color-text); - - --color-border: var(--color-contrast-lower-alt2); - - --color-text: hsl(0, 0%, 70%); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); - - --color-input: var(--color-bg); - - --color-menu-selected: var(--color-contrast-lower-alt); - - --color-tag-delete: var(--color-contrast-lower-alt3); -} - -[data-theme^="dark"] { - > a { - color: var(--color-contrast-medium); - &:hover { - color: var(--color-text); - } - } -} \ No newline at end of file diff --git a/src/renderer/assets/scss/variables.scss b/src/renderer/assets/scss/variables.scss deleted file mode 100644 index c82fb7bf..00000000 --- a/src/renderer/assets/scss/variables.scss +++ /dev/null @@ -1,67 +0,0 @@ -:root { - --sidebar-width: 180px; - --snippets-list-width: 250px; - --title-bar-height: 15px; - --title-bar-height-offset: -5px; - --menu-header: 80px; - - --spacing-unit: 4px; - --spacing-xs: calc(var(--spacing-unit) * 2); - --spacing-sm: calc(var(--spacing-unit) * 4); - --spacing-md: calc(var(--spacing-unit) * 6); - --spacing-lg: calc(var(--spacing-unit) * 8); - --spacing-xl: calc(var(--spacing-unit) * 10); - - --font-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, - Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-code: 'SF Mono', 'Consolas', Menlo, Monaco, "Courier New", monospace; - - --text-base-size: 10px; - --text-xs: calc(var(--text-base-size) * 1); - --text-sm: calc(var(--text-base-size) * 1.2); - --text-md: calc(var(--text-base-size) * 1.4); - --text-lg: calc(var(--text-base-size) * 1.8); - --text-xl: calc(var(--text-base-size) * 2.4); - --text-xxl: calc(var(--text-base-size) * 3.2); - --text-xxxl: calc(var(--text-base-size) * 3.6); - - --color-primary: hsl(215, 93%, 52%); - - --color-bg: hsl(0, 0%, 100%); - - --color-contrast-lower: hsl(0, 0%, 97%); - --color-contrast-lower-alt: hsl(0, 0%, 92%); - --color-contrast-low: hsl(0, 0%, 85%); - --color-contrast-low-alt: hsl(0, 0%, 80%); - --color-contrast-medium: hsl(0, 0%, 50%); - --color-contrast-high: hsl(0, 0%, 15%); - --color-contrast-higher: hsl(0, 0%, 0%); - - --color-text: hsl(0, 0%, 0%); - --color-text-2: hsl(0, 0%, 15%); - --color-text-3: hsl(0, 0%, 50%); - --color-text-4: hsl(0, 0%, 80%); - --color-text-5: hsl(0, 0%, 85%); - - --color-border: var(--color-contrast-low); - - --color-button: var(--color-contrast-lower-alt); - --color-button-hover: var(--color-contrast-low); - --color-button-action: var(--color-contrast-medium); - --color-button-action-hover: var(--color-contrast-lower-alt); - - --color-sidebar: var(--color-contrast-lower); - --color-sidebar-item-selected: var(--color-contrast-low); - --color-sidebar-icon: var(--color-text); - --color-sidebar-icon-selected: #fff; - - --color-snippet-selected: hsl(0, 0%, 94%); - --color-snippet-list: var(--color-bg); - - --color-editor-scrollbar: rgba(121, 121, 121, 0.4); - - --color-menu-selected: var(--color-contrast-lower-alt); - - --color-tag-delete: var(--color-contrast-lower-alt); -} - diff --git a/src/renderer/assets/scss/vendor.scss b/src/renderer/assets/scss/vendor.scss deleted file mode 100644 index 9779409d..00000000 --- a/src/renderer/assets/scss/vendor.scss +++ /dev/null @@ -1,94 +0,0 @@ -.ps { - $r: &; - &__rail-y { - background-color: rgba(121, 121, 121, 0.8); - width: 5px; - &:hover { - #{$r}__thumb-y { - width: 5px; - right: 0; - } - } - } - &__rail-x { - background-color: rgba(121, 121, 121, 0.8); - width: 5px; - &:hover { - height: 4px; - background-color: transparent !important; - opacity: 0.4 !important; - #{$r}__thumb-x { - height: 5px; - right: 0; - } - } - } - &__thumb-x, - &__thumb-y { - background-color: rgba(121, 121, 121, 0.8); - } - &__thumb-y { - width: 5px; - right: 0; - } - &__thumb-x { - height: 5px; - } -} - - -.ti-tags { - background-color: var(--color-bg) !important; -} -.ti-tag { - background-color: var(--color-contrast-lower) !important; - color: var(--color-text) !important; - border: 1px solid var(--color-border) !important; -} -.ti-new-tag-input { - background-color: var(--color-bg) !important; - color: var(--color-text) !important; -} -.ti-selected-item { - background-color: var(--color-primary) !important; -} -.ti-deletion-mark { - background-color: var(--color-tag-delete) !important; -} -.ti-autocomplete { - border: 1px solid var(--color-border) !important; - background-color: var(--color-bg) !important; -} - -.toast-container { - .toast { - width: 400px; - &-text { - display: flex; - align-items: center; - } - } -} - -.v-popper { - &--theme-tooltip { - .v-popper { - &__inner { - font-size: 12px; - padding: 4px 8px !important; - border-radius: 3px !important; - } - &__arrow-container { - display: none; - } - } - } -} - -.toast { - code { - background-color: #eee; - border-radius: 3px; - padding: 0 4px; - } -} diff --git a/src/renderer/assets/svg/arrow-slash.svg b/src/renderer/assets/svg/arrow-slash.svg deleted file mode 100644 index 37081779..00000000 --- a/src/renderer/assets/svg/arrow-slash.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M4.12132 2.29289C3.7308 1.90237 3.09763 1.90237 2.70711 2.29289C2.31658 2.68342 2.31658 3.31658 2.70711 3.70711L6.79 7.79L3.29 11.29C3.19627 11.383 3.12188 11.4936 3.07111 11.6154C3.02034 11.7373 2.9942 11.868 2.9942 12C2.9942 12.132 3.02034 12.2627 3.07111 12.3846C3.12188 12.5064 3.19627 12.617 3.29 12.71L8.29 17.71C8.38296 17.8037 8.49356 17.8781 8.61542 17.9289C8.73728 17.9797 8.86799 18.0058 9 18.0058C9.13201 18.0058 9.26272 17.9797 9.38458 17.9289C9.50644 17.8781 9.61704 17.8037 9.71 17.71C9.80373 17.617 9.87812 17.5064 9.92889 17.3846C9.97966 17.2627 10.0058 17.132 10.0058 17C10.0058 16.868 9.97966 16.7373 9.92889 16.6154C9.87812 16.4936 9.80373 16.383 9.71 16.29L5.41 12L8.20826 9.20825L14.7906 15.7906L14.29 16.29C14.1963 16.383 14.1219 16.4936 14.0711 16.6154C14.0203 16.7373 13.9942 16.868 13.9942 17C13.9942 17.132 14.0203 17.2627 14.0711 17.3846C14.1219 17.5064 14.1963 17.617 14.29 17.71C14.383 17.8037 14.4936 17.8781 14.6154 17.9289C14.7373 17.9797 14.868 18.0058 15 18.0058C15.132 18.0058 15.2627 17.9797 15.3846 17.9289C15.5064 17.8781 15.617 17.8037 15.71 17.71L16.21 17.21L20.2929 21.2929C20.6834 21.6834 21.3166 21.6834 21.7071 21.2929C22.0976 20.9024 22.0976 20.2692 21.7071 19.8787L17.6242 15.7958L20.71 12.71C20.8037 12.617 20.8781 12.5064 20.9289 12.3846C20.9797 12.2627 21.0058 12.132 21.0058 12C21.0058 11.868 20.9797 11.7373 20.9289 11.6154C20.8781 11.4936 20.8037 11.383 20.71 11.29L15.71 6.29C15.6168 6.19676 15.5061 6.1228 15.3842 6.07234C15.2624 6.02188 15.1319 5.99591 15 5.99591C14.7337 5.99591 14.4783 6.1017 14.29 6.29C14.1968 6.38324 14.1228 6.49393 14.0723 6.61575C14.0219 6.73757 13.9959 6.86814 13.9959 7C13.9959 7.2663 14.1017 7.5217 14.29 7.71L18.59 12L16.2064 14.378L9.62411 7.79569L9.71 7.71C9.80373 7.61704 9.87812 7.50644 9.92889 7.38458C9.97966 7.26272 10.0058 7.13201 10.0058 7C10.0058 6.86799 9.97966 6.73728 9.92889 6.61542C9.87812 6.49357 9.80373 6.38296 9.71 6.29C9.61704 6.19627 9.50644 6.12188 9.38458 6.07111C9.26272 6.02034 9.13201 5.9942 9 5.9942C8.86799 5.9942 8.73728 6.02034 8.61542 6.07111C8.49356 6.12188 8.38296 6.19627 8.29 6.29L8.20422 6.37579L4.12132 2.29289Z"/> -</svg> diff --git a/src/renderer/components/devtools/composables/index.ts b/src/renderer/components/devtools/composables/index.ts deleted file mode 100644 index 4acb5eae..00000000 --- a/src/renderer/components/devtools/composables/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useClipboard } from '@vueuse/core' - -export function useCopy (value: string) { - const { copy } = useClipboard() - copy(value) -} diff --git a/src/renderer/components/devtools/crypto/HashTool.vue b/src/renderer/components/devtools/crypto/HashTool.vue deleted file mode 100644 index 82bce277..00000000 --- a/src/renderer/components/devtools/crypto/HashTool.vue +++ /dev/null @@ -1,104 +0,0 @@ -<template> - <div class="hash-tools"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.algorithm')"> - <AppSelect - v-model="algo" - :options="options" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.result')"> - <AppInput - v-model="outputValue" - style="width: 100%" - type="textarea" - readonly - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, computed } from 'vue' -import sha1 from 'crypto-js/sha1' -import sha224 from 'crypto-js/sha224' -import sha256 from 'crypto-js/sha256' -import sha384 from 'crypto-js/sha384' -import sha512 from 'crypto-js/sha512' -import sha3 from 'crypto-js/sha3' -import md5 from 'crypto-js/md5' -import ripemd160 from 'crypto-js/ripemd160' -import type { Algo } from './types' -import options from './algo-options.json' -import { useCopy } from '../composables' - -const inputValue = ref('') -const algo = ref<Algo>('md5') - -const outputValue = computed(() => { - let result = '' - if (inputValue.value === '') { - return result - } - - if (algo.value === 'sha256') { - result = sha256(inputValue.value).toString() - } - - if (algo.value === 'sha512') { - result = sha512(inputValue.value).toString() - } - - if (algo.value === 'md5') { - result = md5(inputValue.value).toString() - } - - if (algo.value === 'sha1') { - result = sha1(inputValue.value).toString() - } - - if (algo.value === 'sha224') { - result = sha224(inputValue.value).toString() - } - - if (algo.value === 'sha384') { - result = sha384(inputValue.value).toString() - } - - if (algo.value === 'sha3') { - result = sha3(inputValue.value).toString() - } - - if (algo.value === 'ripemd160') { - result = ripemd160(inputValue.value).toString() - } - - return result -}) - -function onClear () { - inputValue.value = '' -} - -track('devtools/hash-generator') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/crypto/HmacTool.vue b/src/renderer/components/devtools/crypto/HmacTool.vue deleted file mode 100644 index 9f709eaf..00000000 --- a/src/renderer/components/devtools/crypto/HmacTool.vue +++ /dev/null @@ -1,111 +0,0 @@ -<template> - <div class="hmac-tools"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.algorithm')"> - <AppSelect - v-model="algo" - :options="options" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.secretKey')"> - <AppInput - v-model="secretValue" - style="width: 100%" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.result')"> - <AppInput - v-model="outputValue" - style="width: 100%" - type="textarea" - readonly - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, computed } from 'vue' -import sha1 from 'crypto-js/hmac-sha1' -import sha224 from 'crypto-js/hmac-sha224' -import sha256 from 'crypto-js/hmac-sha256' -import sha384 from 'crypto-js/hmac-sha384' -import sha512 from 'crypto-js/hmac-sha512' -import sha3 from 'crypto-js/hmac-sha3' -import md5 from 'crypto-js/hmac-md5' -import ripemd160 from 'crypto-js/hmac-ripemd160' -import type { Algo } from './types' -import options from './algo-options.json' -import { useCopy } from '../composables' - -const inputValue = ref('') -const secretValue = ref('') -const algo = ref<Algo>('md5') - -const outputValue = computed(() => { - let result = '' - if (inputValue.value === '') { - return result - } - - if (algo.value === 'sha256') { - result = sha256(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'sha512') { - result = sha512(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'md5') { - result = md5(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'sha1') { - result = sha1(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'sha224') { - result = sha224(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'sha384') { - result = sha384(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'sha3') { - result = sha3(inputValue.value, secretValue.value).toString() - } - - if (algo.value === 'ripemd160') { - result = ripemd160(inputValue.value, secretValue.value).toString() - } - - return result -}) - -function onClear () { - inputValue.value = '' -} - -track('devtools/hmac-generator') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/crypto/PassTool.vue b/src/renderer/components/devtools/crypto/PassTool.vue deleted file mode 100644 index 875d3496..00000000 --- a/src/renderer/components/devtools/crypto/PassTool.vue +++ /dev/null @@ -1,144 +0,0 @@ -<template> - <div class="password-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.length')"> - <AppInput - v-model="length" - type="number" - /> - <template #desc> - Max: 2048 - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.options')"> - <AppCheckbox - v-model="options.numbers" - :label="i18n.t('devtools:form.numbers')" - name="numbers" - /> - <AppCheckbox - v-model="options.symbols" - :label="i18n.t('devtools:form.symbols')" - name="symbols" - /> - <AppCheckbox - v-model="options.lowercase" - :label="i18n.t('devtools:form.lowercase')" - name="lowercase" - /> - <AppCheckbox - v-model="options.uppercase" - :label="i18n.t('devtools:form.uppercase')" - name="uppercase" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.result')"> - <AppInput - v-model="outputValue" - style="width: 100%" - readonly - /> - <template #actions> - <AppButton @click="onGenerate"> - {{ i18n.t('common:button.generate') }} - </AppButton> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, watch, nextTick, reactive } from 'vue' -import { useCopy } from '../composables' - -const length = ref(10) -const outputValue = ref('') - -const options = reactive({ - numbers: true, - symbols: false, - lowercase: true, - uppercase: true -}) - -type PasswordOptions = { - length: number - includeSymbols: boolean - includeNumbers: boolean - useLowercaseOnly: boolean - useUppercaseOnly: boolean -} - -function generatePassword (options: PasswordOptions): string { - const { - length, - includeNumbers, - includeSymbols, - useLowercaseOnly, - useUppercaseOnly - } = options - - const lowerCaseLetters = 'abcdefghijklmnopqrstuvwxyz' - const upperCaseLetters = lowerCaseLetters.toUpperCase() - const numbers = '0123456789' - const symbols = '!@#$%^&*()_-+=<>?' - - let characters = useLowercaseOnly - ? lowerCaseLetters - : useUppercaseOnly - ? upperCaseLetters - : lowerCaseLetters + upperCaseLetters - - if (includeNumbers) { - characters += numbers - } - - if (includeSymbols) { - characters += symbols - } - - let password = '' - - for (let i = 0; i < length; i++) { - const index = Math.floor(Math.random() * characters.length) - password += characters[index] - } - - return password -} - -function onGenerate () { - outputValue.value = generatePassword({ - length: length.value, - includeSymbols: options.symbols, - includeNumbers: options.numbers, - useLowercaseOnly: !options.uppercase && options.lowercase, - useUppercaseOnly: !options.lowercase && options.uppercase - }) -} - -function onClear () { - outputValue.value = '' -} - -watch(length, v => { - if (v > 2048) { - nextTick(() => { - length.value = 2048 - }) - } -}) - -track('devtools/pass-generator') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/crypto/UuidTool.vue b/src/renderer/components/devtools/crypto/UuidTool.vue deleted file mode 100644 index 61a62a1c..00000000 --- a/src/renderer/components/devtools/crypto/UuidTool.vue +++ /dev/null @@ -1,85 +0,0 @@ -<template> - <div class="uuid-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.version')"> - <AppSelect - v-model="version" - :options="options" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.amount')"> - <AppInput - v-model="amount" - type="number" - /> - <template #desc> - Max: 1000 - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.result')"> - <AppInput - v-model="outputValue" - style="width: 100%" - readonly - type="textarea" - /> - <template #actions> - <AppButton @click="onGenerate"> - {{ i18n.t('common:button.generate') }} - </AppButton> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, watch, nextTick } from 'vue' -import { v1, v4 } from 'uuid' -import { useCopy } from '../composables' - -const version = ref('1') -const amount = ref(1) -const outputValue = ref('') - -const options = [ - { label: 'v1 (Timestamp-based)', value: '1' }, - { label: 'v4 (Random)', value: '4' } -] - -function onGenerate () { - const uuids = [] - for (let i = 0; i < amount.value; i++) { - if (version.value === '1') { - uuids.push(v1()) - } else { - uuids.push(v4()) - } - } - outputValue.value = uuids.join('\n') -} - -function onClear () { - outputValue.value = '' -} - -watch(amount, v => { - if (v > 1000) { - nextTick(() => { - amount.value = 1000 - }) - } -}) - -track('devtools/uuid-generator') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/crypto/algo-options.json b/src/renderer/components/devtools/crypto/algo-options.json deleted file mode 100644 index 2e1ce957..00000000 --- a/src/renderer/components/devtools/crypto/algo-options.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "label": "MD5", - "value": "md5" - }, - { - "label": "RIPEMD160", - "value": "ripemd160" - }, - { - "label": "SHA1", - "value": "sha1" - }, - { - "label": "SHA224", - "value": "sha224" - }, - { - "label": "SHA256", - "value": "sha256" - }, - { - "label": "SHA3", - "value": "sha3" - }, - { - "label": "SHA384", - "value": "sha384" - }, - { - "label": "SHA512", - "value": "sha512" - } -] diff --git a/src/renderer/components/devtools/crypto/types/index.d.ts b/src/renderer/components/devtools/crypto/types/index.d.ts deleted file mode 100644 index 7c1b806b..00000000 --- a/src/renderer/components/devtools/crypto/types/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Algo = - | 'md5' - | 'ripemd160' - | 'sha1' - | 'sha224' - | 'sha256' - | 'sha3' - | 'sha384' - | 'sha512' diff --git a/src/renderer/components/devtools/encode-decode/Base64EncodeDecodeTool.vue b/src/renderer/components/devtools/encode-decode/Base64EncodeDecodeTool.vue deleted file mode 100644 index dc7f1a24..00000000 --- a/src/renderer/components/devtools/encode-decode/Base64EncodeDecodeTool.vue +++ /dev/null @@ -1,72 +0,0 @@ -<template> - <div class="base-encode-decode-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.type')"> - <AppSelect - v-model="type" - :options="options" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.result')"> - <AppInput - v-model="outputValue" - style="width: 100%" - readonly - type="textarea" - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, computed } from 'vue' -import type { Type } from './types' -import options from './encode-decode-options.json' -import { useCopy } from '../composables' - -const inputValue = ref('') -const type = ref<Type>('encode') - -const outputValue = computed(() => { - let result = '' - if (inputValue.value === '') { - return result - } - - if (type.value === 'encode') { - result = btoa(inputValue.value) - } - - if (type.value === 'decode') { - result = atob(inputValue.value) - } - - return result -}) - -function onClear () { - inputValue.value = '' -} - -track('devtools/base64-encoder-decoder') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/encode-decode/UrlEncodeDecodeTool.vue b/src/renderer/components/devtools/encode-decode/UrlEncodeDecodeTool.vue deleted file mode 100644 index 3f3f1b0b..00000000 --- a/src/renderer/components/devtools/encode-decode/UrlEncodeDecodeTool.vue +++ /dev/null @@ -1,72 +0,0 @@ -<template> - <div class="url-encode-decode-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.type')"> - <AppSelect - v-model="type" - :options="options" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.inputUrl')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.outputUrl')"> - <AppInput - v-model="outputValue" - style="width: 100%" - readonly - type="textarea" - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, computed } from 'vue' -import type { Type } from './types' -import options from './encode-decode-options.json' -import { useCopy } from '../composables' - -const inputValue = ref('') -const type = ref<Type>('encode') - -const outputValue = computed(() => { - let result = '' - if (inputValue.value === '') { - return result - } - - if (type.value === 'encode') { - result = encodeURIComponent(inputValue.value) - } - - if (type.value === 'decode') { - result = decodeURIComponent(inputValue.value) - } - - return result -}) - -function onClear () { - inputValue.value = '' -} - -track('devtools/url-encoder-decoder') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/encode-decode/encode-decode-options.json b/src/renderer/components/devtools/encode-decode/encode-decode-options.json deleted file mode 100644 index 6481044c..00000000 --- a/src/renderer/components/devtools/encode-decode/encode-decode-options.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - { "label": "Encode", "value": "encode" }, - { "label": "Decode", "value": "decode" } -] diff --git a/src/renderer/components/devtools/encode-decode/types/index.d.ts b/src/renderer/components/devtools/encode-decode/types/index.d.ts deleted file mode 100644 index 214c9c02..00000000 --- a/src/renderer/components/devtools/encode-decode/types/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export type Type = 'encode' | 'decode' diff --git a/src/renderer/components/devtools/text/CaseConverterTool.vue b/src/renderer/components/devtools/text/CaseConverterTool.vue deleted file mode 100644 index b19c6d57..00000000 --- a/src/renderer/components/devtools/text/CaseConverterTool.vue +++ /dev/null @@ -1,105 +0,0 @@ -<template> - <div class="case-converter-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - <template #actions> - <AppButton @click="onClick('camelCase')"> - camelCase - </AppButton> - <AppButton @click="onClick('kebabCase')"> - kebab-case - </AppButton> - <AppButton @click="onClick('snakeCase')"> - snake_case - </AppButton> - <AppButton @click="onClick('pascalCase')"> - PascalCase - </AppButton> - <AppButton @click="onClick('lowerCase')"> - lower case - </AppButton> - <AppButton @click="onClick('startCase')"> - Start Case - </AppButton> - <AppButton @click="onClick('upperCase')"> - UPPER CASE - </AppButton> - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.outputString')"> - <AppInput - v-model="outputValue" - style="width: 100%" - type="textarea" - readonly - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref } from 'vue' -import { camelCase, kebabCase, startCase, snakeCase } from 'lodash' -import { useCopy } from '../composables' - -const inputValue = ref('') -const outputValue = ref('') - -type CaseType = - | 'camelCase' - | 'kebabCase' - | 'lowerCase' - | 'startCase' - | 'upperCase' - | 'snakeCase' - | 'pascalCase' - -function pascalCase (str: string) { - return camelCase(str).replace(/^[a-z]/, s => s.toUpperCase()) -} - -function onClick (type: CaseType) { - const lines = inputValue.value.split('\n') - - if (type === 'camelCase') { - outputValue.value = lines.map(line => camelCase(line)).join('\n') - } else if (type === 'kebabCase') { - outputValue.value = lines.map(line => kebabCase(line)).join('\n') - } else if (type === 'lowerCase') { - outputValue.value = inputValue.value.toLowerCase() - } else if (type === 'startCase') { - outputValue.value = lines.map(line => startCase(line)).join('\n') - } else if (type === 'upperCase') { - outputValue.value = inputValue.value.toUpperCase() - } else if (type === 'snakeCase') { - outputValue.value = lines.map(line => snakeCase(line)).join('\n') - } else if (type === 'pascalCase') { - outputValue.value = lines.map(line => pascalCase(line)).join('\n') - } -} - -function onClear () { - inputValue.value = '' - outputValue.value = '' -} - -track('devtools/case-converter') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/text/SlugTool.vue b/src/renderer/components/devtools/text/SlugTool.vue deleted file mode 100644 index e96d6b66..00000000 --- a/src/renderer/components/devtools/text/SlugTool.vue +++ /dev/null @@ -1,51 +0,0 @@ -<template> - <div class="slug-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.outputString')"> - <AppInput - v-model="outputValue" - style="width: 100%" - type="textarea" - readonly - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref, computed } from 'vue' -import slugify from 'slugify' -import { useCopy } from '../composables' - -const inputValue = ref('') -const outputValue = computed(() => { - const lines = inputValue.value.split('\n') - return lines.map(line => slugify(line)).join('\n') -}) - -function onClear () { - inputValue.value = '' -} - -track('devtools/slug-generator') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/text/SortTool.vue b/src/renderer/components/devtools/text/SortTool.vue deleted file mode 100644 index b74711d2..00000000 --- a/src/renderer/components/devtools/text/SortTool.vue +++ /dev/null @@ -1,70 +0,0 @@ -<template> - <div class="slug-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputString')"> - <AppInput - v-model="inputValue" - style="width: 100%" - type="textarea" - /> - <template #actions> - <AppButton @click="onSort('sort')"> - {{ i18n.t('common:button.sort') }} - </AppButton> - <AppButton @click="onSort('revers')"> - {{ i18n.t('common:button.revers') }} - </AppButton> - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.outputString')"> - <AppInput - v-model="outputValue" - style="width: 100%" - type="textarea" - readonly - /> - <template #actions> - <AppButton @click="onClear"> - {{ i18n.t('common:button.clear') }} - </AppButton> - <AppButton @click="useCopy(outputValue)"> - {{ i18n.t('common:button.copy') }} - </AppButton> - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { ref } from 'vue' -import { useCopy } from '../composables' - -const inputValue = ref('') -const outputValue = ref('') - -function onClear () { - inputValue.value = '' - outputValue.value = '' -} - -function onSort (type: string) { - const lines = inputValue.value.split('\n') - - if (type === 'sort') { - lines.sort() - } else if (type === 'revers') { - lines.reverse() - } - - const nonEmptyLines = lines.filter(line => line.trim() !== '') - - outputValue.value = nonEmptyLines.join('\n') -} - -track('devtools/sort') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/devtools/text/UrlParserTool.vue b/src/renderer/components/devtools/text/UrlParserTool.vue deleted file mode 100644 index f720e0fe..00000000 --- a/src/renderer/components/devtools/text/UrlParserTool.vue +++ /dev/null @@ -1,113 +0,0 @@ -<template> - <div class="url-parser-tool"> - <AppForm> - <AppFormItem :label="i18n.t('devtools:form.inputUrl')"> - <AppInput - v-model="inputValue" - style="width: 100%" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.parsedUrl')"> - <table class="table"> - <colgroup> - <col width="20%"> - <col width="80%"> - </colgroup> - <thead> - <tr> - <th>{{ i18n.t('devtools:form.component') }}</th> - <th>{{ i18n.t('devtools:form.value') }}</th> - </tr> - </thead> - <tr> - <td>Protocol</td> - <td>{{ protocol }}</td> - </tr> - <tr> - <td>Hash</td> - <td>{{ hash }}</td> - </tr> - <tr> - <td>Query</td> - <td>{{ query }}</td> - </tr> - <tr> - <td>Pathname</td> - <td>{{ pathname }}</td> - </tr> - <tr> - <td>Host</td> - <td>{{ host }}</td> - </tr> - <tr> - <td>Port</td> - <td>{{ port }}</td> - </tr> - <tr> - <td>Hostname</td> - <td>{{ hostname }}</td> - </tr> - <tr> - <td>Origin</td> - <td>{{ origin }}</td> - </tr> - </table> - </AppFormItem> - <AppFormItem :label="i18n.t('devtools:form.splitQueryString')"> - <table class="table"> - <colgroup> - <col width="20%"> - <col width="80%"> - </colgroup> - <thead> - <tr> - <th>{{ i18n.t('devtools:form.key') }}</th> - <th>{{ i18n.t('devtools:form.value') }}</th> - </tr> - </thead> - <tr - v-for="(v, k) in queryObj" - :key="k" - > - <td>{{ k }}</td> - <td>{{ v }}</td> - </tr> - </table> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { computed, ref } from 'vue' -import qs from 'query-string' - -const inputValue = ref('') - -const url = computed<URL | undefined>(() => { - let url: URL | undefined - - try { - url = new URL(inputValue.value) - return url - } catch (err) {} - return url -}) - -const protocol = computed(() => url.value?.protocol) -const hash = computed(() => url.value?.hash) -const query = computed(() => url.value?.search) -const pathname = computed(() => url.value?.pathname) -const host = computed(() => url.value?.host) -const hostname = computed(() => url.value?.hostname) -const origin = computed(() => url.value?.origin) -const port = computed(() => url.value?.port) - -const queryObj = computed(() => qs.parse(query?.value || '')) - -track('devtools/url-parser') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/editor/Description.vue b/src/renderer/components/editor/Description.vue new file mode 100644 index 00000000..aa40696b --- /dev/null +++ b/src/renderer/components/editor/Description.vue @@ -0,0 +1,46 @@ +<script setup lang="ts"> +import { useSnippets, useSnippetUpdate } from '@/composables' + +const show = defineModel<boolean>('show') + +const { selectedSnippet } = useSnippets() +const { addToUpdateQueue } = useSnippetUpdate() + +const description = computed({ + get() { + return selectedSnippet.value?.description || '' + }, + set(v: string) { + addToUpdateQueue(selectedSnippet.value!.id, { + name: selectedSnippet.value!.name, + description: v, + folderId: selectedSnippet.value!.folder?.id || null, + isDeleted: selectedSnippet.value!.isDeleted, + isFavorites: selectedSnippet.value!.isFavorites, + }) + }, +}) + +watch(selectedSnippet, () => { + if (show.value) { + show.value = false + } +}) +</script> + +<template> + <div + v-if="selectedSnippet?.description || show" + data-editor-description + class="border-border border-b px-2" + > + <UiInput + v-model="description" + variant="ghost" + type="textarea" + :focus="show" + :rows="2" + class="max-h-28 px-0" + /> + </div> +</template> diff --git a/src/renderer/components/editor/Editor.vue b/src/renderer/components/editor/Editor.vue new file mode 100644 index 00000000..f8c993c3 --- /dev/null +++ b/src/renderer/components/editor/Editor.vue @@ -0,0 +1,194 @@ +<script setup lang="ts"> +import type { Language } from '@/components/editor/types' +import { useEditor, useSnippets, useSnippetUpdate } from '@/composables' +import { useDark, useDebounceFn } from '@vueuse/core' +import CodeMirror from 'codemirror' +import 'codemirror/addon/edit/closebrackets' +import 'codemirror/addon/edit/matchbrackets' +import 'codemirror/addon/search/search' +import 'codemirror/addon/search/searchcursor' +import 'codemirror/addon/selection/active-line' +import 'codemirror/addon/scroll/simplescrollbars' +import 'codemirror/addon/scroll/simplescrollbars.css' +import 'codemirror/lib/codemirror.css' +import 'codemirror/theme/neo.css' +import 'codemirror/theme/oceanic-next.css' + +interface Props { + lang: Language + fragments: boolean + fragmentIndex: number + snippetId: string + modelValue: string + isSearchMode: boolean +} + +defineProps<Props>() + +const { settings, cursorPosition } = useEditor() +const { selectedSnippetContent, selectedSnippet } = useSnippets() + +const { addToUpdateContentQueue } = useSnippetUpdate() + +const isDark = useDark() +let editor: CodeMirror.Editor | null = null + +const editorRef = ref() +const scrollBarOpacity = ref(1) + +const fontSize = computed(() => `${settings.fontSize}px`) +const fontFamily = computed(() => settings.fontFamily) + +function getCursorPosition() { + if (!editor) + return + const { line, ch } = editor.getCursor() + cursorPosition.row = line + cursorPosition.column = ch +} + +const hideScrollbar = useDebounceFn(() => { + scrollBarOpacity.value = 0 +}, 1000) + +async function init() { + editor = CodeMirror(editorRef.value, { + value: selectedSnippetContent.value?.value || ' ', + mode: selectedSnippetContent.value?.language || 'plain_text', + theme: isDark.value ? 'oceanic-next' : 'neo', + lineWrapping: settings.wrap, + lineNumbers: true, + tabSize: settings.tabSize, + autoCloseBrackets: true, + matchBrackets: settings.matchBrackets, + styleActiveLine: settings.highlightLine, + scrollbarStyle: 'null', + }) + + editor.on('change', (e) => { + const initValue = JSON.stringify(selectedSnippetContent.value?.value) + const updatedValue = JSON.stringify(e.getValue()) + + if (initValue !== updatedValue) { + addToUpdateContentQueue( + selectedSnippet.value!.id, + selectedSnippetContent.value!.id, + { + label: selectedSnippetContent.value!.label, + value: e.getValue(), + language: selectedSnippetContent.value!.language, + }, + ) + } + }) + + editor.on('cursorActivity', getCursorPosition) + + editor.on('scroll', () => { + scrollBarOpacity.value = 1 + editor?.setOption('scrollbarStyle', 'overlay') + }) + + editor.on('scroll', hideScrollbar) + + watch(selectedSnippetContent, (v) => { + if (!v?.value) + return + setValue(v.value) + }) + + watch(selectedSnippetContent, (v) => { + if (!v) + return + setLanguage(v.language as Language) + }) + + watch(isDark, (v) => { + if (v) { + editor?.setOption('theme', 'oceanic-next') + } + else { + editor?.setOption('theme', 'neo') + } + }) +} + +function setValue(value: string) { + if (!editor) + return + + const cursor = editor.getCursor() + editor?.setValue(value) + + if (cursor) + editor.setCursor(cursor) +} + +function setLanguage(language: Language) { + editor?.setOption('mode', language) +} + +onMounted(() => { + init() +}) +</script> + +<template> + <div + data-editor + class="mt-[var(--title-bar-height)] grid grid-rows-[auto_1fr_auto] overflow-hidden" + > + <EditorHeader /> + <div + ref="editorRef" + class="overflow-auto" + /> + <EditorFooter /> + </div> +</template> + +<style> +@reference '../../styles.css'; +.CodeMirror { + font-size: v-bind(fontSize); + font-family: v-bind(fontFamily); + line-height: calc(v-bind(fontSize) * 1.5); + height: 100%; + background-color: var(--color-bg) !important; +} + +.CodeMirror-gutters { + background-color: var(--color-bg) !important; +} + +.CodeMirror-linenumber { + color: var(--color-text-muted) !important; +} + +.CodeMirror-cursor { + border-left: 2px solid var(--color-fg) !important; + background-color: transparent !important; +} + +.CodeMirror-selected { + background-color: var(--color-list-selection) !important; +} + +.CodeMirror-overlayscroll-vertical div { + background-color: var(--color-scrollbar); + width: 7px; + opacity: v-bind(scrollBarOpacity); + transition: opacity 0.3s; +} + +.CodeMirror-overlayscroll-horizontal div { + background-color: var(--color-scrollbar); + height: 7px; + opacity: v-bind(scrollBarOpacity); + transition: opacity 0.3s; +} + +.CodeMirror-scrollbar-filler { + background-color: transparent; +} +</style> diff --git a/src/renderer/components/editor/EditorCodemirror.vue b/src/renderer/components/editor/EditorCodemirror.vue deleted file mode 100644 index 368dba8f..00000000 --- a/src/renderer/components/editor/EditorCodemirror.vue +++ /dev/null @@ -1,409 +0,0 @@ -<template> - <div class="editor"> - <div - ref="editorRef" - class="body" - /> - <div class="footer"> - <span> - <select - v-model="localLang" - class="lang-selector" - > - <option - v-for="i in languages" - :key="i.value" - :value="i.value" - > - {{ i.name }} - </option> - </select> - </span> - <span> - {{ i18n.t('line') }} {{ cursorPosition.row + 1 }}, - {{ i18n.t('column') }} - {{ cursorPosition.column + 1 }} - </span> - </div> - </div> -</template> - -<script setup lang="ts"> -import CodeMirror from 'codemirror' -import 'codemirror/addon/edit/closebrackets' -import 'codemirror/addon/edit/matchbrackets' -import 'codemirror/addon/search/search' -import 'codemirror/addon/search/searchcursor' -import 'codemirror/addon/selection/active-line' -import 'codemirror/addon/scroll/simplescrollbars' -import 'codemirror/addon/scroll/simplescrollbars.css' -import 'codemirror/lib/codemirror.css' -import { - computed, - nextTick, - onMounted, - onUnmounted, - reactive, - ref, - watch -} from 'vue' -import { i18n, ipc } from '@/electron' -import { track } from '@/services/analytics' -import { languages } from './languages' -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' -import { loadThemes, getThemeName } from './themes' -import type { Language } from '@shared/types/renderer/editor' -import { emitter } from '@/composable' -import { useFolderStore } from '@/store/folders' -import { useDebounceFn } from '@vueuse/core' - -interface Props { - lang: Language - fragments: boolean - fragmentIndex: number - snippetId: string - modelValue: string - isSearchMode: boolean -} - -const props = defineProps<Props>() - -interface Emits { - (e: 'update:modelValue', value: string): void - (e: 'update:lang', value: string): void -} - -const emit = defineEmits<Emits>() - -const appStore = useAppStore() -const snippetStore = useSnippetStore() -const folderStore = useFolderStore() - -const editorRef = ref() -const scrollBarOpacity = ref(1) -let editor: CodeMirror.Editor - -const localLang = computed({ - get: () => props.lang, - set: v => emit('update:lang', v) -}) - -const cursorPosition = reactive({ - row: 0, - column: 0 -}) - -const fontSize = computed(() => appStore.editor.fontSize + 'px') -const fontFamily = computed(() => appStore.editor.fontFamily) - -const forceRefresh = ref() - -const editorHeight = computed(() => { - // eslint-disable-next-line no-unused-expressions - forceRefresh.value - - let result = - appStore.sizes.titlebar + - appStore.sizes.editor.titleHeight + - appStore.sizes.editor.footerHeight - - if (snippetStore.isFragmentsShow) { - result += appStore.sizes.editor.fragmentsHeight - } - - if (snippetStore.isTagsShow) { - result += appStore.sizes.editor.tagsHeight - } - - if (snippetStore.isDescriptionShow) { - result += appStore.sizes.editor.descriptionHeight - } - - if (snippetStore.isCodePreview) { - result += appStore.sizes.codePreviewHeight - } - - return window.innerHeight - result + 'px' -}) - -const footerHeight = computed(() => appStore.sizes.editor.footerHeight + 'px') - -const init = async () => { - await loadThemes() - - editor = CodeMirror(editorRef.value, { - value: props.modelValue, - mode: props.lang, - theme: getThemeName(appStore.theme) || 'GitHub', - lineWrapping: Boolean(appStore.editor.wrap), - lineNumbers: true, - tabSize: appStore.editor.tabSize, - autoCloseBrackets: true, - matchBrackets: appStore.editor.matchBrackets, - styleActiveLine: appStore.editor.highlightLine, - scrollbarStyle: 'null' - }) - - editor.on('change', () => { - emit('update:modelValue', editor.getValue()) - }) - - editor.on('cursorActivity', () => { - getCursorPosition() - }) - - editor.on('focus', async () => { - if (snippetStore.searchQuery?.length) { - snippetStore.searchQuery = undefined - folderStore.selectId(snippetStore.selected!.folderId) - await snippetStore.setSnippetsByFolderIds() - emitter.emit('scroll-to:snippet', snippetStore.selectedId!) - } - }) - - editor.on('scroll', () => { - scrollBarOpacity.value = 1 - editor.setOption('scrollbarStyle', 'overlay') - }) - editor.on('scroll', hideScrollbar) - - editor.on('paste', async (cm, e) => { - if (props.lang === 'markdown') { - const item = e.clipboardData?.items[0] - - if (item?.type.startsWith('image')) { - e.preventDefault() - - const blob = item.getAsFile() - const path = await ipc.invoke('main:copy-to-assets', blob?.path) - - cm.replaceSelection(``) - } - } - }) - - editor.setOption('extraKeys', { - 'Cmd-F': () => { - emitter.emit('search:focus', true) - } - }) - - if (snippetStore.searchQueryEscaped) { - findAll(snippetStore.searchQueryEscaped) - } -} - -const setValue = (value: string) => { - if (!editor) return - - const cursor = editor.getCursor() - editor.setValue(value) - - if (cursor) editor.setCursor(cursor) -} - -const setLang = (lang: string) => { - if (!editor) return - editor.setOption('mode', lang) -} - -const getCursorPosition = () => { - const { line, ch } = editor.getCursor() - cursorPosition.row = line - cursorPosition.column = ch -} - -const findAll = (query: string) => { - if (!editor || query === '') return - - query = query.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&') - - const re = new RegExp(query, 'i') - const cursor = editor.getSearchCursor(re) - - clearAllMarks() - - while (cursor.findNext()) { - editor.markText(cursor.from(), cursor.to(), { - className: appStore.isLightTheme ? 'mark mark--light' : 'mark' - }) - } -} - -const clearAllMarks = () => { - if (!editor) return - - const marks = editor.getAllMarks() - - if (marks) { - marks.forEach(i => i.clear()) - } -} - -const clearHistory = () => { - if (!editor) return - editor.clearHistory() -} - -const format = async () => { - const availableLang: Language[] = [ - 'css', - 'dockerfile', - 'gitignore', - 'graphqlschema', - 'html', - 'ini', - 'jade', - 'java', - 'javascript', - 'json', - 'json5', - 'less', - 'markdown', - 'php', - 'properties', - 'sass', - 'scss', - 'sh', - 'toml', - 'typescript', - 'xml', - 'yaml' - ] - - if (!availableLang.includes(props.lang)) return - - let parser = props.lang as string - const shellLike = ['dockerfile', 'gitignore', 'properties', 'ini'] - - if (props.lang === 'javascript') parser = 'babel' - if (props.lang === 'graphqlschema') parser = 'graphql' - if (shellLike.includes(props.lang)) parser = 'sh' - - try { - const formatted = await ipc.invoke('main:prettier', { - source: props.modelValue, - parser - }) - await snippetStore.patchCurrentSnippetContentByKey('value', formatted) - setValue(formatted) - track('snippets/format') - } catch (err) { - console.error(err) - } -} - -const hideScrollbar = useDebounceFn(() => { - scrollBarOpacity.value = 0 -}, 1000) - -watch( - () => [props.snippetId, props.fragmentIndex], - () => { - setValue(props.modelValue) - - if (snippetStore.searchQueryEscaped) { - findAll(snippetStore.searchQueryEscaped) - } - - clearHistory() - } -) - -watch( - () => props.lang, - () => { - setLang(props.lang) - } -) - -watch( - () => snippetStore.searchQueryEscaped, - v => { - if (v) { - findAll(v) - } else { - clearAllMarks() - } - } -) - -watch( - () => appStore.editor.fontSize, - () => { - nextTick(() => editor.refresh()) - } -) - -emitter.on('snippet:format', () => format()) - -onMounted(() => { - init() - - window.addEventListener('resize', () => { - forceRefresh.value = Math.random() - }) -}) - -onUnmounted(() => { - emitter.off('snippet:format') -}) -</script> - -<style lang="scss" scoped> -.editor { - padding-top: 4px; - height: 100%; - :deep(.CodeMirror) { - height: 100%; - font-size: v-bind(fontSize); - font-family: v-bind(fontFamily); - line-height: calc(v-bind(fontSize) * 1.5); - } - :deep(.CodeMirror-overlayscroll-vertical div) { - background-color: rgba(121, 121, 121, 0.8); - width: 5px; - opacity: v-bind(scrollBarOpacity); - transition: opacity 0.3s; - } - :deep(.CodeMirror-overlayscroll-horizontal div) { - background-color: rgba(121, 121, 121, 0.8); - height: 5px; - opacity: v-bind(scrollBarOpacity); - transition: opacity 0.3s; - } - :deep(.CodeMirror-scrollbar-filler) { - background-color: transparent; - } - :deep(.mark) { - background-color: yellow; - color: #000; - border-radius: 2px; - } - :deep(.mark--light) { - background-color: var(--color-primary); - color: #fff; - } - .body { - height: v-bind(editorHeight); - } - .footer { - height: v-bind(footerHeight); - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 var(--spacing-xs); - font-size: 12px; - select { - background-color: var(--color-bg); - } - } -} -.lang-selector { - -webkit-appearance: none; - border: 0; - outline: none; - color: var(--color-text); -} -</style> diff --git a/src/renderer/components/editor/EditorPreview.vue b/src/renderer/components/editor/EditorPreview.vue deleted file mode 100644 index 90af57ae..00000000 --- a/src/renderer/components/editor/EditorPreview.vue +++ /dev/null @@ -1,172 +0,0 @@ -<template> - <div - ref="previewRef" - class="editor-preview" - > - <div class="tools"> - <div class="left"> - <AppCheckbox - v-model="appStore.codePreview.darkMode" - name="Dark mode" - :label="i18n.t('darkMode')" - /> - </div> - <div class="right"> - <div - class="link" - @click="onClickSnippetShowcase" - > - {{ i18n.t('special:snippetsShowcase') }} - </div> - <AppActionButton - v-tooltip="i18n.t('exportToHtml')" - @click="onSaveToHtml" - > - <UniconsFileDownload /> - </AppActionButton> - </div> - </div> - <div class="body"> - <iframe - :srcDoc="srcDoc" - frameborder="0" - height="100%" - width="100%" - /> - </div> - <div - ref="gutterRef" - class="gutter-line-horizontal" - /> - </div> -</template> - -<script setup lang="ts"> -import { useSnippetStore } from '@/store/snippets' -import { computed, ref, onMounted, watch } from 'vue' -import interact from 'interactjs' -import { useAppStore } from '@/store/app' -import { i18n, ipc } from '@/electron' -import { track } from '@/services/analytics' -import { useMagicKeys } from '@vueuse/core' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() -const { escape } = useMagicKeys() - -const srcDoc = ref() -const height = computed(() => appStore.sizes.codePreviewHeight + 'px') - -const previewRef = ref() -const gutterRef = ref() - -snippetStore.$subscribe(() => { - setSrcDoc() -}) - -watch( - () => appStore.codePreview.darkMode, - () => { - setSrcDoc() - } -) - -const setSrcDoc = () => { - const html = snippetStore.selected?.content.find( - i => i.language === 'html' - )?.value - const css = snippetStore.selected?.content.find( - i => i.language === 'css' - )?.value - - const htmlDefault = `<div>${i18n.t( - 'special:description.htmlCssPreview' - )}</div>` - const bg = appStore.codePreview.darkMode ? 'background: #263238;' : '' - const cssDefault = ` - body { - display: flex; - align-items: center; - justify-content: center; - height: 100vh; - margin: 0; - ${bg} - } - ` - - srcDoc.value = `<!DOCTYPE html> - <html> - <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>${snippetStore.selected?.name}</title> - </head> - <body>${html || htmlDefault}</body> - <style>${cssDefault + css}</style> -</html> - ` -} - -setSrcDoc() - -const onSaveToHtml = async () => { - const formatted = await ipc.invoke('main:prettier', { - source: srcDoc.value, - parser: 'html' - }) - - const a = document.createElement('a') - - a.href = `data:text/plain;charset=utf-8, ${encodeURIComponent(formatted)}` - a.download = `${snippetStore.selected?.name}.html` - a.click() -} - -const onClickSnippetShowcase = () => { - ipc.invoke('main:open-url', 'https://masscode.io/snippets') - track('app/open-url', 'https://masscode.io/snippets') -} - -watch(escape, () => { - snippetStore.isCodePreview = false -}) - -onMounted(() => { - interact(previewRef.value).resizable({ - edges: { top: true }, - onmove: e => { - const { pageY } = e - appStore.sizes.codePreviewHeight = Math.floor(window.innerHeight - pageY) - } - }) -}) -</script> - -<style lang="scss" scoped> -.editor-preview { - position: relative; - .body { - height: calc(v-bind(height) - 34px); - } - .tools { - display: flex; - height: 34px; - display: flex; - justify-content: space-between; - align-items: center; - padding: 4px var(--spacing-xs); - border-bottom: 1px solid var(--color-border); - .right { - display: flex; - align-items: center; - gap: var(--spacing-xs); - .button { - cursor: default; - } - } - } - iframe { - background-color: #fff; - } -} -</style> diff --git a/src/renderer/components/editor/Footer.vue b/src/renderer/components/editor/Footer.vue new file mode 100644 index 00000000..0630d8fd --- /dev/null +++ b/src/renderer/components/editor/Footer.vue @@ -0,0 +1,103 @@ +<script setup lang="ts"> +import * as Command from '@/components/ui/shadcn/command' +import * as Popover from '@/components/ui/shadcn/popover' +import { ScrollArea } from '@/components/ui/shadcn/scroll-area' +import { useEditor, useSnippets } from '@/composables' +import { Check } from 'lucide-vue-next' +import { languages } from './languages' + +const { cursorPosition } = useEditor() +const { selectedSnippetContent, selectedSnippet, updateSnippetContent } + = useSnippets() + +const isOpen = ref(false) + +function onSelect(value: string) { + isOpen.value = false + updateSnippetContent( + selectedSnippet.value!.id, + selectedSnippetContent.value!.id, + { + label: selectedSnippetContent.value!.label, + value: selectedSnippetContent.value!.value, + language: value, + }, + ) +} + +const selectedLanguageName = computed(() => { + return languages.find( + language => language.value === selectedSnippetContent.value?.language, + )?.name +}) + +function fuzzySearch(list: string[], searchTerm: string) { + return list.filter((name) => { + // Реализуем нечеткий поиск, разбивая поисковый запрос на символы + // и проверяя их последовательное вхождение в название языка + const searchChars = searchTerm.toLowerCase().split('') + let currentIndex = 0 + + return searchChars.every((char) => { + const index = name.toLowerCase().indexOf(char, currentIndex) + if (index === -1) + return false + currentIndex = index + 1 + return true + }) + }) +} +</script> + +<template> + <div + data-editor-footer + class="border-border flex items-center justify-between border-t px-2 py-1 text-xs" + > + <div> + <Popover.Popover v-model:open="isOpen"> + <Popover.PopoverTrigger as-child> + <UiButton variant="icon"> + {{ selectedLanguageName }} + </UiButton> + </Popover.PopoverTrigger> + <Popover.PopoverContent class="w-auto py-0"> + <Command.Command :filter-function="fuzzySearch as any"> + <Command.CommandInput + class="h-9" + placeholder="Select Language Mode" + /> + <Command.CommandEmpty>No language found</Command.CommandEmpty> + <Command.CommandList> + <Command.CommandGroup> + <ScrollArea> + <div class="_overflow-y-auto max-h-[150px]"> + <Command.CommandItem + v-for="language in languages" + :key="language.value" + :value="language.value" + @select="onSelect(language.value)" + > + {{ language.name }} + <Check + class="ml-auto h-4 w-4" + :class=" + selectedSnippetContent?.language === language.value + ? 'opacity-100' + : 'opacity-0' + " + /> + </Command.CommandItem> + </div> + </ScrollArea> + </Command.CommandGroup> + </Command.CommandList> + </Command.Command> + </Popover.PopoverContent> + </Popover.Popover> + </div> + <div> + Ln {{ cursorPosition.row + 1 }}, Col {{ cursorPosition.column + 1 }} + </div> + </div> +</template> diff --git a/src/renderer/components/editor/README.md b/src/renderer/components/editor/README.md deleted file mode 100644 index 1f2aefb3..00000000 --- a/src/renderer/components/editor/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# Languages list - -This is a list of language that supports in massCode. - -- ABAP -- ABC -- ActionScript -- ADA -- Alda -- Apache Conf -- Apex -- Apple Script -- AsciiDoc -- ASL -- ASP vb.NET (VBScript) -- Assembly x86 -- AutoHotkey / AutoIt -- Bash -- BatchFile -- Bicep -- C and C++ -- C# -- Cirru -- Clojure -- Cobol -- CoffeeScript -- ColdFusion -- Crystal -- Csound -- Csound Document -- Csound Score -- CSS -- Curly -- D -- Dart -- Diff -- Django -- Dockerfile -- Dot -- Drools -- Edifact -- Eiffel -- EJS -- Elixir -- Elm -- Erlang -- F# -- Forth -- Fortran -- Gcode -- Gherkin -- Gitignore -- Glsl -- Go -- GraphQL -- Groovy -- HAML -- Handlebars -- Haskell -- Haskell Cabal -- haXe -- Hjson -- HTML -- HTML (Elixir) -- HTML (Ruby) -- INI -- Io -- Java -- JavaScript -- JSON -- JSON5 -- JSONiq -- JSP -- JSX -- Julia -- Kotlin -- Kusto (KQL) -- LaTeX -- Latte -- LESS -- Liquid -- Lisp -- LiveScript -- LSL -- Lua -- Makefile -- Markdown -- Mask -- MATLAB -- MediaWiki -- MEL -- Mikrotik -- MIPS -- MySQL -- Nginx -- Nim -- Nix -- NSIS -- Nunjucks -- Objective-C -- OCaml -- OpenGL -- Pascal -- Perl -- pgSQL -- PHP -- PHP (Blade Template) -- Pig -- Plain Text -- Powershell -- Praat -- Prisma -- Prolog -- Properties -- Protobuf -- Pug -- Puppet -- Python -- QML -- R -- Raku -- Razor -- Red -- RegExp -- RST -- Ruby -- Rust -- SAS -- SASS -- SCAD -- Scala -- Scheme -- sCrypt -- SCSS -- SJS -- Slim -- Smalltalk -- Smarty -- Smithy -- Solidity -- Soy Template -- SQL -- SQLServer -- Stylus -- SVG -- Swift -- Tcl -- Terraform -- Tex -- Textile -- TOML -- TSX -- Twig -- TypeScript -- Vala -- Velocity -- Verilog -- VHDL -- Visualforce -- Vue -- Wollok -- XML -- XQuery -- XSL -- YAML -- Zeek diff --git a/src/renderer/components/editor/Tab.vue b/src/renderer/components/editor/Tab.vue new file mode 100644 index 00000000..d7890c4e --- /dev/null +++ b/src/renderer/components/editor/Tab.vue @@ -0,0 +1,39 @@ +<script setup lang="ts"> +import { useSnippets, useSnippetUpdate } from '@/composables' + +interface Props { + name: string +} + +const props = defineProps<Props>() + +const { selectedSnippetContent, selectedSnippet } = useSnippets() +const { addToUpdateContentQueue } = useSnippetUpdate() + +const name = computed({ + get() { + return props.name + }, + set(v: string) { + addToUpdateContentQueue( + selectedSnippet.value!.id, + selectedSnippetContent.value!.id, + { + label: v, + language: selectedSnippetContent.value!.language, + value: selectedSnippetContent.value!.value, + }, + ) + }, +}) +</script> + +<template> + <div class="px-2 py-0.5 select-none"> + <UiInput + v-model="name" + variant="ghost" + class="w-full px-0 py-0" + /> + </div> +</template> diff --git a/src/renderer/components/editor/grammars-aux.ts b/src/renderer/components/editor/grammars-aux.ts index 22bfeb90..0e72f8d5 100644 --- a/src/renderer/components/editor/grammars-aux.ts +++ b/src/renderer/components/editor/grammars-aux.ts @@ -2,201 +2,201 @@ export const auxGrammars = [ { source: 'source.sassdoc', language: 'sassdoc', - grammar: () => import('./grammars/sassdoc.tmLanguage.json') + grammar: () => import('./grammars/sassdoc.tmLanguage.json'), }, { source: 'source.scss', language: 'scss2', - grammar: () => import('./grammars/scss.tmLanguage.json') + grammar: () => import('./grammars/scss.tmLanguage.json'), }, { source: 'source.css.nunjucks', language: 'css-nunjucks', - grammar: () => import('./grammars/css.tmLanguage.json') + grammar: () => import('./grammars/css.tmLanguage.json'), }, { source: 'source.less', language: 'less2', - grammar: () => import('./grammars/less.tmLanguage.json') + grammar: () => import('./grammars/less.tmLanguage.json'), }, { source: 'source.postcss', language: 'postcss', - grammar: () => import('./grammars/postcss.tmLanguage.json') + grammar: () => import('./grammars/postcss.tmLanguage.json'), }, { source: 'source.js.jquery', languages: 'jquery', - grammar: () => import('./grammars/javascript.tmLanguage.json') + grammar: () => import('./grammars/javascript.tmLanguage.json'), }, { source: 'source.c++', language: 'c++', - grammar: () => import('./grammars/cpp.tmLanguage.json') + grammar: () => import('./grammars/cpp.tmLanguage.json'), }, { source: 'source.c', language: 'c', - grammar: () => import('./grammars/cpp.tmLanguage.json') + grammar: () => import('./grammars/cpp.tmLanguage.json'), }, { source: 'source.cpp.embedded.macro', language: 'c-macro', - grammar: () => import('./grammars/cpp.embedded.macro.tmLanguage.json') + grammar: () => import('./grammars/cpp.embedded.macro.tmLanguage.json'), }, { source: 'source.x86', language: 'x86', - grammar: () => import('./grammars/asm.tmLanguage.json') + grammar: () => import('./grammars/asm.tmLanguage.json'), }, { source: 'source.x86_64', language: 'x86_64', - grammar: () => import('./grammars/asm.tmLanguage.json') + grammar: () => import('./grammars/asm.tmLanguage.json'), }, { source: 'source.json.comments', language: 'json-comment', - grammar: () => import('./grammars/jsonc.tmLanguage.json') + grammar: () => import('./grammars/jsonc.tmLanguage.json'), }, { source: 'source.js.regexp', language: 'regexp-javascript', - grammar: () => import('./grammars/regexp-javascript.tmLanguage.json') + grammar: () => import('./grammars/regexp-javascript.tmLanguage.json'), }, { source: 'source.regexp.python', language: 'regexp-python', - grammar: () => import('./grammars/regexp-python.tmLanguage.json') + grammar: () => import('./grammars/regexp-python.tmLanguage.json'), }, { source: 'source.regexp.posix', language: 'regexp-posix', - grammar: () => import('./grammars/regexp-posix.tmLanguage.json') + grammar: () => import('./grammars/regexp-posix.tmLanguage.json'), }, { source: 'source.regexp.extended', language: 'regexp-extended', - grammar: () => import('./grammars/regexp-extended.tmLanguage.json') + grammar: () => import('./grammars/regexp-extended.tmLanguage.json'), }, { source: 'source.sy', language: 'sy', - grammar: () => import('./grammars/syon.tmLanguage.json') + grammar: () => import('./grammars/syon.tmLanguage.json'), }, { source: 'text.bibtex', language: 'bibtex', - grammar: () => import('./grammars/bibtex.tmLanguage.json') + grammar: () => import('./grammars/bibtex.tmLanguage.json'), }, { source: 'source.gnuplot', language: 'gnuplot', - grammar: () => import('./grammars/gnuplot.tmLanguage.json') + grammar: () => import('./grammars/gnuplot.tmLanguage.json'), }, { source: 'source.asymptote', language: 'asymptote', - grammar: () => import('./grammars/asymptote.tmLanguage.json') + grammar: () => import('./grammars/asymptote.tmLanguage.json'), }, { source: 'source.arm', language: 'arm', - grammar: () => import('./grammars/arm.tmLanguage.json') + grammar: () => import('./grammars/arm.tmLanguage.json'), }, { source: 'text.elixir', language: 'elixir2', - grammar: () => import('./grammars/eex.tmLanguage.json') + grammar: () => import('./grammars/eex.tmLanguage.json'), }, { source: 'text.html.derivative', language: 'html-derivative', - grammar: () => import('./grammars/html-derivative.tmLanguage.json') + grammar: () => import('./grammars/html-derivative.tmLanguage.json'), }, { source: 'text.tex.markdown_latex_combined', language: 'markdown-latex-combined', - grammar: () => import('./grammars/markdown-latex-combined.tmLanguage.json') + grammar: () => import('./grammars/markdown-latex-combined.tmLanguage.json'), }, { source: 'source.cpp.embedded.latex', language: 'cpp-embedded-latex', - grammar: () => import('./grammars/cpp-embedded-latex.tmLanguage.json') + grammar: () => import('./grammars/cpp-embedded-latex.tmLanguage.json'), }, { source: 'text.log', language: 'text-log', - grammar: () => import('./grammars/log.tmLanguage.json') + grammar: () => import('./grammars/log.tmLanguage.json'), }, { source: 'text.git-rebase', language: 'git-rebase', - grammar: () => import('./grammars/git-rebase.tmLanguage.json') + grammar: () => import('./grammars/git-rebase.tmLanguage.json'), }, { source: 'text.git-commit', language: 'git-commit', - grammar: () => import('./grammars/git-commit.tmLanguage.json') + grammar: () => import('./grammars/git-commit.tmLanguage.json'), }, { source: 'text.html.javadoc', language: 'javadoc', - grammar: () => import('./grammars/javadoc.tmLanguage.json') + grammar: () => import('./grammars/javadoc.tmLanguage.json'), }, { source: 'source.postscript', language: 'postscript', - grammar: () => import('./grammars/postscript.tmLanguage.json') + grammar: () => import('./grammars/postscript.tmLanguage.json'), }, { source: 'etc', language: 'etc', - grammar: () => import('./grammars/etc.tmLanguage.json') + grammar: () => import('./grammars/etc.tmLanguage.json'), }, { source: 'source.cfscript', language: 'cfscript', - grammar: () => import('./grammars/cfscript.tmLanguage.json') + grammar: () => import('./grammars/cfscript.tmLanguage.json'), }, { source: 'text.html.cfm', language: 'html-cfm', - grammar: () => import('./grammars/html-cfml.tmLanguage.json') + grammar: () => import('./grammars/html-cfml.tmLanguage.json'), }, { source: 'source.js.jsx', language: 'jsx2', - grammar: () => import('./grammars/jsx.tmLanguage.json') + grammar: () => import('./grammars/jsx.tmLanguage.json'), }, { source: 'text.html.php', language: 'php2', - grammar: () => import('./grammars/php.tmLanguage.json') + grammar: () => import('./grammars/php.tmLanguage.json'), }, { source: 'source.xq', language: 'xq', - grammar: () => import('./grammars/xquery.tmLanguage.json') + grammar: () => import('./grammars/xquery.tmLanguage.json'), }, { source: 'source.md', language: 'md', - grammar: () => import('./grammars/markdown.tmLanguage.json') + grammar: () => import('./grammars/markdown.tmLanguage.json'), }, { source: 'source.erb', language: 'erb', - grammar: () => import('./grammars/html-ruby.tmLanguage.json') + grammar: () => import('./grammars/html-ruby.tmLanguage.json'), }, { source: 'text.jade', language: 'jade', - grammar: () => import('./grammars/pug.tmLanguage.json') + grammar: () => import('./grammars/pug.tmLanguage.json'), }, { source: 'text.slm', language: 'slm', - grammar: () => import('./grammars/slm.tmLanguage.json') - } + grammar: () => import('./grammars/slm.tmLanguage.json'), + }, ] diff --git a/src/renderer/components/editor/grammars.ts b/src/renderer/components/editor/grammars.ts index 0f105f90..aab70fdb 100644 --- a/src/renderer/components/editor/grammars.ts +++ b/src/renderer/components/editor/grammars.ts @@ -1,33 +1,34 @@ -import { languages } from './languages' -import { auxGrammars } from './grammars-aux' -import type { GrammarOption, Language } from '@shared/types/renderer/editor' +import type { GrammarOption, Language } from './types' import { activateLanguage, addGrammar } from 'codemirror-textmate' +import { auxGrammars } from './grammars-aux' +import { languages } from './languages' -export const loadGrammars = async () => { +export async function loadGrammars() { const grammars: Record<string, GrammarOption> = {} languages .filter(i => i.grammar) - .forEach(async i => { - if (!i.scopeName || !i.grammar) return + .forEach(async (i) => { + if (!i.scopeName || !i.grammar) + return grammars[i.scopeName] = { grammar: i.grammar, language: i.value, - priority: 'defer' + priority: 'defer', } }) - auxGrammars.forEach(i => { + auxGrammars.forEach((i) => { grammars[i.source] = { grammar: i.grammar, language: i.language as Language, - priority: 'defer' + priority: 'defer', } }) await Promise.all( - Object.keys(grammars).map(async scopeName => { + Object.keys(grammars).map(async (scopeName) => { const { grammar, language, priority } = grammars[scopeName] const { default: grammarDoc } = await grammar() @@ -40,9 +41,10 @@ export const loadGrammars = async () => { await prom } } - } catch (err) { + } + catch (err) { console.error(err) } - }) + }), ) } diff --git a/src/renderer/components/editor/header/ActionButton.vue b/src/renderer/components/editor/header/ActionButton.vue new file mode 100644 index 00000000..27a6ba68 --- /dev/null +++ b/src/renderer/components/editor/header/ActionButton.vue @@ -0,0 +1,28 @@ +<script setup lang="ts"> +import * as Tooltip from '@/components/ui/shadcn/tooltip' + +interface Props { + tooltip?: string +} + +defineProps<Props>() +</script> + +<template> + <Tooltip.TooltipProvider> + <Tooltip.Tooltip> + <Tooltip.TooltipTrigger as-child> + <UiButton + variant="icon" + size="icon" + v-bind="$attrs" + > + <slot /> + </UiButton> + </Tooltip.TooltipTrigger> + <Tooltip.TooltipContent> + {{ tooltip }} + </Tooltip.TooltipContent> + </Tooltip.Tooltip> + </Tooltip.TooltipProvider> +</template> diff --git a/src/renderer/components/editor/header/Header.vue b/src/renderer/components/editor/header/Header.vue new file mode 100644 index 00000000..c307802d --- /dev/null +++ b/src/renderer/components/editor/header/Header.vue @@ -0,0 +1,69 @@ +<script setup lang="ts"> +import { useApp, useSnippets, useSnippetUpdate } from '@/composables' +import { Plus, Type } from 'lucide-vue-next' + +const { selectedSnippet } = useSnippets() +const { selectedSnippetContentIndex } = useApp() +const { addToUpdateQueue } = useSnippetUpdate() + +const isShowDescription = ref(false) + +const name = computed({ + get() { + return selectedSnippet?.value?.name + }, + set(v: string) { + addToUpdateQueue(selectedSnippet.value!.id, { + name: v, + description: selectedSnippet.value!.description, + folderId: selectedSnippet.value!.folder?.id || null, + isDeleted: selectedSnippet.value!.isDeleted, + isFavorites: selectedSnippet.value!.isFavorites, + }) + }, +}) +</script> + +<template> + <div data-editor-header> + <div + class="border-border grid grid-cols-[1fr_auto] items-center border-b px-2" + > + <div class="min-w-0 truncate"> + <UiInput + v-model="name" + variant="ghost" + class="w-full px-0" + /> + </div> + <div class="ml-2 flex"> + <EditorHeaderActionButton + tooltip="Add Description" + @click="isShowDescription = !isShowDescription" + > + <Type class="h-3 w-3" /> + </EditorHeaderActionButton> + <EditorHeaderActionButton tooltip="New Fragment"> + <Plus class="h-4 w-4" /> + </EditorHeaderActionButton> + </div> + </div> + <div + v-if="selectedSnippet?.contents && selectedSnippet.contents.length > 1" + class="border-border flex gap-1 border-b" + > + <EditorTab + v-for="(i, index) in selectedSnippet?.contents" + :key="i.id" + class="flex-1" + :name="i.label" + :class="{ + 'bg-list-selection text-list-selection-fg': + selectedSnippetContentIndex === index, + }" + @click="selectedSnippetContentIndex = index" + /> + </div> + <EditorDescription v-model:show="isShowDescription" /> + </div> +</template> diff --git a/src/renderer/components/editor/languages.ts b/src/renderer/components/editor/languages.ts index ae8b5808..48c3007e 100644 --- a/src/renderer/components/editor/languages.ts +++ b/src/renderer/components/editor/languages.ts @@ -1,1004 +1,1004 @@ -import type { Language, LanguageOption } from '@shared/types/renderer/editor' +import type { Language, LanguageOption } from './types' export const languages: LanguageOption[] = [ { name: 'ABAP', value: 'abap', grammar: () => import('./grammars/abap.tmLanguage.json'), - scopeName: 'source.abap' + scopeName: 'source.abap', }, // Возможно несоответствие { name: 'ABC', value: 'abc', grammar: () => import('./grammars/abc.tmLanguage.json'), - scopeName: 'text.abcnotation' + scopeName: 'text.abcnotation', }, { name: 'ActionScript', value: 'actionscript', grammar: () => import('./grammars/actionscript-3.tmLanguage.json'), - scopeName: 'source.actionscript.3' + scopeName: 'source.actionscript.3', }, { name: 'ADA', value: 'ada', grammar: () => import('./grammars/ada.tmLanguage.json'), - scopeName: 'source.ada' + scopeName: 'source.ada', }, { name: 'Alda', value: 'alda', grammar: () => import('./grammars/alda.tmLanguage.json'), - scopeName: 'source.alda' + scopeName: 'source.alda', }, { name: 'Apache Conf', value: 'apache_conf', grammar: () => import('./grammars/apache.tmLanguage.json'), - scopeName: 'source.apacheconf' + scopeName: 'source.apacheconf', }, { name: 'Apex', value: 'apex', grammar: () => import('./grammars/apex.tmLanguage.json'), - scopeName: 'source.apex' + scopeName: 'source.apex', }, { name: 'Apple Script', value: 'applescript', grammar: () => import('./grammars/applescript.tmLanguage.json'), - scopeName: 'source.applescript' + scopeName: 'source.applescript', }, { name: 'AsciiDoc', value: 'asciidoc', grammar: () => import('./grammars/asciidoctor.tmLanguage.json'), - scopeName: 'text.asciidoc' + scopeName: 'text.asciidoc', }, { name: 'ASL', value: 'asl', grammar: () => import('./grammars/asl.tmLanguage.json'), - scopeName: 'source.asl' + scopeName: 'source.asl', }, { name: 'ASP vb.NET (VBScript)', value: 'asp_vb_net', grammar: () => import('./grammars/asp-vb-net.tmlanguage.json'), - scopeName: 'source.asp.vb.net' + scopeName: 'source.asp.vb.net', }, { name: 'Assembly x86', value: 'assembly_x86', grammar: () => import('./grammars/asm.tmLanguage.json'), - scopeName: 'source.asm' + scopeName: 'source.asm', }, { name: 'AutoHotkey / AutoIt', value: 'autohotkey', grammar: () => import('./grammars/autohotkey.tmLanguage.json'), - scopeName: 'source.ahk' + scopeName: 'source.ahk', }, { name: 'Bash', value: 'sh', grammar: () => import('./grammars/shell-unix-bash.tmLanguage.json'), - scopeName: 'source.shell' + scopeName: 'source.shell', }, { name: 'BatchFile', value: 'batchfile', grammar: () => import('./grammars/batchfile.tmLanguage.json'), - scopeName: 'source.batchfile' + scopeName: 'source.batchfile', }, { name: 'Bicep', value: 'bicep', grammar: () => import('./grammars/bicep.tmLanguage.json'), - scopeName: 'source.bicep' + scopeName: 'source.bicep', }, { name: 'C and C++', value: 'c_cpp', grammar: () => import('./grammars/cpp.tmLanguage.json'), - scopeName: 'source.cpp' + scopeName: 'source.cpp', }, { name: 'C#', value: 'csharp', grammar: () => import('./grammars/csharp.tmLanguage.json'), - scopeName: 'source.cs' + scopeName: 'source.cs', }, { name: 'Cirru', value: 'cirru', grammar: () => import('./grammars/cirru.tmLanguage.json'), - scopeName: 'source.cirru' + scopeName: 'source.cirru', }, { name: 'Clojure', value: 'clojure', grammar: () => import('./grammars/clojure.tmLanguage.json'), - scopeName: 'source.clojure' + scopeName: 'source.clojure', }, { name: 'Cobol', value: 'cobol', grammar: () => import('./grammars/cobol.tmLanguage.json'), - scopeName: 'source.cobol' + scopeName: 'source.cobol', }, { name: 'CoffeeScript', value: 'coffee', grammar: () => import('./grammars/coffee.tmLanguage.json'), - scopeName: 'source.coffee' + scopeName: 'source.coffee', }, { name: 'ColdFusion', value: 'coldfusion', grammar: () => import('./grammars/coldfusion.tmLanguage.json'), - scopeName: 'text.cfml.basic' + scopeName: 'text.cfml.basic', }, { name: 'Crystal', value: 'crystal', grammar: () => import('./grammars/crystal.tmLanguage.json'), - scopeName: 'source.crystal' + scopeName: 'source.crystal', }, { name: 'Csound', value: 'csound_orchestra', grammar: () => import('./grammars/csound.tmLanguage.json'), - scopeName: 'source.csound' + scopeName: 'source.csound', }, { name: 'Csound Document', value: 'csound_document', grammar: () => import('./grammars/csound-document.tmLanguage.json'), - scopeName: 'source.csound-document' + scopeName: 'source.csound-document', }, { name: 'Csound Score', value: 'csound_score', grammar: () => import('./grammars/csound-score.tmLanguage.json'), - scopeName: 'source.csound-score' + scopeName: 'source.csound-score', }, { name: 'CSS', value: 'css', grammar: () => import('./grammars/css.tmLanguage.json'), - scopeName: 'source.css' + scopeName: 'source.css', }, { name: 'Curly', value: 'curly', grammar: () => import('./grammars/curly.tmLanguage.json'), - scopeName: 'text.html.curly' + scopeName: 'text.html.curly', }, { name: 'D', value: 'd', grammar: () => import('./grammars/d.tmLanguage.json'), - scopeName: 'source.d' + scopeName: 'source.d', }, { name: 'Dart', value: 'dart', grammar: () => import('./grammars/dart.tmLanguage.json'), - scopeName: 'source.dart' + scopeName: 'source.dart', }, { name: 'Diff', value: 'diff', grammar: () => import('./grammars/diff.tmLanguage.json'), - scopeName: 'source.diff' + scopeName: 'source.diff', }, { name: 'Django', value: 'django', grammar: () => import('./grammars/django.tmLanguage.json'), - scopeName: 'source.python.django' + scopeName: 'source.python.django', }, { name: 'Dockerfile', value: 'dockerfile', grammar: () => import('./grammars/docker.tmLanguage.json'), - scopeName: 'source.dockerfile' + scopeName: 'source.dockerfile', }, { name: 'Dot', value: 'dot', grammar: () => import('./grammars/dot.tmLanguage.json'), - scopeName: 'source.dot' + scopeName: 'source.dot', }, { name: 'Drools', value: 'drools', grammar: () => import('./grammars/drools.tmLanguage.json'), - scopeName: 'source.drools' + scopeName: 'source.drools', }, { name: 'Edifact', value: 'edifact', grammar: () => import('./grammars/edifact.tmLanguage.json'), - scopeName: 'text.plain.edifact' + scopeName: 'text.plain.edifact', }, { name: 'Eiffel', value: 'eiffel', grammar: () => import('./grammars/eiffel.tmLanguage.json'), - scopeName: 'source.eiffel' + scopeName: 'source.eiffel', }, { name: 'EJS', value: 'ejs', grammar: () => import('./grammars/ejs.tmLanguage.json'), - scopeName: 'text.html.js' + scopeName: 'text.html.js', }, { name: 'Elixir', value: 'elixir', grammar: () => import('./grammars/elixir.tmLanguage.json'), - scopeName: 'source.elixir' + scopeName: 'source.elixir', }, { name: 'Elm', value: 'elm', grammar: () => import('./grammars/elm.tmLanguage.json'), - scopeName: 'source.elm' + scopeName: 'source.elm', }, { name: 'Erlang', value: 'erlang', grammar: () => import('./grammars/erlang.tmLanguage.json'), - scopeName: 'source.erlang' + scopeName: 'source.erlang', }, { name: 'Forth', value: 'forth', grammar: () => import('./grammars/forth.tmLanguage.json'), - scopeName: 'source.forth' + scopeName: 'source.forth', }, { name: 'Fortran', value: 'fortran', grammar: () => import('./grammars/fortran.tmLanguage.json'), - scopeName: 'source.fortran' + scopeName: 'source.fortran', }, { name: 'F#', value: 'fsharp', grammar: () => import('./grammars/fsharp.tmLanguage.json'), - scopeName: 'source.fsharp' + scopeName: 'source.fsharp', }, { name: 'Gcode', value: 'gcode', grammar: () => import('./grammars/gcode.tmLanguage.json'), - scopeName: 'source.gcode' + scopeName: 'source.gcode', }, { name: 'Gherkin', value: 'gherkin', grammar: () => import('./grammars/gherkin.tmLanguage.json'), - scopeName: 'text.gherkin.feature' + scopeName: 'text.gherkin.feature', }, { name: 'Gitignore', value: 'gitignore', grammar: () => import('./grammars/gitignore.tmLanguage.json'), - scopeName: 'source.gitignore' + scopeName: 'source.gitignore', }, { name: 'Glsl', value: 'glsl', grammar: () => import('./grammars/glsl.tmLanguage.json'), - scopeName: 'source.glsl' + scopeName: 'source.glsl', }, { name: 'Go', value: 'golang', grammar: () => import('./grammars/go.tmLanguage.json'), - scopeName: 'source.go' + scopeName: 'source.go', }, { name: 'GraphQL', value: 'graphqlschema', grammar: () => import('./grammars/graphql.tmLanguage.json'), - scopeName: 'source.graphql' + scopeName: 'source.graphql', }, { name: 'Groovy', value: 'groovy', grammar: () => import('./grammars/groovy.tmLanguage.json'), - scopeName: 'source.groovy' + scopeName: 'source.groovy', }, { name: 'HAML', value: 'haml', grammar: () => import('./grammars/haml.tmLanguage.json'), - scopeName: 'text.haml' + scopeName: 'text.haml', }, { name: 'Handlebars', value: 'handlebars', grammar: () => import('./grammars/handlebars.tmLanguage.json'), - scopeName: 'text.html.handlebars' + scopeName: 'text.html.handlebars', }, // Возможно несоответствие { name: 'Haskell Cabal', value: 'haskell_cabal', grammar: () => import('./grammars/haskell-cabal.tmLanguage.json'), - scopeName: 'source.cabal' + scopeName: 'source.cabal', }, { name: 'Haskell', value: 'haskell', grammar: () => import('./grammars/haskell.tmLanguage.json'), - scopeName: 'source.haskell' + scopeName: 'source.haskell', }, { name: 'haXe', value: 'haxe', grammar: () => import('./grammars/haxe.tmLanguage.json'), - scopeName: 'source.hx' + scopeName: 'source.hx', }, { name: 'Hjson', value: 'hjson', grammar: () => import('./grammars/hjson.tmLanguage.json'), - scopeName: 'source.hjson' + scopeName: 'source.hjson', }, { name: 'HTML (Elixir)', value: 'html_elixir', grammar: () => import('./grammars/html-elixir.tmLanguage.json'), - scopeName: 'text.html.elixir' + scopeName: 'text.html.elixir', }, { name: 'HTML (Ruby)', value: 'html_ruby', grammar: () => import('./grammars/html-ruby.tmLanguage.json'), - scopeName: 'text.html.erb' + scopeName: 'text.html.erb', }, { name: 'HTML', value: 'html', grammar: () => import('./grammars/html.tmLanguage.json'), - scopeName: 'text.html.basic' + scopeName: 'text.html.basic', }, { name: 'INI', value: 'ini', grammar: () => import('./grammars/ini.tmLanguage.json'), - scopeName: 'source.ini' + scopeName: 'source.ini', }, { name: 'Io', value: 'io', grammar: () => import('./grammars/io.tmLanguage.json'), - scopeName: 'source.io' + scopeName: 'source.io', }, { name: 'Java', value: 'java', grammar: () => import('./grammars/java.tmLanguage.json'), - scopeName: 'source.java' + scopeName: 'source.java', }, { name: 'JavaScript', value: 'javascript', grammar: () => import('./grammars/javascript.tmLanguage.json'), - scopeName: 'source.js' + scopeName: 'source.js', }, { name: 'JSON', value: 'json', grammar: () => import('./grammars/json.tmLanguage.json'), - scopeName: 'source.json' + scopeName: 'source.json', }, { name: 'JSON5', value: 'json5', grammar: () => import('./grammars/json5.tmLanguage.json'), - scopeName: 'source.json5' + scopeName: 'source.json5', }, { name: 'JSONiq', value: 'jsoniq', grammar: () => import('./grammars/jsoniq.tmLanguage.json'), - scopeName: 'source.jsoniq' + scopeName: 'source.jsoniq', }, { name: 'JSP', value: 'jsp', grammar: () => import('./grammars/jsp.tmLanguage.json'), - scopeName: 'text.html.jsp' + scopeName: 'text.html.jsp', }, // TODO: сделать общими стилизованые (.jsx, tsx) грамматики { name: 'JSX', value: 'jsx', grammar: () => import('./grammars/jsx.tmLanguage.json'), - scopeName: 'source.jsx' + scopeName: 'source.jsx', }, { name: 'Julia', value: 'julia', grammar: () => import('./grammars/julia.tmLanguage.json'), - scopeName: 'source.julia' + scopeName: 'source.julia', }, { name: 'Kotlin', value: 'kotlin', grammar: () => import('./grammars/kotlin.tmLanguage.json'), - scopeName: 'source.kotlin' + scopeName: 'source.kotlin', }, { name: 'Kusto (KQL)', value: 'kusto', grammar: () => import('./grammars/kusto.tmLanguage.json'), - scopeName: 'source.kusto' + scopeName: 'source.kusto', }, { name: 'LaTeX', value: 'latex', grammar: () => import('./grammars/latex.tmLanguage.json'), - scopeName: 'text.tex.latex' + scopeName: 'text.tex.latex', }, { name: 'Latte', value: 'latte', grammar: () => import('./grammars/latte.tmLanguage.json'), - scopeName: 'source.latte' + scopeName: 'source.latte', }, { name: 'LESS', value: 'less', grammar: () => import('./grammars/less.tmLanguage.json'), - scopeName: 'source.css.less' + scopeName: 'source.css.less', }, { name: 'Liquid', value: 'liquid', grammar: () => import('./grammars/liquid.tmLanguage.json'), - scopeName: 'source.liquid' + scopeName: 'source.liquid', }, { name: 'Lisp', value: 'lisp', grammar: () => import('./grammars/lisp.tmLanguage.json'), - scopeName: 'source.lisp' + scopeName: 'source.lisp', }, { name: 'LiveScript', value: 'livescript', grammar: () => import('./grammars/livescript.tmLanguage.json'), - scopeName: 'source.livescript' + scopeName: 'source.livescript', }, { name: 'LSL', value: 'lsl', grammar: () => import('./grammars/lsl.tmLanguage.json'), - scopeName: 'source.lsl' + scopeName: 'source.lsl', }, { name: 'Lua', value: 'lua', grammar: () => import('./grammars/lua.tmLanguage.json'), - scopeName: 'source.lua' + scopeName: 'source.lua', }, { name: 'Makefile', value: 'makefile', grammar: () => import('./grammars/make.tmLanguage.json'), - scopeName: 'source.makefile' + scopeName: 'source.makefile', }, { name: 'Markdown', value: 'markdown', grammar: () => import('./grammars/markdown.tmLanguage.json'), - scopeName: 'text.html.markdown' + scopeName: 'text.html.markdown', }, { name: 'Mask', value: 'mask', grammar: () => import('./grammars/mask.tmLanguage.json'), - scopeName: 'source.mask' + scopeName: 'source.mask', }, { name: 'MATLAB', value: 'matlab', grammar: () => import('./grammars/matlab.tmLanguage.json'), - scopeName: 'source.matlab' + scopeName: 'source.matlab', }, { name: 'MediaWiki', value: 'mediawiki', grammar: () => import('./grammars/mediawiki.tmLanguage.json'), - scopeName: 'text.html.mediawiki' + scopeName: 'text.html.mediawiki', }, { name: 'MEL', value: 'mel', grammar: () => import('./grammars/mel.tmLanguage.json'), - scopeName: 'source.mel' + scopeName: 'source.mel', }, { name: 'Mikrotik', value: 'mikrotik', grammar: () => import('./grammars/mikrotik.tmLanguage.json'), - scopeName: 'source.mikrotik-script' + scopeName: 'source.mikrotik-script', }, { name: 'MIPS', value: 'mips', grammar: () => import('./grammars/mips.tmLanguage.json'), - scopeName: 'source.mips' + scopeName: 'source.mips', }, { name: 'MySQL', value: 'mysql', grammar: () => import('./grammars/mysql.tmLanguage.json'), - scopeName: 'source.sql.mysql' + scopeName: 'source.sql.mysql', }, { name: 'Nginx', value: 'nginx', grammar: () => import('./grammars/nginx.tmLanguage.json'), - scopeName: 'source.nginx' + scopeName: 'source.nginx', }, { name: 'Nim', value: 'nim', grammar: () => import('./grammars/nim.tmLanguage.json'), - scopeName: 'source.nim' + scopeName: 'source.nim', }, { name: 'Nix', value: 'nix', grammar: () => import('./grammars/nix.tmLanguage.json'), - scopeName: 'source.nix' + scopeName: 'source.nix', }, { name: 'NSIS', value: 'nsis', grammar: () => import('./grammars/nsis.tmLanguage.json'), - scopeName: 'source.nsis' + scopeName: 'source.nsis', }, { name: 'Nunjucks', value: 'nunjucks', grammar: () => import('./grammars/nunjucks.tmLanguage.json'), - scopeName: 'text.html.nunjucks' + scopeName: 'text.html.nunjucks', }, { name: 'Objective-C', value: 'objectivec', grammar: () => import('./grammars/objective-c.tmLanguage.json'), - scopeName: 'source.objc' + scopeName: 'source.objc', }, { name: 'OCaml', value: 'ocaml', grammar: () => import('./grammars/ocaml.tmLanguage.json'), - scopeName: 'source.ocaml' + scopeName: 'source.ocaml', }, { name: 'OpenGL', value: 'glsl', grammar: () => import('./grammars/glsl.tmLanguage.json'), - scopeName: 'source.glsl' + scopeName: 'source.glsl', }, { name: 'Pascal', value: 'pascal', grammar: () => import('./grammars/pascal.tmLanguage.json'), - scopeName: 'source.pascal' + scopeName: 'source.pascal', }, { name: 'Perl', value: 'perl', grammar: () => import('./grammars/perl.tmLanguage.json'), - scopeName: 'source.perl' + scopeName: 'source.perl', }, { name: 'pgSQL', value: 'pgsql', grammar: () => import('./grammars/pgsql.tmLanguage.json'), - scopeName: 'source.pgsql' + scopeName: 'source.pgsql', }, { name: 'PHP (Blade Template)', value: 'php_laravel_blade', grammar: () => import('./grammars/php-blade.tmLanguage.json'), - scopeName: 'text.html.php.blade' + scopeName: 'text.html.php.blade', }, { name: 'PHP', value: 'php', grammar: () => import('./grammars/php.tmLanguage.json'), - scopeName: 'source.php' + scopeName: 'source.php', }, { name: 'Pig', value: 'pig', grammar: () => import('./grammars/pig.tmLanguage.json'), - scopeName: 'source.pig' + scopeName: 'source.pig', }, { name: 'Plain Text', value: 'plain_text', grammar: () => import('./grammars/plain-text.tmLanguage.json'), - scopeName: 'text.plain' + scopeName: 'text.plain', }, { name: 'Powershell', value: 'powershell', grammar: () => import('./grammars/powershell.tmLanguage.json'), - scopeName: 'source.powershell' + scopeName: 'source.powershell', }, { name: 'Praat', value: 'praat', grammar: () => import('./grammars/praat.tmLanguage.json'), - scopeName: 'source.praat' + scopeName: 'source.praat', }, { name: 'Prisma', value: 'prisma', grammar: () => import('./grammars/prisma.tmLanguage.json'), - scopeName: 'source.prisma' + scopeName: 'source.prisma', }, { name: 'Prolog', value: 'prolog', grammar: () => import('./grammars/prolog.tmLanguage.json'), - scopeName: 'source.prolog' + scopeName: 'source.prolog', }, { name: 'Properties', value: 'properties', grammar: () => import('./grammars/properties.tmLanguage.json'), - scopeName: 'source.tm-properties' + scopeName: 'source.tm-properties', }, { name: 'Protobuf', value: 'protobuf', grammar: () => import('./grammars/protobuf.tmLanguage.json'), - scopeName: 'source.proto' + scopeName: 'source.proto', }, { name: 'Pug', value: 'pug', grammar: () => import('./grammars/pug.tmLanguage.json'), - scopeName: 'text.pug' + scopeName: 'text.pug', }, { name: 'Puppet', value: 'puppet', grammar: () => import('./grammars/puppet.tmLanguage.json'), - scopeName: 'source.puppet' + scopeName: 'source.puppet', }, { name: 'Python', value: 'python', grammar: () => import('./grammars/python.tmLanguage.json'), - scopeName: 'source.python' + scopeName: 'source.python', }, { name: 'QML', value: 'qml', grammar: () => import('./grammars/qml.tmLanguage.json'), - scopeName: 'source.qml' + scopeName: 'source.qml', }, { name: 'R', value: 'r', grammar: () => import('./grammars/r.tmLanguage.json'), - scopeName: 'source.r' + scopeName: 'source.r', }, { name: 'Raku', value: 'raku', grammar: () => import('./grammars/raku.tmLanguage.json'), - scopeName: 'source.perl.6' + scopeName: 'source.perl.6', }, { name: 'Razor', value: 'razor', grammar: () => import('./grammars/razor.tmLanguage.json'), - scopeName: 'text.aspnetcorerazor' + scopeName: 'text.aspnetcorerazor', }, { name: 'Red', value: 'red', grammar: () => import('./grammars/red.tmLanguage.json'), - scopeName: 'source.red' + scopeName: 'source.red', }, { name: 'RegExp', value: 'regexp', grammar: () => import('./grammars/regexp.tmLanguage.json'), - scopeName: 'source.regexp' + scopeName: 'source.regexp', }, { name: 'RST', value: 'rst', grammar: () => import('./grammars/rst.tmLanguage.json'), - scopeName: 'source.rst' + scopeName: 'source.rst', }, { name: 'Ruby', value: 'ruby', grammar: () => import('./grammars/ruby.tmLanguage.json'), - scopeName: 'source.ruby' + scopeName: 'source.ruby', }, { name: 'Rust', value: 'rust', grammar: () => import('./grammars/rust.tmLanguage.json'), - scopeName: 'source.rust' + scopeName: 'source.rust', }, { name: 'SAS', value: 'sas', grammar: () => import('./grammars/sas.tmLanguage.json'), - scopeName: 'source.sas' + scopeName: 'source.sas', }, { name: 'SASS', value: 'sass', grammar: () => import('./grammars/sass.tmLanguage.json'), - scopeName: 'source.sass' + scopeName: 'source.sass', }, { name: 'SCAD', value: 'scad', grammar: () => import('./grammars/scad.tmLanguage.json'), - scopeName: 'source.scad' + scopeName: 'source.scad', }, { name: 'Scala', value: 'scala', grammar: () => import('./grammars/scala.tmLanguage.json'), - scopeName: 'source.scala' + scopeName: 'source.scala', }, { name: 'Scheme', value: 'scheme', grammar: () => import('./grammars/scheme.tmLanguage.json'), - scopeName: 'source.scheme' + scopeName: 'source.scheme', }, { name: 'sCrypt', value: 'scrypt', grammar: () => import('./grammars/scrypt.tmLanguage.json'), - scopeName: 'source.scrypt' + scopeName: 'source.scrypt', }, { name: 'SCSS', value: 'scss', grammar: () => import('./grammars/scss.tmLanguage.json'), - scopeName: 'source.css.scss' + scopeName: 'source.css.scss', }, { name: 'SJS', value: 'sjs', grammar: () => import('./grammars/sjs.tmLanguage.json'), - scopeName: 'source.sjs' + scopeName: 'source.sjs', }, { name: 'Slim', value: 'slim', grammar: () => import('./grammars/slim.tmLanguage.json'), - scopeName: 'text.slim' + scopeName: 'text.slim', }, { name: 'Smalltalk', value: 'smalltalk', grammar: () => import('./grammars/smalltalk.tmLanguage.json'), - scopeName: 'source.smalltalk' + scopeName: 'source.smalltalk', }, { name: 'Smarty', value: 'smarty', grammar: () => import('./grammars/smarty.tmLanguage.json'), - scopeName: 'source.smarty' + scopeName: 'source.smarty', }, { name: 'Smithy', value: 'smithy', grammar: () => import('./grammars/smithy.tmLanguage.json'), - scopeName: 'source.smithy' + scopeName: 'source.smithy', }, { name: 'Solidity', value: 'solidity', grammar: () => import('./grammars/solidity.tmLanguage.json'), - scopeName: 'source.solidity' + scopeName: 'source.solidity', }, { name: 'Soy Template', value: 'soy_template', grammar: () => import('./grammars/soytemplate.tmLanguage.json'), - scopeName: 'source.soy' + scopeName: 'source.soy', }, { name: 'SQL', value: 'sql', grammar: () => import('./grammars/sql.tmLanguage.json'), - scopeName: 'source.sql' + scopeName: 'source.sql', }, { name: 'SQLServer', value: 'sqlserver', grammar: () => import('./grammars/sql.tmLanguage.json'), - scopeName: 'source.sqlserver' + scopeName: 'source.sqlserver', }, { name: 'Stylus', value: 'stylus', grammar: () => import('./grammars/less.tmLanguage.json'), - scopeName: 'source.stylus' + scopeName: 'source.stylus', }, { name: 'SVG', value: 'svg', grammar: () => import('./grammars/svg.tmLanguage.json'), - scopeName: 'text.xml.svg' + scopeName: 'text.xml.svg', }, { name: 'Swift', value: 'swift', grammar: () => import('./grammars/swift.tmLanguage.json'), - scopeName: 'source.swift' + scopeName: 'source.swift', }, { name: 'Tcl', value: 'tcl', grammar: () => import('./grammars/tcl.tmLanguage.json'), - scopeName: 'source.tcl' + scopeName: 'source.tcl', }, { name: 'Terraform', value: 'terraform', grammar: () => import('./grammars/terraform.tmLanguage.json'), - scopeName: 'source.terraform' + scopeName: 'source.terraform', }, { name: 'Tex', value: 'tex', grammar: () => import('./grammars/tex.tmLanguage.json'), - scopeName: 'text.tex' + scopeName: 'text.tex', }, { name: 'Textile', value: 'textile', grammar: () => import('./grammars/textile.tmLanguage.json'), - scopeName: 'text.html.textile' + scopeName: 'text.html.textile', }, { name: 'TOML', value: 'toml', grammar: () => import('./grammars/toml.tmLanguage.json'), - scopeName: 'source.toml' + scopeName: 'source.toml', }, { name: 'TSX', value: 'tsx', grammar: () => import('./grammars/tsx.tmLanguage.json'), - scopeName: 'source.tsx' + scopeName: 'source.tsx', }, { name: 'Twig', value: 'twig', grammar: () => import('./grammars/twig.tmLanguage.json'), - scopeName: 'text.html.twig' + scopeName: 'text.html.twig', }, { name: 'TypeScript', value: 'typescript', grammar: () => import('./grammars/typescript.tmLanguage.json'), - scopeName: 'source.ts' + scopeName: 'source.ts', }, { name: 'Vala', value: 'vala', grammar: () => import('./grammars/vala.tmLanguage.json'), - scopeName: 'source.vala' + scopeName: 'source.vala', }, { name: 'Velocity', value: 'velocity', grammar: () => import('./grammars/velocity.tmLanguage.json'), - scopeName: 'text.velocity' + scopeName: 'text.velocity', }, { name: 'Verilog', value: 'verilog', grammar: () => import('./grammars/systemverilog.tmLanguage.json'), - scopeName: 'source.systemverilog' + scopeName: 'source.systemverilog', }, { name: 'VHDL', value: 'vhdl', grammar: () => import('./grammars/vhdl.tmLanguage.json'), - scopeName: 'source.vhdl' + scopeName: 'source.vhdl', }, { name: 'Visualforce', value: 'visualforce', grammar: () => import('./grammars/visualforce.tmLanguage.json'), - scopeName: 'text.visualforce.markup' + scopeName: 'text.visualforce.markup', }, { name: 'Vue', value: 'vue', grammar: () => import('./grammars/vue.tmLanguage.json'), - scopeName: 'text.html.vue' + scopeName: 'text.html.vue', }, { name: 'Wollok', value: 'wollok', grammar: () => import('./grammars/wollok.tmLanguage.json'), - scopeName: 'source.wollok' + scopeName: 'source.wollok', }, { name: 'XML', value: 'xml', grammar: () => import('./grammars/xml.tmLanguage.json'), - scopeName: 'text.xml' + scopeName: 'text.xml', }, { name: 'XSL', value: 'xsl', grammar: () => import('./grammars/xsl.tmLanguage.json'), - scopeName: 'text.xml.xsl' + scopeName: 'text.xml.xsl', }, { name: 'XQuery', value: 'xquery', grammar: () => import('./grammars/xquery.tmLanguage.json'), - scopeName: 'source.xquery' + scopeName: 'source.xquery', }, { name: 'YAML', value: 'yaml', grammar: () => import('./grammars/yaml.tmLanguage.json'), - scopeName: 'source.yaml' + scopeName: 'source.yaml', }, { name: 'Zeek', value: 'zeek', grammar: () => import('./grammars/zeek.tmLanguage.json'), - scopeName: 'source.zeek' - } + scopeName: 'source.zeek', + }, ] // Маппинг с версии v1 export const oldLanguageMap: Record<any, Language> = { - azcli: 'plain_text', - bat: 'sh', - cameligo: 'plain_text', - coffeescript: 'coffee', - c: 'c_cpp', - csp: 'plain_text', - go: 'golang', - graphql: 'graphqlschema', - msdax: 'plain_text', + 'azcli': 'plain_text', + 'bat': 'sh', + 'cameligo': 'plain_text', + 'coffeescript': 'coffee', + 'c': 'c_cpp', + 'csp': 'plain_text', + 'go': 'golang', + 'graphql': 'graphqlschema', + 'msdax': 'plain_text', 'objective-c': 'objectivec', - pascaligo: 'plain_text', - postiats: 'plain_text', - powerquery: 'plain_text', - pug: 'jade', - redis: 'plain_text', - sb: 'plain_text', - shell: 'sh', - sol: 'plain_text', - aes: 'plain_text', - st: 'plain_text', - vb: 'vbscript' + 'pascaligo': 'plain_text', + 'postiats': 'plain_text', + 'powerquery': 'plain_text', + 'pug': 'jade', + 'redis': 'plain_text', + 'sb': 'plain_text', + 'shell': 'sh', + 'sol': 'plain_text', + 'aes': 'plain_text', + 'st': 'plain_text', + 'vb': 'vbscript', } diff --git a/src/renderer/components/editor/themes.ts b/src/renderer/components/editor/themes.ts deleted file mode 100644 index 9c81bbff..00000000 --- a/src/renderer/components/editor/themes.ts +++ /dev/null @@ -1,136 +0,0 @@ -import type { ITextmateThemePlus } from 'codemirror-textmate' -import { addTheme } from 'codemirror-textmate' -import type { Theme } from '@shared/types/renderer/store/app' - -interface ThemeConfig { - name: string // Имя темы из файла .tmTheme.json - label: string - value: Theme - loader: () => Promise<ITextmateThemePlus> - gutterSettings: { - background: string - divider: string - } -} - -export const themes: ThemeConfig[] = [ - { - name: 'Dracula', - label: 'Dracula', - value: 'dark:dracula', - loader: () => import('./themes/dracula.tmTheme.json'), - gutterSettings: { - background: '#282A36', - divider: '#282A36' - } - }, - { - name: 'Material-Theme', - label: 'Material', - value: 'dark:material', - loader: () => import('./themes/material-theme.tmTheme.json'), - gutterSettings: { - background: '#263238', - divider: '#263238' - } - }, - { - name: 'Material-Theme-Palenight', - label: 'Material Palenight', - value: 'dark:material-palenight', - loader: () => import('./themes/material-theme-palenight.tmTheme.json'), - gutterSettings: { - background: '#292D3F', - divider: '#292D3F' - } - }, - { - name: 'Merbivore-Soft', - label: 'Merbivore Soft', - value: 'dark:merbivore', - loader: () => import('./themes/merbivore-soft.tmTheme.json'), - gutterSettings: { - background: '#1C1C1C', - divider: '#1C1C1C' - } - }, - { - name: 'Monokai', - label: 'Monokai', - value: 'dark:monokai', - loader: () => import('./themes/monokai.tmTheme.json'), - gutterSettings: { - background: '#272822', - divider: '#272822' - } - }, - { - name: 'One-Dark', - label: 'One', - value: 'dark:one', - loader: () => import('./themes/one-dark.tmTheme.json'), - gutterSettings: { - background: '#282C34', - divider: '#282C34' - } - }, - { - name: 'Tokyo-Night', - label: 'Tokyo Night', - value: 'dark:tokyo-night', - loader: () => import('./themes/tokyo-night.tmTheme.json'), - gutterSettings: { - background: '#1C2029', - divider: '#1C2029' - } - }, - { - name: 'GitHub', - label: 'GitHub', - value: 'light:github', - loader: () => import('./themes/github.tmTheme.json'), - gutterSettings: { - background: '#FFFFFF', - divider: '#FFFFFF' - } - }, - { - name: 'Solarized-Light', - label: 'Solarized', - value: 'light:solarized', - loader: () => import('./themes/solarized-light.tmTheme.json'), - gutterSettings: { - background: '#FDF6E3', - divider: '#FDF6E3' - } - }, - { - name: 'Material-Theme-Lighter', - label: 'Material', - value: 'light:material', - loader: () => import('./themes/material-theme-lighter.tmTheme.json'), - gutterSettings: { - background: '#FAFAFA', - divider: '#FAFAFA' - } - } -] - -export const loadThemes = async () => { - for (const i of themes) { - const config = await i.loader() - const theme = { - ...config, - gutterSettings: i.gutterSettings - } - addTheme(theme) - } -} - -export const setTheme = async (theme: Theme, editor: CodeMirror.Editor) => { - const name = getThemeName(theme) - if (name) editor.setOption('theme', name) -} - -export const getThemeName = (theme: Theme) => - themes.find(i => i.value === theme)?.name diff --git a/src/renderer/components/editor/themes/dracula.tmTheme.json b/src/renderer/components/editor/themes/dracula.tmTheme.json deleted file mode 100644 index 443c5d0c..00000000 --- a/src/renderer/components/editor/themes/dracula.tmTheme.json +++ /dev/null @@ -1,575 +0,0 @@ -{ - "semanticClass": "theme.dracula", - "author": "Zeno Rocha", - "settings": [ - { - "settings": { - "bracketsForeground": "#F8F8F2A5", - "findHighlight": "#effb7b", - "caret": "#f8f8f0", - "lineHighlight": "#44475a", - "findHighlightForeground": "#000000", - "block_caret": "#999a9e", - "foreground": "#f8f8f2", - "selectionBorder": "#222218", - "activeGuide": "#9D550FB0", - "background": "#282a36", - "invisibles": "#3B3A32", - "selection": "#44475a", - "bracketsOptions": "underline", - "bracketContentsForeground": "#F8F8F2A5", - "bracketContentsOptions": "underline", - "tagsOptions": "stippled_underline" - } - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "foreground": "#6272a4", - "fontStyle": "" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "foreground": "#f1fa8c" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "Built-in constant", - "scope": "constant.language", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "User-defined constant", - "scope": "constant.character, constant.other", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "Variable", - "scope": "variable", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Ruby's @variable", - "scope": "variable.other.readwrite.instance", - "settings": { - "fontStyle": "", - "foreground": "#ffb86c" - } - }, - { - "name": "String interpolation", - "scope": "constant.character.escaped, constant.character.escape, string source, string source.ruby", - "settings": { - "fontStyle": "", - "foreground": "#ff79c6" - } - }, - { - "name": "Ruby Regexp", - "scope": "source.ruby string.regexp.classic.ruby,source.ruby string.regexp.mod-r.ruby", - "settings": { - "fontStyle": "", - "foreground": "#ff5555" - } - }, - { - "name": "Keyword", - "scope": "keyword", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "fontStyle": "", - "foreground": "#ff79c6" - } - }, - { - "name": "Storage type", - "scope": "storage.type", - "settings": { - "fontStyle": "italic", - "foreground": "#8be9fd" - } - }, - { - "name": "Storage Type Namespace", - "scope": "storage.type.namespace", - "settings": { - "fontStyle": "italic", - "foreground": "#8be9fd" - } - }, - { - "name": "Storage Type Class", - "scope": "storage.type.class", - "settings": { - "fontStyle": "italic", - "foreground": "#ff79c6" - } - }, - { - "name": "Class name", - "scope": "entity.name.class", - "settings": { - "fontStyle": "underline", - "foreground": "#8be9fd" - } - }, - { - "name": "Meta Path", - "scope": "meta.path", - "settings": { - "fontStyle": "underline", - "foreground": "#66d9ef" - } - }, - { - "name": "Inherited class", - "scope": "entity.other.inherited-class", - "settings": { - "fontStyle": "italic underline", - "foreground": "#8be9fd" - } - }, - { - "name": "Function name", - "scope": "entity.name.function", - "settings": { - "fontStyle": "", - "foreground": "#50fa7b" - } - }, - { - "name": "Function argument", - "scope": "variable.parameter", - "settings": { - "fontStyle": "italic", - "foreground": "#ffb86c" - } - }, - { - "name": "Tag name", - "scope": "entity.name.tag", - "settings": { - "fontStyle": "", - "foreground": "#ff79c6" - } - }, - { - "name": "Tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "fontStyle": "", - "foreground": "#50fa7b" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "fontStyle": "", - "foreground": "#8be9fd" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": { - "fontStyle": "", - "foreground": "#6be5fd" - } - }, - { - "name": "Library class/type", - "scope": "support.type, support.class", - "settings": { - "fontStyle": "italic", - "foreground": "#66d9ef" - } - }, - { - "name": "Library variable", - "scope": "support.other.variable", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Support Other Namespace", - "scope": "support.other.namespace", - "settings": { - "fontStyle": "italic", - "foreground": "#66d9ef" - } - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": { - "fontStyle": "", - "foreground": "#F8F8F0", - "background": "#ff79c6" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#F8F8F0", - "background": "#bd93f9" - } - }, - { - "name": "JSON String", - "scope": "meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#CFCFC2" - } - }, - { - "name": "diff.header", - "scope": "meta.diff, meta.diff.header", - "settings": { - "foreground": "#6272a4" - } - }, - { - "name": "diff.deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "diff.inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#50fa7b" - } - }, - { - "name": "diff.changed", - "scope": "markup.changed", - "settings": { - "foreground": "#E6DB74" - } - }, - { - "scope": "constant.numeric.line-number.find-in-files - match", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "scope": "entity.name.filename", - "settings": { - "foreground": "#E6DB74" - } - }, - { - "scope": "message.error", - "settings": { - "foreground": "#F83333" - } - }, - { - "name": "JSON Punctuation", - "scope": "punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json", - "settings": { - "foreground": "#EEEEEE" - } - }, - { - "name": "JSON Structure", - "scope": "meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#8be9fd" - } - }, - { - "name": "JSON String", - "scope": "meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#f1fa8c" - } - }, - { - "name": "JSON: 6 deep", - "scope": "meta meta meta meta meta meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#50fa7b" - } - }, - { - "name": "JSON: 5 deep", - "scope": "meta meta meta meta meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#ffb86c" - } - }, - { - "name": "JSON: 4 deep", - "scope": "meta meta meta meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "JSON: 3 deep", - "scope": "meta meta meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "JSON: 2 deep", - "scope": "meta meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#50fa7b" - } - }, - { - "name": "JSON: 1 deep", - "scope": "meta meta.structure.dictionary.value string", - "settings": { - "foreground": "#ffb86c" - } - }, - { - "name": "Markup: strike", - "scope": "markup.strike", - "settings": { - "fontStyle": "italic", - "foreground": "#FFB86C" - } - }, - { - "name": "Markup: bold", - "scope": "markup.bold", - "settings": { - "fontStyle": "bold", - "foreground": "#FFB86C" - } - }, - { - "name": "Markup: italic", - "scope": "markup.italic", - "settings": { - "fontStyle": "italic", - "foreground": "#FFB86C" - } - }, - { - "name": "Markdown: heading", - "scope": "markup.heading", - "settings": { - "foreground": "#8BE9FD" - } - }, - { - "name": "Markdown: List Items Punctuation", - "scope": "punctuation.definition.list_item.markdown", - "settings": { - "foreground": "#FF79C6" - } - }, - { - "name": "Markdown: Blockquote", - "scope": "markup.quote", - "settings": { - "fontStyle": "italic", - "foreground": "#6272A4" - } - }, - { - "name": "Markdown: Blockquote Punctuation", - "scope": "punctuation.definition.blockquote.markdown", - "settings": { - "fontStyle": "italic", - "foreground": "#6272A4", - "background": "#6272A4" - } - }, - { - "name": "Markdown: Separator", - "scope": "meta.separator", - "settings": { - "foreground": "#6272A4" - } - }, - { - "name": "Markup: raw inline", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#50FA7B" - } - }, - { - "name": "Markup: underline", - "scope": "markup.underline", - "settings": { - "fontStyle": "underline", - "foreground": "#BD93F9" - } - }, - { - "name": "Markup: Raw block", - "scope": "markup.raw.block", - "settings": { - "foreground": "#CFCFC2" - } - }, - { - "name": "Markdown: Raw Block fenced source", - "scope": "markup.raw.block.fenced.markdown source", - "settings": { - "foreground": "#F8F8F2" - } - }, - { - "name": "Markdown: Fenced Bode Block", - "scope": "punctuation.definition.fenced.markdown, variable.language.fenced.markdown", - "settings": { - "fontStyle": "italic", - "foreground": "#6272A4" - } - }, - { - "name": "Markdown: Fenced Language", - "scope": "variable.language.fenced.markdown", - "settings": { - "fontStyle": "italic", - "foreground": "#6272A4" - } - }, - { - "name": "Punctuation Accessor", - "scope": "punctuation.accessor", - "settings": { - "foreground": "#FF79C6" - } - }, - { - "name": "Meta Function Return Type", - "scope": "meta.function.return-type", - "settings": { - "foreground": "#FF79C6" - } - }, - { - "name": "Punctuation Section Block Begin", - "scope": "punctuation.section.block.begin", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "Punctuation Section Block End", - "scope": "punctuation.section.block.end", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "Punctuation Section Embedded Begin", - "scope": "punctuation.section.embedded.begin", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "Punctuation Section Embedded End", - "scope": "punctuation.section.embedded.end", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "Punctuation Separator Namespace", - "scope": "punctuation.separator.namespace", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "Variable Function", - "scope": "variable.function", - "settings": { - "foreground": "#50fa7b" - } - }, - { - "name": "Variable Other", - "scope": "variable.other", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "Variable Language", - "scope": "variable.language", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "Entity Name Module Ruby", - "scope": "entity.name.module.ruby", - "settings": { - "foreground": "#8be9fd" - } - }, - { - "name": "Entity Name Constant Ruby", - "scope": "entity.name.constant.ruby", - "settings": { - "foreground": "#bd93f9" - } - }, - { - "name": "Support Function Builtin Ruby", - "scope": "support.function.builtin.ruby", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "Storage Type Namespace CS", - "scope": "storage.type.namespace.cs", - "settings": { - "foreground": "#ff79c6" - } - }, - { - "name": "Entity Name Namespace CS", - "scope": "entity.name.namespace.cs", - "settings": { - "foreground": "#8be9fd" - } - } - ], - "name": "Dracula", - "colorSpaceName": "sRGB", - "uuid": "83091B89-765E-4F0D-9275-0EC6CB084126" -} diff --git a/src/renderer/components/editor/themes/github.tmTheme.json b/src/renderer/components/editor/themes/github.tmTheme.json deleted file mode 100644 index 367c4124..00000000 --- a/src/renderer/components/editor/themes/github.tmTheme.json +++ /dev/null @@ -1,916 +0,0 @@ -{ - "name": "GitHub", - "settings": [ - { - "settings": { - "bracketsOptions": "underline", - "gutter": "#ffffff", - "findHighlightForeground": "#323232", - "foreground": "#323232", - "background": "#ffffff", - "caret": "#323232", - "selection": "#f8eec7", - "tagsOptions": "underline", - "activeGuide": "#b3b3b3", - "bracketsForeground": "#63a35c", - "findHighlight": "#f8eec7", - "guide": "#e8e8e8", - "invisibles": "#000000", - "bracketContentsOptions": "underline", - "gutterForeground": "#b3b3b3", - "stackGuide": "#e8e8e8", - "bracketContentsForeground": "#63a35c", - "lineHighlight": "#f5f5f5", - "selectionBorder": "#ffffff", - "tagsForeground": "#63a35c" - } - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "foreground": "#969896", - "fontStyle": "italic" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "foreground": "#183691" - } - }, - { - "name": "RegExp Operator", - "scope": "regexp-operator", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "RegExp Character Class", - "scope": "string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Built-in Constant", - "scope": "constant.language", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "User-defined Constant", - "scope": "constant.character, constant.other, variable.other.constant", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Variable", - "scope": "variable", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Keyword", - "scope": "keyword", - "settings": { - "foreground": "#a71d5d", - "fontStyle": "bold" - } - }, - { - "name": "Bitwise", - "scope": "bitwise-operator", - "settings": { - "foreground": "#a71d5d", - "fontStyle": "bold" - } - }, - { - "name": "Operator Accessor", - "scope": "punctuation.accessor", - "settings": { - "foreground": "#a71d5d", - "fontStyle": "bold" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "foreground": "#a71d5d", - "fontStyle": "bold" - } - }, - { - "name": "Storage Type", - "scope": "storage.type", - "settings": { - "foreground": "#a71d5d", - "fontStyle": "bold" - } - }, - { - "name": "Class Name", - "scope": "entity.name.class", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Inherited Class", - "scope": "entity.other.inherited-class", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Function Name", - "scope": "entity.name.function", - "settings": { - "foreground": "#795da3", - "fontStyle": "bold" - } - }, - { - "name": "Function Argument", - "scope": "variable.parameter", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Tag Name", - "scope": "entity.name.tag", - "settings": { - "foreground": "#63a35c" - } - }, - { - "name": "Tag Attribute", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#795da3" - } - }, - { - "name": "Library Function", - "scope": "support.function", - "settings": { - "foreground": "#62a35c" - } - }, - { - "name": "Library Constant", - "scope": "support.constant", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Library Class", - "scope": "support.type, support.class", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Library Variable", - "scope": "support.other.variable", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Invalid", - "scope": "invalid, invalid.illegal, invalid.deprecated", - "settings": { - "foreground": "#b52a1d", - "fontStyle": "bold", - "background": "#f5f5f5" - } - }, - { - "name": "Find-in-files Filename", - "scope": "entity.name.filename.find-in-files", - "settings": { - "foreground": "#323232", - "fontStyle": "bold" - } - }, - { - "name": "Find-in-files Line Numbers", - "scope": "constant.numeric.line-number.find-in-files, constant.numeric.line-number.match.find-in-files", - "settings": { - "foreground": "#b3b3b3" - } - }, - { - "name": "Diff Header", - "scope": "meta.diff.header", - "settings": { - "foreground": "#969896", - "fontStyle": "italic", - "background": "#ffffff" - } - }, - { - "name": "Diff Header", - "scope": "meta.diff.header punctuation.definition.from-file.diff", - "settings": { - "foreground": "#bd2c00", - "fontStyle": "italic bold", - "background": "#ffecec" - } - }, - { - "name": "Diff Header", - "scope": "meta.diff.header punctuation.definition.to-file.diff", - "settings": { - "foreground": "#55a532", - "fontStyle": "italic bold", - "background": "#eaffea" - } - }, - { - "name": "Diff Range", - "scope": "meta.diff.range", - "settings": { - "foreground": "#969896", - "fontStyle": "italic bold" - } - }, - { - "name": "Diff Deleted", - "scope": "markup.deleted", - "settings": { - "background": "#ffecec" - } - }, - { - "name": "Diff Deleted Punctuation", - "scope": "markup.deleted punctuation.definition.inserted", - "settings": { - "foreground": "#bd2c00", - "fontStyle": "bold" - } - }, - { - "name": "Diff Inserted", - "scope": "markup.inserted", - "settings": { - "background": "#eaffea" - } - }, - { - "name": "Diff Inserted Punctuation", - "scope": "markup.inserted punctuation.definition.inserted", - "settings": { - "foreground": "#55a532", - "fontStyle": "bold" - } - }, - { - "name": "GitGutter Deleted", - "scope": "markup.deleted.git_gutter", - "settings": { - "foreground": "#bd2c00" - } - }, - { - "name": "GitGutter Inserted", - "scope": "markup.inserted.git_gutter", - "settings": { - "foreground": "#55a532" - } - }, - { - "name": "GitGutter Modified", - "scope": "markup.changed.git_gutter", - "settings": { - "foreground": "#0086B3" - } - }, - { - "name": "GitGutter Ignored", - "scope": "markup.ignored.git_gutter", - "settings": { - "foreground": "#b3b3b3" - } - }, - { - "name": "GitGutter Untracked", - "scope": "markup.untracked.git_gutter", - "settings": { - "foreground": "#b3b3b3" - } - }, - { - "name": "Entity Punctuation", - "scope": "source.css punctuation.definition.entity", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Pseudo Selector", - "scope": "source.css entity.other.attribute-name.pseudo-class, source.css entity.other.attribute-name.pseudo-element", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "Property Value", - "scope": "source.css meta.value, source.css support.constant, source.css support.function", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Color", - "scope": "source.css constant.other.color", - "settings": { - "foreground": "#ed6a43" - } - }, - { - "name": "Entity Punctuation", - "scope": "source.scss punctuation.definition.entity", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Pseudo Selector", - "scope": "source.scss entity.other.attribute-name.pseudo-class, source.scss entity.other.attribute-name.pseudo-element", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "Color", - "scope": "source.scss support.constant.property-value, source.scss support.function", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Variable", - "scope": "source.scss variable", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "this", - "scope": "variable.language.this.js", - "settings": { - "foreground": "#ed6a43" - } - }, - { - "name": "Function", - "scope": "source.js entity.name.function", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "Function Definition", - "scope": "source.js meta.function entity.name.function, source.js entity.name.function meta.function", - "settings": { - "foreground": "#795da3", - "fontStyle": "bold" - } - }, - { - "name": "New Function", - "scope": "entity.name.type.new.js", - "settings": { - "foreground": "#795da3" - } - }, - { - "name": "Function Prototype", - "scope": "variable.language.prototype.js", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Support Function", - "scope": "source.js support.function", - "settings": { - "foreground": "#0086b3" - } - }, - { - "name": "Function Prototype", - "scope": "support.type.object.console.js", - "settings": { - "foreground": "#795da3" - } - }, - { - "name": "JSON Property - 20 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 20 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 19 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 19 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 18 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 18 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 17 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 17 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 16 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 16 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 15 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 15 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 14 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 14 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 13 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 13 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 12 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 12 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 11 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 11 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 10 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 10 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 9 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 9 Deep", - "scope": "meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 8 Deep", - "scope": "meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 8 Deep", - "scope": "meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 7 Deep", - "scope": "meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 7 Deep", - "scope": "meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 6 Deep", - "scope": "meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 6 Deep", - "scope": "meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 5 Deep", - "scope": "meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 5 Deep", - "scope": "meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 4 Deep", - "scope": "meta meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 4 Deep", - "scope": "meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 3 Deep", - "scope": "meta meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 3 Deep", - "scope": "meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 2 Deep", - "scope": "meta meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 2 Deep", - "scope": "meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property - 1 Deep", - "scope": "meta meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value - 1 Deep", - "scope": "meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "JSON Property", - "scope": "meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#183691", - "fontStyle": "bold" - } - }, - { - "name": "JSON Value", - "scope": "meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#323232", - "fontStyle": "regular" - } - }, - { - "name": "Keyword", - "scope": "source.python keyword", - "settings": { - "fontStyle": "bold" - } - }, - { - "name": "Storage", - "scope": "source.python storage", - "settings": { - "fontStyle": "bold" - } - }, - { - "name": "Storage Type", - "scope": "source.python storage.type", - "settings": { - "fontStyle": "bold" - } - }, - { - "name": "Function", - "scope": "source.python entity.name.function", - "settings": { - "foreground": "#323232", - "fontStyle": "bold" - } - }, - { - "name": "Class", - "scope": "source.php entity.name.type.class", - "settings": { - "foreground": "#323232", - "fontStyle": "bold" - } - }, - { - "name": "Language Variable", - "scope": "variable.language.ruby", - "settings": { - "foreground": "#ed6a43" - } - }, - { - "name": "Module Name", - "scope": "entity.name.type.module.ruby", - "settings": { - "foreground": "#795da3", - "fontStyle": "bold" - } - }, - { - "name": "Class Name", - "scope": "entity.name.type.class.ruby", - "settings": { - "foreground": "#795da3", - "fontStyle": "bold" - } - }, - { - "name": "Inherited Class", - "scope": "entity.other.inherited-class.ruby", - "settings": { - "foreground": "#795da3", - "fontStyle": "bold" - } - }, - { - "name": "Punctuation", - "scope": "text.html.markdown punctuation.definition", - "settings": { - "foreground": "#a71d5d" - } - }, - { - "name": "Separator", - "scope": "text.html.markdown meta.separator", - "settings": { - "foreground": "#b3b3b3" - } - }, - { - "name": "Heading", - "scope": "text.html.markdown markup.heading", - "settings": { - "fontStyle": "bold" - } - }, - { - "name": "Code Block", - "scope": "text.html.markdown markup.raw.block", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Inline Code", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#323232" - } - }, - { - "name": "Link and Image", - "scope": "text.html.markdown meta.link, text.html.markdown meta.image", - "settings": { - "foreground": "#4183c4" - } - }, - { - "name": "Link URL", - "scope": "text.html.markdown markup.underline.link, text.html.markdown constant.other.reference", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "List", - "scope": "text.html.markdown markup.list", - "settings": { - "foreground": "#ed6a43" - } - }, - { - "name": "Bold", - "scope": "text.html.markdown markup.bold", - "settings": { - "fontStyle": "bold" - } - }, - { - "name": "Italic", - "scope": "text.html.markdown markup.italic", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Bold Italic", - "scope": "text.html.markdown markup.bold markup.italic", - "settings": { - "fontStyle": "bold italic" - } - }, - { - "name": "Italic Bold", - "scope": "text.html.markdown markup.italic markup.bold", - "settings": { - "fontStyle": "italic bold" - } - } - ] -} diff --git a/src/renderer/components/editor/themes/material-theme-lighter.tmTheme.json b/src/renderer/components/editor/themes/material-theme-lighter.tmTheme.json deleted file mode 100644 index dcd63262..00000000 --- a/src/renderer/components/editor/themes/material-theme-lighter.tmTheme.json +++ /dev/null @@ -1,673 +0,0 @@ -{ - "author": "Mattia Astorino", - "semanticClass": "theme.light.material_theme_lighter", - "settings": [ - { - "settings": { - "guide": "#B0BEC570", - "caret": "#27272790", - "findHighlight": "#F8E71C", - "shadow": "#90A4AE50", - "stackGuide": "#B0BEC580", - "lineHighlight": "#90A4AE20", - "gutterForeground": "#CFD8DC", - "foreground": "#80CBC4", - "background": "#FAFAFA", - "popupCss": "html {\n background-color: #FAFAFA;\n color: #80CBC4;\n padding: 16px;\n}\na {\n color: #8796B0;\n line-height: 16px;\n}\n.error, .deleted {\n color: #E53935;\n}\n.success, .inserted {\n color: #91B859;\n}\n.warning, .modified {\n color: #FFB62C;\n}\n.type {\n color: #39ADB5;\n font-style: italic;\n}\n.param {\n color: #F76D47;\n}\n.current {\n text-decoration: underline;\n}\n", - "selectionBorder": "#80CBC440", - "activeGuide": "#00000070", - "invisibles": "#E7EAEC", - "selection": "#80CBC440" - } - }, - { - "name": "Comments", - "scope": "comment, punctuation.definition.comment", - "settings": { - "fontStyle": "italic", - "foreground": "#CCD7DA" - } - }, - { - "name": "Variable", - "scope": "variable, string constant.other.placeholder", - "settings": { - "foreground": "#80CBC4" - } - }, - { - "name": "Colors", - "scope": "constant.other.color", - "settings": { - "foreground": "#FFFFFF" - } - }, - { - "name": "Invalid", - "scope": "invalid, invalid.illegal, invalid.broken", - "settings": { - "foreground": "#FFFFFF", - "background": "#E53935" - } - }, - { - "name": "Unimplemented", - "scope": "invalid.unimplemented", - "settings": { - "foreground": "#FFFFFF", - "background": "#91B859" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#FFFFFF", - "background": "#7C4DFF" - } - }, - { - "name": "Keyword, Storage", - "scope": "keyword, storage.type, storage.modifier", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Keyword, Storage", - "scope": "storage.type, keyword.control", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Operator, Misc", - "scope": "keyword.operator, constant.other.color, punctuation, meta.tag, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.section.embedded, keyword.other.template, keyword.other.substitution", - "settings": { - "foreground": "#39ADB5" - } - }, - { - "name": "Tag", - "scope": "entity.name.tag, meta.tag.sgml, markup.deleted.git_gutter", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Function, Special Method, Block Level", - "scope": "entity.name.function, meta.function-call, variable.function, support.function, keyword.other.special-method, meta.block-level", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "Other Variable, String Link", - "scope": "support.other.variable, string.other.link", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Number, Constant, Function Argument, Tag Attribute, Embedded", - "scope": "constant.numeric, constant.language, support.constant, constant.character, variable.parameter, keyword.other.unit", - "settings": { - "foreground": "#F76D47" - } - }, - { - "name": "String, Symbols, Inherited Class, Markup Heading", - "scope": "string, constant.other.symbol, constant.other.key, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "normal", - "foreground": "#91B859" - } - }, - { - "name": "Class, Support", - "scope": "entity.name.class, entity.name.type.class, support.type, support.class, support.other.namespace.use.php, meta.use.php, support.other.namespace.php, markup.changed.git_gutter, support.type.sys-types", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "CSS Class and Support", - "scope": "source.css support.type, source.sass support.type, source.scss support.type, source.less support.type, source.stylus support.type", - "settings": { - "foreground": "#8796B0" - } - }, - { - "name": "Sub-methods", - "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", - "settings": { - "foreground": "#E53935" - } - }, - { - "name": "Language methods", - "scope": "variable.language", - "settings": { - "fontStyle": "italic", - "foreground": "#E53935" - } - }, - { - "name": "entity.name.method.js", - "scope": "entity.name.method.js", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "meta.method.js", - "scope": "meta.class-method.js entity.name.function.js, variable.function.constructor", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "Attributes", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "HTML Attributes", - "scope": "text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name", - "settings": { - "fontStyle": "italic", - "foreground": "#FFB62C" - } - }, - { - "name": "CSS Classes", - "scope": "entity.other.attribute-name.class", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "CSS Id", - "scope": "source.sass keyword.control", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "Inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#91B859" - } - }, - { - "name": "Deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#E53935" - } - }, - { - "name": "Changed", - "scope": "markup.changed", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Regular Expressions", - "scope": "string.regexp", - "settings": { - "foreground": "#39ADB5" - } - }, - { - "name": "Escape Characters", - "scope": "constant.character.escape", - "settings": { - "foreground": "#39ADB5" - } - }, - { - "name": "URL", - "scope": "*url*, *link*, *uri*", - "settings": { - "fontStyle": "underline" - } - }, - { - "name": "Search Results Nums", - "scope": "constant.numeric.line-number.find-in-files - match", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "Search Results Lines", - "scope": "entity.name.filename.find-in-files", - "settings": { - "foreground": "#91B859" - } - }, - { - "name": "Decorators", - "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", - "settings": { - "fontStyle": "italic", - "foreground": "#6182B8" - } - }, - { - "name": "ES7 Bind Operator", - "scope": "source.js constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "italic", - "foreground": "#E53935" - } - }, - { - "name": "JSON Key - Level 8", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#91B859" - } - }, - { - "name": "JSON Key - Level 7", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "JSON Key - Level 6", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "JSON Key - Level 5", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "JSON Key - Level 4", - "scope": "source.json meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "JSON Key - Level 3", - "scope": "source.json meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#E53935" - } - }, - { - "name": "JSON Key - Level 2", - "scope": "source.json meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#F76D47" - } - }, - { - "name": "JSON Key - Level 1", - "scope": "source.json meta meta.structure.dictionary.json string.quoted.double.json - meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta.structure.dictionary.json punctuation.definition.string - meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "JSON Key - Level 0", - "scope": "source.json meta.structure.dictionary.json string.quoted.double.json - meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json punctuation.definition.string - meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Markdown - Plain", - "scope": "text.html.markdown, punctuation.definition.list_item.markdown", - "settings": { - "foreground": "#80CBC4" - } - }, - { - "name": "Markdown - Markup Raw Inline", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Markdown - Markup Raw Inline Punctuation", - "scope": "text.html.markdown punctuation.definition.raw.markdown", - "settings": { - "foreground": "#E7EAEC" - } - }, - { - "name": "Markdown - Line Break", - "scope": "text.html.markdown meta.dummy.line-break", - "settings": { - "foreground": "" - } - }, - { - "name": "Markdown - Heading", - "scope": "markdown.heading, markup.heading | markup.heading entity.name, markup.heading.markdown punctuation.definition.heading.markdown", - "settings": { - "foreground": "#91B859" - } - }, - { - "name": "Markup - Italic", - "scope": "markup.italic", - "settings": { - "fontStyle": "italic", - "foreground": "#FF5370" - } - }, - { - "name": "Markup - Bold", - "scope": "markup.bold, markup.bold string", - "settings": { - "fontStyle": "bold", - "foreground": "#FF5370" - } - }, - { - "name": "Markup - Bold & Italic", - "scope": "markup.bold markup.italic, markup.italic markup.bold, markup.quote markup.bold, markup.bold markup.italic string, markup.italic markup.bold string, markup.quote markup.bold string", - "settings": { - "fontStyle": "bold italic" - } - }, - { - "name": "Markup - Underline", - "scope": "markup.underline", - "settings": { - "fontStyle": "underline", - "foreground": "#F76D47" - } - }, - { - "name": "Markup - Strike", - "scope": "markup.strike", - "settings": { - "fontStyle": "strike", - "foreground": "" - } - }, - { - "name": "Markdown - Blockquote", - "scope": "markup.quote punctuation.definition.blockquote.markdown", - "settings": { - "foreground": "#E7EAEC", - "background": "#E7EAEC" - } - }, - { - "name": "Markup - Quote", - "scope": "markup.quote", - "settings": { - "fontStyle": "italic", - "foreground": "" - } - }, - { - "name": "Markdown - Link", - "scope": "string.other.link.title.markdown", - "settings": { - "foreground": "#6182B8" - } - }, - { - "name": "Markdown - Link Description", - "scope": "string.other.link.description.title.markdown", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Markdown - Link Anchor", - "scope": "constant.other.reference.link.markdown", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "Markup - Raw Block", - "scope": "markup.raw.block", - "settings": { - "foreground": "#7C4DFF" - } - }, - { - "name": "Markdown - Raw Block Fenced", - "scope": "markup.raw.block.fenced.markdown", - "settings": { - "background": "#90A4AE20" - } - }, - { - "name": "Markdown - Fenced Bode Block", - "scope": "punctuation.definition.fenced.markdown", - "settings": { - "background": "#90A4AE20" - } - }, - { - "name": "Markdown - Fenced Bode Block Variable", - "scope": "markup.raw.block.fenced.markdown, variable.language.fenced.markdown, punctuation.section.class.end", - "settings": { - "foreground": "#80CBC4" - } - }, - { - "name": "Markdown - Fenced Language", - "scope": "variable.language.fenced.markdown", - "settings": { - "fontStyle": "", - "foreground": "#E7EAEC" - } - }, - { - "name": "Markdown - Punctuation Definition", - "scope": "text.html.markdown punctuation.definition", - "settings": { - "foreground": "#CCD7DA" - } - }, - { - "name": "Markdown HTML - Punctuation Definition", - "scope": "text.html.markdown meta.disable-markdown punctuation.definition", - "settings": { - "foreground": "#39ADB5" - } - }, - { - "name": "Markdown - Separator", - "scope": "meta.separator", - "settings": { - "fontStyle": "bold", - "foreground": "#E7EAEC", - "background": "#90A4AE20" - } - }, - { - "name": "Markup - Table", - "scope": "markup.table", - "settings": { - "foreground": "#80CBC4", - "background": "" - } - }, - { - "name": "AceJump Label - Blue", - "scope": "acejump.label.blue", - "settings": { - "foreground": "#FFFFFF", - "background": "#6182B8" - } - }, - { - "name": "AceJump Label - Green", - "scope": "acejump.label.green", - "settings": { - "foreground": "#FFFFFF", - "background": "#91B859" - } - }, - { - "name": "AceJump Label - Orange", - "scope": "acejump.label.orange", - "settings": { - "foreground": "#FFFFFF", - "background": "#F76D47" - } - }, - { - "name": "AceJump Label - Purple", - "scope": "acejump.label.purple", - "settings": { - "foreground": "#FFFFFF", - "background": "#7C4DFF" - } - }, - { - "name": "SublimeLinter Warning", - "scope": "sublimelinter.mark.warning", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "SublimeLinter Gutter Mark", - "scope": "sublimelinter.gutter-mark", - "settings": { - "foreground": "#FFFFFF" - } - }, - { - "name": "SublimeLinter Error", - "scope": "sublimelinter.mark.error", - "settings": { - "foreground": "#E53935" - } - }, - { - "name": "SublimeLinter Annotation", - "scope": "sublimelinter.annotations", - "settings": { - "background": "#C17E70" - } - }, - { - "name": "GitGutter Ignored", - "scope": "markup.ignored.git_gutter", - "settings": { - "foreground": "#E7EAEC" - } - }, - { - "name": "GitGutter Untracked", - "scope": "markup.untracked.git_gutter", - "settings": { - "foreground": "#E7EAEC" - } - }, - { - "name": "GitGutter Inserted", - "scope": "markup.inserted.git_gutter", - "settings": { - "foreground": "#91B859" - } - }, - { - "name": "GitGutter Changed", - "scope": "markup.changed.git_gutter", - "settings": { - "foreground": "#FFB62C" - } - }, - { - "name": "GitGutter Deleted", - "scope": "markup.deleted.git_gutter", - "settings": { - "foreground": "#E53935" - } - }, - { - "name": "Bracket Default", - "scope": "brackethighlighter.default", - "settings": { - "foreground": "#8796B04C" - } - }, - { - "name": "Bracket Curly", - "scope": "brackethighlighter.curly", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket Round", - "scope": "brackethighlighter.round", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket Square", - "scope": "brackethighlighter.square", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket Angle", - "scope": "brackethighlighter.angle", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket Tag", - "scope": "brackethighlighter.tag", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket C Define", - "scope": "brackethighlighter.c_define", - "settings": { - "foreground": "#7C4DFF4C" - } - }, - { - "name": "Bracket Quote", - "scope": "brackethighlighter.quote", - "settings": { - "foreground": "#39ADB54C" - } - }, - { - "name": "Bracket Unmatched", - "scope": "brackethighlighter.unmatched", - "settings": { - "foreground": "#E539354C" - } - } - ], - "name": "Material-Theme-Lighter", - "colorSpaceName": "sRGB", - "uuid": "133d1250-19c6-4565-bc93-b37fd36f7fc9" -} diff --git a/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json b/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json deleted file mode 100644 index 1a0329aa..00000000 --- a/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json +++ /dev/null @@ -1,2119 +0,0 @@ -{ - "author": "Mattia Astorino", - "semanticClass": "material.theme.palenight", - "settings": [ - { - "name": "mon_color", - "scope": "mcol_3B8070FF", - "settings": { - "foreground": "#7FC3B3FF", - "caret": "#7FC3B3FF", - "background": "#3B8070FF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_3B8070FF", - "settings": { - "foreground": "#3B8070FF", - "caret": "#7FC3B3FF", - "background": "#3B8071FF" - } - }, - { - "name": "mon_color", - "scope": "mcol_3B8070FF", - "settings": { - "foreground": "#7FC3B3FF", - "caret": "#7FC3B3FF", - "background": "#3B8070FF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_3B8070FF", - "settings": { - "foreground": "#3B8070FF", - "caret": "#7FC3B3FF", - "background": "#3B8071FF" - } - }, - { - "name": "mon_color", - "scope": "mcol_3B8070FF", - "settings": { - "foreground": "#7FC3B3FF", - "caret": "#7FC3B3FF", - "background": "#3B8070FF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_3B8070FF", - "settings": { - "foreground": "#3B8070FF", - "caret": "#7FC3B3FF", - "background": "#3B8071FF" - } - }, - { - "name": "mon_color", - "scope": "mcol_3B8070FF", - "settings": { - "foreground": "#7FC3B3FF", - "caret": "#7FC3B3FF", - "background": "#3B8070FF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_3B8070FF", - "settings": { - "foreground": "#3B8070FF", - "caret": "#7FC3B3FF", - "background": "#fbfbfcFF" - } - }, - { - "name": "mon_color", - "scope": "mcol_fbfbfbFF", - "settings": { - "foreground": "#040404FF", - "caret": "#040404FF", - "background": "#fbfbfbFF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_fbfbfbFF", - "settings": { - "foreground": "#fbfbfbFF", - "caret": "#040404FF", - "background": "#292D3fFF" - } - }, - { - "name": "mon_color", - "scope": "mcol_e8ecedFF", - "settings": { - "foreground": "#111516FF", - "caret": "#111516FF", - "background": "#e8ecedFF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_e8ecedFF", - "settings": { - "foreground": "#e8ecedFF", - "caret": "#111516FF", - "background": "#292D3fFF" - } - }, - { - "name": "mon_color", - "scope": "mcol_3B8070FF", - "settings": { - "foreground": "#7FC3B3FF", - "caret": "#7FC3B3FF", - "background": "#3B8070FF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_3B8070FF", - "settings": { - "foreground": "#3B8070FF", - "caret": "#7FC3B3FF", - "background": "#292D3fFF" - } - }, - { - "name": "mon_color", - "scope": "mcol_0000000D", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#0000000D" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_0000000D", - "settings": { - "foreground": "#0000000D", - "caret": "#FFFFFFFF", - "background": "#292D3fFF" - } - }, - { - "name": "mon_color", - "scope": "mcol_f7f9fbFF", - "settings": { - "foreground": "#040608FF", - "caret": "#040608FF", - "background": "#f7f9fbFF" - } - }, - { - "name": "mon_text_color", - "scope": "mcol_text_f7f9fbFF", - "settings": { - "foreground": "#f7f9fbFF", - "caret": "#040608FF", - "background": "#292D3fFF" - } - }, - { - "settings": { - "guide": "#4E557980", - "caret": "#FFCC00", - "findHighlight": "#F8E71C", - "phantomCss": " html { background-color: #292D3E; color: #959DCB; padding: 16px; } a { color: #B2CCD6; line-height: 16px; } .error, .deleted { color: #FF5370; } .success, .inserted { color: #C3E88D; } .warning, .modified { color: #FFCB6B; } .type { color: #89DDFF; font-style: italic; } .param { color: #F78C6C; } .current { text-decoration: underline; } ", - "shadow": "#00000010", - "stackGuide": "#4E5579", - "lineHighlight": "#00000030", - "gutterForeground": "#3A3F58", - "foreground": "#959DCB", - "background": "#292D3E", - "selectionBorder": "#717CB440", - "activeGuide": "#828ED5", - "invisibles": "#4E5579", - "selection": "#717CB440" - } - }, - { - "name": "Comments", - "scope": "comment, punctuation.definition.comment", - "settings": { - "fontStyle": "italic", - "foreground": "#676E95" - } - }, - { - "name": "Variable", - "scope": "variable, string constant.other.placeholder", - "settings": { - "foreground": "#959DCB" - } - }, - { - "name": "Colors", - "scope": "constant.other.color", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "Invalid", - "scope": "invalid, invalid.illegal, invalid.broken", - "settings": { - "foreground": "#ffffff", - "background": "#FF5370" - } - }, - { - "name": "Unimplemented", - "scope": "invalid.unimplemented", - "settings": { - "foreground": "#ffffff", - "background": "#C3E88D" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#ffffff", - "background": "#C792EA" - } - }, - { - "name": "Keyword, Storage", - "scope": "keyword, storage.type, storage.modifier", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Keyword, Storage", - "scope": "storage.type, keyword.control", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Operator, Misc", - "scope": "keyword.operator, constant.other.color, punctuation, meta.tag, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.section.embedded, keyword.other.template, keyword.other.substitution", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Tag", - "scope": "entity.name.tag, meta.tag.sgml, markup.deleted.git_gutter", - "settings": { - "foreground": "#f07178" - } - }, - { - "name": "Function, Special Method, Block Level", - "scope": "entity.name.function, meta.function-call, variable.function, support.function, keyword.other.special-method, meta.block-level", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Other Variable, String Link", - "scope": "support.other.variable, string.other.link", - "settings": { - "foreground": "#f07178" - } - }, - { - "name": "Number, Constant, Function Argument, Tag Attribute, Embedded", - "scope": "constant.numeric, constant.language, support.constant, constant.character, variable.parameter, keyword.other.unit", - "settings": { - "foreground": "#F78C6C" - } - }, - { - "name": "String, Symbols, Inherited Class, Markup Heading", - "scope": "string, constant.other.symbol, constant.other.key, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "normal", - "foreground": "#C3E88D" - } - }, - { - "name": "Class, Support", - "scope": "entity.name.class, entity.name.type.class, support.type, support.class, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, markup.changed.git_gutter, support.type.sys-types", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Class and Support", - "scope": "source.css support.type, source.sass support.type, source.scss support.type, source.less support.type, source.stylus support.type", - "settings": { - "foreground": "#B2CCD6" - } - }, - { - "name": "Sub-methods", - "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Language methods", - "scope": "variable.language", - "settings": { - "fontStyle": "italic", - "foreground": "#FF5370" - } - }, - { - "name": "entity.name.method.js", - "scope": "entity.name.method.js", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "meta.method.js", - "scope": "meta.class-method.js entity.name.function.js, variable.function.constructor", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Attributes", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "HTML Attributes", - "scope": "text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name", - "settings": { - "fontStyle": "italic", - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Classes", - "scope": "entity.other.attribute-name.class", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Id", - "scope": "source.sass keyword.control", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Changed", - "scope": "markup.changed", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Regular Expressions", - "scope": "string.regexp", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Escape Characters", - "scope": "constant.character.escape", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "URL", - "scope": "*url*, *link*, *uri*", - "settings": { - "fontStyle": "underline" - } - }, - { - "name": "Search Results Nums", - "scope": "constant.numeric.line-number.find-in-files - match", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "Search Results Lines", - "scope": "entity.name.filename.find-in-files", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Decorators", - "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", - "settings": { - "fontStyle": "italic", - "foreground": "#82AAFF" - } - }, - { - "name": "ES7 Bind Operator", - "scope": "source.js constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "italic", - "foreground": "#FF5370" - } - }, - { - "name": "JSON Key - Level 8", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "JSON Key - Level 7", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "JSON Key - Level 6", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#f07178" - } - }, - { - "name": "JSON Key - Level 5", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "JSON Key - Level 4", - "scope": "source.json meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "JSON Key - Level 3", - "scope": "source.json meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "JSON Key - Level 2", - "scope": "source.json meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#F78C6C" - } - }, - { - "name": "JSON Key - Level 1", - "scope": "source.json meta meta.structure.dictionary.json string.quoted.double.json - meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta.structure.dictionary.json punctuation.definition.string - meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "JSON Key - Level 0", - "scope": "source.json meta.structure.dictionary.json string.quoted.double.json - meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json punctuation.definition.string - meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Plain", - "scope": "text.html.markdown, punctuation.definition.list_item.markdown", - "settings": { - "foreground": "#959DCB" - } - }, - { - "name": "Markdown - Markup Raw Inline", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Markup Raw Inline Punctuation", - "scope": "text.html.markdown punctuation.definition.raw.markdown", - "settings": { - "foreground": "#4E5579" - } - }, - { - "name": "Markdown - Line Break", - "scope": "text.html.markdown meta.dummy.line-break", - "settings": { - "foreground": "" - } - }, - { - "name": "Markdown - Heading", - "scope": "markdown.heading, markup.heading | markup.heading entity.name, markup.heading.markdown punctuation.definition.heading.markdown", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Markup - Italic", - "scope": "markup.italic", - "settings": { - "fontStyle": "italic", - "foreground": "#f07178" - } - }, - { - "name": "Markup - Bold", - "scope": "markup.bold, markup.bold string", - "settings": { - "fontStyle": "bold", - "foreground": "#f07178" - } - }, - { - "name": "Markup - Bold & Italic", - "scope": "markup.bold markup.italic, markup.italic markup.bold, markup.quote markup.bold, markup.bold markup.italic string, markup.italic markup.bold string, markup.quote markup.bold string", - "settings": { - "fontStyle": "bold italic" - } - }, - { - "name": "Markup - Underline", - "scope": "markup.underline", - "settings": { - "fontStyle": "underline", - "foreground": "#F78C6C" - } - }, - { - "name": "Markup - Strike", - "scope": "markup.strike", - "settings": { - "fontStyle": "strike", - "foreground": "" - } - }, - { - "name": "Markdown - Blockquote", - "scope": "markup.quote punctuation.definition.blockquote.markdown", - "settings": { - "foreground": "#4E5579", - "background": "#4E5579" - } - }, - { - "name": "Markup - Quote", - "scope": "markup.quote", - "settings": { - "fontStyle": "italic", - "foreground": "" - } - }, - { - "name": "Markdown - Link", - "scope": "string.other.link.title.markdown", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Markdown - Link Description", - "scope": "string.other.link.description.title.markdown", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Link Anchor", - "scope": "constant.other.reference.link.markdown", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "Markup - Raw Block", - "scope": "markup.raw.block", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Raw Block Fenced", - "scope": "markup.raw.block.fenced.markdown", - "settings": { - "background": "#00000030" - } - }, - { - "name": "Markdown - Fenced Bode Block", - "scope": "punctuation.definition.fenced.markdown", - "settings": { - "background": "#00000030" - } - }, - { - "name": "Markdown - Fenced Bode Block Variable", - "scope": "markup.raw.block.fenced.markdown, variable.language.fenced.markdown, punctuation.section.class.end", - "settings": { - "foreground": "#959DCB" - } - }, - { - "name": "Markdown - Fenced Language", - "scope": "variable.language.fenced.markdown", - "settings": { - "fontStyle": "", - "foreground": "#4E5579" - } - }, - { - "name": "Markdown - Punctuation Definition", - "scope": "text.html.markdown punctuation.definition", - "settings": { - "foreground": "#676E95" - } - }, - { - "name": "Markdown HTML - Punctuation Definition", - "scope": "text.html.markdown meta.disable-markdown punctuation.definition", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Markdown - Separator", - "scope": "meta.separator", - "settings": { - "fontStyle": "bold", - "foreground": "#4E5579", - "background": "#00000030" - } - }, - { - "name": "Markup - Table", - "scope": "markup.table", - "settings": { - "foreground": "#959DCB", - "background": "" - } - }, - { - "name": "AceJump Label - Blue", - "scope": "acejump.label.blue", - "settings": { - "foreground": "#ffffff", - "background": "#82AAFF" - } - }, - { - "name": "AceJump Label - Green", - "scope": "acejump.label.green", - "settings": { - "foreground": "#ffffff", - "background": "#C3E88D" - } - }, - { - "name": "AceJump Label - Orange", - "scope": "acejump.label.orange", - "settings": { - "foreground": "#ffffff", - "background": "#F78C6C" - } - }, - { - "name": "AceJump Label - Purple", - "scope": "acejump.label.purple", - "settings": { - "foreground": "#ffffff", - "background": "#C792EA" - } - }, - { - "name": "SublimeLinter Warning", - "scope": "sublimelinter.mark.warning", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "SublimeLinter Gutter Mark", - "scope": "sublimelinter.gutter-mark", - "settings": { - "foreground": "#ffffff" - } - }, - { - "name": "SublimeLinter Error", - "scope": "sublimelinter.mark.error", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "SublimeLinter Annotation", - "scope": "sublimelinter.annotations", - "settings": { - "background": "#C17E70" - } - }, - { - "name": "GitGutter Ignored", - "scope": "markup.ignored.git_gutter", - "settings": { - "foreground": "#4E5579" - } - }, - { - "name": "GitGutter Untracked", - "scope": "markup.untracked.git_gutter", - "settings": { - "foreground": "#4E5579" - } - }, - { - "name": "GitGutter Inserted", - "scope": "markup.inserted.git_gutter", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "GitGutter Changed", - "scope": "markup.changed.git_gutter", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "GitGutter Deleted", - "scope": "markup.deleted.git_gutter", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Bracket Curly", - "scope": "brackethighlighter.default", - "settings": { - "foreground": "#B2CCD6" - } - }, - { - "name": "Bracket Quote", - "scope": "brackethighlighter.quote", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Bracket Unmatched", - "scope": "brackethighlighter.unmatched", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "CH_color", - "scope": "CH_color_04b3baff", - "settings": { - "foreground": "#45F3FBFF", - "caret": "#45F3FBFF", - "background": "#04b3baff" - } - }, - { - "scope": "CH_text_color_04b3baff", - "settings": { - "foreground": "#04b3baff", - "caret": "#45F3FBFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_0abea2ff", - "settings": { - "foreground": "#41F4D9FF", - "caret": "#41F4D9FF", - "background": "#0abea2ff" - } - }, - { - "scope": "CH_text_color_0abea2ff", - "settings": { - "foreground": "#0abea2ff", - "caret": "#41F4D9FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f1f1f1ff", - "settings": { - "foreground": "#0E0E0EFF", - "caret": "#0E0E0EFF", - "background": "#f1f1f1ff" - } - }, - { - "scope": "CH_text_color_f1f1f1ff", - "settings": { - "foreground": "#f1f1f1ff", - "caret": "#0E0E0EFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_04b3b9ff", - "settings": { - "foreground": "#45F4FBFF", - "caret": "#45F4FBFF", - "background": "#04b3b9ff" - } - }, - { - "scope": "CH_text_color_04b3b9ff", - "settings": { - "foreground": "#04b3b9ff", - "caret": "#45F4FBFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f7f7f7ff", - "settings": { - "foreground": "#080808FF", - "caret": "#080808FF", - "background": "#f7f7f7ff" - } - }, - { - "scope": "CH_text_color_f7f7f7ff", - "settings": { - "foreground": "#f7f7f7ff", - "caret": "#080808FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_003366ff", - "settings": { - "foreground": "#99CBFFFF", - "caret": "#99CBFFFF", - "background": "#003366ff" - } - }, - { - "scope": "CH_text_color_003366ff", - "settings": { - "foreground": "#003366ff", - "caret": "#99CBFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f8f9faff", - "settings": { - "foreground": "#050607FF", - "caret": "#050607FF", - "background": "#f8f9faff" - } - }, - { - "scope": "CH_text_color_f8f9faff", - "settings": { - "foreground": "#f8f9faff", - "caret": "#050607FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_868e96ff", - "settings": { - "foreground": "#232628FF", - "caret": "#232628FF", - "background": "#868e96ff" - } - }, - { - "scope": "CH_text_color_868e96ff", - "settings": { - "foreground": "#868e96ff", - "caret": "#232628FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_343a40ff", - "settings": { - "foreground": "#BFC5CBFF", - "caret": "#BFC5CBFF", - "background": "#343a40ff" - } - }, - { - "scope": "CH_text_color_343a40ff", - "settings": { - "foreground": "#343a40ff", - "caret": "#BFC5CBFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_23d160ff", - "settings": { - "foreground": "#0A411EFF", - "caret": "#0A411EFF", - "background": "#23d160ff" - } - }, - { - "scope": "CH_text_color_23d160ff", - "settings": { - "foreground": "#23d160ff", - "caret": "#0A411EFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_17a2b8ff", - "settings": { - "foreground": "#47D2E8FF", - "caret": "#47D2E8FF", - "background": "#17a2b8ff" - } - }, - { - "scope": "CH_text_color_17a2b8ff", - "settings": { - "foreground": "#17a2b8ff", - "caret": "#47D2E8FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ffdd57ff", - "settings": { - "foreground": "#A78500FF", - "caret": "#A78500FF", - "background": "#ffdd57ff" - } - }, - { - "scope": "CH_text_color_ffdd57ff", - "settings": { - "foreground": "#ffdd57ff", - "caret": "#A78500FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ff3860ff", - "settings": { - "foreground": "#C60027FF", - "caret": "#C60027FF", - "background": "#ff3860ff" - } - }, - { - "scope": "CH_text_color_ff3860ff", - "settings": { - "foreground": "#ff3860ff", - "caret": "#C60027FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ff11ff11", - "settings": { - "foreground": "#4C004CFF", - "caret": "#4C004CFF", - "background": "#ff11ff11" - } - }, - { - "scope": "CH_text_color_ff11ff11", - "settings": { - "foreground": "#ff11ff11", - "caret": "#4C004CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ff11ffff", - "settings": { - "foreground": "#4C004CFF", - "caret": "#4C004CFF", - "background": "#ff11ffff" - } - }, - { - "scope": "CH_text_color_ff11ffff", - "settings": { - "foreground": "#ff11ffff", - "caret": "#4C004CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f3f7faff", - "settings": { - "foreground": "#05090CFF", - "caret": "#05090CFF", - "background": "#f3f7faff" - } - }, - { - "scope": "CH_text_color_f3f7faff", - "settings": { - "foreground": "#f3f7faff", - "caret": "#05090CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_002663ff", - "settings": { - "foreground": "#9CC2FFFF", - "caret": "#9CC2FFFF", - "background": "#002663ff" - } - }, - { - "scope": "CH_text_color_002663ff", - "settings": { - "foreground": "#002663ff", - "caret": "#9CC2FFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_2366d1ff", - "settings": { - "foreground": "#0A1F41FF", - "caret": "#0A1F41FF", - "background": "#2366d1ff" - } - }, - { - "scope": "CH_text_color_2366d1ff", - "settings": { - "foreground": "#2366d1ff", - "caret": "#0A1F41FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_007bffff", - "settings": { - "foreground": "#00244CFF", - "caret": "#00244CFF", - "background": "#007bffff" - } - }, - { - "scope": "CH_text_color_007bffff", - "settings": { - "foreground": "#007bffff", - "caret": "#00244CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_00b89cff", - "settings": { - "foreground": "#46FFE3FF", - "caret": "#46FFE3FF", - "background": "#00b89cff" - } - }, - { - "scope": "CH_text_color_00b89cff", - "settings": { - "foreground": "#00b89cff", - "caret": "#46FFE3FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_00d1b2ff", - "settings": { - "foreground": "#2EFFDFFF", - "caret": "#2EFFDFFF", - "background": "#00d1b2ff" - } - }, - { - "scope": "CH_text_color_00d1b2ff", - "settings": { - "foreground": "#00d1b2ff", - "caret": "#2EFFDFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f9f9fbff", - "settings": { - "foreground": "#040406FF", - "caret": "#040406FF", - "background": "#f9f9fbff" - } - }, - { - "scope": "CH_text_color_f9f9fbff", - "settings": { - "foreground": "#f9f9fbff", - "caret": "#040406FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_5f697aff", - "settings": { - "foreground": "#21252BFF", - "caret": "#21252BFF", - "background": "#5f697aff" - } - }, - { - "scope": "CH_text_color_5f697aff", - "settings": { - "foreground": "#5f697aff", - "caret": "#21252BFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_212529ff", - "settings": { - "foreground": "#D5DADEFF", - "caret": "#D5DADEFF", - "background": "#212529ff" - } - }, - { - "scope": "CH_text_color_212529ff", - "settings": { - "foreground": "#212529ff", - "caret": "#D5DADEFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_00000013", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#00000013" - } - }, - { - "scope": "CH_text_color_00000013", - "settings": { - "foreground": "#00000013", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_444444ff", - "settings": { - "foreground": "#BBBBBBFF", - "caret": "#BBBBBBFF", - "background": "#444444ff" - } - }, - { - "scope": "CH_text_color_444444ff", - "settings": { - "foreground": "#444444ff", - "caret": "#BBBBBBFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_e3342fff", - "settings": { - "foreground": "#430A09FF", - "caret": "#430A09FF", - "background": "#e3342fff" - } - }, - { - "scope": "CH_text_color_e3342fff", - "settings": { - "foreground": "#e3342fff", - "caret": "#430A09FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f2f2f2ff", - "settings": { - "foreground": "#0D0D0DFF", - "caret": "#0D0D0DFF", - "background": "#f2f2f2ff" - } - }, - { - "scope": "CH_text_color_f2f2f2ff", - "settings": { - "foreground": "#f2f2f2ff", - "caret": "#0D0D0DFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ffffffff", - "settings": { - "foreground": "#000000FF", - "caret": "#000000FF", - "background": "#ffffffff" - } - }, - { - "scope": "CH_text_color_ffffffff", - "settings": { - "foreground": "#ffffffff", - "caret": "#000000FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_fafafaff", - "settings": { - "foreground": "#050505FF", - "caret": "#050505FF", - "background": "#fafafaff" - } - }, - { - "scope": "CH_text_color_fafafaff", - "settings": { - "foreground": "#fafafaff", - "caret": "#050505FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f5f7faff", - "settings": { - "foreground": "#050709FF", - "caret": "#050709FF", - "background": "#f5f7faff" - } - }, - { - "scope": "CH_text_color_f5f7faff", - "settings": { - "foreground": "#f5f7faff", - "caret": "#050709FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_0000000d", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#0000000d" - } - }, - { - "scope": "CH_text_color_0000000d", - "settings": { - "foreground": "#0000000d", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f7f9fbff", - "settings": { - "foreground": "#040608FF", - "caret": "#040608FF", - "background": "#f7f9fbff" - } - }, - { - "scope": "CH_text_color_f7f9fbff", - "settings": { - "foreground": "#f7f9fbff", - "caret": "#040608FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_fbfbfbff", - "settings": { - "foreground": "#040404FF", - "caret": "#040404FF", - "background": "#fbfbfbff" - } - }, - { - "scope": "CH_text_color_fbfbfbff", - "settings": { - "foreground": "#fbfbfbff", - "caret": "#040404FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_e8ecedff", - "settings": { - "foreground": "#111516FF", - "caret": "#111516FF", - "background": "#e8ecedff" - } - }, - { - "scope": "CH_text_color_e8ecedff", - "settings": { - "foreground": "#e8ecedff", - "caret": "#111516FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f5f8faff", - "settings": { - "foreground": "#050709FF", - "caret": "#050709FF", - "background": "#f5f8faff" - } - }, - { - "scope": "CH_text_color_f5f8faff", - "settings": { - "foreground": "#f5f8faff", - "caret": "#050709FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_3097d1ff", - "settings": { - "foreground": "#0D2D3EFF", - "caret": "#0D2D3EFF", - "background": "#3097d1ff" - } - }, - { - "scope": "CH_text_color_3097d1ff", - "settings": { - "foreground": "#3097d1ff", - "caret": "#0D2D3EFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_8eb4cbff", - "settings": { - "foreground": "#345970FF", - "caret": "#345970FF", - "background": "#8eb4cbff" - } - }, - { - "scope": "CH_text_color_8eb4cbff", - "settings": { - "foreground": "#8eb4cbff", - "caret": "#345970FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_2ab27bff", - "settings": { - "foreground": "#0E3D2AFF", - "caret": "#0E3D2AFF", - "background": "#2ab27bff" - } - }, - { - "scope": "CH_text_color_2ab27bff", - "settings": { - "foreground": "#2ab27bff", - "caret": "#0E3D2AFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_cbb956ff", - "settings": { - "foreground": "#3A3412FF", - "caret": "#3A3412FF", - "background": "#cbb956ff" - } - }, - { - "scope": "CH_text_color_cbb956ff", - "settings": { - "foreground": "#cbb956ff", - "caret": "#3A3412FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_bf5329ff", - "settings": { - "foreground": "#3E1B0DFF", - "caret": "#3E1B0DFF", - "background": "#bf5329ff" - } - }, - { - "scope": "CH_text_color_bf5329ff", - "settings": { - "foreground": "#bf5329ff", - "caret": "#3E1B0DFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_636b6fff", - "settings": { - "foreground": "#90989CFF", - "caret": "#90989CFF", - "background": "#636b6fff" - } - }, - { - "scope": "CH_text_color_636b6fff", - "settings": { - "foreground": "#636b6fff", - "caret": "#90989CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ccccccff", - "settings": { - "foreground": "#323232FF", - "caret": "#323232FF", - "background": "#ccccccff" - } - }, - { - "scope": "CH_text_color_ccccccff", - "settings": { - "foreground": "#ccccccff", - "caret": "#323232FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_00000026", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#00000026" - } - }, - { - "scope": "CH_text_color_00000026", - "settings": { - "foreground": "#00000026", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_0000002d", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#0000002d" - } - }, - { - "scope": "CH_text_color_0000002d", - "settings": { - "foreground": "#0000002d", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_777777ff", - "settings": { - "foreground": "#262626FF", - "caret": "#262626FF", - "background": "#777777ff" - } - }, - { - "scope": "CH_text_color_777777ff", - "settings": { - "foreground": "#777777ff", - "caret": "#262626FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_000000cc", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#000000cc" - } - }, - { - "scope": "CH_text_color_000000cc", - "settings": { - "foreground": "#000000cc", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_000000e6", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#000000e6" - } - }, - { - "scope": "CH_text_color_000000e6", - "settings": { - "foreground": "#000000e6", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_2b2b2bff", - "settings": { - "foreground": "#D3D3D3FF", - "caret": "#D3D3D3FF", - "background": "#2b2b2bff" - } - }, - { - "scope": "CH_text_color_2b2b2bff", - "settings": { - "foreground": "#2b2b2bff", - "caret": "#D3D3D3FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_262626ff", - "settings": { - "foreground": "#D9D9D9FF", - "caret": "#D9D9D9FF", - "background": "#262626ff" - } - }, - { - "scope": "CH_text_color_262626ff", - "settings": { - "foreground": "#262626ff", - "caret": "#D9D9D9FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_337ab7ff", - "settings": { - "foreground": "#10273BFF", - "caret": "#10273BFF", - "background": "#337ab7ff" - } - }, - { - "scope": "CH_text_color_337ab7ff", - "settings": { - "foreground": "#337ab7ff", - "caret": "#10273BFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_eeeeeeff", - "settings": { - "foreground": "#101010FF", - "caret": "#101010FF", - "background": "#eeeeeeff" - } - }, - { - "scope": "CH_text_color_eeeeeeff", - "settings": { - "foreground": "#eeeeeeff", - "caret": "#101010FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_333333ff", - "settings": { - "foreground": "#CCCCCCFF", - "caret": "#CCCCCCFF", - "background": "#333333ff" - } - }, - { - "scope": "CH_text_color_333333ff", - "settings": { - "foreground": "#333333ff", - "caret": "#CCCCCCFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f9f9f9ff", - "settings": { - "foreground": "#060606FF", - "caret": "#060606FF", - "background": "#f9f9f9ff" - } - }, - { - "scope": "CH_text_color_f9f9f9ff", - "settings": { - "foreground": "#f9f9f9ff", - "caret": "#060606FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_f4f4f4ff", - "settings": { - "foreground": "#0A0A0AFF", - "caret": "#0A0A0AFF", - "background": "#f4f4f4ff" - } - }, - { - "scope": "CH_text_color_f4f4f4ff", - "settings": { - "foreground": "#f4f4f4ff", - "caret": "#0A0A0AFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_3b5998ff", - "settings": { - "foreground": "#6784C3FF", - "caret": "#6784C3FF", - "background": "#3b5998ff" - } - }, - { - "scope": "CH_text_color_3b5998ff", - "settings": { - "foreground": "#3b5998ff", - "caret": "#6784C3FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ea4634ff", - "settings": { - "foreground": "#450D07FF", - "caret": "#450D07FF", - "background": "#ea4634ff" - } - }, - { - "scope": "CH_text_color_ea4634ff", - "settings": { - "foreground": "#ea4634ff", - "caret": "#450D07FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_33ccffff", - "settings": { - "foreground": "#0099CCFF", - "caret": "#0099CCFF", - "background": "#33ccffff" - } - }, - { - "scope": "CH_text_color_33ccffff", - "settings": { - "foreground": "#33ccffff", - "caret": "#0099CCFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_4875b4ff", - "settings": { - "foreground": "#152336FF", - "caret": "#152336FF", - "background": "#4875b4ff" - } - }, - { - "scope": "CH_text_color_4875b4ff", - "settings": { - "foreground": "#4875b4ff", - "caret": "#152336FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_8a3ab9ff", - "settings": { - "foreground": "#2B123AFF", - "caret": "#2B123AFF", - "background": "#8a3ab9ff" - } - }, - { - "scope": "CH_text_color_8a3ab9ff", - "settings": { - "foreground": "#8a3ab9ff", - "caret": "#2B123AFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_7cbb00ff", - "settings": { - "foreground": "#BFFF43FF", - "caret": "#BFFF43FF", - "background": "#7cbb00ff" - } - }, - { - "scope": "CH_text_color_7cbb00ff", - "settings": { - "foreground": "#7cbb00ff", - "caret": "#BFFF43FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_45668eff", - "settings": { - "foreground": "#7191BAFF", - "caret": "#7191BAFF", - "background": "#45668eff" - } - }, - { - "scope": "CH_text_color_45668eff", - "settings": { - "foreground": "#45668eff", - "caret": "#7191BAFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_7b0099ff", - "settings": { - "foreground": "#E065FFFF", - "caret": "#E065FFFF", - "background": "#7b0099ff" - } - }, - { - "scope": "CH_text_color_7b0099ff", - "settings": { - "foreground": "#7b0099ff", - "caret": "#E065FFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_6441a5ff", - "settings": { - "foreground": "#211536FF", - "caret": "#211536FF", - "background": "#6441a5ff" - } - }, - { - "scope": "CH_text_color_6441a5ff", - "settings": { - "foreground": "#6441a5ff", - "caret": "#211536FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_007ee5ff", - "settings": { - "foreground": "#002A4CFF", - "caret": "#002A4CFF", - "background": "#007ee5ff" - } - }, - { - "scope": "CH_text_color_007ee5ff", - "settings": { - "foreground": "#007ee5ff", - "caret": "#002A4CFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_2d333aff", - "settings": { - "foreground": "#C5CBD2FF", - "caret": "#C5CBD2FF", - "background": "#2d333aff" - } - }, - { - "scope": "CH_text_color_2d333aff", - "settings": { - "foreground": "#2d333aff", - "caret": "#C5CBD2FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_84bd00ff", - "settings": { - "foreground": "#C5FF41FF", - "caret": "#C5FF41FF", - "background": "#84bd00ff" - } - }, - { - "scope": "CH_text_color_84bd00ff", - "settings": { - "foreground": "#84bd00ff", - "caret": "#C5FF41FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_1ab7eaff", - "settings": { - "foreground": "#063646FF", - "caret": "#063646FF", - "background": "#1ab7eaff" - } - }, - { - "scope": "CH_text_color_1ab7eaff", - "settings": { - "foreground": "#1ab7eaff", - "caret": "#063646FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_c92228ff", - "settings": { - "foreground": "#410B0DFF", - "caret": "#410B0DFF", - "background": "#c92228ff" - } - }, - { - "scope": "CH_text_color_c92228ff", - "settings": { - "foreground": "#c92228ff", - "caret": "#410B0DFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_000000ff", - "settings": { - "foreground": "#FFFFFFFF", - "caret": "#FFFFFFFF", - "background": "#000000ff" - } - }, - { - "scope": "CH_text_color_000000ff", - "settings": { - "foreground": "#000000ff", - "caret": "#FFFFFFFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_2698f0ff", - "settings": { - "foreground": "#042A47FF", - "caret": "#042A47FF", - "background": "#2698f0ff" - } - }, - { - "scope": "CH_text_color_2698f0ff", - "settings": { - "foreground": "#2698f0ff", - "caret": "#042A47FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_ffd83dff", - "settings": { - "foreground": "#C29B00FF", - "caret": "#C29B00FF", - "background": "#ffd83dff" - } - }, - { - "scope": "CH_text_color_ffd83dff", - "settings": { - "foreground": "#ffd83dff", - "caret": "#C29B00FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_20bc56ff", - "settings": { - "foreground": "#0B411DFF", - "caret": "#0B411DFF", - "background": "#20bc56ff" - } - }, - { - "scope": "CH_text_color_20bc56ff", - "settings": { - "foreground": "#20bc56ff", - "caret": "#0B411DFF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_15cd72ff", - "settings": { - "foreground": "#074526FF", - "caret": "#074526FF", - "background": "#15cd72ff" - } - }, - { - "scope": "CH_text_color_15cd72ff", - "settings": { - "foreground": "#15cd72ff", - "caret": "#074526FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_118fe4ff", - "settings": { - "foreground": "#052C47FF", - "caret": "#052C47FF", - "background": "#118fe4ff" - } - }, - { - "scope": "CH_text_color_118fe4ff", - "settings": { - "foreground": "#118fe4ff", - "caret": "#052C47FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_e9ecefff", - "settings": { - "foreground": "#0F1315FF", - "caret": "#0F1315FF", - "background": "#e9ecefff" - } - }, - { - "scope": "CH_text_color_e9ecefff", - "settings": { - "foreground": "#e9ecefff", - "caret": "#0F1315FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_dee2e6ff", - "settings": { - "foreground": "#191C21FF", - "caret": "#191C21FF", - "background": "#dee2e6ff" - } - }, - { - "scope": "CH_text_color_dee2e6ff", - "settings": { - "foreground": "#dee2e6ff", - "caret": "#191C21FF", - "background": "#3B8071FF" - } - }, - { - "name": "CH_color", - "scope": "CH_color_00acedff", - "settings": { - "foreground": "#00374CFF", - "caret": "#00374CFF", - "background": "#00acedff" - } - }, - { - "scope": "CH_text_color_00acedff", - "settings": { - "foreground": "#00acedff", - "caret": "#00374CFF", - "background": "#3B8071FF" - } - } - ], - "name": "Material-Theme-Palenight", - "colorSpaceName": "sRGB", - "uuid": "133d1250-19c6-4565-bc93-b37fd36f7fc9" -} diff --git a/src/renderer/components/editor/themes/material-theme.tmTheme.json b/src/renderer/components/editor/themes/material-theme.tmTheme.json deleted file mode 100644 index a5b81a14..00000000 --- a/src/renderer/components/editor/themes/material-theme.tmTheme.json +++ /dev/null @@ -1,673 +0,0 @@ -{ - "author": "Mattia Astorino", - "semanticClass": "theme.dark.material_theme", - "settings": [ - { - "settings": { - "guide": "#37474F80", - "caret": "#FFCC00", - "findHighlight": "#F8E71C", - "shadow": "#00000010", - "stackGuide": "#37474FFF", - "lineHighlight": "#00000050", - "gutterForeground": "#37474F", - "foreground": "#EEFFFF", - "background": "#263238", - "popupCss": "html {\n background-color: #263238;\n color: #EEFFFF;\n padding: 16px;\n}\na {\n color: #B2CCD6;\n line-height: 16px;\n}\n.error, .deleted {\n color: #FF5370;\n}\n.success, .inserted {\n color: #C3E88D;\n}\n.warning, .modified {\n color: #FFCB6B;\n}\n.type {\n color: #89DDFF;\n font-style: italic;\n}\n.param {\n color: #F78C6C;\n}\n.current {\n text-decoration: underline;\n}\n", - "selectionBorder": "#80CBC420", - "activeGuide": "#80CBC470", - "invisibles": "#65737E", - "selection": "#80CBC420" - } - }, - { - "name": "Comments", - "scope": "comment, punctuation.definition.comment", - "settings": { - "fontStyle": "italic", - "foreground": "#546E7A" - } - }, - { - "name": "Variable", - "scope": "variable, string constant.other.placeholder", - "settings": { - "foreground": "#EEFFFF" - } - }, - { - "name": "Colors", - "scope": "constant.other.color", - "settings": { - "foreground": "#FFFFFF" - } - }, - { - "name": "Invalid", - "scope": "invalid, invalid.illegal, invalid.broken", - "settings": { - "foreground": "#FFFFFF", - "background": "#FF5370" - } - }, - { - "name": "Unimplemented", - "scope": "invalid.unimplemented", - "settings": { - "foreground": "#FFFFFF", - "background": "#C3E88D" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#FFFFFF", - "background": "#C792EA" - } - }, - { - "name": "Keyword, Storage", - "scope": "keyword, storage.type, storage.modifier", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Keyword, Storage", - "scope": "storage.type, keyword.control", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Operator, Misc", - "scope": "keyword.operator, constant.other.color, punctuation, meta.tag, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.section.embedded, keyword.other.template, keyword.other.substitution", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Tag", - "scope": "entity.name.tag, meta.tag.sgml, markup.deleted.git_gutter", - "settings": { - "foreground": "#F07178" - } - }, - { - "name": "Function, Special Method, Block Level", - "scope": "entity.name.function, meta.function-call, variable.function, support.function, keyword.other.special-method, meta.block-level", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Other Variable, String Link", - "scope": "support.other.variable, string.other.link", - "settings": { - "foreground": "#F07178" - } - }, - { - "name": "Number, Constant, Function Argument, Tag Attribute, Embedded", - "scope": "constant.numeric, constant.language, support.constant, constant.character, variable.parameter, keyword.other.unit", - "settings": { - "foreground": "#F78C6C" - } - }, - { - "name": "String, Symbols, Inherited Class, Markup Heading", - "scope": "string, constant.other.symbol, constant.other.key, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "normal", - "foreground": "#C3E88D" - } - }, - { - "name": "Class, Support", - "scope": "entity.name.class, entity.name.type.class, support.type, support.class, support.other.namespace.use.php, meta.use.php, support.other.namespace.php, markup.changed.git_gutter, support.type.sys-types", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Class and Support", - "scope": "source.css support.type, source.sass support.type, source.scss support.type, source.less support.type, source.stylus support.type", - "settings": { - "foreground": "#B2CCD6" - } - }, - { - "name": "Sub-methods", - "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Language methods", - "scope": "variable.language", - "settings": { - "fontStyle": "italic", - "foreground": "#FF5370" - } - }, - { - "name": "entity.name.method.js", - "scope": "entity.name.method.js", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "meta.method.js", - "scope": "meta.class-method.js entity.name.function.js, variable.function.constructor", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Attributes", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "HTML Attributes", - "scope": "text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name", - "settings": { - "fontStyle": "italic", - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Classes", - "scope": "entity.other.attribute-name.class", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "CSS Id", - "scope": "source.sass keyword.control", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Changed", - "scope": "markup.changed", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Regular Expressions", - "scope": "string.regexp", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Escape Characters", - "scope": "constant.character.escape", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "URL", - "scope": "*url*, *link*, *uri*", - "settings": { - "fontStyle": "underline" - } - }, - { - "name": "Search Results Nums", - "scope": "constant.numeric.line-number.find-in-files - match", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "Search Results Lines", - "scope": "entity.name.filename.find-in-files", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Decorators", - "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", - "settings": { - "fontStyle": "italic", - "foreground": "#82AAFF" - } - }, - { - "name": "ES7 Bind Operator", - "scope": "source.js constant.other.object.key.js string.unquoted.label.js", - "settings": { - "fontStyle": "italic", - "foreground": "#FF5370" - } - }, - { - "name": "JSON Key - Level 8", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "JSON Key - Level 7", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "JSON Key - Level 6", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#F07178" - } - }, - { - "name": "JSON Key - Level 5", - "scope": "source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "JSON Key - Level 4", - "scope": "source.json meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C17E70" - } - }, - { - "name": "JSON Key - Level 3", - "scope": "source.json meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "JSON Key - Level 2", - "scope": "source.json meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#F78C6C" - } - }, - { - "name": "JSON Key - Level 1", - "scope": "source.json meta meta.structure.dictionary.json string.quoted.double.json - meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta.structure.dictionary.json punctuation.definition.string - meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "JSON Key - Level 0", - "scope": "source.json meta.structure.dictionary.json string.quoted.double.json - meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json punctuation.definition.string - meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Plain", - "scope": "text.html.markdown, punctuation.definition.list_item.markdown", - "settings": { - "foreground": "#EEFFFF" - } - }, - { - "name": "Markdown - Markup Raw Inline", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Markup Raw Inline Punctuation", - "scope": "text.html.markdown punctuation.definition.raw.markdown", - "settings": { - "foreground": "#65737E" - } - }, - { - "name": "Markdown - Line Break", - "scope": "text.html.markdown meta.dummy.line-break", - "settings": { - "foreground": "" - } - }, - { - "name": "Markdown - Heading", - "scope": "markdown.heading, markup.heading | markup.heading entity.name, markup.heading.markdown punctuation.definition.heading.markdown", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "Markup - Italic", - "scope": "markup.italic", - "settings": { - "fontStyle": "italic", - "foreground": "#F07178" - } - }, - { - "name": "Markup - Bold", - "scope": "markup.bold, markup.bold string", - "settings": { - "fontStyle": "bold", - "foreground": "#F07178" - } - }, - { - "name": "Markup - Bold & Italic", - "scope": "markup.bold markup.italic, markup.italic markup.bold, markup.quote markup.bold, markup.bold markup.italic string, markup.italic markup.bold string, markup.quote markup.bold string", - "settings": { - "fontStyle": "bold italic" - } - }, - { - "name": "Markup - Underline", - "scope": "markup.underline", - "settings": { - "fontStyle": "underline", - "foreground": "#F78C6C" - } - }, - { - "name": "Markup - Strike", - "scope": "markup.strike", - "settings": { - "fontStyle": "strike", - "foreground": "" - } - }, - { - "name": "Markdown - Blockquote", - "scope": "markup.quote punctuation.definition.blockquote.markdown", - "settings": { - "foreground": "#65737E", - "background": "#65737E" - } - }, - { - "name": "Markup - Quote", - "scope": "markup.quote", - "settings": { - "fontStyle": "italic", - "foreground": "" - } - }, - { - "name": "Markdown - Link", - "scope": "string.other.link.title.markdown", - "settings": { - "foreground": "#82AAFF" - } - }, - { - "name": "Markdown - Link Description", - "scope": "string.other.link.description.title.markdown", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Link Anchor", - "scope": "constant.other.reference.link.markdown", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "Markup - Raw Block", - "scope": "markup.raw.block", - "settings": { - "foreground": "#C792EA" - } - }, - { - "name": "Markdown - Raw Block Fenced", - "scope": "markup.raw.block.fenced.markdown", - "settings": { - "background": "#00000050" - } - }, - { - "name": "Markdown - Fenced Bode Block", - "scope": "punctuation.definition.fenced.markdown", - "settings": { - "background": "#00000050" - } - }, - { - "name": "Markdown - Fenced Bode Block Variable", - "scope": "markup.raw.block.fenced.markdown, variable.language.fenced.markdown, punctuation.section.class.end", - "settings": { - "foreground": "#EEFFFF" - } - }, - { - "name": "Markdown - Fenced Language", - "scope": "variable.language.fenced.markdown", - "settings": { - "fontStyle": "", - "foreground": "#65737E" - } - }, - { - "name": "Markdown - Punctuation Definition", - "scope": "text.html.markdown punctuation.definition", - "settings": { - "foreground": "#546E7A" - } - }, - { - "name": "Markdown HTML - Punctuation Definition", - "scope": "text.html.markdown meta.disable-markdown punctuation.definition", - "settings": { - "foreground": "#89DDFF" - } - }, - { - "name": "Markdown - Separator", - "scope": "meta.separator", - "settings": { - "fontStyle": "bold", - "foreground": "#65737E", - "background": "#00000050" - } - }, - { - "name": "Markup - Table", - "scope": "markup.table", - "settings": { - "foreground": "#EEFFFF", - "background": "" - } - }, - { - "name": "AceJump Label - Blue", - "scope": "acejump.label.blue", - "settings": { - "foreground": "#FFFFFF", - "background": "#82AAFF" - } - }, - { - "name": "AceJump Label - Green", - "scope": "acejump.label.green", - "settings": { - "foreground": "#FFFFFF", - "background": "#C3E88D" - } - }, - { - "name": "AceJump Label - Orange", - "scope": "acejump.label.orange", - "settings": { - "foreground": "#FFFFFF", - "background": "#F78C6C" - } - }, - { - "name": "AceJump Label - Purple", - "scope": "acejump.label.purple", - "settings": { - "foreground": "#FFFFFF", - "background": "#C792EA" - } - }, - { - "name": "SublimeLinter Warning", - "scope": "sublimelinter.mark.warning", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "SublimeLinter Gutter Mark", - "scope": "sublimelinter.gutter-mark", - "settings": { - "foreground": "#FFFFFF" - } - }, - { - "name": "SublimeLinter Error", - "scope": "sublimelinter.mark.error", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "SublimeLinter Annotation", - "scope": "sublimelinter.annotations", - "settings": { - "background": "#C17E70" - } - }, - { - "name": "GitGutter Ignored", - "scope": "markup.ignored.git_gutter", - "settings": { - "foreground": "#65737E" - } - }, - { - "name": "GitGutter Untracked", - "scope": "markup.untracked.git_gutter", - "settings": { - "foreground": "#65737E" - } - }, - { - "name": "GitGutter Inserted", - "scope": "markup.inserted.git_gutter", - "settings": { - "foreground": "#C3E88D" - } - }, - { - "name": "GitGutter Changed", - "scope": "markup.changed.git_gutter", - "settings": { - "foreground": "#FFCB6B" - } - }, - { - "name": "GitGutter Deleted", - "scope": "markup.deleted.git_gutter", - "settings": { - "foreground": "#FF5370" - } - }, - { - "name": "Bracket Default", - "scope": "brackethighlighter.default", - "settings": { - "foreground": "#B2CCD64C" - } - }, - { - "name": "Bracket Curly", - "scope": "brackethighlighter.curly", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket Round", - "scope": "brackethighlighter.round", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket Square", - "scope": "brackethighlighter.square", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket Angle", - "scope": "brackethighlighter.angle", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket Tag", - "scope": "brackethighlighter.tag", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket C Define", - "scope": "brackethighlighter.c_define", - "settings": { - "foreground": "#C792EA4C" - } - }, - { - "name": "Bracket Quote", - "scope": "brackethighlighter.quote", - "settings": { - "foreground": "#89DDFF4C" - } - }, - { - "name": "Bracket Unmatched", - "scope": "brackethighlighter.unmatched", - "settings": { - "foreground": "#FF53704C" - } - } - ], - "name": "Material-Theme", - "colorSpaceName": "sRGB", - "uuid": "133d1250-19c6-4565-bc93-b37fd36f7fc9" -} diff --git a/src/renderer/components/editor/themes/merbivore-soft.tmTheme.json b/src/renderer/components/editor/themes/merbivore-soft.tmTheme.json deleted file mode 100644 index 24c3e50c..00000000 --- a/src/renderer/components/editor/themes/merbivore-soft.tmTheme.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "semanticClass": "theme.dark.merbivore_soft", - "settings": [ - { - "settings": { - "selection": "#392243E0", - "lineHighlight": "#333435", - "foreground": "#E6E1DC", - "invisibles": "#404040", - "caret": "#FFFFFF", - "background": "#1C1C1C" - } - }, - { - "name": "Source", - "scope": "source", - "settings": {} - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "fontStyle": "italic", - "foreground": "#AC4BB8" - } - }, - { - "name": "Keyword", - "scope": "keyword, storage", - "settings": { - "fontStyle": "", - "foreground": "#FC803A" - } - }, - { - "name": "Function (definition)", - "scope": "entity.name.function, keyword.other.name-of-parameter.objc", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Class (definition)", - "scope": "entity.name", - "settings": {} - }, - { - "name": "Class inheritence", - "scope": "entity.other.inherited-class", - "settings": { - "foreground": "#C984CD" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "fontStyle": "", - "foreground": "#7FC578" - } - }, - { - "name": "Variable", - "scope": "variable.language, variable.other", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Constant", - "scope": "constant", - "settings": { - "fontStyle": "", - "foreground": "#68C1D8" - } - }, - { - "name": "Constant (other variable)", - "scope": "variable.other.constant", - "settings": {} - }, - { - "name": "Constant (built-in)", - "scope": "constant.language", - "settings": { - "fontStyle": "", - "foreground": "#E1C582" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "fontStyle": "", - "foreground": "#8EC65F" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Library type", - "scope": "support.type", - "settings": { - "foreground": "#68C1D8" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": { - "foreground": "#8EC65F" - } - }, - { - "name": "Markup tag", - "scope": "meta.tag, declaration.tag, entity.name.tag", - "settings": { - "fontStyle": "", - "foreground": "#FC803A" - } - }, - { - "name": "Markup tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#EAF1A3" - } - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": { - "foreground": "#FFFFFF", - "background": "#FE3838" - } - }, - { - "name": "String interpolation", - "scope": "constant.character.escaped, constant.character.escape, string source, string source.ruby", - "settings": { - "fontStyle": "", - "foreground": "#B3E5B4" - } - }, - { - "name": "Diff Add", - "scope": "markup.inserted", - "settings": { - "foreground": "#E6E1DC", - "background": "#6FC58B" - } - }, - { - "name": "Diff Remove", - "scope": "markup.deleted", - "settings": { - "foreground": "#E6E1DC", - "background": "#AC3735" - } - }, - { - "name": "Diff Header", - "scope": "meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range", - "settings": { - "background": "#5A9EE1" - } - } - ], - "name": "Merbivore-Soft", - "colorSpaceName": "sRGB", - "uuid": "B3517E4B-5243-46CF-AB04-9AE7B41DE3F2" -} diff --git a/src/renderer/components/editor/themes/merbivore.tmTheme.json b/src/renderer/components/editor/themes/merbivore.tmTheme.json deleted file mode 100644 index 1ea53609..00000000 --- a/src/renderer/components/editor/themes/merbivore.tmTheme.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "semanticClass": "theme.dark.merbivore", - "settings": [ - { - "settings": { - "selection": "#5A647EE0", - "lineHighlight": "#333435", - "foreground": "#E6E1DC", - "invisibles": "#404040", - "caret": "#FFFFFF", - "background": "#161616" - } - }, - { - "name": "Source", - "scope": "source", - "settings": {} - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "fontStyle": "italic", - "foreground": "#AD2EA4" - } - }, - { - "name": "Keyword", - "scope": "keyword, storage", - "settings": { - "fontStyle": "", - "foreground": "#FC6F09" - } - }, - { - "name": "Function (definition)", - "scope": "entity.name.function, keyword.other.name-of-parameter.objc", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Class (definition)", - "scope": "entity.name", - "settings": {} - }, - { - "name": "Class inheritence", - "scope": "entity.other.inherited-class", - "settings": { - "foreground": "#FC83FF" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "fontStyle": "", - "foreground": "#58C554" - } - }, - { - "name": "Variable", - "scope": "variable.language, variable.other", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Constant", - "scope": "constant", - "settings": { - "fontStyle": "", - "foreground": "#1EDAFB" - } - }, - { - "name": "Constant (other variable)", - "scope": "variable.other.constant", - "settings": {} - }, - { - "name": "Constant (built-in)", - "scope": "constant.language", - "settings": { - "fontStyle": "", - "foreground": "#FDC251" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "fontStyle": "", - "foreground": "#8DFF0A" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Library type", - "scope": "support.type", - "settings": { - "foreground": "#1EDAFB" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": { - "foreground": "#8DFF0A" - } - }, - { - "name": "Markup tag", - "scope": "meta.tag, declaration.tag, entity.name.tag", - "settings": { - "fontStyle": "", - "foreground": "#FC6F09" - } - }, - { - "name": "Markup tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#FFFF89" - } - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": { - "foreground": "#FFFFFF", - "background": "#990000" - } - }, - { - "name": "String interpolation", - "scope": "constant.character.escaped, constant.character.escape, string source, string source.ruby", - "settings": { - "fontStyle": "", - "foreground": "#519F50" - } - }, - { - "name": "Diff Add", - "scope": "markup.inserted", - "settings": { - "foreground": "#E6E1DC", - "background": "#144212" - } - }, - { - "name": "Diff Remove", - "scope": "markup.deleted", - "settings": { - "foreground": "#E6E1DC", - "background": "#660000" - } - }, - { - "name": "Diff Header", - "scope": "meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range", - "settings": { - "background": "#2F33AB" - } - } - ], - "name": "Merbivore", - "colorSpaceName": "sRGB", - "uuid": "2ABC646D-06F3-48A5-94E9-18EF34474C97" -} diff --git a/src/renderer/components/editor/themes/monokai.tmTheme.json b/src/renderer/components/editor/themes/monokai.tmTheme.json deleted file mode 100644 index 0317696b..00000000 --- a/src/renderer/components/editor/themes/monokai.tmTheme.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "semanticClass": "theme.dark.monokai", - "settings": [ - { - "settings": { - "selection": "#49483E", - "lineHighlight": "#3E3D32", - "foreground": "#F8F8F2", - "invisibles": "#3B3A32", - "caret": "#F8F8F0", - "background": "#272822" - } - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "foreground": "#75715E" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "foreground": "#E6DB74" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "foreground": "#AE81FF" - } - }, - { - "name": "Built-in constant", - "scope": "constant.language", - "settings": { - "foreground": "#AE81FF" - } - }, - { - "name": "User-defined constant", - "scope": "constant.character, constant.other", - "settings": { - "foreground": "#AE81FF" - } - }, - { - "name": "Variable", - "scope": "variable", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Keyword", - "scope": "keyword", - "settings": { - "foreground": "#F92672" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "fontStyle": "", - "foreground": "#F92672" - } - }, - { - "name": "Storage type", - "scope": "storage.type", - "settings": { - "fontStyle": "italic", - "foreground": "#66D9EF" - } - }, - { - "name": "Class name", - "scope": "entity.name.class", - "settings": { - "fontStyle": "underline", - "foreground": "#A6E22E" - } - }, - { - "name": "Inherited class", - "scope": "entity.other.inherited-class", - "settings": { - "fontStyle": "italic underline", - "foreground": "#A6E22E" - } - }, - { - "name": "Function name", - "scope": "entity.name.function", - "settings": { - "fontStyle": "", - "foreground": "#A6E22E" - } - }, - { - "name": "Function argument", - "scope": "variable.parameter", - "settings": { - "fontStyle": "italic", - "foreground": "#FD971F" - } - }, - { - "name": "Tag name", - "scope": "entity.name.tag", - "settings": { - "fontStyle": "", - "foreground": "#F92672" - } - }, - { - "name": "Tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "fontStyle": "", - "foreground": "#A6E22E" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "fontStyle": "", - "foreground": "#66D9EF" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": { - "fontStyle": "", - "foreground": "#66D9EF" - } - }, - { - "name": "Library class/type", - "scope": "support.type, support.class", - "settings": { - "fontStyle": "italic", - "foreground": "#66D9EF" - } - }, - { - "name": "Library variable", - "scope": "support.other.variable", - "settings": { - "fontStyle": "" - } - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": { - "fontStyle": "", - "foreground": "#F8F8F0", - "background": "#F92672" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#F8F8F0", - "background": "#AE81FF" - } - } - ], - "name": "Monokai", - "colorSpaceName": "sRGB", - "uuid": "D8D5E82E-3D5B-46B5-B38E-8C841C21347D" -} diff --git a/src/renderer/components/editor/themes/oceanic.tmTheme.json b/src/renderer/components/editor/themes/oceanic.tmTheme.json deleted file mode 100644 index 0ef72829..00000000 --- a/src/renderer/components/editor/themes/oceanic.tmTheme.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "author": "memco", - "colorSpaceName": "sRGB", - "semanticClass": "theme.dark.oceanic", - "uuid": "D127D730-9145-4CAE-AFDB-2DA82DD5297F", - "settings": [ - { - "settings": { - "selection": "#95A3A63D", - "lineHighlight": "#3D2E2E77", - "foreground": "#F8F8F2", - "invisibles": "#546A68", - "caret": "#F8F8F0", - "background": "#1B2630" - } - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "foreground": "#6D6D6D" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "foreground": "#8AD6F2" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "foreground": "#78BDD6" - } - }, - { - "name": "Built-in constant", - "scope": "constant.language", - "settings": { - "foreground": "#78BDD6" - } - }, - { - "name": "User-defined constant", - "scope": "constant.character, constant.other", - "settings": { - "foreground": "#78BDD6" - } - }, - { - "name": "Variable", - "scope": "variable", - "settings": { - "fontStyle": "", - "foreground": "#FCB666" - } - }, - { - "name": "Keyword", - "scope": "keyword", - "settings": { - "foreground": "#E47D80" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "fontStyle": "", - "foreground": "#D95757" - } - }, - { - "name": "Storage type", - "scope": "storage.type", - "settings": { - "fontStyle": "italic", - "foreground": "#FFB266" - } - }, - { - "name": "Class name", - "scope": "entity.name.class", - "settings": { - "fontStyle": "underline", - "foreground": "#F2AAEC" - } - }, - { - "name": "Inherited class", - "scope": "entity.other.inherited-class", - "settings": { - "fontStyle": "italic underline", - "foreground": "#F2AAEC" - } - }, - { - "name": "Function name", - "scope": "entity.name.function", - "settings": { - "fontStyle": "", - "foreground": "#F2AAEC" - } - }, - { - "name": "Function argument", - "scope": "variable.parameter", - "settings": { - "fontStyle": "italic", - "foreground": "#FFD2A6" - } - }, - { - "name": "Tag name", - "scope": "entity.name.tag", - "settings": { - "fontStyle": "", - "foreground": "#BAE682" - } - }, - { - "name": "Tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "fontStyle": "", - "foreground": "#93E690" - } - }, - { - "name": "ASP punctuation", - "scope": "punctuation.section.embedded.begin.asp, punctuation.section.embedded.end.asp", - "settings": { - "foreground": "#CFAFCF" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "fontStyle": "", - "foreground": "#FFB266" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": { - "fontStyle": "", - "foreground": "#FFB266" - } - }, - { - "name": "Library class/type", - "scope": "support.type, support.class", - "settings": { - "fontStyle": "bold", - "foreground": "#F7FCA2" - } - }, - { - "name": "Library variable", - "scope": "support.other.variable", - "settings": { - "fontStyle": "" - } - }, - { - "name": "HTML tag", - "scope": "punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html", - "settings": { - "fontStyle": "", - "foreground": "#F7FCA2" - } - }, - { - "name": "PHP Namespaces", - "scope": "support.other.namespace, entity.name.type.namespace", - "settings": { - "foreground": "#FFD2A6" - } - }, - { - "name": "PHP Namespace Alias", - "scope": "support.other.namespace.use-as.php", - "settings": { - "foreground": "#FFB266" - } - }, - { - "name": "PHP Namespace Keyword", - "scope": "variable.language.namespace.php", - "settings": { - "foreground": "#D17B7B" - } - }, - { - "name": "PHP Namespace Separator", - "scope": "punctuation.separator.inheritance.php", - "settings": { - "foreground": "#E57EDD" - } - }, - { - "name": "CSS ID / Class", - "scope": "entity.other.attribute-name.id.css, entity.other.attribute-name.class.css", - "settings": { - "fontStyle": "bold", - "foreground": "#BAE682" - } - }, - { - "name": "CSS Pseudo Class", - "scope": "entity.other.attribute-name.pseudo-class.css", - "settings": { - "fontStyle": "italic", - "foreground": "#93E690" - } - }, - { - "name": "CSS Functions / Property Values", - "scope": "support.function.misc.css, support.constant.property-value.css, support.constant.font-name.css", - "settings": { - "foreground": "#FFD2A6" - } - }, - { - "name": "CSS property", - "scope": "support.type.proerty", - "settings": { - "foreground": "#242424" - } - }, - { - "name": "CSS Numeric Constant", - "scope": "constant.numeric.css", - "settings": { - "foreground": "#8AD6F2" - } - }, - { - "name": "CSS Function Parameters", - "scope": "variable.parameter.misc.css", - "settings": { - "foreground": "#78BDD6" - } - }, - { - "name": "Twig Tagbraces", - "scope": "entity.other.tagbraces.twig", - "settings": { - "foreground": "#E57EDD" - } - }, - { - "name": "Twig Tag", - "scope": "keyword.control.twig", - "settings": { - "foreground": "#FFB266" - } - }, - { - "name": "Twig Variable", - "scope": "variable.other.twig", - "settings": { - "foreground": "#FFCCFB" - } - }, - { - "name": "Twig Filter", - "scope": "support.function.filter.twig", - "settings": { - "foreground": "#D95757" - } - }, - { - "name": "Twig Variable Filter", - "scope": "support.function.filter.variable.twig", - "settings": { - "foreground": "#E57EDD" - } - }, - { - "name": "Twig Function", - "scope": "entity.name.function.twig", - "settings": { - "foreground": "#D95757" - } - }, - { - "name": "Twig Function Argument", - "scope": "entity.other.argument.twig", - "settings": { - "foreground": "#FFB2B2" - } - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": { - "fontStyle": "", - "foreground": "#F8F8F0", - "background": "#D95757" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#F8F8F0", - "background": "#E57EDD" - } - } - ], - "name": "Oceanic", - "comment": "Oceanic theme features light-on-dark ocean-inspired colors. Based on Erebus." -} diff --git a/src/renderer/components/editor/themes/one-dark.tmTheme.json b/src/renderer/components/editor/themes/one-dark.tmTheme.json deleted file mode 100644 index c34151f9..00000000 --- a/src/renderer/components/editor/themes/one-dark.tmTheme.json +++ /dev/null @@ -1,397 +0,0 @@ -{ - "author": "Son A. Pham <sp@sonpham.me>", - "semanticClass": "theme.dark.one_half_light", - "comment": "A dark iTerm color scheme based on Atom's One. See github.com/sonph/onehalf for installation instructions, a light color scheme, and versions for other editors/terminals such as (Neo)Vim and Sublime Text.", - "settings": [ - { - "settings": { - "caret": "#a3b3cc", - "tagsForeground": "", - "gutter": "#282c34", - "fontStyle": "", - "bracketsOptions": "underline", - "lineHighlight": "#313640", - "gutterForeground": "#919baa", - "foreground": "#dcdfe4", - "selectionBorder": "#474e5d", - "background": "#282c34", - "invisibles": "#5c6370", - "selection": "#474e5d", - "bracketContentsOptions": "underline", - "tagsOptions": "stippled_underline" - } - }, - { - "name": "Comments", - "scope": "comment", - "settings": { - "foreground": "#5c6370" - } - }, - { - "name": "Text", - "scope": "variable.parameter.function", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Delimiters", - "scope": "none", - "settings": { - "foreground": "" - } - }, - { - "name": "Operators", - "scope": "keyword.operator", - "settings": { - "foreground": "" - } - }, - { - "name": "Keywords", - "scope": "keyword", - "settings": { - "foreground": "#c678dd" - } - }, - { - "name": "Variables", - "scope": "variable", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Functions", - "scope": "entity.name.function, meta.require, support.function.any-method", - "settings": { - "foreground": "#61afef" - } - }, - { - "name": "Classes", - "scope": "support.class, entity.name.class, entity.name.type.class", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Classes", - "scope": "meta.class", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Methods", - "scope": "keyword.other.special-method", - "settings": { - "foreground": "#61afef" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "foreground": "#c678dd" - } - }, - { - "name": "Support", - "scope": "support.function", - "settings": { - "foreground": "#61afef" - } - }, - { - "name": "Strings, Inherited Class", - "scope": "string", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Integers", - "scope": "constant.numeric", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Floats", - "scope": "none", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Boolean", - "scope": "none", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Constants", - "scope": "constant", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "HTML: Tags", - "scope": "entity.name.tag", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "HTML: Tag attributes", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Attribute IDs", - "scope": "entity.other.attribute-name.id, punctuation.definition.entity", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Selector", - "scope": "meta.selector", - "settings": { - "foreground": "#c678dd" - } - }, - { - "name": "Markdown: Headings", - "scope": "markup.heading punctuation.definition.heading, entity.name.section", - "settings": { - "fontStyle": "", - "foreground": "#61afef" - } - }, - { - "name": "Markdown: Bold", - "scope": "markup.bold, punctuation.definition.bold", - "settings": { - "foreground": "#c678dd" - } - }, - { - "name": "Markdown: Italic", - "scope": "markup.italic, punctuation.definition.italic", - "settings": { - "foreground": "#c678dd" - } - }, - { - "name": "Markdown: Code", - "scope": "markup.raw.inline", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Markdown: Link Text", - "scope": "string.other.link, punctuation.definition.string.end.markdown", - "settings": { - "foreground": "" - } - }, - { - "name": "Markdown: Link Url", - "scope": "meta.link", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Markdown: Lists", - "scope": "markup.list", - "settings": { - "foreground": "" - } - }, - { - "name": "Markdown: Quotes", - "scope": "markup.quote", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Java Source", - "scope": "source.java meta.class.java meta.method.java", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Java Class Body", - "scope": "source.java meta.class.java meta.class.body.java", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Javascript: Function Arguments", - "scope": "source.js meta.function.js variable.parameter.function.js", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Javascript: New Variables", - "scope": "source.js variable.other.readwrite.js", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Javascript: Variables", - "scope": "source.js variable.other.object.js", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Javascript: Variables in Function Calls", - "scope": "source.js meta.function-call.method.js variable.other.readwrite.js", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Javascript: New Block Variables", - "scope": "source.js meta.block.js variable.other.readwrite.js", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Javascript: Block Variables", - "scope": "source.js meta.block.js variable.other.object.js", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Javascript: Block Variables in Function Calls", - "scope": "source.js meta.block.js meta.function-call.method.js variable.other.readwrite.js", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Javascript: Function Calls", - "scope": "source.js meta.function-call.method.js variable.function.js", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Javascript: Properties", - "scope": "source.js meta.property.object.js entity.name.function.js", - "settings": { - "foreground": "#61afef" - } - }, - { - "name": "Javascript: Prototypes", - "scope": "source.js support.constant.prototype.js", - "settings": { - "foreground": "#dcdfe4" - } - }, - { - "name": "Separator", - "scope": "meta.separator", - "settings": { - "foreground": "", - "background": "" - } - }, - { - "name": "Inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#e06c75" - } - }, - { - "name": "Changed", - "scope": "markup.changed", - "settings": { - "foreground": "#e5c07b" - } - }, - { - "name": "Regular Expressions", - "scope": "string.regexp", - "settings": { - "foreground": "#98c379" - } - }, - { - "name": "Escape Characters", - "scope": "constant.character.escape", - "settings": { - "foreground": "#56b6c2" - } - }, - { - "name": "Embedded", - "scope": "punctuation.section.embedded, variable.interpolation", - "settings": { - "foreground": "" - } - }, - { - "name": "Illegal", - "scope": "invalid.illegal", - "settings": { - "foreground": "#dcdfe4", - "background": "#e06c75" - } - }, - { - "name": "Broken", - "scope": "invalid.broken", - "settings": { - "foreground": "#dcdfe4", - "background": "#e5c07b" - } - }, - { - "name": "Deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#dcdfe4", - "background": "#e5c07b" - } - }, - { - "name": "Unimplemented", - "scope": "invalid.unimplemented", - "settings": { - "foreground": "#dcdfe4", - "background": "#c678dd" - } - } - ], - "name": "One-Dark", - "colorSpaceName": "sRGB" -} diff --git a/src/renderer/components/editor/themes/solarized-light.tmTheme.json b/src/renderer/components/editor/themes/solarized-light.tmTheme.json deleted file mode 100644 index e64f67e1..00000000 --- a/src/renderer/components/editor/themes/solarized-light.tmTheme.json +++ /dev/null @@ -1,1334 +0,0 @@ -{ - "gutterSettings": { - "background": "#EEE8D5", - "foreground": "#93A1A1", - "selectionBackground": "#EEE8D5", - "divider": "#EEE8D5", - "selectionForeground": "#93A1A1" - }, - "semanticClass": "solarized.light", - "settings": [ - { - "settings": { - "selection": "#EEE8D5", - "lineHighlight": "#EEE8D5", - "foreground": "#586E75", - "invisibles": "#EAE3C9", - "caret": "#000000", - "background": "#FDF6E3" - } - }, - { - "name": "Comment", - "scope": "comment", - "settings": { - "fontStyle": "", - "foreground": "#93A1A1" - } - }, - { - "name": "String", - "scope": "string", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "StringNumber", - "scope": "string", - "settings": { - "foreground": "#586E75" - } - }, - { - "name": "Regexp", - "scope": "string.regexp", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "Number", - "scope": "constant.numeric", - "settings": { - "foreground": "#d33682" - } - }, - { - "name": "Variable", - "scope": "variable.language, variable.other", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Keyword", - "scope": "keyword", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Storage", - "scope": "storage", - "settings": { - "fontStyle": "bold", - "foreground": "#073642" - } - }, - { - "name": "Class name", - "scope": "entity.name.class, entity.name.type.class", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Function name", - "scope": "entity.name.function", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Variable start", - "scope": "punctuation.definition.variable", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Embedded code markers", - "scope": "punctuation.section.embedded.begin, punctuation.section.embedded.end", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "Built-in constant", - "scope": "constant.language, meta.preprocessor", - "settings": { - "foreground": "#B58900" - } - }, - { - "name": "Support.construct", - "scope": "support.function.construct, keyword.other.new", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "User-defined constant", - "scope": "constant.character, constant.other", - "settings": { - "foreground": "#CB4B16" - } - }, - { - "name": "Inherited class", - "scope": "entity.other.inherited-class", - "settings": {} - }, - { - "name": "Function argument", - "scope": "variable.parameter", - "settings": {} - }, - { - "name": "Tag name", - "scope": "entity.name.tag", - "settings": { - "fontStyle": "bold", - "foreground": "#268bd2" - } - }, - { - "name": "Tag start/end", - "scope": "punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end", - "settings": { - "foreground": "#93A1A1" - } - }, - { - "name": "Tag attribute", - "scope": "entity.other.attribute-name", - "settings": { - "foreground": "#93A1A1" - } - }, - { - "name": "Library function", - "scope": "support.function", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Continuation", - "scope": "punctuation.separator.continuation", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "Library constant", - "scope": "support.constant", - "settings": {} - }, - { - "name": "Library class/type", - "scope": "support.type, support.class", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Library Exception", - "scope": "support.type.exception", - "settings": { - "foreground": "#CB4B16" - } - }, - { - "name": "Special", - "scope": "keyword.other.special-method", - "settings": { - "foreground": "#CB4B16" - } - }, - { - "name": "Library variable", - "scope": "support.other.variable", - "settings": {} - }, - { - "name": "Invalid", - "scope": "invalid", - "settings": {} - }, - { - "name": "Quoted String", - "scope": "string.quoted.double, string.quoted.single", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Quotes", - "scope": "punctuation.definition.string.begin, punctuation.definition.string.end", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "CSS: Property", - "scope": "entity.name.tag.css, support.type.property-name.css, meta.property-name.css", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "CSS: @font-face", - "scope": "source.css", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "CSS: Selector", - "scope": "meta.selector.css", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "CSS: {}", - "scope": "punctuation.section.property-list.css", - "settings": { - "foreground": "#6c71c4" - } - }, - { - "name": "CSS: Numeric Value", - "scope": "meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "CSS: Value", - "scope": "meta.property-value.css", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "CSS: !Important", - "scope": "keyword.other.important.css", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "CSS: Standard Value", - "scope": "support.constant.color", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "CSS: Tag", - "scope": "entity.name.tag.css", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "CSS: : ,", - "scope": "punctuation.separator.key-value.css, punctuation.terminator.rule.css", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "CSS .class", - "scope": "entity.other.attribute-name.class.css", - "settings": { - "fontStyle": "", - "foreground": "#268bd2" - } - }, - { - "name": "CSS :pseudo", - "scope": "entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "CSS: #id", - "scope": "entity.other.attribute-name.id.css", - "settings": { - "fontStyle": "", - "foreground": "#268bd2" - } - }, - { - "name": "JS: Function Name", - "scope": "meta.function.js, entity.name.function.js, support.function.dom.js", - "settings": { - "foreground": "#b58900" - } - }, - { - "name": "JS: Source", - "scope": "text.html.basic source.js.embedded.html", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "JS: Function", - "scope": "storage.type.function.js", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "JS: Numeric Constant", - "scope": "constant.numeric.js", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "JS: []", - "scope": "meta.brace.square.js", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "JS: Storage Type", - "scope": "storage.type.js", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "()", - "scope": "meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js", - "settings": { - "foreground": "#93A1A1" - } - }, - { - "name": "{}", - "scope": "meta.brace.curly.js", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "HTML: Doctype", - "scope": "entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html", - "settings": { - "fontStyle": "italic", - "foreground": "#93a1a1" - } - }, - { - "name": "HTML: Comment Block", - "scope": "comment.block.html", - "settings": { - "fontStyle": "italic", - "foreground": "#839496" - } - }, - { - "name": "HTML: Script", - "scope": "entity.name.tag.script.html", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "HTML: Style", - "scope": "source.css.embedded.html string.quoted.double.html", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "HTML: Text", - "scope": "text.html.ruby", - "settings": { - "fontStyle": "bold", - "foreground": "#cb4b16" - } - }, - { - "name": "HTML: =", - "scope": "text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html", - "settings": { - "fontStyle": "", - "foreground": "#657b83" - } - }, - { - "name": "HTML: something=", - "scope": "text.html.basic entity.other.attribute-name.html", - "settings": { - "foreground": "#657b83" - } - }, - { - "name": "HTML: \"", - "scope": "text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "HTML: <tag>", - "scope": "entity.name.tag.block.any.html", - "settings": { - "fontStyle": "bold", - "foreground": "#268bd2" - } - }, - { - "name": "HTML: style", - "scope": "source.css.embedded.html entity.name.tag.style.html", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "HTML: <style>", - "scope": "entity.name.tag.style.html", - "settings": { - "fontStyle": "" - } - }, - { - "name": "HTML: {}", - "scope": "text.html.basic punctuation.section.property-list.css", - "settings": { - "fontStyle": "" - } - }, - { - "name": "HTML: Embeddable", - "scope": "source.css.embedded.html, comment.block.html", - "settings": { - "fontStyle": "italic", - "foreground": "#839496" - } - }, - { - "name": "Ruby: Variable definition", - "scope": "punctuation.definition.variable.ruby", - "settings": { - "fontStyle": "", - "foreground": "#268bd2" - } - }, - { - "name": "Ruby: Function Name", - "scope": "meta.function.method.with-arguments.ruby", - "settings": { - "foreground": "#657b83" - } - }, - { - "name": "Ruby: Variable", - "scope": "variable.language.ruby", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Ruby: Function", - "scope": "entity.name.function.ruby", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Ruby: Keyword Control", - "scope": "keyword.control.ruby, keyword.control.def.ruby", - "settings": { - "fontStyle": "bold", - "foreground": "#859900" - } - }, - { - "name": "Ruby: Class", - "scope": "keyword.control.class.ruby, meta.class.ruby", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Ruby: Class Name", - "scope": "entity.name.type.class.ruby", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Ruby: Keyword", - "scope": "keyword.control.ruby", - "settings": { - "fontStyle": "", - "foreground": "#859900" - } - }, - { - "name": "Ruby: Support Class", - "scope": "support.class.ruby", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Ruby: Special Method", - "scope": "keyword.other.special-method.ruby", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Ruby: Constant", - "scope": "constant.language.ruby, constant.numeric.ruby", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Ruby: Constant Other", - "scope": "variable.other.constant.ruby", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Ruby: :symbol", - "scope": "constant.other.symbol.ruby", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "Ruby: Punctuation Section ''", - "scope": "punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "Ruby: Special Method", - "scope": "keyword.other.special-method.ruby", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "PHP: Include", - "scope": "keyword.control.import.include.php", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "Ruby: erb =", - "scope": "text.html.ruby meta.tag.inline.any.html", - "settings": { - "fontStyle": "", - "foreground": "#839496" - } - }, - { - "name": "Ruby: erb \"\"", - "scope": "text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "PHP: Quoted Single", - "scope": "punctuation.definition.string.begin, punctuation.definition.string.end", - "settings": { - "foreground": "#839496" - } - }, - { - "name": "PHP: []", - "scope": "keyword.operator.index-start.php, keyword.operator.index-end.php", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "PHP: Array", - "scope": "meta.array.php", - "settings": { - "foreground": "#586e75" - } - }, - { - "name": "PHP: Array()", - "scope": "meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "PHP: Array Construct", - "scope": "support.function.construct.php", - "settings": { - "foreground": "#b58900" - } - }, - { - "name": "PHP: Array Begin", - "scope": "punctuation.definition.array.begin, punctuation.definition.array.end", - "settings": { - "foreground": "#dc322f" - } - }, - { - "name": "PHP: Numeric Constant", - "scope": "constant.numeric.php", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "PHP: New", - "scope": "keyword.other.new.php", - "settings": { - "foreground": "#CB4B16" - } - }, - { - "name": "PHP: ::", - "scope": "support.class.php, keyword.operator.class", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "PHP: Other Property", - "scope": "variable.other.property.php", - "settings": { - "foreground": "#93a1a1" - } - }, - { - "name": "PHP: Class", - "scope": "storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php", - "settings": { - "foreground": "#b58900" - } - }, - { - "name": "PHP: Class Function", - "settings": {} - }, - { - "name": "PHP: Inherited Class", - "scope": "meta.other.inherited-class.php", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "PHP: Storage Type", - "scope": "storage.type.php", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "PHP: Function", - "scope": "entity.name.function.php", - "settings": { - "foreground": "#93a1a1" - } - }, - { - "name": "PHP: Function Construct", - "scope": "support.function.construct.php", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "PHP: Function Call", - "scope": "entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php", - "settings": { - "foreground": "#839496" - } - }, - { - "name": "PHP: Comment", - "scope": "keyword.other.phpdoc", - "settings": { - "fontStyle": "", - "foreground": "#93a1a1" - } - }, - { - "name": "PHP: Source Emebedded", - "scope": "source.php.embedded.block.html", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "PHP: Storage Type Function", - "scope": "storage.type.function.php", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "C: constant", - "scope": "constant.numeric.c", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "C: Meta Preprocessor", - "scope": "meta.preprocessor.c.include, meta.preprocessor.macro.c", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "C: Keyword", - "scope": "keyword.control.import.define.c, keyword.control.import.include.c", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "C: Function Preprocessor", - "scope": "entity.name.function.preprocessor.c", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "C: include <something.c>", - "scope": "meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "C: Function", - "scope": "support.function.C99.c, support.function.any-method.c, entity.name.function.c", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "C: \"", - "scope": "punctuation.definition.string.begin.c, punctuation.definition.string.end.c", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "C: Storage Type", - "scope": "storage.type.c", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "diff: header", - "scope": "meta.diff, meta.diff.header", - "settings": { - "fontStyle": "italic", - "foreground": "#E0EDDD", - "background": "#b58900" - } - }, - { - "name": "diff: deleted", - "scope": "markup.deleted", - "settings": { - "fontStyle": "", - "foreground": "#dc322f", - "background": "#eee8d5" - } - }, - { - "name": "diff: changed", - "scope": "markup.changed", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16", - "background": "#eee8d5" - } - }, - { - "name": "diff: inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#219186", - "background": "#eee8d5" - } - }, - { - "name": "Markdown: Linebreak", - "scope": "text.html.markdown meta.dummy.line-break", - "settings": { - "foreground": "#E0EDDD", - "background": "#A57706" - } - }, - { - "name": "Markdown: Raw", - "scope": "text.html.markdown markup.raw.inline", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "reST raw", - "scope": "text.restructuredtext markup.raw", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Other: Removal", - "scope": "other.package.exclude, other.remove", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Other: Add", - "scope": "other.add", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Tex: {}", - "scope": "punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Tex: {text}", - "scope": "meta.group.braces.tex", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Tex: Other Math", - "scope": "string.other.math.tex", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Tex: {var}", - "scope": "variable.parameter.function.latex", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "Tex: Math \\\\", - "scope": "punctuation.definition.constant.math.tex", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Tex: Constant Math", - "scope": "text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "Tex: Other Math String", - "scope": "string.other.math.tex", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Tex: $", - "scope": "punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Tex: \\label", - "scope": "keyword.control.label.latex, text.tex.latex constant.other.general.math.tex", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "Tex: \\label { }", - "scope": "variable.parameter.definition.label.latex", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Tex: Function", - "scope": "support.function.be.latex", - "settings": { - "fontStyle": "", - "foreground": "#859900" - } - }, - { - "name": "Tex: Support Function Section", - "scope": "support.function.section.latex", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "Tex: Support Function", - "scope": "support.function.general.tex", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "Tex: Comment", - "scope": "punctuation.definition.comment.tex, comment.line.percentage.tex", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Tex: Reference Label", - "scope": "keyword.control.ref.latex", - "settings": { - "fontStyle": "", - "foreground": "#2aa198" - } - }, - { - "name": "Python: docstring", - "scope": "string.quoted.double.block.python", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "Python: storage", - "scope": "storage.type.class.python, storage.type.function.python, storage.modifier.global.python", - "settings": { - "fontStyle": "", - "foreground": "#859900" - } - }, - { - "name": "Python: import", - "scope": "keyword.control.import.python, keyword.control.import.from.python", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "Python: Support.exception", - "scope": "support.type.exception.python", - "settings": { - "foreground": "#b58900" - } - }, - { - "name": "Shell: builtin", - "scope": "support.function.builtin.shell", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Shell: variable", - "scope": "variable.other.normal.shell", - "settings": { - "foreground": "#cb4b16" - } - }, - { - "name": "Shell: DOT_FILES", - "scope": "source.shell", - "settings": { - "fontStyle": "", - "foreground": "#268bd2" - } - }, - { - "name": "Shell: meta scope in loop", - "scope": "meta.scope.for-in-loop.shell, variable.other.loop.shell", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "Shell: \"\"", - "scope": "punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell", - "settings": { - "fontStyle": "", - "foreground": "#859900" - } - }, - { - "name": "Shell: Meta Block", - "scope": "meta.scope.case-block.shell, meta.scope.case-body.shell", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "Shell: []", - "scope": "punctuation.definition.logical-expression.shell", - "settings": { - "fontStyle": "", - "foreground": "#dc322f" - } - }, - { - "name": "Shell: Comment", - "scope": "comment.line.number-sign.shell", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Java: import", - "scope": "keyword.other.import.java", - "settings": { - "fontStyle": "", - "foreground": "#cb4b16" - } - }, - { - "name": "Java: meta-import", - "scope": "storage.modifier.import.java", - "settings": { - "fontStyle": "", - "foreground": "#586E75" - } - }, - { - "name": "Java: Class", - "scope": "meta.class.java storage.modifier.java", - "settings": { - "fontStyle": "", - "foreground": "#b58900" - } - }, - { - "name": "Java: /* comment */", - "scope": "source.java comment.block", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "Java: /* @param */", - "scope": "comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc", - "settings": { - "fontStyle": "", - "foreground": "#586e75" - } - }, - { - "name": "Perl: variables", - "scope": "punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl", - "settings": { - "foreground": "#b58900" - } - }, - { - "name": "Perl: functions", - "scope": "support.function.perl", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Perl: comments", - "scope": "comment.line.number-sign.perl", - "settings": { - "fontStyle": "italic", - "foreground": "#586E75" - } - }, - { - "name": "Perl: quotes", - "scope": "punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "Perl: \\char", - "scope": "constant.character.escape.perl", - "settings": { - "foreground": "#DC322F" - } - }, - { - "name": "Markdown: Headings", - "scope": "markup.heading.markdown, markup.heading.1.markdown, markup.heading.2.markdown, markup.heading.3.markdown, markup.heading.4.markdown, markup.heading.5.markdown, markup.heading.6.markdown", - "settings": { - "foreground": "#268bd2" - } - }, - { - "name": "Markdown: Bold", - "scope": "markup.bold.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#586E75" - } - }, - { - "name": "Markdown: Italic", - "scope": "markup.italic.markdown", - "settings": { - "fontStyle": "italic", - "foreground": "#586E75" - } - }, - { - "name": "Markdown: Punctuation for Bold, Italic, and Inline Block", - "scope": "punctuation.definition.bold.markdown, punctuation.definition.italic.markdown, punctuation.definition.raw.markdown", - "settings": { - "foreground": "#DC322F" - } - }, - { - "name": "Markdown: Bulleted List", - "scope": "markup.list.unnumbered.markdown", - "settings": { - "foreground": "#B58900" - } - }, - { - "name": "Markdown: Numbered List", - "scope": "markup.list.numbered.markdown", - "settings": { - "foreground": "#859900" - } - }, - { - "name": "Markdown: Block and Inline Block", - "scope": "markup.raw.block.markdown, markup.raw.inline.markdown", - "settings": { - "foreground": "#2aa198" - } - }, - { - "name": "markup.quote.markdown", - "scope": "markup.quote.markdown", - "settings": { - "foreground": "#6c71c4" - } - }, - { - "name": "punctuation.definition.blockquote.markdown", - "scope": "punctuation.definition.blockquote.markdown", - "settings": { - "foreground": "#6c71c4" - } - }, - { - "name": "Markdown: Seperator", - "scope": "meta.separator.markdown", - "settings": { - "foreground": "#d33682" - } - }, - { - "name": "Markdown: Link URL, Reference", - "scope": "markup.underline.link.markdown", - "settings": { - "foreground": "#839496" - } - }, - { - "name": "Markdown: Link Title", - "scope": "markup.underline.link.markdown", - "settings": { - "foreground": "#839496" - } - }, - { - "name": "Markdown: Link Punctuation", - "scope": "meta.link.inet.markdown, meta.link.email.lt-gt.markdown, punctuation.definition.string.begin.markdown, punctuation.definition.string.end.markdown, punctuation.definition.link.markdown", - "settings": { - "foreground": "#DC322F" - } - }, - { - "name": "text plain", - "scope": "text.plain", - "settings": { - "foreground": "#6a8187" - } - }, - { - "name": "SublimeLinter Annotations", - "scope": "sublimelinter.notes", - "settings": { - "foreground": "#eee8d5", - "background": "#eee8d5" - } - }, - { - "name": "SublimeLinter Error Outline", - "scope": "sublimelinter.outline.illegal", - "settings": { - "foreground": "#93a1a1", - "background": "#93a1a1" - } - }, - { - "name": "SublimeLinter Error Underline", - "scope": "sublimelinter.underline.illegal", - "settings": { - "background": "#dc322f" - } - }, - { - "name": "SublimeLinter Warning Outline", - "scope": "sublimelinter.outline.warning", - "settings": { - "foreground": "#839496", - "background": "#839496" - } - }, - { - "name": "SublimeLinter Warning Underline", - "scope": "sublimelinter.underline.warning", - "settings": { - "background": "#b58900" - } - }, - { - "name": "SublimeLinter Violation Outline", - "scope": "sublimelinter.outline.violation", - "settings": { - "foreground": "#657b83", - "background": "#657b83" - } - }, - { - "name": "SublimeLinter Violation Underline", - "scope": "sublimelinter.underline.violation", - "settings": { - "background": "#cb4b16" - } - } - ], - "name": "Solarized-Light", - "colorSpaceName": "sRGB", - "uuid": "38E819D9-AE02-452F-9231-ECC3B204AFD7" -} diff --git a/src/renderer/components/editor/themes/tokyo-night.tmTheme.json b/src/renderer/components/editor/themes/tokyo-night.tmTheme.json deleted file mode 100644 index 6f0a8f22..00000000 --- a/src/renderer/components/editor/themes/tokyo-night.tmTheme.json +++ /dev/null @@ -1,835 +0,0 @@ -{ - "author": "Kristi Russell (http://github.com/enkia)", - "semanticClass": "enki.theme.tokyo", - "settings": [ - { - "settings": { - "guide": "#4f4f5e40", - "caret": "#DBC08A", - "findHighlight": "#ffa300", - "phantomCss": "<![CDATA[ html { position: relative; } ]]>", - "shadow": "#00000010", - "stackGuide": "#4f4f5e60", - "lineHighlight": "#00000030", - "gutterForeground": "#3b415caa", - "findHighlightForeground": "#000000", - "foreground": "#AFBAD4ff", - "activeGuide": "#363b54", - "background": "#1d1f29", - "popupCss": "<![CDATA[ html { color: #B376B3; background-color: #2b2d3a; padding: 10px; } a { color: #6189BB; line-height: 1.2; text-decoration: none; } .error, .deleted { color: #50B4DC; } .success, .inserted { color: #9DBA72; } .warning, .modified { color: #ffa300; } ]]>", - "invisibles": "#4f4f5e", - "selection": "#9D599D40", - "selectionBorder": "#9D599D", - "inactiveSelection": "#282833", - "tagsOptions": "underline" - } - }, - { - "name": "Italics - Comments, Storage, Keyword Flow, Vue attributes, Decorators", - "scope": "comment, meta.var.expr storage.type, keyword.control.flow, meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html, tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js, storage.modifier", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Comment", - "scope": "comment, comment.block.documentation, punctuation.definition.comment", - "settings": { - "foreground": "#444b6a" - } - }, - { - "name": "Comment Doc", - "scope": "comment.block.documentation variable, comment.block.documentation storage, comment.block.documentation punctuation, comment.block.documentation keyword, comment.block.documentation support, comment.block.documentation markup, comment.block.documentation markup.inline.raw.string.markdown, keyword.other.phpdoc.php", - "settings": { - "foreground": "#7982a9" - } - }, - { - "name": "Number, Boolean, Undefined, Null", - "scope": "variable.other.constant, punctuation.definition.constant, constant.language, constant.numeric, support.constant", - "settings": { - "foreground": "#ff9e64" - } - }, - { - "name": "String, Symbols, Markup Heading", - "scope": "string, constant.other.symbol, constant.other.key, markup.heading, meta.attribute-selector", - "settings": { - "fontStyle": "", - "foreground": "#9ece6a" - } - }, - { - "name": "Colors", - "scope": "constant.other.color, constant.other.color.rgb-value.hex punctuation.definition.constant", - "settings": { - "foreground": "#9aa5ce" - } - }, - { - "name": "Invalid", - "scope": "invalid, invalid.illegal", - "settings": { - "foreground": "#ff5370" - } - }, - { - "name": "Invalid deprecated", - "scope": "invalid.deprecated", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Storage Type", - "scope": "storage.type", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Storage - modifier, var, const, let", - "scope": "meta.var.expr storage.type, storage.modifier", - "settings": { - "foreground": "#9d7cd8" - } - }, - { - "name": "Interpolation", - "scope": "punctuation.definition.template-expression, punctuation.section.embedded", - "settings": { - "foreground": "#7dcfff" - } - }, - { - "name": "Spread", - "scope": "keyword.operator.spread, keyword.operator.rest", - "settings": { - "fontStyle": "bold", - "foreground": "#f7768e" - } - }, - { - "name": "Operator, Misc", - "scope": "keyword.operator, keyword.control.as, keyword.other, keyword.operator.bitwise.shift, punctuation, punctuation.definition.constant.markdown, punctuation.definition.string, punctuation.support.type.property-name, text.html.vue-html meta.tag, punctuation.definition.keyword, punctuation.terminator.rule, punctuation.definition.entity, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, keyword.other.template, keyword.other.substitution, entity.name.operator, text.html.vue meta.tag.block.any.html, text.html.vue meta.tag.inline.any.html, text.html.vue meta.tag.other.html, text.html.twig meta.tag.inline.any.html, text.html.twig meta.tag.block.any.html, text.html.twig meta.tag.structure.any.html, text.html.twig meta.tag.any.html", - "settings": { - "foreground": "#89ddff" - } - }, - { - "name": "Import, Export, From, Default", - "scope": "keyword.control.import, keyword.control.export, keyword.control.from, keyword.control.default, meta.import keyword.other", - "settings": { - "foreground": "#7dcfff" - } - }, - { - "name": "Keyword", - "scope": "keyword, keyword.control, keyword.other.important", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Keyword SQL", - "scope": "keyword.other.DML", - "settings": { - "foreground": "#7dcfff" - } - }, - { - "name": "Keyword Operator Logical, Arrow, Ternary, Comparison", - "scope": "keyword.operator.logical, storage.type.function, keyword.operator.bitwise, keyword.operator.ternary, keyword.operator.comparison, keyword.operator.relational, keyword.operator.or.regexp", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Tag", - "scope": "entity.name.tag, entity.name.tag support.class.component, meta.tag", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Tag Punctuation", - "scope": "punctuation.definition.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html", - "settings": { - "foreground": "#ba3c97" - } - }, - { - "name": "Blade", - "scope": "keyword.blade, entity.name.function.blade", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "PHP - Embedded Tag", - "scope": "punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "Smarty - Twig tag - Blade", - "scope": "punctuation.definition.variable.smarty, punctuation.section.embedded.begin.smarty, punctuation.section.embedded.end.smarty, meta.tag.template.value.twig, punctuation.section.tag.twig, meta.tag.expression.twig, punctuation.definition.tag.expression.twig, punctuation.definition.tag.output.twig, variable.parameter.smarty", - "settings": { - "foreground": "#7DCFFF" - } - }, - { - "name": "Smarty - Twig variable - function", - "scope": "variable.other.property.twig, support.function.twig, meta.function-call.twig, keyword.control.twig, keyword.control.smarty, keyword.operator.other.twig, keyword.operator.comparison.twig, support.function.functions.twig, support.function.functions.twig, keyword.operator.assignment.twig, support.function.filters.twig, support.function.built-in.smarty, keyword.operator.smarty, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php entity.name.tag.block.any.html, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php constant.other.inline-data.html, text.blade text.html.blade custom.compiler.blade.php support.function constant.other.inline-data.html", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "Globals - PHP Constants etc", - "scope": "constant.other.php, variable.other.global.safer, variable.other.global.safer punctuation.definition.variable, variable.other.global, variable.other.global punctuation.definition.variable, constant.other", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "Variables", - "scope": "variable, support.variable, string constant.other.placeholder", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Object Variable", - "scope": "variable.other.object, support.module.node", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Object Key", - "scope": "meta.object-literal.key, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js, string.alias.graphql, string.unquoted.graphql, string.unquoted.alias.graphql, meta.field.declaration.ts variable.object.property", - "settings": { - "foreground": "#73daca" - } - }, - { - "name": "Object Property", - "scope": "variable.other.property, support.variable.property, support.variable.property.dom, meta.function-call variable.other.object.property, variable.language.prototype, meta.property.object, variable.other.member", - "settings": { - "foreground": "#7dcfff" - } - }, - { - "name": "Object Property", - "scope": "variable.other.object.property", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Object Literal Member lvl 3 (Vue Prop Validation)", - "scope": "meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.object-literal.key", - "settings": { - "foreground": "#41a6b5" - } - }, - { - "name": "C-related Block Level Variables", - "scope": "source.cpp meta.block variable.other", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Other Variable", - "scope": "support.other.variable", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Methods", - "scope": "meta.class-method.js entity.name.function.js, entity.name.method.js, variable.function.constructor, keyword.other.special-method, storage.type.cs", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "Function Definition", - "scope": "entity.name.function, meta.function-call, meta.function-call entity.name.function, variable.function, meta.definition.method entity.name.function, meta.object-literal entity.name.function", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "Function Argument", - "scope": "variable.parameter.function.language.special, variable.parameter, meta.function.parameters punctuation.definition.variable, meta.function.parameter variable", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "Constant, Tag Attribute", - "scope": "keyword.other.type.php, storage.type.php, constant.character, constant.escape, keyword.other.unit", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Variable Definition", - "scope": "meta.definition.variable variable.other.constant, meta.definition.variable variable.other.readwrite, variable.other.declaration", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Inherited Class", - "scope": "entity.other.inherited-class", - "settings": { - "fontStyle": "", - "foreground": "#bb9af7" - } - }, - { - "name": "Class, Support, DOM, etc", - "scope": "support.class, support.type, variable.other.readwrite.alias, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, support.type.sys-types, support.variable.dom, support.constant.math, support.type.object.module, support.constant.json, entity.name.namespace, meta.import.qualifier, entity.name.class", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "Class Name", - "scope": "entity.name", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Support Function", - "scope": "support.function", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "CSS Class and Support", - "scope": "source.css support.type.property-name, source.sass support.type.property-name, source.scss support.type.property-name, source.less support.type.property-name, source.stylus support.type.property-name, source.postcss support.type.property-name, support.type.property-name.css, support.type.vendored.property-name, support.type.map.key", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "CSS Font", - "scope": "support.constant.font-name, meta.definition.variable", - "settings": { - "foreground": "#9ece6a" - } - }, - { - "name": "CSS Class", - "scope": "entity.other.attribute-name.class, meta.at-rule.mixin.scss entity.name.function.scss", - "settings": { - "foreground": "#9ece6a" - } - }, - { - "name": "CSS ID", - "scope": "entity.other.attribute-name.id", - "settings": { - "foreground": "#fc7b7b" - } - }, - { - "name": "CSS Tag", - "scope": "entity.name.tag.css, entity.name.tag.reference, entity.name.tag.scss", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "CSS Tag Reference", - "scope": "entity.name.tag.reference", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "CSS Property Separator", - "scope": "meta.property-list punctuation.separator.key-value", - "settings": { - "foreground": "#9abdf5" - } - }, - { - "name": "CSS Punctuation", - "scope": "meta.property-list, punctuation.definition.entity.css", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "SCSS @", - "scope": "meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.include entity.name.function.scss, meta.at-rule.include keyword.control.at-rule.include", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "SCSS Mixins, Extends, Include Keyword", - "scope": "keyword.control.at-rule.include punctuation.definition.keyword, keyword.control.at-rule.mixin punctuation.definition.keyword, meta.at-rule.include keyword.control.at-rule.include, keyword.control.at-rule.extend punctuation.definition.keyword, meta.at-rule.extend keyword.control.at-rule.extend, entity.other.attribute-name.placeholder.css punctuation.definition.entity.css, meta.at-rule.media keyword.control.at-rule.media, meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.function keyword.control.at-rule.function, keyword.control punctuation.definition.keyword, meta.at-rule.import.scss entity.other.attribute-name.placeholder.scss punctuation.definition.entity.scss, meta.at-rule.import.scss keyword.control.at-rule.import.scss", - "settings": { - "foreground": "#9d7cd8" - } - }, - { - "name": "SCSS Include Mixin Argument", - "scope": "meta.property-list meta.at-rule.include", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "CSS value", - "scope": "support.constant.property-value", - "settings": { - "foreground": "#ff9e64" - } - }, - { - "name": "Sub-methods", - "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Language methods", - "scope": "variable.language", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Variable punctuation", - "scope": "variable.other punctuation.definition.variable", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Keyword this with Punctuation, ES7 Bind Operator", - "scope": "source.js constant.other.object.key.js string.unquoted.label.js, variable.language.this punctuation.definition.variable, keyword.other.this", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "HTML Attributes", - "scope": "entity.other.attribute-name, text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name, text.blade entity.other.attribute-name.class, text.html.smarty entity.other.attribute-name.class", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Vue Template attributes", - "scope": "meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Vue Template attribute separator", - "scope": "meta.directive.vue punctuation.separator.key-value.html", - "settings": { - "foreground": "#89ddff" - } - }, - { - "name": "CSS IDs", - "scope": "source.sass keyword.control", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "CSS psuedo selectors", - "scope": "entity.other.attribute-name.pseudo-class, entity.other.attribute-name.pseudo-element, entity.other.attribute-name.placeholder, meta.property-list meta.property-value", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Inserted", - "scope": "markup.inserted", - "settings": { - "foreground": "#449dab" - } - }, - { - "name": "Deleted", - "scope": "markup.deleted", - "settings": { - "foreground": "#914c54" - } - }, - { - "name": "Changed", - "scope": "markup.changed", - "settings": { - "foreground": "#6183bb" - } - }, - { - "name": "Regular Expressions", - "scope": "string.regexp", - "settings": { - "foreground": "#b4f9f8" - } - }, - { - "name": "Regular Expressions - Punctuation", - "scope": "punctuation.definition.group", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Regular Expressions - Character Class", - "scope": "constant.other.character-class.regexp", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Regular Expressions - Character Class Set", - "scope": "constant.other.character-class.set.regexp, punctuation.definition.character-class.regexp", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "Regular Expressions - Quantifier", - "scope": "keyword.operator.quantifier.regexp", - "settings": { - "foreground": "#89ddff" - } - }, - { - "name": "Regular Expressions - Backslash", - "scope": "constant.character.escape.backslash", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "Escape Characters", - "scope": "constant.character.escape", - "settings": { - "foreground": "#89ddff" - } - }, - { - "name": "Decorators", - "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "CSS Units", - "scope": "keyword.other.unit", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "JSON Key - Level 0", - "scope": "source.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#7aa2f7" - } - }, - { - "name": "JSON Key - Level 1", - "scope": "source.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "JSON Key - Level 2", - "scope": "source.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#7dcfff" - } - }, - { - "name": "JSON Key - Level 3", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "JSON Key - Level 4", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#e0af68" - } - }, - { - "name": "JSON Key - Level 5", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "JSON Key - Level 6", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", - "settings": { - "foreground": "#73daca" - } - }, - { - "name": "JSON Key - Level 7", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "JSON Key - Level 8", - "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json punctuation.definition.string.end.json", - "settings": { - "foreground": "#9ece6a" - } - }, - { - "name": "JSON Key - value", - "scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", - "settings": { - "foreground": "#9ece6a" - } - }, - { - "name": "Plain Punctuation", - "scope": "punctuation.definition.list_item.markdown", - "settings": { - "foreground": "#9abdf5" - } - }, - { - "name": "Block Punctuation", - "scope": "meta.block, meta.brace, punctuation.definition.block, punctuation.definition.use, punctuation.definition.group.shell, punctuation.definition.class, punctuation.definition.begin.bracket, punctuation.definition.end.bracket, punctuation.definition.parameters, punctuation.definition.arguments, punctuation.definition.dictionary, punctuation.definition.array, punctuation.section", - "settings": { - "foreground": "#9abdf5" - } - }, - { - "name": "Markdown - Plain", - "scope": "meta.jsx.children, meta.embedded.block", - "settings": { - "foreground": "#c0caf5" - } - }, - { - "name": "HTML text", - "scope": "text.html", - "settings": { - "foreground": "#9aa5ce" - } - }, - { - "name": "Markdown - Markup Raw Inline", - "scope": "text.html.markdown markup.inline.raw.markdown", - "settings": { - "foreground": "#bb9af7" - } - }, - { - "name": "Markdown - Markup Raw Inline Punctuation", - "scope": "text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown", - "settings": { - "foreground": "#4E5579" - } - }, - { - "name": "Markdown - Heading 1", - "scope": "heading.1.markdown entity.name, heading.1.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#89ddff" - } - }, - { - "name": "Markdown - Heading 2", - "scope": "heading.2.markdown entity.name, heading.2.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#61bdf2" - } - }, - { - "name": "Markdown - Heading 3", - "scope": "heading.3.markdown entity.name, heading.3.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#7aa2f7" - } - }, - { - "name": "Markdown - Heading 4", - "scope": "heading.4.markdown entity.name, heading.4.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#6d91de" - } - }, - { - "name": "Markdown - Heading 5", - "scope": "heading.5.markdown entity.name, heading.5.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#9aa5ce" - } - }, - { - "name": "Markdown - Heading 6", - "scope": "heading.6.markdown entity.name, heading.6.markdown punctuation.definition.heading.markdown", - "settings": { - "fontStyle": "bold", - "foreground": "#747ca1" - } - }, - { - "name": "Markup - Italic", - "scope": "markup.italic, markup.italic punctuation", - "settings": { - "fontStyle": "italic", - "foreground": "#c0caf5" - } - }, - { - "name": "Markup - Bold", - "scope": "markup.bold, markup.bold punctuation", - "settings": { - "fontStyle": "bold", - "foreground": "#c0caf5" - } - }, - { - "name": "Markup - Bold-Italic", - "scope": "markup.bold markup.italic, markup.bold markup.italic punctuation", - "settings": { - "fontStyle": "bold italic", - "foreground": "#c0caf5" - } - }, - { - "name": "Markup - Underline", - "scope": "markup.underline, markup.underline punctuation", - "settings": { - "fontStyle": "underline" - } - }, - { - "name": "Markdown - Blockquote", - "scope": "markup.quote punctuation.definition.blockquote.markdown", - "settings": { - "foreground": "#4e5579" - } - }, - { - "name": "Markup - Quote", - "scope": "markup.quote", - "settings": { - "fontStyle": "italic" - } - }, - { - "name": "Markdown - Link", - "scope": "string.other.link, markup.underline.link, constant.other.reference.link.markdown, string.other.link.description.title.markdown", - "settings": { - "foreground": "#73daca" - } - }, - { - "name": "Markdown - Fenced Code Block", - "scope": "markup.fenced_code.block.markdown, markup.inline.raw.string.markdown, variable.language.fenced.markdown", - "settings": { - "foreground": "#89ddff" - } - }, - { - "name": "Markdown - Separator", - "scope": "meta.separator", - "settings": { - "fontStyle": "bold", - "foreground": "#444b6a" - } - }, - { - "name": "Markup - Table", - "scope": "markup.table", - "settings": { - "foreground": "#c0cefc" - } - }, - { - "name": "Token - Info", - "scope": "token.info-token", - "settings": { - "foreground": "#0db9d7" - } - }, - { - "name": "Token - Warn", - "scope": "token.warn-token", - "settings": { - "foreground": "#ffdb69" - } - }, - { - "name": "Token - Error", - "scope": "token.error-token", - "settings": { - "foreground": "#db4b4b" - } - }, - { - "name": "Token - Debug", - "scope": "token.debug-token", - "settings": { - "foreground": "#b267e6" - } - }, - { - "name": "Apache Tag", - "scope": "entity.tag.apacheconf", - "settings": { - "foreground": "#f7768e" - } - }, - { - "name": "Preprocessor", - "scope": "meta.preprocessor", - "settings": { - "foreground": "#73daca" - } - }, - { - "name": "ENV value", - "scope": "source.env", - "settings": { - "foreground": "#7aa2f7" - } - } - ], - "name": "Tokyo-Night", - "colorSpaceName": "sRGB", - "uuid": "06f855e3-9fb7-4fb1-b790-aef06065f34e" -} diff --git a/src/shared/types/renderer/editor/index.d.ts b/src/renderer/components/editor/types/index.ts similarity index 100% rename from src/shared/types/renderer/editor/index.d.ts rename to src/renderer/components/editor/types/index.ts diff --git a/src/renderer/components/markdown/MindMap.vue b/src/renderer/components/markdown/MindMap.vue deleted file mode 100644 index 37c6684a..00000000 --- a/src/renderer/components/markdown/MindMap.vue +++ /dev/null @@ -1,167 +0,0 @@ -<template> - <div class="mindmap"> - <SnippetHeaderTools> - <div class="left"> - <AppActionButton - v-tooltip="i18n.t('button.zoomIn')" - @click="onZoom('zoomIn')" - > - <UniconsPlus /> - </AppActionButton> - <AppActionButton - v-tooltip="i18n.t('button.zoomOut')" - @click="onZoom('zoomOut')" - > - <UniconsMinus /> - </AppActionButton> - <AppActionButton - v-tooltip="i18n.t('button.fit')" - @click="onZoom('fit')" - > - <UniconsFocus /> - </AppActionButton> - </div> - <div class="right"> - <AppActionButton - v-tooltip="`${i18n.t('button.saveAs')} PNG`" - @click="onSaveScreenshot('png')" - > - PNG - <UniconsFileDownload /> - </AppActionButton> - <AppActionButton - v-tooltip="`${i18n.t('button.saveAs')} SVG`" - @click="onSaveScreenshot('svg')" - > - SVG - <UniconsFileDownload /> - </AppActionButton> - </div> - </SnippetHeaderTools> - <div - ref="mindmapRef" - class="mindmap__view" - > - <!-- eslint-disable-next-line vue/html-self-closing ломает подсвету синтаксиса --> - <svg ref="svgRef"></svg> - </div> - </div> -</template> - -<script setup lang="ts"> -import { Transformer } from 'markmap-lib' -import { Markmap } from 'markmap-view' -import { onMounted, ref, onBeforeUnmount, watch, onUpdated } from 'vue' -import { useMagicKeys } from '@vueuse/core' -import { useSnippetStore } from '@/store/snippets' -import { i18n } from '@/electron' -import domToImage from 'dom-to-image' -import { track } from '@/services/analytics' - -interface Props { - value: string -} - -const props = defineProps<Props>() - -const snippetStore = useSnippetStore() - -const svgRef = ref<SVGElement>() -const mindmapRef = ref<HTMLDivElement>() - -const transformer = new Transformer() - -const { escape } = useMagicKeys() - -let mm: Markmap - -function init () { - mm = Markmap.create(svgRef.value!) - - update() -} - -function update () { - const value = props.value || '# Empty' - - const { root } = transformer.transform(value) - mm.setData(root) - mm.fit() -} - -function onZoom (type: 'zoomIn' | 'zoomOut' | 'fit') { - if (type === 'zoomIn') { - mm.rescale(1.25) - } - - if (type === 'zoomOut') { - mm.rescale(0.8) - } - - if (type === 'fit') { - mm.fit() - } -} - -async function onSaveScreenshot (type: 'png' | 'svg' = 'png') { - let data = '' - - await mm.fit() - - if (type === 'png') { - data = await domToImage.toPng(mindmapRef.value!) - } - - if (type === 'svg') { - data = await domToImage.toSvg(mindmapRef.value!) - } - - const a = document.createElement('a') - a.href = data - a.download = `${snippetStore.selected?.name}.${type}` - a.click() - - track('snippets/save-mindmap', type) -} - -onMounted(() => { - init() -}) - -onUpdated(() => { - update() -}) - -function fit () { - mm.fit() -} - -window.addEventListener('resize', fit) - -watch(escape, () => { - snippetStore.isMindmapPreview = false -}) - -onBeforeUnmount(() => { - window.removeEventListener('resize', fit) -}) -</script> - -<style lang="scss"> -.mindmap { - height: 100%; - &__view { - height: 100%; - svg { - width: 100%; - height: calc(100% - 40px); - } - } - - .left, - .right { - display: flex; - align-items: center; - } -} -</style> diff --git a/src/renderer/components/markdown/TheMarkdown.vue b/src/renderer/components/markdown/TheMarkdown.vue deleted file mode 100644 index 83d706a6..00000000 --- a/src/renderer/components/markdown/TheMarkdown.vue +++ /dev/null @@ -1,323 +0,0 @@ -<template> - <div class="markdown markdown-body"> - <PerfectScrollbar> - <div v-html="renderedHtml" /> - </PerfectScrollbar> - </div> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' -import sanitizeHtml from 'sanitize-html' -import hljs from 'highlight.js' -import { computed, onBeforeUnmount, onMounted, ref, watch, nextTick } from 'vue' -import { ipc, store } from '@/electron' -import { marked } from 'marked' -import mermaid from 'mermaid' -import { useHljsTheme, goToSnippet } from '@/composable' -import { useCodemirror } from '@/composable/codemirror' -import { nanoid } from 'nanoid' -import { useMagicKeys } from '@vueuse/core' - -const isDev = import.meta.env.DEV - -interface Props { - value: string - scale?: number -} - -interface Editors { - id: string - value: string - lang: string -} - -const props = withDefaults(defineProps<Props>(), { - scale: 1 -}) - -const appStore = useAppStore() -const snippetStore = useSnippetStore() -const { escape } = useMagicKeys() - -const renderedHtml = ref() - -const editors: Editors[] = [] - -const forceRefresh = ref() -const preTagBg = computed(() => - appStore.isLightTheme ? '#fff' : 'var(--color-contrast-high)' -) -const fontFamily = computed(() => appStore.editor.fontFamily) - -const init = () => { - const renderer: marked.RendererObject = { - code (code: string, lang: string) { - if (lang === 'mermaid') { - return `<div class="mermaid">${code}</div><br>` - } else { - if (appStore.markdown.codeRenderer === 'highlight.js') { - const language = hljs.getLanguage(lang) ? lang : 'plaintext' - return `<pre><code class="language-${lang}">${ - hljs.highlight(code, { language }).value - }</code></pre>` - } else { - const id = nanoid(6) - - editors.push({ - id, - value: code, - lang - }) - - return `<div id="${id}"></div>` - } - } - }, - link (href: string, title: string, text: string) { - if (/^masscode:\/\/snippets/.test(href)) { - const id = href.split('/').pop() - return `<a href="${href}" class="snippet-link" data-snippet-id="${id}">${text}</a>` - } else { - return `<a href="${href}" class="external">${text}</a>` - } - } - } - - marked.use({ renderer }) -} - -const initMermaid = () => { - try { - mermaid.initialize({ - // @ts-ignore - theme: appStore.theme.match(/^dark/) ? 'dark' : 'default', - startOnLoad: true - }) - mermaid.init('.mermaid') - } catch (err) {} -} - -onMounted(() => { - render() -}) - -const render = () => { - if (!props.value) return - - const raw = marked.parse(props.value) - - let html = sanitizeHtml(raw, { - allowedTags: [ - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'h7', - 'h8', - 'br', - 'b', - 'i', - 'strong', - 'em', - 'a', - 'pre', - 'code', - 'img', - 'tt', - 'div', - 'ins', - 'del', - 'sup', - 'sub', - 'p', - 'ol', - 'ul', - 'table', - 'thead', - 'tbody', - 'tfoot', - 'blockquote', - 'dl', - 'dt', - 'dd', - 'kbd', - 'q', - 'samp', - 'var', - 'hr', - 'ruby', - 'rt', - 'rp', - 'li', - 'tr', - 'td', - 'th', - 's', - 'strike', - 'summary', - 'details', - 'caption', - 'figure', - 'figcaption', - 'abbr', - 'bdo', - 'cite', - 'dfn', - 'mark', - 'small', - 'span', - 'time', - 'wbr', - 'input' - ], - allowedAttributes: { - '*': [ - 'align', - 'alt', - 'height', - 'href', - 'name', - 'src', - 'target', - 'width', - 'class', - 'type', - 'checked', - 'disabled', - 'id', - 'data-*' - ] - }, - allowedSchemes: ['http', 'https', 'masscode'] - }) - - const re = /src="\.\//g - const path = store.preferences.get('storagePath') - - html = isDev - ? html.replace(re, `src="file://${path}/`) - : html.replace(re, `src="${path}/`) - - renderedHtml.value = html - - nextTick(() => initMermaid()) -} - -const onLink = async (e: Event) => { - const el = e.target as HTMLAnchorElement - e.preventDefault() - - if (el.classList.contains('external')) { - ipc.invoke('main:open-url', el.href) - } - - if (el.classList.contains('snippet-link')) { - const { snippetId } = el.dataset - if (snippetId) goToSnippet(snippetId, true) - } -} - -const height = computed(() => { - // eslint-disable-next-line no-unused-expressions - forceRefresh.value - - let result = - appStore.sizes.editor.titleHeight + - appStore.sizes.titlebar + - appStore.sizes.editor.footerHeight - - if (snippetStore.isFragmentsShow) { - result += appStore.sizes.editor.fragmentsHeight - } - - if (snippetStore.isTagsShow) { - result += appStore.sizes.editor.tagsHeight - } - - return window.innerHeight - result + 'px' -}) - -watch( - () => appStore.isLightTheme, - v => { - if (v) { - useHljsTheme('light') - } else { - useHljsTheme('dark') - } - }, - { immediate: true } -) - -watch(renderedHtml, () => { - nextTick(() => { - editors.forEach(i => { - useCodemirror(i.id, { - value: i.value, - mode: i.lang - }) - }) - }) -}) - -watch( - () => props.value, - () => { - render() - } -) - -watch(escape, () => { - snippetStore.isMarkdownPreview = false -}) - -init() - -onMounted(() => { - document.addEventListener('click', onLink) -}) - -onBeforeUnmount(() => { - document.removeEventListener('click', onLink) -}) - -window.addEventListener('resize', () => { - forceRefresh.value = Math.random() -}) -</script> - -<style lang="scss" scoped> -.markdown { - padding: 0 var(--spacing-xs); - &-body { - --scale: v-bind(props.scale); - } - :deep(h1, h2, h3, h4, h5, h6) { - &:first-child { - margin-top: 0; - } - } - :deep(.ps) { - height: v-bind(height); - } - :deep(.CodeMirror) { - height: 100%; - padding: var(--spacing-xs); - font-size: 0.85em; - font-family: v-bind(fontFamily); - } - :deep(.CodeMirror-line) { - padding: 0 var(--spacing-sm); - &:first-child { - padding-top: var(--spacing-xs); - } - &:last-child { - padding-bottom: var(--spacing-xs); - } - } -} -</style> diff --git a/src/renderer/components/preferences/AppearancePreferences.vue b/src/renderer/components/preferences/AppearancePreferences.vue deleted file mode 100644 index babbb16c..00000000 --- a/src/renderer/components/preferences/AppearancePreferences.vue +++ /dev/null @@ -1,49 +0,0 @@ -<template> - <div class="theme-preferences"> - <AppFormItem :label="i18n.t('preferences:appearance.theme.label')"> - <AppSelect - v-model="localValue" - :options="options" - /> - </AppFormItem> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { useAppStore } from '@/store/app' -import type { Theme } from '@shared/types/renderer/store/app' -import { computed } from 'vue' -import { themes } from '@/components/editor/themes' - -interface Options { - label: string - value: Theme -} - -const appStore = useAppStore() - -const localValue = computed({ - get: () => appStore.theme, - set: v => { - appStore.setTheme(v) - track('app/set-theme', v) - } -}) - -const options: Options[] = themes - .map(i => { - const label = i.value.startsWith('light') - ? `${i18n.t('preferences:appearance.theme.light')}: ${i.label}` - : `${i18n.t('preferences:appearance.theme.dark')}: ${i.label}` - - return { - label, - value: i.value - } - }) - .sort((a, b) => (a.label > b.label ? 1 : -1)) -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/preferences/EditorPreferences.vue b/src/renderer/components/preferences/EditorPreferences.vue deleted file mode 100644 index 1519db1f..00000000 --- a/src/renderer/components/preferences/EditorPreferences.vue +++ /dev/null @@ -1,108 +0,0 @@ -<template> - <div class="editor-preferences"> - <AppForm> - <h4>{{ i18n.t('preferences:editor.label') }}</h4> - <AppFormItem :label="i18n.t('preferences:editor.fontSize')"> - <AppInput - v-model="appStore.editor.fontSize" - type="number" - style="width: 100px" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.fontFamily')"> - <AppInput v-model="appStore.editor.fontFamily" /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.wrap.label')"> - <AppSelect - v-model="appStore.editor.wrap" - :options="wrapOptions" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.tabSize')"> - <AppInput - v-model="appStore.editor.tabSize" - type="number" - style="width: 100px" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.highlightLine')"> - <AppCheckbox - v-model="appStore.editor.highlightLine" - name="highlightLine" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.matchBrackets')"> - <AppCheckbox - v-model="appStore.editor.matchBrackets" - name="matchBrackets" - /> - </AppFormItem> - <h4>{{ i18n.t('preferences:editor.prettier.label') }}</h4> - <AppFormItem - :label="i18n.t('preferences:editor.prettier.trailingComma.label')" - > - <AppSelect - v-model="appStore.editor.trailingComma" - :options="trailingCommaOptions" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.prettier.semi')"> - <AppCheckbox - v-model="appStore.editor.semi" - name="semi" - /> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:editor.prettier.singleQuote')"> - <AppCheckbox - v-model="appStore.editor.singleQuote" - name="singleQuote" - /> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { store, i18n } from '@/electron' -import { useAppStore } from '@/store/app' -import { watch } from 'vue' - -const appStore = useAppStore() - -const wrapOptions = [ - { label: i18n.t('preferences:editor.wrap.wordWrap'), value: true }, - { label: i18n.t('preferences:editor.wrap.off'), value: false } -] - -const trailingCommaOptions = [ - { - label: i18n.t('preferences:editor.prettier.trailingComma.none'), - value: 'none' - }, - { - label: i18n.t('preferences:editor.prettier.trailingComma.all'), - value: 'all' - }, - { - label: i18n.t('preferences:editor.prettier.trailingComma.es5'), - value: 'es5' - } -] - -watch( - () => appStore.editor, - v => { - store.preferences.set('editor', { ...v }) - }, - { deep: true } -) -</script> - -<style lang="scss" scoped> -h4 { - &:first-child { - margin-top: 0; - } - margin-bottom: 0; -} -</style> diff --git a/src/renderer/components/preferences/LanguagePreferences.vue b/src/renderer/components/preferences/LanguagePreferences.vue deleted file mode 100644 index abf90e6d..00000000 --- a/src/renderer/components/preferences/LanguagePreferences.vue +++ /dev/null @@ -1,58 +0,0 @@ -<template> - <div class="language-preferences"> - <AppFormItem :label="i18n.t('preferences:language.label')"> - <AppSelect - v-model="localValue" - :options="options" - /> - - <AppButton - v-if="isChanged" - @click="onReload" - > - {{ i18n.t('restartApp') }} - </AppButton> - </AppFormItem> - </div> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import { computed, ref } from 'vue' -import { i18n, ipc } from '@/electron' -import { track } from '@/services/analytics' -import { language } from '../../../main/services/i18n/language' - -const appStore = useAppStore() - -const storedValue = ref(appStore.language) -const isChanged = ref(false) - -const localValue = computed({ - get: () => appStore.language, - set: v => { - if (v !== storedValue.value) { - isChanged.value = true - } else { - isChanged.value = false - } - appStore.setLang(v) - track('app/set-language', v) - } -}) - -const options: { label: string; value: string }[] = [] - -Object.entries(language).forEach(([k, v]) => { - options.push({ - label: v, - value: k - }) -}) - -const onReload = () => { - ipc.invoke('main:restart', {}) -} -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/preferences/MarkdownPreferences.vue b/src/renderer/components/preferences/MarkdownPreferences.vue deleted file mode 100644 index 8fe46786..00000000 --- a/src/renderer/components/preferences/MarkdownPreferences.vue +++ /dev/null @@ -1,53 +0,0 @@ -<template> - <div class="language-preferences"> - <AppForm> - <AppFormItem :label="i18n.t('preferences:markdown.codeRenderer')"> - <AppSelect - v-model="renderer" - :options="rendererOptions" - /> - <template #desc> - {{ i18n.t('special:description.codeBlockRenderer.0') }} - <a - href="#" - @click=" - onClickUrl( - 'https://github.com/massCodeIO/massCode/blob/master/src/renderer/components/editor/languages.ts' - ) - " - >{{ i18n.t('special:description.codeBlockRenderer.1') }}</a>. - </template> - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { i18n, store } from '@/electron' -import { useAppStore } from '@/store/app' -import { computed } from 'vue' -import { onClickUrl } from '@/composable' - -const appStore = useAppStore() - -const renderer = computed({ - get: () => appStore.markdown.codeRenderer, - set: v => { - appStore.markdown.codeRenderer = v - store.preferences.set('markdown', { ...appStore.markdown }) - } -}) - -const rendererOptions = [ - { - label: 'Codemirror', - value: 'codemirror' - }, - { - label: 'Highlight.js', - value: 'highlight.js' - } -] -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/preferences/StoragePreferences.vue b/src/renderer/components/preferences/StoragePreferences.vue deleted file mode 100644 index 6cecd530..00000000 --- a/src/renderer/components/preferences/StoragePreferences.vue +++ /dev/null @@ -1,223 +0,0 @@ -<template> - <div class="storage"> - <AppForm> - <AppFormItem :label="i18n.t('preferences:storage.label')"> - <AppInput - v-model="storagePath" - style="width: 100%" - readonly - /> - <template #actions> - <AppButton @click="onClickMove"> - {{ i18n.t('button.moveStorage') }} - </AppButton> - <AppButton @click="onClickOpen"> - {{ i18n.t('button.openStorage') }} - </AppButton> - <AppButton @click="onClickNew"> - {{ i18n.t('button.newStorage') }} - </AppButton> - <AppButton @click="onClickReload"> - {{ i18n.t('button.reloadStorage') }} - </AppButton> - </template> - <template #desc> - {{ i18n.t('special:description.storage') }} - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:storage.migrate')"> - <AppButton @click="onClickMigrate"> - {{ i18n.t('button.fromMassCodeV1') }} - </AppButton> - <AppButton @click="onClickMigrateFromSnippetsLab"> - {{ i18n.t('button.fromSnippetsLab') }} - </AppButton> - <template #desc> - {{ i18n.t('special:description.migrate.1') }} - <p>{{ i18n.t('special:description.migrate.2') }}</p> - <p> - {{ i18n.t('special:description.migrate.3.0') }} <br> - - {{ i18n.t('special:description.migrate.3.1') }}<br> - - {{ i18n.t('special:description.migrate.3.2') }} - </p> - </template> - </AppFormItem> - <AppFormItem :label="i18n.t('preferences:storage.count')"> - {{ snippetStore.all.length }} - {{ i18n.t('snippet.plural').toLowerCase() }}. - </AppFormItem> - </AppForm> - </div> -</template> - -<script setup lang="ts"> -import { ipc, store, db, i18n } from '@/electron' -import { track } from '@/services/analytics' -import { useFolderStore } from '@/store/folders' -import { useSnippetStore } from '@/store/snippets' -import type { MessageBoxRequest, DialogRequest } from '@shared/types/main' -import { ref } from 'vue' - -const snippetStore = useSnippetStore() -const folderStore = useFolderStore() - -const storagePath = ref(store.preferences.get('storagePath')) - -const onClickMove = async () => { - const path = await ipc.invoke<any, string>('main:open-dialog', {}) - - if (!path) return - - try { - await db.move(storagePath.value, path) - setStorageAndRestartApi(path) - track('app/move-storage') - } catch (err) { - const e = err as Error - ipc.invoke('main:notification', { - body: e.message - }) - console.error(err) - } -} - -const onClickOpen = async () => { - const path = await ipc.invoke<any, string>('main:open-dialog', {}) - const isExist = db.isExist(path) - - if (isExist) { - setStorageAndRestartApi(path, true) - snippetStore.getSnippets() - track('app/open-storage') - } else { - const message = i18n.t('special:error.folderNotContainDb') - ipc.invoke('main:notification', { - body: message - }) - console.error(message) - } -} - -const onClickNew = async () => { - const path = await ipc.invoke<any, string>('main:open-dialog', {}) - - const isExist = db.isExist(path) - - if (!isExist) { - store.preferences.set('storagePath', path) - setStorageAndRestartApi(path, true) - db.create() - track('app/new-storage') - } else { - await ipc.invoke<MessageBoxRequest, boolean>('main:open-message-box', { - message: i18n.t('special:error.folderContainDb'), - detail: i18n.t('dialog:createDb'), - buttons: [i18n.t('button.ok')] - }) - } -} - -const onClickMigrate = async () => { - const state = await ipc.invoke<MessageBoxRequest, boolean>( - 'main:open-message-box', - { - message: i18n.t('dialog:migrateConfirm.0', { name: 'v1' }), - detail: i18n.t('dialog:migrateConfirm.1'), - buttons: [i18n.t('button.confirm'), i18n.t('button.cancel')] - } - ) - - if (!state) return - - try { - const path = await ipc.invoke<any, string>('main:open-dialog', {}) - - if (!path) return - - await db.migrate(path) - - ipc.invoke('main:restart-api', {}) - - resetStore() - await snippetStore.getSnippets() - - ipc.invoke('main:notification', { - body: i18n.t('special:success.migrate') - }) - - track('app/migrate') - } catch (err) { - const e = err as Error - ipc.invoke('main:notification', { - body: e.message - }) - console.error(err) - } -} - -const onClickMigrateFromSnippetsLab = async () => { - const state = await ipc.invoke<MessageBoxRequest, boolean>( - 'main:open-message-box', - { - message: i18n.t('dialog:migrateConfirm.0', { name: 'SnippetsLab' }), - detail: i18n.t('dialog:migrateConfirm.1'), - buttons: [i18n.t('button.confirm'), i18n.t('button.cancel')] - } - ) - - if (!state) return - - try { - const path = await ipc.invoke<DialogRequest, string>('main:open-dialog', { - properties: ['openFile'] - }) - - if (!path) return - - db.migrateFromSnippetsLab(path) - - ipc.invoke('main:restart-api', {}) - - resetStore() - await snippetStore.getSnippets() - - ipc.invoke('main:notification', { - body: i18n.t('special:success.migrate') - }) - - track('app/migrate', 'from-snippets-lab') - } catch (err) { - const e = err as Error - ipc.invoke('main:notification', { - body: e.message - }) - console.error(err) - } -} - -const setStorageAndRestartApi = (path: string, reset?: boolean) => { - storagePath.value = path - store.preferences.set('storagePath', path) - - if (reset) resetStore() - - ipc.invoke('main:restart-api', {}) -} - -const resetStore = () => { - store.app.delete('selectedFolderAlias') - store.app.delete('selectedFolderId') - store.app.delete('selectedFolderIds') - store.app.delete('selectedSnippetId') - - snippetStore.$reset() - folderStore.$reset() -} - -const onClickReload = () => { - ipc.invoke('main:restart-api', {}) - snippetStore.getSnippets() -} -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/screenshot/ScreenshotPalette.vue b/src/renderer/components/screenshot/ScreenshotPalette.vue deleted file mode 100644 index 1a8bcc31..00000000 --- a/src/renderer/components/screenshot/ScreenshotPalette.vue +++ /dev/null @@ -1,70 +0,0 @@ -<template> - <div class="screenshot-palette"> - <div - v-for="(i, index) in palette" - :key="index" - class="item" - :class="{ 'is-selected': index === selected }" - :style="{ backgroundImage: `linear-gradient(45deg, ${i[0]}, ${i[1]})` }" - @click="onSelect(i)" - /> - </div> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import { computed } from 'vue' - -interface Props { - modelValue: [string, string] -} - -interface Emits { - (e: 'update:modelValue', value: [string, string]): void -} - -const emit = defineEmits<Emits>() - -const props = defineProps<Props>() - -const appStore = useAppStore() - -const palette: [string, string][] = [ - ['#D02F98', '#9439CA'], - ['#A58EFB', '#CEABF9'], - ['#FFE623', '#FFE623'], - ['#4169E1', '#4169E1'], - ['#FC3CAD', '#FC3CAD'], - ['#8E00A7', '#8E00A7'] -] - -const selected = computed(() => - palette.findIndex(i => i.every((c, idx) => c === props.modelValue[idx])) -) - -const onSelect = (value: [string, string]) => { - emit('update:modelValue', value) -} - -const itemBorderColor = computed(() => - appStore.isLightTheme ? '#fff' : 'var(--color-contrast-high' -) -</script> - -<style lang="scss" scoped> -.screenshot-palette { - display: flex; - gap: var(--spacing-xs); - .item { - padding: 2px; - border: 2px solid v-bind(itemBorderColor); - width: 18px; - height: 18px; - border-radius: 4px; - outline: 1px solid var(--color-border); - &.is-selected { - outline-color: var(--color-primary); - } - } -} -</style> diff --git a/src/renderer/components/screenshot/TheScreenshot.vue b/src/renderer/components/screenshot/TheScreenshot.vue deleted file mode 100644 index 5deab7af..00000000 --- a/src/renderer/components/screenshot/TheScreenshot.vue +++ /dev/null @@ -1,393 +0,0 @@ -<template> - <div class="snippet-screenshot"> - <SnippetHeaderTools> - <div class="left"> - <div class="tools__item"> - <AppCheckbox - v-model="appStore.screenshot.background" - name="background" - :label="i18n.t('background')" - /> - </div> - <div class="tools__item"> - <AppCheckbox - v-model="appStore.screenshot.darkMode" - name="darkMode" - :label="i18n.t('darkMode')" - /> - </div> - <div class="tools__item"> - <ScreenshotPalette v-model="appStore.screenshot.gradient" /> - </div> - </div> - <div class="right"> - <AppActionButton - v-tooltip="`${i18n.t('button.saveAs')} PNG`" - @click="onSaveScreenshot('png')" - > - PNG - <UniconsFileDownload /> - </AppActionButton> - <AppActionButton - v-tooltip="`${i18n.t('button.saveAs')} SVG`" - @click="onSaveScreenshot('svg')" - > - SVG - <UniconsFileDownload /> - </AppActionButton> - </div> - </SnippetHeaderTools> - <PerfectScrollbar> - <div class="content"> - <div - ref="frameRef" - class="frame" - > - <div - ref="snippetRef" - class="background" - :style="colorBgStyle" - > - <div class="body"> - <div class="window-controls"> - <svg - xmlns="http://www.w3.org/2000/svg" - width="54" - height="14" - viewBox="0 0 54 14" - > - <g - fill="none" - fill-rule="evenodd" - transform="translate(1 1)" - > - <circle - cx="6" - cy="6" - r="6" - fill="#FF5F56" - stroke="#E0443E" - stroke-width=".5" - /> - <circle - cx="26" - cy="6" - r="6" - fill="#FFBD2E" - stroke="#DEA123" - stroke-width=".5" - /> - <circle - cx="46" - cy="6" - r="6" - fill="#27C93F" - stroke="#1AAB29" - stroke-width=".5" - /> - </g> - </svg> - </div> - <div ref="editorRef" /> - </div> - </div> - <div class="transparent" /> - <div - ref="gutterRef" - class="gutter" - /> - </div> - </div> - </PerfectScrollbar> - </div> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import interact from 'interactjs' -import { computed, onMounted, ref, watch } from 'vue' -import { store, i18n } from '@/electron' -import { track } from '@/services/analytics' -import { useSnippetStore } from '@/store/snippets' -import { useMagicKeys } from '@vueuse/core' -import domToImage from 'dom-to-image' -import CodeMirror from 'codemirror' -import { getThemeName } from '../editor/themes' - -const GUTTER_RIGHT_OFFSET = 10 -const GUTTER_WIDTH = 8 -const MAX_WIDTH = 920 -const MIN_WIDTH = 520 - -interface Props { - snippet: string - lang: string - name: string -} - -const props = defineProps<Props>() - -const appStore = useAppStore() -const snippetStore = useSnippetStore() -// eslint-disable-next-line camelcase -const { escape, Meta_C, Ctrl_C } = useMagicKeys() - -const frameRef = ref<HTMLElement>() -const snippetRef = ref<HTMLElement>() -const gutterRef = ref<HTMLElement>() -const editorRef = ref<HTMLElement>() - -const gutterWidth = ref(GUTTER_WIDTH + 'px') -const offsetGutterRight = ref(GUTTER_RIGHT_OFFSET + 'px') - -const forceRefresh = ref() - -const frameWidthC = computed(() => appStore.screenshot.width + 'px') -const transparentOpacity = computed(() => - appStore.isLightTheme ? '75%' : '10%' -) -const colorBodyBg = computed(() => - appStore.screenshot.darkMode ? '#263238' : '#fff' -) -const colorBgStyle = computed(() => { - if (!appStore.screenshot.background) return - return { - backgroundImage: `linear-gradient(45deg, ${appStore.screenshot.gradient[0]}, ${appStore.screenshot.gradient[1]})` - } -}) -const fontSize = computed(() => appStore.editor.fontSize + 'px') -const fontFamily = computed(() => appStore.editor.fontFamily) - -let editor: CodeMirror.Editor - -const height = computed(() => { - // eslint-disable-next-line no-unused-expressions - forceRefresh.value - - const result = - appStore.sizes.editor.titleHeight + - appStore.sizes.titlebar + - appStore.sizes.editor.footerHeight - - return window.innerHeight - result + 'px' -}) - -const setValue = (value: string) => { - if (!editor) return - - const cursor = editor.getCursor() - editor.setValue(value) - - if (cursor) editor.setCursor(cursor) -} - -const setLang = (lang: string) => { - if (!editor) return - editor.setOption('mode', lang) -} - -const setTheme = (theme: string) => { - if (!editor) return - editor.setOption('theme', theme) -} - -const init = () => { - editor = CodeMirror(editorRef.value!, { - value: props.snippet, - mode: props.lang, - theme: appStore.screenshot.darkMode - ? getThemeName('dark:material') - : getThemeName('light:github'), - lineNumbers: false, - lineWrapping: true, - tabSize: appStore.editor.tabSize, - scrollbarStyle: 'null', - readOnly: true - }) - - interact(frameRef.value!).resizable({ - allowFrom: gutterRef.value!, - onmove: e => { - const { pageX } = e - const gutterOffset = GUTTER_RIGHT_OFFSET + GUTTER_WIDTH / 2 - const width = Math.floor( - pageX - - appStore.sizes.sidebar - - appStore.sizes.snippetList + - gutterOffset - ) - - appStore.screenshot.width = width - - if (width < MIN_WIDTH) { - appStore.screenshot.width = 520 - } - - if (width > MAX_WIDTH) { - appStore.screenshot.width = 920 - } - } - }) -} - -const onSaveScreenshot = async (type: 'png' | 'svg' = 'png') => { - let data = '' - - if (type === 'png') { - data = await domToImage.toPng(snippetRef.value!) - } - - if (type === 'svg') { - data = await domToImage.toSvg(snippetRef.value!) - } - - const a = document.createElement('a') - a.href = data - a.download = `${props.name}.${type}` - a.click() - - track('snippets/create-screenshot') -} - -const copyToClipboard = async () => { - const data = await domToImage.toBlob(snippetRef.value!) - navigator.clipboard.write([new ClipboardItem({ 'image/png': data })]) - track('snippets/create-screenshot') -} - -watch( - () => appStore.screenshot.darkMode, - v => { - if (v) { - setTheme(getThemeName('dark:material')!) - } else { - setTheme(getThemeName('light:github')!) - } - } -) - -watch( - () => appStore.screenshot, - v => { - store.preferences.set('screenshot', JSON.parse(JSON.stringify(v))) - }, - { deep: true } -) - -watch( - () => props.snippet, - v => setValue(v) -) -watch( - () => props.lang, - v => setLang(v) -) - -watch(escape, () => { - snippetStore.isScreenshotPreview = false -}) - -watch(Meta_C, v => { - if (v) { - copyToClipboard() - } -}) -watch(Ctrl_C, v => { - if (v) { - copyToClipboard() - } -}) - -onMounted(() => { - init() -}) - -window.addEventListener('resize', () => { - forceRefresh.value = Math.random() -}) -</script> - -<style lang="scss" scoped> -.snippet-screenshot { - --color-bg-transparent: hsla(0, 0%, v-bind(transparentOpacity)); - - :deep(pre) { - white-space: pre-wrap; - font-size: 12px; - } - :deep(.ps) { - height: v-bind(height); - } - :deep(.CodeMirror) { - height: 100%; - font-size: v-bind(fontSize); - font-family: v-bind(fontFamily); - line-height: calc(v-bind(fontSize) * 1.5); - } - .left { - gap: var(--spacing-sm); - align-items: center; - display: flex; - } - .right { - display: flex; - } - .content { - flex: 1; - display: flex; - } - .frame { - position: relative; - width: v-bind(frameWidthC); - min-width: 520px; - max-width: 920px; - } - - .background { - position: relative; - padding: var(--spacing-lg); - z-index: 10; - } - .transparent { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-image: linear-gradient( - 45deg, - var(--color-bg-transparent) 25%, - transparent 0 - ), - linear-gradient(-45deg, var(--color-bg-transparent) 25%, transparent 0), - linear-gradient(45deg, transparent 75%, var(--color-bg-transparent) 0), - linear-gradient(-45deg, transparent 75%, var(--color-bg-transparent) 0); - background-size: 20px 20px; - background-position: 0 0, 0 10px, 10px -10px, -10px 0; - z-index: 1; - } - - .gutter { - position: absolute; - width: v-bind(gutterWidth); - height: 40px; - background-color: var(--color-contrast-medium); - right: v-bind(offsetGutterRight); - border-radius: 10px; - top: 50%; - transform: translateY(-50%); - z-index: 100; - cursor: col-resize; - } - - .body { - padding: var(--spacing-sm); - border-radius: 12px; - background-color: v-bind(colorBodyBg); - user-select: none; - .window-controls { - margin-bottom: var(--spacing-xs); - } - } -} -</style> diff --git a/src/renderer/components/sidebar/Sidebar.vue b/src/renderer/components/sidebar/Sidebar.vue new file mode 100644 index 00000000..92d6e9ee --- /dev/null +++ b/src/renderer/components/sidebar/Sidebar.vue @@ -0,0 +1,179 @@ +<script setup lang="ts"> +import type { Node } from '@/components/sidebar/folders/types' +import type { FoldersTreeResponse } from '@/services/api/generated' +import { useApp, useGutter, useSnippets } from '@/composables' +import { LibraryFilter } from '@/composables/types' +import { store } from '@/electron' +import { api } from '@/services/api' +import { Archive, Inbox, Plus, Star, Trash } from 'lucide-vue-next' +import { APP_DEFAULTS } from '~/main/store/constants' +import Tree from './folders/Tree.vue' +import LibraryItem from './library/Item.vue' + +const sidebarRef = ref<HTMLElement>() +const gutterRef = ref<{ $el: HTMLElement }>() + +const { sidebarWidth, selectFolder } = useApp() +const { getSnippets, selectFirstSnippet, searchQuery } = useSnippets() + +const { width } = useGutter( + sidebarRef, + gutterRef, + Number.parseInt(sidebarWidth.value as string), + APP_DEFAULTS.sizes.sidebar, +) + +const folders = ref<FoldersTreeResponse>() + +const libraryItems = [ + { id: LibraryFilter.Inbox, name: 'Inbox', icon: Inbox }, + { id: LibraryFilter.Favorites, name: 'Favorites', icon: Star }, + { id: LibraryFilter.All, name: 'All Snippets', icon: Archive }, + { id: LibraryFilter.Trash, name: 'Trash', icon: Trash }, +] + +async function getFolders() { + const { data } = await api.folders.getFoldersTree() + folders.value = data +} + +getFolders() + +async function onFolderClick(id: number) { + selectFolder(id) + await getSnippets({ folderId: id }) + selectFirstSnippet() + + searchQuery.value = '' +} + +async function onFolderToggle(node: Node) { + try { + const { id, name, icon, defaultLanguage, parentId, isOpen, orderIndex } + = node + + await api.folders.putFoldersById(String(id), { + name, + icon, + defaultLanguage, + parentId, + isOpen: !isOpen ? 1 : 0, + orderIndex, + }) + + await getFolders() + } + catch (error) { + console.error('Folder update error:', error) + } +} + +async function onFolderDrag({ + node, + target, + position, +}: { + node: Node + target: Node + position: string +}) { + try { + const isDraggingUp = node.orderIndex > target.orderIndex + + // Определяем новые значения для parentId и orderIndex + let newParentId: number | null = null + let newOrderIndex: number = 0 + + if (position === 'center') { + // Перемещение внутрь целевой папки + newParentId = Number(target.id) + newOrderIndex = target.children?.length || 0 + } + else { + // Перемещение до или после целевой папки + newParentId = target.parentId || null + if (node.parentId === target.parentId) { + // Если перемещаем внутри одного списка, корректируем по направлению и позиции + if (position === 'after') { + newOrderIndex = isDraggingUp + ? target.orderIndex + 1 + : target.orderIndex + } + else { + newOrderIndex = isDraggingUp + ? target.orderIndex + : Math.max(target.orderIndex - 1, 0) + } + } + else { + // Если перемещение в другой родительский элемент + newOrderIndex + = position === 'after' ? target.orderIndex + 1 : target.orderIndex + } + } + + await api.folders.putFoldersById(String(node.id), { + name: node.name, + icon: node.icon || null, + defaultLanguage: node.defaultLanguage || 'plain_text', + parentId: newParentId, + isOpen: node.isOpen ? 1 : 0, + orderIndex: newOrderIndex, + }) + + await getFolders() + } + catch (error) { + console.error('Folder update error:', error) + } +} + +watch(width, () => { + sidebarWidth.value = `${width.value}px` + store.app.set('sidebarWidth', width.value) +}) +</script> + +<template> + <div + ref="sidebarRef" + data-sidebar + class="relative flex h-screen flex-col px-1 pt-[var(--title-bar-height)]" + > + <div class="flex-shrink-0 pt-2"> + <div class="pb-1 pl-1 text-[10px] font-bold uppercase"> + Library / Tags + </div> + <div class=""> + <LibraryItem + v-for="i in libraryItems" + :id="i.id" + :key="i.name" + :name="i.name" + :icon="i.icon" + /> + </div> + </div> + <div class="flex items-center justify-between pt-2 pl-1"> + <div class="text-[10px] font-bold uppercase"> + Folders + </div> + <UiButton + variant="icon" + size="icon" + > + <Plus class="h-4 w-4" /> + </UiButton> + </div> + <div class="flex-grow overflow-auto"> + <Tree + v-if="folders" + v-model="folders" + @click-node="onFolderClick" + @toggle-node="onFolderToggle" + @drag-node="onFolderDrag" + /> + </div> + <UiGutter ref="gutterRef" /> + </div> +</template> diff --git a/src/renderer/components/sidebar/SidebarList.vue b/src/renderer/components/sidebar/SidebarList.vue deleted file mode 100644 index 2cb99b87..00000000 --- a/src/renderer/components/sidebar/SidebarList.vue +++ /dev/null @@ -1,166 +0,0 @@ -<template> - <div - ref="listRef" - class="sidebar-list" - :class="{ - 'is-scrollable': isScrollable || modelValue === 'tags', - 'is-tags': modelValue === 'tags' - }" - > - <div class="sidebar-list__header"> - <div class="sidebar-list__title"> - <h6 v-if="!tabs"> - {{ title }} - </h6> - <h6> - <span - v-for="i in tabs" - :key="i.value" - class="tab-header" - :class="{ active: modelValue === i.value }" - @click="onClickTab(i.value)" - >{{ i.label }}</span> - </h6> - </div> - <div class="sidebar-list__action"> - <slot name="action" /> - </div> - </div> - <div - ref="bodyRef" - class="body" - :class="{ 'is-system': isSystem }" - > - <PerfectScrollbar v-if="isScrollable || modelValue === 'tags'"> - <div class="inner"> - <slot /> - </div> - </PerfectScrollbar> - <div - v-else - class="inner" - > - <slot /> - </div> - </div> - </div> -</template> - -<script setup lang="ts"> -import { computed, nextTick, onUnmounted, ref } from 'vue' -import type { Tab, Tabs } from '@shared/types/renderer/sidebar' -import { emitter, setScrollPosition } from '@/composable' - -interface Props { - title?: string - tabs?: Tabs[] - modelValue?: Tab - isSystem?: boolean - isScrollable?: boolean - type?: 'folders' | 'tags' -} - -interface Emits { - (e: 'update:modelValue', value: Tab): void -} - -const emit = defineEmits<Emits>() - -const props = withDefaults(defineProps<Props>(), { - isSystem: false -}) - -const bodyRef = ref<HTMLElement>() -const listRef = ref<HTMLElement>() - -const activeTab = computed({ - get: () => props.modelValue, - set: v => { - emit('update:modelValue', v!) - } -}) - -const onClickTab = (tab: Tab) => { - activeTab.value = tab -} - -emitter.on('scroll-to:folder', id => { - if (props.isSystem) return - - nextTick(() => { - const el = document.querySelector<HTMLElement>(`[data-id='${id}']`) - - if (!el) return - - const bounding = el.getBoundingClientRect() - const listHeight = listRef.value!.offsetHeight - - const OFFSET = 210 // высота списка системных папок + заголовки - const SHIFT = bounding.top - OFFSET - - if (SHIFT > listHeight || bounding.top < 0) { - setScrollPosition(bodyRef.value!, SHIFT) - } - }) -}) - -onUnmounted(() => { - emitter.off('scroll-to:folder') -}) -</script> - -<style lang="scss" scoped> -.sidebar-list { - margin-bottom: var(--spacing-xs); - .body { - .inner { - padding: 0 var(--spacing-xs); - } - } - // overflow: hidden; - &.is-scrollable { - :deep(.ps) { - height: calc(100vh - 190px); - } - &.is-tags { - :deep(.ps) { - height: calc(100vh - 50px); - } - } - } - &__header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 2px 0; - } - &__title { - h6 { - color: var(--color-text); - } - } - &__title, - &__action { - display: inline-block; - padding: 0 var(--spacing-xs); - } - .tab-header { - color: var(--color-text-3); - padding: var(--spacing-xs) 0; - -webkit-user-select: none; - &.active { - color: var(--color-text); - } - &:after { - content: '/'; - margin: 0 5px; - color: var(--color-text-3); - } - &:last-child { - &:after { - display: none; - } - } - } -} -</style> diff --git a/src/renderer/components/sidebar/SidebarListItem.vue b/src/renderer/components/sidebar/SidebarListItem.vue deleted file mode 100644 index a4bd85c8..00000000 --- a/src/renderer/components/sidebar/SidebarListItem.vue +++ /dev/null @@ -1,266 +0,0 @@ -<template> - <div - ref="itemRef" - class="item" - :class="{ - 'is-selected': isSelected, - 'is-focused': isFocused, - 'is-system': isSystem, - 'is-tag': isTag - }" - @click="isFocused = true" - @contextmenu="onClickContextMenu" - > - <span class="icon"> - <Component - :is="AngleRight" - v-if="nested" - class="nested" - :class="{ open: open }" - /> - <Component - :is="icon || Folder" - v-if="!model?.icon" - /> - - <AppFolderIconsItem - v-else - class="folder" - :name="(model.icon as string)" - /> - </span> - <slot /> - </div> -</template> - -<script setup lang="ts"> -import type { FunctionalComponent } from 'vue' -import { watch, ref } from 'vue' -import Folder from '~icons/unicons/folder' -import AngleRight from '~icons/unicons/angle-right' -import { onClickOutside } from '@vueuse/core' -import { ipc } from '@/electron' -import { track } from '@/services/analytics' -import type { - ContextMenuRequest, - ContextMenuResponse, - ContextMenuType -} from '@shared/types/main' -import { useFolderStore } from '@/store/folders' -import { useTagStore } from '@/store/tags' -import type { FolderTree } from '@shared/types/main/db' -import { useSnippetStore } from '@/store/snippets' -import { emitter } from '@/composable' -import { onScrollToFolder } from './composable' -import { useAppStore } from '@/store/app' - -interface Props { - id?: string - icon?: FunctionalComponent - isSystem?: boolean - nested?: boolean - open?: boolean - isSelected?: boolean - isTag?: boolean - isFolder?: boolean - model?: FolderTree - alias?: ContextMenuType - name?: string -} - -const props = withDefaults(defineProps<Props>(), { - nested: false, - open: false -}) - -const appStore = useAppStore() -const folderStore = useFolderStore() -const snippetStore = useSnippetStore() -const tagStore = useTagStore() - -const isFocused = ref(false) -const itemRef = ref() - -const onClickContextMenu = async () => { - if (props.isFolder) { - const { action, type, data } = await ipc.invoke< - ContextMenuRequest, - ContextMenuResponse - >('context-menu:library', { - name: props.model?.name, - type: 'folder', - data: JSON.parse(JSON.stringify(props.model)) - }) - - if (action === 'set-custom-icon') { - appStore.showModal = true - folderStore.selectedContextId = props.model?.id - } - - if (action === 'new') { - await folderStore.addNewFolder() - track('folders/add-new') - } - - if (action === 'delete') { - await folderStore.deleteFoldersById(props.id!) - track('folders/delete') - } - - if (action === 'rename') { - emitter.emit('folder:rename', props.id!) - } - - if (action === 'update:language') { - await folderStore.patchFoldersById(props.id!, { defaultLanguage: data }) - track('folders/set-language', data) - } - - if (action === 'collapse-all') { - folderStore.openFolders('close') - } - - if (action === 'expand-all') { - folderStore.openFolders('open') - } - } - - if (props.alias) { - const { action, type, data } = await ipc.invoke< - ContextMenuRequest, - ContextMenuResponse - >('context-menu:library', { - name: props.name, - type: 'trash', - data: {} - }) - - if (action === 'delete') { - snippetStore.emptyTrash() - await snippetStore.getSnippets() - track('app/empty-trash') - - if (folderStore.selectedAlias === 'trash') { - snippetStore.setSnippetsByAlias('trash') - } - } - } - - if (props.isTag) { - const { action, type, data } = await ipc.invoke< - ContextMenuRequest, - ContextMenuResponse - >('context-menu:library', { - name: props.name, - type: 'tag', - data: {} - }) - - if (action === 'delete') { - await tagStore.deleteTagById(props.id!) - track('tags/delete') - - if (props.id === tagStore.selectedId) { - tagStore.selectedId = undefined - } - - if (tagStore.tags.length) { - const firstTagId = tagStore.tags[0].id - tagStore.selectedId = firstTagId - snippetStore.setSnippetsByTagId(firstTagId) - } else { - snippetStore.selected = undefined - snippetStore.snippets = [] - } - } - } -} - -onClickOutside(itemRef, () => { - isFocused.value = false -}) - -onScrollToFolder(isFocused) - -watch( - () => props.isSelected, - v => { - if (!v) isFocused.value = false - } -) -</script> - -<style lang="scss" scoped> -.item { - display: flex; - align-items: center; - padding: 4px 0; - position: relative; - width: 100%; - z-index: 2; - user-select: none; - &.is-system, - &.is-tag { - padding-left: var(--spacing-sm); - padding-right: var(--spacing-sm); - } - &.is-focused, - &.is-selected, - &.is-highlighted { - &::before { - content: ''; - position: absolute; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - border-radius: 5px; - z-index: -1; - } - :deep(svg) { - fill: var(--color-sidebar-icon-selected); - } - } - &.is-focused { - &.is-system, - &.is-tag { - color: #fff; - :deep(svg) { - fill: #fff; - } - } - .icon { - :deep(svg) { - fill: var(--color-sidebar-icon-selected); - } - } - } - &.is-selected { - &::before { - background-color: var(--color-sidebar-item-selected); - } - - &.is-focused { - &::before { - background-color: var(--color-primary); - } - } - } - .icon { - margin-right: var(--spacing-xs); - display: flex; - align-items: center; - height: 1.2em; - :deep(svg) { - fill: var(--color-sidebar-icon); - } - } - .nested { - position: absolute; - left: 0; - &.open { - transform: rotate(90deg); - } - } -} -</style> diff --git a/src/renderer/components/sidebar/TheFolder.vue b/src/renderer/components/sidebar/TheFolder.vue deleted file mode 100644 index 060b65ef..00000000 --- a/src/renderer/components/sidebar/TheFolder.vue +++ /dev/null @@ -1,88 +0,0 @@ -<template> - <div - class="folder" - @dblclick="isEdit = true" - @keypress="onKyePress" - > - <div - v-if="!isEdit" - class="name" - > - {{ name }} - </div> - <input - v-else - ref="inputRef" - v-model="localName" - type="text" - > - </div> -</template> - -<script setup lang="ts"> -import { emitter } from '@/composable' -import { useFolderStore } from '@/store/folders' -import { onClickOutside } from '@vueuse/core' -import { computed, nextTick, onUnmounted, ref, watch } from 'vue' - -interface Props { - id: string - name: string -} - -const props = defineProps<Props>() -const folderStore = useFolderStore() - -const backupName = ref(props.name) -const isEdit = ref(false) - -const inputRef = ref<HTMLInputElement>() - -const localName = computed({ - get: () => props.name, - set: v => folderStore.patchFoldersById(props.id, { name: v }) -}) - -onClickOutside(inputRef, async () => { - isEdit.value = false - if (!props.name) { - await folderStore.patchFoldersById(props.id, { name: backupName.value }) - } - backupName.value = props.name -}) - -const onKyePress = (e: KeyboardEvent) => { - if (e.code === 'Enter') isEdit.value = false -} - -watch(isEdit, () => { - nextTick(() => inputRef.value?.select()) -}) - -const onRename = (id: string) => { - if (id === props.id) isEdit.value = true -} - -emitter.on('folder:rename', onRename) - -onUnmounted(() => { - emitter.off('folder:rename', onRename) -}) -</script> - -<style lang="scss" scoped> -.folder { - width: 100%; - input { - border: 0; - background: #fff; - outline: var(--color-primary) solid 1px; - width: 95%; - padding: 0; - margin: 0; - } -} -.name { - user-select: none; -} -</style> diff --git a/src/renderer/components/sidebar/TheSidebar.vue b/src/renderer/components/sidebar/TheSidebar.vue deleted file mode 100644 index 520905ca..00000000 --- a/src/renderer/components/sidebar/TheSidebar.vue +++ /dev/null @@ -1,258 +0,0 @@ -<template> - <div - ref="sidebarRef" - class="sidebar" - > - <SidebarList - v-model="activeTab" - :tabs="tabs" - :is-system="true" - > - <template v-if="activeTab === 'library'"> - <SidebarListItem - v-for="i in systemFolders" - :key="i.name" - :icon="i.icon" - :is-system="true" - :alias="i.alias" - :is-selected="i.alias === folderStore.selectedAlias" - @click="onClickSystemFolder(i.alias)" - > - {{ i.name }} - </SidebarListItem> - </template> - <template v-if="activeTab === 'tags'"> - <SidebarListItem - v-for="i in tagStore.tags" - :id="i.id" - :key="i.id" - :name="i.name" - :icon="LabelAlt" - :is-tag="true" - :is-selected="i.id === tagStore.selectedId" - @click="onClickTag(i.id)" - > - {{ i.name }} - </SidebarListItem> - </template> - </SidebarList> - <SidebarList - v-if="activeTab === 'library'" - :is-scrollable="true" - :title="i18n.t('sidebar.folders')" - type="folders" - > - <template #action> - <AppActionButton v-tooltip="i18n.t('newFolder')"> - <UniconsPlus @click="onAddNewFolder" /> - </AppActionButton> - </template> - <AppTree - ref="treeRef" - v-model="folderStore.foldersTree" - :selected-id="folderStore.selectedId" - :context-menu-handler="contextMenuHandler" - :focus-handler="focusHandler" - @update:model-value="onUpdate" - @click:node="onClickFolder" - > - <template #default="{ node }"> - <SidebarListItem - :id="node.id" - :data-id="node.id" - :is-folder="true" - :model="node" - @drop="onDrop($event, node.id)" - @dragover.prevent - @dragenter="onDragEnter(node.id)" - > - <TheFolder - :id="node.id" - :name="node.name" - /> - </SidebarListItem> - </template> - </AppTree> - </SidebarList> - <div - ref="gutterRef" - class="gutter-line" - /> - </div> -</template> - -<script setup lang="ts"> -import type { Ref } from 'vue' -import { onMounted, ref, watch } from 'vue' -import type { - SidebarSystemFolder, - SystemFolderAlias, - Tab, - Tabs -} from '@shared/types/renderer/sidebar' -import Inbox from '~icons/unicons/inbox' -import Favorite from '~icons/unicons/favorite' -import Archive from '~icons/unicons/archive' -import Trash from '~icons/unicons/trash' -import LabelAlt from '~icons/unicons/label-alt' -import { useFolderStore } from '@/store/folders' -import { useSnippetStore } from '@/store/snippets' -import { ipc, store, i18n } from '@/electron' -import { useTagStore } from '@/store/tags' -import { emitter, onAddNewFolder } from '@/composable' -import interact from 'interactjs' -import { useAppStore } from '@/store/app' -import type { Snippet } from '@shared/types/main/db' -import { onScrollToFolder } from './composable' - -const folderStore = useFolderStore() -const snippetStore = useSnippetStore() -const tagStore = useTagStore() -const appStore = useAppStore() - -const treeRef = ref() -const sidebarRef = ref() -const gutterRef = ref() - -const systemFolders: SidebarSystemFolder[] = [ - { name: i18n.t('sidebar.inbox'), alias: 'inbox', icon: Inbox }, - { name: i18n.t('sidebar.favorites'), alias: 'favorites', icon: Favorite }, - { name: i18n.t('sidebar.allSnippets'), alias: 'all', icon: Archive }, - { name: i18n.t('sidebar.trash'), alias: 'trash', icon: Trash } -] - -const tabs: Tabs[] = [ - { label: i18n.t('sidebar.library'), value: 'library' }, - { label: i18n.t('sidebar.tags'), value: 'tags' } -] - -const activeTab = ref<Tab>('library') - -const onClickFolder = async (id: string) => { - folderStore.selectId(id) - await snippetStore.setSnippetsByFolderIds(true) - snippetStore.searchQuery = '' - appStore.addToHistory(snippetStore.snippets[0]?.id) - emitter.emit('folder:click', id) -} - -const onClickSystemFolder = (alias: SystemFolderAlias) => { - snippetStore.setSnippetsByAlias(alias) - snippetStore.searchQuery = '' -} - -const onClickTag = (id: string) => { - snippetStore.setSnippetsByTagId(id) - tagStore.selectedId = id -} - -const contextMenuHandler = () => { - return new Promise<boolean>(resolve => { - ipc.once('context-menu:close', () => resolve(false)) - }) -} - -const onUpdate = async () => { - await folderStore.updateFoldersTable() -} - -const onDrop = async (e: DragEvent, id: string) => { - const payload = e.dataTransfer?.getData('payload') - - if (payload) { - const snippetIds = JSON.parse(payload) - - for (const i of snippetIds) { - const isDeleted = snippetStore.snippets.find(s => s.id === i)?.isDeleted - - const body: Partial<Snippet> = { - folderId: id - } - - if (isDeleted) body.isDeleted = false - - await snippetStore.patchSnippetsById(i, body) - } - - if (folderStore.selectedIds) { - snippetStore.getSnippetsByFolderIds(folderStore.selectedIds) - } - - if (folderStore.selectedAlias) { - await snippetStore.setSnippetsByAlias(folderStore.selectedAlias) - } - } -} - -const onDragEnter = (id: string) => { - folderStore.hoveredId = id -} - -const focusHandler = (isFocused: Ref) => { - onScrollToFolder(isFocused) -} - -onMounted(() => { - interact(sidebarRef.value).resizable({ - allowFrom: gutterRef.value, - onmove: e => { - const { pageX } = e - const minWidth = 100 - - if (pageX < minWidth) return - const width = Math.floor(pageX) - appStore.sizes.sidebar = width - store.app.set('sidebarWidth', width) - } - }) -}) - -watch( - () => folderStore.hoveredId, - v => { - if (treeRef.value) { - treeRef.value.setHoveredNodeId(v) - } - } -) - -watch( - () => activeTab.value, - async v => { - if (v === 'library') { - if (folderStore.selectedAlias) { - snippetStore.setSnippetsByAlias(folderStore.selectedAlias) - } else { - await snippetStore.setSnippetsByFolderIds(true) - return - } - } - - if (v === 'tags' && tagStore.selectedId) { - snippetStore.setSnippetsByTagId(tagStore.selectedId) - } else { - snippetStore.selected = undefined - snippetStore.snippets = [] - snippetStore.selectedMultiple = [] - } - } -) -</script> - -<style lang="scss" scoped> -.sidebar { - padding-top: var(--title-bar-height); - position: relative; - background-color: var(--color-sidebar); - display: flex; - flex-flow: column; - height: 100%; - overflow: hidden; - &__actions { - display: flex; - align-items: center; - justify-content: flex-end; - padding: 0 var(--spacing-xs); - } -} -</style> diff --git a/src/renderer/components/sidebar/composable.ts b/src/renderer/components/sidebar/composable.ts deleted file mode 100644 index 724c9eb0..00000000 --- a/src/renderer/components/sidebar/composable.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { emitter } from '@/composable' -import { onUnmounted } from 'vue' -import type { Ref } from 'vue' - -export const onScrollToFolder = (isFocused: Ref) => { - if (!isFocused) return - - const handler = () => { - isFocused.value = false - } - - emitter.on('scroll-to:folder', handler) - - onUnmounted(() => { - emitter.off('scroll-to:folder', handler) - }) -} diff --git a/src/renderer/components/sidebar/folders/Tree.vue b/src/renderer/components/sidebar/folders/Tree.vue new file mode 100644 index 00000000..11808dde --- /dev/null +++ b/src/renderer/components/sidebar/folders/Tree.vue @@ -0,0 +1,75 @@ +<script setup lang="ts"> +import type { Ref } from 'vue' +import type { Node } from './types' +import { treeKeys } from './keys' +import TreeNode from './TreeNode.vue' + +interface Props { + modelValue: Node[] + selectedId?: string | number + contextMenuHandler?: () => Promise<boolean> + focusHandler?: (isFocused: Ref) => void +} + +interface Emits { + (e: 'update:modelValue', value: Node[]): void + (e: 'clickNode', value: string | number): void + (e: 'dragNode', value: { node: Node, target: Node, position: string }): void + (e: 'toggleNode', value: Node): void +} + +const props = withDefaults(defineProps<Props>(), { + contextMenuHandler: () => Promise.resolve(true), +}) + +const emit = defineEmits<Emits>() + +const hoveredNodeId = ref('') +const isHoveredByIdDisabled = ref(false) + +function clickNode(id: string | number) { + return emit('clickNode', id) +} +function dragNode(node: Node, target: Node, position: string) { + return emit('dragNode', { node, target, position }) +} +function toggleNode(node: Node) { + return emit('toggleNode', node) +} + +provide(treeKeys, { + clickNode, + dragNode, + toggleNode, + isHoveredByIdDisabled, + focusHandler: props.focusHandler, +}) +</script> + +<template> + <div + data-folder-tree + class="pt-1" + > + <TreeNode + v-for="(node, index) in modelValue" + :key="node.id" + :node="node" + :nodes="modelValue" + :index="index" + :hovered-node-id="hoveredNodeId" + > + <template #default="slotProps"> + <slot + v-if="slotProps && slotProps.node" + :node="slotProps.node" + :deep="slotProps.deep" + :hovered-node-id="hoveredNodeId" + /> + <template v-else> + {{ node.name }} + </template> + </template> + </TreeNode> + </div> +</template> diff --git a/src/renderer/components/sidebar/folders/TreeNode.vue b/src/renderer/components/sidebar/folders/TreeNode.vue new file mode 100644 index 00000000..25b3b221 --- /dev/null +++ b/src/renderer/components/sidebar/folders/TreeNode.vue @@ -0,0 +1,328 @@ +<script setup lang="ts"> +import type { CSSProperties } from 'vue' +import type { Node, Position } from './types' +import { useApp } from '@/composables' +import { onClickOutside } from '@vueuse/core' +import { ChevronRight, Folder } from 'lucide-vue-next' +import { isAllowed, store } from './composables' +import { treeKeys } from './keys' + +interface Props { + index: number + deep?: number + node: Node + nodes: Node[] + indent?: number + hoveredNodeId?: string +} + +const props = withDefaults(defineProps<Props>(), { + index: 0, + deep: 0, + indent: 10, +}) + +const { clickNode, dragNode, toggleNode, isHoveredByIdDisabled, focusHandler } + = inject(treeKeys)! + +const { highlightedFolderId, selectedFolderId } = useApp() + +const hoveredId = ref() +const overPosition = ref<Position>() +const isDragged = ref(false) +const isFocused = ref(false) + +const rowRef = ref<HTMLElement>() + +const hasChildren = computed( + () => props.node.children && props.node.children.length > 0, +) + +const isFirst = computed(() => props.index === 0) + +const isHovered = computed(() => { + return props.node.id === hoveredId.value && overPosition.value === 'center' +}) + +const isSelected = computed(() => selectedFolderId.value === props.node.id) +const isHighlighted = computed( + () => highlightedFolderId.value === props.node.id, +) + +const isShowBetweenLine = computed(() => { + if (!isAllowed.value) + return false + return overPosition.value === 'before' || overPosition.value === 'after' +}) + +const indentStyle = computed(() => { + return `${props.indent}px` +}) + +const hoveredOffsetStyle = computed(() => { + return `${-(props.deep * props.indent)}px` +}) + +const betweenLineStyle = computed(() => { + const style: CSSProperties = { + position: 'absolute', + width: `calc(100% - ${props.deep} * ${indentStyle.value})`, + } + + if (overPosition.value === 'before') { + style.top = '-6px' + } + + if (overPosition.value === 'after') { + style.bottom = '-6px' + } + + return style +}) + +function onClickArrow(node: Node) { + toggleNode(node) +} + +function onClickNode(id: string | number) { + highlightedFolderId.value = undefined + isFocused.value = true + clickNode(id) +} + +async function onClickContextMenu() { + highlightedFolderId.value = props.node.id +} + +function onDragStart(e: DragEvent) { + store.dragNode = props.node + isHoveredByIdDisabled.value = true + + const el = document.createElement('div') + el.className = 'fixed left-[-100%] text-fg' + + el.id = 'ghost' + el.innerHTML = props.node.name + + document.body.appendChild(el) + + e.dataTransfer!.setDragImage(el, 0, 0) + setTimeout(() => el.remove(), 0) + + e.dataTransfer!.setData('node', JSON.stringify(props.node)) +} + +function onDragEnd() { + store.dragNode = undefined + store.dragEnterNode = undefined + overPosition.value = undefined + isDragged.value = false + isHoveredByIdDisabled.value = false +} + +function onDragEnter() { + hoveredId.value = props.node.id + store.dragEnterNode = props.node +} + +function onDragOver(e: DragEvent) { + hoveredId.value = props.node.id + + if (props.node?.id === store.dragNode?.id) + return + + const height = rowRef.value!.offsetHeight + const before = height * 0.3 + const after = height - before + + if (e.offsetY < before && isFirst.value) { + overPosition.value = 'before' + } + else if (e.offsetY > after) { + overPosition.value = 'after' + } + else { + overPosition.value = 'center' + } +} + +function onDragLeave() { + hoveredId.value = undefined + overPosition.value = undefined +} + +function onDrop() { + if (!store.dragNode || !isAllowed.value) + return + + if (overPosition.value) { + dragNode(store.dragNode, props.node, overPosition.value) + } + + overPosition.value = undefined +} + +onClickOutside(rowRef, () => { + isFocused.value = false + highlightedFolderId.value = undefined +}) + +if (focusHandler) + focusHandler(isFocused) +</script> + +<template> + <div + data-folder-tree-node + class="node user-select-none relative *:mt-[2px]" + :class="{ + 'has-children': hasChildren, + 'is-dragged': isDragged, + }" + draggable="true" + @dragstart.stop="onDragStart" + @dragleave.stop="onDragLeave" + @dragend.stop="onDragEnd" + @drop.stop="onDrop" + @dragover.prevent + @contextmenu.stop="onClickContextMenu" + > + <div + :id="String(node.id)" + ref="rowRef" + class="node__row user-select-none relative flex" + :class="{ + 'is-hovered': + (isHovered && isAllowed) || hoveredNodeId === String(node.id), + 'is-selected': isSelected, + 'is-focused': isFocused, + 'is-highlighted': isHighlighted, + }" + @dragenter.stop="onDragEnter" + @dragover="onDragOver" + @click="onClickNode(node.id)" + > + <span class="node__name relative z-10 flex w-full items-center"> + <div + v-if="node.children && node.children.length" + class="mx-1 flex h-4 w-4 flex-shrink-0 items-center justify-center" + @click.stop="onClickArrow(node)" + > + <ChevronRight + class="node__arrow h-3 w-3" + :class="{ 'rotate-90': node.isOpen }" + /> + </div> + <span + v-else + class="w-6 flex-shrink-0" + /> + <slot + :node="node" + :deep="deep" + > + <div class="mr-1.5 flex flex-shrink-0 items-center"> + <UiFolderIcon + v-if="node.icon" + :name="node.icon" + /> + <Folder + v-else + class="h-4 w-4" + /> + </div> + <span + class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" + > + {{ node.name }} + </span> + </slot> + </span> + </div> + <template v-if="node.children"> + <TreeNode + v-for="(children, idx) in node.children" + v-show="node.isOpen" + :key="children.id" + class="children pl-2" + :index="idx" + :deep="deep + 1" + :node="children" + :nodes="node.children" + :hovered-node-id="hoveredNodeId" + > + <template #default="scoped: any"> + <slot + :node="scoped.node" + :deep="scoped.deep" + :hovered-node-id="hoveredNodeId" + /> + </template> + </TreeNode> + </template> + <svg + v-if="isShowBetweenLine" + height="10" + :style="betweenLineStyle" + > + <circle + cx="5" + cy="5" + r="3" + stroke="var(--color-primary)" + fill="none" + stroke-width="2" + /> + <line + x1="100%" + x2="8" + y1="5" + y2="5" + stroke="var(--color-primary)" + stroke-width="2" + /> + </svg> + </div> +</template> + +<style lang="scss"> +@reference "../../../styles.css"; +.node { + $r: &; + &__row { + &.is-hovered, + &.is-selected, + &.is-focused, + &.is-highlighted { + @apply text-list-selection-fg; + &::before { + content: ""; + left: v-bind(hoveredOffsetStyle); + @apply bg-list-focus absolute top-0 right-0 bottom-0 z-0 rounded-md; + } + } + &.is-selected { + @apply text-list-selection-fg; + &::before { + @apply bg-list-selection; + } + } + &.is-focused, + &.is-hovered { + @apply text-list-focus-fg; + &::before { + @apply bg-list-focus; + } + } + &.is-highlighted { + @apply text-list-selection-fg; + &::before { + @apply border-list-focus border-2 bg-transparent; + } + } + } + .children { + padding-left: v-bind(indentStyle); + } +} +</style> diff --git a/src/renderer/components/sidebar/folders/composables/index.ts b/src/renderer/components/sidebar/folders/composables/index.ts new file mode 100644 index 00000000..1ad69b95 --- /dev/null +++ b/src/renderer/components/sidebar/folders/composables/index.ts @@ -0,0 +1,42 @@ +import type { Node, Store } from '../types' +import { computed, reactive } from 'vue' + +export const store = reactive<Store>({}) + +export const dragNodeChildrenIds = computed(() => { + const ids: (string | number)[] = [] + + const findIds = (nodes: Node[]) => { + nodes.forEach((i) => { + ids.push(i.id) + + if (i.children && i.children.length) { + findIds(i.children) + } + }) + } + + findIds(store.dragNode?.children || []) + + return ids +}) + +export const isAllowed = computed(() => { + if (!store.dragNode || !store.dragEnterNode) + return false + + const isSameNode = store.dragNode?.id === store.dragEnterNode?.id + const isChildrenNode = dragNodeChildrenIds.value.includes( + store.dragEnterNode!.id, + ) + + return !isSameNode && !isChildrenNode +}) + +export function useFolders() { + return { + dragNodeChildrenIds, + isAllowed, + store, + } +} diff --git a/src/renderer/components/sidebar/folders/keys.ts b/src/renderer/components/sidebar/folders/keys.ts new file mode 100644 index 00000000..f03001e0 --- /dev/null +++ b/src/renderer/components/sidebar/folders/keys.ts @@ -0,0 +1,12 @@ +import type { InjectionKey, Ref } from 'vue' +import type { Node } from './types' + +export interface TreeInjection { + clickNode: (id: string | number) => void + dragNode: (node: Node, target: Node, position: string) => void + focusHandler?: (isFocused: Ref<boolean>) => void + isHoveredByIdDisabled: Ref<boolean> + toggleNode: (node: Node) => void +} + +export const treeKeys: InjectionKey<TreeInjection> = Symbol('tree') diff --git a/src/renderer/components/ui/AppTree/types/index.d.ts b/src/renderer/components/sidebar/folders/types/index.ts similarity index 53% rename from src/renderer/components/ui/AppTree/types/index.d.ts rename to src/renderer/components/sidebar/folders/types/index.ts index 6c003619..d18d0de8 100644 --- a/src/renderer/components/ui/AppTree/types/index.d.ts +++ b/src/renderer/components/sidebar/folders/types/index.ts @@ -1,16 +1,12 @@ +import type { FoldersItem } from '~/main/api/dto/folders' + export type Position = 'after' | 'before' | 'center' -export interface Node { - id: string - name: string - isOpen: boolean +export interface Node extends FoldersItem { children: Node[] } export interface Store { - id: string - clonedNodes: Node[] dragNode?: Node dragEnterNode?: Node - selectedId?: string } diff --git a/src/renderer/components/sidebar/library/Item.vue b/src/renderer/components/sidebar/library/Item.vue new file mode 100644 index 00000000..56676b96 --- /dev/null +++ b/src/renderer/components/sidebar/library/Item.vue @@ -0,0 +1,77 @@ +<script setup lang="ts"> +import type { SnippetsQuery } from '~/renderer/services/api/generated' +import { useApp, useSnippets } from '@/composables' +import { LibraryFilter } from '@/composables/types' +import { store } from '@/electron' +import { onClickOutside } from '@vueuse/core' + +const props = defineProps<Props>() + +interface Props { + id: (typeof LibraryFilter)[keyof typeof LibraryFilter] + name: string + icon: Component +} + +const { selectedLibrary, selectedFolderId } = useApp() + +const { getSnippets, selectFirstSnippet } = useSnippets() + +const isFocused = ref(false) +const itemRef = ref<HTMLElement>() +const isSelected = computed(() => selectedLibrary.value === props.id) + +async function onItemClick( + id: (typeof LibraryFilter)[keyof typeof LibraryFilter], +) { + selectedLibrary.value = id + isFocused.value = true + selectedFolderId.value = undefined + + store.app.delete('selectedFolderId') + store.app.set('selectedLibrary', id) + + const query: SnippetsQuery = {} + + if (id === LibraryFilter.Favorites) { + query.isFavorites = 1 + } + else if (id === LibraryFilter.Trash) { + query.isDeleted = 1 + } + else if (id === LibraryFilter.All) { + query.isDeleted = 0 + } + else if (id === LibraryFilter.Inbox) { + query.isInbox = 1 + } + + await getSnippets(query) + selectFirstSnippet() +} + +onClickOutside(itemRef, () => { + isFocused.value = false +}) +</script> + +<template> + <div + ref="itemRef" + data-sidebar-item + :data-state="isSelected ? 'selected' : null" + :data-focused="isFocused ? 'true' : null" + class="data-[state=selected]:bg-list-selection data-[focused=true]:bg-list-focus! data-[focused=true]:text-list-focus-fg rounded-md" + @click="onItemClick(id)" + > + <div class="ml-5.5 flex items-center"> + <component + :is="icon" + class="mr-0.5 h-4 w-4" + /> + <div class="ml-1 select-none"> + {{ name }} + </div> + </div> + </div> +</template> diff --git a/src/renderer/components/snippet/Header.vue b/src/renderer/components/snippet/Header.vue new file mode 100644 index 00000000..f441c121 --- /dev/null +++ b/src/renderer/components/snippet/Header.vue @@ -0,0 +1,58 @@ +<script setup lang="ts"> +import { useApp, useSnippets } from '@/composables' +import { Plus, Search, X } from 'lucide-vue-next' + +const { isSearch, searchQuery, getSnippets, snippets } = useSnippets() +const { selectedSnippetId } = useApp() + +async function search() { + if (searchQuery.value) { + isSearch.value = true + await getSnippets({ search: searchQuery.value }) + } + else { + isSearch.value = false + if (snippets.value) + selectedSnippetId.value = snippets.value[0].id + } +} + +function clear() { + searchQuery.value = '' +} + +watch(searchQuery, () => { + search() +}) +</script> + +<template> + <div class="border-border mt-[var(--title-bar-height)] mb-2 border-b"> + <div class="flex items-center"> + <Search class="text-text-muted ml-1 h-4 w-4" /> + <div class="flex-grow"> + <UiInput + v-model="searchQuery" + placeholder="Search" + variant="ghost" + /> + </div> + <UiButton + v-if="searchQuery" + variant="icon" + size="icon" + @click="clear" + > + <X class="h-4 w-4" /> + </UiButton> + <UiButton + v-else + variant="icon" + size="icon" + @click="clear" + > + <Plus class="h-4 w-4" /> + </UiButton> + </div> + </div> +</template> diff --git a/src/renderer/components/snippet/Item.vue b/src/renderer/components/snippet/Item.vue new file mode 100644 index 00000000..d4d3aca7 --- /dev/null +++ b/src/renderer/components/snippet/Item.vue @@ -0,0 +1,97 @@ +<script setup lang="ts"> +import type { SnippetsResponse } from '@/services/api/generated' +import { useApp } from '@/composables' +import { store } from '@/electron' +import { onClickOutside } from '@vueuse/core' +import { format } from 'date-fns' + +interface Props { + snippet: SnippetsResponse[0] +} + +const props = defineProps<Props>() + +const { selectedSnippetId, highlightedSnippetId, selectedSnippetContentIndex } + = useApp() + +const isFocused = ref(false) +const snippetRef = ref<HTMLDivElement>() + +const isSelected = computed(() => selectedSnippetId.value === props.snippet.id) +const isHighlighted = computed( + () => highlightedSnippetId.value === props.snippet.id, +) + +function onSnippetClick(id: number) { + selectedSnippetId.value = id + store.app.set('selectedSnippetId', id) + selectedSnippetContentIndex.value = 0 + isFocused.value = true +} + +function onClickContextMenu() { + highlightedSnippetId.value = props.snippet.id +} + +onClickOutside(snippetRef, () => { + isFocused.value = false + highlightedSnippetId.value = undefined +}) +</script> + +<template> + <div + ref="snippetRef" + data-snippet-item + class="border-border relative not-first:border-t [&+.is-selected+div]:border-transparent" + :class="{ + 'is-selected': isSelected, + 'is-focused': isFocused, + 'is-highlighted': isHighlighted, + }" + @click="onSnippetClick(snippet.id)" + @contextmenu="onClickContextMenu" + > + <div class="flex flex-col p-2 select-none"> + <div class="mb-2 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap"> + {{ snippet.name }} + </div> + <div class="meta text-text-muted flex justify-between text-xs"> + <div> + {{ snippet.folder?.name }} + </div> + <div> + {{ format(new Date(snippet.createdAt), "dd.MM.yyyy") }} + </div> + </div> + </div> + </div> +</template> + +<style lang="scss"> +@reference "../../styles.css"; +[data-snippet-item] { + &.is-selected { + @apply bg-list-selection text-list-selection-fg rounded-md; + .meta { + @apply text-list-selection-fg; + } + } + &.is-focused { + @apply bg-list-focus text-list-focus-fg rounded-md; + .meta { + @apply text-list-focus-fg; + } + } + &.is-highlighted { + @apply outline-list-focus rounded-md outline-2 -outline-offset-2; + &.is-focused, + &.is-selected { + @apply bg-bg text-list-selection-fg; + .meta { + @apply text-list-selection-fg; + } + } + } +} +</style> diff --git a/src/renderer/components/snippet/List.vue b/src/renderer/components/snippet/List.vue new file mode 100644 index 00000000..34157c7a --- /dev/null +++ b/src/renderer/components/snippet/List.vue @@ -0,0 +1,79 @@ +<script setup lang="ts"> +import type { SnippetsQuery } from '@/services/api/generated' +import { useApp, useGutter, useSnippets } from '@/composables' +import { LibraryFilter } from '@/composables/types' +import { store } from '@/electron' +import { APP_DEFAULTS } from '~/main/store/constants' + +const listRef = ref<HTMLElement>() +const gutterRef = ref<{ $el: HTMLElement }>() + +const { snippetListWidth, sidebarWidth, selectedFolderId, selectedLibrary } + = useApp() +const { snippets, snippetsBySearch, isSearch, getSnippets } = useSnippets() + +async function initGetSnippets() { + const query: SnippetsQuery = {} + + if (selectedFolderId.value) { + query.folderId = selectedFolderId.value + } + else if (selectedLibrary.value === LibraryFilter.Favorites) { + query.isFavorites = 1 + } + else if (selectedLibrary.value === LibraryFilter.Trash) { + query.isDeleted = 1 + } + else if (selectedLibrary.value === LibraryFilter.All) { + query.isDeleted = 0 + } + else if (selectedLibrary.value === LibraryFilter.Inbox) { + query.isInbox = 1 + } + + await getSnippets(query) +} + +initGetSnippets() + +const offsetWidth = computed(() => { + return ( + Number.parseInt(sidebarWidth.value as string) + + Number.parseInt(snippetListWidth.value as string) + ) +}) + +const { width } = useGutter( + listRef, + gutterRef, + offsetWidth.value, + APP_DEFAULTS.sizes.snippetList + APP_DEFAULTS.sizes.sidebar, +) + +watch(width, () => { + const _width = width.value - Number.parseInt(sidebarWidth.value as string) + + snippetListWidth.value = `${_width}px` + store.app.set('snippetListWidth', _width) +}) +</script> + +<template> + <div + ref="listRef" + data-snippets-list + class="relative flex h-screen flex-col px-1" + > + <div> + <SnippetHeader /> + </div> + <div class="flex-grow overflow-y-auto"> + <SnippetItem + v-for="snippet in isSearch ? snippetsBySearch : snippets" + :key="snippet.id" + :snippet="snippet" + /> + </div> + <UiGutter ref="gutterRef" /> + </div> +</template> diff --git a/src/renderer/components/snippets/SnippetFragments.vue b/src/renderer/components/snippets/SnippetFragments.vue deleted file mode 100644 index 959d9348..00000000 --- a/src/renderer/components/snippets/SnippetFragments.vue +++ /dev/null @@ -1,54 +0,0 @@ -<template> - <PerfectScrollbar> - <div class="fragments"> - <div - v-for="(i, index) in snippetStore.fragmentLabels" - :key="index" - class="item" - :class="{ 'is-active': index == snippetStore.fragment }" - @click="onClickFragment(index)" - > - <SnippetsFragmentsInput - :name="i" - :index="index" - /> - </div> - </div> - </PerfectScrollbar> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() - -const onClickFragment = (index: number) => { - snippetStore.fragment = index -} - -const fragmentHeight = appStore.sizes.editor.fragmentsHeight + 'px' -</script> - -<style lang="scss" scoped> -.fragments { - display: flex; - align-items: center; - height: v-bind(fragmentHeight); - // overflow-y: auto; - .item { - padding: 0 var(--spacing-xs); - display: flex; - align-items: center; - height: v-bind(fragmentHeight); - width: 100%; - border-top: 1px solid var(--color-border); - border-bottom: 1px solid var(--color-border); - min-width: 100px; - &.is-active { - background-color: var(--color-contrast-lower); - } - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetHeader.vue b/src/renderer/components/snippets/SnippetHeader.vue deleted file mode 100644 index 76eccca4..00000000 --- a/src/renderer/components/snippets/SnippetHeader.vue +++ /dev/null @@ -1,191 +0,0 @@ -<template> - <div class="header"> - <div class="top"> - <div class="name"> - <input - ref="inputRef" - v-model="name" - type="text" - :placeholder="i18n.t('snippet.emptyName')" - > - </div> - <div class="action"> - <AppActionButton - v-if="snippetStore.currentLanguage === 'markdown'" - v-tooltip="i18n.t('menu:editor.previewMarkdown')" - tabindex="-1" - @click="onClickPresentationMode" - > - <UniconsMeetingBoard /> - </AppActionButton> - <template v-if="snippetStore.currentLanguage === 'markdown'"> - <AppActionButton - v-tooltip=" - !snippetStore.isMarkdownPreview - ? i18n.t('menu:editor.previewMarkdown') - : i18n.t('hide') + ' ' + i18n.t('menu:editor.previewMarkdown') - " - tabindex="-1" - :active="snippetStore.isMarkdownPreview" - @click="onClickMarkdownPreview" - > - <UniconsEye /> - </AppActionButton> - <AppActionButton - v-tooltip="i18n.t('menu:editor.previewMindmap')" - tabindex="-1" - :active="snippetStore.isMindmapPreview" - @click="onClickMindmapPreview" - > - <UniconsCodeBranch class="mindmap" /> - </AppActionButton> - </template> - <AppActionButton - v-tooltip=" - !snippetStore.isScreenshotPreview - ? i18n.t('menu:editor.previewScreenshot') - : i18n.t('hide') + ' ' + i18n.t('menu:editor.previewScreenshot') - " - tabindex="-1" - :active="snippetStore.isScreenshotPreview" - @click="onClickScreenshotPreview" - > - <UniconsCamera /> - </AppActionButton> - <AppActionButton - v-tooltip=" - !snippetStore.isCodePreview - ? i18n.t('menu:editor.previewCode') - : i18n.t('hide') + ' ' + i18n.t('menu:editor.previewCode') - " - tabindex="-1" - :active="snippetStore.isCodePreview" - @click="onCodePreview" - > - <UniconsArrow /> - </AppActionButton> - <AppActionButton - v-tooltip="i18n.t('addDescription')" - tabindex="-1" - @click="onAddDescription" - > - <UniconsText /> - </AppActionButton> - <AppActionButton - v-tooltip="i18n.t('newFragment')" - tabindex="-1" - @click="onAddNewFragment" - > - <UniconsPlus /> - </AppActionButton> - </div> - </div> - <div class="bottom"> - <SnippetsDescription v-show="snippetStore.isDescriptionShow" /> - <SnippetFragments v-if="snippetStore.isFragmentsShow" /> - <SnippetsTags v-if="isTagsShow" /> - </div> - </div> -</template> - -<script setup lang="ts"> -import { onAddNewFragment, onAddDescription, emitter } from '@/composable' -import { useSnippetStore } from '@/store/snippets' -import { useDebounceFn } from '@vueuse/core' -import { computed, onUnmounted, ref } from 'vue' -import { useAppStore } from '@/store/app' -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import { useRouter } from 'vue-router' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() -const router = useRouter() - -const inputRef = ref<HTMLInputElement>() - -const headerHeight = appStore.sizes.editor.titleHeight + 'px' - -const name = computed({ - get: () => snippetStore.selected?.name, - set: useDebounceFn( - v => - snippetStore.patchSnippetsById(snippetStore.selectedId!, { name: v }), - 300 - ) -}) - -const isTagsShow = computed(() => { - return ( - snippetStore.isTagsShow && - !snippetStore.isScreenshotPreview && - !snippetStore.isMarkdownPreview && - !snippetStore.isMindmapPreview - ) -}) - -const onClickMarkdownPreview = () => { - snippetStore.togglePreview('markdown') - track('snippets/markdown-preview') -} - -const onClickMindmapPreview = () => { - snippetStore.togglePreview('mindmap') - track('snippets/mindmap-preview') -} - -const onClickScreenshotPreview = () => { - snippetStore.togglePreview('screenshot') - track('snippets/screenshot-preview') -} -const onCodePreview = () => { - snippetStore.togglePreview('code') - track('snippets/code-preview') -} - -const onClickPresentationMode = () => { - router.push('/presentation') -} - -emitter.on('snippet:focus-name', () => { - inputRef.value?.select() -}) - -onUnmounted(() => { - emitter.off('snippet:focus-name') -}) -</script> - -<style lang="scss" scoped> -.header { - .top { - padding: 0 var(--spacing-xs); - display: flex; - justify-content: space-between; - align-items: center; - height: v-bind(headerHeight); - position: relative; - top: var(--title-bar-height-offset); - } - .name { - font-size: 16px; - width: 100%; - input { - border: 0; - width: 100%; - outline: none; - line-height: 32px; - text-overflow: ellipsis; - background-color: var(--color-bg); - color: var(--color-text); - } - } - .action { - display: flex; - - .mindmap { - transform: rotate(90deg); - } - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetHeaderTools.vue b/src/renderer/components/snippets/SnippetHeaderTools.vue deleted file mode 100644 index 1705bc2b..00000000 --- a/src/renderer/components/snippets/SnippetHeaderTools.vue +++ /dev/null @@ -1,29 +0,0 @@ -<template> - <div - class="snippet-tools" - :class="{ 'no-border-top': snippetStore.isFragmentsShow }" - > - <slot /> - </div> -</template> - -<script setup lang="ts"> -import { useSnippetStore } from '@/store/snippets' - -const snippetStore = useSnippetStore() -console.log(snippetStore.isFragmentsShow) -</script> - -<style lang="scss" scoped> -.snippet-tools { - display: flex; - justify-content: space-between; - align-items: center; - padding: 4px var(--spacing-xs); - border-top: 1px solid var(--color-border); - border-bottom: 1px solid var(--color-border); - &.no-border-top { - border-top: none; - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetList.vue b/src/renderer/components/snippets/SnippetList.vue deleted file mode 100644 index f02e6f4c..00000000 --- a/src/renderer/components/snippets/SnippetList.vue +++ /dev/null @@ -1,106 +0,0 @@ -<template> - <div - ref="listRef" - class="snippet-list" - > - <div class="header"> - <SnippetListHeader /> - </div> - <div - ref="bodyRef" - class="body" - > - <PerfectScrollbar> - <SnippetListItem - v-for="(i, index) in snippetStore.snippetsByFilter" - :id="i.id" - :key="i.id" - :data-id="i.id" - :index="index" - :folder="i.folder?.name" - :date="i.updatedAt" - :name="i.name" - /> - </PerfectScrollbar> - </div> - <div - ref="gutterRef" - class="gutter-line" - /> - </div> -</template> - -<script setup lang="ts"> -import { emitter, setScrollPosition } from '@/composable' -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' -import { onMounted, onUnmounted, ref, watch } from 'vue' -import interact from 'interactjs' -import { store } from '@/electron' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() - -const listRef = ref() -const bodyRef = ref<HTMLElement>() -const gutterRef = ref() - -const scrollToSnippet = (id: string) => { - const el = document.querySelector<HTMLElement>(`[data-id='${id}']`) - if (el?.offsetTop) setScrollPosition(bodyRef.value!, el.offsetTop) -} - -onMounted(() => { - interact(listRef.value).resizable({ - allowFrom: gutterRef.value, - onmove: e => { - const { pageX } = e - const minWidth = appStore.sizes.sidebar + 100 - const width = Math.floor(pageX - appStore.sizes.sidebar) - - if (pageX < minWidth) return - appStore.sizes.snippetList = width - store.app.set('snippetListWidth', width) - } - }) -}) - -watch( - () => appStore.isInit, - () => scrollToSnippet(snippetStore.selectedId!) -) - -emitter.on('folder:click', () => { - setScrollPosition(bodyRef.value!, 0) -}) - -emitter.on('scroll-to:snippet', (id: string) => { - scrollToSnippet(id) -}) - -onUnmounted(() => { - emitter.off('folder:click') - emitter.off('scroll-to:snippet') -}) -</script> - -<style lang="scss" scoped> -.snippet-list { - position: relative; - display: grid; - grid-template-rows: 50px 1fr 10px; - background-color: var(--color-snippet-list); -} -.header { - padding-top: var(--title-bar-height); - display: flex; - border-bottom: 1px solid var(--color-border); -} -.body { - padding: var(--spacing-xs) 0; - :deep(.ps) { - height: calc(100vh - 60px); - padding-top: 2px; - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetListHeader.vue b/src/renderer/components/snippets/SnippetListHeader.vue deleted file mode 100644 index bfb0bdd2..00000000 --- a/src/renderer/components/snippets/SnippetListHeader.vue +++ /dev/null @@ -1,89 +0,0 @@ -<template> - <div class="action"> - <UniconsSearch /> - <input - ref="inputRef" - v-model="query" - :placeholder="`${i18n.t('search')}...`" - > - <AppActionButton - v-if="!query" - v-tooltip="i18n.t('newSnippet')" - class="item" - @click="onAddNewSnippet" - > - <UniconsPlus /> - </AppActionButton> - <AppActionButton - v-else - class="item" - @click="onReset" - > - <UniconsTimes /> - </AppActionButton> - </div> -</template> - -<script setup lang="ts"> -import { emitter, onAddNewSnippet } from '@/composable' -import { useSnippetStore } from '@/store/snippets' -import { useDebounceFn } from '@vueuse/core' -import { computed, onUnmounted, ref } from 'vue' -import { i18n } from '@/electron' -import { track } from '@/services/analytics' - -const snippetStore = useSnippetStore() - -const inputRef = ref<HTMLInputElement>() - -const query = computed({ - get: () => snippetStore.searchQuery, - set: useDebounceFn(async v => { - snippetStore.searchQuery = v - await snippetStore.setSnippetsByAlias('all') - snippetStore.search(v!) - track('snippets/search') - }, 300) -}) - -const onReset = () => { - snippetStore.searchQuery = undefined - snippetStore.setSnippetsByAlias('all') -} - -emitter.on('search:focus', () => { - inputRef.value?.focus() -}) - -onUnmounted(() => { - emitter.off('search:focus') -}) -</script> - -<style lang="scss" scoped> -.action { - display: flex; - align-items: center; - padding: 0 var(--spacing-sm); - position: relative; - top: var(--title-bar-height-offset); - width: 100%; - input { - outline: none; - border: none; - width: 100%; - padding: 0 var(--spacing-xs); - height: 24px; - background-color: var(--color-snippet-list); - color: var(--color-text); - } - :deep(svg) { - flex-shrink: 0; - fill: var(--color-button-action); - } - .item { - position: relative; - right: -8px; - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetListItem.vue b/src/renderer/components/snippets/SnippetListItem.vue deleted file mode 100644 index 0e9c5cfb..00000000 --- a/src/renderer/components/snippets/SnippetListItem.vue +++ /dev/null @@ -1,404 +0,0 @@ -<template> - <div - ref="itemRef" - class="item" - :class="{ - 'is-selected': isSelected, - 'is-focused': isFocused, - 'is-highlighted': isHighlighted || isHighlightedMultiple, - 'is-compact': snippetStore.compactMode - }" - :draggable="true" - @click="onClickSnippet" - @contextmenu="onClickContextMenu" - @dragstart="onDragStart" - @dragend="onDragEnd" - > - <div class="header"> - <div class="name"> - <div class="name__inner"> - <span> - {{ name || 'Untitled snippet' }} - </span> - <span - v-if="snippetStore.compactMode" - class="date" - > - {{ dateFormat }} - </span> - </div> - </div> - </div> - <div - v-if="!snippetStore.compactMode" - class="footer" - > - <div class="folder"> - {{ folder || 'Inbox' }} - </div> - <div class="date"> - {{ dateFormat }} - </div> - </div> - </div> -</template> - -<script setup lang="ts"> -import { ipc } from '@/electron' -import { track } from '@/services/analytics' -import { useFolderStore } from '@/store/folders' -import { useSnippetStore } from '@/store/snippets' -import type { - ContextMenuRequest, - ContextMenuResponse -} from '@shared/types/main' -import { onClickOutside, useClipboard } from '@vueuse/core' -import { computed, onUnmounted, ref } from 'vue' -import type { SystemFolderAlias } from '@shared/types/renderer/sidebar' -import { useTagStore } from '@/store/tags' -import { isToday, format } from 'date-fns' -import { emitter } from '@/composable' -import { useAppStore } from '@/store/app' - -interface Props { - id: string - index: number - name: string - folder?: string - date: number -} - -const props = defineProps<Props>() - -const snippetStore = useSnippetStore() -const folderStore = useFolderStore() -const tagStore = useTagStore() -const appStore = useAppStore() - -const itemRef = ref() -const isFocused = ref(false) -const isHighlighted = ref(false) - -const isSelected = computed(() => { - if (snippetStore.selectedId) { - return props.id === snippetStore.selectedId - } else { - return snippetStore.selectedMultiple?.some(i => i.id === props.id) - } -}) - -const isHighlightedMultiple = computed(() => { - if (snippetStore.selectedMultiple && snippetStore.isContextState) { - return snippetStore.selectedMultiple?.some(i => i.id === props.id) - } - return false -}) - -onClickOutside(itemRef, () => { - isFocused.value = false - isHighlighted.value = false -}) - -const onClickSnippet = (e: MouseEvent) => { - if (e.shiftKey) { - if (snippetStore.selectedIndex > props.index) { - snippetStore.selectedMultiple = snippetStore.snippetsByFilter.slice( - props.index, - snippetStore.selectedIndex + 1 - ) - } else { - snippetStore.selectedMultiple = snippetStore.snippetsByFilter.slice( - snippetStore.selectedIndex, - props.index + 1 - ) - } - snippetStore.selected = undefined - isFocused.value = false - } else { - isFocused.value = true - snippetStore.fragment = 0 - snippetStore.selectedMultiple = [] - snippetStore.getSnippetsById(props.id) - tagStore.getTags() - appStore.addToHistory(props.id) - } -} - -const onClickContextMenu = async () => { - isHighlighted.value = true - snippetStore.isContextState = true - - ipc.once('context-menu:close', () => { - isHighlighted.value = false - snippetStore.isContextState = false - }) - - const { action, data, type } = await ipc.invoke< - ContextMenuRequest, - ContextMenuResponse - >('context-menu:snippet', { - name: props.name, - type: folderStore.selectedAlias ?? 'folder', - selectedCount: snippetStore.selectedMultiple.length - }) - - const moveToTrash = async (alias?: SystemFolderAlias) => { - if (snippetStore.selectedIds.length) { - for (const id of snippetStore.selectedIds) { - await snippetStore.patchSnippetsById(id, { - isDeleted: true - }) - } - } else { - await snippetStore.patchSnippetsById(props.id, { - isDeleted: true - }) - } - if (!alias) { - await snippetStore.getSnippetsByFolderIds(folderStore.selectedIds!) - snippetStore.selected = snippetStore.snippets[0] - } else { - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias(alias) - } - } - - if (action === 'delete') { - if (type === 'folder') { - await moveToTrash() - track('snippets/move-to-trash') - } - - if (type === 'favorites' || type === 'all' || type === 'inbox') { - await moveToTrash(type) - } - - if (type === 'trash') { - if (snippetStore.selectedIds.length) { - await snippetStore.deleteSnippetsByIds(snippetStore.selectedIds) - } else { - await snippetStore.deleteSnippetsById(props.id) - } - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias(type) - } - } - - if (action === 'duplicate') { - await snippetStore.duplicateSnippetById(props.id) - track('snippets/duplicate') - - if (type === 'folder') { - await snippetStore.getSnippetsByFolderIds(folderStore.selectedIds!) - } - - if (type === 'all' || type === 'inbox') { - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias(type) - } - } - - if (action === 'favorites') { - if (snippetStore.selectedIds.length) { - for (const id of snippetStore.selectedIds) { - await snippetStore.patchSnippetsById(id, { - isFavorites: data - }) - } - } else { - await snippetStore.patchSnippetsById(props.id, { - isFavorites: data - }) - } - - if (data) { - track('snippets/add-to-favorites') - } else { - track('snippets/delete-from-favorites') - } - - await snippetStore.getSnippets() - - if (type === 'favorites') { - snippetStore.setSnippetsByAlias(type) - } - } - - if (action === 'restore-from-trash') { - if (snippetStore.selectedIds.length) { - for (const id of snippetStore.selectedIds) { - await snippetStore.patchSnippetsById(id, { - isDeleted: false - }) - } - } else { - await snippetStore.patchSnippetsById(props.id, { - isDeleted: false - }) - } - - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias('trash') - track('snippets/restore-from-trash') - } - - if (action === 'copy-snippet-link') { - const { copy } = useClipboard({ source: `masscode://snippets/${props.id}` }) - copy() - track('snippets/copy-link') - } - - isHighlighted.value = false - isFocused.value = false - snippetStore.isContextState = false - - if (snippetStore.selectedIds.length) { - snippetStore.selected = undefined - snippetStore.selectedMultiple = [] - } -} - -const dateFormat = computed(() => { - const date = new Date(props.date) - if (isToday(date)) return format(date, 'HH:mm') - return format(date, 'dd.MM.yyyy') -}) - -const onDragStart = (e: DragEvent) => { - if (snippetStore.selectedIds.length) { - e.dataTransfer?.setData('payload', JSON.stringify(snippetStore.selectedIds)) - - const count = snippetStore.selectedIds.length - const el = document.createElement('div') - const style = { - padding: '2px 10px', - backgroundColor: 'var(--color-bg)', - borderRadius: '3px', - color: 'var(--color-text)', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'fixed', - fontSize: '14px', - top: '100%' - } - el.innerHTML = `${count} ${count > 1 ? 'items' : 'item'}` - - Object.assign(el.style, style) - document.body.appendChild(el) - - e.dataTransfer?.setDragImage(el, 0, 0) - setTimeout(() => el.remove(), 0) - } else { - e.dataTransfer?.setData('payload', JSON.stringify([props.id])) - } -} - -const onDragEnd = () => { - folderStore.hoveredId = '' -} - -const onScrollToSnippet = () => { - if (snippetStore.selectedId !== props.id) { - isFocused.value = false - } -} - -emitter.on('scroll-to:snippet', onScrollToSnippet) - -onUnmounted(() => { - emitter.off('scroll-to:snippet', onScrollToSnippet) -}) -</script> - -<style lang="scss" scoped> -.item { - padding: var(--spacing-xs) var(--spacing-sm); - position: relative; - z-index: 2; - user-select: none; - &::after { - content: ''; - height: 1px; - background-color: var(--color-border); - position: absolute; - width: calc(100% - calc(var(--spacing-sm) * 2)); - bottom: 1px; - } - &.is-focused, - &.is-selected, - &.is-highlighted { - &::before { - content: ''; - position: absolute; - top: 0px; - left: 8px; - right: 8px; - bottom: 3px; - border-radius: 5px; - z-index: 1; - } - } - &.is-focused { - &::before { - background-color: var(--color-primary) !important; - } - .name, - .footer { - color: #fff !important; - } - } - &.is-selected { - &::before { - background-color: var(--color-snippet-selected); - } - .name, - .footer { - color: var(--color-text); - } - } - &.is-highlighted { - &::before { - border-radius: 5px; - outline: 2px solid var(--color-primary); - outline-offset: -2px; - } - } - &.is-compact { - .date { - color: var(--color-text-3); - font-size: 11px; - position: relative; - top: 1px; - } - } -} -.name { - display: table; - table-layout: fixed; - width: 100%; - overflow: hidden; - position: relative; - z-index: 1; - line-height: 24px; - &__inner { - display: flex; - justify-content: space-between; - gap: 4px; - span { - display: -webkit-box; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; - } - } -} -.footer { - font-size: 11px; - display: flex; - position: relative; - z-index: 1; - justify-content: space-between; - color: var(--color-text-3); - padding-top: var(--spacing-sm); -} -</style> diff --git a/src/renderer/components/snippets/SnippetsDescription.vue b/src/renderer/components/snippets/SnippetsDescription.vue deleted file mode 100644 index b9a5fdd3..00000000 --- a/src/renderer/components/snippets/SnippetsDescription.vue +++ /dev/null @@ -1,93 +0,0 @@ -<template> - <div - class="description" - :class="{ 'no-border-bottom': snippetStore.isFragmentsShow }" - @click="onClick" - > - <PerfectScrollbar> - <div - ref="inputRef" - class="input" - contenteditable="true" - spellcheck="false" - placeholder="Add description" - @blur="onBlur" - > - {{ desc }} - </div> - </PerfectScrollbar> - </div> -</template> - -<script setup lang="ts"> -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' - -import { computed, nextTick, ref, watch } from 'vue' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() - -const desc = computed(() => snippetStore.selected?.description) - -const inputRef = ref<HTMLElement>() -const descHeight = appStore.sizes.editor.descriptionHeight + 'px' - -const onBlur = (e: Event) => { - snippetStore.patchSnippetsById(snippetStore.selectedId!, { - description: (e.target as HTMLElement).innerText.trimEnd() || null - }) -} - -const onClick = () => { - inputRef.value?.focus() -} - -watch( - () => snippetStore.isDescriptionShow, - v => { - if (v && snippetStore.selected?.description?.length === 0) { - nextTick(() => inputRef.value?.focus()) - } - } -) -</script> - -<style lang="scss" scoped> -.description { - padding: 0 var(--spacing-xs); - font-size: 12px; - color: var(--color-text); - position: relative; - :empty::before { - content: attr(placeholder); - position: absolute; - color: var(--color-text-3); - background-color: transparent; - } - &::after { - content: ''; - position: absolute; - width: 100%; - height: 1px; - background-color: var(--color-border); - left: 0; - bottom: -1px; - } - &.no-border-bottom { - &::after { - content: none; - } - } - .input { - width: 100%; - border: 0; - outline: 0; - line-height: 14px; - white-space: pre-wrap; - } - :deep(.ps) { - height: v-bind(descHeight); - } -} -</style> diff --git a/src/renderer/components/snippets/SnippetsFragmentsInput.vue b/src/renderer/components/snippets/SnippetsFragmentsInput.vue deleted file mode 100644 index 569fa322..00000000 --- a/src/renderer/components/snippets/SnippetsFragmentsInput.vue +++ /dev/null @@ -1,114 +0,0 @@ -<template> - <div - class="fragment" - @dblclick="isEdit = true" - @contextmenu="onClickContext" - @keypress="onKyePress" - > - <div - v-if="!isEdit" - class="name" - :value="name" - > - {{ name }} - </div> - <input - v-else - ref="inputRef" - v-model="localName" - class="is-edit" - type="text" - > - </div> -</template> - -<script setup lang="ts"> -import { computed, nextTick, ref, watch } from 'vue' -import { useSnippetStore } from '@/store/snippets' -import { onClickOutside, useDebounceFn } from '@vueuse/core' -import { ipc } from '@/electron' -import { track } from '@/services/analytics' -import type { - ContextMenuRequest, - ContextMenuResponse -} from '@shared/types/main' - -interface Props { - name: string - index: number -} - -const props = defineProps<Props>() - -const snippetStore = useSnippetStore() - -const isEdit = ref(false) - -const inputRef = ref<HTMLInputElement>() - -const localName = computed({ - get: () => props.name, - set: useDebounceFn(v => { - snippetStore.patchCurrentSnippetContentByKey('label', v) - }, 300) -}) - -onClickOutside(inputRef, async () => { - isEdit.value = false - if (!props.name) { - snippetStore.patchCurrentSnippetContentByKey('label', 'Untitled fragment') - } -}) - -const onClickContext = async () => { - const { action } = await ipc.invoke<ContextMenuRequest, ContextMenuResponse>( - 'context-menu:snippet-fragment', - { - name: props.name, - type: 'folder' - } - ) - - if (action === 'rename') { - isEdit.value = true - } - - if (action === 'delete') { - await snippetStore.deleteCurrentSnippetFragmentByIndex(props.index) - snippetStore.fragment = snippetStore.fragmentCount! - 1 - track('snippets/delete-fragment') - } -} - -const onKyePress = (e: KeyboardEvent) => { - if (e.code === 'Enter') isEdit.value = false -} - -watch(isEdit, () => { - nextTick(() => inputRef.value?.select()) -}) -</script> - -<style lang="scss" scoped> -.fragment { - width: 100%; - text-overflow: ellipsis; - - input { - background-color: transparent; - width: 100%; - border: 0; - outline: none; - min-width: 100px; - &.is-edit { - background-color: #fff; - } - } -} -.name { - user-select: none; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -</style> diff --git a/src/renderer/components/snippets/SnippetsTags.vue b/src/renderer/components/snippets/SnippetsTags.vue deleted file mode 100644 index 3386a627..00000000 --- a/src/renderer/components/snippets/SnippetsTags.vue +++ /dev/null @@ -1,59 +0,0 @@ -<template> - <div class="tags"> - <AppInputTags v-model="tags" /> - </div> -</template> - -<script setup lang="ts"> -import { track } from '@/services/analytics' -import { useAppStore } from '@/store/app' -import { useSnippetStore } from '@/store/snippets' -import { useTagStore } from '@/store/tags' -import { computed } from 'vue' - -const tagStore = useTagStore() -const snippetStore = useSnippetStore() -const appStore = useAppStore() - -const tags = computed({ - get: () => snippetStore.currentTags.map(i => i.name), - set: async (v: any) => { - const tagsIds: string[] = [] - - for (const i of v) { - const tag = tagStore.tags.find(t => t.name === i.text) - - if (tag) { - tagsIds.push(tag.id) - track('snippets/add-tag') - } else { - if (!i.text) return - - const newTag = await tagStore.postTags(i.text) - await tagStore.getTags() - - tagsIds.push(newTag.id) - - track('tags/add-new') - } - } - - snippetStore.selected!.tagsIds = tagsIds - - await snippetStore.patchSnippetsById(snippetStore.selectedId!, { - tagsIds - }) - } -}) - -const tagsHeight = appStore.sizes.editor.tagsHeight + 'px' -</script> - -<style lang="scss" scoped> -.tags { - height: v-bind(tagsHeight); - padding: 0 var(--spacing-xs); - display: flex; - align-items: center; -} -</style> diff --git a/src/renderer/components/snippets/SnippetsView.vue b/src/renderer/components/snippets/SnippetsView.vue deleted file mode 100644 index 70b64540..00000000 --- a/src/renderer/components/snippets/SnippetsView.vue +++ /dev/null @@ -1,113 +0,0 @@ -<template> - <div - class="snippets-view" - :class="{ - 'is-one-row': isShowPlaceholder - }" - > - <template v-if="snippetStore.selected"> - <SnippetHeader /> - <EditorCodemirror - v-if="isEditorShow" - v-model="snippet" - v-model:lang="lang" - :snippet-id="snippetStore.selectedId!" - :fragment-index="snippetStore.fragment" - :is-search-mode="isSearchMode" - :fragments="snippetStore.isFragmentsShow" - /> - <EditorPreview v-if="snippetStore.isCodePreview" /> - <TheMarkdown - v-if="snippetStore.isMarkdownPreview" - :value="snippetStore.currentContent!" - /> - <MindMap - v-if="snippetStore.isMindmapPreview" - :value="snippetStore.currentContent!" - /> - <TheScreenshot - v-if="snippetStore.isScreenshotPreview" - :snippet="snippet" - :lang="lang" - :name="snippetStore.selected?.name" - /> - </template> - <div - v-else-if="isShowPlaceholder" - class="placeholder" - > - <span v-if="snippetStore.selectedMultiple.length"> - {{ - i18n.t('snippet.selectedMultiple', { - count: snippetStore.selectedMultiple.length - }) - }} - </span> - <span v-else>{{ i18n.t('snippet.noSelected') }}</span> - </div> - </div> -</template> - -<script setup lang="ts"> -import { useSnippetStore } from '@/store/snippets' -import { useDebounceFn } from '@vueuse/core' -import { computed } from 'vue' -import { i18n } from '@/electron' -import { track } from '@/services/analytics' - -const snippetStore = useSnippetStore() - -const snippet = computed({ - get: () => snippetStore.currentContent || '', - set: useDebounceFn(v => { - if (!v) return - if (snippetStore.currentContent !== v) { - snippetStore.patchCurrentSnippetContentByKey('value', v) - } - }, 300) -}) - -const lang = computed({ - get: () => snippetStore.currentLanguage || 'plain_text', - set: v => { - snippetStore.patchCurrentSnippetContentByKey('language', v) - track('snippets/set-language', v) - } -}) - -const isEditorShow = computed(() => { - return ( - !snippetStore.isMarkdownPreview && - !snippetStore.isMindmapPreview && - !snippetStore.isScreenshotPreview - ) -}) - -const isShowPlaceholder = computed(() => { - return ( - snippetStore.selectedMultiple.length || - !snippetStore.selected || - snippetStore.snippets.length === 0 - ) -}) - -const isSearchMode = computed(() => { - return snippetStore.searchQuery ? snippetStore.searchQuery.length > 0 : false -}) -</script> - -<style lang="scss" scoped> -.snippets-view { - overflow: hidden; - padding-top: var(--title-bar-height); - display: flex; - flex-flow: column; -} -.placeholder { - display: flex; - align-items: center; - justify-content: center; - height: 100%; - user-select: none; -} -</style> diff --git a/src/renderer/components/ui/AppActionButton.vue b/src/renderer/components/ui/AppActionButton.vue deleted file mode 100644 index a0767330..00000000 --- a/src/renderer/components/ui/AppActionButton.vue +++ /dev/null @@ -1,47 +0,0 @@ -<template> - <button - class="button" - :class="{ 'is-active': active }" - > - <slot /> - </button> -</template> - -<script setup lang="ts"> -interface Props { - active?: boolean -} - -defineProps<Props>() -</script> - -<style lang="scss" scoped> -.button { - display: flex; - align-items: center; - padding: 4px 6px; - border-radius: 4px; - border: none; - background-color: transparent; - outline: none; - color: var(--color-text); - margin-right: 1px; - &:last-child { - margin-right: 0; - } - :deep(svg) { - fill: var(--color-button-action); - } - &:hover { - background-color: var(--color-button-action-hover); - &.is-active { - background-color: var(--color-button-action-hover); - } - } - &.is-active { - :deep(svg) { - fill: var(--color-primary); - } - } -} -</style> diff --git a/src/renderer/components/ui/AppButton.vue b/src/renderer/components/ui/AppButton.vue deleted file mode 100644 index 8977645b..00000000 --- a/src/renderer/components/ui/AppButton.vue +++ /dev/null @@ -1,22 +0,0 @@ -<template> - <button class="button"> - <slot /> - </button> -</template> - -<script setup lang="ts"></script> - -<style lang="scss" scoped> -.button { - height: 32px; - border: 1px solid var(--color-border); - background-color: var(--color-button); - border-radius: 3px; - transition: all 0.2s; - color: var(--color-text); - padding: 0 var(--spacing-xs); - &:hover { - background-color: var(--color-button-hover); - } -} -</style> diff --git a/src/renderer/components/ui/AppCheckbox.vue b/src/renderer/components/ui/AppCheckbox.vue deleted file mode 100644 index effe32fe..00000000 --- a/src/renderer/components/ui/AppCheckbox.vue +++ /dev/null @@ -1,68 +0,0 @@ -<template> - <div class="app-checkbox"> - <label> - <input - :id="'id-' + Math.random()" - type="checkbox" - :name="name" - _value="localValue" - @change="onChange" - > - <div class="inner"> - <UniconsCheck v-if="modelValue" /> - </div> - <div - v-if="label" - class="label" - > - {{ label }} - </div> - </label> - </div> -</template> - -<script setup lang="ts"> -interface Props { - name: string - label?: string - modelValue: boolean -} - -interface Emits { - (e: 'update:modelValue', value: boolean): void -} - -const emit = defineEmits<Emits>() - -const props = defineProps<Props>() - -const onChange = () => { - emit('update:modelValue', !props.modelValue) -} -</script> - -<style lang="scss" scoped> -.app-checkbox { - label { - display: flex; - align-items: center; - gap: var(--spacing-xs); - } - input { - display: none; - } - .inner { - width: 16px; - height: 16px; - border: 1px solid var(--color-border); - border-radius: 3px; - display: flex; - align-items: center; - background-color: var(--color-checkbox); - :deep(svg) { - position: relative; - fill: var(--color-text); - } - } -} -</style> diff --git a/src/renderer/components/ui/AppDebug.vue b/src/renderer/components/ui/AppDebug.vue deleted file mode 100644 index df505cc3..00000000 --- a/src/renderer/components/ui/AppDebug.vue +++ /dev/null @@ -1,29 +0,0 @@ -<template> - <div class="debug"> - <pre> -<slot /> - </pre> - </div> -</template> - -<script setup lang="ts"></script> - -<style lang="scss" scoped> -.debug { - position: absolute; - right: 10px; - bottom: 10px; - background-color: #fff; - width: 400px; - max-height: 400px; - overflow: scroll; - padding: 0 var(--spacing-xs); - border-radius: 5px; - color: #000; - font-size: 12px; - z-index: 1010; - pre { - font-family: var(--font-code); - } -} -</style> diff --git a/src/renderer/components/ui/AppInput.vue b/src/renderer/components/ui/AppInput.vue deleted file mode 100644 index 0f2e96d5..00000000 --- a/src/renderer/components/ui/AppInput.vue +++ /dev/null @@ -1,69 +0,0 @@ -<template> - <textarea - v-if="type === 'textarea'" - v-model="localValue" - class="textarea" - v-bind="$attrs" - /> - <input - v-else - v-model="localValue" - class="input" - type="text" - v-bind="$attrs" - > -</template> - -<script setup lang="ts"> -import { computed } from 'vue' - -interface Props { - modelValue: string | number - type?: string -} - -interface Emits { - (e: 'update:modelValue', value: string | number): void -} - -const emit = defineEmits<Emits>() - -const props = withDefaults(defineProps<Props>(), { - type: 'text' -}) - -const localValue = computed({ - get: () => props.modelValue, - set: v => { - emit('update:modelValue', v) - } -}) -</script> - -<style lang="scss" scoped> -.input, -.textarea { - outline: none; - border: 1px solid var(--color-border); - border-radius: 3px; - padding: 0 var(--spacing-xs); - background-color: var(--color-input); - color: var(--color-text); - &::-webkit-inner-spin-button, - &::-webkit-outer-spin-button { - -webkit-appearance: none; - } -} - -.input { - width: 300px; - height: 32px; -} - -.textarea { - padding: var(--spacing-xs); - width: 400px; - height: 150px; - resize: vertical; -} -</style> diff --git a/src/renderer/components/ui/AppInputTags.vue b/src/renderer/components/ui/AppInputTags.vue deleted file mode 100644 index 4dae6561..00000000 --- a/src/renderer/components/ui/AppInputTags.vue +++ /dev/null @@ -1,94 +0,0 @@ -<template> - <div class="input-tags"> - <VueTagsInput - v-model="tag" - tabindex="-1" - :autocomplete-items="tags" - :tags="localValue" - :placeholder="i18n.t('addTag')" - @tags-changed="onChange" - /> - </div> -</template> - -<script setup lang="ts"> -import { VueTagsInput } from '@sipec/vue3-tags-input' -import { useTagStore } from '@/store/tags' -import { computed, ref } from 'vue' -import { i18n } from '@/electron' - -interface Props { - modelValue: string[] -} - -interface Emits { - (e: 'update:modelValue', value: string[]): void -} - -const emit = defineEmits<Emits>() - -const props = defineProps<Props>() - -const tagStore = useTagStore() - -const localValue = computed({ - get: () => props.modelValue.map(i => ({ text: i })), - set: v => { - emit( - 'update:modelValue', - v.map(i => i.text) - ) - } -}) - -const tag = ref('') - -const tags = computed(() => { - return tagStore.tags - .map(i => ({ text: i.name })) - .filter(i => i.text.toLowerCase().indexOf(tag.value.toLowerCase()) !== -1) -}) - -const onChange = (v: string[]) => { - emit('update:modelValue', v) -} -</script> - -<style lang="scss" scoped> -.input-tags { - :deep(.vue-tags-input) { - max-width: unset; - } - :deep(.ti-input) { - padding: 0; - border: none; - } - :deep(.ti-tags) { - gap: 4px; - .ti-new-tag-input-wrapper { - margin: 0; - input { - size: 11px; - } - } - .ti-new-tag-input { - } - } - :deep(.ti-autocomplete) { - margin-top: 2px; - overflow-y: scroll; - .ti-selected-item { - } - } - :deep(.ti-tag) { - margin: 0; - padding: 0 4px; - border-radius: 3px; - font-size: 11px; - .ti-icon-close { - position: relative; - top: 1px; - } - } -} -</style> diff --git a/src/renderer/components/ui/AppModal.vue b/src/renderer/components/ui/AppModal.vue deleted file mode 100644 index 778125a4..00000000 --- a/src/renderer/components/ui/AppModal.vue +++ /dev/null @@ -1,49 +0,0 @@ -<template> - <div - v-if="show" - class="app-modal" - @click.self="emit('update:show', false)" - > - <div class="body"> - <slot /> - </div> - </div> -</template> - -<script setup lang="ts"> -interface Props { - show: boolean -} - -interface Emits { - (e: 'update:show', value: boolean): void -} - -const emit = defineEmits<Emits>() - -defineProps<Props>() -</script> - -<style lang="scss" scoped> -.app-modal { - position: absolute; - z-index: 1010; - top: 0; - left: 0; - right: 0; - bottom: 0; - padding: var(--spacing-sm); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - background-color: rgba(0, 0, 0, 0.4); - .body { - width: 450px; - height: 350px; - overflow: hidden; - border-radius: 6px; - background-color: var(--color-bg); - } -} -</style> diff --git a/src/renderer/components/ui/AppSelect.vue b/src/renderer/components/ui/AppSelect.vue deleted file mode 100644 index ad2d4017..00000000 --- a/src/renderer/components/ui/AppSelect.vue +++ /dev/null @@ -1,64 +0,0 @@ -<template> - <div class="app-select"> - <select - v-model="localValue" - class="inner" - v-bind="$attrs" - > - <option - v-for="(i, index) in options" - :key="index" - :value="i.value" - > - {{ i.label }} - </option> - </select> - <UniconsAngleDown /> - </div> -</template> - -<script setup lang="ts"> -import { computed } from 'vue' - -interface Props { - options: { label: string; value: string | boolean }[] - modelValue: any -} - -interface Emits { - (e: 'update:modelValue', value: any): void -} - -const emit = defineEmits<Emits>() - -const props = defineProps<Props>() - -const localValue = computed({ - get: () => props.modelValue, - set: v => emit('update:modelValue', v) -}) -</script> - -<style lang="scss" scoped> -.app-select { - position: relative; - .inner { - height: 32px; - outline: none; - border: 1px solid var(--color-border); - border-radius: 3px; - padding: 0 var(--spacing-xs); - -webkit-appearance: none; - width: 300px; - background-color: var(--color-select); - color: var(--color-text); - } - :deep(svg) { - position: absolute; - right: 2px; - top: 50%; - transform: translateY(-50%); - fill: var(--color-text); - } -} -</style> diff --git a/src/renderer/components/ui/AppTree/AppTree.vue b/src/renderer/components/ui/AppTree/AppTree.vue deleted file mode 100644 index ef291af2..00000000 --- a/src/renderer/components/ui/AppTree/AppTree.vue +++ /dev/null @@ -1,102 +0,0 @@ -<template> - <div - ref="tree" - class="tree" - > - <div class="tree__inner"> - <AppTreeNode - v-for="(node, index) in store.clonedNodes" - ref="node" - :key="node.id" - :node="node" - :nodes="store.clonedNodes!" - :index="index" - :hovered-node-id="hoveredNodeId" - > - <template #default="{ node: childNode, deep }"> - <slot - :node="childNode" - :deep="deep" - :hovered-node-id="hoveredNodeId" - /> - </template> - </AppTreeNode> - </div> - </div> -</template> - -<script setup lang="ts"> -import type { Ref } from 'vue' -import { provide, ref, watch } from 'vue' -import { store } from './composable' -import type { Node } from './types' -import { clone } from './helpers' - -interface Props { - modelValue: Node[] | any[] - selectedId?: string - createGhostEl?: Function - // Колбек должен вернуть состояние для props.isHighlighted AppTreeNode - contextMenuHandler: () => Promise<boolean> - focusHandler?: (isFocused: Ref) => void -} - -interface Emits { - (e: 'update:modelValue', value: Node[]): void - (e: 'click:node', value: string): void -} - -const emit = defineEmits<Emits>() -const props = withDefaults(defineProps<Props>(), { - contextMenuHandler: () => Promise.resolve(true) -}) - -const hoveredNodeId = ref('') -const isHoveredByIdDisabled = ref(false) - -const cloneNodes = () => { - store.clonedNodes = clone(props.modelValue) as Node[] -} - -const updateValue = () => emit('update:modelValue', store.clonedNodes) -const clickNode = (id: string) => emit('click:node', id) - -const setHoveredNodeId = (id: string) => { - if (isHoveredByIdDisabled.value) return - hoveredNodeId.value = id -} - -provide('updateValue', updateValue) -provide('clickNode', clickNode) -provide('contextMenuHandler', props.contextMenuHandler) -provide('isHoveredByIdDisabled', isHoveredByIdDisabled) -provide('focusHandler', props.focusHandler) - -defineExpose({ - setHoveredNodeId -}) - -watch( - () => props.modelValue, - () => cloneNodes(), - { - immediate: true - } -) - -watch( - () => props.selectedId, - () => { - store.selectedId = props.selectedId - }, - { immediate: true } -) -</script> - -<style lang="scss" scoped> -.tree { - &__inner { - padding-top: 5px; - } -} -</style> diff --git a/src/renderer/components/ui/AppTree/AppTreeNode.vue b/src/renderer/components/ui/AppTree/AppTreeNode.vue deleted file mode 100644 index 53bae907..00000000 --- a/src/renderer/components/ui/AppTree/AppTreeNode.vue +++ /dev/null @@ -1,394 +0,0 @@ -<template> - <div - class="node" - :class="{ - 'has-children': hasChildren, - 'is-dragged': isDragged - }" - draggable="true" - @dragstart.stop="onDragStart" - @dragleave.stop="onDragLeave" - @dragend.stop="onDragEnd" - @drop.stop="onDrop" - @dragover.prevent - @contextmenu.stop="onClickContextMenu" - > - <div - :id="node.id" - ref="rowRef" - class="node__row" - :class="{ - 'is-hovered': (isHovered && isAllowed) || hoveredNodeId === node.id, - 'is-selected': isSelected, - 'is-focused': isFocused, - 'is-highlighted': isHighlighted - }" - @dragenter.stop="onDragEnter" - @dragover="onDragOver" - @click="onClickNode(node.id)" - > - <span class="node__name"> - <UniconsAngleRight - v-if="node.children.length" - class="node__arrow" - :class="{ 'node__arrow--down': node.isOpen }" - @click.stop="onClickArrow(node.id)" - /> - <span - v-else - class="node__arrow-placeholder" - /> - <slot - :node="node" - :deep="deep" - > - {{ node.name }} - </slot> - </span> - </div> - <template v-if="node.children"> - <AppTreeNode - v-for="(children, idx) in node.children" - v-show="node.isOpen" - :key="children.id" - class="children" - :index="idx" - :deep="deep + 1" - :node="children" - :nodes="node.children" - :hovered-node-id="hoveredNodeId" - > - <template #default="scoped: any"> - <slot - :node="scoped.node" - :deep="scoped.deep" - :hovered-node-id="hoveredNodeId" - /> - </template> - </AppTreeNode> - </template> - <svg - v-if="isShowBetweenLine" - height="10" - :style="betweenLineStyle" - > - <circle - cx="5" - cy="5" - r="3" - stroke="var(--color-primary)" - fill="none" - stroke-width="2" - /> - <line - x1="100%" - x2="8" - y1="5" - y2="5" - stroke="var(--color-primary)" - stroke-width="2" - /> - </svg> - </div> -</template> - -<script setup lang="ts"> -import { onClickOutside } from '@vueuse/core' -import type { CSSProperties, Ref } from 'vue' -import { computed, inject, ref } from 'vue' -import { - store, - isAllowed, - insertNodeByPosition, - pushNode, - toggleNode -} from './composable' -import type { Node, Position } from './types' - -interface Props { - index: number - deep?: number - node: Node - nodes: Node[] - indent?: number - hoveredNodeId?: string - ghostEl?: Function -} - -const props = withDefaults(defineProps<Props>(), { - index: 0, - deep: 0, - indent: 10, - deepArray: () => [0] -}) - -const updateValue = inject('updateValue') as Function -const clickNode = inject('clickNode') as Function -const contextMenuHandler = inject('contextMenuHandler') as Function -const isHoveredByIdDisabled = inject('isHoveredByIdDisabled') as Ref -const focusHandler = inject('focusHandler') as Function - -const hoveredId = ref() -const overPosition = ref<Position>() -const isDragged = ref(false) -const isFocused = ref(false) -const isHighlighted = ref(false) -const rowRef = ref<HTMLElement>() - -// COMPUTED -const hasChildren = computed(() => props.node.children.length > 0) - -const isFirst = computed(() => props.index === 0) - -const isHovered = computed(() => { - return props.node.id === hoveredId.value && overPosition.value === 'center' -}) - -const isSelected = computed(() => store.selectedId === props.node.id) - -const isShowBetweenLine = computed(() => { - if (!store.dragNode) return false - return overPosition.value === 'before' || overPosition.value === 'after' -}) - -const indentStyle = computed(() => { - return props.indent + 'px' -}) - -const hoveredOffsetStyle = computed(() => { - return -(props.deep * props.indent) + 'px' -}) - -const betweenLineStyle = computed(() => { - const style: CSSProperties = { - position: 'absolute', - width: `calc(100% - ${props.deep} * ${indentStyle.value})` - } - - if (overPosition.value === 'before') { - style.top = '-6px' - } - - if (overPosition.value === 'after') { - style.bottom = '-6px' - } - - return style -}) - -// METHODS -const onClickArrow = (id: string) => { - toggleNode(id) - updateValue() -} - -const onClickNode = (id: string) => { - store.selectedId = id - isFocused.value = true - clickNode(id) -} - -const onClickContextMenu = async () => { - isHighlighted.value = true - isHighlighted.value = await contextMenuHandler() -} - -const onDragStart = (e: DragEvent) => { - store.dragNode = props.node - isHoveredByIdDisabled.value = true - - const el = document.createElement('div') - const style = { - position: 'fixed', - left: '-100%', - color: 'var(--color-text)', - fontSize: 'var(--text-md)' - } - - el.id = 'ghost' - el.innerHTML = props.node.name - - Object.assign(el.style, style) - document.body.appendChild(el) - - e.dataTransfer!.setDragImage(el, 0, 0) - setTimeout(() => el.remove(), 0) - - e.dataTransfer!.setData('node', JSON.stringify(props.node)) -} - -const onDragEnd = () => { - store.dragNode = undefined - store.dragEnterNode = undefined - overPosition.value = undefined - isDragged.value = false - isHoveredByIdDisabled.value = false -} - -const onDragEnter = () => { - hoveredId.value = props.node.id - store.dragEnterNode = props.node -} - -const onDragOver = (e: DragEvent) => { - hoveredId.value = props.node.id - - if (props.node?.id === store.dragNode?.id) return - - const height = rowRef.value!.offsetHeight - const before = height * 0.3 - const after = height - before - - if (e.offsetY < before && isFirst.value) { - overPosition.value = 'before' - } else if (e.offsetY > after) { - overPosition.value = 'after' - } else { - overPosition.value = 'center' - } -} - -const onDragLeave = (e: DragEvent) => { - (e.target as HTMLElement).style.background = '' - hoveredId.value = undefined - overPosition.value = undefined -} - -const onDrop = () => { - if (overPosition.value === 'after') { - insertNodeByPosition('after', props.node, store.dragNode!) - updateValue() - } - - if (overPosition.value === 'before') { - insertNodeByPosition('before', props.node, store.dragNode!) - updateValue() - } - - if (overPosition.value === 'center') { - pushNode(props.node, store.dragNode!) - updateValue() - } - - overPosition.value = undefined -} - -onClickOutside(rowRef, () => { - isFocused.value = false - isHighlighted.value = false -}) - -if (focusHandler) focusHandler(isFocused) -</script> - -<style lang="scss" scoped> -$color-blue: #0063e1; -$color-grey: #8c8c8c; -.node { - $r: &; - position: relative; - user-select: none; - + .node { - margin-top: 2px; - } - &__row { - user-select: none; - position: relative; - display: flex; - &.is-hovered, - &.is-selected, - &.is-focused, - &.is-highlighted { - color: #fff; - position: relative; - #{$r}__arrow { - fill: #fff; - } - &::before { - content: ''; - left: v-bind(hoveredOffsetStyle); - right: 0; - top: 0; - bottom: 0; - position: absolute; - background-color: var(--color-primary); - z-index: 0; - border-radius: 5px; - } - } - &.is-selected { - #{$r}__arrow { - fill: var(--color-text); - } - color: var(--color-text); - &::before { - background-color: var(--color-sidebar-item-selected); - } - :deep(svg) { - fill: var(--color-text); - } - } - &.is-focused, - &.is-hovered { - color: #fff; - #{$r}__arrow { - fill: #fff; - } - :deep(svg) { - fill: #fff !important; - } - &::before { - background-color: var(--color-primary); - } - } - &.is-highlighted { - color: var(--color-text); - &::before { - background-color: transparent; - border: 2px solid var(--color-primary); - } - :deep(svg) { - fill: var(--color-text) !important; - } - &.is-focused { - :deep(svg) { - fill: var(--color-text); - } - } - &.is-selected { - :deep(svg) { - fill: var(--color-text) !important; - } - } - } - } - &__name { - display: flex; - align-items: center; - position: relative; - z-index: 1; - width: 100%; - } - .children { - padding-left: 10px; - padding-left: v-bind(indentStyle); - } - &__arrow { - position: relative; - color: $color-grey; - display: flex; - align-items: center; - justify-content: center; - width: 19px; - height: 19px; - fill: $color-grey; - z-index: 1; - &-placeholder { - width: 19px; - } - &--down { - transform: rotate(90deg); - } - } -} -</style> diff --git a/src/renderer/components/ui/AppTree/composable.ts b/src/renderer/components/ui/AppTree/composable.ts deleted file mode 100644 index f97cff63..00000000 --- a/src/renderer/components/ui/AppTree/composable.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { computed, reactive } from 'vue' -import type { Node, Store, Position } from './types' -import { - deleteNodeById, - insertNodeById, - pushNodeById, - toggleNodeById -} from './helpers' - -export const store = reactive({ - id: 'tree-1', - clonedNodes: [] -} as Store) - -export const dragNodeChildrenIds = computed(() => { - const ids: string[] = [] - - const findIds = (nodes: Node[]) => { - nodes.forEach(i => { - ids.push(i.id) - - if (i.children.length) { - findIds(i.children) - } - }) - } - - findIds(store.dragNode?.children || []) - - return ids -}) - -export const isAllowed = computed(() => { - if (!store.dragNode) return false - - const isSameNode = store.dragNode?.id === store.dragEnterNode?.id - const isChildrenNode = dragNodeChildrenIds.value.includes( - store.dragEnterNode!.id - ) - - return !isSameNode && !isChildrenNode -}) - -export const insertNodeByPosition = ( - position: Position, - to: Node, - from: Node -) => { - if (!isAllowed.value) return - - deleteNodeById(store.clonedNodes, from.id) - insertNodeById(store.clonedNodes, to.id, from, position) -} - -export const pushNode = (to: Node, from: Node) => { - if (!isAllowed.value) return - - deleteNodeById(store.clonedNodes, from.id) - pushNodeById(store.clonedNodes, to.id, from) -} - -export const toggleNode = (id: string) => { - toggleNodeById(store.clonedNodes, id) -} diff --git a/src/renderer/components/ui/AppTree/helpers.ts b/src/renderer/components/ui/AppTree/helpers.ts deleted file mode 100644 index 45d47adf..00000000 --- a/src/renderer/components/ui/AppTree/helpers.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { Node, Position } from './types' - -export function clone (obj: any) { - return JSON.parse(JSON.stringify(obj)) -} - -export function guid () { - return Math.random().toString(36).substring(2, 15) -} - -export function deleteNodeById (nodes: Node[] = [], id: string) { - for (const [index, node] of nodes.entries()) { - if (node.id === id) { - nodes.splice(index, 1) - break - } - if (node.children.length) { - deleteNodeById(node.children, id) - } - } -} - -export function pushNodeById (nodes: Node[] = [], id: string, payload: Node) { - for (const [, node] of nodes.entries()) { - if (node.id === id) { - node.children.push(payload) - break - } - - if (node.children.length) { - pushNodeById(node.children, id, payload) - } - } -} - -export function insertNodeById ( - nodes: Node[] = [], - id: string, - payload: Node, - position: Position = 'after' -) { - for (const [index, node] of nodes.entries()) { - if (node.id === id) { - if (position === 'after') { - console.log('insertNodeById after', node.name, payload.name, index) - nodes.splice(index + 1, 0, payload) - } - if (position === 'before') { - console.log('insertNodeById before', node.name, payload.name, index) - nodes.unshift(payload) - } - break - } - - if (node.children.length) { - insertNodeById(node.children, id, payload, position) - } - } -} - -export function toggleNodeById (nodes: Node[] = [], id: string) { - for (const [, node] of nodes.entries()) { - if (node.id === id) { - node.isOpen = !node.isOpen - break - } - - if (node.children.length) { - toggleNodeById(node.children, id) - } - } -} diff --git a/src/renderer/components/ui/button/Button.vue b/src/renderer/components/ui/button/Button.vue new file mode 100644 index 00000000..5842b398 --- /dev/null +++ b/src/renderer/components/ui/button/Button.vue @@ -0,0 +1,19 @@ +<script setup lang="ts"> +import type { Variants } from './variants' +import { cn } from '@/utils' +import { variants } from './variants' + +interface Props { + variant?: Variants['variant'] + size?: Variants['size'] + class?: string +} + +const props = defineProps<Props>() +</script> + +<template> + <button :class="cn(variants({ variant, size }), props.class)"> + <slot /> + </button> +</template> diff --git a/src/renderer/components/ui/button/variants.ts b/src/renderer/components/ui/button/variants.ts new file mode 100644 index 00000000..b1092b3b --- /dev/null +++ b/src/renderer/components/ui/button/variants.ts @@ -0,0 +1,27 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export const variants = cva( + 'inline-flex items-center justify-center rounded cursor-default focus-visible:outline-none leading-none disabled:cursor-not-allowed disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-button text-button-fg hover:bg-button-hover', + primary: 'bg-primary text-white hover:bg-primary/70', + icon: 'bg-transparent hover:bg-button-hover hover:[&>svg]:text-button-fg hover:text-button-fg', + }, + size: { + sm: 'px-2 h-5', + md: 'px-4 h-6', + icon: 'h-5 w-8', + }, + }, + + defaultVariants: { + variant: 'default', + size: 'sm', + }, + }, +) + +export type Variants = VariantProps<typeof variants> diff --git a/src/renderer/components/ui/folder-icon/FolderIcon.vue b/src/renderer/components/ui/folder-icon/FolderIcon.vue new file mode 100644 index 00000000..526a0147 --- /dev/null +++ b/src/renderer/components/ui/folder-icon/FolderIcon.vue @@ -0,0 +1,22 @@ +<script setup lang="ts"> +import type { Variants } from './variants' +import { cn } from '@/utils' +import { iconsSet } from './icons' +import { variants } from './variants' + +interface Props { + name: string + size?: Variants['size'] + class?: string +} + +const props = defineProps<Props>() +</script> + +<template> + <div + :class="cn(variants({ size }), props.class)" + :data-icon-name="name" + v-html="iconsSet[name]" + /> +</template> diff --git a/src/renderer/components/ui/folder-icons/icons.ts b/src/renderer/components/ui/folder-icon/icons.ts similarity index 62% rename from src/renderer/components/ui/folder-icons/icons.ts rename to src/renderer/components/ui/folder-icon/icons.ts index 19945773..dd28e3d9 100644 --- a/src/renderer/components/ui/folder-icons/icons.ts +++ b/src/renderer/components/ui/folder-icon/icons.ts @@ -1,4 +1,7 @@ -const files = import.meta.glob('@/assets/svg/icons/**.svg', { as: 'raw' }) +const files = import.meta.glob('@/assets/svg/icons/**.svg', { + as: 'raw', + eager: true, +}) const re = /\/([^/]+)\.svg$/ const iconsSet: Record<string, string> = {} @@ -6,11 +9,11 @@ const iconsSet: Record<string, string> = {} const icons = Object.entries(files).map(([k, v]) => { const name = k.match(re)?.[1] if (name) { - iconsSet[name] = v as unknown as string + iconsSet[name] = v as string } return { name, - source: v + source: v, } }) diff --git a/src/renderer/components/ui/folder-icon/variants.ts b/src/renderer/components/ui/folder-icon/variants.ts new file mode 100644 index 00000000..2fc56eee --- /dev/null +++ b/src/renderer/components/ui/folder-icon/variants.ts @@ -0,0 +1,16 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export const variants = cva('', { + variants: { + size: { + sm: 'w-4 h-4', + md: 'w-8 h-8', + }, + }, + defaultVariants: { + size: 'sm', + }, +}) + +export type Variants = VariantProps<typeof variants> diff --git a/src/renderer/components/ui/folder-icons/AppFolderIcons.vue b/src/renderer/components/ui/folder-icons/AppFolderIcons.vue deleted file mode 100644 index 197c46a8..00000000 --- a/src/renderer/components/ui/folder-icons/AppFolderIcons.vue +++ /dev/null @@ -1,98 +0,0 @@ -<template> - <div class="app-folder-icons"> - <div class="search"> - <AppInput - ref="refInput" - v-model="search" - :placeholder="`${i18n.t('search')}...`" - /> - <AppButton @click="onReset"> - Reset - </AppButton> - </div> - <PerfectScrollbar> - <div class="icons"> - <AppFolderIconsItem - v-for="i in iconsBySearch" - :key="i.name" - :name="i.name!" - :source="i.source" - @click="onClick(i.name!)" - /> - </div> - </PerfectScrollbar> - </div> -</template> - -<script setup lang="ts"> -import { ref, computed, onBeforeUnmount, onMounted } from 'vue' -import { icons } from './icons' -import { i18n } from '@/electron' -import { useFolderStore } from '@/store/folders' -import { track } from '@/services/analytics' - -const folderStore = useFolderStore() - -const search = ref('') -const refInput = ref<HTMLElement>() - -const iconsBySearch = computed(() => { - if (search.value === '') { - return icons - } - return icons.filter(i => i.name?.includes(search.value.toLowerCase())) -}) - -const onClick = async (name: string) => { - if (folderStore.selectedContextId) { - await folderStore.patchFoldersById(folderStore.selectedContextId, { - icon: name - }) - track('folders/set-custom-icon') - } -} - -const onReset = async () => { - if (folderStore.selectedContextId) { - await folderStore.patchFoldersById(folderStore.selectedContextId, { - icon: null - }) - } -} - -onMounted(() => { - const inputEl = document.querySelector<HTMLInputElement>( - '.app-folder-icons input' - )! - inputEl.focus() -}) - -onBeforeUnmount(() => { - folderStore.selectedContextId = undefined -}) -</script> - -<style lang="scss" scoped> -.app-folder-icons { - padding: var(--spacing-sm); - .search { - margin-bottom: var(--spacing-sm); - input { - width: 100%; - } - } - .search { - display: flex; - gap: var(--spacing-sm); - } - .icons { - display: grid; - grid-template-columns: repeat(8, 1fr); - grid-auto-rows: 36px; - gap: 4px; - } - :deep(.ps) { - height: 270px; - } -} -</style> diff --git a/src/renderer/components/ui/folder-icons/AppFolderIconsItem.vue b/src/renderer/components/ui/folder-icons/AppFolderIconsItem.vue deleted file mode 100644 index 56e2ad8e..00000000 --- a/src/renderer/components/ui/folder-icons/AppFolderIconsItem.vue +++ /dev/null @@ -1,38 +0,0 @@ -<template> - <div - class="item" - :data-name="name" - v-html="iconsSet[name]" - /> -</template> - -<script setup lang="ts"> -import { iconsSet } from './icons' -interface Props { - name: string -} - -defineProps<Props>() -</script> - -<style lang="scss" scoped> -.item { - display: flex; - align-items: center; - justify-content: center; - border-radius: 6px; - &:hover { - background-color: var(--color-snippet-selected); - } - :deep(svg) { - width: 24px; - height: 24px; - } - &.folder { - :deep(svg) { - width: 1.2em; - height: 1.2em; - } - } -} -</style> diff --git a/src/renderer/components/ui/form/AppForm.vue b/src/renderer/components/ui/form/AppForm.vue deleted file mode 100644 index 3be99dcd..00000000 --- a/src/renderer/components/ui/form/AppForm.vue +++ /dev/null @@ -1,17 +0,0 @@ -<template> - <div class="form"> - <slot /> - </div> -</template> - -<script setup lang="ts"></script> - -<style lang="scss" scoped> -.form { - max-width: 800px; - display: flex; - flex-flow: column; - gap: var(--spacing-md); - margin-bottom: var(--spacing-md); -} -</style> diff --git a/src/renderer/components/ui/form/AppFormItem.vue b/src/renderer/components/ui/form/AppFormItem.vue deleted file mode 100644 index 03b5262d..00000000 --- a/src/renderer/components/ui/form/AppFormItem.vue +++ /dev/null @@ -1,55 +0,0 @@ -<template> - <div class="form-item"> - <div class="label"> - {{ label }} - </div> - <div class="inner"> - <div class="body"> - <slot /> - </div> - <div - v-if="$slots.actions" - class="actions" - > - <slot name="actions" /> - </div> - <div - v-if="$slots.desc" - class="desc" - > - <slot name="desc" /> - </div> - </div> - </div> -</template> - -<script setup lang="ts"> -interface Props { - label: string -} - -defineProps<Props>() -</script> - -<style lang="scss" scoped> -.form-item { - display: grid; - grid-template-columns: 150px 1fr; - gap: var(--spacing-sm); - .inner { - display: flex; - flex-flow: column; - } - .body { - display: flex; - align-items: center; - gap: var(--spacing-sm); - } - .actions { - margin-top: var(--spacing-sm); - display: flex; - flex-flow: wrap; - gap: var(--spacing-sm); - } -} -</style> diff --git a/src/renderer/components/ui/gutter/Gutter.vue b/src/renderer/components/ui/gutter/Gutter.vue new file mode 100644 index 00000000..93c0ec27 --- /dev/null +++ b/src/renderer/components/ui/gutter/Gutter.vue @@ -0,0 +1,50 @@ +<script setup lang="ts"> +const isHovered = ref(false) +const isDragging = ref(false) +let hoverTimer: number | null = null + +function onMouseEnter() { + hoverTimer = window.setTimeout(() => { + isHovered.value = true + }, 500) +} + +function onMouseLeave() { + if (hoverTimer) { + clearTimeout(hoverTimer) + hoverTimer = null + } + if (!isDragging.value) { + isHovered.value = false + } +} + +function onMouseDown() { + isDragging.value = true + isHovered.value = true + document.addEventListener('mouseup', onMouseUp) + document.addEventListener('mousemove', onMouseMove) +} + +function onMouseUp() { + isDragging.value = false + isHovered.value = false + document.removeEventListener('mouseup', onMouseUp) + document.removeEventListener('mousemove', onMouseMove) +} + +function onMouseMove() { + isHovered.value = true +} +</script> + +<template> + <div + data-gutter + class="absolute top-0 right-0 w-[1px] h-full cursor-col-resize after:block after:h-full after:w-[8px] after:absolute after:-left-[3px] after:z-10 bg-border" + :class="{ 'bg-primary w-[2px]': isHovered || isDragging }" + @mouseenter="onMouseEnter" + @mouseleave="onMouseLeave" + @mousedown="onMouseDown" + /> +</template> diff --git a/src/renderer/components/ui/input/Input.vue b/src/renderer/components/ui/input/Input.vue new file mode 100644 index 00000000..dda643e1 --- /dev/null +++ b/src/renderer/components/ui/input/Input.vue @@ -0,0 +1,77 @@ +<script setup lang="ts"> +import type { Variants } from './variants' +import { cn } from '@/utils' +import { X } from 'lucide-vue-next' +import { variants } from './variants' + +defineOptions({ + inheritAttrs: false, +}) + +const props = withDefaults(defineProps<Props>(), { + type: 'text', +}) + +const attrs = useAttrs() + +interface Props { + variant?: Variants['variant'] + class?: string + placeholder?: string + clearable?: boolean + type?: 'text' | 'number' | 'textarea' + focus?: boolean +} + +const model = defineModel<string>() + +function clear() { + model.value = '' +} + +const inputRef = ref<HTMLInputElement>() + +watchEffect(() => { + if (props.focus) { + nextTick(() => { + inputRef.value?.focus() + }) + } +}) +</script> + +<template> + <div class="relative flex"> + <input + v-if="type !== 'textarea'" + ref="inputRef" + v-model="model" + :class="[ + cn(variants({ variant }), props.class), + { 'pr-9': clearable && model }, + ]" + :placeholder="placeholder" + :type="type" + v-bind="attrs" + > + <textarea + v-else + ref="inputRef" + v-model="model" + v-bind="$attrs" + :class="[ + cn(variants({ variant }), props.class), + { 'pr-9': clearable && model }, + ]" + /> + <UiButton + v-if="clearable && model && type !== 'textarea'" + class="absolute top-1/2 right-2 -translate-y-1/2" + variant="icon" + size="sm" + @click="clear" + > + <X class="h-3 w-3" /> + </UiButton> + </div> +</template> diff --git a/src/renderer/components/ui/input/variants.ts b/src/renderer/components/ui/input/variants.ts new file mode 100644 index 00000000..b383bed7 --- /dev/null +++ b/src/renderer/components/ui/input/variants.ts @@ -0,0 +1,19 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export const variants = cva( + 'w-full rounded-md transition-colors duration-200 focus:outline-none placeholder:text-text-muted py-1 px-2 border', + { + variants: { + variant: { + default: 'border-border focus:border-primary', + ghost: 'border-transparent focus:border-transparent', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +export type Variants = VariantProps<typeof variants> diff --git a/src/renderer/components/ui/layout/AppLayoutOneColumn.vue b/src/renderer/components/ui/layout/AppLayoutOneColumn.vue deleted file mode 100644 index 7d14c9b8..00000000 --- a/src/renderer/components/ui/layout/AppLayoutOneColumn.vue +++ /dev/null @@ -1,58 +0,0 @@ -<template> - <div class="layout-one-column"> - <div class="title"> - <h3>{{ title }}</h3> - <AppActionButton - v-tooltip="i18n.t('common:close')" - @click="onClose" - > - <UniconsTimes /> - </AppActionButton> - </div> - <div class="body"> - <slot /> - </div> - </div> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' - -interface Props { - title: string -} - -interface Emits { - (e: 'close'): void -} - -const emit = defineEmits<Emits>() - -defineProps<Props>() - -function onClose () { - emit('close') -} -</script> - -<style lang="scss" scoped> -.layout-one-column { - h3 { - margin: 0; - } - - margin-top: var(--title-bar-height); - - .title { - padding: var(--spacing-sm); - display: flex; - align-items: center; - justify-content: space-between; - } - - .body { - padding: 0 var(--spacing-sm); - display: grid; - } -} -</style> diff --git a/src/renderer/components/ui/menu/AppMenu.vue b/src/renderer/components/ui/menu/AppMenu.vue deleted file mode 100644 index 77bc8a42..00000000 --- a/src/renderer/components/ui/menu/AppMenu.vue +++ /dev/null @@ -1,109 +0,0 @@ -<template> - <div class="menu"> - <div class="names"> - <template v-if="groups.length"> - <template - v-for="g in groups" - :key="g.name" - > - <div class="group"> - {{ g.label }} - </div> - <div - v-for="i in g.items" - :key="i.value" - class="name" - :class="{ 'is-selected': modelValue === i.value }" - @click="onClickItem(i)" - > - {{ i.name }} - </div> - </template> - </template> - <template v-else> - <div - v-for="i in items" - :key="i.value" - class="name" - :class="{ 'is-selected': modelValue === i.value }" - @click="onClickItem(i)" - > - {{ i.name }} - </div> - </template> - </div> - <div - ref="bodyRef" - class="body" - > - <PerfectScrollbar> - <slot /> - </PerfectScrollbar> - </div> - </div> -</template> - -<script setup lang="ts"> -import { computed, provide, ref } from 'vue' -import type { MenuItem, GroupItem } from './types' -import { menuKey } from './keys' - -interface Props { - modelValue: string -} - -interface Emits { - (e: 'update:modelValue', value: string): void -} - -const emit = defineEmits<Emits>() - -const props = defineProps<Props>() - -const items = ref<MenuItem[]>([]) -const groups = ref<GroupItem[]>([]) - -const bodyRef = ref<HTMLElement>() - -const onClickItem = (item: MenuItem) => { - emit('update:modelValue', item.value) - const el = bodyRef.value?.querySelector('.ps') - if (el) el.scrollTop = 0 -} - -provide(menuKey, { - active: computed(() => props.modelValue), - items, - groups, - onClickItem -}) -</script> - -<style lang="scss" scoped> -.menu { - width: 100%; - display: grid; - grid-template-columns: 180px 1fr; - gap: var(--spacing-sm); - .group { - padding: var(--spacing-xs); - font-weight: bold; - &:not(:first-child) { - padding-top: var(--spacing-sm); - } - } - .name { - padding: var(--spacing-xs); - user-select: none; - &.is-selected { - border-radius: 5px; - background-color: var(--color-menu-selected); - } - } - .body { - :deep(.ps) { - height: calc(100vh - 80px); - } - } -} -</style> diff --git a/src/renderer/components/ui/menu/AppMenuGroup.vue b/src/renderer/components/ui/menu/AppMenuGroup.vue deleted file mode 100644 index b4f00bfa..00000000 --- a/src/renderer/components/ui/menu/AppMenuGroup.vue +++ /dev/null @@ -1,27 +0,0 @@ -<template> - <div class="menu-group"> - <slot /> - </div> -</template> - -<script setup lang="ts"> -import { inject } from 'vue' -import { menuKey } from './keys' - -interface Props { - label: string - name: string -} - -const props = defineProps<Props>() - -const root = inject(menuKey)! - -root.groups.value.push({ - name: props.name, - label: props.label, - items: [] -}) -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/ui/menu/AppMenuItem.vue b/src/renderer/components/ui/menu/AppMenuItem.vue deleted file mode 100644 index f6d2f8b7..00000000 --- a/src/renderer/components/ui/menu/AppMenuItem.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> - <div - v-if="isShow" - class="menu-item" - > - <slot /> - </div> -</template> - -<script setup lang="ts"> -import { computed, inject } from 'vue' -import { menuKey } from './keys' - -interface Props { - name: string - value: string - group?: string -} - -const props = defineProps<Props>() -const root = inject(menuKey)! - -const init = () => { - if (root.groups.value.length) { - root.groups.value - .find(g => g.name === props.group) - ?.items.push({ - name: props.name, - value: props.value - }) - } else { - const index = root.items.value.findIndex(i => i.value === props.value) - - if (index === -1) { - root.items.value.push({ - name: props.name, - value: props.value - }) - } - } -} - -const isShow = computed(() => root.active.value === props.value) - -init() -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/components/ui/menu/keys.ts b/src/renderer/components/ui/menu/keys.ts deleted file mode 100644 index 96835ab2..00000000 --- a/src/renderer/components/ui/menu/keys.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { InjectionKey } from 'vue' -import type { MenuInject } from './types' - -export const menuKey: InjectionKey<MenuInject> = Symbol('menu') diff --git a/src/renderer/components/ui/menu/types/index.d.ts b/src/renderer/components/ui/menu/types/index.d.ts deleted file mode 100644 index 64a0b538..00000000 --- a/src/renderer/components/ui/menu/types/index.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Ref } from 'vue' - -export interface MenuItem { - name: string - value: string -} - -export interface GroupItem { - name: string - label: string - items: MenuItem[] -} - -export interface MenuInject { - active: Ref<string> - items: Ref<MenuItem[]> - groups: Ref<GroupItem[]> - onClickItem: (item: MenuItem) => void -} diff --git a/src/renderer/components/ui/shadcn/command/Command.vue b/src/renderer/components/ui/shadcn/command/Command.vue new file mode 100644 index 00000000..0c196096 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/Command.vue @@ -0,0 +1,39 @@ +<script setup lang="ts"> +import type { ComboboxRootEmits, ComboboxRootProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxRoot, useForwardPropsEmits } from 'radix-vue' +import { computed } from 'vue' + +const props = withDefaults( + defineProps<ComboboxRootProps & { class?: HTMLAttributes['class'] }>(), + { + open: true, + modelValue: '', + }, +) + +const emits = defineEmits<ComboboxRootEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ComboboxRoot + v-bind="forwarded" + :class=" + cn( + 'bg-bg text-text flex h-full w-full flex-col overflow-hidden rounded-md', + props.class, + ) + " + > + <slot /> + </ComboboxRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandDialog.vue b/src/renderer/components/ui/shadcn/command/CommandDialog.vue new file mode 100644 index 00000000..70d2d3c7 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandDialog.vue @@ -0,0 +1,23 @@ +<script setup lang="ts"> +import type { DialogRootEmits, DialogRootProps } from 'radix-vue' +import { Dialog, DialogContent } from '@/components/ui/shadcn/dialog' +import { useForwardPropsEmits } from 'radix-vue' +import Command from './Command.vue' + +const props = defineProps<DialogRootProps>() +const emits = defineEmits<DialogRootEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <Dialog v-bind="forwarded"> + <DialogContent class="overflow-hidden p-0 shadow-lg"> + <Command + class="[&_[cmdk-group-heading]]:text-text [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5" + > + <slot /> + </Command> + </DialogContent> + </Dialog> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandEmpty.vue b/src/renderer/components/ui/shadcn/command/CommandEmpty.vue new file mode 100644 index 00000000..e72c1e83 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandEmpty.vue @@ -0,0 +1,26 @@ +<script setup lang="ts"> +import type { ComboboxEmptyProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxEmpty } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + ComboboxEmptyProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ComboboxEmpty + v-bind="delegatedProps" + :class="cn('py-1.5 text-center text-sm', props.class)" + > + <slot /> + </ComboboxEmpty> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandGroup.vue b/src/renderer/components/ui/shadcn/command/CommandGroup.vue new file mode 100644 index 00000000..268e457b --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandGroup.vue @@ -0,0 +1,40 @@ +<script setup lang="ts"> +import type { ComboboxGroupProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxGroup, ComboboxLabel } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + ComboboxGroupProps & { + class?: HTMLAttributes['class'] + heading?: string + } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ComboboxGroup + v-bind="delegatedProps" + :class=" + cn( + 'text-text [&_[cmdk-group-heading]]:text-text overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium', + props.class, + ) + " + > + <ComboboxLabel + v-if="heading" + class="text-text-muted px-2 py-1.5 text-xs font-medium" + > + {{ heading }} + </ComboboxLabel> + <slot /> + </ComboboxGroup> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandInput.vue b/src/renderer/components/ui/shadcn/command/CommandInput.vue new file mode 100644 index 00000000..eeb099ff --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandInput.vue @@ -0,0 +1,45 @@ +<script setup lang="ts"> +import type { ComboboxInputProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { Search } from 'lucide-vue-next' +import { ComboboxInput, useForwardProps } from 'radix-vue' +import { computed } from 'vue' + +defineOptions({ + inheritAttrs: false, +}) + +const props = defineProps< + ComboboxInputProps & { + class?: HTMLAttributes['class'] + } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwardedProps = useForwardProps(delegatedProps) +</script> + +<template> + <div + class="border-border flex items-center border-b px-2" + cmdk-input-wrapper + > + <Search class="mr-2 h-4 w-4 shrink-0 opacity-50" /> + <ComboboxInput + v-bind="{ ...forwardedProps, ...$attrs }" + auto-focus + :class=" + cn( + 'placeholder:text-text-muted flex h-11 w-full rounded-md bg-transparent py-1 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50', + props.class, + ) + " + /> + </div> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandItem.vue b/src/renderer/components/ui/shadcn/command/CommandItem.vue new file mode 100644 index 00000000..021a0345 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandItem.vue @@ -0,0 +1,34 @@ +<script setup lang="ts"> +import type { ComboboxItemEmits, ComboboxItemProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxItem, useForwardPropsEmits } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + ComboboxItemProps & { class?: HTMLAttributes['class'] } +>() +const emits = defineEmits<ComboboxItemEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ComboboxItem + v-bind="forwarded" + :class=" + cn( + 'data-[highlighted]:bg-list-selection data-[highlighted]:text-list-selection-fg relative flex cursor-default items-center rounded-sm px-2 py-0.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + props.class, + ) + " + > + <slot /> + </ComboboxItem> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandList.vue b/src/renderer/components/ui/shadcn/command/CommandList.vue new file mode 100644 index 00000000..2aea3710 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandList.vue @@ -0,0 +1,34 @@ +<script setup lang="ts"> +import type { ComboboxContentEmits, ComboboxContentProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxContent, useForwardPropsEmits } from 'radix-vue' +import { computed } from 'vue' + +const props = withDefaults( + defineProps<ComboboxContentProps & { class?: HTMLAttributes['class'] }>(), + { + dismissable: false, + }, +) +const emits = defineEmits<ComboboxContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ComboboxContent + v-bind="forwarded" + :class="cn('max-h-[300px] overflow-x-hidden overflow-y-auto', props.class)" + > + <div role="presentation"> + <slot /> + </div> + </ComboboxContent> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandSeparator.vue b/src/renderer/components/ui/shadcn/command/CommandSeparator.vue new file mode 100644 index 00000000..752834c1 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandSeparator.vue @@ -0,0 +1,26 @@ +<script setup lang="ts"> +import type { ComboboxSeparatorProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ComboboxSeparator } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + ComboboxSeparatorProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ComboboxSeparator + v-bind="delegatedProps" + :class="cn('bg-border -mx-1 h-px', props.class)" + > + <slot /> + </ComboboxSeparator> +</template> diff --git a/src/renderer/components/ui/shadcn/command/CommandShortcut.vue b/src/renderer/components/ui/shadcn/command/CommandShortcut.vue new file mode 100644 index 00000000..d54b881f --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/CommandShortcut.vue @@ -0,0 +1,14 @@ +<script setup lang="ts"> +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' + +const props = defineProps<{ + class?: HTMLAttributes['class'] +}>() +</script> + +<template> + <span :class="cn('text-text ml-auto text-xs tracking-widest', props.class)"> + <slot /> + </span> +</template> diff --git a/src/renderer/components/ui/shadcn/command/index.ts b/src/renderer/components/ui/shadcn/command/index.ts new file mode 100644 index 00000000..0e35f4b9 --- /dev/null +++ b/src/renderer/components/ui/shadcn/command/index.ts @@ -0,0 +1,9 @@ +export { default as Command } from './Command.vue' +export { default as CommandDialog } from './CommandDialog.vue' +export { default as CommandEmpty } from './CommandEmpty.vue' +export { default as CommandGroup } from './CommandGroup.vue' +export { default as CommandInput } from './CommandInput.vue' +export { default as CommandItem } from './CommandItem.vue' +export { default as CommandList } from './CommandList.vue' +export { default as CommandSeparator } from './CommandSeparator.vue' +export { default as CommandShortcut } from './CommandShortcut.vue' diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenu.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenu.vue new file mode 100644 index 00000000..363e9c6b --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenu.vue @@ -0,0 +1,15 @@ +<script setup lang="ts"> +import type { ContextMenuRootEmits, ContextMenuRootProps } from 'radix-vue' +import { ContextMenuRoot, useForwardPropsEmits } from 'radix-vue' + +const props = defineProps<ContextMenuRootProps>() +const emits = defineEmits<ContextMenuRootEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <ContextMenuRoot v-bind="forwarded"> + <slot /> + </ContextMenuRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuCheckboxItem.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuCheckboxItem.vue new file mode 100644 index 00000000..0657922e --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuCheckboxItem.vue @@ -0,0 +1,44 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { Check } from 'lucide-vue-next' +import { + ContextMenuCheckboxItem, + type ContextMenuCheckboxItemEmits, + type ContextMenuCheckboxItemProps, + ContextMenuItemIndicator, + useForwardPropsEmits, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuCheckboxItemProps & { class?: HTMLAttributes['class'] } +>() +const emits = defineEmits<ContextMenuCheckboxItemEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ContextMenuCheckboxItem + v-bind="forwarded" + :class=" + cn( + 'focus:bg-list-selection focus:text-list-selection-fg relative flex cursor-default items-center rounded-sm py-0.5 pr-2 pl-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + props.class, + ) + " + > + <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <ContextMenuItemIndicator> + <Check class="text-text-muted h-3 w-3" /> + </ContextMenuItemIndicator> + </span> + <slot /> + </ContextMenuCheckboxItem> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuContent.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuContent.vue new file mode 100644 index 00000000..504d4c19 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuContent.vue @@ -0,0 +1,42 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { + ContextMenuContent, + type ContextMenuContentEmits, + type ContextMenuContentProps, + ContextMenuPortal, + useForwardPropsEmits, +} from 'radix-vue' + +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuContentProps & { class?: HTMLAttributes['class'] } +>() + +const emits = defineEmits<ContextMenuContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ContextMenuPortal> + <ContextMenuContent + v-bind="forwarded" + :class=" + cn( + 'border-border bg-bg text-text animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md', + props.class, + ) + " + > + <slot /> + </ContextMenuContent> + </ContextMenuPortal> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuGroup.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuGroup.vue new file mode 100644 index 00000000..b7458d77 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuGroup.vue @@ -0,0 +1,11 @@ +<script setup lang="ts"> +import { ContextMenuGroup, type ContextMenuGroupProps } from 'radix-vue' + +const props = defineProps<ContextMenuGroupProps>() +</script> + +<template> + <ContextMenuGroup v-bind="props"> + <slot /> + </ContextMenuGroup> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuItem.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuItem.vue new file mode 100644 index 00000000..d13ca19b --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuItem.vue @@ -0,0 +1,38 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { + ContextMenuItem, + type ContextMenuItemEmits, + type ContextMenuItemProps, + useForwardPropsEmits, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuItemProps & { class?: HTMLAttributes['class'], inset?: boolean } +>() +const emits = defineEmits<ContextMenuItemEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ContextMenuItem + v-bind="forwarded" + :class=" + cn( + 'focus:bg-list-selection focus:text-list-selection-fg relative flex cursor-default items-center rounded-sm px-2 py-0.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + inset && 'pl-8', + props.class, + ) + " + > + <slot /> + </ContextMenuItem> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuLabel.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuLabel.vue new file mode 100644 index 00000000..05b1b645 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuLabel.vue @@ -0,0 +1,30 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { ContextMenuLabel, type ContextMenuLabelProps } from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuLabelProps & { class?: HTMLAttributes['class'], inset?: boolean } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ContextMenuLabel + v-bind="delegatedProps" + :class=" + cn( + 'text-text-muted px-2 py-0.5 text-xs font-semibold', + inset && 'pl-8', + props.class, + ) + " + > + <slot /> + </ContextMenuLabel> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuPortal.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuPortal.vue new file mode 100644 index 00000000..73dc714b --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuPortal.vue @@ -0,0 +1,11 @@ +<script setup lang="ts"> +import { ContextMenuPortal, type ContextMenuPortalProps } from 'radix-vue' + +const props = defineProps<ContextMenuPortalProps>() +</script> + +<template> + <ContextMenuPortal v-bind="props"> + <slot /> + </ContextMenuPortal> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioGroup.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioGroup.vue new file mode 100644 index 00000000..33273a74 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioGroup.vue @@ -0,0 +1,19 @@ +<script setup lang="ts"> +import { + ContextMenuRadioGroup, + type ContextMenuRadioGroupEmits, + type ContextMenuRadioGroupProps, + useForwardPropsEmits, +} from 'radix-vue' + +const props = defineProps<ContextMenuRadioGroupProps>() +const emits = defineEmits<ContextMenuRadioGroupEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <ContextMenuRadioGroup v-bind="forwarded"> + <slot /> + </ContextMenuRadioGroup> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioItem.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioItem.vue new file mode 100644 index 00000000..a3e7fcdc --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuRadioItem.vue @@ -0,0 +1,44 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { Circle } from 'lucide-vue-next' +import { + ContextMenuItemIndicator, + ContextMenuRadioItem, + type ContextMenuRadioItemEmits, + type ContextMenuRadioItemProps, + useForwardPropsEmits, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuRadioItemProps & { class?: HTMLAttributes['class'] } +>() +const emits = defineEmits<ContextMenuRadioItemEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ContextMenuRadioItem + v-bind="forwarded" + :class=" + cn( + 'focus:bg-list-selection focus:text-list-selection-fg relative flex cursor-default items-center rounded-sm py-0.5 pr-2 pl-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + props.class, + ) + " + > + <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <ContextMenuItemIndicator> + <Circle class="fill-text-muted text-text-muted h-1.5 w-1.5" /> + </ContextMenuItemIndicator> + </span> + <slot /> + </ContextMenuRadioItem> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuSeparator.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSeparator.vue new file mode 100644 index 00000000..7d0b9058 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSeparator.vue @@ -0,0 +1,25 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { + ContextMenuSeparator, + type ContextMenuSeparatorProps, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuSeparatorProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ContextMenuSeparator + v-bind="delegatedProps" + :class="cn('bg-border -mx-1 my-1 h-px', props.class)" + /> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuShortcut.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuShortcut.vue new file mode 100644 index 00000000..78404713 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuShortcut.vue @@ -0,0 +1,18 @@ +<script setup lang="ts"> +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' + +const props = defineProps<{ + class?: HTMLAttributes['class'] +}>() +</script> + +<template> + <span + :class=" + cn('text-text-muted ml-auto text-[10px] tracking-widest', props.class) + " + > + <slot /> + </span> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuSub.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSub.vue new file mode 100644 index 00000000..7abc3603 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSub.vue @@ -0,0 +1,19 @@ +<script setup lang="ts"> +import { + ContextMenuSub, + type ContextMenuSubEmits, + type ContextMenuSubProps, + useForwardPropsEmits, +} from 'radix-vue' + +const props = defineProps<ContextMenuSubProps>() +const emits = defineEmits<ContextMenuSubEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <ContextMenuSub v-bind="forwarded"> + <slot /> + </ContextMenuSub> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubContent.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubContent.vue new file mode 100644 index 00000000..1de35dd7 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubContent.vue @@ -0,0 +1,37 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { + ContextMenuSubContent, + type DropdownMenuSubContentEmits, + type DropdownMenuSubContentProps, + useForwardPropsEmits, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + DropdownMenuSubContentProps & { class?: HTMLAttributes['class'] } +>() +const emits = defineEmits<DropdownMenuSubContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <ContextMenuSubContent + v-bind="forwarded" + :class=" + cn( + 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 border-border bg-bg text-text z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md', + props.class, + ) + " + > + <slot /> + </ContextMenuSubContent> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubTrigger.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubTrigger.vue new file mode 100644 index 00000000..7481be33 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuSubTrigger.vue @@ -0,0 +1,41 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { ChevronRight } from 'lucide-vue-next' +import { + ContextMenuSubTrigger, + type ContextMenuSubTriggerProps, + useForwardProps, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +const props = defineProps< + ContextMenuSubTriggerProps & { + class?: HTMLAttributes['class'] + inset?: boolean + } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwardedProps = useForwardProps(delegatedProps) +</script> + +<template> + <ContextMenuSubTrigger + v-bind="forwardedProps" + :class=" + cn( + 'focus:bg-list-selection focus:text-list-selection-fg data-[state=open]:bg-list-selection data-[state=open]:text-list-selection-fg flex cursor-default items-center rounded-sm px-2 py-0.5 text-sm outline-none select-none', + inset && 'pl-8', + props.class, + ) + " + > + <slot /> + <ChevronRight class="ml-auto h-4 w-4" /> + </ContextMenuSubTrigger> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/ContextMenuTrigger.vue b/src/renderer/components/ui/shadcn/context-menu/ContextMenuTrigger.vue new file mode 100644 index 00000000..041e32ed --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/ContextMenuTrigger.vue @@ -0,0 +1,17 @@ +<script setup lang="ts"> +import { + ContextMenuTrigger, + type ContextMenuTriggerProps, + useForwardProps, +} from 'radix-vue' + +const props = defineProps<ContextMenuTriggerProps>() + +const forwardedProps = useForwardProps(props) +</script> + +<template> + <ContextMenuTrigger v-bind="forwardedProps"> + <slot /> + </ContextMenuTrigger> +</template> diff --git a/src/renderer/components/ui/shadcn/context-menu/index.ts b/src/renderer/components/ui/shadcn/context-menu/index.ts new file mode 100644 index 00000000..5877fb66 --- /dev/null +++ b/src/renderer/components/ui/shadcn/context-menu/index.ts @@ -0,0 +1,14 @@ +export { default as Root } from './ContextMenu.vue' +export { default as CheckboxItem } from './ContextMenuCheckboxItem.vue' +export { default as Content } from './ContextMenuContent.vue' +export { default as Group } from './ContextMenuGroup.vue' +export { default as Item } from './ContextMenuItem.vue' +export { default as Label } from './ContextMenuLabel.vue' +export { default as RadioGroup } from './ContextMenuRadioGroup.vue' +export { default as RadioItem } from './ContextMenuRadioItem.vue' +export { default as Separator } from './ContextMenuSeparator.vue' +export { default as Shortcut } from './ContextMenuShortcut.vue' +export { default as Sub } from './ContextMenuSub.vue' +export { default as SubContent } from './ContextMenuSubContent.vue' +export { default as SubTrigger } from './ContextMenuSubTrigger.vue' +export { default as Trigger } from './ContextMenuTrigger.vue' diff --git a/src/renderer/components/ui/shadcn/dialog/Dialog.vue b/src/renderer/components/ui/shadcn/dialog/Dialog.vue new file mode 100644 index 00000000..5f6a5632 --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/Dialog.vue @@ -0,0 +1,15 @@ +<script setup lang="ts"> +import type { DialogRootEmits, DialogRootProps } from 'radix-vue' +import { DialogRoot, useForwardPropsEmits } from 'radix-vue' + +const props = defineProps<DialogRootProps>() +const emits = defineEmits<DialogRootEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <DialogRoot v-bind="forwarded"> + <slot /> + </DialogRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogClose.vue b/src/renderer/components/ui/shadcn/dialog/DialogClose.vue new file mode 100644 index 00000000..1fa61805 --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogClose.vue @@ -0,0 +1,12 @@ +<script setup lang="ts"> +import type { DialogCloseProps } from 'radix-vue' +import { DialogClose } from 'radix-vue' + +const props = defineProps<DialogCloseProps>() +</script> + +<template> + <DialogClose v-bind="props"> + <slot /> + </DialogClose> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogContent.vue b/src/renderer/components/ui/shadcn/dialog/DialogContent.vue new file mode 100644 index 00000000..a9db24f8 --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogContent.vue @@ -0,0 +1,52 @@ +<script setup lang="ts"> +import type { DialogContentEmits, DialogContentProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { X } from 'lucide-vue-next' +import { + DialogClose, + DialogContent, + DialogOverlay, + DialogPortal, + useForwardPropsEmits, +} from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + DialogContentProps & { class?: HTMLAttributes['class'] } +>() +const emits = defineEmits<DialogContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <DialogPortal> + <DialogOverlay class="fixed inset-0 z-50 bg-black/80" /> + <DialogContent + v-bind="forwarded" + :class=" + cn( + 'border-border bg-bg fixed top-1/2 left-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-md border p-6 shadow-lg', + props.class, + ) + " + > + <slot /> + <DialogClose + as-child + class="absolute top-4 right-4" + > + <UiButton variant="icon"> + <X class="h-4 w-4" /> + </UiButton> + </DialogClose> + </DialogContent> + </DialogPortal> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogDescription.vue b/src/renderer/components/ui/shadcn/dialog/DialogDescription.vue new file mode 100644 index 00000000..c76606be --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogDescription.vue @@ -0,0 +1,28 @@ +<script setup lang="ts"> +import type { DialogDescriptionProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { DialogDescription, useForwardProps } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + DialogDescriptionProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwardedProps = useForwardProps(delegatedProps) +</script> + +<template> + <DialogDescription + v-bind="forwardedProps" + :class="cn('text-text-muted text-sm', props.class)" + > + <slot /> + </DialogDescription> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogFooter.vue b/src/renderer/components/ui/shadcn/dialog/DialogFooter.vue new file mode 100644 index 00000000..b633458e --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogFooter.vue @@ -0,0 +1,19 @@ +<script setup lang="ts"> +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' + +const props = defineProps<{ class?: HTMLAttributes['class'] }>() +</script> + +<template> + <div + :class=" + cn( + 'flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-x-2', + props.class, + ) + " + > + <slot /> + </div> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogHeader.vue b/src/renderer/components/ui/shadcn/dialog/DialogHeader.vue new file mode 100644 index 00000000..dee30d9a --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogHeader.vue @@ -0,0 +1,16 @@ +<script setup lang="ts"> +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' + +const props = defineProps<{ + class?: HTMLAttributes['class'] +}>() +</script> + +<template> + <div + :class="cn('flex flex-col gap-y-1.5 text-center sm:text-left', props.class)" + > + <slot /> + </div> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogTitle.vue b/src/renderer/components/ui/shadcn/dialog/DialogTitle.vue new file mode 100644 index 00000000..6208f401 --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogTitle.vue @@ -0,0 +1,30 @@ +<script setup lang="ts"> +import type { DialogTitleProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { DialogTitle, useForwardProps } from 'radix-vue' +import { computed } from 'vue' + +const props = defineProps< + DialogTitleProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwardedProps = useForwardProps(delegatedProps) +</script> + +<template> + <DialogTitle + v-bind="forwardedProps" + :class=" + cn('text-lg leading-none font-semibold tracking-tight', props.class) + " + > + <slot /> + </DialogTitle> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/DialogTrigger.vue b/src/renderer/components/ui/shadcn/dialog/DialogTrigger.vue new file mode 100644 index 00000000..b966b29d --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/DialogTrigger.vue @@ -0,0 +1,12 @@ +<script setup lang="ts"> +import type { DialogTriggerProps } from 'radix-vue' +import { DialogTrigger } from 'radix-vue' + +const props = defineProps<DialogTriggerProps>() +</script> + +<template> + <DialogTrigger v-bind="props"> + <slot /> + </DialogTrigger> +</template> diff --git a/src/renderer/components/ui/shadcn/dialog/index.ts b/src/renderer/components/ui/shadcn/dialog/index.ts new file mode 100644 index 00000000..b41f79a9 --- /dev/null +++ b/src/renderer/components/ui/shadcn/dialog/index.ts @@ -0,0 +1,8 @@ +export { default as Dialog } from './Dialog.vue' +export { default as DialogClose } from './DialogClose.vue' +export { default as DialogContent } from './DialogContent.vue' +export { default as DialogDescription } from './DialogDescription.vue' +export { default as DialogFooter } from './DialogFooter.vue' +export { default as DialogHeader } from './DialogHeader.vue' +export { default as DialogTitle } from './DialogTitle.vue' +export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/src/renderer/components/ui/shadcn/popover/Popover.vue b/src/renderer/components/ui/shadcn/popover/Popover.vue new file mode 100644 index 00000000..da5f7096 --- /dev/null +++ b/src/renderer/components/ui/shadcn/popover/Popover.vue @@ -0,0 +1,15 @@ +<script setup lang="ts"> +import type { PopoverRootEmits, PopoverRootProps } from 'radix-vue' +import { PopoverRoot, useForwardPropsEmits } from 'radix-vue' + +const props = defineProps<PopoverRootProps>() +const emits = defineEmits<PopoverRootEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <PopoverRoot v-bind="forwarded"> + <slot /> + </PopoverRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/popover/PopoverContent.vue b/src/renderer/components/ui/shadcn/popover/PopoverContent.vue new file mode 100644 index 00000000..fd132a11 --- /dev/null +++ b/src/renderer/components/ui/shadcn/popover/PopoverContent.vue @@ -0,0 +1,44 @@ +<script setup lang="ts"> +import type { PopoverContentEmits, PopoverContentProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { PopoverContent, PopoverPortal, useForwardPropsEmits } from 'radix-vue' +import { computed } from 'vue' + +defineOptions({ + inheritAttrs: false, +}) + +const props = withDefaults( + defineProps<PopoverContentProps & { class?: HTMLAttributes['class'] }>(), + { + align: 'center', + sideOffset: 4, + }, +) +const emits = defineEmits<PopoverContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <PopoverPortal> + <PopoverContent + v-bind="{ ...forwarded, ...$attrs }" + :class=" + cn( + 'border-border bg-bg text-text z-50 w-72 rounded-md border p-2 px-0.5 shadow-md outline-none', + props.class, + ) + " + > + <slot /> + </PopoverContent> + </PopoverPortal> +</template> diff --git a/src/renderer/components/ui/shadcn/popover/PopoverTrigger.vue b/src/renderer/components/ui/shadcn/popover/PopoverTrigger.vue new file mode 100644 index 00000000..6c944497 --- /dev/null +++ b/src/renderer/components/ui/shadcn/popover/PopoverTrigger.vue @@ -0,0 +1,12 @@ +<script setup lang="ts"> +import type { PopoverTriggerProps } from 'radix-vue' +import { PopoverTrigger } from 'radix-vue' + +const props = defineProps<PopoverTriggerProps>() +</script> + +<template> + <PopoverTrigger v-bind="props"> + <slot /> + </PopoverTrigger> +</template> diff --git a/src/renderer/components/ui/shadcn/popover/index.ts b/src/renderer/components/ui/shadcn/popover/index.ts new file mode 100644 index 00000000..c621f9b1 --- /dev/null +++ b/src/renderer/components/ui/shadcn/popover/index.ts @@ -0,0 +1,3 @@ +export { default as Popover } from './Popover.vue' +export { default as PopoverContent } from './PopoverContent.vue' +export { default as PopoverTrigger } from './PopoverTrigger.vue' diff --git a/src/renderer/components/ui/shadcn/scroll-area/ScrollArea.vue b/src/renderer/components/ui/shadcn/scroll-area/ScrollArea.vue new file mode 100644 index 00000000..fdf279bf --- /dev/null +++ b/src/renderer/components/ui/shadcn/scroll-area/ScrollArea.vue @@ -0,0 +1,35 @@ +<script setup lang="ts"> +import type { ScrollAreaRootProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { + ScrollAreaCorner, + ScrollAreaRoot, + ScrollAreaViewport, +} from 'radix-vue' +import { computed } from 'vue' +import ScrollBar from './ScrollBar.vue' + +const props = defineProps< + ScrollAreaRootProps & { class?: HTMLAttributes['class'] } +>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ScrollAreaRoot + v-bind="delegatedProps" + :class="cn('relative overflow-hidden', props.class)" + > + <ScrollAreaViewport class="h-full w-full rounded-[inherit]"> + <slot /> + </ScrollAreaViewport> + <ScrollBar /> + <ScrollAreaCorner /> + </ScrollAreaRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/scroll-area/ScrollBar.vue b/src/renderer/components/ui/shadcn/scroll-area/ScrollBar.vue new file mode 100644 index 00000000..6deb50ff --- /dev/null +++ b/src/renderer/components/ui/shadcn/scroll-area/ScrollBar.vue @@ -0,0 +1,38 @@ +<script setup lang="ts"> +import type { ScrollAreaScrollbarProps } from 'radix-vue' +import type { HTMLAttributes } from 'vue' +import { cn } from '@/utils' +import { ScrollAreaScrollbar, ScrollAreaThumb } from 'radix-vue' +import { computed } from 'vue' + +const props = withDefaults( + defineProps<ScrollAreaScrollbarProps & { class?: HTMLAttributes['class'] }>(), + { + orientation: 'vertical', + }, +) + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) +</script> + +<template> + <ScrollAreaScrollbar + v-bind="delegatedProps" + :class=" + cn( + 'flex touch-none transition-colors select-none', + orientation === 'vertical' + && 'border-border h-full w-2.5 border-l border-l-transparent p-px', + orientation === 'horizontal' + && 'border-border h-2.5 flex-col border-t border-t-transparent p-px', + props.class, + ) + " + > + <ScrollAreaThumb class="bg-scrollbar relative flex-1 rounded-full" /> + </ScrollAreaScrollbar> +</template> diff --git a/src/renderer/components/ui/shadcn/scroll-area/index.ts b/src/renderer/components/ui/shadcn/scroll-area/index.ts new file mode 100644 index 00000000..2bd4fae5 --- /dev/null +++ b/src/renderer/components/ui/shadcn/scroll-area/index.ts @@ -0,0 +1,2 @@ +export { default as ScrollArea } from './ScrollArea.vue' +export { default as ScrollBar } from './ScrollBar.vue' diff --git a/src/renderer/components/ui/shadcn/tooltip/Tooltip.vue b/src/renderer/components/ui/shadcn/tooltip/Tooltip.vue new file mode 100644 index 00000000..71203d52 --- /dev/null +++ b/src/renderer/components/ui/shadcn/tooltip/Tooltip.vue @@ -0,0 +1,19 @@ +<script setup lang="ts"> +import { + TooltipRoot, + type TooltipRootEmits, + type TooltipRootProps, + useForwardPropsEmits, +} from 'radix-vue' + +const props = defineProps<TooltipRootProps>() +const emits = defineEmits<TooltipRootEmits>() + +const forwarded = useForwardPropsEmits(props, emits) +</script> + +<template> + <TooltipRoot v-bind="forwarded"> + <slot /> + </TooltipRoot> +</template> diff --git a/src/renderer/components/ui/shadcn/tooltip/TooltipContent.vue b/src/renderer/components/ui/shadcn/tooltip/TooltipContent.vue new file mode 100644 index 00000000..1420aec1 --- /dev/null +++ b/src/renderer/components/ui/shadcn/tooltip/TooltipContent.vue @@ -0,0 +1,48 @@ +<script setup lang="ts"> +import { cn } from '@/utils' +import { + TooltipContent, + type TooltipContentEmits, + type TooltipContentProps, + TooltipPortal, + useForwardPropsEmits, +} from 'radix-vue' +import { computed, type HTMLAttributes } from 'vue' + +defineOptions({ + inheritAttrs: false, +}) + +const props = withDefaults( + defineProps<TooltipContentProps & { class?: HTMLAttributes['class'] }>(), + { + sideOffset: 4, + }, +) + +const emits = defineEmits<TooltipContentEmits>() + +const delegatedProps = computed(() => { + const { class: _, ...delegated } = props + + return delegated +}) + +const forwarded = useForwardPropsEmits(delegatedProps, emits) +</script> + +<template> + <TooltipPortal> + <TooltipContent + v-bind="{ ...forwarded, ...$attrs }" + :class=" + cn( + 'bg-tooltip text-tooltip-fg z-50 overflow-hidden rounded-md px-2 py-1 text-sm shadow-md', + props.class, + ) + " + > + <slot /> + </TooltipContent> + </TooltipPortal> +</template> diff --git a/src/renderer/components/ui/shadcn/tooltip/TooltipProvider.vue b/src/renderer/components/ui/shadcn/tooltip/TooltipProvider.vue new file mode 100644 index 00000000..816505d6 --- /dev/null +++ b/src/renderer/components/ui/shadcn/tooltip/TooltipProvider.vue @@ -0,0 +1,11 @@ +<script setup lang="ts"> +import { TooltipProvider, type TooltipProviderProps } from 'radix-vue' + +const props = defineProps<TooltipProviderProps>() +</script> + +<template> + <TooltipProvider v-bind="props"> + <slot /> + </TooltipProvider> +</template> diff --git a/src/renderer/components/ui/shadcn/tooltip/TooltipTrigger.vue b/src/renderer/components/ui/shadcn/tooltip/TooltipTrigger.vue new file mode 100644 index 00000000..f5b0e57f --- /dev/null +++ b/src/renderer/components/ui/shadcn/tooltip/TooltipTrigger.vue @@ -0,0 +1,11 @@ +<script setup lang="ts"> +import { TooltipTrigger, type TooltipTriggerProps } from 'radix-vue' + +const props = defineProps<TooltipTriggerProps>() +</script> + +<template> + <TooltipTrigger v-bind="props"> + <slot /> + </TooltipTrigger> +</template> diff --git a/src/renderer/components/ui/shadcn/tooltip/index.ts b/src/renderer/components/ui/shadcn/tooltip/index.ts new file mode 100644 index 00000000..5ab96536 --- /dev/null +++ b/src/renderer/components/ui/shadcn/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from './Tooltip.vue' +export { default as TooltipContent } from './TooltipContent.vue' +export { default as TooltipProvider } from './TooltipProvider.vue' +export { default as TooltipTrigger } from './TooltipTrigger.vue' diff --git a/src/renderer/composable/codemirror.ts b/src/renderer/composable/codemirror.ts deleted file mode 100644 index d0480e3b..00000000 --- a/src/renderer/composable/codemirror.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { getThemeName } from '@/components/editor/themes' -import { useAppStore } from '@/store/app' -import type { EditorConfiguration } from 'codemirror' -import CodeMirror from 'codemirror' - -export const useCodemirror = (elemId: string, options: EditorConfiguration) => { - const appStore = useAppStore() - - CodeMirror(document.getElementById(elemId)!, { - ...options, - theme: getThemeName(appStore.theme) || 'GitHub', - scrollbarStyle: 'null', - readOnly: true, - cursorBlinkRate: -1 - }) -} diff --git a/src/renderer/composable/index.ts b/src/renderer/composable/index.ts deleted file mode 100644 index 2da2b28c..00000000 --- a/src/renderer/composable/index.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { createFetch, useClipboard } from '@vueuse/core' -import mitt from 'mitt' -import type { EmitterEvents } from '@shared/types/renderer/composable' -import { API_PORT } from '../../main/config' -import { useFolderStore } from '@/store/folders' -import { useSnippetStore } from '@/store/snippets' -import { ipc } from '@/electron' -import { track } from '@/services/analytics' -import type { NotificationRequest } from '@shared/types/main' -import type { Snippet, SnippetsSort } from '@shared/types/main/db' -import { useAppStore } from '@/store/app' - -export const useApi = createFetch({ - baseUrl: `http://localhost:${API_PORT}` -}) - -export const emitter = mitt<EmitterEvents>() - -export const onAddNewSnippet = async () => { - const folderStore = useFolderStore() - const snippetStore = useSnippetStore() - - snippetStore.fragment = 0 - snippetStore.isMarkdownPreview = false - - await snippetStore.addNewSnippet() - - if (folderStore.selectedId) { - await snippetStore.getSnippetsByFolderIds(folderStore.selectedIds!) - } else { - snippetStore.setSnippetsByAlias('inbox') - } - - emitter.emit('snippet:focus-name', true) - track('snippets/add-new') -} - -export const onCreateSnippet = async (body: Partial<Snippet>) => { - const snippetStore = useSnippetStore() - - await snippetStore.addNewSnippet(body) - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias('inbox') - track('api/snippet-create') -} - -export const onAddNewFragment = async () => { - const snippetStore = useSnippetStore() - - await snippetStore.addNewFragmentToSnippetsById(snippetStore.selectedId!) - track('snippets/add-fragment') -} - -export const onAddDescription = async () => { - const snippetStore = useSnippetStore() - - if (typeof snippetStore.selected?.description === 'string') return - - if ( - snippetStore.selected?.description === undefined || - snippetStore.selected?.description === null - ) { - await snippetStore.patchSnippetsById(snippetStore.selectedId!, { - description: '' - }) - } - - track('snippets/add-description') -} - -export const onAddNewFolder = async () => { - const folderStore = useFolderStore() - const snippetStore = useSnippetStore() - - const folder = await folderStore.addNewFolder() - snippetStore.selected = undefined - - emitter.emit('scroll-to:folder', folder.id) - track('folders/add-new') -} - -export const onCopySnippet = () => { - const snippetStore = useSnippetStore() - - const { copy } = useClipboard({ source: snippetStore.currentContent }) - copy() - - ipc.invoke<any, NotificationRequest>('main:notification', { - body: 'Snippet copied' - }) - track('snippets/copy') -} - -export const goToSnippet = async (snippetId: string, history?: boolean) => { - if (!snippetId) return - - const folderStore = useFolderStore() - const snippetStore = useSnippetStore() - const appStore = useAppStore() - - const snippet = snippetStore.findSnippetById(snippetId) - - if (!snippet) return - - folderStore.selectId(snippet.folderId) - - expandParentFolders(snippet.folderId) - - snippetStore.fragment = 0 - - await snippetStore.getSnippetsById(snippetId) - await snippetStore.setSnippetsByFolderIds() - - if (history) appStore.history.push(snippetId) - - emitter.emit('folder:click', snippet.folderId) - emitter.emit('scroll-to:snippet', snippetId) - emitter.emit('scroll-to:folder', snippet.folderId) -} - -export const expandParentFolders = (folderId: string) => { - const folderStore = useFolderStore() - - const findParentAndExpand = async (id: string) => { - const folder = folderStore.folders.find(i => i.id === id) - - if (!folder) return - - await folderStore.patchFoldersById(folder.id, { - isOpen: true - }) - - if (folder.parentId) { - findParentAndExpand(folder.parentId) - } - } - - findParentAndExpand(folderId) -} - -export const setScrollPosition = (el: HTMLElement, offset: number) => { - const ps = el.querySelector('.ps') - if (ps) ps.scrollTop = offset -} - -export const sortSnippetsBy = (snippets: Snippet[], sort: SnippetsSort) => { - if (sort === 'updatedAt') { - snippets.sort((a, b) => (a.updatedAt > b.updatedAt ? -1 : 1)) - } - - if (sort === 'createdAt') { - snippets.sort((a, b) => (a.createdAt > b.createdAt ? -1 : 1)) - } - - if (sort === 'name') { - snippets.sort((a, b) => - a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1 - ) - } -} - -export const useHljsTheme = async (theme: 'dark' | 'light') => { - const { default: darkCSS } = await import( - 'highlight.js/styles/base16/material.css?raw' - ) - const { default: lightCSS } = await import( - 'highlight.js/styles/github.css?raw' - ) - - document.querySelector('[data=hljs-theme]')?.remove() - - const style = document.createElement('style') - style.setAttribute('data', 'hljs-theme') - - if (theme === 'dark') { - style.innerHTML = darkCSS - } else { - style.innerHTML = lightCSS - } - - document.head.appendChild(style) -} - -export const onClickUrl = (url: string) => { - ipc.invoke('main:open-url', url) - track('app/open-url', url) -} diff --git a/src/renderer/composable/notification.ts b/src/renderer/composable/notification.ts deleted file mode 100644 index cf2c7ae6..00000000 --- a/src/renderer/composable/notification.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { createToast, destroyAllToasts } from 'vercel-toast' -import { i18n, ipc, store } from '@/electron' -import { track } from '@/services/analytics' -import { useAppStore } from '@/store/app' -import { addDays } from 'date-fns' -import { ref } from 'vue' -import axios from 'axios' - -export const checkForRemoteNotification = async () => { - const showMessage = (message: string, date: string | number) => { - const el = document.createElement('div') - el.innerHTML = message - - const links = el.querySelectorAll('a') - - links.forEach(i => { - i.addEventListener('click', e => { - e.preventDefault() - ipc.invoke('main:open-url', i.href) - track('app/notify', i.innerHTML) - }) - }) - - createToast(el, { - action: { - text: i18n.t('close'), - callback (toast) { - toast.destroy() - store.app.set('prevRemoteNotice', date) - track('app/notify', `remoteNotification-close-${date}`) - } - } - }) - } - - const checkAndShow = async () => { - try { - const headers = { - 'Cache-Control': 'no-cache', - Expires: 0 - } - - const { data } = await axios.get<{ message: string; date: number }>( - 'https://masscode.io/notification.json', - { headers } - ) - - if (!data) return - - const { message, date } = data - const prevDate = store.app.get('prevRemoteNotice') - - if (prevDate) { - if (prevDate < date) showMessage(message, date) - } else { - showMessage(message, date) - } - } catch (err) { - console.error(err) - } - } - - checkAndShow() - - setInterval(() => { - checkAndShow() - }, 1000 * 60 * 180) // 3 часа -} - -export const useSupportNotification = () => { - const appStore = useAppStore() - const isShow = ref(false) - - const setNextNoticeDate = () => { - store.app.set('nextSupportNotice', addDays(new Date(), 7).valueOf()) - } - - const showMessage = () => { - const message = document.createElement('div') - message.innerHTML = i18n.t('special:supportMessage', { - tagStart: '<a id="donate" href="#">', - tagEnd: '</a>' - }) - - createToast(message, { - action: { - text: i18n.t('close'), - callback (toast) { - toast.destroy() - setNextNoticeDate() - isShow.value = false - track('app/notify', 'support-close') - } - } - }) - - const d = document.querySelector('#donate') - - d?.addEventListener('click', () => { - ipc.invoke('main:open-url', 'https://masscode.io/donate') - destroyAllToasts() - setNextNoticeDate() - isShow.value = false - track('app/notify', 'support-go-to-masscode') - }) - - isShow.value = true - } - - const showSupportToast = () => { - if (appStore.isSponsored) return - - const date = store.app.get('nextSupportNotice') - - if (!date && !isShow.value) { - showMessage() - } else { - const isDateToShow = new Date().valueOf() > date - - if (!isDateToShow) return - if (isShow.value) return - - showMessage() - } - } - - return { - showSupportToast - } -} diff --git a/src/renderer/composables/index.ts b/src/renderer/composables/index.ts new file mode 100644 index 00000000..d72950bd --- /dev/null +++ b/src/renderer/composables/index.ts @@ -0,0 +1,5 @@ +export * from './useApp' +export * from './useEditor' +export * from './useGutter' +export * from './useSnippets' +export * from './useSnippetUpdate' diff --git a/src/renderer/composables/types/editor.ts b/src/renderer/composables/types/editor.ts new file mode 100644 index 00000000..b4e7ddd2 --- /dev/null +++ b/src/renderer/composables/types/editor.ts @@ -0,0 +1,12 @@ +export interface Settings { + fontSize: number + fontFamily: string + wrap: boolean + tabSize: number + trailingComma: 'all' | 'none' | 'es5' + semi: boolean + singleQuote: boolean + highlightLine: boolean + highlightGutter: boolean + matchBrackets: boolean +} diff --git a/src/renderer/composables/types/index.ts b/src/renderer/composables/types/index.ts new file mode 100644 index 00000000..15595a24 --- /dev/null +++ b/src/renderer/composables/types/index.ts @@ -0,0 +1,6 @@ +export const LibraryFilter = { + All: 'all', + Favorites: 'favorites', + Inbox: 'inbox', + Trash: 'trash', +} as const diff --git a/src/renderer/composables/useApp.ts b/src/renderer/composables/useApp.ts new file mode 100644 index 00000000..454402a6 --- /dev/null +++ b/src/renderer/composables/useApp.ts @@ -0,0 +1,60 @@ +import type { LibraryFilter } from './types' +import { useCssVar } from '@vueuse/core' + +const { store } = window.electron + +const selectedLibrary = ref< + (typeof LibraryFilter)[keyof typeof LibraryFilter] | undefined +>( + store.app.get( + 'selectedLibrary', + ) as (typeof LibraryFilter)[keyof typeof LibraryFilter], + ) +const selectedFolderId = ref(store.app.get('selectedFolderId')) +const selectedSnippetId = ref(store.app.get('selectedSnippetId')) +const selectedSnippetContentIndex = ref(0) +const highlightedFolderId = ref<number>() +const highlightedSnippetId = ref<number>() + +const sidebarWidth = useCssVar('--sidebar-width') +const snippetListWidth = useCssVar('--snippet-list-width') + +sidebarWidth.value = `${store.app.get('sidebarWidth')}px` +snippetListWidth.value = `${store.app.get('snippetListWidth')}px` + +// TODO: вынести в useFolder +function selectFolder(folderId: number) { + selectedFolderId.value = folderId + selectedLibrary.value = undefined + selectedSnippetContentIndex.value = 0 + + store.app.set('selectedFolderId', folderId) + store.app.delete('selectedLibrary') +} + +watch( + [highlightedFolderId, highlightedSnippetId], + ([newFolderId, newSnippetId], [oldFolderId, oldSnippetId]) => { + if (newFolderId !== oldFolderId && newFolderId !== undefined) { + highlightedSnippetId.value = undefined + } + + if (newSnippetId !== oldSnippetId && newSnippetId !== undefined) { + highlightedFolderId.value = undefined + } + }, +) + +export function useApp() { + return { + highlightedFolderId, + highlightedSnippetId, + selectedFolderId, + selectedLibrary, + selectedSnippetContentIndex, + selectedSnippetId, + selectFolder, + sidebarWidth, + snippetListWidth, + } +} diff --git a/src/renderer/composables/useEditor.ts b/src/renderer/composables/useEditor.ts new file mode 100644 index 00000000..7aba038d --- /dev/null +++ b/src/renderer/composables/useEditor.ts @@ -0,0 +1,26 @@ +import type { Settings } from './types/editor' + +const cursorPosition = reactive({ + row: 0, + column: 0, +}) + +const settings = reactive<Settings>({ + fontSize: 13, + fontFamily: 'SF Mono, Consolas, Menlo, Ubuntu Mono, monospace', + wrap: false, + tabSize: 2, + trailingComma: 'all', + semi: false, + singleQuote: false, + highlightLine: false, + highlightGutter: true, + matchBrackets: true, +}) + +export function useEditor() { + return { + cursorPosition, + settings, + } +} diff --git a/src/renderer/composables/useGutter.ts b/src/renderer/composables/useGutter.ts new file mode 100644 index 00000000..a314b988 --- /dev/null +++ b/src/renderer/composables/useGutter.ts @@ -0,0 +1,30 @@ +import type { Ref } from 'vue' +import interact from 'interactjs' +import { onMounted, ref } from 'vue' + +export function useGutter( + target: Ref, + gutter: Ref, + initWidth: number = 0, + minWidth: number = 100, +) { + const width = ref(initWidth) + + onMounted(() => { + interact(target.value).resizable({ + allowFrom: gutter.value.$el, + + onmove: (e: Interact.InteractEvent) => { + const { pageX } = e + + if (pageX < minWidth) + return + width.value = Math.floor(pageX) + }, + }) + }) + + return { + width, + } +} diff --git a/src/renderer/composables/useSnippetUpdate.ts b/src/renderer/composables/useSnippetUpdate.ts new file mode 100644 index 00000000..ad543511 --- /dev/null +++ b/src/renderer/composables/useSnippetUpdate.ts @@ -0,0 +1,70 @@ +import type { + SnippetContentsAdd, + SnippetsUpdate, +} from '../services/api/generated' +import { useDebounceFn } from '@vueuse/core' +import { useSnippets } from './useSnippets' + +interface UpdateQueueItem { + snippetId: number + data: SnippetsUpdate +} + +interface UpdateContentQueueItem { + snippetId: number + contentId: number + data: SnippetContentsAdd +} + +const UPDATE_DEBOUNCE_TIME = 500 + +const { updateSnippetContent, updateSnippet } = useSnippets() + +const updateQueue = ref<Map<string, UpdateQueueItem>>(new Map()) +const updateContentQueue = ref<Map<string, UpdateContentQueueItem>>(new Map()) + +const updateDebounced = useDebounceFn((snippetId: number) => { + const key = `${snippetId}` + const update = updateQueue.value.get(key) + + if (update) { + updateSnippet(update.snippetId, update.data) + updateQueue.value.delete(key) + } +}, UPDATE_DEBOUNCE_TIME) + +const updateContentDebounced = useDebounceFn( + (snippetId: number, contentId: number) => { + const key = `${snippetId}-${contentId}` + const update = updateContentQueue.value.get(key) + + if (update) { + updateSnippetContent(update.snippetId, update.contentId, update.data) + updateContentQueue.value.delete(key) + } + }, + UPDATE_DEBOUNCE_TIME, +) + +function addToUpdateQueue(snippetId: number, data: SnippetsUpdate) { + const key = `${snippetId}` + updateQueue.value.set(key, { snippetId, data }) + updateDebounced(snippetId) +} + +function addToUpdateContentQueue( + snippetId: number, + contentId: number, + data: SnippetContentsAdd, +) { + const key = `${snippetId}-${contentId}` + updateContentQueue.value.set(key, { snippetId, contentId, data }) + updateContentDebounced(snippetId, contentId) +} + +export function useSnippetUpdate() { + return { + addToUpdateContentQueue, + addToUpdateQueue, + } +} diff --git a/src/renderer/composables/useSnippets.ts b/src/renderer/composables/useSnippets.ts new file mode 100644 index 00000000..84cc08a7 --- /dev/null +++ b/src/renderer/composables/useSnippets.ts @@ -0,0 +1,113 @@ +import type { + SnippetContentsAdd, + SnippetsQuery, + SnippetsResponse, + SnippetsUpdate, +} from '~/renderer/services/api/generated' +import { store } from '@/electron' +import { api } from '~/renderer/services/api' +import { LibraryFilter } from './types' +import { useApp } from './useApp' + +type Query = NonNullable<Parameters<typeof api.snippets.getSnippets>[0]> + +const { + selectedSnippetId, + selectedSnippetContentIndex, + selectedFolderId, + selectedLibrary, +} = useApp() + +const snippets = shallowRef<SnippetsResponse>() +const snippetsBySearch = shallowRef<SnippetsResponse>() + +const searchQuery = ref('') +const isSearch = ref(false) + +const selectedSnippet = computed(() => { + return snippets.value?.find(s => s.id === selectedSnippetId.value) +}) + +const selectedSnippetContent = computed(() => { + return selectedSnippet.value?.contents[selectedSnippetContentIndex.value] +}) + +const queryByLibraryOrFolder = computed(() => { + const query: SnippetsQuery = {} + + if (selectedFolderId.value) { + query.folderId = selectedFolderId.value + } + else if (selectedLibrary.value === LibraryFilter.Favorites) { + query.isFavorites = 1 + } + else if (selectedLibrary.value === LibraryFilter.Trash) { + query.isDeleted = 1 + } + else if (selectedLibrary.value === LibraryFilter.All) { + query.isDeleted = 0 + } + else if (selectedLibrary.value === LibraryFilter.Inbox) { + query.isInbox = 1 + } + + return query +}) + +async function getSnippets(query?: Query) { + const { data } = await api.snippets.getSnippets(query) + + if (isSearch.value) { + snippetsBySearch.value = data + } + else { + snippets.value = data + } +} + +async function updateSnippet(snippetId: number, data: SnippetsUpdate) { + await api.snippets.putSnippetsById(String(snippetId), data) + getSnippets(queryByLibraryOrFolder.value) +} + +async function updateSnippetContent( + snippetId: number, + contentId: number, + data: SnippetContentsAdd, +) { + await api.snippets.putSnippetsByIdContentsByContentId( + String(snippetId), + String(contentId), + data, + ) + getSnippets(queryByLibraryOrFolder.value) +} + +function selectFirstSnippet() { + const firstSnippet = snippets.value && snippets.value[0] + const { selectedSnippetId } = useApp() + + if (firstSnippet) { + selectedSnippetId.value = firstSnippet.id + store.app.set('selectedSnippetId', firstSnippet.id) + } + else { + selectedSnippetId.value = undefined + store.app.delete('selectedSnippetId') + } +} + +export function useSnippets() { + return { + getSnippets, + isSearch, + searchQuery, + selectedSnippet, + selectedSnippetContent, + selectFirstSnippet, + snippets, + snippetsBySearch, + updateSnippet, + updateSnippetContent, + } +} diff --git a/src/renderer/electron.ts b/src/renderer/electron.ts index 3d83e889..195f69e3 100644 --- a/src/renderer/electron.ts +++ b/src/renderer/electron.ts @@ -1 +1,3 @@ -export const { ipc, store, db, platform, i18n, version } = window.electron +const { ipc, db, store } = window.electron + +export { db, ipc, store } diff --git a/src/renderer/env.d.ts b/src/renderer/env.d.ts deleted file mode 100644 index aafef950..00000000 --- a/src/renderer/env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// <reference types="vite/client" /> - -declare module '*.vue' { - import type { DefineComponent } from 'vue' - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any> - export default component -} diff --git a/src/renderer/index.html b/src/renderer/index.html index f64dc9fd..74ce05f2 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -2,12 +2,12 @@ <html lang="en"> <head> <meta charset="UTF-8" /> - <link rel="icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>massCode</title> + <meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src * self 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;"> + <title>Electron Vue App</title> </head> <body> <div id="app"></div> <script type="module" src="./main.ts"></script> </body> -</html> +</html> \ No newline at end of file diff --git a/src/renderer/main.ts b/src/renderer/main.ts index 42be7534..85048bf5 100644 --- a/src/renderer/main.ts +++ b/src/renderer/main.ts @@ -1,18 +1,6 @@ import { createApp } from 'vue' -import { createPinia } from 'pinia' -import router from './router' import App from './App.vue' -import PerfectScrollbar from 'vue3-perfect-scrollbar' -import 'vue3-perfect-scrollbar/dist/vue3-perfect-scrollbar.css' -import 'vercel-toast/dist/vercel-toast.css' -import './assets/scss/main.scss' -import FloatingVue from 'floating-vue' -import 'floating-vue/dist/style.css' -import '@/components/ui/folder-icons/icons' +import { router } from './router' +import './styles.css' -createApp(App) - .use(createPinia()) - .use(router) - .use(PerfectScrollbar) - .use(FloatingVue) - .mount('#app') +createApp(App).use(router).mount('#app') diff --git a/src/renderer/router.ts b/src/renderer/router.ts deleted file mode 100644 index ae10f24f..00000000 --- a/src/renderer/router.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router' -import { createWebHistory, createRouter } from 'vue-router' -import Main from './views/Main.vue' -import Preferences from './views/Preferences.vue' -import Presentation from './views/Presentation.vue' -import Devtools from './views/Devtools.vue' - -const history = createWebHistory() -const routes: RouteRecordRaw[] = [ - { path: '/', component: Main }, - { path: '/preferences', component: Preferences }, - { path: '/presentation', component: Presentation }, - { path: '/devtools', component: Devtools } -] - -const router = createRouter({ history, routes }) - -export default router diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts new file mode 100644 index 00000000..052867a2 --- /dev/null +++ b/src/renderer/router/index.ts @@ -0,0 +1,14 @@ +import { createRouter, createWebHashHistory } from 'vue-router' + +const routes = [ + { + path: '/', + name: 'main', + component: () => import('@/views/Main.vue'), + }, +] + +export const router = createRouter({ + history: createWebHashHistory(), + routes, +}) diff --git a/src/renderer/services/analytics/index.ts b/src/renderer/services/analytics/index.ts deleted file mode 100644 index 5f2b32c4..00000000 --- a/src/renderer/services/analytics/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { TrackEvents } from '@shared/types/main/analytics' -import { version, platform } from '@/electron' -import axios from 'axios' - -const isDev = import.meta.env.DEV -const api = import.meta.env.VITE_ANALYTICS_API -const scope = import.meta.env.VITE_ANALYTICS_SCOPE - -export const track = (event: TrackEvents, payload?: string) => { - let os - const p = platform() - - if (!api) return - - if (p === 'darwin') os = 'macOS' - if (p === 'win32') os = 'Windows' - if (p === 'linux') os = 'Linux' - - const path = payload - ? `${version}/${os}/${event}/${payload}` - : `${version}/${os}/${event}` - - const body = { - name: 'pageview', - url: `https://${scope}/${path}`, - domain: scope - } - - if (isDev) { - console.log('[analytics]:', body) - } else { - axios.post(api, body) - } -} diff --git a/src/renderer/services/api/generated/index.ts b/src/renderer/services/api/generated/index.ts new file mode 100644 index 00000000..edf66cc0 --- /dev/null +++ b/src/renderer/services/api/generated/index.ts @@ -0,0 +1,773 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +export interface SnippetContentsAdd { + label: string; + value: string | null; + language: string; +} + +export interface SnippetsAdd { + name: string; + folderId?: + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ) + | null; +} + +export interface SnippetsUpdate { + name: string; + folderId: + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ) + | null; + description: string | null; + /** + * @min 0 + * @max 1 + */ + isDeleted: + | string + | (string | (string | (string | (string | (string | (string | number)))))); + /** + * @min 0 + * @max 1 + */ + isFavorites: + | string + | (string | (string | (string | (string | (string | (string | number)))))); +} + +export interface SnippetsQuery { + search?: string; + sort?: string; + order?: "ASC" | "DESC"; + folderId?: + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ); + tagId?: + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ); + /** + * @min 0 + * @max 1 + */ + isFavorites?: + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ); + /** + * @min 0 + * @max 1 + */ + isDeleted?: + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ); + /** + * @min 0 + * @max 1 + */ + isInbox?: + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | (string | number))))) + ) + ); +} + +export type SnippetsResponse = { + id: number; + name: string; + description: string | null; + tags: { + id: number; + name: string; + }[]; + folder: { + id: number; + name: string; + } | null; + contents: { + id: number; + label: string; + value: string | null; + language: string; + }[]; + isFavorites: number; + isDeleted: number; + createdAt: number; + updatedAt: number; +}[]; + +export interface FoldersAdd { + name: string; +} + +export type FoldersResponse = { + id: number; + name: string; + createdAt: number; + updatedAt: number; + icon: string | null; + parentId: number | null; + isOpen: number; + defaultLanguage: string; + orderIndex: number; +}[]; + +export interface FoldersUpdate { + name: string; + icon: string | null; + defaultLanguage: string; + parentId: + | (string | (string | (string | (string | (string | (string | number)))))) + | null; + /** + * @min 0 + * @max 1 + */ + isOpen: + | string + | (string | (string | (string | (string | (string | number))))); + orderIndex: + | string + | (string | (string | (string | (string | (string | number))))); +} + +export type FoldersTreeResponse = { + id: number; + name: string; + createdAt: number; + updatedAt: number; + icon: string | null; + parentId: number | null; + isOpen: number; + defaultLanguage: string; + orderIndex: number; + children: any[]; +}[]; + +export interface TagsAdd { + name: string; +} + +export interface TagsResponse { + id: string | (string | (string | (string | (string | number)))); + name: string; +} + +export type QueryParamsType = Record<string | number, any>; +export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">; + +export interface FullRequestParams extends Omit<RequestInit, "body"> { + /** set parameter to `true` for call `securityWorker` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseFormat; + /** request body */ + body?: unknown; + /** base url */ + baseUrl?: string; + /** request cancellation token */ + cancelToken?: CancelToken; +} + +export type RequestParams = Omit< + FullRequestParams, + "body" | "method" | "query" | "path" +>; + +export interface ApiConfig<SecurityDataType = unknown> { + baseUrl?: string; + baseApiParams?: Omit<RequestParams, "baseUrl" | "cancelToken" | "signal">; + securityWorker?: ( + securityData: SecurityDataType | null, + ) => Promise<RequestParams | void> | RequestParams | void; + customFetch?: typeof fetch; +} + +export interface HttpResponse<D extends unknown, E extends unknown = unknown> + extends Response { + data: D; + error: E; +} + +type CancelToken = Symbol | string | number; + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export class HttpClient<SecurityDataType = unknown> { + public baseUrl: string = ""; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig<SecurityDataType>["securityWorker"]; + private abortControllers = new Map<CancelToken, AbortController>(); + private customFetch = (...fetchParams: Parameters<typeof fetch>) => + fetch(...fetchParams); + + private baseApiParams: RequestParams = { + credentials: "same-origin", + headers: {}, + redirect: "follow", + referrerPolicy: "no-referrer", + }; + + constructor(apiConfig: ApiConfig<SecurityDataType> = {}) { + Object.assign(this, apiConfig); + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data; + }; + + protected encodeQueryParam(key: string, value: any) { + const encodedKey = encodeURIComponent(key); + return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; + } + + protected addQueryParam(query: QueryParamsType, key: string) { + return this.encodeQueryParam(key, query[key]); + } + + protected addArrayQueryParam(query: QueryParamsType, key: string) { + const value = query[key]; + return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); + } + + protected toQueryString(rawQuery?: QueryParamsType): string { + const query = rawQuery || {}; + const keys = Object.keys(query).filter( + (key) => "undefined" !== typeof query[key], + ); + return keys + .map((key) => + Array.isArray(query[key]) + ? this.addArrayQueryParam(query, key) + : this.addQueryParam(query, key), + ) + .join("&"); + } + + protected addQueryParams(rawQuery?: QueryParamsType): string { + const queryString = this.toQueryString(rawQuery); + return queryString ? `?${queryString}` : ""; + } + + private contentFormatters: Record<ContentType, (input: any) => any> = { + [ContentType.Json]: (input: any) => + input !== null && (typeof input === "object" || typeof input === "string") + ? JSON.stringify(input) + : input, + [ContentType.Text]: (input: any) => + input !== null && typeof input !== "string" + ? JSON.stringify(input) + : input, + [ContentType.FormData]: (input: any) => + Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + formData.append( + key, + property instanceof Blob + ? property + : typeof property === "object" && property !== null + ? JSON.stringify(property) + : `${property}`, + ); + return formData; + }, new FormData()), + [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), + }; + + protected mergeRequestParams( + params1: RequestParams, + params2?: RequestParams, + ): RequestParams { + return { + ...this.baseApiParams, + ...params1, + ...(params2 || {}), + headers: { + ...(this.baseApiParams.headers || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + }, + }; + } + + protected createAbortSignal = ( + cancelToken: CancelToken, + ): AbortSignal | undefined => { + if (this.abortControllers.has(cancelToken)) { + const abortController = this.abortControllers.get(cancelToken); + if (abortController) { + return abortController.signal; + } + return void 0; + } + + const abortController = new AbortController(); + this.abortControllers.set(cancelToken, abortController); + return abortController.signal; + }; + + public abortRequest = (cancelToken: CancelToken) => { + const abortController = this.abortControllers.get(cancelToken); + + if (abortController) { + abortController.abort(); + this.abortControllers.delete(cancelToken); + } + }; + + public request = async <T = any, E = any>({ + body, + secure, + path, + type, + query, + format, + baseUrl, + cancelToken, + ...params + }: FullRequestParams): Promise<HttpResponse<T, E>> => { + const secureParams = + ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && + this.securityWorker && + (await this.securityWorker(this.securityData))) || + {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const queryString = query && this.toQueryString(query); + const payloadFormatter = this.contentFormatters[type || ContentType.Json]; + const responseFormat = format || requestParams.format; + + return this.customFetch( + `${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, + { + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData + ? { "Content-Type": type } + : {}), + }, + signal: + (cancelToken + ? this.createAbortSignal(cancelToken) + : requestParams.signal) || null, + body: + typeof body === "undefined" || body === null + ? null + : payloadFormatter(body), + }, + ).then(async (response) => { + const r = response.clone() as HttpResponse<T, E>; + r.data = null as unknown as T; + r.error = null as unknown as E; + + const data = !responseFormat + ? r + : await response[responseFormat]() + .then((data) => { + if (r.ok) { + r.data = data; + } else { + r.error = data; + } + return r; + }) + .catch((e) => { + r.error = e; + return r; + }); + + if (cancelToken) { + this.abortControllers.delete(cancelToken); + } + + if (!response.ok) throw data; + return data; + }); + }; +} + +/** + * @title massCode API + * @version 3.11.0 + * + * Development documentation + */ +export class Api< + SecurityDataType extends unknown, +> extends HttpClient<SecurityDataType> { + snippets = { + /** + * No description + * + * @tags Snippets + * @name GetSnippets + * @request GET:/snippets/ + */ + getSnippets: ( + query?: { + search?: string; + sort?: string; + order?: "ASC" | "DESC"; + folderId?: + | string + | ( + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | number)))) + ) + ) + ); + tagId?: + | string + | ( + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | number)))) + ) + ) + ); + /** + * @min 0 + * @max 1 + */ + isFavorites?: + | string + | ( + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | number)))) + ) + ) + ); + /** + * @min 0 + * @max 1 + */ + isDeleted?: + | string + | ( + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | number)))) + ) + ) + ); + /** + * @min 0 + * @max 1 + */ + isInbox?: + | string + | ( + | string + | ( + | string + | ( + | string + | (string | (string | (string | (string | number)))) + ) + ) + ); + }, + params: RequestParams = {}, + ) => + this.request<SnippetsResponse, any>({ + path: `/snippets/`, + method: "GET", + query: query, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Snippets + * @name PostSnippets + * @request POST:/snippets/ + */ + postSnippets: (data: SnippetsAdd, params: RequestParams = {}) => + this.request< + { + id: number | bigint; + }, + any + >({ + path: `/snippets/`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Snippets + * @name PostSnippetsByIdContents + * @request POST:/snippets/{id}/contents + */ + postSnippetsByIdContents: ( + id: string, + data: SnippetContentsAdd, + params: RequestParams = {}, + ) => + this.request< + { + id: number | bigint; + }, + any + >({ + path: `/snippets/${id}/contents`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Snippets + * @name PutSnippetsById + * @request PUT:/snippets/{id} + */ + putSnippetsById: ( + id: string, + data: SnippetsUpdate, + params: RequestParams = {}, + ) => + this.request<void, any>({ + path: `/snippets/${id}`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Snippets + * @name DeleteSnippetsById + * @request DELETE:/snippets/{id} + */ + deleteSnippetsById: (id: string, params: RequestParams = {}) => + this.request<void, any>({ + path: `/snippets/${id}`, + method: "DELETE", + ...params, + }), + + /** + * No description + * + * @tags Snippets + * @name PutSnippetsByIdContentsByContentId + * @request PUT:/snippets/{id}/contents/{contentId} + */ + putSnippetsByIdContentsByContentId: ( + id: string, + contentId: string, + data: SnippetContentsAdd, + params: RequestParams = {}, + ) => + this.request<void, any>({ + path: `/snippets/${id}/contents/${contentId}`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + }; + folders = { + /** + * No description + * + * @tags Folders + * @name GetFolders + * @request GET:/folders/ + */ + getFolders: (params: RequestParams = {}) => + this.request<FoldersResponse, any>({ + path: `/folders/`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Folders + * @name PostFolders + * @request POST:/folders/ + */ + postFolders: (data: FoldersAdd, params: RequestParams = {}) => + this.request< + { + id: number | bigint; + }, + any + >({ + path: `/folders/`, + method: "POST", + body: data, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Folders + * @name GetFoldersTree + * @request GET:/folders/tree + */ + getFoldersTree: (params: RequestParams = {}) => + this.request<FoldersTreeResponse, any>({ + path: `/folders/tree`, + method: "GET", + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Folders + * @name PutFoldersById + * @request PUT:/folders/{id} + */ + putFoldersById: ( + id: string, + data: FoldersUpdate, + params: RequestParams = {}, + ) => + this.request<void, any>({ + path: `/folders/${id}`, + method: "PUT", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Folders + * @name DeleteFoldersById + * @request DELETE:/folders/{id} + */ + deleteFoldersById: (id: string, params: RequestParams = {}) => + this.request<void, any>({ + path: `/folders/${id}`, + method: "DELETE", + ...params, + }), + }; + tags = { + /** + * No description + * + * @tags Tags + * @name PostTags + * @request POST:/tags/ + */ + postTags: (data: TagsAdd, params: RequestParams = {}) => + this.request<void, any>({ + path: `/tags/`, + method: "POST", + body: data, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags Tags + * @name DeleteTagsById + * @request DELETE:/tags/{id} + */ + deleteTagsById: (id: string, params: RequestParams = {}) => + this.request<void, any>({ + path: `/tags/${id}`, + method: "DELETE", + ...params, + }), + }; +} diff --git a/src/renderer/services/api/index.ts b/src/renderer/services/api/index.ts new file mode 100644 index 00000000..4d28210b --- /dev/null +++ b/src/renderer/services/api/index.ts @@ -0,0 +1,7 @@ +import ky from 'ky' +import { Api } from './generated' + +export const api = new Api({ + baseUrl: 'http://localhost:4321', + customFetch: ky, +}) diff --git a/src/renderer/store/app.ts b/src/renderer/store/app.ts deleted file mode 100644 index a8a15229..00000000 --- a/src/renderer/store/app.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { goToSnippet } from '@/composable' -import { platform, store } from '@/electron' -import type { MarkdownSettings } from '@shared/types/main/store' -import type { - CodePreviewSettings, - EditorSettings, - ScreenshotSettings, - State, - Theme -} from '@shared/types/renderer/store/app' -import { defineStore } from 'pinia' -import { version } from '../../../package.json' - -export const EDITOR_DEFAULTS: EditorSettings = { - fontFamily: 'SF Mono, Consolas, Menlo, Ubuntu Mono, monospace', - fontSize: 12, - tabSize: 2, - wrap: true, - trailingComma: 'none', - semi: false, - singleQuote: true, - highlightLine: false, - highlightGutter: false, - matchBrackets: false -} - -const SCREENSHOT_DEFAULTS: ScreenshotSettings = { - background: false, - gradient: ['#D02F98', '#9439CA'], - darkMode: true, - width: 600 -} - -const CODE_PREVIEW_DEFAULTS: CodePreviewSettings = { - darkMode: false -} - -const MARKDOWN_DEFAULTS: MarkdownSettings = { - presentationScale: 1.3, - codeRenderer: 'highlight.js' -} - -const HISTORY_LIMIT = 50 - -export const useAppStore = defineStore('app', { - state: (): State => ({ - isInit: false, - isSponsored: import.meta.env.VITE_SPONSORED === 'true', - theme: 'light:github', - showTags: true, - showModal: false, - sizes: { - titlebar: 15, - sidebar: 180, - snippetList: 250, - codePreviewHeight: 200, - editor: { - titleHeight: 34, - fragmentsHeight: 25, - tagsHeight: 40, - descriptionHeight: 58, - footerHeight: 30 - } - }, - editor: EDITOR_DEFAULTS, - screenshot: SCREENSHOT_DEFAULTS, - codePreview: CODE_PREVIEW_DEFAULTS, - markdown: MARKDOWN_DEFAULTS, - selectedPreferencesMenu: 'storage', - selectedDevtoolsMenu: 'textTools.caseConverter', - language: store.preferences.get('language'), - history: [], - historyIndex: 0, - version, - platform: platform() - }), - - getters: { - isLightTheme: state => !!state.theme.match(/^light/) - }, - - actions: { - setTheme (theme: Theme) { - this.theme = theme - - store.preferences.set('theme', theme) - store.preferences.set('editor', { ...this.editor }) - }, - resetEditorSettings () { - this.editor = EDITOR_DEFAULTS - }, - isEditorSettingsValid (settings: EditorSettings) { - const defaults = Object.keys(EDITOR_DEFAULTS) - const toCompare = Object.keys(settings) - - return defaults.every(i => toCompare.includes(i)) - }, - setLang (lang: string) { - this.language = lang - store.preferences.set('language', lang) - }, - addToHistory (snippetId: string) { - if (!snippetId) return - if (this.history[this.history.length - 1] === snippetId) return - - if (this.history.length === HISTORY_LIMIT) this.history.shift() - - this.history.push(snippetId) - this.historyIndex = this.history.length - 1 - }, - historyBack () { - if (this.historyIndex === 0) return - - this.historyIndex = this.historyIndex - 1 - goToSnippet(this.history[this.historyIndex]) - }, - historyForward () { - if (this.historyIndex === this.history.length - 1) return - - this.historyIndex = this.historyIndex + 1 - goToSnippet(this.history[this.historyIndex]) - } - } -}) diff --git a/src/renderer/store/folders.ts b/src/renderer/store/folders.ts deleted file mode 100644 index 88bb4ed1..00000000 --- a/src/renderer/store/folders.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { useApi } from '@/composable' -import { i18n, store } from '@/electron' -import { flatToNested } from '@/utils' -import type { Folder, FolderTree } from '@shared/types/main/db' -import { defineStore } from 'pinia' -import type { State } from '@shared/types/renderer/store/folders' -import { nestedToFlat } from '../../main/utils' -import type { SnippetWithFolder } from '@shared/types/renderer/store/snippets' -import { useSnippetStore } from './snippets' - -export const useFolderStore = defineStore('folders', { - state: () => - ({ - folders: [], - foldersTree: [], - selected: undefined, - selectedId: undefined, - selectedContextId: undefined, - selectedIds: undefined, - selectedAlias: undefined - } as State), - - getters: { - system: state => state.folders.filter(i => i.isSystem), - main: state => state.folders.filter(i => !i.isSystem) - }, - - actions: { - async getFolders () { - const { data } = await useApi<Folder[]>('/folders').get().json() - this.folders = data.value - this.foldersTree = flatToNested(this.folders.filter(i => !i.isSystem)) - }, - async addNewFolder () { - const snippetStore = useSnippetStore() - - const body: Partial<Folder> = { - name: i18n.t('folder.untitled'), - parentId: null, - isOpen: false, - isSystem: false, - defaultLanguage: 'plain_text' - } - - const { data } = await useApi('/folders').post(body).json() - - await this.getFolders() - this.selectId(data.value.id) - await snippetStore.getSnippetsByFolderIds(this.selectedIds!) - return data.value as Folder - }, - async patchFoldersById (id: string, body: Partial<Folder>) { - body.updatedAt = new Date().valueOf() - await useApi(`/folders/${id}`).patch(body) - await this.getFolders() - - if (id === this.selectedId) { - this.selected = this.findFolderById(id, this.foldersTree) - } - }, - async updateFoldersTable () { - const body = { - value: [ - ...JSON.parse(JSON.stringify(this.system)), - ...nestedToFlat(this.foldersTree) - ] - } - await useApi('/db/update/folders').post(body) - }, - selectId (id: string) { - this.selectedId = id - this.selected = this.findFolderById(id, this.foldersTree) - this.selectedAlias = undefined - const ids = this.getIds([this.selected!]) - this.selectedIds = ids - - store.app.set('selectedFolderId', id) - store.app.set('selectedFolderIds', ids) - store.app.delete('selectedFolderAlias') - }, - findFolderById (id: string, folders: FolderTree[]) { - let folder: FolderTree | undefined - - const find = (id: string, folders: FolderTree[]) => { - folders.forEach(i => { - if (i.id === id) { - folder = i - } else if (i.children) { - find(id, i.children as FolderTree[]) - } - }) - } - - find(id, folders) - - return folder - }, - getIds (folders: FolderTree[]) { - const ids: string[] = [] - - const find = (folders: FolderTree[]) => { - folders.forEach(i => { - ids.push(i.id) - - if (i.children && i.children.length) { - find(i.children as FolderTree[]) - } - }) - } - - find(folders) - - return ids - }, - async deleteFoldersById (id: string) { - const snippetStore = useSnippetStore() - const folder = this.findFolderById(id, this.foldersTree) - const folderIds: string[] = [] - const snippetsIds: string[] = [] - - if (folder) { - const ids = this.getIds([folder]) - folderIds.push(...ids) - } - - for (const id of folderIds) { - const { data } = await useApi<SnippetWithFolder[]>( - `/folders/${id}/snippets?_expand=folder` - ) - .get() - .json() - data.value.forEach((i: any) => { - snippetsIds.push(i.id) - }) - } - - console.log(snippetsIds) - - for (const id of snippetsIds) { - await useApi(`/snippets/${id}`).patch({ - folderId: '', - isDeleted: true - }) - } - - for (const id of folderIds) { - await useApi(`/folders/${id}`).delete() - } - - await this.getFolders() - await snippetStore.getSnippets() - snippetStore.setSnippetsByAlias('trash') - }, - openFolders (action: 'open' | 'close') { - if (action === 'open') { - this.folders.forEach(async i => { - this.patchFoldersById(i.id, { - isOpen: true - }) - }) - } else { - this.folders.forEach(i => { - this.patchFoldersById(i.id, { - isOpen: false - }) - }) - } - } - } -}) diff --git a/src/renderer/store/snippets.ts b/src/renderer/store/snippets.ts deleted file mode 100644 index bc3dca21..00000000 --- a/src/renderer/store/snippets.ts +++ /dev/null @@ -1,372 +0,0 @@ -import type { Language } from '../../shared/types/renderer/editor' -import type { SystemFolderAlias } from '@shared/types/renderer/sidebar' -import { sortSnippetsBy, useApi } from '@/composable' -import { i18n, store } from '@/electron' -import type { - Snippet, - SnippetContent, - SnippetsSort, - Tag -} from '@shared/types/main/db' -import { defineStore } from 'pinia' -import { useFolderStore } from './folders' -import type { - SnippetWithFolder, - State, - PreviewType -} from '@shared/types/renderer/store/snippets' -import { useTagStore } from './tags' -import { useAppStore } from './app' -import Fuse from 'fuse.js' - -export const useSnippetStore = defineStore('snippets', { - state: (): State => ({ - all: [], - snippets: [], - selected: undefined, - selectedMultiple: [], - fragment: 0, - searchQuery: undefined, - searchQueryEscaped: undefined, - sort: 'updatedAt', - hideSubfolderSnippets: false, - compactMode: false, - isContextState: false, - isMarkdownPreview: false, - isMindmapPreview: false, - isScreenshotPreview: false, - isCodePreview: false - }), - - getters: { - snippetsByFilter: (state): SnippetWithFolder[] => { - const folderStore = useFolderStore() - - if (folderStore.selectedAlias) { - return state.snippets - } - - if (state.hideSubfolderSnippets) { - return state.snippets.filter( - i => i.folderId === folderStore.selectedId - ) - } - - return state.snippets - }, - selectedId: state => state.selected?.id, - selectedIds: state => state.selectedMultiple.map(i => i.id), - selectedIndex () { - // @ts-expect-error - // FIXME: Разобраться с типами - return this.snippetsByFilter.findIndex(i => i.id === this.selected?.id) - }, - currentContent: state => - state.selected?.content?.[state.fragment]?.value || undefined, - currentLanguage: state => - state.selected?.content?.[state.fragment]?.language, - currentTags (): Tag[] { - const tagStore = useTagStore() - const tags: Tag[] = [] - - if (this.selected?.tagsIds?.length) { - this.selected.tagsIds.forEach(i => { - const tag = tagStore.tags.find(t => t.id === i) - if (tag) tags.push(tag) - }) - } - - return tags - }, - fragmentLabels: state => state.selected?.content?.map(i => i.label), - fragmentCount: state => state.selected?.content?.length, - tagsCount: state => state.selected?.tagsIds?.length, - isFragmentsShow (): boolean { - return this.fragmentCount ? this.fragmentCount > 1 : false - }, - isTagsShow (): boolean { - const appStore = useAppStore() - return this.tagsCount ? this.tagsCount > 0 : appStore.showTags - }, - isDescriptionShow: state => - typeof state.selected?.description === 'string' - }, - - actions: { - async getSnippets () { - const { data } = await useApi('/snippets/embed-folder').get().json() - - this.all = data.value - sortSnippetsBy(this.all, this.sort) - }, - async getSnippetsByFolderIds (ids: string[]) { - const snippets: SnippetWithFolder[] = [] - - for (const id of ids) { - const { data } = await useApi<SnippetWithFolder[]>( - `/folders/${id}/snippets?_expand=folder` - ) - .get() - .json() - - snippets.push(...data.value) - } - - this.snippets = snippets.filter(i => !i.isDeleted) - sortSnippetsBy(this.snippets, this.sort) - }, - async getSnippetsById (id: string) { - if (id) { - const { data } = await useApi<Snippet>(`/snippets/${id}`).get().json() - this.selected = data.value - store.app.set('selectedSnippetId', id) - } else { - store.app.delete('selectedSnippetId') - this.selected = undefined - } - }, - async patchSnippetsById (id: string, body: Partial<Snippet>) { - const snippet = this.snippets.find(i => i.id === id) - - if (!snippet) return - - if (snippet.id === this.selectedId) { - for (const props in body) { - (this.selected as any)[props] = (body as any)[props] - } - } - - for (const props in body) { - (snippet as any)[props] = (body as any)[props] - } - - await useApi(`/snippets/${id}`).patch(body).json() - }, - async patchCurrentSnippetContentByKey ( - key: keyof SnippetContent, - value: string | Language - ) { - const body: Partial<Snippet> = {} - const content = this.selected?.content - - if (content) { - (content[this.fragment] as any)[key] = value - body.content = content - body.updatedAt = new Date().valueOf() - - await useApi(`/snippets/${this.selectedId}`).patch(body) - } - }, - async addNewSnippet (body?: Partial<Snippet>) { - const folderStore = useFolderStore() - let _body: Partial<Snippet> = {} - - _body.isDeleted = false - _body.isFavorites = false - _body.folderId = '' - _body.tagsIds = [] - _body.description = null - - if (body) { - _body = { - ..._body, - name: body.name, - content: body.content - } - } else { - _body.name = i18n.t('snippet.untitled') - _body.folderId = folderStore.selectedId || '' - _body.content = [ - { - label: `${i18n.t('fragment')} 1`, - language: folderStore.selected?.defaultLanguage || 'plain_text', - value: '' - } - ] - } - - const { data } = await useApi('/snippets').post(_body).json() - - this.selected = data.value - store.app.set('selectedSnippetId', this.selected!.id) - }, - async duplicateSnippetById (id: string) { - const snippet = this.snippets.find(i => i.id === id) - - if (snippet) { - const body = Object.assign({}, snippet) - body.name = body.name + ' Copy' - - const { data } = await useApi('/snippets').post(body).json() - this.selected = data.value - this.fragment = 0 - - store.app.set('selectedSnippetId', this.selected!.id) - } - }, - async addNewFragmentToSnippetsById (id: string) { - const folderStore = useFolderStore() - const content = [...this.selected!.content] - const fragmentCount = content.length + 1 - const body: Partial<Snippet> = {} - - content.push({ - label: `${i18n.t('fragment')} ${fragmentCount}`, - language: folderStore.selected?.defaultLanguage || 'plain_text', - value: '' - }) - - body.content = content - - await this.patchSnippetsById(id, body) - this.fragment = content.length - 1 - }, - async deleteCurrentSnippetFragmentByIndex (index: number) { - const body: Partial<Snippet> = {} - const content = [...this.selected!.content] - - content.splice(index, 1) - body.content = content - - await this.patchSnippetsById(this.selectedId!, body) - await this.getSnippetsById(this.selectedId!) - }, - async deleteSnippetsById (id: string) { - await useApi(`/snippets/${id}`).delete() - }, - async deleteSnippetsByIds (ids: string[]) { - await useApi('/snippets/delete').post({ ids }) - }, - async setSnippetsByFolderIds (setFirst?: boolean) { - const folderStore = useFolderStore() - await this.getSnippetsByFolderIds(folderStore.selectedIds!) - - if (setFirst) { - this.selected = this.snippets[0] - if (this.selected) { - store.app.set('selectedSnippetId', this.snippets[0].id) - } - } - }, - async setSnippetsByAlias (alias: SystemFolderAlias) { - const folderStore = useFolderStore() - - folderStore.selectedAlias = alias - folderStore.selected = undefined - folderStore.selectedId = undefined - folderStore.selectedIds = undefined - - await this.getSnippets() - - let snippets: SnippetWithFolder[] = [] - - if (alias === 'inbox') { - snippets = this.all.filter(i => !i.folderId && !i.isDeleted) - } - - if (alias === 'all') { - snippets = this.all.filter(i => !i.isDeleted) - } - - if (alias === 'favorites') { - snippets = this.all.filter(i => i.isFavorites && !i.isDeleted) - } - - if (alias === 'trash') { - snippets = this.all.filter(i => i.isDeleted) - } - - this.snippets = snippets - sortSnippetsBy(this.snippets, this.sort) - - this.selected = snippets[0] - - store.app.set('selectedFolderAlias', alias) - store.app.delete('selectedFolderId') - store.app.delete('selectedFolderIds') - }, - async setSnippetsByTagId (id: string) { - const snippets: SnippetWithFolder[] = this.all.filter(i => - i.tagsIds.includes(id) - ) - - this.snippets = snippets - this.selected = snippets[0] - }, - setSnippetById (id: string) { - const snippet = this.findSnippetById(id) - if (snippet) this.selected = snippet - }, - findSnippetById (id: string) { - return this.all.find(i => i.id === id) - }, - async emptyTrash () { - const ids = this.all.filter(i => i.isDeleted).map(i => i.id) - await this.deleteSnippetsByIds(ids) - }, - search (query: string) { - let q = query - let isExactSearch = false - - // обрезка кавычек для точного поиска - if (query.startsWith('"') && query.endsWith('"')) { - isExactSearch = true - q = query.slice(1, -1) - } - - this.searchQueryEscaped = q - - if (!q) { - this.setSnippetsByAlias('all') - this.searchQueryEscaped = undefined - return - } - - const fuse = new Fuse(this.all, { - includeScore: true, - threshold: isExactSearch ? 0 : 0.4, - ignoreLocation: true, - keys: ['name', 'content.value', 'description'] - }) - - const result = fuse.search(q) - - this.snippets = result.map(i => i.item) - this.selected = this.snippets[0] - }, - setSort (sort: SnippetsSort) { - this.sort = sort - store.app.set('sort', sort) - - sortSnippetsBy(this.snippets, this.sort) - }, - togglePreview (type: PreviewType) { - switch (type) { - case 'markdown': - this.isMarkdownPreview = !this.isMarkdownPreview - this.isMindmapPreview = false - this.isScreenshotPreview = false - this.isCodePreview = false - break - case 'mindmap': - this.isMarkdownPreview = false - this.isMindmapPreview = !this.isMindmapPreview - this.isScreenshotPreview = false - this.isCodePreview = false - break - case 'screenshot': - this.isMarkdownPreview = false - this.isMindmapPreview = false - this.isScreenshotPreview = !this.isScreenshotPreview - this.isCodePreview = false - break - case 'code': - this.isMarkdownPreview = false - this.isMindmapPreview = false - this.isScreenshotPreview = false - this.isCodePreview = !this.isCodePreview - break - } - } - } -}) diff --git a/src/renderer/store/tags.ts b/src/renderer/store/tags.ts deleted file mode 100644 index c880ade8..00000000 --- a/src/renderer/store/tags.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useApi } from '@/composable' -import type { Tag } from '@shared/types/main/db' -import type { State } from '@shared/types/renderer/store/tag' -import { defineStore } from 'pinia' - -export const useTagStore = defineStore('tags', { - state: () => - ({ - tags: [], - selectedId: undefined - } as State), - - actions: { - async getTags () { - const { data } = await useApi('/tags').get().json() - this.tags = data.value - this.tags.sort((a, b) => (a.name > b.name ? 1 : -1)) - }, - async postTags (name: string): Promise<Tag> { - const { data } = await useApi('/tags').post({ name }).json() - return data.value - }, - async deleteTagById (id: string) { - await useApi(`/tags/${id}`).delete() - await this.getTags() - } - } -}) diff --git a/src/renderer/styles.css b/src/renderer/styles.css new file mode 100644 index 00000000..44970b6b --- /dev/null +++ b/src/renderer/styles.css @@ -0,0 +1,63 @@ + +@import "tailwindcss"; + +:root { + --title-bar-height: 20px; +} + +body { + font-size: 14px; + background-color: var(--color-bg); + color: var(--color-text) +} + + +@theme { + --color-primary: oklch(50% 0.19 260); + + --color-bg: oklch(100% 0 0); + --color-fg: oklch(0% 0 0); + + --color-button: oklch(92% 0 0); + --color-button-fg: oklch(0% 0 0); + --color-button-hover: oklch(95% 0 0); + + --color-border: oklch(90% 0 0); + + --color-text: oklch(20% 0 0); + --color-text-muted: oklch(60% 0 0); + + --color-list-selection: oklch(92% 0 0); + --color-list-selection-fg: oklch(20% 0 0); + --color-list-focus: var(--color-primary); + --color-list-focus-fg: oklch(100% 0 0); + + --color-scrollbar: oklch(0% 0 0 / 0.2); + + --color-tooltip: oklch(20% 0 0); + --color-tooltip-fg: oklch(85% 0 0); +} + + +html.dark { + --color-primary: oklch(50% 0.19 260); + + --color-bg: oklch(24.78% 0 0); + --color-fg: oklch(100% 0 0); + + --color-button: oklch(% 0 0); + --color-button-fg: oklch(95% 0 0); + --color-button-hover: oklch(32% 0 0); + + --color-border: oklch(30% 0 0); + + --color-text: oklch(75% 0 0); + --color-text-muted: oklch(60% 0 0); + + --color-list-selection: oklch(32% 0 0); + --color-list-selection-fg: oklch(95% 0 0); + + --color-scrollbar: oklch(100% 0 0 / 0.2); + + --color-tooltip-fg: oklch(75% 0 0); +} diff --git a/src/renderer/types/.keep b/src/renderer/types/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index cecf679f..d32b0fe6 100644 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -1,22 +1,6 @@ -/** - * Конвертация плоского строения дерева во вложенный через 'children' - * @param {Array} items - массив элементов c полями связей - * с родительскими элементами - * @param {String} id - ID элемента - * @param {String} idLink - имя свойства ID - * @param {String} link - имя связанного поля - * @example [{id:1, parentId: null }, {id:2, parentId: 1 }] -> [{id:1, children: [id:2] }] - */ -export const flatToNested = ( - items: any[], - id = null, - idLink = 'id', - link = 'parentId' -): any[] => { - return items - .filter(item => item[link] === id) - .map(item => ({ - ...item, - children: flatToNested(items, item[idLink]) - })) +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) } diff --git a/src/renderer/views/Devtools.vue b/src/renderer/views/Devtools.vue deleted file mode 100644 index de4ee15f..00000000 --- a/src/renderer/views/Devtools.vue +++ /dev/null @@ -1,111 +0,0 @@ -<template> - <AppLayoutOneColumn - :title="i18n.t('menu:devtools.label')" - @close="toHome" - > - <AppMenu v-model="appStore.selectedDevtoolsMenu"> - <AppMenuGroup - :label="i18n.t('devtools:textTools.label')" - name="textTools" - > - <AppMenuItem - group="textTools" - :name="i18n.t('devtools:textTools.caseConverter')" - value="textTools.caseConverter" - > - <CaseConverterTool /> - </AppMenuItem> - <AppMenuItem - group="textTools" - :name="i18n.t('devtools:textTools.slugGenerator')" - value="textTools.slugGenerator" - > - <SlugTool /> - </AppMenuItem> - <AppMenuItem - group="textTools" - :name="i18n.t('devtools:textTools.sortLines')" - value="textTools.sortLines" - > - <SortTool /> - </AppMenuItem> - <AppMenuItem - group="textTools" - :name="i18n.t('devtools:textTools.urlParser')" - value="textTools.urlParser" - > - <UrlParserTool /> - </AppMenuItem> - </AppMenuGroup> - <AppMenuGroup - :label="i18n.t('devtools:crypto.label')" - name="cryptoTools" - > - <AppMenuItem - group="cryptoTools" - :name="i18n.t('devtools:crypto.hashGenerator')" - value="cryptoTools.hashGenerator" - > - <HashTool /> - </AppMenuItem> - <AppMenuItem - group="cryptoTools" - :name="i18n.t('devtools:crypto.hmacGenerator')" - value="cryptoTools.hmacGenerator" - > - <HmacTool /> - </AppMenuItem> - <AppMenuItem - group="cryptoTools" - :name="i18n.t('devtools:crypto.passGenerator')" - value="cryptoTools.passGenerator" - > - <PassTool /> - </AppMenuItem> - <AppMenuItem - group="cryptoTools" - :name="i18n.t('devtools:crypto.uuidGenerator')" - value="cryptoTools.uuidGenerator" - > - <UuidTool /> - </AppMenuItem> - </AppMenuGroup> - <AppMenuGroup - :label="i18n.t('devtools:encodeDecode.label')" - name="encodeDecodeTools" - > - <AppMenuItem - group="encodeDecodeTools" - :name="i18n.t('devtools:encodeDecode.url')" - value="encodeDecode.url" - > - <UrlEncodeDecodeTool /> - </AppMenuItem> - <AppMenuItem - group="encodeDecodeTools" - :name="i18n.t('devtools:encodeDecode.base64')" - value="encodeDecode.base64" - > - <Base64EncodeDecodeTool /> - </AppMenuItem> - </AppMenuGroup> - </AppMenu> - </AppLayoutOneColumn> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import router from '@/router' -import { useAppStore } from '@/store/app' - -const appStore = useAppStore() - -const toHome = () => { - router.push('/') -} - -track('devtools') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/views/Main.vue b/src/renderer/views/Main.vue index 93a8a332..c4f105de 100644 --- a/src/renderer/views/Main.vue +++ b/src/renderer/views/Main.vue @@ -1,91 +1,11 @@ +<script setup lang="ts"></script> + <template> - <div class="main"> - <TheSidebar /> + <div + class="h-screen grid grid-cols-[var(--sidebar-width)_var(--snippet-list-width)_1fr]" + > + <Sidebar /> <SnippetList /> - <SnippetsView /> + <Editor /> </div> </template> - -<script setup lang="ts"> -import { store } from '@/electron' -import { track } from '@/services/analytics' -import { useFolderStore } from '@/store/folders' -import { useSnippetStore } from '@/store/snippets' -import { useTagStore } from '@/store/tags' -import { useAppStore } from '@/store/app' -import { computed } from 'vue' -import { emitter } from '@/composable' - -const folderStore = useFolderStore() -const snippetStore = useSnippetStore() -const tagStore = useTagStore() -const appStore = useAppStore() - -const sidebarWidth = computed(() => appStore.sizes.sidebar + 'px') -const snippetListWidth = computed(() => appStore.sizes.snippetList + 'px') - -const init = async () => { - const storedFolderId = store.app.get('selectedFolderId') - const storedFolderAlias = store.app.get('selectedFolderAlias') - const storedSnippetId = store.app.get('selectedSnippetId') - - await folderStore.getFolders() - await snippetStore.getSnippets() - await tagStore.getTags() - - if (storedSnippetId) { - snippetStore.setSnippetById(storedSnippetId) - appStore.addToHistory(storedSnippetId) - } else { - appStore.addToHistory(snippetStore.snippets[0]?.id) - } - - if (storedFolderId) { - folderStore.selectId(storedFolderId) - await snippetStore.setSnippetsByFolderIds() - } - - if (storedFolderAlias) { - snippetStore.setSnippetsByAlias(storedFolderAlias) - } - - emitter.emit('scroll-to:folder', folderStore.selectedId!) - - appStore.isInit = true -} - -const addDevtoolsHost = () => { - if (import.meta.env.DEV) { - const s = document.createElement('script') - s.src = 'http://localhost:8098' - document.head.appendChild(s) - } -} - -addDevtoolsHost() -init() -track('main') -</script> - -<style scoped lang="scss"> -.main { - display: grid; - height: 100vh; - background-color: var(--color-bg); - overflow: hidden; - grid-template-columns: v-bind(sidebarWidth) v-bind(snippetListWidth) 1fr; -} -.update-available { - position: absolute; - top: 2px; - right: var(--spacing-xs); - font-size: var(--text-xs); - text-transform: uppercase; - font-weight: 500; - color: var(--color-text); - &:hover { - text-decoration: underline; - } - z-index: 1020; -} -</style> diff --git a/src/renderer/views/Preferences.vue b/src/renderer/views/Preferences.vue deleted file mode 100644 index a9f613ee..00000000 --- a/src/renderer/views/Preferences.vue +++ /dev/null @@ -1,56 +0,0 @@ -<template> - <AppLayoutOneColumn - :title="i18n.t('preferences:title')" - @close="toHome" - > - <AppMenu v-model="appStore.selectedPreferencesMenu"> - <AppMenuItem - :name="i18n.t('preferences:storage.label')" - value="storage" - > - <StoragePreferences /> - </AppMenuItem> - <AppMenuItem - :name="i18n.t('preferences:editor.label')" - value="editor" - > - <EditorPreferences /> - </AppMenuItem> - <AppMenuItem - :name="i18n.t('preferences:markdown.label')" - value="markdown" - > - <MarkdownPreferences /> - </AppMenuItem> - <AppMenuItem - :name="i18n.t('preferences:appearance.label')" - value="appearance" - > - <AppearancePreferences /> - </AppMenuItem> - <AppMenuItem - :name="i18n.t('preferences:language.label')" - value="languages" - > - <LanguagePreferences /> - </AppMenuItem> - </AppMenu> - </AppLayoutOneColumn> -</template> - -<script setup lang="ts"> -import { i18n } from '@/electron' -import { track } from '@/services/analytics' -import router from '@/router' -import { useAppStore } from '@/store/app' - -const appStore = useAppStore() - -const toHome = () => { - router.push('/') -} - -track('preferences') -</script> - -<style lang="scss" scoped></style> diff --git a/src/renderer/views/Presentation.vue b/src/renderer/views/Presentation.vue deleted file mode 100644 index 7b0a84c2..00000000 --- a/src/renderer/views/Presentation.vue +++ /dev/null @@ -1,217 +0,0 @@ -<template> - <div - class="presentation" - @mousemove="onHover" - > - <div class="header"> - <AppActionButton - v-tooltip="i18n.t('close')" - class="action" - :class="{ show: showActions }" - @click="toHome" - > - <UniconsTimes /> - </AppActionButton> - </div> - <div class="body"> - <TheMarkdown - :scale="scale" - :value="snippetStore.currentContent!" - /> - </div> - <div class="footer"> - <div - class="actions" - :class="{ show: showActions }" - > - <AppActionButton @click="onFullscreen"> - <UniconsExpandAlt - v-if="!isFullscreen" - width="24px" - height="24px" - /> - <UniconsCompressAlt - v-else - width="24px" - height="24px" - /> - </AppActionButton> - <div class="nav"> - <AppActionButton @click="onPrevSlide"> - <UniconsArrowLeft - width="24px" - height="24px" - /> - </AppActionButton> - <AppActionButton @click="onNextSlide"> - <UniconsArrowRight - width="24px" - height="24px" - /> - </AppActionButton> - </div> - <div class="scale"> - <AppActionButton @click="onMinusScale"> - <UniconsMinus - width="24px" - height="24px" - /> - </AppActionButton> - <div class="factor"> - {{ scale }} - </div> - <AppActionButton @click="onPlusScale"> - <UniconsPlus - width="24px" - height="24px" - /> - </AppActionButton> - </div> - <div class="count"> - {{ currentIndex + 1 }} / {{ slideIds.length }} - </div> - </div> - </div> - </div> -</template> - -<script setup lang="ts"> -import { i18n, store } from '@/electron' -import { track } from '@/services/analytics' -import { useSnippetStore } from '@/store/snippets' -import { computed, ref, watch } from 'vue' -import { useRouter } from 'vue-router' -import { useDebounceFn, useMagicKeys, useFullscreen } from '@vueuse/core' -import { useAppStore } from '@/store/app' - -const snippetStore = useSnippetStore() -const appStore = useAppStore() -const router = useRouter() -const { left, right, escape } = useMagicKeys() -const { isFullscreen, toggle } = useFullscreen() - -const slideIds = snippetStore.snippets - .filter(i => i.content[0].language === 'markdown') - .map(i => i.id) -const currentIndex = computed(() => - snippetStore.snippets.findIndex(i => i.id === snippetStore.selectedId) -) - -const showActions = ref(false) -const scale = computed({ - get: () => appStore.markdown.presentationScale, - set: v => { - appStore.markdown.presentationScale = Number(v.toFixed(1)) - store.preferences.set('markdown', { ...appStore.markdown }) - } -}) -const toHome = () => { - router.push('/') -} - -const onPrevSlide = () => { - const prevId = slideIds[currentIndex.value - 1] - if (prevId) { - snippetStore.getSnippetsById(prevId) - } -} - -const onNextSlide = () => { - const nextId = slideIds[currentIndex.value + 1] - if (nextId) { - snippetStore.getSnippetsById(nextId) - } -} - -const onMinusScale = () => { - if (scale.value.toFixed(1) === '1.0') return - scale.value -= 0.1 -} - -const onPlusScale = () => { - scale.value += 0.1 -} - -const onFullscreen = () => { - toggle() -} - -const hideActions = useDebounceFn(() => { - showActions.value = false -}, 2000) - -const onHover = () => { - showActions.value = true - hideActions() -} - -watch(left, v => { - if (v) onPrevSlide() -}) - -watch(right, v => { - if (v) onNextSlide() -}) - -watch(escape, v => { - if (v) toHome() -}) - -track('presentation') -</script> - -<style lang="scss" scoped> -.presentation { - margin-top: var(--title-bar-height); -} -.header { - display: flex; - justify-content: flex-end; - padding: 0 var(--spacing-xs); -} -.body { - padding: var(--spacing-sm) var(--spacing-xl); - display: grid; - :deep(h1) { - border-bottom: none; - } -} - -.footer { - position: absolute; - left: var(--spacing-sm); - bottom: var(--spacing-sm); - .actions { - align-items: center; - display: flex; - gap: var(--spacing-sm); - opacity: 0; - transition: opacity 0.3s; - &:hover { - opacity: 1; - } - &.show { - opacity: 1; - } - .nav { - display: flex; - } - .scale { - display: flex; - align-items: center; - gap: var(--spacing-xs); - .factor { - width: 20px; - text-align: center; - } - } - } -} -.action { - opacity: 0; - transition: opacity 0.3s; - &.show { - opacity: 1; - } -} -</style> diff --git a/src/shared/types/main/analytics.d.ts b/src/shared/types/main/analytics.d.ts deleted file mode 100644 index a6eebb54..00000000 --- a/src/shared/types/main/analytics.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -type CombineWith<T extends string, U extends string> = `${U}/${T}` - -type SnippetEvents = - | 'add-description' - | 'add-fragment' - | 'add-new' - | 'add-tag' - | 'add-to-favorites' - | 'code-preview' - | 'copy' - | 'copy-link' - | 'create-screenshot' - | 'delete-fragment' - | 'delete-from-favorites' - | 'delete' - | 'duplicate' - | 'format' - | 'markdown-preview' - | 'move-to-trash' - | 'restore-from-trash' - | 'search' - | 'set-language' - | 'mindmap-preview' - | 'screenshot-preview' - | 'save-mindmap' - -type FolderEvents = 'add-new' | 'delete' | 'set-language' | 'set-custom-icon' -type TagEvents = 'add-new' | 'delete' - -type AppEvents = - | 'move-storage' - | 'open-storage' - | 'new-storage' - | 'open-url' - | 'migrate' - | 'update' - | 'install' - | 'empty-trash' - | 'set-theme' - | 'notify' - | 'set-language' - -type ApiEvents = 'snippet-create' -type PageEvents = 'main' | 'preferences' | 'presentation' | 'devtools' -type DevtoolsEvents = - | 'case-converter' - | 'url-parser' - | 'slug-generator' - | 'sort' - | 'hash-generator' - | 'hmac-generator' - | 'uuid-generator' - | 'pass-generator' - | 'url-encoder-decoder' - | 'base64-encoder-decoder' - -type TrackSnippetEvents = CombineWith<SnippetEvents, 'snippets'> -type TrackFolderEvents = CombineWith<FolderEvents, 'folders'> -type TrackTagEvents = CombineWith<TagEvents, 'tags'> -type TrackAppEvents = CombineWith<AppEvents, 'app'> -type TrackApiEvents = CombineWith<ApiEvents, 'api'> -type TrackDevtoolsEvents = CombineWith<DevtoolsEvents, 'devtools'> - -export type TrackEvents = - | TrackSnippetEvents - | TrackFolderEvents - | TrackTagEvents - | TrackAppEvents - | TrackApiEvents - | TrackDevtoolsEvents - | PageEvents diff --git a/src/shared/types/main/db.d.ts b/src/shared/types/main/db.d.ts deleted file mode 100644 index c458346c..00000000 --- a/src/shared/types/main/db.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { Language } from '@shared/types/renderer/editor' -import type { FunctionalComponent } from 'vue' - -export interface Folder { - id: string - name: string - defaultLanguage: Language - parentId: string | null - icon?: string | null | FunctionalComponent - isOpen: boolean - isSystem: boolean - createdAt: number - updatedAt: number -} - -export interface FolderTree extends Folder { - children: Folder[] -} - -export type SnippetsSort = 'updatedAt' | 'createdAt' | 'name' - -export interface SnippetContent { - label: string - language: Language - value: string -} - -export interface Snippet { - id: string - name: string - content: SnippetContent[] - description?: string | null - folderId: string - tagsIds: string[] - isFavorites: boolean - isDeleted: boolean - createdAt: number - updatedAt: number -} - -export interface Tag { - id: string - name: string - createdAt: number - updatedAt: number -} - -export interface DB { - folders: Folder[] - snippets: Snippet[] - tags: Tag[] -} diff --git a/src/shared/types/main/index.d.ts b/src/shared/types/main/index.d.ts deleted file mode 100644 index 3f28f2e9..00000000 --- a/src/shared/types/main/index.d.ts +++ /dev/null @@ -1,158 +0,0 @@ -import type { IpcRendererEvent, OpenDialogOptions } from 'electron' -import type { AppStore, PreferencesStore } from './store' - -export type CombineWith<T extends string, U extends string> = `${U}:${T}` - -type ChannelSubject = - | 'snippet' - | 'snippet-fragment' - | 'folder' - | 'tag' - | 'library' - | 'close' - -type ContextMenuAction = - | 'rename' - | 'delete' - | 'duplicate' - | 'favorites' - | 'new' - | 'update:language' - | 'collapse-all' - | 'expand-all' - | 'restore-from-trash' - | 'copy-snippet-link' - | 'set-custom-icon' - | 'none' - -export type ContextMenuType = - | 'folder' - | 'inbox' - | 'all' - | 'trash' - | 'favorites' - | 'tag' - -type MainMenuAction = - | 'add-description' - | 'copy-snippet' - | 'format-snippet' - | 'new-folder' - | 'new-fragment' - | 'new-snippet' - | 'preferences' - | 'presentation-mode' - | 'preview-code' - | 'preview-markdown' - | 'preview-mindmap' - | 'search' - | 'sort-snippets' - | 'hide-subfolder-snippets' - | 'compact-mode-snippets' - | 'font-size-increase' - | 'font-size-decrease' - | 'font-size-reset' - | 'history-back' - | 'history-forward' - | 'devtools' - -type MainAction = - | 'restart' - | 'restart-api' - | 'notification' - | 'open-dialog' - | 'open-message-box' - | 'update-available' - | 'open-url' - | 'prettier' - | 'focus' - | 'copy-to-assets' - | 'app-protocol' - -type ApiAction = 'snippet-create' - -export type ContextMenuChannel = CombineWith<ChannelSubject, 'context-menu'> - -export type MainMenuChannel = CombineWith<MainMenuAction, 'main-menu'> -export type MainChannel = CombineWith<MainAction, 'main'> -export type ApiChannel = CombineWith<ApiAction, 'api'> - -export type Channel = - | ContextMenuChannel - | MainMenuChannel - | MainChannel - | ApiChannel -export interface ContextMenuRequest { - name?: string - type: ContextMenuType - data?: any - selectedCount?: number -} - -export interface ContextMenuResponse { - action: ContextMenuAction - type: ContextMenuType - data: any -} - -export interface NotificationRequest { - body: string -} - -export interface MessageBoxRequest { - message: string - detail: string - buttons: string[] -} - -export interface DialogRequest { - properties?: OpenDialogOptions['properties'] - filters?: OpenDialogOptions['filters'] -} - -export interface PrettierRequest { - source: string - parser: string -} - -interface EventCallback { - (event?: IpcRendererEvent, ...args: any[]): void -} - -interface StoreGet<T> { - (name: keyof T): any -} - -interface StoreSet<T> { - (name: keyof T, value: any): void -} - -interface StoreProperties<T> { - get: StoreGet<T> - set: StoreSet<T> - delete: StoreGet<T> -} - -export interface ElectronBridge { - ipc: { - invoke<T, U = any>(channel: Channel, payload: T): Promise<U> - on(channel: Channel, cb: EventCallback): void - once(channel: Channel, cb: EventCallback): void - } - store: { - app: StoreProperties<AppStore> - preferences: StoreProperties<PreferencesStore> - } - db: { - create: () => void - migrate: (path: string) => Promise<void> - migrateFromSnippetsLab: (path: string) => void - move: (from: string, to: string) => Promise<void> - isExist: (path: string) => boolean - } - i18n: { - t: (key: string, options?: any) => string - } - platform: () => NodeJS.Platform - version: string -} diff --git a/src/shared/types/main/json-server.d.ts b/src/shared/types/main/json-server.d.ts deleted file mode 100644 index f7d46523..00000000 --- a/src/shared/types/main/json-server.d.ts +++ /dev/null @@ -1,91 +0,0 @@ -declare module '@masscode/json-server' { - import type { NextHandleFunction } from 'connect' - import type { Application, RequestHandler, Router } from 'express' - import { LowSync } from 'lowdb' - import type lodash from 'lodash' - - class LowSyncExtended<T = unknown> extends LowSync { - setState(data: any): void - getState(): T - get<U>(table: string): lodash.ExpChain<U> - } - - export interface JsonServerRouter<T> extends Router { - db: LowSyncExtended<T> - } - - export interface MiddlewaresOptions { - /** - * Path to static files - * @default "public" (if folder exists) - */ - static?: string | undefined - - /** - * Enable logger middleware - * @default true - */ - logger?: boolean | undefined - - /** - * Enable body-parser middleware - * @default true - */ - bodyParser?: boolean | undefined - - /** - * Disable compression - * @default false - */ - noGzip?: boolean | undefined - - /** - * Disable CORS - * @default false - */ - noCors?: boolean | undefined - - /** - * Accept only GET requests - * @default false - */ - readOnly?: boolean | undefined - } - - /** - * Returns an Express server. - */ - export function create(): Application - - /** - * Returns middlewares used by JSON Server. - */ - export function defaults(options?: MiddlewaresOptions): RequestHandler[] - - /** - * Returns JSON Server router. - * @param source Either a path to a json file (e.g. `'db.json'`) or an object in memory. - * This object will then be wrapped by lowdb, but you can also just pass in your own lowdb - * instance that will then not be wrapped. - * @param options Set foreign key suffix (default: `'Id'`) - */ - export function router<T extends object>( - source: LowSync<T> | T | string, - options?: { foreignKeySuffix: string } - ): JsonServerRouter<T> - - /** - * Add custom rewrite rules. - */ - export function rewriter(rules: { [rule: string]: string }): Router - - /** - * Returns body-parser middleware used by JSON Server router. - * - * @returns - * ``` - * [bodyParser.json({ limit: '10mb', extended: false }), bodyParser.urlencoded({ extended: false })] - * ``` - */ - export const bodyParser: [NextHandleFunction, NextHandleFunction] -} diff --git a/src/shared/types/main/renderer.d.ts b/src/shared/types/main/renderer.d.ts deleted file mode 100644 index 7b1afc91..00000000 --- a/src/shared/types/main/renderer.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { ElectronBridge, Channel } from '.' - -declare global { - interface Window { - electron: ElectronBridge - } - - namespace Electron { - interface IpcMain { - handle<T, U = void>( - channel: Channel, - listener: (event: IpcMainInvokeEvent, payload: T) => Promise<U> - ): void - } - } -} diff --git a/src/shared/types/main/store.d.ts b/src/shared/types/main/store.d.ts deleted file mode 100644 index a56329c5..00000000 --- a/src/shared/types/main/store.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { EditorSettings, ScreenshotSettings } from '../renderer/store/app' -import type { SnippetsSort } from './db' - -export interface AppStore { - bounds: object - dateInstallation?: number - nextSupportNotice?: number - prevRemoteNotice?: number - selectedFolderAlias?: string - selectedFolderId?: string - selectedFolderIds?: string[] - selectedSnippetId?: string - sidebarWidth: number - snippetListWidth: number - sort: SnippetsSort - hideSubfolderSnippets?: boolean - compactMode?: boolean - version?: string -} - -export interface MarkdownSettings { - codeRenderer: 'codemirror' | 'highlight.js' - presentationScale: number -} - -export interface PreferencesStore { - storagePath: string - backupPath: string - editor: EditorSettings - screenshot: ScreenshotSettings - markdown: MarkdownSettings - theme: string - language: string -} diff --git a/src/shared/types/main/vite.shim.d.ts b/src/shared/types/main/vite.shim.d.ts deleted file mode 100644 index 1eb45ac2..00000000 --- a/src/shared/types/main/vite.shim.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare type Plugin$1 = any diff --git a/src/shared/types/renderer/composable/index.d.ts b/src/shared/types/renderer/composable/index.d.ts deleted file mode 100644 index fd5abee7..00000000 --- a/src/shared/types/renderer/composable/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type EmitterEvents = { - 'snippet:focus-name': boolean - 'snippet:format': boolean - 'snippet:create': any - 'folder:click': any - 'folder:rename': string - 'scroll-to:folder': string - 'scroll-to:snippet': string - 'search:focus': boolean - 'editor:refresh': boolean -} diff --git a/src/shared/types/renderer/sidebar/index.d.ts b/src/shared/types/renderer/sidebar/index.d.ts deleted file mode 100644 index f752efa0..00000000 --- a/src/shared/types/renderer/sidebar/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Folder } from '@shared/types/main/db' -import type { FunctionalComponent } from 'vue' - -export type Tab = 'library' | 'tags' -export type SystemFolderAlias = 'inbox' | 'favorites' | 'trash' | 'all' - -export interface Tabs { - label: string - value: Tab -} - -export interface SidebarSystemFolder extends Partial<Folder> { - icon: FunctionalComponent - alias: SystemFolderAlias -} diff --git a/src/shared/types/renderer/store/app.d.ts b/src/shared/types/renderer/store/app.d.ts deleted file mode 100644 index c7d7c963..00000000 --- a/src/shared/types/renderer/store/app.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { MarkdownSettings } from '@shared/types/main/store' - -export type Theme = - | 'dark:dracula' - | 'dark:material-palenight' - | 'dark:material' - | 'dark:merbivore' - | 'dark:monokai' - | 'dark:one' - | 'dark:tokyo-night' - | 'light:github' - | 'light:material' - | 'light:solarized' - -export interface AppSizes { - titlebar: number - sidebar: number - snippetList: number - codePreviewHeight: number - editor: { - titleHeight: number - fragmentsHeight: number - tagsHeight: number - footerHeight: number - descriptionHeight: number - } -} - -export interface EditorSettings { - fontSize: number - fontFamily: string - wrap: boolean - tabSize: number - trailingComma: 'all' | 'none' | 'es5' - semi: boolean - singleQuote: boolean - highlightLine: boolean - highlightGutter: boolean - matchBrackets: boolean -} - -export interface ScreenshotSettings { - background: boolean - gradient: [string, string] - darkMode: boolean - width: number -} - -export interface CodePreviewSettings { - darkMode: boolean -} - -export interface State { - platform: NodeJS.Platform - theme: Theme - sizes: AppSizes - showTags: boolean - showModal: boolean - version: string - editor: EditorSettings - selectedPreferencesMenu: string - selectedDevtoolsMenu: string - screenshot: ScreenshotSettings - markdown: MarkdownSettings - codePreview: CodePreviewSettings - language: string - history: string[] - historyIndex: number - isInit: boolean - isSponsored: boolean -} diff --git a/src/shared/types/renderer/store/folders.d.ts b/src/shared/types/renderer/store/folders.d.ts deleted file mode 100644 index a89daaa7..00000000 --- a/src/shared/types/renderer/store/folders.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { SystemFolderAlias } from '@shared/types/renderer/sidebar' -import type { Folder, FolderTree } from '@shared/types/main/db' - -export interface State { - folders: Folder[] - foldersTree: FolderTree[] - selected?: FolderTree - selectedId?: string - selectedContextId?: string - selectedIds?: string[] - selectedAlias?: SystemFolderAlias - hoveredId?: string -} diff --git a/src/shared/types/renderer/store/snippets.d.ts b/src/shared/types/renderer/store/snippets.d.ts deleted file mode 100644 index 4385b3c0..00000000 --- a/src/shared/types/renderer/store/snippets.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Folder, Snippet, SnippetsSort } from '@shared/types/main/db' - -export interface SnippetWithFolder extends Snippet { - folder: Folder -} - -export interface State { - all: SnippetWithFolder[] - snippets: SnippetWithFolder[] - selected?: Snippet - selectedMultiple: Snippet[] - fragment: number - searchQuery?: string - searchQueryEscaped?: string - sort: SnippetsSort - hideSubfolderSnippets: boolean - compactMode: boolean - isContextState: boolean - isMarkdownPreview: boolean - isMindmapPreview: boolean - isScreenshotPreview: boolean - isCodePreview: boolean -} - -export type PreviewType = 'markdown' | 'mindmap' | 'screenshot' | 'code' diff --git a/src/shared/types/renderer/store/tag.d.ts b/src/shared/types/renderer/store/tag.d.ts deleted file mode 100644 index c485fe3d..00000000 --- a/src/shared/types/renderer/store/tag.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Tag } from '@shared/types/main/db' - -export interface State { - tags: Tag[] - selectedId?: string -} diff --git a/src/shared/types/renderer/vendor.shim.d.ts b/src/shared/types/renderer/vendor.shim.d.ts deleted file mode 100644 index 5e9f266d..00000000 --- a/src/shared/types/renderer/vendor.shim.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module '@sipec/vue3-tags-input' diff --git a/tsconfig.electron.json b/tsconfig.electron.json deleted file mode 100644 index f1441c94..00000000 --- a/tsconfig.electron.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "target": "ESNext", - "useDefineForClassFields": true, - "module": "CommonJS", - "moduleResolution": "Node", - "strict": true, - "jsx": "preserve", - "sourceMap": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["ESNext", "DOM"], - "outDir": "./build", - "paths": { - "@/*": ["./src/*"], - "@shared/*": ["./src/shared/*"], - "@renderer/*": ["./src/renderer/*"], - "@main/*": ["./src/main/*"] - } - }, - "include": [ - "./config/*.ts", - "./scripts/*.ts", - "./src/main/**/*.ts", - "./src/main/**/*.d.ts", - "./src/main/services/i18n/locales/**/*.json", - "./src/shared/**/*.ts", - "./src/shared/**/*.d.ts" - ], - "exclude": [ - "./node_modules", - ] -} diff --git a/tsconfig.json b/tsconfig.json index b7e4c43e..a977d817 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,36 +1,26 @@ { "compilerOptions": { - "baseUrl": ".", "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "moduleResolution": "Node", - "strict": true, "jsx": "preserve", - "sourceMap": true, - "resolveJsonModule": true, - "esModuleInterop": true, "lib": ["ESNext", "DOM"], - "outDir": "./build", + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", "paths": { - "@/*": ["./src/renderer/*"], - "@renderer/*": ["./src/renderer/*"], - "@main/*": ["./src/main/*"], - "@shared/*": ["./src/shared/*"] + "~/*": ["src/*"], + "@/*": ["src/renderer/*"] }, - "types": ["unplugin-icons/types/vue"] + "resolveJsonModule": true, + "types": ["vite/client", "node"], + "strict": true, + "sourceMap": true, + "esModuleInterop": true }, "include": [ - "./src/renderer/**/*.ts", - "./src/renderer/**/*.d.ts", - "./src/renderer/**/*.tsx", - "./src/renderer/**/*.vue", - "./src/main/**/*.ts", - "./src/main/**/*.d.ts", - "./src/shared/**/*.ts", - "./src/shared/**/*.d.ts" - ], - "exclude": [ - "./node_modules" + "src/renderer/**/*.ts", + "src/renderer/**/*.d.ts", + "src/renderer/**/*.tsx", + "src/renderer/**/*.vue", + "src/main/types" ] } diff --git a/tsconfig.main.json b/tsconfig.main.json new file mode 100644 index 00000000..19a75131 --- /dev/null +++ b/tsconfig.main.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2023", + "rootDir": "src/main", + "module": "CommonJS", + "strict": true, + "inlineSources": true, + "outDir": "build/main", + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src/main/**/*"] +} diff --git a/vite.config.mjs b/vite.config.mjs new file mode 100644 index 00000000..546db976 --- /dev/null +++ b/vite.config.mjs @@ -0,0 +1,42 @@ +import path from 'node:path' +import tailwindcss from '@tailwindcss/vite' +import vue from '@vitejs/plugin-vue' +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { defineConfig } from 'vite' + +const pathSrc = path.resolve(__dirname, 'src/renderer') +const rootSrc = path.resolve(__dirname, 'src') + +export default defineConfig({ + root: pathSrc, + base: './', + plugins: [ + vue(), + tailwindcss(), + AutoImport({ + imports: ['vue'], + }), + Components({ + dirs: [`${pathSrc}/components`], + extensions: ['vue'], + dts: true, + directoryAsNamespace: true, + collapseSamePrefixes: true, + }), + ], + build: { + outDir: path.resolve(__dirname, 'build/renderer'), + emptyOutDir: true, + }, + resolve: { + alias: { + '@': pathSrc, + '~': rootSrc, + }, + }, + define: { + 'process.env': {}, + 'process': {}, + }, +})