diff --git a/package.json b/package.json index cea4e05fb9ffb136a5d5f534e9d5ce3965350ec1..63eaa2a4529502e13211e85154025b5bc0aede0b 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@biomejs/biome": "1.3.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@peculiar/webcrypto": "^1.4.5", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "browserslist": "^4.23.0", "btoa": "^1.2.1", "c8": "^8.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec6eaaaf28e46406c1998a9221c3c8c1ec912c9f..175a35ceafcc8e9afb0244181a50cd5c05941f20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,8 +26,8 @@ devDependencies: specifier: ^1.4.5 version: 1.4.5 autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.35) + specifier: ^10.4.18 + version: 10.4.18(postcss@8.4.35) browserslist: specifier: ^4.23.0 version: 4.23.0 @@ -183,7 +183,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@babel/code-frame@7.23.5: @@ -228,7 +228,7 @@ packages: dependencies: '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true @@ -919,7 +919,7 @@ packages: dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/resolve-uri@3.1.2: @@ -936,15 +936,15 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.24: - resolution: {integrity: sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -967,8 +967,8 @@ packages: - '@types/node' dev: true - /@microsoft/api-extractor@7.42.1(@types/node@18.19.21): - resolution: {integrity: sha512-eswRJCfiscDDcgu+0DPBdpYKRCVXaeFOOp9h4Y4ixoCCeGoEwgNi/P9zp39O+61pLWxZ3pAShTY0pe8vw5LtrQ==} + /@microsoft/api-extractor@7.42.3(@types/node@18.19.21): + resolution: {integrity: sha512-JNLJFpGHz6ekjS6bvYXxUBeRGnSHeCMFNvRbCQ+7XXB/ZFrgLSMPwWtEq40AiWAy+oyG5a4RSNwdJTp0B2USvQ==} hasBin: true dependencies: '@microsoft/api-extractor-model': 7.28.13(@types/node@18.19.21) @@ -977,7 +977,7 @@ packages: '@rushstack/node-core-library': 4.0.2(@types/node@18.19.21) '@rushstack/rig-package': 0.5.2 '@rushstack/terminal': 0.10.0(@types/node@18.19.21) - '@rushstack/ts-command-line': 4.18.1(@types/node@18.19.21) + '@rushstack/ts-command-line': 4.19.1(@types/node@18.19.21) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -1144,8 +1144,8 @@ packages: supports-color: 8.1.1 dev: true - /@rushstack/ts-command-line@4.18.1(@types/node@18.19.21): - resolution: {integrity: sha512-A3x3ARWzoW4ARU1XS87wFVJvdywzo2j27aRm5SIFY3Nwl5vQqo0hvzaQDYCq/hEGBxAdBGW8q6N5clNk36H34A==} + /@rushstack/ts-command-line@4.19.1(@types/node@18.19.21): + resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} dependencies: '@rushstack/terminal': 0.10.0(@types/node@18.19.21) '@types/argparse': 1.0.38 @@ -1155,43 +1155,43 @@ packages: - '@types/node' dev: true - /@sentry-internal/tracing@7.104.0: - resolution: {integrity: sha512-2z7OijM1J5ndJUiJJElC3iH9qb/Eb8eYm2v8oJhM8WVdc5uCKfrQuYHNgGOnmY2FOCfEUlTmMQGpDw7DJ67L5w==} + /@sentry-internal/tracing@7.105.0: + resolution: {integrity: sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.104.0 - '@sentry/types': 7.104.0 - '@sentry/utils': 7.104.0 + '@sentry/core': 7.105.0 + '@sentry/types': 7.105.0 + '@sentry/utils': 7.105.0 dev: true - /@sentry/core@7.104.0: - resolution: {integrity: sha512-XPndD6IGQGd07/EntvYVzOWQUo/Gd7L3DwYFeEKeBv6ByWjbBNmVZFRhU0GPPsCHKyW9yMU9OO9diLSS4ijsRg==} + /@sentry/core@7.105.0: + resolution: {integrity: sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.104.0 - '@sentry/utils': 7.104.0 + '@sentry/types': 7.105.0 + '@sentry/utils': 7.105.0 dev: true - /@sentry/node@7.104.0: - resolution: {integrity: sha512-Ixt8qg6IV8gywi4+H1cAtQeglAAww2nwLHybCxAvnu3czdF8w7ifF+o5BY1FmO5UYVCAfr8vEb+XG4CuRrFb7g==} + /@sentry/node@7.105.0: + resolution: {integrity: sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.104.0 - '@sentry/core': 7.104.0 - '@sentry/types': 7.104.0 - '@sentry/utils': 7.104.0 + '@sentry-internal/tracing': 7.105.0 + '@sentry/core': 7.105.0 + '@sentry/types': 7.105.0 + '@sentry/utils': 7.105.0 dev: true - /@sentry/types@7.104.0: - resolution: {integrity: sha512-5bs0xe0+GZR4QBm9Nrqw59o0sv3kBtCosrZDVxBru/dQbrfnB+/kVorvuM0rV3+coNITTKcKDegSZmK1d2uOGQ==} + /@sentry/types@7.105.0: + resolution: {integrity: sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA==} engines: {node: '>=8'} dev: true - /@sentry/utils@7.104.0: - resolution: {integrity: sha512-ZVg+xZirI9DlOi0NegNVocswdh/8p6QkzlQzDQY2LP2CC6JQdmwi64o0S4rPH4YIHNKQJTpIjduoxeKgd1EO5g==} + /@sentry/utils@7.105.0: + resolution: {integrity: sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.104.0 + '@sentry/types': 7.105.0 dev: true /@sinonjs/commons@2.0.0: @@ -1498,15 +1498,15 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.17(postcss@8.4.35): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + /autoprefixer@10.4.18(postcss@8.4.35): + resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001594 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1685,8 +1685,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001591 - electron-to-chromium: 1.4.689 + caniuse-lite: 1.0.30001594 + electron-to-chromium: 1.4.692 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -1783,13 +1783,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001594 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001591: - resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} + /caniuse-lite@1.0.30001594: + resolution: {integrity: sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==} dev: true /caseless@0.12.0: @@ -2133,7 +2133,7 @@ packages: execa: 7.2.0 polyfill-library: 4.8.0 semver: 7.6.0 - snyk: 1.1281.0 + snyk: 1.1282.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -2558,8 +2558,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.689: - resolution: {integrity: sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==} + /electron-to-chromium@1.4.692: + resolution: {integrity: sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA==} dev: true /element-internals-polyfill@1.3.10: @@ -5710,13 +5710,13 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true - /snyk@1.1281.0: - resolution: {integrity: sha512-I+oVDXOF+nFTpFnRkP985x6xMlXzGzojHsC3F4YeT+NPfsn5mfmnx0NVY4tSXBoENqWGYzBw3M2adeLcbamx4Q==} + /snyk@1.1282.1: + resolution: {integrity: sha512-OaGdI7vscWOgIRLGF0ZzUjoNCyYAhkIz4HfNvII2h7Z11utssa4IS3ytXrnFYWdjgwLjqAQ94yGcSmSt8Clgtg==} engines: {node: '>=12'} hasBin: true requiresBuild: true dependencies: - '@sentry/node': 7.104.0 + '@sentry/node': 7.105.0 global-agent: 3.0.0 dev: true @@ -6255,7 +6255,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -6296,7 +6296,7 @@ packages: peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.42.1(@types/node@18.19.21) + '@microsoft/api-extractor': 7.42.3(@types/node@18.19.21) '@rollup/pluginutils': 5.1.0 '@rushstack/node-core-library': 3.66.1(@types/node@18.19.21) debug: 4.3.4(supports-color@8.1.1) diff --git a/source/components/form/select.mjs b/source/components/form/select.mjs index b52066e31e144c5551ecdc55e130bd3924ec6031..e0b93649fa88563f60ab1e8fbd455ecaa8bb75df 100644 --- a/source/components/form/select.mjs +++ b/source/components/form/select.mjs @@ -376,6 +376,7 @@ class Select extends CustomControl { .catch((e) => { addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message); }); + } /** @@ -559,7 +560,9 @@ class Select extends CustomControl { let lastValue = self.value; self[internalSymbol].attachObserver( + new Observer(function () { + if (isObject(this) && this instanceof ProxyObserver) { const n = this.getSubject()?.options?.value; @@ -1923,7 +1926,9 @@ function setSelection(selection) { } }); } - }).run(); + }).run().catch((e) => { + addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message); + }); } /** diff --git a/source/dom/customcontrol.mjs b/source/dom/customcontrol.mjs index 608aa835cce2fa75a4e62f999c9626abdb2ddb2b..f271a7fa0266df99bba029764c9691c2fd03ba5b 100644 --- a/source/dom/customcontrol.mjs +++ b/source/dom/customcontrol.mjs @@ -320,9 +320,13 @@ class CustomControl extends CustomElement { */ formDisabledCallback(disabled) { if (disabled) { - this.setAttribute("disabled", ""); + if (!this.hasAttribute("disabled")) { + this.setAttribute("disabled", ""); + } } else { - this.removeAttribute("disabled"); + if (this.hasAttribute("disabled")) { + this.removeAttribute("disabled"); + } } } diff --git a/source/dom/updater.mjs b/source/dom/updater.mjs index d3b36ef042b17cf4bbc5660966700313d0827b4d..7b80b813130d150360de5cfde780170017492f1f 100644 --- a/source/dom/updater.mjs +++ b/source/dom/updater.mjs @@ -862,22 +862,14 @@ function handleInputControlAttributeUpdate(element, name, value) { switch (element.type) { case "radio": if (name === "checked") { - if (value !== undefined) { - element.checked = true; - } else { - element.checked = false; - } + element.checked = value !== undefined; } break; case "checkbox": if (name === "checked") { - if (value !== undefined) { - element.checked = true; - } else { - element.checked = false; - } + element.checked = value !== undefined; } break; diff --git a/test/cases/dom/customcontrol.mjs b/test/cases/dom/customcontrol.mjs index fb091a0f528a4e712722008b1e3c81547823a776..b7b0bb18a6352bb4817df2b6513b5d4bf5da01bf 100644 --- a/test/cases/dom/customcontrol.mjs +++ b/test/cases/dom/customcontrol.mjs @@ -19,7 +19,7 @@ describe('DOM', function () { let CustomControl, registerCustomElement, TestComponent, document, jsdomFlag; before(function (done) { - initJSDOM().then(() => { + initJSDOM({}).then(() => { import("element-internals-polyfill").then((m) => { m.polyfill(); @@ -29,7 +29,7 @@ describe('DOM', function () { jsdomFlag = navigator.userAgent.includes("jsdom"); import("../../../source/dom/customelement.mjs").then((m) => { - + registerCustomElement = m['registerCustomElement']; @@ -55,10 +55,47 @@ describe('DOM', function () { }); }).catch((e) => { done(e); - } ); + }); + }); + }) + + describe('formDisabledCallback()', function () { + + let element + + beforeEach(() => { + try { + const TestComponent2 = class extends CustomControl { + static getTag() { + return "monster-customcontrol2" + } + } + registerCustomElement(TestComponent2) + } catch (e) { + expect(e).to.be.not.null; + } + + element = document.createElement('monster-customcontrol2'); + + }) + + afterEach(() => { + //expect(element).to.be.not.null; + }) + + it('should return undefined', function () { + expect(element.formDisabledCallback()).to.be.undefined; + expect(element.hasAttribute('disabled')).to.be.false; + expect(element.formDisabledCallback(true)).to.be.undefined; + expect(element.hasAttribute('disabled')).to.be.true; + const d = element.getAttribute('disabled'); + expect(d).to.not.be.null; + }); + }) + describe('CustomControl()', function () { beforeEach(() => { @@ -76,13 +113,16 @@ describe('DOM', function () { describe('create', function () { it('should return custom-element object', function () { + let d try { - let d = new TestComponent(); + d = new TestComponent(); } catch (e) { - expect(e).to.be.not.null; + expect(e).to.be.null; } - expect(typeof d).is.equal('undefined'); + console.log(typeof d,"ssss"); + expect(typeof d).is.equal('object'); + }); }); @@ -91,7 +131,7 @@ describe('DOM', function () { let d = document.createElement('monster-customcontrol'); document.getElementById('test1').appendChild(d); - + expect(document.getElementsByTagName('monster-customcontrol').length).is.equal(1); // no data-monster-objectlink="Symbol(monsterUpdater)" because it has nothing to update expect(document.getElementById('test1')).contain.html('<monster-customcontrol data-monster-error="Error: html is not set."></monster-customcontrol>') @@ -172,7 +212,7 @@ describe('DOM', function () { let d = document.createElement('monster-customcontrol'); form.appendChild(d); - + }); it('name getter', function () {