Merge branch 'develop' into ai-llm-integration

This commit is contained in:
perf3ct 2025-03-20 19:52:01 +00:00
commit 34940b5258
No known key found for this signature in database
GPG Key ID: 569C4EEC436F5232
32 changed files with 6815 additions and 3881 deletions

View File

@ -68,7 +68,6 @@ try {
"node_modules/katex/dist/contrib/mhchem.min.js",
"node_modules/katex/dist/contrib/auto-render.min.js",
"node_modules/@highlightjs/cdn-assets/highlight.min.js",
"node_modules/@mind-elixir/node-menu/dist/node-menu.umd.cjs"
]);
const nodeModulesFolder = new Set([
@ -94,7 +93,6 @@ try {
"node_modules/codemirror/addon/",
"node_modules/codemirror/mode/",
"node_modules/codemirror/keymap/",
"node_modules/mind-elixir/dist/",
"node_modules/@highlightjs/cdn-assets/languages",
"node_modules/@highlightjs/cdn-assets/styles",
"node_modules/leaflet/dist"

213
package-lock.json generated
View File

@ -14,12 +14,11 @@
"@excalidraw/excalidraw": "0.18.0",
"@highlightjs/cdn-assets": "11.11.1",
"@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.4",
"@triliumnext/express-partial-content": "1.0.1",
"archiver": "7.0.1",
"async-mutex": "0.5.0",
"autocomplete.js": "0.38.1",
"axios": "1.8.3",
"axios": "1.8.4",
"better-sqlite3": "11.9.1",
"boxicons": "2.1.4",
"chardet": "2.1.0",
@ -71,7 +70,6 @@
"marked": "15.0.7",
"mermaid": "11.5.0",
"mime-types": "2.1.35",
"mind-elixir": "4.4.2",
"multer": "1.4.5-lts.1",
"normalize-strings": "1.1.1",
"normalize.css": "8.0.1",
@ -81,7 +79,7 @@
"react-dom": "18.3.1",
"safe-compare": "1.1.4",
"sanitize-filename": "1.6.3",
"sanitize-html": "2.14.0",
"sanitize-html": "2.15.0",
"sax": "1.4.1",
"serve-favicon": "2.5.0",
"session-file-store": "1.5.0",
@ -118,6 +116,7 @@
"@fullcalendar/list": "6.1.15",
"@fullcalendar/multimonth": "6.1.15",
"@fullcalendar/timegrid": "6.1.15",
"@mind-elixir/node-menu": "1.0.5",
"@playwright/test": "1.51.1",
"@popperjs/core": "2.11.8",
"@types/archiver": "6.0.3",
@ -131,7 +130,7 @@
"@types/ejs": "3.1.5",
"@types/electron-squirrel-startup": "1.0.2",
"@types/escape-html": "1.0.4",
"@types/express": "5.0.0",
"@types/express": "5.0.1",
"@types/express-session": "1.18.1",
"@types/fs-extra": "11.0.4",
"@types/html": "1.0.4",
@ -144,7 +143,7 @@
"@types/mime-types": "2.1.4",
"@types/multer": "1.4.12",
"@types/node": "22.13.10",
"@types/react": "18.3.18",
"@types/react": "18.3.19",
"@types/react-dom": "18.3.5",
"@types/safe-compare": "1.1.2",
"@types/sanitize-html": "2.13.0",
@ -165,7 +164,7 @@
"bootstrap": "5.3.3",
"cross-env": "7.0.3",
"css-loader": "7.1.2",
"electron": "34.3.3",
"electron": "35.0.1",
"eslint": "9.22.0",
"esm": "3.2.25",
"globals": "16.0.0",
@ -174,7 +173,9 @@
"jsdoc": "4.0.4",
"knockout": "3.5.1",
"lorem-ipsum": "2.0.8",
"mind-elixir": "4.4.3",
"mini-css-extract-plugin": "2.9.2",
"node-abi": "4.2.0",
"nodemon": "3.1.9",
"postcss-loader": "8.1.1",
"prettier": "3.5.3",
@ -191,7 +192,7 @@
"tsx": "4.19.3",
"typedoc": "0.28.0",
"typescript": "5.8.2",
"typescript-eslint": "8.26.1",
"typescript-eslint": "8.27.0",
"vitest": "3.0.9",
"webpack": "5.98.0",
"webpack-cli": "6.0.1",
@ -1653,6 +1654,19 @@
"graceful-fs": "^4.1.6"
}
},
"node_modules/@electron/rebuild/node_modules/node-abi": {
"version": "3.74.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz",
"integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@electron/remote": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.2.tgz",
@ -3971,11 +3985,12 @@
}
},
"node_modules/@mind-elixir/node-menu": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@mind-elixir/node-menu/-/node-menu-1.0.4.tgz",
"integrity": "sha512-xEwBakXEyVCfb8NFYmuvoXSZugxWZUa/s/bxLI8lxTKzTqhHOX4cJdp3B77ojUfnW4KvYJChlo7zkepijsmn0Q==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@mind-elixir/node-menu/-/node-menu-1.0.5.tgz",
"integrity": "sha512-tlw85nwtfEoF47mLecRSMkcNW6D9ScDyg1YI+InZKtSgsvvnEm72kOyksp8B1haLk2ctVMFPJ7ay84MtWgrBGQ==",
"dev": true,
"peerDependencies": {
"mind-elixir": ">2.0.1"
"mind-elixir": ">4.4.1"
}
},
"node_modules/@mixmark-io/domino": {
@ -5649,15 +5664,14 @@
"license": "MIT"
},
"node_modules/@types/express": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz",
"integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz",
"integrity": "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^5.0.0",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
@ -5941,9 +5955,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
"version": "18.3.18",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
"integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
"version": "18.3.19",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.19.tgz",
"integrity": "sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@ -6196,17 +6210,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz",
"integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz",
"integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.26.1",
"@typescript-eslint/type-utils": "8.26.1",
"@typescript-eslint/utils": "8.26.1",
"@typescript-eslint/visitor-keys": "8.26.1",
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/type-utils": "8.27.0",
"@typescript-eslint/utils": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@ -6226,16 +6240,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz",
"integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz",
"integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/scope-manager": "8.26.1",
"@typescript-eslint/types": "8.26.1",
"@typescript-eslint/typescript-estree": "8.26.1",
"@typescript-eslint/visitor-keys": "8.26.1",
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/typescript-estree": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"debug": "^4.3.4"
},
"engines": {
@ -6251,14 +6265,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz",
"integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz",
"integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.1",
"@typescript-eslint/visitor-keys": "8.26.1"
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -6269,14 +6283,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz",
"integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz",
"integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "8.26.1",
"@typescript-eslint/utils": "8.26.1",
"@typescript-eslint/typescript-estree": "8.27.0",
"@typescript-eslint/utils": "8.27.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.0.1"
},
@ -6293,9 +6307,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz",
"integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz",
"integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==",
"dev": true,
"license": "MIT",
"engines": {
@ -6307,14 +6321,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz",
"integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz",
"integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.1",
"@typescript-eslint/visitor-keys": "8.26.1",
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@ -6360,16 +6374,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz",
"integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz",
"integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.26.1",
"@typescript-eslint/types": "8.26.1",
"@typescript-eslint/typescript-estree": "8.26.1"
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/typescript-estree": "8.27.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -6384,13 +6398,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz",
"integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz",
"integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.1",
"@typescript-eslint/types": "8.27.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@ -7357,9 +7371,9 @@
}
},
"node_modules/axios": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
"integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
"integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@ -10137,14 +10151,14 @@
}
},
"node_modules/electron": {
"version": "34.3.3",
"resolved": "https://registry.npmjs.org/electron/-/electron-34.3.3.tgz",
"integrity": "sha512-7m1FiO1mwc1K/UqqnnkG7Ik/kAngDzmLfHwcl+xaWgCQ+Sts9rlEqzOh6g1GHhDqebrbs4bO/aU+NDi32fCciQ==",
"version": "35.0.1",
"resolved": "https://registry.npmjs.org/electron/-/electron-35.0.1.tgz",
"integrity": "sha512-iQonj6lnPhqfqha2KXx6LzV1dnu6UPTCWK+b7f9Zvg828umGemi22DKbcJ3/q+Opn7iUVTWyqp9z1JQqkIi6OA==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@electron/get": "^2.0.0",
"@types/node": "^20.9.0",
"@types/node": "^22.7.7",
"extract-zip": "^2.0.1"
},
"bin": {
@ -10858,15 +10872,6 @@
"global-agent": "^3.0.0"
}
},
"node_modules/electron/node_modules/@types/node": {
"version": "20.17.24",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.24.tgz",
"integrity": "sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
}
},
"node_modules/electron/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
@ -10890,12 +10895,6 @@
"semver": "bin/semver.js"
}
},
"node_modules/electron/node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"license": "MIT"
},
"node_modules/electron/node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@ -15672,9 +15671,10 @@
}
},
"node_modules/mind-elixir": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/mind-elixir/-/mind-elixir-4.4.2.tgz",
"integrity": "sha512-yHsUdKYvhB/SnBY9Fb/2cPTsysKDT+nu5vQVYPFEWWniZaGszpM9gPlCB28IEcOEGpaSDGOWOTt89Qc/wFYZSw==",
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/mind-elixir/-/mind-elixir-4.4.3.tgz",
"integrity": "sha512-i2GBFtZ4Z6pv5z5/QcfQFrbVTNa0OWayfx7OvQpzNn7X62l6xJn0y3dKxQ/KuT50HxgZiyRptY5J0xBc2qeuZw==",
"dev": true,
"license": "MIT"
},
"node_modules/mini-css-extract-plugin": {
@ -15977,15 +15977,16 @@
"license": "MIT"
},
"node_modules/node-abi": {
"version": "3.71.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz",
"integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.2.0.tgz",
"integrity": "sha512-admQxilhDcmFJbUl4LQzGu+QyEijW9rctKRH2P7LNavAvln1bdK9OcujM3yi2KysKI41dxTrDtp6QfGEZeCbkg==",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
"semver": "^7.6.3"
},
"engines": {
"node": ">=10"
"node": ">=22.12.0"
}
},
"node_modules/node-addon-api": {
@ -17376,6 +17377,18 @@
"node": ">=10"
}
},
"node_modules/prebuild-install/node_modules/node-abi": {
"version": "3.74.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz",
"integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
},
"engines": {
"node": ">=10"
}
},
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@ -18632,9 +18645,9 @@
}
},
"node_modules/sanitize-html": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.14.0.tgz",
"integrity": "sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==",
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.15.0.tgz",
"integrity": "sha512-wIjst57vJGpLyBP8ioUbg6ThwJie5SuSIjHxJg53v5Fg+kUK+AXlb7bK3RNXpp315MvwM+0OBGCV6h5pPHsVhA==",
"license": "MIT",
"dependencies": {
"deepmerge": "^4.2.2",
@ -20668,15 +20681,15 @@
}
},
"node_modules/typescript-eslint": {
"version": "8.26.1",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz",
"integrity": "sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==",
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.27.0.tgz",
"integrity": "sha512-ZZ/8+Y0rRUMuW1gJaPtLWe4ryHbsPLzzibk5Sq+IFa2aOH1Vo0gPr1fbA6pOnzBke7zC2Da4w8AyCgxKXo3lqA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "8.26.1",
"@typescript-eslint/parser": "8.26.1",
"@typescript-eslint/utils": "8.26.1"
"@typescript-eslint/eslint-plugin": "8.27.0",
"@typescript-eslint/parser": "8.27.0",
"@typescript-eslint/utils": "8.27.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"

View File

@ -74,12 +74,11 @@
"@excalidraw/excalidraw": "0.18.0",
"@highlightjs/cdn-assets": "11.11.1",
"@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.4",
"@triliumnext/express-partial-content": "1.0.1",
"archiver": "7.0.1",
"async-mutex": "0.5.0",
"autocomplete.js": "0.38.1",
"axios": "1.8.3",
"axios": "1.8.4",
"better-sqlite3": "11.9.1",
"boxicons": "2.1.4",
"chardet": "2.1.0",
@ -131,7 +130,6 @@
"marked": "15.0.7",
"mermaid": "11.5.0",
"mime-types": "2.1.35",
"mind-elixir": "4.4.2",
"multer": "1.4.5-lts.1",
"normalize-strings": "1.1.1",
"normalize.css": "8.0.1",
@ -141,7 +139,7 @@
"react-dom": "18.3.1",
"safe-compare": "1.1.4",
"sanitize-filename": "1.6.3",
"sanitize-html": "2.14.0",
"sanitize-html": "2.15.0",
"sax": "1.4.1",
"serve-favicon": "2.5.0",
"session-file-store": "1.5.0",
@ -175,6 +173,7 @@
"@fullcalendar/list": "6.1.15",
"@fullcalendar/multimonth": "6.1.15",
"@fullcalendar/timegrid": "6.1.15",
"@mind-elixir/node-menu": "1.0.5",
"@playwright/test": "1.51.1",
"@popperjs/core": "2.11.8",
"@types/archiver": "6.0.3",
@ -188,7 +187,7 @@
"@types/ejs": "3.1.5",
"@types/electron-squirrel-startup": "1.0.2",
"@types/escape-html": "1.0.4",
"@types/express": "5.0.0",
"@types/express": "5.0.1",
"@types/express-session": "1.18.1",
"@types/fs-extra": "11.0.4",
"@types/html": "1.0.4",
@ -201,7 +200,7 @@
"@types/mime-types": "2.1.4",
"@types/multer": "1.4.12",
"@types/node": "22.13.10",
"@types/react": "18.3.18",
"@types/react": "18.3.19",
"@types/react-dom": "18.3.5",
"@types/safe-compare": "1.1.2",
"@types/sanitize-html": "2.13.0",
@ -222,7 +221,7 @@
"bootstrap": "5.3.3",
"cross-env": "7.0.3",
"css-loader": "7.1.2",
"electron": "34.3.3",
"electron": "35.0.1",
"eslint": "9.22.0",
"esm": "3.2.25",
"globals": "16.0.0",
@ -231,7 +230,9 @@
"jsdoc": "4.0.4",
"knockout": "3.5.1",
"lorem-ipsum": "2.0.8",
"mind-elixir": "4.4.3",
"mini-css-extract-plugin": "2.9.2",
"node-abi": "4.2.0",
"nodemon": "3.1.9",
"postcss-loader": "8.1.1",
"prettier": "3.5.3",
@ -248,7 +249,7 @@
"tsx": "4.19.3",
"typedoc": "0.28.0",
"typescript": "5.8.2",
"typescript-eslint": "8.26.1",
"typescript-eslint": "8.27.0",
"vitest": "3.0.9",
"webpack": "5.98.0",
"webpack-cli": "6.0.1",

View File

@ -1,4 +1,4 @@
import config from './rollup.config';
import config from './rollup.config.js';
export default config({
output: {

View File

@ -1,4 +1,4 @@
import config from './rollup.config';
import config from './rollup.config.js';
export default config({
output: {

View File

@ -1,4 +1,4 @@
import config from './rollup.config';
import config from './rollup.config.js';
export default config({
output: {

View File

@ -1,4 +1,4 @@
import config from './rollup.config';
import config from './rollup.config.js';
export default config({
output: {

View File

@ -1,8 +1,9 @@
import config from './rollup.config';
import config from './rollup.config.js';
export default config({
output: {
format: 'iife',
file: 'dist/turndown-plugin-gfm.js',
name: 'turndownPluginGfm'
},
});

View File

@ -1,6 +1,5 @@
export default function(config) {
return {
name: 'turndownPluginGfm',
input: 'src/gfm.js',
output: config.output,
};

File diff suppressed because it is too large Load Diff

View File

@ -8,9 +8,9 @@
"author": "Dom Christie",
"main": "lib/turndown-plugin-gfm.cjs.js",
"devDependencies": {
"browserify": "14.5.0",
"rollup": "0.50.1",
"standard": "17.1.0",
"browserify": "^17.0.1",
"rollup": "^4.36.0",
"standard": "^17.1.2",
"turndown": "7.2.0",
"turndown-attendant": "0.0.3"
},
@ -32,6 +32,7 @@
"type": "git",
"url": "https://github.com/laurent22/joplin-turndown-plugin-gfm.git"
},
"type": "module",
"scripts": {
"build-all": "npm run build-cjs && npm run build-es && npm run build-iife",
"build": "rollup -c config/rollup.config.cjs.js",

View File

@ -10,12 +10,17 @@ const TPL = `<div class="note-detail-doc note-detail-printable">
}
.note-detail-doc-content pre {
background-color: var(--accented-background-color);
border: 1px solid var(--main-border-color);
border: 0;
box-shadow: var(--code-block-box-shadow);
padding: 15px;
border-radius: 5px;
}
.note-detail-doc-content pre:not(.hljs) {
background-color: var(--accented-background-color);
border: 1px solid var(--main-border-color);
}
.note-detail-doc.contextual-help {
padding-bottom: 0;
}

View File

@ -5,6 +5,9 @@ import nodeMenu from "@mind-elixir/node-menu";
import type FNote from "../../entities/fnote.js";
import type { EventData } from "../../components/app_context.js";
// allow node-menu plugin css to be bundled by webpack
import "@mind-elixir/node-menu/dist/style.css";
const NEW_TOPIC_NAME = "";
const TPL = `

View File

@ -65,10 +65,10 @@ const TPL = `
<div class="col-6">
<label for="main-font-size">${t("fonts.size")}</label>
<div class="input-group main-font-size-input-group">
<label class="input-group tn-number-unit-pair main-font-size-input-group">
<input id="main-font-size" type="number" class="main-font-size form-control options-number-input" min="50" max="200" step="10"/>
<span class="input-group-text">%</span>
</div>
</label>
</div>
</div>
@ -83,10 +83,10 @@ const TPL = `
<div class="col-6">
<label for="tree-font-size">${t("fonts.size")}</label>
<div class="input-group tree-font-size-input-group">
<label class="input-group tn-number-unit-pair tree-font-size-input-group">
<input id="tree-font-size" type="number" class="tree-font-size form-control options-number-input" min="50" max="200" step="10"/>
<span class="input-group-text">%</span>
</div>
</label>
</div>
</div>
@ -101,10 +101,10 @@ const TPL = `
<div class="col-6">
<label for="detail-font-size">${t("fonts.size")}</label>
<div class="input-group detail-font-size-input-group">
<label class="input-group tn-number-unit-pair detail-font-size-input-group">
<input id="detail-font-size" type="number" class="detail-font-size form-control options-number-input" min="50" max="200" step="10"/>
<span class="input-group-text">%</span>
</div>
</label>
</div>
</div>
@ -119,10 +119,10 @@ const TPL = `
<div class="col-6">
<label for="monospace-font-size">${t("fonts.size")}</label>
<div class="input-group monospace-font-size-input-group">
<label class="input-group tn-number-unit-pair monospace-font-size-input-group">
<input id="monospace-font-size" type="number" class="monospace-font-size form-control options-number-input" min="50" max="200" step="10"/>
<span class="input-group-text">%</span>
</div>
</label>
</div>
</div>

View File

@ -14,7 +14,10 @@ const TPL = `
<div class="form-group row">
<div class="col-md-6">
<label for="max-content-width">${t("max_content_width.max_width_label")}</label>
<input id="max-content-width" type="number" min="${MIN_VALUE}" step="10" class="max-content-width form-control options-number-input">
<label class="input-group tn-number-unit-pair">
<input id="max-content-width" type="number" min="${MIN_VALUE}" step="10" class="max-content-width form-control options-number-input">
<span class="input-group-text">${t("max_content_width.max_width_unit")}</span>
</label>
</div>
</div>

View File

@ -10,7 +10,10 @@ const TPL = `
<div class="form-group">
<label for="auto-readonly-size-code">${t("code_auto_read_only_size.label")}</label>
<input id="auto-readonly-size-code" class="auto-readonly-size-code form-control options-number-input" type="number" min="0">
<label class="input-group tn-number-unit-pair">
<input id="auto-readonly-size-code" class="auto-readonly-size-code form-control options-number-input" type="number" min="0">
<span class="input-group-text">${t("code_auto_read_only_size.unit")}</span>
</label>
</div>
</div>`;

View File

@ -30,12 +30,18 @@ const TPL = `
<div class="image-compression-enabled-wraper">
<div class="form-group">
<label>${t("images.max_image_dimensions")}</label>
<input class="image-max-width-height form-control options-number-input" type="number" min="1">
<label class="input-group tn-number-unit-pair">
<input class="image-max-width-height form-control options-number-input" type="number" min="1">
<span class="input-group-text">${t("images.max_image_dimensions_unit")}</span>
</label>
</div>
<div class="form-group">
<label>${t("images.jpeg_quality_description")}</label>
<input class="image-jpeg-quality form-control options-number-input" min="10" max="100" type="number">
<label class="input-group tn-number-unit-pair">
<input class="image-jpeg-quality form-control options-number-input" min="10" max="100" type="number">
<span class="input-group-text">%</span>
</label>
</div>
</div>
</div>

View File

@ -12,7 +12,10 @@ const TPL = `
<div class="form-group">
<label>${t("revisions_snapshot_limit.snapshot_number_limit_label")}</label>
<input class="revision-snapshot-number-limit form-control options-number-input" type="number" min="-1">
<label class="input-group tn-number-unit-pair">
<input class="revision-snapshot-number-limit form-control options-number-input" type="number" min="-1">
<span class="input-group-text">${t("revisions_snapshot_limit.snapshot_number_limit_unit")}</span>
</label>
</div>
<button class="erase-excess-revision-snapshots-now-button btn btn-sm">

View File

@ -14,11 +14,6 @@ const TPL = `
<input id="sync-server-host" class="sync-server-host form-control" placeholder="https://<host>:<port>">
</div>
<div class="form-group">
<label for="sync-server-timeout" >${t("sync_2.timeout")}</label>
<input id="sync-server-timeout" class="sync-server-timeout form-control" min="1" max="10000000" type="number" style="text-align: left;">
</div>
<div class="form-group">
<label for="sync-proxy form-control" >${t("sync_2.proxy_label")}</label>
<input id="sync-proxy form-control" class="sync-proxy form-control" placeholder="https://<host>:<port>">
@ -27,6 +22,14 @@ const TPL = `
<p class="form-text">${t("sync_2.special_value_description")}</p>
</div>
<div class="form-group">
<label for="sync-server-timeout">${t("sync_2.timeout")}</label>
<label class="input-group tn-number-unit-pair">
<input id="sync-server-timeout" class="sync-server-timeout form-control" min="1" max="10000000" type="number" style="text-align: left;">
<span class="input-group-text">${t("sync_2.timeout_unit")}</span>
</label>
</div>
<div style="display: flex; justify-content: space-between;">
<button class="btn btn-primary">${t("sync_2.save")}</button>

View File

@ -9,7 +9,10 @@ const TPL = `
${t("table_of_contents.description")}
<div class="form-group">
<input type="number" class="min-toc-headings form-control options-number-input options-number-input" min="0" max="9999999999999999" step="1" />
<label class="input-group tn-number-unit-pair">
<input type="number" class="min-toc-headings form-control options-number-input options-number-input" min="0" max="9999999999999999" step="1" />
<span class="input-group-text">${t("table_of_contents.unit")}</span>
</label>
</div>
<p class="form-text">${t("table_of_contents.disable_info")}</p>

View File

@ -10,7 +10,10 @@ const TPL = `
<div class="form-group">
<label for="auto-readonly-size-text">${t("text_auto_read_only_size.label")}</label>
<input id="auto-readonly-size-text" class="auto-readonly-size-text form-control options-number-input" type="number" min="0">
<label class="input-group tn-number-unit-pair">
<input id="auto-readonly-size-text" class="auto-readonly-size-text form-control options-number-input" type="number" min="0">
<span class="input-group-text">${t("text_auto_read_only_size.unit")}</span>
</label>
</div>
</div>`;

View File

@ -1,8 +1,8 @@
@import url(./forms.css);
@import url(./shell.css);
@import url(./dialogs.css);
@import url(./pages.css);
@import url(./ribbon.css);
@import url(./settings.css);
@import url(./notes/empty.css);
@import url(./notes/text.css);
@font-face {
@ -10,6 +10,10 @@
src: url(../../fonts/Inter/Inter-VariableFont_opsz\,wght.ttf);
}
/*
* GLOBAL VARIABLES
*/
:root {
--main-font-family: "Inter", sans-serif;
@ -73,45 +77,196 @@
--tab-note-icons: true;
}
/* Tool dialogs - small dialogs without a backdrop */
div.tn-tool-dialog {
border-radius: 10px;
background: var(--tool-dialog-background-color) !important;
user-select: none;
box-shadow: 10px 10px 93px -25px var(--tool-dialog-shadow-color);
}
/*
* Note search suggestions
* MENUS
*
* Note: apply the "tn-dropdown-list" class for scrollable dropdown menus. Submenus are not
* supported when this class is used.
*/
/* List body */
.jump-to-note-dialog .jump-to-note-results .aa-suggestions,
.note-detail-empty .aa-suggestions {
padding: 0;
.dropdown-menu:not(.static) {
border-radius: var(--dropdown-border-radius);
padding: var(--menu-padding-size) !important;
font-size: 0.9rem !important;
}
/* List item */
.jump-to-note-dialog .aa-suggestions div,
.note-detail-empty .aa-suggestions div {
.dropdown-menu::-webkit-scrollbar-track {
background: var(--menu-background-color);
}
body.mobile .dropdown-menu {
backdrop-filter: var(--dropdown-backdrop-filter);
border-radius: var(--dropdown-border-radius);
position: relative;
}
body.mobile .dropdown-menu .dropdown-menu {
backdrop-filter: unset !important;
border-radius: unset !important;
}
body.desktop .dropdown-menu::before {
content: "";
backdrop-filter: var(--dropdown-backdrop-filter);
border-radius: var(--dropdown-border-radius);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
}
body.desktop .dropdown-menu.tn-dropdown-list {
backdrop-filter: var(--dropdown-backdrop-filter);
}
body.desktop .dropdown-menu.tn-dropdown-list::before {
display: none;
}
body.desktop .dropdown-submenu .dropdown-menu::before {
content: unset;
}
body.mobile .dropdown-submenu .dropdown-menu {
background: transparent !important;
}
body.desktop .dropdown-submenu .dropdown-menu {
backdrop-filter: var(--dropdown-backdrop-filter);
background: transparent;
}
.dropdown-item,
body.mobile .dropdown-submenu .dropdown-toggle {
padding: 2px 2px 2px 8px !important;
padding-inline-end: 16px !important;
/* Note: the right padding should also accommodate the submenu arrow. */
border-radius: 6px;
padding: 6px 12px;
color: var(--menu-text-color);
cursor: default;
cursor: default !important;
}
/* Selected list item */
.jump-to-note-dialog .aa-suggestions div.aa-cursor,
.note-detail-empty .aa-suggestions div.aa-cursor {
background: var(--hover-item-background-color);
color: var(--hover-item-text-color);
body.mobile .dropdown-submenu {
padding: 0 !important;
}
body.mobile .dropdown-item:not(:last-of-type) {
margin-bottom: 0.5em;
}
body.mobile .dropdown-submenu:hover {
background: transparent !important;
}
html body .dropdown-item.disabled,
html body .dropdown-item[disabled] {
color: var(--menu-text-color) !important;
opacity: var(--menu-item-disabled-opacity);
}
/* Menu item icon */
.dropdown-item .bx {
transform: translateY(var(--menu-item-icon-vert-offset));
color: var(--menu-item-icon-color) !important;
font-size: 1.1em;
}
/* Menu item keyboard shortcut */
.dropdown-item kbd {
margin-left: 16px;
font-family: unset !important;
font-size: unset !important;
color: var(--menu-item-keyboard-shortcut-color) !important;
padding-top: 0;
}
.dropdown-divider {
position: relative;
border-color: transparent !important;
overflow: visible;
}
.dropdown-divider::after {
position: absolute;
content: "";
top: -1px;
left: calc(0px - var(--menu-padding-size));
right: calc(0px - var(--menu-padding-size));
border-top: 1px solid var(--menu-item-delimiter-color);
}
/* Menu item arrow */
.dropdown-menu .dropdown-toggle::after {
content: "\ed3b" !important;
position: absolute;
display: flex !important;
align-items: center;
justify-content: center;
top: 0;
right: 0;
margin: unset !important;
border: unset !important;
padding: 0 4px;
font-family: boxicons;
font-size: 1.2em;
color: var(--menu-item-arrow-color) !important;
}
/* Menu item group heading */
/* The heading body */
.dropdown-menu h6 {
position: relative;
background: transparent;
padding: 1em 8px 14px 8px;
text-transform: uppercase;
font-size: 0.8em;
letter-spacing: 1pt;
color: var(--menu-item-group-header-color) !important;
}
/* The delimiter line */
.dropdown-menu h6::before {
content: "";
position: absolute;
bottom: 8px;
left: calc(0px - var(--menu-padding-size));
right: calc(0px - var(--menu-padding-size));
border-top: 1px solid var(--menu-item-delimiter-color);
}
/* Static menus (used as a list, such as on the note revisions dialog) */
body.desktop .dropdown-menu.static {
box-shadow: unset;
border-radius: 4px;
border: unset;
background-color: var(--card-background-color) !important;
padding: var(--menu-padding-size) !important;
user-select: none;
}
body.desktop .dropdown-menu.static .dropdown-item.active {
--active-item-text-color: var(--menu-text-color);
}
body.desktop .dropdown-menu .dropdown-toggle::after {
height: 100%;
}
body.mobile .dropdown-menu .dropdown-toggle::after {
transform: rotate(90deg);
}
body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
transform: rotate(270deg);
}
/*
* Toasts
* TOASTS
*/
#toast-container {
#toast-container {
/* The vertical gap between toasts */
gap: 10px;
}
@ -147,4 +302,223 @@ div.tn-tool-dialog {
#toast-container .toast .toast-body {
flex-grow: 1;
}
/*
* NOTE TOOLTIPS
*/
.tooltip .tooltip-inner:has(.note-tooltip-content) {
border-radius: 8px;
}
.note-tooltip-content {
padding: 8px;
min-height: 56px;
}
.note-tooltip-title .note-title-with-path {
display: flex;
flex-direction: column-reverse;
}
.note-tooltip-title a {
color: inherit !important;
}
.note-tooltip-title.note-no-content {
margin: 0;
}
.note-tooltip-title:not(.note-no-content) .note-title-with-path {
padding-bottom: 6px;
border-bottom: 2px solid currentColor;
}
.note-tooltip-content .note-path {
display: block;
color: var(--muted-text-color);
font-size: 0.75em;
}
.note-tooltip-content .note-tooltip-attributes {
margin-top: -4px;
font-size: 0.75em;
}
.note-tooltip-content .rendered-content {
padding-top: 12px;
}
/* NOTE PATHS */
.note-path .path-bracket {
/* Hide the leading and trailing bracket from the path */
display: none;
}
.note-path .path-delimiter {
/* Hide the path delimiters (slashes) */
display: none;
}
.note-path .path-delimiter + span::before {
/* Replace the path delimiters with arrows */
display: inline-block;
content: "\ed3b";
padding: 0 0.25em;
font-family: boxicons;
opacity: 0.75;
transform: translateY(4%);
}
/*
* NOTE LIST
*/
.note-list .note-book-card {
--note-list-horizontal-padding: 22px;
--note-list-vertical-padding: 15px;
background-color: var(--card-background-color);
border: 1px solid var(--card-border-color) !important;
box-shadow: 2px 3px 4px var(--card-shadow-color);
border-radius: 12px;
user-select: none;
padding: 0;
margin: 5px 10px 5px 0;
}
.note-list.list-view .note-book-card {
box-shadow: 0 0 3px var(--card-shadow-color);
}
.note-list.list-view .note-book-card .note-book-header .note-icon {
vertical-align: middle;
}
.note-list-wrapper .note-book-card:active {
background-color: var(--card-background-press-color);
}
.note-list-wrapper .note-book-card a {
color: inherit !important;
}
.note-list-wrapper .note-book-card .note-book-header {
font-size: 1em;
font-weight: bold;
padding: 0.5em 1rem;
border-bottom-color: var(--card-border-color);
}
.note-list-wrapper .note-book-card .note-book-header .note-icon {
font-size: 17px;
vertical-align: text-bottom;
}
.note-list-wrapper .note-book-card .note-book-header .note-book-title {
font-size: 1em;
color: var(--active-item-text-color);
vertical-align: middle;
}
.note-list-wrapper .note-book-card .note-book-header .rendered-note-attributes {
font-size: 0.7em;
font-weight: normal;
margin-bottom: 0;
}
.note-list-wrapper .note-book-card .note-book-header:last-child {
border-bottom: 0;
}
.note-list-wrapper .note-book-card .note-book-content {
padding: 0 !important;
font-size: 0.8rem;
}
.note-list-wrapper .note-book-card .note-book-content .rendered-content {
padding: 1rem;
}
.note-list-wrapper .note-book-card .note-book-content .rendered-content.text-with-ellipsis {
padding: 1rem !important;
}
.note-list-wrapper .note-book-card .note-book-content h1,
.note-list-wrapper .note-book-card .note-book-content h2,
.note-list-wrapper .note-book-card .note-book-content h3,
.note-list-wrapper .note-book-card .note-book-content h4,
.note-list-wrapper .note-book-card .note-book-content h5,
.note-list-wrapper .note-book-card .note-book-content h6 {
font-size: 1rem;
color: var(--active-item-text-color);
}
.note-list-wrapper .note-book-card .note-book-content p:last-child {
margin-bottom: 0;
}
.note-list-wrapper .note-book-card .note-book-content.type-canvas .rendered-content,
.note-list-wrapper .note-book-card .note-book-content.type-mindMap .rendered-content,
.note-list-wrapper .note-book-card .note-book-content.type-code .rendered-content,
.note-list-wrapper .note-book-card .note-book-content.type-video .rendered-content {
padding: 0;
}
.note-list-wrapper .note-book-card .note-book-content.type-code pre {
height: 100%;
padding: 1em;
}
.note-list-wrapper .note-book-card .bx {
color: var(--left-pane-icon-color) !important;
}
.note-list.grid-view .note-book-card:hover {
background: var(--card-background-color) !important;
filter: contrast(105%);
}
.note-list.grid-view .note-book-card img {
object-fit: cover !important;
width: 100%;
}
.note-list.grid-view .ck-content {
line-height: 1.3;
}
.note-list.grid-view .ck-content p {
margin-bottom: 0.5em;
}
.note-list.grid-view .ck-content figure.image {
width: 25%;
}
/*
* NOTE SEARCH SUGGESTIONS
*/
/* List body */
.jump-to-note-dialog .jump-to-note-results .aa-suggestions,
.note-detail-empty .aa-suggestions {
padding: 0;
}
/* List item */
.jump-to-note-dialog .aa-suggestions div,
.note-detail-empty .aa-suggestions div {
border-radius: 6px;
padding: 6px 12px;
color: var(--menu-text-color);
cursor: default;
}
/* Selected list item */
.jump-to-note-dialog .aa-suggestions div.aa-cursor,
.note-detail-empty .aa-suggestions div.aa-cursor {
background: var(--hover-item-background-color);
color: var(--hover-item-text-color);
}

View File

@ -0,0 +1,398 @@
/*
* MODALS
*/
/* Modal body */
.modal .modal-content {
box-shadow: 0 .5em 3em .5em var(--modal-shadow-color);
border: 1px solid var(--modal-border-color);
background: var(--modal-background-color);
}
/* Modal header */
.modal .modal-header {
border-bottom: unset;
user-select: none;
}
.modal .modal-header .modal-title {
flex-grow: 1;
font-size: 1.2em;
color: var(--modal-title-color);
}
/* Modal and toast control buttons (close and help) */
.modal .modal-header .btn-close,
.modal .modal-header .help-button,
#toast-container .toast .toast-header .btn-close {
display: flex;
justify-content: center;
align-items: center;
margin-left: 8px;
border: 0;
border-radius: 50%;
padding: 0;
width: var(--modal-control-button-size);
height: var(--modal-control-button-size);
background: var(--modal-control-button-background);
font-size: var(--modal-control-button-size);
line-height: normal;
font-weight: normal;
color: var(--modal-control-button-color);
opacity: 1;
cursor: default;
}
.modal .modal-header .btn-close,
#toast-container .toast .toast-header .btn-close {
--modal-control-button-hover-background: var(--modal-close-button-hover-background);
}
.modal .modal-header .btn-close::after,
#toast-container .toast .toast-header .btn-close::after {
content: "\ec8d";
font-family: boxicons;
}
.modal .modal-header .help-button {
margin-right: 0;
font-size: calc(var(--modal-control-button-size) * .75);
font-family: unset;
font-weight: bold;
}
.modal .modal-header .btn-close:hover,
.modal .modal-header .help-button:hover,
#toast-container .toast .toast-header .btn-close:hover {
background: var(--modal-control-button-hover-background);
color: var(--modal-control-button-hover-color);
}
.modal .modal-header .btn-close:active,
.modal .modal-header .help-button:active,
#toast-container .toast .toast-header .btn-close:active {
transform: scale(.85);
}
.modal .modal-header .btn-close:focus,
.modal .modal-header .help-button:focus,
#toast-container .toast .toast-header .btn-close:focus {
box-shadow: none !important;
}
.modal .modal-header .btn-close:focus-visible,
.modal .modal-header .help-button:focus-visible,
#toast-container .toast .toast-header .btn-close:focus-visible {
outline: 2px solid var(--input-focus-outline-color);
outline-offset: 2px;
}
/* Modal footer */
.modal .modal-footer {
background: var(--modal-footer-background);
color: var(--modal-footer-color);
border-top: unset;
}
/* Tool dialogs - small dialogs without a backdrop */
div.tn-tool-dialog {
border-radius: 10px;
background: var(--tool-dialog-background-color) !important;
user-select: none;
box-shadow: 10px 10px 93px -25px var(--tool-dialog-shadow-color);
}
/*
* JUMP TO NOTE DIALOG
*/
.jump-to-note-dialog .modal-dialog {
--modal-background-color: var(--menu-background-color);
--modal-footer-background: transparent;
--bs-modal-header-border-width: 0;
--bs-modal-footer-border-width: 0;
--bs-modal-footer-gap: 0;
backdrop-filter: var(--dropdown-backdrop-filter);
}
.jump-to-note-dialog .modal-content {
--bs-modal-header-padding-x: 0;
box-shadow: 0 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity));
border: 1px solid var(--dropdown-border-color);
padding: 20px;
border-radius: 8px;
}
.jump-to-note-dialog .modal-header {
padding: unset !important;
}
.jump-to-note-dialog .modal-body {
padding: 26px 0 !important;
}
/* Search box wrapper */
.jump-to-note-dialog .input-group {
margin-right: 16px;
}
.jump-to-note-dialog .input-group:hover {
background: var(--quick-search-hover-background);
}
/* Focused search box */
.jump-to-note-dialog .input-group:focus-within {
border-color: var(--quick-search-focus-border);
background: var(--quick-search-focus-background);
color: var(--quick-search-focus-color);
}
.jump-to-note-dialog .input-clearer-button {
background: transparent !important;
}
/*
* RECENT CHANGES DIALOG
*/
.recent-changes-dialog .modal-body {
padding: 0;
}
.recent-changes-content {
margin: var(--bs-modal-padding);
}
/* Date headings */
.recent-changes-content > div > b {
position: sticky;
display: block;
top: 0;
background: var(--modal-background-color);
padding: 10px 0 10px calc(var(--timeline-left-gap) + var(--timeline-right-gap));
font-size: 1.25em;
font-weight: 300;
z-index: 10;
}
.recent-changes-content ul {
list-style: none;
margin: 0;
padding: 0;
}
/* Timeline items */
.recent-changes-content ul li {
display: flex;
position: relative;
margin: 0;
border: unset;
padding-top: var(--timeline-item-top-padding);
padding-bottom: var(--timeline-item-bottom-padding);
padding-left: calc(var(--timeline-left-gap) + var(--timeline-right-gap));
padding-right: var(--timeline-left-gap);
color: var(--active-item-text-color);
}
.recent-changes-content li > span:first-child::after {
/* Remove the dash between time and note title */
content: "" !important;
}
.recent-changes-content ul li:not(.deleted-note):hover {
border-radius: 8px;
background: var(--hover-item-background-color);
color: var(--hover-item-text-color);
}
.recent-changes-content ul li .note-path {
color: var(--muted-text-color);
font-size: 0.75em;
}
/* Item time */
.recent-changes-content ul li > span:first-child {
display: inline-block;
min-width: 80px;
vertical-align: top;
color: var(--muted-text-color);
}
/* Item title & path container */
.recent-changes-content ul li > span:nth-child(2) {
display: inline-block;
}
/* Item title link */
.recent-changes-content ul li .note-title a {
color: currentColor;
}
.recent-changes-content ul li .note-title a:hover {
text-decoration: underline;
}
/* Item title for deleted notes */
.recent-changes-content ul li.deleted-note .note-title > .note-title {
text-decoration: line-through;
}
/* Item path */
.recent-changes-content ul li > span:nth-child(2) small {
display: block;
line-height: 1;
opacity: 0.75;
}
/* Timeline connector */
.recent-changes-content ul li::before,
.recent-changes-content > div > b::before {
position: absolute;
content: "";
top: var(--connector-top, 0);
left: calc(var(--timeline-left-gap) + ((var(--timeline-bullet-size) - var(--timeline-connector-size)) / 2));
bottom: var(--connector-bottom, 0);
width: var(--timeline-connector-size);
border-radius: var(--connector-radius, 0) var(--connector-radius, 0) 0 0;
background: var(--timeline-connector-color);
transition: background-color 400ms ease-in-out;
}
.recent-changes-content ul li:hover:before {
mix-blend-mode: var(--timeline-connector-hover-blend-mode);
}
.recent-changes-content > div:hover {
--timeline-connector-color: var(--timeline-connector-active-color);
}
/* The first item of the timeline */
.recent-changes-content > div:first-child > *:first-child {
--connector-top: 50%;
--connector-radius: calc(var(--timeline-connector-size) / 2);
}
/* The last item of the timeline */
.recent-changes-content > div:last-child li:last-child {
--connector-bottom: 50%;
}
/* Timeline bullet */
.recent-changes-content ul li::after {
position: absolute;
content: "";
top: calc(var(--timeline-item-top-padding) + var(--timeline-bullet-vertical-pos));
left: var(--timeline-left-gap);
width: var(--timeline-bullet-size);
height: var(--timeline-bullet-size);
border-radius: 50%;
background: var(--timeline-bullet-color);
transform: translateY(-50%);
}
/* Hovered timeline bullet */
.recent-changes-content ul li:hover::after {
background: var(--timeline-bullet-hover-color);
}
/*
* CHEATSHEET DIALOG
*/
.help-dialog .modal-content {
--modal-background-color: var(--help-background-color);
backdrop-filter: blur(var(--help-backdrop-blur));
}
.help-dialog .help-cards {
display: block;
columns: 3;
column-gap: 20px;
}
.help-dialog .card {
margin: 0;
width: auto;
border: none;
background: unset;
padding: 16px 8px;
break-inside: avoid-column;
}
.help-dialog .card-body {
box-shadow: var(--help-card-shadow);
border-radius: 6px;
background: var(--help-card-background);
}
.help-dialog .card-body h5,
.help-dialog .card-body h6 {
color: var(--help-card-heading-color);
font-weight: 600;
}
.help-dialog .card-body h5 {
font-size: 20px;
}
.help-dialog .card-body h6 {
font-size: 15px;
padding-bottom: 0.5em;
}
/* Help card item */
.help-dialog .help-cards ul {
list-style-type: none;
padding: 0;
}
.help-dialog .help-cards li + li {
margin-top: 0.4em;
}
/* Keyboard shortcut */
.help-dialog .help-cards kbd,
.ck-content kbd {
box-shadow: var(--help-kbd-shortcut-shadow);
margin: 0 4px;
border: none;
border-radius: 4px;
padding: 2px 10px;
background: var(--help-kbd-shortcut-background);
color: var(--help-kbd-shortcut-color);
font-weight: 500;
letter-spacing: 0.5pt;
}
.help-dialog .help-cards kbd:first-child {
margin-left: 0;
}
/* Inline code - used for Markdown samples */
.help-dialog .help-cards code {
border-radius: 4px;
background: var(--help-code-background);
padding: 0 8px;
color: var(--help-code-color);
}
/* DELETE NOTE PREVIEW DIALOG */
.delete-notes-list .note-path {
padding-left: 8px;
}
/*
* ATTRIBUTE DETAIL DIALOG
*/
/* Labels */
.attr-edit-table th {
padding-right: 12px;
font-weight: normal;
white-space: nowrap;
}

View File

@ -220,6 +220,7 @@ input::selection,
border-radius: 6px;
padding-right: 8px;
color: var(--quick-search-color);
flex-wrap: nowrap;
}
.input-group:hover {
@ -302,6 +303,24 @@ input::selection,
font-style: italic;
}
/*
Numeric input with measurement unit as a sufix
<label class="input-group tn-number-unit-pair">
<input ... >
<span class="input-group-text">meters</span>
</label>
*/
label.input-group.tn-number-unit-pair {
width: fit-content;
}
label.input-group.tn-number-unit-pair input {
width: 120px !important;
padding-inline-end: 0;
}
/* Combo box-like dropdown buttons */
.select-button.dropdown-toggle::after {

View File

@ -1,11 +0,0 @@
/* The container */
div.note-detail-empty {
max-width: 70%;
margin: 50px auto;
}
/* The search results list */
.note-detail-empty span.aa-dropdown-menu {
margin-top: 1em;
border: unset;
}

View File

@ -132,105 +132,4 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
.ck-content .table > figcaption {
background: var(--accented-background-color);
color: var(--main-text-color);
}
/*
* Search in text panel
*/
.find-replace-widget {
container-type: inline-size;
border-top: 3px solid var(--root-background) !important;
}
.find-replace-widget > div {
padding: 8px;
}
.find-replace-widget > div + div {
padding-top: 0;
}
div.find-replace-widget div.find-widget-found-wrapper > span {
min-width: 50px;
font-style: normal;
font-weight: normal;
}
/* The up / down buttons of the "Find in text" input */
.find-replace-widget .input-group button {
font-size: 1.3em;
}
.find-replace-widget .form-check {
padding-left: 0;
white-space: nowrap;
}
.find-replace-widget .form-check .form-check-input {
margin-left: 0;
}
/* Narrow version */
@container (max-width: 600px) {
.find-replace-widget > *,
.find-replace-widget input,
.find-replace-widget button.btn.btn-sm {
font-size: .9em;
}
.find-widget-box {
position: relative;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
}
.find-widget-box,
.replace-widget-box {
padding-right: 3em !important;
}
.find-widget-close-button {
position: absolute;
top: .85em;
right: .5em;
}
.find-widget-box > * {
margin: unset !important;
}
div.find-widget-search-term-input-group {
margin-bottom: 8px;
max-width: unset;
width: 100%;
}
.find-widget-found-wrapper,
.find-widget-found-wrapper > span {
min-width: 0 !important;
}
.find-widget-spacer {
display: none;
}
.form-check {
min-height: unset;
margin-bottom: unset;
}
.replace-widget-box {
gap: 8px;
}
.replace-widget-box > * {
margin-right: unset !important;
}
div.replace-widget-box button.btn.btn-sm {
min-width: unset;
white-space: nowrap;
}
}
}

View File

@ -1,7 +1,127 @@
/*
* Settings
* LOG IN PAGE
*/
:root {
.login-page {
display: flex; /* Note: the login page contents is hidden before this property is applied */
height: 100%;
flex-direction: column;
justify-content: center;
}
.login-page > div {
padding-top: 0 !important;
padding-bottom: 20vh;
}
.login-page h1 {
margin-bottom: .5em;
font-weight: 300;
color: var(--muted-text-color);
}
.login-page .form-group {
margin-top: 8px;
}
.login-page .alert {
margin: 0;
border: unset;
padding: 8px 0 0 0;
font-size: .85em;
color: var(--dropdown-item-icon-destructive-color) !important;
}
/*
* SEARCH PAGE
*/
/* Button bar */
.search-definition-widget .search-setting-table tbody:last-child div {
justify-content: flex-end !important;
gap: 8px;
}
.search-result-widget-content .note-path .path-bracket {
display: inline;
}
.search-result-widget-content .note-path {
opacity: 0.75;
font-weight: normal;
}
/*
* SQL CONSOLE
*/
/* Table buttons */
.sql-table-schemas-widget .sql-table-schemas button {
--color: var(--main-text-color);
--background: var(--card-background-color);
display: inline-block;
box-shadow: 2px 2px 2px var(--card-shadow-color);
margin-top: 4px;
vertical-align: baseline;
border: unset;
border-radius: 12px;
padding: 2px 12px;
background: var(--background) !important;
color: var(--color) !important;
line-height: unset;
cursor: help;
}
.sql-table-schemas-widget .sql-table-schemas button:hover,
.sql-table-schemas-widget .sql-table-schemas button:active,
.sql-table-schemas-widget .sql-table-schemas button:focus-visible {
--background: var(--card-background-press-color);
--color: var(--main-text-color);
}
/* Tooltip */
.tooltip .table-schema {
font-family: var(--monospace-font-family);
font-size: .85em;
}
/* Data type */
.tooltip .table-schema td:nth-child(2) {
color: var(--muted-text-color);
}
/*
* NOTE MAP
*/
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button.toggled {
color: var(--tab-close-button-hover-background);
}
/*
* EMPTY NOTE PAGE
*/
/* The container */
div.note-detail-empty {
max-width: 70%;
margin: 50px auto;
}
/* The search results list */
.note-detail-empty span.aa-dropdown-menu {
margin-top: 1em;
border: unset;
}
/*
* OPTIONS PAGES
*/
:root {
--options-card-min-width: 500px;
--options-card-max-width: 900px;
--options-card-padding: 17px;

View File

@ -153,15 +153,4 @@ div.editability-dropdown a.dropdown-item {
/* Narrow width layout */
.note-info-widget {
container: info-section / inline-size;
}
/*
* Attribute detail dialog
*/
/* Labels */
.attr-edit-table th {
padding-right: 12px;
font-weight: normal;
white-space: nowrap;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1090,7 +1090,8 @@
"max_content_width": {
"title": "Content Width",
"default_description": "Trilium by default limits max content width to improve readability for maximized screens on wide screens.",
"max_width_label": "Max content width in pixels",
"max_width_label": "Max content width",
"max_width_unit": "pixels",
"apply_changes_description": "To apply content width changes, click on",
"reload_button": "reload frontend",
"reload_description": "changes from appearance options"
@ -1245,7 +1246,8 @@
"code_auto_read_only_size": {
"title": "Automatic Read-Only Size",
"description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).",
"label": "Automatic read-only size (code notes)"
"label": "Automatic read-only size (code notes)",
"unit": "characters"
},
"code-editor-options": {
"title": "Editor"
@ -1266,7 +1268,8 @@
"download_images_automatically": "Download images automatically for offline use.",
"download_images_description": "Pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline.",
"enable_image_compression": "Enable image compression",
"max_image_dimensions": "Max width / height of an image in pixels (image will be resized if it exceeds this setting).",
"max_image_dimensions": "Max width / height of an image (image will be resized if it exceeds this setting).",
"max_image_dimensions_unit": "pixels",
"jpeg_quality_description": "JPEG quality (10 - worst quality, 100 - best quality, 50 - 85 is recommended)"
},
"attachment_erasure_timeout": {
@ -1298,6 +1301,7 @@
"note_revisions_snapshot_limit_title": "Note Revision Snapshot Limit",
"note_revisions_snapshot_limit_description": "The note revision snapshot number limit refers to the maximum number of revisions that can be saved for each note. Where -1 means no limit, 0 means delete all revisions. You can set the maximum revisions for a single note through the #versioningLimit label.",
"snapshot_number_limit_label": "Note revision snapshot number limit:",
"snapshot_number_limit_unit": "snapshots",
"erase_excess_revision_snapshots": "Erase excess revision snapshots now",
"erase_excess_revision_snapshots_prompt": "Excess revision snapshots have been erased."
},
@ -1340,13 +1344,15 @@
"table_of_contents": {
"title": "Table of Contents",
"description": "Table of contents will appear in text notes when the note has more than a defined number of headings. You can customize this number:",
"unit": "headings",
"disable_info": "You can also use this option to effectively disable TOC by setting a very high number.",
"shortcut_info": "You can configure a keyboard shortcut for quickly toggling the right pane (including TOC) in the Options -> Shortcuts (name 'toggleRightPane')."
},
"text_auto_read_only_size": {
"title": "Automatic Read-Only Size",
"description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).",
"label": "Automatic read-only size (text notes)"
"label": "Automatic read-only size (text notes)",
"unit": "characters"
},
"i18n": {
"title": "Localization",
@ -1446,7 +1452,8 @@
"sync_2": {
"config_title": "Sync Configuration",
"server_address": "Server instance address",
"timeout": "Sync timeout (milliseconds)",
"timeout": "Sync timeout",
"timeout_unit": "milliseconds",
"proxy_label": "Sync proxy server (optional)",
"note": "Note",
"note_description": "If you leave the proxy setting blank, the system proxy will be used (applies to desktop/electron build only).",

View File

@ -353,7 +353,8 @@
"code_auto_read_only_size": {
"description": "Marchează pragul în care o notiță de o anumită dimensiune va fi afișată în mod de citire (pentru motive de performanță).",
"label": "Pragul de dimensiune pentru setarea modului de citire automat (la notițe de cod)",
"title": "Pragul de mod de citire automat"
"title": "Pragul de mod de citire automat",
"unit": "caractere"
},
"code_buttons": {
"execute_button_title": "Execută scriptul",
@ -697,7 +698,8 @@
"enable_image_compression": "Activează compresia imaginilor",
"images_section_title": "Imagini",
"jpeg_quality_description": "Calitatea JPEG (10 - cea mai slabă calitate, 100 - cea mai bună calitate, se recomandă între 50 și 85)",
"max_image_dimensions": "Lungimea/lățimea maximă a unei imagini în pixeli (imaginea va fi redimensionată dacă depășește acest prag)."
"max_image_dimensions": "Lungimea/lățimea maximă a unei imagini (imaginea va fi redimensionată dacă depășește acest prag).",
"max_image_dimensions_unit": "pixeli"
},
"import": {
"chooseImportFile": "Selectați fișierul de importat",
@ -772,7 +774,8 @@
"max_content_width": {
"apply_changes_description": "Pentru a aplica schimbările de lățime a conținutului, dați click pe",
"default_description": "În mod implicit Trilium limitează lățimea conținutului pentru a îmbunătăți lizibilitatea pentru ferestrele maximizate pe ecrane late.",
"max_width_label": "Lungimea maximă a conținutului în pixeli",
"max_width_label": "Lungimea maximă a conținutului",
"max_width_unit": "pixeli",
"reload_button": "reîncarcă interfața",
"reload_description": "schimbări din opțiunile de afișare",
"title": "Lățime conținut"
@ -1215,10 +1218,12 @@
"test_button": "Probează sincronizarea",
"test_description": "Această opțiune va testa conexiunea și comunicarea cu serverul de sincronizare. Dacă serverul de sincronizare nu este inițializat, acest lucru va rula și o sincronizare cu documentul local.",
"test_title": "Probează sincronizarea",
"timeout": "Timp limită de sincronizare (millisecunde)"
"timeout": "Timp limită de sincronizare",
"timeout_unit": "milisecunde"
},
"table_of_contents": {
"description": "Tabela de conținut va apărea în notițele de tip text atunci când notița are un număr de titluri mai mare decât cel definit. Acest număr se poate personaliza:",
"unit": "titluri",
"disable_info": "De asemenea se poate dezactiva tabela de conținut setând o valoare foarte mare.",
"shortcut_info": "Se poate configura și o scurtatură pentru a comuta rapid vizibilitatea panoului din dreapta (inclusiv tabela de conținut) în Opțiuni -> Scurtături (denumirea „toggleRightPane”).",
"title": "Tabelă de conținut"
@ -1226,7 +1231,8 @@
"text_auto_read_only_size": {
"description": "Marchează pragul în care o notiță de o anumită dimensiune va fi afișată în mod de citire (pentru motive de performanță).",
"label": "Pragul de dimensiune pentru setarea modului de citire automat (la notițe text)",
"title": "Pragul de mod de citire automat"
"title": "Pragul de mod de citire automat",
"unit": "caractere"
},
"theme": {
"auto_theme": "Temă auto (se adaptează la schema de culori a sistemului)",
@ -1481,7 +1487,8 @@
"erase_excess_revision_snapshots_prompt": "Reviziile excesive au fost șterse.",
"note_revisions_snapshot_limit_description": "Limita numărului de revizii se referă la numărul maxim de revizii pentru fiecare notiță. -1 reprezintă nicio limită, 0 înseamnă ștergerea tuturor reviziilor. Se poate seta valoarea individual pentru o notiță prin eticheta #versioningLimit.",
"note_revisions_snapshot_limit_title": "Limita de revizii a notițelor",
"snapshot_number_limit_label": "Numărul maxim de revizii pentru notițe:"
"snapshot_number_limit_label": "Numărul maxim de revizii pentru notițe:",
"snapshot_number_limit_unit": "revizii"
},
"search_result": {
"no_notes_found": "Nu au fost găsite notițe pentru parametrii de căutare dați.",

View File

@ -96,8 +96,6 @@ async function register(app: express.Application) {
app.use(`/${assetPath}/node_modules/codemirror/mode/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/codemirror/mode/")));
app.use(`/${assetPath}/node_modules/codemirror/keymap/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/codemirror/keymap/")));
app.use(`/${assetPath}/node_modules/mind-elixir/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/mind-elixir/dist/")));
app.use(`/${assetPath}/node_modules/@mind-elixir/node-menu/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@mind-elixir/node-menu/dist/")));
app.use(`/${assetPath}/node_modules/@highlightjs/cdn-assets/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/@highlightjs/cdn-assets/")));
app.use(`/${assetPath}/node_modules/leaflet/dist/`, persistentCacheStatic(path.join(srcRoot, "..", "node_modules/leaflet/dist/")));