diff --git a/README.md b/README.md
index 477f993c..6911762b 100644
--- a/README.md
+++ b/README.md
@@ -36,10 +36,27 @@ A colorful dependency tree can be seen [here](https://github.com/solidos/solidos
- [Solid-ui & Solid-logic related:](#solid-ui--solid-logic-related)
- [The databrowser hack: upgrading your browser](#the-databrowser-hack-upgrading-your-browser)
+### [Generative AI usage](#generative-ai-usage)
+
## Developing mashlib
As part of the SolidOS stack, mashlib can be developed locally by setting up the SolidOS code. Read more about that on the [SolidOS Readme](https://github.com/solidos/solidos#-getting-started-with-the-solidos-code).
+### Webpack Resolution Modes
+
+Mashlib webpack now supports two explicit resolution modes:
+
+- `package` mode: default. Resolves `solid-ui` and `solid-panes` from `node_modules`, which is the correct behavior for npm installs and published builds.
+- `workspace` mode: opt-in. Resolves selected SolidOS packages from sibling workspace source trees for local linked development.
+
+Use these scripts for local workspace builds:
+
+- `npm run build:workspace`
+- `npm run watch:workspace`
+- `npm run start:workspace`
+
+`npm run build`, `npm run watch`, and `npm run start` stay on default package resolution.
+
## Goals
The goals of mashlib overlap with the [SolidOS Goals](https://solidos.solidcommunity.net/Team/docs/SolidOSNorthStar.html).
@@ -151,3 +168,13 @@ The mashlib part of SolidOS Databrowser Frontend is *read-write;* that is, the u
A major limitation of this data browser hack is that current web browsers are made to distrust any code loaded from one domain that uses data from another domain. This makes it hard, strangely complicated, and sometimes impossible to do some things.
+## Generative AI usage
+The SolidOS team is using GitHub Copilot integrated in Visual Studio Code.
+We have added comments in the code to make it explicit which parts are 100% written by AI.
+
+### Prompt usage history:
+* Auto model: Looking at these 2 files (databrowser.html and index.ts), I want to redesign mashlib and underlying panes. I have a design for web and one for mobile. How would I go about making sure I can also have a mobile version?
+
+* Claude-Opes 4.6: I don't think this is correct. Mashlib is bundling together all the panes. I do not need to add mashlib.layout or theme to the globals. I can just call the render of each pane with an interface of values or?
+
+* Raptor mini: I want to rdesign the main page which contains GlobalDashboard and OtlineView. I keep the header and footer and I want to have a left side menu that chnages content base on logged in or not and also chnages if it is mobile or not. If it is mobile it should fold up in the header menu if it is web it should be rendered on the left side. I want a menu placeholder that changes according to mobile or not. Its functionality I want to implement in solid-panes.
diff --git a/babel.config.mjs b/babel.config.mjs
index 647da9d1..acf75daa 100644
--- a/babel.config.mjs
+++ b/babel.config.mjs
@@ -5,7 +5,9 @@ export default {
browsers: ['> 1%', 'last 3 versions', 'not dead']
}
}],
- '@babel/preset-typescript',
+ ['@babel/preset-typescript', {
+ allowDeclareFields: true
+ }],
],
plugins: [
'@babel/plugin-transform-runtime'
diff --git a/package-lock.json b/package-lock.json
index 128c9df4..0705027d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,18 @@
{
"name": "mashlib",
- "version": "2.1.5",
+ "version": "2.1.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "mashlib",
- "version": "2.1.5",
+ "version": "2.1.6",
"license": "MIT",
"dependencies": {
+ "pane-registry": "^3.1.0",
"rdflib": "^2.3.6",
"solid-logic": "^4.0.6",
- "solid-panes": "^4.2.5",
+ "solid-panes": "^4.2.6",
"solid-ui": "^3.0.6"
},
"devDependencies": {
@@ -126,9 +127,9 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz",
- "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -213,9 +214,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz",
- "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+ "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -404,23 +405,23 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/types": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1594,13 +1595,13 @@
}
},
"node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz",
- "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==",
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+ "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"core-js-compat": "^3.48.0"
},
"peerDependencies": {
@@ -1643,9 +1644,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
- "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -1780,13 +1781,13 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.23.3",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz",
- "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==",
+ "version": "0.23.5",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
+ "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^3.0.3",
+ "@eslint/object-schema": "^3.0.5",
"debug": "^4.3.1",
"minimatch": "^10.2.4"
},
@@ -1795,22 +1796,22 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz",
- "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz",
+ "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^1.1.1"
+ "@eslint/core": "^1.2.1"
},
"engines": {
"node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/core": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz",
- "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
+ "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1821,9 +1822,9 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz",
- "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
+ "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1831,13 +1832,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz",
- "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz",
+ "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^1.1.1",
+ "@eslint/core": "^1.2.1",
"levn": "^0.4.1"
},
"engines": {
@@ -2057,9 +2058,9 @@
}
},
"node_modules/@jsonjoy.com/buffers": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz",
- "integrity": "sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz",
+ "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2091,14 +2092,14 @@
}
},
"node_modules/@jsonjoy.com/fs-core": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz",
- "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz",
+ "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.56.10",
- "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.57.1",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
"thingies": "^2.5.0"
},
"engines": {
@@ -2113,15 +2114,15 @@
}
},
"node_modules/@jsonjoy.com/fs-fsa": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz",
- "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz",
+ "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.10",
- "@jsonjoy.com/fs-node-builtins": "4.56.10",
- "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-core": "4.57.1",
+ "@jsonjoy.com/fs-node-builtins": "4.57.1",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
"thingies": "^2.5.0"
},
"engines": {
@@ -2136,17 +2137,17 @@
}
},
"node_modules/@jsonjoy.com/fs-node": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz",
- "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz",
+ "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.10",
- "@jsonjoy.com/fs-node-builtins": "4.56.10",
- "@jsonjoy.com/fs-node-utils": "4.56.10",
- "@jsonjoy.com/fs-print": "4.56.10",
- "@jsonjoy.com/fs-snapshot": "4.56.10",
+ "@jsonjoy.com/fs-core": "4.57.1",
+ "@jsonjoy.com/fs-node-builtins": "4.57.1",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
+ "@jsonjoy.com/fs-print": "4.57.1",
+ "@jsonjoy.com/fs-snapshot": "4.57.1",
"glob-to-regex.js": "^1.0.0",
"thingies": "^2.5.0"
},
@@ -2162,9 +2163,9 @@
}
},
"node_modules/@jsonjoy.com/fs-node-builtins": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz",
- "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz",
+ "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2179,15 +2180,15 @@
}
},
"node_modules/@jsonjoy.com/fs-node-to-fsa": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz",
- "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz",
+ "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-fsa": "4.56.10",
- "@jsonjoy.com/fs-node-builtins": "4.56.10",
- "@jsonjoy.com/fs-node-utils": "4.56.10"
+ "@jsonjoy.com/fs-fsa": "4.57.1",
+ "@jsonjoy.com/fs-node-builtins": "4.57.1",
+ "@jsonjoy.com/fs-node-utils": "4.57.1"
},
"engines": {
"node": ">=10.0"
@@ -2201,13 +2202,13 @@
}
},
"node_modules/@jsonjoy.com/fs-node-utils": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz",
- "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz",
+ "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.56.10"
+ "@jsonjoy.com/fs-node-builtins": "4.57.1"
},
"engines": {
"node": ">=10.0"
@@ -2221,13 +2222,13 @@
}
},
"node_modules/@jsonjoy.com/fs-print": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz",
- "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz",
+ "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
"tree-dump": "^1.1.0"
},
"engines": {
@@ -2242,14 +2243,14 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz",
- "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz",
+ "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jsonjoy.com/buffers": "^17.65.0",
- "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
"@jsonjoy.com/json-pack": "^17.65.0",
"@jsonjoy.com/util": "^17.65.0"
},
@@ -2265,9 +2266,9 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.65.0.tgz",
- "integrity": "sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz",
+ "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2282,9 +2283,9 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz",
- "integrity": "sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz",
+ "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2299,17 +2300,17 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz",
- "integrity": "sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz",
+ "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/base64": "17.65.0",
- "@jsonjoy.com/buffers": "17.65.0",
- "@jsonjoy.com/codegen": "17.65.0",
- "@jsonjoy.com/json-pointer": "17.65.0",
- "@jsonjoy.com/util": "17.65.0",
+ "@jsonjoy.com/base64": "17.67.0",
+ "@jsonjoy.com/buffers": "17.67.0",
+ "@jsonjoy.com/codegen": "17.67.0",
+ "@jsonjoy.com/json-pointer": "17.67.0",
+ "@jsonjoy.com/util": "17.67.0",
"hyperdyperid": "^1.2.0",
"thingies": "^2.5.0",
"tree-dump": "^1.1.0"
@@ -2326,13 +2327,13 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz",
- "integrity": "sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz",
+ "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/util": "17.65.0"
+ "@jsonjoy.com/util": "17.67.0"
},
"engines": {
"node": ">=10.0"
@@ -2346,14 +2347,14 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": {
- "version": "17.65.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.65.0.tgz",
- "integrity": "sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==",
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz",
+ "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/buffers": "17.65.0",
- "@jsonjoy.com/codegen": "17.65.0"
+ "@jsonjoy.com/buffers": "17.67.0",
+ "@jsonjoy.com/codegen": "17.67.0"
},
"engines": {
"node": ">=10.0"
@@ -2485,12 +2486,12 @@
"optional": true
},
"node_modules/@noble/curves": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz",
- "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.2.0.tgz",
+ "integrity": "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==",
"license": "MIT",
"dependencies": {
- "@noble/hashes": "2.0.1"
+ "@noble/hashes": "2.2.0"
},
"engines": {
"node": ">= 20.19.0"
@@ -2500,9 +2501,9 @@
}
},
"node_modules/@noble/hashes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz",
- "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
+ "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==",
"license": "MIT",
"engines": {
"node": ">= 20.19.0"
@@ -2512,99 +2513,99 @@
}
},
"node_modules/@peculiar/asn1-cms": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz",
- "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz",
+ "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
- "@peculiar/asn1-x509-attr": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
+ "@peculiar/asn1-x509-attr": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-csr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz",
- "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz",
+ "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-ecc": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz",
- "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz",
+ "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-pfx": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz",
- "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz",
+ "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@peculiar/asn1-cms": "^2.6.0",
- "@peculiar/asn1-pkcs8": "^2.6.0",
- "@peculiar/asn1-rsa": "^2.6.0",
+ "@peculiar/asn1-cms": "^2.6.1",
+ "@peculiar/asn1-pkcs8": "^2.6.1",
+ "@peculiar/asn1-rsa": "^2.6.1",
"@peculiar/asn1-schema": "^2.6.0",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-pkcs8": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz",
- "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz",
+ "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-pkcs9": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz",
- "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz",
+ "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@peculiar/asn1-cms": "^2.6.0",
- "@peculiar/asn1-pfx": "^2.6.0",
- "@peculiar/asn1-pkcs8": "^2.6.0",
+ "@peculiar/asn1-cms": "^2.6.1",
+ "@peculiar/asn1-pfx": "^2.6.1",
+ "@peculiar/asn1-pkcs8": "^2.6.1",
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
- "@peculiar/asn1-x509-attr": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
+ "@peculiar/asn1-x509-attr": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
},
"node_modules/@peculiar/asn1-rsa": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz",
- "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz",
+ "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
@@ -2622,9 +2623,9 @@
}
},
"node_modules/@peculiar/asn1-x509": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz",
- "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz",
+ "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2635,14 +2636,14 @@
}
},
"node_modules/@peculiar/asn1-x509-attr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz",
- "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz",
+ "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/asn1-schema": "^2.6.0",
- "@peculiar/asn1-x509": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.1",
"asn1js": "^3.0.6",
"tslib": "^2.8.1"
}
@@ -2827,18 +2828,18 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.0.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz",
- "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==",
+ "version": "25.6.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz",
+ "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
"license": "MIT",
"dependencies": {
- "undici-types": "~7.16.0"
+ "undici-types": "~7.19.0"
}
},
"node_modules/@types/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz",
+ "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==",
"dev": true,
"license": "MIT"
},
@@ -2926,16 +2927,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz",
- "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.1.tgz",
+ "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.57.1",
- "@typescript-eslint/types": "8.57.1",
- "@typescript-eslint/typescript-estree": "8.57.1",
- "@typescript-eslint/visitor-keys": "8.57.1",
+ "@typescript-eslint/scope-manager": "8.58.1",
+ "@typescript-eslint/types": "8.58.1",
+ "@typescript-eslint/typescript-estree": "8.58.1",
+ "@typescript-eslint/visitor-keys": "8.58.1",
"debug": "^4.4.3"
},
"engines": {
@@ -2947,18 +2948,18 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz",
- "integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.1.tgz",
+ "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.57.1",
- "@typescript-eslint/types": "^8.57.1",
+ "@typescript-eslint/tsconfig-utils": "^8.58.1",
+ "@typescript-eslint/types": "^8.58.1",
"debug": "^4.4.3"
},
"engines": {
@@ -2969,18 +2970,18 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz",
- "integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.1.tgz",
+ "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.57.1",
- "@typescript-eslint/visitor-keys": "8.57.1"
+ "@typescript-eslint/types": "8.58.1",
+ "@typescript-eslint/visitor-keys": "8.58.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2991,9 +2992,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz",
- "integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.1.tgz",
+ "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3004,13 +3005,13 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz",
- "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.1.tgz",
+ "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3022,21 +3023,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz",
- "integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.1.tgz",
+ "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.57.1",
- "@typescript-eslint/tsconfig-utils": "8.57.1",
- "@typescript-eslint/types": "8.57.1",
- "@typescript-eslint/visitor-keys": "8.57.1",
+ "@typescript-eslint/project-service": "8.58.1",
+ "@typescript-eslint/tsconfig-utils": "8.58.1",
+ "@typescript-eslint/types": "8.58.1",
+ "@typescript-eslint/visitor-keys": "8.58.1",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
"tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^2.5.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3046,7 +3047,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
@@ -3063,13 +3064,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz",
- "integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==",
+ "version": "8.58.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.1.tgz",
+ "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.57.1",
+ "@typescript-eslint/types": "8.58.1",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -3242,9 +3243,9 @@
}
},
"node_modules/@xmldom/xmldom": {
- "version": "0.8.11",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
- "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
+ "version": "0.8.12",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz",
+ "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -3413,9 +3414,9 @@
}
},
"node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3527,9 +3528,9 @@
}
},
"node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -3579,9 +3580,9 @@
}
},
"node_modules/babel-loader": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz",
- "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==",
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.1.1.tgz",
+ "integrity": "sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3591,19 +3592,28 @@
"node": "^18.20.0 || ^20.10.0 || >=22.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.12.0",
+ "@babel/core": "^7.12.0 || ^8.0.0-beta.1",
+ "@rspack/core": "^1.0.0 || ^2.0.0-0",
"webpack": ">=5.61.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz",
- "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==",
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+ "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.28.6",
- "@babel/helper-define-polyfill-provider": "^0.6.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -3625,24 +3635,27 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz",
- "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+ "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.6"
+ "@babel/helper-define-polyfill-provider": "^0.6.8"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -3665,13 +3678,16 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.18",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz",
- "integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==",
+ "version": "2.10.18",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz",
+ "integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
- "baseline-browser-mapping": "dist/cli.js"
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/batch": {
@@ -3705,9 +3721,9 @@
}
},
"node_modules/bn.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
- "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz",
+ "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==",
"dev": true,
"license": "MIT"
},
@@ -3753,6 +3769,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz",
@@ -3772,13 +3804,16 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/braces": {
@@ -3945,9 +3980,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
"dev": true,
"funding": [
{
@@ -3965,11 +4000,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
+ "baseline-browser-mapping": "^2.10.12",
+ "caniuse-lite": "^1.0.30001782",
+ "electron-to-chromium": "^1.5.328",
+ "node-releases": "^2.0.36",
+ "update-browserslist-db": "^1.2.3"
},
"bin": {
"browserslist": "cli.js"
@@ -4062,6 +4097,23 @@
"bundlesize": "index.js"
}
},
+ "node_modules/bundlesize2/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/bundlesize2/node_modules/brace-expansion": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/bundlesize2/node_modules/commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
@@ -4076,6 +4128,7 @@
"version": "9.3.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
"integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -4128,15 +4181,15 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "get-intrinsic": "^1.3.0",
"set-function-length": "^1.2.2"
},
"engines": {
@@ -4234,9 +4287,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001766",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz",
- "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==",
+ "version": "1.0.30001787",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz",
+ "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==",
"dev": true,
"funding": [
{
@@ -4502,9 +4555,9 @@
"license": "MIT"
},
"node_modules/contacts-pane": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/contacts-pane/-/contacts-pane-3.0.3.tgz",
- "integrity": "sha512-6+XqGYvUSuaw0zg8k4NJ2amzLFDJE+BVRmpvmLgQ634gwG8fkB6se/7VelZqKVS5jYg+xYu4pNUL/5BLWPx7GQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/contacts-pane/-/contacts-pane-3.1.0.tgz",
+ "integrity": "sha512-eazyFgvsFeqt/0nT/b3lpQ32dKT31uG8wAIRRLYHV9kjwS0/kf5JIggfgLpnbRzXnj/2bV1eZuIL9cLtqrZRhQ==",
"license": "MIT",
"peerDependencies": {
"rdflib": "^2.3.6",
@@ -4596,20 +4649,10 @@
"node": ">=10.13.0"
}
},
- "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.4.tgz",
- "integrity": "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=20.0.0"
- }
- },
"node_modules/core-js": {
- "version": "3.48.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz",
- "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz",
+ "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -4618,9 +4661,9 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.48.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz",
- "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz",
+ "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4666,9 +4709,9 @@
}
},
"node_modules/create-ecdh/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -4813,9 +4856,9 @@
}
},
"node_modules/css-loader/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4919,9 +4962,9 @@
"license": "MIT"
},
"node_modules/default-browser": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
- "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+ "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5049,9 +5092,9 @@
}
},
"node_modules/diffie-hellman/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -5206,9 +5249,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.278",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz",
- "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==",
+ "version": "1.5.335",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz",
+ "integrity": "sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==",
"dev": true,
"license": "ISC"
},
@@ -5229,9 +5272,9 @@
}
},
"node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -5378,18 +5421,18 @@
}
},
"node_modules/eslint": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz",
- "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz",
+ "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.2",
- "@eslint/config-array": "^0.23.3",
- "@eslint/config-helpers": "^0.5.3",
- "@eslint/core": "^1.1.1",
- "@eslint/plugin-kit": "^0.6.1",
+ "@eslint/config-array": "^0.23.4",
+ "@eslint/config-helpers": "^0.5.4",
+ "@eslint/core": "^1.2.0",
+ "@eslint/plugin-kit": "^0.7.0",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -5666,6 +5709,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/express/node_modules/qs": {
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -5917,9 +5976,9 @@
}
},
"node_modules/follow-redirects": {
- "version": "1.15.11",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"dev": true,
"funding": [
{
@@ -6083,7 +6142,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6138,10 +6197,17 @@
"dev": true,
"license": "BSD-2-Clause"
},
+ "node_modules/glob/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/glob/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
+ "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6163,9 +6229,9 @@
}
},
"node_modules/globals": {
- "version": "17.3.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz",
- "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz",
+ "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6978,9 +7044,9 @@
}
},
"node_modules/is-network-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz",
- "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz",
+ "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7062,9 +7128,9 @@
}
},
"node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+ "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7466,9 +7532,9 @@
}
},
"node_modules/ky": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz",
- "integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==",
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -7478,9 +7544,9 @@
}
},
"node_modules/launch-editor": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz",
- "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==",
+ "version": "2.13.2",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz",
+ "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7557,9 +7623,9 @@
}
},
"node_modules/lodash": {
- "version": "4.17.23",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
- "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"dev": true,
"license": "MIT"
},
@@ -7627,9 +7693,9 @@
}
},
"node_modules/marked": {
- "version": "17.0.5",
- "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.5.tgz",
- "integrity": "sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==",
+ "version": "17.0.6",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.6.tgz",
+ "integrity": "sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
@@ -7682,20 +7748,20 @@
}
},
"node_modules/memfs": {
- "version": "4.56.10",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz",
- "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==",
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz",
+ "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.10",
- "@jsonjoy.com/fs-fsa": "4.56.10",
- "@jsonjoy.com/fs-node": "4.56.10",
- "@jsonjoy.com/fs-node-builtins": "4.56.10",
- "@jsonjoy.com/fs-node-to-fsa": "4.56.10",
- "@jsonjoy.com/fs-node-utils": "4.56.10",
- "@jsonjoy.com/fs-print": "4.56.10",
- "@jsonjoy.com/fs-snapshot": "4.56.10",
+ "@jsonjoy.com/fs-core": "4.57.1",
+ "@jsonjoy.com/fs-fsa": "4.57.1",
+ "@jsonjoy.com/fs-node": "4.57.1",
+ "@jsonjoy.com/fs-node-builtins": "4.57.1",
+ "@jsonjoy.com/fs-node-to-fsa": "4.57.1",
+ "@jsonjoy.com/fs-node-utils": "4.57.1",
+ "@jsonjoy.com/fs-print": "4.57.1",
+ "@jsonjoy.com/fs-snapshot": "4.57.1",
"@jsonjoy.com/json-pack": "^1.11.0",
"@jsonjoy.com/util": "^1.9.0",
"glob-to-regex.js": "^1.0.1",
@@ -7767,9 +7833,9 @@
}
},
"node_modules/miller-rabin/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -7847,13 +7913,13 @@
"license": "MIT"
},
"node_modules/minimatch": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
- "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^5.0.2"
+ "brace-expansion": "^5.0.5"
},
"engines": {
"node": "18 || 20 || >=22"
@@ -7862,29 +7928,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/minimatch/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/minimatch/node_modules/brace-expansion": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
- "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
"node_modules/minipass": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
@@ -8061,9 +8104,9 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "version": "2.0.37",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz",
+ "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==",
"dev": true,
"license": "MIT"
},
@@ -8350,9 +8393,9 @@
"license": "(MIT AND Zlib)"
},
"node_modules/pane-registry": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.0.2.tgz",
- "integrity": "sha512-jd3lbAdNWZ5ig+vUdHayKn8g/QkrB/CyT8f9JCGohzCqwxXmZS6ust2m4HzM/5xtktDcx1abjaWnbG4wTBkIJw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.1.0.tgz",
+ "integrity": "sha512-Et1ydzeai6AgQ2Q4mJAW4BbcxetAmu4QIueba1qLiykOY5bxj9wSmdsMUGtDVgPo2pGPgI5enx4yGU2spKpIdg==",
"license": "MIT",
"peerDependencies": {
"rdflib": "^2.3.6",
@@ -8490,19 +8533,19 @@
"license": "ISC"
},
"node_modules/path-scurry/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
"dev": true,
"license": "MIT"
},
@@ -8568,9 +8611,9 @@
}
},
"node_modules/pkijs": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz",
- "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz",
+ "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -8634,9 +8677,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz",
+ "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==",
"dev": true,
"funding": [
{
@@ -8784,13 +8827,13 @@
"license": "MIT"
},
"node_modules/profile-pane": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/profile-pane/-/profile-pane-3.1.4.tgz",
- "integrity": "sha512-/zec9npw/Z8qqNoiO2AylU8bApfCi6sa88A+Qw0vf9gKQW+RNO+jU9uMeRN549fzLvJF8P5h23MT41m08Fj68A==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/profile-pane/-/profile-pane-3.1.5.tgz",
+ "integrity": "sha512-mgVAJoE6x27F/svLTeOJYiPHnn2GidVqzmUIJboDk1MjMYZEK9wQyRW2fgEB2i0MXi4+RZQTzxMo87Jf1MlDIg==",
"license": "MIT",
"dependencies": {
"lit-html": "^3.3.2",
- "pane-registry": "^3.0.2",
+ "pane-registry": "^3.1.0",
"qrcode": "^1.5.4",
"validate-color": "^2.2.4"
},
@@ -8851,9 +8894,9 @@
}
},
"node_modules/public-encrypt/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"dev": true,
"license": "MIT"
},
@@ -8902,9 +8945,9 @@
}
},
"node_modules/qs": {
- "version": "6.14.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
- "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -9001,9 +9044,9 @@
}
},
"node_modules/react": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
- "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz",
+ "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -9016,15 +9059,15 @@
"license": "MIT"
},
"node_modules/react-dom": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
- "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz",
+ "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==",
"license": "MIT",
"dependencies": {
"scheduler": "^0.27.0"
},
"peerDependencies": {
- "react": "^19.2.4"
+ "react": "^19.2.5"
}
},
"node_modules/react-is": {
@@ -9149,9 +9192,9 @@
"license": "MIT"
},
"node_modules/regjsparser": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz",
- "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz",
+ "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -9218,12 +9261,13 @@
"license": "MIT"
},
"node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "es-errors": "^1.3.0",
"is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
@@ -9443,9 +9487,9 @@
}
},
"node_modules/schema-utils/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9552,6 +9596,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/serialize-javascript": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz",
+ "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
"node_modules/serve-index": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz",
@@ -9802,14 +9856,14 @@
}
},
"node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
+ "object-inspect": "^1.13.4"
},
"engines": {
"node": ">= 0.4"
@@ -9912,23 +9966,23 @@
"license": "MIT"
},
"node_modules/solid-panes": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/solid-panes/-/solid-panes-4.2.5.tgz",
- "integrity": "sha512-R4z49+64ObkTqgk1ilKHaSiaKXxkzxUZgwyvwvIVGFpW9bQf44W7FKiIq+1k8UhAFC51xbgziw+zVImAdN8MhA==",
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/solid-panes/-/solid-panes-4.2.6.tgz",
+ "integrity": "sha512-qWxtZ+wdezvaE/PXS8c73yYV8x9FnvZLhANR7BbyFqgnLLQIXNw5xeNe0rIhyljn0OCPdzlH5mTWdUgVQxX8tA==",
"license": "MIT",
"dependencies": {
"@solid/better-simple-slideshow": "^0.1.0",
"activitystreams-pane": "^1.0.2",
"chat-pane": "^3.0.3",
- "contacts-pane": "^3.0.3",
+ "contacts-pane": "^3.1.0",
"dompurify": "^3.3.1",
"folder-pane": "^3.0.2",
"issue-pane": "^3.0.2",
"marked": "^17.0.3",
"meeting-pane": "^3.0.2",
"mime-types": "^3.0.2",
- "pane-registry": "^3.0.2",
- "profile-pane": "^3.1.4",
+ "pane-registry": "^3.1.0",
+ "profile-pane": "^3.1.5",
"solid-namespace": "^0.5.4",
"solid-ui": "^3.0.6",
"source-pane": "^3.0.2"
@@ -10155,9 +10209,9 @@
}
},
"node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz",
+ "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10169,9 +10223,9 @@
}
},
"node_modules/terser": {
- "version": "5.46.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
- "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
+ "version": "5.46.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz",
+ "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -10247,9 +10301,9 @@
}
},
"node_modules/thingies": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz",
- "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz",
+ "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10296,14 +10350,14 @@
"license": "MIT"
},
"node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
- "picomatch": "^4.0.3"
+ "picomatch": "^4.0.4"
},
"engines": {
"node": ">=12.0.0"
@@ -10553,9 +10607,9 @@
}
},
"node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "version": "7.19.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
+ "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
@@ -10852,9 +10906,9 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.105.4",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz",
- "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==",
+ "version": "5.106.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.1.tgz",
+ "integrity": "sha512-EW8af29ak8Oaf4T8k8YsajjrDBDYgnKZ5er6ljWFJsXABfTNowQfvHLftwcepVgdz+IoLSdEAbBiM9DFXoll9w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11229,9 +11283,9 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.19.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
- "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
+ "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/package.json b/package.json
index 8dfcc67f..4dd8c64c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "mashlib",
- "version": "2.1.5",
+ "version": "2.1.6",
"description": "Data mashup library",
"main": "dist/mashlib.js",
"files": [
@@ -11,9 +11,11 @@
"scripts": {
"clean": "rm -rf dist ./src/versionInfo.ts",
"build": "npm run clean && npm run build-version && npm run typecheck && npm run build-dist && npm run postbuild-js",
+ "build:workspace": "npm run clean && npm run build-version && npm run typecheck && npm run build-dist:workspace && npm run postbuild-js",
"build:ghpages": "npm run clean && npm run build-version && npm run typecheck && PUBLIC_PATH=/mashlib/dist/ npm run build-dist && npm run postbuild-js",
"build-version": "./timestamp.sh > src/versionInfo.ts && eslint 'src/versionInfo.ts' --fix",
"build-dist": "webpack --progress --mode=production",
+ "build-dist:workspace": "webpack --progress --mode=production --env resolutionMode=workspace",
"postbuild-js": "rm -f dist/versionInfo.d.ts dist/versionInfo.d.ts.map",
"lint": "eslint",
"lint-fix": "eslint --fix",
@@ -24,7 +26,9 @@
"preversion": "npm run lint && npm run typecheck && npm test",
"postpublish": "git push origin main --follow-tags",
"watch": "npm run build-version && webpack --watch",
- "start": "npm run build-version && webpack serve --config webpack.config.mjs"
+ "watch:workspace": "npm run build-version && webpack --watch --env resolutionMode=workspace",
+ "start": "npm run build-version && webpack serve --config webpack.config.mjs",
+ "start:workspace": "npm run build-version && webpack serve --config webpack.config.mjs --env resolutionMode=workspace"
},
"repository": {
"type": "git",
@@ -50,15 +54,17 @@
},
"homepage": "https://github.com/solidos/mashlib",
"dependencies": {
+ "pane-registry": "^3.1.0",
"rdflib": "^2.3.6",
"solid-logic": "^4.0.6",
- "solid-panes": "^4.2.5",
+ "solid-panes": "^4.2.6",
"solid-ui": "^3.0.6"
},
"overrides": {
"rdflib": "$rdflib",
"solid-logic": "$solid-logic",
- "solid-ui": "$solid-ui"
+ "solid-ui": "$solid-ui",
+ "pane-registry": "$pane-registry"
},
"devDependencies": {
"@babel/cli": "^7.28.6",
diff --git a/src/databrowser.html b/src/databrowser.html
index 34b2fc37..590188e0 100644
--- a/src/databrowser.html
+++ b/src/databrowser.html
@@ -2,32 +2,76 @@
- <%= htmlWebpackPlugin.options.title %>
+
+ SolidOS
-
-
-
-
-
-
-
+
+
+
+ Skip to main content
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/index.new.ts b/src/index.new.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/index.ts b/src/index.ts
index b55c4a73..4cfa91d8 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,39 +1,44 @@
import * as $rdf from 'rdflib'
import * as panes from 'solid-panes'
import { authn, solidLogicSingleton, authSession, store } from 'solid-logic'
+import { layout } from './layout'
+import { theme } from './theme'
+import type { RenderEnvironment } from 'pane-registry'
import versionInfo from './versionInfo'
import './styles/mash.css'
+layout.init()
+theme.init()
+
const global: any = window
-// Theme Management
-const initializeTheme = () => {
- const savedTheme = localStorage.getItem('mashlib-theme')
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
- const theme = savedTheme || (prefersDark ? 'dark' : 'light')
-
- if (theme === 'dark') {
- document.documentElement.setAttribute('data-theme', 'dark')
- } else {
- document.documentElement.removeAttribute('data-theme')
+// Build a snapshot of the current render environment
+const buildRenderEnvironment = (): RenderEnvironment => ({
+ layout: layout.get(),
+ layoutPreference: layout.getPreference(),
+ inputMode: layout.getInputMode(),
+ theme: theme.get(),
+ viewport: layout.getViewport()
+})
+
+// Inject or update the environment on the pane context
+const syncEnvironmentToContext = (_trigger?: Event | string) => {
+ const outliner = panes.getOutliner(document) as any
+
+ if (!outliner) {
+ return
}
-}
-const setTheme = (theme: 'light' | 'dark') => {
- if (theme === 'dark') {
- document.documentElement.setAttribute('data-theme', 'dark')
- } else {
- document.documentElement.removeAttribute('data-theme')
+ if (!outliner.context) {
+ outliner.context = {}
}
- localStorage.setItem('mashlib-theme', theme)
-}
-const getTheme = (): 'light' | 'dark' => {
- return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
+ outliner.context.environment = buildRenderEnvironment()
}
-// Initialize theme on load
-initializeTheme()
+// Keep environment in sync on layout/theme changes
+window.addEventListener('mashlib:layoutchange', syncEnvironmentToContext)
+window.addEventListener('mashlib:themechange', syncEnvironmentToContext)
global.$rdf = $rdf
global.panes = panes
@@ -43,14 +48,7 @@ global.SolidLogic = {
store,
solidLogicSingleton
}
-global.mashlib = {
- versionInfo,
- theme: {
- set: setTheme,
- get: getTheme,
- init: initializeTheme
- }
-}
+global.mashlib = { versionInfo }
global.panes.runDataBrowser = function (uri?:string|$rdf.NamedNode|null) {
// Set up cross-site proxy
@@ -63,15 +61,20 @@ global.panes.runDataBrowser = function (uri?:string|$rdf.NamedNode|null) {
webMonetizationTag.setAttribute('name', 'monetization')
webMonetizationTag.setAttribute('content', `$${window.location.host}`)
document.head.appendChild(webMonetizationTag)
- } catch (e) {
- console.error('Failed to add web monetization tag to page header')
- }
+ } catch {}
+
+ window.addEventListener('load', syncEnvironmentToContext)
// Authenticate the user
- authn.checkUser().then(function (_profile: any) {
- const mainPage = panes.initMainPage(solidLogicSingleton.store, uri)
- return mainPage
- })
+ authn.checkUser()
+ .then(() => panes.initMainPage(solidLogicSingleton.store, uri))
+ .then(() => {
+ // Inject render environment into pane context after outliner exists
+ syncEnvironmentToContext('initMainPage')
+
+ })
+ .catch(() => undefined)
+
}
window.onpopstate = function (_event: any) {
@@ -85,5 +88,6 @@ window.onpopstate = function (_event: any) {
}
export {
- versionInfo
+ versionInfo,
+ buildRenderEnvironment
}
diff --git a/src/layout.ts b/src/layout.ts
new file mode 100644
index 00000000..6c060fbd
--- /dev/null
+++ b/src/layout.ts
@@ -0,0 +1,107 @@
+/* generated by AI - see readme for details*/
+import type { LayoutMode, LayoutPreference } from 'pane-registry'
+
+const LAYOUT_STORAGE_KEY = 'mashlib-layout'
+const MOBILE_BREAKPOINT_PX = 768
+
+const getStoredLayoutPreference = (): LayoutPreference => {
+ const storedLayout = localStorage.getItem(LAYOUT_STORAGE_KEY)
+
+ if (storedLayout === 'mobile' || storedLayout === 'desktop' || storedLayout === 'auto') {
+ return storedLayout
+ }
+
+ return 'auto'
+}
+
+const resolveAutomaticLayout = (): LayoutMode => {
+ return window.innerWidth <= MOBILE_BREAKPOINT_PX ? 'mobile' : 'desktop'
+}
+
+const applyLayoutAttributes = (layout: LayoutMode, preference: LayoutPreference) => {
+ const root = document.documentElement
+ const inputMode = window.matchMedia('(pointer: coarse)').matches ? 'touch' : 'pointer'
+
+ root.setAttribute('data-layout', layout)
+ root.setAttribute('data-layout-preference', preference)
+ root.setAttribute('data-input-mode', inputMode)
+ root.style.setProperty('--app-height', `${window.innerHeight}px`)
+
+ window.dispatchEvent(new CustomEvent('mashlib:layoutchange', {
+ detail: {
+ inputMode,
+ layout,
+ preference,
+ viewport: {
+ height: window.innerHeight,
+ width: window.innerWidth
+ }
+ }
+ }))
+}
+
+const updateLayout = (preference: LayoutPreference = getStoredLayoutPreference()): LayoutMode => {
+ const layout = preference === 'auto' ? resolveAutomaticLayout() : preference
+ applyLayoutAttributes(layout, preference)
+ return layout
+}
+
+const setLayoutPreference = (preference: LayoutPreference): LayoutMode => {
+ if (preference === 'auto') {
+ localStorage.removeItem(LAYOUT_STORAGE_KEY)
+ } else {
+ localStorage.setItem(LAYOUT_STORAGE_KEY, preference)
+ }
+
+ return updateLayout(preference)
+}
+
+const getLayoutPreference = (): LayoutPreference => {
+ return getStoredLayoutPreference()
+}
+
+const getLayoutMode = (): LayoutMode => {
+ return (document.documentElement.getAttribute('data-layout') as LayoutMode) || resolveAutomaticLayout()
+}
+
+const initializeLayout = () => {
+ let resizeFrame = 0
+ const syncLayout = () => {
+ updateLayout()
+ }
+
+ const onResize = () => {
+ if (resizeFrame) {
+ window.cancelAnimationFrame(resizeFrame)
+ }
+
+ resizeFrame = window.requestAnimationFrame(() => {
+ resizeFrame = 0
+ syncLayout()
+ })
+ }
+
+ syncLayout()
+ window.addEventListener('resize', onResize)
+
+ window.matchMedia('(pointer: coarse)').addEventListener('change', syncLayout)
+ window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT_PX}px)`).addEventListener('change', syncLayout)
+}
+
+const getInputMode = (): 'touch' | 'pointer' => {
+ return window.matchMedia('(pointer: coarse)').matches ? 'touch' : 'pointer'
+}
+
+const getViewport = () => ({
+ width: window.innerWidth,
+ height: window.innerHeight
+})
+
+export const layout = {
+ get: getLayoutMode,
+ getInputMode,
+ getPreference: getLayoutPreference,
+ getViewport,
+ init: initializeLayout,
+ set: setLayoutPreference
+}
diff --git a/src/styles/mash-utilities.css b/src/styles/mash-utilities.css
index fd31ed48..540229eb 100644
--- a/src/styles/mash-utilities.css
+++ b/src/styles/mash-utilities.css
@@ -67,6 +67,47 @@
outline: none;
}
+/* Skip links utility */
+
+/* ── Skip link ── */
+.skip-link {
+ position: absolute;
+ top: -40px; /* was -100% */
+ left: 6px; /* was 0 */
+ z-index: 1000;
+ padding: var(--spacing-sm) var(--spacing-md); /* was padding: 0.5rem 1rem; */
+ border-radius: var(--border-radius-base); /* new */
+ background: var(--color-primary); /* was background: var( --color-info-bg); */
+ color: white; /* was var(--color-text); */
+ text-decoration: none;
+ font-weight: var(--font-weight-bold, 600);
+ display: none;
+ font-size: var(--font-size-base); /* new */
+ line-height: 1; /* new */
+}
+
+.skip-link:focus {
+ top: 6px; /* was top: 0; */
+ display: none;
+ outline: 2px solid white; /* new */
+ outline-offset: 2px; /* new */
+}
+
+.skip-links a {
+ position: absolute;
+ left: 6px;
+ top: 6px;
+ padding: var(--spacing-sm, 0.938rem);
+ background: var(--color-primary, #7C4DFF);
+ color: white;
+ text-decoration: none;
+ border-radius: var(--border-radius-base, 0.3125rem);
+}
+
+.skip-links a:focus {
+ top: 6px;
+}
+
/* ARIA live regions - for dynamic content announcements */
.live-region {
position: absolute;
@@ -129,6 +170,7 @@
.flex-column-center {
display: flex;
flex-direction: column;
+ justify-content: center;
align-items: center;
}
@@ -144,6 +186,19 @@
.flex-1 {
flex: 1;
}
+.inline-flex-column {
+ display: inline-flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.inline-flex-row {
+ display: inline-flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+}
.justify-start {
justify-content: flex-start;
@@ -178,84 +233,86 @@
=========================================== */
/* Gap utilities */
-.gap-xs { gap: var(--spacing-xs); }
-.gap-sm { gap: var(--spacing-sm); }
-.gap-md { gap: var(--spacing-md); }
-.gap-lg { gap: var(--spacing-lg); }
-.gap-xl { gap: var(--spacing-xl); }
+.gap-xxs { gap: var(--spacing-xxs, 0.3125rem); } /* 5px */
+.gap-2xs { gap: var(--spacing-2xs, 0.625rem); } /* 10px new design uses this */
+.gap-xs { gap: var(--spacing-xs, 0.75rem); }
+.gap-sm { gap: var(--spacing-sm, 0.938rem); }
+.gap-md { gap: var(--spacing-md, 1.25rem); }
+.gap-lg { gap: var(--spacing-lg, 1.5625rem); } /* 25px */
+.gap-xl { gap: var(--spacing-xl, 2rem); }
/* Margin top */
.mt-0 { margin-top: 0; }
-.mt-xs { margin-top: var(--spacing-xs); }
-.mt-sm { margin-top: var(--spacing-sm); }
-.mt-md { margin-top: var(--spacing-md); }
-.mt-lg { margin-top: var(--spacing-lg); }
-.mt-xl { margin-top: var(--spacing-xl); }
+.mt-xs { margin-top: var(--spacing-xs, 0.75rem); }
+.mt-sm { margin-top: var(--spacing-sm, 0.938rem); }
+.mt-md { margin-top: var(--spacing-md, 1.25rem); }
+.mt-lg { margin-top: var(--spacing-lg, 1.5625rem); }
+.mt-xl { margin-top: var(--spacing-xl, 2rem); }
/* Margin bottom */
.mb-0 { margin-bottom: 0; }
-.mb-xs { margin-bottom: var(--spacing-xs); }
-.mb-sm { margin-bottom: var(--spacing-sm); }
-.mb-md { margin-bottom: var(--spacing-md); }
-.mb-lg { margin-bottom: var(--spacing-lg); }
-.mb-xl { margin-bottom: var(--spacing-xl); }
+.mb-xs { margin-bottom: var(--spacing-xs, 0.75rem); }
+.mb-sm { margin-bottom: var(--spacing-sm, 0.938rem); }
+.mb-md { margin-bottom: var(--spacing-md, 1.25rem); }
+.mb-lg { margin-bottom: var(--spacing-lg, 1.5625rem); }
+.mb-xl { margin-bottom: var(--spacing-xl, 2rem); }
/* Margin left */
.ml-0 { margin-left: 0; }
-.ml-xs { margin-left: var(--spacing-xs); }
-.ml-sm { margin-left: var(--spacing-sm); }
-.ml-md { margin-left: var(--spacing-md); }
-.ml-lg { margin-left: var(--spacing-lg); }
+.ml-xs { margin-left: var(--spacing-xs, 0.75rem); }
+.ml-sm { margin-left: var(--spacing-sm, 0.938rem); }
+.ml-md { margin-left: var(--spacing-md, 1.25rem); }
+.ml-lg { margin-left: var(--spacing-lg, 1.5625rem); }
/* Margin right */
.mr-0 { margin-right: 0; }
-.mr-xs { margin-right: var(--spacing-xs); }
-.mr-sm { margin-right: var(--spacing-sm); }
-.mr-md { margin-right: var(--spacing-md); }
-.mr-lg { margin-right: var(--spacing-lg); }
+.mr-xs { margin-right: var(--spacing-xs, 0.75rem); }
+.mr-sm { margin-right: var(--spacing-sm, 0.938rem); }
+.mr-md { margin-right: var(--spacing-md, 1.25rem); }
+.mr-lg { margin-right: var(--spacing-lg, 1.5625rem); }
/* Margin horizontal (left + right) */
.mx-auto { margin-left: auto; margin-right: auto; }
-.mx-xs { margin-left: var(--spacing-xs); margin-right: var(--spacing-xs); }
-.mx-sm { margin-left: var(--spacing-sm); margin-right: var(--spacing-sm); }
-.mx-md { margin-left: var(--spacing-md); margin-right: var(--spacing-md); }
+.mx-xs { margin-left: var(--spacing-xs, 0.75rem); margin-right: var(--spacing-xs, 0.75rem); }
+.mx-sm { margin-left: var(--spacing-sm, 0.938rem); margin-right: var(--spacing-sm, 0.938rem); }
+.mx-md { margin-left: var(--spacing-md, 1.25rem); margin-right: var(--spacing-md, 1.25rem); }
/* Margin vertical (top + bottom) */
-.my-xs { margin-top: var(--spacing-xs); margin-bottom: var(--spacing-xs); }
-.my-sm { margin-top: var(--spacing-sm); margin-bottom: var(--spacing-sm); }
-.my-md { margin-top: var(--spacing-md); margin-bottom: var(--spacing-md); }
+.my-xs { margin-top: var(--spacing-xs, 0.75rem); margin-bottom: var(--spacing-xs, 0.75rem); }
+.my-sm { margin-top: var(--spacing-sm, 0.938rem); margin-bottom: var(--spacing-sm, 0.938rem); }
+.my-md { margin-top: var(--spacing-md, 1.25rem); margin-bottom: var(--spacing-md, 1.25rem); }
/* Padding */
.p-0 { padding: 0; }
-.p-xs { padding: var(--spacing-xs); }
-.p-sm { padding: var(--spacing-sm); }
-.p-md { padding: var(--spacing-md); }
-.p-lg { padding: var(--spacing-lg); }
-.p-xl { padding: var(--spacing-xl); }
+.p-xs { padding: var(--spacing-xs, 0.75rem); }
+.p-sm { padding: var(--spacing-sm, 0.938rem); }
+.p-md { padding: var(--spacing-md, 1.25rem); }
+.p-lg { padding: var(--spacing-lg, 1.5625rem); }
+.p-xl { padding: var(--spacing-xl, 2rem); }
/* Padding top */
-.pt-xs { padding-top: var(--spacing-xs); }
-.pt-sm { padding-top: var(--spacing-sm); }
-.pt-md { padding-top: var(--spacing-md); }
-.pt-lg { padding-top: var(--spacing-lg); }
+.pt-xs { padding-top: var(--spacing-xs, 0.75rem); }
+.pt-sm { padding-top: var(--spacing-sm, 0.938rem); }
+.pt-md { padding-top: var(--spacing-md, 1.25rem); }
+.pt-lg { padding-top: var(--spacing-lg, 1.5625rem); }
/* Padding bottom */
-.pb-xs { padding-bottom: var(--spacing-xs); }
-.pb-sm { padding-bottom: var(--spacing-sm); }
-.pb-md { padding-bottom: var(--spacing-md); }
-.pb-lg { padding-bottom: var(--spacing-lg); }
+.pb-xs { padding-bottom: var(--spacing-xs, 0.75rem); }
+.pb-sm { padding-bottom: var(--spacing-sm, 0.938rem); }
+.pb-md { padding-bottom: var(--spacing-md, 1.25rem); }
+.pb-lg { padding-bottom: var(--spacing-lg, 1.5625rem); }
/* Padding horizontal */
-.px-xs { padding-left: var(--spacing-xs); padding-right: var(--spacing-xs); }
-.px-sm { padding-left: var(--spacing-sm); padding-right: var(--spacing-sm); }
-.px-md { padding-left: var(--spacing-md); padding-right: var(--spacing-md); }
-.px-lg { padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); }
+.px-xs { padding-left: var(--spacing-xs, 0.75rem); padding-right: var(--spacing-xs, 0.75rem); }
+.px-sm { padding-left: var(--spacing-sm, 0.938rem); padding-right: var(--spacing-sm, 0.938rem); }
+.px-md { padding-left: var(--spacing-md, 1.25rem); padding-right: var(--spacing-md, 1.25rem); }
+.px-lg { padding-left: var(--spacing-lg, 1.5625rem); padding-right: var(--spacing-lg, 1.5625rem); }
/* Padding vertical */
-.py-xs { padding-top: var(--spacing-xs); padding-bottom: var(--spacing-xs); }
-.py-sm { padding-top: var(--spacing-sm); padding-bottom: var(--spacing-sm); }
-.py-md { padding-top: var(--spacing-md); padding-bottom: var(--spacing-md); }
-.py-lg { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); }
+.py-xs { padding-top: var(--spacing-xs, 0.75rem); padding-bottom: var(--spacing-xs, 0.75rem); }
+.py-sm { padding-top: var(--spacing-sm, 0.938rem); padding-bottom: var(--spacing-sm, 0.938rem); }
+.py-md { padding-top: var(--spacing-md, 1.25rem); padding-bottom: var(--spacing-md, 1.25rem); }
+.py-lg { padding-top: var(--spacing-lg, 1.5625rem); padding-bottom: var(--spacing-lg, 1.5625rem); }
/* ===========================================
TEXT UTILITIES
@@ -275,18 +332,27 @@
.text-normal { font-weight: var(--font-weight-normal); }
.text-sm { font-size: var(--font-size-sm); }
-.text-lg { font-size: var(--font-size-lg); }
+.text-lg-old { font-size: var(--font-size-lg); }
.text-xl { font-size: var(--font-size-xl); }
+.text-lg {
+ font-size: var(--font-size-lg, 1.125rem);
+ line-height: var(--line-height-base, 1.5);
+}
+
+.text-small {
+ font-size: max(var(--font-size-sm, 0.875rem), var(--min-font-size, 14px));
+ line-height: var(--min-line-height, 1.4);
+}
/* Text that respects accessibility guidelines */
.text-readable {
- line-height: var(--line-height-base);
- max-width: var(--max-width-readable);
+ line-height: var(--line-height-base, 1.5);
+ max-width: var(--max-width-readable, 65ch);
}
.text-scale-friendly {
- line-height: var(--line-height-base);
- max-width: var(--max-width-readable-wide);
+ line-height: var(--line-height-base, 1.5);
+ max-width: var(--max-width-readable-wide, 75ch);
}
/* Text with minimum font size safety */
@@ -318,8 +384,8 @@
/* High contrast text for accessibility */
.text-contrast-high {
- color: var(--color-text);
- font-weight: var(--font-weight-bold);
+ color: var(--color-text, #1A1A1A);
+ font-weight: var(--font-weight-bold, 600);
}
/* Better focus for text elements */
@@ -341,20 +407,21 @@
BORDER & SHADOW UTILITIES
=========================================== */
-.rounded { border-radius: var(--border-radius-full); }
-.rounded-sm { border-radius: var(--border-radius-base); }
-.rounded-lg { border-radius: var(--border-radius-lg); }
+.rounded { border-radius: var(--border-radius-full, 0.625rem); /* 10px */ }
+.rounded-sm { border-radius: var(--border-radius-base, 0.3125rem); } /* 5px */
+.rounded-md { border-radius: var(--border-radius-md, 0.5rem); } /* 8px */
+.rounded-lg { border-radius: var(--border-radius-lg, 0.75rem); } /* 12px */
.rounded-none { border-radius: 0; }
.shadow { box-shadow: var(--box-shadow); }
.shadow-sm { box-shadow: var(--box-shadow-sm); }
.shadow-none { box-shadow: none; }
-.border { border: var(--border-width-thin) solid var(--color-border); }
-.border-dark { border: var(--border-width-thin) solid var(--color-border-dark); }
-.border-light { border: var(--border-width-thin) solid var(--color-border-light); }
+.border { border: var(--border-width-thin, 0.1rem) solid var(--color-border, #E5E7EB); }
+.border-lighter { border: var(--border-width-thin, 0.1rem) solid var(--color-border-lighter, #E2E8F0); }
+.border-dark { border: var(--border-width-thin, 0.1rem) solid var(--color-border-dark); }
+.border-light { border: var(--border-width-thin, 0.1rem) solid var(--color-border-light); }
.border-none { border: none; }
-
/* ===========================================
BACKGROUND UTILITIES
=========================================== */
@@ -449,6 +516,47 @@
cursor: not-allowed;
}
+/* Light button used for cancel in new design */
+.btn-light {
+ min-height: var(--min-touch-target);
+ padding: var(--spacing-sm) var(--spacing-md);
+ border: var(--border-width-thin) solid var(--slate-400, #90A1B9);
+ background: var(--white, #FFF);
+ border-radius: var(--border-radius-base); /* 5px */
+ font-weight: var(--font-weight-bold);
+ cursor: pointer;
+ transition: all var(--animation-duration) ease;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: var(--font-weight-bold, 600);
+ color: var(--gray-800, #1E2939);
+ font-size: var(--font-size-lg, 1.125rem); /* 18px */
+}
+
+.btn-light:hover {
+ background: color-mix(in srgb, var(--color-primary) 85%, black);
+ box-shadow: 0 2px 4px var(--color-primary-alpha);
+}
+
+.btn-light:active {
+ box-shadow: 0 1px 2px var(--color-primary-alpha);
+}
+
+.btn-light:focus,
+.btn-light:focus-visible {
+ outline: var(--focus-indicator-width) solid var(--color-primary);
+ outline-offset: var(--outline-offset-sm);
+ box-shadow: 0 0 0 var(--focus-ring-width) var(--color-background), 0 0 0 calc(var(--focus-ring-width) + var(--focus-indicator-width)) var(--color-primary-alpha);
+}
+
+.btn-light:disabled {
+ opacity: var(--opacity-disabled);
+ cursor: not-allowed;
+ transform: none;
+}
+
/* Outline button */
.btn-outline {
min-height: var(--min-touch-target);
@@ -496,6 +604,37 @@
z-index: 1;
}
+/* ===========================================
+ INPUT UTILITIES
+ =========================================== */
+
+.input {
+ border-radius: var(--border-radius-base, 0.3125rem);
+ border: 1px solid var(--gray-400, #99A1AF);
+ background: var(--white, #FFF);
+ color: var(--gray-900, #101828);
+ font-size: var(--font-size-sm, 0.875rem);
+ font-weight: var(--font-weight-medium, 500);
+ padding: var(--spacing-2xs, 0.625rem);
+}
+
+.input--checkbox {
+ display: inline-block;
+ width: 1rem;
+ height: 1rem;
+ min-height: 1rem;
+ padding: 0;
+ border: 1px solid var(--gray-400, #99A1AF);
+ border-radius: var(--border-radius-sm, 0.25rem);
+ align-self: auto;
+}
+
+.label {
+ color: var(--gray-600, #4A5565);
+ font-size: var(--font-size-sm, 0.875rem);
+ font-weight: var(--font-weight-regular, 400);
+}
+
/* ===========================================
CARD & SECTION COMPONENTS
=========================================== */
diff --git a/src/styles/mash.css b/src/styles/mash.css
index 4a331aaf..db26fa29 100644
--- a/src/styles/mash.css
+++ b/src/styles/mash.css
@@ -5,30 +5,193 @@
@import url("./themes.css");
@import url("./mash-utilities.css");
-/* I couldn't find the code for the collapse image. this is a quick work around
-to make the collapsing easier to use ( the triangles dont jump 20 pixels). ~cm2
-*/
-img[title="Hide details."] {
- float: left;
+:root {
+ --app-header-height: 4.5rem;
}
html, body {
margin: 0;
padding: 0;
+ min-height: 100%;
font-family: var(--font-family-base);
font-size: var(--font-size-base);
line-height: var(--line-height-base);
background: var(--color-background);
- color: var(--color-text);
+ color: var(--color-text-primary); /* new design change, used to be --color-text */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
+ display: flex;
+ flex-direction: column;
+ min-height: 100dvh; /* dvh = dynamic viewport for mobile chrome */
+}
+
+#PageHeader,
+#mainSolidUiHeader {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 110;
+ background: var(--color-header-row-bg);
+}
+
+#mainSolidUiHeader {
+ display: block;
+}
+
+#MainContent {
+ flex: 1 1 auto;
+ min-height: 0;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch; /* smooth iOS scroll */
+ container-type: inline-size; /* enable @container queries */
+ display: flex;
+}
+
+#PageFooter {
+ flex-shrink: 0;
+}
+
+
+/* ── New responsive app nav layout ── */
+.app-shell {
+ display: flex;
+ min-height: calc(100vh - var(--app-header-height) - 2.5rem); /* header + footer space */
+ margin-top: var(--app-header-height);
+}
+
+.app-nav {
+ width: min(280px, 85vw);
+ max-width: 280px;
+ width: 240px;
+ flex-shrink: 0;
+ background: var(--color-background);
+ border-right: 1px solid var(--color-border);
+ padding: 0.75rem;
+ box-sizing: border-box;
+ overflow-y: auto;
+ height: calc(100vh - var(--app-header-height)); /* header height */
+ transition: transform 0.25s ease-in-out;
+}
+
+.app-view {
+ flex: 1;
+ padding: 1rem;
+ min-width: 0;
+}
+
+@media (max-width: 768px) {
+ #MainContent {
+ margin-left: 0;
+ }
+
+ .app-shell {
+ flex-direction: column;
+ }
+
+ .app-nav {
+ position: fixed;
+ top: var(--app-header-height);
+ left: 0;
+ bottom: 0;
+ z-index: 110;
+ width: min(80vw, 320px);
+ background: var(--color-background);
+ border-right: 1px solid var(--color-border);
+ padding: 0.75rem;
+ }
+
+ .app-nav.desktop {
+ display: none;
+ }
+
+ .app-view {
+ padding: 1rem 0.75rem;
+ }
+
+ #MenuToggleBtn {
+ display: inline-flex;
+ }
+}
+@media (min-width: 769px) {
+
+ #MenuToggleBtn {
+ display: none;
+ }
+
+ #NavMenu {
+ position: relative;
+ transform: none !important;
+ top: auto;
+ left: auto;
+ height: auto;
+ }
+}
+
+/* HTML improvements - profile pane */
+/* Semantic HTML5 improvements */
+article, aside, section {
+ display: block;
+}
+
+header {
+ margin-bottom: var(--spacing-md);
+}
+
+nav {
+ display: block;
+}
+
+nav ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+/* end HTML improvements - profile pane */
+/* ── Pane icon tray (responsive) ── */
+.pane-icon-tray {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ padding: 0.25rem 0;
+ overflow-x: auto; /* horizontal scroll on very narrow screens */
+ -webkit-overflow-scrolling: touch;
+}
+
+.pane-icon-tray img {
+ width: 2rem;
+ height: 2rem;
+ border-radius: 0.4rem;
+ cursor: pointer;
+ transition: outline 0.15s;
+}
+.pane-icon-tray img:focus-visible {
+ outline: 2px solid var(--color-border-accent);
+ outline-offset: 2px;
+}
+
+/* ── Subject blocks ── */
+.subject-block {
+ border-bottom: 1px solid var(--color-border-pale);
+ padding-block: 0.75rem;
+}
+
+/* ── Responsive breakpoints via container queries ── */
+@container (max-width: 40rem) {
+ .pane-icon-tray {
+ justify-content: center;
+ }
+ .subject-block h1 {
+ font-size: 1.15rem;
+ }
}
/* Improved heading hierarchy */
h1, h2, h3, h4, h5, h6 {
- color: var(--color-primary);
- font-weight: 600;
+ /* color: var(--color-primary); new design no longer has purple headings. */
+ font-weight: var(--font-weight-bold, 600);
line-height: var(--line-height-tight);
margin-top: 0;
margin-bottom: var(--spacing-sm);
@@ -36,9 +199,9 @@ h1, h2, h3, h4, h5, h6 {
h1 { font-size: 2em; } /* 32px */
h2 { font-size: 1.5em; } /* 24px */
-h3 { font-size: 1.25em; } /* 20px */
-h4 { font-size: 1.125em; }/* 18px */
-h5, h6 { font-size: 1em; }/* 16px */
+h3 { font-size: var(--font-size-xl, 1.375rem); } /* New design: 22px was 20px*/
+h4 { font-size: var(--font-size-lg, 1.125rem); }/* 18px */
+h5, h6 { font-size: var(--font-size-base, 1rem); }/* 16px */
/* Better paragraph spacing */
p {
@@ -59,21 +222,6 @@ a:hover, a:focus {
text-decoration-thickness: 0.125em;
}
-/* Main page elements in databrowser.html */
-#PageBody {
- display: flex;
- flex-direction: column;
-}
-#DummyUUID {
- flex: 1 0 auto;
-}
-#PageHeader {
- flex-shrink: 0;
-}
-#PageFooter {
- flex-shrink: 0;
-}
-
.warning {
color: var(--color-warning);
}
@@ -909,11 +1057,24 @@ table.viewTable tr {
border-style: none;
}
+/* Improved link accessibility from profile-pane */
+a {
+ color: var(--color-primary);
+ text-decoration: underline;
+ text-underline-offset: 0.125em;
+ text-decoration-thickness: 0.0625em;
+}
+
+a:hover, a:focus {
+ text-decoration-thickness: 0.125em;
+}
+
+/* OLD
a {
color: var(--color-text-link);
text-decoration: none;
cursor: pointer;
-}
+} */
a.inactive {
background-color: var(--color-tab-inactive-bg);
border-right: solid var(--color-tab-inactive-border) 0.1em;
@@ -1408,3 +1569,230 @@ End of styles for tableViewPane
-moz-box-shadow: $x-axis $y-axis $blur $color;
-o-box-shadow: $x-axis $y-axis $blur $color;
}
+
+/* Accessibility: COPIED FROM PROFILE-PANE */
+/* Support for larger text preferences */
+@media (prefers-reduced-motion: no-preference) {
+ html {
+ scroll-behavior: smooth;
+ }
+}
+
+/* Accessibility: Respect user motion preferences */
+@media (prefers-reduced-motion: reduce) {
+ *, *::before, *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
+}
+
+/* Accessibility: High contrast mode support */
+@media (prefers-contrast: high) {
+ :root {
+ --color-border-pale: #000;
+ --box-shadow: 0 2px 4px rgba(0,0,0,0.5);
+ --box-shadow-sm: 0 1px 2px rgba(0,0,0,0.3);
+ }
+}
+
+/* Accessibility: Improved focus management */
+/* SAM wondering about the outline, it's affecting the
+cancel button. Maybe should just be for inputs ? */
+:focus-visible {
+ outline: var(--focus-ring-width) solid var(--color-primary);
+ outline-offset: 2px;
+ box-shadow: 0 0 0 1px var(--color-background);
+ border-radius: 2px; /* new */
+ transition: none; /* new Remove transitions on focus for immediate feedback */
+}
+
+/* Improve focus management for interactive elements */
+[role="button"]:focus,
+[role="link"]:focus,
+button:focus,
+a:focus {
+ outline: 2px solid var(--color-primary);
+ outline-offset: 2px;
+ box-shadow: 0 0 0 1px var(--color-background);
+}
+/* Enhanced error message accessibility */
+[role="alert"] {
+ padding: var(--spacing-md);
+ border: 2px solid var(--color-error);
+ border-radius: var(--border-radius-base);
+ background-color: rgba(176, 0, 32, 0.1);
+ margin: var(--spacing-md) 0;
+}
+
+/* Success message styling */
+[role="status"] {
+ padding: var(--spacing-md);
+ border: 2px solid var(--color-success);
+ border-radius: var(--border-radius-base);
+ background-color: rgba(0, 200, 83, 0.1);
+ margin: var(--spacing-md) 0;
+}
+
+/* Enhanced table accessibility */
+table {
+ border-collapse: collapse;
+ width: 100%;
+}
+
+th {
+ background-color: var(--color-section-bg);
+ font-weight: 600;
+ text-align: left;
+ padding: var(--spacing-sm);
+}
+
+td {
+ padding: var(--spacing-sm);
+}
+
+/* Focus trap for modals */
+.focus-trap {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 9999;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+/* Enhanced button accessibility */
+button, [role="button"] {
+ cursor: pointer;
+ border: none;
+ border-radius: var(--border-radius-base);
+ padding: var(--spacing-sm) var(--spacing-md);
+ min-height: var(--min-touch-target);
+ min-width: var(--min-touch-target);
+ font-size: var(--font-size-base);
+ font-weight: 600;
+ transition: all var(--animation-duration) ease;
+ position: relative;
+}
+
+button:disabled, [role="button"][aria-disabled="true"] {
+ opacity: 0.6;
+ cursor: not-allowed;
+ pointer-events: none;
+}
+
+/* Loading indicator accessibility */
+.loading-spinner {
+ width: 40px;
+ height: 40px;
+ border: 3px solid var(--color-border-pale);
+ border-top: 3px solid var(--color-primary);
+ border-radius: 50%;
+ animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .loading-spinner {
+ animation: none;
+ border-top-color: var(--color-primary);
+ }
+}
+/* copied from profile-pane */
+@media (prefers-reduced-motion: reduce) {
+ *, *::before, *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
+}
+@media (prefers-contrast: high) {
+ :root {
+ --color-border-pale: #000;
+ --box-shadow: 0 2px 4px rgba(0,0,0,0.5);
+ --box-shadow-sm: 0 1px 2px rgba(0,0,0,0.3);
+ }
+}
+/* end of media copied from PROFILE-PANE */
+/* focus copied from profile-pane */
+:focus {
+ outline: 2px solid var(--color-primary);
+ outline-offset: 1px;
+ box-shadow: 0 0 0 1px var(--color-background);
+}
+
+/* Enhanced keyboard navigation */
+*:focus-visible {
+ outline: var(--focus-indicator-width) solid var(--color-primary);
+ outline-offset: 2px;
+ box-shadow: 0 0 0 1px var(--color-background), 0 0 0 4px rgba(124, 77, 255, 0.2);
+ border-radius: 2px;
+ transition: none; /* Remove transitions on focus for immediate feedback */
+}
+
+:focus-visible {
+ outline: var(--focus-ring-width, 2px) solid var(--color-primary, #7C4DFF);
+ outline-offset: 2px;
+ box-shadow: 0 0 0 1px var(--color-background, #F8F9FB);
+}
+
+:focus:not(:focus-visible) {
+ outline: none;
+ box-shadow: none; /* new */
+}
+
+/* Prevent labels from appearing focusable to keyboard users. */
+label:focus,
+label:focus-visible {
+ outline: none !important;
+ box-shadow: none !important;
+}
+
+/* end of focus copied from profile-pane */
+
+/* end of accessibility from PROFILE-PANE */
+
+/* Generated by AI */
+@media screen and (max-width: 768px) {
+ #PageHeader,
+ #PageFooter {
+ width: 100%;
+ }
+
+ img.outlineImage,
+ img.pic,
+ img.foafPic {
+ height: auto;
+ max-width: 100%;
+ }
+
+ div.description,
+ div.premises,
+ div.justification,
+ div.mildNotice {
+ box-sizing: border-box;
+ margin-left: 0;
+ margin-right: 0;
+ width: 100%;
+ }
+}
+
+html[data-layout="mobile"] #PageBody {
+ min-height: var(--app-height, 100dvh);
+}
+
+html[data-layout="mobile"] #MainContent {
+ overscroll-behavior-x: contain;
+}
+
+/* END of Generated by AI */
\ No newline at end of file
diff --git a/src/styles/themes/dark.css b/src/styles/themes/dark.css
index de01bb84..f55217bb 100644
--- a/src/styles/themes/dark.css
+++ b/src/styles/themes/dark.css
@@ -91,6 +91,9 @@ html[data-theme="dark"] {
--color-photo-tag-highlight-border: #5a6b4a;
--color-photo-thumb-border: #444;
+ /* Header */
+ --color-header-row-bg: #332746;
+
/* Menu and Tab Colors */
--color-menu-bg: #2a2a2a;
--color-menu-item-text: #c4b4d4;
diff --git a/src/styles/themes/light.css b/src/styles/themes/light.css
index 09c5171a..eb9e2249 100644
--- a/src/styles/themes/light.css
+++ b/src/styles/themes/light.css
@@ -4,12 +4,36 @@
*/
:root {
+ /* New Design: Colors (possibly change to primary secondary etc for now add here */
+ /* Adding used for comment so we can decide later */
+ --gray-100: #F3F4F6;
+ --gray-200: #E5E7EB; /* Used for: border of sections */
+ --gray-400: #99A1AF; /* Used for: input borders */
+ --gray-500: #6A7282; /* Used for: text */
+ --gray-600: #4A5565; /* Used for: text */
+ --gray-700: #364153; /* Used for: text */
+ --gray-800: #1E2939; /* Used for: text */
+ --gray-900: #101828; /* Used for: text */
+ --slate-200: #E2E8F0; /* Used for: border of sections */
+ --slate-400: #90A1B9; /* Used for: edit dialog cancel */
+ --slate-800: #1D293D; /* Used for: text */
+ --slate-900: #0F172B; /* Used for: text */
+ --black: #000; /* Used for: text heading */
+ --white: #FFF;
+
/* Background and Text */
- --color-background: white;
+ --color-background-old: #FFFFFF; /* White */
+ --color-background: #F8F9FB; /* Light grey for overall background */
--color-background-row-default: white;
--color-background-row-alternate: #f0f0f0;
--color-text: #1A1A1A;
- --color-text-secondary: #666;
+ --color-text-primary: var(--gray-700, #364153); /* new design */
+ --color-text-secondary-old: #666;
+ --color-text-secondary: var(--gray-600, #4A5565);
+ --color-text-heading: var(--black, #000000); /* New design uses pure black for headings */
+ --color-text-subheading: var(--gray-900, #101828); /* new design */
+ --color-text-strong: var(--slate-900, #0F172B); /* new design */
+ --color-text-strong-secondary: var(--slate-800, #1D293D); /* new design */
--color-text-light: #aaa;
--color-text-link: #3B5998;
--color-text-link-visited: #3B5998;
@@ -22,9 +46,10 @@
--color-text-brown: #440;
/* Borders */
- --color-border: #ccc;
+ --color-border: var(--gray-200, #E5E7EB); /* used to be #ccc */
+ --color-border-lighter: var(--slate-200, #E2E8F0);
--color-border-dark: #777;
- --color-border-darker: #444;
+ --color-border-darker: var(--gray-600, #4A5565); /* old #444 */
--color-border-light: #aaa;
--color-border-pale: #eee;
--color-border-accent: #88c;
@@ -93,6 +118,9 @@
--color-photo-tag-highlight-border: #DDBB99;
--color-photo-thumb-border: #CCCCCC;
+ /* Header */
+ --color-header-row-bg: #332746;
+
/* Menu and Tab Colors */
--color-menu-bg: #FFFFFF;
--color-menu-item-text: #654d6c;
@@ -122,48 +150,71 @@
/* Typography */
--font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--font-family-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
- --font-size-base: 100%;
+ --font-size-base-old: 100%;
+ --font-size-base: 1rem; /* 16px */
--font-size-strong: 120%;
--font-weight-normal: normal;
- --font-weight-bold: bold;
+ --font-weight-md: 500; /* New design uses 500 for body text was normal */
+ --font-weight-bold-old: bold;
+ --font-weight-bold: 600; /* New design uses 600 for headings was 700 */
--line-height-base: 1.5;
--line-height-tight: 1.4;
--line-height-loose: 1.6;
--letter-spacing-wide: 0.025em;
- --font-size-sm: 0.875rem;
- --font-size-lg: 1.125rem;
- --font-size-xl: 1.25rem;
-
+ --font-size-xs: 0.813rem; /* 13px */
+ --font-size-sm: 0.875rem; /* 14px */
+ --font-size-md: 1rem; /* 16px */
+ --font-size-lg: 1.125rem; /* 18px */
+ --font-size-xl-old: 1.25rem; /* 20px */
+ --font-size-xl: 1.375rem; /* 22px */
+ --font-size-xxl: 1.75rem; /* 28px */
+
/* Spacing and Sizing */
--spacing-tiny: 0.05em;
--spacing-small: 0.1em;
- --spacing-xxxs: 0.2em;
- --spacing-xxs: 0.3em;
- --spacing-xs: 0.5rem;
- --spacing-sm: 0.75em;
- --spacing-btn: 0.7em;
- --spacing-base: 0.5em;
- --spacing-md: 1em;
- --spacing-lg: 1.5em;
- --spacing-xl: 2em;
- --spacing-2xl: 3em;
- --border-width-xthin: 0.05em;
- --border-width-sm: 0.1em;
- --border-width-thin: 1px;
+ --spacing-xxxs: 0.2rem; /* was em */
+ --spacing-xxs-old: 0.3rem; /* was em */
+ --spacing-xxs: 0.3125rem; /* 5px */
+ --spacing-2xs: 0.625rem; /* 10px new design uses this */
+ --spacing-xs-old: 0.5rem;
+ --spacing-xs: 0.75rem; /* 12px new design uses this */
+ --spacing-sm-old: 0.75rem; /* was em */
+ --spacing-sm: 0.938rem; /* 15px new design uses this */
+ --spacing-btn: 0.7rem; /* was em */
+ --spacing-base: 0.5rem; /* was em */
+ --spacing-md-old: 1rem; /* was em */
+ --spacing-md: 1.25rem; /* 20px new design uses this */
+ --spacing-lg-old: 1.5rem; /* was em */
+ --spacing-lg: 1.5625rem; /* 25px new design uses this */
+ --spacing-xl: 2rem; /* was em */
+ --spacing-1xl: 2.5rem; /* 40px new design uses this */
+ --spacing-2xl: 3rem; /* was em */
+ --border-width-xthin: 0.05rem; /* was em */
+ --border-width-thin-old: 1px;
+ --border-width-thin: 0.1rem; /* changed from 1px */
+ --border-width-sm: 0.1rem; /* was em */
--border-width-medium: 2px;
--border-width-bold: 5px;
- --border-radius-xs: 0.1em;
- --border-radius-sm: 0.2em;
- --border-radius-base: 0.5em;
- --border-radius-lg: 0.75em;
- --border-radius-full: 1em;
+
+
+ --border-radius-xs: 0.1rem; /* 2px Extra small border radius was em */
+ --border-radius-sm: 0.2rem; /* 4px Small border radius was em */
+ --border-radius-base-old: 0.5em;
+ --border-radius-base: 0.3125rem; /* 5px Base border radius */
+ --border-radius-md: 0.5rem; /* 8px Medium border radius */
+ --border-radius-lg: 0.75rem; /* 12px Large border radius was em */
+ --border-radius-full-old: 1em;
+ --border-radius-full: 0.625rem; /* 10px */
+
/* icons */
- --icon-xxs: 1em;
- --icon-xs: 1.5em;
- --icon-sm: 1.8em;
- --icon-base: 2em;
- --icon-xl: 3.1em;
+ --icon-xxxs: 0.75rem; /* 12px new design uses this */
+ --icon-xxs: 1rem; /* 16px new design uses this */
+ --icon-xs: 1.5rem; /* 24px new design uses this */
+ --icon-sm: 1.8rem; /* 28px new design uses this */
+ --icon-base: 2rem; /* 32px new design uses this */
+ --icon-md: 2.5rem; /* 40px new design uses this */
+ --icon-xl: 3.1rem; /* 50px new design uses this */
/* Primary/Accent Colors */
--color-primary: #7C4DFF;
@@ -175,8 +226,10 @@
--color-success: #00C853;
/* Card/Section Backgrounds */
- --color-card-bg: #FFFFFF;
- --color-section-bg: #F5F5F5;
+ --color-section-bg-old: #F5F5F5; /* Light grey for outer sections */
+ --color-section-bg: #FFFFFF; /* White for outer sections to match new design */
+
+ --color-card-bg: #FFFFFF; /* White for inner cards */
--color-zebra-stripe: rgba(0, 0, 0, 0.02);
--color-hover-bg: rgba(0, 0, 0, 0.05);
diff --git a/src/theme.ts b/src/theme.ts
new file mode 100644
index 00000000..fe2052b4
--- /dev/null
+++ b/src/theme.ts
@@ -0,0 +1,46 @@
+import type { ThemeMode } from 'pane-registry'
+
+const THEME_STORAGE_KEY = 'mashlib-theme'
+
+const applyTheme = (theme: ThemeMode) => {
+ if (theme === 'dark') {
+ document.documentElement.setAttribute('data-theme', 'dark')
+ } else {
+ document.documentElement.removeAttribute('data-theme')
+ }
+
+ window.dispatchEvent(new CustomEvent('mashlib:themechange', {
+ detail: { theme }
+ }))
+}
+
+const initializeTheme = () => {
+ const savedTheme = localStorage.getItem(THEME_STORAGE_KEY)
+ const prefersDark = typeof window.matchMedia === 'function'
+ ? window.matchMedia('(prefers-color-scheme: dark)').matches
+ : false
+ const theme = (
+ savedTheme === 'dark' || savedTheme === 'light'
+ ? savedTheme
+ : prefersDark
+ ? 'dark'
+ : 'light'
+ ) as ThemeMode
+
+ applyTheme(theme)
+}
+
+const setTheme = (theme: ThemeMode) => {
+ applyTheme(theme)
+ localStorage.setItem(THEME_STORAGE_KEY, theme)
+}
+
+const getTheme = (): ThemeMode => {
+ return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
+}
+
+export const theme = {
+ get: getTheme,
+ init: initializeTheme,
+ set: setTheme
+}
diff --git a/static/browse-test.html b/static/browse-test.html
index 20c8938d..7573cc14 100644
--- a/static/browse-test.html
+++ b/static/browse-test.html
@@ -2,6 +2,7 @@
+