diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index dae73a8..ae4d3b0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -75,7 +75,7 @@ jobs:
name: build
- uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 20 # for npm@latest
registry-url: 'https://registry.npmjs.org'
- name: Update npm to latest (required for OIDC)
run: npm install -g npm@latest
@@ -84,3 +84,32 @@ jobs:
- name: Publish to npm
if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]'
run: npm publish --tag latest
+
+ github-release:
+ needs: [npm-publish-latest]
+ runs-on: ubuntu-latest
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ - name: Create GitHub release with generated notes
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ TAG="v$(node -p 'require("./package.json").version')"
+
+ if gh release view "$TAG" >/dev/null 2>&1; then
+ echo "Release $TAG already exists. Skipping."
+ exit 0
+ fi
+
+ if git ls-remote --exit-code --tags origin "refs/tags/$TAG" >/dev/null 2>&1; then
+ echo "Tag $TAG already exists on origin. Creating release from existing tag."
+ gh release create "$TAG" --verify-tag --generate-notes
+ else
+ echo "Creating tag and release $TAG from commit $GITHUB_SHA."
+ gh release create "$TAG" --target "$GITHUB_SHA" --generate-notes
+ fi
diff --git a/README.md b/README.md
index c11fba8..b8d75a8 100644
--- a/README.md
+++ b/README.md
@@ -13,3 +13,11 @@ the syntax is checked before they save it back.
Once selected this pane as a view of a file, then the pen icon allows to switch to editing mode, and the check mark button allows the file to be saved back.
Editing can be aborted by the cancel(X) button.
+
+### 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.
+Example:
+* Some code was generated by the GPT-5.3-Codex model in GitHub Copilot based on the following prompt:
+* Can you refactor this code setUnedited () to use CSS instead of inline js styles
+
diff --git a/dev/index.js b/dev/index.js
index ff7974a..7bdd311 100644
--- a/dev/index.js
+++ b/dev/index.js
@@ -48,6 +48,11 @@ try {
document.getElementById('app').replaceWith(app)
} catch (err) {
console.error('Error rendering pane:', err)
- document.getElementById('app').innerHTML = `
Error: ${err.message}
`
+ const appElement = document.getElementById('app')
+ const errorParagraph = document.createElement('p')
+ errorParagraph.style.color = 'red'
+ errorParagraph.textContent = `Error: ${err.message}`
+ appElement.textContent = ''
+ appElement.appendChild(errorParagraph)
}
diff --git a/jest.config.mjs b/jest.config.mjs
index b445a4d..ba800be 100644
--- a/jest.config.mjs
+++ b/jest.config.mjs
@@ -10,6 +10,7 @@ export default {
roots: ['/src', '/test'],
moduleNameMapper: {
'^SolidLogic$': 'solid-logic',
- '^\\$rdf$': 'rdflib'
+ '^\\$rdf$': 'rdflib',
+ '\\.(css)$': '/test/__mocks__/styleMock.js'
},
}
diff --git a/package-lock.json b/package-lock.json
index 080fcfa..6e18f18 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "source-pane",
- "version": "3.0.2",
+ "version": "3.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "source-pane",
- "version": "3.0.2",
+ "version": "3.1.0",
"license": "MIT",
"devDependencies": {
"@babel/eslint-parser": "^7.28.6",
@@ -14,6 +14,7 @@
"@testing-library/dom": "^10.4.1",
"babel-loader": "^10.0.0",
"babel-plugin-inline-import": "^3.0.0",
+ "copy-webpack-plugin": "^14.0.0",
"css-loader": "^7.1.2",
"eslint": "^9.39.2",
"html-webpack-plugin": "^5.6.6",
@@ -21,17 +22,19 @@
"jest-environment-jsdom": "^30.2.0",
"jest-fetch-mock": "^3.0.3",
"node-polyfill-webpack-plugin": "^4.1.0",
+ "rdflib": "^2.3.6",
"solid-logic": "^4.0.6",
- "solid-ui": "^3.0.5",
+ "solid-ui": "^3.1.0",
"style-loader": "^3.3.3",
+ "terser-webpack-plugin": "^5.4.0",
"webpack": "^5.97.1",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.3"
},
"peerDependencies": {
"rdflib": "^2.3.6",
- "solid-logic": "^4.0.2",
- "solid-ui": "^3.0.3"
+ "solid-logic": "^4.0.6",
+ "solid-ui": "^3.1.0"
}
},
"node_modules/@asamuzakjp/css-color": {
@@ -218,9 +221,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz",
- "integrity": "sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==",
+ "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": {
@@ -309,16 +312,8 @@
"integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-wrap-function": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- },
"engines": {
"node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
@@ -431,9 +426,9 @@
}
},
"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": {
@@ -1775,6 +1770,7 @@
"version": "7.29.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
"integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -1954,8 +1950,8 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-4.2.0.tgz",
"integrity": "sha512-OGju/GYp0V72qlZ/Pd4jGEwqBwT/Za/tw+Z3AC7lgMheGqsbhTZrtc5iLz9z59G/Q53QyE2fnjHV8N9wjBpiWA==",
+ "dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"ky": "^1.7.5",
"undici": "^6.21.2"
@@ -1975,9 +1971,9 @@
}
},
"node_modules/@emnapi/core": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
- "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz",
+ "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -1987,9 +1983,9 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
- "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz",
+ "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -2156,8 +2152,8 @@
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/@frogcat/ttl2jsonld/-/ttl2jsonld-0.0.10.tgz",
"integrity": "sha512-0NLM96V3ziZkkOlhixSZiXe8CzewECVNtSj04s2hW2e65SgzQPzM12VWSovuRIy+2UJA2Bjkf9405yrty9tgcg==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"ttl2jsonld": "bin/cli.js"
}
@@ -2934,14 +2930,14 @@
}
},
"node_modules/@jsonjoy.com/fs-core": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.11.tgz",
- "integrity": "sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz",
+ "integrity": "sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.56.11",
- "@jsonjoy.com/fs-node-utils": "4.56.11",
+ "@jsonjoy.com/fs-node-builtins": "4.57.2",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
"thingies": "^2.5.0"
},
"engines": {
@@ -2956,15 +2952,15 @@
}
},
"node_modules/@jsonjoy.com/fs-fsa": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.11.tgz",
- "integrity": "sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz",
+ "integrity": "sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.11",
- "@jsonjoy.com/fs-node-builtins": "4.56.11",
- "@jsonjoy.com/fs-node-utils": "4.56.11",
+ "@jsonjoy.com/fs-core": "4.57.2",
+ "@jsonjoy.com/fs-node-builtins": "4.57.2",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
"thingies": "^2.5.0"
},
"engines": {
@@ -2979,17 +2975,17 @@
}
},
"node_modules/@jsonjoy.com/fs-node": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.11.tgz",
- "integrity": "sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz",
+ "integrity": "sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.11",
- "@jsonjoy.com/fs-node-builtins": "4.56.11",
- "@jsonjoy.com/fs-node-utils": "4.56.11",
- "@jsonjoy.com/fs-print": "4.56.11",
- "@jsonjoy.com/fs-snapshot": "4.56.11",
+ "@jsonjoy.com/fs-core": "4.57.2",
+ "@jsonjoy.com/fs-node-builtins": "4.57.2",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
+ "@jsonjoy.com/fs-print": "4.57.2",
+ "@jsonjoy.com/fs-snapshot": "4.57.2",
"glob-to-regex.js": "^1.0.0",
"thingies": "^2.5.0"
},
@@ -3005,9 +3001,9 @@
}
},
"node_modules/@jsonjoy.com/fs-node-builtins": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.11.tgz",
- "integrity": "sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz",
+ "integrity": "sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -3022,15 +3018,15 @@
}
},
"node_modules/@jsonjoy.com/fs-node-to-fsa": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.11.tgz",
- "integrity": "sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz",
+ "integrity": "sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-fsa": "4.56.11",
- "@jsonjoy.com/fs-node-builtins": "4.56.11",
- "@jsonjoy.com/fs-node-utils": "4.56.11"
+ "@jsonjoy.com/fs-fsa": "4.57.2",
+ "@jsonjoy.com/fs-node-builtins": "4.57.2",
+ "@jsonjoy.com/fs-node-utils": "4.57.2"
},
"engines": {
"node": ">=10.0"
@@ -3044,13 +3040,13 @@
}
},
"node_modules/@jsonjoy.com/fs-node-utils": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.11.tgz",
- "integrity": "sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz",
+ "integrity": "sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.56.11"
+ "@jsonjoy.com/fs-node-builtins": "4.57.2"
},
"engines": {
"node": ">=10.0"
@@ -3064,13 +3060,13 @@
}
},
"node_modules/@jsonjoy.com/fs-print": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.11.tgz",
- "integrity": "sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz",
+ "integrity": "sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-utils": "4.56.11",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
"tree-dump": "^1.1.0"
},
"engines": {
@@ -3085,14 +3081,14 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.11.tgz",
- "integrity": "sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz",
+ "integrity": "sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jsonjoy.com/buffers": "^17.65.0",
- "@jsonjoy.com/fs-node-utils": "4.56.11",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
"@jsonjoy.com/json-pack": "^17.65.0",
"@jsonjoy.com/util": "^17.65.0"
},
@@ -3319,6 +3315,23 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz",
+ "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@lit/reactive-element": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz",
+ "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.5.0"
+ }
+ },
"node_modules/@napi-rs/wasm-runtime": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
@@ -3558,8 +3571,8 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz",
"integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/node": "*"
}
@@ -3852,6 +3865,7 @@
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
@@ -3945,6 +3959,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
"version": "8.18.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
@@ -4085,9 +4106,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4102,9 +4120,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4119,9 +4134,6 @@
"ppc64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4136,9 +4148,6 @@
"riscv64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4153,9 +4162,6 @@
"riscv64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4170,9 +4176,6 @@
"s390x"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4187,9 +4190,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4204,9 +4204,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4481,13 +4478,56 @@
}
},
"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.13",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
+ "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==",
+ "dev": true,
"license": "MIT",
- "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
"engines": {
- "node": ">=10.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@xmldom/xmldom/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@xmldom/xmldom/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@xmldom/xmldom/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/@xtuc/ieee754": {
@@ -4508,8 +4548,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"event-target-shim": "^5.0.0"
},
@@ -4782,14 +4822,14 @@
"license": "MIT"
},
"node_modules/asn1js": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz",
- "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz",
+ "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"pvtsutils": "^1.3.6",
- "pvutils": "^1.1.3",
+ "pvutils": "^1.1.5",
"tslib": "^2.8.1"
},
"engines": {
@@ -4918,14 +4958,14 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz",
- "integrity": "sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==",
+ "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.7",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -4933,13 +4973,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz",
- "integrity": "sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==",
+ "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.7",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"core-js-compat": "^3.48.0"
},
"peerDependencies": {
@@ -4947,13 +4987,13 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz",
- "integrity": "sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==",
+ "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.7"
+ "@babel/helper-define-polyfill-provider": "^0.6.8"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -5014,6 +5054,7 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -5031,9 +5072,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.7",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.7.tgz",
- "integrity": "sha512-1ghYO3HnxGec0TCGBXiDLVns4eCSx4zJpxnHrlqFQajmhfKMQBzUGDdkMK7fUW7PTHTeLf+j87aTuKuuwWzMGw==",
+ "version": "2.10.21",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz",
+ "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5334,9 +5375,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": [
{
@@ -5354,11 +5395,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"
@@ -5381,6 +5422,7 @@
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -5396,7 +5438,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
@@ -5460,15 +5501,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": {
@@ -5541,9 +5582,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001778",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001778.tgz",
- "integrity": "sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==",
+ "version": "1.0.30001790",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz",
+ "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==",
"dev": true,
"funding": [
{
@@ -5565,8 +5606,8 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz",
"integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==",
+ "dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"canonicalize": "bin/canonicalize.js"
}
@@ -5961,6 +6002,40 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/copy-webpack-plugin": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz",
+ "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob-parent": "^6.0.1",
+ "normalize-path": "^3.0.0",
+ "schema-utils": "^4.2.0",
+ "serialize-javascript": "^7.0.3",
+ "tinyglobby": "^0.2.12"
+ },
+ "engines": {
+ "node": ">= 20.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/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/core-js": {
"version": "3.47.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz",
@@ -5974,9 +6049,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": {
@@ -6594,9 +6669,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.313",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz",
- "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==",
+ "version": "1.5.344",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz",
+ "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==",
"dev": true,
"license": "ISC"
},
@@ -6654,14 +6729,14 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.20.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz",
- "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz",
+ "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.3.0"
+ "tapable": "^2.3.3"
},
"engines": {
"node": ">=10.13.0"
@@ -7022,8 +7097,8 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -7039,6 +7114,7 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.x"
@@ -7369,16 +7445,16 @@
}
},
"node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
"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": [
{
@@ -7776,9 +7852,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7906,9 +7982,9 @@
}
},
"node_modules/html-webpack-plugin": {
- "version": "5.6.6",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz",
- "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==",
+ "version": "5.6.7",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz",
+ "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8128,6 +8204,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -9098,9 +9175,9 @@
}
},
"node_modules/jest-haste-map/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9245,9 +9322,9 @@
}
},
"node_modules/jest-message-util/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9524,9 +9601,9 @@
}
},
"node_modules/jest-util/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9783,8 +9860,8 @@
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/jsonld/-/jsonld-9.0.0.tgz",
"integrity": "sha512-pjMIdkXfC1T2wrX9B9i2uXhGdyCmgec3qgMht+TDj+S0qX3bjWMQUfL7NeqEhuRTi8G5ESzmL9uGlST7nzSEWg==",
+ "dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@digitalbazaar/http-client": "^4.2.0",
"canonicalize": "^2.1.0",
@@ -9799,8 +9876,8 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -9812,8 +9889,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "license": "ISC",
- "peer": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/keyv": {
"version": "4.5.4",
@@ -9839,8 +9916,8 @@
"version": "1.14.2",
"resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz",
"integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -9849,9 +9926,9 @@
}
},
"node_modules/launch-editor": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.1.tgz",
- "integrity": "sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==",
+ "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": {
@@ -9890,6 +9967,40 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lit": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz",
+ "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit/reactive-element": "^2.1.0",
+ "lit-element": "^4.2.0",
+ "lit-html": "^3.3.0"
+ }
+ },
+ "node_modules/lit-element": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz",
+ "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.5.0",
+ "@lit/reactive-element": "^2.1.0",
+ "lit-html": "^3.3.0"
+ }
+ },
+ "node_modules/lit-html": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz",
+ "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
"node_modules/loader-runner": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
@@ -9921,9 +10032,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"
},
@@ -10043,20 +10154,20 @@
}
},
"node_modules/memfs": {
- "version": "4.56.11",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.11.tgz",
- "integrity": "sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==",
+ "version": "4.57.2",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.2.tgz",
+ "integrity": "sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.56.11",
- "@jsonjoy.com/fs-fsa": "4.56.11",
- "@jsonjoy.com/fs-node": "4.56.11",
- "@jsonjoy.com/fs-node-builtins": "4.56.11",
- "@jsonjoy.com/fs-node-to-fsa": "4.56.11",
- "@jsonjoy.com/fs-node-utils": "4.56.11",
- "@jsonjoy.com/fs-print": "4.56.11",
- "@jsonjoy.com/fs-snapshot": "4.56.11",
+ "@jsonjoy.com/fs-core": "4.57.2",
+ "@jsonjoy.com/fs-fsa": "4.57.2",
+ "@jsonjoy.com/fs-node": "4.57.2",
+ "@jsonjoy.com/fs-node-builtins": "4.57.2",
+ "@jsonjoy.com/fs-node-to-fsa": "4.57.2",
+ "@jsonjoy.com/fs-node-utils": "4.57.2",
+ "@jsonjoy.com/fs-print": "4.57.2",
+ "@jsonjoy.com/fs-snapshot": "4.57.2",
"@jsonjoy.com/json-pack": "^1.11.0",
"@jsonjoy.com/util": "^1.9.0",
"glob-to-regex.js": "^1.0.1",
@@ -10246,8 +10357,8 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/n3/-/n3-2.0.3.tgz",
"integrity": "sha512-um/toGVENTarHBYIK2TdH6ByBhW75WpdKpv8iTYt9wF2QfBk8s8a16iaWZFUAAC1BKfGdb99kfgx6pltdDwfKA==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"buffer": "^6.0.3",
"readable-stream": "^4.0.0"
@@ -10330,6 +10441,7 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
@@ -10350,18 +10462,21 @@
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/node-fetch/node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true,
"license": "BSD-2-Clause"
},
"node_modules/node-fetch/node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
@@ -10406,9 +10521,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.38",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
+ "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
"dev": true,
"license": "MIT"
},
@@ -10790,9 +10905,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==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -10970,9 +11085,9 @@
"license": "ISC"
},
"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"
},
@@ -11002,9 +11117,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11094,9 +11209,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": {
@@ -11135,9 +11250,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
- "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "version": "8.5.10",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
+ "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
"dev": true,
"funding": [
{
@@ -11300,6 +11415,7 @@
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
@@ -11413,9 +11529,9 @@
}
},
"node_modules/qs": {
- "version": "6.15.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
- "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
+ "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": {
@@ -11501,8 +11617,8 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-5.0.0.tgz",
"integrity": "sha512-g8OUrgMXAR9ys/ZuJVfBr05sPPoMA7nHIVs8VEvg9QwM5W4GR2qSFEEHjsyHF1eWlBaf8Ev40WNjQFQ+nJTO3w==",
+ "dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"setimmediate": "^1.0.5"
},
@@ -11514,8 +11630,8 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/rdflib/-/rdflib-2.3.6.tgz",
"integrity": "sha512-Hf2bz+wv0bVtq5Ark9/TcZdcieMPsdiYGRlZIEk8t0nti2suUn+8k82Uq8ceUqbg0SXreYCF31A1CaJP/Iq+jA==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.28.6",
"@frogcat/ttl2jsonld": "^0.0.10",
@@ -11531,8 +11647,8 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
"integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"node-fetch": "^2.7.0"
}
@@ -11548,8 +11664,8 @@
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
"integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
@@ -11640,9 +11756,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": {
@@ -11727,12 +11843,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"
@@ -11891,6 +12008,7 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -12223,6 +12341,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/setprototypeof": {
@@ -12323,14 +12442,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"
@@ -12444,20 +12563,22 @@
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/solid-namespace/-/solid-namespace-0.5.4.tgz",
"integrity": "sha512-oPAv8xIg2MOLz069JRdvsSbYCpQN+umPJJ9LBFPzCrYuSw+dW4TMUOTDxTWS5xy+B3XN4+Fx3iIS5Jm8abm4Mg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/solid-ui": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-3.0.5.tgz",
- "integrity": "sha512-/SUDQvnSEpwTI2R5T2w4K0UoEMXPjNXwcdFTE/a37S+VqP/0qCbFHHGyncp3AiUOjbNo18R+y/F0T8/7+Q02IA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-3.1.0.tgz",
+ "integrity": "sha512-IKNooyEcJ3IduJqGCw24UC0xPpCCQZVFXzlPC8jcicO7R2FM9GHgwVhpeDTRDl5E/KpoC+h6HCVxGqd/qkfMag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@noble/curves": "^2.0.1",
"@noble/hashes": "^2.0.1",
"escape-html": "^1.0.3",
+ "lit": "^3.3.2",
"mime-types": "^3.0.2",
- "pane-registry": "^3.0.2",
+ "pane-registry": "^3.1.0",
"solid-namespace": "^0.5.4",
"uuid": "^13.0.0"
},
@@ -12659,6 +12780,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
@@ -12888,9 +13010,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.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12902,9 +13024,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.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz",
+ "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -12921,9 +13043,9 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz",
- "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz",
+ "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13041,9 +13163,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": {
@@ -13077,6 +13199,54 @@
"node": ">=0.6.0"
}
},
+ "node_modules/tinyglobby": {
+ "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.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tldts": {
"version": "6.1.86",
"resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
@@ -13308,11 +13478,11 @@
}
},
"node_modules/undici": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz",
- "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==",
+ "version": "6.24.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.0.tgz",
+ "integrity": "sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA==",
+ "dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18.17"
}
@@ -13321,6 +13491,7 @@
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
@@ -13616,9 +13787,9 @@
}
},
"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.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz",
+ "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13638,9 +13809,8 @@
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.3.1",
- "mime-types": "^2.1.27",
+ "mime-db": "^1.54.0",
"neo-async": "^2.6.2",
"schema-utils": "^4.3.3",
"tapable": "^2.3.0",
@@ -13821,38 +13991,15 @@
}
},
"node_modules/webpack-sources": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
- "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.0.tgz",
+ "integrity": "sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/webpack/node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
diff --git a/package.json b/package.json
index 8f73f0c..aefab7c 100644
--- a/package.json
+++ b/package.json
@@ -1,15 +1,20 @@
{
"name": "source-pane",
- "version": "3.0.2",
+ "version": "3.1.0",
"description": "Solid-compatible Panes: Source editor",
- "main": "src/sourcePane.js",
+ "main": "lib/source-pane.js",
"files": [
- "/src",
+ "/lib",
"README.md",
"LICENSE"
],
+ "sideEffects": [
+ "**/*.css"
+ ],
"scripts": {
- "build": "echo nothing to build",
+ "clean": "rm -rf lib",
+ "build": "npm run clean && npm run build-dist",
+ "build-dist": "webpack --progress",
"lint": "eslint",
"lint-fix": "eslint --fix",
"test": "jest --no-coverage",
@@ -43,15 +48,16 @@
"homepage": "https://github.com/SolidOS/source-pane",
"peerDependencies": {
"rdflib": "^2.3.6",
- "solid-logic": "^4.0.2",
- "solid-ui": "^3.0.3"
+ "solid-logic": "^4.0.6",
+ "solid-ui": "^3.1.0"
},
"devDependencies": {
- "@babel/preset-env": "^7.28.6",
"@babel/eslint-parser": "^7.28.6",
+ "@babel/preset-env": "^7.28.6",
"@testing-library/dom": "^10.4.1",
"babel-loader": "^10.0.0",
"babel-plugin-inline-import": "^3.0.0",
+ "copy-webpack-plugin": "^14.0.0",
"css-loader": "^7.1.2",
"eslint": "^9.39.2",
"html-webpack-plugin": "^5.6.6",
@@ -59,9 +65,11 @@
"jest-environment-jsdom": "^30.2.0",
"jest-fetch-mock": "^3.0.3",
"node-polyfill-webpack-plugin": "^4.1.0",
+ "rdflib": "^2.3.6",
"solid-logic": "^4.0.6",
- "solid-ui": "^3.0.5",
+ "solid-ui": "^3.1.0",
"style-loader": "^3.3.3",
+ "terser-webpack-plugin": "^5.4.0",
"webpack": "^5.97.1",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.3"
diff --git a/src/sourcePane.js b/src/sourcePane.js
index 86dda7f..cb7d038 100644
--- a/src/sourcePane.js
+++ b/src/sourcePane.js
@@ -7,6 +7,7 @@
import * as $rdf from 'rdflib'
import * as UI from 'solid-ui'
import * as mime from 'mime-types'
+import './styles/sourcePane.css'
const pane = {
icon: UI.icons.iconBase + 'noun_109873.svg', // noun_109873_51A7F9.svg
@@ -82,8 +83,6 @@ const pane = {
const dom = context.dom
const kb = context.session.store
const fetcher = kb.fetcher
- const editStyle =
- 'font-family: monospace; font-size: 100%; min-width:60em; margin: 1em 0.2em 1em 0.2em; padding: 1em; border: 0.1em solid #888; border-radius: 0.5em;'
let readonly = true
let editing = false
let broken = false
@@ -93,13 +92,16 @@ const pane = {
const div = dom.createElement('div')
div.setAttribute('class', 'sourcePane')
const table = div.appendChild(dom.createElement('table'))
+ table.setAttribute('class', 'sourcePaneTable')
const main = table.appendChild(dom.createElement('tr'))
+ main.setAttribute('class', 'sourcePaneMainCell')
const statusRow = table.appendChild(dom.createElement('tr'))
+ statusRow.setAttribute('class', 'sourcePaneStatusRow')
const controls = table.appendChild(dom.createElement('tr'))
- controls.setAttribute('style', 'text-align: right;')
+ controls.setAttribute('class', 'sourcePaneControls sourcePaneControlsCell')
const textArea = main.appendChild(dom.createElement('textarea'))
- textArea.setAttribute('style', editStyle)
+ textArea.setAttribute('class', 'sourcePaneTextArea')
function editButton (dom) {
return UI.widgets.button(
@@ -120,40 +122,59 @@ const pane = {
}
const myCompactButton = controls.appendChild(compactButton(dom))
+ myCompactButton.classList.add('sourcePaneCompactButton')
const cancelButton = controls.appendChild(UI.widgets.cancelButton(dom))
const saveButton = controls.appendChild(UI.widgets.continueButton(dom))
+
+ // This code was generated by Generative AI (GPT-5.3-Codex in GitHub Copilot) based on the following prompt:
+ /* can you refactor this code setUnedited () to use css instead of inline js styles */
+ function setControlVisible (button, visible) {
+ button.classList.toggle('sourcePaneControlVisible', visible)
+ button.classList.toggle('sourcePaneControlHidden', !visible)
+ }
+
+ function setTextState (stateClass) {
+ textArea.classList.remove(
+ 'sourcePaneTextAreaUnedited',
+ 'sourcePaneTextAreaEditing',
+ 'sourcePaneTextAreaEdited',
+ 'sourcePaneTextAreaError'
+ )
+ textArea.classList.add(stateClass)
+ }
const myEditButton = controls.appendChild(editButton(dom))
function setUnedited () {
if (broken) return
editing = false
- myEditButton.style.visibility = subject.uri.endsWith('/') ? 'collapse' : 'visible'
- textArea.style.color = '#888'
- cancelButton.style.visibility = 'visible'
- saveButton.style.visibility = 'collapse'
- myCompactButton['style'] = 'visibility: visible; width: 100px; padding: 10.2px; transform: translate(0, -30%)'
- if (!compactable[contentType.split(';')]) { myCompactButton.style.visibility = 'collapse' }
+ setControlVisible(myEditButton, !readonly && !subject.uri.endsWith('/'))
+ setControlVisible(cancelButton, true)
+ setControlVisible(saveButton, false)
+ setControlVisible(myCompactButton, !!(contentType && compactable[contentType.split(';')[0]]))
+ setTextState('sourcePaneTextAreaUnedited')
textArea.setAttribute('readonly', 'true')
}
function setEditable () {
if (broken) return
editing = true
- textArea.style.color = 'black'
- cancelButton.style.visibility = 'visible' // not logically needed but may be comforting
- saveButton.style.visibility = 'collapse'
- myEditButton.style.visibility = 'collapse'
- myCompactButton.style.visibility = 'collapse' // do not allow compact while editing
+ setControlVisible(cancelButton, true) // not logically needed but may be comforting
+ setControlVisible(saveButton, false)
+ setControlVisible(myEditButton, false)
+ setControlVisible(myCompactButton, false) // do not allow compact while editing
+ setTextState('sourcePaneTextAreaEditing')
textArea.removeAttribute('readonly')
}
function setEdited (_event) {
if (broken || !editing) return
- textArea.style.color = 'green'
- cancelButton.style.visibility = 'visible'
- saveButton.style.visibility = 'visible'
- myEditButton.style.visibility = 'collapse'
- myCompactButton.style.visibility = 'collapse'
+ setControlVisible(cancelButton, true)
+ setControlVisible(saveButton, true)
+ setControlVisible(myEditButton, false)
+ setControlVisible(myCompactButton, false)
+ setTextState('sourcePaneTextAreaEdited')
textArea.removeAttribute('readonly')
}
+ // end of generative ai refactor
+
const parseable = {
'text/n3': true,
'text/turtle': true,
@@ -264,7 +285,7 @@ const pane = {
const data = textArea.value
if (!checkSyntax(data, contentType, subject)) {
setEdited() // failed to save -> different from web
- textArea.style.color = 'red'
+ setTextState('sourcePaneTextAreaError')
return
}
const options = { data, contentType }
@@ -309,7 +330,7 @@ const pane = {
// for jsonld serialize which is a Promise. New rdflib
const serialized = Promise.resolve($rdf.serialize(kb.sym(subject.uri), kb, subject.uri, contentType))
serialized.then(result => { textArea.value = result /*return div*/ })
- cancelButton.style.visibility = 'visible'
+ setControlVisible(cancelButton, true)
} catch (e) {
statusRow.appendChild(UI.widgets.errorMessageBlock(dom, e))
}
@@ -372,7 +393,6 @@ const pane = {
return // Never mis-represent the contents of the file.
}
textArea.rows = desc.split('\n').length + 2
- textArea.cols = 80
textArea.value = desc
getResponseHeaders (response)
@@ -387,7 +407,6 @@ const pane = {
)
return
}
- setUnedited()
// console.log(' source content-type ' + contentType)
// let allowed = response.headers['allow']
if (!allowed) {
@@ -396,7 +415,7 @@ const pane = {
} else {
readonly = allowed.indexOf('PUT') < 0 // In future more info re ACL allow?
}
- textArea.readonly = readonly
+ setUnedited()
})
.catch(err => {
div.appendChild(
diff --git a/src/styles/sourcePane.css b/src/styles/sourcePane.css
new file mode 100644
index 0000000..5e346b0
--- /dev/null
+++ b/src/styles/sourcePane.css
@@ -0,0 +1,107 @@
+.sourcePane {
+ width: 100%;
+ max-width: 100%;
+}
+
+.sourcePaneControls {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 0.4rem;
+ flex-wrap: wrap;
+ width: 100%;
+ padding-right: 1.6em;
+ text-align: right;
+}
+/* generative ai */
+.sourcePaneControls > * {
+ flex: 0 1 auto;
+}
+
+.sourcePaneTable {
+ width: 100%;
+ table-layout: fixed;
+}
+
+.sourcePaneControlsCell {
+ width: 100%;
+ text-align: right;
+ padding: 0 0.2em var(--spacing-md, 1em) 0;
+}
+
+.sourcePaneMainCell,
+.sourcePaneStatusRow {
+ width: 100%;
+}
+
+.sourcePaneTextArea {
+ box-sizing: border-box;
+ width: 100%;
+ max-width: 100%;
+ min-width: 0;
+ font-family: monospace;
+ font-size: 100%;
+ margin: var(--spacing-md, 1em) 0.2em;
+ padding: var(--spacing-md, 1em);
+ border: 0.1em solid #888;
+ border-radius: var(--border-radius-base, 0.5em);
+ resize: vertical;
+}
+
+.sourcePaneCompactButton {
+ box-sizing: border-box;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 6rem;
+ padding: var(--spacing-xs, 0.55rem) var(--spacing-md, 0.9rem);
+ line-height: 1.2;
+ white-space: nowrap;
+}
+
+@media (max-width: 900px) {
+ .sourcePaneControls {
+ padding-right: 0.2em;
+ }
+
+ .sourcePaneTextArea {
+ margin: var(--spacing-sm, 0.75em) 0.1em;
+ padding: var(--spacing-sm, 0.75em);
+ }
+}
+
+@media (max-width: 600px) {
+ .sourcePaneControls {
+ justify-content: flex-start;
+ gap: 0.3rem;
+ }
+
+ .sourcePaneCompactButton {
+ min-width: 0;
+ }
+}
+
+/* generative ai */
+.sourcePaneTextAreaUnedited {
+ color: #888;
+}
+
+.sourcePaneTextAreaEditing {
+ color: black;
+}
+
+.sourcePaneTextAreaEdited {
+ color: green;
+}
+
+.sourcePaneTextAreaError {
+ color: red;
+}
+
+.sourcePaneControlVisible {
+ display: block;
+}
+
+.sourcePaneControlHidden {
+ display: none;
+}
diff --git a/test/__mocks__/styleMock.js b/test/__mocks__/styleMock.js
new file mode 100644
index 0000000..eac7ad6
--- /dev/null
+++ b/test/__mocks__/styleMock.js
@@ -0,0 +1 @@
+module.exports = {}
diff --git a/test/helpers/jest.setup.js b/test/helpers/jest.setup.js
index af9dc5b..09fb287 100644
--- a/test/helpers/jest.setup.js
+++ b/test/helpers/jest.setup.js
@@ -5,4 +5,10 @@ const { TextEncoder, TextDecoder } = require('util')
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder
+const $rdf = require('rdflib')
+const SolidLogic = require('solid-logic')
+
+global.$rdf = $rdf
+global.SolidLogic = SolidLogic
+
fetchMock.enableMocks();
diff --git a/test/sourcePane.test.js b/test/sourcePane.test.js
index 2c3cbe3..8f0d2e1 100644
--- a/test/sourcePane.test.js
+++ b/test/sourcePane.test.js
@@ -1,5 +1,6 @@
const { context, doc, subject } = require('./helpers/setup')
-const pane = require('../src/sourcePane').default
+const paneModule = require('../src/sourcePane')
+const pane = paneModule.default || paneModule
const { findByText, fireEvent, getByTitle, waitFor } = require('@testing-library/dom')
const fetchMock = require('jest-fetch-mock')
const { parse, sym } = require('rdflib')
diff --git a/webpack.config.mjs b/webpack.config.mjs
new file mode 100644
index 0000000..2f7a441
--- /dev/null
+++ b/webpack.config.mjs
@@ -0,0 +1,106 @@
+import path from 'path'
+import { moduleRules } from './webpack.module.rules.mjs'
+import { createRequire } from 'module'
+import TerserPlugin from 'terser-webpack-plugin'
+import CopyPlugin from 'copy-webpack-plugin'
+
+const require = createRequire(import.meta.url)
+
+const common = {
+ mode: 'production',
+ entry: './src/sourcePane.js',
+ module: {
+ rules: moduleRules,
+ },
+ externals: {
+ 'solid-ui': {
+ commonjs: 'solid-ui',
+ commonjs2: 'solid-ui',
+ amd: 'solid-ui',
+ root: 'UI',
+ },
+ 'solid-logic': {
+ commonjs: 'solid-logic',
+ commonjs2: 'solid-logic',
+ amd: 'solid-logic',
+ root: 'SolidLogic',
+ },
+ rdflib: {
+ commonjs: 'rdflib',
+ commonjs2: 'rdflib',
+ amd: 'rdflib',
+ root: '$rdf',
+ },
+ },
+ resolve: {
+ extensions: ['.js', '.ts'],
+ fallback: {
+ path: require.resolve('path-browserify')
+ },
+ },
+ devtool: 'source-map',
+}
+
+const normalConfig = {
+ ...common,
+ mode: 'production',
+ output: {
+ path: path.resolve(process.cwd(), 'lib'),
+ filename: 'source-pane.js',
+ library: {
+ type: 'umd',
+ name: 'SourcePane',
+ export: 'default',
+ },
+ globalObject: 'this',
+ clean: true,
+ },
+ plugins: [
+ ...(common.plugins || []),
+ new CopyPlugin({
+ patterns: [
+ {
+ from: path.resolve('src/styles'),
+ to: path.resolve('lib/styles'),
+ },
+ ],
+ }),
+ ],
+ optimization: {
+ minimize: false,
+ }
+}
+
+const minConfig = {
+ ...common,
+ mode: 'production',
+ output: {
+ path: path.resolve(process.cwd(), 'lib'),
+ filename: 'source-pane.min.js',
+ library: {
+ type: 'umd',
+ name: 'SourcePane',
+ export: 'default',
+ },
+ globalObject: 'this',
+ clean: false,
+ },
+ plugins: [
+ ...(common.plugins || []),
+ ],
+ optimization: {
+ minimize: true,
+ minimizer: [
+ new TerserPlugin({
+ terserOptions: {
+ format: {
+ comments: false,
+ },
+ },
+ extractComments: false,
+ })
+ ],
+ }
+}
+
+export default [normalConfig, minConfig]