diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a1747a..10bb639 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.3.0] - 2026-09-11 + +### Changed + +- Move the `@askrjs/askr` peer range and the `@askrjs/vite` dependency to + `>=0.3.0 <0.4.0` for the coordinated 0.3.0 release. No component API changes. + ## [0.2.4] - 2026-08-28 ### Added diff --git a/README.md b/README.md index 022f5d5..82452c1 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ For the full surface and composition examples, start with the docs above. ## Themes catalog boundary -`@askrjs/themes` also publishes styling-only compatibility anatomy for Tabs, +`@askrjs/themes` also publishes styling-only catalog anatomy for Tabs, Combobox, Calendar/DatePicker, Command, NavigationMenu, Carousel, ResizablePanelGroup, and InputOTP. Those names are not `@askrjs/ui` primitives and do not provide widget state, keyboard interaction, focus diff --git a/package-lock.json b/package-lock.json index 8fd6ca5..9bb1f5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@askrjs/ui", - "version": "0.2.4", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@askrjs/ui", - "version": "0.2.4", + "version": "0.3.0", "license": "Apache-2.0", "devDependencies": { - "@askrjs/askr": ">=0.2.3 <0.3.0", - "@askrjs/vite": ">=0.2.1 <0.3.0", + "@askrjs/askr": ">=0.3.0 <0.4.0", + "@askrjs/vite": ">=0.3.0 <0.4.0", "@playwright/test": "1.62.1", "@types/node": "^26.3.0", "axe-core": "^4.13.0", @@ -26,7 +26,7 @@ "node": ">=24.0.0" }, "peerDependencies": { - "@askrjs/askr": ">=0.2.3 <0.3.0" + "@askrjs/askr": ">=0.3.0 <0.4.0" } }, "node_modules/@asamuzakjp/css-color": { @@ -63,43 +63,43 @@ } }, "node_modules/@askrjs/askr": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@askrjs/askr/-/askr-0.2.4.tgz", - "integrity": "sha512-GlXI724dyqlZz1OxVxxO3ZmR+uQ5E1iPBNZAkRbyvdztGSABMf4IFEOtHoOVoT5o7KeNU+XTppsG72TGojIqng==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/askr/-/askr-0.3.0.tgz", + "integrity": "sha512-KfZWB+9biKrEgk4H3JD7m6ARTNDgbDGhAnwWQNhGFGtignPY7L0agDP4TJEowO/rog++0dFSYZ1Wss+tt8hDhw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@askrjs/auth": ">=0.2.1 <0.3.0", - "@askrjs/schema": ">=0.2.1 <0.3.0" + "@askrjs/auth": ">=0.3.0 <0.4.0", + "@askrjs/schema": ">=0.3.0 <0.4.0" }, "engines": { "node": ">=24.0.0" } }, "node_modules/@askrjs/auth": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@askrjs/auth/-/auth-0.2.1.tgz", - "integrity": "sha512-kGFIqQi0KTe1sv2KCiLaiQpISWNpxfvZcmmqsB3nyRUim4sEKuNW1vUrWR6ItDqKmwsaWPycjPU7yQ2ha9lPZg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/auth/-/auth-0.3.0.tgz", + "integrity": "sha512-1w88+zlOvwY8n7fQrQtOPH5WYoSSQHQpPpInkwlOihMDCOIBlAAo913vv1Qs+kXOKCMQLtc3BqMoL2YzpxnQrw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@xmldom/xmldom": "0.9.10", + "@xmldom/xmldom": "0.9.12", "xml-crypto": "6.1.2", - "xml-encryption": "5.0.0" + "xml-encryption": "6.0.1" }, "engines": { "node": ">=24.0.0" } }, "node_modules/@askrjs/node": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@askrjs/node/-/node-0.2.1.tgz", - "integrity": "sha512-3aFMYUgfM7cM50MfypwKgP3rJt1l6UrktZZj82mZ4eqzFkZBIWjbji4DHiY8OzYc0ZnEDiU1wUMNxuBX0UkvsQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/node/-/node-0.3.0.tgz", + "integrity": "sha512-hnqtQcUdpshnaQDlqS/FHKmqfpM2G9Wq4YMQR5LLSeIdjzerI0l4Ua7Gqi2nzu7IEDWWdDUv/rTkP5rI+PqWcQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@askrjs/auth": ">=0.2.0 <0.3.0", - "@askrjs/server": ">=0.2.0 <0.3.0", + "@askrjs/auth": ">=0.3.0 <0.4.0", + "@askrjs/server": ">=0.3.0 <0.4.0", "@types/ws": "^8.18.1", "ws": "^8.21.3" }, @@ -108,9 +108,9 @@ } }, "node_modules/@askrjs/schema": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@askrjs/schema/-/schema-0.2.1.tgz", - "integrity": "sha512-2pd+CBpJomTYHQWajEyF5kVH3U9PrqtoEh1YsoGA0bBoDfERpYISdnrojX7OY5ue9cn2T2/33RnbLnvTv8AGvw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/schema/-/schema-0.3.0.tgz", + "integrity": "sha512-l7oVbZBQE91wPbQTPZU5wISnw8uIrms9OeZDEVdTlZg3JuTvxPuxB7D2WZt8kVj9d35jBLJcXRQkozsLPztR1Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -118,20 +118,20 @@ } }, "node_modules/@askrjs/server": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@askrjs/server/-/server-0.2.1.tgz", - "integrity": "sha512-Gk0nvYdm2OgbjvNFMZ2ooMUAvekqKfDhZ/RqBCWY0goalL5hd7V/yBdVw1uCssn7TLpCXgDowKv73HyONGV2hQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/server/-/server-0.3.0.tgz", + "integrity": "sha512-Bk5ZmANnW45pgeHBgrWnGBz6xXkMQxtOgwGQXdzdCufed1w5IUQCvRvjNDkPQ2Rv/z3NofTF5IYqE/vQL+XPoQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@askrjs/auth": ">=0.2.0 <0.3.0", - "@askrjs/schema": ">=0.2.0 <0.3.0" + "@askrjs/auth": ">=0.3.0 <0.4.0", + "@askrjs/schema": ">=0.3.0 <0.4.0" }, "engines": { "node": ">=24.0.0" }, "peerDependencies": { - "@askrjs/askr": ">=0.2.0 <0.3.0" + "@askrjs/askr": ">=0.3.0 <0.4.0" }, "peerDependenciesMeta": { "@askrjs/askr": { @@ -140,13 +140,13 @@ } }, "node_modules/@askrjs/vite": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@askrjs/vite/-/vite-0.2.2.tgz", - "integrity": "sha512-xScTxWqftad3N/un9LL7yVjawPpxEKNZKG4qq2M0pi3dUWQv+1Tyy2oE+UgJN5e64Bkgq7gY1BYFfr8Th0HwSw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@askrjs/vite/-/vite-0.3.0.tgz", + "integrity": "sha512-mXrF8uxmzn6VwAaHEKSabq98jYOQz+5+ir4+aFcabvnEbHT9ojS4goMIpg4INHm2AMxrZNbfWuskFHkoaGpS+Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@askrjs/node": ">=0.2.1 <0.3.0", + "@askrjs/node": ">=0.3.0 <0.4.0", "oxc-parser": "^0.147.0", "parse5": "^8.0.1" }, @@ -154,7 +154,7 @@ "node": ">=24.0.0" }, "peerDependencies": { - "@askrjs/askr": ">=0.2.3 <0.3.0", + "@askrjs/askr": ">=0.3.0 <0.4.0", "sharp": "^0.35.3", "vite": "^8.2.2", "vite-plus": "^0.3.1" @@ -2621,10 +2621,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.10.tgz", - "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", - "deprecated": "this version has critical issues, please update to the latest version", + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.12.tgz", + "integrity": "sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A==", "dev": true, "license": "MIT", "engines": { @@ -4879,15 +4878,14 @@ } }, "node_modules/xml-encryption": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-5.0.0.tgz", - "integrity": "sha512-9XUEdUcXiim15WsQ37P+z0CD3uTytLoWoGL/PhRqA5ZqmDhKMtiyMJcn1pT1+kBBtCTSqBaiPs+ILdiD7nQuQA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-6.0.1.tgz", + "integrity": "sha512-hQSkWsiOKXxYB8FbSJhe/BRwobEt/lVcxzV699CdH7KLNv2nLEtNvkGkw5UTxYUkPQ3XQs65BvXtRfujJ/1OFA==", "dev": true, "license": "MIT", "dependencies": { "@xmldom/xmldom": "^0.8.13", - "escape-html": "^1.0.3", - "xpath": "0.0.32" + "escape-html": "^1.0.3" } }, "node_modules/xml-encryption/node_modules/@xmldom/xmldom": { @@ -4900,16 +4898,6 @@ "node": ">=10.0.0" } }, - "node_modules/xml-encryption/node_modules/xpath": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", - "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", diff --git a/package.json b/package.json index 8d6c910..658dfc8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@askrjs/ui", - "version": "0.2.4", + "version": "0.3.0", "description": "Headless Askr components", "keywords": [ "accessible", @@ -243,8 +243,8 @@ "test:integrity": "vp test run -c vitest.test.integrity.config.ts" }, "devDependencies": { - "@askrjs/askr": ">=0.2.3 <0.3.0", - "@askrjs/vite": ">=0.2.1 <0.3.0", + "@askrjs/askr": ">=0.3.0 <0.4.0", + "@askrjs/vite": ">=0.3.0 <0.4.0", "@playwright/test": "1.62.1", "@types/node": "^26.3.0", "axe-core": "^4.13.0", @@ -257,7 +257,7 @@ "vite-plus": "^0.3.1" }, "peerDependencies": { - "@askrjs/askr": ">=0.2.3 <0.3.0" + "@askrjs/askr": ">=0.3.0 <0.4.0" }, "engines": { "node": ">=24.0.0" diff --git a/tests/browser/components/textarea/a11y.spec.ts b/tests/browser/components/textarea/a11y.spec.ts index 50126bd..4dd3555 100644 --- a/tests/browser/components/textarea/a11y.spec.ts +++ b/tests/browser/components/textarea/a11y.spec.ts @@ -39,9 +39,11 @@ test.describe('Textarea - Accessibility', () => { expect( await textarea.evaluate((node: HTMLTextAreaElement) => node.disabled) ).toBe(true); + // `disabled` is a boolean attribute: presence is the semantic, and its + // serialized value is the empty string. Assert presence, not a value. await expect(textarea).toHaveAttribute( contract.DISABLED_ATTRIBUTES.asChild, - 'true' + /.*/ ); }); @@ -59,7 +61,7 @@ test.describe('Textarea - Accessibility', () => { ).toBe(true); await expect(host).toHaveAttribute( contract.DISABLED_ATTRIBUTES.asChild, - 'true' + /.*/ ); }); diff --git a/tests/integrity/docs/docs-contract.test.ts b/tests/integrity/docs/docs-contract.test.ts index e60c5d1..f86f920 100644 --- a/tests/integrity/docs/docs-contract.test.ts +++ b/tests/integrity/docs/docs-contract.test.ts @@ -200,7 +200,7 @@ describe('Docs contract', () => { expect(readme, family).toContain(family); } - expect(readme).toContain('styling-only compatibility anatomy'); + expect(readme).toContain('styling-only catalog anatomy'); expect(readme).toContain('do not provide widget state'); expect(readme).toContain('Themes may then compose'); expect(readme).toContain('rather than reproducing its state');